@aceshooting/lyra-ui 13.0.0 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/CHANGELOG.md +212 -0
  2. package/custom-elements.json +1 -1
  3. package/dist/cli/migration-contract.json +1 -1
  4. package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts +23 -15
  5. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +9 -6
  6. package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts +12 -3
  7. package/dist/components/agent-tools/agent-trace/agent-trace.class.js +2 -1
  8. package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +4 -2
  9. package/dist/components/agent-tools/approval-queue/approval-queue.class.js +1 -1
  10. package/dist/components/agent-tools/artifact-panel/artifact-panel.styles.js +1 -1
  11. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +1 -1
  12. package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +7 -7
  13. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +5 -5
  14. package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +23 -10
  15. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts +13 -6
  16. package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +3 -3
  17. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +1 -1
  18. package/dist/components/agent-tools/stack-trace/stack-trace-parse.js +3 -3
  19. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +1 -1
  20. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js +1 -1
  21. package/dist/components/agent-tools/task-list/task-list.class.d.ts +1 -2
  22. package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
  23. package/dist/components/agent-tools/terminal/terminal.class.d.ts +10 -1
  24. package/dist/components/agent-tools/terminal/terminal.class.js +3 -3
  25. package/dist/components/agent-tools/terminal/terminal.styles.js +1 -1
  26. package/dist/components/agent-tools/test-results/test-results.class.d.ts +4 -2
  27. package/dist/components/agent-tools/test-results/test-results.class.js +2 -2
  28. package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts +2 -0
  29. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +1 -1
  30. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js +1 -1
  31. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +1 -1
  32. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +3 -2
  33. package/dist/components/agent-tools/tool-param-form/tool-param-form.d.ts +1 -1
  34. package/dist/components/agent-tools/tool-param-form/tool-param-form.js +1 -1
  35. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +1 -1
  36. package/dist/components/agent-tools/tool-result-view/registry.d.ts +2 -1
  37. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts +1 -1
  38. package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +1 -1
  39. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.d.ts +18 -12
  40. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +6 -6
  41. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +9 -3
  42. package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +1 -1
  43. package/dist/components/agent-tools/trace-tree/span.js +1 -1
  44. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +1 -1
  45. package/dist/components/charts/chart/box-plot.class.d.ts +10 -3
  46. package/dist/components/charts/chart/box-plot.class.js +9 -9
  47. package/dist/components/charts/chart/box-plot.styles.js +1 -1
  48. package/dist/components/charts/chart/chart-core-loader.js +1 -1
  49. package/dist/components/charts/chart/chart-feature-loader.js +1 -1
  50. package/dist/components/charts/chart/chart-preload.d.ts +1 -1
  51. package/dist/components/charts/chart/chart-preload.js +1 -1
  52. package/dist/components/charts/chart/chart.class.d.ts +27 -9
  53. package/dist/components/charts/chart/chart.class.js +23 -14
  54. package/dist/components/charts/chart/chart.styles.js +1 -1
  55. package/dist/components/charts/chart/histogram-bin.js +1 -1
  56. package/dist/components/charts/chart/lite-chart.class.js +7 -3
  57. package/dist/components/charts/chart/lite-chart.styles.js +1 -1
  58. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +1 -1
  59. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +2 -2
  60. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +10 -5
  61. package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +1 -1
  62. package/dist/components/conversation/branch-picker/branch-picker.class.d.ts +4 -2
  63. package/dist/components/conversation/branch-picker/branch-picker.class.js +1 -1
  64. package/dist/components/conversation/branch-picker/branch-picker.styles.js +1 -1
  65. package/dist/components/conversation/chat-composer/chat-composer.class.d.ts +6 -2
  66. package/dist/components/conversation/chat-composer/chat-composer.class.js +3 -3
  67. package/dist/components/conversation/chat-composer/chat-composer.styles.js +1 -1
  68. package/dist/components/conversation/chat-message/chat-message.class.js +2 -2
  69. package/dist/components/conversation/chat-message/chat-message.styles.js +1 -1
  70. package/dist/components/conversation/chat-viewport/chat-viewport.styles.js +1 -1
  71. package/dist/components/conversation/code-block/code-block-shared.js +1 -1
  72. package/dist/components/conversation/code-block/code-block.styles.js +1 -1
  73. package/dist/components/conversation/code-block/code-loader.d.ts +1 -1
  74. package/dist/components/conversation/code-block/code-loader.js +1 -1
  75. package/dist/components/conversation/code-block/shiki-types.js +1 -1
  76. package/dist/components/conversation/conversation-item/conversation-item.styles.js +1 -1
  77. package/dist/components/conversation/generation-metrics/generation-metrics.styles.js +1 -1
  78. package/dist/components/conversation/markdown/katex-loader.d.ts +4 -4
  79. package/dist/components/conversation/markdown/katex-loader.js +1 -1
  80. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  81. package/dist/components/conversation/markdown/markdown-loader.d.ts +1 -1
  82. package/dist/components/conversation/markdown/markdown-loader.js +1 -1
  83. package/dist/components/conversation/markdown/markdown-shared.d.ts +6 -1
  84. package/dist/components/conversation/markdown/markdown-shared.js +5 -4
  85. package/dist/components/conversation/message-actions/message-actions.class.d.ts +16 -3
  86. package/dist/components/conversation/message-actions/message-actions.class.js +2 -2
  87. package/dist/components/conversation/message-actions/message-actions.styles.js +1 -1
  88. package/dist/components/conversation/message-actions/toolbar-actions.d.ts +3 -1
  89. package/dist/components/conversation/message-actions/toolbar-actions.js +1 -1
  90. package/dist/components/conversation/message-feedback/message-feedback.class.d.ts +38 -15
  91. package/dist/components/conversation/message-feedback/message-feedback.class.js +7 -3
  92. package/dist/components/conversation/message-feedback/message-feedback.styles.js +1 -1
  93. package/dist/components/conversation/message-parts/message-parts.class.d.ts +7 -4
  94. package/dist/components/conversation/message-parts/message-parts.class.js +2 -2
  95. package/dist/components/conversation/message-parts/message-parts.styles.js +1 -1
  96. package/dist/components/conversation/model-select/model-select.class.d.ts +5 -2
  97. package/dist/components/conversation/model-select/model-select.class.js +5 -2
  98. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.d.ts +3 -5
  99. package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js +2 -1
  100. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +9 -2
  101. package/dist/components/conversation/prompt-input/prompt-input.class.js +3 -3
  102. package/dist/components/conversation/prompt-input/prompt-input.styles.js +1 -1
  103. package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +20 -4
  104. package/dist/components/conversation/prompt-queue/prompt-queue.class.js +1 -1
  105. package/dist/components/conversation/prompt-queue/prompt-queue.styles.js +1 -1
  106. package/dist/components/conversation/push-to-talk/push-to-talk.class.d.ts +17 -8
  107. package/dist/components/conversation/push-to-talk/push-to-talk.class.js +1 -1
  108. package/dist/components/conversation/push-to-talk/push-to-talk.styles.js +1 -1
  109. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts +6 -3
  110. package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
  111. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js +1 -1
  112. package/dist/components/conversation/thread-list/thread-list.class.d.ts +14 -4
  113. package/dist/components/conversation/thread-list/thread-list.class.js +11 -11
  114. package/dist/components/conversation/thread-list/thread-list.styles.js +1 -1
  115. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +1 -1
  116. package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +12 -4
  117. package/dist/components/conversation/voice-picker/voice-picker.class.js +5 -2
  118. package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
  119. package/dist/components/data/calendar/calendar.class.d.ts +12 -4
  120. package/dist/components/data/calendar/calendar.class.js +2 -2
  121. package/dist/components/data/calendar/calendar.styles.js +1 -1
  122. package/dist/components/data/context-meter/context-meter.class.d.ts +3 -1
  123. package/dist/components/data/context-meter/context-meter.class.js +3 -3
  124. package/dist/components/data/data-grid/data-grid.class.d.ts +45 -4
  125. package/dist/components/data/data-grid/data-grid.class.js +25 -11
  126. package/dist/components/data/data-grid/data-grid.styles.js +1 -1
  127. package/dist/components/data/document-library/document-library.class.js +1 -1
  128. package/dist/components/data/env-list/env-list.class.js +1 -1
  129. package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +19 -12
  130. package/dist/components/data/flow-canvas/flow-canvas.class.js +1 -2
  131. package/dist/components/data/flow-controls/flow-controls.styles.js +1 -1
  132. package/dist/components/data/flow-run-status/flow-run-status.class.js +1 -1
  133. package/dist/components/data/gauge/gauge.class.js +1 -1
  134. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +1 -1
  135. package/dist/components/data/heatmap/heatmap.class.js +1 -1
  136. package/dist/components/data/sequence-strip/sequence-strip.class.js +1 -1
  137. package/dist/components/data/stat/stat.class.js +1 -1
  138. package/dist/components/data/table/table.class.d.ts +10 -14
  139. package/dist/components/data/table/table.class.js +4 -3
  140. package/dist/components/data/table/table.styles.js +1 -1
  141. package/dist/components/data/timeline/timeline.class.js +1 -1
  142. package/dist/components/data/tree/tree-item.styles.js +1 -1
  143. package/dist/components/data/word-cloud/word-cloud.class.js +1 -1
  144. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +7 -2
  145. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  146. package/dist/components/forms/code-editor/code-editor.class.d.ts +8 -4
  147. package/dist/components/forms/code-editor/code-editor.class.js +16 -5
  148. package/dist/components/forms/code-editor/code-editor.styles.js +1 -1
  149. package/dist/components/forms/color-picker/color-picker.class.d.ts +1 -1
  150. package/dist/components/forms/color-picker/color-picker.class.js +1 -1
  151. package/dist/components/forms/combobox/combobox.styles.js +1 -1
  152. package/dist/components/forms/date-picker/date-input.class.js +1 -1
  153. package/dist/components/forms/date-picker/date-picker.class.d.ts +9 -2
  154. package/dist/components/forms/date-picker/date-picker.class.js +4 -4
  155. package/dist/components/forms/date-picker/date-picker.styles.js +1 -1
  156. package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
  157. package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
  158. package/dist/components/forms/input/input.class.d.ts +11 -4
  159. package/dist/components/forms/input/input.class.js +7 -1
  160. package/dist/components/forms/input/time-input.class.d.ts +8 -2
  161. package/dist/components/forms/input/time-input.class.js +1 -1
  162. package/dist/components/forms/locale-picker/locale-picker.class.d.ts +17 -3
  163. package/dist/components/forms/locale-picker/locale-picker.class.js +1 -1
  164. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
  165. package/dist/components/forms/rubric-form/rubric-form.class.js +1 -1
  166. package/dist/components/forms/select/select.styles.js +1 -1
  167. package/dist/components/forms/slider/slider.class.js +1 -1
  168. package/dist/components/forms/swatch-picker/swatch-picker.class.js +1 -1
  169. package/dist/components/forms/token-input/token-input.class.js +1 -1
  170. package/dist/components/forms/token-input/token-input.styles.js +1 -1
  171. package/dist/components/layout/app-rail/app-rail.class.d.ts +6 -4
  172. package/dist/components/layout/app-rail/app-rail.class.js +4 -3
  173. package/dist/components/layout/app-rail/app-rail.styles.js +1 -1
  174. package/dist/components/layout/command-palette/command-palette.class.d.ts +2 -2
  175. package/dist/components/layout/command-palette/command-palette.class.js +1 -1
  176. package/dist/components/layout/command-palette/command-palette.styles.js +1 -1
  177. package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +1 -1
  178. package/dist/components/layout/details/details.class.d.ts +13 -12
  179. package/dist/components/layout/details/details.class.js +43 -34
  180. package/dist/components/layout/details/details.styles.js +1 -1
  181. package/dist/components/layout/dock-panel/dock-panel.class.d.ts +4 -3
  182. package/dist/components/layout/dock-panel/dock-panel.class.js +2 -1
  183. package/dist/components/layout/filter-bar/filter-bar.class.js +2 -2
  184. package/dist/components/layout/menu/menu-item.class.js +2 -2
  185. package/dist/components/layout/menu/menu.class.js +1 -1
  186. package/dist/components/layout/multi-split/multi-split.class.d.ts +10 -5
  187. package/dist/components/layout/multi-split/multi-split.class.js +2 -1
  188. package/dist/components/layout/scroller/scroller.class.d.ts +4 -4
  189. package/dist/components/layout/scroller/scroller.styles.js +1 -1
  190. package/dist/components/layout/split-panel/split-panel.class.d.ts +3 -2
  191. package/dist/components/layout/split-panel/split-panel.class.js +3 -2
  192. package/dist/components/layout/tab-group/tab-group.styles.js +1 -1
  193. package/dist/components/layout/virtual-list/virtual-list.class.js +2 -2
  194. package/dist/components/layout/widget/widget.styles.js +1 -1
  195. package/dist/components/media/file-input/file-input.styles.js +1 -1
  196. package/dist/components/media/flag/flag.class.js +1 -1
  197. package/dist/components/media/lightbox/lightbox.styles.js +1 -1
  198. package/dist/components/media/map/map-loader.js +1 -1
  199. package/dist/components/media/map/map.class.d.ts +17 -31
  200. package/dist/components/media/map/map.class.js +1 -1
  201. package/dist/components/media/qr-code/qr-code-loader.js +1 -1
  202. package/dist/components/media/qr-code/qr-code.class.d.ts +5 -2
  203. package/dist/components/media/qr-code/qr-code.class.js +2 -2
  204. package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +2 -2
  205. package/dist/components/media/sequence-playback/sequence-playback.class.js +1 -1
  206. package/dist/components/overlays/alert/alert.styles.js +1 -1
  207. package/dist/components/overlays/callout/callout.styles.js +1 -1
  208. package/dist/components/overlays/dialog/dialog.styles.js +1 -1
  209. package/dist/components/overlays/kbd/kbd.class.js +1 -1
  210. package/dist/components/overlays/overlay/popover.class.js +1 -1
  211. package/dist/components/overlays/overlay/tooltip.class.js +1 -1
  212. package/dist/components/overlays/rating/rating.class.js +1 -1
  213. package/dist/components/overlays/toast/toast-item.class.js +1 -1
  214. package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts +11 -5
  215. package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +3 -3
  216. package/dist/components/retrieval/graph/graph-loader.js +1 -1
  217. package/dist/components/retrieval/graph/graph.class.d.ts +1 -1
  218. package/dist/components/retrieval/graph/graph.class.js +10 -10
  219. package/dist/components/retrieval/graph-legend/graph-legend.class.d.ts +4 -2
  220. package/dist/components/retrieval/graph-legend/graph-legend.class.js +1 -1
  221. package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +14 -6
  222. package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +7 -5
  223. package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +3 -2
  224. package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +4 -3
  225. package/dist/components/retrieval/knowledge-base/knowledge-base.styles.js +1 -1
  226. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +4 -1
  227. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +2 -1
  228. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +1 -1
  229. package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +15 -6
  230. package/dist/components/retrieval/memory-panel/memory-panel.class.js +1 -1
  231. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +1 -1
  232. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +1 -1
  233. package/dist/components/retrieval/node-palette/node-palette.class.d.ts +17 -12
  234. package/dist/components/retrieval/node-palette/node-palette.class.js +2 -2
  235. package/dist/components/retrieval/node-palette/node-palette.styles.js +1 -1
  236. package/dist/components/retrieval/path-strip/path-strip.class.js +1 -1
  237. package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +1 -1
  238. package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +5 -5
  239. package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +1 -1
  240. package/dist/components/retrieval/source-picker/source-picker.class.js +1 -1
  241. package/dist/components/utility/copy-button/copy-button.class.d.ts +2 -1
  242. package/dist/components/utility/copy-button/copy-button.class.js +1 -1
  243. package/dist/components/utility/diff-view/diff-view.class.d.ts +4 -1
  244. package/dist/components/utility/diff-view/diff-view.class.js +1 -1
  245. package/dist/components/utility/export-button/export-button.class.d.ts +2 -2
  246. package/dist/components/utility/export-button/export-button.class.js +1 -1
  247. package/dist/components/utility/export-button/export-button.styles.js +1 -1
  248. package/dist/components/utility/format/format-date.class.js +1 -1
  249. package/dist/components/utility/format/relative-time.class.js +1 -1
  250. package/dist/components/utility/icon/dompurify-loader.js +1 -1
  251. package/dist/components/utility/icon/icon-library.js +1 -1
  252. package/dist/components/utility/intersection-observer/intersection-observer.class.js +1 -1
  253. package/dist/components/utility/json-viewer/json-viewer.class.d.ts +3 -1
  254. package/dist/components/utility/json-viewer/json-viewer.class.js +5 -5
  255. package/dist/components/utility/known-date/known-date.class.js +1 -1
  256. package/dist/components/utility/mention-popover/mention-popover.class.d.ts +29 -44
  257. package/dist/components/utility/mention-popover/mention-popover.class.js +1 -1
  258. package/dist/components/utility/mutation-observer/mutation-observer.class.js +1 -1
  259. package/dist/components/viewers/calendar-viewer/calendar-loader.js +1 -1
  260. package/dist/components/viewers/document-compare/document-compare.class.d.ts +11 -8
  261. package/dist/components/viewers/document-compare/document-compare.class.js +2 -2
  262. package/dist/components/viewers/document-preview/document-preview.class.d.ts +4 -2
  263. package/dist/components/viewers/document-preview/document-preview.class.js +4 -4
  264. package/dist/components/viewers/document-preview/document-preview.styles.js +1 -1
  265. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +2 -0
  266. package/dist/components/viewers/document-viewer/document-viewer.styles.js +1 -1
  267. package/dist/components/viewers/docx-viewer/docx-loader.js +1 -1
  268. package/dist/components/viewers/docx-viewer/docx-viewer.class.js +1 -1
  269. package/dist/components/viewers/ebook-viewer/ebook-loader.d.ts +1 -1
  270. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +2 -2
  271. package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
  272. package/dist/components/viewers/email-viewer/email-loader.js +1 -1
  273. package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +1 -1
  274. package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -2
  275. package/dist/components/viewers/html-viewer/dompurify-loader.js +1 -1
  276. package/dist/components/viewers/notebook-viewer/dompurify-loader.js +1 -1
  277. package/dist/components/viewers/pdf-viewer/pdf-loader.js +1 -1
  278. package/dist/components/viewers/pptx-viewer/pptx-loader.js +1 -1
  279. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-loader.js +1 -1
  280. package/dist/components/viewers/svg-viewer/dompurify-loader.js +1 -1
  281. package/dist/components/viewers/viewer-loading.js +1 -1
  282. package/dist/components/viewers/viewer-search-limits.d.ts +2 -0
  283. package/dist/components/viewers/viewer-search-limits.js +1 -1
  284. package/dist/custom-elements-jsx.d.ts +1 -1
  285. package/dist/events.d.ts +13 -6
  286. package/dist/internal/aria-controls.d.ts +16 -13
  287. package/dist/internal/aria-controls.js +1 -1
  288. package/dist/internal/aria-reflection.js +1 -1
  289. package/dist/internal/catalog-picker.d.ts +2 -2
  290. package/dist/internal/catalog-picker.js +1 -1
  291. package/dist/internal/chart-annotation-registration.d.ts +1 -0
  292. package/dist/internal/chart-annotation-registration.js +1 -0
  293. package/dist/internal/data-descriptors.d.ts +13 -0
  294. package/dist/internal/data-descriptors.js +1 -0
  295. package/dist/internal/default-strings.generated.d.ts +1 -1
  296. package/dist/internal/default-strings.generated.js +2 -2
  297. package/dist/internal/dev-mode-attribute-warning.js +1 -1
  298. package/dist/internal/element-internals.d.ts +4 -3
  299. package/dist/internal/element-internals.js +1 -1
  300. package/dist/internal/highlight-collection.d.ts +2 -0
  301. package/dist/internal/highlight-collection.js +1 -1
  302. package/dist/internal/localization-types.d.ts +1 -1
  303. package/dist/internal/localization.js +2 -2
  304. package/dist/internal/lyra-element.d.ts +10 -1
  305. package/dist/internal/lyra-element.js +2 -1
  306. package/dist/internal/package-metadata.d.ts +1 -1
  307. package/dist/internal/package-metadata.js +1 -1
  308. package/dist/internal/papaparse-loader.js +1 -1
  309. package/dist/internal/pseudo-localization.js +1 -1
  310. package/dist/internal/safe-css.js +1 -1
  311. package/dist/internal/step-value.d.ts +6 -0
  312. package/dist/internal/step-value.js +1 -0
  313. package/dist/internal/text-quote.js +1 -1
  314. package/dist/lyra.d.ts +1 -1
  315. package/dist/svelte.d.ts +1 -1
  316. package/dist/translations/ar.js +2 -2
  317. package/dist/translations/de.js +2 -2
  318. package/dist/translations/es.js +2 -2
  319. package/dist/translations/fa.js +2 -2
  320. package/dist/translations/fr.js +2 -2
  321. package/dist/translations/he.js +2 -2
  322. package/dist/translations/ja.js +2 -2
  323. package/dist/translations/pseudo/ar-XB.js +1 -1
  324. package/dist/translations/pt-BR.js +2 -2
  325. package/dist/translations/ru.js +2 -2
  326. package/dist/translations/zh-CN.js +2 -2
  327. package/dist/vue.d.ts +1 -1
  328. package/llms/components/lr-accordion-item.md +6 -5
  329. package/llms/components/lr-accordion.md +6 -5
  330. package/llms/components/lr-activity-feed.md +6 -5
  331. package/llms/components/lr-agent-run.md +1 -1
  332. package/llms/components/lr-agent-workspace.md +3 -2
  333. package/llms/components/lr-attachment-chip.md +2 -3
  334. package/llms/components/lr-audio-visualizer.md +9 -6
  335. package/llms/components/lr-bar-chart.md +2 -2
  336. package/llms/components/lr-box-plot.md +9 -6
  337. package/llms/components/lr-bubble-chart.md +2 -2
  338. package/llms/components/lr-calendar.md +10 -4
  339. package/llms/components/lr-chart.md +11 -5
  340. package/llms/components/lr-chat-composer.md +2 -1
  341. package/llms/components/lr-chunk-inspector.md +2 -2
  342. package/llms/components/lr-code-block-core.md +4 -4
  343. package/llms/components/lr-code-block.md +10 -14
  344. package/llms/components/lr-code-editor.md +2 -0
  345. package/llms/components/lr-copy-button.md +4 -1
  346. package/llms/components/lr-data-grid.md +11 -2
  347. package/llms/components/lr-date-input.md +4 -0
  348. package/llms/components/lr-date-picker.md +5 -1
  349. package/llms/components/lr-details.md +6 -5
  350. package/llms/components/lr-diff-view.md +6 -0
  351. package/llms/components/lr-document-compare.md +6 -2
  352. package/llms/components/lr-document-preview.md +11 -3
  353. package/llms/components/lr-document-viewer.md +5 -1
  354. package/llms/components/lr-docx-viewer.md +6 -0
  355. package/llms/components/lr-doughnut-chart.md +2 -2
  356. package/llms/components/lr-ebook-viewer.md +8 -3
  357. package/llms/components/lr-email-viewer.md +5 -0
  358. package/llms/components/lr-eval-dataset.md +2 -2
  359. package/llms/components/lr-export-button.md +9 -0
  360. package/llms/components/lr-file-input.md +5 -8
  361. package/llms/components/lr-format-date.md +3 -1
  362. package/llms/components/lr-graph-legend.md +4 -2
  363. package/llms/components/lr-grounding-summary.md +8 -8
  364. package/llms/components/lr-histogram.md +2 -2
  365. package/llms/components/lr-ingestion-queue.md +1 -1
  366. package/llms/components/lr-intersection-observer.md +9 -0
  367. package/llms/components/lr-json-viewer.md +6 -1
  368. package/llms/components/lr-knowledge-base.md +10 -1
  369. package/llms/components/lr-line-chart.md +2 -2
  370. package/llms/components/lr-lite-chart.md +8 -5
  371. package/llms/components/lr-locale-picker.md +6 -0
  372. package/llms/components/lr-map.md +15 -5
  373. package/llms/components/lr-markdown.md +7 -4
  374. package/llms/components/lr-media-card.md +0 -6
  375. package/llms/components/lr-mention-popover.md +12 -10
  376. package/llms/components/lr-message-actions.md +10 -3
  377. package/llms/components/lr-message-feedback.md +20 -7
  378. package/llms/components/lr-message-parts.md +3 -1
  379. package/llms/components/lr-model-select.md +5 -2
  380. package/llms/components/lr-multi-split.md +5 -1
  381. package/llms/components/lr-mutation-observer.md +8 -0
  382. package/llms/components/lr-node-palette.md +5 -2
  383. package/llms/components/lr-pie-chart.md +2 -2
  384. package/llms/components/lr-polar-area-chart.md +2 -2
  385. package/llms/components/lr-prompt-input.md +7 -3
  386. package/llms/components/lr-prompt-queue.md +6 -0
  387. package/llms/components/lr-push-to-talk.md +5 -0
  388. package/llms/components/lr-qr-code.md +6 -0
  389. package/llms/components/lr-radar-chart.md +2 -2
  390. package/llms/components/lr-rating.md +5 -0
  391. package/llms/components/lr-relative-time.md +2 -0
  392. package/llms/components/lr-result-card.md +3 -3
  393. package/llms/components/lr-result-field.md +3 -3
  394. package/llms/components/lr-retrieval-results.md +1 -1
  395. package/llms/components/lr-scatter-chart.md +2 -2
  396. package/llms/components/lr-scroller.md +5 -5
  397. package/llms/components/lr-sequence-playback.md +1 -2
  398. package/llms/components/lr-slider.md +3 -1
  399. package/llms/components/lr-streaming-text.md +2 -3
  400. package/llms/components/lr-terminal.md +14 -5
  401. package/llms/components/lr-thinking-panel.md +3 -1
  402. package/llms/components/lr-thread-list.md +20 -1
  403. package/llms/components/lr-tool-call-chip.md +2 -2
  404. package/llms/components/lr-tool-param-form.md +2 -2
  405. package/llms/components/lr-tool-result-view.md +2 -3
  406. package/llms/components/lr-tool-select-dialog.md +2 -2
  407. package/llms/components/lr-voice-picker.md +7 -2
  408. package/llms/components/lr-widget-renderer.md +12 -13
  409. package/llms/peers.md +5 -5
  410. package/llms/shared.md +74 -63
  411. package/llms-full.txt +629 -247
  412. package/package.json +21 -14
  413. package/vscode-css-data.json +1 -1
  414. package/vscode-html-data.json +1 -1
  415. package/web-types.json +1 -1
  416. package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.d.ts +0 -1
  417. package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.js +0 -1
  418. package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.d.ts +0 -1
  419. package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.js +0 -1
  420. package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.d.ts +0 -1
  421. package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.js +0 -1
