@aceshooting/lyra-ui 9.1.1 → 11.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 (585) hide show
  1. package/CHANGELOG.md +785 -0
  2. package/custom-elements.json +1 -1
  3. package/design-tokens.json +13 -0
  4. package/dist/cli/migrate-wa.mjs +216 -1
  5. package/dist/cli/migration-contract.json +1 -1
  6. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +1 -1
  7. package/dist/components/agent-tools/activity-feed/activity-feed.styles.js +0 -16
  8. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.js +1 -1
  9. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.js +7 -5
  10. package/dist/components/agent-tools/agent-run/agent-run.class.js +2 -2
  11. package/dist/components/agent-tools/agent-run/agent-run.styles.js +0 -13
  12. package/dist/components/agent-tools/agent-trace/agent-trace.styles.js +7 -4
  13. package/dist/components/agent-tools/approval-queue/approval-queue.styles.js +7 -5
  14. package/dist/components/agent-tools/artifact-panel/artifact-panel.styles.js +0 -3
  15. package/dist/components/agent-tools/browser-frame/browser-frame.styles.js +3 -5
  16. package/dist/components/agent-tools/commit-card/commit-card.styles.js +0 -10
  17. package/dist/components/agent-tools/compare-panel/compare-panel.styles.js +11 -6
  18. package/dist/components/agent-tools/confirm-bar/confirm-bar.styles.js +0 -46
  19. package/dist/components/agent-tools/eval-dataset/eval-dataset.styles.js +0 -7
  20. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js +2 -2
  21. package/dist/components/agent-tools/prompt-studio/prompt-studio.styles.js +0 -15
  22. package/dist/components/agent-tools/result-card/result-card.styles.js +0 -7
  23. package/dist/components/agent-tools/result-card/result-field.styles.js +0 -5
  24. package/dist/components/agent-tools/schema-viewer/schema-viewer.styles.js +0 -3
  25. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +0 -15
  26. package/dist/components/agent-tools/stack-trace/stack-trace.styles.js +0 -20
  27. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +2 -2
  28. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js +0 -3
  29. package/dist/components/agent-tools/task-list/task-list.styles.js +0 -15
  30. package/dist/components/agent-tools/terminal/terminal.class.d.ts +11 -6
  31. package/dist/components/agent-tools/terminal/terminal.class.js +4 -4
  32. package/dist/components/agent-tools/terminal/terminal.styles.js +0 -46
  33. package/dist/components/agent-tools/test-results/test-results.class.js +2 -2
  34. package/dist/components/agent-tools/test-results/test-results.styles.js +0 -5
  35. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +0 -41
  36. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.styles.js +0 -41
  37. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.styles.js +0 -30
  38. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +6 -6
  39. package/dist/components/agent-tools/tool-param-form/tool-param-form.styles.js +0 -5
  40. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +0 -20
  41. package/dist/components/agent-tools/tool-result-view/tool-result-view.styles.js +0 -4
  42. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.styles.js +0 -21
  43. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +7 -31
  44. package/dist/components/charts/chart/box-plot.class.d.ts +27 -0
  45. package/dist/components/charts/chart/box-plot.class.js +14 -4
  46. package/dist/components/charts/chart/box-plot.styles.js +28 -20
  47. package/dist/components/charts/chart/chart-colors.d.ts +1 -1
  48. package/dist/components/charts/chart/chart-colors.js +1 -1
  49. package/dist/components/charts/chart/chart-core-loader.d.ts +1 -0
  50. package/dist/components/charts/chart/chart-core-loader.js +1 -1
  51. package/dist/components/charts/chart/chart-feature-loader.d.ts +35 -0
  52. package/dist/components/charts/chart/chart-feature-loader.js +1 -1
  53. package/dist/components/charts/chart/chart.class.d.ts +120 -0
  54. package/dist/components/charts/chart/chart.class.js +16 -6
  55. package/dist/components/charts/chart/chart.styles.js +28 -27
  56. package/dist/components/charts/chart/lite-chart.class.d.ts +20 -1
  57. package/dist/components/charts/chart/lite-chart.class.js +4 -4
  58. package/dist/components/charts/chart/lite-chart.styles.js +0 -27
  59. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +20 -0
  60. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +3 -1
  61. package/dist/components/conversation/agent-workspace/agent-workspace.styles.js +3 -0
  62. package/dist/components/conversation/audio-visualizer/audio-visualizer.styles.js +0 -7
  63. package/dist/components/conversation/branch-picker/branch-picker.styles.js +0 -3
  64. package/dist/components/conversation/chat-composer/chat-composer.styles.js +0 -51
  65. package/dist/components/conversation/chat-message/chat-message.styles.js +7 -35
  66. package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
  67. package/dist/components/conversation/chat-viewport/chat-viewport.styles.js +0 -33
  68. package/dist/components/conversation/checkpoint/checkpoint.class.js +1 -1
  69. package/dist/components/conversation/checkpoint/checkpoint.styles.js +0 -3
  70. package/dist/components/conversation/code-block/code-block-shared.d.ts +5 -2
  71. package/dist/components/conversation/code-block/code-block.class.js +1 -1
  72. package/dist/components/conversation/code-block/code-block.styles.js +4 -95
  73. package/dist/components/conversation/code-block/code-loader.d.ts +11 -0
  74. package/dist/components/conversation/code-block/code-loader.js +1 -1
  75. package/dist/components/conversation/code-block/shiki-types.d.ts +12 -0
  76. package/dist/components/conversation/code-block/shiki-types.js +1 -1
  77. package/dist/components/conversation/conversation-item/conversation-item.styles.js +8 -54
  78. package/dist/components/conversation/generation-metrics/generation-metrics.class.js +2 -2
  79. package/dist/components/conversation/generation-metrics/generation-metrics.styles.js +0 -17
  80. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  81. package/dist/components/conversation/markdown/markdown.styles.js +0 -41
  82. package/dist/components/conversation/message-actions/message-actions.styles.js +0 -3
  83. package/dist/components/conversation/message-feedback/message-feedback.styles.js +0 -35
  84. package/dist/components/conversation/message-parts/message-parts.class.d.ts +1 -1
  85. package/dist/components/conversation/message-parts/message-parts.styles.js +0 -5
  86. package/dist/components/conversation/model-select/model-select.class.js +3 -3
  87. package/dist/components/conversation/model-select/model-select.styles.js +12 -47
  88. package/dist/components/conversation/model-settings-panel/model-settings-panel.styles.js +0 -6
  89. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +3 -0
  90. package/dist/components/conversation/prompt-input/prompt-input.styles.js +0 -10
  91. package/dist/components/conversation/push-to-talk/push-to-talk.styles.js +0 -8
  92. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js +1 -11
  93. package/dist/components/conversation/stream-status/stream-status.styles.js +0 -16
  94. package/dist/components/conversation/streaming-text/streaming-text.styles.js +0 -15
  95. package/dist/components/conversation/suggestion-chips/suggestion-chips.styles.js +0 -5
  96. package/dist/components/conversation/thread-list/thread-list.styles.js +0 -23
  97. package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts +16 -4
  98. package/dist/components/conversation/transcript-feed/transcript-feed.class.js +1 -1
  99. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +0 -1
  100. package/dist/components/conversation/typing-indicator/typing-indicator.styles.js +0 -23
  101. package/dist/components/conversation/usage-badge/usage-badge.styles.js +0 -3
  102. package/dist/components/conversation/voice-picker/voice-picker.class.js +3 -3
  103. package/dist/components/conversation/voice-picker/voice-picker.styles.js +9 -29
  104. package/dist/components/conversation/widget-renderer/resolve.d.ts +2 -0
  105. package/dist/components/conversation/widget-renderer/resolve.js +1 -1
  106. package/dist/components/data/calendar/calendar.class.d.ts +15 -2
  107. package/dist/components/data/calendar/calendar.class.js +2 -2
  108. package/dist/components/data/calendar/calendar.styles.js +2 -28
  109. package/dist/components/data/condition-builder/condition-builder.class.d.ts +10 -6
  110. package/dist/components/data/condition-builder/condition-builder.class.js +2 -2
  111. package/dist/components/data/condition-builder/condition-builder.styles.js +0 -6
  112. package/dist/components/data/context-meter/context-meter.styles.js +0 -24
  113. package/dist/components/data/data-grid/data-grid.class.js +3 -3
  114. package/dist/components/data/data-grid/data-grid.styles.js +0 -22
  115. package/dist/components/data/document-library/document-library.class.js +2 -2
  116. package/dist/components/data/document-library/document-library.styles.js +0 -4
  117. package/dist/components/data/env-list/env-list.class.js +1 -1
  118. package/dist/components/data/env-list/env-list.styles.js +7 -4
  119. package/dist/components/data/file-tree/file-tree.class.d.ts +12 -0
  120. package/dist/components/data/flow-canvas/flow-canvas.styles.js +12 -19
  121. package/dist/components/data/flow-controls/flow-controls.class.js +2 -2
  122. package/dist/components/data/flow-controls/flow-controls.styles.js +3 -36
  123. package/dist/components/data/flow-minimap/flow-minimap.class.js +1 -1
  124. package/dist/components/data/flow-minimap/flow-minimap.styles.js +0 -9
  125. package/dist/components/data/flow-node/flow-node.styles.js +0 -23
  126. package/dist/components/data/flow-run-status/flow-run-status.class.js +1 -1
  127. package/dist/components/data/flow-run-status/flow-run-status.styles.js +0 -7
  128. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +0 -7
  129. package/dist/components/data/graph-query-builder/graph-query-builder.class.js +1 -1
  130. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +0 -10
  131. package/dist/components/data/heatmap/heatmap-scale.d.ts +20 -0
  132. package/dist/components/data/heatmap/heatmap-scale.js +1 -1
  133. package/dist/components/data/heatmap/heatmap.class.d.ts +117 -1
  134. package/dist/components/data/heatmap/heatmap.class.js +2 -2
  135. package/dist/components/data/heatmap/heatmap.styles.js +0 -54
  136. package/dist/components/data/pagination/pagination.styles.js +23 -46
  137. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +34 -1
  138. package/dist/components/data/sequence-strip/sequence-strip.class.js +5 -2
  139. package/dist/components/data/sequence-strip/sequence-strip.styles.js +14 -20
  140. package/dist/components/data/sparkline/sparkline.class.js +1 -1
  141. package/dist/components/data/stat/stat.styles.js +0 -67
  142. package/dist/components/data/table/table.class.d.ts +42 -3
  143. package/dist/components/data/table/table.class.js +4 -4
  144. package/dist/components/data/table/table.styles.js +20 -91
  145. package/dist/components/data/timeline/timeline-item.styles.js +0 -30
  146. package/dist/components/data/timeline/timeline.class.d.ts +89 -1
  147. package/dist/components/data/timeline/timeline.class.js +2 -2
  148. package/dist/components/data/timeline/timeline.styles.js +111 -31
  149. package/dist/components/data/tree/tree-item.styles.js +1 -28
  150. package/dist/components/data/tree/tree.class.js +2 -2
  151. package/dist/components/data/tree/tree.styles.js +0 -6
  152. package/dist/components/data/word-cloud/word-cloud.styles.js +0 -5
  153. package/dist/components/forms/button/button.class.js +1 -1
  154. package/dist/components/forms/button/button.styles.js +0 -105
  155. package/dist/components/forms/checkbox/checkbox.class.d.ts +3 -0
  156. package/dist/components/forms/checkbox/checkbox.class.js +1 -1
  157. package/dist/components/forms/checkbox/checkbox.styles.js +0 -39
  158. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +21 -2
  159. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  160. package/dist/components/forms/checkbox-group/checkbox-group.styles.js +0 -18
  161. package/dist/components/forms/code-editor/code-editor.styles.js +0 -30
  162. package/dist/components/forms/color-picker/color-picker.class.js +2 -2
  163. package/dist/components/forms/color-picker/color-picker.styles.js +0 -69
  164. package/dist/components/forms/combobox/combobox.class.d.ts +71 -3
  165. package/dist/components/forms/combobox/combobox.class.js +5 -3
  166. package/dist/components/forms/combobox/combobox.styles.js +31 -111
  167. package/dist/components/forms/combobox/option.styles.js +7 -1
  168. package/dist/components/forms/date-picker/date-input.class.js +1 -1
  169. package/dist/components/forms/date-picker/date-input.styles.js +12 -67
  170. package/dist/components/forms/date-picker/date-picker.class.d.ts +47 -0
  171. package/dist/components/forms/date-picker/date-picker.class.js +36 -22
  172. package/dist/components/forms/date-picker/date-picker.styles.js +82 -29
  173. package/dist/components/forms/emoji-picker/emoji-data-loader.d.ts +6 -3
  174. package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
  175. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +8 -1
  176. package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
  177. package/dist/components/forms/emoji-picker/emoji-picker.styles.js +3 -41
  178. package/dist/components/forms/icon-button/icon-button.class.js +1 -1
  179. package/dist/components/forms/icon-button/icon-button.styles.js +0 -16
  180. package/dist/components/forms/input/input.styles.js +0 -54
  181. package/dist/components/forms/input/number-input.styles.d.ts +4 -5
  182. package/dist/components/forms/input/number-input.styles.js +0 -11
  183. package/dist/components/forms/input/time-input-shared.d.ts +11 -0
  184. package/dist/components/forms/input/time-input-shared.js +1 -1
  185. package/dist/components/forms/input/time-input.class.d.ts +11 -2
  186. package/dist/components/forms/input/time-input.class.js +1 -1
  187. package/dist/components/forms/input/time-input.styles.js +0 -6
  188. package/dist/components/forms/locale-picker/locale-picker.class.js +2 -2
  189. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -26
  190. package/dist/components/forms/otp-input/otp-input.class.js +3 -3
  191. package/dist/components/forms/otp-input/otp-input.styles.js +0 -16
  192. package/dist/components/forms/phone-input/phone-input.class.d.ts +9 -1
  193. package/dist/components/forms/phone-input/phone-input.class.js +2 -2
  194. package/dist/components/forms/phone-input/phone-input.styles.js +0 -37
  195. package/dist/components/forms/radio/radio-button.styles.js +1 -30
  196. package/dist/components/forms/radio/radio-group.styles.js +0 -4
  197. package/dist/components/forms/radio/radio.styles.js +0 -44
  198. package/dist/components/forms/rubric-form/rubric-form.styles.js +0 -5
  199. package/dist/components/forms/select/select.class.js +1 -1
  200. package/dist/components/forms/select/select.styles.js +14 -114
  201. package/dist/components/forms/slider/slider.styles.js +0 -55
  202. package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts +0 -11
  203. package/dist/components/forms/swatch-picker/swatch-picker.class.js +2 -2
  204. package/dist/components/forms/swatch-picker/swatch-picker.styles.js +0 -77
  205. package/dist/components/forms/switch/switch.class.d.ts +3 -0
  206. package/dist/components/forms/switch/switch.class.js +1 -1
  207. package/dist/components/forms/switch/switch.styles.js +0 -37
  208. package/dist/components/forms/textarea/textarea.styles.js +0 -28
  209. package/dist/components/forms/time-range/time-range.styles.js +12 -84
  210. package/dist/components/forms/token-input/token-input.class.d.ts +23 -9
  211. package/dist/components/forms/token-input/token-input.class.js +1 -1
  212. package/dist/components/forms/token-input/token-input.styles.js +1 -54
  213. package/dist/components/layout/app-rail/app-rail-item.class.js +2 -2
  214. package/dist/components/layout/app-rail/app-rail-item.styles.js +0 -13
  215. package/dist/components/layout/app-rail/app-rail.class.d.ts +5 -0
  216. package/dist/components/layout/app-rail/app-rail.class.js +1 -1
  217. package/dist/components/layout/app-rail/app-rail.styles.js +0 -46
  218. package/dist/components/layout/button-group/button-group.styles.js +0 -6
  219. package/dist/components/layout/card/card.class.d.ts +12 -0
  220. package/dist/components/layout/card/card.styles.js +3 -11
  221. package/dist/components/layout/carousel/carousel.styles.js +0 -1
  222. package/dist/components/layout/command-palette/command-palette.class.d.ts +8 -0
  223. package/dist/components/layout/command-palette/command-palette.class.js +3 -1
  224. package/dist/components/layout/command-palette/command-palette.styles.js +1 -13
  225. package/dist/components/layout/control-group/control-group.styles.js +0 -7
  226. package/dist/components/layout/dashboard-grid/dashboard-grid.styles.js +6 -25
  227. package/dist/components/layout/details/accordion.class.d.ts +13 -0
  228. package/dist/components/layout/details/accordion.class.js +1 -1
  229. package/dist/components/layout/details/details.class.js +1 -1
  230. package/dist/components/layout/details/details.styles.js +0 -12
  231. package/dist/components/layout/dock-panel/dock-panel.styles.js +0 -45
  232. package/dist/components/layout/drilldown-panel/drilldown-panel.class.d.ts +2 -0
  233. package/dist/components/layout/drilldown-panel/drilldown-panel.class.js +2 -2
  234. package/dist/components/layout/drilldown-panel/drilldown-panel.styles.js +0 -4
  235. package/dist/components/layout/filter-bar/filter-bar.class.js +1 -1
  236. package/dist/components/layout/filter-bar/filter-bar.styles.js +0 -9
  237. package/dist/components/layout/menu/menu-item.class.d.ts +5 -0
  238. package/dist/components/layout/menu/menu-item.class.js +1 -1
  239. package/dist/components/layout/menu/menu-item.styles.js +0 -49
  240. package/dist/components/layout/menu/menu-label.styles.js +0 -2
  241. package/dist/components/layout/menu/menu.styles.js +0 -18
  242. package/dist/components/layout/multi-split/multi-split.styles.js +0 -63
  243. package/dist/components/layout/page/page.class.d.ts +4 -0
  244. package/dist/components/layout/page/page.class.js +1 -1
  245. package/dist/components/layout/reorder-list/reorder-item.styles.js +0 -4
  246. package/dist/components/layout/responsive-panel/responsive-panel.styles.js +0 -27
  247. package/dist/components/layout/scroller/scroller.styles.js +0 -20
  248. package/dist/components/layout/segmented/segmented.class.d.ts +7 -1
  249. package/dist/components/layout/segmented/segmented.class.js +1 -1
  250. package/dist/components/layout/segmented/segmented.styles.js +69 -37
  251. package/dist/components/layout/split-panel/split-panel.styles.js +1 -7
  252. package/dist/components/layout/stepper/stepper.class.d.ts +8 -1
  253. package/dist/components/layout/stepper/stepper.class.js +1 -1
  254. package/dist/components/layout/stepper/stepper.styles.js +140 -41
  255. package/dist/components/layout/tab-group/tab-group.class.d.ts +4 -1
  256. package/dist/components/layout/tab-group/tab-group.styles.js +9 -75
  257. package/dist/components/layout/tab-group/tab.styles.js +0 -2
  258. package/dist/components/layout/virtual-list/virtual-list.class.d.ts +4 -4
  259. package/dist/components/layout/virtual-list/virtual-list.class.js +1 -1
  260. package/dist/components/layout/virtual-list/virtual-list.styles.js +0 -68
  261. package/dist/components/layout/widget/widget.class.d.ts +5 -1
  262. package/dist/components/layout/widget/widget.class.js +1 -1
  263. package/dist/components/layout/widget/widget.styles.js +97 -40
  264. package/dist/components/media/animated-image/animated-image.class.d.ts +3 -0
  265. package/dist/components/media/animated-image/animated-image.class.js +1 -1
  266. package/dist/components/media/animated-image/animated-image.styles.js +0 -28
  267. package/dist/components/media/attachment-chip/attachment-chip.class.d.ts +1 -1
  268. package/dist/components/media/attachment-chip/attachment-chip.class.js +1 -1
  269. package/dist/components/media/attachment-chip/attachment-chip.styles.js +0 -31
  270. package/dist/components/media/attachment-trigger/attachment-trigger.class.js +3 -3
  271. package/dist/components/media/attachment-trigger/attachment-trigger.styles.js +0 -40
  272. package/dist/components/media/av-player/av-player.class.d.ts +5 -6
  273. package/dist/components/media/av-player/av-player.class.js +1 -1
  274. package/dist/components/media/av-player/av-player.styles.js +0 -45
  275. package/dist/components/media/avatar/avatar.styles.js +3 -16
  276. package/dist/components/media/file-icon/file-icon.class.d.ts +1 -2
  277. package/dist/components/media/file-icon/file-icon.class.js +1 -1
  278. package/dist/components/media/file-input/file-input.class.d.ts +12 -0
  279. package/dist/components/media/file-input/file-input.styles.js +3 -24
  280. package/dist/components/media/flag/flag.class.d.ts +23 -1
  281. package/dist/components/media/flag/flag.class.js +4 -2
  282. package/dist/components/media/flag/flag.styles.js +7 -1
  283. package/dist/components/media/flag/language-map.d.ts +10 -0
  284. package/dist/components/media/flag/language-map.js +1 -1
  285. package/dist/components/media/image-comparer/image-comparer.styles.js +4 -33
  286. package/dist/components/media/image-viewer/image-viewer.class.js +0 -2
  287. package/dist/components/media/image-viewer/image-viewer.styles.js +7 -27
  288. package/dist/components/media/lightbox/lightbox.class.js +0 -2
  289. package/dist/components/media/lightbox/lightbox.styles.js +0 -21
  290. package/dist/components/media/map/map-loader.d.ts +19 -1
  291. package/dist/components/media/map/map-loader.js +1 -1
  292. package/dist/components/media/map/map.class.d.ts +178 -1
  293. package/dist/components/media/map/map.class.js +15 -3
  294. package/dist/components/media/map/map.styles.js +20 -17
  295. package/dist/components/media/media-card/media-card.class.d.ts +14 -3
  296. package/dist/components/media/media-card/media-card.class.js +1 -1
  297. package/dist/components/media/media-card/media-card.styles.js +2 -28
  298. package/dist/components/media/pan-zoom/pan-zoom.styles.js +0 -3
  299. package/dist/components/media/qr-code/qr-code.class.d.ts +3 -2
  300. package/dist/components/media/qr-code/qr-code.class.js +2 -2
  301. package/dist/components/media/qr-code/qr-code.styles.js +0 -3
  302. package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +2 -0
  303. package/dist/components/media/sequence-playback/sequence-playback.class.js +2 -1
  304. package/dist/components/media/sequence-playback/sequence-playback.styles.js +0 -19
  305. package/dist/components/media/video/video.class.d.ts +23 -2
  306. package/dist/components/media/video/video.class.js +3 -3
  307. package/dist/components/media/video/video.styles.js +4 -2
  308. package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts +3 -2
  309. package/dist/components/media/zoomable-frame/zoomable-frame.class.js +2 -2
  310. package/dist/components/media/zoomable-frame/zoomable-frame.styles.js +0 -5
  311. package/dist/components/overlays/alert/alert.styles.js +4 -2
  312. package/dist/components/overlays/badge/badge.styles.js +4 -48
  313. package/dist/components/overlays/badge/tag.styles.js +0 -14
  314. package/dist/components/overlays/callout/callout.styles.js +0 -11
  315. package/dist/components/overlays/chip/chip-group.styles.js +0 -18
  316. package/dist/components/overlays/chip/chip.styles.js +6 -69
  317. package/dist/components/overlays/dialog/confirm.d.ts +1 -4
  318. package/dist/components/overlays/dialog/confirm.js +1 -1
  319. package/dist/components/overlays/dialog/dialog.class.d.ts +32 -9
  320. package/dist/components/overlays/dialog/dialog.class.js +1 -1
  321. package/dist/components/overlays/dialog/dialog.styles.js +0 -43
  322. package/dist/components/overlays/drawer/drawer.class.d.ts +2 -2
  323. package/dist/components/overlays/drawer/drawer.styles.js +0 -9
  324. package/dist/components/overlays/empty/empty.styles.js +0 -12
  325. package/dist/components/overlays/kbd/kbd.styles.js +0 -8
  326. package/dist/components/overlays/overlay/dropdown.class.d.ts +1 -6
  327. package/dist/components/overlays/overlay/dropdown.class.js +2 -2
  328. package/dist/components/overlays/overlay/overlay.styles.js +0 -28
  329. package/dist/components/overlays/overlay/popover.class.d.ts +28 -4
  330. package/dist/components/overlays/overlay/popover.class.js +2 -2
  331. package/dist/components/overlays/overlay/tooltip.class.d.ts +10 -0
  332. package/dist/components/overlays/overlay/tooltip.class.js +1 -1
  333. package/dist/components/overlays/popup/popup.class.d.ts +1 -0
  334. package/dist/components/overlays/popup/popup.class.js +1 -1
  335. package/dist/components/overlays/popup/popup.styles.js +0 -15
  336. package/dist/components/overlays/progress/progress-ring.class.d.ts +9 -1
  337. package/dist/components/overlays/progress/progress-ring.class.js +3 -3
  338. package/dist/components/overlays/progress/progress.styles.js +0 -21
  339. package/dist/components/overlays/rating/rating.styles.js +0 -25
  340. package/dist/components/overlays/skeleton/skeleton.styles.js +0 -4
  341. package/dist/components/overlays/spinner/spinner.styles.js +0 -3
  342. package/dist/components/overlays/toast/toast-item.styles.js +3 -45
  343. package/dist/components/retrieval/chunk-inspector/chunk-inspector.styles.js +0 -35
  344. package/dist/components/retrieval/citation-badge/citation-badge.class.d.ts +2 -2
  345. package/dist/components/retrieval/citation-badge/citation-badge.class.js +3 -3
  346. package/dist/components/retrieval/citation-badge/citation-badge.styles.js +0 -20
  347. package/dist/components/retrieval/claim-evidence/claim-evidence.styles.js +0 -8
  348. package/dist/components/retrieval/community-card/community-card.class.d.ts +1 -0
  349. package/dist/components/retrieval/community-card/community-card.styles.js +0 -6
  350. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js +8 -12
  351. package/dist/components/retrieval/entity-card/entity-card.class.d.ts +4 -3
  352. package/dist/components/retrieval/entity-card/entity-card.class.js +1 -1
  353. package/dist/components/retrieval/entity-card/entity-card.styles.js +0 -12
  354. package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts +10 -4
  355. package/dist/components/retrieval/entity-chip/entity-chip.class.js +3 -3
  356. package/dist/components/retrieval/entity-chip/entity-chip.styles.js +6 -9
  357. package/dist/components/retrieval/entity-dossier/entity-dossier.class.d.ts +19 -5
  358. package/dist/components/retrieval/graph/graph.class.d.ts +5 -0
  359. package/dist/components/retrieval/graph/graph.class.js +1 -1
  360. package/dist/components/retrieval/graph/graph.styles.js +0 -30
  361. package/dist/components/retrieval/graph-legend/graph-legend.styles.js +0 -3
  362. package/dist/components/retrieval/ingestion-queue/ingestion-queue.styles.js +0 -25
  363. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts +2 -0
  364. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js +0 -7
  365. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +20 -6
  366. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +2 -2
  367. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +0 -16
  368. package/dist/components/retrieval/mind-map/mind-map.class.d.ts +5 -3
  369. package/dist/components/retrieval/mind-map/mind-map.class.js +1 -1
  370. package/dist/components/retrieval/mind-map/mind-map.styles.js +0 -2
  371. package/dist/components/retrieval/neighbor-list/neighbor-list.class.d.ts +3 -2
  372. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +1 -1
  373. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +0 -30
  374. package/dist/components/retrieval/node-palette/node-palette.styles.js +0 -11
  375. package/dist/components/retrieval/path-strip/path-strip.styles.js +0 -10
  376. package/dist/components/retrieval/provenance-panel/provenance-panel.class.d.ts +12 -3
  377. package/dist/components/retrieval/provenance-panel/provenance-panel.styles.js +0 -2
  378. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.d.ts +3 -2
  379. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js +2 -2
  380. package/dist/components/retrieval/retrieval-results/retrieval-results.styles.js +0 -28
  381. package/dist/components/retrieval/retrieval-search/retrieval-search.styles.js +0 -4
  382. package/dist/components/retrieval/retrieval-trace/retrieval-trace.styles.js +0 -2
  383. package/dist/components/retrieval/source-card/source-card.styles.js +0 -13
  384. package/dist/components/retrieval/source-list/source-list.styles.js +0 -7
  385. package/dist/components/retrieval/source-picker/source-picker.styles.js +0 -7
  386. package/dist/components/utility/copy-button/copy-button.styles.js +0 -10
  387. package/dist/components/utility/diff-view/diff-view.styles.js +0 -14
  388. package/dist/components/utility/export-button/export-button.styles.js +0 -22
  389. package/dist/components/utility/icon/icon.styles.js +0 -6
  390. package/dist/components/utility/json-viewer/json-viewer.styles.js +2 -48
  391. package/dist/components/utility/known-date/known-date.class.d.ts +7 -3
  392. package/dist/components/utility/known-date/known-date.styles.js +10 -51
  393. package/dist/components/utility/live-region/live-region.styles.js +0 -4
  394. package/dist/components/utility/mention-popover/mention-popover.styles.js +0 -25
  395. package/dist/components/utility/poll-status/poll-status.styles.js +0 -4
  396. package/dist/components/utility/random-content/random-content.class.d.ts +22 -0
  397. package/dist/components/utility/random-content/random-content.class.js +3 -2
  398. package/dist/components/utility/random-content/random-content.styles.js +6 -13
  399. package/dist/components/utility/tour/tour.class.d.ts +4 -2
  400. package/dist/components/utility/tour/tour.class.js +3 -3
  401. package/dist/components/utility/tour/tour.styles.js +0 -13
  402. package/dist/components/utility/visually-hidden/visually-hidden.styles.js +0 -5
  403. package/dist/components/viewers/archive-viewer/archive-viewer.class.js +1 -1
  404. package/dist/components/viewers/archive-viewer/archive-viewer.styles.d.ts +2 -2
  405. package/dist/components/viewers/archive-viewer/archive-viewer.styles.js +0 -10
  406. package/dist/components/viewers/csv-viewer/csv-viewer.class.js +1 -1
  407. package/dist/components/viewers/csv-viewer/csv-viewer.styles.js +0 -19
  408. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js +1 -1
  409. package/dist/components/viewers/dataset-viewer/dataset-viewer.styles.js +0 -15
  410. package/dist/components/viewers/document-compare/document-compare.styles.js +0 -3
  411. package/dist/components/viewers/document-preview/document-preview.styles.js +0 -25
  412. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +2 -1
  413. package/dist/components/viewers/document-viewer/document-viewer.class.js +1 -1
  414. package/dist/components/viewers/document-viewer/document-viewer.styles.js +0 -5
  415. package/dist/components/viewers/docx-viewer/docx-viewer.styles.js +0 -17
  416. package/dist/components/viewers/ebook-viewer/ebook-viewer.styles.js +0 -4
  417. package/dist/components/viewers/email-viewer/email-viewer.styles.js +0 -7
  418. package/dist/components/viewers/geojson-view/geojson-view.styles.js +0 -5
  419. package/dist/components/viewers/highlight-layer/highlight-layer.styles.js +0 -3
  420. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +1 -1
  421. package/dist/components/viewers/notebook-viewer/notebook-viewer.styles.js +0 -38
  422. package/dist/components/viewers/page-rail/page-rail.class.js +1 -1
  423. package/dist/components/viewers/page-rail/page-rail.styles.js +0 -13
  424. package/dist/components/viewers/pdf-viewer/pdf-loader.d.ts +13 -2
  425. package/dist/components/viewers/pdf-viewer/pdf-loader.js +1 -1
  426. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts +32 -2
  427. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +4 -4
  428. package/dist/components/viewers/pdf-viewer/pdf-viewer.styles.js +1 -27
  429. package/dist/components/viewers/pptx-viewer/pptx-viewer.styles.js +0 -3
  430. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.js +1 -1
  431. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.styles.js +0 -14
  432. package/dist/components/viewers/svg-viewer/svg-viewer.styles.js +0 -7
  433. package/dist/components/viewers/xml-viewer/xml-viewer.styles.js +2 -24
  434. package/dist/custom-elements-jsx.d.ts +72 -40
  435. package/dist/events.d.ts +43 -33
  436. package/dist/internal/agent-status-variants.d.ts +18 -0
  437. package/dist/internal/agent-status-variants.js +1 -0
  438. package/dist/internal/announcer.d.ts +8 -3
  439. package/dist/internal/announcer.js +1 -1
  440. package/dist/internal/autoloader-manifest.js +1 -1
  441. package/dist/internal/canvas-color.d.ts +16 -0
  442. package/dist/internal/canvas-color.js +1 -1
  443. package/dist/internal/catalog-picker.d.ts +0 -1
  444. package/dist/internal/catalog-picker.js +1 -1
  445. package/dist/internal/default-strings.generated.d.ts +1 -0
  446. package/dist/internal/default-strings.generated.js +1 -1
  447. package/dist/internal/dev-mode-attribute-warning.d.ts +27 -4
  448. package/dist/internal/dev-mode-attribute-warning.js +1 -1
  449. package/dist/internal/localization-runtime.js +1 -1
  450. package/dist/internal/localization-types.d.ts +1 -1
  451. package/dist/internal/localization.js +1 -1
  452. package/dist/internal/lyra-element.d.ts +13 -0
  453. package/dist/internal/lyra-element.js +1 -1
  454. package/dist/internal/media-controller.js +1 -1
  455. package/dist/internal/package-metadata.d.ts +1 -1
  456. package/dist/internal/package-metadata.js +1 -1
  457. package/dist/internal/scroll-overflow.d.ts +35 -13
  458. package/dist/internal/scroll-overflow.js +1 -1
  459. package/dist/internal/sizes.styles.js +0 -2
  460. package/dist/internal/specialist-tokens.styles.js +6 -11
  461. package/dist/internal/text-highlights.d.ts +4 -1
  462. package/dist/internal/text-highlights.js +1 -1
  463. package/dist/internal/tokens/palette.styles.js +0 -15
  464. package/dist/internal/tokens.styles.js +20 -113
  465. package/dist/lyra.d.ts +9 -6
  466. package/dist/styles/reservations.css +82 -0
  467. package/dist/svelte.d.ts +72 -40
  468. package/dist/translations/ar.js +1 -1
  469. package/dist/translations/de.js +1 -1
  470. package/dist/translations/es.js +1 -1
  471. package/dist/translations/fa.js +1 -1
  472. package/dist/translations/fr.js +1 -1
  473. package/dist/translations/he.js +1 -1
  474. package/dist/translations/ja.js +1 -1
  475. package/dist/translations/pt-BR.js +1 -1
  476. package/dist/translations/ru.js +1 -1
  477. package/dist/translations/zh-CN.js +1 -1
  478. package/dist/vue.d.ts +72 -40
  479. package/llms/components/lr-accordion-item.md +12 -3
  480. package/llms/components/lr-accordion.md +11 -2
  481. package/llms/components/lr-agent-eval-dashboard.md +1 -1
  482. package/llms/components/lr-agent-trace.md +3 -1
  483. package/llms/components/lr-agent-workspace.md +20 -0
  484. package/llms/components/lr-artifact-panel.md +10 -4
  485. package/llms/components/lr-attachment-chip.md +7 -4
  486. package/llms/components/lr-attachment-trigger.md +7 -4
  487. package/llms/components/lr-av-player.md +3 -1
  488. package/llms/components/lr-avatar.md +6 -6
  489. package/llms/components/lr-bar-chart.md +8 -6
  490. package/llms/components/lr-box-plot.md +15 -4
  491. package/llms/components/lr-browser-frame.md +7 -3
  492. package/llms/components/lr-bubble-chart.md +8 -6
  493. package/llms/components/lr-calendar.md +9 -2
  494. package/llms/components/lr-card.md +24 -0
  495. package/llms/components/lr-chart.md +45 -11
  496. package/llms/components/lr-chat-viewport.md +7 -2
  497. package/llms/components/lr-checkbox-group.md +13 -5
  498. package/llms/components/lr-checkbox.md +5 -2
  499. package/llms/components/lr-checkpoint.md +6 -2
  500. package/llms/components/lr-combobox.md +47 -8
  501. package/llms/components/lr-command-palette.md +4 -1
  502. package/llms/components/lr-confirm-bar.md +7 -3
  503. package/llms/components/lr-context-meter.md +12 -11
  504. package/llms/components/lr-conversation-item.md +7 -4
  505. package/llms/components/lr-date-input.md +22 -2
  506. package/llms/components/lr-date-picker.md +23 -3
  507. package/llms/components/lr-details.md +11 -2
  508. package/llms/components/lr-dialog.md +16 -10
  509. package/llms/components/lr-dock-panel.md +7 -10
  510. package/llms/components/lr-document-preview.md +6 -1
  511. package/llms/components/lr-document-viewer.md +3 -2
  512. package/llms/components/lr-doughnut-chart.md +8 -6
  513. package/llms/components/lr-drawer.md +3 -3
  514. package/llms/components/lr-entity-card.md +3 -3
  515. package/llms/components/lr-entity-chip.md +1 -1
  516. package/llms/components/lr-entity-dossier.md +4 -1
  517. package/llms/components/lr-file-input.md +2 -2
  518. package/llms/components/lr-flag.md +30 -8
  519. package/llms/components/lr-heatmap.md +46 -0
  520. package/llms/components/lr-histogram.md +7 -4
  521. package/llms/components/lr-icon.md +1 -1
  522. package/llms/components/lr-json-schema-viewer.md +2 -1
  523. package/llms/components/lr-knowledge-graph-explorer.md +8 -3
  524. package/llms/components/lr-known-date.md +4 -2
  525. package/llms/components/lr-line-chart.md +8 -6
  526. package/llms/components/lr-lite-chart.md +16 -6
  527. package/llms/components/lr-map.md +91 -10
  528. package/llms/components/lr-markdown-core.md +3 -2
  529. package/llms/components/lr-media-card.md +28 -12
  530. package/llms/components/lr-message-parts.md +2 -1
  531. package/llms/components/lr-model-select.md +9 -10
  532. package/llms/components/lr-model-settings-panel.md +9 -9
  533. package/llms/components/lr-neighbor-list.md +1 -1
  534. package/llms/components/lr-notebook-viewer.md +6 -3
  535. package/llms/components/lr-option.md +46 -7
  536. package/llms/components/lr-pdf-viewer.md +62 -2
  537. package/llms/components/lr-pie-chart.md +8 -6
  538. package/llms/components/lr-polar-area-chart.md +8 -6
  539. package/llms/components/lr-popover.md +25 -1
  540. package/llms/components/lr-progress-ring.md +8 -1
  541. package/llms/components/lr-prompt-studio.md +1 -1
  542. package/llms/components/lr-provenance-panel.md +4 -2
  543. package/llms/components/lr-qr-code.md +1 -1
  544. package/llms/components/lr-radar-chart.md +8 -6
  545. package/llms/components/lr-rag-eval-dashboard.md +2 -2
  546. package/llms/components/lr-random-content.md +13 -0
  547. package/llms/components/lr-reorder-item.md +6 -1
  548. package/llms/components/lr-reorder-list.md +6 -1
  549. package/llms/components/lr-responsive-panel.md +11 -7
  550. package/llms/components/lr-scatter-chart.md +8 -6
  551. package/llms/components/lr-sequence-strip.md +16 -2
  552. package/llms/components/lr-slider.md +12 -5
  553. package/llms/components/lr-sparkline.md +1 -1
  554. package/llms/components/lr-suggestion-chips.md +7 -2
  555. package/llms/components/lr-swatch-picker.md +5 -5
  556. package/llms/components/lr-switch.md +5 -2
  557. package/llms/components/lr-table.md +30 -4
  558. package/llms/components/lr-terminal.md +3 -1
  559. package/llms/components/lr-thread-list.md +8 -8
  560. package/llms/components/lr-time-input.md +6 -1
  561. package/llms/components/lr-timeline-item.md +24 -0
  562. package/llms/components/lr-timeline.md +25 -1
  563. package/llms/components/lr-token-input.md +7 -2
  564. package/llms/components/lr-tool-approval-dialog.md +7 -8
  565. package/llms/components/lr-tool-call-chip.md +5 -1
  566. package/llms/components/lr-tool-param-form.md +14 -12
  567. package/llms/components/lr-tool-result-dialog.md +11 -9
  568. package/llms/components/lr-tool-result-view.md +7 -6
  569. package/llms/components/lr-tool-select-dialog.md +18 -16
  570. package/llms/components/lr-trace-tree.md +3 -1
  571. package/llms/components/lr-usage-badge.md +4 -1
  572. package/llms/components/lr-video-playlist.md +1 -1
  573. package/llms/components/lr-virtual-list.md +22 -14
  574. package/llms/components/lr-voice-picker.md +8 -5
  575. package/llms/components/lr-widget-renderer.md +3 -3
  576. package/llms/components/lr-widget.md +1 -1
  577. package/llms/components/lr-word-cloud.md +6 -2
  578. package/llms/peers.md +12 -2
  579. package/llms/shared.md +70 -2
  580. package/llms/tokens.md +15 -1
  581. package/llms-full.txt +1335 -306
  582. package/package.json +17 -5
  583. package/vscode-css-data.json +93 -2
  584. package/vscode-html-data.json +513 -59
  585. package/web-types.json +457 -72
