@aceshooting/lyra-ui 2.10.0 → 2.12.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 (256) hide show
  1. package/custom-elements.json +2188 -63
  2. package/dist/components/app-rail/app-rail.class.d.ts.map +1 -1
  3. package/dist/components/app-rail/app-rail.class.js +2 -1
  4. package/dist/components/app-rail/app-rail.class.js.map +1 -1
  5. package/dist/components/attachment-chip/attachment-chip.class.d.ts +16 -22
  6. package/dist/components/attachment-chip/attachment-chip.class.d.ts.map +1 -1
  7. package/dist/components/attachment-chip/attachment-chip.class.js +37 -42
  8. package/dist/components/attachment-chip/attachment-chip.class.js.map +1 -1
  9. package/dist/components/attachment-chip/attachment-chip.styles.d.ts.map +1 -1
  10. package/dist/components/attachment-chip/attachment-chip.styles.js +3 -2
  11. package/dist/components/attachment-chip/attachment-chip.styles.js.map +1 -1
  12. package/dist/components/avatar/avatar.class.d.ts +4 -3
  13. package/dist/components/avatar/avatar.class.d.ts.map +1 -1
  14. package/dist/components/avatar/avatar.class.js +12 -6
  15. package/dist/components/avatar/avatar.class.js.map +1 -1
  16. package/dist/components/button/button.class.d.ts +8 -1
  17. package/dist/components/button/button.class.d.ts.map +1 -1
  18. package/dist/components/button/button.class.js +14 -2
  19. package/dist/components/button/button.class.js.map +1 -1
  20. package/dist/components/button/button.styles.d.ts.map +1 -1
  21. package/dist/components/button/button.styles.js +34 -0
  22. package/dist/components/button/button.styles.js.map +1 -1
  23. package/dist/components/card/card.class.d.ts +3 -0
  24. package/dist/components/card/card.class.d.ts.map +1 -1
  25. package/dist/components/card/card.class.js +3 -0
  26. package/dist/components/card/card.class.js.map +1 -1
  27. package/dist/components/card/card.styles.d.ts.map +1 -1
  28. package/dist/components/card/card.styles.js +7 -0
  29. package/dist/components/card/card.styles.js.map +1 -1
  30. package/dist/components/chart/box-plot.class.d.ts +4 -1
  31. package/dist/components/chart/box-plot.class.d.ts.map +1 -1
  32. package/dist/components/chart/box-plot.class.js +28 -8
  33. package/dist/components/chart/box-plot.class.js.map +1 -1
  34. package/dist/components/chart/box-plot.styles.d.ts.map +1 -1
  35. package/dist/components/chart/box-plot.styles.js +2 -0
  36. package/dist/components/chart/box-plot.styles.js.map +1 -1
  37. package/dist/components/chart/chart.class.d.ts +3 -1
  38. package/dist/components/chart/chart.class.d.ts.map +1 -1
  39. package/dist/components/chart/chart.class.js +17 -6
  40. package/dist/components/chart/chart.class.js.map +1 -1
  41. package/dist/components/chart/chart.styles.d.ts.map +1 -1
  42. package/dist/components/chart/chart.styles.js +2 -0
  43. package/dist/components/chart/chart.styles.js.map +1 -1
  44. package/dist/components/chart/histogram.class.d.ts +2 -0
  45. package/dist/components/chart/histogram.class.d.ts.map +1 -1
  46. package/dist/components/chart/histogram.class.js +6 -0
  47. package/dist/components/chart/histogram.class.js.map +1 -1
  48. package/dist/components/chart/lite-chart.class.d.ts +5 -5
  49. package/dist/components/chart/lite-chart.class.d.ts.map +1 -1
  50. package/dist/components/chart/lite-chart.class.js +35 -9
  51. package/dist/components/chart/lite-chart.class.js.map +1 -1
  52. package/dist/components/chart/lite-chart.styles.d.ts.map +1 -1
  53. package/dist/components/chart/lite-chart.styles.js +5 -0
  54. package/dist/components/chart/lite-chart.styles.js.map +1 -1
  55. package/dist/components/chat-composer/chat-composer.class.d.ts +28 -3
  56. package/dist/components/chat-composer/chat-composer.class.d.ts.map +1 -1
  57. package/dist/components/chat-composer/chat-composer.class.js +82 -4
  58. package/dist/components/chat-composer/chat-composer.class.js.map +1 -1
  59. package/dist/components/chat-message/chat-message.class.d.ts +3 -0
  60. package/dist/components/chat-message/chat-message.class.d.ts.map +1 -1
  61. package/dist/components/chat-message/chat-message.class.js +8 -6
  62. package/dist/components/chat-message/chat-message.class.js.map +1 -1
  63. package/dist/components/chat-message/chat-message.styles.d.ts.map +1 -1
  64. package/dist/components/chat-message/chat-message.styles.js +2 -1
  65. package/dist/components/chat-message/chat-message.styles.js.map +1 -1
  66. package/dist/components/checkbox/checkbox.class.d.ts +15 -2
  67. package/dist/components/checkbox/checkbox.class.d.ts.map +1 -1
  68. package/dist/components/checkbox/checkbox.class.js +28 -8
  69. package/dist/components/checkbox/checkbox.class.js.map +1 -1
  70. package/dist/components/chip/chip-group.class.d.ts +3 -3
  71. package/dist/components/chip/chip-group.class.d.ts.map +1 -1
  72. package/dist/components/chip/chip-group.class.js +3 -1
  73. package/dist/components/chip/chip-group.class.js.map +1 -1
  74. package/dist/components/citation-badge/citation-badge.class.d.ts +4 -1
  75. package/dist/components/citation-badge/citation-badge.class.d.ts.map +1 -1
  76. package/dist/components/citation-badge/citation-badge.class.js +8 -3
  77. package/dist/components/citation-badge/citation-badge.class.js.map +1 -1
  78. package/dist/components/code-block/code-block-core.class.d.ts +7 -1
  79. package/dist/components/code-block/code-block-core.class.d.ts.map +1 -1
  80. package/dist/components/code-block/code-block-core.class.js +11 -2
  81. package/dist/components/code-block/code-block-core.class.js.map +1 -1
  82. package/dist/components/code-block/code-block.class.d.ts +9 -0
  83. package/dist/components/code-block/code-block.class.d.ts.map +1 -1
  84. package/dist/components/code-block/code-block.class.js +13 -1
  85. package/dist/components/code-block/code-block.class.js.map +1 -1
  86. package/dist/components/combobox/combobox.class.d.ts +36 -0
  87. package/dist/components/combobox/combobox.class.d.ts.map +1 -1
  88. package/dist/components/combobox/combobox.class.js +111 -4
  89. package/dist/components/combobox/combobox.class.js.map +1 -1
  90. package/dist/components/combobox/option.class.d.ts.map +1 -1
  91. package/dist/components/combobox/option.class.js +3 -9
  92. package/dist/components/combobox/option.class.js.map +1 -1
  93. package/dist/components/combobox/option.styles.d.ts +2 -0
  94. package/dist/components/combobox/option.styles.d.ts.map +1 -0
  95. package/dist/components/combobox/option.styles.js +7 -0
  96. package/dist/components/combobox/option.styles.js.map +1 -0
  97. package/dist/components/context-meter/context-meter.class.d.ts +2 -0
  98. package/dist/components/context-meter/context-meter.class.d.ts.map +1 -1
  99. package/dist/components/context-meter/context-meter.class.js +18 -7
  100. package/dist/components/context-meter/context-meter.class.js.map +1 -1
  101. package/dist/components/context-meter/context-meter.styles.d.ts.map +1 -1
  102. package/dist/components/context-meter/context-meter.styles.js +3 -0
  103. package/dist/components/context-meter/context-meter.styles.js.map +1 -1
  104. package/dist/components/conversation-item/conversation-item.class.d.ts +5 -4
  105. package/dist/components/conversation-item/conversation-item.class.d.ts.map +1 -1
  106. package/dist/components/conversation-item/conversation-item.class.js +2 -0
  107. package/dist/components/conversation-item/conversation-item.class.js.map +1 -1
  108. package/dist/components/copy-button/copy-button.class.d.ts +10 -0
  109. package/dist/components/copy-button/copy-button.class.d.ts.map +1 -1
  110. package/dist/components/copy-button/copy-button.class.js +35 -4
  111. package/dist/components/copy-button/copy-button.class.js.map +1 -1
  112. package/dist/components/copy-button/copy-button.styles.d.ts.map +1 -1
  113. package/dist/components/copy-button/copy-button.styles.js +5 -1
  114. package/dist/components/copy-button/copy-button.styles.js.map +1 -1
  115. package/dist/components/date-picker/date-input.styles.d.ts.map +1 -1
  116. package/dist/components/date-picker/date-input.styles.js +4 -0
  117. package/dist/components/date-picker/date-input.styles.js.map +1 -1
  118. package/dist/components/diff-view/diff-view.styles.d.ts.map +1 -1
  119. package/dist/components/diff-view/diff-view.styles.js +3 -0
  120. package/dist/components/diff-view/diff-view.styles.js.map +1 -1
  121. package/dist/components/document-preview/document-preview.class.d.ts +14 -2
  122. package/dist/components/document-preview/document-preview.class.d.ts.map +1 -1
  123. package/dist/components/document-preview/document-preview.class.js +45 -6
  124. package/dist/components/document-preview/document-preview.class.js.map +1 -1
  125. package/dist/components/document-preview/document-preview.styles.js +1 -1
  126. package/dist/components/export-button/export-button.class.d.ts +9 -2
  127. package/dist/components/export-button/export-button.class.d.ts.map +1 -1
  128. package/dist/components/export-button/export-button.class.js +21 -3
  129. package/dist/components/export-button/export-button.class.js.map +1 -1
  130. package/dist/components/export-button/export-button.styles.d.ts.map +1 -1
  131. package/dist/components/export-button/export-button.styles.js +21 -2
  132. package/dist/components/export-button/export-button.styles.js.map +1 -1
  133. package/dist/components/file-input/file-input.class.d.ts +9 -3
  134. package/dist/components/file-input/file-input.class.d.ts.map +1 -1
  135. package/dist/components/file-input/file-input.class.js +23 -8
  136. package/dist/components/file-input/file-input.class.js.map +1 -1
  137. package/dist/components/flag/flag.class.d.ts +7 -1
  138. package/dist/components/flag/flag.class.d.ts.map +1 -1
  139. package/dist/components/flag/flag.class.js +11 -3
  140. package/dist/components/flag/flag.class.js.map +1 -1
  141. package/dist/components/flag/flag.styles.js +2 -2
  142. package/dist/components/generation-status/generation-status.class.d.ts.map +1 -1
  143. package/dist/components/generation-status/generation-status.class.js +35 -27
  144. package/dist/components/generation-status/generation-status.class.js.map +1 -1
  145. package/dist/components/graph/graph.class.d.ts +1 -0
  146. package/dist/components/graph/graph.class.d.ts.map +1 -1
  147. package/dist/components/graph/graph.class.js +11 -3
  148. package/dist/components/graph/graph.class.js.map +1 -1
  149. package/dist/components/heatmap/calendar-grid.d.ts +7 -1
  150. package/dist/components/heatmap/calendar-grid.d.ts.map +1 -1
  151. package/dist/components/heatmap/calendar-grid.js +9 -2
  152. package/dist/components/heatmap/calendar-grid.js.map +1 -1
  153. package/dist/components/heatmap/heatmap.class.d.ts +9 -0
  154. package/dist/components/heatmap/heatmap.class.d.ts.map +1 -1
  155. package/dist/components/heatmap/heatmap.class.js +33 -12
  156. package/dist/components/heatmap/heatmap.class.js.map +1 -1
  157. package/dist/components/heatmap/heatmap.styles.d.ts.map +1 -1
  158. package/dist/components/heatmap/heatmap.styles.js +6 -0
  159. package/dist/components/heatmap/heatmap.styles.js.map +1 -1
  160. package/dist/components/input/input.class.d.ts +5 -1
  161. package/dist/components/input/input.class.d.ts.map +1 -1
  162. package/dist/components/input/input.class.js +7 -1
  163. package/dist/components/input/input.class.js.map +1 -1
  164. package/dist/components/input/input.styles.d.ts.map +1 -1
  165. package/dist/components/input/input.styles.js +29 -3
  166. package/dist/components/input/input.styles.js.map +1 -1
  167. package/dist/components/json-viewer/json-viewer.class.js +1 -1
  168. package/dist/components/json-viewer/json-viewer.class.js.map +1 -1
  169. package/dist/components/json-viewer/json-viewer.styles.d.ts.map +1 -1
  170. package/dist/components/json-viewer/json-viewer.styles.js +7 -0
  171. package/dist/components/json-viewer/json-viewer.styles.js.map +1 -1
  172. package/dist/components/map/map.class.d.ts +3 -5
  173. package/dist/components/map/map.class.d.ts.map +1 -1
  174. package/dist/components/map/map.class.js +8 -6
  175. package/dist/components/map/map.class.js.map +1 -1
  176. package/dist/components/markdown/markdown.class.d.ts +5 -5
  177. package/dist/components/markdown/markdown.class.d.ts.map +1 -1
  178. package/dist/components/markdown/markdown.class.js +6 -6
  179. package/dist/components/markdown/markdown.class.js.map +1 -1
  180. package/dist/components/markdown/markdown.styles.d.ts.map +1 -1
  181. package/dist/components/markdown/markdown.styles.js +11 -4
  182. package/dist/components/markdown/markdown.styles.js.map +1 -1
  183. package/dist/components/media-card/media-card.class.d.ts +12 -1
  184. package/dist/components/media-card/media-card.class.d.ts.map +1 -1
  185. package/dist/components/media-card/media-card.class.js +27 -7
  186. package/dist/components/media-card/media-card.class.js.map +1 -1
  187. package/dist/components/mention-popover/mention-popover.styles.d.ts.map +1 -1
  188. package/dist/components/mention-popover/mention-popover.styles.js +2 -0
  189. package/dist/components/mention-popover/mention-popover.styles.js.map +1 -1
  190. package/dist/components/pagination/pagination.class.d.ts +11 -0
  191. package/dist/components/pagination/pagination.class.d.ts.map +1 -1
  192. package/dist/components/pagination/pagination.class.js +28 -1
  193. package/dist/components/pagination/pagination.class.js.map +1 -1
  194. package/dist/components/phone-input/phone-input.class.d.ts +16 -2
  195. package/dist/components/phone-input/phone-input.class.d.ts.map +1 -1
  196. package/dist/components/phone-input/phone-input.class.js +43 -2
  197. package/dist/components/phone-input/phone-input.class.js.map +1 -1
  198. package/dist/components/playback/playback.class.d.ts +11 -0
  199. package/dist/components/playback/playback.class.d.ts.map +1 -1
  200. package/dist/components/playback/playback.class.js +26 -1
  201. package/dist/components/playback/playback.class.js.map +1 -1
  202. package/dist/components/poll-status/poll-status.styles.d.ts.map +1 -1
  203. package/dist/components/poll-status/poll-status.styles.js +4 -0
  204. package/dist/components/poll-status/poll-status.styles.js.map +1 -1
  205. package/dist/components/segmented/segmented.styles.d.ts.map +1 -1
  206. package/dist/components/segmented/segmented.styles.js +3 -0
  207. package/dist/components/segmented/segmented.styles.js.map +1 -1
  208. package/dist/components/select/select.class.d.ts +10 -0
  209. package/dist/components/select/select.class.d.ts.map +1 -1
  210. package/dist/components/select/select.class.js +22 -2
  211. package/dist/components/select/select.class.js.map +1 -1
  212. package/dist/components/skeleton/skeleton.class.d.ts +5 -0
  213. package/dist/components/skeleton/skeleton.class.d.ts.map +1 -1
  214. package/dist/components/skeleton/skeleton.class.js +17 -2
  215. package/dist/components/skeleton/skeleton.class.js.map +1 -1
  216. package/dist/components/skeleton/skeleton.styles.js +2 -2
  217. package/dist/components/sparkline/sparkline.class.d.ts +3 -1
  218. package/dist/components/sparkline/sparkline.class.d.ts.map +1 -1
  219. package/dist/components/sparkline/sparkline.class.js +24 -8
  220. package/dist/components/sparkline/sparkline.class.js.map +1 -1
  221. package/dist/components/stepper/stepper.styles.d.ts.map +1 -1
  222. package/dist/components/stepper/stepper.styles.js +4 -0
  223. package/dist/components/stepper/stepper.styles.js.map +1 -1
  224. package/dist/components/table/table.class.d.ts +47 -0
  225. package/dist/components/table/table.class.d.ts.map +1 -1
  226. package/dist/components/table/table.class.js +95 -19
  227. package/dist/components/table/table.class.js.map +1 -1
  228. package/dist/components/table/table.styles.d.ts.map +1 -1
  229. package/dist/components/table/table.styles.js +39 -0
  230. package/dist/components/table/table.styles.js.map +1 -1
  231. package/dist/components/tool-call-chip/tool-call-chip.class.d.ts +8 -1
  232. package/dist/components/tool-call-chip/tool-call-chip.class.d.ts.map +1 -1
  233. package/dist/components/tool-call-chip/tool-call-chip.class.js +19 -16
  234. package/dist/components/tool-call-chip/tool-call-chip.class.js.map +1 -1
  235. package/dist/components/tool-call-chip/tool-call-chip.styles.d.ts.map +1 -1
  236. package/dist/components/tool-call-chip/tool-call-chip.styles.js +3 -2
  237. package/dist/components/tool-call-chip/tool-call-chip.styles.js.map +1 -1
  238. package/dist/components/tool-result-dialog/tool-result-dialog.class.d.ts +12 -1
  239. package/dist/components/tool-result-dialog/tool-result-dialog.class.d.ts.map +1 -1
  240. package/dist/components/tool-result-dialog/tool-result-dialog.class.js +25 -11
  241. package/dist/components/tool-result-dialog/tool-result-dialog.class.js.map +1 -1
  242. package/dist/components/tool-result-dialog/tool-result-dialog.styles.d.ts.map +1 -1
  243. package/dist/components/tool-result-dialog/tool-result-dialog.styles.js +3 -1
  244. package/dist/components/tool-result-dialog/tool-result-dialog.styles.js.map +1 -1
  245. package/dist/internal/localization.d.ts +1 -1
  246. package/dist/internal/localization.d.ts.map +1 -1
  247. package/dist/internal/localization.js +21 -0
  248. package/dist/internal/localization.js.map +1 -1
  249. package/dist/internal/tokens.styles.d.ts.map +1 -1
  250. package/dist/internal/tokens.styles.js +17 -0
  251. package/dist/internal/tokens.styles.js.map +1 -1
  252. package/dist/lyra.d.ts +5 -5
  253. package/dist/lyra.d.ts.map +1 -1
  254. package/dist/lyra.js.map +1 -1
  255. package/llms-full.txt +211 -78
  256. package/package.json +1 -1
@@ -1391,8 +1391,15 @@
1391
1391
  "declarations": [
1392
1392
  {
1393
1393
  "kind": "class",
1394
- "description": "`<lyra-attachment-chip>` — a compact chip representing one file queued for\n(or already part of) a chat message: a composer's pre-send attachment\ntray, or a sent message's `attachments` slot (see `<lyra-chat-message>`).\n\nTwo independent ways to populate it, matching the two points in a message's\nlifecycle this is used at:\n - Set `file` to a real `File` (fresh from a picker/drop) — `name`, `size`,\n `mime-type` and the image thumbnail are all auto-derived from it.\n - Set the plain `name`/`size`/`mime-type`/`thumbnail-src` props instead,\n for reconstructing a chip from server-persisted attachment metadata\n (e.g. after a page reload, when no real `File` object exists any more).\n\n`file` always wins when both are present — see each accessor's own doc.\nThe image thumbnail for a real `File` is a cached `URL.createObjectURL()`\nblob URL, created in the update lifecycle immediately before the thumbnail\nrenders and revoked automatically once `file`\nchanges away from the object it was created for, and on disconnect — this\ncomponent never leaks a blob URL.\n\nIdentifying *which* attachment a `lyra-remove`/`lyra-retry` event is about:\nthis deliberately reuses the platform's own `id`/`id` attribute (every\nelement already has one; there's no need to shadow it with a second,\ndifferently-named Lit property, unlike e.g. `<lyra-tool-call-chip>`'s\n`call-id` which identifies a *call*, a concept distinct from the chip\nelement itself). Set `id=\"...\"` when you have a stable server-side\nattachment id. When `id` is left unset and `file` is set, a stable id is\nderived from `` `${file.name}:${file.size}:${file.lastModified}` `` — stable\nacross re-renders of the *same* `File` object without requiring the\nconsumer to invent one. When neither is available, a generated internal id\nis used as a last resort so the event always has *some* id.\n\ni18n/locale: every translatable word rendered by this component is\noverride-able via a dedicated property `removeLabel`/`retryLabel`\n(the verb prefixed to the remove/retry buttons' `aria-label`, keeping the\n`displayName` interpolation), and `uploadingLabel`/`uploadFailedLabel` (the\nverb/phrase used in the visible `status-text`, keeping the live percentage\ninterpolation for `uploadingLabel`). All four default to today's exact\nhardcoded English text (`'Remove'`, `'Retry'`, `'Uploading'`, `'Upload\nfailed'`), so leaving them unset changes nothing. These are plain\nproperties, not slots — this component still exposes no slots.",
1394
+ "description": "`<lyra-attachment-chip>` — a compact chip representing one file queued for\n(or already part of) a chat message: a composer's pre-send attachment\ntray, or a sent message's `attachments` slot (see `<lyra-chat-message>`).\n\nTwo independent ways to populate it, matching the two points in a message's\nlifecycle this is used at:\n - Set `file` to a real `File` (fresh from a picker/drop) — `name`, `size`,\n `mime-type` and the image thumbnail are all auto-derived from it.\n - Set the plain `name`/`size`/`mime-type`/`thumbnail-src` props instead,\n for reconstructing a chip from server-persisted attachment metadata\n (e.g. after a page reload, when no real `File` object exists any more).\n\n`file` always wins when both are present — see each accessor's own doc.\nThe image thumbnail for a real `File` is a cached `URL.createObjectURL()`\nblob URL, created in the update lifecycle immediately before the thumbnail\nrenders and revoked automatically once `file`\nchanges away from the object it was created for, and on disconnect — this\ncomponent never leaks a blob URL.\n\nIdentifying *which* attachment a `lyra-remove`/`lyra-retry` event is about:\nthis deliberately reuses the platform's own `id`/`id` attribute (every\nelement already has one; there's no need to shadow it with a second,\ndifferently-named Lit property, unlike e.g. `<lyra-tool-call-chip>`'s\n`call-id` which identifies a *call*, a concept distinct from the chip\nelement itself). Set `id=\"...\"` when you have a stable server-side\nattachment id. When `id` is left unset and `file` is set, a stable id is\nderived from `` `${file.name}:${file.size}:${file.lastModified}` `` — stable\nacross re-renders of the *same* `File` object without requiring the\nconsumer to invent one. When neither is available, a generated internal id\nis used as a last resort so the event always has *some* id.\n\ni18n/locale: complete contextual messages (including filename/percentage\nplacement and punctuation) route through the shared localization registry.\n`removeLabel`/`retryLabel`/`uploadingLabel`/`uploadFailedLabel` remain as\nsimple per-instance copy overrides; use the component's `.strings` map or a\nregistered locale when a translation needs to reorder the interpolated\nvalues. These are plain properties, not slots — this component still\nexposes no slots.",
1395
1395
  "name": "LyraAttachmentChip",
1396
+ "cssProperties": [
1397
+ {
1398
+ "description": "Duration of one indeterminate upload-spinner rotation. The ambient loop stops under reduced motion.",
1399
+ "name": "--lyra-attachment-chip-spinner-duration",
1400
+ "default": "0.8s"
1401
+ }
1402
+ ],
1396
1403
  "cssParts": [
1397
1404
  {
1398
1405
  "description": "The chip's root container.",
@@ -1627,7 +1634,7 @@
1627
1634
  "text": "string"
1628
1635
  },
1629
1636
  "default": "'Remove'",
1630
- "description": "Verb used in the remove button's `aria-label`, interpolated as\n`` `${removeLabel} ${displayName}` `` -- override for i18n/locale.\nDefaults to `'Remove'`, reproducing today's exact `\"Remove ${displayName}\"`\ntext byte-for-byte.",
1637
+ "description": "Verb used in the remove button's accessible name. For complete control over translated\nword order and punctuation, override the `removeWithContext` message instead.",
1631
1638
  "attribute": "remove-label"
1632
1639
  },
1633
1640
  {
@@ -1646,7 +1653,7 @@
1646
1653
  "text": "string"
1647
1654
  },
1648
1655
  "default": "'Retry'",
1649
- "description": "Verb used in the retry button's `aria-label`, interpolated as\n`` `${retryLabel} ${displayName}` `` -- override for i18n/locale.\nDefaults to `'Retry'`, reproducing today's exact `\"Retry ${displayName}\"`\ntext byte-for-byte.",
1656
+ "description": "Verb used in the retry button's accessible name. For complete control over translated word\norder and punctuation, override the `attachmentRetryWithContext` message instead.",
1650
1657
  "attribute": "retry-label"
1651
1658
  },
1652
1659
  {
@@ -1743,7 +1750,7 @@
1743
1750
  "text": "string"
1744
1751
  },
1745
1752
  "default": "'Uploading'",
1746
- "description": "Verb used in the visible uploading status text -- rendered as\n`` `${uploadingLabel} ${percent}%` `` once progress is a meaningful\nnumber, else `` `${uploadingLabel}…` ``. Override for i18n/locale.\nDefaults to `'Uploading'`, reproducing today's exact `\"Uploading N%\"`/\n`\"Uploading…\"` text byte-for-byte.",
1753
+ "description": "Verb used in uploading messages. For complete control over translated word order and\npunctuation, override the `attachmentUploadingWithContext`,\n`attachmentUploadingProgress`, and `attachmentUploadingIndeterminate` messages instead.",
1747
1754
  "attribute": "uploading-label"
1748
1755
  },
