@aceshooting/lyra-ui 2.4.0 → 2.5.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 (307) hide show
  1. package/README.md +32 -3
  2. package/custom-elements.json +505 -87
  3. package/dist/components/app-rail/app-rail-item.class.d.ts.map +1 -1
  4. package/dist/components/app-rail/app-rail-item.class.js +6 -1
  5. package/dist/components/app-rail/app-rail-item.class.js.map +1 -1
  6. package/dist/components/app-rail/app-rail.class.js +1 -1
  7. package/dist/components/app-rail/app-rail.class.js.map +1 -1
  8. package/dist/components/attachment-chip/attachment-chip.class.d.ts.map +1 -1
  9. package/dist/components/attachment-chip/attachment-chip.class.js +13 -5
  10. package/dist/components/attachment-chip/attachment-chip.class.js.map +1 -1
  11. package/dist/components/attachment-trigger/attachment-trigger.class.d.ts +4 -4
  12. package/dist/components/attachment-trigger/attachment-trigger.class.d.ts.map +1 -1
  13. package/dist/components/attachment-trigger/attachment-trigger.class.js +8 -7
  14. package/dist/components/attachment-trigger/attachment-trigger.class.js.map +1 -1
  15. package/dist/components/avatar/avatar.class.d.ts +26 -12
  16. package/dist/components/avatar/avatar.class.d.ts.map +1 -1
  17. package/dist/components/avatar/avatar.class.js +60 -13
  18. package/dist/components/avatar/avatar.class.js.map +1 -1
  19. package/dist/components/avatar/avatar.styles.d.ts.map +1 -1
  20. package/dist/components/avatar/avatar.styles.js +16 -1
  21. package/dist/components/avatar/avatar.styles.js.map +1 -1
  22. package/dist/components/chart/box-plot.class.d.ts.map +1 -1
  23. package/dist/components/chart/box-plot.class.js +26 -14
  24. package/dist/components/chart/box-plot.class.js.map +1 -1
  25. package/dist/components/chart/chart.class.d.ts.map +1 -1
  26. package/dist/components/chart/chart.class.js +21 -6
  27. package/dist/components/chart/chart.class.js.map +1 -1
  28. package/dist/components/chart/histogram.class.d.ts +1 -0
  29. package/dist/components/chart/histogram.class.d.ts.map +1 -1
  30. package/dist/components/chart/histogram.class.js +8 -2
  31. package/dist/components/chart/histogram.class.js.map +1 -1
  32. package/dist/components/chart/lite-chart.class.d.ts +5 -3
  33. package/dist/components/chart/lite-chart.class.d.ts.map +1 -1
  34. package/dist/components/chart/lite-chart.class.js +27 -18
  35. package/dist/components/chart/lite-chart.class.js.map +1 -1
  36. package/dist/components/chart/lite-chart.d.ts +1 -0
  37. package/dist/components/chart/lite-chart.d.ts.map +1 -1
  38. package/dist/components/chart/lite-chart.js +1 -0
  39. package/dist/components/chart/lite-chart.js.map +1 -1
  40. package/dist/components/chart/lite-chart.styles.js +7 -7
  41. package/dist/components/chat-composer/chat-composer.class.js +1 -1
  42. package/dist/components/chat-composer/chat-composer.class.js.map +1 -1
  43. package/dist/components/chat-message/chat-message.class.d.ts +1 -0
  44. package/dist/components/chat-message/chat-message.class.d.ts.map +1 -1
  45. package/dist/components/chat-message/chat-message.class.js +1 -3
  46. package/dist/components/chat-message/chat-message.class.js.map +1 -1
  47. package/dist/components/chat-message/chat-message.styles.d.ts.map +1 -1
  48. package/dist/components/chat-message/chat-message.styles.js +15 -0
  49. package/dist/components/chat-message/chat-message.styles.js.map +1 -1
  50. package/dist/components/checkbox/checkbox.class.d.ts.map +1 -1
  51. package/dist/components/checkbox/checkbox.class.js +1 -1
  52. package/dist/components/checkbox/checkbox.class.js.map +1 -1
  53. package/dist/components/chip/chip-group.class.d.ts +4 -1
  54. package/dist/components/chip/chip-group.class.d.ts.map +1 -1
  55. package/dist/components/chip/chip-group.class.js.map +1 -1
  56. package/dist/components/chip/chip.class.d.ts +31 -13
  57. package/dist/components/chip/chip.class.d.ts.map +1 -1
  58. package/dist/components/chip/chip.class.js +46 -18
  59. package/dist/components/chip/chip.class.js.map +1 -1
  60. package/dist/components/citation-badge/citation-badge.class.d.ts +5 -1
  61. package/dist/components/citation-badge/citation-badge.class.d.ts.map +1 -1
  62. package/dist/components/citation-badge/citation-badge.class.js +15 -12
  63. package/dist/components/citation-badge/citation-badge.class.js.map +1 -1
  64. package/dist/components/code-block/code-block-core.class.d.ts +3 -0
  65. package/dist/components/code-block/code-block-core.class.d.ts.map +1 -1
  66. package/dist/components/code-block/code-block-core.class.js +4 -3
  67. package/dist/components/code-block/code-block-core.class.js.map +1 -1
  68. package/dist/components/code-block/code-block-shared.d.ts +18 -0
  69. package/dist/components/code-block/code-block-shared.d.ts.map +1 -0
  70. package/dist/components/code-block/code-block-shared.js +21 -0
  71. package/dist/components/code-block/code-block-shared.js.map +1 -0
  72. package/dist/components/code-block/code-block.class.d.ts +3 -0
  73. package/dist/components/code-block/code-block.class.d.ts.map +1 -1
  74. package/dist/components/code-block/code-block.class.js +4 -10
  75. package/dist/components/code-block/code-block.class.js.map +1 -1
  76. package/dist/components/code-block/code-block.styles.d.ts.map +1 -1
  77. package/dist/components/code-block/code-block.styles.js +9 -0
  78. package/dist/components/code-block/code-block.styles.js.map +1 -1
  79. package/dist/components/combobox/combobox.class.d.ts +3 -2
  80. package/dist/components/combobox/combobox.class.d.ts.map +1 -1
  81. package/dist/components/combobox/combobox.class.js +15 -13
  82. package/dist/components/combobox/combobox.class.js.map +1 -1
  83. package/dist/components/combobox/combobox.styles.d.ts.map +1 -1
  84. package/dist/components/combobox/combobox.styles.js +3 -0
  85. package/dist/components/combobox/combobox.styles.js.map +1 -1
  86. package/dist/components/context-meter/context-meter.class.d.ts +7 -0
  87. package/dist/components/context-meter/context-meter.class.d.ts.map +1 -1
  88. package/dist/components/context-meter/context-meter.class.js +30 -12
  89. package/dist/components/context-meter/context-meter.class.js.map +1 -1
  90. package/dist/components/conversation-item/conversation-item.class.js +2 -2
  91. package/dist/components/conversation-item/conversation-item.class.js.map +1 -1
  92. package/dist/components/date-picker/date-input.class.d.ts +3 -1
  93. package/dist/components/date-picker/date-input.class.d.ts.map +1 -1
  94. package/dist/components/date-picker/date-input.class.js +16 -9
  95. package/dist/components/date-picker/date-input.class.js.map +1 -1
  96. package/dist/components/date-picker/date-picker.class.d.ts +6 -2
  97. package/dist/components/date-picker/date-picker.class.d.ts.map +1 -1
  98. package/dist/components/date-picker/date-picker.class.js +23 -6
  99. package/dist/components/date-picker/date-picker.class.js.map +1 -1
  100. package/dist/components/date-picker/date-picker.styles.d.ts.map +1 -1
  101. package/dist/components/date-picker/date-picker.styles.js +16 -1
  102. package/dist/components/date-picker/date-picker.styles.js.map +1 -1
  103. package/dist/components/dialog/confirm.d.ts +2 -2
  104. package/dist/components/dialog/confirm.d.ts.map +1 -1
  105. package/dist/components/dialog/confirm.js +10 -7
  106. package/dist/components/dialog/confirm.js.map +1 -1
  107. package/dist/components/diff-view/diff-view.class.d.ts +3 -0
  108. package/dist/components/diff-view/diff-view.class.d.ts.map +1 -1
  109. package/dist/components/diff-view/diff-view.class.js +24 -3
  110. package/dist/components/diff-view/diff-view.class.js.map +1 -1
  111. package/dist/components/dock-panel/dock-panel.class.js +2 -2
  112. package/dist/components/dock-panel/dock-panel.class.js.map +1 -1
  113. package/dist/components/document-preview/document-preview.class.d.ts.map +1 -1
  114. package/dist/components/document-preview/document-preview.class.js +11 -11
  115. package/dist/components/document-preview/document-preview.class.js.map +1 -1
  116. package/dist/components/document-preview/document-preview.styles.d.ts.map +1 -1
  117. package/dist/components/document-preview/document-preview.styles.js +6 -1
  118. package/dist/components/document-preview/document-preview.styles.js.map +1 -1
  119. package/dist/components/export-button/export-button.class.d.ts +17 -1
  120. package/dist/components/export-button/export-button.class.d.ts.map +1 -1
  121. package/dist/components/export-button/export-button.class.js +36 -4
  122. package/dist/components/export-button/export-button.class.js.map +1 -1
  123. package/dist/components/file-input/file-input.class.d.ts +4 -0
  124. package/dist/components/file-input/file-input.class.d.ts.map +1 -1
  125. package/dist/components/file-input/file-input.class.js +16 -6
  126. package/dist/components/file-input/file-input.class.js.map +1 -1
  127. package/dist/components/file-input/file-input.styles.d.ts.map +1 -1
  128. package/dist/components/file-input/file-input.styles.js +0 -7
  129. package/dist/components/file-input/file-input.styles.js.map +1 -1
  130. package/dist/components/gauge/gauge.class.d.ts.map +1 -1
  131. package/dist/components/gauge/gauge.class.js +16 -6
  132. package/dist/components/gauge/gauge.class.js.map +1 -1
  133. package/dist/components/generation-status/generation-status.class.d.ts.map +1 -1
  134. package/dist/components/generation-status/generation-status.class.js +39 -20
  135. package/dist/components/generation-status/generation-status.class.js.map +1 -1
  136. package/dist/components/graph/graph.class.d.ts +10 -0
  137. package/dist/components/graph/graph.class.d.ts.map +1 -1
  138. package/dist/components/graph/graph.class.js +35 -9
  139. package/dist/components/graph/graph.class.js.map +1 -1
  140. package/dist/components/graph/graph.styles.d.ts.map +1 -1
  141. package/dist/components/graph/graph.styles.js +4 -0
  142. package/dist/components/graph/graph.styles.js.map +1 -1
  143. package/dist/components/heatmap/heatmap.class.d.ts +12 -10
  144. package/dist/components/heatmap/heatmap.class.d.ts.map +1 -1
  145. package/dist/components/heatmap/heatmap.class.js +43 -25
  146. package/dist/components/heatmap/heatmap.class.js.map +1 -1
  147. package/dist/components/heatmap/heatmap.styles.js +1 -1
  148. package/dist/components/json-viewer/json-viewer.class.d.ts.map +1 -1
  149. package/dist/components/json-viewer/json-viewer.class.js +20 -5
  150. package/dist/components/json-viewer/json-viewer.class.js.map +1 -1
  151. package/dist/components/kbd/kbd.class.d.ts +13 -3
  152. package/dist/components/kbd/kbd.class.d.ts.map +1 -1
  153. package/dist/components/kbd/kbd.class.js +57 -33
  154. package/dist/components/kbd/kbd.class.js.map +1 -1
  155. package/dist/components/map/map.class.d.ts +4 -0
  156. package/dist/components/map/map.class.d.ts.map +1 -1
  157. package/dist/components/map/map.class.js +24 -2
  158. package/dist/components/map/map.class.js.map +1 -1
  159. package/dist/components/map/map.styles.d.ts.map +1 -1
  160. package/dist/components/map/map.styles.js +5 -0
  161. package/dist/components/map/map.styles.js.map +1 -1
  162. package/dist/components/markdown/markdown.class.d.ts +3 -0
  163. package/dist/components/markdown/markdown.class.d.ts.map +1 -1
  164. package/dist/components/markdown/markdown.class.js +3 -0
  165. package/dist/components/markdown/markdown.class.js.map +1 -1
  166. package/dist/components/media-card/media-card.class.d.ts +4 -1
  167. package/dist/components/media-card/media-card.class.d.ts.map +1 -1
  168. package/dist/components/media-card/media-card.class.js +6 -4
  169. package/dist/components/media-card/media-card.class.js.map +1 -1
  170. package/dist/components/mention-popover/mention-popover.class.d.ts +9 -0
  171. package/dist/components/mention-popover/mention-popover.class.d.ts.map +1 -1
  172. package/dist/components/mention-popover/mention-popover.class.js +14 -2
  173. package/dist/components/mention-popover/mention-popover.class.js.map +1 -1
  174. package/dist/components/menu/menu.class.d.ts +21 -2
  175. package/dist/components/menu/menu.class.d.ts.map +1 -1
  176. package/dist/components/menu/menu.class.js +40 -9
  177. package/dist/components/menu/menu.class.js.map +1 -1
  178. package/dist/components/model-select/model-select.class.d.ts +9 -0
  179. package/dist/components/model-select/model-select.class.d.ts.map +1 -1
  180. package/dist/components/model-select/model-select.class.js +19 -4
  181. package/dist/components/model-select/model-select.class.js.map +1 -1
  182. package/dist/components/model-settings-panel/model-settings-panel.class.d.ts.map +1 -1
  183. package/dist/components/model-settings-panel/model-settings-panel.class.js +4 -3
  184. package/dist/components/model-settings-panel/model-settings-panel.class.js.map +1 -1
  185. package/dist/components/playback/playback.class.d.ts +4 -0
  186. package/dist/components/playback/playback.class.d.ts.map +1 -1
  187. package/dist/components/playback/playback.class.js +6 -2
  188. package/dist/components/playback/playback.class.js.map +1 -1
  189. package/dist/components/poll-status/poll-status.class.d.ts +3 -2
  190. package/dist/components/poll-status/poll-status.class.d.ts.map +1 -1
  191. package/dist/components/poll-status/poll-status.class.js +10 -7
  192. package/dist/components/poll-status/poll-status.class.js.map +1 -1
  193. package/dist/components/poll-status/poll-status.styles.d.ts.map +1 -1
  194. package/dist/components/poll-status/poll-status.styles.js +8 -1
  195. package/dist/components/poll-status/poll-status.styles.js.map +1 -1
  196. package/dist/components/segmented/segmented.class.d.ts +6 -0
  197. package/dist/components/segmented/segmented.class.d.ts.map +1 -1
  198. package/dist/components/segmented/segmented.class.js +12 -2
  199. package/dist/components/segmented/segmented.class.js.map +1 -1
  200. package/dist/components/select/select.class.d.ts +7 -1
  201. package/dist/components/select/select.class.d.ts.map +1 -1
  202. package/dist/components/select/select.class.js +14 -4
  203. package/dist/components/select/select.class.js.map +1 -1
  204. package/dist/components/skeleton/skeleton.class.d.ts.map +1 -1
  205. package/dist/components/skeleton/skeleton.class.js +2 -1
  206. package/dist/components/skeleton/skeleton.class.js.map +1 -1
  207. package/dist/components/source-card/source-card.class.d.ts +5 -1
  208. package/dist/components/source-card/source-card.class.d.ts.map +1 -1
  209. package/dist/components/source-card/source-card.class.js.map +1 -1
  210. package/dist/components/source-list/source-list.class.d.ts +8 -7
  211. package/dist/components/source-list/source-list.class.d.ts.map +1 -1
  212. package/dist/components/source-list/source-list.class.js +9 -8
  213. package/dist/components/source-list/source-list.class.js.map +1 -1
  214. package/dist/components/source-list/source-list.styles.d.ts.map +1 -1
  215. package/dist/components/source-list/source-list.styles.js +10 -0
  216. package/dist/components/source-list/source-list.styles.js.map +1 -1
  217. package/dist/components/sparkline/sparkline.styles.js +2 -2
  218. package/dist/components/split/split.class.d.ts +1 -1
  219. package/dist/components/split/split.class.d.ts.map +1 -1
  220. package/dist/components/split/split.class.js +6 -1
  221. package/dist/components/split/split.class.js.map +1 -1
  222. package/dist/components/stat/stat.class.js +2 -2
  223. package/dist/components/stat/stat.class.js.map +1 -1
  224. package/dist/components/stepper/stepper.class.d.ts +6 -1
  225. package/dist/components/stepper/stepper.class.d.ts.map +1 -1
  226. package/dist/components/stepper/stepper.class.js +4 -1
  227. package/dist/components/stepper/stepper.class.js.map +1 -1
  228. package/dist/components/stream-status/stream-status.class.d.ts.map +1 -1
  229. package/dist/components/stream-status/stream-status.class.js +5 -11
  230. package/dist/components/stream-status/stream-status.class.js.map +1 -1
  231. package/dist/components/switch/switch.class.d.ts.map +1 -1
  232. package/dist/components/switch/switch.class.js +1 -1
  233. package/dist/components/switch/switch.class.js.map +1 -1
  234. package/dist/components/table/table.class.d.ts.map +1 -1
  235. package/dist/components/table/table.class.js +7 -1
  236. package/dist/components/table/table.class.js.map +1 -1
  237. package/dist/components/thinking-panel/thinking-panel.class.d.ts +2 -1
  238. package/dist/components/thinking-panel/thinking-panel.class.d.ts.map +1 -1
  239. package/dist/components/thinking-panel/thinking-panel.class.js +14 -5
  240. package/dist/components/thinking-panel/thinking-panel.class.js.map +1 -1
  241. package/dist/components/time-range/time-range.class.d.ts +8 -3
  242. package/dist/components/time-range/time-range.class.d.ts.map +1 -1
  243. package/dist/components/time-range/time-range.class.js +10 -5
  244. package/dist/components/time-range/time-range.class.js.map +1 -1
  245. package/dist/components/time-range/time-range.styles.d.ts.map +1 -1
  246. package/dist/components/time-range/time-range.styles.js +16 -0
  247. package/dist/components/time-range/time-range.styles.js.map +1 -1
  248. package/dist/components/toast/toast-item.class.js +2 -2
  249. package/dist/components/toast/toast-item.class.js.map +1 -1
  250. package/dist/components/tool-approval-dialog/tool-approval-dialog.class.d.ts.map +1 -1
  251. package/dist/components/tool-approval-dialog/tool-approval-dialog.class.js +11 -6
  252. package/dist/components/tool-approval-dialog/tool-approval-dialog.class.js.map +1 -1
  253. package/dist/components/tool-call-chip/tool-call-chip.class.d.ts +8 -4
  254. package/dist/components/tool-call-chip/tool-call-chip.class.d.ts.map +1 -1
  255. package/dist/components/tool-call-chip/tool-call-chip.class.js +46 -16
  256. package/dist/components/tool-call-chip/tool-call-chip.class.js.map +1 -1
  257. package/dist/components/tool-param-form/tool-param-form.class.d.ts +3 -0
  258. package/dist/components/tool-param-form/tool-param-form.class.d.ts.map +1 -1
  259. package/dist/components/tool-param-form/tool-param-form.class.js +21 -16
  260. package/dist/components/tool-param-form/tool-param-form.class.js.map +1 -1
  261. package/dist/components/tool-param-form/tool-param-form.styles.d.ts.map +1 -1
  262. package/dist/components/tool-param-form/tool-param-form.styles.js +5 -0
  263. package/dist/components/tool-param-form/tool-param-form.styles.js.map +1 -1
  264. package/dist/components/tool-result-dialog/tool-result-dialog.class.d.ts +5 -5
  265. package/dist/components/tool-result-dialog/tool-result-dialog.class.d.ts.map +1 -1
  266. package/dist/components/tool-result-dialog/tool-result-dialog.class.js +18 -10
  267. package/dist/components/tool-result-dialog/tool-result-dialog.class.js.map +1 -1
  268. package/dist/components/tool-result-view/registry.d.ts +3 -3
  269. package/dist/components/tool-result-view/registry.js +3 -3
  270. package/dist/components/tool-select-dialog/tool-select-dialog.class.d.ts.map +1 -1
  271. package/dist/components/tool-select-dialog/tool-select-dialog.class.js +27 -9
  272. package/dist/components/tool-select-dialog/tool-select-dialog.class.js.map +1 -1
  273. package/dist/components/tree/tree-node.class.d.ts +1 -0
  274. package/dist/components/tree/tree-node.class.d.ts.map +1 -1
  275. package/dist/components/tree/tree-node.class.js +3 -66
  276. package/dist/components/tree/tree-node.class.js.map +1 -1
  277. package/dist/components/tree/tree-node.styles.d.ts +2 -0
  278. package/dist/components/tree/tree-node.styles.d.ts.map +1 -0
  279. package/dist/components/tree/tree-node.styles.js +68 -0
  280. package/dist/components/tree/tree-node.styles.js.map +1 -0
  281. package/dist/components/tree/tree.class.d.ts +3 -1
  282. package/dist/components/tree/tree.class.d.ts.map +1 -1
  283. package/dist/components/tree/tree.class.js +6 -1
  284. package/dist/components/tree/tree.class.js.map +1 -1
  285. package/dist/components/typing-indicator/typing-indicator.class.d.ts +14 -11
  286. package/dist/components/typing-indicator/typing-indicator.class.d.ts.map +1 -1
  287. package/dist/components/typing-indicator/typing-indicator.class.js +16 -12
  288. package/dist/components/typing-indicator/typing-indicator.class.js.map +1 -1
  289. package/dist/components/widget/widget.class.d.ts +34 -8
  290. package/dist/components/widget/widget.class.d.ts.map +1 -1
  291. package/dist/components/widget/widget.class.js +36 -16
  292. package/dist/components/widget/widget.class.js.map +1 -1
  293. package/dist/components/word-cloud/word-cloud.class.d.ts +6 -0
  294. package/dist/components/word-cloud/word-cloud.class.d.ts.map +1 -1
  295. package/dist/components/word-cloud/word-cloud.class.js +22 -8
  296. package/dist/components/word-cloud/word-cloud.class.js.map +1 -1
  297. package/dist/internal/group-by-recency.d.ts +3 -2
  298. package/dist/internal/group-by-recency.d.ts.map +1 -1
  299. package/dist/internal/group-by-recency.js.map +1 -1
  300. package/dist/internal/localization.d.ts +1 -1
  301. package/dist/internal/localization.d.ts.map +1 -1
  302. package/dist/internal/localization.js +204 -0
  303. package/dist/internal/localization.js.map +1 -1
  304. package/dist/lyra.d.ts +13 -0
  305. package/dist/lyra.d.ts.map +1 -1
  306. package/dist/lyra.js.map +1 -1
  307. package/package.json +1 -1