@@ -1 +1 @@
1
- import{css}from"lit";import{forcedColorLegendSwatchStyles}from"./chart-forced-colors.js";const styles=css` :host { display: block; position: relative; inline-size: 100%; min-inline-size: 0; min-block-size: var(--lr-chart-height, var(--_lr-chart-height, var(--lr-size-280px))); block-size: auto; container-type: inline-size; contain-intrinsic-inline-size: var(--lr-size-20rem); --_lr-chart-grid-color: var(--lr-color-border); --_lr-chart-tick-color: var(--lr-color-text-quiet); --_lr-chart-legend-color: var(--lr-color-text); --_lr-chart-tooltip-bg: var(--lr-color-surface); --_lr-chart-tooltip-text: var(--lr-color-text); } [part='base'] { position: relative; inline-size: 100%; display: grid; grid-template-columns: minmax(0, 1fr); grid-template-areas: 'plot' 'notice' 'legend' 'table'; gap: var(--lr-space-xs); } :host([layout='scroll']) [part='base'] { overflow-x: auto; overflow-y: hidden; } svg { grid-area: plot; display: block; inline-size: 100%; block-size: var(--lr-chart-height, var(--_lr-chart-height, var(--lr-size-280px))); min-block-size: var(--lr-icon-button-size); overflow: hidden; } [part='grid-line'] { stroke: var(--lr-chart-grid-color, var(--_lr-chart-grid-color)); stroke-width: var(--lr-border-width-thin); } [part='axis-label'] { fill: var(--lr-chart-tick-color, var(--_lr-chart-tick-color)); font-size: var(--lr-font-size-2xs); font-family: var(--lr-font); } [part='axis-title'] { fill: var(--lr-chart-tick-color, var(--_lr-chart-tick-color)); font-size: var(--lr-font-size-xs); font-weight: var(--lr-font-weight-semibold); font-family: var(--lr-font); } [part='bar'] { cursor: pointer; } [data-mark-hit-target] { cursor: pointer; } :where([part='bar']):hover, :where([part='point']):hover, :where(.mark-hit-group):hover [part='bar'], :where(.mark-hit-group):hover [part='point'] { fill: color-mix(in oklab, currentColor, var(--lr-color-mix-partner) var(--lr-color-mix-hover)); } :where([part='bar']):active, :where([part='point']):active, :where(.mark-hit-group):active [part='bar'], :where(.mark-hit-group):active [part='point'] { fill: color-mix(in oklab, currentColor, var(--lr-color-mix-partner) var(--lr-color-mix-active)); } [part='bar'][data-selected], [part='point'][data-selected] { stroke: var(--lr-lite-chart-selected-outline-color, var(--lr-color-brand)); stroke-width: var(--lr-lite-chart-selected-outline-width, var(--lr-size-2px)); } [part='bar']:focus-visible, [part='point']:focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: var(--lr-focus-ring-offset); } :where(.mark-hit-group):has([part='bar']:focus-visible, [part='point']:focus-visible) [data-mark-hit-target] { stroke: var(--lr-focus-ring-color); stroke-width: var(--lr-focus-ring-width); } [part='line'] { fill: none; stroke-width: var(--lr-border-width-medium); } [part='bar'], [part='line'], [part='point'], pattern { forced-color-adjust: none; } [part='point'] { cursor: pointer; } [part='legend'] { grid-area: legend; display: flex; flex-wrap: wrap; gap: var(--lr-space-s); justify-content: center; flex: 0 0 auto; } [part='legend-item'] { display: inline-flex; align-items: center; min-inline-size: 0; max-inline-size: 100%; overflow-wrap: anywhere; gap: var(--lr-size-0-35em); font-size: var(--lr-size-0-8rem); color: var(--lr-chart-legend-color, var(--_lr-chart-legend-color)); } [part='legend-swatch'] { inline-size: var(--lr-size-0-7em); block-size: var(--lr-size-0-7em); border-radius: var(--lr-size-2px); flex: 0 0 auto; } ${forcedColorLegendSwatchStyles} [part='legend-text'] { margin-inline-start: var(--lr-space-2xs); color: var(--lr-chart-tick-color, var(--_lr-chart-tick-color)); } [part='data-table'][data-visually-hidden] { position: absolute; inline-size: var(--lr-size-1px); block-size: var(--lr-size-1px); overflow: clip; clip-path: inset(50%); white-space: nowrap; } [part='data-table'] { grid-area: table; min-inline-size: 0; max-inline-size: 100%; overflow-x: auto; overflow-y: hidden; } [part='data-truncation'] { grid-area: notice; margin: 0; padding: var(--lr-space-xs); color: var(--lr-color-warning); font-size: var(--lr-font-size-sm); overflow-wrap: anywhere; } [part='base']:where([data-legend-position='top']) { grid-template-areas: 'legend' 'plot' 'notice' 'table'; } [part='base']:where([data-legend-position='inline-start']) { grid-template-areas: 'legend plot' 'notice notice' 'table table'; grid-template-columns: minmax(0, min(33cqi, var(--lr-chart-legend-side-max, var(--lr-size-15rem)))) minmax(0, 1fr); } [part='base']:where([data-legend-position='inline-end']) { grid-template-areas: 'plot legend' 'notice notice' 'table table'; grid-template-columns: minmax(0, 1fr) minmax(0, min(33cqi, var(--lr-chart-legend-side-max, var(--lr-size-15rem)))); } @container (max-width: 479px) { [part='base']:where([data-legend-position='inline-start']), [part='base']:where([data-legend-position='inline-end']) { grid-template-areas: 'plot' 'notice' 'legend' 'table'; grid-template-columns: minmax(0, 1fr); } } [part='data-table-toggle'] { align-self: flex-start; font: inherit; font-size: var(--lr-font-size-xs); min-block-size: var(--lr-icon-button-size); padding: var(--lr-size-0-15rem) var(--lr-size-0-5rem); border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-radius); background: var(--lr-color-surface); color: var(--lr-color-text); max-inline-size: 100%; white-space: normal; overflow-wrap: break-word; cursor: pointer; } [part='data-table-toggle']:hover { background: var(--lr-lite-chart-data-table-toggle-hover-bg, var(--lr-color-brand-quiet)); } [part='data-table-toggle']:active { background: var( --lr-lite-chart-data-table-toggle-active-bg, color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active)) ); } [part='data-table-toggle']:focus-visible { outline: var(--lr-focus-ring); outline-offset: var(--lr-focus-ring-offset); } `;export{styles};
1
+ import{css}from"lit";import{forcedColorLegendSwatchStyles}from"./chart-forced-colors.js";const styles=css` :host { display: block; position: relative; inline-size: 100%; min-inline-size: 0; min-block-size: var(--lr-chart-height, var(--_lr-chart-height, var(--lr-size-280px))); block-size: auto; container-type: inline-size; contain-intrinsic-inline-size: var(--lr-size-20rem); --_lr-chart-grid-color: var(--lr-color-border); --_lr-chart-tick-color: var(--lr-color-text-quiet); --_lr-chart-legend-color: var(--lr-color-text); --_lr-chart-tooltip-bg: var(--lr-color-surface); --_lr-chart-tooltip-text: var(--lr-color-text); } [part='base'] { position: relative; inline-size: 100%; display: grid; grid-template-columns: minmax(0, 1fr); grid-template-areas: 'plot' 'notice' 'legend' 'table'; gap: var(--lr-space-xs); } :host([layout='scroll']) [part='base'] { overflow-x: auto; overflow-y: hidden; } svg { grid-area: plot; display: block; inline-size: 100%; block-size: var(--lr-chart-height, var(--_lr-chart-height, var(--lr-size-280px))); min-block-size: var(--lr-icon-button-size); overflow: hidden; } [part='grid-line'] { stroke: var(--lr-chart-grid-color, var(--_lr-chart-grid-color)); stroke-width: var(--lr-border-width-thin); } [part='axis-label'] { fill: var(--lr-chart-tick-color, var(--_lr-chart-tick-color)); font-size: var(--lr-font-size-2xs); font-family: var(--lr-font); } [part='axis-title'] { fill: var(--lr-chart-tick-color, var(--_lr-chart-tick-color)); font-size: var(--lr-font-size-xs); font-weight: var(--lr-font-weight-semibold); font-family: var(--lr-font); } [part='bar'] { cursor: pointer; } [data-mark-hit-target] { cursor: pointer; } :where([part='bar']):hover, :where([part='point']):hover, :where(.mark-hit-group):hover [part='bar'], :where(.mark-hit-group):hover [part='point'] { fill: color-mix(in oklab, currentColor, var(--lr-color-mix-partner) var(--lr-color-mix-hover)); } :where([part='bar']):active, :where([part='point']):active, :where(.mark-hit-group):active [part='bar'], :where(.mark-hit-group):active [part='point'] { fill: color-mix(in oklab, currentColor, var(--lr-color-mix-partner) var(--lr-color-mix-active)); } [part='bar'][data-selected], [part='point'][data-selected] { stroke: var(--lr-lite-chart-selected-outline-color, var(--lr-color-brand)); stroke-width: var(--lr-lite-chart-selected-outline-width, var(--lr-size-2px)); } [part='bar']:focus-visible, [part='point']:focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: var(--lr-focus-ring-offset); } :where(.mark-hit-group):has([part='bar']:focus-visible, [part='point']:focus-visible) [data-mark-hit-target] { stroke: var(--lr-focus-ring-color); stroke-width: var(--lr-focus-ring-width); } [part='line'] { fill: none; stroke-width: var(--lr-border-width-medium); } [part='bar'], [part='line'], [part='point'], pattern { forced-color-adjust: none; } [part='point'] { cursor: pointer; } [part='legend'] { grid-area: legend; display: flex; flex-wrap: wrap; gap: var(--lr-space-s); justify-content: center; flex: 0 0 auto; } [part='legend-item'] { display: inline-flex; align-items: center; min-inline-size: 0; max-inline-size: 100%; overflow-wrap: anywhere; gap: var(--lr-size-0-35em); font-size: var(--lr-size-0-8rem); color: var(--lr-chart-legend-color, var(--_lr-chart-legend-color)); } [part='legend-swatch'] { inline-size: var(--lr-size-0-7em); block-size: var(--lr-size-0-7em); border-radius: var(--lr-size-2px); flex: 0 0 auto; } ${forcedColorLegendSwatchStyles} [part='legend-text'] { margin-inline-start: var(--lr-space-2xs); color: var(--lr-chart-tick-color, var(--_lr-chart-tick-color)); } [part='data-table'][data-visually-hidden] { position: absolute; inline-size: var(--lr-size-1px); block-size: var(--lr-size-1px); overflow: clip; clip-path: inset(50%); white-space: nowrap; } [part='data-table'] { grid-area: table; min-inline-size: 0; max-inline-size: 100%; overflow-x: auto; overflow-y: hidden; } [part='data-truncation'] { grid-area: notice; margin: 0; padding: var(--lr-space-xs); color: var(--lr-color-warning); font-size: var(--lr-font-size-sm); overflow-wrap: anywhere; } [part='base']:where([data-legend-position='top']) { grid-template-areas: 'legend' 'plot' 'notice' 'table'; } [part='base']:where([data-legend-position='inline-start']) { grid-template-areas: 'legend plot' 'notice notice' 'table table'; grid-template-columns: minmax(0, min(33cqi, var(--lr-chart-legend-side-max, var(--lr-size-15rem)))) minmax(0, 1fr); } [part='base']:where([data-legend-position='inline-end']) { grid-template-areas: 'plot legend' 'notice notice' 'table table'; grid-template-columns: minmax(0, 1fr) minmax(0, min(33cqi, var(--lr-chart-legend-side-max, var(--lr-size-15rem)))); } @container (max-width: 479px) { [part='base']:where([data-legend-position='inline-start']), [part='base']:where([data-legend-position='inline-end']) { grid-template-areas: 'plot' 'notice' 'legend' 'table'; grid-template-columns: minmax(0, 1fr); } } [part='data-table-toggle'] { align-self: flex-start; font: inherit; font-size: var(--lr-font-size-xs); min-inline-size: var(--lr-icon-button-size); min-block-size: var(--lr-icon-button-size); padding: var(--lr-size-0-15rem) var(--lr-size-0-5rem); border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-radius); background: var(--lr-color-surface); color: var(--lr-color-text); max-inline-size: 100%; white-space: normal; overflow-wrap: break-word; cursor: pointer; } [part='data-table-toggle']:hover { background: var(--lr-lite-chart-data-table-toggle-hover-bg, var(--lr-color-brand-quiet)); } [part='data-table-toggle']:active { background: var( --lr-lite-chart-data-table-toggle-active-bg, color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active)) ); } [part='data-table-toggle']:focus-visible { outline: var(--lr-focus-ring); outline-offset: var(--lr-focus-ring-offset); } `;export{styles};
@@ -111,7 +111,7 @@ showComposer:boolean;
111
111
  /** Controlled value of the built-in composer. */
112
112
  composerValue:string;
113
113
  /** Status of the built-in composer. */
114
- composerStatus:ChatComposerStatus;
114
+ private composerStatusValue;get composerStatus():ChatComposerStatus;set composerStatus(value:ChatComposerStatus);
115
115
  /** Placeholder for the built-in composer. */
116
116
  composerPlaceholder:string;