1749
1756
  {
@@ -2003,7 +2010,7 @@
2003
2010
  "text": "string"
2004
2011
  },
2005
2012
  "default": "'Remove'",
2006
- "description": "Verb used in the remove button's `aria-label`, interpolated as\n`` `${removeLabel} ${displayName}` `` -- override for i18n/locale.\nDefaults to `'Remove'`, reproducing today's exact `\"Remove ${displayName}\"`\ntext byte-for-byte.",
2013
+ "description": "Verb used in the remove button's accessible name. For complete control over translated\nword order and punctuation, override the `removeWithContext` message instead.",
2007
2014
  "fieldName": "removeLabel"
2008
2015
  },
2009
2016
  {
@@ -2012,7 +2019,7 @@
2012
2019
  "text": "string"
2013
2020
  },
2014
2021
  "default": "'Retry'",
2015
- "description": "Verb used in the retry button's `aria-label`, interpolated as\n`` `${retryLabel} ${displayName}` `` -- override for i18n/locale.\nDefaults to `'Retry'`, reproducing today's exact `\"Retry ${displayName}\"`\ntext byte-for-byte.",
2022
+ "description": "Verb used in the retry button's accessible name. For complete control over translated word\norder and punctuation, override the `attachmentRetryWithContext` message instead.",
2016
2023
  "fieldName": "retryLabel"
2017
2024
  },
2018
2025
  {
@@ -2075,7 +2082,7 @@
2075
2082
  "text": "string"
2076
2083
  },
2077
2084
  "default": "'Uploading'",
2078
- "description": "Verb used in the visible uploading status text -- rendered as\n`` `${uploadingLabel} ${percent}%` `` once progress is a meaningful\nnumber, else `` `${uploadingLabel}…` ``. Override for i18n/locale.\nDefaults to `'Uploading'`, reproducing today's exact `\"Uploading N%\"`/\n`\"Uploading…\"` text byte-for-byte.",
2085
+ "description": "Verb used in uploading messages. For complete control over translated word order and\npunctuation, override the `attachmentUploadingWithContext`,\n`attachmentUploadingProgress`, and `attachmentUploadingIndeterminate` messages instead.",
2079
2086
  "fieldName": "uploadingLabel"
2080
2087
  }
2081
2088
  ],
@@ -2735,7 +2742,7 @@
2735
2742
  "text": "string"
2736
2743
  },
2737
2744
  "default": "''",
2738
- "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.",
2745
+ "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. A host `aria-label` overrides this\nvalue while leaving the visible initials/image unchanged.",
2739
2746
  "attribute": "alt"
2740
2747
  },
2741
2748
  {
@@ -3036,7 +3043,7 @@
3036
3043
  "text": "string"
3037
3044
  },
3038
3045
  "default": "''",
3039
- "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.",
3046
+ "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. A host `aria-label` overrides this\nvalue while leaving the visible initials/image unchanged.",
3040
3047
  "fieldName": "alt"
3041
3048
  },
3042
3049
  {
@@ -3191,6 +3198,7 @@
3191
3198
  "text": "ButtonAppearance"
3192
3199
  },
3193
3200
  "default": "'filled'",
3201
+ "description": "`'filled'` (the default) reads `--lyra-button-fill`, which for `variant=\"neutral\"` is the\nambient `--lyra-color-surface` -- matching this component's own container, by design, for a\nlow-emphasis default. `'accent'` is the loud tier equivalent to `wa-button`'s own runtime\ndefault appearance (used whenever a `wa-button` call site sets only `variant`): a solid,\nhigh-contrast fill for every variant, including `neutral` (`--wa-color-neutral-fill-loud`).",
3194
3202
  "attribute": "appearance",
3195
3203
  "reflects": true
3196
3204
  },
@@ -3240,6 +3248,15 @@
3240
3248
  "module": "src/internal/lyra-element.ts"
3241
3249
  }
3242
3250
  },
3251
+ {
3252
+ "kind": "field",
3253
+ "name": "formAssociated",
3254
+ "type": {
3255
+ "text": "boolean"
3256
+ },
3257
+ "static": true,
3258
+ "default": "true"
3259
+ },
3243
3260
  {
3244
3261
  "kind": "field",
3245
3262
  "name": "loading",
@@ -3504,6 +3521,7 @@
3504
3521
  "text": "ButtonAppearance"
3505
3522
  },
3506
3523
  "default": "'filled'",
3524
+ "description": "`'filled'` (the default) reads `--lyra-button-fill`, which for `variant=\"neutral\"` is the\nambient `--lyra-color-surface` -- matching this component's own container, by design, for a\nlow-emphasis default. `'accent'` is the loud tier equivalent to `wa-button`'s own runtime\ndefault appearance (used whenever a `wa-button` call site sets only `variant`): a solid,\nhigh-contrast fill for every variant, including `neutral` (`--wa-color-neutral-fill-loud`).",
3507
3525
  "fieldName": "appearance"
3508
3526
  },
3509
3527
  {
@@ -3611,7 +3629,7 @@
3611
3629
  "declarations": [
3612
3630
  {
3613
3631
  "kind": "class",
3614
- "description": "`<lyra-card>` — a generic, styled bordered content container: the \"small bordered surface with\npadding\" idiom common to hero highlights, clickable grid tiles, and management-list items. A\ndirect `<lyra-*>` counterpart to `<wa-card>`'s contract, staying slot-compatible with\n`lyra-result-card` where they overlap.",
3632
+ "description": "`<lyra-card>` — a generic, styled bordered content container: the \"small bordered surface with\npadding\" idiom common to hero highlights, clickable grid tiles, and management-list items. A\ndirect `<lyra-*>` counterpart to `<wa-card>`'s contract, staying slot-compatible with\n`lyra-result-card` where they overlap.\n\nThe header is allocation-responsive: long or translated header content can shrink and wrap,\nand the actions group moves onto another line when both no longer fit side by side.",
3615
3633
  "name": "LyraCard",
3616
3634
  "cssParts": [
3617
3635
  {
@@ -4073,7 +4091,7 @@
4073
4091
  "text": "string"
4074
4092
  },
4075
4093
  "default": "''",
4076
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
4094
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
4077
4095
  "attribute": "accessible-label",
4078
4096
  "inheritedFrom": {
4079
4097
  "name": "LyraChart",
@@ -4465,6 +4483,28 @@
4465
4483
  "module": "src/components/chart/chart.class.ts"
4466
4484
  }
4467
4485
  },
4486
+ {
4487
+ "kind": "method",
4488
+ "name": "accessibleName",
4489
+ "privacy": "private",
4490
+ "return": {
4491
+ "type": {
4492
+ "text": "string"
4493
+ }
4494
+ },
4495
+ "parameters": [
4496
+ {
4497
+ "name": "fallback",
4498
+ "type": {
4499
+ "text": "string"
4500
+ }
4501
+ }
4502
+ ],
4503
+ "inheritedFrom": {
4504
+ "name": "LyraChart",
4505
+ "module": "src/components/chart/chart.class.ts"
4506
+ }
4507
+ },
4468
4508
  {
4469
4509
  "kind": "method",
4470
4510
  "name": "addEventListener",
@@ -4622,6 +4662,28 @@
4622
4662
  "module": "src/internal/lyra-element.ts"
4623
4663
  }
4624
4664
  },
4665
+ {
4666
+ "kind": "method",
4667
+ "name": "formatSummaryValue",
4668
+ "privacy": "private",
4669
+ "return": {
4670
+ "type": {
4671
+ "text": "string"
4672
+ }
4673
+ },
4674
+ "parameters": [
4675
+ {
4676
+ "name": "value",
4677
+ "type": {
4678
+ "text": "number"
4679
+ }
4680
+ }
4681
+ ],
4682
+ "inheritedFrom": {
4683
+ "name": "LyraChart",
4684
+ "module": "src/components/chart/chart.class.ts"
4685
+ }
4686
+ },
4625
4687
  {
4626
4688
  "kind": "method",
4627
4689
  "name": "handlePointClick",
@@ -4897,7 +4959,7 @@
4897
4959
  "text": "string"
4898
4960
  },
4899
4961
  "default": "''",
4900
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
4962
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
4901
4963
  "fieldName": "accessibleLabel",
4902
4964
  "inheritedFrom": {
4903
4965
  "name": "LyraChart",
@@ -5169,7 +5231,7 @@
5169
5231
  "text": "string"
5170
5232
  },
5171
5233
  "default": "''",
5172
- "description": "Accessible name applied to the canvas. Falls back to the box labels.",
5234
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the box labels.",
5173
5235
  "attribute": "accessible-label"
5174
5236
  },
5175
5237
  {
@@ -5358,6 +5420,24 @@
5358
5420
  "default": "''",
5359
5421
  "attribute": "y-label"
5360
5422
  },
5423
+ {
5424
+ "kind": "method",
5425
+ "name": "accessibleName",
5426
+ "privacy": "private",
5427
+ "return": {
5428
+ "type": {
5429
+ "text": "string"
5430
+ }
5431
+ },
5432
+ "parameters": [
5433
+ {
5434
+ "name": "fallback",
5435
+ "type": {
5436
+ "text": "string"
5437
+ }
5438
+ }
5439
+ ]
5440
+ },
5361
5441
  {
5362
5442
  "kind": "method",
5363
5443
  "name": "addEventListener",
@@ -5514,6 +5594,16 @@
5514
5594
  }
5515
5595
  ]
5516
5596
  },
5597
+ {
5598
+ "kind": "method",
5599
+ "name": "refreshTheme",
5600
+ "return": {
5601
+ "type": {
5602
+ "text": "void"
5603
+ }
5604
+ },
5605
+ "description": "Re-reads canvas theme custom properties after an out-of-band ancestor theme change."
5606
+ },
5517
5607
  {
5518
5608
  "kind": "method",
5519
5609
  "name": "removeEventListener",
@@ -5586,7 +5676,7 @@
5586
5676
  "text": "string"
5587
5677
  },
5588
5678
  "default": "''",
5589
- "description": "Accessible name applied to the canvas. Falls back to the box labels.",
5679
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the box labels.",
5590
5680
  "fieldName": "accessibleLabel"
5591
5681
  },
5592
5682
  {
@@ -5716,7 +5806,7 @@
5716
5806
  "text": "string"
5717
5807
  },
5718
5808
  "default": "''",
5719
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
5809
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
5720
5810
  "attribute": "accessible-label",
5721
5811
  "inheritedFrom": {
5722
5812
  "name": "LyraChart",
@@ -6108,6 +6198,28 @@
6108
6198
  "module": "src/components/chart/chart.class.ts"
6109
6199
  }
6110
6200
  },
6201
+ {
6202
+ "kind": "method",
6203
+ "name": "accessibleName",
6204
+ "privacy": "private",
6205
+ "return": {
6206
+ "type": {
6207
+ "text": "string"
6208
+ }
6209
+ },
6210
+ "parameters": [
6211
+ {
6212
+ "name": "fallback",
6213
+ "type": {
6214
+ "text": "string"
6215
+ }
6216
+ }
6217
+ ],
6218
+ "inheritedFrom": {
6219
+ "name": "LyraChart",
6220
+ "module": "src/components/chart/chart.class.ts"
6221
+ }
6222
+ },
6111
6223
  {
6112
6224
  "kind": "method",
6113
6225
  "name": "addEventListener",
@@ -6265,6 +6377,28 @@
6265
6377
  "module": "src/internal/lyra-element.ts"
6266
6378
  }
6267
6379
  },
6380
+ {
6381
+ "kind": "method",
6382
+ "name": "formatSummaryValue",
6383
+ "privacy": "private",
6384
+ "return": {
6385
+ "type": {
6386
+ "text": "string"
6387
+ }
6388
+ },
6389
+ "parameters": [
6390
+ {
6391
+ "name": "value",
6392
+ "type": {
6393
+ "text": "number"
6394
+ }
6395
+ }
6396
+ ],
6397
+ "inheritedFrom": {
6398
+ "name": "LyraChart",
6399
+ "module": "src/components/chart/chart.class.ts"
6400
+ }
6401
+ },
6268
6402
  {
6269
6403
  "kind": "method",
6270
6404
  "name": "handlePointClick",
@@ -6540,7 +6674,7 @@
6540
6674
  "text": "string"
6541
6675
  },
6542
6676
  "default": "''",
6543
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
6677
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
6544
6678
  "fieldName": "accessibleLabel",
6545
6679
  "inheritedFrom": {
6546
6680
  "name": "LyraChart",
@@ -6907,7 +7041,7 @@
6907
7041
  "text": "string"
6908
7042
  },
6909
7043
  "default": "''",
6910
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
7044
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
6911
7045
  "attribute": "accessible-label"
6912
7046
  },
6913
7047
  {
@@ -7195,6 +7329,24 @@
7195
7329
  "privacy": "private",
7196
7330
  "default": "false"
7197
7331
  },
7332
+ {
7333
+ "kind": "method",
7334
+ "name": "accessibleName",
7335
+ "privacy": "private",
7336
+ "return": {
7337
+ "type": {
7338
+ "text": "string"
7339
+ }
7340
+ },
7341
+ "parameters": [
7342
+ {
7343
+ "name": "fallback",
7344
+ "type": {
7345
+ "text": "string"
7346
+ }
7347
+ }
7348
+ ]
7349
+ },
7198
7350
  {
7199
7351
  "kind": "method",
7200
7352
  "name": "addEventListener",
@@ -7332,6 +7484,24 @@
7332
7484
  "module": "src/internal/lyra-element.ts"
7333
7485
  }
7334
7486
  },
7487
+ {
7488
+ "kind": "method",
7489
+ "name": "formatSummaryValue",
7490
+ "privacy": "private",
7491
+ "return": {
7492
+ "type": {
7493
+ "text": "string"
7494
+ }
7495
+ },
7496
+ "parameters": [
7497
+ {
7498
+ "name": "value",
7499
+ "type": {
7500
+ "text": "number"
7501
+ }
7502
+ }
7503
+ ]
7504
+ },
7335
7505
  {
7336
7506
  "kind": "method",
7337
7507
  "name": "handlePointClick",
@@ -7527,7 +7697,7 @@
7527
7697
  "text": "string"
7528
7698
  },
7529
7699
  "default": "''",
7530
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
7700
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
7531
7701
  "fieldName": "accessibleLabel"
7532
7702
  },
7533
7703
  {
@@ -7747,7 +7917,7 @@
7747
7917
  "text": "string"
7748
7918
  },
7749
7919
  "default": "''",
7750
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
7920
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
7751
7921
  "attribute": "accessible-label",
7752
7922
  "inheritedFrom": {
7753
7923
  "name": "LyraChart",
@@ -8139,6 +8309,28 @@
8139
8309
  "module": "src/components/chart/chart.class.ts"
8140
8310
  }
8141
8311
  },
8312
+ {
8313
+ "kind": "method",
8314
+ "name": "accessibleName",
8315
+ "privacy": "private",
8316
+ "return": {
8317
+ "type": {
8318
+ "text": "string"
8319
+ }
8320
+ },
8321
+ "parameters": [
8322
+ {
8323
+ "name": "fallback",
8324
+ "type": {
8325
+ "text": "string"
8326
+ }
8327
+ }
8328
+ ],
8329
+ "inheritedFrom": {
8330
+ "name": "LyraChart",
8331
+ "module": "src/components/chart/chart.class.ts"
8332
+ }
8333
+ },
8142
8334
  {
8143
8335
  "kind": "method",
8144
8336
  "name": "addEventListener",
@@ -8296,6 +8488,28 @@
8296
8488
  "module": "src/internal/lyra-element.ts"
8297
8489
  }
8298
8490
  },
8491
+ {
8492
+ "kind": "method",
8493
+ "name": "formatSummaryValue",
8494
+ "privacy": "private",
8495
+ "return": {
8496
+ "type": {
8497
+ "text": "string"
8498
+ }
8499
+ },
8500
+ "parameters": [
8501
+ {
8502
+ "name": "value",
8503
+ "type": {
8504
+ "text": "number"
8505
+ }
8506
+ }
8507
+ ],
8508
+ "inheritedFrom": {
8509
+ "name": "LyraChart",
8510
+ "module": "src/components/chart/chart.class.ts"
8511
+ }
8512
+ },
8299
8513
  {
8300
8514
  "kind": "method",
8301
8515
  "name": "handlePointClick",
@@ -8571,7 +8785,7 @@
8571
8785
  "text": "string"
8572
8786
  },
8573
8787
  "default": "''",
8574
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
8788
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
8575
8789
  "fieldName": "accessibleLabel",
8576
8790
  "inheritedFrom": {
8577
8791
  "name": "LyraChart",
@@ -8905,7 +9119,7 @@
8905
9119
  "text": "string"
8906
9120
  },
8907
9121
  "default": "''",
8908
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
9122
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
8909
9123
  "attribute": "accessible-label",
8910
9124
  "inheritedFrom": {
8911
9125
  "name": "LyraChart",
@@ -9324,6 +9538,28 @@
9324
9538
  "module": "src/components/chart/chart.class.ts"
9325
9539
  }
9326
9540
  },
9541
+ {
9542
+ "kind": "method",
9543
+ "name": "accessibleName",
9544
+ "privacy": "private",
9545
+ "return": {
9546
+ "type": {
9547
+ "text": "string"
9548
+ }
9549
+ },
9550
+ "parameters": [
9551
+ {
9552
+ "name": "fallback",
9553
+ "type": {
9554
+ "text": "string"
9555
+ }
9556
+ }
9557
+ ],
9558
+ "inheritedFrom": {
9559
+ "name": "LyraChart",
9560
+ "module": "src/components/chart/chart.class.ts"
9561
+ }
9562
+ },
9327
9563
  {
9328
9564
  "kind": "method",
9329
9565
  "name": "addEventListener",
@@ -9481,6 +9717,28 @@
9481
9717
  "module": "src/internal/lyra-element.ts"
9482
9718
  }
9483
9719
  },
9720
+ {
9721
+ "kind": "method",
9722
+ "name": "formatSummaryValue",
9723
+ "privacy": "private",
9724
+ "return": {
9725
+ "type": {
9726
+ "text": "string"
9727
+ }
9728
+ },
9729
+ "parameters": [
9730
+ {
9731
+ "name": "value",
9732
+ "type": {
9733
+ "text": "number"
9734
+ }
9735
+ }
9736
+ ],
9737
+ "inheritedFrom": {
9738
+ "name": "LyraChart",
9739
+ "module": "src/components/chart/chart.class.ts"
9740
+ }
9741
+ },
9484
9742
  {
9485
9743
  "kind": "method",
9486
9744
  "name": "handlePointClick",
@@ -9698,7 +9956,7 @@
9698
9956
  "text": "string"
9699
9957
  },
9700
9958
  "default": "''",
9701
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
9959
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
9702
9960
  "fieldName": "accessibleLabel",
9703
9961
  "inheritedFrom": {
9704
9962
  "name": "LyraChart",
@@ -10050,7 +10308,7 @@
10050
10308
  "text": "string"
10051
10309
  },
10052
10310
  "default": "''",
10053
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
10311
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
10054
10312
  "attribute": "accessible-label",
10055
10313
  "inheritedFrom": {
10056
10314
  "name": "LyraChart",
@@ -10442,6 +10700,28 @@
10442
10700
  "module": "src/components/chart/chart.class.ts"
10443
10701
  }
10444
10702
  },
10703
+ {
10704
+ "kind": "method",
10705
+ "name": "accessibleName",
10706
+ "privacy": "private",
10707
+ "return": {
10708
+ "type": {
10709
+ "text": "string"
10710
+ }
10711
+ },
10712
+ "parameters": [
10713
+ {
10714
+ "name": "fallback",
10715
+ "type": {
10716
+ "text": "string"
10717
+ }
10718
+ }
10719
+ ],
10720
+ "inheritedFrom": {
10721
+ "name": "LyraChart",
10722
+ "module": "src/components/chart/chart.class.ts"
10723
+ }
10724
+ },
10445
10725
  {
10446
10726
  "kind": "method",
10447
10727
  "name": "addEventListener",
@@ -10599,6 +10879,28 @@
10599
10879
  "module": "src/internal/lyra-element.ts"
10600
10880
  }
10601
10881
  },
10882
+ {
10883
+ "kind": "method",
10884
+ "name": "formatSummaryValue",
10885
+ "privacy": "private",
10886
+ "return": {
10887
+ "type": {
10888
+ "text": "string"
10889
+ }
10890
+ },
10891
+ "parameters": [
10892
+ {
10893
+ "name": "value",
10894
+ "type": {
10895
+ "text": "number"
10896
+ }
10897
+ }
10898
+ ],
10899
+ "inheritedFrom": {
10900
+ "name": "LyraChart",
10901
+ "module": "src/components/chart/chart.class.ts"
10902
+ }
10903
+ },
10602
10904
  {
10603
10905
  "kind": "method",
10604
10906
  "name": "handlePointClick",
@@ -10874,7 +11176,7 @@
10874
11176
  "text": "string"
10875
11177
  },
10876
11178
  "default": "''",
10877
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
11179
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
10878
11180
  "fieldName": "accessibleLabel",
10879
11181
  "inheritedFrom": {
10880
11182
  "name": "LyraChart",
@@ -11161,7 +11463,7 @@
11161
11463
  "type": {
11162
11464
  "text": "string | undefined"
11163
11465
  },
11164
- "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`.",
11466
+ "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. A host `aria-label`\ntakes precedence. Unset (the default) keeps today's auto-derived (English-fallback) label\nexactly. Named `accessible-label` to match the same override on `lyra-chart`/`lyra-box-plot`.",
11165
11467
  "attribute": "accessible-label"
11166
11468
  },
11167
11469
  {
@@ -11348,7 +11650,7 @@
11348
11650
  "type": {
11349
11651
  "text": "number | undefined"
11350
11652
  },
11351
- "description": "Overrides the internal `PAD_LEFT` (36px) plot-left-padding constant. Unset (the default) keeps\ntoday's fixed 36px.",
11653
+ "description": "Overrides the internal `PAD_LEFT` (36px) axis-gutter constant. The gutter is on the left in\nLTR and the right in RTL, keeping the y axis at logical start. Unset keeps the 36px default.",
11352
11654
  "attribute": "pad-left"
11353
11655
  },
11354
11656
  {
@@ -12126,7 +12428,7 @@
12126
12428
  "type": {
12127
12429
  "text": "string | undefined"
12128
12430
  },
12129
- "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`.",
12431
+ "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. A host `aria-label`\ntakes precedence. Unset (the default) keeps today's auto-derived (English-fallback) label\nexactly. Named `accessible-label` to match the same override on `lyra-chart`/`lyra-box-plot`.",
12130
12432
  "fieldName": "accessibleLabel"
12131
12433
  },
12132
12434
  {
@@ -12222,7 +12524,7 @@
12222
12524
  "type": {
12223
12525
  "text": "number | undefined"
12224
12526
  },
12225
- "description": "Overrides the internal `PAD_LEFT` (36px) plot-left-padding constant. Unset (the default) keeps\ntoday's fixed 36px.",
12527
+ "description": "Overrides the internal `PAD_LEFT` (36px) axis-gutter constant. The gutter is on the left in\nLTR and the right in RTL, keeping the y axis at logical start. Unset keeps the 36px default.",
12226
12528
  "fieldName": "padLeft"
12227
12529
  },
12228
12530
  {
@@ -12358,7 +12660,7 @@
12358
12660
  "text": "string"
12359
12661
  },
12360
12662
  "default": "''",
12361
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
12663
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
12362
12664
  "attribute": "accessible-label",
12363
12665
  "inheritedFrom": {
12364
12666
  "name": "LyraChart",
@@ -12750,6 +13052,28 @@
12750
13052
  "module": "src/components/chart/chart.class.ts"
12751
13053
  }
12752
13054
  },
13055
+ {
13056
+ "kind": "method",
13057
+ "name": "accessibleName",
13058
+ "privacy": "private",
13059
+ "return": {
13060
+ "type": {
13061
+ "text": "string"
13062
+ }
13063
+ },
13064
+ "parameters": [
13065
+ {
13066
+ "name": "fallback",
13067
+ "type": {
13068
+ "text": "string"
13069
+ }
13070
+ }
13071
+ ],
13072
+ "inheritedFrom": {
13073
+ "name": "LyraChart",
13074
+ "module": "src/components/chart/chart.class.ts"
13075
+ }
13076
+ },
12753
13077
  {
12754
13078
  "kind": "method",
12755
13079
  "name": "addEventListener",
@@ -12907,6 +13231,28 @@
12907
13231
  "module": "src/internal/lyra-element.ts"
12908
13232
  }
12909
13233
  },
13234
+ {
13235
+ "kind": "method",
13236
+ "name": "formatSummaryValue",
13237
+ "privacy": "private",
13238
+ "return": {
13239
+ "type": {
13240
+ "text": "string"
13241
+ }
13242
+ },
13243
+ "parameters": [
13244
+ {
13245
+ "name": "value",
13246
+ "type": {
13247
+ "text": "number"
13248
+ }
13249
+ }
13250
+ ],
13251
+ "inheritedFrom": {
13252
+ "name": "LyraChart",
13253
+ "module": "src/components/chart/chart.class.ts"
13254
+ }
13255
+ },
12910
13256
  {
12911
13257
  "kind": "method",
12912
13258
  "name": "handlePointClick",
@@ -13182,7 +13528,7 @@
13182
13528
  "text": "string"
13183
13529
  },