@@ -2337,7 +2337,7 @@
2337
2337
  "type": {
2338
2338
  "text": "string | undefined"
2339
2339
  },
2340
- "description": "Overrides the single-capability trigger button's `aria-label`, which\notherwise comes from `CAPABILITY_META[capability].triggerLabel` (e.g.\n`'Attach files'`). Set this to localize the accessible name; leave it\nunset to keep the built-in English default. Only affects the\nsingle-capability button ([part='trigger']) — the multi-capability\nmenu's own trigger keeps its fixed `'Add attachment'` label regardless.",
2340
+ "description": "Overrides the single-capability trigger button's `aria-label`, which\notherwise comes from `this.localize()` (e.g. `'Attach files'`, localizable\nvia `.strings`/`registerLyraLocale()`). Set this for a one-off override;\nleave it unset to keep the localized default. Only affects the\nsingle-capability button ([part='trigger']) — the multi-capability\nmenu's own trigger keeps its own `'Add attachment'` label regardless.",
2341
2341
  "attribute": "trigger-label"
2342
2342
  },
2343
2343
  {
@@ -2621,7 +2621,7 @@
2621
2621
  "type": {
2622
2622
  "text": "string | undefined"
2623
2623
  },
2624
- "description": "Overrides the single-capability trigger button's `aria-label`, which\notherwise comes from `CAPABILITY_META[capability].triggerLabel` (e.g.\n`'Attach files'`). Set this to localize the accessible name; leave it\nunset to keep the built-in English default. Only affects the\nsingle-capability button ([part='trigger']) — the multi-capability\nmenu's own trigger keeps its fixed `'Add attachment'` label regardless.",
2624
+ "description": "Overrides the single-capability trigger button's `aria-label`, which\notherwise comes from `this.localize()` (e.g. `'Attach files'`, localizable\nvia `.strings`/`registerLyraLocale()`). Set this for a one-off override;\nleave it unset to keep the localized default. Only affects the\nsingle-capability button ([part='trigger']) — the multi-capability\nmenu's own trigger keeps its own `'Add attachment'` label regardless.",
2625
2625
  "fieldName": "triggerLabel"
2626
2626
  },
2627
2627
  {
@@ -2681,7 +2681,7 @@
2681
2681
  "declarations": [
2682
2682
  {
2683
2683
  "kind": "class",
2684
- "description": "`<lyra-avatar>` — a small, fixed-size identity marker: an image, or an initials fallback when\nno image is set (or the image fails to load). First-party invention (no Web Awesome\nequivalent) -- purely presentational, no built-in interactivity; a consumer wraps it in their\nown `<button>`/`<lyra-menu>` trigger for a user-menu affordance.",
2684
+ "description": "`<lyra-avatar>` — a small, fixed-size identity marker: default-slotted icon/glyph content, an\nimage, or an initials fallback, in that priority order (whichever's set takes over from the\nnext). First-party invention (no Web Awesome equivalent) -- purely presentational, no built-in\ninteractivity; a consumer wraps it in their own `<button>`/`<lyra-menu>` trigger for a\nuser-menu affordance.",
2685
2685
  "name": "LyraAvatar",
2686
2686
  "cssParts": [
2687
2687
  {
@@ -2689,14 +2689,24 @@
2689
2689
  "name": "base"
2690
2690
  },
2691
2691
  {
2692
- "description": "The `<img>`, only rendered while `src` is set and has not failed to load.",
2692
+ "description": "Wrapper around the default-slotted icon/glyph content. Only rendered while the slot has assigned content.",
2693
+ "name": "icon"
2694
+ },
2695
+ {
2696
+ "description": "The `<img>`, only rendered while `src` is set and has not failed to load (and no icon content is slotted).",
2693
2697
  "name": "image"
2694
2698
  },
2695
2699
  {
2696
- "description": "The fallback initials text, rendered whenever `image` isn't.",
2700
+ "description": "The fallback initials text, rendered whenever neither slotted content nor `image` is.",
2697
2701
  "name": "initials"
2698
2702
  }
2699
2703
  ],
2704
+ "slots": [
2705
+ {
2706
+ "description": "Icon/glyph content (e.g. an inline SVG) shown in place of the image/initials, e.g. to mark a chat message avatar as \"AI\" vs. \"user\" with a role glyph instead of a photo or initials. Takes priority over both `src` and `initials`. The glyph itself is treated as decorative (`aria-hidden`); set `alt` alongside it for an accessible name.",
2707
+ "name": ""
2708
+ }
2709
+ ],
2700
2710
  "members": [
2701
2711
  {
2702
2712
  "kind": "field",
@@ -2705,7 +2715,7 @@
2705
2715
  "text": "string"
2706
2716
  },
2707
2717
  "default": "''",
2708
- "description": "Image alt text -- required alongside `src` for accessibility.",
2718
+ "description": "Alt text -- required alongside `src` for accessibility, and also used as the accessible\nname (via `aria-label`) when showing icon-only slotted content, since a decorative glyph\nhas no text of its own for a screen reader to read.",
2709
2719
  "attribute": "alt"
2710
2720
  },
2711
2721
  {
@@ -2736,6 +2746,15 @@
2736
2746
  "module": "src/internal/lyra-element.ts"
2737
2747
  }
2738
2748
  },
2749
+ {
2750
+ "kind": "field",
2751
+ "name": "hasIcon",
2752
+ "type": {
2753
+ "text": "boolean"
2754
+ },
2755
+ "privacy": "private",
2756
+ "default": "false"
2757
+ },
2739
2758
  {
2740
2759
  "kind": "field",
2741
2760
  "name": "imageFailed",
@@ -2752,7 +2771,7 @@
2752
2771
  "text": "string"
2753
2772
  },
2754
2773
  "default": "''",
2755
- "description": "Fallback text (typically 1-2 characters) shown when no image is set, or the image fails to\nload.",
2774
+ "description": "Fallback text (typically 1-2 characters) shown when no icon/image is set, or the image\nfails to load.",
2756
2775
  "attribute": "initials"
2757
2776
  },
2758
2777
  {
@@ -2770,6 +2789,11 @@
2770
2789
  "module": "src/internal/lyra-element.ts"
2771
2790
  }
2772
2791
  },