@@ -8,11 +8,6 @@ import{css}from"lit";import{forcedColorLegendSwatchStyles}from"./chart-forced-co
8
8
  block-size: auto;
9
9
  container-type: inline-size;
10
10
  contain-intrinsic-inline-size: var(--lr-size-20rem);
11
- /* Same token names/fallback chain as chart.ts's --lr-chart-* — a host
12
- already theming lr-chart gets lr-lite-chart themed for free, and
13
- vice versa. Unlike chart.ts (canvas-rendered, can't consume var()
14
- directly), this component is plain SVG/DOM, so these are read natively
15
- by the CSS below — no getComputedStyle()/JS-side resolution needed. */
16
11
  --_lr-chart-grid-color: var(--lr-color-border);
17
12
  --_lr-chart-tick-color: var(--lr-color-text-quiet);
18
13
  --_lr-chart-legend-color: var(--lr-color-text);
@@ -31,12 +26,6 @@ import{css}from"lit";import{forcedColorLegendSwatchStyles}from"./chart-forced-co
31
26
  'table';
32
27
  gap: var(--lr-space-xs);
33
28
  }
34
- /* layout="scroll": the svg below gets an explicit inline-size (its
35
- computed content width, set inline per-render since it depends on
36
- category count/barWidth) instead of the 100% below, and can end up
37
- wider than this container -- scroll to reveal the rest instead of
38
- squeezing. Scoped strictly to the reflected [layout='scroll'] attribute
39
- so layout="fit" (the default) never triggers this rule. */
40
29
  :host([layout='scroll']) [part='base'] {
41
30
  overflow-x: auto;
42
31
  overflow-y: hidden;
@@ -70,14 +59,6 @@ import{css}from"lit";import{forcedColorLegendSwatchStyles}from"./chart-forced-co
70
59
  [data-mark-hit-target] {
71
60
  cursor: pointer;
72
61
  }
73
- /* A mark's resting colour is its own series colour, which varies per dataset and can be anything
74
- a consumer passes -- including pure white or pure black. brightness() multiplies every channel,
75
- so on those two it is a literal no-op, and on everything else it moves in whichever direction
76
- the colour happens to sit rather than the direction the mark needs. Mixing toward
77
- --lr-color-mix-partner (which follows the text colour) always moves, and always away from the
78
- plot background. The base is currentColor: each mark carries its series colour in an inline
79
- 'color' alongside its fill attribute precisely so this mix has something to read -- CSS cannot
80
- see the value of a fill presentation attribute. */
81
62
  :where([part='bar']):hover,
82
63
  :where([part='point']):hover,
83
64
  :where(.mark-hit-group):hover [part='bar'],
@@ -109,14 +90,6 @@ import{css}from"lit";import{forcedColorLegendSwatchStyles}from"./chart-forced-co
109
90
  fill: none;
110
91
  stroke-width: var(--lr-border-width-medium);
111
92
  }