13184
13530
  "default": "''",
13185
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
13531
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
13186
13532
  "fieldName": "accessibleLabel",
13187
13533
  "inheritedFrom": {
13188
13534
  "name": "LyraChart",
@@ -13434,7 +13780,7 @@
13434
13780
  "text": "string"
13435
13781
  },
13436
13782
  "default": "''",
13437
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
13783
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
13438
13784
  "attribute": "accessible-label",
13439
13785
  "inheritedFrom": {
13440
13786
  "name": "LyraChart",
@@ -13826,6 +14172,28 @@
13826
14172
  "module": "src/components/chart/chart.class.ts"
13827
14173
  }
13828
14174
  },
14175
+ {
14176
+ "kind": "method",
14177
+ "name": "accessibleName",
14178
+ "privacy": "private",
14179
+ "return": {
14180
+ "type": {
14181
+ "text": "string"
14182
+ }
14183
+ },
14184
+ "parameters": [
14185
+ {
14186
+ "name": "fallback",
14187
+ "type": {
14188
+ "text": "string"
14189
+ }
14190
+ }
14191
+ ],
14192
+ "inheritedFrom": {
14193
+ "name": "LyraChart",
14194
+ "module": "src/components/chart/chart.class.ts"
14195
+ }
14196
+ },
13829
14197
  {
13830
14198
  "kind": "method",
13831
14199
  "name": "addEventListener",
@@ -13983,6 +14351,28 @@
13983
14351
  "module": "src/internal/lyra-element.ts"
13984
14352
  }
13985
14353
  },
14354
+ {
14355
+ "kind": "method",
14356
+ "name": "formatSummaryValue",
14357
+ "privacy": "private",
14358
+ "return": {
14359
+ "type": {
14360
+ "text": "string"
14361
+ }
14362
+ },
14363
+ "parameters": [
14364
+ {
14365
+ "name": "value",
14366
+ "type": {
14367
+ "text": "number"
14368
+ }
14369
+ }
14370
+ ],
14371
+ "inheritedFrom": {
14372
+ "name": "LyraChart",
14373
+ "module": "src/components/chart/chart.class.ts"
14374
+ }
14375
+ },
13986
14376
  {
13987
14377
  "kind": "method",
13988
14378
  "name": "handlePointClick",
@@ -14258,7 +14648,7 @@
14258
14648
  "text": "string"
14259
14649
  },
14260
14650
  "default": "''",
14261
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
14651
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
14262
14652
  "fieldName": "accessibleLabel",
14263
14653
  "inheritedFrom": {
14264
14654
  "name": "LyraChart",
@@ -14510,7 +14900,7 @@
14510
14900
  "text": "string"
14511
14901
  },
14512
14902
  "default": "''",
14513
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
14903
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
14514
14904
  "attribute": "accessible-label",
14515
14905
  "inheritedFrom": {
14516
14906
  "name": "LyraChart",
@@ -14902,6 +15292,28 @@
14902
15292
  "module": "src/components/chart/chart.class.ts"
14903
15293
  }
14904
15294
  },
15295
+ {
15296
+ "kind": "method",
15297
+ "name": "accessibleName",
15298
+ "privacy": "private",
15299
+ "return": {
15300
+ "type": {
15301
+ "text": "string"
15302
+ }
15303
+ },
15304
+ "parameters": [
15305
+ {
15306
+ "name": "fallback",
15307
+ "type": {
15308
+ "text": "string"
15309
+ }
15310
+ }
15311
+ ],
15312
+ "inheritedFrom": {
15313
+ "name": "LyraChart",
15314
+ "module": "src/components/chart/chart.class.ts"
15315
+ }
15316
+ },
14905
15317
  {
14906
15318
  "kind": "method",
14907
15319
  "name": "addEventListener",
@@ -15059,6 +15471,28 @@
15059
15471
  "module": "src/internal/lyra-element.ts"
15060
15472
  }
15061
15473
  },
15474
+ {
15475
+ "kind": "method",
15476
+ "name": "formatSummaryValue",
15477
+ "privacy": "private",
15478
+ "return": {
15479
+ "type": {
15480
+ "text": "string"
15481
+ }
15482
+ },
15483
+ "parameters": [
15484
+ {
15485
+ "name": "value",
15486
+ "type": {
15487
+ "text": "number"
15488
+ }
15489
+ }
15490
+ ],
15491
+ "inheritedFrom": {
15492
+ "name": "LyraChart",
15493
+ "module": "src/components/chart/chart.class.ts"
15494
+ }
15495
+ },
15062
15496
  {
15063
15497
  "kind": "method",
15064
15498
  "name": "handlePointClick",
@@ -15334,7 +15768,7 @@
15334
15768
  "text": "string"
15335
15769
  },
15336
15770
  "default": "''",
15337
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
15771
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
15338
15772
  "fieldName": "accessibleLabel",
15339
15773
  "inheritedFrom": {
15340
15774
  "name": "LyraChart",
@@ -15586,7 +16020,7 @@
15586
16020
  "text": "string"
15587
16021
  },
15588
16022
  "default": "''",
15589
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
16023
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
15590
16024
  "attribute": "accessible-label",
15591
16025
  "inheritedFrom": {
15592
16026
  "name": "LyraChart",
@@ -15978,6 +16412,28 @@
15978
16412
  "module": "src/components/chart/chart.class.ts"
15979
16413
  }
15980
16414
  },
16415
+ {
16416
+ "kind": "method",
16417
+ "name": "accessibleName",
16418
+ "privacy": "private",
16419
+ "return": {
16420
+ "type": {
16421
+ "text": "string"
16422
+ }
16423
+ },
16424
+ "parameters": [
16425
+ {
16426
+ "name": "fallback",
16427
+ "type": {
16428
+ "text": "string"
16429
+ }
16430
+ }
16431
+ ],
16432
+ "inheritedFrom": {
16433
+ "name": "LyraChart",
16434
+ "module": "src/components/chart/chart.class.ts"
16435
+ }
16436
+ },
15981
16437
  {
15982
16438
  "kind": "method",
15983
16439
  "name": "addEventListener",
@@ -16135,6 +16591,28 @@
16135
16591
  "module": "src/internal/lyra-element.ts"
16136
16592
  }
16137
16593
  },
16594
+ {
16595
+ "kind": "method",
16596
+ "name": "formatSummaryValue",
16597
+ "privacy": "private",
16598
+ "return": {
16599
+ "type": {
16600
+ "text": "string"
16601
+ }
16602
+ },
16603
+ "parameters": [
16604
+ {
16605
+ "name": "value",
16606
+ "type": {
16607
+ "text": "number"
16608
+ }
16609
+ }
16610
+ ],
16611
+ "inheritedFrom": {
16612
+ "name": "LyraChart",
16613
+ "module": "src/components/chart/chart.class.ts"
16614
+ }
16615
+ },
16138
16616
  {
16139
16617
  "kind": "method",
16140
16618
  "name": "handlePointClick",
@@ -16410,7 +16888,7 @@
16410
16888
  "text": "string"
16411
16889
  },
16412
16890
  "default": "''",
16413
- "description": "Accessible name applied to the canvas. Falls back to the dataset labels.",
16891
+ "description": "Accessible name applied to the canvas. A host `aria-label` wins, then this falls back to the dataset labels.",
16414
16892
  "fieldName": "accessibleLabel",
16415
16893
  "inheritedFrom": {
16416
16894
  "name": "LyraChart",
@@ -16638,7 +17116,7 @@
16638
17116
  "declarations": [
16639
17117
  {
16640
17118
  "kind": "class",
16641
- "description": "`<lyra-chat-composer>` — the message input for a chat/agent conversation\nsurface: an auto-resizing textarea plus a send/stop button. Form-\nassociated via the `FormAssociated` mixin (see `<lyra-date-input>` for the\nsame shape), so it participates in native `<form>` submission/validation/\nreset like any other text control — `name`/`value`/`disabled`/`required`/\n`checkValidity()`/`reportValidity()` all come from that mixin.\n\nAuto-resize reads the textarea's own *computed* line-height/padding/\nborder at runtime (`resizeTextarea()`) rather than assuming a fixed\npx-per-row constant, so it stays correct under a consumer's own font-size/\nline-height overrides. It grows between `min-rows` and `max-rows`, then\nswitches to internal scrolling. A `ResizeObserver` on the textarea itself\nre-runs the same fit whenever its *width* changes (a responsive\nbreakpoint, a sidebar toggling, a window resize, an orientation change)\neven though `value`/`min-rows`/`max-rows` never did -- a narrower box\nwraps the same text across more lines, so the previously-fitted height\nwould otherwise go stale and clip content with no scrollbar to reveal it.\n\nEnter-to-send (only active while `submit-on-enter` is true, the default):\nplain Enter submits and is prevented from inserting a newline; Shift+Enter\nalways inserts a newline no matter what; an IME composition step (checked\nvia `isComposing`, with `keyCode === 229` as a defense-in-depth fallback\nfor browsers that report `isComposing` inconsistently on the\ncompositionend-adjacent keydown) is never treated as a submit trigger;\nand while `status` isn't `\"idle\"` Enter is left alone to insert a newline\ntoo, rather than trying to submit again -- there is nothing meaningful to\nsubmit while a previous message is still sending/streaming, and the\ntextarea deliberately stays interactive (see `disabled` below) so a user\ncan keep composing their next message in the meantime.\n\nDeliberately no label/hint/error chrome -- a composite chat-input control, not a labeled form\nfield; wrap it in your own layout for that context.\n\n`lyra-submit`'s `detail.value` is always the exact, untrimmed current\nvalue (`detail.value === value` at the moment it fires) -- trimming is\nleft to the consumer so it never silently diverges from what `value`\nitself reports. Submitting does not clear `value`; the consumer clears it\nonce the submission has actually been accepted (so e.g. a failed send can\nleave the text in place for retry).",
17119
+ "description": "`<lyra-chat-composer>` — the message input for a chat/agent conversation\nsurface: an auto-resizing textarea plus a send/stop button. Form-\nassociated via the `FormAssociated` mixin (see `<lyra-date-input>` for the\nsame shape), so it participates in native `<form>` submission/validation/\nreset like any other text control — `name`/`value`/`disabled`/`required`/\n`checkValidity()`/`reportValidity()` all come from that mixin.\n\nAuto-resize reads the textarea's own *computed* line-height/padding/\nborder at runtime (`resizeTextarea()`) rather than assuming a fixed\npx-per-row constant, so it stays correct under a consumer's own font-size/\nline-height overrides. It grows between `min-rows` and `max-rows`, then\nswitches to internal scrolling. A `ResizeObserver` on the textarea itself\nre-runs the same fit whenever its *width* changes (a responsive\nbreakpoint, a sidebar toggling, a window resize, an orientation change)\neven though `value`/`min-rows`/`max-rows` never did -- a narrower box\nwraps the same text across more lines, so the previously-fitted height\nwould otherwise go stale and clip content with no scrollbar to reveal it.\n\nEnter-to-send (only active while `submit-on-enter` is true, the default):\nplain Enter submits and is prevented from inserting a newline; Shift+Enter\nalways inserts a newline no matter what; an IME composition step (checked\nvia `isComposing`, with `keyCode === 229` as a defense-in-depth fallback\nfor browsers that report `isComposing` inconsistently on the\ncompositionend-adjacent keydown) is never treated as a submit trigger;\nand while `status` isn't `\"idle\"` Enter is left alone to insert a newline\ntoo, rather than trying to submit again -- there is nothing meaningful to\nsubmit while a previous message is still sending/streaming, and the\ntextarea deliberately stays interactive (see `disabled` below) so a user\ncan keep composing their next message in the meantime.\n\nDeliberately no label/hint/error chrome -- a composite chat-input control, not a labeled form\nfield; wrap it in your own layout for that context. A host `aria-label` is forwarded to the\ninternal textarea and takes precedence over the placeholder-derived name.\n\n`lyra-submit`'s `detail.value` is always the exact, untrimmed current\nvalue (`detail.value === value` at the moment it fires) -- trimming is\nleft to the consumer so it never silently diverges from what `value`\nitself reports. Submitting does not clear `value`; the consumer clears it\nonce the submission has actually been accepted (so e.g. a failed send can\nleave the text in place for retry).",
16642
17120
  "name": "LyraChatComposer",
16643
17121
  "cssParts": [
16644
17122
  {
@@ -16685,6 +17163,16 @@
16685
17163
  }
16686
17164
  ],
16687
17165
  "members": [
17166
+ {
17167
+ "kind": "field",
17168
+ "name": "accessibleLabel",
17169
+ "type": {
17170
+ "text": "string | null"
17171
+ },
17172
+ "default": "null",
17173
+ "description": "Accessible name for the internal textarea. Takes precedence over the placeholder-derived name.",
17174
+ "attribute": "aria-label"
17175
+ },
16688
17176
  {
16689
17177
  "kind": "field",
16690
17178
  "name": "autoCorrect",
@@ -16692,7 +17180,7 @@
16692
17180
  "text": "string"
16693
17181
  },
16694
17182
  "default": "''",
16695
- "description": "Forwarded to the internal `<textarea>`'s own `autocorrect` (Safari/WebKit-specific). Empty\nstring omits the attribute (browser default). No `wrap` property here -- the auto-resize\nlogic above already assumes unwrapped natural text flow.\n\nNamed `autoCorrect` (capital `C`), not `autocorrect`, purely to dodge a TS `lib.dom.d.ts`\ncollision: newer DOM typings declare a `boolean`-typed `HTMLElement.autocorrect` IDL member,\nwhich a same-named `string`-typed reactive property here would override unsoundly from the\ntype checker's point of view (even though the browser itself would happily let this class's\nown accessor win at runtime). The explicit attribute mapping preserves the standard\nlowercase `autocorrect` wire name in both Lit and generated component metadata.",
17183
+ "description": "Forwarded to the internal `<textarea>`'s own `autocorrect` (Safari/WebKit-specific). Empty\nstring omits the attribute (browser default).\n\nNamed `autoCorrect` (capital `C`), not `autocorrect`, purely to dodge a TS `lib.dom.d.ts`\ncollision: newer DOM typings declare a `boolean`-typed `HTMLElement.autocorrect` IDL member,\nwhich a same-named `string`-typed reactive property here would override unsoundly from the\ntype checker's point of view (even though the browser itself would happily let this class's\nown accessor win at runtime). The explicit attribute mapping preserves the standard\nlowercase `autocorrect` wire name in both Lit and generated component metadata.",
16696
17184
  "attribute": "autocorrect"
16697
17185
  },
16698
17186
  {
@@ -16705,6 +17193,15 @@
16705
17193
  "description": "Forwarded to the internal `<textarea>`'s own `autocapitalize`. Empty string omits the\nattribute (browser default).",
16706
17194
  "attribute": "autocapitalize"
16707
17195
  },
17196
+ {
17197
+ "kind": "field",
17198
+ "name": "autocomplete",
17199
+ "type": {
17200
+ "text": "string"
17201
+ },
17202
+ "default": "''",
17203
+ "attribute": "autocomplete"
17204
+ },
16708
17205
  {
16709
17206
  "kind": "field",
16710
17207
  "name": "effectiveDirection",
@@ -16733,6 +17230,15 @@
16733
17230
  "module": "src/internal/lyra-element.ts"
16734
17231
  }
16735
17232
  },
17233
+ {
17234
+ "kind": "field",
17235
+ "name": "enterKeyHint",
17236
+ "type": {
17237
+ "text": "string"
17238
+ },
17239
+ "default": "''",
17240
+ "attribute": "enterkeyhint"
17241
+ },
16736
17242
  {
16737
17243
  "kind": "field",
16738
17244
  "name": "hasChipsSlot",
@@ -16760,6 +17266,24 @@
16760
17266
  "privacy": "private",
16761
17267
  "default": "false"
16762
17268
  },
17269
+ {
17270
+ "kind": "field",
17271
+ "name": "input",
17272
+ "type": {
17273
+ "text": "HTMLTextAreaElement | null"
17274
+ },
17275
+ "description": "The internal native textarea for integrations that require direct DOM access.",
17276
+ "readonly": true
17277
+ },
17278
+ {
17279
+ "kind": "field",
17280
+ "name": "inputMode",
17281
+ "type": {
17282
+ "text": "string"
17283
+ },
17284
+ "default": "''",
17285
+ "attribute": "inputmode"
17286
+ },
16763
17287
  {
16764
17288
  "kind": "field",
16765
17289
  "name": "locale",
@@ -16842,6 +17366,27 @@
16842
17366
  "default": "''",
16843
17367
  "attribute": "placeholder"
16844
17368
  },
17369
+ {
17370
+ "kind": "field",
17371
+ "name": "selectionDirection",
17372
+ "type": {
17373
+ "text": "ChatComposerSelectionDirection | null"
17374
+ }
17375
+ },
17376
+ {
17377
+ "kind": "field",
17378
+ "name": "selectionEnd",
17379
+ "type": {
17380
+ "text": "number | null"
17381
+ }
17382
+ },
17383
+ {
17384
+ "kind": "field",
17385
+ "name": "selectionStart",
17386
+ "type": {
17387
+ "text": "number | null"
17388
+ }
17389
+ },
16845
17390
  {
16846
17391
  "kind": "field",
16847
17392
  "name": "spellcheck",
@@ -16941,6 +17486,16 @@
16941
17486
  "privacy": "private",
16942
17487
  "default": "false"
16943
17488
  },
17489
+ {
17490
+ "kind": "field",
17491
+ "name": "wrap",
17492
+ "type": {
17493
+ "text": "ChatComposerWrap"
17494
+ },
17495
+ "default": "'soft'",
17496
+ "description": "Native editing-assistance attributes forwarded to the internal textarea.",
17497
+ "attribute": "wrap"
17498
+ },
16944
17499
  {
16945
17500
  "kind": "method",
16946
17501
  "name": "addEventListener",
@@ -16986,6 +17541,15 @@
16986
17541
  },
16987
17542
  "description": "Re-fits the textarea whenever its own box *width* changes, independent\nof any `value`/`min-rows`/`max-rows` update -- `updated()` above only\nreacts to those, so a pure layout change (a responsive breakpoint, a\nsidebar collapsing/expanding, a window resize, an orientation change)\nwould otherwise leave the height pinned at whatever it last was, even\nthough the same text now wraps across a different number of lines.\nMirrors split.ts's `collapseResizeObserver`/virtual-list.ts's\n`containerResizeObserver`/lite-chart.ts's `resizeObserver`.\n\nOnly reacts to an actual inline-size change rather than calling\n`resizeTextarea()` unconditionally on every callback: `resizeTextarea()`\nitself sets `ta.style.height`, a *block*-size change on the very element\nbeing observed, which would otherwise re-trigger this same observer\nevery tick. Diffing against the last-seen width (same technique as\nsplit.ts keying its collapse state off `contentBoxSize[0].inlineSize`)\nkeeps a same-width, height-only callback from doing anything.\n\nThe actual recompute is deferred one animation frame rather than run\nsynchronously inside the callback: `ResizeObserver`'s spec re-delivers,\nwithin the same notification pass, to any observed element resized by\nits own callback -- mutating `ta.style.height` synchronously here would\ndo exactly that to the very box just observed, and the browser reports\nit as \"ResizeObserver loop completed with undelivered notifications\"\n(a real, user-visible console error, not just noise). Deferring the\nmutation to the next frame -- outside that notification pass -- avoids\never resizing the observed element from inside its own callback."
16988
17543
  },
17544
+ {
17545
+ "kind": "method",
17546
+ "name": "blur",
17547
+ "return": {
17548
+ "type": {
17549
+ "text": "void"
17550
+ }
17551
+ }
17552
+ },
16989
17553
  {
16990
17554
  "kind": "method",
16991
17555
  "name": "emit",
@@ -17023,6 +17587,24 @@
17023
17587
  "module": "src/internal/lyra-element.ts"
17024
17588
  }
17025
17589
  },
17590
+ {
17591
+ "kind": "method",
17592
+ "name": "focus",
17593
+ "return": {
17594
+ "type": {
17595
+ "text": "void"
17596
+ }
17597
+ },
17598
+ "parameters": [
17599
+ {
17600
+ "name": "options",
17601
+ "optional": true,
17602
+ "type": {
17603
+ "text": "FocusOptions"
17604
+ }
17605
+ }
17606
+ ]
17607
+ },
17026
17608
  {
17027
17609
  "kind": "method",
17028
17610
  "name": "formResetCallback",
@@ -17142,6 +17724,136 @@
17142
17724
  },
17143
17725
  "description": "Grows/shrinks the textarea between `min-rows` and `max-rows`, reading\nthe *computed* line-height/padding/border back out of the element at\ncall time instead of assuming a fixed px-per-row figure -- correct\nwhatever font-size/line-height a consumer's own CSS ends up applying.\nPast `max-rows` the box stops growing and switches to internal\nscrolling (`overflow-y: auto`)."
17144
17726
  },
17727
+ {
17728
+ "kind": "method",
17729
+ "name": "select",
17730
+ "return": {
17731
+ "type": {
17732
+ "text": "void"
17733
+ }
17734
+ }
17735
+ },
17736
+ {
17737
+ "kind": "method",
17738
+ "name": "setRangeText",
17739
+ "return": {
17740
+ "type": {
17741
+ "text": "void"
17742
+ }
17743
+ },
17744
+ "parameters": [
17745
+ {
17746
+ "name": "replacement",
17747
+ "type": {
17748
+ "text": "string"
17749
+ }
17750
+ },
17751
+ {
17752
+ "name": "start",
17753
+ "optional": true,
17754
+ "type": {
17755
+ "text": "number"
17756
+ }
17757
+ },
17758
+ {
17759
+ "name": "end",
17760
+ "optional": true,
17761
+ "type": {
17762
+ "text": "number"
17763
+ }
17764
+ },
17765
+ {
17766
+ "name": "selectMode",
17767
+ "optional": true,
17768
+ "type": {
17769
+ "text": "SelectionMode"
17770
+ }
17771
+ }
17772
+ ]
17773
+ },
17774
+ {
17775
+ "kind": "method",
17776
+ "name": "setRangeText",
17777
+ "return": {
17778
+ "type": {
17779
+ "text": "void"
17780
+ }
17781
+ },
17782
+ "parameters": [
17783
+ {
17784
+ "name": "replacement",
17785
+ "type": {
17786
+ "text": "string"
17787
+ }
17788
+ },
17789
+ {
17790
+ "name": "start",
17791
+ "type": {
17792
+ "text": "number"
17793
+ }
17794
+ },
17795
+ {
17796
+ "name": "end",
17797
+ "type": {
17798
+ "text": "number"
17799
+ }
17800
+ },
17801
+ {
17802
+ "name": "selectMode",
17803
+ "optional": true,
17804
+ "type": {
17805
+ "text": "SelectionMode"
17806
+ }
17807
+ }
17808
+ ]
17809
+ },
17810
+ {
17811
+ "kind": "method",
17812
+ "name": "setRangeText",
17813
+ "return": {
17814
+ "type": {
17815
+ "text": "void"
17816
+ }
17817
+ },
17818
+ "parameters": [
17819
+ {
17820
+ "name": "replacement",
17821
+ "type": {
17822
+ "text": "string"
17823
+ }
17824
+ }
17825
+ ]
17826
+ },
17827
+ {
17828
+ "kind": "method",
17829
+ "name": "setSelectionRange",
17830
+ "return": {
17831
+ "type": {
17832
+ "text": "void"
17833
+ }
17834
+ },
17835
+ "parameters": [
17836
+ {
17837
+ "name": "start",
17838
+ "type": {
17839
+ "text": "number | null"
17840
+ }
17841
+ },
17842
+ {
17843
+ "name": "end",
17844
+ "type": {
17845
+ "text": "number | null"
17846
+ }
17847
+ },
17848
+ {
17849
+ "name": "direction",
17850
+ "optional": true,
17851
+ "type": {
17852
+ "text": "ChatComposerSelectionDirection"
17853
+ }
17854
+ }
17855
+ ]
17856
+ },
17145
17857
  {
17146
17858
  "kind": "method",
17147
17859
  "name": "submit",
@@ -17154,6 +17866,14 @@
17154
17866
  }
17155
17867
  ],
17156
17868
  "events": [
17869
+ {
17870
+ "description": "Re-dispatched from the internal native textarea as a bubbling, composed event.",
17871
+ "name": "blur"
17872
+ },
17873
+ {
17874
+ "description": "Re-dispatched from the internal native textarea as a bubbling, composed event.",
17875
+ "name": "focus"
17876
+ },
17157
17877
  {
17158
17878
  "description": "Fired on every user-driven edit of the textarea (not a programmatic `.value` assignment). `detail: { value }`.",
17159
17879
  "name": "lyra-input"
@@ -17168,6 +17888,15 @@
17168
17888
  }
17169
17889
  ],