2792
+ {
2793
+ "kind": "field",
2794
+ "name": "onIconSlotChange",
2795
+ "privacy": "private"
2796
+ },
2773
2797
  {
2774
2798
  "kind": "field",
2775
2799
  "name": "onImageError",
@@ -2793,7 +2817,7 @@
2793
2817
  "text": "AvatarSize"
2794
2818
  },
2795
2819
  "default": "'md'",
2796
- "description": "Visual size. `'md'` (the default) matches `--lyra-icon-button-size` (2.5rem).",
2820
+ "description": "Visual size. `'lg'` matches `--lyra-icon-button-size` (2.5rem); `'md'` (the default) is 2rem.",
2797
2821
  "attribute": "size",
2798
2822
  "reflects": true
2799
2823
  },
@@ -2803,7 +2827,7 @@
2803
2827
  "type": {
2804
2828
  "text": "string | undefined"
2805
2829
  },
2806
- "description": "Image URL. Takes priority over `initials` when set and loads successfully; falls back to\n`initials` on a load error.",
2830
+ "description": "Image URL. Takes priority over `initials` when set and loads successfully (but not over\nslotted icon content); falls back to `initials` on a load error.",
2807
2831
  "attribute": "src"
2808
2832
  },
2809
2833
  {
@@ -2992,7 +3016,7 @@
2992
3016
  "text": "string"
2993
3017
  },
2994
3018
  "default": "''",
2995
- "description": "Image alt text -- required alongside `src` for accessibility.",
3019
+ "description": "Alt text -- required alongside `src` for accessibility, and also used as the accessible\nname (via `aria-label`) when showing icon-only slotted content, since a decorative glyph\nhas no text of its own for a screen reader to read.",
2996
3020
  "fieldName": "alt"
2997
3021
  },
2998
3022
  {
@@ -3001,7 +3025,7 @@
3001
3025
  "text": "string"
3002
3026
  },
3003
3027
  "default": "''",
3004
- "description": "Fallback text (typically 1-2 characters) shown when no image is set, or the image fails to\nload.",
3028
+ "description": "Fallback text (typically 1-2 characters) shown when no icon/image is set, or the image\nfails to load.",
3005
3029
  "fieldName": "initials"
3006
3030
  },
3007
3031
  {
@@ -3032,7 +3056,7 @@
3032
3056
  "text": "AvatarSize"
3033
3057
  },
3034
3058
  "default": "'md'",
3035
- "description": "Visual size. `'md'` (the default) matches `--lyra-icon-button-size` (2.5rem).",
3059
+ "description": "Visual size. `'lg'` matches `--lyra-icon-button-size` (2.5rem); `'md'` (the default) is 2rem.",
3036
3060
  "fieldName": "size"
3037
3061
  },
3038
3062
  {
@@ -3040,7 +3064,7 @@
3040
3064
  "type": {
3041
3065
  "text": "string | undefined"
3042
3066
  },
3043
- "description": "Image URL. Takes priority over `initials` when set and loads successfully; falls back to\n`initials` on a load error.",
3067
+ "description": "Image URL. Takes priority over `initials` when set and loads successfully (but not over\nslotted icon content); falls back to `initials` on a load error.",
3044
3068
  "fieldName": "src"
3045
3069
  },
3046
3070
  {
@@ -8591,7 +8615,8 @@
8591
8615
  "type": {
8592
8616
  "text": "string"
8593
8617
  },
8594
- "default": "'Frequency'",
8618
+ "default": "''",
8619
+ "description": "Dataset label used for the legend/tooltip/accessible summary. Falls back to a localized \"Frequency\" when unset.",
8595
8620
  "attribute": "label"
8596
8621
  },
8597
8622
  {
@@ -9256,7 +9281,8 @@
9256
9281
  "type": {
9257
9282
  "text": "string"
9258
9283
  },
9259
- "default": "'Frequency'",
9284
+ "default": "''",
9285
+ "description": "Dataset label used for the legend/tooltip/accessible summary. Falls back to a localized \"Frequency\" when unset.",
9260
9286
  "fieldName": "label"
9261
9287
  },
9262
9288
  {
@@ -10643,6 +10669,15 @@
10643
10669
  }
10644
10670
  ],
10645
10671
  "members": [
10672
+ {
10673
+ "kind": "field",
10674
+ "name": "accessibleLabel",
10675
+ "type": {
10676
+ "text": "string | undefined"
10677
+ },
10678
+ "description": "Overrides the `<svg>`'s auto-derived `aria-label` (`datasets.map(d => d.label).join(', ') ||\n'Chart'`) — for a consumer with a real, localized chart description. Unset (the default)\nkeeps today's auto-derived (English-fallback) label exactly. Named `accessible-label` to\nmatch the same override on `lyra-chart`/`lyra-box-plot`.",
10679
+ "attribute": "accessible-label"
10680
+ },
10646
10681
  {
10647
10682
  "kind": "field",
10648
10683
  "name": "activeMarkIndex",
@@ -10689,15 +10724,6 @@
10689
10724
  "default": "true",
10690
10725
  "attribute": "begin-at-zero"
10691
10726
  },
10692
- {
10693
- "kind": "field",
10694
- "name": "chartLabel",
10695
- "type": {
10696
- "text": "string | undefined"
10697
- },
10698
- "description": "Overrides the `<svg>`'s auto-derived `aria-label` (`datasets.map(d => d.label).join(', ') ||\n'Chart'`) — for a consumer with a real, localized chart description. Unset (the default)\nkeeps today's auto-derived (English-fallback) label exactly.",
10699
- "attribute": "chart-label"
10700
- },
10701
10727
  {
10702
10728
  "kind": "field",
10703
10729
  "name": "datasets",
@@ -10791,12 +10817,11 @@
10791
10817
  },
10792
10818
  {
10793
10819
  "kind": "field",
10794
- "name": "liveText",
10820
+ "name": "liveRegion",
10795
10821
  "type": {
10796
- "text": "string"
10822
+ "text": "LyraLiveRegion | undefined"
10797
10823
  },
10798
- "privacy": "private",
10799
- "default": "''"
10824
+ "privacy": "private"
10800
10825
  },
10801
10826
  {
10802
10827
  "kind": "field",
@@ -11610,6 +11635,14 @@
11610
11635
  }
11611
11636
  ],
11612
11637
  "attributes": [
11638
+ {
11639
+ "name": "accessible-label",
11640
+ "type": {
11641
+ "text": "string | undefined"
11642
+ },
11643
+ "description": "Overrides the `<svg>`'s auto-derived `aria-label` (`datasets.map(d => d.label).join(', ') ||\n'Chart'`) — for a consumer with a real, localized chart description. Unset (the default)\nkeeps today's auto-derived (English-fallback) label exactly. Named `accessible-label` to\nmatch the same override on `lyra-chart`/`lyra-box-plot`.",
11644
+ "fieldName": "accessibleLabel"
11645
+ },
11613
11646
  {
11614
11647
  "name": "bar-gap-ratio",
11615
11648
  "type": {
@@ -11635,14 +11668,6 @@
11635
11668
  "default": "true",
11636
11669
  "fieldName": "beginAtZero"
11637
11670
  },
11638
- {
11639
- "name": "chart-label",
11640
- "type": {
11641
- "text": "string | undefined"
11642
- },
11643
- "description": "Overrides the `<svg>`'s auto-derived `aria-label` (`datasets.map(d => d.label).join(', ') ||\n'Chart'`) — for a consumer with a real, localized chart description. Unset (the default)\nkeeps today's auto-derived (English-fallback) label exactly.",
11644
- "fieldName": "chartLabel"
11645
- },
11646
11671
  {
11647
11672
  "name": "height",
11648
11673
  "type": {
@@ -18601,7 +18626,7 @@
18601
18626
  "text": "boolean"
18602
18627
  },
18603
18628
  "default": "false",
18604
- "description": "Opt-in toggle/pressed mode -- when set, `[part='base']` itself becomes focusable and\nkeyboard-activatable (Enter/Space, mirroring native `<button>` behavior), reflects\n`aria-pressed`, and toggles on click/activation, emitting `lyra-chip-select`. Has no effect\n(no interactive semantics added to `[part='base']`) when combined with `removable`, since the\nremove button already nests inside `[part='base']` -- axe-core's `nested-interactive` rule\nforbids a focusable descendant of a `role=\"button\"` ancestor, and this component's two real\nuse cases (a chart-series visibility toggle, a category filter chip) never need both at once.\n`false` (the default) reproduces today's exact passive-label-pill output.",
18629
+ "description": "Opt-in toggle/pressed mode -- the current pressed value. Setting `selected` (to `true`, the\ncommon way to start a chip already pressed) opts the chip into toggle mode automatically, so\n`<lyra-chip selected>` alone is enough: `[part='base']` becomes focusable and\nkeyboard-activatable (Enter/Space, mirroring native `<button>` behavior), reflects\n`aria-pressed`, and toggles on click/activation, emitting `lyra-chip-select`. That opt-in\n(tracked by `toggleable`, see below) persists once made, so toggling `selected` back to\n`false` never strips the chip's interactivity -- a chip a user has clicked \"off\" must stay\nclickable to turn it back \"on\". Has no effect (no interactive semantics added to\n`[part='base']`) when combined with `removable`, since the remove button already nests inside\n`[part='base']` -- axe-core's `nested-interactive` rule forbids a focusable descendant of a\n`role=\"button\"` ancestor, and this component's two real use cases (a chart-series visibility\ntoggle, a category filter chip) never need both at once. `false` (the default, with\n`toggleable` also left at its default) reproduces today's exact passive-label-pill output.",
18605
18630
  "attribute": "selected",
18606
18631
  "reflects": true
18607
18632
  },
@@ -18630,6 +18655,17 @@
18630
18655
  "module": "src/internal/lyra-element.ts"
18631
18656
  }
18632
18657
  },
18658
+ {
18659
+ "kind": "field",
18660
+ "name": "toggleable",
18661
+ "type": {
18662
+ "text": "boolean"
18663
+ },
18664
+ "default": "false",
18665
+ "description": "Explicit opt-in into `selected`'s toggle/pressed interactive mode, independent of the\n*current* value of `selected`. Setting `selected` to `true` at any point opts in\nautomatically (see its doc comment) and keeps this `true` from then on, which is enough for\na chip that starts already pressed. Set `toggleable` directly for a chip that must be\nclickable from the outset while starting **unselected** -- e.g. an initially-inactive\ncategory filter chip -- since `selected`'s own default (`false`) can't be distinguished from\n\"never opted in\" on its own.",
18666
+ "attribute": "toggleable",
18667
+ "reflects": true
18668
+ },
18633
18669
  {
18634
18670
  "kind": "field",
18635
18671
  "name": "tone",
@@ -18795,7 +18831,7 @@
18795
18831
  ],
18796
18832
  "events": [
18797
18833
  {
18798
- "description": "Fired on click, or Enter/Space while focused, when `selected` mode is active (and `removable` is not set). `detail: { value, selected }` -- the chip has already toggled its own `selected` state by the time this fires.",
18834
+ "description": "Fired on click, or Enter/Space while focused, once the chip has opted into toggle mode (via `selected` or `toggleable`) and `removable` is not set. `detail: { value, selected }` -- the chip has already toggled its own `selected` state by the time this fires.",
18799
18835
  "name": "lyra-chip-select"
18800
18836
  },
18801
18837
  {
@@ -18832,9 +18868,18 @@
18832
18868
  "text": "boolean"
18833
18869
  },
18834
18870
  "default": "false",
18835
- "description": "Opt-in toggle/pressed mode -- when set, `[part='base']` itself becomes focusable and\nkeyboard-activatable (Enter/Space, mirroring native `<button>` behavior), reflects\n`aria-pressed`, and toggles on click/activation, emitting `lyra-chip-select`. Has no effect\n(no interactive semantics added to `[part='base']`) when combined with `removable`, since the\nremove button already nests inside `[part='base']` -- axe-core's `nested-interactive` rule\nforbids a focusable descendant of a `role=\"button\"` ancestor, and this component's two real\nuse cases (a chart-series visibility toggle, a category filter chip) never need both at once.\n`false` (the default) reproduces today's exact passive-label-pill output.",
18871
+ "description": "Opt-in toggle/pressed mode -- the current pressed value. Setting `selected` (to `true`, the\ncommon way to start a chip already pressed) opts the chip into toggle mode automatically, so\n`<lyra-chip selected>` alone is enough: `[part='base']` becomes focusable and\nkeyboard-activatable (Enter/Space, mirroring native `<button>` behavior), reflects\n`aria-pressed`, and toggles on click/activation, emitting `lyra-chip-select`. That opt-in\n(tracked by `toggleable`, see below) persists once made, so toggling `selected` back to\n`false` never strips the chip's interactivity -- a chip a user has clicked \"off\" must stay\nclickable to turn it back \"on\". Has no effect (no interactive semantics added to\n`[part='base']`) when combined with `removable`, since the remove button already nests inside\n`[part='base']` -- axe-core's `nested-interactive` rule forbids a focusable descendant of a\n`role=\"button\"` ancestor, and this component's two real use cases (a chart-series visibility\ntoggle, a category filter chip) never need both at once. `false` (the default, with\n`toggleable` also left at its default) reproduces today's exact passive-label-pill output.",
18836
18872
  "fieldName": "selected"
18837
18873
  },
18874
+ {
18875
+ "name": "toggleable",
18876
+ "type": {
18877
+ "text": "boolean"
18878
+ },
18879
+ "default": "false",
18880
+ "description": "Explicit opt-in into `selected`'s toggle/pressed interactive mode, independent of the\n*current* value of `selected`. Setting `selected` to `true` at any point opts in\nautomatically (see its doc comment) and keeps this `true` from then on, which is enough for\na chip that starts already pressed. Set `toggleable` directly for a chip that must be\nclickable from the outset while starting **unselected** -- e.g. an initially-inactive\ncategory filter chip -- since `selected`'s own default (`false`) can't be distinguished from\n\"never opted in\" on its own.",
18881
+ "fieldName": "toggleable"
18882
+ },
18838
18883
  {
18839
18884
  "name": "tone",
18840
18885
  "type": {
@@ -20075,6 +20120,116 @@
20075
20120
  }
20076
20121
  ]
20077
20122
  },