112
- /* The marks are the data key, so their own pixels survive forced colors: the colors they carry
113
- there already come from the forced-colors system-color remap of the --lr-color-chart-* ramp,
114
- and the per-series texture/dash layered over that is what keeps repeated system colors apart.
115
- Letting the platform force fill/stroke a second time would collapse every series back onto one
116
- color and erase the encoding entirely. Axes, gridlines, labels, and the legend text stay
117
- system-controlled. forced-color-adjust is inherited, so it must sit on the marks and the
118
- pattern tiles themselves rather than on the svg, which would opt the chrome out too -- the same
119
- placement rationale as swatch-picker.styles.ts's swatch-fill. */
120
93
  [part='bar'],
121
94
  [part='line'],
122
95
  [part='point'],
@@ -3,10 +3,13 @@ import { type TemplateResult } from 'lit';
3
3
  import { LyraElement } from '../../../internal/lyra-element.js';
4
4
  import type { ChatComposerStatus } from '../chat-composer/chat-composer.class.js';
5
5
  import type { AgentRunMetric } from '../../agent-tools/agent-run/agent-run.class.js';
6
+ export type { AgentRunMetric } from '../../agent-tools/agent-run/agent-run.class.js';
6
7
  import type { ContextInspectorSegment } from '../../agent-tools/context-inspector/context-inspector.class.js';
8
+ export type { ContextInspectorSegment } from '../../agent-tools/context-inspector/context-inspector.class.js';
7
9
  import type { AgentRun, CancelEventDetail, ChatMessage, Citation, CitationSelectEventDetail, GroundingAssessment, RetrievalChunk, RetryEventDetail } from '../../../ai/types.js';