17170
17890
  "attributes": [
17891
+ {
17892
+ "name": "aria-label",
17893
+ "type": {
17894
+ "text": "string | null"
17895
+ },
17896
+ "default": "null",
17897
+ "description": "Accessible name for the internal textarea. Takes precedence over the placeholder-derived name.",
17898
+ "fieldName": "accessibleLabel"
17899
+ },
17171
17900
  {
17172
17901
  "name": "autocapitalize",
17173
17902
  "type": {
@@ -17177,15 +17906,39 @@
17177
17906
  "description": "Forwarded to the internal `<textarea>`'s own `autocapitalize`. Empty string omits the\nattribute (browser default).",
17178
17907
  "fieldName": "autocapitalize"
17179
17908
  },
17909
+ {
17910
+ "name": "autocomplete",
17911
+ "type": {
17912
+ "text": "string"
17913
+ },
17914
+ "default": "''",
17915
+ "fieldName": "autocomplete"
17916
+ },
17180
17917
  {
17181
17918
  "name": "autocorrect",
17182
17919
  "type": {
17183
17920
  "text": "string"
17184
17921
  },
17185
17922
  "default": "''",
17186
- "description": "Forwarded to the internal `<textarea>`'s own `autocorrect` (Safari/WebKit-specific). Empty\nstring omits the attribute (browser default). No `wrap` property here -- the auto-resize\nlogic above already assumes unwrapped natural text flow.\n\nNamed `autoCorrect` (capital `C`), not `autocorrect`, purely to dodge a TS `lib.dom.d.ts`\ncollision: newer DOM typings declare a `boolean`-typed `HTMLElement.autocorrect` IDL member,\nwhich a same-named `string`-typed reactive property here would override unsoundly from the\ntype checker's point of view (even though the browser itself would happily let this class's\nown accessor win at runtime). The explicit attribute mapping preserves the standard\nlowercase `autocorrect` wire name in both Lit and generated component metadata.",
17923
+ "description": "Forwarded to the internal `<textarea>`'s own `autocorrect` (Safari/WebKit-specific). Empty\nstring omits the attribute (browser default).\n\nNamed `autoCorrect` (capital `C`), not `autocorrect`, purely to dodge a TS `lib.dom.d.ts`\ncollision: newer DOM typings declare a `boolean`-typed `HTMLElement.autocorrect` IDL member,\nwhich a same-named `string`-typed reactive property here would override unsoundly from the\ntype checker's point of view (even though the browser itself would happily let this class's\nown accessor win at runtime). The explicit attribute mapping preserves the standard\nlowercase `autocorrect` wire name in both Lit and generated component metadata.",
17187
17924
  "fieldName": "autoCorrect"
17188
17925
  },
17926
+ {
17927
+ "name": "enterkeyhint",
17928
+ "type": {
17929
+ "text": "string"
17930
+ },
17931
+ "default": "''",
17932
+ "fieldName": "enterKeyHint"
17933
+ },
17934
+ {
17935
+ "name": "inputmode",
17936
+ "type": {
17937
+ "text": "string"
17938
+ },
17939
+ "default": "''",
17940
+ "fieldName": "inputMode"
17941
+ },
17189
17942
  {
17190
17943
  "name": "locale",
17191
17944
  "type": {
@@ -17256,6 +18009,15 @@
17256
18009
  },
17257
18010
  "default": "true",
17258
18011
  "fieldName": "submitOnEnter"
18012
+ },
18013
+ {
18014
+ "name": "wrap",
18015
+ "type": {
18016
+ "text": "ChatComposerWrap"
18017
+ },
18018
+ "default": "'soft'",
18019
+ "description": "Native editing-assistance attributes forwarded to the internal textarea.",
18020
+ "fieldName": "wrap"
17259
18021
  }
17260
18022
  ],
17261
18023
  "mixins": [
@@ -17314,6 +18076,18 @@
17314
18076
  "kind": "class",
17315
18077
  "description": "`<lyra-chat-message>` — a role-based message bubble *shell* for a chat/\nagent conversation surface. It renders none of the message content itself:\nthe default slot carries whatever a consumer wants to display (plain\ntext, a `<lyra-markdown>`, a custom template, anything at all) and this\ncomponent only supplies the surrounding chrome — alignment/coloring by\n`role`, an avatar/badges header row, an optional collapse toggle, an\nattachments strip, and a status-aware footer (a live-updating status dot +\ntext, the formatted `timestamp`, a built-in retry affordance for\n`status=\"failed\"`, and an `actions` slot for everything else).\n\nNo built-in copy button is rendered. Deciding what \"the copyable text\" of\nan arbitrary slotted message even means (plain text? the rendered\nmarkdown source? something else?) is exactly the kind of content\ninterpretation this shell deliberately stays out of — slot a copy control\ninto `actions` instead. Firing `lyra-copy` (`detail: { text }`) from that\ncontrol keeps the event name consistent with `<lyra-json-viewer>`'s own\ncopy affordance, for anything listening at the conversation-surface level.\n\nAccessibility of `status`: the current status is always available as\nplain visible text (`[part=\"status-text\"]`), never color alone. A\ntransition *to* `\"failed\"`, or *from* `\"streaming\"` to `\"sent\"` (a stream\nfinishing), is additionally announced through an internal\n`<lyra-live-region>` (see that component's header for the throttled-\nannouncement wiring this composes) so a screen-reader user who isn't\ncurrently focused on this message still learns about it. This differs\nfrom `<lyra-typing-indicator>`'s deliberately simpler `role=\"status\"`\napproach — that component only ever has one thing to announce (its own\nmount); this one has a `status` that can flip between several values\nacross a single element's lifetime, which is exactly the coalescing job\n`<lyra-live-region>` exists for.\n\n`role` is a message-author role (`user`/`assistant`/`system`, matching\nthe vocabulary of every chat/completion API), *not* a WAI-ARIA role, so\nit reflects to a `data-role` attribute rather than the bare `role`\nattribute — `role=\"user\"` would collide with `Element`'s own ARIA `role`\naccessor and is not a valid ARIA role token to begin with.",
17316
18078
  "name": "LyraChatMessage",
18079
+ "cssProperties": [
18080
+ {
18081
+ "description": "Maximum inline size of the message bubble.",
18082
+ "name": "--lyra-chat-message-max-width",
18083
+ "default": "80%"
18084
+ },
18085
+ {
18086
+ "description": "Streaming-indicator animation duration and timing function.",
18087
+ "name": "--lyra-transition-ambient",
18088
+ "default": "1.8s ease-in-out"
18089
+ }
18090
+ ],
17317
18091
  "cssParts": [
17318
18092
  {
17319
18093
  "description": "The wrapper around the `actions` slot.",
@@ -17960,7 +18734,7 @@
17960
18734
  "declarations": [
17961
18735
  {
17962
18736
  "kind": "class",
17963
- "description": "`<lyra-checkbox>` — a boolean form control. Structurally the same idea as\n`<lyra-switch>` (form-associated via `ElementInternals`, click and\nSpace/Enter both toggle) but with checkbox semantics: `role=\"checkbox\"` +\nan `aria-checked` that can also be `\"mixed\"`, and a visual box/checkmark\ninstead of a track/thumb.\n\n`checked` is not a plain string, so this attaches `ElementInternals`\ndirectly and implements its own `updateValidity()` rather than using the\n`FormAssociated` mixin — see `<lyra-combobox>` for the same\ndirect-`ElementInternals` shape with a non-string value.\n\nDeliberately no hint/error chrome of its own -- the default slot already carries real, visible\nlabel text (see `@slot` below), so a labeled-field frame built around `label`/`hint`/`errorText`\nprops has nothing to add here. A consumer needing hint/error messaging composes it in their own\nwrapper (e.g. `<lyra-tool-param-form>` folds a boolean field's validation error into adjacent\ndescription text / `aria-label` rather than a `<lyra-checkbox>`-owned slot), the same way a\nnative `<input type=\"checkbox\">` plus `<label>` pairs with an externally-owned error node.",
18737
+ "description": "`<lyra-checkbox>` — a boolean form control. Structurally the same idea as\n`<lyra-switch>` (form-associated via `ElementInternals`, click and\nSpace both toggle) but with checkbox semantics: `role=\"checkbox\"` +\nan `aria-checked` that can also be `\"mixed\"`, and a visual box/checkmark\ninstead of a track/thumb.\n\n`checked` is not a plain string, so this attaches `ElementInternals`\ndirectly and implements its own `updateValidity()` rather than using the\n`FormAssociated` mixin — see `<lyra-combobox>` for the same\ndirect-`ElementInternals` shape with a non-string value.\n\nDeliberately no hint/error chrome of its own -- the default slot already carries real, visible\nlabel text (see `@slot` below), so a labeled-field frame built around `label`/`hint`/`errorText`\nprops has nothing to add here. A consumer needing hint/error messaging composes it in their own\nwrapper (e.g. `<lyra-tool-param-form>` folds a boolean field's validation error into adjacent\ndescription text / `aria-label` rather than a `<lyra-checkbox>`-owned slot), the same way a\nnative `<input type=\"checkbox\">` plus `<label>` pairs with an externally-owned error node.",
17964
18738
  "name": "LyraCheckbox",
17965
18739
  "cssParts": [
17966
18740
  {
@@ -18221,6 +18995,11 @@
18221
18995
  "name": "onClick",
18222
18996
  "privacy": "private"
18223
18997
  },
18998
+ {
18999
+ "kind": "field",
19000
+ "name": "onFocus",
19001
+ "privacy": "private"
19002
+ },
18224
19003
  {
18225
19004
  "kind": "field",
18226
19005
  "name": "onKeyDown",
@@ -18351,6 +19130,16 @@
18351
19130
  "module": "src/internal/lyra-element.ts"
18352
19131
  }
18353
19132
  },
19133
+ {
19134
+ "kind": "method",
19135
+ "name": "blur",
19136
+ "return": {
19137
+ "type": {
19138
+ "text": "void"
19139
+ }
19140
+ },
19141
+ "description": "Removes focus from the internal checkbox control."
19142
+ },
18354
19143
  {
18355
19144
  "kind": "method",
18356
19145
  "name": "checkValidity",
@@ -18397,6 +19186,25 @@
18397
19186
  "module": "src/internal/lyra-element.ts"
18398
19187
  }
18399
19188
  },
19189
+ {
19190
+ "kind": "method",
19191
+ "name": "focus",
19192
+ "return": {
19193
+ "type": {
19194
+ "text": "void"
19195
+ }
19196
+ },
19197
+ "parameters": [
19198
+ {
19199
+ "name": "options",
19200
+ "optional": true,
19201
+ "type": {
19202
+ "text": "FocusOptions"
19203
+ }
19204
+ }
19205
+ ],
19206
+ "description": "Moves focus to the internal checkbox control."
19207
+ },
18400
19208
  {
18401
19209
  "kind": "method",
18402
19210
  "name": "formDisabledCallback",
@@ -18580,7 +19388,23 @@
18580
19388
  ],
18581
19389
  "events": [
18582
19390
  {
18583
- "description": "The user toggled the checkbox (click or Space/Enter). `detail: { checked }`. Not fired for a programmatic `.checked` assignment.",
19391
+ "description": "Re-dispatched from the internal control as a bubbling, composed event.",
19392
+ "name": "blur"
19393
+ },
19394
+ {
19395
+ "description": "Fired immediately after `input` for the same user toggle.",
19396
+ "name": "change"
19397
+ },
19398
+ {
19399
+ "description": "Re-dispatched from the internal control as a bubbling, composed event.",
19400
+ "name": "focus"
19401
+ },
19402
+ {
19403
+ "description": "The user toggled the checkbox; bubbling and composed like a native form event.",
19404
+ "name": "input"
19405
+ },
19406
+ {
19407
+ "description": "Compatibility alias fired after `input` and `change` (click or Space). `detail: { checked }`. Not fired for a programmatic `.checked` assignment.",
18584
19408
  "name": "lyra-change"
18585
19409
  }
18586
19410
  ],
@@ -18786,7 +19610,7 @@
18786
19610
  "type": {
18787
19611
  "text": "number | undefined"
18788
19612
  },
18789
- "description": "Maximum number of direct children shown before the rest collapse behind\na \"+N\" indicator. Unset (the default) means no limit — every child is\nalways shown.",
19613
+ "description": "Maximum number of assigned children shown before the rest collapse behind a \"+N\"\nindicator. Flattened slot-forwarded children count the same as direct light-DOM children.\nUnset (the default) means no limit — every child is always shown.",
18790
19614
  "attribute": "max-visible"
18791
19615
  },
18792
19616
  {
@@ -19002,7 +19826,7 @@
19002
19826
  "type": {
19003
19827
  "text": "number | undefined"
19004
19828
  },
19005
- "description": "Maximum number of direct children shown before the rest collapse behind\na \"+N\" indicator. Unset (the default) means no limit — every child is\nalways shown.",
19829
+ "description": "Maximum number of assigned children shown before the rest collapse behind a \"+N\"\nindicator. Flattened slot-forwarded children count the same as direct light-DOM children.\nUnset (the default) means no limit — every child is always shown.",
19006
19830
  "fieldName": "maxVisible"
19007
19831
  }
19008
19832
  ],
@@ -19520,7 +20344,7 @@
19520
20344
  "declarations": [
19521
20345
  {
19522
20346
  "kind": "class",
19523
- "description": "`<lyra-citation-badge>` — an inline `[n]` citation marker with a hover/\nfocus preview popover and confidence/verification-status coloring. Used\nfor an agent response's inline citations, each carrying a `source-id`\nthat matches a corresponding `<lyra-source-card>` shown elsewhere on the\npage (a sibling component in this same family — this component doesn't\nimport or know anything about it, only carries the id through its\nevents).\n\nThe default slot is *not* the badge's visible content — the badge always\nrenders `[index]` — it's reserved for optional rich preview content (e.g.\na filename + short excerpt) shown in a floating popover on hover/focus,\npositioned with `internal/positioner.js`'s `place()` the same way\n`<lyra-tool-call-chip>` positions its own detail tooltip. No popover shows\nat all when the slot carries no content, and the popover never traps\nfocus — it's supplementary preview content, not a modal, so Tab continues\npast the badge normally even while it happens to be visible from a mouse\nhover.\n\nTwo distinct signals fire from the same badge: `lyra-citation-activate`\n(click, or Enter while focused — native `<button>` behavior, no listener\nneeded for the Enter case) is the lightweight \"jump to this source\"\nsignal a host wires to scrolling/highlighting the matching\n`<lyra-source-card>`. `lyra-citation-open` (dblclick, or Space while\nfocused) is a distinct \"full preview\" signal — `href` in its detail is\n`undefined` when the `href` prop isn't set; the consumer decides what\n\"open\" means (a new tab, a dialog, etc). A double-click still fires two\n`lyra-citation-activate` events (one per constituent click — standard\nbrowser `dblclick` behavior) in addition to the one `lyra-citation-open`;\na consumer that only cares about the richer signal on a double-click\nshould ignore the paired activate events in that case.\n\nStatus coloring: `verified`/`high` use the success tones (a claim that's\nbeen checked out, or the model is confident in). `medium`/`low` use\nwarning (progressively less certain, but still a real citation).\n`unverified` uses danger — deliberately distinct from `low`: \"hasn't been\nchecked at all\" is a different (arguably riskier) claim than \"checked but\nuncertain\". `default` renders as plain neutral text with no background\ntint, for citations that carry no confidence/verification signal at all.",
20347
+ "description": "`<lyra-citation-badge>` — an inline `[n]` citation marker with a hover/\nfocus preview popover and confidence/verification-status coloring. Used\nfor an agent response's inline citations, each carrying a `source-id`\nthat matches a corresponding `<lyra-source-card>` shown elsewhere on the\npage (a sibling component in this same family — this component doesn't\nimport or know anything about it, only carries the id through its\nevents).\n\nThe default slot is *not* the badge's visible content — the badge always\nrenders `[index]` — it's reserved for optional rich preview content (e.g.\na filename + short excerpt) shown in a floating popover on hover/focus,\npositioned with `internal/positioner.js`'s `place()` the same way\n`<lyra-tool-call-chip>` positions its own detail tooltip. No popover shows\nat all when the slot carries no content, and the popover never traps\nfocus — it's supplementary preview content, not a modal, so Tab continues\npast the badge normally even while it happens to be visible from a mouse\nhover. When preview content exists, the button keeps a stable\n`aria-describedby` relationship to the `role=\"tooltip\"` panel while it is\nboth hidden and visible, so assistive technology can resolve the preview\nas soon as focus causes it to open.\n\nTwo distinct signals fire from the same badge: `lyra-citation-activate`\n(click, or Enter while focused — native `<button>` behavior, no listener\nneeded for the Enter case) is the lightweight \"jump to this source\"\nsignal a host wires to scrolling/highlighting the matching\n`<lyra-source-card>`. `lyra-citation-open` (dblclick, or Space while\nfocused) is a distinct \"full preview\" signal — `href` in its detail is\n`undefined` when the `href` prop isn't set; the consumer decides what\n\"open\" means (a new tab, a dialog, etc). A double-click still fires two\n`lyra-citation-activate` events (one per constituent click — standard\nbrowser `dblclick` behavior) in addition to the one `lyra-citation-open`;\na consumer that only cares about the richer signal on a double-click\nshould ignore the paired activate events in that case.\n\nStatus coloring: `verified`/`high` use the success tones (a claim that's\nbeen checked out, or the model is confident in). `medium`/`low` use\nwarning (progressively less certain, but still a real citation).\n`unverified` uses danger — deliberately distinct from `low`: \"hasn't been\nchecked at all\" is a different (arguably riskier) claim than \"checked but\nuncertain\". `default` renders as plain neutral text with no background\ntint, for citations that carry no confidence/verification signal at all.",
19524
20348
  "name": "LyraCitationBadge",
19525
20349
  "cssParts": [
19526
20350
  {
@@ -20090,7 +20914,7 @@
20090
20914
  "declarations": [
20091
20915
  {
20092
20916
  "kind": "class",
20093
- "description": "`<lyra-code-block-core>` — a build-lean variant of `<lyra-code-block>` for\na consumer whose `languages` map already covers every language it will\never render. It only ever calls `loadShikiHighlighterCore(this.languages)`\n(see `code-loader.ts`) — never `loadShikiHighlighter()`, the default\n~200-language dynamic-import table loader `<lyra-code-block>` calls\nunconditionally unless its runtime `languagesOnly` flag is `true`. A\nruntime flag on that same module can't be proven always-`true` by a\nbundler, so the unconditional call (and everything shiki's main entry\npoint can reach from it) always stays in the build output regardless of\nhow that flag is used. This component's own module never textually\ncontains a call to (or import of) `loadShikiHighlighter` at all, so a\nconsumer importing this entry point instead of `code-block.js` gets a\ngenuinely shiki-full-table-free build.\n\nA `language` value absent from `languages` always renders the plain\n`<pre><code>` fallback — there is no default/full-table highlighter here\nto fall back to, unlike `<lyra-code-block>`'s dynamic-import path for an\nunmapped language. That fallback is the *default* rendering path, not a\ndegraded one, same as `<lyra-code-block>`'s own plain-text fallback.\n\nEverything else — `code`/`language`/`filename`/`copyable`/`collapsible`/\n`collapsed`/`maxHeight`, the copy button, the collapse header toggle, the\nloading-skeleton behavior while the fine-grained highlighter itself\nresolves — matches `<lyra-code-block>` exactly.",
20917
+ "description": "`<lyra-code-block-core>` — a build-lean variant of `<lyra-code-block>` for\na consumer whose `languages` map already covers every language it will\never render. It only ever calls `loadShikiHighlighterCore(this.languages)`\n(see `code-loader.ts`) — never `loadShikiHighlighter()`, the default\n~200-language dynamic-import table loader `<lyra-code-block>` calls\nunconditionally unless its runtime `languagesOnly` flag is `true`. A\nruntime flag on that same module can't be proven always-`true` by a\nbundler, so the unconditional call (and everything shiki's main entry\npoint can reach from it) always stays in the build output regardless of\nhow that flag is used. This component's own module never textually\ncontains a call to (or import of) `loadShikiHighlighter` at all, so a\nconsumer importing this entry point instead of `code-block.js` gets a\ngenuinely shiki-full-table-free build.\n\nA `language` value absent from `languages` always renders the plain\n`<pre><code>` fallback — there is no default/full-table highlighter here\nto fall back to, unlike `<lyra-code-block>`'s dynamic-import path for an\nunmapped language. That fallback is the *default* rendering path, not a\ndegraded one, same as `<lyra-code-block>`'s own plain-text fallback.\n\nEverything else — `code`/`language`/`filename`/`copyable`/`collapsible`/\n`collapsed`/`maxHeight`, the copy button, the collapse header toggle, the\nloading-skeleton behavior while the fine-grained highlighter itself\nresolves — matches `<lyra-code-block>` exactly. A host `aria-label` (or\nthe matching `accessibleLabel` property) is forwarded to the internal\nfocusable element that owns the named `group` role.",
20094
20918
  "name": "LyraCodeBlockCore",
20095
20919
  "cssParts": [
20096
20920
  {
@@ -20131,6 +20955,16 @@
20131
20955
  }
20132
20956
  ],
20133
20957
  "members": [
20958
+ {
20959
+ "kind": "field",
20960
+ "name": "accessibleLabel",
20961
+ "type": {
20962
+ "text": "string"
20963
+ },
20964
+ "default": "''",
20965
+ "description": "Accessible-name override for the internal focusable code region. Maps\nto the host's `aria-label` attribute and wins over `filename` and\n`language`-derived defaults.",
20966
+ "attribute": "aria-label"
20967
+ },
20134
20968
  {
20135
20969
  "kind": "field",
20136
20970
  "name": "bodyId",
@@ -20575,6 +21409,15 @@
20575
21409
  }
20576
21410
  ],
20577
21411
  "attributes": [
21412
+ {
21413
+ "name": "aria-label",
21414
+ "type": {
21415
+ "text": "string"
21416
+ },
21417
+ "default": "''",
21418
+ "description": "Accessible-name override for the internal focusable code region. Maps\nto the host's `aria-label` attribute and wins over `filename` and\n`language`-derived defaults.",
21419
+ "fieldName": "accessibleLabel"
21420
+ },
20578
21421
  {
20579
21422
  "name": "code",
20580
21423
  "type": {
@@ -20810,7 +21653,7 @@
20810
21653
  "declarations": [
20811
21654
  {
20812
21655
  "kind": "class",
20813
- "description": "`<lyra-code-block>` — fenced code display with optional lazy syntax\nhighlighting and a copy button. No highlighting grammar ships in this\ncomponent itself: it lazy-loads the optional peer dependency `shiki` (see\n`code-loader.ts`) for the actual tokenizing, and degrades to a plain\n`<pre><code>` when that peer isn't installed or `language` is unset/\nunrecognized — the exact same optional-peer shape `<lyra-markdown>` and\n`<lyra-chart>` already establish. That fallback is the *default* rendering\npath, not a degraded one: unhighlighted code is perfectly usable, and it's\nwhat every instance renders at zero extra bytes until shiki resolves.\n\nA `<lyra-skeleton>` placeholder stands in only while shiki itself is\nloading for the very first time on the page (cached — see\n`loadShikiHighlighter()`) and `language` is set. It's deliberately *not*\nshown again for a subsequent per-language grammar load (e.g. a second\n`<lyra-code-block>` requesting a language no earlier instance has used\nyet) — that grammar fetch is typically fast, and the plain-text fallback\nis already a perfectly readable placeholder for it, so a second\nloading-chrome state would add complexity for little practical benefit.\n\n`languages` is an additive, opt-in escape hatch from that default path for\na consumer whose language set is fixed and known ahead of time: a map of\nlanguage id to an already-imported shiki grammar module (e.g. `import bash\nfrom 'shiki/langs/bash.mjs'`). When `language` matches a key in `languages`,\nthis component seeds a fine-grained `createHighlighterCore()` highlighter\nwith *only* the pre-supplied grammars (see `code-loader.ts`'s\n`loadShikiHighlighterCore()`) instead of waiting on `loadShikiHighlighter()`\nand its dynamic per-language `loadLanguage()` import. The payoff isn't\nruntime cost — the default dynamic-import path is already well-optimized\nfor that — it's *build output*: shiki's main entry point bundles a dynamic\n`import()` per bundled language (~200 of them) because a bundler can't\nstatically narrow which of those a `loadLanguage(lang: string)` call might\nrequest at runtime, so it conservatively emits a build-output chunk for\nevery one of them. `shiki/core`'s fine-grained API has no such table — a\nbundler only ever sees the exact grammar modules `languages` itself\n`import`s, so a consumer who pins its full language set this way trades a\nhand-maintained list for a build output scoped to just those languages\ninstead of shiki's entire bundled set. A language requested but absent\nfrom `languages` still falls back to the ordinary dynamic-import path\nunchanged, so this is a partial opt-in, not a replacement for it.",
21656
+ "description": "`<lyra-code-block>` — fenced code display with optional lazy syntax\nhighlighting and a copy button. No highlighting grammar ships in this\ncomponent itself: it lazy-loads the optional peer dependency `shiki` (see\n`code-loader.ts`) for the actual tokenizing, and degrades to a plain\n`<pre><code>` when that peer isn't installed or `language` is unset/\nunrecognized — the exact same optional-peer shape `<lyra-markdown>` and\n`<lyra-chart>` already establish. That fallback is the *default* rendering\npath, not a degraded one: unhighlighted code is perfectly usable, and it's\nwhat every instance renders at zero extra bytes until shiki resolves.\n\nA `<lyra-skeleton>` placeholder stands in only while shiki itself is\nloading for the very first time on the page (cached — see\n`loadShikiHighlighter()`) and `language` is set. It's deliberately *not*\nshown again for a subsequent per-language grammar load (e.g. a second\n`<lyra-code-block>` requesting a language no earlier instance has used\nyet) — that grammar fetch is typically fast, and the plain-text fallback\nis already a perfectly readable placeholder for it, so a second\nloading-chrome state would add complexity for little practical benefit.\n\nSet a host `aria-label` (or the matching `accessibleLabel` property) to\noverride the filename/language-derived name on the internal focusable code\nregion. The name is forwarded to the element that owns `role=\"group\"`, not\nleft only on the custom-element host across the shadow boundary.\n\n`languages` is an additive, opt-in escape hatch from that default path for\na consumer whose language set is fixed and known ahead of time: a map of\nlanguage id to an already-imported shiki grammar module (e.g. `import bash\nfrom 'shiki/langs/bash.mjs'`). When `language` matches a key in `languages`,\nthis component seeds a fine-grained `createHighlighterCore()` highlighter\nwith *only* the pre-supplied grammars (see `code-loader.ts`'s\n`loadShikiHighlighterCore()`) instead of waiting on `loadShikiHighlighter()`\nand its dynamic per-language `loadLanguage()` import. The payoff isn't\nruntime cost — the default dynamic-import path is already well-optimized\nfor that — it's *build output*: shiki's main entry point bundles a dynamic\n`import()` per bundled language (~200 of them) because a bundler can't\nstatically narrow which of those a `loadLanguage(lang: string)` call might\nrequest at runtime, so it conservatively emits a build-output chunk for\nevery one of them. `shiki/core`'s fine-grained API has no such table — a\nbundler only ever sees the exact grammar modules `languages` itself\n`import`s, so a consumer who pins its full language set this way trades a\nhand-maintained list for a build output scoped to just those languages\ninstead of shiki's entire bundled set. A language requested but absent\nfrom `languages` still falls back to the ordinary dynamic-import path\nunchanged, so this is a partial opt-in, not a replacement for it.",
20814
21657
  "name": "LyraCodeBlock",
20815
21658
  "cssParts": [
20816
21659
  {
@@ -20851,6 +21694,16 @@
20851
21694
  }
20852
21695
  ],
20853
21696
  "members": [
21697
+ {
21698
+ "kind": "field",
21699
+ "name": "accessibleLabel",
21700
+ "type": {
21701
+ "text": "string"
21702
+ },
21703
+ "default": "''",
21704
+ "description": "Accessible-name override for the internal focusable code region. Maps\nto the host's `aria-label` attribute and wins over `filename` and\n`language`-derived defaults.",
21705
+ "attribute": "aria-label"
21706
+ },
20854
21707
  {
20855
21708
  "kind": "field",
20856
21709
  "name": "bodyId",
@@ -21304,6 +22157,15 @@
21304
22157
  }
21305
22158
  ],
21306
22159
  "attributes": [
22160
+ {
22161
+ "name": "aria-label",
22162
+ "type": {
22163
+ "text": "string"
22164
+ },
22165
+ "default": "''",
22166
+ "description": "Accessible-name override for the internal focusable code region. Maps\nto the host's `aria-label` attribute and wins over `filename` and\n`language`-derived defaults.",
22167
+ "fieldName": "accessibleLabel"
22168
+ },
21307
22169
  {
21308
22170
  "name": "code",
21309
22171
  "type": {
@@ -21574,6 +22436,28 @@
21574
22436
  "kind": "class",
21575
22437
  "description": "`<lyra-combobox>` — a filterable single/multi select that combines a text\ninput with a listbox. Mirrors the core `<wa-combobox>` API under `lyra-`.\n\nOptions are `<lyra-option value>` children. Emits native-style `change`/`input`\n(like Web Awesome) plus `lyra-show`/`lyra-hide`/`lyra-clear`.",
21576
22438
  "name": "LyraCombobox",
22439
+ "cssProperties": [
22440
+ {
22441
+ "description": "Padding inside the input container.",
22442
+ "name": "--lyra-combobox-trigger-padding"
22443
+ },
22444
+ {
22445
+ "description": "Minimum input-container block size.",
22446
+ "name": "--lyra-combobox-trigger-min-height"
22447
+ },
22448
+ {
22449
+ "description": "Input text size.",
22450
+ "name": "--lyra-combobox-font-size"
22451
+ },
22452
+ {
22453
+ "description": "Selected-tag padding.",
22454
+ "name": "--lyra-combobox-tag-padding"
22455
+ },
22456
+ {
22457
+ "description": "Selected-tag text size.",
22458
+ "name": "--lyra-combobox-tag-font-size"
22459
+ }
22460
+ ],
21577
22461
  "cssParts": [
21578
22462
  {
21579
22463
  "description": "The clear button.",
@@ -21806,6 +22690,34 @@
21806
22690
  "privacy": "private",
21807
22691
  "default": "[]"
21808
22692
  },
22693
+ {
22694
+ "kind": "field",
22695
+ "name": "autoCorrect",
22696
+ "type": {
22697
+ "text": "string"
22698
+ },
22699
+ "default": "''",
22700
+ "attribute": "autocorrect"
22701
+ },
22702
+ {
22703
+ "kind": "field",
22704
+ "name": "autocapitalize",
22705
+ "type": {
22706
+ "text": "string"
22707
+ },
22708
+ "default": "''",
22709
+ "attribute": "autocapitalize"
22710
+ },
22711
+ {
22712
+ "kind": "field",
22713
+ "name": "autocomplete",
22714
+ "type": {
22715
+ "text": "string"
22716
+ },
22717
+ "default": "'off'",
22718
+ "description": "Native editing-assistance attributes forwarded to the wrapped input.",
22719
+ "attribute": "autocomplete"
22720
+ },
21809
22721
  {
21810
22722
  "kind": "field",
21811
22723
  "name": "cleanup",
@@ -21814,6 +22726,17 @@
21814
22726
  },
21815
22727
  "privacy": "private"
21816
22728
  },
22729
+ {
22730
+ "kind": "field",
22731
+ "name": "clearable",
22732
+ "type": {
22733
+ "text": "boolean"
22734
+ },
22735
+ "default": "false",
22736
+ "description": "Show a clear button while the combobox has a value. Mirrors `wa-combobox`'s public name.",
22737
+ "attribute": "clearable",
22738
+ "reflects": true
22739
+ },
21817
22740
  {
21818
22741
  "kind": "field",
21819
22742
  "name": "collectOptions",
@@ -21895,6 +22818,15 @@
21895
22818
  "description": "Status copy shown in the listbox when no rows match. Empty string falls back to a localized message.",
21896
22819
  "attribute": "empty-text"
21897
22820
  },
22821
+ {
22822
+ "kind": "field",
22823
+ "name": "enterKeyHint",
22824
+ "type": {
22825
+ "text": "string"
22826
+ },
22827
+ "default": "''",
22828
+ "attribute": "enterkeyhint"
22829
+ },
21898
22830
  {
21899
22831
  "kind": "field",
21900
22832
  "name": "errorText",
@@ -21974,11 +22906,37 @@
21974
22906
  "default": "''",
21975
22907
  "attribute": "hint"
21976
22908
  },
22909
+ {
22910
+ "kind": "field",
22911
+ "name": "input",
22912
+ "type": {
22913
+ "text": "HTMLInputElement | null"
22914
+ },
22915
+ "description": "The internal native filter input, for direct DOM access when needed.",
22916
+ "readonly": true
22917
+ },
22918
+ {
22919
+ "kind": "field",
22920
+ "name": "inputEl",
22921
+ "type": {
22922
+ "text": "HTMLInputElement | undefined"
22923
+ },
22924
+ "privacy": "private"
22925
+ },
21977
22926
  {
21978
22927
  "kind": "field",
21979
22928
  "name": "inputId",
21980
22929
  "privacy": "private"
21981
22930
  },
22931
+ {
22932
+ "kind": "field",
22933
+ "name": "inputMode",
22934
+ "type": {
22935
+ "text": "string"
22936
+ },
22937
+ "default": "''",
22938
+ "attribute": "inputmode"
22939
+ },
21982
22940
  {
21983
22941
  "kind": "field",
21984
22942
  "name": "internals",
@@ -22111,6 +23069,11 @@
22111
23069
  "name": "onInputBlur",
22112
23070
  "privacy": "private"
22113
23071
  },
23072
+ {
23073
+ "kind": "field",
23074
+ "name": "onInputFocus",
23075
+ "privacy": "private"
23076
+ },
22114
23077
  {
22115
23078
  "kind": "field",
22116
23079
  "name": "onKeyDown",
@@ -22212,6 +23175,27 @@
22212
23175
  "description": "Structured rows corresponding to the current selection, including opaque async-row data.",
22213
23176
  "readonly": true
22214
23177
  },
23178
+ {
23179
+ "kind": "field",
23180
+ "name": "selectionDirection",
23181
+ "type": {
23182
+ "text": "LyraComboboxSelectionDirection | null"
23183
+ }
23184
+ },
23185
+ {
23186
+ "kind": "field",
23187
+ "name": "selectionEnd",
23188
+ "type": {
23189
+ "text": "number | null"
23190
+ }
23191
+ },
23192
+ {
23193
+ "kind": "field",
23194
+ "name": "selectionStart",
23195
+ "type": {
23196
+ "text": "number | null"
23197
+ }
23198
+ },
22215
23199
  {
22216
23200
  "kind": "field",
22217
23201
  "name": "size",
@@ -22248,6 +23232,15 @@
22248
23232
  "privacy": "private",
22249
23233
  "default": "0"
22250
23234
  },
23235
+ {
23236
+ "kind": "field",
23237
+ "name": "spellcheck",
23238
+ "type": {
23239
+ "text": "boolean"
23240
+ },
23241
+ "default": "true",
23242
+ "attribute": "spellcheck"
23243
+ },
22251
23244
  {
22252
23245
  "kind": "field",
22253
23246
  "name": "stopLocaleSubscription",
@@ -22332,6 +23325,7 @@
22332
23325
  "text": "boolean"
22333
23326
  },
22334
23327
  "default": "false",
23328
+ "deprecated": "Use `clearable`. Retained as a compatibility alias.",
22335
23329
  "attribute": "with-clear"
22336
23330
  },
22337
23331
  {
@@ -22368,6 +23362,15 @@
22368
23362
  "module": "src/internal/lyra-element.ts"
22369
23363
  }
22370
23364
  },
23365
+ {
23366
+ "kind": "method",
23367
+ "name": "blur",
23368
+ "return": {
23369
+ "type": {
23370
+ "text": "void"
23371
+ }
23372
+ }
23373
+ },
22371
23374
  {
22372
23375
  "kind": "method",
22373
23376
  "name": "checkValidity",
@@ -22435,6 +23438,24 @@
22435
23438
  },
22436
23439
  "description": "Dispatches the platform-style value-event pair used by non-text user\ninteractions. Text editing keeps and exposes the original InputEvent\nfrom the shadow input so its data/inputType metadata is not lost."
22437
23440
  },
23441
+ {
23442
+ "kind": "method",
23443
+ "name": "focus",
23444
+ "return": {
23445
+ "type": {
23446
+ "text": "void"
23447
+ }
23448
+ },
23449
+ "parameters": [
23450
+ {
23451
+ "name": "options",
23452
+ "optional": true,
23453
+ "type": {
23454
+ "text": "FocusOptions"
23455
+ }
23456
+ }
23457
+ ]
23458
+ },
22438
23459
  {
22439
23460
  "kind": "method",
22440
23461
  "name": "formDisabledCallback",
@@ -22682,6 +23703,136 @@
22682
23703
  }
22683
23704
  ]
22684
23705
  },
23706
+ {
23707
+ "kind": "method",
23708
+ "name": "select",
23709
+ "return": {
23710
+ "type": {
23711
+ "text": "void"
23712
+ }
23713
+ }
23714
+ },
23715
+ {
23716
+ "kind": "method",
23717
+ "name": "setRangeText",
23718
+ "return": {
23719
+ "type": {
23720
+ "text": "void"
23721
+ }
23722
+ },
23723
+ "parameters": [
23724
+ {
23725
+ "name": "replacement",
23726
+ "type": {
23727
+ "text": "string"
23728
+ }
23729
+ },
23730
+ {
23731
+ "name": "start",
23732
+ "optional": true,
23733
+ "type": {
23734
+ "text": "number"
23735
+ }
23736
+ },
23737
+ {
23738
+ "name": "end",
23739
+ "optional": true,
23740
+ "type": {
23741
+ "text": "number"
23742
+ }
23743
+ },
23744
+ {
23745
+ "name": "selectMode",
23746
+ "optional": true,
23747
+ "type": {
23748
+ "text": "SelectionMode"
23749
+ }
23750
+ }
23751
+ ]
23752
+ },
23753
+ {
23754
+ "kind": "method",
23755
+ "name": "setRangeText",
23756
+ "return": {
23757
+ "type": {
23758
+ "text": "void"
23759
+ }
23760
+ },
23761
+ "parameters": [
23762
+ {
23763
+ "name": "replacement",
23764
+ "type": {
23765
+ "text": "string"
23766
+ }
23767
+ },
23768
+ {
23769
+ "name": "start",
23770
+ "type": {
23771
+ "text": "number"
23772
+ }
23773
+ },
23774
+ {
23775
+ "name": "end",
23776
+ "type": {
23777
+ "text": "number"
23778
+ }
23779
+ },
23780
+ {
23781
+ "name": "selectMode",
23782
+ "optional": true,
23783
+ "type": {
23784
+ "text": "SelectionMode"
23785
+ }
23786
+ }
23787
+ ]
23788
+ },
23789
+ {
23790
+ "kind": "method",
23791
+ "name": "setRangeText",
23792
+ "return": {
23793
+ "type": {
23794
+ "text": "void"
23795
+ }
23796
+ },
23797
+ "parameters": [
23798
+ {
23799
+ "name": "replacement",
23800
+ "type": {
23801
+ "text": "string"
23802
+ }
23803
+ }
23804
+ ]
23805
+ },
23806
+ {
23807
+ "kind": "method",
23808
+ "name": "setSelectionRange",
23809
+ "return": {
23810
+ "type": {
23811
+ "text": "void"
23812
+ }
23813
+ },
23814
+ "parameters": [
23815
+ {
23816
+ "name": "start",
23817
+ "type": {
23818
+ "text": "number | null"
23819
+ }
23820
+ },
23821
+ {
23822
+ "name": "end",
23823
+ "type": {
23824
+ "text": "number | null"
23825
+ }
23826
+ },
23827
+ {
23828
+ "name": "direction",
23829
+ "optional": true,
23830
+ "type": {
23831
+ "text": "LyraComboboxSelectionDirection"
23832
+ }
23833
+ }
23834
+ ]
23835
+ },
22685
23836
  {
22686
23837
  "kind": "method",
22687
23838
  "name": "show",
@@ -22714,6 +23865,10 @@
22714
23865
  }
22715
23866
  ],
22716
23867
  "events": [
23868
+ {
23869
+ "description": "Re-dispatched from the internal native input as a bubbling, composed event.",
23870
+ "name": "blur"
23871
+ },
22717
23872
  {
22718
23873
  "name": "change",
22719
23874
  "type": {
@@ -22721,6 +23876,10 @@
22721
23876
  },
22722
23877
  "description": "The selection changed through user interaction. A bubbling, composed, non-cancelable Event."
22723
23878
  },
23879
+ {
23880
+ "description": "Re-dispatched from the internal native input as a bubbling, composed event.",
23881
+ "name": "focus"
23882
+ },
22724
23883
  {
22725
23884
  "name": "input",
22726
23885
  "type": {
@@ -22742,6 +23901,40 @@
22742
23901
  }
22743
23902
  ],
22744
23903
  "attributes": [
23904
+ {
23905
+ "name": "autocapitalize",
23906
+ "type": {
23907
+ "text": "string"
23908
+ },
23909
+ "default": "''",
23910
+ "fieldName": "autocapitalize"
23911
+ },
23912
+ {
23913
+ "name": "autocomplete",
23914
+ "type": {
23915
+ "text": "string"
23916
+ },
23917
+ "default": "'off'",
23918
+ "description": "Native editing-assistance attributes forwarded to the wrapped input.",
23919
+ "fieldName": "autocomplete"
23920
+ },
23921
+ {
23922
+ "name": "autocorrect",
23923
+ "type": {
23924
+ "text": "string"
23925
+ },
23926
+ "default": "''",
23927
+ "fieldName": "autoCorrect"
23928
+ },
23929
+ {
23930
+ "name": "clearable",
23931
+ "type": {
23932
+ "text": "boolean"
23933
+ },
23934
+ "default": "false",
23935
+ "description": "Show a clear button while the combobox has a value. Mirrors `wa-combobox`'s public name.",
23936
+ "fieldName": "clearable"
23937
+ },
22745
23938
  {
22746
23939
  "name": "disabled",
22747
23940
  "type": {
@@ -22758,6 +23951,14 @@
22758
23951
  "description": "Status copy shown in the listbox when no rows match. Empty string falls back to a localized message.",
22759
23952
  "fieldName": "emptyText"
22760
23953
  },
23954
+ {
23955
+ "name": "enterkeyhint",
23956
+ "type": {
23957
+ "text": "string"
23958
+ },
23959
+ "default": "''",
23960
+ "fieldName": "enterKeyHint"
23961
+ },
22761
23962
  {
22762
23963
  "name": "error-text",
22763
23964
  "type": {
@@ -22774,6 +23975,14 @@
22774
23975
  "default": "''",
22775
23976
  "fieldName": "hint"
22776
23977
  },
23978
+ {
23979
+ "name": "inputmode",
23980
+ "type": {
23981
+ "text": "string"
23982
+ },
23983
+ "default": "''",
23984
+ "fieldName": "inputMode"
23985
+ },
22777
23986
  {
22778
23987
  "name": "label",
22779
23988
  "type": {
@@ -22875,6 +24084,14 @@
22875
24084
  "description": "Visual size — same `xs`–`xl` scale as `lyra-select`'s `size`.",
22876
24085
  "fieldName": "size"
22877
24086
  },
24087
+ {
24088
+ "name": "spellcheck",
24089
+ "type": {
24090
+ "text": "boolean"
24091
+ },
24092
+ "default": "true",
24093
+ "fieldName": "spellcheck"
24094
+ },
22878
24095
  {
22879
24096
  "name": "value",
22880
24097
  "type": {
@@ -22889,6 +24106,7 @@
22889
24106
  "text": "boolean"
22890
24107
  },
22891
24108
  "default": "false",
24109
+ "deprecated": "Use `clearable`. Retained as a compatibility alias.",
22892
24110
  "fieldName": "withClear"
22893
24111
  }
22894
24112
  ],
@@ -23389,6 +24607,15 @@
23389
24607
  }
23390
24608
  ],
23391
24609
  "members": [
24610
+ {
24611
+ "kind": "field",
24612
+ "name": "appliedAriaLabel",
24613
+ "type": {
24614
+ "text": "string | null"
24615
+ },
24616
+ "privacy": "private",
24617
+ "default": "null"
24618
+ },
23392
24619
  {
23393
24620
  "kind": "field",
23394
24621
  "name": "clampedUsedTotal",
@@ -23427,6 +24654,15 @@
23427
24654
  "module": "src/internal/lyra-element.ts"
23428
24655
  }
23429
24656
  },
24657
+ {
24658
+ "kind": "field",
24659
+ "name": "explicitAriaLabel",
24660
+ "type": {
24661
+ "text": "string | null"
24662
+ },
24663
+ "privacy": "private",
24664
+ "default": "null"
24665
+ },
23430
24666
  {
23431
24667
  "kind": "field",
23432
24668
  "name": "label",
@@ -23930,7 +25166,7 @@
23930
25166
  "type": {
23931
25167
  "text": "(date: Date) => string | undefined"
23932
25168
  },
23933
- "description": "Overrides the default absolute-time rendering of `timestamp` -- this\nlibrary has no i18n system of its own, so an overridable formatter is\nthe established way to hand locale-sensitive display back to the\nconsumer (mirrors `<lyra-chat-message>`'s identical `formatTimestamp`)."
25169
+ "description": "Overrides the default absolute-time rendering of `timestamp` when an application\nneeds a different timestamp style (mirrors `<lyra-chat-message>`'s identical hook)."
23934
25170
  },
23935
25171
  {
23936
25172
  "kind": "field",
@@ -24259,6 +25495,14 @@
24259
25495
  }
24260
25496
  ],
24261
25497
  "events": [
25498
+ {
25499
+ "description": "Re-dispatched from the in-place rename input as a bubbling, composed event.",
25500
+ "name": "blur"
25501
+ },
25502
+ {
25503
+ "description": "Re-dispatched from the in-place rename input as a bubbling, composed event.",
25504
+ "name": "focus"
25505
+ },
24262
25506
  {
24263
25507
  "description": "An in-place rename was committed (Enter, or blur while editing). `detail: { title }`. Does not mutate `title` itself -- this is a controlled component, the same convention `<lyra-chat-message>` follows by not clearing its own state on retry; the consumer applies the new title once it's actually persisted. Not fired when the trimmed draft is empty or unchanged from the original `title` (that's treated as an implicit cancel).",
24264
25508
  "name": "lyra-rename"
@@ -24403,6 +25647,24 @@
24403
25647
  }
24404
25648
  ],
24405
25649
  "members": [
25650
+ {
25651
+ "kind": "field",
25652
+ "name": "accessibleLabel",
25653
+ "type": {
25654
+ "text": "string | null"
25655
+ },
25656
+ "default": "null",
25657
+ "description": "Accessible name forwarded from the host to the internal button. When unset, the localized\nCopy/Copied state provides the name.",
25658
+ "attribute": "aria-label"
25659
+ },
25660
+ {
25661
+ "kind": "field",
25662
+ "name": "buttonEl",
25663
+ "type": {
25664
+ "text": "HTMLButtonElement | undefined"
25665
+ },
25666
+ "privacy": "private"
25667
+ },
24406
25668
  {
24407
25669
  "kind": "field",
24408
25670
  "name": "copyTimeoutId",
@@ -24411,6 +25673,17 @@
24411
25673
  },
24412
25674
  "privacy": "private"
24413
25675
  },
25676
+ {
25677
+ "kind": "field",
25678
+ "name": "disabled",
25679
+ "type": {
25680
+ "text": "boolean"
25681
+ },
25682
+ "default": "false",
25683
+ "description": "Prevent activation and remove the internal button from the tab order.",
25684
+ "attribute": "disabled",
25685
+ "reflects": true
25686
+ },
24414
25687
  {
24415
25688
  "kind": "field",
24416
25689
  "name": "effectiveDirection",
@@ -24439,6 +25712,16 @@
24439
25712
  "module": "src/internal/lyra-element.ts"
24440
25713
  }
24441
25714
  },
25715
+ {
25716
+ "kind": "field",
25717
+ "name": "feedbackDuration",
25718
+ "default": "1500",
25719
+ "description": "How long, in milliseconds, the copied confirmation state remains visible.",
25720
+ "attribute": "feedback-duration",
25721
+ "type": {
25722
+ "text": "number"
25723
+ }
25724
+ },
24442
25725
  {
24443
25726
  "kind": "field",
24444
25727
  "name": "justCopied",
@@ -24537,6 +25820,15 @@
24537
25820
  "module": "src/internal/lyra-element.ts"
24538
25821
  }
24539
25822
  },
25823
+ {
25824
+ "kind": "method",
25825
+ "name": "blur",
25826
+ "return": {
25827
+ "type": {
25828
+ "text": "void"
25829
+ }
25830
+ }
25831
+ },
24540
25832
  {
24541
25833
  "kind": "method",
24542
25834
  "name": "emit",
@@ -24574,6 +25866,24 @@
24574
25866
  "module": "src/internal/lyra-element.ts"
24575
25867
  }
24576
25868
  },
25869
+ {
25870
+ "kind": "method",
25871
+ "name": "focus",
25872
+ "return": {
25873
+ "type": {
25874
+ "text": "void"
25875
+ }
25876
+ },
25877
+ "parameters": [
25878
+ {
25879
+ "name": "options",
25880
+ "optional": true,
25881
+ "type": {
25882
+ "text": "FocusOptions"
25883
+ }
25884
+ }
25885
+ ]
25886
+ },
24577
25887
  {
24578
25888
  "kind": "method",
24579
25889
  "name": "localize",
@@ -24671,6 +25981,30 @@
24671
25981
  }
24672
25982
  ],
24673
25983
  "attributes": [
25984
+ {
25985
+ "name": "aria-label",
25986
+ "type": {
25987
+ "text": "string | null"
25988
+ },
25989
+ "default": "null",
25990
+ "description": "Accessible name forwarded from the host to the internal button. When unset, the localized\nCopy/Copied state provides the name.",
25991
+ "fieldName": "accessibleLabel"
25992
+ },
25993
+ {
25994
+ "name": "disabled",
25995
+ "type": {
25996
+ "text": "boolean"
25997
+ },
25998
+ "default": "false",
25999
+ "description": "Prevent activation and remove the internal button from the tab order.",
26000
+ "fieldName": "disabled"
26001
+ },
26002
+ {
26003
+ "name": "feedback-duration",
26004
+ "default": "DEFAULT_FEEDBACK_DURATION",
26005
+ "description": "How long, in milliseconds, the copied confirmation state remains visible.",
26006
+ "fieldName": "feedbackDuration"
26007
+ },
24674
26008
  {
24675
26009
  "name": "locale",
24676
26010
  "type": {
@@ -29169,8 +30503,25 @@
29169
30503
  "declarations": [
29170
30504
  {
29171
30505
  "kind": "class",
29172
- "description": "`<lyra-document-preview>` — a format-dispatching viewer for one document/\nattachment, plus the visual state machine for an async server-side\nconversion a host app runs in front of it.\n\nFormat dispatch is intentionally minimal (see this family's scope\nguidance): only `text/*`/`application/json` (plain, scrollable `<pre>` —\nno syntax highlighting; compose `<lyra-code-block>` yourself via the\n`unsupported` slot for that) and `image/*` (a contained `<img>`) render\ninline. Everything else — PDF, office documents, video, audio, or any\nunrecognized MIME type — falls back to a generic \"can't preview this\"\nstate: a file glyph, a short message, and (when `src` is set) a native\n`<a download>` link. This is a deliberate ceiling, not a gap: this\ncomponent ships a dispatch *shell*, not a format registry. The\n`unsupported` slot is the escape hatch for every format left out of the\nbuilt-in three — plug in a PDF.js viewer, an office-doc renderer, a\n`<lyra-code-block>`, or anything else keyed off `mime-type` yourself.\n\n`status=\"converting\"` is a second, independent axis from format dispatch.\nThis component does not know your backend's conversion API shape and\ntherefore owns none of the actual polling/fetch — a host that's converting\na non-natively-previewable format server-side (e.g. .docx → .pdf) polls\nits own backend and updates `status`/`progress`/`src` here as that\nproceeds. This component only *visualizes* that state: an indeterminate\nspinner, or a determinate one once `progress` is supplied. Once the host\nflips `status` to `\"ready\"` (typically alongside a new `src`/`mime-type`\npointing at the converted artifact), normal format dispatch resumes.\n\nThe one piece of async work this component *does* own is fetching a\n`text/*`/`application/json` `src` itself (there's no other way to get a\n`<pre>`'s text content from a URL) — gated behind the same generation-\ncounter guard `<lyra-tool-result-view>`'s `resolve()` uses, so a `src`\nreassigned mid-fetch can't have a stale response clobber a newer one. A\nfailure here (network error, non-2xx response) renders inline via\n`[part=\"error\"]` and fires `lyra-render-error`, independently of the\nhost-owned `status` prop — mirrors `<lyra-markdown>`'s identical stance\nthat a *rendering* failure and a host's own state machine are different\nconcerns.\n\nEvery `src` is validated for the DOM/API sink that consumes it. Text\nfetches and image sources allow relative URLs plus `http:`, `https:`,\n`blob:`, and `data:`. Download links deliberately exclude `data:` because\nfollowing a `data:text/html` URL can create an active document. Unsafe or\nmalformed URLs never reach `fetch()`, an image `src`, or an anchor `href`;\nthey render a non-interactive fallback/error instead.\n\nAccessibility: the `\"converting\"` state (no numeric `progress`) is a\n`role=\"status\"` region wrapping a visually-hidden \"Converting document…\"\nstring. This is a *plain* static region, not routed through\n`<lyra-live-region>`/`Announcer` — like `<lyra-typing-indicator>`'s\nidentical judgement call (see that component's class doc), this only ever\nhas one thing to announce (entering the state), not a rapidly-repeating\nstream of updates, so the coalescing machinery a high-frequency component\nneeds would be pure overhead here. Once real `progress` is available, the\nregion becomes a standard `role=\"progressbar\"` instead, which is\nself-describing via `aria-valuenow` with no extra live-region wiring\nneeded. `status=\"error\"` renders `[part=\"error\"]` as `role=\"alert\"` — an\nassertive, one-shot failure notice, the same native-role shortcut\n`<lyra-live-region>`'s own `mode=\"assertive\"` maps to, without requiring\nthe announcer machinery here either.",
30506
+ "description": "`<lyra-document-preview>` — a format-dispatching viewer for one document/\nattachment, plus the visual state machine for an async server-side\nconversion a host app runs in front of it.\n\nFormat dispatch is intentionally minimal (see this family's scope\nguidance): only `text/*`/`application/json` (plain, scrollable `<pre>` —\nno syntax highlighting; compose `<lyra-code-block>` yourself via the\n`unsupported` slot for that) and `image/*` (a contained `<img>`) render\ninline. Everything else — PDF, office documents, video, audio, or any\nunrecognized MIME type — falls back to a generic \"can't preview this\"\nstate: a file glyph, a short message, and (when `src` is set) a native\n`<a download>` link. This is a deliberate ceiling, not a gap: this\ncomponent ships a dispatch *shell*, not a format registry. The\n`unsupported` slot is the escape hatch for every format left out of the\nbuilt-in three — plug in a PDF.js viewer, an office-doc renderer, a\n`<lyra-code-block>`, or anything else keyed off `mime-type` yourself.\n\n`status=\"converting\"` is a second, independent axis from format dispatch.\nThis component does not know your backend's conversion API shape and\ntherefore owns none of the actual polling/fetch — a host that's converting\na non-natively-previewable format server-side (e.g. .docx → .pdf) polls\nits own backend and updates `status`/`progress`/`src` here as that\nproceeds. This component only *visualizes* that state: an indeterminate\nspinner, or a determinate one once `progress` is supplied. Once the host\nflips `status` to `\"ready\"` (typically alongside a new `src`/`mime-type`\npointing at the converted artifact), normal format dispatch resumes.\n\nThe one piece of async work this component *does* own is fetching a\n`text/*`/`application/json` `src` itself (there's no other way to get a\n`<pre>`'s text content from a URL) — gated behind the same generation-\ncounter guard `<lyra-tool-result-view>`'s `resolve()` uses, plus an\n`AbortController`, so a `src` reassigned mid-fetch cancels the obsolete\nrequest and can't have a stale response clobber a newer one. A\nfailure here (network error, non-2xx response) renders inline via\n`[part=\"error\"]` and fires `lyra-render-error`, independently of the\nhost-owned `status` prop — mirrors `<lyra-markdown>`'s identical stance\nthat a *rendering* failure and a host's own state machine are different\nconcerns.\n\nEvery `src` is validated for the DOM/API sink that consumes it. Text\nfetches and image sources allow relative URLs plus `http:`, `https:`,\n`blob:`, and `data:`. Download links deliberately exclude `data:` because\nfollowing a `data:text/html` URL can create an active document. Unsafe or\nmalformed URLs never reach `fetch()`, an image `src`, or an anchor `href`;\nthey render a non-interactive fallback/error instead.\n\nAccessibility: the `\"converting\"` state (no numeric `progress`) is a\n`role=\"status\"` region wrapping a visually-hidden \"Converting document…\"\nstring. This is a *plain* static region, not routed through\n`<lyra-live-region>`/`Announcer` — like `<lyra-typing-indicator>`'s\nidentical judgement call (see that component's class doc), this only ever\nhas one thing to announce (entering the state), not a rapidly-repeating\nstream of updates, so the coalescing machinery a high-frequency component\nneeds would be pure overhead here. Once real `progress` is available, the\nregion becomes a standard `role=\"progressbar\"` instead, which is\nself-describing via `aria-valuenow` with no extra live-region wiring\nneeded. `status=\"error\"` renders `[part=\"error\"]` as `role=\"alert\"` — an\nassertive, one-shot failure notice, the same native-role shortcut\n`<lyra-live-region>`'s own `mode=\"assertive\"` maps to, without requiring\nthe announcer machinery here either.",
29173
30507
  "name": "LyraDocumentPreview",
30508
+ "cssProperties": [
30509
+ {
30510
+ "description": "Maximum body block size before the preview scrolls internally.",
30511
+ "name": "--lyra-document-preview-max-height",
30512
+ "default": "none"
30513
+ },
30514
+ {
30515
+ "description": "Font used for plain-text previews.",
30516
+ "name": "--lyra-document-preview-font",
30517
+ "default": "var(--lyra-font-mono)"
30518
+ },
30519
+ {
30520
+ "description": "Duration of one indeterminate loading-indicator rotation.",
30521
+ "name": "--lyra-document-preview-spin-duration",
30522
+ "default": "0.8s"
30523
+ }
30524
+ ],
29174
30525
  "cssParts": [
29175
30526
  {
29176
30527
  "description": "The root container.",
@@ -29208,6 +30559,15 @@
29208
30559
  }
29209
30560
  ],
29210
30561
  "members": [
30562
+ {
30563
+ "kind": "field",
30564
+ "name": "alt",
30565
+ "type": {
30566
+ "text": "string | undefined"
30567
+ },
30568
+ "description": "Alternative text for an image preview. When omitted, `filename` (or a\nlocalized generic fallback) is used. Set this explicitly to an empty\nstring when the preview image is decorative.",
30569
+ "attribute": "alt"
30570
+ },
29211
30571
  {
29212
30572
  "kind": "field",
29213
30573
  "name": "effectiveDirection",
@@ -29246,6 +30606,14 @@
29246
30606
  "description": "Shown (via `[part=\"error\"]`) while `status=\"error\"`.",
29247
30607
  "attribute": "error-message"
29248
30608
  },
30609
+ {
30610
+ "kind": "field",
30611
+ "name": "fetchController",
30612
+ "type": {
30613
+ "text": "AbortController | undefined"
30614
+ },
30615
+ "privacy": "private"
30616
+ },
29249
30617
  {
29250
30618
  "kind": "field",
29251
30619
  "name": "fetchGeneration",
@@ -29472,6 +30840,16 @@
29472
30840
  }
29473
30841
  ]
29474
30842
  },
30843
+ {
30844
+ "kind": "method",
30845
+ "name": "invalidateTextFetch",
30846
+ "privacy": "private",
30847
+ "return": {
30848
+ "type": {
30849
+ "text": "void"
30850
+ }
30851
+ }
30852
+ },
29475
30853
  {
29476
30854
  "kind": "method",
29477
30855
  "name": "localize",
@@ -29650,6 +31028,14 @@
29650
31028
  }
29651
31029
  ],
29652
31030
  "attributes": [
31031
+ {
31032
+ "name": "alt",
31033
+ "type": {
31034
+ "text": "string | undefined"
31035
+ },
31036
+ "description": "Alternative text for an image preview. When omitted, `filename` (or a\nlocalized generic fallback) is used. Set this explicitly to an empty\nstring when the preview image is decorative.",
31037
+ "fieldName": "alt"
31038
+ },
29653
31039
  {
29654
31040
  "name": "error-message",
29655
31041
  "type": {
@@ -30373,6 +31759,16 @@
30373
31759
  "privacy": "private",
30374
31760
  "default": "true"
30375
31761
  },
31762
+ {
31763
+ "kind": "field",
31764
+ "name": "accessibleLabel",
31765
+ "type": {
31766
+ "text": "string"
31767
+ },
31768
+ "default": "''",
31769
+ "description": "Accessible name forwarded from the host to the native trigger button.\nWhen unset, the trigger's visible `label` provides its name.",
31770
+ "attribute": "aria-label"
31771
+ },
30376
31772
  {
30377
31773
  "kind": "field",
30378
31774
  "name": "cleanup",
@@ -30462,7 +31858,7 @@
30462
31858
  "text": "string"
30463
31859
  },
30464
31860
  "default": "'Export'",
30465
- "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.",
31861
+ "description": "Visible trigger button text. It also feeds the format menu's `aria-label`\nwhen no host `aria-label` supplies a more specific accessible name.\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.",
30466
31862
  "attribute": "label"
30467
31863
  },
30468
31864
  {
@@ -30610,6 +32006,16 @@
30610
32006
  "module": "src/internal/lyra-element.ts"
30611
32007
  }
30612
32008
  },
32009
+ {
32010
+ "kind": "method",
32011
+ "name": "blur",
32012
+ "return": {
32013
+ "type": {
32014
+ "text": "void"
32015
+ }
32016
+ },
32017
+ "description": "Removes focus from the native trigger button."
32018
+ },
30613
32019
  {
30614
32020
  "kind": "method",
30615
32021
  "name": "closeMenu",
@@ -30686,6 +32092,25 @@
30686
32092
  "module": "src/internal/lyra-element.ts"
30687
32093
  }
30688
32094
  },
32095
+ {
32096
+ "kind": "method",
32097
+ "name": "focus",
32098
+ "return": {
32099
+ "type": {
32100
+ "text": "void"
32101
+ }
32102
+ },
32103
+ "parameters": [
32104
+ {
32105
+ "name": "options",
32106
+ "optional": true,
32107
+ "type": {
32108
+ "text": "FocusOptions"
32109
+ }
32110
+ }
32111
+ ],
32112
+ "description": "Focuses the native trigger button."
32113
+ },
30689
32114
  {
30690
32115
  "kind": "method",
30691
32116
  "name": "focusMenuItem",
@@ -30892,6 +32317,15 @@
30892
32317
  }
30893
32318
  ],
30894
32319
  "attributes": [
32320
+ {
32321
+ "name": "aria-label",
32322
+ "type": {
32323
+ "text": "string"
32324
+ },
32325
+ "default": "''",
32326
+ "description": "Accessible name forwarded from the host to the native trigger button.\nWhen unset, the trigger's visible `label` provides its name.",
32327
+ "fieldName": "accessibleLabel"
32328
+ },
30895
32329
  {
30896
32330
  "name": "disabled",
30897
32331
  "type": {
@@ -30914,7 +32348,7 @@
30914
32348
  "text": "string"
30915
32349
  },
30916
32350
  "default": "'Export'",
30917
- "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.",
32351
+ "description": "Visible trigger button text. It also feeds the format menu's `aria-label`\nwhen no host `aria-label` supplies a more specific accessible name.\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.",
30918
32352
  "fieldName": "label"
30919
32353
  },
30920
32354
  {
@@ -31058,7 +32492,7 @@
31058
32492
  ],
31059
32493
  "slots": [
31060
32494
  {
31061
- "description": "Custom drop-zone content, overrides the `label` attribute. The accessible name always comes from `label`, so icon-only slot content remains announced correctly.",
32495
+ "description": "Custom drop-zone content, overrides the visible `label` text. The accessible name comes from a host `aria-label` when present, then falls back to `label`, so icon-only slot content remains announced correctly.",
31062
32496
  "name": ""
31063
32497
  }
31064
32498
  ],
@@ -31082,6 +32516,16 @@
31082
32516
  "description": "Message announced after an accepted selection; `{count}` is replaced by\nthe number of accepted files.",
31083
32517
  "attribute": "accepted-message"
31084
32518
  },
32519
+ {
32520
+ "kind": "field",
32521
+ "name": "accessibleLabel",
32522
+ "type": {
32523
+ "text": "string"
32524
+ },
32525
+ "default": "''",
32526
+ "description": "Accessible name forwarded to the semantic dropzone and native file input.\nWhen unset, the effective `label` text is used.",
32527
+ "attribute": "aria-label"
32528
+ },
31085
32529
  {
31086
32530
  "kind": "field",
31087
32531
  "name": "allowedMimeTypes",
@@ -31090,6 +32534,14 @@
31090
32534
  },
31091
32535
  "default": "[]"
31092
32536
  },
32537
+ {
32538
+ "kind": "field",
32539
+ "name": "baseEl",
32540
+ "type": {
32541
+ "text": "HTMLElement | undefined"
32542
+ },
32543
+ "privacy": "private"
32544
+ },
31093
32545
  {
31094
32546
  "kind": "field",
31095
32547
  "name": "disabled",
@@ -31400,6 +32852,25 @@
31400
32852
  }
31401
32853
  ]
31402
32854
  },
32855
+ {
32856
+ "kind": "method",
32857
+ "name": "focus",
32858
+ "return": {
32859
+ "type": {
32860
+ "text": "void"
32861
+ }
32862
+ },
32863
+ "parameters": [
32864
+ {
32865
+ "name": "options",
32866
+ "optional": true,
32867
+ "type": {
32868
+ "text": "FocusOptions"
32869
+ }
32870
+ }
32871
+ ],
32872
+ "description": "Focuses the semantic dropzone."
32873
+ },
31403
32874
  {
31404
32875
  "kind": "method",
31405
32876
  "name": "isAllowed",
@@ -31556,6 +33027,15 @@
31556
33027
  "description": "Message announced after an accepted selection; `{count}` is replaced by\nthe number of accepted files.",
31557
33028
  "fieldName": "acceptedMessage"
31558
33029
  },
33030
+ {
33031
+ "name": "aria-label",
33032
+ "type": {
33033
+ "text": "string"
33034
+ },
33035
+ "default": "''",
33036
+ "description": "Accessible name forwarded to the semantic dropzone and native file input.\nWhen unset, the effective `label` text is used.",
33037
+ "fieldName": "accessibleLabel"
33038
+ },
31559
33039
  {
31560
33040
  "name": "disabled",
31561
33041
  "type": {
@@ -31687,6 +33167,22 @@
31687
33167
  "kind": "class",
31688
33168
  "description": "`<lyra-flag>` — a country/language flag.\n\nFlag images are shipped by the optional peer package `@aceshooting/lyra-flags`,\nnot bundled into lyra-ui itself, so importing the core library pulls zero flag\nweight. Give it a `country` (ISO 3166-1 alpha-2) or a `language` tag (mapped to\na representative country). While that peer package's `flagUrl()` resolves (or\nif it isn't installed), the host carries `aria-busy=\"true\"` and a skeleton\nplaceholder renders in its place.\n\n**Bundle-size note:** `country`/`language` resolve through the peer package's\n`flagUrl(code)`, which lazily fetches one requested flag at runtime. A\nbundler may still emit the complete reachable lazy-chunk graph; use a\nliteral asset subpath import when the deployment artifact must be pruned.\nIf you already\nhave a flag's URL at build time (e.g. from your own literal\n`import frUrl from '@aceshooting/lyra-flags/flags/fr.svg?url'`), pass it as\n`src` instead to skip the peer-package round trip (and its loading-skeleton\nflash) entirely.\n\nThe ~65 flags whose design includes a detailed coat of arms/seal/emblem (e.g. `es`, `pt`) ship\nthree fidelity tiers; choose one with `variant`: `\"compact\"` (a tiny WebP raster for icon-scale\nuse — menu items, language selectors, dense lists), the default `\"standard\"` (icon-optimized\nvector for card/row sizes), or `\"detailed\"` (the pristine full-detail vector for hero-scale\ndisplay). A no-op for every other code — all tiers resolve to the same file. See `variant`'s own\ndoc.",
31689
33169
  "name": "LyraFlag",
33170
+ "cssProperties": [
33171
+ {
33172
+ "description": "Rectangular flag aspect ratio.",
33173
+ "name": "--lyra-flag-aspect-ratio",
33174
+ "default": "4 / 3"
33175
+ },
33176
+ {
33177
+ "description": "How the image fits its flag frame.",
33178
+ "name": "--lyra-flag-object-fit",
33179
+ "default": "cover"
33180
+ },
33181
+ {
33182
+ "description": "Rectangular flag corner radius.",
33183
+ "name": "--lyra-flag-radius"
33184
+ }
33185
+ ],
31690
33186
  "cssParts": [
31691
33187
  {
31692
33188
  "description": "The underlying <img>.",
@@ -31694,6 +33190,16 @@
31694
33190
  }
31695
33191
  ],
31696
33192
  "members": [
33193
+ {
33194
+ "kind": "field",
33195
+ "name": "accessibleLabel",
33196
+ "type": {
33197
+ "text": "string | null"
33198
+ },
33199
+ "default": "null",
33200
+ "description": "Host `aria-label` forwarded to the internal image. Takes precedence over `label` and the\nderived region name; an explicit empty string marks the image decorative.",
33201
+ "attribute": "aria-label"
33202
+ },
31697
33203
  {
31698
33204
  "kind": "field",
31699
33205
  "name": "code",
@@ -31767,7 +33273,7 @@
31767
33273
  "type": {
31768
33274
  "text": "string | undefined"
31769
33275
  },
31770
- "description": "Accessible label / `alt` text. Defaults to a localized, human-readable\nregion name derived from the *resolved country code* via\n`Intl.DisplayNames` (e.g. `\"United Kingdom\"`) — for a `language`-only\nelement (e.g. `language=\"en\"`) that's the mapped country's display name,\nnot the language tag itself. Falls back to the bare uppercase code if\n`Intl.DisplayNames` can't resolve it. Has no default when only `src` is\ngiven (no country/language to derive one from).",
33276
+ "description": "Accessible label / `alt` text used when `aria-label` is unset. Defaults to a localized, human-readable\nregion name derived from the *resolved country code* via\n`Intl.DisplayNames` (e.g. `\"United Kingdom\"`) — for a `language`-only\nelement (e.g. `language=\"en\"`) that's the mapped country's display name,\nnot the language tag itself. Falls back to the bare uppercase code if\n`Intl.DisplayNames` can't resolve it. Has no default when only `src` is\ngiven (no country/language to derive one from).",
31771
33277
  "attribute": "label"
31772
33278
  },
31773
33279
  {
@@ -32020,6 +33526,15 @@
32020
33526
  }
32021
33527
  ],
32022
33528
  "attributes": [
33529
+ {
33530
+ "name": "aria-label",
33531
+ "type": {
33532
+ "text": "string | null"
33533
+ },
33534
+ "default": "null",
33535
+ "description": "Host `aria-label` forwarded to the internal image. Takes precedence over `label` and the\nderived region name; an explicit empty string marks the image decorative.",
33536
+ "fieldName": "accessibleLabel"
33537
+ },
32023
33538
  {
32024
33539
  "name": "country",
32025
33540
  "type": {
@@ -32042,7 +33557,7 @@
32042
33557
  "type": {
32043
33558
  "text": "string | undefined"
32044
33559
  },
32045
- "description": "Accessible label / `alt` text. Defaults to a localized, human-readable\nregion name derived from the *resolved country code* via\n`Intl.DisplayNames` (e.g. `\"United Kingdom\"`) — for a `language`-only\nelement (e.g. `language=\"en\"`) that's the mapped country's display name,\nnot the language tag itself. Falls back to the bare uppercase code if\n`Intl.DisplayNames` can't resolve it. Has no default when only `src` is\ngiven (no country/language to derive one from).",
33560
+ "description": "Accessible label / `alt` text used when `aria-label` is unset. Defaults to a localized, human-readable\nregion name derived from the *resolved country code* via\n`Intl.DisplayNames` (e.g. `\"United Kingdom\"`) — for a `language`-only\nelement (e.g. `language=\"en\"`) that's the mapped country's display name,\nnot the language tag itself. Falls back to the bare uppercase code if\n`Intl.DisplayNames` can't resolve it. Has no default when only `src` is\ngiven (no country/language to derive one from).",
32046
33561
  "fieldName": "label"
32047
33562
  },
32048
33563
  {
@@ -33744,6 +35259,24 @@
33744
35259
  }
33745
35260
  ]
33746
35261
  },
35262
+ {
35263
+ "kind": "method",
35264
+ "name": "graphItemAnnouncement",
35265
+ "privacy": "private",
35266
+ "return": {
35267
+ "type": {
35268
+ "text": "string"
35269
+ }
35270
+ },
35271
+ "parameters": [
35272
+ {
35273
+ "name": "index",
35274
+ "type": {
35275
+ "text": "number"
35276
+ }
35277
+ }
35278
+ ]
35279
+ },
33747
35280
  {
33748
35281
  "kind": "method",
33749
35282
  "name": "graphItemCount",
@@ -34193,9 +35726,16 @@
34193
35726
  {
34194
35727
  "name": "firstDayOfWeek",
34195
35728
  "default": "0"
35729
+ },
35730
+ {
35731
+ "name": "monthLabelText",
35732
+ "optional": true,
35733
+ "type": {
35734
+ "text": "(jsMonth: number, year: number) => string | undefined"
35735
+ }
34196
35736
  }
34197
35737
  ],
34198
- "description": "Lays `days` out onto a GitHub-style week grid, 7 rows deep. `days` need not\nbe sorted or contiguous; the grid spans from the earliest to the latest\ndate present, anchored at the `firstDayOfWeek`-weekday on/before the\nearliest date (`firstDayOfWeek` is 0–6, Sunday-first by default — same\nnumbering as `CalendarCell.weekday`). With the default `firstDayOfWeek` of\n0, this is the Sunday on/before the earliest date, exactly as before this\nparameter existed.\n\nAn entry whose `date` doesn't parse to a valid calendar date (e.g. `''` or\n`'2026-03'`) is dropped rather than included: `parseIsoDate` on a malformed\nstring yields an `Invalid Date` (`getTime()` is `NaN`), and letting that\nsingle `NaN` reach the min/max below would poison `firstWeekStart` (and\ntherefore every cell's `week`) for the whole grid instead of just the bad\nentry. Likewise, an entry whose `date` is numerically well-formed but\ncalendar-invalid (e.g. `'2026-02-30'`, which `Date.UTC` silently rolls\nover into March) is dropped rather than silently renormalized — see\n`isCalendarValid()`."
35738
+ "description": "Lays `days` out onto a GitHub-style week grid, 7 rows deep. `days` need not\nbe sorted or contiguous; the grid spans from the earliest to the latest\ndate present, anchored at the `firstDayOfWeek`-weekday on/before the\nearliest date (`firstDayOfWeek` is 0–6, Sunday-first by default — same\nnumbering as `CalendarCell.weekday`). With the default `firstDayOfWeek` of\n0, this is the Sunday on/before the earliest date, exactly as before this\nparameter existed.\n\nAn entry whose `date` doesn't parse to a valid calendar date (e.g. `''` or\n`'2026-03'`) is dropped rather than included: `parseIsoDate` on a malformed\nstring yields an `Invalid Date` (`getTime()` is `NaN`), and letting that\nsingle `NaN` reach the min/max below would poison `firstWeekStart` (and\ntherefore every cell's `week`) for the whole grid instead of just the bad\nentry. Likewise, an entry whose `date` is numerically well-formed but\ncalendar-invalid (e.g. `'2026-02-30'`, which `Date.UTC` silently rolls\nover into March) is dropped rather than silently renormalized — see\n`isCalendarValid()`.\n\n`monthLabelText`, when it returns a string for a given `(jsMonth, year)`, overrides that\nmonth's locale-derived label — mirrors `LyraHeatmap.weekdayLabelText`'s own override-with-\nfallback shape, letting month labels track the same locale signal (e.g. an app's own i18n\nstore) as every other localizable string on the component instead of always following\n`toLocaleString(undefined, ...)`'s browser/OS-language default."
34199
35739
  },
34200
35740
  {
34201
35741
  "kind": "function",
@@ -34777,6 +36317,14 @@
34777
36317
  "default": "'matrix'",
34778
36318
  "attribute": "mode"
34779
36319
  },
36320
+ {
36321
+ "kind": "field",
36322
+ "name": "monthLabelText",
36323
+ "type": {
36324
+ "text": "(jsMonth: number, year: number) => string | undefined | undefined"
36325
+ },
36326
+ "description": "Overrides the month-axis label text in calendar mode -- receives the real JS month index\n(`0` January .. `11` December) and full year for a month boundary that would otherwise\nrender a label and, when it returns a string, uses it instead of the built-in\n`Intl.DateTimeFormat`-derived short month name. Mirrors `weekdayLabelText`'s exact\noverride-with-fallback shape -- unset (the default) reproduces today's exact\n`toLocaleString(undefined, ...)`-derived output."
36327
+ },
34780
36328
  {
34781
36329
  "kind": "field",
34782
36330
  "name": "onCanvasClick",
@@ -35265,6 +36813,24 @@
35265
36813
  },
35266
36814
  "description": "Reads the customizable canvas-drawn keyboard-focus-ring stroke color off the host's computed style."
35267
36815
  },
36816
+ {
36817
+ "kind": "method",
36818
+ "name": "formatNumericValue",
36819
+ "privacy": "private",
36820
+ "return": {
36821
+ "type": {
36822
+ "text": "string"
36823
+ }
36824
+ },
36825
+ "parameters": [
36826
+ {
36827
+ "name": "value",
36828
+ "type": {
36829
+ "text": "number"
36830
+ }
36831
+ }
36832
+ ]
36833
+ },
35268
36834
  {
35269
36835
  "kind": "method",
35270
36836
  "name": "hitTest",
@@ -35435,6 +37001,16 @@
35435
37001
  "module": "src/internal/lyra-element.ts"
35436
37002
  }
35437
37003
  },
37004
+ {
37005
+ "kind": "method",
37006
+ "name": "localizedValueLabel",
37007
+ "privacy": "private",
37008
+ "return": {
37009
+ "type": {
37010
+ "text": "string"
37011
+ }
37012
+ }
37013
+ },
35438
37014
  {
35439
37015
  "kind": "method",
35440
37016
  "name": "matrixCellSize",
@@ -36166,7 +37742,7 @@
36166
37742
  "declarations": [
36167
37743
  {
36168
37744
  "kind": "class",
36169
- "description": "`<lyra-input>` — a single-line plain-text input primitive, the `lyra-*` equivalent of a plain\n`wa-input`, form-associated via the `FormAssociated` mixin (same shape as `<lyra-textarea>`).\n\nShips the same opt-in `label`/`hint`/`errorText` form-control chrome as `<lyra-textarea>`/\n`<lyra-select>` (props + matching named slots + `form-control`/`form-control-label`/`hint`/`error`\nparts) — left unset, the chrome stays hidden. `type=\"password\"` always renders a\n`password-toggle` eye-icon button that flips the internal native input between\n`type=\"password\"`/`type=\"text\"` and tracks `passwordVisible`. `type=\"email\"`/`type=\"number\"`\n(with `min`/`max`/`step`) delegate constraint validation to the internal native `<input>`'s own\nbrowser-computed `validity`, bridged into this element's `ElementInternals` by `updateValidity()`.\n\nA host `aria-label` is forwarded to the internal textbox via the typed `accessibleLabel` property;\nexternal `aria-labelledby`/`aria-describedby` idrefs are not copied across the shadow boundary.",
37745
+ "description": "`<lyra-input>` — a single-line plain-text input primitive, the `lyra-*` equivalent of a plain\n`wa-input`, form-associated via the `FormAssociated` mixin (same shape as `<lyra-textarea>`).\n\nShips the same opt-in `label`/`hint`/`errorText` form-control chrome as `<lyra-textarea>`/\n`<lyra-select>` (props + matching named slots + `form-control`/`form-control-label`/`hint`/`error`\nparts) — left unset, the chrome stays hidden. `size` uses the same `xs`–`xl` scale as\n`<lyra-select>`/`<lyra-combobox>`. `type=\"password\"` always renders a\n`password-toggle` eye-icon button that flips the internal native input between\n`type=\"password\"`/`type=\"text\"` and tracks `passwordVisible`. `type=\"email\"`/`type=\"number\"`\n(with `min`/`max`/`step`) delegate constraint validation to the internal native `<input>`'s own\nbrowser-computed `validity`, bridged into this element's `ElementInternals` by `updateValidity()`.\n\nA host `aria-label` is forwarded to the internal textbox via the typed `accessibleLabel` property;\nexternal `aria-labelledby`/`aria-describedby` idrefs are not copied across the shadow boundary.",
36170
37746
  "name": "LyraInput",
36171
37747
  "cssParts": [
36172
37748
  {
@@ -36422,6 +37998,17 @@
36422
37998
  "default": "''",
36423
37999
  "attribute": "placeholder"
36424
38000
  },
38001
+ {
38002
+ "kind": "field",
38003
+ "name": "size",
38004
+ "type": {
38005
+ "text": "LyraInputSize"
38006
+ },
38007
+ "default": "'m'",
38008
+ "description": "Visual size — same `xs`–`xl` scale as `lyra-select`/`lyra-combobox`'s own `size`.",
38009
+ "attribute": "size",
38010
+ "reflects": true
38011
+ },
36425
38012
  {
36426
38013
  "kind": "field",
36427
38014
  "name": "step",
@@ -36768,6 +38355,15 @@
36768
38355
  "default": "''",
36769
38356
  "fieldName": "placeholder"
36770
38357
  },
38358
+ {
38359
+ "name": "size",
38360
+ "type": {
38361
+ "text": "LyraInputSize"
38362
+ },
38363
+ "default": "'m'",
38364
+ "description": "Visual size — same `xs`–`xl` scale as `lyra-select`/`lyra-combobox`'s own `size`.",
38365
+ "fieldName": "size"
38366
+ },
36771
38367
  {
36772
38368
  "name": "step",
36773
38369
  "type": {
@@ -38458,7 +40054,7 @@
38458
40054
  "text": "string"
38459
40055
  },
38460
40056
  "default": "''",
38461
- "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. A plain\n`aria-label` attribute on the host itself is honored as a fallback when this is left\nunset, matching `<lyra-slider>`/`<lyra-checkbox>`/`<lyra-switch>`. Empty (the default,\nwith no host `aria-label` either) falls back to the localized `'map'` message.",
40057
+ "description": "Accessible name fallback for the map group. A host `aria-label` takes\nprecedence when both are set; when neither is present, the group uses\nthe localized `map` message.",
38462
40058
  "attribute": "label"
38463
40059
  },
38464
40060
  {
@@ -38768,7 +40364,7 @@
38768
40364
  "text": "string"
38769
40365
  },
38770
40366
  "default": "''",
38771
- "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. A plain\n`aria-label` attribute on the host itself is honored as a fallback when this is left\nunset, matching `<lyra-slider>`/`<lyra-checkbox>`/`<lyra-switch>`. Empty (the default,\nwith no host `aria-label` either) falls back to the localized `'map'` message.",
40367
+ "description": "Accessible name fallback for the map group. A host `aria-label` takes\nprecedence when both are set; when neither is present, the group uses\nthe localized `map` message.",
38772
40368
  "fieldName": "label"
38773
40369
  },
38774
40370
  {
@@ -39128,7 +40724,7 @@
39128
40724
  "text": "boolean"
39129
40725
  },
39130
40726
  "default": "false",
39131
- "description": "Forward-compatible hint for a dedicated streaming renderer expected to\nbuild on this component later (coalescing partial tokens as they\narrive) setting it has no rendering effect yet. Reflects so a\nconsumer can already target `lyra-markdown[streaming]` in CSS ahead of\nthat behavior landing.",
40727
+ "description": "Signals that `content` is still arriving incrementally. Content changes\ncontinue to render immediately; while this is `true`, the host remains\n`aria-busy=\"true\"` so assistive technology knows the rendered document\nis not final. Set it back to `false` with the final content update.\nReflects so a consumer can also target `lyra-markdown[streaming]`.",
39132
40728
  "attribute": "streaming",
39133
40729
  "reflects": true
39134
40730
  },
@@ -39436,7 +41032,7 @@
39436
41032
  "text": "boolean"
39437
41033
  },
39438
41034
  "default": "false",
39439
- "description": "Forward-compatible hint for a dedicated streaming renderer expected to\nbuild on this component later (coalescing partial tokens as they\narrive) setting it has no rendering effect yet. Reflects so a\nconsumer can already target `lyra-markdown[streaming]` in CSS ahead of\nthat behavior landing.",
41035
+ "description": "Signals that `content` is still arriving incrementally. Content changes\ncontinue to render immediately; while this is `true`, the host remains\n`aria-busy=\"true\"` so assistive technology knows the rendered document\nis not final. Set it back to `false` with the final content update.\nReflects so a consumer can also target `lyra-markdown[streaming]`.",
39440
41036
  "fieldName": "streaming"
39441
41037
  }
39442
41038
  ],
@@ -39488,7 +41084,7 @@
39488
41084
  "declarations": [
39489
41085
  {
39490
41086
  "kind": "class",
39491
- "description": "`<lyra-media-card>` — a lightweight inline preview for one already-sent,\nalready-available attachment inside a rendered chat message body (e.g.\nplugged into `<lyra-chat-message>`'s `attachments` slot, or embedded\ndirectly by a markdown/message renderer). Distinct from two other,\nsimilarly-named components in this family: `<lyra-document-preview>` is a\nfuller viewer with header chrome and an async server-side-conversion\nstate machine (`status=\"converting\"`), and `<lyra-attachment-chip>` is a\npre-send queued-file chip with upload progress. This component has\nneither concern — it only ever shows a `src` that's already final.\n\n**Format dispatch.** `kind` selects `'image'` (a plain `<img>`), `'video'`\n(a plain `<video controls>`), or `'file'` (an icon + filename chip with a\ndownload/open affordance). Leave `kind` unset to auto-detect from\n`mime-type` (`image/*` / `video/*` / anything else -> `'file'`);\nexplicitly setting `kind` always wins over detection.\n\n**Safe-URL checking.** `src` is validated before it's ever assigned to an\n`<img>`/`<video>` `src` or an `<a href>` — only `http:`/`https:`/`blob:`\n(plus `data:` for a *media* `src` only) or a scheme-relative/relative URL\nwith no scheme at all pass; anything else (`javascript:`, `vbscript:`,\nand similarly suspicious schemes) is rejected. `safeMediaSrc()` and\n`safeLinkHref()` share a platform-URL-based validator; their sink-specific\nallowlists explain why `data:` gets two different answers depending on\nwhere it is used. An `image`/`video` `kind` whose `src` fails the\nmedia-src check falls back to the generic file-chip rendering — this is\nthe \"plain preview unavailable state\" a dangerous URL degrades to, rather\nthan ever reaching a real media/anchor sink. That fallback also re-checks\n`src` against the stricter href allowlist for its own download affordance,\nbut since the href allowlist is a strict subset of the media-src allowlist,\nthat re-check can only ever change the outcome for a direct/auto-detected\n`kind=\"file\"` `src` — an `image`/`video` `src` that already failed the\nwider media-src check necessarily fails the narrower href check too, so\nthe fallback for those two kinds is always the plain, unclickable `span`.\n\n**The `video` case renders its open affordance separately from `base`.**\n`image`/`file` wrap their *entire* card in one native `<button>`/`<a>` —\nsafe because an `<img>` and a plain icon+text chip have no interactive\ncontent of their own to conflict with. A `<video controls>` element is\nitself interactive content (its own play/seek/volume controls), and HTML\nforbids nesting interactive content inside a `<button>`/`<a>` — doing so\nanyway would also make every click on the video's own controls bubble up\nand spuriously fire `lyra-open`. So for `kind=\"video\"`, `base` is a plain,\nnon-interactive wrapper around `[part=\"media\"]`, and a small separate\n`[part=\"open-button\"]` (not one of this component's originally-scoped\nparts, added as the \"explicit view/open affordance\" the class is free to\nprovide) is the thing that actually fires `lyra-open`.\n\n**Navigation.** This component never navigates on its own for `image`/\n`video` — activating the card only fires `lyra-open`; a host decides what\n\"open\" means (a lightbox, a new tab, whatever). The `file`-chip case is\nthe one exception: when `src` passes the (stricter) href safety check, the\nchip is a real `<a href download>` so a bare drop-in still does something\nuseful — but `lyra-open` fires first and is `cancelable`; a host that\ncalls `preventDefault()` on it suppresses that default download/open so it\ncan substitute its own handling instead.",
41087
+ "description": "`<lyra-media-card>` — a lightweight inline preview for one already-sent,\nalready-available attachment inside a rendered chat message body (e.g.\nplugged into `<lyra-chat-message>`'s `attachments` slot, or embedded\ndirectly by a markdown/message renderer). Distinct from two other,\nsimilarly-named components in this family: `<lyra-document-preview>` is a\nfuller viewer with header chrome and an async server-side-conversion\nstate machine (`status=\"converting\"`), and `<lyra-attachment-chip>` is a\npre-send queued-file chip with upload progress. This component has\nneither concern — it only ever shows a `src` that's already final.\n\n**Format dispatch.** `kind` selects `'image'` (a plain `<img>`), `'video'`\n(a plain `<video controls>`), or `'file'` (an icon + filename chip with a\ndownload/open affordance). Leave `kind` unset to auto-detect from\n`mime-type` (`image/*` / `video/*` / anything else -> `'file'`);\nexplicitly setting `kind` always wins over detection.\n\n**Safe-URL checking.** `src` is validated before it's ever assigned to an\n`<img>`/`<video>` `src` or an `<a href>` — only `http:`/`https:`/`blob:`\n(plus `data:` for a *media* `src` only) or a scheme-relative/relative URL\nwith no scheme at all pass; anything else (`javascript:`, `vbscript:`,\nand similarly suspicious schemes) is rejected. `safeMediaSrc()` and\n`safeLinkHref()` share a platform-URL-based validator; their sink-specific\nallowlists explain why `data:` gets two different answers depending on\nwhere it is used. An `image`/`video` `kind` whose `src` fails the\nmedia-src check falls back to the generic file-chip rendering — this is\nthe \"plain preview unavailable state\" a dangerous URL degrades to, rather\nthan ever reaching a real media/anchor sink. That fallback also re-checks\n`src` against the stricter href allowlist for its own download affordance,\nbut since the href allowlist is a strict subset of the media-src allowlist,\nthat re-check can only ever change the outcome for a direct/auto-detected\n`kind=\"file\"` `src` — an `image`/`video` `src` that already failed the\nwider media-src check necessarily fails the narrower href check too, so\nthe fallback for those two kinds is always the plain, unclickable `span`.\n\n**The `video` case renders its open affordance separately from `base`.**\n`image`/`file` wrap their *entire* card in one native `<button>`/`<a>` —\nsafe because an `<img>` and a plain icon+text chip have no interactive\ncontent of their own to conflict with. A `<video controls>` element is\nitself interactive content (its own play/seek/volume controls), and HTML\nforbids nesting interactive content inside a `<button>`/`<a>` — doing so\nanyway would also make every click on the video's own controls bubble up\nand spuriously fire `lyra-open`. So for `kind=\"video\"`, `base` is a plain,\nnon-interactive wrapper around `[part=\"media\"]`, and a small separate\n`[part=\"open-button\"]` (not one of this component's originally-scoped\nparts, added as the \"explicit view/open affordance\" the class is free to\nprovide) is the thing that actually fires `lyra-open`.\n\n**Navigation.** This component never navigates on its own for `image`/\n`video` — activating the card only fires `lyra-open`; a host decides what\n\"open\" means (a lightbox, a new tab, whatever). The `file`-chip case is\nthe one exception: when `src` passes the (stricter) href safety check, the\nchip is a real `<a href download>` so a bare drop-in still does something\nuseful — but `lyra-open` fires first and is `cancelable`; a host that\ncalls `preventDefault()` on it suppresses that default download/open so it\ncan substitute its own handling instead.\n\n**Accessible action name.** The host `aria-label` maps to\n`accessibleLabel` and overrides the filename/alt/per-kind action name on\nwhichever internal element is actionable for the resolved kind. The name\nis therefore applied directly to the button or link across the shadow\nboundary; it does not replace the image alt text or the video control's\nown label.",
39492
41088
  "name": "LyraMediaCard",
39493
41089
  "cssParts": [
39494
41090
  {
@@ -39519,6 +41115,16 @@
39519
41115
  "type": {
39520
41116
  "text": "string"
39521
41117
  },
41118
+ "default": "''",
41119
+ "description": "Accessible-name override for the card's actionable element. Maps to\nthe host's `aria-label` attribute and wins over names derived from\n`filename`, `alt`, or the resolved media kind.",
41120
+ "attribute": "aria-label"
41121
+ },
41122
+ {
41123
+ "kind": "field",
41124
+ "name": "actionLabel",
41125
+ "type": {
41126
+ "text": "string"
41127
+ },
39522
41128
  "privacy": "private",
39523
41129
  "description": "Accessible name for the card's own actionable element (`base` or, for\nvideo, `open-button`) — always phrased as the action it performs.",
39524
41130
  "readonly": true
@@ -39923,6 +41529,15 @@
39923
41529
  "description": "Alt text for the image case (and reused as a video label fallback).\nFalls back to `filename`, then a generic per-kind description.",
39924
41530
  "fieldName": "alt"
39925
41531
  },
41532
+ {
41533
+ "name": "aria-label",
41534
+ "type": {
41535
+ "text": "string"
41536
+ },
41537
+ "default": "''",
41538
+ "description": "Accessible-name override for the card's actionable element. Maps to\nthe host's `aria-label` attribute and wins over names derived from\n`filename`, `alt`, or the resolved media kind.",
41539
+ "fieldName": "accessibleLabel"
41540
+ },
39926
41541
  {
39927
41542
  "name": "filename",
39928
41543
  "type": {
@@ -43821,6 +45436,16 @@
43821
45436
  "privacy": "private",
43822
45437
  "readonly": true
43823
45438
  },
45439
+ {
45440
+ "kind": "field",
45441
+ "name": "onControlBlur",
45442
+ "privacy": "private"
45443
+ },
45444
+ {
45445
+ "kind": "field",
45446
+ "name": "onControlFocus",
45447
+ "privacy": "private"
45448
+ },
43824
45449
  {
43825
45450
  "kind": "field",
43826
45451
  "name": "onPageInput",
@@ -43851,6 +45476,14 @@
43851
45476
  "description": "Total page count derived from `totalItems` and `pageSize`.",
43852
45477
  "readonly": true
43853
45478
  },
45479
+ {
45480
+ "kind": "field",
45481
+ "name": "pageInput",
45482
+ "type": {
45483
+ "text": "HTMLInputElement | undefined"
45484
+ },
45485
+ "privacy": "private"
45486
+ },
43854
45487
  {
43855
45488
  "kind": "field",
43856
45489
  "name": "pageLabel",
@@ -43958,6 +45591,16 @@
43958
45591
  "module": "src/internal/lyra-element.ts"
43959
45592
  }
43960
45593
  },
45594
+ {
45595
+ "kind": "method",
45596
+ "name": "blur",
45597
+ "return": {
45598
+ "type": {
45599
+ "text": "void"
45600
+ }
45601
+ },
45602
+ "description": "Blur the editable page-jump input."
45603
+ },
43961
45604
  {
43962
45605
  "kind": "method",
43963
45606
  "name": "emit",
@@ -43995,6 +45638,25 @@
43995
45638
  "module": "src/internal/lyra-element.ts"
43996
45639
  }
43997
45640
  },
45641
+ {
45642
+ "kind": "method",
45643
+ "name": "focus",
45644
+ "return": {
45645
+ "type": {
45646
+ "text": "void"
45647
+ }
45648
+ },
45649
+ "parameters": [
45650
+ {
45651
+ "name": "options",
45652
+ "optional": true,
45653
+ "type": {
45654
+ "text": "FocusOptions"
45655
+ }
45656
+ }
45657
+ ],
45658
+ "description": "Focus the editable page-jump input."
45659
+ },
43998
45660
  {
43999
45661
  "kind": "method",
44000
45662
  "name": "formatNumber",
@@ -44162,6 +45824,14 @@
44162
45824
  }
44163
45825
  ],
44164
45826
  "events": [
45827
+ {
45828
+ "description": "Re-dispatched from an internal pagination control as a bubbling, composed event.",
45829
+ "name": "blur"
45830
+ },
45831
+ {
45832
+ "description": "Re-dispatched from an internal pagination control as a bubbling, composed event.",
45833
+ "name": "focus"
45834
+ },
44165
45835
  {
44166
45836
  "description": "Fired when a user requests a valid page. `detail: { page }`.",
44167
45837
  "name": "lyra-page-change"
@@ -44340,7 +46010,7 @@
44340
46010
  "declarations": [
44341
46011
  {
44342
46012
  "kind": "class",
44343
- "description": "`<lyra-phone-input>` — a country-aware telephone field whose form value is\ncanonical E.164. National formatting and numbering-plan validation are\nsupplied through `adapter`; without one, already-international E.164 input\nremains useful and national input stays editable with `incomplete` validity.\n\nUser edits emit native-style `input` and `change` events. Event detail\nexposes both the canonical `value` and editable `inputValue`; programmatic\nproperty changes are silent. Phone-number text is deliberately LTR while\nthe form chrome and country selector follow the inherited direction.",
46013
+ "description": "`<lyra-phone-input>` — a country-aware telephone field whose form value is\ncanonical E.164. National formatting and numbering-plan validation are\nsupplied through `adapter`; without one, already-international E.164 input\nremains useful and national input stays editable with `incomplete` validity.\n\nUser edits emit native-style `input` and `change` events. Event detail\nexposes both the canonical `value` and editable `inputValue`; programmatic\nproperty changes are silent. Phone-number text is deliberately LTR while\nthe form chrome and country selector follow the inherited direction. A host\n`aria-label` names the internal telephone input and wins over every derived\nor component-specific fallback.",
44344
46014
  "name": "LyraPhoneInput",
44345
46015
  "cssParts": [
44346
46016
  {
@@ -44405,8 +46075,8 @@
44405
46075
  "type": {
44406
46076
  "text": "string | null"
44407
46077
  },
44408
- "privacy": "private",
44409
46078
  "default": "null",
46079
+ "description": "Accessible name for the telephone input. Takes precedence over `phoneLabel`, label, and placeholder.",
44410
46080
  "attribute": "aria-label"
44411
46081
  },
44412
46082
  {
@@ -44804,6 +46474,27 @@
44804
46474
  "privacy": "private",
44805
46475
  "readonly": true
44806
46476
  },
46477
+ {
46478
+ "kind": "field",
46479
+ "name": "selectionDirection",
46480
+ "type": {
46481
+ "text": "PhoneInputSelectionDirection | null"
46482
+ }
46483
+ },
46484
+ {
46485
+ "kind": "field",
46486
+ "name": "selectionEnd",
46487
+ "type": {
46488
+ "text": "number | null"
46489
+ }
46490
+ },
46491
+ {
46492
+ "kind": "field",
46493
+ "name": "selectionStart",
46494
+ "type": {
46495
+ "text": "number | null"
46496
+ }
46497
+ },
44807
46498
  {
44808
46499
  "kind": "field",
44809
46500
  "name": "status",
@@ -45104,6 +46795,128 @@
45104
46795
  },
45105
46796
  "description": "Select all editable telephone text."
45106
46797
  },
46798
+ {
46799
+ "kind": "method",
46800
+ "name": "setRangeText",
46801
+ "return": {
46802
+ "type": {
46803
+ "text": "void"
46804
+ }
46805
+ },
46806
+ "parameters": [
46807
+ {
46808
+ "name": "replacement",
46809
+ "type": {
46810
+ "text": "string"
46811
+ }
46812
+ },
46813
+ {
46814
+ "name": "start",
46815
+ "optional": true,
46816
+ "type": {
46817
+ "text": "number"
46818
+ }
46819
+ },
46820
+ {
46821
+ "name": "end",
46822
+ "optional": true,
46823
+ "type": {
46824
+ "text": "number"
46825
+ }
46826
+ },
46827
+ {
46828
+ "name": "selectMode",
46829
+ "optional": true,
46830
+ "type": {
46831
+ "text": "SelectionMode"
46832
+ }
46833
+ }
46834
+ ]
46835
+ },
46836
+ {
46837
+ "kind": "method",
46838
+ "name": "setRangeText",
46839
+ "return": {
46840
+ "type": {
46841
+ "text": "void"
46842
+ }
46843
+ },
46844
+ "parameters": [
46845
+ {
46846
+ "name": "replacement",
46847
+ "type": {
46848
+ "text": "string"
46849
+ }
46850
+ },
46851
+ {
46852
+ "name": "start",
46853
+ "type": {
46854
+ "text": "number"
46855
+ }
46856
+ },
46857
+ {
46858
+ "name": "end",
46859
+ "type": {
46860
+ "text": "number"
46861
+ }
46862
+ },
46863
+ {
46864
+ "name": "selectMode",
46865
+ "optional": true,
46866
+ "type": {
46867
+ "text": "SelectionMode"
46868
+ }
46869
+ }
46870
+ ]
46871
+ },
46872
+ {
46873
+ "kind": "method",
46874
+ "name": "setRangeText",
46875
+ "return": {
46876
+ "type": {
46877
+ "text": "void"
46878
+ }
46879
+ },
46880
+ "parameters": [
46881
+ {
46882
+ "name": "replacement",
46883
+ "type": {
46884
+ "text": "string"
46885
+ }
46886
+ }
46887
+ ]
46888
+ },
46889
+ {
46890
+ "kind": "method",
46891
+ "name": "setSelectionRange",
46892
+ "return": {
46893
+ "type": {
46894
+ "text": "void"
46895
+ }
46896
+ },
46897
+ "parameters": [
46898
+ {
46899
+ "name": "start",
46900
+ "type": {
46901
+ "text": "number | null"
46902
+ }
46903
+ },
46904
+ {
46905
+ "name": "end",
46906
+ "type": {
46907
+ "text": "number | null"
46908
+ }
46909
+ },
46910
+ {
46911
+ "name": "direction",
46912
+ "optional": true,
46913
+ "type": {
46914
+ "text": "PhoneInputSelectionDirection"
46915
+ }
46916
+ }
46917
+ ],
46918
+ "description": "Set the selection range in the editable telephone text."
46919
+ },
45107
46920
  {
45108
46921
  "kind": "method",
45109
46922
  "name": "updateValidity",
@@ -45140,6 +46953,7 @@
45140
46953
  "text": "string | null"
45141
46954
  },
45142
46955
  "default": "null",
46956
+ "description": "Accessible name for the telephone input. Takes precedence over `phoneLabel`, label, and placeholder.",
45143
46957
  "fieldName": "accessibleLabel"
45144
46958
  },
45145
46959
  {
@@ -45475,6 +47289,24 @@
45475
47289
  "description": "Largest index reachable at the current `length` (never negative, and\nnever NaN — a non-finite `length` falls back to 0 rather than leaking a\nliteral \"NaN\" into the rendered slider's `max` attribute).",
45476
47290
  "readonly": true
45477
47291
  },
47292
+ {
47293
+ "kind": "field",
47294
+ "name": "onControlBlur",
47295
+ "privacy": "private"
47296
+ },
47297
+ {
47298
+ "kind": "field",
47299
+ "name": "onControlFocus",
47300
+ "privacy": "private"
47301
+ },
47302
+ {
47303
+ "kind": "field",
47304
+ "name": "playButton",
47305
+ "type": {
47306
+ "text": "HTMLButtonElement | undefined"
47307
+ },
47308
+ "privacy": "private"
47309
+ },
45478
47310
  {
45479
47311
  "kind": "field",
45480
47312
  "name": "playing",
@@ -45552,6 +47384,16 @@
45552
47384
  "module": "src/internal/lyra-element.ts"
45553
47385
  }
45554
47386
  },
47387
+ {
47388
+ "kind": "method",
47389
+ "name": "blur",
47390
+ "return": {
47391
+ "type": {
47392
+ "text": "void"
47393
+ }
47394
+ },
47395
+ "description": "Blur the primary play/pause control."
47396
+ },
45555
47397
  {
45556
47398
  "kind": "method",
45557
47399
  "name": "emit",
@@ -45589,6 +47431,25 @@
45589
47431
  "module": "src/internal/lyra-element.ts"
45590
47432
  }
45591
47433
  },
47434
+ {
47435
+ "kind": "method",
47436
+ "name": "focus",
47437
+ "return": {
47438
+ "type": {
47439
+ "text": "void"
47440
+ }
47441
+ },
47442
+ "parameters": [
47443
+ {
47444
+ "name": "options",
47445
+ "optional": true,
47446
+ "type": {
47447
+ "text": "FocusOptions"
47448
+ }
47449
+ }
47450
+ ],
47451
+ "description": "Focus the primary play/pause control."
47452
+ },
45592
47453
  {
45593
47454
  "kind": "method",
45594
47455
  "name": "goTo",
@@ -45768,6 +47629,14 @@
45768
47629
  }
45769
47630
  ],
45770
47631
  "events": [
47632
+ {
47633
+ "description": "Re-dispatched from an internal playback control as a bubbling, composed event.",
47634
+ "name": "blur"
47635
+ },
47636
+ {
47637
+ "description": "Re-dispatched from an internal playback control as a bubbling, composed event.",
47638
+ "name": "focus"
47639
+ },
45771
47640
  {
45772
47641
  "description": "Fired when playback stops (including auto-pause).",
45773
47642
  "name": "lyra-pause"
@@ -48497,6 +50366,11 @@
48497
50366
  "name": "onTriggerClick",
48498
50367
  "privacy": "private"
48499
50368
  },
50369
+ {
50370
+ "kind": "field",
50371
+ "name": "onTriggerFocus",
50372
+ "privacy": "private"
50373
+ },
48500
50374
  {
48501
50375
  "kind": "field",
48502
50376
  "name": "onlyOption",
@@ -48590,6 +50464,14 @@
48590
50464
  "privacy": "private",
48591
50465
  "default": "false"
48592
50466
  },
50467
+ {
50468
+ "kind": "field",
50469
+ "name": "triggerElement",
50470
+ "type": {
50471
+ "text": "HTMLButtonElement | undefined"
50472
+ },
50473
+ "privacy": "private"
50474
+ },
48593
50475
  {
48594
50476
  "kind": "field",
48595
50477
  "name": "triggerId",
@@ -48689,6 +50571,16 @@
48689
50571
  "module": "src/internal/lyra-element.ts"
48690
50572
  }
48691
50573
  },
50574
+ {
50575
+ "kind": "method",
50576
+ "name": "blur",
50577
+ "return": {
50578
+ "type": {
50579
+ "text": "void"
50580
+ }
50581
+ },
50582
+ "description": "Blur the internal select trigger."
50583
+ },
48692
50584
  {
48693
50585
  "kind": "method",
48694
50586
  "name": "checkValidity",
@@ -48735,6 +50627,25 @@
48735
50627
  "module": "src/internal/lyra-element.ts"
48736
50628
  }
48737
50629
  },
50630
+ {
50631
+ "kind": "method",
50632
+ "name": "focus",
50633
+ "return": {
50634
+ "type": {
50635
+ "text": "void"
50636
+ }
50637
+ },
50638
+ "parameters": [
50639
+ {
50640
+ "name": "options",
50641
+ "optional": true,
50642
+ "type": {
50643
+ "text": "FocusOptions"
50644
+ }
50645
+ }
50646
+ ],
50647
+ "description": "Focus the internal select trigger."
50648
+ },
48738
50649
  {
48739
50650
  "kind": "method",
48740
50651
  "name": "formDisabledCallback",
@@ -48979,10 +50890,18 @@
48979
50890
  }
48980
50891
  ],
48981
50892
  "events": [
50893
+ {
50894
+ "description": "Re-dispatched from the trigger as a bubbling, composed event.",
50895
+ "name": "blur"
50896
+ },
48982
50897
  {
48983
50898
  "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.",
48984
50899
  "name": "change"
48985
50900
  },
50901
+ {
50902
+ "description": "Re-dispatched from the trigger as a bubbling, composed event.",
50903
+ "name": "focus"
50904
+ },
48986
50905
  {
48987
50906
  "description": "Fired alongside `change` on every selection change (native `<select>` doesn't meaningfully distinguish the two either).",
48988
50907
  "name": "input"
@@ -49148,6 +51067,13 @@
49148
51067
  "kind": "class",
49149
51068
  "description": "`<lyra-skeleton>` — a loading placeholder. First-party invention, standing\nin for the bespoke `animate-pulse` div most dashboards hand-roll.",
49150
51069
  "name": "LyraSkeleton",
51070
+ "cssProperties": [
51071
+ {
51072
+ "description": "Animation duration and timing function shared by the pulse and sheen effects.",
51073
+ "name": "--lyra-transition-ambient",
51074
+ "default": "1.8s ease-in-out"
51075
+ }
51076
+ ],
49151
51077
  "cssParts": [
49152
51078
  {
49153
51079
  "description": "The placeholder shape.",
@@ -49155,6 +51081,17 @@
49155
51081
  }
49156
51082
  ],
49157
51083
  "members": [
51084
+ {
51085
+ "kind": "field",
51086
+ "name": "announce",
51087
+ "type": {
51088
+ "text": "boolean"
51089
+ },
51090
+ "default": "true",
51091
+ "description": "Whether this placeholder exposes a localized status announcement. Disable for decorative\nmembers of a group whose loading state is announced once by a parent or sibling.",
51092
+ "attribute": "announce",
51093
+ "reflects": true
51094
+ },
49158
51095
  {
49159
51096
  "kind": "field",
49160
51097
  "name": "effect",
@@ -49413,6 +51350,15 @@
49413
51350
  }
49414
51351
  ],
49415
51352
  "attributes": [
51353
+ {
51354
+ "name": "announce",
51355
+ "type": {
51356
+ "text": "boolean"
51357
+ },
51358
+ "default": "true",
51359
+ "description": "Whether this placeholder exposes a localized status announcement. Disable for decorative\nmembers of a group whose loading state is announced once by a parent or sibling.",
51360
+ "fieldName": "announce"
51361
+ },
49416
51362
  {
49417
51363
  "name": "effect",
49418
51364
  "type": {
@@ -51075,6 +53021,16 @@
51075
53021
  }
51076
53022
  ],
51077
53023
  "members": [
53024
+ {
53025
+ "kind": "field",
53026
+ "name": "accessibleLabel",
53027
+ "type": {
53028
+ "text": "string | null"
53029
+ },
53030
+ "default": "null",
53031
+ "description": "Accessible name forwarded to the internal SVG.",
53032
+ "attribute": "aria-label"
53033
+ },
51078
53034
  {
51079
53035
  "kind": "field",
51080
53036
  "name": "effectiveDirection",
@@ -51181,6 +53137,16 @@
51181
53137
  "description": "The data series to plot.",
51182
53138
  "attribute": "values"
51183
53139
  },
53140
+ {
53141
+ "kind": "method",
53142
+ "name": "accessibleName",
53143
+ "privacy": "private",
53144
+ "return": {
53145
+ "type": {
53146
+ "text": "string"
53147
+ }
53148
+ }
53149
+ },
51184
53150
  {
51185
53151
  "kind": "method",
51186
53152
  "name": "addEventListener",
@@ -51335,6 +53301,15 @@
51335
53301
  }
51336
53302
  ],
51337
53303
  "attributes": [
53304
+ {
53305
+ "name": "aria-label",
53306
+ "type": {
53307
+ "text": "string | null"
53308
+ },
53309
+ "default": "null",
53310
+ "description": "Accessible name forwarded to the internal SVG.",
53311
+ "fieldName": "accessibleLabel"
53312
+ },
51338
53313
  {
51339
53314
  "name": "locale",
51340
53315
  "type": {
@@ -55082,7 +57057,7 @@
55082
57057
  "declarations": [
55083
57058
  {
55084
57059
  "kind": "class",
55085
- "description": "`<lyra-table>` — a presentational, sort/select-aware data table.\n\nHeader/row activation is delegated: one `click` and one `keydown`\nlistener on `<table>` resolve the target via `closest('[data-col-key]'\n| '[data-row-key]')` and a key→object lookup map, instead of allocating\nfresh per-column/per-row closures on every render. Both listeners guard\nagainst nested interactive `cell()` content first (see\n`INTERACTIVE_SELECTOR`) so a button/link/input inside a cell owns its own\nactivation instead of triggering `lyra-row-click`.\n\nKeyboard focus follows a roving-tabindex pattern (one `tabindex=\"0\"` stop\namong the header cells, one among the body rows — see `focusedColKey()` /\n`focusedRowKey()`), matching this repo's other `role=\"grid\"`/composite\nwidgets. Left/Right/Home/End move within the header row; Up/Down/Home/End\nmove within the body; Down from the header enters the body's roving stop,\nand Up from the body's first row returns to the header's roving stop.\nEnter/Space still only sort/activate (see `activateColumn()` /\n`activateRow()`).\n\nSet `aria-label` on the host to give the `role=\"grid\"` element an\naccessible name; it's forwarded into the shadow DOM's `<table>`.\n\n`columns[].priority` ('medium' | 'low') hides that column under\n`[part='base']`'s `@container` breakpoints; `[part='reveal-columns-button']`\nforces them all back into view. Rather than a *static* check of whether any\ncolumn merely declares a `priority`, the button (and the public\n`columnsHidden` property, see below) reflects whether a `priority` column\nis *actually* hidden right now — measured via `ResizeObserver` on\n`[part='base']` plus a post-render DOM check — or the public `showAllColumns`\nforce-visible mode is currently active (so there's still a way to toggle\nit back off). `showAllColumns` defaults to `false` and toggles itself on\n`[part='reveal-columns-button']` activation with no external wiring\nrequired, but is also settable up front (property or the reflected\n`show-all-columns` attribute) to restore a previously-persisted\npreference, and readable back — directly or via the `lyra-columns-revealed`\nevent — to persist the current one. `columns[].sticky` pins a column's\nheader/cells to the inline-start (default/`true`) or inline-end (`'end'`)\nedge while the table scrolls horizontally.",
57060
+ "description": "`<lyra-table>` — a presentational, sort/select-aware data table.\n\nHeader/row activation is delegated: one `click` and one `keydown`\nlistener on `<table>` resolve the target via `closest('[data-col-key]'\n| '[data-row-key]')` and a key→object lookup map, instead of allocating\nfresh per-column/per-row closures on every render. Both listeners guard\nagainst nested interactive `cell()` content first (see\n`INTERACTIVE_SELECTOR`) so a button/link/input inside a cell owns its own\nactivation instead of triggering `lyra-row-click`.\n\nKeyboard focus follows a roving-tabindex pattern (one `tabindex=\"0\"` stop\namong the header cells, one among the body rows — see `focusedColKey()` /\n`focusedRowKey()`), matching this repo's other `role=\"grid\"`/composite\nwidgets. Left/Right/Home/End move within the header row; Up/Down/Home/End\nmove within the body; Down from the header enters the body's roving stop,\nand Up from the body's first row returns to the header's roving stop.\nEnter/Space still only sort/activate (see `activateColumn()` /\n`activateRow()`).\n\nSet `aria-label` on the host to give the `role=\"grid\"` element an\naccessible name; it's forwarded into the shadow DOM's `<table>`.\n\n`columns[].priority` ('medium' | 'low') hides that column under\n`[part='base']`'s `@container` breakpoints; `[part='reveal-columns-button']`\nforces them all back into view. Rather than a *static* check of whether any\ncolumn merely declares a `priority`, the button (and the public\n`columnsHidden` property, see below) reflects whether a `priority` column\nis *actually* hidden right now — measured via `ResizeObserver` on\n`[part='base']` plus a post-render DOM check — or the public `showAllColumns`\nforce-visible mode is currently active (so there's still a way to toggle\nit back off). `showAllColumns` defaults to `false` and toggles itself on\n`[part='reveal-columns-button']` activation with no external wiring\nrequired, but is also settable up front (property or the reflected\n`show-all-columns` attribute) to restore a previously-persisted\npreference, and readable back — directly or via the `lyra-columns-revealed`\nevent — to persist the current one. `columns[].sticky` pins a column's\nheader/cells to the inline-start (default/`true`) or inline-end (`'end'`)\nedge while the table scrolls horizontally.\n\n`expandedContent` (a table-level `(row: T) => unknown`, not a per-column\nhook, since the resulting panel spans every column via `colspan`) makes\nevery row render a leading chevron-toggle cell before its data columns.\n`canExpand` optionally gates which rows actually get an interactive\ntoggle — a row that fails it still gets a blank leading cell for column\nalignment. Which rows are currently open is fully consumer-owned via\n`expandedKeys` (a `Set<string | number>` of row keys, per `rowKey`/\n`keyOf()`) — the table only reads it and emits `lyra-row-expand-toggle`\non activation, mirroring `sortKey`/`selectedKey`'s existing\npresentational-only convention.",
55086
57061
  "name": "LyraTable",
55087
57062
  "cssParts": [
55088
57063
  {
@@ -55093,6 +57068,18 @@
55093
57068
  "description": "Each body `<td>`.",
55094
57069
  "name": "cell"
55095
57070
  },
57071
+ {
57072
+ "description": "Each row's (and the header's) leading chevron-toggle cell, rendered only when `expandedContent` is set.",
57073
+ "name": "expand-toggle-cell"
57074
+ },
57075
+ {
57076
+ "description": "The single `colspan`-spanning `<td>` inside `expanded-row`, containing `expandedContent(row)`.",
57077
+ "name": "expanded-cell"
57078
+ },
57079
+ {
57080
+ "description": "The full-width panel `<tr>` rendered beneath a row whose key is in `expandedKeys`.",
57081
+ "name": "expanded-row"
57082
+ },
55096
57083
  {
55097
57084
  "description": "The `<tfoot>`, only rendered when at least one column defines `footer`.",
55098
57085
  "name": "foot"
@@ -55125,6 +57112,14 @@
55125
57112
  "description": "Each body `<tr>`.",
55126
57113
  "name": "row"
55127
57114
  },
57115
+ {
57116
+ "description": "The chevron icon inside `row-expand-toggle`.",
57117
+ "name": "row-expand-icon"
57118
+ },
57119
+ {
57120
+ "description": "The `<button>` inside `expand-toggle-cell`, absent for a row that fails `canExpand`.",
57121
+ "name": "row-expand-toggle"
57122
+ },
55128
57123
  {
55129
57124
  "description": "The chevron shown in the active sortable column's header cell.",
55130
57125
  "name": "sort-icon"
@@ -55155,6 +57150,14 @@
55155
57150
  "default": "null",
55156
57151
  "description": "Roving-tabindex position among body rows; `null` until a row is\nclicked/navigated to, at which point `focusedRowKey()` falls back to\n`selectedKey` (if it matches a row) or the first row."
55157
57152
  },
57153
+ {
57154
+ "kind": "field",
57155
+ "name": "canExpand",
57156
+ "type": {
57157
+ "text": "(row: T) => boolean | undefined"
57158
+ },
57159
+ "description": "Gates whether a given row gets an interactive chevron/toggle at all,\nwhen `expandedContent` is set. Omit to make every row expandable. A\nrow that fails this check still gets a leading cell (for column\nalignment) but it renders empty — no button, no `aria-expanded`, no\nclick handler."
57160
+ },
55158
57161
  {
55159
57162
  "kind": "field",
55160
57163
  "name": "columns",
@@ -55226,6 +57229,23 @@
55226
57229
  "default": "''",
55227
57230
  "attribute": "empty-heading"
55228
57231
  },
57232
+ {
57233
+ "kind": "field",
57234
+ "name": "expandedContent",
57235
+ "type": {
57236
+ "text": "(row: T) => unknown | undefined"
57237
+ },
57238
+ "description": "Renders a full-width panel beneath a row when that row's key is in\n`expandedKeys`. Table-level (not per-column) since the panel spans\nevery column via `colspan`. Setting this makes every row render a\nleading chevron-toggle cell before all data columns; omit for no\nleading cell at all (unchanged output)."
57239
+ },
57240
+ {
57241
+ "kind": "field",
57242
+ "name": "expandedKeys",
57243
+ "type": {
57244
+ "text": "Set<string | number>"
57245
+ },
57246
+ "default": "new Set()",
57247
+ "description": "Consumer-owned open/closed state, keyed the same way as `rowKey`/\n`selectedKey`. The table never mutates this itself — it only reads it\nto decide which rows currently render `expandedContent`; toggle it in\nresponse to `lyra-row-expand-toggle`, mirroring how `sortKey`/\n`selectedKey` already work."
57248
+ },
55229
57249
  {
55230
57250
  "kind": "field",
55231
57251
  "name": "hasMore",
@@ -55438,6 +57458,24 @@
55438
57458
  }
55439
57459
  ]
55440
57460
  },
57461
+ {
57462
+ "kind": "method",
57463
+ "name": "activateExpandToggle",
57464
+ "privacy": "private",
57465
+ "return": {
57466
+ "type": {
57467
+ "text": "void"
57468
+ }
57469
+ },
57470
+ "parameters": [
57471
+ {
57472
+ "name": "key",
57473
+ "type": {
57474
+ "text": "string | number"
57475
+ }
57476
+ }
57477
+ ]
57478
+ },
55441
57479
  {
55442
57480
  "kind": "method",
55443
57481
  "name": "activateRow",
@@ -55827,6 +57865,10 @@
55827
57865
  "description": "A row was activated. `detail: { row }`.",
55828
57866
  "name": "lyra-row-click"
55829
57867
  },
57868
+ {
57869
+ "description": "The row-expand chevron was activated. `detail: { row, key }`. Fired only when `expandedContent` is set and the row passes `canExpand`; does not itself mutate `expandedKeys` — the consumer updates it and passes the new value back in.",
57870
+ "name": "lyra-row-expand-toggle"
57871
+ },
55830
57872
  {
55831
57873
  "description": "A sortable header was activated. `detail: { key }`.",
55832
57874
  "name": "lyra-sort"
@@ -60087,6 +62129,18 @@
60087
62129
  "kind": "class",
60088
62130
  "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.",
60089
62131
  "name": "LyraToolCallChip",
62132
+ "cssProperties": [
62133
+ {
62134
+ "description": "Running-icon animation duration and timing.",
62135
+ "name": "--lyra-tool-call-chip-spin",
62136
+ "default": "1s linear"
62137
+ },
62138
+ {
62139
+ "description": "Pending-icon pulse duration and timing.",
62140
+ "name": "--lyra-transition-ambient",
62141
+ "default": "1.8s ease-in-out"
62142
+ }
62143
+ ],
60090
62144
  "cssParts": [
60091
62145
  {
60092
62146
  "description": "The clickable pill (`<button>`).",
@@ -60499,6 +62553,24 @@
60499
62553
  "module": "src/internal/lyra-element.ts"
60500
62554
  }
60501
62555
  },
62556
+ {
62557
+ "kind": "method",
62558
+ "name": "localizedDuration",
62559
+ "privacy": "private",
62560
+ "return": {
62561
+ "type": {
62562
+ "text": "string"
62563
+ }
62564
+ },
62565
+ "parameters": [
62566
+ {
62567
+ "name": "ms",
62568
+ "type": {
62569
+ "text": "number"
62570
+ }
62571
+ }
62572
+ ]
62573
+ },
60502
62574
  {
60503
62575
  "kind": "method",
60504
62576
  "name": "removeEventListener",
@@ -61673,6 +63745,22 @@
61673
63745
  "kind": "class",
61674
63746
  "description": "`<lyra-tool-result-dialog>` — a full tool-call detail overlay: a status/\nduration header plus a `body` slot where a consumer typically places a\n`<lyra-tabs>` with Input/Preview/JSON/Raw panels. This component knows\nnothing about what's inside that slot — it only supplies the modal chrome\naround it.\n\nThis is its own standalone overlay implementation (`role=\"dialog\"`,\nfocus-trapped, Escape/backdrop-dismissible, scroll-locking) rather than\nnesting a `<lyra-dialog>` in its shadow template — see `<lyra-dialog>`'s\nown header comment for why a new overlay component in this library\nduplicates that pattern locally instead of composing the previous one:\nslot-forwarding into a nested `<lyra-dialog>` would put a forwarding\n`<slot>` where a light-DOM-scanning descendant (e.g. a slotted\n`<lyra-tabs>`'s own `Array.from(this.children)` scan) expects real\nprojected content.\n\n`maximized` toggles between a constrained modal size and a near-fullscreen\nsize within the same open dialog and open/close lifecycle — unlike\n`<lyra-widget>`'s fullscreen mode, there's no non-modal resting state to\nreturn to, so no separate scroll-lock/focus-trap bookkeeping is needed for\nthe transition itself.\n\nStacking: opening more than one of these dialogs at once is supported --\nEscape and the Tab focus trap only ever act on the topmost open instance,\nso instances beneath it stay open and untouched until the one on top closes.",
61675
63747
  "name": "LyraToolResultDialog",
63748
+ "cssProperties": [
63749
+ {
63750
+ "description": "Backdrop color.",
63751
+ "name": "--lyra-tool-result-dialog-overlay-color",
63752
+ "default": "var(--lyra-color-overlay)"
63753
+ },
63754
+ {
63755
+ "description": "Insets for the maximized panel.",
63756
+ "name": "--lyra-tool-result-dialog-maximized-inset"
63757
+ },
63758
+ {
63759
+ "description": "Running-status animation duration and timing.",
63760
+ "name": "--lyra-tool-result-dialog-spin",
63761
+ "default": "1s linear"
63762
+ }
63763
+ ],
61676
63764
  "cssParts": [
61677
63765
  {
61678
63766
  "description": "The full-viewport scrim behind the panel.",
@@ -61734,6 +63822,16 @@
61734
63822
  }
61735
63823
  ],
61736
63824
  "members": [
63825
+ {
63826
+ "kind": "field",
63827
+ "name": "accessibleLabel",
63828
+ "type": {
63829
+ "text": "string | null"
63830
+ },
63831
+ "default": "null",
63832
+ "description": "Accessible name forwarded to the internal element that owns the dialog role. When omitted,\nthe visible tool name labels the dialog.",
63833
+ "attribute": "aria-label"
63834
+ },
61737
63835
  {
61738
63836
  "kind": "field",
61739
63837
  "name": "durationMs",
@@ -62052,6 +64150,24 @@
62052
64150
  "module": "src/internal/lyra-element.ts"
62053
64151
  }
62054
64152
  },
64153
+ {
64154
+ "kind": "method",
64155
+ "name": "localizedDuration",
64156
+ "privacy": "private",
64157
+ "return": {
64158
+ "type": {
64159
+ "text": "string"
64160
+ }
64161
+ },
64162
+ "parameters": [
64163
+ {
64164
+ "name": "ms",
64165
+ "type": {
64166
+ "text": "number"
64167
+ }
64168
+ }
64169
+ ]
64170
+ },
62055
64171
  {
62056
64172
  "kind": "method",
62057
64173
  "name": "removeEventListener",
@@ -62098,6 +64214,15 @@
62098
64214
  }
62099
64215
  ],
62100
64216
  "attributes": [
64217
+ {
64218
+ "name": "aria-label",
64219
+ "type": {
64220
+ "text": "string | null"
64221
+ },
64222
+ "default": "null",
64223
+ "description": "Accessible name forwarded to the internal element that owns the dialog role. When omitted,\nthe visible tool name labels the dialog.",
64224
+ "fieldName": "accessibleLabel"
64225
+ },
62101
64226
  {
62102
64227
  "name": "duration-ms",
62103
64228
  "type": {