20123
+ {
20124
+ "kind": "javascript-module",
20125
+ "path": "src/components/code-block/code-block-shared.ts",
20126
+ "declarations": [
20127
+ {
20128
+ "kind": "function",
20129
+ "name": "codeBlockBodyLabel",
20130
+ "return": {
20131
+ "type": {
20132
+ "text": "string"
20133
+ }
20134
+ },
20135
+ "parameters": [
20136
+ {
20137
+ "name": "localize",
20138
+ "type": {
20139
+ "text": "LyraLocalizeFn"
20140
+ }
20141
+ },
20142
+ {
20143
+ "name": "filename",
20144
+ "type": {
20145
+ "text": "string"
20146
+ }
20147
+ },
20148
+ {
20149
+ "name": "language",
20150
+ "type": {
20151
+ "text": "string"
20152
+ }
20153
+ }
20154
+ ],
20155
+ "description": "The `[part=\"body\"]` region's `aria-label`: the filename when set, else a\nlanguage-aware \"Code\" region label."
20156
+ },
20157
+ {
20158
+ "kind": "function",
20159
+ "name": "codeBlockCopyLabel",
20160
+ "return": {
20161
+ "type": {
20162
+ "text": "string"
20163
+ }
20164
+ },
20165
+ "parameters": [
20166
+ {
20167
+ "name": "localize",
20168
+ "type": {
20169
+ "text": "LyraLocalizeFn"
20170
+ }
20171
+ },
20172
+ {
20173
+ "name": "justCopied",
20174
+ "type": {
20175
+ "text": "boolean"
20176
+ }
20177
+ }
20178
+ ],
20179
+ "description": "The copy-to-clipboard header button's `aria-label`."
20180
+ },
20181
+ {
20182
+ "kind": "function",
20183
+ "name": "codeBlockToggleLabel",
20184
+ "return": {
20185
+ "type": {
20186
+ "text": "string"
20187
+ }
20188
+ },
20189
+ "parameters": [
20190
+ {
20191
+ "name": "localize",
20192
+ "type": {
20193
+ "text": "LyraLocalizeFn"
20194
+ }
20195
+ },
20196
+ {
20197
+ "name": "collapsed",
20198
+ "type": {
20199
+ "text": "boolean"
20200
+ }
20201
+ }
20202
+ ],
20203
+ "description": "The collapse/expand header toggle button's `aria-label`."
20204
+ }
20205
+ ],
20206
+ "exports": [
20207
+ {
20208
+ "kind": "js",
20209
+ "name": "codeBlockBodyLabel",
20210
+ "declaration": {
20211
+ "name": "codeBlockBodyLabel",
20212
+ "module": "src/components/code-block/code-block-shared.ts"
20213
+ }
20214
+ },
20215
+ {
20216
+ "kind": "js",
20217
+ "name": "codeBlockCopyLabel",
20218
+ "declaration": {
20219
+ "name": "codeBlockCopyLabel",
20220
+ "module": "src/components/code-block/code-block-shared.ts"
20221
+ }
20222
+ },
20223
+ {
20224
+ "kind": "js",
20225
+ "name": "codeBlockToggleLabel",
20226
+ "declaration": {
20227
+ "name": "codeBlockToggleLabel",
20228
+ "module": "src/components/code-block/code-block-shared.ts"
20229
+ }
20230
+ }
20231
+ ]
20232
+ },
20078
20233
  {
20079
20234
  "kind": "javascript-module",
20080
20235
  "path": "src/components/code-block/code-block.class.ts",
@@ -21148,7 +21303,8 @@
21148
21303
  "type": {
21149
21304
  "text": "string"
21150
21305
  },
21151
- "default": "'No results'",
21306
+ "default": "''",
21307
+ "description": "Status copy shown in the listbox when no rows match. Empty string falls back to a localized message.",
21152
21308
  "attribute": "empty-text"
21153
21309
  },
21154
21310
  {
@@ -21280,8 +21436,8 @@
21280
21436
  "type": {
21281
21437
  "text": "string"
21282
21438
  },
21283
- "default": "'Loading…'",
21284
- "description": "Status copy shown in the listbox while a `source` fetch is in flight.",
21439
+ "default": "''",
21440
+ "description": "Status copy shown in the listbox while a `source` fetch is in flight. Empty string falls back to a localized message.",
21285
21441
  "attribute": "loading-text"
21286
21442
  },
21287
21443
  {
@@ -21417,8 +21573,8 @@
21417
21573
  "type": {
21418
21574
  "text": "string"
21419
21575
  },
21420
- "default": "'+{n} more — refine your search'",
21421
- "description": "Status copy shown when `maxRender` caps the row list; `{n}` is replaced with the hidden count.",
21576
+ "default": "''",
21577
+ "description": "Status copy shown when `maxRender` caps the row list; `{n}` is replaced with the hidden count. Empty string falls back to a localized message.",
21422
21578
  "attribute": "overflow-text"
21423
21579
  },
21424
21580
  {
@@ -21990,7 +22146,8 @@
21990
22146
  "type": {
21991
22147
  "text": "string"
21992
22148
  },
21993
- "default": "'No results'",
22149
+ "default": "''",
22150
+ "description": "Status copy shown in the listbox when no rows match. Empty string falls back to a localized message.",
21994
22151
  "fieldName": "emptyText"
21995
22152
  },
21996
22153
  {
@@ -22022,8 +22179,8 @@
22022
22179
  "type": {
22023
22180
  "text": "string"
22024
22181
  },
22025
- "default": "'Loading…'",
22026
- "description": "Status copy shown in the listbox while a `source` fetch is in flight.",
22182
+ "default": "''",
22183
+ "description": "Status copy shown in the listbox while a `source` fetch is in flight. Empty string falls back to a localized message.",
22027
22184
  "fieldName": "loadingText"
22028
22185
  },
22029
22186
  {
@@ -22082,8 +22239,8 @@
22082
22239
  "type": {
22083
22240
  "text": "string"
22084
22241
  },
22085
- "default": "'+{n} more — refine your search'",
22086
- "description": "Status copy shown when `maxRender` caps the row list; `{n}` is replaced with the hidden count.",
22242
+ "default": "''",
22243
+ "description": "Status copy shown when `maxRender` caps the row list; `{n}` is replaced with the hidden count. Empty string falls back to a localized message.",
22087
22244
  "fieldName": "overflowText"
22088
22245
  },
22089
22246
  {
@@ -22615,6 +22772,16 @@
22615
22772
  }
22616
22773
  ],
22617
22774
  "members": [
22775
+ {
22776
+ "kind": "field",
22777
+ "name": "clampedUsedTotal",
22778
+ "type": {
22779
+ "text": "{ used: number; total: number }"
22780
+ },
22781
+ "privacy": "private",
22782
+ "description": "`usedTotal` and `total`, both clamped the same way ratios() clamps the\nvisual fill -- a segments array that sums past total must not report an\nimpossible \"160 of 100 used\"/aria-valuenow > aria-valuemax while the\nbar/ring visibly caps at 100%. Shared by `summary` and `willUpdate`'s\naria-value* trio so the announced text and the queryable numeric value\ncan never diverge.",
22783
+ "readonly": true
22784
+ },
22618
22785
  {
22619
22786
  "kind": "field",
22620
22787
  "name": "effectiveDirection",
@@ -24496,7 +24663,7 @@
24496
24663
  "text": "string"
24497
24664
  },
24498
24665
  "default": "'Choose date'",
24499
- "description": "Accessible name for the calendar popover dialog. Override for a non-English `locale`.",
24666
+ "description": "Accessible name for the calendar popover dialog. Left at the built-in default it\nroutes through `this.localize()` so a locale/`.strings` override applies without\nrequiring this to be set; an explicit override wins verbatim.",
24500
24667
  "attribute": "dialog-label"
24501
24668
  },
24502
24669
  {
@@ -25291,7 +25458,7 @@
25291
25458
  "text": "string"
25292
25459
  },
25293
25460
  "default": "'Choose date'",
25294
- "description": "Accessible name for the calendar popover dialog. Override for a non-English `locale`.",
25461
+ "description": "Accessible name for the calendar popover dialog. Left at the built-in default it\nroutes through `this.localize()` so a locale/`.strings` override applies without\nrequiring this to be set; an explicit override wins verbatim.",
25295
25462
  "fieldName": "dialogLabel"
25296
25463
  },
25297
25464
  {
@@ -25738,7 +25905,7 @@
25738
25905
  "text": "string"
25739
25906
  },
25740
25907
  "default": "'Next month'",
25741
- "description": "Accessible label for the next-month button. Override for a non-English `locale`.",
25908
+ "description": "Accessible label for the next-month button. Left at the built-in default it\nroutes through `this.localize()` so a locale/`.strings` override applies without\nrequiring this to be set; an explicit override wins verbatim.",
25742
25909
  "attribute": "next-label"
25743
25910
  },
25744
25911
  {
@@ -25753,7 +25920,7 @@
25753
25920
  "text": "string"
25754
25921
  },
25755
25922
  "default": "'Previous month'",
25756
- "description": "Accessible label for the previous-month button. Override for a non-English `locale`.",
25923
+ "description": "Accessible label for the previous-month button. Left at the built-in default it\nroutes through `this.localize()` so a locale/`.strings` override applies without\nrequiring this to be set; an explicit override wins verbatim.",
25757
25924
  "attribute": "previous-label"
25758
25925
  },
25759
25926
  {
@@ -26515,7 +26682,7 @@
26515
26682
  "text": "string"
26516
26683
  },
26517
26684
  "default": "'Next month'",
26518
- "description": "Accessible label for the next-month button. Override for a non-English `locale`.",
26685
+ "description": "Accessible label for the next-month button. Left at the built-in default it\nroutes through `this.localize()` so a locale/`.strings` override applies without\nrequiring this to be set; an explicit override wins verbatim.",
26519
26686
  "fieldName": "nextLabel"
26520
26687
  },
26521
26688
  {
@@ -26524,7 +26691,7 @@
26524
26691
  "text": "string"
26525
26692
  },
26526
26693
  "default": "'Previous month'",
26527
- "description": "Accessible label for the previous-month button. Override for a non-English `locale`.",
26694
+ "description": "Accessible label for the previous-month button. Left at the built-in default it\nroutes through `this.localize()` so a locale/`.strings` override applies without\nrequiring this to be set; an explicit override wins verbatim.",
26528
26695
  "fieldName": "previousLabel"
26529
26696
  },
26530
26697
  {
@@ -27235,6 +27402,14 @@
27235
27402
  }
27236
27403
  ],
27237
27404
  "members": [
27405
+ {
27406
+ "kind": "field",
27407
+ "name": "copyTimeoutId",
27408
+ "type": {
27409
+ "text": "ReturnType<typeof setTimeout> | undefined"
27410
+ },
27411
+ "privacy": "private"
27412
+ },
27238
27413
  {
27239
27414
  "kind": "field",
27240
27415
  "name": "copyable",
@@ -27273,6 +27448,15 @@
27273
27448
  "module": "src/internal/lyra-element.ts"
27274
27449
  }
27275
27450
  },
27451
+ {
27452
+ "kind": "field",
27453
+ "name": "justCopied",
27454
+ "type": {
27455
+ "text": "boolean"
27456
+ },
27457
+ "privacy": "private",
27458
+ "default": "false"
27459
+ },
27276
27460
  {
27277
27461
  "kind": "field",
27278
27462
  "name": "locale",
@@ -29397,6 +29581,15 @@
29397
29581
  }
29398
29582
  ],
29399
29583
  "members": [
29584
+ {
29585
+ "kind": "field",
29586
+ "name": "_isFirstUpdate",
29587
+ "type": {
29588
+ "text": "boolean"
29589
+ },
29590
+ "privacy": "private",
29591
+ "default": "true"
29592
+ },
29400
29593
  {
29401
29594
  "kind": "field",
29402
29595
  "name": "cleanup",
@@ -29438,6 +29631,16 @@
29438
29631
  "module": "src/internal/lyra-element.ts"
29439
29632
  }
29440
29633
  },
29634
+ {
29635
+ "kind": "field",
29636
+ "name": "effectiveLabel",
29637
+ "type": {
29638
+ "text": "string"
29639
+ },
29640
+ "privacy": "private",
29641
+ "description": "Resolves `label`'s effective text: an explicit override wins verbatim; left at the\nbuilt-in default it instead routes through `this.localize()` so a locale/`.strings`\noverride applies without requiring `label` itself to be set.",
29642
+ "readonly": true
29643
+ },
29441
29644
  {
29442
29645
  "kind": "field",
29443
29646
  "name": "effectiveLocale",
@@ -29476,7 +29679,7 @@
29476
29679
  "text": "string"
29477
29680
  },
29478
29681
  "default": "'Export'",
29479
- "description": "Trigger button text, also feeds the format menu's `aria-label` (as\n\"`${label} format`\") so assistive tech gets an accessible name for it.",
29682
+ "description": "Trigger button text, also feeds the format menu's `aria-label` (as\n\"`${label} format`\") so assistive tech gets an accessible name for it.\nLeft at its default English `'Export'`, the rendered text instead\ncomes from `this.localize('exportButtonLabel', ...)` -- override-able\nvia `.strings`/`registerLyraLocale()` -- same convention as\n`lyra-attachment-chip`'s `removeLabel`/`retryLabel`. Set this\nattribute explicitly for a one-off override that always wins.",
29480
29683
  "attribute": "label"
29481
29684
  },
29482
29685
  {
@@ -29848,6 +30051,14 @@
29848
30051
  {
29849
30052
  "description": "Fired after a non-cancelled download completes.",
29850
30053
  "name": "lyra-export-complete"
30054
+ },
30055
+ {
30056
+ "description": "The format menu closed. Same first-render guard as `lyra-show`.",
30057
+ "name": "lyra-hide"
30058
+ },
30059
+ {
30060
+ "description": "The format menu opened. Not fired for markup that renders open from the start.",
30061
+ "name": "lyra-show"
29851
30062
  }
29852
30063
  ],
29853
30064
  "attributes": [
@@ -29873,7 +30084,7 @@
29873
30084
  "text": "string"
29874
30085
  },
29875
30086
  "default": "'Export'",
29876
- "description": "Trigger button text, also feeds the format menu's `aria-label` (as\n\"`${label} format`\") so assistive tech gets an accessible name for it.",
30087
+ "description": "Trigger button text, also feeds the format menu's `aria-label` (as\n\"`${label} format`\") so assistive tech gets an accessible name for it.\nLeft at its default English `'Export'`, the rendered text instead\ncomes from `this.localize('exportButtonLabel', ...)` -- override-able\nvia `.strings`/`registerLyraLocale()` -- same convention as\n`lyra-attachment-chip`'s `removeLabel`/`retryLabel`. Set this\nattribute explicitly for a one-off override that always wins.",
29877
30088
  "fieldName": "label"
29878
30089
  },
29879
30090
  {
@@ -30082,6 +30293,16 @@
30082
30293
  "module": "src/internal/lyra-element.ts"
30083
30294
  }