8
10
  import type { RetrievalResultsSelectDetail } from '../../retrieval/retrieval-results/retrieval-results.class.js';
9
11
  import type { ToolTimelineEntry, ToolTimelineApprovalDetail } from '../../agent-tools/tool-timeline/tool-timeline.class.js';
12
+ export type { ToolTimelineEntry } from '../../agent-tools/tool-timeline/tool-timeline.class.js';
10
13
  export interface LyraAgentWorkspaceEventMap {
11
14
  'lr-input': CustomEvent<{
12
15
  value: string;
@@ -47,6 +50,19 @@ export interface LyraAgentWorkspaceEventMap {
47
50
  * Public collection properties take bounded, clone-owned readonly snapshots. Create a new
48
51
  * collection and reassign it after changes; mutating the assigned array does not update the view.
49
52
  *
53
+ * **The transcript is the only region that scrolls.** `[part='base']` is a three-row grid —
54
+ * header, conversation, composer — where only the middle row can shrink, so the composed
55
+ * `<lr-chat-viewport>` owns the scrolling and the chrome rows stay put. Header and composer
56
+ * content are therefore sized by their own content: give the workspace less block-size than they
57
+ * need and the conversation row collapses to zero first, after which the chrome is clipped with no
58
+ * scrollbar. That only happens with unusually large slotted chrome — a very tall `header-actions`
59
+ * toolbar, or a `composer` replacement much taller than the built-in one — and the fix belongs to
60
+ * whoever supplied it, through the public parts:
61
+ * `lr-agent-workspace::part(header) { max-block-size: 4rem; overflow: auto; }` (the same applies
62
+ * to `::part(composer)`). No component-owned custom property duplicates that, because a
63
+ * `::part()` rule from the consumer's tree already wins over the shadow stylesheet regardless of
64
+ * specificity and can set the cap and the overflow together.
65
+ *
50
66
  * @customElement lr-agent-workspace
51
67
  * @slot messages - Replaces the data-driven transcript message list.
52
68
  * @slot details - Replaces the built-in run/tool/retrieval/grounding/context details pane.
@@ -150,6 +166,10 @@ export declare class LyraAgentWorkspace extends LyraElement<LyraAgentWorkspaceEv
150
166
  private renderMessage;
151
167
  private renderMessages;
152
168
  private messageWindowOffsetFor;
169
+ /** Bound to every named slot whose assignment `render()` reads back through `hasSlotted()` --
170
+ * `messages` (which decides how `safeUnreadStartIndex` is projected), `details`, and `composer`.
171
+ * A slot assignment change alone schedules no Lit update, so without this the branch is only
172
+ * ever evaluated at mount. */
153
173
  private onNamedSlotChange;
154
174
  private renderDetails;
155
175
  private get hasBuiltInDetails();
@@ -59,7 +59,9 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
59
59
  .unreadStartIndex=${this.safeUnreadStartIndex}
60
60
  aria-label=${this.localize("agentWorkspaceConversation")}
61
61
  >
62
- <slot name="messages">${this.renderMessages()}</slot>
62
+ <slot name="messages" @slotchange=${this.onNamedSlotChange}
63
+ >${this.renderMessages()}</slot
64
+ >
63
65
  </lr-chat-viewport>
64
66
  </section>
65
67
  <aside
@@ -84,6 +84,9 @@ import{css}from"lit";const styles=css`
84
84
  max-inline-size: 100%;
85
85
  margin-block-end: var(--lr-space-m);
86
86
  }
87
+ slot[name='messages']::slotted([hidden]:not([hidden='until-found' i])) {
88
+ display: none;
89
+ }
87
90
  [part='messages-empty'] {
88
91
  margin-block: auto;
89
92
  }
@@ -4,13 +4,6 @@ import{css}from"lit";const styles=css`
4
4
  inline-size: 100%;
5
5
  block-size: var(--lr-audio-visualizer-height, var(--lr-size-3rem));
6
6
  --_lr-audio-visualizer-color-default: var(--lr-color-brand);
7
- /* --lr-color-brand-quiet (the brand-95/brand-30 fill step) reads at ~1.1:1 against
8
- --lr-color-surface in both themes -- nowhere near WCAG 1.4.11's 3:1 non-text minimum for the
9
- idle bars, which paint no other distinguishing shape or border. --lr-color-brand-border-normal
10
- (ramp step 60 in both light and dark) is the closest existing semantic-grid slot with enough
11
- contrast against the surface in both themes (~4.0:1 light, ~4.3:1 dark; see
12
- audio-visualizer.test.ts's "idle-state bar-fill contrast" suite) while staying visually
13
- quieter than the active/loud --lr-color-brand fill. */
14
7
  --_lr-audio-visualizer-quiet-color-default: var(--lr-color-brand-border-normal);
15
8
  --_lr-audio-visualizer-ambient-duration-default: var(--lr-duration-ambient);
16
9
  }
@@ -25,14 +25,11 @@ import{css}from"lit";const styles=css`
25
25
  color: inherit;
26
26
  cursor: pointer;
27
27
  }
28
- /* Keep state qualifiers low-specificity so sibling rules remain easy to compose. */
29
28
  :where([part='previous-button']):hover:where(:not(:disabled)),
30
29
  :where([part='next-button']):hover:where(:not(:disabled)) {
31
30
  background: var(--lr-color-brand-quiet);
32
31
  color: var(--lr-color-brand);
33
32
  }
34
- /* Pressed: the same brand-quiet fill pushed a further step toward the text color, so the press
35
- reads as a deliberate escalation of the hover tint rather than a second, unrelated color. */
36
33
  :where([part='previous-button']):active:where(:not(:disabled)),
37
34
  :where([part='next-button']):active:where(:not(:disabled)) {
38
35
  background: color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));
@@ -16,49 +16,20 @@ import{css}from"lit";const styles=css`
16
16
  [part='base']:focus-within {
17
17
  border-color: var(--lr-color-brand);
18
18
  }
19
- /* Chrome-less escape, the library-wide frame="plain" (and lr-callout's [inline]): a composer is
20
- routinely docked to the block-end edge of a surface that already draws its own
21
- border/background (a chat panel, a dialog footer, a bordered toolbar), where this card chrome
22
- doubles the frame. Only the box decoration goes -- the flex layout, gap, disabled treatment and
23
- the send/stop button's own chrome stay. */
24
19
  :host([frame='plain']) [part='base'] {
25
20
  padding: 0;
26
21
  border: 0;
27
22
  border-radius: 0;
28
23
  background: transparent;
29
24
  }
30
- /* The border-color shift above is this component's only focus affordance, and there is no border
31
- left to shift once plain has removed it -- focus would become invisible, which is an
32
- accessibility regression rather than a cosmetic one (the textarea itself sets outline: none, so
33
- nothing else marks the focused row). A chrome-less composer underlines its whole input row
34
- instead, the same swap-the-affordance approach lr-stat's plain frame takes. Drawn as an
35
- inset box-shadow rather than a border so it costs no layout: adding a real border back on focus
36
- would shift the row by its width every time the textarea is focused. */
37
25
  :host([frame='plain']) [part='base']:focus-within {
38
26
  box-shadow: inset 0 calc(-1 * var(--lr-focus-ring-width)) 0 0 var(--lr-focus-ring-color);
39
27
  }
40
- /* :host(:disabled), not :host([disabled]) -- this is a form-associated
41
- custom element (FormAssociated mixin -> static formAssociated = true),
42
- so the UA computes its disabled state (and therefore :disabled/:enabled
43
- matching) the same way it does for a native form control: from its own
44
- disabled content attribute *or* an ancestor <fieldset disabled>'s
45
- cascade. Keying this off the attribute selector only ever matched the
46
- first case -- a composer disabled purely via an ancestor fieldset had
47
- effectiveDisabled correctly gating the textarea/button underneath, but
48
- the card around them still rendered at full opacity with a normal
49
- cursor. */
50
28
  :host(:disabled) [part='base'] {
51
29
  opacity: var(--lr-opacity-disabled);
52
30
  cursor: not-allowed;
53
31
  }
54
32
 
55
- /* :empty never matches [part='chips'] -- it always contains a literal
56
- <slot> child regardless of assigned content -- so real emptiness is
57
- tracked in JS (hasChipsSlot) and reflected via [hidden] instead (same
58
- fix as lr-date-input's hint/error parts). Author-level display rules
59
- always beat the UA stylesheet's [hidden] rule regardless of source
60
- order/specificity (different cascade origins), so the override below is
61
- required, not redundant. */
62
33
  [part='chips'] {
63
34
  display: flex;
64
35
  flex-wrap: wrap;
@@ -78,9 +49,6 @@ import{css}from"lit";const styles=css`
78
49
  display: flex;
79
50
  flex: 0 0 auto;
80
51
  align-items: center;
81
- /* Matches the textarea's own first-line box so a start icon button
82
- sits level with placeholder/typed text at min-rows, not glued to the
83
- row's cross-axis edge. */
84
52
  padding-block-end: var(--lr-space-xs);
85
53
  }
86
54
  [part='start'][hidden] {
@@ -97,10 +65,6 @@ import{css}from"lit";const styles=css`
97
65
  background: transparent;
98
66
  color: inherit;
99
67
  font: inherit;
100
- /* A concrete, unitless line-height so the runtime auto-resize logic
101
- (chat-composer.ts's resizeTextarea()) can read a real pixel value
102
- back out of getComputedStyle() -- the UA default of "normal" has no
103
- single resolved px figure to measure rows against. */
104
68
  line-height: var(--lr-line-height-normal);
105
69
  padding-block: var(--lr-space-xs);
106
70
  overflow-y: hidden;
@@ -136,12 +100,6 @@ import{css}from"lit";const styles=css`
136
100
  cursor: pointer;
137
101
  transition: background-color var(--lr-transition-fast);
138
102
  }
139
- /* Hover/press are a background mix, never filter: brightness(). brightness() multiplies every
140
- channel, so it lightens a dark fill and darkens a light one only by accident, does nothing at
141
- all to a pure white or pure black brand color, and -- because filter applies to the whole
142
- subtree -- dims the glyph inside the button along with its fill. Mixing the resting fill toward
143
- --lr-color-mix-partner (which tracks the text color) always moves, always in the direction the
144
- surface needs, and leaves the icon alone. */
145
103
  :where([part='action-button']):hover:where(:not(:disabled)) {
146
104
  background: color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-hover));
147
105
  }
@@ -163,15 +121,6 @@ import{css}from"lit";const styles=css`
163
121
  :host(:dir(rtl)) [part='send-glyph'] {
164
122
  transform: scaleX(-1);
165
123
  }
166
- /* Stop affordance while generating -- a neutral/quiet treatment rather
167
- than the resting brand fill, so it doesn't read as "send is still
168
- available" while a response is in flight. Reads a dedicated
169
- --lr-chat-composer-busy-bg cssprop rather than the shared
170
- --lr-color-text-quiet token directly: that same shared token also drives
171
- [part='textarea']::placeholder's color above, so a consumer overriding it
172
- to recolor just this busy-state fill would silently recolor the
173
- placeholder too. Same decoupling lr-chat-message's user-bubble background
174
- already does against its own shared-token collision. */
175
124
  :host([status='sending']) [part='action-button'],
176
125
  :host([status='streaming']) [part='action-button'] {
177
126
  background: var(--lr-chat-composer-busy-bg, var(--lr-color-text-quiet));
@@ -17,7 +17,6 @@ import{css}from"lit";const styles=css`
17
17
  overflow-wrap: anywhere;
18
18
  }
19
19
 
20
- /* -- author ------------------------------------------------------------- */
21
20
  :host([message-role='user']) [part='bubble'] {
22
21
  margin-inline-start: auto;
23
22
  background: var(--lr-chat-message-user-bubble-bg, var(--lr-color-brand-quiet));
@@ -34,10 +33,6 @@ import{css}from"lit";const styles=css`
34
33
  border-style: dashed;
35
34
  }
36
35
 
37
- /* -- status ---------------------------------------------------------------
38
- 'failed' gets an unmistakable treatment that does not rely on color
39
- alone (see [part='status-text']); 'streaming' is a quieter accent plus
40
- the pulsing dot below. */
41
36
  :host([status='failed']) [part='bubble'] {
42
37
  border-color: var(--lr-chat-message-failed-border-color, var(--lr-color-danger));
43
38
  background: var(--lr-chat-message-failed-bg, var(--lr-color-danger-quiet));
@@ -103,18 +98,9 @@ import{css}from"lit";const styles=css`
103
98
  display: inline-flex;
104
99
  transition: transform var(--lr-transition-fast);
105
100
  }
106
- /* Chevron points at the content: rotated (pointing down) while expanded,
107
- resting (pointing right) while collapsed -- same rotation direction as
108
- lr-code-block's/lr-thinking-panel's own toggles. */
109
101
  :host(:not([collapsed])) [part='collapse-button'] .chevron {
110
102
  transform: rotate(90deg);
111
103
  }
112
- /* RTL: the resting (collapsed) chevron mirrors to point left, the
113
- conventional mirrored disclosure-triangle direction for RTL. Scoped to
114
- [collapsed] specifically -- like lr-code-block's identical rule --
115
- so it never competes with the expanded-state rule above, which needs
116
- no mirroring: rotating this left-right-asymmetric glyph 90deg already
117
- produces a left-right-symmetric down chevron. */
118
104
  :host([collapsed]:dir(rtl)) [part='collapse-button'] .chevron {
119
105
  transform: scaleX(-1);
120
106
  }
@@ -125,16 +111,6 @@ import{css}from"lit";const styles=css`
125
111
  gap: var(--lr-space-xs);
126
112
  }
127
113
 
128
- /* Fully transparent to layout -- the same display:contents idiom
129
- lr-attachment-trigger's :host and lr-combobox's [part='tags'] already
130
- use for identical reasons. The slot itself contributes no box, so
131
- whatever the host slots in here (expected to be a block-level
132
- role="alert" element) becomes a direct flex item of [part='bubble'],
133
- inheriting its gap, exactly as if it had been authored as a sibling of
134
- [part='body']/[part='footer'] -- no ::part(failure) override needed to
135
- get there. When empty, this produces zero boxes and zero footprint,
136
- which is what keeps the failed state byte-identical to today's
137
- rendering whenever the failure slot goes unused. */
138
114
  [part='failure'] {
139
115
  display: contents;
140
116
  }
@@ -162,23 +138,19 @@ import{css}from"lit";const styles=css`
162
138
  :host([actions-position='outside']) [part='actions'] {
163
139
  margin-block-start: var(--lr-space-2xs);
164
140
  }
141
+ :host([actions-position='outside'][message-role='user']) [part='actions'] {
142
+ justify-content: flex-end;
143
+ }
144
+ :host([actions-position='outside'][message-role='assistant']) [part='actions'],
145
+ :host([actions-position='outside'][message-role='system']) [part='actions'] {
146
+ justify-content: flex-start;
147
+ }
165
148
  [part='timestamp'] {
166
149
  white-space: nowrap;
167
150
  }
168
- /* [part='timestamp']/[part='actions'] inherit the footer's own quiet
169
- text color by default; against the brand-quiet bubble background a
170
- user-role message gets, that muted color's contrast ratio drops below
171
- 4.5:1 (verified via axe's color-contrast rule — same failure mode as
172
- the failed-state rule below), so the footer falls back to the bubble's
173
- own full text color there instead. Declared before the failed-state
174
- rule so an equal-specificity failed user message still gets the danger
175
- footer that matches its danger-quiet background. */
176
151
  :host([message-role='user']) [part='footer'] {
177
152
  color: var(--lr-chat-message-user-footer-color, var(--lr-color-text));
178
153
  }
179
- /* Same contrast reasoning against the danger-quiet bubble background a
180
- 'failed' message gets underneath it, so the whole footer switches to
181
- the same --lr-color-danger already used for [part='status-text']. */
182
154
  :host([status='failed']) [part='footer'] {
183
155
  color: var(--lr-chat-message-failed-footer-color, var(--lr-color-danger));
184
156
  }
@@ -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,query,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{finiteCount,finiteRange}from"../../../internal/numbers.js";import{LyraVirtualList}from"../../layout/virtual-list/virtual-list.class.js";import{styles}from"./chat-viewport.styles.js";import{getNumberFormat,getPluralRules}from"../../../internal/intl-cache.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{composedAccessibilityText}from"../../../internal/accessibility-visibility.js";import{applyComposedFocusRepair,captureComposedFocusRepair,collectComposedFocusTargets}from"../../../internal/focus-navigation.js";import{LYRA_DEFAULT_chatViewportLabel,LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_jumpToLatest,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_newMessageCount,LYRA_DEFAULT_newMessages,LYRA_DEFAULT_newMessagesCount,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_progress,LYRA_DEFAULT_search,LYRA_DEFAULT_select}from"../../../internal/default-strings.generated.js";class LyraChatViewport extends LyraElement{constructor(){super(...arguments),this.follow=!0,this.live="off",this.bottomThreshold=24,this.unreadStartIndex=null,this.label="",this.accessibleLabel=null,this.unreadDividerTop=null,this.pendingUserIntent=!1,this.pendingUserIntentExpiryFrame=null,this.scrollbarDragActive=!1,this.isMounting=!0,this.growthFrame=null,this.armedMode=null,this.armGeneration=0,this.followFocusRepair=null,this.knownProjectedNodes=new WeakSet,this.markUserIntent=()=>{this.pendingUserIntent=!0,this.cancelPendingUserIntentExpiry();const owner=this.ownerDocument.defaultView;if(!owner){this.pendingUserIntent=!1;return}const firstFrame={owner,handle:0};firstFrame.handle=owner.requestAnimationFrame(()=>{if(this.pendingUserIntentExpiryFrame!==firstFrame)return;if(!this.isConnected||this.ownerDocument.defaultView!==owner){this.pendingUserIntentExpiryFrame=null,this.pendingUserIntent=!1;return}const secondFrame={owner,handle:0};secondFrame.handle=owner.requestAnimationFrame(()=>{this.pendingUserIntentExpiryFrame===secondFrame&&(this.pendingUserIntentExpiryFrame=null,this.pendingUserIntent=!1)}),this.pendingUserIntentExpiryFrame=secondFrame}),this.pendingUserIntentExpiryFrame=firstFrame},this.onPointerDown=event=>{const scroll=this.scrollEl;if(!scroll||event.button!==0||event.target!==scroll)return;const computed=getComputedStyle(scroll),borderLeft=Number.parseFloat(computed.borderLeftWidth)||0,borderRight=Number.parseFloat(computed.borderRightWidth)||0,gutter=scroll.offsetWidth-scroll.clientWidth-borderLeft-borderRight;if(gutter<=0)return;const rect=scroll.getBoundingClientRect();if(!(computed.direction==="rtl"?event.clientX<=rect.left+borderLeft+gutter:event.clientX>=rect.right-borderRight-gutter))return;this.scrollbarDragActive=!0;const owner=this.ownerDocument.defaultView;!owner||this.scrollbarDragWindow===owner||(this.releaseScrollbarDragListeners(),this.scrollbarDragWindow=owner,owner.addEventListener("pointerup",this.onPointerUp),owner.addEventListener("pointercancel",this.onPointerUp),owner.addEventListener("lostpointercapture",this.onPointerUp))},this.onPointerUp=()=>{this.scrollbarDragActive=!1,this.releaseScrollbarDragListeners()},this.onKeyDown=e=>{(e.key==="PageUp"||e.key==="ArrowUp"||e.key==="Home")&&this.markUserIntent()},this.onScroll=()=>{const el=this.scrollEl;if(!el)return;if(el.scrollHeight-el.scrollTop-el.clientHeight<=this.effectiveBottomThreshold){this.clearUserIntent(),this.follow||(this.follow=!0);return}(this.consumeUserIntent()||this.scrollbarDragActive)&&this.follow&&(this.follow=!1)},this.onVirtualRangeChanged=e=>{const list=this.virtualListEl;if(!list||e.composedPath()[0]!==list)return;const detail=e.detail;if(!detail||!Number.isFinite(detail.start)||!Number.isFinite(detail.end)||detail.start<0||detail.end<detail.start)return;if(list.items.length>0&&detail.end>=list.items.length-1){this.clearUserIntent(),this.follow||(this.follow=!0);return}if(this.consumeUserIntent()||this.scrollbarDragActive){this.follow&&(this.follow=!1);return}this.follow&&this.performScrollToEnd("auto")},this.onSlotChange=()=>{this.announceNewProjectedNodes();const wasVirtual=this.armedMode==="virtual";this.armObservers(),this.armedMode==="virtual"!==wasVirtual&&this.requestUpdate()},this.onContentMutations=records=>{this.scheduleGrowthTick();const sink=this.announcementSink;if(sink)for(const record of records)for(const node of record.addedNodes){if(this.knownProjectedNodes.has(node)||node instanceof Element&&node.hasAttribute("data-lr-chat-viewport-unread-boundary"))continue;this.knownProjectedNodes.add(node);const text=this.announcementTextFor(node).replace(/\s+/g," ").trim();text&&sink.announce(text)}}}static{this.defaultStrings={...super.defaultStrings,chatViewportLabel:LYRA_DEFAULT_chatViewportLabel,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,jumpToLatest:LYRA_DEFAULT_jumpToLatest,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,newMessageCount:LYRA_DEFAULT_newMessageCount,newMessages:LYRA_DEFAULT_newMessages,newMessagesCount:LYRA_DEFAULT_newMessagesCount,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,progress:LYRA_DEFAULT_progress,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select}}static{this.styles=[LyraElement.styles,styles]}get messageElements(){let elements=this.contentSlot?.assignedElements({flatten:!0})??Array.from(this.children);for(let depth=0;depth<4&&elements.some(element=>element.localName==="slot");depth++)elements=elements.flatMap(element=>element.localName==="slot"?element.assignedElements({flatten:!0}):[element]);return elements.filter(element=>!element.hasAttribute("data-lr-chat-viewport-unread-boundary"))}get virtualListEl(){const children=this.messageElements;return children.length===1&&children[0]instanceof LyraVirtualList?children[0]:null}get effectiveBottomThreshold(){return finiteRange(this.bottomThreshold,24,0)}get effectiveUnreadStartIndex(){return this.unreadStartIndex==null?null:finiteCount(this.unreadStartIndex)}connectedCallback(){super.connectedCallback(),this.syncAnnouncementSink(),this.hasUpdated&&this.armObservers()}disconnectedCallback(){super.disconnectedCallback(),this.releaseAnnouncementSink(),this.teardownObservers(),this.releaseScrollbarDragListeners(),this.clearUserIntent(),this.scrollbarDragActive=!1,this.followFocusRepair=null,this.unreadBoundaryEl?.remove(),this.unreadBoundaryEl=void 0}willUpdate(changed){if(super.willUpdate(changed),!this.hasUpdated||!changed.has("follow")||!this.follow||changed.get("follow")!==!1)return;const pill=this.renderRoot.querySelector('[part="jump-pill"]');this.followFocusRepair=pill?captureComposedFocusRepair(pill,this.transcriptFocusOwner()):null}firstUpdated(changed){super.firstUpdated(changed),this.armObservers()}updated(changed){super.updated(changed),changed.has("live")&&this.syncAnnouncementSink();const wasMounting=this.isMounting;if(this.isMounting=!1,changed.has("follow")){if(this.follow){const behavior=wasMounting?"auto":this.pendingScrollBehavior??(prefersReducedMotion(this.ownerDocument.defaultView)?"auto":"smooth");this.pendingScrollBehavior=void 0,this.performScrollToEnd(behavior)}wasMounting||this.emit("lr-follow-change",{following:this.follow})}changed.has("unreadStartIndex")&&!wasMounting&&this.updateUnreadDividerPosition();const focusRepair=this.followFocusRepair;this.followFocusRepair=null,focusRepair&&applyComposedFocusRepair(focusRepair)}transcriptFocusOwner(){const list=this.virtualListEl;return list?collectComposedFocusTargets(list,{includeRoot:!1,mode:"programmatic"}).elements[0]??null:this.scrollEl??null}scrollToBottom(options){const behavior=prefersReducedMotion(this.ownerDocument.defaultView)?"auto":options?.behavior??"smooth";this.follow?this.performScrollToEnd(behavior):(this.pendingScrollBehavior=behavior,this.follow=!0)}scrollToUnread(options){const unreadStartIndex=this.effectiveUnreadStartIndex;if(unreadStartIndex==null)return!1;const behavior=prefersReducedMotion(this.ownerDocument.defaultView)?"auto":options?.behavior??"smooth",list=this.virtualListEl;if(list)return unreadStartIndex>=list.items.length?!1:(list.scrollToIndex(unreadStartIndex,{align:"start",behavior}),!0);const scrollEl=this.scrollEl;return!scrollEl||this.unreadDividerTop==null?!1:(scrollEl.scrollTo({top:this.unreadDividerTop,behavior}),!0)}performScrollToEnd(behavior){const list=this.virtualListEl;if(list){list.items.length>0&&list.scrollToIndex(list.items.length-1,{align:"end",behavior});return}const el=this.scrollEl;el&&el.scrollTo({top:el.scrollHeight,behavior})}get totalCount(){const list=this.virtualListEl;return list?list.items.length:this.messageElements.length}get unreadCount(){const unreadStartIndex=this.effectiveUnreadStartIndex;return unreadStartIndex==null?0:Math.max(0,this.totalCount-unreadStartIndex)}pillLabel(){const count=this.unreadCount;if(count<=0)return this.localize("jumpToLatest");const key=getPluralRules(this.effectiveLocale).select(count)==="one"?"newMessageCount":"newMessagesCount";return this.localize(key,void 0,{count:getNumberFormat(this.effectiveLocale).format(count)})}updateUnreadDividerPosition(){const unreadStartIndex=this.effectiveUnreadStartIndex;if(this.virtualListEl||unreadStartIndex==null){this.unreadDividerTop=null,this.syncSemanticUnreadBoundary();return}const content=this.contentEl,target=this.messageElements[unreadStartIndex];if(!target||!content){this.unreadDividerTop=null,this.syncSemanticUnreadBoundary();return}this.syncSemanticUnreadBoundary(target),this.unreadDividerTop=target.getBoundingClientRect().top-content.getBoundingClientRect().top}syncSemanticUnreadBoundary(target){if(!target||this.virtualListEl){this.unreadBoundaryEl?.remove(),this.unreadBoundaryEl=void 0;return}const parent=target.parentNode;if(!parent)return;const boundary=this.unreadBoundaryEl??this.ownerDocument.createElement("div");boundary.setAttribute("data-lr-chat-viewport-unread-boundary",""),boundary.setAttribute("role","separator"),boundary.setAttribute("aria-label",this.localize("newMessages"));const targetSlot=target.getAttribute("slot");targetSlot===null?boundary.removeAttribute("slot"):boundary.setAttribute("slot",targetSlot),(boundary.parentNode!==parent||boundary.nextSibling!==target)&&parent.insertBefore(boundary,target),this.unreadBoundaryEl=boundary,this.knownProjectedNodes.add(boundary)}cancelPendingUserIntentExpiry(){const frame=this.pendingUserIntentExpiryFrame;frame&&frame.owner.cancelAnimationFrame(frame.handle),this.pendingUserIntentExpiryFrame=null}clearUserIntent(){this.pendingUserIntent=!1,this.cancelPendingUserIntentExpiry()}consumeUserIntent(){const wasPending=this.pendingUserIntent;return this.clearUserIntent(),wasPending}releaseScrollbarDragListeners(){const owner=this.scrollbarDragWindow;owner&&(owner.removeEventListener("pointerup",this.onPointerUp),owner.removeEventListener("pointercancel",this.onPointerUp),owner.removeEventListener("lostpointercapture",this.onPointerUp),this.scrollbarDragWindow=void 0)}scheduleGrowthTick(){if(this.growthFrame)return;const owner=this.ownerDocument.defaultView;if(!owner)return;const frame={owner,handle:0};frame.handle=owner.requestAnimationFrame(()=>{this.growthFrame===frame&&(this.growthFrame=null,!(!this.isConnected||this.ownerDocument.defaultView!==owner)&&(this.updateUnreadDividerPosition(),this.follow&&this.performScrollToEnd("auto")))}),this.growthFrame=frame}releaseAnnouncementSink(){this.announcementSink?.release(),this.announcementSink=void 0}syncAnnouncementSink(){const politeness=this.live==="polite"||this.live==="assertive"?this.live:void 0;if(!this.isConnected||politeness===void 0){this.releaseAnnouncementSink();return}this.announcementSink?.politeness===politeness&&this.announcementSink.element.ownerDocument===this.ownerDocument||(this.releaseAnnouncementSink(),this.announcementSink=acquireAnnouncementSink(politeness,{document:this.ownerDocument,source:this}))}announcementTextFor(node){const primary=composedAccessibilityText(node);if(!(node instanceof Element)||!node.shadowRoot)return primary;const content=composedAccessibilityText(node.childNodes),normalizedPrimary=primary.replace(/\s+/g," ").trim(),normalizedContent=content.replace(/\s+/g," ").trim();return!normalizedContent||normalizedPrimary.includes(normalizedContent)?primary:primary?`${primary} ${content}`:content}announceNewProjectedNodes(){const sink=this.announcementSink;for(const node of this.messageElements){if(this.knownProjectedNodes.has(node)||(this.knownProjectedNodes.add(node),!sink||!this.hasUpdated))continue;const text=this.announcementTextFor(node).replace(/\s+/g," ").trim();text&&sink.announce(text)}}armObservers(){const owner=this.ownerDocument.defaultView,list=this.virtualListEl,mode=list?"virtual":"slotted";for(const node of this.messageElements)this.knownProjectedNodes.add(node);if(this.observerWindow===owner&&this.armedMode===mode&&(mode==="slotted"||this.listenedVirtualList===list))return;if(this.teardownObservers(),this.observerWindow=owner??void 0,this.armedMode=mode,list)this.listenedVirtualList=list,list.addEventListener("lr-visible-range-changed",this.onVirtualRangeChanged);else{const content=this.contentEl;if(content){let baselineSeen=!1;const ResizeObserverCtor=owner?.ResizeObserver;if(ResizeObserverCtor){let observer;observer=new ResizeObserverCtor(()=>{if(!(!this.isConnected||this.ownerDocument.defaultView!==owner||this.contentResizeObserver!==observer)){if(!baselineSeen){baselineSeen=!0;return}this.scheduleGrowthTick()}}),this.contentResizeObserver=observer,this.contentResizeObserver.observe(content)}}const MutationObserverCtor=owner?.MutationObserver;if(MutationObserverCtor){let observer;observer=new MutationObserverCtor(records=>{!this.isConnected||this.ownerDocument.defaultView!==owner||this.contentMutationObserver!==observer||this.onContentMutations(records)}),this.contentMutationObserver=observer,this.contentMutationObserver.observe(this,{childList:!0})}}const scrollEl=this.scrollEl;if(scrollEl){let baselineSeen=!1;const ResizeObserverCtor=owner?.ResizeObserver;if(ResizeObserverCtor){let observer;observer=new ResizeObserverCtor(()=>{if(!(!this.isConnected||this.ownerDocument.defaultView!==owner||this.scrollResizeObserver!==observer)){if(!baselineSeen){baselineSeen=!0;return}this.follow&&this.performScrollToEnd("auto")}}),this.scrollResizeObserver=observer,this.scrollResizeObserver.observe(scrollEl)}}const generation=++this.armGeneration;queueMicrotask(()=>{!this.isConnected||generation!==this.armGeneration||this.updateUnreadDividerPosition()})}teardownObservers(){this.scrollResizeObserver?.disconnect(),this.scrollResizeObserver=void 0,this.contentResizeObserver?.disconnect(),this.contentResizeObserver=void 0,this.contentMutationObserver?.disconnect(),this.contentMutationObserver=void 0,this.listenedVirtualList?.removeEventListener("lr-visible-range-changed",this.onVirtualRangeChanged),this.listenedVirtualList=void 0,this.observerWindow=void 0,this.armedMode=null,this.armGeneration++;const frame=this.growthFrame;frame&&frame.owner.cancelAnimationFrame(frame.handle),this.growthFrame=null}render(){const label=this.accessibleLabel??(this.label||this.localize("chatViewportLabel")),virtual=this.virtualListEl!==null;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,query,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{finiteCount,finiteRange}from"../../../internal/numbers.js";import{LyraVirtualList}from"../../layout/virtual-list/virtual-list.class.js";import{styles}from"./chat-viewport.styles.js";import{getNumberFormat,getPluralRules}from"../../../internal/intl-cache.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{composedAccessibilityText}from"../../../internal/accessibility-visibility.js";import{applyComposedFocusRepair,captureComposedFocusRepair,collectComposedFocusTargets}from"../../../internal/focus-navigation.js";import{LYRA_DEFAULT_chatViewportLabel,LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_jumpToLatest,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_newMessageCount,LYRA_DEFAULT_newMessages,LYRA_DEFAULT_newMessagesCount,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_progress,LYRA_DEFAULT_search,LYRA_DEFAULT_select}from"../../../internal/default-strings.generated.js";class LyraChatViewport extends LyraElement{constructor(){super(...arguments),this.follow=!0,this.live="off",this.bottomThreshold=24,this.unreadStartIndex=null,this.label="",this.accessibleLabel=null,this.unreadDividerTop=null,this.pendingUserIntent=!1,this.pendingUserIntentExpiryFrame=null,this.scrollbarDragActive=!1,this.isMounting=!0,this.growthFrame=null,this.armedMode=null,this.armGeneration=0,this.followFocusRepair=null,this.knownProjectedNodes=new WeakSet,this.markUserIntent=()=>{this.pendingUserIntent=!0,this.cancelPendingUserIntentExpiry();const owner=this.ownerDocument.defaultView;if(!owner){this.pendingUserIntent=!1;return}const firstFrame={owner,handle:0};firstFrame.handle=owner.requestAnimationFrame(()=>{if(this.pendingUserIntentExpiryFrame!==firstFrame)return;if(!this.isConnected||this.ownerDocument.defaultView!==owner){this.pendingUserIntentExpiryFrame=null,this.pendingUserIntent=!1;return}const secondFrame={owner,handle:0};secondFrame.handle=owner.requestAnimationFrame(()=>{this.pendingUserIntentExpiryFrame===secondFrame&&(this.pendingUserIntentExpiryFrame=null,this.pendingUserIntent=!1)}),this.pendingUserIntentExpiryFrame=secondFrame}),this.pendingUserIntentExpiryFrame=firstFrame},this.onPointerDown=event=>{const scroll=this.scrollEl;if(!scroll||event.button!==0||event.target!==scroll)return;const computed=getComputedStyle(scroll),borderLeft=Number.parseFloat(computed.borderLeftWidth)||0,borderRight=Number.parseFloat(computed.borderRightWidth)||0,gutter=scroll.offsetWidth-scroll.clientWidth-borderLeft-borderRight;if(gutter<=0)return;const rect=scroll.getBoundingClientRect();if(!(computed.direction==="rtl"?event.clientX<=rect.left+borderLeft+gutter:event.clientX>=rect.right-borderRight-gutter))return;this.scrollbarDragActive=!0;const owner=this.ownerDocument.defaultView;!owner||this.scrollbarDragWindow===owner||(this.releaseScrollbarDragListeners(),this.scrollbarDragWindow=owner,owner.addEventListener("pointerup",this.onPointerUp),owner.addEventListener("pointercancel",this.onPointerUp),owner.addEventListener("lostpointercapture",this.onPointerUp))},this.onPointerUp=()=>{this.scrollbarDragActive=!1,this.releaseScrollbarDragListeners()},this.onKeyDown=e=>{(e.key==="PageUp"||e.key==="ArrowUp"||e.key==="Home")&&this.markUserIntent()},this.onScroll=()=>{const el=this.scrollEl;if(!el)return;if(el.scrollHeight-el.scrollTop-el.clientHeight<=this.effectiveBottomThreshold){this.clearUserIntent(),this.follow||(this.follow=!0);return}(this.consumeUserIntent()||this.scrollbarDragActive)&&this.follow&&(this.follow=!1)},this.onVirtualRangeChanged=e=>{const list=this.virtualListEl;if(!list||e.composedPath()[0]!==list)return;const detail=e.detail;if(!detail||!Number.isFinite(detail.start)||!Number.isFinite(detail.end)||detail.start<0||detail.end<detail.start)return;if(list.items.length>0&&detail.end>=list.items.length-1){this.clearUserIntent(),this.follow||(this.follow=!0);return}if(this.consumeUserIntent()||this.scrollbarDragActive){this.follow&&(this.follow=!1);return}this.follow&&this.performScrollToEnd("auto")},this.onSlotChange=()=>{this.announceNewProjectedNodes();const wasVirtual=this.armedMode==="virtual";this.armObservers(),this.armedMode==="virtual"!==wasVirtual&&this.requestUpdate()},this.onContentMutations=records=>{this.scheduleGrowthTick();const sink=this.announcementSink;if(sink)for(const record of records)for(const node of record.addedNodes){if(this.knownProjectedNodes.has(node)||node instanceof Element&&node.hasAttribute("data-lr-chat-viewport-unread-boundary"))continue;this.knownProjectedNodes.add(node);const text=this.announcementTextFor(node).replace(/\s+/g," ").trim();text&&sink.announce(text)}}}static{this.defaultStrings={...super.defaultStrings,chatViewportLabel:LYRA_DEFAULT_chatViewportLabel,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,jumpToLatest:LYRA_DEFAULT_jumpToLatest,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,newMessageCount:LYRA_DEFAULT_newMessageCount,newMessages:LYRA_DEFAULT_newMessages,newMessagesCount:LYRA_DEFAULT_newMessagesCount,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,progress:LYRA_DEFAULT_progress,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select}}static{this.styles=[LyraElement.styles,styles]}get messageElements(){let elements=this.contentSlot?.assignedElements({flatten:!0})??Array.from(this.children);for(let depth=0;depth<4&&elements.some(element=>element.localName==="slot");depth++)elements=elements.flatMap(element=>element.localName==="slot"?element.assignedElements({flatten:!0}):[element]);return elements.filter(element=>!element.hasAttribute("data-lr-chat-viewport-unread-boundary"))}get virtualListEl(){const children=this.messageElements;return children.length===1&&children[0]instanceof LyraVirtualList?children[0]:null}get effectiveBottomThreshold(){return finiteRange(this.bottomThreshold,24,0)}get effectiveUnreadStartIndex(){return this.unreadStartIndex==null?null:finiteCount(this.unreadStartIndex)}connectedCallback(){super.connectedCallback(),this.syncAnnouncementSink(),this.hasUpdated&&this.armObservers()}disconnectedCallback(){super.disconnectedCallback(),this.releaseAnnouncementSink(),this.teardownObservers(),this.releaseScrollbarDragListeners(),this.clearUserIntent(),this.scrollbarDragActive=!1,this.followFocusRepair=null,this.unreadBoundaryEl?.remove(),this.unreadBoundaryEl=void 0}willUpdate(changed){if(super.willUpdate(changed),this.hasUpdated&&changed.has("follow")&&this.follow&&changed.get("follow")===!1){const pill=this.renderRoot.querySelector('[part="jump-pill"]');this.followFocusRepair=pill?captureComposedFocusRepair(pill,this.transcriptFocusOwner()):null}this.hasUpdated&&changed.has("unreadStartIndex")&&this.updateUnreadDividerPosition()}firstUpdated(changed){super.firstUpdated(changed),this.armObservers()}updated(changed){super.updated(changed),changed.has("live")&&this.syncAnnouncementSink();const wasMounting=this.isMounting;if(this.isMounting=!1,changed.has("follow")){if(this.follow){const behavior=wasMounting?"auto":this.pendingScrollBehavior??(prefersReducedMotion(this.ownerDocument.defaultView)?"auto":"smooth");this.pendingScrollBehavior=void 0,this.performScrollToEnd(behavior)}wasMounting||this.emit("lr-follow-change",{following:this.follow})}const focusRepair=this.followFocusRepair;this.followFocusRepair=null,focusRepair&&applyComposedFocusRepair(focusRepair)}transcriptFocusOwner(){const list=this.virtualListEl;return list?collectComposedFocusTargets(list,{includeRoot:!1,mode:"programmatic"}).elements[0]??null:this.scrollEl??null}scrollToBottom(options){const behavior=prefersReducedMotion(this.ownerDocument.defaultView)?"auto":options?.behavior??"smooth";this.follow?this.performScrollToEnd(behavior):(this.pendingScrollBehavior=behavior,this.follow=!0)}scrollToUnread(options){const unreadStartIndex=this.effectiveUnreadStartIndex;if(unreadStartIndex==null)return!1;const behavior=prefersReducedMotion(this.ownerDocument.defaultView)?"auto":options?.behavior??"smooth",list=this.virtualListEl;if(list)return unreadStartIndex>=list.items.length?!1:(list.scrollToIndex(unreadStartIndex,{align:"start",behavior}),!0);const scrollEl=this.scrollEl;return!scrollEl||this.unreadDividerTop==null?!1:(scrollEl.scrollTo({top:this.unreadDividerTop,behavior}),!0)}performScrollToEnd(behavior){const list=this.virtualListEl;if(list){list.items.length>0&&list.scrollToIndex(list.items.length-1,{align:"end",behavior});return}const el=this.scrollEl;el&&el.scrollTo({top:el.scrollHeight,behavior})}get totalCount(){const list=this.virtualListEl;return list?list.items.length:this.messageElements.length}get unreadCount(){const unreadStartIndex=this.effectiveUnreadStartIndex;return unreadStartIndex==null?0:Math.max(0,this.totalCount-unreadStartIndex)}pillLabel(){const count=this.unreadCount;if(count<=0)return this.localize("jumpToLatest");const key=getPluralRules(this.effectiveLocale).select(count)==="one"?"newMessageCount":"newMessagesCount";return this.localize(key,void 0,{count:getNumberFormat(this.effectiveLocale).format(count)})}updateUnreadDividerPosition(){const unreadStartIndex=this.effectiveUnreadStartIndex;if(this.virtualListEl||unreadStartIndex==null){this.unreadDividerTop=null,this.syncSemanticUnreadBoundary();return}const content=this.contentEl,target=this.messageElements[unreadStartIndex];if(!target||!content){this.unreadDividerTop=null,this.syncSemanticUnreadBoundary();return}this.syncSemanticUnreadBoundary(target),this.unreadDividerTop=target.getBoundingClientRect().top-content.getBoundingClientRect().top}syncSemanticUnreadBoundary(target){if(!target||this.virtualListEl){this.unreadBoundaryEl?.remove(),this.unreadBoundaryEl=void 0;return}const parent=target.parentNode;if(!parent)return;const boundary=this.unreadBoundaryEl??this.ownerDocument.createElement("div");boundary.setAttribute("data-lr-chat-viewport-unread-boundary",""),boundary.setAttribute("role","separator"),boundary.setAttribute("aria-label",this.localize("newMessages"));const targetSlot=target.getAttribute("slot");targetSlot===null?boundary.removeAttribute("slot"):boundary.setAttribute("slot",targetSlot),(boundary.parentNode!==parent||boundary.nextSibling!==target)&&parent.insertBefore(boundary,target),this.unreadBoundaryEl=boundary,this.knownProjectedNodes.add(boundary)}cancelPendingUserIntentExpiry(){const frame=this.pendingUserIntentExpiryFrame;frame&&frame.owner.cancelAnimationFrame(frame.handle),this.pendingUserIntentExpiryFrame=null}clearUserIntent(){this.pendingUserIntent=!1,this.cancelPendingUserIntentExpiry()}consumeUserIntent(){const wasPending=this.pendingUserIntent;return this.clearUserIntent(),wasPending}releaseScrollbarDragListeners(){const owner=this.scrollbarDragWindow;owner&&(owner.removeEventListener("pointerup",this.onPointerUp),owner.removeEventListener("pointercancel",this.onPointerUp),owner.removeEventListener("lostpointercapture",this.onPointerUp),this.scrollbarDragWindow=void 0)}scheduleGrowthTick(){if(this.growthFrame)return;const owner=this.ownerDocument.defaultView;if(!owner)return;const frame={owner,handle:0};frame.handle=owner.requestAnimationFrame(()=>{this.growthFrame===frame&&(this.growthFrame=null,!(!this.isConnected||this.ownerDocument.defaultView!==owner)&&(this.updateUnreadDividerPosition(),this.follow&&this.performScrollToEnd("auto")))}),this.growthFrame=frame}releaseAnnouncementSink(){this.announcementSink?.release(),this.announcementSink=void 0}syncAnnouncementSink(){const politeness=this.live==="polite"||this.live==="assertive"?this.live:void 0;if(!this.isConnected||politeness===void 0){this.releaseAnnouncementSink();return}this.announcementSink?.politeness===politeness&&this.announcementSink.element.ownerDocument===this.ownerDocument||(this.releaseAnnouncementSink(),this.announcementSink=acquireAnnouncementSink(politeness,{document:this.ownerDocument,source:this}))}announcementTextFor(node){const primary=composedAccessibilityText(node);if(!(node instanceof Element)||!node.shadowRoot)return primary;const content=composedAccessibilityText(node.childNodes),normalizedPrimary=primary.replace(/\s+/g," ").trim(),normalizedContent=content.replace(/\s+/g," ").trim();return!normalizedContent||normalizedPrimary.includes(normalizedContent)?primary:primary?`${primary} ${content}`:content}announceNewProjectedNodes(){const sink=this.announcementSink;for(const node of this.messageElements){if(this.knownProjectedNodes.has(node)||(this.knownProjectedNodes.add(node),!sink||!this.hasUpdated))continue;const text=this.announcementTextFor(node).replace(/\s+/g," ").trim();text&&sink.announce(text)}}armObservers(){const owner=this.ownerDocument.defaultView,list=this.virtualListEl,mode=list?"virtual":"slotted";for(const node of this.messageElements)this.knownProjectedNodes.add(node);if(this.observerWindow===owner&&this.armedMode===mode&&(mode==="slotted"||this.listenedVirtualList===list))return;if(this.teardownObservers(),this.observerWindow=owner??void 0,this.armedMode=mode,list)this.listenedVirtualList=list,list.addEventListener("lr-visible-range-change",this.onVirtualRangeChanged);else{const content=this.contentEl;if(content){let baselineSeen=!1;const ResizeObserverCtor=owner?.ResizeObserver;if(ResizeObserverCtor){let observer;observer=new ResizeObserverCtor(()=>{if(!(!this.isConnected||this.ownerDocument.defaultView!==owner||this.contentResizeObserver!==observer)){if(!baselineSeen){baselineSeen=!0;return}this.scheduleGrowthTick()}}),this.contentResizeObserver=observer,this.contentResizeObserver.observe(content)}}const MutationObserverCtor=owner?.MutationObserver;if(MutationObserverCtor){let observer;observer=new MutationObserverCtor(records=>{!this.isConnected||this.ownerDocument.defaultView!==owner||this.contentMutationObserver!==observer||this.onContentMutations(records)}),this.contentMutationObserver=observer,this.contentMutationObserver.observe(this,{childList:!0})}}const scrollEl=this.scrollEl;if(scrollEl){let baselineSeen=!1;const ResizeObserverCtor=owner?.ResizeObserver;if(ResizeObserverCtor){let observer;observer=new ResizeObserverCtor(()=>{if(!(!this.isConnected||this.ownerDocument.defaultView!==owner||this.scrollResizeObserver!==observer)){if(!baselineSeen){baselineSeen=!0;return}this.follow&&this.performScrollToEnd("auto")}}),this.scrollResizeObserver=observer,this.scrollResizeObserver.observe(scrollEl)}}const generation=++this.armGeneration;queueMicrotask(()=>{!this.isConnected||generation!==this.armGeneration||this.updateUnreadDividerPosition()})}teardownObservers(){this.scrollResizeObserver?.disconnect(),this.scrollResizeObserver=void 0,this.contentResizeObserver?.disconnect(),this.contentResizeObserver=void 0,this.contentMutationObserver?.disconnect(),this.contentMutationObserver=void 0,this.listenedVirtualList?.removeEventListener("lr-visible-range-change",this.onVirtualRangeChanged),this.listenedVirtualList=void 0,this.observerWindow=void 0,this.armedMode=null,this.armGeneration++;const frame=this.growthFrame;frame&&frame.owner.cancelAnimationFrame(frame.handle),this.growthFrame=null}render(){const label=this.accessibleLabel??(this.label||this.localize("chatViewportLabel")),virtual=this.virtualListEl!==null;return html`
2
2
  <div part="base" ?data-virtual=${virtual}>
3
3
  <div
4
4
  part="scroll"
@@ -18,32 +18,16 @@ import{css}from"lit";const styles=css`
18
18
  [part='scroll'] {
19
19
  flex: 1 1 auto;
20
20
  min-block-size: 0;
21
- /* overflow-x pinned explicitly, not left implicit: per the CSS overflow spec, once one axis is
22
- set to a non-'visible' value the other axis's used value is forced to 'auto' too (it never
23
- stays 'visible') -- an implicit overflow-x here would risk a phantom horizontal scrollbar
24
- from a wide inline code span or a fractional-width bubble under zoom, even though this
25
- transcript is only ever meant to scroll vertically. Same fix lr-tab-group already applies for the
26
- identical reason. */
27
21
  overflow-x: hidden;
28
22
  overflow-y: auto;
29
23
  overflow-anchor: none;
30
24
  padding: var(--lr-space-m);
31
25
  }
32
- /* Virtual mode. Keyed off [part='base']'s data-virtual marker, not :host(:has(> lr-virtual-list)):
33
- :has() is invalid inside :host() (Chromium reports CSS.supports('selector(:host(:has(> em)))')
34
- as false), which silently dropped every one of these rules. */
35
26
  [part='base'][data-virtual] [part='scroll'] {
36
27
  overflow: visible;
37
28
  block-size: auto;
38
29
  padding: 0;
39
30
  }
40
- /* Deliberately no padding/gap/margin here -- this coordinate system (the offsetParent for every
41
- * slotted row) is exactly what the unread divider's own pixel position is computed against.
42
- * Any block-direction spacing added here would shift that math by a constant amount for every
43
- * row after the first; breathing room around the transcript belongs on [part="scroll"] instead,
44
- * one level up, where it can't skew that measurement. Inter-message spacing is left entirely to
45
- * slotted content (or its host) -- this component renders no messages and imposes no spacing
46
- * contract of its own. */
47
31
  [part='content'] {
48
32
  position: relative;
49
33
  min-block-size: 100%;
@@ -52,17 +36,6 @@ import{css}from"lit";const styles=css`
52
36
  block-size: 100%;
53
37
  min-block-size: 0;
54
38
  }
55
- /* Virtual mode: [part='scroll'] has stepped aside above, so the slotted list's own viewport is
56
- the real scroller and has to be this component's full height -- otherwise it scrolls inside
57
- lr-virtual-list's 24rem --lr-virtual-list-height default no matter how tall this viewport is.
58
- The explicit block-size is what makes the inherited 100% resolvable: without it the list host
59
- is auto-height, its own [part='base'] percentage chains to auto, and the two size each other
60
- circularly. lr-thread-list solves the same problem by turning the internal list's shipped
61
- 24rem into a flex-basis via ::part(base) -- unavailable here, because that list lives in the
62
- consumer's light DOM and ::slotted() cannot be followed by ::part(). Virtual mode therefore
63
- inherits this component's existing requirement of a height-bounded parent, exactly as slotted
64
- mode's own [part='scroll'] already does. A document-tree declaration on the list (a consumer's
65
- own rule or inline style) still wins over this. */
66
39
  [part='base'][data-virtual] ::slotted(lr-virtual-list) {
67
40
  block-size: 100%;
68
41
  --lr-virtual-list-height: 100%;
@@ -98,8 +71,6 @@ import{css}from"lit";const styles=css`
98
71
  border-radius: var(--lr-radius-pill);
99
72
  background: var(--lr-color-surface);
100
73
  color: var(--lr-color-text);
101
- /* Overlay step: the pill floats over the transcript it scrolls, so it is an anchored layer
102
- rather than resting chrome. */
103
74
  box-shadow: var(--lr-shadow-m);
104
75
  cursor: pointer;
105
76
  white-space: nowrap;
@@ -107,10 +78,6 @@ import{css}from"lit";const styles=css`
107
78
  text-overflow: ellipsis;
108
79
  transition: opacity var(--lr-transition-fast);
109
80
  }
110
- /* inset-inline-start: 50% anchors the pill's *start* edge -- the physical right edge under RTL
111
- * -- to the horizontal center, so the fixed translateX(-50%) above would push the whole pill
112
- * start-of-center there. Flip the sign to keep it centered (translateX is physical; logical
113
- * properties don't cover transforms). */
114
81
  :host(:dir(rtl)) [part='jump-pill'] {
115
82
  transform: translateX(50%);
116
83
  }
@@ -46,7 +46,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
46
46
  part="restore-button"
47
47
  type="button"
48
48
  aria-label=${this.localize("checkpointRestoreWithContext",void 0,{label})}
49
- aria-disabled=${this.restoring?"true":nothing}
49
+ aria-disabled=${this.restoring?"true":"false"}
50
50
  @click=${this.onRestoreClick}
51
51
  >
52
52
  ${this.restoring?html`<span class="restore-spinner" aria-hidden="true">${spinnerIcon()}</span>`:nothing}
@@ -56,9 +56,6 @@ import{css}from"lit";const styles=css`
56
56
  border-color: var(--lr-color-brand);
57
57
  color: var(--lr-color-brand);
58
58
  }
59
- /* Hover recolors the chrome only; the press additionally fills the pill, mixing its resting
60
- surface toward the text color so the pressed state is a strictly stronger signal than hover
61
- rather than a differently-colored one. */
62
59
  [part='restore-button']:active:not([aria-disabled='true']) {
63
60
  border-color: var(--lr-color-brand);
64
61
  color: var(--lr-color-brand);
@@ -174,8 +174,11 @@ export interface CodeBlockPlainCodeOptions {
174
174
  * is what `highlight-lines`/`highlights`/`activatable-lines` attach to. `.split()` consumes each
175
175
  * newline character, so a literal `'\n'` text node is re-inserted between lines to keep the
176
176
  * non-line-numbered case's visual output (relying on `[part='pre']`'s `white-space: pre`) identical
177
- * to a single-text-node rendering -- the line-numbered case's `.line` elements are already
178
- * `display: block` (`code-block.styles.ts`) so that text node is inert there. The gutter is a
177
+ * to a single-text-node rendering. That text node is NOT inert in the line-numbered case, as this
178
+ * comment once claimed: inside a block container each whitespace run becomes its own anonymous
179
+ * block, which rendered a blank row between every line (a 3-line block laid out 5 rows). The
180
+ * container is `display: grid` (`code-block.styles.ts`), which drops whitespace-only runs instead
181
+ * of boxing them, so one row is painted per line in both modes. The gutter is a
179
182
  * separate real button, leaving source text selectable in both plain and highlighted output.
180
183
  */
181
184
  export declare function renderCodeBlockPlainCode(options: CodeBlockPlainCodeOptions): TemplateResult;
@@ -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"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{ThemeWatcher}from"../../../internal/theme-watcher.js";import{loadShikiHighlighter,loadShikiLanguage,loadShikiHighlighterCore,normalizeShikiLanguage}from"./code-loader.js";import{styles}from"./code-block.styles.js";import{CodeBlockInteractionController,applyCodeBlockAriaBusy,clampCodeBlockFocusedLine,codeBlockActiveHighlightLineSet,codeBlockLineHasFocus,codeBlockLineCount,codeBlockLineHighlightSet,codeBlockNeedsHighlightResync,codeBlockPreSuppliedGrammar,codeBlockShowsSkeleton,renderCodeBlockPlainCode,renderCodeBlockShell,restoreCodeBlockLineFocus,scrollCodeBlockToAnchor,tokenizeCodeBlock}from"./code-block-shared.js";import"../../overlays/skeleton/skeleton.class.js";import{presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LYRA_DEFAULT_codeBlockLineLabel,LYRA_DEFAULT_codeRegion,LYRA_DEFAULT_codeRegionWithLanguage,LYRA_DEFAULT_collapseCode,LYRA_DEFAULT_copied,LYRA_DEFAULT_copiedToClipboard,LYRA_DEFAULT_copy,LYRA_DEFAULT_copyCode,LYRA_DEFAULT_copyFailed,LYRA_DEFAULT_expandCode}from"../../../internal/default-strings.generated.js";class LyraCodeBlock extends LyraElement{static{this.defaultStrings={...super.defaultStrings,codeBlockLineLabel:LYRA_DEFAULT_codeBlockLineLabel,codeRegion:LYRA_DEFAULT_codeRegion,codeRegionWithLanguage:LYRA_DEFAULT_codeRegionWithLanguage,collapseCode:LYRA_DEFAULT_collapseCode,copied:LYRA_DEFAULT_copied,copiedToClipboard:LYRA_DEFAULT_copiedToClipboard,copy:LYRA_DEFAULT_copy,copyCode:LYRA_DEFAULT_copyCode,copyFailed:LYRA_DEFAULT_copyFailed,expandCode:LYRA_DEFAULT_expandCode}}static{this.immutableEventDetails=Object.freeze(["lr-text-select"])}static{this.styles=[LyraElement.styles,styles]}constructor(){super(),this.code="",this.language="",this.filename="",this.accessibleLabel=null,this.collapsible=!1,this.collapsed=!1,this.copyable=!0,this.maxHeight="",this.lineNumbers=!1,this.highlightLines="",this.activatableLines=!1,this.highlights=[],this.activeHighlightId=null,this.anchorKinds=["line-range"],this.focusedLine=1,this.restoreFocusedLineAfterUpdate=!1,this.highlightedHtml=null,this.shikiReady=!1,this.justCopied=!1,this.copyFailed=!1,this.isDarkTheme=!1,this.interactions=new CodeBlockInteractionController({host:this,setFocusedLine:line=>{this.focusedLine=line},setJustCopied:value=>{this.justCopied=value},setCopyFailed:value=>{this.copyFailed=value},setDarkTheme:value=>{this.isDarkTheme=value},emitLineActivate:line=>this.emit("lr-line-activate",{line}),emitCopy:outcome=>this.emit("lr-copy",outcome),emitError:()=>this.emit("lr-error",null),emitCopyError:outcome=>this.emit("lr-copy-error",outcome),requestToggle:collapsed=>!this.emit("lr-toggle-request",{collapsed},{cancelable:!0}).defaultPrevented,emitToggle:collapsed=>this.emit("lr-toggle",{collapsed}),emitTextSelect:selection=>this.emit("lr-text-select",selection)}),this.highlightToken=0,this.defaultHighlighterLoading=!1,this.bodyId=nextId("code-block-body"),new ThemeWatcher(this,()=>this.refreshTheme())}connectedCallback(){super.connectedCallback(),this.refreshTheme(),this.ensureDefaultHighlighter(),(this.preSuppliedGrammar()||this.highlighter)&&this.syncHighlight()}ensureDefaultHighlighter(){!this.isConnected||this.highlighter!==void 0||this.defaultHighlighterLoading||(this.defaultHighlighterLoading=!0,loadShikiHighlighter().then(hl=>{this.defaultHighlighterLoading=!1,this.isConnected&&(this.highlighter=hl,this.shikiReady=!0,this.syncHighlight())}))}disconnectedCallback(){this.highlightToken++,super.disconnectedCallback(),this.interactions.disconnect(),this.highlightedHtml=null}adoptedCallback(){super.adoptedCallback(),this.interactions.disconnect()}preSuppliedGrammar(){return codeBlockPreSuppliedGrammar(this.languages,this.language)}lineHighlightSet(){return codeBlockLineHighlightSet(this.highlightLines,this.highlights,this.lineCount())}activeHighlightLineSet(){return codeBlockActiveHighlightLineSet(this.highlights,this.activeHighlightId,this.lineCount())}lineCount(){return codeBlockLineCount(this.code)}async scrollToAnchor(target){return scrollCodeBlockToAnchor(this,target)}refreshTheme(){this.interactions.refreshTheme()}willUpdate(changed){super.willUpdate(changed),this.restoreFocusedLineAfterUpdate=codeBlockLineHasFocus(this),changed.has("code")&&(this.focusedLine=clampCodeBlockFocusedLine(this.focusedLine,this.lineCount())),codeBlockNeedsHighlightResync(changed)&&(this.shikiReady||this.preSuppliedGrammar())&&this.syncHighlight()}updated(changed){super.updated(changed),applyCodeBlockAriaBusy(this,this.showsSkeleton()),this.restoreFocusedLineAfterUpdate&&(restoreCodeBlockLineFocus(this,this.focusedLine),this.restoreFocusedLineAfterUpdate=!1)}showsSkeleton(){return codeBlockShowsSkeleton(this.shikiReady,this.language,!this.preSuppliedGrammar())}syncHighlight(){const token=++this.highlightToken,lang=normalizeShikiLanguage(this.language);if(!lang){this.highlightedHtml=null;return}const languages=this.languages;if(languages?.[lang]??languages?.[this.language]){this.highlightedHtml=null,loadShikiHighlighterCore(languages).then(hl2=>{token===this.highlightToken&&this.isConnected&&(this.highlightedHtml=hl2?this.tokenize(hl2,lang):null)});return}const hl=this.highlighter;if(!hl){this.highlightedHtml=null;return}if(hl.getLoadedLanguages().includes(lang)){this.highlightedHtml=this.tokenize(hl,lang);return}this.highlightedHtml=null,loadShikiLanguage(hl,lang).then(ok=>{token===this.highlightToken&&this.isConnected&&(this.highlightedHtml=ok?this.tokenize(hl,lang):null)})}tokenize(hl,lang){return tokenizeCodeBlock(hl,{code:this.code,lang,lineNumbers:this.lineNumbers,activatableLines:this.activatableLines,focusedLine:this.focusedLine,highlightedLines:this.lineHighlightSet(),activeLines:this.activeHighlightLineSet(),lineLabel:line=>this.localize("codeBlockLineLabel",void 0,{line:getNumberFormat(this.effectiveLocale).format(line)}),lineNumberText:line=>getNumberFormat(this.effectiveLocale).format(line)})}renderPlainCode(){return renderCodeBlockPlainCode({code:this.code,lineNumbers:this.lineNumbers,activatableLines:this.activatableLines,focusedLine:this.focusedLine,highlightedLines:this.lineHighlightSet(),activeLines:this.activeHighlightLineSet(),localize:this.localize.bind(this),lineLabel:line=>this.localize("codeBlockLineLabel",void 0,{line:getNumberFormat(this.effectiveLocale).format(line)}),lineNumberText:line=>getNumberFormat(this.effectiveLocale).format(line),onLineActivate:line=>this.interactions.onLineActivate(line),onLineKeyDown:(e,line)=>this.interactions.onLineKeyDown(e,line)})}render(){return renderCodeBlockShell({filename:this.filename,language:this.language,copyable:this.copyable,collapsible:this.collapsible,collapsed:this.collapsed,justCopied:this.justCopied,copyFailed:this.copyFailed,bodyId:this.bodyId,accessibleLabel:this.accessibleLabel,maxHeight:this.maxHeight,isDarkTheme:this.isDarkTheme,showSkeleton:this.showsSkeleton(),highlightedHtml:this.highlightedHtml,lineNumbers:this.lineNumbers,localize:this.localize.bind(this),renderPlainCode:()=>this.renderPlainCode(),onToggle:this.interactions.toggleCollapsed,onCopy:this.interactions.copy,onBodyMouseUp:this.interactions.onBodyMouseUp,onBodyClick:this.interactions.onBodyClick,onBodyKeyDown:this.interactions.onBodyKeyDown,onBodyFocusIn:this.interactions.onBodyFocusIn})}}__decorate([property()],LyraCodeBlock.prototype,"code",void 0),__decorate([property()],LyraCodeBlock.prototype,"language",void 0),__decorate([property()],LyraCodeBlock.prototype,"filename",void 0),__decorate([property({attribute:"aria-label"})],LyraCodeBlock.prototype,"accessibleLabel",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraCodeBlock.prototype,"collapsible",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraCodeBlock.prototype,"collapsed",void 0),__decorate([property({type:Boolean,reflect:!0,converter:trueDefaultBooleanConverter})],LyraCodeBlock.prototype,"copyable",void 0),__decorate([property({attribute:"max-height"})],LyraCodeBlock.prototype,"maxHeight",void 0),__decorate([property({type:Boolean,attribute:"line-numbers",reflect:!0})],LyraCodeBlock.prototype,"lineNumbers",void 0),__decorate([property({attribute:"highlight-lines"})],LyraCodeBlock.prototype,"highlightLines",void 0),__decorate([property({type:Boolean,attribute:"activatable-lines"})],LyraCodeBlock.prototype,"activatableLines",void 0),__decorate([property({attribute:!1})],LyraCodeBlock.prototype,"highlights",void 0),__decorate([property({attribute:"active-highlight-id"})],LyraCodeBlock.prototype,"activeHighlightId",void 0),__decorate([state()],LyraCodeBlock.prototype,"focusedLine",void 0),__decorate([property({attribute:!1})],LyraCodeBlock.prototype,"languages",void 0),__decorate([state()],LyraCodeBlock.prototype,"highlightedHtml",void 0),__decorate([state()],LyraCodeBlock.prototype,"shikiReady",void 0),__decorate([state()],LyraCodeBlock.prototype,"justCopied",void 0),__decorate([state()],LyraCodeBlock.prototype,"copyFailed",void 0),__decorate([state()],LyraCodeBlock.prototype,"isDarkTheme",void 0);export{LyraCodeBlock};
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"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{ThemeWatcher}from"../../../internal/theme-watcher.js";import{loadShikiHighlighter,loadShikiLanguage,loadShikiHighlighterCore,normalizeShikiLanguage,shikiHasLoadedLanguage}from"./code-loader.js";import{styles}from"./code-block.styles.js";import{CodeBlockInteractionController,applyCodeBlockAriaBusy,clampCodeBlockFocusedLine,codeBlockActiveHighlightLineSet,codeBlockLineHasFocus,codeBlockLineCount,codeBlockLineHighlightSet,codeBlockNeedsHighlightResync,codeBlockPreSuppliedGrammar,codeBlockShowsSkeleton,renderCodeBlockPlainCode,renderCodeBlockShell,restoreCodeBlockLineFocus,scrollCodeBlockToAnchor,tokenizeCodeBlock}from"./code-block-shared.js";import"../../overlays/skeleton/skeleton.class.js";import{presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LYRA_DEFAULT_codeBlockLineLabel,LYRA_DEFAULT_codeRegion,LYRA_DEFAULT_codeRegionWithLanguage,LYRA_DEFAULT_collapseCode,LYRA_DEFAULT_copied,LYRA_DEFAULT_copiedToClipboard,LYRA_DEFAULT_copy,LYRA_DEFAULT_copyCode,LYRA_DEFAULT_copyFailed,LYRA_DEFAULT_expandCode}from"../../../internal/default-strings.generated.js";class LyraCodeBlock extends LyraElement{static{this.defaultStrings={...super.defaultStrings,codeBlockLineLabel:LYRA_DEFAULT_codeBlockLineLabel,codeRegion:LYRA_DEFAULT_codeRegion,codeRegionWithLanguage:LYRA_DEFAULT_codeRegionWithLanguage,collapseCode:LYRA_DEFAULT_collapseCode,copied:LYRA_DEFAULT_copied,copiedToClipboard:LYRA_DEFAULT_copiedToClipboard,copy:LYRA_DEFAULT_copy,copyCode:LYRA_DEFAULT_copyCode,copyFailed:LYRA_DEFAULT_copyFailed,expandCode:LYRA_DEFAULT_expandCode}}static{this.immutableEventDetails=Object.freeze(["lr-text-select"])}static{this.styles=[LyraElement.styles,styles]}constructor(){super(),this.code="",this.language="",this.filename="",this.accessibleLabel=null,this.collapsible=!1,this.collapsed=!1,this.copyable=!0,this.maxHeight="",this.lineNumbers=!1,this.highlightLines="",this.activatableLines=!1,this.highlights=[],this.activeHighlightId=null,this.anchorKinds=["line-range"],this.focusedLine=1,this.restoreFocusedLineAfterUpdate=!1,this.highlightedHtml=null,this.shikiReady=!1,this.justCopied=!1,this.copyFailed=!1,this.isDarkTheme=!1,this.interactions=new CodeBlockInteractionController({host:this,setFocusedLine:line=>{this.focusedLine=line},setJustCopied:value=>{this.justCopied=value},setCopyFailed:value=>{this.copyFailed=value},setDarkTheme:value=>{this.isDarkTheme=value},emitLineActivate:line=>this.emit("lr-line-activate",{line}),emitCopy:outcome=>this.emit("lr-copy",outcome),emitError:()=>this.emit("lr-error",null),emitCopyError:outcome=>this.emit("lr-copy-error",outcome),requestToggle:collapsed=>!this.emit("lr-toggle-request",{collapsed},{cancelable:!0}).defaultPrevented,emitToggle:collapsed=>this.emit("lr-toggle",{collapsed}),emitTextSelect:selection=>this.emit("lr-text-select",selection)}),this.highlightToken=0,this.defaultHighlighterLoading=!1,this.bodyId=nextId("code-block-body"),new ThemeWatcher(this,()=>this.refreshTheme())}connectedCallback(){super.connectedCallback(),this.refreshTheme(),this.ensureDefaultHighlighter(),(this.preSuppliedGrammar()||this.highlighter)&&this.syncHighlight()}ensureDefaultHighlighter(){!this.isConnected||this.highlighter!==void 0||this.defaultHighlighterLoading||(this.defaultHighlighterLoading=!0,loadShikiHighlighter().then(hl=>{this.defaultHighlighterLoading=!1,this.isConnected&&(this.highlighter=hl,this.shikiReady=!0,this.syncHighlight())}))}disconnectedCallback(){this.highlightToken++,super.disconnectedCallback(),this.interactions.disconnect(),this.highlightedHtml=null}adoptedCallback(){super.adoptedCallback(),this.interactions.disconnect()}preSuppliedGrammar(){return codeBlockPreSuppliedGrammar(this.languages,this.language)}lineHighlightSet(){return codeBlockLineHighlightSet(this.highlightLines,this.highlights,this.lineCount())}activeHighlightLineSet(){return codeBlockActiveHighlightLineSet(this.highlights,this.activeHighlightId,this.lineCount())}lineCount(){return codeBlockLineCount(this.code)}async scrollToAnchor(target){return scrollCodeBlockToAnchor(this,target)}refreshTheme(){this.interactions.refreshTheme()}willUpdate(changed){super.willUpdate(changed),this.restoreFocusedLineAfterUpdate=codeBlockLineHasFocus(this),changed.has("code")&&(this.focusedLine=clampCodeBlockFocusedLine(this.focusedLine,this.lineCount())),codeBlockNeedsHighlightResync(changed)&&(this.shikiReady||this.preSuppliedGrammar())&&this.syncHighlight()}updated(changed){super.updated(changed),applyCodeBlockAriaBusy(this,this.showsSkeleton()),this.restoreFocusedLineAfterUpdate&&(restoreCodeBlockLineFocus(this,this.focusedLine),this.restoreFocusedLineAfterUpdate=!1)}showsSkeleton(){return codeBlockShowsSkeleton(this.shikiReady,this.language,!this.preSuppliedGrammar())}syncHighlight(){const token=++this.highlightToken,lang=normalizeShikiLanguage(this.language);if(!lang){this.highlightedHtml=null;return}const languages=this.languages;if(languages?.[lang]??languages?.[this.language]){this.highlightedHtml=null,loadShikiHighlighterCore(languages).then(hl2=>{token===this.highlightToken&&this.isConnected&&(this.highlightedHtml=hl2?this.tokenize(hl2,lang):null)});return}const hl=this.highlighter;if(!hl){this.highlightedHtml=null;return}if(shikiHasLoadedLanguage(hl,lang)){this.highlightedHtml=this.tokenize(hl,lang);return}this.highlightedHtml=null,loadShikiLanguage(hl,lang).then(ok=>{token===this.highlightToken&&this.isConnected&&(this.highlightedHtml=ok?this.tokenize(hl,lang):null)})}tokenize(hl,lang){return tokenizeCodeBlock(hl,{code:this.code,lang,lineNumbers:this.lineNumbers,activatableLines:this.activatableLines,focusedLine:this.focusedLine,highlightedLines:this.lineHighlightSet(),activeLines:this.activeHighlightLineSet(),lineLabel:line=>this.localize("codeBlockLineLabel",void 0,{line:getNumberFormat(this.effectiveLocale).format(line)}),lineNumberText:line=>getNumberFormat(this.effectiveLocale).format(line)})}renderPlainCode(){return renderCodeBlockPlainCode({code:this.code,lineNumbers:this.lineNumbers,activatableLines:this.activatableLines,focusedLine:this.focusedLine,highlightedLines:this.lineHighlightSet(),activeLines:this.activeHighlightLineSet(),localize:this.localize.bind(this),lineLabel:line=>this.localize("codeBlockLineLabel",void 0,{line:getNumberFormat(this.effectiveLocale).format(line)}),lineNumberText:line=>getNumberFormat(this.effectiveLocale).format(line),onLineActivate:line=>this.interactions.onLineActivate(line),onLineKeyDown:(e,line)=>this.interactions.onLineKeyDown(e,line)})}render(){return renderCodeBlockShell({filename:this.filename,language:this.language,copyable:this.copyable,collapsible:this.collapsible,collapsed:this.collapsed,justCopied:this.justCopied,copyFailed:this.copyFailed,bodyId:this.bodyId,accessibleLabel:this.accessibleLabel,maxHeight:this.maxHeight,isDarkTheme:this.isDarkTheme,showSkeleton:this.showsSkeleton(),highlightedHtml:this.highlightedHtml,lineNumbers:this.lineNumbers,localize:this.localize.bind(this),renderPlainCode:()=>this.renderPlainCode(),onToggle:this.interactions.toggleCollapsed,onCopy:this.interactions.copy,onBodyMouseUp:this.interactions.onBodyMouseUp,onBodyClick:this.interactions.onBodyClick,onBodyKeyDown:this.interactions.onBodyKeyDown,onBodyFocusIn:this.interactions.onBodyFocusIn})}}__decorate([property()],LyraCodeBlock.prototype,"code",void 0),__decorate([property()],LyraCodeBlock.prototype,"language",void 0),__decorate([property()],LyraCodeBlock.prototype,"filename",void 0),__decorate([property({attribute:"aria-label"})],LyraCodeBlock.prototype,"accessibleLabel",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraCodeBlock.prototype,"collapsible",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraCodeBlock.prototype,"collapsed",void 0),__decorate([property({type:Boolean,reflect:!0,converter:trueDefaultBooleanConverter})],LyraCodeBlock.prototype,"copyable",void 0),__decorate([property({attribute:"max-height"})],LyraCodeBlock.prototype,"maxHeight",void 0),__decorate([property({type:Boolean,attribute:"line-numbers",reflect:!0})],LyraCodeBlock.prototype,"lineNumbers",void 0),__decorate([property({attribute:"highlight-lines"})],LyraCodeBlock.prototype,"highlightLines",void 0),__decorate([property({type:Boolean,attribute:"activatable-lines"})],LyraCodeBlock.prototype,"activatableLines",void 0),__decorate([property({attribute:!1})],LyraCodeBlock.prototype,"highlights",void 0),__decorate([property({attribute:"active-highlight-id"})],LyraCodeBlock.prototype,"activeHighlightId",void 0),__decorate([state()],LyraCodeBlock.prototype,"focusedLine",void 0),__decorate([property({attribute:!1})],LyraCodeBlock.prototype,"languages",void 0),__decorate([state()],LyraCodeBlock.prototype,"highlightedHtml",void 0),__decorate([state()],LyraCodeBlock.prototype,"shikiReady",void 0),__decorate([state()],LyraCodeBlock.prototype,"justCopied",void 0),__decorate([state()],LyraCodeBlock.prototype,"copyFailed",void 0),__decorate([state()],LyraCodeBlock.prototype,"isDarkTheme",void 0);export{LyraCodeBlock};