117
117
  /** Minimum and maximum rows for the built-in composer. */
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteCount}from"../../../internal/numbers.js";import{styles}from"./agent-workspace.styles.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LYRA_DEFAULT_agentWorkspaceContext,LYRA_DEFAULT_agentWorkspaceConversation,LYRA_DEFAULT_agentWorkspaceDetails,LYRA_DEFAULT_agentWorkspaceEmpty,LYRA_DEFAULT_agentWorkspaceGrounding,LYRA_DEFAULT_agentWorkspaceLabel,LYRA_DEFAULT_agentWorkspaceRetrieval,LYRA_DEFAULT_agentWorkspaceRun,LYRA_DEFAULT_agentWorkspaceTools,LYRA_DEFAULT_composerPlaceholder}from"../../../internal/default-strings.generated.js";const MAX_RENDERED_MESSAGES=500;function firstByWorkspaceIdentity(items,identity){const result=[],seen=new Set;for(const item of items){let id;try{id=identity(item)}catch{continue}typeof id!="string"||id.trim()===""||seen.has(id)||(seen.add(id),result.push(item))}return result}class LyraAgentWorkspace extends LyraElement{constructor(){super(...arguments),this.label="",this.accessibleLabel=null,this.messages=[],this.run=null,this.metrics=[],this.tools=[],this.retrievalChunks=[],this.selectedRetrievalChunkIds=[],this.retrievalLoading=!1,this.retrievalHasMore=!1,this.retrievalErrorText="",this.groundingAssessment=null,this.citations=[],this.contextSegments=[],this.contextTotal=0,this.follow=!0,this.unreadStartIndex=null,this.showDetails=!0,this.showComposer=!0,this.composerValue="",this.composerStatus="idle",this.composerPlaceholder="",this.composerMinRows=1,this.composerMaxRows=8,this.onRetrievalSelect=event=>{event.stopPropagation(),this.emit("lr-retrieval-select",event.detail)},this.onMessageRetry=event=>{event.stopPropagation(),event.detail.messageId&&this.emit("lr-message-retry",{messageId:event.detail.messageId})},this.onNamedSlotChange=()=>{this.requestUpdate()}}static{this.defaultStrings={...super.defaultStrings,agentWorkspaceContext:LYRA_DEFAULT_agentWorkspaceContext,agentWorkspaceConversation:LYRA_DEFAULT_agentWorkspaceConversation,agentWorkspaceDetails:LYRA_DEFAULT_agentWorkspaceDetails,agentWorkspaceEmpty:LYRA_DEFAULT_agentWorkspaceEmpty,agentWorkspaceGrounding:LYRA_DEFAULT_agentWorkspaceGrounding,agentWorkspaceLabel:LYRA_DEFAULT_agentWorkspaceLabel,agentWorkspaceRetrieval:LYRA_DEFAULT_agentWorkspaceRetrieval,agentWorkspaceRun:LYRA_DEFAULT_agentWorkspaceRun,agentWorkspaceTools:LYRA_DEFAULT_agentWorkspaceTools,composerPlaceholder:LYRA_DEFAULT_composerPlaceholder}}static{this.immutableEventDetails=Object.freeze(["lr-retrieval-select"])}static{this.ownedCollectionProperties=Object.freeze(["messages","run","metrics","tools","retrievalChunks","selectedRetrievalChunkIds","groundingAssessment","citations","contextSegments"])}static{this.styles=[LyraElement.styles,styles]}hasSlotted(name){return Array.from(this.children).some(element=>element.getAttribute("slot")===name)}get safeContextTotal(){return finiteCount(this.contextTotal)}get effectiveTools(){return firstByWorkspaceIdentity(this.tools,entry=>{const id=entry.id;if(typeof id!="string"||id.trim()==="")return;const sourceKey=entry.sourceKey;return`${typeof sourceKey=="string"?sourceKey:""}\0${id}`})}get effectiveRetrievalChunks(){return firstByWorkspaceIdentity(this.retrievalChunks,chunk=>chunk.id)}get effectiveCitations(){return firstByWorkspaceIdentity(this.citations,citation=>citation.id)}get effectiveContextSegments(){return firstByWorkspaceIdentity(this.contextSegments,segment=>segment.id)}get effectiveMessages(){const source=this.messages,seen=new Set,messages=[];for(let sourceIndex=0;sourceIndex<source.length;sourceIndex++){const message=source[sourceIndex];if(!message)continue;const id=message?.id;typeof id!="string"||id.trim()===""||seen.has(id)||(seen.add(id),messages.push({message,sourceIndex}))}return messages}get safeUnreadStartIndex(){if(this.unreadStartIndex==null)return null;const normalized=finiteCount(this.unreadStartIndex);if(this.hasSlotted("messages"))return normalized;const messages=this.effectiveMessages,effectiveIndex=messages.filter(({sourceIndex})=>sourceIndex<normalized).length;return Math.max(0,effectiveIndex-this.messageWindowOffsetFor(messages))}get safeComposerMinRows(){return Math.max(1,finiteCount(this.composerMinRows,1))}get safeComposerMaxRows(){return Math.max(this.safeComposerMinRows,finiteCount(this.composerMaxRows,8))}stopOwnedEvent(event){event.stopPropagation()}renderMessage(message){return html`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteCount}from"../../../internal/numbers.js";import{normalizeChatComposerStatus}from"../chat-composer/chat-composer.class.js";import{styles}from"./agent-workspace.styles.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LYRA_DEFAULT_agentWorkspaceContext,LYRA_DEFAULT_agentWorkspaceConversation,LYRA_DEFAULT_agentWorkspaceDetails,LYRA_DEFAULT_agentWorkspaceEmpty,LYRA_DEFAULT_agentWorkspaceGrounding,LYRA_DEFAULT_agentWorkspaceLabel,LYRA_DEFAULT_agentWorkspaceRetrieval,LYRA_DEFAULT_agentWorkspaceRun,LYRA_DEFAULT_agentWorkspaceTools,LYRA_DEFAULT_composerPlaceholder,LYRA_DEFAULT_fieldRequired}from"../../../internal/default-strings.generated.js";const MAX_RENDERED_MESSAGES=500;function firstByWorkspaceIdentity(items,identity){const result=[],seen=new Set;for(const item of items){let id;try{id=identity(item)}catch{continue}typeof id!="string"||id.trim()===""||seen.has(id)||(seen.add(id),result.push(item))}return result}class LyraAgentWorkspace extends LyraElement{constructor(){super(...arguments),this.label="",this.accessibleLabel=null,this.messages=[],this.run=null,this.metrics=[],this.tools=[],this.retrievalChunks=[],this.selectedRetrievalChunkIds=[],this.retrievalLoading=!1,this.retrievalHasMore=!1,this.retrievalErrorText="",this.groundingAssessment=null,this.citations=[],this.contextSegments=[],this.contextTotal=0,this.follow=!0,this.unreadStartIndex=null,this.showDetails=!0,this.showComposer=!0,this.composerValue="",this.composerStatusValue="idle",this.composerPlaceholder="",this.composerMinRows=1,this.composerMaxRows=8,this.onRetrievalSelect=event=>{event.stopPropagation(),this.emit("lr-retrieval-select",event.detail)},this.onMessageRetry=event=>{event.stopPropagation(),event.detail.messageId&&this.emit("lr-message-retry",{messageId:event.detail.messageId})},this.onNamedSlotChange=()=>{this.requestUpdate()}}static{this.defaultStrings={...super.defaultStrings,agentWorkspaceContext:LYRA_DEFAULT_agentWorkspaceContext,agentWorkspaceConversation:LYRA_DEFAULT_agentWorkspaceConversation,agentWorkspaceDetails:LYRA_DEFAULT_agentWorkspaceDetails,agentWorkspaceEmpty:LYRA_DEFAULT_agentWorkspaceEmpty,agentWorkspaceGrounding:LYRA_DEFAULT_agentWorkspaceGrounding,agentWorkspaceLabel:LYRA_DEFAULT_agentWorkspaceLabel,agentWorkspaceRetrieval:LYRA_DEFAULT_agentWorkspaceRetrieval,agentWorkspaceRun:LYRA_DEFAULT_agentWorkspaceRun,agentWorkspaceTools:LYRA_DEFAULT_agentWorkspaceTools,composerPlaceholder:LYRA_DEFAULT_composerPlaceholder,fieldRequired:LYRA_DEFAULT_fieldRequired}}static{this.immutableEventDetails=Object.freeze(["lr-retrieval-select"])}static{this.ownedCollectionProperties=Object.freeze(["messages","run","metrics","tools","retrievalChunks","selectedRetrievalChunkIds","groundingAssessment","citations","contextSegments"])}static{this.styles=[LyraElement.styles,styles]}get composerStatus(){return this.composerStatusValue}set composerStatus(value){const previous=this.composerStatusValue;this.composerStatusValue=normalizeChatComposerStatus(value),this.requestUpdate("composerStatus",previous)}hasSlotted(name){return Array.from(this.children).some(element=>element.getAttribute("slot")===name)}get safeContextTotal(){return finiteCount(this.contextTotal)}get effectiveTools(){return firstByWorkspaceIdentity(this.tools,entry=>{const id=entry.id;if(typeof id!="string"||id.trim()==="")return;const sourceKey=entry.sourceKey;return`${typeof sourceKey=="string"?sourceKey:""}\0${id}`})}get effectiveRetrievalChunks(){return firstByWorkspaceIdentity(this.retrievalChunks,chunk=>chunk.id)}get effectiveCitations(){return firstByWorkspaceIdentity(this.citations,citation=>citation.id)}get effectiveContextSegments(){return firstByWorkspaceIdentity(this.contextSegments,segment=>segment.id)}get effectiveMessages(){const source=this.messages,seen=new Set,messages=[];for(let sourceIndex=0;sourceIndex<source.length;sourceIndex++){const message=source[sourceIndex];if(!message)continue;const id=message?.id;typeof id!="string"||id.trim()===""||seen.has(id)||(seen.add(id),messages.push({message,sourceIndex}))}return messages}get safeUnreadStartIndex(){if(this.unreadStartIndex==null)return null;const normalized=finiteCount(this.unreadStartIndex);if(this.hasSlotted("messages"))return normalized;const messages=this.effectiveMessages,effectiveIndex=messages.filter(({sourceIndex})=>sourceIndex<normalized).length;return Math.max(0,effectiveIndex-this.messageWindowOffsetFor(messages))}get safeComposerMinRows(){return Math.max(1,finiteCount(this.composerMinRows,1))}get safeComposerMaxRows(){return Math.max(this.safeComposerMinRows,finiteCount(this.composerMaxRows,8))}stopOwnedEvent(event){event.stopPropagation()}renderMessage(message){return html`
2
2
  <lr-chat-message
3
3
  part="messages message"
4
4
  .messageRole=${message.role}
@@ -95,4 +95,4 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
95
95
  </slot>
96
96
  </div>
97
97
  </div>
98
- `}}__decorate([property()],LyraAgentWorkspace.prototype,"label",void 0),__decorate([property({attribute:"aria-label"})],LyraAgentWorkspace.prototype,"accessibleLabel",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"messages",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"run",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"metrics",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"tools",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"retrievalChunks",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"selectedRetrievalChunkIds",void 0),__decorate([property({type:Boolean,attribute:"retrieval-loading"})],LyraAgentWorkspace.prototype,"retrievalLoading",void 0),__decorate([property({type:Boolean,attribute:"retrieval-has-more"})],LyraAgentWorkspace.prototype,"retrievalHasMore",void 0),__decorate([property({attribute:"retrieval-error-text"})],LyraAgentWorkspace.prototype,"retrievalErrorText",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"groundingAssessment",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"citations",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"contextSegments",void 0),__decorate([property({type:Number,attribute:"context-total"})],LyraAgentWorkspace.prototype,"contextTotal",void 0),__decorate([property({type:Boolean,reflect:!0,converter:trueDefaultBooleanConverter})],LyraAgentWorkspace.prototype,"follow",void 0),__decorate([property({type:Number,attribute:"unread-start-index"})],LyraAgentWorkspace.prototype,"unreadStartIndex",void 0),__decorate([property({type:Boolean,attribute:"show-details",reflect:!0,converter:trueDefaultBooleanConverter})],LyraAgentWorkspace.prototype,"showDetails",void 0),__decorate([property({type:Boolean,attribute:"show-composer",reflect:!0,converter:trueDefaultBooleanConverter})],LyraAgentWorkspace.prototype,"showComposer",void 0),__decorate([property({attribute:"composer-value"})],LyraAgentWorkspace.prototype,"composerValue",void 0),__decorate([property({attribute:"composer-status"})],LyraAgentWorkspace.prototype,"composerStatus",void 0),__decorate([property({attribute:"composer-placeholder"})],LyraAgentWorkspace.prototype,"composerPlaceholder",void 0),__decorate([property({type:Number,attribute:"composer-min-rows"})],LyraAgentWorkspace.prototype,"composerMinRows",void 0),__decorate([property({type:Number,attribute:"composer-max-rows"})],LyraAgentWorkspace.prototype,"composerMaxRows",void 0);export{LyraAgentWorkspace};
98
+ `}}__decorate([property()],LyraAgentWorkspace.prototype,"label",void 0),__decorate([property({attribute:"aria-label"})],LyraAgentWorkspace.prototype,"accessibleLabel",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"messages",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"run",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"metrics",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"tools",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"retrievalChunks",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"selectedRetrievalChunkIds",void 0),__decorate([property({type:Boolean,attribute:"retrieval-loading"})],LyraAgentWorkspace.prototype,"retrievalLoading",void 0),__decorate([property({type:Boolean,attribute:"retrieval-has-more"})],LyraAgentWorkspace.prototype,"retrievalHasMore",void 0),__decorate([property({attribute:"retrieval-error-text"})],LyraAgentWorkspace.prototype,"retrievalErrorText",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"groundingAssessment",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"citations",void 0),__decorate([property({attribute:!1})],LyraAgentWorkspace.prototype,"contextSegments",void 0),__decorate([property({type:Number,attribute:"context-total"})],LyraAgentWorkspace.prototype,"contextTotal",void 0),__decorate([property({type:Boolean,reflect:!0,converter:trueDefaultBooleanConverter})],LyraAgentWorkspace.prototype,"follow",void 0),__decorate([property({type:Number,attribute:"unread-start-index"})],LyraAgentWorkspace.prototype,"unreadStartIndex",void 0),__decorate([property({type:Boolean,attribute:"show-details",reflect:!0,converter:trueDefaultBooleanConverter})],LyraAgentWorkspace.prototype,"showDetails",void 0),__decorate([property({type:Boolean,attribute:"show-composer",reflect:!0,converter:trueDefaultBooleanConverter})],LyraAgentWorkspace.prototype,"showComposer",void 0),__decorate([property({attribute:"composer-value"})],LyraAgentWorkspace.prototype,"composerValue",void 0),__decorate([property({attribute:"composer-status"})],LyraAgentWorkspace.prototype,"composerStatus",null),__decorate([property({attribute:"composer-placeholder"})],LyraAgentWorkspace.prototype,"composerPlaceholder",void 0),__decorate([property({type:Number,attribute:"composer-min-rows"})],LyraAgentWorkspace.prototype,"composerMinRows",void 0),__decorate([property({type:Number,attribute:"composer-max-rows"})],LyraAgentWorkspace.prototype,"composerMaxRows",void 0);export{LyraAgentWorkspace};
@@ -33,7 +33,7 @@ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from
33
33
  * @status stable
34
34
  * @since 4.0.0
35
35
  */
36
- export declare class LyraAudioVisualizer extends LyraElement{static styles:import("lit").CSSResultGroup[];stream:MediaStream|null;
36
+ export declare class LyraAudioVisualizer extends LyraElement{static styles:import("lit").CSSResultGroup[];static get observedAttributes():string[];stream:MediaStream|null;
37
37
  /** Externally-computed amplitude, `[0, 1]`, for a host that already derives its own level
38
38
  * (e.g. `lr-push-to-talk`'s `lr-level`). `null` (the default) means "no external signal" --
39
39
  * see `effectiveLevel` for how a non-null value is clamped/NaN-guarded before it feeds `draw()`. */
@@ -43,7 +43,7 @@ get mode():AudioVisualizerMode;set mode(next:AudioVisualizerMode);barCount:numbe
43
43
  /** Amplitude multiplier applied in `draw()`. NaN/non-finite falls back to `1` via `effectiveGain`. */
44
44
  gain:number;
45
45
  /** Accessible-name override. Unset (the default) auto-generates "Voice activity: {state}". */
46
- label:string;private canvas?;private resizeObserver?;private dprQuery?;private dprChangeListener?;private motionQuery?;private motionChangeListener?;private drawFrameRequest?;private lastAmbientDrawMs;private authorSuppliedRole;private generatedAriaLabel?;
46
+ label:string;private canvas?;private resizeObserver?;private dprQuery?;private dprChangeListener?;private motionQuery?;private motionChangeListener?;private drawFrameRequest?;private lastAmbientDrawMs;private generatedAriaLabel?;
47
47
  /** Host size cached from the `ResizeObserver` so `draw()` never forces a per-frame layout read. */
48
48
  private hostSize?;
49
49
  /** Token colors resolved once per theme change so `draw()` never calls `getComputedStyle` per frame. */
@@ -56,17 +56,22 @@ private ambientDurationMs?;private audioCtx?;private analyser?;private sourceNod
56
56
  * nobody can see -- mirrors `<lr-chart>`'s own `visible`-gated `draw()`. Not `@state()`: nothing
57
57
  * in `render()` depends on it, so making it reactive would only schedule pointless extra update
58
58
  * passes. */
59
- private visible;private intersectionObserver?;private get effectiveBarCount();
59
+ private visible;
60
+ /** An owner-realm observer starts unknown so no canvas work can race ahead of its first entry. */
61
+ private visibilityKnown;private intersectionObserver?;private intersectionGeneration;private get effectiveBarCount();
60
62
  /** `level` normalized to `[0, 1]`, or `null` when no external signal is set. A non-null-but-NaN
61
63
  * `level` (e.g. a bad attribute) still counts as "level-driven" (see `hasLiveSignal`) but
62
64
  * clamps to `0` here rather than flowing NaN into the canvas draw. */
63
- private get effectiveLevel();private get effectiveGain();constructor();connectedCallback():void;disconnectedCallback():void;private watchDpr;private clearDprWatcher;private clearMotionWatcher;
65
+ private get effectiveLevel();private get effectiveGain();constructor();connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;
66
+ /** Binds visibility in the current document. If the platform cannot safely provide an observer,
67
+ * retain the established eager draw behavior rather than making the visualizer permanently blank. */
68
+ private bindVisibilityObserver;private clearVisibilityObserver;private restoreImmediateVisibility;private watchDpr;private clearDprWatcher;private clearMotionWatcher;
64
69
  /** Redraws canvas content after an upstream token or theme change. */
65
70
  refreshTheme():void;private get hasUsableAudioStream();
66
71
  /** Lazily creates (or tears down) the `AudioContext`/`AnalyserNode` pair to match `stream`.
67
72
  * Clearing `stream` suspends the context (cheap to resume if reassigned soon); `disconnectedCallback`
68
73
  * is what actually closes it. */
69
- private syncAnalyser;private onAudioCtxStateChange;private closeAudioContext;private get hasLiveSignal();private stateLabel;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;
74
+ private syncAnalyser;private onAudioCtxStateChange;private closeAudioContext;private get hasLiveSignal();private stateLabel;protected willUpdate(changed:PropertyValues):void;attributeChangedCallback(name:string,oldValue:string|null,value:string|null):void;private syncDefaultRole;protected updated(changed:PropertyValues):void;
70
75
  /** Whether the next frame's content differs from the current one with no external change — i.e.
71
76
  * the drawing is a function of time: live analyser data, or a non-reduced ambient pulse/sweep.
72
77
  * A constant `level`, the flat idle pattern, and every reduced-motion ambient pattern are all
@@ -1 +1 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html}from"lit";import{property,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteInteger,finiteNumber,finiteRange}from"../../../internal/numbers.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{ThemeWatcher}from"../../../internal/theme-watcher.js";import{resolveCanvasColor}from"../../../internal/canvas-color.js";import{literalSetConverter}from"../../../internal/converters.js";import{styles}from"./audio-visualizer.styles.js";import{LYRA_DEFAULT_audioVisualizerIdle,LYRA_DEFAULT_audioVisualizerLabel,LYRA_DEFAULT_audioVisualizerListening,LYRA_DEFAULT_audioVisualizerSpeaking,LYRA_DEFAULT_audioVisualizerThinking}from"../../../internal/default-strings.generated.js";const AUDIO_VISUALIZER_MODE=literalSetConverter(["bars","waveform"],"bars"),AUDIO_VISUALIZER_STATE=literalSetConverter(["idle","listening","thinking","speaking"],"idle"),WAVEFORM_SAMPLES=64,AMBIENT_REDUCED_MOTION_INTERVAL_MS=500,DEFAULT_AMBIENT_DURATION_MS=1800;function parseAmbientDuration(value){const match=/^\+?(?:(?:\d+\.?\d*)|(?:\.\d+))(?:e[+-]?\d+)?(ms|s)$/i.exec(value.trim());if(!match)return;const unit=match[1].toLowerCase(),numeric=Number(value.trim().slice(0,-unit.length)),milliseconds=finiteNumber(numeric*(unit==="s"?1e3:1),0);return milliseconds>0?milliseconds:void 0}class LyraAudioVisualizer extends LyraElement{static{this.defaultStrings={...super.defaultStrings,audioVisualizerIdle:LYRA_DEFAULT_audioVisualizerIdle,audioVisualizerLabel:LYRA_DEFAULT_audioVisualizerLabel,audioVisualizerListening:LYRA_DEFAULT_audioVisualizerListening,audioVisualizerSpeaking:LYRA_DEFAULT_audioVisualizerSpeaking,audioVisualizerThinking:LYRA_DEFAULT_audioVisualizerThinking}}static{this.styles=[LyraElement.styles,styles]}get state(){return this._state}set state(next){const normalized=AUDIO_VISUALIZER_STATE.normalize(next),old=this._state;old!==normalized&&(this._state=normalized,this.requestUpdate("state",old))}get mode(){return this._mode}set mode(next){const normalized=AUDIO_VISUALIZER_MODE.normalize(next),old=this._mode;old!==normalized&&(this._mode=normalized,this.requestUpdate("mode",old))}get effectiveBarCount(){return finiteInteger(this.barCount,5,1,64)}get effectiveLevel(){return this.level==null?null:finiteRange(this.level,0,0,1)}get effectiveGain(){return finiteNumber(this.gain,1)}constructor(){super(),this.stream=null,this.level=null,this._state="idle",this._mode="bars",this.barCount=5,this.gain=1,this.label="",this.lastAmbientDrawMs=0,this.authorSuppliedRole=!1,this.visible=!0,this.onAudioCtxStateChange=()=>{this.scheduleDraw()},this.scheduleDraw=()=>{if(!this.visible||this.drawFrameRequest)return;const owner=this.ownerDocument.defaultView;if(!owner||!this.isConnected)return;const request={owner,handle:0};request.handle=owner.requestAnimationFrame(nowMs=>this.drawFrame(request,nowMs)),this.drawFrameRequest=request},this.requestUpdate("state",void 0),this.requestUpdate("mode",void 0),new ThemeWatcher(this,()=>this.refreshTheme())}connectedCallback(){super.connectedCallback();const owner=this.ownerDocument.defaultView;if(!owner)return;const ResizeObserverCtor=owner.ResizeObserver;if(ResizeObserverCtor){let observer;observer=new ResizeObserverCtor(entries=>{if(!this.isConnected||this.ownerDocument.defaultView!==owner||this.resizeObserver!==observer)return;const rect=entries[entries.length-1]?.contentRect;rect&&(this.hostSize={width:rect.width,height:rect.height}),this.scheduleDraw()}),this.resizeObserver=observer,observer.observe(this)}if(this.watchDpr(),typeof owner.matchMedia=="function"){const query2=owner.matchMedia("(prefers-reduced-motion: reduce)"),listener=()=>{!this.isConnected||this.ownerDocument.defaultView!==owner||this.motionQuery!==query2||this.scheduleDraw()};this.motionQuery=query2,this.motionChangeListener=listener,query2.addEventListener("change",listener)}this.resolvedColors=void 0,this.ambientDurationMs=void 0,this.syncAnalyser(),this.visible=!0;const IntersectionObserverCtor=owner.IntersectionObserver;if(IntersectionObserverCtor){let observer;observer=new IntersectionObserverCtor(entries=>{if(!this.isConnected||this.ownerDocument.defaultView!==owner||this.intersectionObserver!==observer)return;const wasVisible=this.visible;this.visible=entries[0]?.isIntersecting??!0,this.visible&&!wasVisible?this.scheduleDraw():this.visible||this.cancelDrawFrame()}),this.intersectionObserver=observer,observer.observe(this)}this.lastAmbientDrawMs=0,this.scheduleDraw()}disconnectedCallback(){super.disconnectedCallback(),this.resizeObserver?.disconnect(),this.resizeObserver=void 0,this.hostSize=void 0,this.clearDprWatcher(),this.clearMotionWatcher(),this.intersectionObserver?.disconnect(),this.intersectionObserver=void 0,this.cancelDrawFrame(),this.closeAudioContext()}watchDpr(){this.clearDprWatcher();const owner=this.ownerDocument.defaultView;if(!owner||typeof owner.matchMedia!="function")return;const query2=owner.matchMedia(`(resolution: ${owner.devicePixelRatio}dppx)`),listener=()=>{!this.isConnected||this.ownerDocument.defaultView!==owner||this.dprQuery!==query2||(this.watchDpr(),this.scheduleDraw())};this.dprQuery=query2,this.dprChangeListener=listener,query2.addEventListener("change",listener)}clearDprWatcher(){this.dprQuery&&this.dprChangeListener&&this.dprQuery.removeEventListener("change",this.dprChangeListener),this.dprQuery=void 0,this.dprChangeListener=void 0}clearMotionWatcher(){this.motionQuery&&this.motionChangeListener&&this.motionQuery.removeEventListener("change",this.motionChangeListener),this.motionQuery=void 0,this.motionChangeListener=void 0}refreshTheme(){this.resolvedColors=void 0,this.ambientDurationMs=void 0,this.scheduleDraw()}get hasUsableAudioStream(){if(!this.stream||typeof this.stream.getAudioTracks!="function")return!1;try{return this.stream.getAudioTracks().some(track=>track.readyState!=="ended")}catch{return!1}}syncAnalyser(){if(!this.isConnected||!this.hasUsableAudioStream){this.sourceNode?.disconnect(),this.sourceNode=void 0,this.analyser=void 0,this.timeDomainData=void 0,this.audioCtx&&this.audioCtx.suspend().catch(()=>{});return}const stream=this.stream;if(!stream)return;const owner=this.ownerDocument.defaultView;if(!owner)return;let context=this.audioCtx,source;try{if(!context){const AudioCtxCtor=owner.AudioContext??owner.webkitAudioContext;if(!AudioCtxCtor)return;context=new AudioCtxCtor,context.addEventListener("statechange",this.onAudioCtxStateChange)}source=context.createMediaStreamSource(stream);const analyser=context.createAnalyser();analyser.fftSize=this.mode==="waveform"?2048:256,source.connect(analyser);const data=new owner.Uint8Array(analyser.frequencyBinCount);this.sourceNode?.disconnect(),this.audioCtx=context,this.sourceNode=source,this.analyser=analyser,this.timeDomainData=data,context.resume().catch(()=>{})}catch{source?.disconnect(),context&&(context.removeEventListener("statechange",this.onAudioCtxStateChange),context.close().catch(()=>{})),this.audioCtx=void 0,this.sourceNode=void 0,this.analyser=void 0,this.timeDomainData=void 0}}closeAudioContext(){this.sourceNode?.disconnect(),this.sourceNode=void 0,this.analyser=void 0,this.timeDomainData=void 0,this.audioCtx&&(this.audioCtx.removeEventListener("statechange",this.onAudioCtxStateChange),this.audioCtx.close().catch(()=>{}),this.audioCtx=void 0)}get hasLiveSignal(){return!!this.analyser&&this.audioCtx?.state==="running"||this.level!=null}stateLabel(){switch(this.state){case"listening":return this.localize("audioVisualizerListening");case"thinking":return this.localize("audioVisualizerThinking");case"speaking":return this.localize("audioVisualizerSpeaking");default:return this.localize("audioVisualizerIdle")}}willUpdate(changed){super.willUpdate(changed),(changed.has("stream")||changed.has("mode")&&this.stream)&&this.syncAnalyser();const currentRole=this.getAttribute("role");this.authorSuppliedRole=currentRole!==null&&currentRole!=="img",this.authorSuppliedRole||this.setAttribute("role","img");const currentAriaLabel=this.getAttribute("aria-label");if(currentAriaLabel!==null&&currentAriaLabel!==this.generatedAriaLabel)this.generatedAriaLabel=void 0;else{const generated=this.label||this.localize("audioVisualizerLabel",void 0,{state:this.stateLabel()});currentAriaLabel!==generated&&this.setAttribute("aria-label",generated),this.generatedAriaLabel=generated}}updated(changed){super.updated(changed),["state","mode","barCount","gain","level","stream"].some(key=>changed.has(key))&&this.scheduleDraw()}get isTimeDriven(){return this.analyser&&this.audioCtx?.state==="running"?!0:this.level!=null||prefersReducedMotion(this.ownerDocument.defaultView)?!1:this.state!=="idle"}drawFrame(request,nowMs){if(this.drawFrameRequest!==request||(this.drawFrameRequest=void 0,!this.isConnected||this.ownerDocument.defaultView!==request.owner)||!this.visible)return;if(prefersReducedMotion(request.owner)&&!this.hasLiveSignal){if(nowMs-this.lastAmbientDrawMs<AMBIENT_REDUCED_MOTION_INTERVAL_MS){this.scheduleDraw();return}this.lastAmbientDrawMs=nowMs}this.draw(nowMs),this.isTimeDriven&&this.scheduleDraw()}cancelDrawFrame(){const request=this.drawFrameRequest;request&&request.owner.cancelAnimationFrame(request.handle),this.drawFrameRequest=void 0}barsFromTimeDomain(data,barCount){const segmentSize=Math.max(1,Math.floor(data.length/barCount)),bars=[];for(let i=0;i<barCount;i++){let sumSquares=0;const start=i*segmentSize,end=Math.min(data.length,start+segmentSize);for(let j=start;j<end;j++){const norm=(data[j]-128)/128;sumSquares+=norm*norm}bars.push(Math.sqrt(sumSquares/Math.max(1,end-start)))}return bars}ambientAmplitudes(nowMs,reduced){const n=this.mode==="waveform"?WAVEFORM_SAMPLES:this.effectiveBarCount,phase=reduced?0:finiteNumber(nowMs,0)/this.resolveAmbientDuration();switch(this.state){case"listening":case"speaking":{const pulse=reduced?.3:.25+.15*Math.sin(phase*2*Math.PI);return new Array(n).fill(pulse)}case"thinking":return reduced?new Array(n).fill(.3):Array.from({length:n},(_,i)=>{const pos=phase%1,dist=Math.abs(i/(n-1||1)-pos);return .15+.35*Math.max(0,1-dist*4)});default:return new Array(n).fill(.08)}}resolveAmbientDuration(){if(this.ambientDurationMs!==void 0)return this.ambientDurationMs;const style=this.ownerDocument.defaultView?.getComputedStyle(this),value=style?.getPropertyValue("--lr-audio-visualizer-ambient-duration").trim()||style?.getPropertyValue("--_lr-audio-visualizer-ambient-duration-default").trim()||"";return this.ambientDurationMs=parseAmbientDuration(value)??DEFAULT_AMBIENT_DURATION_MS,this.ambientDurationMs}currentAmplitudes(nowMs){if(this.analyser&&this.timeDomainData&&this.audioCtx?.state==="running")return this.analyser.getByteTimeDomainData(this.timeDomainData),this.mode==="waveform"?Array.from(this.timeDomainData,v=>(v-128)/128):this.barsFromTimeDomain(this.timeDomainData,this.effectiveBarCount);if(this.effectiveLevel!=null){const n=this.mode==="waveform"?WAVEFORM_SAMPLES:this.effectiveBarCount;return new Array(n).fill(this.effectiveLevel)}return this.ambientAmplitudes(nowMs,prefersReducedMotion(this.ownerDocument.defaultView))}resolveColors(){const cs=this.ownerDocument.defaultView?.getComputedStyle(this),active=cs?.getPropertyValue("--lr-audio-visualizer-color").trim()||cs?.getPropertyValue("--_lr-audio-visualizer-color-default").trim()||"#0969da",quiet=cs?.getPropertyValue("--lr-audio-visualizer-quiet-color").trim()||cs?.getPropertyValue("--_lr-audio-visualizer-quiet-color-default").trim()||"#ddf4ff";return{active:resolveCanvasColor(this,active,"#0969da"),quiet:resolveCanvasColor(this,quiet,"#ddf4ff")}}draw(nowMs){const canvas=this.canvas;if(!canvas)return;const size=this.hostSize??this.getBoundingClientRect(),w=Math.max(1,size.width),h=Math.max(1,size.height||48),dpr=this.ownerDocument.defaultView?.devicePixelRatio||1,backingW=Math.floor(w*dpr),backingH=Math.floor(h*dpr);canvas.width!==backingW&&(canvas.width=backingW),canvas.height!==backingH&&(canvas.height=backingH);const cssW=`${w}px`,cssH=`${h}px`;canvas.style.width!==cssW&&(canvas.style.width=cssW),canvas.style.height!==cssH&&(canvas.style.height=cssH);const ctx=canvas.getContext("2d");if(!ctx)return;ctx.setTransform(dpr,0,0,dpr,0,0),ctx.clearRect(0,0,w,h),this.resolvedColors??=this.resolveColors();const{active:activeColor,quiet:quietColor}=this.resolvedColors,amplitudes=this.currentAmplitudes(nowMs),active=this.hasLiveSignal||this.state==="listening"||this.state==="thinking"||this.state==="speaking";ctx.fillStyle=active?activeColor:quietColor,ctx.strokeStyle=active?activeColor:quietColor;const gain=this.effectiveGain;if(this.mode==="waveform")ctx.lineWidth=2,ctx.beginPath(),amplitudes.forEach((amp,i)=>{const x=i/(amplitudes.length-1||1)*w,y=h/2-amp*(h/2)*gain;i===0?ctx.moveTo(x,y):ctx.lineTo(x,y)}),ctx.stroke();else{const n=amplitudes.length,gap=n>1?Math.max(0,Math.min(4,(w-n*2)/(n-1))):0,barWidth=Math.max(2,(w-gap*(n-1))/n);amplitudes.forEach((amp,i)=>{const barH=Math.max(2,Math.min(h,amp*h*gain)),x=i*(barWidth+gap),y=(h-barH)/2;ctx.fillRect(x,y,barWidth,barH)})}}render(){return html`<div part="base"><canvas part="canvas" aria-hidden="true"></canvas></div>`}}__decorate([property({attribute:!1})],LyraAudioVisualizer.prototype,"stream",void 0),__decorate([property({type:Number})],LyraAudioVisualizer.prototype,"level",void 0),__decorate([property({reflect:!0,converter:AUDIO_VISUALIZER_STATE})],LyraAudioVisualizer.prototype,"state",null),__decorate([property({reflect:!0,converter:AUDIO_VISUALIZER_MODE})],LyraAudioVisualizer.prototype,"mode",null),__decorate([property({type:Number,attribute:"bar-count"})],LyraAudioVisualizer.prototype,"barCount",void 0),__decorate([property({type:Number})],LyraAudioVisualizer.prototype,"gain",void 0),__decorate([property()],LyraAudioVisualizer.prototype,"label",void 0),__decorate([query("canvas")],LyraAudioVisualizer.prototype,"canvas",void 0);export{LyraAudioVisualizer};
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html}from"lit";import{property,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteInteger,finiteNumber,finiteRange}from"../../../internal/numbers.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{ThemeWatcher}from"../../../internal/theme-watcher.js";import{resolveCanvasColor}from"../../../internal/canvas-color.js";import{literalSetConverter}from"../../../internal/converters.js";import{styles}from"./audio-visualizer.styles.js";import{LYRA_DEFAULT_audioVisualizerIdle,LYRA_DEFAULT_audioVisualizerLabel,LYRA_DEFAULT_audioVisualizerListening,LYRA_DEFAULT_audioVisualizerSpeaking,LYRA_DEFAULT_audioVisualizerThinking}from"../../../internal/default-strings.generated.js";const AUDIO_VISUALIZER_MODE=literalSetConverter(["bars","waveform"],"bars"),AUDIO_VISUALIZER_STATE=literalSetConverter(["idle","listening","thinking","speaking"],"idle"),WAVEFORM_SAMPLES=64,AMBIENT_REDUCED_MOTION_INTERVAL_MS=500,DEFAULT_AMBIENT_DURATION_MS=1800;function parseAmbientDuration(value){const match=/^\+?(?:(?:\d+\.?\d*)|(?:\.\d+))(?:e[+-]?\d+)?(ms|s)$/i.exec(value.trim());if(!match)return;const unit=match[1].toLowerCase(),numeric=Number(value.trim().slice(0,-unit.length)),milliseconds=finiteNumber(numeric*(unit==="s"?1e3:1),0);return milliseconds>0?milliseconds:void 0}function clampAmplitudeProduct(amplitude,gain,min,max){const product=finiteNumber(amplitude,0)*finiteNumber(gain,1);return Number.isFinite(product)?finiteRange(product,0,min,max):product>0?max:product<0?min:0}function readIntersectionState(entries,target){try{if(!Array.isArray(entries))return;for(const candidate of entries)if(!(!candidate||typeof candidate!="object"&&typeof candidate!="function"))try{const entry=candidate;if(entry.target!==target)continue;const isIntersecting=entry.isIntersecting;if(typeof isIntersecting=="boolean")return isIntersecting}catch{}}catch{}}class LyraAudioVisualizer extends LyraElement{static{this.defaultStrings={...super.defaultStrings,audioVisualizerIdle:LYRA_DEFAULT_audioVisualizerIdle,audioVisualizerLabel:LYRA_DEFAULT_audioVisualizerLabel,audioVisualizerListening:LYRA_DEFAULT_audioVisualizerListening,audioVisualizerSpeaking:LYRA_DEFAULT_audioVisualizerSpeaking,audioVisualizerThinking:LYRA_DEFAULT_audioVisualizerThinking}}static{this.styles=[LyraElement.styles,styles]}static get observedAttributes(){return[...new Set([...super.observedAttributes,"role"])]}get state(){return this._state}set state(next){const normalized=AUDIO_VISUALIZER_STATE.normalize(next),old=this._state;old!==normalized&&(this._state=normalized,this.requestUpdate("state",old))}get mode(){return this._mode}set mode(next){const normalized=AUDIO_VISUALIZER_MODE.normalize(next),old=this._mode;old!==normalized&&(this._mode=normalized,this.requestUpdate("mode",old))}get effectiveBarCount(){return finiteInteger(this.barCount,5,1,64)}get effectiveLevel(){return this.level==null?null:finiteRange(this.level,0,0,1)}get effectiveGain(){return finiteNumber(this.gain,1)}constructor(){super(),this.stream=null,this.level=null,this._state="idle",this._mode="bars",this.barCount=5,this.gain=1,this.label="",this.lastAmbientDrawMs=0,this.visible=!0,this.visibilityKnown=!0,this.intersectionGeneration=0,this.onAudioCtxStateChange=()=>{this.scheduleDraw()},this.scheduleDraw=()=>{if(!this.visibilityKnown||!this.visible||this.drawFrameRequest)return;const owner=this.ownerDocument.defaultView;if(!owner||!this.isConnected)return;const request={owner,handle:0};request.handle=owner.requestAnimationFrame(nowMs=>this.drawFrame(request,nowMs)),this.drawFrameRequest=request},this.requestUpdate("state",void 0),this.requestUpdate("mode",void 0),new ThemeWatcher(this,()=>this.refreshTheme())}connectedCallback(){super.connectedCallback();const owner=this.ownerDocument.defaultView;if(!owner)return;const ResizeObserverCtor=owner.ResizeObserver;if(ResizeObserverCtor){let observer;observer=new ResizeObserverCtor(entries=>{if(!this.isConnected||this.ownerDocument.defaultView!==owner||this.resizeObserver!==observer)return;const rect=entries[entries.length-1]?.contentRect;rect&&(this.hostSize={width:rect.width,height:rect.height}),this.scheduleDraw()}),this.resizeObserver=observer,observer.observe(this)}if(this.watchDpr(),typeof owner.matchMedia=="function"){const query2=owner.matchMedia("(prefers-reduced-motion: reduce)"),listener=()=>{!this.isConnected||this.ownerDocument.defaultView!==owner||this.motionQuery!==query2||this.scheduleDraw()};this.motionQuery=query2,this.motionChangeListener=listener,query2.addEventListener("change",listener)}this.resolvedColors=void 0,this.ambientDurationMs=void 0,this.syncAnalyser(),this.bindVisibilityObserver(owner),this.lastAmbientDrawMs=0,this.scheduleDraw()}disconnectedCallback(){super.disconnectedCallback(),this.resizeObserver?.disconnect(),this.resizeObserver=void 0,this.hostSize=void 0,this.clearDprWatcher(),this.clearMotionWatcher(),this.clearVisibilityObserver(),this.visible=!1,this.visibilityKnown=!1,this.cancelDrawFrame(),this.closeAudioContext()}adoptedCallback(){super.adoptedCallback(),this.clearVisibilityObserver(),this.visible=!1,this.visibilityKnown=!1}bindVisibilityObserver(owner){this.clearVisibilityObserver();let IntersectionObserverCtor;try{IntersectionObserverCtor=owner.IntersectionObserver}catch{this.restoreImmediateVisibility();return}if(typeof IntersectionObserverCtor!="function"){this.restoreImmediateVisibility();return}this.visible=!1,this.visibilityKnown=!1;const generation=++this.intersectionGeneration;let observer;try{observer=new IntersectionObserverCtor(entries=>{if(generation!==this.intersectionGeneration||!this.isConnected||this.ownerDocument.defaultView!==owner||this.intersectionObserver!==observer)return;const isIntersecting=readIntersectionState(entries,this);if(isIntersecting===void 0)return;const wasPaintable=this.visibilityKnown&&this.visible;this.visibilityKnown=!0,this.visible=isIntersecting,this.visible?wasPaintable||this.scheduleDraw():this.cancelDrawFrame()}),this.intersectionObserver=observer,observer.observe(this)}catch{try{observer?.disconnect()}catch{}if(generation!==this.intersectionGeneration)return;this.intersectionObserver=void 0,this.intersectionGeneration++,this.restoreImmediateVisibility()}}clearVisibilityObserver(){this.intersectionGeneration++;try{this.intersectionObserver?.disconnect()}catch{}this.intersectionObserver=void 0}restoreImmediateVisibility(){this.visible=!0,this.visibilityKnown=!0}watchDpr(){this.clearDprWatcher();const owner=this.ownerDocument.defaultView;if(!owner||typeof owner.matchMedia!="function")return;const query2=owner.matchMedia(`(resolution: ${owner.devicePixelRatio}dppx)`),listener=()=>{!this.isConnected||this.ownerDocument.defaultView!==owner||this.dprQuery!==query2||(this.watchDpr(),this.scheduleDraw())};this.dprQuery=query2,this.dprChangeListener=listener,query2.addEventListener("change",listener)}clearDprWatcher(){this.dprQuery&&this.dprChangeListener&&this.dprQuery.removeEventListener("change",this.dprChangeListener),this.dprQuery=void 0,this.dprChangeListener=void 0}clearMotionWatcher(){this.motionQuery&&this.motionChangeListener&&this.motionQuery.removeEventListener("change",this.motionChangeListener),this.motionQuery=void 0,this.motionChangeListener=void 0}refreshTheme(){this.resolvedColors=void 0,this.ambientDurationMs=void 0,this.scheduleDraw()}get hasUsableAudioStream(){if(!this.stream||typeof this.stream.getAudioTracks!="function")return!1;try{return this.stream.getAudioTracks().some(track=>track.readyState!=="ended")}catch{return!1}}syncAnalyser(){if(!this.isConnected||!this.hasUsableAudioStream){this.sourceNode?.disconnect(),this.sourceNode=void 0,this.analyser=void 0,this.timeDomainData=void 0,this.audioCtx&&this.audioCtx.suspend().catch(()=>{});return}const stream=this.stream;if(!stream)return;const owner=this.ownerDocument.defaultView;if(!owner)return;let context=this.audioCtx,source;try{if(!context){const AudioCtxCtor=owner.AudioContext??owner.webkitAudioContext;if(!AudioCtxCtor)return;context=new AudioCtxCtor,context.addEventListener("statechange",this.onAudioCtxStateChange)}source=context.createMediaStreamSource(stream);const analyser=context.createAnalyser();analyser.fftSize=this.mode==="waveform"?2048:256,source.connect(analyser);const data=new owner.Uint8Array(analyser.frequencyBinCount);this.sourceNode?.disconnect(),this.audioCtx=context,this.sourceNode=source,this.analyser=analyser,this.timeDomainData=data,context.resume().catch(()=>{})}catch{source?.disconnect(),context&&(context.removeEventListener("statechange",this.onAudioCtxStateChange),context.close().catch(()=>{})),this.audioCtx=void 0,this.sourceNode=void 0,this.analyser=void 0,this.timeDomainData=void 0}}closeAudioContext(){this.sourceNode?.disconnect(),this.sourceNode=void 0,this.analyser=void 0,this.timeDomainData=void 0,this.audioCtx&&(this.audioCtx.removeEventListener("statechange",this.onAudioCtxStateChange),this.audioCtx.close().catch(()=>{}),this.audioCtx=void 0)}get hasLiveSignal(){return!!this.analyser&&this.audioCtx?.state==="running"||this.level!=null}stateLabel(){switch(this.state){case"listening":return this.localize("audioVisualizerListening");case"thinking":return this.localize("audioVisualizerThinking");case"speaking":return this.localize("audioVisualizerSpeaking");default:return this.localize("audioVisualizerIdle")}}willUpdate(changed){super.willUpdate(changed),(changed.has("stream")||changed.has("mode")&&this.stream)&&this.syncAnalyser(),this.syncDefaultRole();const currentAriaLabel=this.getAttribute("aria-label");if(currentAriaLabel!==null&&currentAriaLabel!==this.generatedAriaLabel)this.generatedAriaLabel=void 0;else{const generated=this.label||this.localize("audioVisualizerLabel",void 0,{state:this.stateLabel()});currentAriaLabel!==generated&&this.setAttribute("aria-label",generated),this.generatedAriaLabel=generated}}attributeChangedCallback(name,oldValue,value){super.attributeChangedCallback(name,oldValue,value),name==="role"&&oldValue!==value&&value===null&&this.syncDefaultRole()}syncDefaultRole(){this.hasAttribute("role")||this.setAttribute("role","img")}updated(changed){super.updated(changed),["state","mode","barCount","gain","level","stream"].some(key=>changed.has(key))&&this.scheduleDraw()}get isTimeDriven(){return this.analyser&&this.audioCtx?.state==="running"?!0:this.level!=null||prefersReducedMotion(this.ownerDocument.defaultView)?!1:this.state!=="idle"}drawFrame(request,nowMs){if(this.drawFrameRequest!==request||(this.drawFrameRequest=void 0,!this.isConnected||this.ownerDocument.defaultView!==request.owner)||!this.visibilityKnown||!this.visible)return;if(prefersReducedMotion(request.owner)&&!this.hasLiveSignal){if(nowMs-this.lastAmbientDrawMs<AMBIENT_REDUCED_MOTION_INTERVAL_MS){this.scheduleDraw();return}this.lastAmbientDrawMs=nowMs}this.draw(nowMs),this.isTimeDriven&&this.scheduleDraw()}cancelDrawFrame(){const request=this.drawFrameRequest;request&&request.owner.cancelAnimationFrame(request.handle),this.drawFrameRequest=void 0}barsFromTimeDomain(data,barCount){const segmentSize=Math.max(1,Math.floor(data.length/barCount)),bars=[];for(let i=0;i<barCount;i++){let sumSquares=0;const start=i*segmentSize,end=Math.min(data.length,start+segmentSize);for(let j=start;j<end;j++){const norm=(data[j]-128)/128;sumSquares+=norm*norm}bars.push(Math.sqrt(sumSquares/Math.max(1,end-start)))}return bars}ambientAmplitudes(nowMs,reduced){const n=this.mode==="waveform"?WAVEFORM_SAMPLES:this.effectiveBarCount,phase=reduced?0:finiteNumber(nowMs,0)/this.resolveAmbientDuration();switch(this.state){case"listening":case"speaking":{const pulse=reduced?.3:.25+.15*Math.sin(phase*2*Math.PI);return new Array(n).fill(pulse)}case"thinking":return reduced?new Array(n).fill(.3):Array.from({length:n},(_,i)=>{const pos=phase%1,dist=Math.abs(i/(n-1||1)-pos);return .15+.35*Math.max(0,1-dist*4)});default:return new Array(n).fill(.08)}}resolveAmbientDuration(){if(this.ambientDurationMs!==void 0)return this.ambientDurationMs;const style=this.ownerDocument.defaultView?.getComputedStyle(this),value=style?.getPropertyValue("--lr-audio-visualizer-ambient-duration").trim()||style?.getPropertyValue("--_lr-audio-visualizer-ambient-duration-default").trim()||"";return this.ambientDurationMs=parseAmbientDuration(value)??DEFAULT_AMBIENT_DURATION_MS,this.ambientDurationMs}currentAmplitudes(nowMs){if(this.analyser&&this.timeDomainData&&this.audioCtx?.state==="running")return this.analyser.getByteTimeDomainData(this.timeDomainData),this.mode==="waveform"?Array.from(this.timeDomainData,v=>(v-128)/128):this.barsFromTimeDomain(this.timeDomainData,this.effectiveBarCount);if(this.effectiveLevel!=null){const n=this.mode==="waveform"?WAVEFORM_SAMPLES:this.effectiveBarCount;return new Array(n).fill(this.effectiveLevel)}return this.ambientAmplitudes(nowMs,prefersReducedMotion(this.ownerDocument.defaultView))}resolveColors(){const cs=this.ownerDocument.defaultView?.getComputedStyle(this),active=cs?.getPropertyValue("--lr-audio-visualizer-color").trim()||cs?.getPropertyValue("--_lr-audio-visualizer-color-default").trim()||"#0969da",quiet=cs?.getPropertyValue("--lr-audio-visualizer-quiet-color").trim()||cs?.getPropertyValue("--_lr-audio-visualizer-quiet-color-default").trim()||"#ddf4ff";return{active:resolveCanvasColor(this,active,"#0969da"),quiet:resolveCanvasColor(this,quiet,"#ddf4ff")}}draw(nowMs){const canvas=this.canvas;if(!canvas)return;const size=this.hostSize??this.getBoundingClientRect(),w=Math.max(1,size.width),h=Math.max(1,size.height||48),dpr=this.ownerDocument.defaultView?.devicePixelRatio||1,backingW=Math.floor(w*dpr),backingH=Math.floor(h*dpr);canvas.width!==backingW&&(canvas.width=backingW),canvas.height!==backingH&&(canvas.height=backingH);const cssW=`${w}px`,cssH=`${h}px`;canvas.style.width!==cssW&&(canvas.style.width=cssW),canvas.style.height!==cssH&&(canvas.style.height=cssH);const ctx=canvas.getContext("2d");if(!ctx)return;ctx.setTransform(dpr,0,0,dpr,0,0),ctx.clearRect(0,0,w,h),this.resolvedColors??=this.resolveColors();const{active:activeColor,quiet:quietColor}=this.resolvedColors,amplitudes=this.currentAmplitudes(nowMs),active=this.hasLiveSignal||this.state==="listening"||this.state==="thinking"||this.state==="speaking";ctx.fillStyle=active?activeColor:quietColor,ctx.strokeStyle=active?activeColor:quietColor;const gain=this.effectiveGain;if(this.mode==="waveform")ctx.lineWidth=2,ctx.beginPath(),amplitudes.forEach((amp,i)=>{const x=i/(amplitudes.length-1||1)*w,y=h/2-clampAmplitudeProduct(amp,gain,-1,1)*(h/2);i===0?ctx.moveTo(x,y):ctx.lineTo(x,y)}),ctx.stroke();else{const n=amplitudes.length,gap=n>1?Math.max(0,Math.min(4,(w-n*2)/(n-1))):0,barWidth=Math.max(2,(w-gap*(n-1))/n);amplitudes.forEach((amp,i)=>{const barH=Math.max(2,clampAmplitudeProduct(amp,gain,0,1)*h),x=i*(barWidth+gap),y=(h-barH)/2;ctx.fillRect(x,y,barWidth,barH)})}}render(){return html`<div part="base"><canvas part="canvas" aria-hidden="true"></canvas></div>`}}__decorate([property({attribute:!1})],LyraAudioVisualizer.prototype,"stream",void 0),__decorate([property({type:Number})],LyraAudioVisualizer.prototype,"level",void 0),__decorate([property({reflect:!0,converter:AUDIO_VISUALIZER_STATE})],LyraAudioVisualizer.prototype,"state",null),__decorate([property({reflect:!0,converter:AUDIO_VISUALIZER_MODE})],LyraAudioVisualizer.prototype,"mode",null),__decorate([property({type:Number,attribute:"bar-count"})],LyraAudioVisualizer.prototype,"barCount",void 0),__decorate([property({type:Number})],LyraAudioVisualizer.prototype,"gain",void 0),__decorate([property()],LyraAudioVisualizer.prototype,"label",void 0),__decorate([query("canvas")],LyraAudioVisualizer.prototype,"canvas",void 0);export{LyraAudioVisualizer};
@@ -35,7 +35,9 @@ label:string;private previousButtonEl?;private nextButtonEl?;private liveRegion?
35
35
  * position -- mirrors `<lr-chat-message>`'s identical `isMounting` gate for status-change
36
36
  * announcements. */
37
37
  private isMounting;private readonly previousToolbarAction;private readonly nextToolbarAction;private createToolbarAction;
38
- /** Ordered logical actions exposed to an enclosing toolbar without exposing shadow nodes. */
38
+ /** Ordered logical actions exposed to an enclosing toolbar without exposing shadow nodes.
39
+ * A parent releases its optional lease when this provider leaves, restoring an untouched
40
+ * authored chevron tabindex without replacing a later consumer value. */
39
41
  getToolbarActions():readonly LyraToolbarAction[];
40
42
  /** Read-time-safe view of `count` -- non-negative, finite, truncated to a whole branch count.
41
43
  * Both `index` and `count` are fully controlled (this component never writes to them), so an
@@ -53,4 +55,4 @@ private get normalizedIndex();
53
55
  * as one stop inside a parent toolbar. */
54
56
  focus(options?:FocusOptions):void;blur():void;
55
57
  /** Activates the currently enabled chevron, matching a click on the shadow control. */
56
- click():void;protected updated(changed:PropertyValues):void;disconnectedCallback():void;private formatPosition;private requestIndex;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-branch-picker':LyraBranchPicker;}}
58
+ click():void;protected updated(changed:PropertyValues):void;disconnectedCallback():void;adoptedCallback():void;private releaseToolbarActions;private formatPosition;private requestIndex;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-branch-picker':LyraBranchPicker;}}
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html}from"lit";import{property,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{chevronIcon}from"../../../internal/icons.js";import{finiteCount,finiteInteger}from"../../../internal/numbers.js";import"../../utility/live-region/live-region.class.js";import{styles}from"./branch-picker.styles.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{LYRA_DEFAULT_branchNext,LYRA_DEFAULT_branchPickerLabel,LYRA_DEFAULT_branchPosition,LYRA_DEFAULT_branchPrevious}from"../../../internal/default-strings.generated.js";class LyraBranchPicker extends LyraElement{constructor(){super(...arguments),this.index=0,this.count=1,this.label="",this.groupId=nextId("branch-picker"),this.isMounting=!0,this.previousToolbarAction=this.createToolbarAction("previous"),this.nextToolbarAction=this.createToolbarAction("next")}static{this.defaultStrings={...super.defaultStrings,branchNext:LYRA_DEFAULT_branchNext,branchPickerLabel:LYRA_DEFAULT_branchPickerLabel,branchPosition:LYRA_DEFAULT_branchPosition,branchPrevious:LYRA_DEFAULT_branchPrevious}}static{this.styles=[LyraElement.styles,styles]}createToolbarAction(direction){const host=this,button=()=>direction==="previous"?host.previousButtonEl:host.nextButtonEl;return{id:direction,get disabled(){return!button()||button().disabled},focus(options){button()?.focus(options)},setTabIndex(tabIndex){const target=button();target&&(target.tabIndex=tabIndex)},matchesEventPath(path){const target=button();return target!==void 0&&path.includes(target)}}}getToolbarActions(){return this.normalizedCount<2?[]:[this.previousToolbarAction,this.nextToolbarAction]}get normalizedCount(){return finiteCount(this.count,1)}get normalizedIndex(){const count=this.normalizedCount;return count===0?0:finiteInteger(this.index,0,0,count-1)}focus(options){((this.normalizedIndex>0?this.previousButtonEl:this.nextButtonEl)??this.previousButtonEl??this.nextButtonEl)?.focus(options)}blur(){this.previousButtonEl?.blur(),this.nextButtonEl?.blur()}click(){((this.normalizedIndex>0?this.previousButtonEl:this.nextButtonEl)??this.previousButtonEl??this.nextButtonEl)?.click()}updated(changed){super.updated(changed);const wasMounting=this.isMounting;if(this.isMounting=!1,changed.has("index")&&!wasMounting){const formatter=getNumberFormat(this.effectiveLocale);this.liveRegion?.announce(this.formatPosition(formatter),{force:!0})}(changed.has("index")||changed.has("count"))&&this.emit("lr-toolbar-actions-change")}disconnectedCallback(){this.isMounting=!0,super.disconnectedCallback()}formatPosition(formatter=getNumberFormat(this.effectiveLocale)){return this.localize("branchPosition",void 0,{index:formatter.format(this.normalizedIndex+1),total:formatter.format(this.normalizedCount)})}requestIndex(next){next<0||next>this.normalizedCount-1||next===this.normalizedIndex||this.emit("lr-branch-change",{index:next})}render(){const count=this.normalizedCount;if(count<2)return html``;const index=this.normalizedIndex,label=this.label||this.localize("branchPickerLabel"),ariaLabel=this.getAttribute("aria-label")??label,formatter=getNumberFormat(this.effectiveLocale);return html`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html}from"lit";import{property,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{chevronIcon}from"../../../internal/icons.js";import{finiteCount,finiteInteger}from"../../../internal/numbers.js";import"../../utility/live-region/live-region.class.js";import{styles}from"./branch-picker.styles.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{LYRA_DEFAULT_branchNext,LYRA_DEFAULT_branchPickerLabel,LYRA_DEFAULT_branchPosition,LYRA_DEFAULT_branchPrevious}from"../../../internal/default-strings.generated.js";class LyraBranchPicker extends LyraElement{constructor(){super(...arguments),this.index=0,this.count=1,this.label="",this.groupId=nextId("branch-picker"),this.isMounting=!0,this.previousToolbarAction=this.createToolbarAction("previous"),this.nextToolbarAction=this.createToolbarAction("next")}static{this.defaultStrings={...super.defaultStrings,branchNext:LYRA_DEFAULT_branchNext,branchPickerLabel:LYRA_DEFAULT_branchPickerLabel,branchPosition:LYRA_DEFAULT_branchPosition,branchPrevious:LYRA_DEFAULT_branchPrevious}}static{this.styles=[LyraElement.styles,styles]}createToolbarAction(direction){const host=this,button=()=>direction==="previous"?host.previousButtonEl:host.nextButtonEl;let leasedButton,authoredTabIndex=null,lastManagedTabIndex=null,consumerOwnsTabIndex=!1;const releaseTabIndex=()=>{const target=leasedButton;target&&target.getAttribute("tabindex")===lastManagedTabIndex&&(authoredTabIndex===null?target.removeAttribute("tabindex"):target.setAttribute("tabindex",authoredTabIndex)),leasedButton=void 0,authoredTabIndex=null,lastManagedTabIndex=null,consumerOwnsTabIndex=!1};return{id:direction,get disabled(){return!button()||button().disabled},focus(options){button()?.focus(options)},setTabIndex(tabIndex){const target=button();if(!target){releaseTabIndex();return}if(leasedButton!==target&&(releaseTabIndex(),leasedButton=target,authoredTabIndex=target.getAttribute("tabindex")),consumerOwnsTabIndex||lastManagedTabIndex!==null&&target.getAttribute("tabindex")!==lastManagedTabIndex){consumerOwnsTabIndex=!0;return}target.tabIndex=tabIndex,lastManagedTabIndex=target.getAttribute("tabindex")},releaseTabIndex,matchesEventPath(path){const target=button();return target!==void 0&&path.includes(target)}}}getToolbarActions(){return this.normalizedCount<2?[]:[this.previousToolbarAction,this.nextToolbarAction]}get normalizedCount(){return finiteCount(this.count,1)}get normalizedIndex(){const count=this.normalizedCount;return count===0?0:finiteInteger(this.index,0,0,count-1)}focus(options){((this.normalizedIndex>0?this.previousButtonEl:this.nextButtonEl)??this.previousButtonEl??this.nextButtonEl)?.focus(options)}blur(){this.previousButtonEl?.blur(),this.nextButtonEl?.blur()}click(){((this.normalizedIndex>0?this.previousButtonEl:this.nextButtonEl)??this.previousButtonEl??this.nextButtonEl)?.click()}updated(changed){super.updated(changed);const wasMounting=this.isMounting;if(this.isMounting=!1,changed.has("index")&&!wasMounting){const formatter=getNumberFormat(this.effectiveLocale);this.liveRegion?.announce(this.formatPosition(formatter),{force:!0})}(changed.has("index")||changed.has("count"))&&(this.normalizedCount<2&&this.releaseToolbarActions(),this.emit("lr-toolbar-actions-change"))}disconnectedCallback(){this.isMounting=!0,this.releaseToolbarActions(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.releaseToolbarActions()}releaseToolbarActions(){this.previousToolbarAction.releaseTabIndex?.(),this.nextToolbarAction.releaseTabIndex?.()}formatPosition(formatter=getNumberFormat(this.effectiveLocale)){return this.localize("branchPosition",void 0,{index:formatter.format(this.normalizedIndex+1),total:formatter.format(this.normalizedCount)})}requestIndex(next){next<0||next>this.normalizedCount-1||next===this.normalizedIndex||this.emit("lr-branch-change",{index:next})}render(){const count=this.normalizedCount;if(count<2)return html``;const index=this.normalizedIndex,label=this.label||this.localize("branchPickerLabel"),ariaLabel=this.getAttribute("aria-label")??label,formatter=getNumberFormat(this.effectiveLocale);return html`
2
2
  <div part="base" id=${this.groupId} role="group" aria-label=${ariaLabel}>
3
3
  <button
4
4
  part="previous-button"
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{display:inline-flex}[part=base]{align-items:center;gap:var(--lr-space-2xs);font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);display:inline-flex}[part=previous-button],[part=next-button]{inline-size:var(--lr-size-1-5rem);block-size:var(--lr-size-1-5rem);min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);border-radius:var(--lr-radius-xs);color:inherit;cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}:where([part=previous-button]):hover:where(:not(:disabled)),:where([part=next-button]):hover:where(:not(:disabled)){background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}:where([part=previous-button]):active:where(:not(:disabled)),:where([part=next-button]):active:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-brand)}[part=previous-button]:focus-visible,[part=next-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=previous-button]:disabled,[part=next-button]:disabled{cursor:not-allowed;opacity:var(--lr-opacity-disabled)}[part=previous-glyph],[part=next-glyph]{line-height:var(--lr-line-height-none);display:inline-flex}[part=previous-glyph]{transform:rotate(180deg)}[part=next-glyph],:host(:dir(rtl)) [part=previous-glyph]{transform:rotate(0)}:host(:dir(rtl)) [part=next-glyph]{transform:rotate(180deg)}[part=position]{white-space:nowrap;font-variant-numeric:tabular-nums}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{display:inline-flex}[part=base]{align-items:center;gap:var(--lr-space-2xs);font:inherit;color:var(--lr-color-text-quiet);display:inline-flex}[part=previous-button],[part=next-button]{inline-size:var(--lr-size-1-5rem);block-size:var(--lr-size-1-5rem);min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);font:inherit;border-radius:var(--lr-radius-xs);color:inherit;cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}:where([part=previous-button]):hover:where(:not(:disabled)),:where([part=next-button]):hover:where(:not(:disabled)){background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}:where([part=previous-button]):active:where(:not(:disabled)),:where([part=next-button]):active:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-brand)}[part=previous-button]:focus-visible,[part=next-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=previous-button]:disabled,[part=next-button]:disabled{cursor:not-allowed;opacity:var(--lr-opacity-disabled)}[part=previous-glyph],[part=next-glyph]{line-height:var(--lr-line-height-none);display:inline-flex}[part=previous-glyph]{transform:rotate(180deg)}[part=next-glyph],:host(:dir(rtl)) [part=previous-glyph]{transform:rotate(0)}:host(:dir(rtl)) [part=next-glyph]{transform:rotate(180deg)}[part=position]{white-space:nowrap;font-size:var(--lr-font-size-xs);font-variant-numeric:tabular-nums}`;export{styles};
@@ -3,7 +3,9 @@ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from
3
3
  * so there is one definition. Named `frame`, not `appearance`: `appearance` is the library's
4
4
  * vocabulary for how a *control fills itself*, and using it for container chrome as well made one
5
5
  * property name mean two unrelated things. */
6
- export type ChatComposerFrame=LyraFrame;export type ChatComposerStatus='idle'|'sending'|'streaming';
6
+ export type ChatComposerFrame=LyraFrame;export type ChatComposerStatus='idle'|'sending'|'streaming';export declare const CHAT_COMPOSER_STATUSES:readonly["idle","sending","streaming"];
7
+ /** Resolves untrusted status input to the public literal set. */
8
+ export declare function normalizeChatComposerStatus(value:unknown):ChatComposerStatus;
7
9
  /** Retained name for the shared native `<textarea wrap>` vocabulary. */
8
10
  export type ChatComposerWrap=LyraTextWrap;
9
11
  /** Retained name for the shared native `selectionDirection` vocabulary. */
@@ -81,7 +83,9 @@ export type ChatComposerSelectionDirection=LyraSelectionDirection;export interfa
81
83
  * @status stable
82
84
  * @since 4.0.0
83
85
  */
84
- export declare class LyraChatComposer extends LyraChatComposer_base{static styles:import("lit").CSSResultGroup[];placeholder:string;minRows:number;maxRows:number;status:ChatComposerStatus;
86
+ export declare class LyraChatComposer extends LyraChatComposer_base{static styles:import("lit").CSSResultGroup[];placeholder:string;minRows:number;maxRows:number;private statusValue;
87
+ /** Sending state. Invalid direct or attribute writes normalize and reflect as `idle`. */
88
+ get status():ChatComposerStatus;set status(value:ChatComposerStatus);
85
89
  /** Visual chrome, on the library-wide `frame` vocabulary. `'card'` (the default) keeps the
86
90
  * bordered, filled, padded box. `'plain'` removes the border, background, padding and corner
87
91
  * radius, so a composer docked inside a chat panel, dialog footer or toolbar that already draws
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing,svg}from"lit";import{property,state,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{FormAssociated,isBarredFromValidation}from"../../../internal/form-associated.js";import{SET_ANCHORED_VALIDITY}from"../../../internal/anchored-validity.js";import{lengthViolations}from"../../../internal/length-constraints.js";import{finiteCount,finiteInteger}from"../../../internal/numbers.js";import{styles}from"./chat-composer.styles.js";import{autocorrectConverter,normalizeAutocorrect,trueDefaultBooleanConverter}from"../../../internal/converters.js";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import{LYRA_DEFAULT_composerLabel,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_sendMessage,LYRA_DEFAULT_stopGenerating,LYRA_DEFAULT_valueInvalid}from"../../../internal/default-strings.generated.js";const ICON_VIEW_BOX="0 0 24 24",ICON_STROKE_WIDTH="1.75";function sendIcon(){return svg`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing,svg}from"lit";import{property,state,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{FormAssociated,isBarredFromValidation}from"../../../internal/form-associated.js";import{SET_ANCHORED_VALIDITY}from"../../../internal/anchored-validity.js";import{lengthViolations}from"../../../internal/length-constraints.js";import{finiteCount,finiteInteger}from"../../../internal/numbers.js";import{styles}from"./chat-composer.styles.js";import{autocorrectConverter,normalizeAutocorrect,trueDefaultBooleanConverter}from"../../../internal/converters.js";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import{LYRA_DEFAULT_composerLabel,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_sendMessage,LYRA_DEFAULT_stopGenerating,LYRA_DEFAULT_valueInvalid}from"../../../internal/default-strings.generated.js";const CHAT_COMPOSER_STATUSES=Object.freeze(["idle","sending","streaming"]);function normalizeChatComposerStatus(value){return typeof value=="string"&&CHAT_COMPOSER_STATUSES.includes(value)?value:"idle"}const ICON_VIEW_BOX="0 0 24 24",ICON_STROKE_WIDTH="1.75";function sendIcon(){return svg`
2
2
  <svg
3
3
  width="1em"
4
4
  height="1em"
@@ -21,7 +21,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
21
21
  aria-hidden="true"
22
22
  focusable="false"
23
23
  ><rect x="6" y="6" width="12" height="12" rx="1.5"></rect></svg>
24
- `}class LyraChatComposerBase extends LyraElement{}class LyraChatComposer extends FormAssociated(LyraChatComposerBase){static{this.defaultStrings={...super.defaultStrings,composerLabel:LYRA_DEFAULT_composerLabel,fieldRequired:LYRA_DEFAULT_fieldRequired,sendMessage:LYRA_DEFAULT_sendMessage,stopGenerating:LYRA_DEFAULT_stopGenerating,valueInvalid:LYRA_DEFAULT_valueInvalid}}static{this.styles=[LyraElement.styles,styles]}get autocorrect(){return this.autocorrectValue}set autocorrect(next){this.autocorrectValue=normalizeAutocorrect(next),this.requestUpdate()}get effectiveMinRows(){return finiteInteger(this.minRows,1,1)}get effectiveMaxRows(){return Math.max(this.effectiveMinRows,finiteInteger(this.maxRows,this.effectiveMinRows,1))}effectiveLengthLimit(declared){if(!(declared===void 0||!Number.isFinite(declared)||declared<0))return finiteCount(Math.trunc(declared),0)}constructor(){super(),this.placeholder="",this.minRows=1,this.maxRows=8,this.status="idle",this.frame="card",this.submitOnEnter=!0,this.submitDisabled=!1,this.stoppable=!0,this.readOnly=!1,this.accessibleLabel=null,this.spellcheck=!0,this.autocapitalize="",this.autocorrectValue=!0,this.wrap="soft",this.autocomplete="",this.inputMode="",this.enterKeyHint="",this.hasStartSlot=!1,this.hasChipsSlot=!1,this.hasEndSlot=!1,this.touched=!1,this.textareaResizeGeneration=0,this.onTextareaInput=event=>{if(this.effectiveDisabled||this.readOnly){event.stopPropagation();return}this.value=event.target.value,this.resizeTextarea(),relayNativeEvent(this,event),this.emit("lr-input",{value:this.value})},this.onTextareaChange=event=>{if(this.effectiveDisabled||this.readOnly){event.stopPropagation();return}this.value=event.target.value,relayNativeEvent(this,event),this.emit("lr-change",{value:this.value})},this.onTextareaKeyDown=e=>{e.key==="Enter"&&(e.shiftKey||this.submitOnEnter&&(e.isComposing||e.keyCode===229||this.status==="idle"&&(e.preventDefault(),this.submit())))},this.onActionClick=()=>{this.effectiveDisabled||(this.status==="idle"?this.submit():this.stoppable&&this.emit("lr-stop",null))},this.syncStartSlot=()=>{this.hasStartSlot=this.hasSlotted("start")},this.onChipsSlotChange=e=>{this.hasChipsSlot=e.target.assignedElements({flatten:!0}).length>0},this.syncEndSlot=()=>{this.hasEndSlot=this.hasSlotted("end")},this.onTextareaBlur=event=>{this.effectiveDisabled||(this.touched=!0),relayNativeEvent(this,event)},this.onTextareaFocus=event=>{if(this.effectiveDisabled){event.stopPropagation();return}relayNativeEvent(this,event)},this.addEventListener("invalid",()=>{this.touched=!0})}get input(){return this.textareaEl??null}get selectionStart(){return this.textareaEl?.selectionStart??null}set selectionStart(value){this.textareaEl&&(this.textareaEl.selectionStart=value??0)}get selectionEnd(){return this.textareaEl?.selectionEnd??null}set selectionEnd(value){this.textareaEl&&(this.textareaEl.selectionEnd=value??0)}get selectionDirection(){return this.textareaEl?.selectionDirection}set selectionDirection(value){this.textareaEl&&(this.textareaEl.selectionDirection=value??"none")}focus(options){this.textareaEl?.focus(options)}blur(){this.textareaEl?.blur()}click(){this.effectiveDisabled||this.textareaEl?.focus()}select(){this.textareaEl?.select()}setSelectionRange(start,end,direction){this.textareaEl?.setSelectionRange(start,end,direction)}setRangeText(replacement,start,end,selectMode){const textarea=this.textareaEl;textarea&&(start===void 0||end===void 0?textarea.setRangeText(replacement):textarea.setRangeText(replacement,start,end,selectMode),this.value=textarea.value,this.resizeTextarea())}willUpdate(changed){super.willUpdate(changed),this.seedFirstRenderState(()=>{this.syncStartSlot(),this.hasChipsSlot=this.hasSlotted("chips"),this.syncEndSlot()})}firstUpdated(changed){super.firstUpdated(changed),this.resizeTextarea(),this.armTextareaResizeObserver()}connectedCallback(){super.connectedCallback(),this.hasUpdated&&(this.armTextareaResizeObserver(),this.resizeTextarea())}disconnectedCallback(){super.disconnectedCallback(),this.resetTextareaResizeWork()}adoptedCallback(){super.adoptedCallback(),this.resetTextareaResizeWork()}updated(changed){super.updated(changed),(changed.has("value")||changed.has("minRows")||changed.has("maxRows"))&&this.resizeTextarea(),(changed.has("minLength")||changed.has("maxLength")||changed.has("readOnly"))&&this.updateValidity()}updateValidity(){if(isBarredFromValidation({effectiveDisabled:this.effectiveDisabled,readonly:this.readOnly},this.internals)){this[SET_ANCHORED_VALIDITY]({});return}if(this.required&&this.value===""){this[SET_ANCHORED_VALIDITY]({valueMissing:!0},this.localize("fieldRequired"));return}const textarea=this.textareaEl;textarea&&textarea.value!==this.value&&(textarea.value=this.value);const own=lengthViolations(this.value,this.effectiveLengthLimit(this.minLength),this.effectiveLengthLimit(this.maxLength)),tooShort=!!textarea?.validity.tooShort||own.tooShort,tooLong=!!textarea?.validity.tooLong||own.tooLong;if(!tooShort&&!tooLong){this[SET_ANCHORED_VALIDITY]({});return}this[SET_ANCHORED_VALIDITY]({tooShort,tooLong},textarea?.validationMessage||this.localize("valueInvalid"))}formResetCallback(){super.formResetCallback(),this.touched=!1}hasSlotted(name){return Array.from(this.children).some(el=>el.getAttribute("slot")===name)}resizeTextarea(){const ta=this.textareaEl;if(!ta)return;const cs=this.ownerDocument.defaultView?.getComputedStyle(ta)??ta.style,lineHeight=parseFloat(cs.lineHeight)||parseFloat(cs.fontSize)*1.2,paddingBlock=parseFloat(cs.paddingTop)+parseFloat(cs.paddingBottom),borderBlock=parseFloat(cs.borderTopWidth)+parseFloat(cs.borderBottomWidth),minRows=this.effectiveMinRows,maxRows=this.effectiveMaxRows,minHeight=lineHeight*minRows+paddingBlock+borderBlock,maxHeight=lineHeight*maxRows+paddingBlock+borderBlock;ta.style.height="auto";const contentHeight=ta.scrollHeight+borderBlock,next=Math.min(Math.max(contentHeight,minHeight),maxHeight);ta.style.height=`${next}px`,ta.style.overflowY=contentHeight>maxHeight?"auto":"hidden"}armTextareaResizeObserver(){const ta=this.textareaEl,ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;if(!ta||!this.isConnected||!ownerWindow?.ResizeObserver||this.textareaResizeObserver&&this.textareaResizeObserverDocument===ownerDocument&&this.textareaResizeObserverTarget===ta)return;this.resetTextareaResizeWork();const generation=this.textareaResizeGeneration;let lastWidth=ta.getBoundingClientRect().width;const observer=new ownerWindow.ResizeObserver(entries=>{if(this.textareaResizeObserver!==observer||this.textareaResizeObserverDocument!==ownerDocument||this.textareaResizeObserverTarget!==ta||this.textareaResizeGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument)return;const box=entries[0]?.contentBoxSize?.[0],width=box?box.inlineSize:entries[0]?.contentRect.width??lastWidth;if(Math.abs(width-lastWidth)<.5)return;lastWidth=width,this.textareaResizeRaf!==void 0&&this.textareaResizeRafOwner?.cancelAnimationFrame(this.textareaResizeRaf);const handle=ownerWindow.requestAnimationFrame(()=>{this.textareaResizeRaf!==handle||this.textareaResizeRafOwner!==ownerWindow||this.textareaResizeRafDocument!==ownerDocument||this.textareaResizeGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||this.textareaResizeObserverTarget!==ta||(this.textareaResizeRaf=void 0,this.textareaResizeRafOwner=void 0,this.textareaResizeRafDocument=void 0,this.resizeTextarea())});this.textareaResizeRaf=handle,this.textareaResizeRafOwner=ownerWindow,this.textareaResizeRafDocument=ownerDocument});this.textareaResizeObserver=observer,this.textareaResizeObserverDocument=ownerDocument,this.textareaResizeObserverTarget=ta,observer.observe(ta)}resetTextareaResizeWork(){this.textareaResizeGeneration+=1,this.textareaResizeObserver?.disconnect(),this.textareaResizeObserver=void 0,this.textareaResizeObserverDocument=void 0,this.textareaResizeObserverTarget=void 0,this.textareaResizeRaf!==void 0&&this.textareaResizeRafOwner?.cancelAnimationFrame(this.textareaResizeRaf),this.textareaResizeRaf=void 0,this.textareaResizeRafOwner=void 0,this.textareaResizeRafDocument=void 0}submit(){this.submitDisabled||this.effectiveDisabled||this.status!=="idle"||this.emit("lr-submit",{value:this.value})}renderActionButton(){const busy=this.status!=="idle",showStop=busy&&this.stoppable;return html`
24
+ `}class LyraChatComposerBase extends LyraElement{}class LyraChatComposer extends FormAssociated(LyraChatComposerBase){static{this.defaultStrings={...super.defaultStrings,composerLabel:LYRA_DEFAULT_composerLabel,fieldRequired:LYRA_DEFAULT_fieldRequired,sendMessage:LYRA_DEFAULT_sendMessage,stopGenerating:LYRA_DEFAULT_stopGenerating,valueInvalid:LYRA_DEFAULT_valueInvalid}}static{this.styles=[LyraElement.styles,styles]}get status(){return this.statusValue}set status(value){const previous=this.statusValue,normalized=normalizeChatComposerStatus(value);this.statusValue=normalized,typeof value=="string"&&value!==normalized&&this.getAttribute("status")!==normalized&&this.setAttribute("status",normalized),this.requestUpdate("status",previous,{reflect:!0,hasChanged:()=>!0})}get autocorrect(){return this.autocorrectValue}set autocorrect(next){this.autocorrectValue=normalizeAutocorrect(next),this.requestUpdate()}get effectiveMinRows(){return finiteInteger(this.minRows,1,1)}get effectiveMaxRows(){return Math.max(this.effectiveMinRows,finiteInteger(this.maxRows,this.effectiveMinRows,1))}effectiveLengthLimit(declared){if(!(declared===void 0||!Number.isFinite(declared)||declared<0))return finiteCount(Math.trunc(declared),0)}constructor(){super(),this.placeholder="",this.minRows=1,this.maxRows=8,this.statusValue="idle",this.frame="card",this.submitOnEnter=!0,this.submitDisabled=!1,this.stoppable=!0,this.readOnly=!1,this.accessibleLabel=null,this.spellcheck=!0,this.autocapitalize="",this.autocorrectValue=!0,this.wrap="soft",this.autocomplete="",this.inputMode="",this.enterKeyHint="",this.hasStartSlot=!1,this.hasChipsSlot=!1,this.hasEndSlot=!1,this.touched=!1,this.textareaResizeGeneration=0,this.onTextareaInput=event=>{if(this.effectiveDisabled||this.readOnly){event.stopPropagation();return}this.value=event.target.value,this.resizeTextarea(),relayNativeEvent(this,event),this.emit("lr-input",{value:this.value})},this.onTextareaChange=event=>{if(this.effectiveDisabled||this.readOnly){event.stopPropagation();return}this.value=event.target.value,relayNativeEvent(this,event),this.emit("lr-change",{value:this.value})},this.onTextareaKeyDown=e=>{e.defaultPrevented||e.key==="Enter"&&(e.shiftKey||this.submitOnEnter&&(e.isComposing||e.keyCode===229||this.status==="idle"&&(e.preventDefault(),this.submit())))},this.onActionClick=()=>{this.effectiveDisabled||(this.status==="idle"?this.submit():this.stoppable&&this.emit("lr-stop",null))},this.syncStartSlot=()=>{this.hasStartSlot=this.hasSlotted("start")},this.onChipsSlotChange=e=>{this.hasChipsSlot=e.target.assignedElements({flatten:!0}).length>0},this.syncEndSlot=()=>{this.hasEndSlot=this.hasSlotted("end")},this.onTextareaBlur=event=>{this.effectiveDisabled||(this.touched=!0),relayNativeEvent(this,event)},this.onTextareaFocus=event=>{if(this.effectiveDisabled){event.stopPropagation();return}relayNativeEvent(this,event)},this.addEventListener("invalid",()=>{this.touched=!0})}get input(){return this.textareaEl??null}get selectionStart(){return this.textareaEl?.selectionStart??null}set selectionStart(value){this.textareaEl&&(this.textareaEl.selectionStart=value??0)}get selectionEnd(){return this.textareaEl?.selectionEnd??null}set selectionEnd(value){this.textareaEl&&(this.textareaEl.selectionEnd=value??0)}get selectionDirection(){return this.textareaEl?.selectionDirection}set selectionDirection(value){this.textareaEl&&(this.textareaEl.selectionDirection=value??"none")}focus(options){this.textareaEl?.focus(options)}blur(){this.textareaEl?.blur()}click(){this.effectiveDisabled||this.textareaEl?.focus()}select(){this.textareaEl?.select()}setSelectionRange(start,end,direction){this.textareaEl?.setSelectionRange(start,end,direction)}setRangeText(replacement,start,end,selectMode){const textarea=this.textareaEl;textarea&&(start===void 0||end===void 0?textarea.setRangeText(replacement):textarea.setRangeText(replacement,start,end,selectMode),this.value=textarea.value,this.resizeTextarea())}willUpdate(changed){super.willUpdate(changed),this.seedFirstRenderState(()=>{this.syncStartSlot(),this.hasChipsSlot=this.hasSlotted("chips"),this.syncEndSlot()})}firstUpdated(changed){super.firstUpdated(changed),this.resizeTextarea(),this.armTextareaResizeObserver()}connectedCallback(){super.connectedCallback(),this.hasUpdated&&(this.armTextareaResizeObserver(),this.resizeTextarea())}disconnectedCallback(){super.disconnectedCallback(),this.resetTextareaResizeWork()}adoptedCallback(){super.adoptedCallback(),this.resetTextareaResizeWork()}updated(changed){super.updated(changed),(changed.has("value")||changed.has("minRows")||changed.has("maxRows"))&&this.resizeTextarea(),(changed.has("minLength")||changed.has("maxLength")||changed.has("readOnly"))&&this.updateValidity()}updateValidity(){if(isBarredFromValidation({effectiveDisabled:this.effectiveDisabled,readonly:this.readOnly},this.internals)){this[SET_ANCHORED_VALIDITY]({});return}if(this.required&&this.value===""){this[SET_ANCHORED_VALIDITY]({valueMissing:!0},this.localize("fieldRequired"));return}const textarea=this.textareaEl;textarea&&textarea.value!==this.value&&(textarea.value=this.value);const own=lengthViolations(this.value,this.effectiveLengthLimit(this.minLength),this.effectiveLengthLimit(this.maxLength)),tooShort=!!textarea?.validity.tooShort||own.tooShort,tooLong=!!textarea?.validity.tooLong||own.tooLong;if(!tooShort&&!tooLong){this[SET_ANCHORED_VALIDITY]({});return}this[SET_ANCHORED_VALIDITY]({tooShort,tooLong},textarea?.validationMessage||this.localize("valueInvalid"))}formResetCallback(){super.formResetCallback(),this.touched=!1}hasSlotted(name){return Array.from(this.children).some(el=>el.getAttribute("slot")===name)}resizeTextarea(){const ta=this.textareaEl;if(!ta)return;const cs=this.ownerDocument.defaultView?.getComputedStyle(ta)??ta.style,lineHeight=parseFloat(cs.lineHeight)||parseFloat(cs.fontSize)*1.2,paddingBlock=parseFloat(cs.paddingTop)+parseFloat(cs.paddingBottom),borderBlock=parseFloat(cs.borderTopWidth)+parseFloat(cs.borderBottomWidth),minRows=this.effectiveMinRows,maxRows=this.effectiveMaxRows,minHeight=lineHeight*minRows+paddingBlock+borderBlock,maxHeight=lineHeight*maxRows+paddingBlock+borderBlock;ta.style.height="auto";const contentHeight=ta.scrollHeight+borderBlock,next=Math.min(Math.max(contentHeight,minHeight),maxHeight);ta.style.height=`${next}px`,ta.style.overflowY=contentHeight>maxHeight?"auto":"hidden"}armTextareaResizeObserver(){const ta=this.textareaEl,ownerDocument=this.ownerDocument,ownerWindow=ownerDocument.defaultView;if(!ta||!this.isConnected||!ownerWindow?.ResizeObserver||this.textareaResizeObserver&&this.textareaResizeObserverDocument===ownerDocument&&this.textareaResizeObserverTarget===ta)return;this.resetTextareaResizeWork();const generation=this.textareaResizeGeneration;let lastWidth=ta.getBoundingClientRect().width;const observer=new ownerWindow.ResizeObserver(entries=>{if(this.textareaResizeObserver!==observer||this.textareaResizeObserverDocument!==ownerDocument||this.textareaResizeObserverTarget!==ta||this.textareaResizeGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument)return;const box=entries[0]?.contentBoxSize?.[0],width=box?box.inlineSize:entries[0]?.contentRect.width??lastWidth;if(Math.abs(width-lastWidth)<.5)return;lastWidth=width,this.textareaResizeRaf!==void 0&&this.textareaResizeRafOwner?.cancelAnimationFrame(this.textareaResizeRaf);const handle=ownerWindow.requestAnimationFrame(()=>{this.textareaResizeRaf!==handle||this.textareaResizeRafOwner!==ownerWindow||this.textareaResizeRafDocument!==ownerDocument||this.textareaResizeGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||this.textareaResizeObserverTarget!==ta||(this.textareaResizeRaf=void 0,this.textareaResizeRafOwner=void 0,this.textareaResizeRafDocument=void 0,this.resizeTextarea())});this.textareaResizeRaf=handle,this.textareaResizeRafOwner=ownerWindow,this.textareaResizeRafDocument=ownerDocument});this.textareaResizeObserver=observer,this.textareaResizeObserverDocument=ownerDocument,this.textareaResizeObserverTarget=ta,observer.observe(ta)}resetTextareaResizeWork(){this.textareaResizeGeneration+=1,this.textareaResizeObserver?.disconnect(),this.textareaResizeObserver=void 0,this.textareaResizeObserverDocument=void 0,this.textareaResizeObserverTarget=void 0,this.textareaResizeRaf!==void 0&&this.textareaResizeRafOwner?.cancelAnimationFrame(this.textareaResizeRaf),this.textareaResizeRaf=void 0,this.textareaResizeRafOwner=void 0,this.textareaResizeRafDocument=void 0}submit(){this.submitDisabled||this.effectiveDisabled||this.status!=="idle"||this.emit("lr-submit",{value:this.value})}renderActionButton(){const busy=this.status!=="idle",showStop=busy&&this.stoppable;return html`
25
25
  <button
26
26
  part="action-button"
27
27
  type="button"
@@ -74,4 +74,4 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
74
74
  </span>
75
75
  </div>
76
76
  </div>
77
- `}}__decorate([property()],LyraChatComposer.prototype,"placeholder",void 0),__decorate([property({type:Number,attribute:"min-rows"})],LyraChatComposer.prototype,"minRows",void 0),__decorate([property({type:Number,attribute:"max-rows"})],LyraChatComposer.prototype,"maxRows",void 0),__decorate([property({reflect:!0})],LyraChatComposer.prototype,"status",void 0),__decorate([property({reflect:!0})],LyraChatComposer.prototype,"frame",void 0),__decorate([property({type:Boolean,reflect:!0,attribute:"submit-on-enter",converter:trueDefaultBooleanConverter})],LyraChatComposer.prototype,"submitOnEnter",void 0),__decorate([property({type:Boolean,reflect:!0,attribute:"submit-disabled"})],LyraChatComposer.prototype,"submitDisabled",void 0),__decorate([property({type:Boolean,reflect:!0,converter:trueDefaultBooleanConverter})],LyraChatComposer.prototype,"stoppable",void 0),__decorate([property({type:Boolean,reflect:!0,attribute:"readonly"})],LyraChatComposer.prototype,"readOnly",void 0),__decorate([property({type:Number,attribute:"minlength"})],LyraChatComposer.prototype,"minLength",void 0),__decorate([property({type:Number,attribute:"maxlength"})],LyraChatComposer.prototype,"maxLength",void 0),__decorate([property({attribute:"aria-label"})],LyraChatComposer.prototype,"accessibleLabel",void 0),__decorate([property({converter:trueDefaultBooleanConverter})],LyraChatComposer.prototype,"spellcheck",void 0),__decorate([property()],LyraChatComposer.prototype,"autocapitalize",void 0),__decorate([property({converter:autocorrectConverter})],LyraChatComposer.prototype,"autocorrect",null),__decorate([property()],LyraChatComposer.prototype,"wrap",void 0),__decorate([property()],LyraChatComposer.prototype,"autocomplete",void 0),__decorate([property({attribute:"inputmode"})],LyraChatComposer.prototype,"inputMode",void 0),__decorate([property({attribute:"enterkeyhint"})],LyraChatComposer.prototype,"enterKeyHint",void 0),__decorate([state()],LyraChatComposer.prototype,"hasStartSlot",void 0),__decorate([state()],LyraChatComposer.prototype,"hasChipsSlot",void 0),__decorate([state()],LyraChatComposer.prototype,"hasEndSlot",void 0),__decorate([state()],LyraChatComposer.prototype,"touched",void 0),__decorate([query("textarea")],LyraChatComposer.prototype,"textareaEl",void 0);export{LyraChatComposer};
77
+ `}}__decorate([property()],LyraChatComposer.prototype,"placeholder",void 0),__decorate([property({type:Number,attribute:"min-rows"})],LyraChatComposer.prototype,"minRows",void 0),__decorate([property({type:Number,attribute:"max-rows"})],LyraChatComposer.prototype,"maxRows",void 0),__decorate([property({reflect:!0})],LyraChatComposer.prototype,"status",null),__decorate([property({reflect:!0})],LyraChatComposer.prototype,"frame",void 0),__decorate([property({type:Boolean,reflect:!0,attribute:"submit-on-enter",converter:trueDefaultBooleanConverter})],LyraChatComposer.prototype,"submitOnEnter",void 0),__decorate([property({type:Boolean,reflect:!0,attribute:"submit-disabled"})],LyraChatComposer.prototype,"submitDisabled",void 0),__decorate([property({type:Boolean,reflect:!0,converter:trueDefaultBooleanConverter})],LyraChatComposer.prototype,"stoppable",void 0),__decorate([property({type:Boolean,reflect:!0,attribute:"readonly"})],LyraChatComposer.prototype,"readOnly",void 0),__decorate([property({type:Number,attribute:"minlength"})],LyraChatComposer.prototype,"minLength",void 0),__decorate([property({type:Number,attribute:"maxlength"})],LyraChatComposer.prototype,"maxLength",void 0),__decorate([property({attribute:"aria-label"})],LyraChatComposer.prototype,"accessibleLabel",void 0),__decorate([property({converter:trueDefaultBooleanConverter})],LyraChatComposer.prototype,"spellcheck",void 0),__decorate([property()],LyraChatComposer.prototype,"autocapitalize",void 0),__decorate([property({converter:autocorrectConverter})],LyraChatComposer.prototype,"autocorrect",null),__decorate([property()],LyraChatComposer.prototype,"wrap",void 0),__decorate([property()],LyraChatComposer.prototype,"autocomplete",void 0),__decorate([property({attribute:"inputmode"})],LyraChatComposer.prototype,"inputMode",void 0),__decorate([property({attribute:"enterkeyhint"})],LyraChatComposer.prototype,"enterKeyHint",void 0),__decorate([state()],LyraChatComposer.prototype,"hasStartSlot",void 0),__decorate([state()],LyraChatComposer.prototype,"hasChipsSlot",void 0),__decorate([state()],LyraChatComposer.prototype,"hasEndSlot",void 0),__decorate([state()],LyraChatComposer.prototype,"touched",void 0),__decorate([query("textarea")],LyraChatComposer.prototype,"textareaEl",void 0);export{CHAT_COMPOSER_STATUSES,LyraChatComposer,normalizeChatComposerStatus};
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{display:block}[part=base]{gap:var(--lr-space-xs);box-sizing:border-box;border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);padding:var(--lr-space-s);transition:border-color var(--lr-transition-fast);flex-direction:column;display:flex}[part=base]:focus-within{border-color:var(--lr-color-brand)}:host([frame=plain]) [part=base]{background:0 0;border:0;border-radius:0;padding:0}:host([frame=plain]) [part=base]:focus-within{box-shadow:inset 0 calc(-1 * var(--lr-focus-ring-width)) 0 0 var(--lr-focus-ring-color)}:host(:disabled) [part=base]{opacity:var(--lr-opacity-disabled);cursor:not-allowed}[part=chips]{gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part=chips][hidden]{display:none}[part=row]{align-items:flex-end;gap:var(--lr-space-s);display:flex}[part=start]{flex:none;align-items:center;padding-block-end:var(--lr-space-xs);display:flex}[part=start][hidden]{display:none}[part=textarea]{box-sizing:border-box;resize:none;min-inline-size:0;color:inherit;font:inherit;line-height:var(--lr-line-height-normal);padding-block:var(--lr-space-xs);background:0 0;border:none;outline:none;flex:auto;overflow-y:hidden}[part=textarea]::placeholder{color:var(--lr-color-text-quiet)}[part=textarea]:disabled{cursor:not-allowed}[part=end]{align-items:center;gap:var(--lr-space-xs);flex:none;display:flex}[part=action-button]{box-sizing:border-box;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);border-radius:var(--lr-radius);background:var(--lr-color-brand);color:var(--lr-color-on-brand);font-size:var(--lr-font-size-lg);line-height:var(--lr-line-height-none);cursor:pointer;transition:background-color var(--lr-transition-fast);border:none;flex:none;justify-content:center;align-items:center;display:inline-flex}:where([part=action-button]):hover:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-hover))}:where([part=action-button]):active:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=action-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=action-button]:disabled{cursor:not-allowed;opacity:var(--lr-opacity-disabled)}[part=send-glyph],[part=stop-glyph]{display:inline-flex}:host(:dir(rtl)) [part=send-glyph]{transform:scaleX(-1)}:host([status=sending]) [part=action-button],:host([status=streaming]) [part=action-button]{background:var(--lr-chat-composer-busy-bg,var(--lr-color-text-quiet))}:host([status=sending]) :where([part=action-button]):hover:where(:not(:disabled)),:host([status=streaming]) :where([part=action-button]):hover:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-chat-composer-busy-bg,var(--lr-color-text-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-hover))}:host([status=sending]) :where([part=action-button]):active:where(:not(:disabled)),:host([status=streaming]) :where([part=action-button]):active:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-chat-composer-busy-bg,var(--lr-color-text-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))}@media (prefers-reduced-motion:reduce){[part=base],[part=action-button]{transition:none!important}}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{display:block}[part=base]{gap:var(--lr-space-xs);box-sizing:border-box;border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);padding:var(--lr-space-s);transition:border-color var(--lr-transition-fast);flex-direction:column;display:flex}[part=base]:focus-within{border-color:var(--lr-color-brand)}:host([frame=plain]) [part=base]{background:0 0;border:0;border-radius:0;padding:0}:host([frame=plain]) [part=base]:focus-within{box-shadow:inset 0 calc(-1 * var(--lr-focus-ring-width)) 0 0 var(--lr-focus-ring-color)}:host(:disabled) [part=base]{opacity:var(--lr-opacity-disabled);cursor:not-allowed}[part=chips]{gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part=chips][hidden]{display:none}[part=row]{align-items:flex-end;gap:var(--lr-space-s);display:flex}[part=start]{flex:none;align-items:center;padding-block-end:var(--lr-space-xs);display:flex}[part=start][hidden]{display:none}[part=textarea]{box-sizing:border-box;resize:none;min-inline-size:0;color:inherit;font:inherit;line-height:var(--lr-line-height-normal);padding-block:var(--lr-space-xs);background:0 0;border:none;outline:none;flex:auto;overflow:hidden}[part=textarea][wrap=off]{overflow-x:auto}[part=textarea]::placeholder{color:var(--lr-color-text-quiet)}[part=textarea]:disabled{cursor:not-allowed}[part=end]{align-items:center;gap:var(--lr-space-xs);flex:none;display:flex}[part=action-button]{box-sizing:border-box;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);border-radius:var(--lr-radius);background:var(--lr-color-brand);color:var(--lr-color-on-brand);font-size:var(--lr-font-size-lg);line-height:var(--lr-line-height-none);cursor:pointer;transition:background-color var(--lr-transition-fast);border:none;flex:none;justify-content:center;align-items:center;display:inline-flex}:where([part=action-button]):hover:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-hover))}:where([part=action-button]):active:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=action-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=action-button]:disabled{cursor:not-allowed;opacity:var(--lr-opacity-disabled)}[part=send-glyph],[part=stop-glyph]{display:inline-flex}:host(:dir(rtl)) [part=send-glyph]{transform:scaleX(-1)}:host([status=sending]) [part=action-button],:host([status=streaming]) [part=action-button]{background:var(--lr-chat-composer-busy-bg,var(--lr-color-text-quiet))}:host([status=sending]) :where([part=action-button]):hover:where(:not(:disabled)),:host([status=streaming]) :where([part=action-button]):hover:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-chat-composer-busy-bg,var(--lr-color-text-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-hover))}:host([status=sending]) :where([part=action-button]):active:where(:not(:disabled)),:host([status=streaming]) :where([part=action-button]):active:where(:not(:disabled)){background:color-mix(in oklab, var(--lr-chat-composer-busy-bg,var(--lr-color-text-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))}@media (prefers-reduced-motion:reduce){[part=base],[part=action-button]{transition:none!important}}`;export{styles};
@@ -1,4 +1,4 @@
1
- var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing,svg}from"lit";import{property,state,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{normalizeLyraTimestamp}from"../timestamp.js";import{nextId}from"../../../internal/a11y.js";import{chevronIcon}from"../../../internal/icons.js";import{getDateTimeFormat}from"../../../internal/intl-cache.js";import{literalSetConverter}from"../../../internal/converters.js";import"../../utility/live-region/live-region.class.js";import{styles}from"./chat-message.styles.js";import{LYRA_DEFAULT_chatCompleteAnnounce,LYRA_DEFAULT_chatFailedAnnounce,LYRA_DEFAULT_chatFailedToSend,LYRA_DEFAULT_chatResponding,LYRA_DEFAULT_chatSending,LYRA_DEFAULT_collapse,LYRA_DEFAULT_collapseMessage,LYRA_DEFAULT_details,LYRA_DEFAULT_expandMessage,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_promptStudioRoleAssistant,LYRA_DEFAULT_promptStudioRoleSystem,LYRA_DEFAULT_promptStudioRoleUser,LYRA_DEFAULT_retry,LYRA_DEFAULT_search,LYRA_DEFAULT_select}from"../../../internal/default-strings.generated.js";const ICON_VIEW_BOX="0 0 24 24",ICON_STROKE_WIDTH="1.75";function retryIcon(){return svg`
1
+ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing,svg}from"lit";import{property,state,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{normalizeLyraTimestamp}from"../timestamp.js";import{nextId}from"../../../internal/a11y.js";import{chevronIcon}from"../../../internal/icons.js";import{getDateTimeFormat}from"../../../internal/intl-cache.js";import{literalSetConverter}from"../../../internal/converters.js";import{activeElementIn}from"../../../internal/active-element.js";import"../../utility/live-region/live-region.class.js";import{styles}from"./chat-message.styles.js";import{LYRA_DEFAULT_chatCompleteAnnounce,LYRA_DEFAULT_chatFailedAnnounce,LYRA_DEFAULT_chatFailedToSend,LYRA_DEFAULT_chatResponding,LYRA_DEFAULT_chatSending,LYRA_DEFAULT_collapse,LYRA_DEFAULT_collapseMessage,LYRA_DEFAULT_details,LYRA_DEFAULT_expandMessage,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_promptStudioRoleAssistant,LYRA_DEFAULT_promptStudioRoleSystem,LYRA_DEFAULT_promptStudioRoleUser,LYRA_DEFAULT_retry,LYRA_DEFAULT_search,LYRA_DEFAULT_select}from"../../../internal/default-strings.generated.js";const ICON_VIEW_BOX="0 0 24 24",ICON_STROKE_WIDTH="1.75";function retryIcon(){return svg`
2
2
  <svg
3
3
  width="1em"
4
4
  height="1em"
@@ -11,7 +11,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
11
11
  aria-hidden="true"
12
12
  focusable="false"
13
13
  ><polyline points="1 4 1 10 7 10"></polyline><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"></path></svg>
14
- `}function defaultFormatTimestamp(date,locale){return getDateTimeFormat(locale,{hour:"numeric",minute:"2-digit"}).format(date)}const STATUS_TEXT_KEY={sending:"chatSending",streaming:"chatResponding",failed:"chatFailedToSend"},CHAT_MESSAGE_STATUS=literalSetConverter(["sending","sent","failed","streaming"],"sent");class LyraChatMessage extends LyraElement{constructor(){super(...arguments),this.messageRole="assistant",this.messageId="",this.collapsible=!1,this.collapsed=!1,this.attachmentsPosition="after",this.actionsPosition="inside",this.hasAvatarSlot=!1,this.hasBadgesSlot=!1,this.hasAttachmentsSlot=!1,this.hasActionsSlot=!1,this.hasFailureSlot=!1,this.bodyId=nextId("chat-message-body"),this._status="sent",this.previousStatus="sent",this.isMounting=!0,this.onAvatarSlotChange=e=>{this.hasAvatarSlot=e.target.assignedElements({flatten:!0}).length>0},this.onBadgesSlotChange=e=>{this.hasBadgesSlot=e.target.assignedElements({flatten:!0}).length>0},this.onAttachmentsSlotChange=e=>{this.hasAttachmentsSlot=e.target.assignedElements({flatten:!0}).length>0},this.onActionsSlotChange=e=>{this.hasActionsSlot=e.target.assignedElements({flatten:!0}).length>0},this.onFailureSlotChange=e=>{this.hasFailureSlot=e.target.assignedElements({flatten:!0}).length>0},this.toggleCollapsed=()=>{const detail={collapsed:!this.collapsed};this.emit("lr-toggle-request",detail,{cancelable:!0}).defaultPrevented||(this.collapsed=detail.collapsed,this.emit("lr-toggle",detail))},this.onRetryClick=()=>{this.emit("lr-message-retry",{messageId:this.messageId||void 0}),this.status!=="failed"&&this.bubbleEl?.focus()}}static{this.defaultStrings={...super.defaultStrings,chatCompleteAnnounce:LYRA_DEFAULT_chatCompleteAnnounce,chatFailedAnnounce:LYRA_DEFAULT_chatFailedAnnounce,chatFailedToSend:LYRA_DEFAULT_chatFailedToSend,chatResponding:LYRA_DEFAULT_chatResponding,chatSending:LYRA_DEFAULT_chatSending,collapse:LYRA_DEFAULT_collapse,collapseMessage:LYRA_DEFAULT_collapseMessage,details:LYRA_DEFAULT_details,expandMessage:LYRA_DEFAULT_expandMessage,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,promptStudioRoleAssistant:LYRA_DEFAULT_promptStudioRoleAssistant,promptStudioRoleSystem:LYRA_DEFAULT_promptStudioRoleSystem,promptStudioRoleUser:LYRA_DEFAULT_promptStudioRoleUser,retry:LYRA_DEFAULT_retry,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select}}static{this.styles=[LyraElement.styles,styles]}static{this.properties={status:{reflect:!0,noAccessor:!0,converter:CHAT_MESSAGE_STATUS}}}get status(){return this._status}set status(value){const normalized=CHAT_MESSAGE_STATUS.normalizeReflected(this,"status",value),old=this._status;normalized!==old&&(this.previousStatus=old,this._status=normalized,this.requestUpdate("status",old))}willUpdate(changed){super.willUpdate(changed),this.hasUpdated?changed.has("status")&&(this.status==="failed"?this.hasFailureSlot=this.hasSlotted("failure"):this.previousStatus==="failed"&&this.hasFailureSlot&&this.isFocusWithinFailureSlot()&&this.bubbleEl?.focus()):(this.hasAvatarSlot=this.hasSlotted("avatar"),this.hasBadgesSlot=this.hasSlotted("badges"),this.hasAttachmentsSlot=this.hasSlotted("attachments"),this.hasActionsSlot=this.hasSlotted("actions"),this.status==="failed"&&(this.hasFailureSlot=this.hasSlotted("failure")))}updated(changed){super.updated(changed);const wasMounting=this.isMounting;this.isMounting=!1,!wasMounting&&changed.has("status")&&this.announceStatusChange(this.previousStatus)}connectedCallback(){super.connectedCallback(),this.statusAtDisconnect!==void 0&&(this.isMounting=this.status!==this.statusAtDisconnect&&this.isUpdatePending,this.statusAtDisconnect=void 0)}disconnectedCallback(){this.statusAtDisconnect=this.status,this.isMounting=!0,super.disconnectedCallback()}hasSlotted(name){return Array.from(this.children).some(el=>el.getAttribute("slot")===name)}isFocusWithinFailureSlot(){const active=this.ownerDocument.activeElement;return active?Array.from(this.children).some(el=>el.getAttribute("slot")==="failure"&&el.contains(active)):!1}get normalizedTimestamp(){return normalizeLyraTimestamp(this.timestamp)}get statusText(){return this.status==="sent"?void 0:this.localize(STATUS_TEXT_KEY[this.status])}announceStatusChange(previous){if(previous===this.status)return;const region=this.liveRegion;if(region)if(this.status==="failed"){if(this.hasFailureSlot)return;region.mode="assertive",region.announce(this.localize("chatFailedAnnounce"),{force:!0})}else previous==="streaming"&&this.status==="sent"&&(region.mode="polite",region.announce(this.localize("chatCompleteAnnounce"),{force:!0}))}render(){const ts=this.normalizedTimestamp,formatter=this.formatTimestamp??(date=>defaultFormatTimestamp(date,this.effectiveLocale)),suppressBuiltInFailedUi=this.status==="failed"&&this.hasFailureSlot,statusText=suppressBuiltInFailedUi?void 0:this.statusText,showHeader=this.hasAvatarSlot||this.hasBadgesSlot||this.collapsible,actionsOutside=this.actionsPosition==="outside",showFooter=!!statusText||!!ts||!actionsOutside&&this.hasActionsSlot,authorLabel=this.localize(this.messageRole==="user"?"promptStudioRoleUser":this.messageRole==="system"?"promptStudioRoleSystem":"promptStudioRoleAssistant"),articleLabel=this.hasAttribute("aria-label")?this.getAttribute("aria-label")??"":authorLabel,actionsBlock=html`<span part="actions" ?hidden=${!this.hasActionsSlot}
14
+ `}function defaultFormatTimestamp(date,locale){return getDateTimeFormat(locale,{hour:"numeric",minute:"2-digit"}).format(date)}const STATUS_TEXT_KEY={sending:"chatSending",streaming:"chatResponding",failed:"chatFailedToSend"},CHAT_MESSAGE_STATUS=literalSetConverter(["sending","sent","failed","streaming"],"sent");class LyraChatMessage extends LyraElement{constructor(){super(...arguments),this.messageRole="assistant",this.messageId="",this.collapsible=!1,this.collapsed=!1,this.attachmentsPosition="after",this.actionsPosition="inside",this.hasAvatarSlot=!1,this.hasBadgesSlot=!1,this.hasAttachmentsSlot=!1,this.hasActionsSlot=!1,this.hasFailureSlot=!1,this.bodyId=nextId("chat-message-body"),this._status="sent",this.previousStatus="sent",this.isMounting=!0,this.onAvatarSlotChange=e=>{this.hasAvatarSlot=e.target.assignedElements({flatten:!0}).length>0},this.onBadgesSlotChange=e=>{this.hasBadgesSlot=e.target.assignedElements({flatten:!0}).length>0},this.onAttachmentsSlotChange=e=>{this.hasAttachmentsSlot=e.target.assignedElements({flatten:!0}).length>0},this.onActionsSlotChange=e=>{this.hasActionsSlot=e.target.assignedElements({flatten:!0}).length>0},this.onFailureSlotChange=e=>{this.hasFailureSlot=e.target.assignedElements({flatten:!0}).length>0},this.toggleCollapsed=()=>{const detail={collapsed:!this.collapsed};this.emit("lr-toggle-request",detail,{cancelable:!0}).defaultPrevented||(this.collapsed=detail.collapsed,this.emit("lr-toggle",detail))},this.onRetryClick=()=>{this.emit("lr-message-retry",{messageId:this.messageId||void 0}),this.status!=="failed"&&this.bubbleEl?.focus()}}static{this.defaultStrings={...super.defaultStrings,chatCompleteAnnounce:LYRA_DEFAULT_chatCompleteAnnounce,chatFailedAnnounce:LYRA_DEFAULT_chatFailedAnnounce,chatFailedToSend:LYRA_DEFAULT_chatFailedToSend,chatResponding:LYRA_DEFAULT_chatResponding,chatSending:LYRA_DEFAULT_chatSending,collapse:LYRA_DEFAULT_collapse,collapseMessage:LYRA_DEFAULT_collapseMessage,details:LYRA_DEFAULT_details,expandMessage:LYRA_DEFAULT_expandMessage,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,promptStudioRoleAssistant:LYRA_DEFAULT_promptStudioRoleAssistant,promptStudioRoleSystem:LYRA_DEFAULT_promptStudioRoleSystem,promptStudioRoleUser:LYRA_DEFAULT_promptStudioRoleUser,retry:LYRA_DEFAULT_retry,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select}}static{this.styles=[LyraElement.styles,styles]}static{this.properties={status:{reflect:!0,noAccessor:!0,converter:CHAT_MESSAGE_STATUS}}}get status(){return this._status}set status(value){const normalized=CHAT_MESSAGE_STATUS.normalizeReflected(this,"status",value),old=this._status;normalized!==old&&(this.previousStatus=old,this._status=normalized,this.requestUpdate("status",old))}willUpdate(changed){super.willUpdate(changed),this.hasUpdated?changed.has("status")&&(this.status==="failed"?this.hasFailureSlot=this.hasSlotted("failure"):this.previousStatus==="failed"&&this.hasFailureSlot&&this.isFocusWithinFailureSlot()&&this.bubbleEl?.focus()):(this.hasAvatarSlot=this.hasSlotted("avatar"),this.hasBadgesSlot=this.hasSlotted("badges"),this.hasAttachmentsSlot=this.hasSlotted("attachments"),this.hasActionsSlot=this.hasSlotted("actions"),this.status==="failed"&&(this.hasFailureSlot=this.hasSlotted("failure")))}updated(changed){super.updated(changed);const wasMounting=this.isMounting;this.isMounting=!1,!wasMounting&&changed.has("status")&&this.announceStatusChange(this.previousStatus)}connectedCallback(){super.connectedCallback(),this.statusAtDisconnect!==void 0&&(this.isMounting=this.status!==this.statusAtDisconnect&&this.isUpdatePending,this.statusAtDisconnect=void 0)}disconnectedCallback(){this.statusAtDisconnect=this.status,this.isMounting=!0,super.disconnectedCallback()}hasSlotted(name){return Array.from(this.children).some(el=>el.getAttribute("slot")===name)}isFocusWithinFailureSlot(){const active=activeElementIn(this.ownerDocument);try{return!active||active.nodeType!==Node.ELEMENT_NODE?!1:Array.from(this.children).some(el=>el.getAttribute("slot")==="failure"&&el.contains(active))}catch{return!1}}get normalizedTimestamp(){return normalizeLyraTimestamp(this.timestamp)}get statusText(){return this.status==="sent"?void 0:this.localize(STATUS_TEXT_KEY[this.status])}announceStatusChange(previous){if(previous===this.status)return;const region=this.liveRegion;if(region)if(this.status==="failed"){if(this.hasFailureSlot)return;region.mode="assertive",region.announce(this.localize("chatFailedAnnounce"),{force:!0})}else previous==="streaming"&&this.status==="sent"&&(region.mode="polite",region.announce(this.localize("chatCompleteAnnounce"),{force:!0}))}render(){const ts=this.normalizedTimestamp,formatter=this.formatTimestamp??(date=>defaultFormatTimestamp(date,this.effectiveLocale)),suppressBuiltInFailedUi=this.status==="failed"&&this.hasFailureSlot,statusText=suppressBuiltInFailedUi?void 0:this.statusText,showHeader=this.hasAvatarSlot||this.hasBadgesSlot||this.collapsible,actionsOutside=this.actionsPosition==="outside",showFooter=!!statusText||!!ts||!actionsOutside&&this.hasActionsSlot,authorLabel=this.localize(this.messageRole==="user"?"promptStudioRoleUser":this.messageRole==="system"?"promptStudioRoleSystem":"promptStudioRoleAssistant"),articleLabel=this.hasAttribute("aria-label")?this.getAttribute("aria-label")??"":authorLabel,actionsBlock=html`<span part="actions" ?hidden=${!this.hasActionsSlot}
15
15
  ><slot name="actions" @slotchange=${this.onActionsSlotChange}></slot
16
16
  ></span>`,attachmentsBlock=html`<div part="attachments" ?hidden=${!this.hasAttachmentsSlot}>
17
17
  <slot name="attachments" @slotchange=${this.onAttachmentsSlotChange}></slot>
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{font-size:var(--lr-font-size-md-sm);line-height:var(--lr-line-height-normal);display:block}[part=bubble]{gap:var(--lr-space-xs);max-inline-size:var(--lr-chat-message-max-width,80%);padding:var(--lr-chat-message-bubble-padding,var(--lr-space-m));border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-chat-message-bubble-radius,var(--lr-radius));background:var(--lr-chat-message-bubble-bg,var(--lr-color-surface));color:var(--lr-chat-message-bubble-color,var(--lr-color-text));overflow-wrap:anywhere;flex-direction:column;display:flex}:host([message-role=user]) [part=bubble]{background:var(--lr-chat-message-user-bubble-bg,var(--lr-color-brand-quiet));color:var(--lr-chat-message-user-bubble-color,var(--lr-color-text));border-color:#0000;margin-inline-start:auto}:host([message-role=assistant]) [part=bubble]{margin-inline-end:auto}:host([message-role=system]) [part=bubble]{color:var(--lr-chat-message-system-color,var(--lr-color-text-quiet));border-style:dashed;margin-inline-end:auto;font-style:italic}:host([status=failed]) [part=bubble]{border-color:var(--lr-chat-message-failed-border-color,var(--lr-color-danger));background:var(--lr-chat-message-failed-bg,var(--lr-color-danger-quiet))}:host([status=streaming]) [part=bubble]{border-color:var(--lr-chat-message-streaming-border-color,var(--lr-color-brand))}[part=header]{align-items:center;gap:var(--lr-space-xs);display:flex}[part=header][hidden],[part=avatar][hidden],[part=badges][hidden],[part=attachments][hidden],[part=footer][hidden],[part=actions][hidden],[part=body][hidden]{display:none}[part=avatar]{flex:none;display:inline-flex}[part=badges]{align-items:center;gap:var(--lr-space-xs);flex-wrap:wrap;flex:auto;min-inline-size:0;display:flex}[part=collapse-button]{min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:var(--lr-color-text-quiet);border-radius:var(--lr-radius);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;margin-inline-start:auto;display:inline-flex}[part=collapse-button]:hover{background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=collapse-button]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-brand)}[part=collapse-button]:focus-visible,[part=retry-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=collapse-button] .chevron{transition:transform var(--lr-transition-fast);display:inline-flex}:host(:not([collapsed])) [part=collapse-button] .chevron{transform:rotate(90deg)}:host([collapsed]:dir(rtl)) [part=collapse-button] .chevron{transform:scaleX(-1)}[part=attachments]{gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part=failure]{display:contents}[part=footer]{align-items:center;gap:var(--lr-space-xs);font-size:var(--lr-font-size-xs);color:var(--lr-chat-message-footer-color,var(--lr-color-text-quiet));flex-wrap:wrap;display:flex}[part=actions]{align-items:center;gap:var(--lr-space-xs);display:flex}:host([message-role=user]) [part=actions]{margin-inline-start:auto}:host([message-role=assistant]) [part=actions],:host([message-role=system]) [part=actions]{margin-inline-end:auto}:host([actions-position=outside]) [part=actions]{margin-block-start:var(--lr-space-2xs)}:host([actions-position=outside][message-role=user]) [part=actions]{justify-content:flex-end}:host([actions-position=outside][message-role=assistant]) [part=actions],:host([actions-position=outside][message-role=system]) [part=actions]{justify-content:flex-start}[part=timestamp]{white-space:nowrap}:host([message-role=user]) [part=footer]{color:var(--lr-chat-message-user-footer-color,var(--lr-color-text))}:host([status=failed]) [part=footer]{color:var(--lr-chat-message-failed-footer-color,var(--lr-color-danger))}[part=status-indicator]{inline-size:var(--lr-size-0-5rem);block-size:var(--lr-size-0-5rem);background:var(--lr-chat-message-indicator-color,var(--lr-color-text-quiet));border-radius:50%;flex:none}:host([status=streaming]) [part=status-indicator]{background:var(--lr-chat-message-streaming-indicator-color,var(--lr-color-brand));animation:lr-chat-message-pulse var(--lr-transition-ambient) infinite}:host([status=failed]) [part=status-indicator]{background:var(--lr-chat-message-failed-indicator-color,var(--lr-color-danger))}[part=status-text]{white-space:nowrap}:host([status=failed]) [part=status-text]{color:var(--lr-chat-message-failed-status-color,var(--lr-color-danger));font-weight:var(--lr-font-weight-semibold)}@keyframes lr-chat-message-pulse{0%,to{opacity:1}50%{opacity:.35}}[part=retry-button]{align-items:center;gap:var(--lr-space-xs);padding:var(--lr-size-0-125rem) var(--lr-space-xs);border:var(--lr-border-width-thin) solid var(--lr-color-danger);border-radius:var(--lr-radius);color:var(--lr-color-danger);font:inherit;font-size:var(--lr-font-size-xs);cursor:pointer;background:0 0;flex:none;display:inline-flex}[part=retry-button]:hover{background:var(--lr-color-danger-quiet)}[part=retry-button]:active{background:color-mix(in oklab, var(--lr-color-danger-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=retry-button] svg{inline-size:var(--lr-size-0-875em);block-size:var(--lr-size-0-875em)}@media (prefers-reduced-motion:reduce){[part=status-indicator]{opacity:1;animation:none!important}[part=collapse-button] .chevron{transition:none!important}}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{font-size:var(--lr-font-size-md-sm);line-height:var(--lr-line-height-normal);display:block}[part=bubble]{gap:var(--lr-space-xs);max-inline-size:var(--lr-chat-message-max-width,80%);padding:var(--lr-chat-message-bubble-padding,var(--lr-space-m));border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-chat-message-bubble-radius,var(--lr-radius));background:var(--lr-chat-message-bubble-bg,var(--lr-color-surface));color:var(--lr-chat-message-bubble-color,var(--lr-color-text));overflow-wrap:anywhere;flex-direction:column;display:flex}:host([message-role=user]) [part=bubble]{background:var(--lr-chat-message-user-bubble-bg,var(--lr-color-brand-quiet));color:var(--lr-chat-message-user-bubble-color,var(--lr-color-text));border-color:#0000;margin-inline-start:auto}:host([message-role=assistant]) [part=bubble]{margin-inline-end:auto}:host([message-role=system]) [part=bubble]{color:var(--lr-chat-message-system-color,var(--lr-color-text-quiet));border-style:dashed;margin-inline-end:auto;font-style:italic}:host([status=failed]) [part=bubble]{border-color:var(--lr-chat-message-failed-border-color,var(--lr-color-danger));background:var(--lr-chat-message-failed-bg,var(--lr-color-danger-quiet))}:host([status=streaming]) [part=bubble]{border-color:var(--lr-chat-message-streaming-border-color,var(--lr-color-brand))}[part=header]{align-items:center;gap:var(--lr-space-xs);display:flex}[part=header][hidden],[part=avatar][hidden],[part=badges][hidden],[part=attachments][hidden],[part=footer][hidden],[part=actions][hidden],[part=body][hidden]{display:none}[part=avatar]{flex:none;display:inline-flex}[part=badges]{align-items:center;gap:var(--lr-space-xs);flex-wrap:wrap;flex:auto;min-inline-size:0;display:flex}[part=collapse-button]{font:inherit;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:var(--lr-color-text-quiet);border-radius:var(--lr-radius);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;margin-inline-start:auto;display:inline-flex}[part=collapse-button]:hover{background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=collapse-button]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-brand)}[part=collapse-button]:focus-visible,[part=retry-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=collapse-button] .chevron{transition:transform var(--lr-transition-fast);display:inline-flex}:host(:not([collapsed])) [part=collapse-button] .chevron{transform:rotate(90deg)}:host([collapsed]:dir(rtl)) [part=collapse-button] .chevron{transform:scaleX(-1)}[part=attachments]{gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part=failure]{display:contents}[part=footer]{align-items:center;gap:var(--lr-space-xs);font-size:var(--lr-font-size-xs);color:var(--lr-chat-message-footer-color,var(--lr-color-text-quiet));flex-wrap:wrap;display:flex}[part=actions]{align-items:center;gap:var(--lr-space-xs);display:flex}:host([message-role=user]) [part=actions]{margin-inline-start:auto}:host([message-role=assistant]) [part=actions],:host([message-role=system]) [part=actions]{margin-inline-end:auto}:host([actions-position=outside]) [part=actions]{margin-block-start:var(--lr-space-2xs)}:host([actions-position=outside][message-role=user]) [part=actions]{justify-content:flex-end}:host([actions-position=outside][message-role=assistant]) [part=actions],:host([actions-position=outside][message-role=system]) [part=actions]{justify-content:flex-start}[part=timestamp]{white-space:nowrap}:host([message-role=user]) [part=footer]{color:var(--lr-chat-message-user-footer-color,var(--lr-color-text))}:host([status=failed]) [part=footer]{color:var(--lr-chat-message-failed-footer-color,var(--lr-color-danger))}[part=status-indicator]{inline-size:var(--lr-size-0-5rem);block-size:var(--lr-size-0-5rem);background:var(--lr-chat-message-indicator-color,var(--lr-color-text-quiet));border-radius:50%;flex:none}:host([status=streaming]) [part=status-indicator]{background:var(--lr-chat-message-streaming-indicator-color,var(--lr-color-brand));animation:lr-chat-message-pulse var(--lr-transition-ambient) infinite}:host([status=failed]) [part=status-indicator]{background:var(--lr-chat-message-failed-indicator-color,var(--lr-color-danger))}[part=status-text]{white-space:nowrap}:host([status=failed]) [part=status-text]{color:var(--lr-chat-message-failed-status-color,var(--lr-color-danger));font-weight:var(--lr-font-weight-semibold)}@keyframes lr-chat-message-pulse{0%,to{opacity:1}50%{opacity:.35}}[part=retry-button]{align-items:center;gap:var(--lr-space-xs);padding:var(--lr-size-0-125rem) var(--lr-space-xs);border:var(--lr-border-width-thin) solid var(--lr-color-danger);border-radius:var(--lr-radius);color:var(--lr-color-danger);font:inherit;font-size:var(--lr-font-size-xs);cursor:pointer;background:0 0;flex:none;display:inline-flex}[part=retry-button]:hover{background:var(--lr-color-danger-quiet)}[part=retry-button]:active{background:color-mix(in oklab, var(--lr-color-danger-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=retry-button] svg{inline-size:var(--lr-size-0-875em);block-size:var(--lr-size-0-875em)}@media (prefers-reduced-motion:reduce){[part=status-indicator]{opacity:1;animation:none!important}[part=collapse-button] .chevron{transition:none!important}}`;export{styles};
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);flex-direction:column;block-size:100%;min-block-size:0;display:flex;position:relative;container-type:inline-size}[part=base]{flex-direction:column;flex:auto;min-block-size:0;display:flex;position:relative}[part=scroll]{overflow-anchor:none;min-block-size:0;padding:var(--lr-space-m);flex:auto;overflow:hidden auto}[part=base][data-virtual] [part=scroll]{block-size:auto;padding:0;overflow:visible}[part=content]{min-block-size:100%;position:relative}[part=base][data-virtual] [part=content]{block-size:100%;min-block-size:0}[part=base][data-virtual] ::slotted(lr-virtual-list){--lr-virtual-list-height:100%;block-size:100%}[part=unread-divider]{align-items:center;gap:var(--lr-space-s);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs);text-align:center;pointer-events:none;display:flex;position:absolute;inset-inline:0;transform:translateY(-50%)}[part=unread-divider]:before,[part=unread-divider]:after{content:"";block-size:var(--lr-border-width-thin);background:var(--lr-color-border);flex:auto}[part=jump-pill]{max-inline-size:calc(100% - 2 * var(--lr-space-m));padding-inline:var(--lr-space-m);padding-block:var(--lr-space-xs);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius-pill);background:var(--lr-color-surface);color:var(--lr-color-text);box-shadow:var(--lr-shadow-m);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;transition:opacity var(--lr-transition-fast);position:absolute;inset-block-end:var(--lr-space-m);inset-inline-start:50%;overflow:hidden;transform:translate(-50%)}:host(:dir(rtl)) [part=jump-pill]{transform:translate(50%)}@media (prefers-reduced-motion:reduce){[part=jump-pill]{transition:none}}[part=jump-pill]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=jump-pill]:hover{background:var(--lr-color-brand-quiet)}[part=jump-pill]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}@container (inline-size<=20rem){[part=jump-pill]{max-inline-size:calc(100% - 2 * var(--lr-space-s))}}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);flex-direction:column;block-size:100%;min-block-size:0;display:flex;position:relative;container-type:inline-size}[part=base]{flex-direction:column;flex:auto;min-block-size:0;display:flex;position:relative}[part=scroll]{overflow-anchor:none;min-block-size:0;padding:var(--lr-space-m);flex:auto;overflow:hidden auto}[part=base][data-virtual] [part=scroll]{block-size:auto;padding:0;overflow:visible}[part=content]{min-block-size:100%;position:relative}[part=base][data-virtual] [part=content]{block-size:100%;min-block-size:0}[part=base][data-virtual] ::slotted(lr-virtual-list){--lr-virtual-list-height:100%;block-size:100%}[part=unread-divider]{align-items:center;gap:var(--lr-space-s);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs);text-align:center;pointer-events:none;display:flex;position:absolute;inset-inline:0;transform:translateY(-50%)}[part=unread-divider]:before,[part=unread-divider]:after{content:"";block-size:var(--lr-border-width-thin);background:var(--lr-color-border);flex:auto}[part=jump-pill]{font:inherit;max-inline-size:calc(100% - 2 * var(--lr-space-m));padding-inline:var(--lr-space-m);padding-block:var(--lr-space-xs);border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius-pill);background:var(--lr-color-surface);color:var(--lr-color-text);box-shadow:var(--lr-shadow-m);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;transition:opacity var(--lr-transition-fast);position:absolute;inset-block-end:var(--lr-space-m);inset-inline-start:50%;overflow:hidden;transform:translate(-50%)}:host(:dir(rtl)) [part=jump-pill]{transform:translate(50%)}@media (prefers-reduced-motion:reduce){[part=jump-pill]{transition:none}}[part=jump-pill]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=jump-pill]:hover{background:var(--lr-color-brand-quiet)}[part=jump-pill]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}@container (inline-size<=20rem){[part=jump-pill]{max-inline-size:calc(100% - 2 * var(--lr-space-s))}}`;export{styles};
@@ -1,4 +1,4 @@
1
- import{html,nothing}from"lit";import{unsafeHTML}from"lit/directives/unsafe-html.js";import{chevronIcon}from"../../../internal/icons.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{styleMap}from"lit/directives/style-map.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{boundedSelectionRects,boundedSelectionText}from"../../../internal/text-quote.js";import{writeClipboardText}from"../../../internal/clipboard.js";import{normalizeShikiLanguage,SHIKI_THEMES}from"./shiki-types.js";import{resolveIsDarkTheme}from"./shiki-dark-theme.js";function codeBlockToggleLabel(localize,collapsed){return localize(collapsed?"expandCode":"collapseCode")}function codeBlockCopyLabel(localize,justCopied,copyFailed){return localize(copyFailed?"copyFailed":justCopied?"copiedToClipboard":"copyCode")}function codeBlockBodyLabel(localize,filename,language){return filename||(language?localize("codeRegionWithLanguage",void 0,{language}):localize("codeRegion"))}function addBoundedLineRange(lines,start,end,maxLine){if(!Number.isFinite(start)||!Number.isFinite(end)||maxLine<1)return;const low=Math.max(1,Math.min(Math.trunc(start),Math.trunc(end))),high=Math.min(Math.trunc(maxLine),Math.max(Math.trunc(start),Math.trunc(end)));for(let line=low;line<=high;line++)lines.add(line)}const CODE_BLOCK_COPY_CONFIRM_MS=1500;function codeBlockLineCount(code){return code.split(/\r\n|\r|\n/).length}function clampCodeBlockFocusedLine(focusedLine,lineCount){return Math.min(Math.max(1,focusedLine),lineCount)}function codeBlockLineHasFocus(host){return host.shadowRoot?.activeElement?.matches('[data-line][part~="line-button"]')??!1}function restoreCodeBlockLineFocus(host,line){const shadowActive=host.shadowRoot?.activeElement;if(shadowActive)return shadowActive.matches('[data-line][part~="line-button"]');const documentActive=host.ownerDocument.activeElement;if(documentActive&&documentActive!==host.ownerDocument.body&&documentActive!==host)return!1;const target=host.renderRoot.querySelector(`[data-line="${line}"][part~="line-button"]`);return target?.focus(),host.shadowRoot?.activeElement===target}function codeBlockLineHighlightSet(highlightLines,highlights,maxLine){const merged=parseHighlightLines(highlightLines,maxLine);if(!Array.isArray(highlights))return merged;for(const highlight of highlights){const anchor=lineRangeAnchor(highlight);if(!anchor)continue;const end=anchor.end??anchor.start;addBoundedLineRange(merged,anchor.start,end,maxLine)}return merged}function lineRangeAnchor(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const anchor=value.anchor;return anchor===null||typeof anchor!="object"||Array.isArray(anchor)?void 0:anchor.kind==="line-range"?anchor:void 0}catch{return}}function lineRangeAnchorById(highlights,id){if(Array.isArray(highlights))for(const highlight of highlights)try{if(highlight!==null&&typeof highlight=="object"&&highlight.id===id){const anchor=lineRangeAnchor(highlight);if(anchor)return anchor}}catch{}}function codeBlockActiveHighlightLineSet(highlights,activeHighlightId,maxLine){const result=new Set,anchor=lineRangeAnchorById(highlights,activeHighlightId);if(!anchor)return result;const end=anchor.end??anchor.start;return addBoundedLineRange(result,anchor.start,end,maxLine),result}function codeBlockPreSuppliedGrammar(languages,language){const normalized=normalizeShikiLanguage(language);return languages?.[normalized]??languages?.[language]}async function scrollCodeBlockToAnchor(host,target){const anchor=typeof target=="string"?lineRangeAnchorById(host.highlights,target):target;if(!anchor||anchor.kind!=="line-range"||anchor.start<1||anchor.start>codeBlockLineCount(host.code))return!1;await host.updateComplete;const body=host.renderRoot.querySelector('[part="body"]'),lineEl=host.renderRoot.querySelector(`[data-line="${anchor.start}"]`);if(!body||!lineEl)return!1;const offset=lineEl.offsetTop-body.clientHeight/2,ownerWindow=body.ownerDocument.defaultView,reducedMotion=!ownerWindow||prefersReducedMotion(ownerWindow);return body.scrollTo({top:Math.max(0,offset),behavior:reducedMotion?"auto":"smooth"}),!0}function codeBlockEventLine(e){const target=e.composedPath()[0];if(typeof target!="object"||target===null||target.nodeType!==1||typeof target.localName!="string"||typeof target.closest!="function")return null;const lineElement=target.closest('[data-line][part~="line-button"]'),line=Number(lineElement?.dataset.line);return Number.isInteger(line)&&line>=1?line:null}function codeBlockLineKeyAction(key,line,total){if(key==="Enter"||key===" ")return{kind:"activate"};let next=null;return key==="ArrowDown"?next=Math.min(total,line+1):key==="ArrowUp"?next=Math.max(1,line-1):key==="Home"?next=1:key==="End"&&(next=total),next===null||next===line?null:{kind:"move",line:next}}function codeBlockSelectionAnchor(shadowRoot){if(!shadowRoot)return null;const ownerDocument=shadowRoot.ownerDocument,globalSelection=ownerDocument.defaultView?.getSelection();let range=null;if(globalSelection?.getComposedRanges){const[composed]=globalSelection.getComposedRanges({shadowRoots:[shadowRoot]});composed&&(composed.startContainer!==composed.endContainer||composed.startOffset!==composed.endOffset)&&(range=ownerDocument.createRange(),range.setStart(composed.startContainer,composed.startOffset),range.setEnd(composed.endContainer,composed.endOffset))}const selection=shadowRoot.getSelection?.()??globalSelection;if(!range){if(!selection||selection.isCollapsed||selection.rangeCount===0)return null;range=selection.getRangeAt(0)}const text=boundedSelectionText(range);if(!text)return null;const lineOf=node=>{const attr=(node.nodeType===Node.ELEMENT_NODE?node:node.parentElement)?.closest("[data-line]")?.getAttribute("data-line");return attr==null?null:Number(attr)},start=lineOf(range.startContainer),end=lineOf(range.endContainer);return start===null||end===null?null:{text,anchor:{kind:"line-range",start:Math.min(start,end),end:Math.max(start,end)},rects:boundedSelectionRects(range)}}function codeBlockNeedsHighlightResync(changed){return changed.has("code")||changed.has("language")||changed.has("languages")||changed.has("highlightLines")||changed.has("highlights")||changed.has("activeHighlightId")||changed.has("lineNumbers")||changed.has("activatableLines")}function codeBlockShowsSkeleton(shikiReady,language,loaderPending){return!shikiReady&&!!language&&loaderPending}function applyCodeBlockAriaBusy(host,showingSkeleton){showingSkeleton?host.setAttribute("aria-busy","true"):host.removeAttribute("aria-busy")}function tokenizeCodeBlock(hl,options){try{return hl.codeToHtml(options.code,{lang:options.lang,themes:SHIKI_THEMES,transformers:[codeBlockLineTransformer(options)]})}catch{return null}}function parseHighlightLines(spec,maxLine=Number.MAX_SAFE_INTEGER){const lines=new Set;for(const raw of spec.split(",")){const segment=raw.trim();if(!segment)continue;const rangeMatch=/^(\d+)\s*-\s*(\d+)$/.exec(segment);if(rangeMatch){const a=Number(rangeMatch[1]),b=Number(rangeMatch[2]);addBoundedLineRange(lines,a,b,maxLine);continue}const single=/^(\d+)$/.exec(segment);if(single){addBoundedLineRange(lines,Number(single[1]),Number(single[1]),maxLine);continue}console.warn(`highlight-lines: ignored invalid segment "${segment}"`)}return lines}function codeBlockLineTransformer(options){return{name:"lr-code-block-parts",pre(node){if(node.properties.part=["pre"],options.lineNumbers){const classValue=node.properties.class,classes=Array.isArray(classValue)?classValue.map(String):classValue?[String(classValue)]:[];node.properties.class=[...classes,"line-numbers"]}delete node.properties.tabindex},code(node){node.properties.part=["code"]},line(node,line){node.properties["data-line"]=String(line);const parts=[],contentNode=node,children=contentNode.children??[];contentNode.children=children;let gutter;options.activatableLines&&options.lineNumbers?gutter={type:"element",tagName:"button",properties:{type:"button",class:["line-gutter"],part:["line-button"],"data-line":String(line),tabindex:String(options.focusedLine===line?0:-1),"aria-label":options.lineLabel(line)},children:[{type:"text",value:options.lineNumberText(line)}]}:options.lineNumbers&&(gutter={type:"element",tagName:"span",properties:{class:["line-number"],"aria-hidden":"true"},children:[{type:"text",value:options.lineNumberText(line)}]});const source={type:"element",tagName:"span",properties:{class:["line-source"]},children:[...children]};children.splice(0,children.length,...gutter?[gutter,source]:[source]),options.highlightedLines.has(line)&&(parts.push("line-highlight"),node.properties["data-highlighted"]=""),parts.length>0&&(node.properties.part=parts),options.activeLines.has(line)&&(node.properties["data-active"]="")}}}function renderCodeBlockPlainCode(options){const lines=options.code.split(/\r\n|\r|\n/),interactive=options.activatableLines&&options.lineNumbers;return html`<code
1
+ import{html,nothing}from"lit";import{unsafeHTML}from"lit/directives/unsafe-html.js";import{activeElementIn}from"../../../internal/active-element.js";import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";import{chevronIcon}from"../../../internal/icons.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{styleMap}from"lit/directives/style-map.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{boundedSelectionRects,boundedSelectionText}from"../../../internal/text-quote.js";import{writeClipboardText}from"../../../internal/clipboard.js";import{normalizeShikiLanguage,SHIKI_THEMES}from"./shiki-types.js";import{resolveIsDarkTheme}from"./shiki-dark-theme.js";const INVALID_HIGHLIGHT_LINES_WARNING_KEY="lyra-code-block-invalid-highlight-lines",INVALID_HIGHLIGHT_LINES_WARNING="<lr-code-block> and <lr-code-block-core>: invalid highlight-lines entries are ignored; use one-based line numbers or ranges such as `3-5,7`.";function codeBlockToggleLabel(localize,collapsed){return localize(collapsed?"expandCode":"collapseCode")}function codeBlockCopyLabel(localize,justCopied,copyFailed){return localize(copyFailed?"copyFailed":justCopied?"copiedToClipboard":"copyCode")}function codeBlockBodyLabel(localize,filename,language){return filename||(language?localize("codeRegionWithLanguage",void 0,{language}):localize("codeRegion"))}function addBoundedLineRange(lines,start,end,maxLine){if(!Number.isFinite(start)||!Number.isFinite(end)||maxLine<1)return;const low=Math.max(1,Math.min(Math.trunc(start),Math.trunc(end))),high=Math.min(Math.trunc(maxLine),Math.max(Math.trunc(start),Math.trunc(end)));for(let line=low;line<=high;line++)lines.add(line)}const CODE_BLOCK_COPY_CONFIRM_MS=1500;function codeBlockLineCount(code){return code.split(/\r\n|\r|\n/).length}function clampCodeBlockFocusedLine(focusedLine,lineCount){return Math.min(Math.max(1,focusedLine),lineCount)}function codeBlockLineHasFocus(host){return activeElementIn(host.shadowRoot)?.matches('[data-line][part~="line-button"]')??!1}function restoreCodeBlockLineFocus(host,line){const shadowActive=activeElementIn(host.shadowRoot);if(shadowActive)return shadowActive.matches('[data-line][part~="line-button"]');const documentActive=activeElementIn(host.ownerDocument);if(documentActive&&documentActive!==host.ownerDocument.body&&documentActive!==host)return!1;const target=host.renderRoot.querySelector(`[data-line="${line}"][part~="line-button"]`);return target?.focus(),activeElementIn(host.shadowRoot)===target}function codeBlockLineHighlightSet(highlightLines,highlights,maxLine){const merged=parseHighlightLines(highlightLines,maxLine);if(!Array.isArray(highlights))return merged;for(const highlight of highlights){const anchor=lineRangeAnchor(highlight);if(!anchor)continue;const end=anchor.end??anchor.start;addBoundedLineRange(merged,anchor.start,end,maxLine)}return merged}function lineRangeAnchor(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const anchor=value.anchor;return anchor===null||typeof anchor!="object"||Array.isArray(anchor)?void 0:anchor.kind==="line-range"?anchor:void 0}catch{return}}function lineRangeAnchorById(highlights,id){if(Array.isArray(highlights))for(const highlight of highlights)try{if(highlight!==null&&typeof highlight=="object"&&highlight.id===id){const anchor=lineRangeAnchor(highlight);if(anchor)return anchor}}catch{}}function codeBlockActiveHighlightLineSet(highlights,activeHighlightId,maxLine){const result=new Set,anchor=lineRangeAnchorById(highlights,activeHighlightId);if(!anchor)return result;const end=anchor.end??anchor.start;return addBoundedLineRange(result,anchor.start,end,maxLine),result}function codeBlockPreSuppliedGrammar(languages,language){const normalized=normalizeShikiLanguage(language);return languages?.[normalized]??languages?.[language]}async function scrollCodeBlockToAnchor(host,target){const anchor=typeof target=="string"?lineRangeAnchorById(host.highlights,target):target;if(!anchor||anchor.kind!=="line-range"||anchor.start<1||anchor.start>codeBlockLineCount(host.code))return!1;await host.updateComplete;const body=host.renderRoot.querySelector('[part="body"]'),lineEl=host.renderRoot.querySelector(`[data-line="${anchor.start}"]`);if(!body||!lineEl)return!1;const offset=lineEl.offsetTop-body.clientHeight/2,ownerWindow=body.ownerDocument.defaultView,reducedMotion=!ownerWindow||prefersReducedMotion(ownerWindow);return body.scrollTo({top:Math.max(0,offset),behavior:reducedMotion?"auto":"smooth"}),!0}function codeBlockEventLine(e){const target=e.composedPath()[0];if(typeof target!="object"||target===null||target.nodeType!==1||typeof target.localName!="string"||typeof target.closest!="function")return null;const lineElement=target.closest('[data-line][part~="line-button"]'),line=Number(lineElement?.dataset.line);return Number.isInteger(line)&&line>=1?line:null}function codeBlockLineKeyAction(key,line,total){if(key==="Enter"||key===" ")return{kind:"activate"};let next=null;return key==="ArrowDown"?next=Math.min(total,line+1):key==="ArrowUp"?next=Math.max(1,line-1):key==="Home"?next=1:key==="End"&&(next=total),next===null||next===line?null:{kind:"move",line:next}}function codeBlockSelectionAnchor(shadowRoot){if(!shadowRoot)return null;const ownerDocument=shadowRoot.ownerDocument,globalSelection=ownerDocument.defaultView?.getSelection();let range=null;if(globalSelection?.getComposedRanges){const[composed]=globalSelection.getComposedRanges({shadowRoots:[shadowRoot]});composed&&(composed.startContainer!==composed.endContainer||composed.startOffset!==composed.endOffset)&&(range=ownerDocument.createRange(),range.setStart(composed.startContainer,composed.startOffset),range.setEnd(composed.endContainer,composed.endOffset))}const selection=shadowRoot.getSelection?.()??globalSelection;if(!range){if(!selection||selection.isCollapsed||selection.rangeCount===0)return null;range=selection.getRangeAt(0)}const text=boundedSelectionText(range);if(!text)return null;const lineOf=node=>{const attr=(node.nodeType===Node.ELEMENT_NODE?node:node.parentElement)?.closest("[data-line]")?.getAttribute("data-line");return attr==null?null:Number(attr)},start=lineOf(range.startContainer),end=lineOf(range.endContainer);return start===null||end===null?null:{text,anchor:{kind:"line-range",start:Math.min(start,end),end:Math.max(start,end)},rects:boundedSelectionRects(range)}}function codeBlockNeedsHighlightResync(changed){return changed.has("code")||changed.has("language")||changed.has("languages")||changed.has("highlightLines")||changed.has("highlights")||changed.has("activeHighlightId")||changed.has("lineNumbers")||changed.has("activatableLines")}function codeBlockShowsSkeleton(shikiReady,language,loaderPending){return!shikiReady&&!!language&&loaderPending}function applyCodeBlockAriaBusy(host,showingSkeleton){showingSkeleton?host.setAttribute("aria-busy","true"):host.removeAttribute("aria-busy")}function tokenizeCodeBlock(hl,options){try{return hl.codeToHtml(options.code,{lang:options.lang,themes:SHIKI_THEMES,transformers:[codeBlockLineTransformer(options)]})}catch{return null}}function parseHighlightLines(spec,maxLine=Number.MAX_SAFE_INTEGER){const lines=new Set;for(const raw of spec.split(",")){const segment=raw.trim();if(!segment)continue;const rangeMatch=/^(\d+)\s*-\s*(\d+)$/.exec(segment);if(rangeMatch){const a=Number(rangeMatch[1]),b=Number(rangeMatch[2]);addBoundedLineRange(lines,a,b,maxLine);continue}const single=/^(\d+)$/.exec(segment);if(single){addBoundedLineRange(lines,Number(single[1]),Number(single[1]),maxLine);continue}devWarnOnce(INVALID_HIGHLIGHT_LINES_WARNING_KEY,INVALID_HIGHLIGHT_LINES_WARNING)}return lines}function codeBlockLineTransformer(options){return{name:"lr-code-block-parts",pre(node){if(node.properties.part=["pre"],options.lineNumbers){const classValue=node.properties.class,classes=Array.isArray(classValue)?classValue.map(String):classValue?[String(classValue)]:[];node.properties.class=[...classes,"line-numbers"]}delete node.properties.tabindex},code(node){node.properties.part=["code"]},line(node,line){node.properties["data-line"]=String(line);const parts=[],contentNode=node,children=contentNode.children??[];contentNode.children=children;let gutter;options.activatableLines&&options.lineNumbers?gutter={type:"element",tagName:"button",properties:{type:"button",class:["line-gutter"],part:["line-button"],"data-line":String(line),tabindex:String(options.focusedLine===line?0:-1),"aria-label":options.lineLabel(line)},children:[{type:"text",value:options.lineNumberText(line)}]}:options.lineNumbers&&(gutter={type:"element",tagName:"span",properties:{class:["line-number"],"aria-hidden":"true"},children:[{type:"text",value:options.lineNumberText(line)}]});const source={type:"element",tagName:"span",properties:{class:["line-source"]},children:[...children]};children.splice(0,children.length,...gutter?[gutter,source]:[source]),options.highlightedLines.has(line)&&(parts.push("line-highlight"),node.properties["data-highlighted"]=""),parts.length>0&&(node.properties.part=parts),options.activeLines.has(line)&&(node.properties["data-active"]="")}}}function renderCodeBlockPlainCode(options){const lines=options.code.split(/\r\n|\r|\n/),interactive=options.activatableLines&&options.lineNumbers;return html`<code
2
2
  part="code"