30084
30295
  },
30296
+ {
30297
+ "kind": "field",
30298
+ "name": "effectiveLabel",
30299
+ "type": {
30300
+ "text": "string"
30301
+ },
30302
+ "privacy": "private",
30303
+ "description": "Resolves `label`'s effective text: an explicit override wins verbatim; left at the\nbuilt-in default it instead routes through `this.localize()` so a locale/`.strings`\noverride applies without requiring `label` itself to be set.",
30304
+ "readonly": true
30305
+ },
30085
30306
  {
30086
30307
  "kind": "field",
30087
30308
  "name": "effectiveLocale",
@@ -32197,6 +32418,10 @@
32197
32418
  "description": "A visually hidden list alternative for graph data.",
32198
32419
  "name": "data-list"
32199
32420
  },
32421
+ {
32422
+ "description": "The empty-state message, shown when `nodes` is empty.",
32423
+ "name": "empty"
32424
+ },
32200
32425
  {
32201
32426
  "description": "A node label.",
32202
32427
  "name": "label"
@@ -32771,7 +32996,8 @@
32771
32996
  "text": "() => void"
32772
32997
  }
32773
32998
  }
32774
- ]
32999
+ ],
33000
+ "description": "The forward physical arrow key (`ArrowRight` in LTR, `ArrowLeft` under\n`dir=\"rtl\"` — see `isRtl()`) moves to the next roving-tabindex item, the\nbackward one to the previous, in flat array order (`simNodes` then\n`simLinks`) — the same `forwardKey`/`backwardKey` swap this library's\nother \"physical arrow key drives sequential previous/next\" components\n(`<lyra-tabs>`, `<lyra-slider>`, `<lyra-segmented>`) apply under RTL.\n`ArrowDown`/`ArrowUp` always mean next/previous regardless of direction."
32775
33001
  },
32776
33002
  {
32777
33003
  "kind": "method",
@@ -34614,7 +34840,7 @@
34614
34840
  }
34615
34841
  }
34616
34842
  ],
34617
- "description": "Locale-derived weekday-axis labels for the 7 rows drawn down the left of\nthe calendar grid. Only indices 1, 3, and 5 (relative to `firstWeekStart`)\nare filled in — matching today's sparse every-other-day label density —\nthe rest stay blank. `firstWeekStart` is always the UTC\n`firstDayOfWeek`-weekday by construction (see `buildCalendarGrid()`), so\nweekday index 0..6 is a fixed positional mapping relative to it (with the\ndefault `firstDayOfWeek` of 0, that's the original Sun..Sat mapping,\nunchanged); only the label *text* for indices 1/3/5 is derived here, via\n`Intl.DateTimeFormat` on a real UTC date that actually falls on that\nweekday, so it follows the runtime locale instead of a hardcoded English\narray (see `calendarCellText()`'s tooltip text for the same pattern)."
34843
+ "description": "Locale-derived weekday-axis labels for the 7 rows drawn down the left of\nthe calendar grid. The labeled weekdays are always Monday, Wednesday, and\nFriday — matching today's sparse every-other-day label density the\nrest stay blank. Which *row* each one lands on depends on\n`firstDayOfWeek`, since `buildCalendarGrid()` anchors `firstWeekStart`\n(and therefore row 0) at that weekday. For each target weekday (using\nthe standard JS convention, Sunday=0..Saturday=6, so Monday=1,\nWednesday=3, Friday=5), the row is `(weekday - firstDayOfWeek + 7) % 7`;\nwith the default `firstDayOfWeek` of 0 this reduces to rows 1/3/5,\nunchanged. The label *text* for each computed row is derived via\n`Intl.DateTimeFormat` on a real UTC date that actually falls on that row,\nso it follows the runtime locale instead of a hardcoded English array\n(see `calendarCellText()`'s tooltip text for the same pattern)."
34618
34844
  }
34619
34845
  ],
34620
34846
  "events": [
@@ -35810,6 +36036,13 @@
35810
36036
  "type": {
35811
36037
  "text": "boolean"
35812
36038
  }
36039
+ },
36040
+ {
36041
+ "name": "localize",
36042
+ "optional": true,
36043
+ "type": {
36044
+ "text": "KbdLocalize"
36045
+ }
35813
36046
  }
35814
36047
  ],
35815
36048
  "description": "Splits a `keys` string (e.g. `'mod+shift+p'`) into its resolved token\nlabels, dropping empty segments from stray/leading/trailing `+`s."
@@ -35834,9 +36067,16 @@
35834
36067
  "type": {
35835
36068
  "text": "boolean"
35836
36069
  }
36070
+ },
36071
+ {
36072
+ "name": "localize",
36073
+ "optional": true,
36074
+ "type": {
36075
+ "text": "KbdLocalize"
36076
+ }
35837
36077
  }
35838
36078
  ],
35839
- "description": "Resolves one `+`-separated token of a `keys` string to its rendered glyph\nand spelled-out word, given whether the shortcut is being shown on macOS.\n\nExported as a pure function (parameterized on `isMac` rather than reading\nthe module-scope platform constant directly) so both the macOS and\nnon-macOS branches are directly unit-testable without having to spoof\n`navigator` in a browser test environment that only ever runs as one\nplatform."
36079
+ "description": "Resolves one `+`-separated token of a `keys` string to its rendered glyph\nand spelled-out word, given whether the shortcut is being shown on macOS.\n\nExported as a pure function (parameterized on `isMac` rather than reading\nthe module-scope platform constant directly) so both the macOS and\nnon-macOS branches are directly unit-testable without having to spoof\n`navigator` in a browser test environment that only ever runs as one\nplatform. `localize`, likewise, is an optional parameter (rather than this\nfunction reaching for a component instance's `this.localize()` itself) for\nthe same reason -- every existing 2-arg call keeps returning the literal\nbuilt-in English defaults unchanged; only `<lyra-kbd>`'s own `render()`\npasses one, bound to `this.localize()`."
35840
36080
  }
35841
36081
  ],
35842
36082
  "exports": [
@@ -36490,6 +36730,16 @@
36490
36730
  },
36491
36731
  "privacy": "private"
36492
36732
  },
36733
+ {
36734
+ "kind": "field",
36735
+ "name": "label",
36736
+ "type": {
36737
+ "text": "string"
36738
+ },
36739
+ "default": "''",
36740
+ "description": "Accessible name for the map region, applied as `[part=\"base\"]`'s `aria-label` so\nscreen-reader users get a description of an otherwise purely visual control.\nEmpty (the default) falls back to the localized `'map'` message.",
36741
+ "attribute": "label"
36742
+ },
36493
36743
  {
36494
36744
  "kind": "field",
36495
36745
  "name": "legend",
@@ -36791,6 +37041,15 @@
36791
37041
  "default": "[0, 0]",
36792
37042
  "fieldName": "center"
36793
37043
  },
37044
+ {
37045
+ "name": "label",
37046
+ "type": {
37047
+ "text": "string"
37048
+ },
37049
+ "default": "''",
37050
+ "description": "Accessible name for the map region, applied as `[part=\"base\"]`'s `aria-label` so\nscreen-reader users get a description of an otherwise purely visual control.\nEmpty (the default) falls back to the localized `'map'` message.",
37051
+ "fieldName": "label"
37052
+ },
36794
37053
  {
36795
37054
  "name": "locale",
36796
37055
  "type": {
@@ -36962,10 +37221,22 @@
36962
37221
  "description": "Every rendered `<img>`.",
36963
37222
  "name": "img"
36964
37223
  },
37224
+ {
37225
+ "description": "Every rendered inline `<code>` span (backtick spans, not fenced blocks).",
37226
+ "name": "inline-code"
37227
+ },
36965
37228
  {
36966
37229
  "description": "Every rendered `<a>`.",
36967
37230
  "name": "link"
36968
37231
  },
37232
+ {
37233
+ "description": "Every rendered `<ul>`/`<ol>`.",
37234
+ "name": "list"
37235
+ },
37236
+ {
37237
+ "description": "Every rendered `<p>`.",
37238
+ "name": "paragraph"
37239
+ },
36969
37240
  {
36970
37241
  "description": "Every rendered `<table>`.",
36971
37242
  "name": "table"
@@ -38190,6 +38461,26 @@
38190
38461
  "module": "src/internal/lyra-element.ts"
38191
38462
  }
38192
38463
  },
38464
+ {
38465
+ "kind": "field",
38466
+ "name": "effectiveEmptyText",
38467
+ "type": {
38468
+ "text": "string"
38469
+ },
38470
+ "privacy": "private",
38471
+ "description": "Resolves `emptyText`'s effective text: an explicit override wins verbatim; left at the\nbuilt-in default it instead routes through `this.localize()` so a locale/`.strings`\noverride applies without requiring `emptyText` itself to be set.",
38472
+ "readonly": true
38473
+ },
38474
+ {
38475
+ "kind": "field",
38476
+ "name": "effectiveLabel",
38477
+ "type": {
38478
+ "text": "string"
38479
+ },
38480
+ "privacy": "private",
38481
+ "description": "Resolves `label`'s effective text: an explicit override wins verbatim; left at the\nbuilt-in default it instead routes through `this.localize()` so a locale/`.strings`\noverride applies without requiring `label` itself to be set.",
38482
+ "readonly": true
38483
+ },
38193
38484
  {
38194
38485
  "kind": "field",
38195
38486
  "name": "effectiveLocale",
@@ -39152,7 +39443,7 @@
39152
39443
  "declarations": [
39153
39444
  {
39154
39445
  "kind": "class",
39155
- "description": "`<lyra-menu>` — an anchored dropdown of `<lyra-menu-item>` actions, opened\nfrom a consumer-supplied trigger (typically an icon button). A close, drop-\nin-shaped replacement for reaching outside this library for a third-party\ndropdown to build a gear menu, an avatar menu, or a history row's overflow\nmenu: click the trigger, a positioned menu appears, clicking an item both\nperforms the action *and* closes the menu.\n\n**ARIA pattern — `role=\"menu\"`/`role=\"menuitem\"` with real roving DOM\nfocus, not a listbox.** Two coherent, mutually-exclusive shapes were\navailable here: (a) `role=\"listbox\"`/`role=\"option\"` with\n`aria-activedescendant`, the pattern `<lyra-select>`'s trigger-button +\npopup listbox uses, where DOM focus never leaves the trigger; or (b)\n`role=\"menu\"`/`role=\"menuitem\"` with real focus moving between actual\nfocusable rows, the WAI-ARIA \"menu button\" pattern. This picks (b):\n`<lyra-menu-item>` rows are real, independently-focusable elements (see\nthat class's own doc), which is the more natural fit for a menu\nspecifically — unlike a listbox's rows, a menu's rows are conventionally\nbutton-/link-shaped, and every well-known native/OS menu (and this\nfamily's own `<lyra-tree>`/`<lyra-tree-node>` pair, which this component's\nroving-tabindex plumbing directly mirrors) already moves real focus rather\nthan merely a virtual `aria-activedescendant` pointer. `role`/`tabIndex`\nare consistently the menu-button shape throughout — never mixed with\nlistbox/option.\n\nInteraction contract (mirrors the WAI-ARIA APG \"menu button\" pattern):\n- Click the trigger (or Enter/Space on it, via the trigger's own native\n `click` activation) toggles the menu, moving focus to the first\n non-disabled item on open.\n- ArrowDown/ArrowUp on the trigger while closed also open it, focusing the\n first/last non-disabled item respectively.\n- Once open, ArrowDown/ArrowUp move the roving focus among non-disabled\n items (wrapping past either end — the recommended, and more common,\n menu-widget behavior, unlike `<lyra-select>`'s clamped listbox nav).\n Home/End jump to the first/last non-disabled item. Enter/Space activate\n the focused item. Escape closes and returns focus to the trigger. Tab\n closes the menu without trapping focus (the browser's own default Tab\n behavior proceeds untouched). A printable keypress runs type-ahead:\n roving focus jumps to the next non-disabled item whose text starts with\n the accumulated buffer, cycling from just after the active item (mirrors\n `<lyra-select>`'s identical listbox type-ahead).\n- A click outside both the trigger and the open popup closes it (mirrors\n `<lyra-select>`'s `onDocPointer` exactly) — this does *not* refocus the\n trigger, since the outside click itself already moved focus somewhere\n the user chose; Escape and a committed selection *do* refocus the\n trigger, since those are dismissals with nowhere else for focus to go.\n\nThe trigger element itself is read from the `trigger` slot's assigned\nelement (first one, if several are assigned) and enhanced imperatively\nwith `aria-haspopup=\"menu\"`/`aria-expanded`/`aria-controls` — the same\n\"reach into a consumer-owned light-DOM element to complete its a11y\nwiring\" approach `<lyra-dialog>` documents for its own heading detection,\nnecessary here because those attributes belong on the actual interactive\ntrigger, which lives outside this component's own shadow root.\n\nThe popup is always rendered (never `display:none`) so `.focus()` calls on\nits content work synchronously the instant it opens — visually hidden via\n`visibility`/`opacity` instead (identical to `<lyra-select>`'s own\n`[part=\"listbox\"]`). `visibility` is an inherited CSS property that\npierces the `<slot>` projection boundary, so every closed-state\n`<lyra-menu-item>` is automatically excluded from sequential (Tab-key)\nnavigation with no separate JS bookkeeping.",
39446
+ "description": "`<lyra-menu>` — an anchored dropdown of `<lyra-menu-item>` actions, opened\nfrom a consumer-supplied trigger (typically an icon button). A close, drop-\nin-shaped replacement for reaching outside this library for a third-party\ndropdown to build a gear menu, an avatar menu, or a history row's overflow\nmenu: click the trigger, a positioned menu appears, clicking an item both\nperforms the action *and* closes the menu.\n\n**ARIA pattern — `role=\"menu\"`/`role=\"menuitem\"` with real roving DOM\nfocus, not a listbox.** Two coherent, mutually-exclusive shapes were\navailable here: (a) `role=\"listbox\"`/`role=\"option\"` with\n`aria-activedescendant`, the pattern `<lyra-select>`'s trigger-button +\npopup listbox uses, where DOM focus never leaves the trigger; or (b)\n`role=\"menu\"`/`role=\"menuitem\"` with real focus moving between actual\nfocusable rows, the WAI-ARIA \"menu button\" pattern. This picks (b):\n`<lyra-menu-item>` rows are real, independently-focusable elements (see\nthat class's own doc), which is the more natural fit for a menu\nspecifically — unlike a listbox's rows, a menu's rows are conventionally\nbutton-/link-shaped, and every well-known native/OS menu (and this\nfamily's own `<lyra-tree>`/`<lyra-tree-node>` pair, which this component's\nroving-tabindex plumbing directly mirrors) already moves real focus rather\nthan merely a virtual `aria-activedescendant` pointer. `role`/`tabIndex`\nare consistently the menu-button shape throughout — never mixed with\nlistbox/option.\n\nInteraction contract (mirrors the WAI-ARIA APG \"menu button\" pattern):\n- Click the trigger (or Enter/Space on it, via the trigger's own native\n `click` activation) toggles the menu, moving focus to the first\n non-disabled item on open.\n- ArrowDown/ArrowUp on the trigger while closed also open it, focusing the\n first/last non-disabled item respectively.\n- Once open, ArrowDown/ArrowUp move the roving focus among non-disabled\n items (wrapping past either end — the recommended, and more common,\n menu-widget behavior, unlike `<lyra-select>`'s clamped listbox nav).\n Home/End jump to the first/last non-disabled item. Enter/Space activate\n the focused item. Escape closes and returns focus to the trigger. Tab\n closes the menu without trapping focus (the browser's own default Tab\n behavior proceeds untouched). A printable keypress runs type-ahead:\n roving focus jumps to the next non-disabled item whose text starts with\n the accumulated buffer, cycling from just after the active item (mirrors\n `<lyra-select>`'s identical listbox type-ahead). All of the above (except\n Escape) only respond to keydowns from a real `<lyra-menu-item>` target,\n so a slotted non-item control (e.g. a date input) keeps its own full\n default keyboard behavior. Escape from such a slotted control closes the\n menu too, but only when `closeOnEscapeAnywhere` is set — it defaults to\n `false`, so existing consumers keep today's behavior unchanged.\n- A click outside both the trigger and the open popup closes it (mirrors\n `<lyra-select>`'s `onDocPointer` exactly) — this does *not* refocus the\n trigger, since the outside click itself already moved focus somewhere\n the user chose; Escape and a committed selection *do* refocus the\n trigger, since those are dismissals with nowhere else for focus to go.\n\nThe trigger element itself is read from the `trigger` slot's assigned\nelement (first one, if several are assigned) and enhanced imperatively\nwith `aria-haspopup=\"menu\"`/`aria-expanded`/`aria-controls` — the same\n\"reach into a consumer-owned light-DOM element to complete its a11y\nwiring\" approach `<lyra-dialog>` documents for its own heading detection,\nnecessary here because those attributes belong on the actual interactive\ntrigger, which lives outside this component's own shadow root.\n\nThe popup is always rendered (never `display:none`) so `.focus()` calls on\nits content work synchronously the instant it opens — visually hidden via\n`visibility`/`opacity` instead (identical to `<lyra-select>`'s own\n`[part=\"listbox\"]`). `visibility` is an inherited CSS property that\npierces the `<slot>` projection boundary, so every closed-state\n`<lyra-menu-item>` is automatically excluded from sequential (Tab-key)\nnavigation with no separate JS bookkeeping.",
39156
39447
  "name": "LyraMenu",
39157
39448
  "cssParts": [
39158
39449
  {
@@ -39205,6 +39496,16 @@
39205
39496
  },
39206
39497
  "privacy": "private"
39207
39498
  },
39499
+ {
39500
+ "kind": "field",
39501
+ "name": "closeOnEscapeAnywhere",
39502
+ "type": {
39503
+ "text": "boolean"
39504
+ },
39505
+ "default": "false",
39506
+ "description": "Extends the Escape-closes-and-refocuses-trigger behavior to keydown\nevents originating from slotted non-item content within `[part=\"list\"]`\n(e.g. a date input or a custom section slotted alongside\n`<lyra-menu-item>`s), not just from a real `<lyra-menu-item>`. Default\n`false` leaves Escape from slotted non-item content with full default\nkeyboard behavior, matching every existing consumer. Arrow/Home/End/\nEnter/Space stay scoped to real `<lyra-menu-item>` targets regardless of\nthis property — only Escape is affected.",
39507
+ "attribute": "close-on-escape-anywhere"
39508
+ },
39208
39509
  {
39209
39510
  "kind": "field",
39210
39511
  "name": "effectiveDirection",
@@ -39219,6 +39520,16 @@
39219
39520
  "module": "src/internal/lyra-element.ts"
39220
39521
  }
39221
39522
  },
39523
+ {
39524
+ "kind": "field",
39525
+ "name": "effectiveLabel",
39526
+ "type": {
39527
+ "text": "string"
39528
+ },
39529
+ "privacy": "private",
39530
+ "description": "Resolves `label`'s effective text: an explicit override wins verbatim; left at the\nbuilt-in default it instead routes through `this.localize()` so a locale/`.strings`\noverride applies without requiring `label` itself to be set.",
39531
+ "readonly": true
39532
+ },
39222
39533
  {
39223
39534
  "kind": "field",
39224
39535
  "name": "effectiveLocale",
@@ -39257,7 +39568,7 @@
39257
39568
  "text": "string"
39258
39569
  },
39259
39570
  "default": "'Menu'",
39260
- "description": "Accessible name for the `role=\"menu\"` popup — override with something\nspecific (e.g. \"Row actions\") when a page has more than one menu.",
39571
+ "description": "Accessible name for the `role=\"menu\"` popup — override with something\nspecific (e.g. \"Row actions\") when a page has more than one menu.\nLocalized (`menuLabel`) when left at its default.",
39261
39572
  "attribute": "label"
39262
39573
  },
39263
39574
  {
@@ -39708,13 +40019,22 @@
39708
40019
  }
39709
40020
  ],
39710
40021
  "attributes": [
40022
+ {
40023
+ "name": "close-on-escape-anywhere",
40024
+ "type": {
40025
+ "text": "boolean"
40026
+ },
40027
+ "default": "false",
40028
+ "description": "Extends the Escape-closes-and-refocuses-trigger behavior to keydown\nevents originating from slotted non-item content within `[part=\"list\"]`\n(e.g. a date input or a custom section slotted alongside\n`<lyra-menu-item>`s), not just from a real `<lyra-menu-item>`. Default\n`false` leaves Escape from slotted non-item content with full default\nkeyboard behavior, matching every existing consumer. Arrow/Home/End/\nEnter/Space stay scoped to real `<lyra-menu-item>` targets regardless of\nthis property — only Escape is affected.",
40029
+ "fieldName": "closeOnEscapeAnywhere"
40030
+ },
39711
40031
  {
39712
40032
  "name": "label",
39713
40033
  "type": {
39714
40034
  "text": "string"
39715
40035
  },
39716
40036
  "default": "'Menu'",
39717
- "description": "Accessible name for the `role=\"menu\"` popup — override with something\nspecific (e.g. \"Row actions\") when a page has more than one menu.",
40037
+ "description": "Accessible name for the `role=\"menu\"` popup — override with something\nspecific (e.g. \"Row actions\") when a page has more than one menu.\nLocalized (`menuLabel`) when left at its default.",
39718
40038
  "fieldName": "label"
39719
40039
  },
39720
40040
  {
@@ -40386,6 +40706,17 @@
40386
40706
  "module": "src/internal/lyra-element.ts"
40387
40707
  }
40388
40708
  },
40709
+ {
40710
+ "kind": "method",
40711
+ "name": "emitValueEvents",
40712
+ "privacy": "private",
40713
+ "return": {
40714
+ "type": {
40715
+ "text": "void"
40716
+ }
40717
+ },
40718
+ "description": "Dispatches the platform-style value-event pair alongside `lyra-change`,\nmirroring `<lyra-select>`/`<lyra-combobox>` so native form bindings and\nframework `v-model` handlers behave consistently across the picker\nfamily."
40719
+ },
40389
40720
  {
40390
40721
  "kind": "method",
40391
40722
  "name": "formDisabledCallback",
@@ -40669,6 +41000,20 @@
40669
41000
  }
40670
41001
  ],
40671
41002
  "events": [
41003
+ {
41004
+ "name": "change",
41005
+ "type": {
41006
+ "text": "Event"
41007
+ },
41008
+ "description": "Fired alongside `lyra-change`, mirroring `<lyra-select>`/`<lyra-combobox>`'s native-style value-change pair so native form bindings/framework `v-model` handlers behave consistently across the picker family."
41009
+ },
41010
+ {
41011
+ "name": "input",
41012
+ "type": {
41013
+ "text": "Event"
41014
+ },
41015
+ "description": "Fired alongside `change`/`lyra-change` (see `change`)."
41016
+ },
40672
41017
  {
40673
41018
  "description": "The selected/typed value changed. `detail: { value: string; inCatalog: boolean }`.",
40674
41019
  "name": "lyra-change"
@@ -41405,6 +41750,7 @@
41405
41750
  "text": "number"
41406
41751
  },
41407
41752
  "default": "0",
41753
+ "description": "The current step, in `[0, length)`.",
41408
41754
  "attribute": "index"
41409
41755
  },
41410
41756
  {
@@ -41414,6 +41760,7 @@
41414
41760
  "text": "number"
41415
41761
  },
41416
41762
  "default": "900",
41763
+ "description": "Delay between ticks, in milliseconds, while playing. Clamped to\n`[MIN_INTERVAL_MS, MAX_TIMEOUT_MS]` — see `scheduleTick()`.",
41417
41764
  "attribute": "interval-ms"
41418
41765
  },
41419
41766
  {
@@ -41423,6 +41770,7 @@
41423
41770
  "text": "number"
41424
41771
  },
41425
41772
  "default": "0",
41773
+ "description": "Total number of steps to play through; the index range is `[0, length)`.",
41426
41774
  "attribute": "length"
41427
41775
  },
41428
41776
  {
@@ -41782,6 +42130,7 @@
41782
42130
  "text": "number"
41783
42131
  },
41784
42132
  "default": "0",
42133
+ "description": "The current step, in `[0, length)`.",
41785
42134
  "fieldName": "index"
41786
42135
  },
41787
42136
  {
@@ -41790,6 +42139,7 @@
41790
42139
  "text": "number"
41791
42140
  },
41792
42141
  "default": "900",
42142
+ "description": "Delay between ticks, in milliseconds, while playing. Clamped to\n`[MIN_INTERVAL_MS, MAX_TIMEOUT_MS]` — see `scheduleTick()`.",
41793
42143
  "fieldName": "intervalMs"
41794
42144
  },
41795
42145
  {
@@ -41798,6 +42148,7 @@
41798
42148
  "text": "number"
41799
42149
  },
41800
42150
  "default": "0",
42151
+ "description": "Total number of steps to play through; the index range is `[0, length)`.",
41801
42152
  "fieldName": "length"
41802
42153
  },