3
3
  class=${options.lineNumbers?"line-numbered-code":nothing}
4
4
  >${lines.map((line,index)=>{const lineNumber=index+1,isHighlighted=options.highlightedLines.has(lineNumber),isActive=options.activeLines.has(lineNumber),part=isHighlighted?"line-highlight":nothing,gutter=interactive?html`<button
@@ -1 +1 @@
1
- import{css}from"lit";const styles=css`:host{font-size:var(--lr-font-size-sm);display:block}[part=base]{border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);overflow:hidden}[part=header]{align-items:center;gap:var(--lr-space-xs);min-inline-size:0;padding:var(--lr-space-xs) var(--lr-space-s);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border);background:var(--lr-color-surface);font-family:var(--lr-font);display:flex}[part=toggle]{inline-size:var(--lr-size-1-25rem);block-size:var(--lr-size-1-25rem);min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:var(--lr-color-text-quiet);border-radius:var(--lr-radius);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}[part=toggle]:hover{background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=toggle]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-brand)}[part=toggle] .chevron{transition:transform var(--lr-transition-fast);display:inline-flex}:host(:not([collapsed])) [part=toggle] .chevron{transform:rotate(90deg)}:host([collapsed]:dir(rtl)) [part=toggle] .chevron{transform:scaleX(-1)}[part=filename]{text-overflow:ellipsis;white-space:nowrap;min-inline-size:0;font-family:var(--lr-code-block-font,var(--lr-font-mono));font-size:var(--lr-font-size-xs);font-weight:var(--lr-font-weight-semibold);color:var(--lr-color-text);flex:auto;overflow:hidden}[part=language]{text-overflow:ellipsis;white-space:nowrap;min-inline-size:0;max-inline-size:100%;padding:var(--lr-size-0-0625rem) var(--lr-size-0-4375rem);border-radius:var(--lr-radius-pill);background:var(--lr-color-brand-quiet);color:var(--lr-color-brand);font-size:var(--lr-size-0-6875rem);line-height:var(--lr-line-height-1-4);text-transform:uppercase;letter-spacing:var(--lr-size-0-02em);flex:0 auto;overflow:hidden}[part=copy-button]{color:var(--lr-color-text-quiet);font:inherit;font-size:var(--lr-font-size-xs);line-height:var(--lr-line-height-none);min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);padding:var(--lr-size-0-1875rem) var(--lr-space-xs);border-radius:var(--lr-radius);cursor:pointer;background:0 0;border:none;flex:none;margin-inline-start:auto}[part=copy-button]:hover{background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=copy-button]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-brand)}[part=toggle]:focus-visible,[part=copy-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=body]{max-block-size:var(--lr-code-block-max-height,none);display:block;overflow:auto}[part=body][hidden]{display:none}[part=body]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-offset))}[part=body] lr-skeleton{padding:var(--lr-space-s) var(--lr-space-m);--lr-skeleton-w:100%;--lr-skeleton-h:var(--lr-size-8rem);display:block}[part=pre]{padding:var(--lr-space-s) var(--lr-space-m);box-sizing:border-box;background:var(--lr-color-surface);inline-size:max-content;min-inline-size:100%;font-family:var(--lr-code-block-font,var(--lr-font-mono));font-size:inherit;line-height:var(--lr-line-height-normal);white-space:pre;tab-size:var(--lr-code-block-tab-size,2);direction:ltr;unicode-bidi:isolate;margin:0}[part=code]{font-family:inherit;display:grid}[part=pre] .line{display:block}[part=pre] .line-number{min-inline-size:var(--lr-size-2-5ch);color:var(--lr-color-text-quiet);text-align:end;user-select:none;margin-inline-end:var(--lr-space-s);display:inline-block}[part=pre] [data-highlighted]{background:var(--lr-code-block-highlighted-line-bg,var(--lr-color-warning-quiet))}[part=pre] [data-active]{outline:var(--lr-border-width-thin) solid var(--lr-code-block-active-line-outline-color,var(--lr-color-brand));outline-offset:calc(-1 * var(--lr-border-width-thin))}[part=pre] button.line-gutter{min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:inherit;font:inherit;text-align:start;cursor:pointer;background:0 0;border:none;justify-content:end;align-items:center;margin:0;margin-inline-end:var(--lr-space-s);padding:0;display:inline-flex}[part=pre] button.line-gutter:hover{background:var(--lr-color-brand-quiet)}[part=pre] button.line-gutter:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=pre] button.line-gutter:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-offset))}[part=body][data-dark-theme=true] [part=pre],[part=body][data-dark-theme=true] [part=pre] span{color:var(--shiki-dark,inherit)!important;background-color:var(--shiki-dark-bg,transparent)!important}[part=body][data-dark-theme=true] [part=pre] .line-number,[part=body][data-dark-theme=true] [part=pre] button.line-gutter{color:var(--lr-color-text-quiet)!important}[part=body][data-dark-theme=true] [part=pre] [data-highlighted]{background:var(--lr-code-block-highlighted-line-bg,var(--lr-color-warning-quiet))!important}@media (prefers-reduced-motion:reduce){[part=toggle] .chevron{transition:none!important}}`;export{styles};
1
+ import{css}from"lit";const styles=css`:host{font-size:var(--lr-font-size-sm);display:block}[part=base]{border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);overflow:hidden}[part=header]{align-items:center;gap:var(--lr-space-xs);min-inline-size:0;padding:var(--lr-space-xs) var(--lr-space-s);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border);background:var(--lr-color-surface);font-family:var(--lr-font);display:flex}[part=toggle]{font:inherit;inline-size:var(--lr-size-1-25rem);block-size:var(--lr-size-1-25rem);min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:var(--lr-color-text-quiet);border-radius:var(--lr-radius);cursor:pointer;background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}[part=toggle]:hover{background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=toggle]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-brand)}[part=toggle] .chevron{transition:transform var(--lr-transition-fast);display:inline-flex}:host(:not([collapsed])) [part=toggle] .chevron{transform:rotate(90deg)}:host([collapsed]:dir(rtl)) [part=toggle] .chevron{transform:scaleX(-1)}[part=filename]{text-overflow:ellipsis;white-space:nowrap;min-inline-size:0;font-family:var(--lr-code-block-font,var(--lr-font-mono));font-size:var(--lr-font-size-xs);font-weight:var(--lr-font-weight-semibold);color:var(--lr-color-text);flex:auto;overflow:hidden}[part=language]{text-overflow:ellipsis;white-space:nowrap;min-inline-size:0;max-inline-size:100%;padding:var(--lr-size-0-0625rem) var(--lr-size-0-4375rem);border-radius:var(--lr-radius-pill);background:var(--lr-color-brand-quiet);color:var(--lr-color-brand);font-size:var(--lr-size-0-6875rem);line-height:var(--lr-line-height-1-4);text-transform:uppercase;letter-spacing:var(--lr-size-0-02em);flex:0 auto;overflow:hidden}[part=copy-button]{color:var(--lr-color-text-quiet);font:inherit;font-size:var(--lr-font-size-xs);line-height:var(--lr-line-height-none);min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);padding:var(--lr-size-0-1875rem) var(--lr-space-xs);border-radius:var(--lr-radius);cursor:pointer;background:0 0;border:none;flex:none;margin-inline-start:auto}[part=copy-button]:hover{background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=copy-button]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-brand)}[part=toggle]:focus-visible,[part=copy-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=body]{max-block-size:var(--lr-code-block-max-height,none);display:block;overflow:auto}[part=body][hidden]{display:none}[part=body]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-offset))}[part=body] lr-skeleton{padding:var(--lr-space-s) var(--lr-space-m);--lr-skeleton-w:100%;--lr-skeleton-h:var(--lr-size-8rem);display:block}[part=pre]{padding:var(--lr-space-s) var(--lr-space-m);box-sizing:border-box;background:var(--lr-color-surface);inline-size:max-content;min-inline-size:100%;font-family:var(--lr-code-block-font,var(--lr-font-mono));font-size:inherit;line-height:var(--lr-line-height-normal);white-space:pre;tab-size:var(--lr-code-block-tab-size,2);direction:ltr;unicode-bidi:isolate;margin:0}[part=code]{font-family:inherit;display:grid}[part=pre] .line{display:block}[part=pre] .line-number{min-inline-size:var(--lr-size-2-5ch);color:var(--lr-color-text-quiet);text-align:end;user-select:none;margin-inline-end:var(--lr-space-s);display:inline-block}[part=pre] [data-highlighted]{background:var(--lr-code-block-highlighted-line-bg,var(--lr-color-warning-quiet))}[part=pre] [data-active]{outline:var(--lr-border-width-thin) solid var(--lr-code-block-active-line-outline-color,var(--lr-color-brand));outline-offset:calc(-1 * var(--lr-border-width-thin))}[part=pre] button.line-gutter{min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:inherit;font:inherit;text-align:start;cursor:pointer;background:0 0;border:none;justify-content:end;align-items:center;margin:0;margin-inline-end:var(--lr-space-s);padding:0;display:inline-flex}[part=pre] button.line-gutter:hover{background:var(--lr-color-brand-quiet)}[part=pre] button.line-gutter:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=pre] button.line-gutter:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-offset))}[part=body][data-dark-theme=true] [part=pre],[part=body][data-dark-theme=true] [part=pre] span{color:var(--shiki-dark,inherit)!important;background-color:var(--shiki-dark-bg,transparent)!important}[part=body][data-dark-theme=true] [part=pre] .line-number,[part=body][data-dark-theme=true] [part=pre] button.line-gutter{color:var(--lr-color-text-quiet)!important}[part=body][data-dark-theme=true] [part=pre] [data-highlighted]{background:var(--lr-code-block-highlighted-line-bg,var(--lr-color-warning-quiet))!important}@media (prefers-reduced-motion:reduce){[part=toggle] .chevron{transition:none!important}}`;export{styles};