41803
42154
  {
@@ -41877,7 +42228,7 @@
41877
42228
  "declarations": [
41878
42229
  {
41879
42230
  "kind": "class",
41880
- "description": "`<lyra-poll-status>` — a \"next scheduled refresh\" countdown with a built-in pause control: a\nticking `M:SS` display counting down to the next scheduled action, a \"Refreshing…\" state at\nzero, and a pause/resume toggle. First-party invention (no Web Awesome equivalent); the\nclosest existing component, `lyra-stream-status`, is scoped to transport/connection-health\nphases, a different concern from a scheduled-interval countdown -- this mirrors its internal\n`<lyra-live-region>` composition for accessible phase-transition announcements.",
42231
+ "description": "`<lyra-poll-status>` — a \"next scheduled refresh\" countdown with a built-in pause control: a\nticking `M:SS` display counting down to the next scheduled action, a \"Refreshing…\" state at\nzero, a \"Paused\" state while `paused` (instead of freezing on a stale value), and a\npause/resume toggle. First-party invention (no Web Awesome equivalent); the\nclosest existing component, `lyra-stream-status`, is scoped to transport/connection-health\nphases, a different concern from a scheduled-interval countdown -- this mirrors its internal\n`<lyra-live-region>` composition for accessible phase-transition announcements.",
41881
42232
  "name": "LyraPollStatus",
41882
42233
  "cssParts": [
41883
42234
  {
@@ -41885,7 +42236,7 @@
41885
42236
  "name": "base"
41886
42237
  },
41887
42238
  {
41888
- "description": "The `M:SS` (or \"Refreshing…\") text.",
42239
+ "description": "The `M:SS` text (or \"Refreshing…\" once due, or \"Paused\" while `paused`).",
41889
42240
  "name": "countdown"
41890
42241
  },
41891
42242
  {
@@ -43746,6 +44097,16 @@
43746
44097
  "default": "[]",
43747
44098
  "description": "The button row's items."
43748
44099
  },
44100
+ {
44101
+ "kind": "field",
44102
+ "name": "label",
44103
+ "type": {
44104
+ "text": "string"
44105
+ },
44106
+ "default": "''",
44107
+ "description": "Accessible name for the radiogroup, used when no visible label context\nexists around it (e.g. no wrapping `<label>` or adjacent heading). Set\nas `aria-label` on the `role=\"radiogroup\"` element. A plain `aria-label`\nattribute on the host itself is honored as a fallback when this is left\nunset, matching `<lyra-slider>`.",
44108
+ "attribute": "label"
44109
+ },
43749
44110
  {
43750
44111
  "kind": "field",
43751
44112
  "name": "locale",
@@ -43987,6 +44348,15 @@
43987
44348
  }
43988
44349
  ],
43989
44350
  "attributes": [
44351
+ {
44352
+ "name": "label",
44353
+ "type": {
44354
+ "text": "string"
44355
+ },
44356
+ "default": "''",
44357
+ "description": "Accessible name for the radiogroup, used when no visible label context\nexists around it (e.g. no wrapping `<label>` or adjacent heading). Set\nas `aria-label` on the `role=\"radiogroup\"` element. A plain `aria-label`\nattribute on the host itself is honored as a fallback when this is left\nunset, matching `<lyra-slider>`.",
44358
+ "fieldName": "label"
44359
+ },
43990
44360
  {
43991
44361
  "name": "locale",
43992
44362
  "type": {
@@ -44077,6 +44447,10 @@
44077
44447
  "description": "The `<label>` element.",
44078
44448
  "name": "form-control-label"
44079
44449
  },
44450
+ {
44451
+ "description": "An option group's heading row (shown when any option declares a `group`).",
44452
+ "name": "group-label"
44453
+ },
44080
44454
  {
44081
44455
  "description": "The hint message.",
44082
44456
  "name": "hint"
@@ -44935,7 +45309,7 @@
44935
45309
  ],
44936
45310
  "events": [
44937
45311
  {
44938
- "description": "The selection changed.",
45312
+ "description": "The selection changed. Deliberately unprefixed, mirroring native `<select>`'s own event name -- contrast `<lyra-slider>`, which uses `lyra-input`/`lyra-change` for its analogous value-change pair. Which form controls mirror native unprefixed DOM event names (this one, matching `<select>`) versus which use the `lyra-` prefix (`<lyra-slider>`, matching `<input type=\"range\">` via a custom name) is a deliberate per-control choice, not an incidental divergence.",
44939
45313
  "name": "change"
44940
45314
  },
44941
45315
  {
@@ -46614,7 +46988,7 @@
46614
46988
  "declarations": [
46615
46989
  {
46616
46990
  "kind": "class",
46617
- "description": "`<lyra-source-list>` — a collapsible \"Sources\" panel for one chat message,\ngrouping a set of `<lyra-source-card>` children (its default-slot light-DOM\nchildren, plain composition — no `.items` array prop, the same shape\n`<lyra-split>`'s panels take) behind a single clickable header.\n\nThis library has no built-in i18n/pluralization (see `<lyra-empty>`'s plain\n`description` prop for the same stance), so the header text is entirely\nconsumer-supplied: `label-plural` (e.g. `\"3 sources\"`) wins when set,\nfalling back to `label`, falling back to the literal word `\"Sources\"` — see\neach property's own doc. `sourceCount` (a read-only, live-updated count of\nthe currently-slotted children) is exposed for a consumer who wants to\nbuild that string reactively instead of hand-counting DOM children.\n\nThe card list is removed from the accessibility tree (not just visually\nhidden) while collapsed, via the native `hidden` attribute on\n`[part=\"list\"]` — a screen reader user tabbing past the header never lands\non off-screen source cards they can't currently see.",
46991
+ "description": "`<lyra-source-list>` — a collapsible \"Sources\" panel for one chat message,\ngrouping a set of `<lyra-source-card>` children (its default-slot light-DOM\nchildren, plain composition — no `.items` array prop, the same shape\n`<lyra-split>`'s panels take) behind a single clickable header.\n\nThis library has no built-in pluralization (see `<lyra-empty>`'s plain\n`description` prop for a similar stance), so anything beyond the final\nfallback is entirely consumer-supplied: `label-plural` (e.g. `\"3 sources\"`)\nwins when set, falling back to `label`, falling back to a localized\n`\"Sources\"` (via `this.localize()`) — see each property's own doc.\n`sourceCount` (a read-only, live-updated count of the currently-slotted\nchildren) is exposed for a consumer who wants to build that string\nreactively instead of hand-counting DOM children.\n\nThe card list is removed from the accessibility tree (not just visually\nhidden) while collapsed, via the native `hidden` attribute on\n`[part=\"list\"]` — a screen reader user tabbing past the header never lands\non off-screen source cards they can't currently see.",
46618
46992
  "name": "LyraSourceList",
46619
46993
  "cssParts": [
46620
46994
  {
@@ -47500,7 +47874,7 @@
47500
47874
  "type": {
47501
47875
  "text": "(index: number, panelCount: number) => string | undefined"
47502
47876
  },
47503
- "description": "Overrides the auto-inserted divider's `aria-label` — receives the divider's 0-based index\nand the total panel count (`lyra-split` supports N panels, so a single fixed string can't\nexpress every divider's label; a function can). Unset (the default) keeps today's exact\n`` `Resize divider between panel ${i + 1} and panel ${i + 2}` `` template."
47877
+ "description": "Overrides the auto-inserted divider's `aria-label` — receives the divider's 0-based index\nand the total panel count (`lyra-split` supports N panels, so a single fixed string can't\nexpress every divider's label; a function can). Unset (the default) keeps today's exact\nlocalized `Resize divider between panel {a} and panel {b}` template (see `this.localize()`)."
47504
47878
  },
47505
47879
  {
47506
47880
  "kind": "field",
@@ -49080,7 +49454,7 @@
49080
49454
  "text": "StepItem[]"
49081
49455
  },
49082
49456
  "default": "[]",
49083
- "description": "Ordered step data. Never mutated by this component -- see the class doc's controlled-\ncomponent contract. Empty (the default) renders nothing."
49457
+ "description": "Ordered step data. Never mutated by this component -- see the class doc's controlled-\ncomponent contract. Empty (the default) renders nothing. Each step's optional `title`\nrenders as a native `title` tooltip on that step's button -- e.g. to explain why a\n`disabled` step is locked."
49084
49458
  },
49085
49459
  {
49086
49460
  "kind": "field",
@@ -52492,7 +52866,7 @@
52492
52866
  "text": "string"
52493
52867
  },
52494
52868
  "default": "'Thinking'",
52495
- "description": "Header text.",
52869
+ "description": "Header text. Localized (`thinkingPanelLabel`) when left at its default\n`'Thinking'`; any other value is shown as-is.",
52496
52870
  "attribute": "label"
52497
52871
  },
52498
52872
  {
@@ -52761,7 +53135,7 @@
52761
53135
  "text": "string"
52762
53136
  },
52763
53137
  "default": "'Thinking'",
52764
- "description": "Header text.",
53138
+ "description": "Header text. Localized (`thinkingPanelLabel`) when left at its default\n`'Thinking'`; any other value is shown as-is.",
52765
53139
  "fieldName": "label"
52766
53140
  },
52767
53141
  {
@@ -52835,7 +53209,7 @@
52835
53209
  "declarations": [
52836
53210
  {
52837
53211
  "kind": "class",
52838
- "description": "`<lyra-time-range>` — a two-handle brush/scrubber over a numeric domain.\nCallers map their own time axis to `[min, max]`; no date logic lives here\n(matches the no-date-library constraint used elsewhere in this library).\n\nOptionally paired with a row of discrete presets (`presets`) — e.g. \"Last\n7 days\" / \"Last 30 days\" — rendered above the track; picking one is just a\nshortcut that sets both handles at once, the continuous brush underneath\nis unaffected and both interaction modes coexist.\n\nForm-associated (via a directly-attached `ElementInternals`, mirroring\n`<lyra-combobox>`'s minimal pattern rather than the single-string-value\n`FormAssociated` mixin, which doesn't fit a two-handle range): an ancestor\n`<fieldset disabled>` disables both handles and every preset button\nthrough `effectiveDisabled`, the same way it would a native `<input>`,\nwithout touching the consumer-facing `disabled` property/attribute itself.",
53212
+ "description": "`<lyra-time-range>` — a two-handle brush/scrubber over a numeric domain.\nCallers map their own time axis to `[min, max]`; no date logic lives here\n(matches the no-date-library constraint used elsewhere in this library).\n\nOptionally paired with a row of discrete presets (`presets`) — e.g. \"Last\n7 days\" / \"Last 30 days\" — rendered above the track; picking one is just a\nshortcut that sets both handles at once, the continuous brush underneath\nis unaffected and both interaction modes coexist.\n\nForm-associated only for the `<fieldset disabled>` cascade, not for a\nsubmitted value: it attaches `ElementInternals` (like `<lyra-combobox>`'s\nminimal pattern, rather than the single-string-value `FormAssociated`\nmixin, which doesn't fit a two-handle range) purely so an ancestor\n`<fieldset disabled>` disables both handles and every preset button\nthrough `effectiveDisabled`, the same way it would a native `<input>`,\nwithout touching the consumer-facing `disabled` property/attribute itself.\nUnlike `<lyra-combobox>`, it never calls `internals.setFormValue()` and\nhas no `name` — the selected range is not included in the owning form's\n`FormData` on submit; read `start`/`end` directly (e.g. from `lyra-change`)\ninstead of relying on native form submission.",
52839
53213
  "name": "LyraTimeRange",
52840
53214
  "cssParts": [
52841
53215
  {
@@ -55022,7 +55396,7 @@
55022
55396
  "declarations": [
55023
55397
  {
55024
55398
  "kind": "class",
55025
- "description": "`<lyra-tool-call-chip>` — a compact inline pill representing one tool/\nfunction call an agent made mid-conversation, e.g.\n`web_search: Searching web…` with a `running` spinner. It owns no detail\nsurface of its own: clicking (or Enter/Space-activating) it only fires\n`lyra-tool-chip-select` — a consumer wires that to opening a\n`<lyra-tool-result-dialog>` (or anything else) at the call site. Keeping\nthe two decoupled means a chip can be reused wherever a compact call\nsummary is useful, with or without a detail surface behind it.\n\nThe default slot is *not* the chip's visible content — the chip's own\nlabel is always built from `name`/`summary`/`status`/`duration-ms`. It's\nreserved for optional rich detail content (e.g. the tool's raw arguments,\na short preview) shown in a floating tooltip on hover/focus, positioned\nwith `internal/positioner.js`'s `place()` the same way `<lyra-combobox>`\npositions its listbox. No tooltip is shown at all when the slot carries no\ncontent — hovering an empty chip does nothing. Hover and keyboard focus are\ntracked as independent reasons to keep the tooltip open (mirrors\n`<lyra-citation-badge>`'s popover), so releasing one modality while the\nother is still active doesn't close it, and the trigger button's\n`aria-describedby` points at the tooltip's id whenever it's open and has\ncontent, so the association reaches assistive tech too.\n\nThe `icon` slot overrides the built-in per-status glyph entirely via the\nplatform's own slot-fallback-content mechanism (`<slot\nname=\"icon\">${fallback}</slot>` — the same pattern `<lyra-stat>`'s\n`caption` slot and `<lyra-file-input>`'s default slot already use):\nwhatever is assigned to `slot=\"icon\"` wins; otherwise the `icon` prop is\nrendered as a literal hint (e.g. an emoji); otherwise the built-in glyph\nfor the current `status` is used.",
55399
+ "description": "`<lyra-tool-call-chip>` — a compact inline pill representing one tool/\nfunction call an agent made mid-conversation, e.g.\n`web_search: Searching web…` with a `running` spinner. It owns no detail\nsurface of its own: clicking (or Enter/Space-activating) it only fires\n`lyra-tool-call-chip-select` (plus, for one minor cycle, the deprecated\n`lyra-tool-chip-select` alias) — a consumer wires that to opening a\n`<lyra-tool-result-dialog>` (or anything else) at the call site. Keeping\nthe two decoupled means a chip can be reused wherever a compact call\nsummary is useful, with or without a detail surface behind it.\n\nThe default slot is *not* the chip's visible content — the chip's own\nlabel is always built from `name`/`summary`/`status`/`duration-ms`. It's\nreserved for optional rich detail content (e.g. the tool's raw arguments,\na short preview) shown in a floating tooltip on hover/focus, positioned\nwith `internal/positioner.js`'s `place()` the same way `<lyra-combobox>`\npositions its listbox. No tooltip is shown at all when the slot carries no\ncontent — hovering an empty chip does nothing. Hover and keyboard focus are\ntracked as independent reasons to keep the tooltip open (mirrors\n`<lyra-citation-badge>`'s popover), so releasing one modality while the\nother is still active doesn't close it, and the trigger button's\n`aria-describedby` points at the tooltip's id whenever it's open and has\ncontent, so the association reaches assistive tech too.\n\nThe `icon` slot overrides the built-in per-status glyph entirely via the\nplatform's own slot-fallback-content mechanism (`<slot\nname=\"icon\">${fallback}</slot>` — the same pattern `<lyra-stat>`'s\n`caption` slot and `<lyra-file-input>`'s default slot already use):\nwhatever is assigned to `slot=\"icon\"` wins; otherwise the `icon` prop is\nrendered as a literal hint (e.g. an emoji); otherwise the built-in glyph\nfor the current `status` is used.",
55026
55400
  "name": "LyraToolCallChip",
55027
55401
  "cssParts": [
55028
55402
  {
@@ -55093,7 +55467,7 @@
55093
55467
  "text": "string"
55094
55468
  },
55095
55469
  "default": "''",
55096
- "description": "Unique identifier for this specific invocation — echoed back in `lyra-tool-chip-select`'s\ndetail so a listener can correlate the click with the call it fired for.",
55470
+ "description": "Unique identifier for this specific invocation — echoed back in `lyra-tool-call-chip-select`'s\ndetail so a listener can correlate the click with the call it fired for.",
55097
55471
  "attribute": "call-id"
55098
55472
  },
55099
55473
  {
@@ -55484,6 +55858,10 @@
55484
55858
  "events": [
55485
55859
  {
55486
55860
  "description": "The chip was activated (click or Enter/Space while focused). `detail: { name, callId }`.",
55861
+ "name": "lyra-tool-call-chip-select"
55862
+ },
55863
+ {
55864
+ "description": "Deprecated alias for `lyra-tool-call-chip-select`, fired alongside it for one minor cycle so existing listeners keep working. Removed in the next major.",
55487
55865
  "name": "lyra-tool-chip-select"
55488
55866
  }
55489
55867
  ],
@@ -55494,7 +55872,7 @@
55494
55872
  "text": "string"
55495
55873
  },
55496
55874
  "default": "''",
55497
- "description": "Unique identifier for this specific invocation — echoed back in `lyra-tool-chip-select`'s\ndetail so a listener can correlate the click with the call it fired for.",
55875
+ "description": "Unique identifier for this specific invocation — echoed back in `lyra-tool-call-chip-select`'s\ndetail so a listener can correlate the click with the call it fired for.",
55498
55876
  "fieldName": "callId"
55499
55877
  },
55500
55878
  {
@@ -55623,6 +56001,10 @@
55623
56001
  "description": "A field's helper text, from `schema.description`.",
55624
56002
  "name": "description"
55625
56003
  },
56004
+ {
56005
+ "description": "The message shown when `schema.properties` has no entries.",
56006
+ "name": "empty"
56007
+ },
55626
56008
  {
55627
56009
  "description": "A field-level or form-level validation message.",
55628
56010
  "name": "error"
@@ -55634,6 +56016,10 @@
55634
56016
  {
55635
56017
  "description": "A field's label.",
55636
56018
  "name": "label"
56019
+ },
56020
+ {
56021
+ "description": "The fallback note rendered in place of a control for a property whose `type` is outside this renderer's scope.",
56022
+ "name": "unsupported"
55637
56023
  }
55638
56024
  ],
55639
56025
  "members": [
@@ -56753,7 +57139,7 @@
56753
57139
  "text": "boolean"
56754
57140
  },
56755
57141
  "default": "false",
56756
- "description": "Whether the dialog is open. Set this (or call `close()`) — there is no\nseparate `show()`/`hide()` pair. Both paths restore focus to the trigger\nelement identically; only `close()` additionally fires\n`lyra-dialog-close`, since a direct assignment carries no reason string\nto attach to that event.",
57142
+ "description": "Whether the dialog is open. Set this (or call `close()`) — there is no\nseparate `show()`/`hide()` pair. Both paths restore focus to the trigger\nelement identically; only `close()` additionally fires\n`lyra-close`, since a direct assignment carries no reason string\nto attach to that event.",
56757
57143
  "attribute": "open",
56758
57144
  "reflects": true
56759
57145
  },
@@ -56891,7 +57277,7 @@
56891
57277
  }
56892
57278
  }
56893
57279
  ],
56894
- "description": "Close the dialog and return focus to whatever had it before the dialog\nopened. `reason` is forwarded as the `lyra-dialog-close` detail --\nbuilt-in triggers pass `'escape'`/`'backdrop'`/`'close-button'`; a\nconsumer's own close affordance (e.g. a footer action button) should\ncall this directly with its own reason string, so every dismissal path\nfunnels through the same event instead of the consumer having to also\ntoggle `open` itself.\n\nFocus restoration follows the `open` lifecycle, so a direct `.open =\nfalse` assignment restores focus identically to calling `close()` -- the\none thing a direct assignment still can't do is fire\n`lyra-dialog-close`, since there's no reason string to attach without\ngoing through this method."
57280
+ "description": "Close the dialog and return focus to whatever had it before the dialog\nopened. `reason` is forwarded as the `lyra-close` detail --\nbuilt-in triggers pass `'escape'`/`'backdrop'`/`'close-button'`; a\nconsumer's own close affordance (e.g. a footer action button) should\ncall this directly with its own reason string, so every dismissal path\nfunnels through the same event instead of the consumer having to also\ntoggle `open` itself.\n\nFocus restoration follows the `open` lifecycle, so a direct `.open =\nfalse` assignment restores focus identically to calling `close()` -- the\none thing a direct assignment still can't do is fire\n`lyra-close`, since there's no reason string to attach without\ngoing through this method."
56895
57281
  },
56896
57282
  {
56897
57283
  "kind": "method",
@@ -57015,7 +57401,7 @@
57015
57401
  "events": [
57016
57402
  {
57017
57403
  "description": "`detail: ToolResultDialogCloseReason`. Fired exactly once per dismissal, via Escape, a backdrop click, the built-in close button, or a `close()` call.",
57018
- "name": "lyra-dialog-close"
57404
+ "name": "lyra-close"
57019
57405
  },
57020
57406
  {
57021
57407
  "description": "`detail: boolean` (the new `maximized` state), fired when the header's maximize/restore toggle is clicked.",
@@ -57059,7 +57445,7 @@
57059
57445
  "text": "boolean"
57060
57446
  },
57061
57447
  "default": "false",
57062
- "description": "Whether the dialog is open. Set this (or call `close()`) — there is no\nseparate `show()`/`hide()` pair. Both paths restore focus to the trigger\nelement identically; only `close()` additionally fires\n`lyra-dialog-close`, since a direct assignment carries no reason string\nto attach to that event.",
57448
+ "description": "Whether the dialog is open. Set this (or call `close()`) — there is no\nseparate `show()`/`hide()` pair. Both paths restore focus to the trigger\nelement identically; only `close()` additionally fires\n`lyra-close`, since a direct assignment carries no reason string\nto attach to that event.",
57063
57449
  "fieldName": "open"
57064
57450
  },
57065
57451
  {
@@ -58367,6 +58753,10 @@
58367
58753
  "description": "The optional node badge.",
58368
58754
  "name": "badge"
58369
58755
  },
58756
+ {
58757
+ "description": "The wrapper around a node's expanded child items.",
58758
+ "name": "group"
58759
+ },
58370
58760
  {
58371
58761
  "description": "The node label.",
58372
58762
  "name": "label"
@@ -58791,7 +59181,12 @@
58791
59181
  "name": "LyraTree",
58792
59182
  "cssParts": [
58793
59183
  {
59184
+ "description": "The tree's root wrapper (role=\"tree\").",
58794
59185
  "name": "base"
59186
+ },
59187
+ {
59188
+ "description": "The empty-state message shown when `data` is empty.",
59189
+ "name": "empty"
58795
59190
  }
58796
59191
  ],
58797
59192
  "slots": [
@@ -59298,7 +59693,7 @@
59298
59693
  "declarations": [
59299
59694
  {
59300
59695
  "kind": "class",
59301
- "description": "`<lyra-typing-indicator>` — a purely presentational \"assistant is\nresponding\" presence cue. No events, no interactivity: a consumer mounts\nit while a response is being generated and removes it (or hides it) once\nreal content has arrived.\n\nThree visual variants share one component rather than three separate tags\nbecause callers pick between them along a single axis — how the\nsurrounding surface wants the cue to read — and nothing else about the\ncomponent differs:\n- `dots` (default) — three dots with a staggered bounce, the classic\n \"typing…\" affordance for a standalone status line.\n- `pulse` — a single breathing dot, a quieter cue for a tighter space\n (e.g. next to an avatar).\n- `cursor` — a blinking vertical bar, meant to sit inline at the tail end\n of streamed text that is still being appended to.\n\nAccessibility: this indicator typically mounts and unmounts around a real\ngeneration lifecycle (appears when a response starts, disappears once one\narrives) rather than emitting a stream of updates of its own, so it does\n*not* route through `<lyra-live-region>`/`Announcer`\n(`../../internal/announcer.js`) — that machinery exists to coalesce many\nrapidly-changing announcements into one, and there is only ever a single\nannouncement here: the mount itself. A plain `role=\"status\"` plus an\naccessible name derived from `label` is sufficient, set both as an\n`aria-label` on the host *and* as a visually-hidden text node in the\nshadow tree, so the name survives even if only one of the two is picked up\nby a given assistive-tech/browser pairing. An empty or whitespace-only\n`label` falls back to the default \"Thinking…\" copy in both places, rather\nthan leaving the component with no accessible name at all. The animated dots/pulse/cursor\nshape is `aria-hidden=\"true\"` — it's decorative; `label` is the entire\naccessible content, so nothing narrates individual animation frames.",
59696
+ "description": "`<lyra-typing-indicator>` — a purely presentational \"assistant is\nresponding\" presence cue. No events, no interactivity: a consumer mounts\nit while a response is being generated and removes it (or hides it) once\nreal content has arrived.\n\nThree visual variants share one component rather than three separate tags\nbecause callers pick between them along a single axis — how the\nsurrounding surface wants the cue to read — and nothing else about the\ncomponent differs:\n- `dots` (default) — three dots with a staggered bounce, the classic\n \"typing…\" affordance for a standalone status line.\n- `pulse` — a single breathing dot, a quieter cue for a tighter space\n (e.g. next to an avatar).\n- `cursor` — a blinking vertical bar, meant to sit inline at the tail end\n of streamed text that is still being appended to.\n\nAccessibility: this indicator typically mounts and unmounts around a real\ngeneration lifecycle (appears when a response starts, disappears once one\narrives) rather than emitting a stream of updates of its own, so it does\n*not* route through `<lyra-live-region>`/`Announcer`\n(`../../internal/announcer.js`) — that machinery exists to coalesce many\nrapidly-changing announcements into one, and there is only ever a single\nannouncement here: the mount itself. A plain `role=\"status\"` plus an\naccessible name derived from `label` is sufficient, set both as an\n`aria-label` on the host *and* as a visually-hidden text node in the\nshadow tree, so the name survives even if only one of the two is picked up\nby a given assistive-tech/browser pairing. An untouched-default, empty, or\nwhitespace-only `label` falls back to the localized \"Thinking…\" copy in\nboth places, rather than leaving the component with no accessible name at\nall. The animated dots/pulse/cursor\nshape is `aria-hidden=\"true\"` — it's decorative; `label` is the entire\naccessible content, so nothing narrates individual animation frames.",
59302
59697
  "name": "LyraTypingIndicator",
59303
59698
  "cssParts": [
59304
59699
  {
@@ -59326,7 +59721,7 @@
59326
59721
  "text": "string"
59327
59722
  },
59328
59723
  "privacy": "private",
59329
- "description": "The accessible name actually used, falling back to the default\n\"Thinking…\" copy when `label` is set to an empty or whitespace-only\nstring -- otherwise both the `aria-label` and the sr-only text node\nwould go blank, leaving this purely-decorative component with no\naccessible name at all.",
59724
+ "description": "The accessible name actually used, falling back to the localized\n`'thinking'` message (`\"Thinking…\"` in English) when `label` is left at\nits untouched default or set to an empty/whitespace-only string --\notherwise both the `aria-label` and the sr-only text node would go\nblank, leaving this purely-decorative component with no accessible name\nat all. A caller-customized `label` is used verbatim (not a translation\nconcern), same convention as `<lyra-date-picker>`'s `previousLabel`.",
59330
59725
  "readonly": true
59331
59726
  },
59332
59727
  {
@@ -59364,7 +59759,7 @@
59364
59759
  "text": "string"
59365
59760
  },
59366
59761
  "default": "'Thinking…'",
59367
- "description": "Accessible name, exposed via `role=\"status\"`. Not re-announced on every\nanimation frame — only mount (and any later change to this property)\nproduces a new announcement. An empty or whitespace-only value falls\nback to the default \"Thinking…\" copy (see `accessibleLabel`) so the\ncomponent never loses its accessible name.",
59762
+ "description": "Accessible name, exposed via `role=\"status\"`. Not re-announced on every\nanimation frame — only mount (and any later change to this property)\nproduces a new announcement. An untouched-default, empty, or\nwhitespace-only value falls back to the localized \"Thinking…\" copy (see\n`accessibleLabel`) so the component never loses its accessible name.",
59368
59763
  "attribute": "label"
59369
59764
  },
59370
59765
  {
@@ -59589,7 +59984,7 @@
59589
59984
  "text": "string"
59590
59985
  },
59591
59986
  "default": "'Thinking…'",
59592
- "description": "Accessible name, exposed via `role=\"status\"`. Not re-announced on every\nanimation frame — only mount (and any later change to this property)\nproduces a new announcement. An empty or whitespace-only value falls\nback to the default \"Thinking…\" copy (see `accessibleLabel`) so the\ncomponent never loses its accessible name.",
59987
+ "description": "Accessible name, exposed via `role=\"status\"`. Not re-announced on every\nanimation frame — only mount (and any later change to this property)\nproduces a new announcement. An untouched-default, empty, or\nwhitespace-only value falls back to the localized \"Thinking…\" copy (see\n`accessibleLabel`) so the component never loses its accessible name.",
59593
59988
  "fieldName": "label"
59594
59989
  },
59595
59990
  {
@@ -60582,6 +60977,14 @@
60582
60977
  "description": "Header action controls, rendered before the collapse/expand buttons.",
60583
60978
  "name": "actions"
60584
60979
  },
60980
+ {
60981
+ "description": "Overrides the built-in chevron glyph inside the collapse/expand toggle button entirely, via the platform's own slot-fallback-content mechanism (same convention as `<lyra-tool-call-chip>`'s `icon` slot): whatever is assigned wins, otherwise the default chevron renders. Only meaningful while `collapsible`.",
60982
+ "name": "collapse-icon"
60983
+ },
60984
+ {
60985
+ "description": "Overrides the built-in expand/close glyph inside the fullscreen toggle button entirely, using the same mechanism -- the override replaces *both* the \"expand\" and \"exit fullscreen\" default icons, so a consumer supplying one is responsible for its own expand/exit distinction (e.g. by reading the `fullscreen` attribute). Only meaningful while `expandable`.",
60986
+ "name": "fullscreen-icon"
60987
+ },
60585
60988
  {
60586
60989
  "description": "Optional leading icon in the title row.",
60587
60990
  "name": "icon"
@@ -60593,6 +60996,10 @@
60593
60996
  {
60594
60997
  "description": "Rich sublabel content (overrides the `sublabel` attribute).",
60595
60998
  "name": "sublabel"
60999
+ },
61000
+ {
61001
+ "description": "Content for the view whose `WidgetView.id` matches `{id}`, rendered when `views` is non-empty.",
61002
+ "name": "view-{id}"
60596
61003
  }
60597
61004
  ],
60598
61005
  "members": [
@@ -60870,7 +61277,7 @@
60870
61277
  "text": "WidgetView[]"
60871
61278
  },
60872
61279
  "default": "[]",
60873
- "description": "Named alternate views for the panel body -- e.g. a chart/table toggle inside the same card\nchrome. Each entry gets a header toggle button and a `<slot name=\"view-${id}\">`. Empty (the\ndefault) renders today's single unnamed default slot as the sole view, unchanged."
61280
+ "description": "Named alternate views for the panel body -- e.g. a chart/table toggle inside the same card\nchrome. Each entry gets a header toggle button and a `<slot name=\"view-${id}\">`. Empty (the\ndefault) renders today's single unnamed default slot as the sole view, unchanged. An entry's\n`label` is optional -- see `WidgetView`'s own doc for the icon-only (`ariaLabel`) case."
60874
61281
  },
60875
61282
  {
60876
61283
  "kind": "method",
@@ -61037,15 +61444,15 @@
61037
61444
  ],
61038
61445
  "events": [
61039
61446
  {
61040
- "description": "`detail: boolean` (the new `collapsed` state).",
61447
+ "description": "`detail: { collapsed }` (the new `collapsed` state).",
61041
61448
  "name": "lyra-collapse-change"
61042
61449
  },
61043
61450
  {
61044
- "description": "`detail: boolean` (the new `fullscreen` state).",
61451
+ "description": "`detail: { fullscreen }` (the new `fullscreen` state).",
61045
61452
  "name": "lyra-fullscreen-change"
61046
61453
  },
61047
61454
  {
61048
- "description": "Fired when the active view changes via a header toggle click. `detail: string` (the new view's `id`).",
61455
+ "description": "Fired when the active view changes via a header toggle click. `detail: { viewId }` (the new view's `id`).",
61049
61456
  "name": "lyra-view-change"
61050
61457
  }
61051
61458
  ],
@@ -61647,6 +62054,17 @@
61647
62054
  }
61648
62055
  }
61649
62056
  },
62057
+ {
62058
+ "kind": "method",
62059
+ "name": "fontWeight",
62060
+ "privacy": "private",
62061
+ "return": {
62062
+ "type": {
62063
+ "text": "string"
62064
+ }
62065
+ },
62066
+ "description": "Reads the actual `--lyra-font-weight-semibold` value the same way\n`fontFamily()` reads `--lyra-font` -- must match `[part='word']`'s\n`font-weight` in word-cloud.styles.ts, so a theme/consumer override of\nthat token can't silently desync canvas text measurement (used for the\nspiral layout's collision boxes) from the actually rendered glyph width."
62067
+ },
61650
62068
  {
61651
62069
  "kind": "method",
61652
62070
  "name": "localize",