@aceshooting/lyra-ui 9.1.1 → 10.0.1

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 (578) hide show
  1. package/CHANGELOG.md +597 -0
  2. package/custom-elements.json +1 -1
  3. package/dist/cli/migrate-wa.mjs +52 -0
  4. package/dist/cli/migration-contract.json +1 -1
  5. package/dist/components/agent-tools/activity-feed/activity-feed.class.js +1 -1
  6. package/dist/components/agent-tools/activity-feed/activity-feed.styles.js +0 -16
  7. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.js +1 -1
  8. package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.js +7 -5
  9. package/dist/components/agent-tools/agent-run/agent-run.class.js +2 -2
  10. package/dist/components/agent-tools/agent-run/agent-run.styles.js +0 -13
  11. package/dist/components/agent-tools/agent-trace/agent-trace.styles.js +7 -4
  12. package/dist/components/agent-tools/approval-queue/approval-queue.styles.js +7 -5
  13. package/dist/components/agent-tools/artifact-panel/artifact-panel.styles.js +0 -3
  14. package/dist/components/agent-tools/browser-frame/browser-frame.styles.js +3 -5
  15. package/dist/components/agent-tools/commit-card/commit-card.styles.js +0 -10
  16. package/dist/components/agent-tools/compare-panel/compare-panel.styles.js +11 -6
  17. package/dist/components/agent-tools/confirm-bar/confirm-bar.styles.js +0 -46
  18. package/dist/components/agent-tools/eval-dataset/eval-dataset.styles.js +0 -7
  19. package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js +2 -2
  20. package/dist/components/agent-tools/prompt-studio/prompt-studio.styles.js +0 -15
  21. package/dist/components/agent-tools/result-card/result-card.styles.js +0 -7
  22. package/dist/components/agent-tools/result-card/result-field.styles.js +0 -5
  23. package/dist/components/agent-tools/schema-viewer/schema-viewer.styles.js +0 -3
  24. package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +0 -15
  25. package/dist/components/agent-tools/stack-trace/stack-trace.styles.js +0 -20
  26. package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +2 -2
  27. package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js +0 -3
  28. package/dist/components/agent-tools/task-list/task-list.styles.js +0 -15
  29. package/dist/components/agent-tools/terminal/terminal.class.d.ts +11 -6
  30. package/dist/components/agent-tools/terminal/terminal.class.js +4 -4
  31. package/dist/components/agent-tools/terminal/terminal.styles.js +0 -46
  32. package/dist/components/agent-tools/test-results/test-results.class.js +2 -2
  33. package/dist/components/agent-tools/test-results/test-results.styles.js +0 -5
  34. package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +0 -41
  35. package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.styles.js +0 -41
  36. package/dist/components/agent-tools/tool-call-chip/tool-call-chip.styles.js +0 -30
  37. package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +6 -6
  38. package/dist/components/agent-tools/tool-param-form/tool-param-form.styles.js +0 -5
  39. package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +0 -20
  40. package/dist/components/agent-tools/tool-result-view/tool-result-view.styles.js +0 -4
  41. package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.styles.js +0 -21
  42. package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +7 -31
  43. package/dist/components/charts/chart/box-plot.styles.js +0 -20
  44. package/dist/components/charts/chart/chart-colors.d.ts +1 -1
  45. package/dist/components/charts/chart/chart-colors.js +1 -1
  46. package/dist/components/charts/chart/chart-core-loader.d.ts +1 -0
  47. package/dist/components/charts/chart/chart-core-loader.js +1 -1
  48. package/dist/components/charts/chart/chart-feature-loader.d.ts +35 -0
  49. package/dist/components/charts/chart/chart-feature-loader.js +1 -1
  50. package/dist/components/charts/chart/chart.class.d.ts +93 -0
  51. package/dist/components/charts/chart/chart.class.js +3 -3
  52. package/dist/components/charts/chart/chart.styles.js +0 -27
  53. package/dist/components/charts/chart/lite-chart.class.d.ts +20 -1
  54. package/dist/components/charts/chart/lite-chart.class.js +4 -4
  55. package/dist/components/charts/chart/lite-chart.styles.js +0 -27
  56. package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +20 -0
  57. package/dist/components/conversation/agent-workspace/agent-workspace.class.js +3 -1
  58. package/dist/components/conversation/agent-workspace/agent-workspace.styles.js +3 -0
  59. package/dist/components/conversation/audio-visualizer/audio-visualizer.styles.js +0 -7
  60. package/dist/components/conversation/branch-picker/branch-picker.styles.js +0 -3
  61. package/dist/components/conversation/chat-composer/chat-composer.styles.js +0 -51
  62. package/dist/components/conversation/chat-message/chat-message.styles.js +7 -35
  63. package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
  64. package/dist/components/conversation/chat-viewport/chat-viewport.styles.js +0 -33
  65. package/dist/components/conversation/checkpoint/checkpoint.class.js +1 -1
  66. package/dist/components/conversation/checkpoint/checkpoint.styles.js +0 -3
  67. package/dist/components/conversation/code-block/code-block-shared.d.ts +5 -2
  68. package/dist/components/conversation/code-block/code-block.class.js +1 -1
  69. package/dist/components/conversation/code-block/code-block.styles.js +4 -95
  70. package/dist/components/conversation/code-block/code-loader.d.ts +11 -0
  71. package/dist/components/conversation/code-block/code-loader.js +1 -1
  72. package/dist/components/conversation/code-block/shiki-types.d.ts +12 -0
  73. package/dist/components/conversation/code-block/shiki-types.js +1 -1
  74. package/dist/components/conversation/conversation-item/conversation-item.styles.js +8 -54
  75. package/dist/components/conversation/generation-metrics/generation-metrics.class.js +2 -2
  76. package/dist/components/conversation/generation-metrics/generation-metrics.styles.js +0 -17
  77. package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
  78. package/dist/components/conversation/markdown/markdown.styles.js +0 -41
  79. package/dist/components/conversation/message-actions/message-actions.styles.js +0 -3
  80. package/dist/components/conversation/message-feedback/message-feedback.styles.js +0 -35
  81. package/dist/components/conversation/message-parts/message-parts.class.d.ts +1 -1
  82. package/dist/components/conversation/message-parts/message-parts.styles.js +0 -5
  83. package/dist/components/conversation/model-select/model-select.class.js +3 -3
  84. package/dist/components/conversation/model-select/model-select.styles.js +12 -47
  85. package/dist/components/conversation/model-settings-panel/model-settings-panel.styles.js +0 -6
  86. package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +3 -0
  87. package/dist/components/conversation/prompt-input/prompt-input.styles.js +0 -10
  88. package/dist/components/conversation/push-to-talk/push-to-talk.styles.js +0 -8
  89. package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js +1 -11
  90. package/dist/components/conversation/stream-status/stream-status.styles.js +0 -16
  91. package/dist/components/conversation/streaming-text/streaming-text.styles.js +0 -15
  92. package/dist/components/conversation/suggestion-chips/suggestion-chips.styles.js +0 -5
  93. package/dist/components/conversation/thread-list/thread-list.styles.js +0 -23
  94. package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts +16 -4
  95. package/dist/components/conversation/transcript-feed/transcript-feed.class.js +1 -1
  96. package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +0 -1
  97. package/dist/components/conversation/typing-indicator/typing-indicator.styles.js +0 -23
  98. package/dist/components/conversation/usage-badge/usage-badge.styles.js +0 -3
  99. package/dist/components/conversation/voice-picker/voice-picker.class.js +3 -3
  100. package/dist/components/conversation/voice-picker/voice-picker.styles.js +9 -29
  101. package/dist/components/conversation/widget-renderer/resolve.d.ts +2 -0
  102. package/dist/components/conversation/widget-renderer/resolve.js +1 -1
  103. package/dist/components/data/calendar/calendar.class.d.ts +15 -2
  104. package/dist/components/data/calendar/calendar.class.js +2 -2
  105. package/dist/components/data/calendar/calendar.styles.js +2 -28
  106. package/dist/components/data/condition-builder/condition-builder.class.d.ts +10 -6
  107. package/dist/components/data/condition-builder/condition-builder.class.js +2 -2
  108. package/dist/components/data/condition-builder/condition-builder.styles.js +0 -6
  109. package/dist/components/data/context-meter/context-meter.styles.js +0 -24
  110. package/dist/components/data/data-grid/data-grid.class.js +3 -3
  111. package/dist/components/data/data-grid/data-grid.styles.js +0 -22
  112. package/dist/components/data/document-library/document-library.class.js +2 -2
  113. package/dist/components/data/document-library/document-library.styles.js +0 -4
  114. package/dist/components/data/env-list/env-list.class.js +1 -1
  115. package/dist/components/data/env-list/env-list.styles.js +7 -4
  116. package/dist/components/data/file-tree/file-tree.class.d.ts +12 -0
  117. package/dist/components/data/flow-canvas/flow-canvas.styles.js +12 -19
  118. package/dist/components/data/flow-controls/flow-controls.class.js +2 -2
  119. package/dist/components/data/flow-controls/flow-controls.styles.js +3 -36
  120. package/dist/components/data/flow-minimap/flow-minimap.class.js +1 -1
  121. package/dist/components/data/flow-minimap/flow-minimap.styles.js +0 -9
  122. package/dist/components/data/flow-node/flow-node.styles.js +0 -23
  123. package/dist/components/data/flow-run-status/flow-run-status.class.js +1 -1
  124. package/dist/components/data/flow-run-status/flow-run-status.styles.js +0 -7
  125. package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +0 -7
  126. package/dist/components/data/graph-query-builder/graph-query-builder.class.js +1 -1
  127. package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +0 -10
  128. package/dist/components/data/heatmap/heatmap-scale.d.ts +20 -0
  129. package/dist/components/data/heatmap/heatmap-scale.js +1 -1
  130. package/dist/components/data/heatmap/heatmap.class.d.ts +84 -1
  131. package/dist/components/data/heatmap/heatmap.class.js +2 -2
  132. package/dist/components/data/heatmap/heatmap.styles.js +0 -54
  133. package/dist/components/data/pagination/pagination.styles.js +23 -46
  134. package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +34 -1
  135. package/dist/components/data/sequence-strip/sequence-strip.class.js +5 -2
  136. package/dist/components/data/sequence-strip/sequence-strip.styles.js +14 -20
  137. package/dist/components/data/sparkline/sparkline.class.js +1 -1
  138. package/dist/components/data/stat/stat.styles.js +0 -67
  139. package/dist/components/data/table/table.class.d.ts +42 -3
  140. package/dist/components/data/table/table.class.js +4 -4
  141. package/dist/components/data/table/table.styles.js +20 -91
  142. package/dist/components/data/timeline/timeline-item.styles.js +0 -30
  143. package/dist/components/data/timeline/timeline.class.d.ts +89 -1
  144. package/dist/components/data/timeline/timeline.class.js +2 -2
  145. package/dist/components/data/timeline/timeline.styles.js +111 -31
  146. package/dist/components/data/tree/tree-item.styles.js +1 -28
  147. package/dist/components/data/tree/tree.class.js +2 -2
  148. package/dist/components/data/tree/tree.styles.js +0 -6
  149. package/dist/components/data/word-cloud/word-cloud.styles.js +0 -5
  150. package/dist/components/forms/button/button.class.js +1 -1
  151. package/dist/components/forms/button/button.styles.js +0 -105
  152. package/dist/components/forms/checkbox/checkbox.class.d.ts +3 -0
  153. package/dist/components/forms/checkbox/checkbox.class.js +1 -1
  154. package/dist/components/forms/checkbox/checkbox.styles.js +0 -39
  155. package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +21 -2
  156. package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
  157. package/dist/components/forms/checkbox-group/checkbox-group.styles.js +0 -18
  158. package/dist/components/forms/code-editor/code-editor.styles.js +0 -30
  159. package/dist/components/forms/color-picker/color-picker.class.js +2 -2
  160. package/dist/components/forms/color-picker/color-picker.styles.js +0 -69
  161. package/dist/components/forms/combobox/combobox.class.js +2 -2
  162. package/dist/components/forms/combobox/combobox.styles.js +22 -111
  163. package/dist/components/forms/combobox/option.styles.js +7 -1
  164. package/dist/components/forms/date-picker/date-input.class.js +1 -1
  165. package/dist/components/forms/date-picker/date-input.styles.js +12 -67
  166. package/dist/components/forms/date-picker/date-picker.class.d.ts +1 -0
  167. package/dist/components/forms/date-picker/date-picker.class.js +22 -20
  168. package/dist/components/forms/date-picker/date-picker.styles.js +36 -29
  169. package/dist/components/forms/emoji-picker/emoji-data-loader.d.ts +6 -3
  170. package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
  171. package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +8 -1
  172. package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
  173. package/dist/components/forms/emoji-picker/emoji-picker.styles.js +3 -41
  174. package/dist/components/forms/icon-button/icon-button.class.js +1 -1
  175. package/dist/components/forms/icon-button/icon-button.styles.js +0 -16
  176. package/dist/components/forms/input/input.styles.js +0 -54
  177. package/dist/components/forms/input/number-input.styles.d.ts +4 -5
  178. package/dist/components/forms/input/number-input.styles.js +0 -11
  179. package/dist/components/forms/input/time-input-shared.d.ts +11 -0
  180. package/dist/components/forms/input/time-input-shared.js +1 -1
  181. package/dist/components/forms/input/time-input.class.d.ts +11 -2
  182. package/dist/components/forms/input/time-input.class.js +1 -1
  183. package/dist/components/forms/input/time-input.styles.js +0 -6
  184. package/dist/components/forms/locale-picker/locale-picker.class.js +2 -2
  185. package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -26
  186. package/dist/components/forms/otp-input/otp-input.class.js +3 -3
  187. package/dist/components/forms/otp-input/otp-input.styles.js +0 -16
  188. package/dist/components/forms/phone-input/phone-input.class.d.ts +9 -1
  189. package/dist/components/forms/phone-input/phone-input.class.js +2 -2
  190. package/dist/components/forms/phone-input/phone-input.styles.js +0 -37
  191. package/dist/components/forms/radio/radio-button.styles.js +1 -30
  192. package/dist/components/forms/radio/radio-group.styles.js +0 -4
  193. package/dist/components/forms/radio/radio.styles.js +0 -44
  194. package/dist/components/forms/rubric-form/rubric-form.styles.js +0 -5
  195. package/dist/components/forms/select/select.class.js +1 -1
  196. package/dist/components/forms/select/select.styles.js +14 -114
  197. package/dist/components/forms/slider/slider.styles.js +0 -55
  198. package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts +0 -11
  199. package/dist/components/forms/swatch-picker/swatch-picker.class.js +2 -2
  200. package/dist/components/forms/swatch-picker/swatch-picker.styles.js +0 -77
  201. package/dist/components/forms/switch/switch.class.d.ts +3 -0
  202. package/dist/components/forms/switch/switch.class.js +1 -1
  203. package/dist/components/forms/switch/switch.styles.js +0 -37
  204. package/dist/components/forms/textarea/textarea.styles.js +0 -28
  205. package/dist/components/forms/time-range/time-range.styles.js +12 -84
  206. package/dist/components/forms/token-input/token-input.class.d.ts +23 -9
  207. package/dist/components/forms/token-input/token-input.class.js +1 -1
  208. package/dist/components/forms/token-input/token-input.styles.js +1 -54
  209. package/dist/components/layout/app-rail/app-rail-item.class.js +2 -2
  210. package/dist/components/layout/app-rail/app-rail-item.styles.js +0 -13
  211. package/dist/components/layout/app-rail/app-rail.class.d.ts +5 -0
  212. package/dist/components/layout/app-rail/app-rail.class.js +1 -1
  213. package/dist/components/layout/app-rail/app-rail.styles.js +0 -46
  214. package/dist/components/layout/button-group/button-group.styles.js +0 -6
  215. package/dist/components/layout/card/card.class.d.ts +12 -0
  216. package/dist/components/layout/card/card.styles.js +3 -11
  217. package/dist/components/layout/carousel/carousel.styles.js +0 -1
  218. package/dist/components/layout/command-palette/command-palette.class.d.ts +8 -0
  219. package/dist/components/layout/command-palette/command-palette.class.js +3 -1
  220. package/dist/components/layout/command-palette/command-palette.styles.js +1 -13
  221. package/dist/components/layout/control-group/control-group.styles.js +0 -7
  222. package/dist/components/layout/dashboard-grid/dashboard-grid.styles.js +6 -25
  223. package/dist/components/layout/details/accordion.class.d.ts +13 -0
  224. package/dist/components/layout/details/accordion.class.js +1 -1
  225. package/dist/components/layout/details/details.class.js +1 -1
  226. package/dist/components/layout/details/details.styles.js +0 -12
  227. package/dist/components/layout/dock-panel/dock-panel.styles.js +0 -45
  228. package/dist/components/layout/drilldown-panel/drilldown-panel.class.d.ts +2 -0
  229. package/dist/components/layout/drilldown-panel/drilldown-panel.class.js +2 -2
  230. package/dist/components/layout/drilldown-panel/drilldown-panel.styles.js +0 -4
  231. package/dist/components/layout/filter-bar/filter-bar.class.js +1 -1
  232. package/dist/components/layout/filter-bar/filter-bar.styles.js +0 -9
  233. package/dist/components/layout/menu/menu-item.class.d.ts +5 -0
  234. package/dist/components/layout/menu/menu-item.class.js +1 -1
  235. package/dist/components/layout/menu/menu-item.styles.js +0 -49
  236. package/dist/components/layout/menu/menu-label.styles.js +0 -2
  237. package/dist/components/layout/menu/menu.styles.js +0 -18
  238. package/dist/components/layout/multi-split/multi-split.styles.js +0 -63
  239. package/dist/components/layout/page/page.class.d.ts +4 -0
  240. package/dist/components/layout/page/page.class.js +1 -1
  241. package/dist/components/layout/reorder-list/reorder-item.styles.js +0 -4
  242. package/dist/components/layout/responsive-panel/responsive-panel.styles.js +0 -27
  243. package/dist/components/layout/scroller/scroller.styles.js +0 -20
  244. package/dist/components/layout/segmented/segmented.class.d.ts +7 -1
  245. package/dist/components/layout/segmented/segmented.class.js +1 -1
  246. package/dist/components/layout/segmented/segmented.styles.js +69 -37
  247. package/dist/components/layout/split-panel/split-panel.styles.js +1 -7
  248. package/dist/components/layout/stepper/stepper.class.d.ts +8 -1
  249. package/dist/components/layout/stepper/stepper.class.js +1 -1
  250. package/dist/components/layout/stepper/stepper.styles.js +140 -41
  251. package/dist/components/layout/tab-group/tab-group.class.d.ts +4 -1
  252. package/dist/components/layout/tab-group/tab-group.styles.js +9 -75
  253. package/dist/components/layout/tab-group/tab.styles.js +0 -2
  254. package/dist/components/layout/virtual-list/virtual-list.class.d.ts +4 -4
  255. package/dist/components/layout/virtual-list/virtual-list.class.js +1 -1
  256. package/dist/components/layout/virtual-list/virtual-list.styles.js +0 -68
  257. package/dist/components/layout/widget/widget.class.d.ts +5 -1
  258. package/dist/components/layout/widget/widget.class.js +1 -1
  259. package/dist/components/layout/widget/widget.styles.js +97 -40
  260. package/dist/components/media/animated-image/animated-image.class.d.ts +3 -0
  261. package/dist/components/media/animated-image/animated-image.class.js +1 -1
  262. package/dist/components/media/animated-image/animated-image.styles.js +0 -28
  263. package/dist/components/media/attachment-chip/attachment-chip.class.d.ts +1 -1
  264. package/dist/components/media/attachment-chip/attachment-chip.class.js +1 -1
  265. package/dist/components/media/attachment-chip/attachment-chip.styles.js +0 -31
  266. package/dist/components/media/attachment-trigger/attachment-trigger.class.js +3 -3
  267. package/dist/components/media/attachment-trigger/attachment-trigger.styles.js +0 -40
  268. package/dist/components/media/av-player/av-player.class.d.ts +5 -6
  269. package/dist/components/media/av-player/av-player.class.js +1 -1
  270. package/dist/components/media/av-player/av-player.styles.js +0 -45
  271. package/dist/components/media/avatar/avatar.styles.js +3 -16
  272. package/dist/components/media/file-icon/file-icon.class.d.ts +1 -2
  273. package/dist/components/media/file-icon/file-icon.class.js +1 -1
  274. package/dist/components/media/file-input/file-input.class.d.ts +12 -0
  275. package/dist/components/media/file-input/file-input.styles.js +3 -24
  276. package/dist/components/media/flag/flag.class.d.ts +20 -0
  277. package/dist/components/media/flag/flag.class.js +4 -2
  278. package/dist/components/media/flag/flag.styles.js +7 -1
  279. package/dist/components/media/flag/language-map.d.ts +10 -0
  280. package/dist/components/media/flag/language-map.js +1 -1
  281. package/dist/components/media/image-comparer/image-comparer.styles.js +4 -33
  282. package/dist/components/media/image-viewer/image-viewer.class.js +0 -2
  283. package/dist/components/media/image-viewer/image-viewer.styles.js +7 -27
  284. package/dist/components/media/lightbox/lightbox.class.js +0 -2
  285. package/dist/components/media/lightbox/lightbox.styles.js +0 -21
  286. package/dist/components/media/map/map-loader.d.ts +19 -1
  287. package/dist/components/media/map/map-loader.js +1 -1
  288. package/dist/components/media/map/map.class.d.ts +141 -1
  289. package/dist/components/media/map/map.class.js +15 -3
  290. package/dist/components/media/map/map.styles.js +20 -17
  291. package/dist/components/media/media-card/media-card.class.d.ts +14 -3
  292. package/dist/components/media/media-card/media-card.class.js +1 -1
  293. package/dist/components/media/media-card/media-card.styles.js +2 -28
  294. package/dist/components/media/pan-zoom/pan-zoom.styles.js +0 -3
  295. package/dist/components/media/qr-code/qr-code.class.d.ts +3 -2
  296. package/dist/components/media/qr-code/qr-code.class.js +2 -2
  297. package/dist/components/media/qr-code/qr-code.styles.js +0 -3
  298. package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +2 -0
  299. package/dist/components/media/sequence-playback/sequence-playback.class.js +2 -1
  300. package/dist/components/media/sequence-playback/sequence-playback.styles.js +0 -19
  301. package/dist/components/media/video/video.class.d.ts +23 -2
  302. package/dist/components/media/video/video.class.js +3 -3
  303. package/dist/components/media/video/video.styles.js +4 -2
  304. package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts +3 -2
  305. package/dist/components/media/zoomable-frame/zoomable-frame.class.js +2 -2
  306. package/dist/components/media/zoomable-frame/zoomable-frame.styles.js +0 -5
  307. package/dist/components/overlays/alert/alert.styles.js +4 -2
  308. package/dist/components/overlays/badge/badge.styles.js +4 -48
  309. package/dist/components/overlays/badge/tag.styles.js +0 -14
  310. package/dist/components/overlays/callout/callout.styles.js +0 -11
  311. package/dist/components/overlays/chip/chip-group.styles.js +0 -18
  312. package/dist/components/overlays/chip/chip.styles.js +6 -69
  313. package/dist/components/overlays/dialog/confirm.d.ts +1 -4
  314. package/dist/components/overlays/dialog/confirm.js +1 -1
  315. package/dist/components/overlays/dialog/dialog.class.d.ts +12 -9
  316. package/dist/components/overlays/dialog/dialog.class.js +1 -1
  317. package/dist/components/overlays/dialog/dialog.styles.js +0 -43
  318. package/dist/components/overlays/drawer/drawer.class.d.ts +2 -2
  319. package/dist/components/overlays/drawer/drawer.styles.js +0 -9
  320. package/dist/components/overlays/empty/empty.styles.js +0 -12
  321. package/dist/components/overlays/kbd/kbd.styles.js +0 -8
  322. package/dist/components/overlays/overlay/dropdown.class.d.ts +1 -6
  323. package/dist/components/overlays/overlay/dropdown.class.js +2 -2
  324. package/dist/components/overlays/overlay/overlay.styles.js +0 -28
  325. package/dist/components/overlays/overlay/popover.class.d.ts +9 -1
  326. package/dist/components/overlays/overlay/popover.class.js +2 -2
  327. package/dist/components/overlays/overlay/tooltip.class.d.ts +10 -0
  328. package/dist/components/overlays/overlay/tooltip.class.js +1 -1
  329. package/dist/components/overlays/popup/popup.class.d.ts +1 -0
  330. package/dist/components/overlays/popup/popup.class.js +1 -1
  331. package/dist/components/overlays/popup/popup.styles.js +0 -15
  332. package/dist/components/overlays/progress/progress-ring.class.d.ts +9 -1
  333. package/dist/components/overlays/progress/progress-ring.class.js +3 -3
  334. package/dist/components/overlays/progress/progress.styles.js +0 -21
  335. package/dist/components/overlays/rating/rating.styles.js +0 -25
  336. package/dist/components/overlays/skeleton/skeleton.styles.js +0 -4
  337. package/dist/components/overlays/spinner/spinner.styles.js +0 -3
  338. package/dist/components/overlays/toast/toast-item.styles.js +3 -45
  339. package/dist/components/retrieval/chunk-inspector/chunk-inspector.styles.js +0 -35
  340. package/dist/components/retrieval/citation-badge/citation-badge.class.d.ts +2 -2
  341. package/dist/components/retrieval/citation-badge/citation-badge.class.js +3 -3
  342. package/dist/components/retrieval/citation-badge/citation-badge.styles.js +0 -20
  343. package/dist/components/retrieval/claim-evidence/claim-evidence.styles.js +0 -8
  344. package/dist/components/retrieval/community-card/community-card.class.d.ts +1 -0
  345. package/dist/components/retrieval/community-card/community-card.styles.js +0 -6
  346. package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js +8 -12
  347. package/dist/components/retrieval/entity-card/entity-card.class.d.ts +4 -3
  348. package/dist/components/retrieval/entity-card/entity-card.class.js +1 -1
  349. package/dist/components/retrieval/entity-card/entity-card.styles.js +0 -12
  350. package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts +10 -4
  351. package/dist/components/retrieval/entity-chip/entity-chip.class.js +3 -3
  352. package/dist/components/retrieval/entity-chip/entity-chip.styles.js +6 -9
  353. package/dist/components/retrieval/entity-dossier/entity-dossier.class.d.ts +19 -5
  354. package/dist/components/retrieval/graph/graph.class.d.ts +5 -0
  355. package/dist/components/retrieval/graph/graph.class.js +1 -1
  356. package/dist/components/retrieval/graph/graph.styles.js +0 -30
  357. package/dist/components/retrieval/graph-legend/graph-legend.styles.js +0 -3
  358. package/dist/components/retrieval/ingestion-queue/ingestion-queue.styles.js +0 -25
  359. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts +2 -0
  360. package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js +0 -7
  361. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +20 -6
  362. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +2 -2
  363. package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +0 -16
  364. package/dist/components/retrieval/mind-map/mind-map.class.d.ts +5 -3
  365. package/dist/components/retrieval/mind-map/mind-map.class.js +1 -1
  366. package/dist/components/retrieval/mind-map/mind-map.styles.js +0 -2
  367. package/dist/components/retrieval/neighbor-list/neighbor-list.class.d.ts +3 -2
  368. package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +1 -1
  369. package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +0 -30
  370. package/dist/components/retrieval/node-palette/node-palette.styles.js +0 -11
  371. package/dist/components/retrieval/path-strip/path-strip.styles.js +0 -10
  372. package/dist/components/retrieval/provenance-panel/provenance-panel.class.d.ts +12 -3
  373. package/dist/components/retrieval/provenance-panel/provenance-panel.styles.js +0 -2
  374. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.d.ts +3 -2
  375. package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js +2 -2
  376. package/dist/components/retrieval/retrieval-results/retrieval-results.styles.js +0 -28
  377. package/dist/components/retrieval/retrieval-search/retrieval-search.styles.js +0 -4
  378. package/dist/components/retrieval/retrieval-trace/retrieval-trace.styles.js +0 -2
  379. package/dist/components/retrieval/source-card/source-card.styles.js +0 -13
  380. package/dist/components/retrieval/source-list/source-list.styles.js +0 -7
  381. package/dist/components/retrieval/source-picker/source-picker.styles.js +0 -7
  382. package/dist/components/utility/copy-button/copy-button.styles.js +0 -10
  383. package/dist/components/utility/diff-view/diff-view.styles.js +0 -14
  384. package/dist/components/utility/export-button/export-button.styles.js +0 -22
  385. package/dist/components/utility/icon/icon.styles.js +0 -6
  386. package/dist/components/utility/json-viewer/json-viewer.styles.js +2 -48
  387. package/dist/components/utility/known-date/known-date.class.d.ts +7 -3
  388. package/dist/components/utility/known-date/known-date.styles.js +10 -51
  389. package/dist/components/utility/live-region/live-region.styles.js +0 -4
  390. package/dist/components/utility/mention-popover/mention-popover.styles.js +0 -25
  391. package/dist/components/utility/poll-status/poll-status.styles.js +0 -4
  392. package/dist/components/utility/random-content/random-content.class.d.ts +22 -0
  393. package/dist/components/utility/random-content/random-content.class.js +3 -2
  394. package/dist/components/utility/random-content/random-content.styles.js +6 -13
  395. package/dist/components/utility/tour/tour.class.d.ts +4 -2
  396. package/dist/components/utility/tour/tour.class.js +3 -3
  397. package/dist/components/utility/tour/tour.styles.js +0 -13
  398. package/dist/components/utility/visually-hidden/visually-hidden.styles.js +0 -5
  399. package/dist/components/viewers/archive-viewer/archive-viewer.class.js +1 -1
  400. package/dist/components/viewers/archive-viewer/archive-viewer.styles.d.ts +2 -2
  401. package/dist/components/viewers/archive-viewer/archive-viewer.styles.js +0 -10
  402. package/dist/components/viewers/csv-viewer/csv-viewer.class.js +1 -1
  403. package/dist/components/viewers/csv-viewer/csv-viewer.styles.js +0 -19
  404. package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js +1 -1
  405. package/dist/components/viewers/dataset-viewer/dataset-viewer.styles.js +0 -15
  406. package/dist/components/viewers/document-compare/document-compare.styles.js +0 -3
  407. package/dist/components/viewers/document-preview/document-preview.styles.js +0 -25
  408. package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +2 -1
  409. package/dist/components/viewers/document-viewer/document-viewer.class.js +1 -1
  410. package/dist/components/viewers/document-viewer/document-viewer.styles.js +0 -5
  411. package/dist/components/viewers/docx-viewer/docx-viewer.styles.js +0 -17
  412. package/dist/components/viewers/ebook-viewer/ebook-viewer.styles.js +0 -4
  413. package/dist/components/viewers/email-viewer/email-viewer.styles.js +0 -7
  414. package/dist/components/viewers/geojson-view/geojson-view.styles.js +0 -5
  415. package/dist/components/viewers/highlight-layer/highlight-layer.styles.js +0 -3
  416. package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +1 -1
  417. package/dist/components/viewers/notebook-viewer/notebook-viewer.styles.js +0 -38
  418. package/dist/components/viewers/page-rail/page-rail.class.js +1 -1
  419. package/dist/components/viewers/page-rail/page-rail.styles.js +0 -13
  420. package/dist/components/viewers/pdf-viewer/pdf-loader.d.ts +13 -2
  421. package/dist/components/viewers/pdf-viewer/pdf-loader.js +1 -1
  422. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts +32 -2
  423. package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +4 -4
  424. package/dist/components/viewers/pdf-viewer/pdf-viewer.styles.js +1 -27
  425. package/dist/components/viewers/pptx-viewer/pptx-viewer.styles.js +0 -3
  426. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.js +1 -1
  427. package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.styles.js +0 -14
  428. package/dist/components/viewers/svg-viewer/svg-viewer.styles.js +0 -7
  429. package/dist/components/viewers/xml-viewer/xml-viewer.styles.js +2 -24
  430. package/dist/custom-elements-jsx.d.ts +56 -37
  431. package/dist/events.d.ts +43 -33
  432. package/dist/internal/agent-status-variants.d.ts +18 -0
  433. package/dist/internal/agent-status-variants.js +1 -0
  434. package/dist/internal/announcer.d.ts +8 -3
  435. package/dist/internal/announcer.js +1 -1
  436. package/dist/internal/autoloader-manifest.js +1 -1
  437. package/dist/internal/canvas-color.d.ts +16 -0
  438. package/dist/internal/canvas-color.js +1 -1
  439. package/dist/internal/catalog-picker.d.ts +0 -1
  440. package/dist/internal/catalog-picker.js +1 -1
  441. package/dist/internal/default-strings.generated.d.ts +1 -0
  442. package/dist/internal/default-strings.generated.js +1 -1
  443. package/dist/internal/dev-mode-attribute-warning.d.ts +27 -4
  444. package/dist/internal/dev-mode-attribute-warning.js +1 -1
  445. package/dist/internal/localization-runtime.js +1 -1
  446. package/dist/internal/localization-types.d.ts +1 -1
  447. package/dist/internal/localization.js +1 -1
  448. package/dist/internal/lyra-element.d.ts +13 -0
  449. package/dist/internal/lyra-element.js +1 -1
  450. package/dist/internal/media-controller.js +1 -1
  451. package/dist/internal/package-metadata.d.ts +1 -1
  452. package/dist/internal/package-metadata.js +1 -1
  453. package/dist/internal/scroll-overflow.d.ts +35 -13
  454. package/dist/internal/scroll-overflow.js +1 -1
  455. package/dist/internal/sizes.styles.js +0 -2
  456. package/dist/internal/specialist-tokens.styles.js +6 -11
  457. package/dist/internal/text-highlights.d.ts +4 -1
  458. package/dist/internal/text-highlights.js +1 -1
  459. package/dist/internal/tokens/palette.styles.js +0 -15
  460. package/dist/internal/tokens.styles.js +19 -113
  461. package/dist/lyra.d.ts +8 -5
  462. package/dist/styles/reservations.css +82 -0
  463. package/dist/svelte.d.ts +56 -37
  464. package/dist/translations/ar.js +1 -1
  465. package/dist/translations/de.js +1 -1
  466. package/dist/translations/es.js +1 -1
  467. package/dist/translations/fa.js +1 -1
  468. package/dist/translations/fr.js +1 -1
  469. package/dist/translations/he.js +1 -1
  470. package/dist/translations/ja.js +1 -1
  471. package/dist/translations/pt-BR.js +1 -1
  472. package/dist/translations/ru.js +1 -1
  473. package/dist/translations/zh-CN.js +1 -1
  474. package/dist/vue.d.ts +56 -37
  475. package/llms/components/lr-accordion-item.md +12 -3
  476. package/llms/components/lr-accordion.md +11 -2
  477. package/llms/components/lr-agent-eval-dashboard.md +1 -1
  478. package/llms/components/lr-agent-trace.md +3 -1
  479. package/llms/components/lr-agent-workspace.md +20 -0
  480. package/llms/components/lr-artifact-panel.md +10 -4
  481. package/llms/components/lr-attachment-chip.md +7 -4
  482. package/llms/components/lr-attachment-trigger.md +7 -4
  483. package/llms/components/lr-av-player.md +3 -1
  484. package/llms/components/lr-avatar.md +6 -6
  485. package/llms/components/lr-bar-chart.md +4 -3
  486. package/llms/components/lr-box-plot.md +1 -1
  487. package/llms/components/lr-browser-frame.md +7 -3
  488. package/llms/components/lr-bubble-chart.md +4 -3
  489. package/llms/components/lr-calendar.md +9 -2
  490. package/llms/components/lr-card.md +24 -0
  491. package/llms/components/lr-chart.md +32 -8
  492. package/llms/components/lr-chat-viewport.md +7 -2
  493. package/llms/components/lr-checkbox-group.md +13 -5
  494. package/llms/components/lr-checkbox.md +5 -2
  495. package/llms/components/lr-checkpoint.md +6 -2
  496. package/llms/components/lr-combobox.md +5 -2
  497. package/llms/components/lr-command-palette.md +4 -1
  498. package/llms/components/lr-confirm-bar.md +7 -3
  499. package/llms/components/lr-context-meter.md +12 -11
  500. package/llms/components/lr-conversation-item.md +7 -4
  501. package/llms/components/lr-details.md +11 -2
  502. package/llms/components/lr-dialog.md +15 -10
  503. package/llms/components/lr-dock-panel.md +7 -10
  504. package/llms/components/lr-document-preview.md +6 -1
  505. package/llms/components/lr-document-viewer.md +3 -2
  506. package/llms/components/lr-doughnut-chart.md +4 -3
  507. package/llms/components/lr-drawer.md +3 -3
  508. package/llms/components/lr-entity-card.md +3 -3
  509. package/llms/components/lr-entity-chip.md +1 -1
  510. package/llms/components/lr-entity-dossier.md +4 -1
  511. package/llms/components/lr-file-input.md +2 -2
  512. package/llms/components/lr-flag.md +20 -5
  513. package/llms/components/lr-heatmap.md +28 -0
  514. package/llms/components/lr-histogram.md +3 -1
  515. package/llms/components/lr-icon.md +1 -1
  516. package/llms/components/lr-json-schema-viewer.md +2 -1
  517. package/llms/components/lr-knowledge-graph-explorer.md +8 -3
  518. package/llms/components/lr-known-date.md +4 -2
  519. package/llms/components/lr-line-chart.md +4 -3
  520. package/llms/components/lr-lite-chart.md +16 -6
  521. package/llms/components/lr-map.md +72 -8
  522. package/llms/components/lr-markdown-core.md +3 -2
  523. package/llms/components/lr-media-card.md +28 -12
  524. package/llms/components/lr-message-parts.md +2 -1
  525. package/llms/components/lr-model-select.md +9 -10
  526. package/llms/components/lr-model-settings-panel.md +9 -9
  527. package/llms/components/lr-neighbor-list.md +1 -1
  528. package/llms/components/lr-notebook-viewer.md +6 -3
  529. package/llms/components/lr-option.md +5 -2
  530. package/llms/components/lr-pdf-viewer.md +62 -2
  531. package/llms/components/lr-pie-chart.md +4 -3
  532. package/llms/components/lr-polar-area-chart.md +4 -3
  533. package/llms/components/lr-popover.md +5 -0
  534. package/llms/components/lr-progress-ring.md +8 -1
  535. package/llms/components/lr-prompt-studio.md +1 -1
  536. package/llms/components/lr-provenance-panel.md +4 -2
  537. package/llms/components/lr-qr-code.md +1 -1
  538. package/llms/components/lr-radar-chart.md +4 -3
  539. package/llms/components/lr-rag-eval-dashboard.md +2 -2
  540. package/llms/components/lr-random-content.md +13 -0
  541. package/llms/components/lr-reorder-item.md +6 -1
  542. package/llms/components/lr-reorder-list.md +6 -1
  543. package/llms/components/lr-responsive-panel.md +11 -7
  544. package/llms/components/lr-scatter-chart.md +4 -3
  545. package/llms/components/lr-sequence-strip.md +16 -2
  546. package/llms/components/lr-slider.md +12 -5
  547. package/llms/components/lr-sparkline.md +1 -1
  548. package/llms/components/lr-suggestion-chips.md +7 -2
  549. package/llms/components/lr-swatch-picker.md +5 -5
  550. package/llms/components/lr-switch.md +5 -2
  551. package/llms/components/lr-table.md +30 -4
  552. package/llms/components/lr-terminal.md +3 -1
  553. package/llms/components/lr-thread-list.md +8 -8
  554. package/llms/components/lr-time-input.md +6 -1
  555. package/llms/components/lr-timeline-item.md +24 -0
  556. package/llms/components/lr-timeline.md +25 -1
  557. package/llms/components/lr-token-input.md +7 -2
  558. package/llms/components/lr-tool-approval-dialog.md +7 -8
  559. package/llms/components/lr-tool-call-chip.md +5 -1
  560. package/llms/components/lr-tool-param-form.md +14 -12
  561. package/llms/components/lr-tool-result-dialog.md +11 -9
  562. package/llms/components/lr-tool-result-view.md +7 -6
  563. package/llms/components/lr-tool-select-dialog.md +18 -16
  564. package/llms/components/lr-trace-tree.md +3 -1
  565. package/llms/components/lr-usage-badge.md +4 -1
  566. package/llms/components/lr-video-playlist.md +1 -1
  567. package/llms/components/lr-virtual-list.md +22 -14
  568. package/llms/components/lr-voice-picker.md +8 -5
  569. package/llms/components/lr-widget-renderer.md +3 -3
  570. package/llms/components/lr-widget.md +1 -1
  571. package/llms/components/lr-word-cloud.md +6 -2
  572. package/llms/peers.md +12 -2
  573. package/llms/shared.md +70 -2
  574. package/llms-full.txt +1143 -285
  575. package/package.json +17 -5
  576. package/vscode-css-data.json +37 -2
  577. package/vscode-html-data.json +401 -44
  578. package/web-types.json +299 -55
@@ -67,9 +67,6 @@ import{css}from"lit";const styles=css`
67
67
 
68
68
  [part="bar-track"] {
69
69
  position: relative;
70
- /* 1.5rem (24px), not a narrower duration-scaled height -- [part='bar'] is the sole
71
- click/keyboard target for lr-span-select and must clear the WCAG 2.5.8 24px minimum
72
- target size regardless of how thin a given bar's duration would otherwise render it. */
73
70
  block-size: var(--lr-size-1-5rem);
74
71
  }
75
72
  [part="bar"] {
@@ -84,14 +81,6 @@ import{css}from"lit";const styles=css`
84
81
  [part="bar"][hidden] {
85
82
  display: none;
86
83
  }
87
- /* The hover/pressed tint is a veil on a pseudo-element rather than a background swap on the bar
88
- itself, because a bar's fill is one of five different things: four solid tones, a striped
89
- gradient for the running tone, and a transparent dashed box for the pending one. No single
90
- background declaration tints all five; one translucent overlay does. Mixing toward
91
- --lr-color-mix-partner (which follows the text colour) darkens the veil in a light theme and
92
- lightens it in a dark one -- which the filter: brightness() this replaces only managed by luck.
93
- A filter multiplies every channel, so it moved a mid-tone bar, did nothing at all to a pure
94
- white or pure black one, and applied to the whole subtree instead of just the surface. */
95
84
  [part="bar"]::after {
96
85
  content: "";
97
86
  position: absolute;
@@ -148,10 +137,6 @@ import{css}from"lit";const styles=css`
148
137
  var(--lr-color-border-strong)
149
138
  );
150
139
  }
151
- /* background-position is physical, so the stripe crawl direction does not mirror on its own
152
- under RTL; play the same keyframes backwards there. animation-direction (not a second
153
- animation-name) keeps the reduced-motion 'animation: none' override below effective --
154
- this rule's higher specificity would otherwise win the animation-name longhand back. */
155
140
  :host(:dir(rtl)) [part="bar"][data-tone="accent"] {
156
141
  animation-direction: reverse;
157
142
  }
@@ -2,8 +2,6 @@ import{css}from"lit";const styles=css`
2
2
  :host {
3
3
  display: block;
4
4
  font-size: var(--lr-font-size-sm);
5
- /* Consumer-tunable scroll cap -- 'none' means the component grows with its content until a
6
- caller opts into an internal scrollbar via the max-height attribute. */
7
5
  --_lr-stack-trace-max-height: none;
8
6
  --_lr-stack-trace-font: var(--lr-font-mono);
9
7
  }
@@ -19,11 +17,6 @@ import{css}from"lit";const styles=css`
19
17
  background: var(--lr-color-surface);
20
18
  padding: var(--lr-space-s);
21
19
  }
22
- /* Density escape -- same convention as lr-agent-run's/lr-thinking-panel's compact. The tuned
23
- values sit behind inline var() fallbacks (rather than a :host declaration, which every instance
24
- would re-declare and so shadow any ancestor value) so a consumer can retune them from outside
25
- without restating the whole rule. Purely density: the border, radius and background stay, and
26
- frame="plain" below is what drops them. */
27
20
  :host([compact]) [part="base"] {
28
21
  padding: var(--lr-stack-trace-compact-padding, var(--lr-space-2xs));
29
22
  }
@@ -34,14 +27,6 @@ import{css}from"lit";const styles=css`
34
27
  :host([compact]) [part="group"]:last-child {
35
28
  margin-block-end: 0;
36
29
  }
37
- /* MUST stay after :host([compact]) [part='base']: both are equal-specificity, so source order
38
- alone decides which padding wins when a trace is both compact and frame="plain". plain is the
39
- stronger statement ("no chrome at all"), so it goes last.
40
- Chrome-less escape, the shared frame="plain" treatment (and lr-callout's [inline]): a stack
41
- trace is routinely nested inside an lr-result-card or lr-agent-run that already draws a border,
42
- which would otherwise double the box. Only the box decoration goes -- the max-block-size scroll
43
- cap and overflow stay, as do the copy button's and stack frames' own hover/focus affordances,
44
- which never depended on this border. */
45
30
  :host([frame="plain"]) [part="base"] {
46
31
  padding: 0;
47
32
  border: 0;
@@ -83,9 +68,6 @@ import{css}from"lit";const styles=css`
83
68
  button[part="frame"]:focus-visible {
84
69
  color: var(--lr-stack-trace-interactive-color, var(--lr-color-brand));
85
70
  }
86
- /* The hover recolours the label only, which leaves the pressed step nothing to deepen -- so
87
- pressed tints the frame's own (transparent) surface toward --lr-color-mix-partner, which
88
- follows the text colour and therefore darkens in a light theme and lightens in a dark one. */
89
71
  button[part="frame"]:active {
90
72
  background: color-mix(
91
73
  in oklab,
@@ -162,8 +144,6 @@ import{css}from"lit";const styles=css`
162
144
  var(--lr-color-brand)
163
145
  );
164
146
  }
165
- /* As with [part='frame'] above: the hover moves the border only, so pressed tints the button's
166
- own surface fill toward --lr-color-mix-partner instead of restating the border colour. */
167
147
  [part="copy-button"]:active {
168
148
  background: color-mix(
169
149
  in oklab,
@@ -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,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import"../../overlays/badge/badge.class.js";import"../../overlays/empty/empty.class.js";import{styles}from"./subagent-panel.styles.js";import{LYRA_DEFAULT_agentRunStatusCancelled,LYRA_DEFAULT_agentRunStatusCollecting,LYRA_DEFAULT_agentRunStatusDone,LYRA_DEFAULT_agentRunStatusIdle,LYRA_DEFAULT_agentRunStatusQueued,LYRA_DEFAULT_agentRunStatusWaitingApproval,LYRA_DEFAULT_agentRunStatusWaitingInput,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_subagentPanelCancelRun,LYRA_DEFAULT_subagentPanelEmpty,LYRA_DEFAULT_subagentPanelLabel,LYRA_DEFAULT_subagentPanelLimit,LYRA_DEFAULT_subagentPanelRetry,LYRA_DEFAULT_subagentPanelRetryRun}from"../../../internal/default-strings.generated.js";const STATUS_VARIANT={idle:"neutral",queued:"neutral",running:"brand",collecting:"brand","waiting-input":"warning","waiting-approval":"warning",done:"success",error:"danger",cancelled:"neutral"},ACTIVE=new Set(["queued","running","collecting","waiting-input","waiting-approval"]),MAX_RENDERED_RUNS=500,MAX_VISUAL_INDENT_DEPTH=12;class LyraSubagentPanel extends LyraElement{constructor(){super(...arguments),this.runs=[],this.selectedRunId=null,this.focusedId=null,this.orderedRunsCache={rows:[],truncated:!1},this.previousLimitText="",this.suppressNextLimitAnnouncement=!0,this.onKeyDown=e=>{const{rows}=this.orderedRunsCache;if(rows.length===0)return;const currentIndex=rows.findIndex(r=>r.run.id===this.focusedId);switch(e.key){case"ArrowDown":e.preventDefault(),this.focusRow(rows[Math.min(rows.length-1,currentIndex+1)]);break;case"ArrowUp":e.preventDefault(),this.focusRow(rows[Math.max(0,currentIndex-1)]);break;case"Home":e.preventDefault(),this.focusRow(rows[0]);break;case"End":e.preventDefault(),this.focusRow(rows[rows.length-1]);break;case"Enter":case" ":{const target=e.target;if(target.getAttribute("role")!=="treeitem")return;const row=rows.find(candidate=>candidate.run.id===target.dataset.runId);if(!row)return;e.preventDefault(),this.emit("lr-run-activate",{runId:row.run.id,run:row.run});break}default:return}},this.onFocusIn=e=>{const runId=e.target?.closest('[role="treeitem"]')?.dataset.runId;runId&&(this.focusedId=runId)},this.renderRun=({run,depth,posInSet,setSize},firstId)=>{const selected=run.id===this.selectedRunId,progress=typeof run.progressRatio=="number"?finiteRange(run.progressRatio,0,0,1):null,runPart=selected?"run run-selected":"run",tabbable=this.focusedId===run.id||this.focusedId==null&&run.id===firstId;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,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{AGENT_STATUS_VARIANTS}from"../../../internal/agent-status-variants.js";import"../../overlays/badge/badge.class.js";import"../../overlays/empty/empty.class.js";import{styles}from"./subagent-panel.styles.js";import{LYRA_DEFAULT_agentRunStatusCancelled,LYRA_DEFAULT_agentRunStatusCollecting,LYRA_DEFAULT_agentRunStatusDone,LYRA_DEFAULT_agentRunStatusIdle,LYRA_DEFAULT_agentRunStatusQueued,LYRA_DEFAULT_agentRunStatusWaitingApproval,LYRA_DEFAULT_agentRunStatusWaitingInput,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_subagentPanelCancelRun,LYRA_DEFAULT_subagentPanelEmpty,LYRA_DEFAULT_subagentPanelLabel,LYRA_DEFAULT_subagentPanelLimit,LYRA_DEFAULT_subagentPanelRetry,LYRA_DEFAULT_subagentPanelRetryRun}from"../../../internal/default-strings.generated.js";const ACTIVE=new Set(["queued","running","collecting","waiting-input","waiting-approval"]),MAX_RENDERED_RUNS=500,MAX_VISUAL_INDENT_DEPTH=12;class LyraSubagentPanel extends LyraElement{constructor(){super(...arguments),this.runs=[],this.selectedRunId=null,this.focusedId=null,this.orderedRunsCache={rows:[],truncated:!1},this.previousLimitText="",this.suppressNextLimitAnnouncement=!0,this.onKeyDown=e=>{const{rows}=this.orderedRunsCache;if(rows.length===0)return;const currentIndex=rows.findIndex(r=>r.run.id===this.focusedId);switch(e.key){case"ArrowDown":e.preventDefault(),this.focusRow(rows[Math.min(rows.length-1,currentIndex+1)]);break;case"ArrowUp":e.preventDefault(),this.focusRow(rows[Math.max(0,currentIndex-1)]);break;case"Home":e.preventDefault(),this.focusRow(rows[0]);break;case"End":e.preventDefault(),this.focusRow(rows[rows.length-1]);break;case"Enter":case" ":{const target=e.target;if(target.getAttribute("role")!=="treeitem")return;const row=rows.find(candidate=>candidate.run.id===target.dataset.runId);if(!row)return;e.preventDefault(),this.emit("lr-run-activate",{runId:row.run.id,run:row.run});break}default:return}},this.onFocusIn=e=>{const runId=e.target?.closest('[role="treeitem"]')?.dataset.runId;runId&&(this.focusedId=runId)},this.renderRun=({run,depth,posInSet,setSize},firstId)=>{const selected=run.id===this.selectedRunId,progress=typeof run.progressRatio=="number"?finiteRange(run.progressRatio,0,0,1):null,runPart=selected?"run run-selected":"run",tabbable=this.focusedId===run.id||this.focusedId==null&&run.id===firstId;return html`
2
2
  <li
3
3
  part=${runPart}
4
4
  data-run-id=${run.id}
@@ -18,7 +18,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
18
18
  @click=${()=>this.emit("lr-run-activate",{runId:run.id,run})}
19
19
  >
20
20
  <span part="label">${run.label}</span>
21
- <lr-badge part="status" variant=${STATUS_VARIANT[run.status]??"neutral"}>${this.statusLabel(run.status)}</lr-badge>
21
+ <lr-badge part="status" variant=${AGENT_STATUS_VARIANTS[run.status]??"neutral"}>${this.statusLabel(run.status)}</lr-badge>
22
22
  ${run.task?html`<span part="task">${run.task}</span>`:nothing}
23
23
  ${run.model?html`<span part="model">${run.model}</span>`:nothing}
24
24
  ${progress!=null?html`<span
@@ -11,9 +11,6 @@ import{css}from"lit";const styles=css`
11
11
  padding: var(--lr-space-s); border: 0; background: var(--lr-color-surface); color: var(--lr-color-text); font: inherit; text-align: start; cursor: pointer;
12
12
  }
13
13
  [part='run-trigger']:hover, [part='cancel']:hover, [part='retry']:hover { background: var(--lr-color-surface-raised); }
14
- /* Pressed is the hovered tint pushed a further --lr-color-mix-active toward
15
- --lr-color-mix-partner (which follows the text colour), so it reads as a distinctly deeper step
16
- than hover in both light and dark themes rather than repeating it. */
17
14
  [part='run-trigger']:active, [part='cancel']:active, [part='retry']:active {
18
15
  background: color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active));
19
16
  }
@@ -9,12 +9,6 @@ import{css}from"lit";import{srOnly}from"../../../internal/a11y.js";const styles=
9
9
  background: var(--lr-color-surface);
10
10
  overflow: hidden;
11
11
  }
12
- /* Density escape -- same convention as lr-agent-run/lr-source-card's compact. Task lists render
13
- embedded in the transcript (see the class doc), so the tuned values sit behind inline var()
14
- fallbacks (rather than :host declarations, which every instance would re-declare and so
15
- shadow any ancestor value) letting a transcript retune every list at once from the outside;
16
- header and body carry their own padding (unlike agent-run/source-card's single [part='base']
17
- padding) since that's where this component already puts it. */
18
12
  :host([compact]) [part="header"] {
19
13
  padding: var(
20
14
  --lr-task-list-compact-header-padding,
@@ -33,11 +27,6 @@ import{css}from"lit";import{srOnly}from"../../../internal/a11y.js";const styles=
33
27
  var(--lr-space-2xs) var(--lr-space-s) var(--lr-space-s)
34
28
  );
35
29
  }
36
- /* Chrome escape -- same convention as lr-agent-run/lr-source-card's frame="plain": drops
37
- the outer border/background/radius so a list nested inside a host container that already
38
- draws a border (an agent-run panel, a message bubble) doesn't double it. The header/body's
39
- own internal divider and padding are layout, not outer chrome, so they're untouched --
40
- matching how agent-run's plain rule leaves its own Cancel/Retry button chrome alone. */
41
30
  :host([frame="plain"]) [part="base"] {
42
31
  border: 0;
43
32
  border-radius: 0;
@@ -61,14 +50,10 @@ import{css}from"lit";import{srOnly}from"../../../internal/a11y.js";const styles=
61
50
  button[part="header"] {
62
51
  cursor: pointer;
63
52
  }
64
- /* Pointer hover and press remain separate from the resting header treatment. */
65
53
  :where(button[part="header"]):hover {
66
54
  background: var(--lr-color-brand-quiet);
67
55
  color: var(--lr-color-brand);
68
56
  }
69
- /* Pressed is the hovered tint pushed a further --lr-color-mix-active toward
70
- --lr-color-mix-partner (which follows the text colour), so it reads as a distinctly deeper
71
- step than hover in both light and dark themes rather than repeating it. */
72
57
  :where(button[part="header"]):active {
73
58
  background: color-mix(
74
59
  in oklab,
@@ -2,6 +2,7 @@ import { type TemplateResult, type PropertyValues } from 'lit';
2
2
  import { LyraElement } from '../../../internal/lyra-element.js';
3
3
  import type { LyraAnchor, LyraHighlight, HighlightActivateDetail, TextSelectDetail } from '../../viewers/document-viewer/anchors.js';
4
4
  import type { LyraFrame } from '../../../internal/variants.js';
5
+ import type { LyraSearchChangeDetail } from '../../../internal/text-viewer-target.js';
5
6
  import { type LyraClipboardWriteFailure, type LyraClipboardWriteSuccess } from '../../../internal/clipboard.js';
6
7
  export interface LyraTerminalEventMap {
7
8
  'lr-copy': CustomEvent<LyraClipboardWriteSuccess>;
@@ -13,11 +14,7 @@ export interface LyraTerminalEventMap {
13
14
  'lr-follow-change': CustomEvent<{
14
15
  following: boolean;
15
16
  }>;
16
- 'lr-search-change': CustomEvent<{
17
- query: string;
18
- matchCount: number;
19
- activeIndex: number;
20
- }>;
17
+ 'lr-search-change': CustomEvent<LyraSearchChangeDetail>;
21
18
  'lr-highlight-activate': CustomEvent<HighlightActivateDetail>;
22
19
  'lr-text-select': CustomEvent<TextSelectDetail>;
23
20
  }
@@ -43,7 +40,9 @@ export interface LyraTerminalEventMap {
43
40
  * `<lr-media-card>`'s `lr-open` convention.
44
41
  * @event lr-follow-change - `detail: { following }` — a user viewport/jump action changed
45
42
  * stick-to-bottom. Direct `follow` assignments and imperative navigation do not echo an event.
46
- * @event lr-search-change - `detail: { query, matchCount, activeIndex }`.
43
+ * @event lr-search-change - `detail: { query, matchCount, matchCountExact, activeIndex }`.
44
+ * `matchCountExact` is `false` once a search hits the 10,000-match retention ceiling, marking
45
+ * `matchCount` as a lower bound rather than an exact total.
47
46
  * @event lr-highlight-activate - `detail: { highlightId }` — a highlighted line was
48
47
  * clicked/activated.
49
48
  * @event lr-text-select - `detail: { text, anchor, rects }` — fires on pointerup after a text
@@ -160,6 +159,9 @@ export declare class LyraTerminal extends LyraElement<LyraTerminalEventMap> {
160
159
  private readonly announcer;
161
160
  private searchQuery;
162
161
  private searchMatches;
162
+ /** `false` once `recomputeSearchMatches()` hits `MAX_SEARCH_MATCHES` -- marks `searchMatches`
163
+ * as a truthful lower bound rather than the true total. */
164
+ private searchMatchCountExact;
163
165
  private searchActiveIndex;
164
166
  connectedCallback(): void;
165
167
  disconnectedCallback(): void;
@@ -190,6 +192,9 @@ export declare class LyraTerminal extends LyraElement<LyraTerminalEventMap> {
190
192
  private searchState;
191
193
  private emitSearchChangeIfChanged;
192
194
  private jumpToActiveMatch;
195
+ /** Resolves the retained match count. The emitted `lr-search-change.matchCountExact` is `false`
196
+ * when that return value is only a lower bound because the 10,000-match retention ceiling was
197
+ * reached. */
193
198
  search(query: string): Promise<number>;
194
199
  /** Advances to the next match, wrapping to the first after the last. Resolves `true` once the
195
200
  * active match moved, `false` when there are no matches -- the shape the shared
@@ -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,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{specialistTokens}from"../../../internal/specialist-tokens.styles.js";import{srOnly}from"../../../internal/a11y.js";import{Announcer,acquireAnnouncementSink}from"../../../internal/announcer.js";import{createAnsiParser}from"../../../internal/ansi.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{finiteCount}from"../../../internal/numbers.js";import{sanitizeCssColor}from"../../../internal/safe-css.js";import{firstByIdentity}from"../collection-identity.js";import{boundedSelectionRects,boundedSelectionText}from"../../../internal/text-quote.js";import{styles}from"./terminal.styles.js";import{presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{writeClipboardText}from"../../../internal/clipboard.js";import{LYRA_DEFAULT_accessibleLabelSeparator,LYRA_DEFAULT_copied,LYRA_DEFAULT_copy,LYRA_DEFAULT_copyFailed,LYRA_DEFAULT_highlightWithLabel,LYRA_DEFAULT_jumpToLatest,LYRA_DEFAULT_terminalDownload,LYRA_DEFAULT_terminalHighlightLine,LYRA_DEFAULT_terminalLabel}from"../../../internal/default-strings.generated.js";const EMPTY_CELL_STYLES={bold:!1,dim:!1,italic:!1,underline:!1,inverse:!1},ANNOUNCE_THROTTLE_MS=10,MAX_SEARCH_MATCHES=1e4,MAX_INPUT_CHARACTERS=1e6,MAX_CELLS_PER_LINE=2e4,MAX_RETAINED_CELLS=2e5,MAX_SCROLLBACK_LINES=1e4,SCROLLBACK_PRUNE_BATCH=256,TONE_BACKGROUND_VAR={accent:"var(--lr-terminal-highlight-accent-bg, var(--lr-color-brand-quiet))",success:"var(--lr-terminal-highlight-success-bg, var(--lr-color-success-quiet))",warning:"var(--lr-terminal-highlight-warning-bg, var(--lr-color-warning-quiet))",danger:"var(--lr-terminal-highlight-danger-bg, var(--lr-color-danger-quiet))",neutral:"var(--lr-terminal-highlight-neutral-bg, var(--lr-color-surface))"};function plainTextOfLine(line){return line.cells.map(c=>c.char).join("")}function groupCells(cells){const segments=[];for(const cell of cells){const last=segments[segments.length-1];last&&stylesEqual(last.styles,cell.styles)?last.text+=cell.char:segments.push({text:cell.char,styles:cell.styles})}return segments}function stylesEqual(a,b){return a.bold===b.bold&&a.dim===b.dim&&a.italic===b.italic&&a.underline===b.underline&&a.inverse===b.inverse&&a.fg===b.fg&&a.bg===b.bg}class LyraTerminal extends LyraElement{constructor(){super(...arguments),this.content="",this.maxScrollback=5e3,this.follow=!0,this.wrap=!0,this.copyable=!0,this.downloadable=!1,this.filename="terminal.log",this.announceOutput=!1,this.accessibleLabel="",this.highlights=[],this.activeHighlightId=null,this.compact=!1,this.frame="card",this.anchorKinds=["line-range"],this.lines=[],this.scrollTargetLineNumber=null,this.copyStatus="rest",this.buffer=[],this.retainedCellCount=0,this.lineSeq=0,this.column=0,this.appliedContent="",this.ansiParser=createAnsiParser(),this.copyGeneration=0,this.pendingAnnounceText="",this.announcer=new Announcer({throttleMs:ANNOUNCE_THROTTLE_MS,onFlush:text=>{this.pendingAnnounceText="",this.sink?.announce(text),this.announceRegionEl&&(this.announceRegionEl.textContent=text)}}),this.searchQuery="",this.searchMatches=[],this.searchActiveIndex=-1,this.jumpToLatest=()=>{const changed=!this.follow;this.scrollToBottom(),changed&&this.emit("lr-follow-change",{following:!0})},this.onLineKeyDown=(e,h)=>{(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),this.activateHighlight(h))},this.onCopy=()=>{this.copyOutput()},this.onDownload=()=>{const filename=this.filename||"terminal.log";if(this.emit("lr-download",{filename},{cancelable:!0}).defaultPrevented)return;const ownerWindow=this.ownerDocument.defaultView;if(!ownerWindow)return;const blob=new ownerWindow.Blob([this.getPlainText()],{type:"text/plain"}),url=ownerWindow.URL.createObjectURL(blob),a=this.ownerDocument.createElement("a");a.href=url,a.download=filename,a.click(),ownerWindow.setTimeout(()=>ownerWindow.URL.revokeObjectURL(url),5e3)},this.onVisibleRangeChanged=e=>{e.stopPropagation();const atBottom=this.lines.length===0||e.detail.end>=this.lines.length-1;atBottom!==this.follow&&(this.follow=atBottom,this.emit("lr-follow-change",{following:atBottom}))},this.onViewportKeyDown=e=>{e.key==="End"&&this.jumpToLatest()},this.onViewportPointerUp=()=>{const shadowGetSelection=root=>root?.getSelection?.(),listShadow=this.renderRoot.querySelector("lr-virtual-list")?.shadowRoot,selection=shadowGetSelection(listShadow)??shadowGetSelection(this.shadowRoot)??this.ownerDocument.getSelection();if(!selection||selection.isCollapsed)return;let range;try{range=selection.getRangeAt(0)}catch{return}const text=boundedSelectionText(range);if(text==="")return;const lineNumberOf=node=>{let el=node;for(;el;){if(el.nodeType===1){const attr=el.getAttribute("data-line-number");if(attr!==null)return Number(attr)}el=el.parentNode??el.host??null}return null},startLine=lineNumberOf(selection.anchorNode),endLine=lineNumberOf(selection.focusNode),anchor=startLine!==null&&endLine!==null?{kind:"line-range",start:Math.min(startLine,endLine),end:Math.max(startLine,endLine)}:null;let rects=Object.freeze([]);try{rects=boundedSelectionRects(range)}catch{}this.emit("lr-text-select",{text,anchor,rects})},this.renderLine=(line,highlightByLine,highlightOwnerLines,matchedLineNumbers,activeMatchLineNumber)=>{const isMatchLine=matchedLineNumbers.has(line.number),isActiveMatchLine=activeMatchLineNumber!==null&&activeMatchLineNumber===line.number,highlight=highlightByLine.get(line.number),highlightOwner=highlight&&highlightOwnerLines.get(highlight)===line.number?highlight:void 0,tone=highlight?.tone,lineLabel=plainTextOfLine(line).trim()||this.localize("terminalHighlightLine",void 0,{line:getNumberFormat(this.effectiveLocale).format(line.number)}),highlightLabel=highlightOwner?.label?[this.localize("highlightWithLabel",void 0,{label:highlightOwner.label}),lineLabel].join(this.localize("accessibleLabelSeparator")):lineLabel,stateParts=["line",highlightOwner?"line-interactive":"",tone?`line-highlight-${tone}`:"",isMatchLine?"line-match":"",isActiveMatchLine?"line-active-match":""].filter(Boolean).join(" ");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,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{specialistTokens}from"../../../internal/specialist-tokens.styles.js";import{srOnly}from"../../../internal/a11y.js";import{Announcer,acquireAnnouncementSink}from"../../../internal/announcer.js";import{createAnsiParser}from"../../../internal/ansi.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{finiteCount}from"../../../internal/numbers.js";import{sanitizeCssColor}from"../../../internal/safe-css.js";import{firstByIdentity}from"../collection-identity.js";import{boundedSelectionRects,boundedSelectionText}from"../../../internal/text-quote.js";import{styles}from"./terminal.styles.js";import{presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{writeClipboardText}from"../../../internal/clipboard.js";import{LYRA_DEFAULT_accessibleLabelSeparator,LYRA_DEFAULT_copied,LYRA_DEFAULT_copy,LYRA_DEFAULT_copyFailed,LYRA_DEFAULT_highlightWithLabel,LYRA_DEFAULT_jumpToLatest,LYRA_DEFAULT_terminalDownload,LYRA_DEFAULT_terminalHighlightLine,LYRA_DEFAULT_terminalLabel}from"../../../internal/default-strings.generated.js";const EMPTY_CELL_STYLES={bold:!1,dim:!1,italic:!1,underline:!1,inverse:!1},ANNOUNCE_THROTTLE_MS=10,MAX_SEARCH_MATCHES=1e4,MAX_INPUT_CHARACTERS=1e6,MAX_CELLS_PER_LINE=2e4,MAX_RETAINED_CELLS=2e5,MAX_SCROLLBACK_LINES=1e4,SCROLLBACK_PRUNE_BATCH=256,TONE_BACKGROUND_VAR={accent:"var(--lr-terminal-highlight-accent-bg, var(--lr-color-brand-quiet))",success:"var(--lr-terminal-highlight-success-bg, var(--lr-color-success-quiet))",warning:"var(--lr-terminal-highlight-warning-bg, var(--lr-color-warning-quiet))",danger:"var(--lr-terminal-highlight-danger-bg, var(--lr-color-danger-quiet))",neutral:"var(--lr-terminal-highlight-neutral-bg, var(--lr-color-surface))"};function plainTextOfLine(line){return line.cells.map(c=>c.char).join("")}function groupCells(cells){const segments=[];for(const cell of cells){const last=segments[segments.length-1];last&&stylesEqual(last.styles,cell.styles)?last.text+=cell.char:segments.push({text:cell.char,styles:cell.styles})}return segments}function stylesEqual(a,b){return a.bold===b.bold&&a.dim===b.dim&&a.italic===b.italic&&a.underline===b.underline&&a.inverse===b.inverse&&a.fg===b.fg&&a.bg===b.bg}class LyraTerminal extends LyraElement{constructor(){super(...arguments),this.content="",this.maxScrollback=5e3,this.follow=!0,this.wrap=!0,this.copyable=!0,this.downloadable=!1,this.filename="terminal.log",this.announceOutput=!1,this.accessibleLabel="",this.highlights=[],this.activeHighlightId=null,this.compact=!1,this.frame="card",this.anchorKinds=["line-range"],this.lines=[],this.scrollTargetLineNumber=null,this.copyStatus="rest",this.buffer=[],this.retainedCellCount=0,this.lineSeq=0,this.column=0,this.appliedContent="",this.ansiParser=createAnsiParser(),this.copyGeneration=0,this.pendingAnnounceText="",this.announcer=new Announcer({throttleMs:ANNOUNCE_THROTTLE_MS,onFlush:text=>{this.pendingAnnounceText="",this.sink?.announce(text),this.announceRegionEl&&(this.announceRegionEl.textContent=text)}}),this.searchQuery="",this.searchMatches=[],this.searchMatchCountExact=!0,this.searchActiveIndex=-1,this.jumpToLatest=()=>{const changed=!this.follow;this.scrollToBottom(),changed&&this.emit("lr-follow-change",{following:!0})},this.onLineKeyDown=(e,h)=>{(e.key==="Enter"||e.key===" ")&&(e.preventDefault(),this.activateHighlight(h))},this.onCopy=()=>{this.copyOutput()},this.onDownload=()=>{const filename=this.filename||"terminal.log";if(this.emit("lr-download",{filename},{cancelable:!0}).defaultPrevented)return;const ownerWindow=this.ownerDocument.defaultView;if(!ownerWindow)return;const blob=new ownerWindow.Blob([this.getPlainText()],{type:"text/plain"}),url=ownerWindow.URL.createObjectURL(blob),a=this.ownerDocument.createElement("a");a.href=url,a.download=filename,a.click(),ownerWindow.setTimeout(()=>ownerWindow.URL.revokeObjectURL(url),5e3)},this.onVisibleRangeChanged=e=>{e.stopPropagation();const atBottom=this.lines.length===0||e.detail.end>=this.lines.length-1;atBottom!==this.follow&&(this.follow=atBottom,this.emit("lr-follow-change",{following:atBottom}))},this.onViewportKeyDown=e=>{e.key==="End"&&this.jumpToLatest()},this.onViewportPointerUp=()=>{const shadowGetSelection=root=>root?.getSelection?.(),listShadow=this.renderRoot.querySelector("lr-virtual-list")?.shadowRoot,selection=shadowGetSelection(listShadow)??shadowGetSelection(this.shadowRoot)??this.ownerDocument.getSelection();if(!selection||selection.isCollapsed)return;let range;try{range=selection.getRangeAt(0)}catch{return}const text=boundedSelectionText(range);if(text==="")return;const lineNumberOf=node=>{let el=node;for(;el;){if(el.nodeType===1){const attr=el.getAttribute("data-line-number");if(attr!==null)return Number(attr)}el=el.parentNode??el.host??null}return null},startLine=lineNumberOf(selection.anchorNode),endLine=lineNumberOf(selection.focusNode),anchor=startLine!==null&&endLine!==null?{kind:"line-range",start:Math.min(startLine,endLine),end:Math.max(startLine,endLine)}:null;let rects=Object.freeze([]);try{rects=boundedSelectionRects(range)}catch{}this.emit("lr-text-select",{text,anchor,rects})},this.renderLine=(line,highlightByLine,highlightOwnerLines,matchedLineNumbers,activeMatchLineNumber)=>{const isMatchLine=matchedLineNumbers.has(line.number),isActiveMatchLine=activeMatchLineNumber!==null&&activeMatchLineNumber===line.number,highlight=highlightByLine.get(line.number),highlightOwner=highlight&&highlightOwnerLines.get(highlight)===line.number?highlight:void 0,tone=highlight?.tone,lineLabel=plainTextOfLine(line).trim()||this.localize("terminalHighlightLine",void 0,{line:getNumberFormat(this.effectiveLocale).format(line.number)}),highlightLabel=highlightOwner?.label?[this.localize("highlightWithLabel",void 0,{label:highlightOwner.label}),lineLabel].join(this.localize("accessibleLabelSeparator")):lineLabel,stateParts=["line",highlightOwner?"line-interactive":"",tone?`line-highlight-${tone}`:"",isMatchLine?"line-match":"",isActiveMatchLine?"line-active-match":""].filter(Boolean).join(" ");return html`
2
2
  <div
3
3
  part=${stateParts}
4
4
  dir="ltr"
@@ -13,10 +13,10 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
13
13
  @click=${highlightOwner?()=>this.activateHighlight(highlightOwner):nothing}
14
14
  @keydown=${highlightOwner?e=>this.onLineKeyDown(e,highlightOwner):nothing}
15
15
  >${groupCells(line.cells).map(seg=>html`<span style=${styleMap(this.segmentStyle(seg.styles))}>${seg.text}</span>`)}</div>
16
- `}}static{this.defaultStrings={...super.defaultStrings,accessibleLabelSeparator:LYRA_DEFAULT_accessibleLabelSeparator,copied:LYRA_DEFAULT_copied,copy:LYRA_DEFAULT_copy,copyFailed:LYRA_DEFAULT_copyFailed,highlightWithLabel:LYRA_DEFAULT_highlightWithLabel,jumpToLatest:LYRA_DEFAULT_jumpToLatest,terminalDownload:LYRA_DEFAULT_terminalDownload,terminalHighlightLine:LYRA_DEFAULT_terminalHighlightLine,terminalLabel:LYRA_DEFAULT_terminalLabel}}static{this.immutableEventDetails=Object.freeze(["lr-text-select"])}static{this.styles=[LyraElement.styles,specialistTokens,styles,srOnly]}get normalizedHighlights(){return firstByIdentity(Array.isArray(this.highlights)?this.highlights:[],highlight=>highlight.id)}connectedCallback(){super.connectedCallback();const ownerWindow=this.ownerDocument.defaultView;ownerWindow&&this.announcer.setTimerHost(ownerWindow),this.sink??=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this})}disconnectedCallback(){super.disconnectedCallback(),this.resetCopyFeedback(),this.cancelPendingAnnouncement(),this.sink?.release(),this.sink=void 0}adoptedCallback(){super.adoptedCallback(),this.resetCopyFeedback();const ownerWindow=this.ownerDocument.defaultView;ownerWindow&&this.announcer.setTimerHost(ownerWindow)}firstUpdated(changed){super.firstUpdated(changed),this.announceRegionEl=this.renderRoot.querySelector('[part="announcer"]')??void 0}willUpdate(changed){super.willUpdate(changed),changed.has("content")&&this.commitPendingContent(),changed.has("maxScrollback")&&this.trimScrollback(),changed.has("announceOutput")&&!this.announceOutput&&this.cancelPendingAnnouncement()}resetBuffer(){this.ansiParser.reset(),this.buffer=[],this.retainedCellCount=0,this.lineSeq=0,this.column=0,this.lines=[],this.scrollTargetLineNumber=null,this.searchQuery="",this.searchMatches=[],this.searchActiveIndex=-1}appendLine(){this.buffer.push({number:++this.lineSeq,cells:[]});const max=this.effectiveMaxScrollback();this.buffer.length-max>=SCROLLBACK_PRUNE_BATCH&&this.trimScrollback(!1),this.column=0}effectiveMaxScrollback(){return Math.max(1,finiteCount(this.maxScrollback,5e3,MAX_SCROLLBACK_LINES))}trimScrollback(notifySearch=!0){const previousSearch=this.searchState(),max=this.effectiveMaxScrollback(),removeCount=Math.max(0,this.buffer.length-max),removed=removeCount>0?this.buffer.splice(0,removeCount):[];for(const line of removed)this.retainedCellCount-=line.cells.length;let resourceTrimmed=!1;for(;this.retainedCellCount>MAX_RETAINED_CELLS&&this.buffer.length>1;){const line=this.buffer.shift();line&&(this.retainedCellCount-=line.cells.length),resourceTrimmed=!0}(removed.length>0||resourceTrimmed)&&(this.lines=[...this.buffer],this.searchQuery&&this.recomputeSearchMatches(),this.scrollTargetLineNumber!==null&&!this.buffer.some(line=>line.number===this.scrollTargetLineNumber)&&(this.scrollTargetLineNumber=this.buffer[0]?.number??null),notifySearch&&this.emitSearchChangeIfChanged(previousSearch))}putChar(ch,styles2){this.buffer.length===0&&this.appendLine();const line=this.buffer[this.buffer.length-1];if(!(this.column>=MAX_CELLS_PER_LINE)){if(this.column<line.cells.length)line.cells[this.column]={char:ch,styles:styles2};else{const before=line.cells.length;for(;line.cells.length<this.column&&line.cells.length<MAX_CELLS_PER_LINE;)line.cells.push({char:" ",styles:EMPTY_CELL_STYLES});line.cells.push({char:ch,styles:styles2}),this.retainedCellCount+=line.cells.length-before}this.column=Math.min(MAX_CELLS_PER_LINE,this.column+1)}}applyChunk(text,styles2){for(const ch of text)ch===`
16
+ `}}static{this.defaultStrings={...super.defaultStrings,accessibleLabelSeparator:LYRA_DEFAULT_accessibleLabelSeparator,copied:LYRA_DEFAULT_copied,copy:LYRA_DEFAULT_copy,copyFailed:LYRA_DEFAULT_copyFailed,highlightWithLabel:LYRA_DEFAULT_highlightWithLabel,jumpToLatest:LYRA_DEFAULT_jumpToLatest,terminalDownload:LYRA_DEFAULT_terminalDownload,terminalHighlightLine:LYRA_DEFAULT_terminalHighlightLine,terminalLabel:LYRA_DEFAULT_terminalLabel}}static{this.immutableEventDetails=Object.freeze(["lr-text-select"])}static{this.styles=[LyraElement.styles,specialistTokens,styles,srOnly]}get normalizedHighlights(){return firstByIdentity(Array.isArray(this.highlights)?this.highlights:[],highlight=>highlight.id)}connectedCallback(){super.connectedCallback();const ownerWindow=this.ownerDocument.defaultView;ownerWindow&&this.announcer.setTimerHost(ownerWindow),this.sink??=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this})}disconnectedCallback(){super.disconnectedCallback(),this.resetCopyFeedback(),this.cancelPendingAnnouncement(),this.sink?.release(),this.sink=void 0}adoptedCallback(){super.adoptedCallback(),this.resetCopyFeedback();const ownerWindow=this.ownerDocument.defaultView;ownerWindow&&this.announcer.setTimerHost(ownerWindow)}firstUpdated(changed){super.firstUpdated(changed),this.announceRegionEl=this.renderRoot.querySelector('[part="announcer"]')??void 0}willUpdate(changed){super.willUpdate(changed),changed.has("content")&&this.commitPendingContent(),changed.has("maxScrollback")&&this.trimScrollback(),changed.has("announceOutput")&&!this.announceOutput&&this.cancelPendingAnnouncement()}resetBuffer(){this.ansiParser.reset(),this.buffer=[],this.retainedCellCount=0,this.lineSeq=0,this.column=0,this.lines=[],this.scrollTargetLineNumber=null,this.searchQuery="",this.searchMatches=[],this.searchMatchCountExact=!0,this.searchActiveIndex=-1}appendLine(){this.buffer.push({number:++this.lineSeq,cells:[]});const max=this.effectiveMaxScrollback();this.buffer.length-max>=SCROLLBACK_PRUNE_BATCH&&this.trimScrollback(!1),this.column=0}effectiveMaxScrollback(){return Math.max(1,finiteCount(this.maxScrollback,5e3,MAX_SCROLLBACK_LINES))}trimScrollback(notifySearch=!0){const previousSearch=this.searchState(),max=this.effectiveMaxScrollback(),removeCount=Math.max(0,this.buffer.length-max),removed=removeCount>0?this.buffer.splice(0,removeCount):[];for(const line of removed)this.retainedCellCount-=line.cells.length;let resourceTrimmed=!1;for(;this.retainedCellCount>MAX_RETAINED_CELLS&&this.buffer.length>1;){const line=this.buffer.shift();line&&(this.retainedCellCount-=line.cells.length),resourceTrimmed=!0}(removed.length>0||resourceTrimmed)&&(this.lines=[...this.buffer],this.searchQuery&&this.recomputeSearchMatches(),this.scrollTargetLineNumber!==null&&!this.buffer.some(line=>line.number===this.scrollTargetLineNumber)&&(this.scrollTargetLineNumber=this.buffer[0]?.number??null),notifySearch&&this.emitSearchChangeIfChanged(previousSearch))}putChar(ch,styles2){this.buffer.length===0&&this.appendLine();const line=this.buffer[this.buffer.length-1];if(!(this.column>=MAX_CELLS_PER_LINE)){if(this.column<line.cells.length)line.cells[this.column]={char:ch,styles:styles2};else{const before=line.cells.length;for(;line.cells.length<this.column&&line.cells.length<MAX_CELLS_PER_LINE;)line.cells.push({char:" ",styles:EMPTY_CELL_STYLES});line.cells.push({char:ch,styles:styles2}),this.retainedCellCount+=line.cells.length-before}this.column=Math.min(MAX_CELLS_PER_LINE,this.column+1)}}applyChunk(text,styles2){for(const ch of text)ch===`
17
17
  `?this.appendLine():ch==="\r"?this.column=0:ch==="\b"?this.column=Math.max(0,this.column-1):ch===" "?this.column=Math.min(MAX_CELLS_PER_LINE,(Math.floor(this.column/8)+1)*8):this.putChar(ch,styles2)}writeInternal(raw,notifySearch=!0){const previousSearch=this.searchState(),previousText=this.getPlainText(),boundedRaw=raw.slice(0,MAX_INPUT_CHARACTERS);if(boundedRaw!==""){const segments=this.ansiParser.push(boundedRaw);for(const seg of segments)this.applyChunk(seg.text,seg.styles)}if(this.trimScrollback(!1),this.lines=[...this.buffer],this.searchQuery&&this.recomputeSearchMatches(),this.follow){const last=this.buffer[this.buffer.length-1];this.scrollTargetLineNumber=last?last.number:null}const nextText=this.getPlainText(),visibleAnnouncement=nextText.startsWith(previousText)?nextText.slice(previousText.length):nextText;this.hasUpdated&&this.announceOutput&&visibleAnnouncement!==""&&(this.pendingAnnounceText+=(this.pendingAnnounceText?`
18
18
  `:"")+visibleAnnouncement,this.announcer.announce(this.pendingAnnounceText)),notifySearch&&this.emitSearchChangeIfChanged(previousSearch)}write(chunk){this.commitPendingContent(),this.writeInternal(typeof chunk=="string"?chunk:String(chunk))}replace(content){this.content=typeof content=="string"?content:String(content),this.commitPendingContent()}commitPendingContent(){if(this.appliedContent===this.content)return;const previousSearch=this.searchState();this.cancelPendingAnnouncement(),this.resetBuffer(),this.appliedContent=this.content,this.writeInternal(this.content,!1),this.emitSearchChangeIfChanged(previousSearch)}clear(){const previousSearch=this.searchState();this.cancelPendingAnnouncement(),this.appliedContent=this.content,this.resetBuffer(),this.emitSearchChangeIfChanged(previousSearch)}getPlainText(){return this.buffer.map(plainTextOfLine).join(`
19
- `)}scrollToBottom(){this.follow=!0;const last=this.buffer[this.buffer.length-1];this.scrollTargetLineNumber=last?last.number:null}recomputeSearchMatches(){if(this.searchMatches=[],!this.searchQuery)return;const needle=this.searchQuery.toLocaleLowerCase(this.effectiveLocale);for(const line of this.buffer){const haystack=plainTextOfLine(line).toLocaleLowerCase(this.effectiveLocale);let from=0;for(;;){const idx=haystack.indexOf(needle,from);if(idx<0||(this.searchMatches.push({lineNumber:line.number}),this.searchMatches.length>=MAX_SEARCH_MATCHES))break;from=idx+needle.length}if(this.searchMatches.length>=MAX_SEARCH_MATCHES)break}this.searchActiveIndex>=this.searchMatches.length&&(this.searchActiveIndex=this.searchMatches.length>0?0:-1)}emitSearchChange(){this.emit("lr-search-change",{query:this.searchQuery,matchCount:this.searchMatches.length,activeIndex:this.searchActiveIndex})}searchState(){return{query:this.searchQuery,matchCount:this.searchMatches.length,activeIndex:this.searchActiveIndex}}emitSearchChangeIfChanged(previous){(previous.query!==this.searchQuery||previous.matchCount!==this.searchMatches.length||previous.activeIndex!==this.searchActiveIndex)&&this.emitSearchChange()}jumpToActiveMatch(){const match=this.searchMatches[this.searchActiveIndex];match&&(this.follow&&(this.follow=!1),this.scrollTargetLineNumber=match.lineNumber)}async search(query){const previousSearch=this.searchState();return this.searchQuery=query,this.recomputeSearchMatches(),this.searchActiveIndex=this.searchMatches.length>0?0:-1,this.emitSearchChangeIfChanged(previousSearch),this.searchActiveIndex>=0&&this.jumpToActiveMatch(),await this.updateComplete,this.searchMatches.length}async searchNext(){if(this.searchMatches.length===0)return!1;const previousSearch=this.searchState();return this.searchActiveIndex=(this.searchActiveIndex+1)%this.searchMatches.length,this.emitSearchChangeIfChanged(previousSearch),this.jumpToActiveMatch(),!0}async searchPrevious(){if(this.searchMatches.length===0)return!1;const previousSearch=this.searchState();return this.searchActiveIndex=(this.searchActiveIndex-1+this.searchMatches.length)%this.searchMatches.length,this.emitSearchChangeIfChanged(previousSearch),this.jumpToActiveMatch(),!0}clearSearch(){const previousSearch=this.searchState();this.searchQuery="",this.searchMatches=[],this.searchActiveIndex=-1,this.emitSearchChangeIfChanged(previousSearch),this.requestUpdate()}resolvedHighlightLines(){const perLine=new Map,owners=new Map,highlights=this.normalizedHighlights;if(this.lines.length===0||highlights.length===0)return{perLine,owners};const minLine=this.lines[0].number,maxLine=this.lines[this.lines.length-1].number;for(const highlight of highlights){if(highlight.anchor.kind!=="line-range")continue;const start=Math.max(highlight.anchor.start,minLine),end=Math.min(highlight.anchor.end??highlight.anchor.start,maxLine);for(let lineNumber=start;lineNumber<=end;lineNumber++)perLine.has(lineNumber)||(perLine.set(lineNumber,highlight),owners.has(highlight)||owners.set(highlight,lineNumber))}return{perLine,owners}}activateHighlight(h){this.activeHighlightId=h.id,this.emit("lr-highlight-activate",{highlightId:h.id})}async scrollToAnchor(target){let start;if(typeof target=="string"){const highlight=this.normalizedHighlights.find(h=>h.id===target);highlight?.anchor.kind==="line-range"&&(start=highlight.anchor.start)}else target.kind==="line-range"&&(start=target.start);return start===void 0||!this.buffer.some(line=>line.number===start)?!1:(this.follow&&(this.follow=!1),this.scrollTargetLineNumber=start,await this.updateComplete,!0)}async copyOutput(){const text=this.getPlainText(),ownerWindow=this.isConnected?this.ownerDocument.defaultView:null,generation=++this.copyGeneration;this.clearCopyTimeout(),this.copyStatus="rest";const outcome=await writeClipboardText(ownerWindow,text);if(!(!ownerWindow||!this.isCurrentCopy(generation,ownerWindow))){if(!outcome.ok){this.showCopyStatus("error",generation,ownerWindow),this.emit("lr-error"),this.emit("lr-copy-error",outcome);return}this.showCopyStatus("success",generation,ownerWindow),this.emit("lr-copy",outcome)}}isCurrentCopy(generation,ownerWindow){return this.isConnected&&generation===this.copyGeneration&&this.ownerDocument.defaultView===ownerWindow}showCopyStatus(status,generation,ownerWindow){this.copyStatus=status,this.clearCopyTimeout(),this.copyTimeoutWindow=ownerWindow,this.copyTimeoutGeneration=generation,this.copyTimeoutId=ownerWindow.setTimeout(()=>{this.copyTimeoutWindow!==ownerWindow||this.copyTimeoutGeneration!==generation||generation!==this.copyGeneration||!this.isConnected||this.ownerDocument.defaultView!==ownerWindow||(this.copyTimeoutId=void 0,this.copyTimeoutWindow=void 0,this.copyTimeoutGeneration=void 0,this.copyStatus="rest")},1500)}resetCopyFeedback(){this.copyGeneration+=1,this.clearCopyTimeout(),this.copyStatus="rest"}clearCopyTimeout(){this.copyTimeoutId!==void 0&&this.copyTimeoutWindow?.clearTimeout(this.copyTimeoutId),this.copyTimeoutId=void 0,this.copyTimeoutWindow=void 0,this.copyTimeoutGeneration=void 0}cancelPendingAnnouncement(){this.pendingAnnounceText="",this.announcer.cancel(),this.announceRegionEl&&(this.announceRegionEl.textContent="")}lineStateStyle(highlight,interactive,isMatchLine,isActiveMatchLine){return{cursor:interactive?"pointer":"",outline:isMatchLine?`var(--lr-size-2px) solid ${isActiveMatchLine?"var(--lr-terminal-search-active-outline-color, var(--lr-color-brand))":"var(--lr-terminal-search-outline-color, var(--lr-color-warning))"}`:"",background:highlight?.tone?TONE_BACKGROUND_VAR[highlight.tone]:""}}segmentStyle(s){const fg=sanitizeCssColor(s.fg)??"var(--lr-color-text)",bg=sanitizeCssColor(s.bg);return{"font-weight":s.bold?"bold":"normal",opacity:s.dim?"0.7":"1","font-style":s.italic?"italic":"normal","text-decoration":s.underline?"underline":"none",color:s.inverse?bg??"var(--lr-terminal-surface-color, var(--lr-color-surface-raised))":fg,"background-color":s.inverse?fg:bg??"transparent"}}render(){const hasToolbar=this.copyable||this.downloadable,ariaLabel=this.accessibleLabel||this.localize("terminalLabel"),{perLine:highlightByLine,owners:highlightOwnerLines}=this.resolvedHighlightLines(),matchedLineNumbers=new Set(this.searchMatches.map(m=>m.lineNumber)),activeMatchLineNumber=this.searchMatches[this.searchActiveIndex]?.lineNumber??null;return html`
19
+ `)}scrollToBottom(){this.follow=!0;const last=this.buffer[this.buffer.length-1];this.scrollTargetLineNumber=last?last.number:null}recomputeSearchMatches(){if(this.searchMatches=[],this.searchMatchCountExact=!0,!this.searchQuery)return;const needle=this.searchQuery.toLocaleLowerCase(this.effectiveLocale);for(const line of this.buffer){const haystack=plainTextOfLine(line).toLocaleLowerCase(this.effectiveLocale);let from=0;for(;;){const idx=haystack.indexOf(needle,from);if(idx<0)break;if(this.searchMatches.push({lineNumber:line.number}),this.searchMatches.length>=MAX_SEARCH_MATCHES){this.searchMatchCountExact=!1;break}from=idx+needle.length}if(this.searchMatches.length>=MAX_SEARCH_MATCHES)break}this.searchActiveIndex>=this.searchMatches.length&&(this.searchActiveIndex=this.searchMatches.length>0?0:-1)}emitSearchChange(){this.emit("lr-search-change",{query:this.searchQuery,matchCount:this.searchMatches.length,matchCountExact:this.searchMatchCountExact,activeIndex:this.searchActiveIndex})}searchState(){return{query:this.searchQuery,matchCount:this.searchMatches.length,matchCountExact:this.searchMatchCountExact,activeIndex:this.searchActiveIndex}}emitSearchChangeIfChanged(previous){(previous.query!==this.searchQuery||previous.matchCount!==this.searchMatches.length||previous.matchCountExact!==this.searchMatchCountExact||previous.activeIndex!==this.searchActiveIndex)&&this.emitSearchChange()}jumpToActiveMatch(){const match=this.searchMatches[this.searchActiveIndex];match&&(this.follow&&(this.follow=!1),this.scrollTargetLineNumber=match.lineNumber)}async search(query){const previousSearch=this.searchState();return this.searchQuery=query,this.recomputeSearchMatches(),this.searchActiveIndex=this.searchMatches.length>0?0:-1,this.emitSearchChangeIfChanged(previousSearch),this.searchActiveIndex>=0&&this.jumpToActiveMatch(),await this.updateComplete,this.searchMatches.length}async searchNext(){if(this.searchMatches.length===0)return!1;const previousSearch=this.searchState();return this.searchActiveIndex=(this.searchActiveIndex+1)%this.searchMatches.length,this.emitSearchChangeIfChanged(previousSearch),this.jumpToActiveMatch(),!0}async searchPrevious(){if(this.searchMatches.length===0)return!1;const previousSearch=this.searchState();return this.searchActiveIndex=(this.searchActiveIndex-1+this.searchMatches.length)%this.searchMatches.length,this.emitSearchChangeIfChanged(previousSearch),this.jumpToActiveMatch(),!0}clearSearch(){const previousSearch=this.searchState();this.searchQuery="",this.searchMatches=[],this.searchMatchCountExact=!0,this.searchActiveIndex=-1,this.emitSearchChangeIfChanged(previousSearch),this.requestUpdate()}resolvedHighlightLines(){const perLine=new Map,owners=new Map,highlights=this.normalizedHighlights;if(this.lines.length===0||highlights.length===0)return{perLine,owners};const minLine=this.lines[0].number,maxLine=this.lines[this.lines.length-1].number;for(const highlight of highlights){if(highlight.anchor.kind!=="line-range")continue;const start=Math.max(highlight.anchor.start,minLine),end=Math.min(highlight.anchor.end??highlight.anchor.start,maxLine);for(let lineNumber=start;lineNumber<=end;lineNumber++)perLine.has(lineNumber)||(perLine.set(lineNumber,highlight),owners.has(highlight)||owners.set(highlight,lineNumber))}return{perLine,owners}}activateHighlight(h){this.activeHighlightId=h.id,this.emit("lr-highlight-activate",{highlightId:h.id})}async scrollToAnchor(target){let start;if(typeof target=="string"){const highlight=this.normalizedHighlights.find(h=>h.id===target);highlight?.anchor.kind==="line-range"&&(start=highlight.anchor.start)}else target.kind==="line-range"&&(start=target.start);return start===void 0||!this.buffer.some(line=>line.number===start)?!1:(this.follow&&(this.follow=!1),this.scrollTargetLineNumber=start,await this.updateComplete,!0)}async copyOutput(){const text=this.getPlainText(),ownerWindow=this.isConnected?this.ownerDocument.defaultView:null,generation=++this.copyGeneration;this.clearCopyTimeout(),this.copyStatus="rest";const outcome=await writeClipboardText(ownerWindow,text);if(!(!ownerWindow||!this.isCurrentCopy(generation,ownerWindow))){if(!outcome.ok){this.showCopyStatus("error",generation,ownerWindow),this.emit("lr-error"),this.emit("lr-copy-error",outcome);return}this.showCopyStatus("success",generation,ownerWindow),this.emit("lr-copy",outcome)}}isCurrentCopy(generation,ownerWindow){return this.isConnected&&generation===this.copyGeneration&&this.ownerDocument.defaultView===ownerWindow}showCopyStatus(status,generation,ownerWindow){this.copyStatus=status,this.clearCopyTimeout(),this.copyTimeoutWindow=ownerWindow,this.copyTimeoutGeneration=generation,this.copyTimeoutId=ownerWindow.setTimeout(()=>{this.copyTimeoutWindow!==ownerWindow||this.copyTimeoutGeneration!==generation||generation!==this.copyGeneration||!this.isConnected||this.ownerDocument.defaultView!==ownerWindow||(this.copyTimeoutId=void 0,this.copyTimeoutWindow=void 0,this.copyTimeoutGeneration=void 0,this.copyStatus="rest")},1500)}resetCopyFeedback(){this.copyGeneration+=1,this.clearCopyTimeout(),this.copyStatus="rest"}clearCopyTimeout(){this.copyTimeoutId!==void 0&&this.copyTimeoutWindow?.clearTimeout(this.copyTimeoutId),this.copyTimeoutId=void 0,this.copyTimeoutWindow=void 0,this.copyTimeoutGeneration=void 0}cancelPendingAnnouncement(){this.pendingAnnounceText="",this.announcer.cancel(),this.announceRegionEl&&(this.announceRegionEl.textContent="")}lineStateStyle(highlight,interactive,isMatchLine,isActiveMatchLine){return{cursor:interactive?"pointer":"",outline:isMatchLine?`var(--lr-size-2px) solid ${isActiveMatchLine?"var(--lr-terminal-search-active-outline-color, var(--lr-color-brand))":"var(--lr-terminal-search-outline-color, var(--lr-color-warning))"}`:"",background:highlight?.tone?TONE_BACKGROUND_VAR[highlight.tone]:""}}segmentStyle(s){const fg=sanitizeCssColor(s.fg)??"var(--lr-color-text)",bg=sanitizeCssColor(s.bg);return{"font-weight":s.bold?"bold":"normal",opacity:s.dim?"0.7":"1","font-style":s.italic?"italic":"normal","text-decoration":s.underline?"underline":"none",color:s.inverse?bg??"var(--lr-terminal-surface-color, var(--lr-color-surface-raised))":fg,"background-color":s.inverse?fg:bg??"transparent"}}render(){const hasToolbar=this.copyable||this.downloadable,ariaLabel=this.accessibleLabel||this.localize("terminalLabel"),{perLine:highlightByLine,owners:highlightOwnerLines}=this.resolvedHighlightLines(),matchedLineNumbers=new Set(this.searchMatches.map(m=>m.lineNumber)),activeMatchLineNumber=this.searchMatches[this.searchActiveIndex]?.lineNumber??null;return html`
20
20
  <div part="base">
21
21
  <div part="announcer" class="sr-only" aria-hidden="true"></div>
22
22
  ${hasToolbar?html`
@@ -44,7 +44,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
44
44
  .keyFunction=${item=>item.number}
45
45
  .activeItemId=${this.scrollTargetLineNumber??""}
46
46
  row-height=${this.wrap?"auto":"24"}
47
- @lr-visible-range-changed=${this.onVisibleRangeChanged}
47
+ @lr-visible-range-change=${this.onVisibleRangeChanged}
48
48
  ></lr-virtual-list>
49
49
  ${!this.follow&&this.lines.length>0?html`<button part="jump-to-latest" type="button" @click=${this.jumpToLatest}>
50
50
  ${this.localize("jumpToLatest")}
@@ -10,13 +10,6 @@ import{css}from"lit";const styles=css`
10
10
  background: var(--lr-color-surface-raised);
11
11
  overflow: hidden;
12
12
  }
13
- /* Chrome escape -- the shared frame="plain" treatment, same convention as lr-result-card's,
14
- lr-stack-trace's, lr-task-list's, and lr-thinking-panel's. Streamed tool output is routinely
15
- nested inside a container that already draws a border (an agent-run panel, a message bubble),
16
- which would otherwise double the box. Only the outer card decoration goes: the toolbar/log
17
- divider below is interior structure that still explains where the actions end and the log
18
- begins, exactly the call task-list and thinking-panel make for their own header/body divider,
19
- and the toolbar buttons' own border/hover/focus affordances never depended on this one. */
20
13
  :host([frame='plain']) [part='base'] {
21
14
  border: 0;
22
15
  border-radius: 0;
@@ -29,11 +22,6 @@ import{css}from"lit";const styles=css`
29
22
  padding: var(--lr-space-xs) var(--lr-space-s);
30
23
  border-block-end: var(--lr-size-1px) solid var(--lr-color-border);
31
24
  }
32
- /* Density escape -- same convention as lr-task-list's/lr-thinking-panel's compact. The tuned
33
- values sit behind inline var() fallbacks (rather than a :host declaration, which every
34
- instance would re-declare and so shadow any ancestor value) so a transcript can retune every
35
- nested terminal at once from outside; the fallbacks are one step tighter than the regular
36
- values, so an unset terminal renders exactly as before. */
37
25
  :host([compact]) [part='toolbar'] {
38
26
  gap: var(--lr-terminal-compact-toolbar-gap, var(--lr-space-2xs));
39
27
  padding: var(--lr-terminal-compact-toolbar-padding, var(--lr-space-2xs) var(--lr-space-xs));
@@ -53,9 +41,6 @@ import{css}from"lit";const styles=css`
53
41
  [part='download-button']:hover {
54
42
  background: var(--lr-color-brand-quiet);
55
43
  }
56
- /* Pressed is the hovered tint pushed a further --lr-color-mix-active toward
57
- --lr-color-mix-partner (which follows the text colour), so it reads as a distinctly deeper step
58
- than hover in both light and dark themes rather than repeating it. */
59
44
  [part='copy-button']:active,
60
45
  [part='download-button']:active {
61
46
  background: color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));
@@ -76,39 +61,18 @@ import{css}from"lit";const styles=css`
76
61
  font-size: var(--lr-font-size-sm);
77
62
  color: var(--lr-color-text);
78
63
  }
79
- /* renderItem's returned content is committed inside <lr-virtual-list>'s own shadow root (Lit
80
- renders a function-supplied template into whichever root is currently updating, regardless of
81
- which module the function was defined in), so a plain [part='line'] rule here -- scoped to this
82
- component's own shadow root -- would never match anything. Reaching one shadow level in through
83
- a part attribute set by content this component doesn't itself template statically is exactly
84
- what ::part() is for; see <lr-lightbox>'s lr-zoomable-frame[part='frame']::part(base) rule
85
- for the same technique used against a statically-templated child instead of a renderItem one. */
86
64
  lr-virtual-list::part(line) {
87
65
  white-space: pre-wrap;
88
66
  overflow-wrap: anywhere;
89
67
  padding-inline: var(--lr-space-s);
90
68
  line-height: var(--lr-line-height-normal);
91
69
  }
92
- /* Only an interactive (highlight-owning) line ever carries tabindex="0" -- see renderLine() in
93
- terminal.class.ts -- so :focus-visible below already resolves to just those lines with no
94
- extra scoping needed: a non-interactive line is never focusable in the first place. :hover
95
- can't be scoped the same way -- every line shares this one part name, and ::part() forbids a
96
- trailing attribute selector (see the renderItem note above), so this is a plain pointer-hover
97
- preview across all lines rather than an attribute-gated one. Reuses the same
98
- --lr-color-brand-quiet token as the toolbar buttons' own hover fill above: a toned highlight's
99
- semantic state-specific aliases below reassert their own tone for hover/press. */
100
70
  lr-virtual-list::part(line):hover {
101
71
  background: var(--lr-color-brand-quiet);
102
72
  }
103
- /* Pressed is the hovered tint pushed a further --lr-color-mix-active toward
104
- --lr-color-mix-partner, matching this file's own [part='copy-button']/[part='download-button']
105
- :active pattern above -- a highlight-owning line is a real activatable target (renderLine()
106
- wires @click/@keydown), not a passive hover-only preview. */
107
73
  lr-virtual-list::part(line):active {
108
74
  background: color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));
109
75
  }
110
- /* State-specific parts keep semantic highlights intact through hover/press. They are also the
111
- honest external styling surface: a consumer can deliberately override a semantic part. */
112
76
  lr-virtual-list::part(line-highlight-accent):hover {
113
77
  background: var(--lr-terminal-highlight-accent-bg, var(--lr-color-brand-quiet));
114
78
  }
@@ -143,9 +107,6 @@ import{css}from"lit";const styles=css`
143
107
  outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);
144
108
  outline-offset: var(--lr-focus-ring-offset);
145
109
  }
146
- /* The log's own half of the density escape above. Reached through the same one-hop ::part()
147
- selector as the base rule (the lines live in lr-virtual-list's shadow root), and carrying the
148
- host attribute selector, so it outranks that rule on both specificity and source order. */
149
110
  :host([compact]) lr-virtual-list::part(line) {
150
111
  padding-inline: var(--lr-terminal-compact-line-padding-inline, var(--lr-space-xs));
151
112
  }
@@ -170,18 +131,11 @@ import{css}from"lit";const styles=css`
170
131
  border: none;
171
132
  border-radius: var(--lr-radius-pill);
172
133
  padding: var(--lr-space-2xs) var(--lr-space-s);
173
- /* Overlay step, not a card step: this pill is absolutely positioned over live scrollback rather
174
- than resting in the layout, so it has to read as a layer above the lines it covers. */
175
134
  box-shadow: var(--lr-shadow-m);
176
135
  cursor: pointer;
177
136
  z-index: var(--lr-layer-content);
178
137
  transition: opacity var(--lr-transition-fast);
179
138
  }
180
- /* Mixed toward --lr-color-mix-partner (which follows the text colour) rather than the
181
- filter: brightness() this replaces: a filter multiplies every channel, so it lightened this
182
- brand-filled pill only by luck, did nothing at all to a pure white or pure black brand colour,
183
- and -- because a filter applies to the whole subtree -- dragged the pill's own label along with
184
- the surface. Mixing always moves, and always in the direction the surface needs. */
185
139
  [part='jump-to-latest']:hover {
186
140
  background: color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-hover));
187
141
  }
@@ -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,state,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{srOnly}from"../../../internal/a11y.js";import{styles}from"./test-results.styles.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{overallSemanticLabel,overallSemanticRole}from"../semantic-owner.js";import{LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_expand,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_noData,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_progress,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSkipped,LYRA_DEFAULT_statusSuccess,LYRA_DEFAULT_testResultsCollapseTest,LYRA_DEFAULT_testResultsCompleteAnnounce,LYRA_DEFAULT_testResultsExpandTest,LYRA_DEFAULT_testResultsFailed,LYRA_DEFAULT_testResultsFilterLabel,LYRA_DEFAULT_testResultsLabel,LYRA_DEFAULT_testResultsLimit,LYRA_DEFAULT_testResultsPassed,LYRA_DEFAULT_testResultsRunning,LYRA_DEFAULT_testResultsSkipped}from"../../../internal/default-strings.generated.js";const STATUSES=["passed","failed","skipped","running"],MAX_RENDERED_TESTS=1e3;function normalizeTestStatus(value){switch(value){case"passed":case"failed":case"skipped":case"running":return value;default:return"skipped"}}const STATUS_COUNT_KEY={passed:"testResultsPassed",failed:"testResultsFailed",skipped:"testResultsSkipped",running:"testResultsRunning"},STATUS_LABEL_KEY={passed:"statusSuccess",failed:"statusError",skipped:"statusSkipped",running:"statusRunning"},STATUS_GLYPH={passed:"\u2713",failed:"\xD7",skipped:"\u2013"};function encodeDetailSlotSegment(value){let encoded="";for(let index=0;index<value.length;){const codePoint=value.codePointAt(index),character=String.fromCodePoint(codePoint);encoded+=codePoint>=55296&&codePoint<=57343?`%u${codePoint.toString(16).toUpperCase().padStart(4,"0")}`:encodeURIComponent(character),index+=character.length}return encoded}function testResultDetailSlotName(suiteId,testId){return`detail-${encodeDetailSlotSegment(suiteId)}:${encodeDetailSlotSegment(testId)}`}class LyraTestResults extends LyraElement{constructor(){super(...arguments),this.suites=[],this.statusFilter=[],this.runId=null,this.runState="idle",this.autoExpandFailures=!0,this.manualExpanded=new Map,this.normalizedSuitesCache=[],this.projectedSuitesCache=[],this.completeStatusCounts={passed:0,failed:0,skipped:0,running:0},this.normalizedTestKeys=new Set,this.detailSlotNames=new Set,this.projectionTruncated=!1,this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.idPrefix=nextId("test-results"),this.pendingCompletionAnnouncement=null}static{this.defaultStrings={...super.defaultStrings,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,expand:LYRA_DEFAULT_expand,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,noData:LYRA_DEFAULT_noData,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,progress:LYRA_DEFAULT_progress,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusError:LYRA_DEFAULT_statusError,statusRunning:LYRA_DEFAULT_statusRunning,statusSkipped:LYRA_DEFAULT_statusSkipped,statusSuccess:LYRA_DEFAULT_statusSuccess,testResultsCollapseTest:LYRA_DEFAULT_testResultsCollapseTest,testResultsCompleteAnnounce:LYRA_DEFAULT_testResultsCompleteAnnounce,testResultsExpandTest:LYRA_DEFAULT_testResultsExpandTest,testResultsFailed:LYRA_DEFAULT_testResultsFailed,testResultsFilterLabel:LYRA_DEFAULT_testResultsFilterLabel,testResultsLabel:LYRA_DEFAULT_testResultsLabel,testResultsLimit:LYRA_DEFAULT_testResultsLimit,testResultsPassed:LYRA_DEFAULT_testResultsPassed,testResultsRunning:LYRA_DEFAULT_testResultsRunning,testResultsSkipped:LYRA_DEFAULT_testResultsSkipped}}static{this.ownedCollectionProperties=Object.freeze(["suites","statusFilter"])}static{this.identityCollectionProperties=Object.freeze(["suites"])}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.immutableEventDetails=Object.freeze(["lr-filter-change"])}connectedCallback(){super.connectedCallback(),this.syncLimitAnnouncementSink(),this.limitAnnouncementInitialized=this.hasUpdated,this.previouslyTruncated=this.projectionTruncated}disconnectedCallback(){this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=void 0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=void 0,this.syncLimitAnnouncementSink()}syncLimitAnnouncementSink(){!this.isConnected||this.limitAnnouncementSink?.element.ownerDocument===this.ownerDocument||(this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}))}willUpdate(changed){if(super.willUpdate(changed),changed.has("suites")){this.rebuildNormalizedSuites();const pruned=new Map([...this.manualExpanded].filter(([key])=>this.normalizedTestKeys.has(key)));pruned.size!==this.manualExpanded.size&&(this.manualExpanded=pruned)}if((changed.has("suites")||changed.has("statusFilter"))&&this.rebuildProjection(),this.rebuildDetailSlotNames(),changed.has("runState")||changed.has("runId")){const previousState=changed.has("runState")?changed.get("runState"):this.runState,previousRunId=changed.has("runId")?changed.get("runId"):this.runId;if(previousState==="running"&&this.runState==="complete"&&this.runId!==null&&previousRunId===this.runId){const number=getNumberFormat(this.effectiveLocale);this.pendingCompletionAnnouncement=this.localize("testResultsCompleteAnnounce",void 0,{passed:number.format(this.countOf("passed")),failed:number.format(this.countOf("failed")),skipped:number.format(this.countOf("skipped"))})}}}rebuildNormalizedSuites(){const normalizedSuites=[],suiteIds=new Set,normalizedTestKeys=new Set,counts={passed:0,failed:0,skipped:0,running:0};for(const suite of Array.isArray(this.suites)?this.suites:[]){if(!suite||typeof suite.id!="string"||suite.id.trim().length===0||suiteIds.has(suite.id))continue;suiteIds.add(suite.id);const testIds=new Set,tests=[];for(const test of Array.isArray(suite.tests)?suite.tests:[]){if(!test||typeof test.id!="string"||test.id.trim().length===0||testIds.has(test.id))continue;testIds.add(test.id);const status=normalizeTestStatus(test.status),normalized={id:test.id,name:typeof test.name=="string"?test.name:"",status,...typeof test.durationMs=="number"?{durationMs:test.durationMs}:{},...typeof test.message=="string"?{message:test.message}:{}};tests.push(normalized),normalizedTestKeys.add(this.testKey(suite.id,normalized.id)),counts[status]++}tests.length>0&&normalizedSuites.push({id:suite.id,name:typeof suite.name=="string"?suite.name:"",tests})}this.normalizedSuitesCache=normalizedSuites,this.normalizedTestKeys=normalizedTestKeys,this.completeStatusCounts=counts}rebuildProjection(){const filteredStatuses=new Set(this.statusFilter),candidates=this.normalizedSuitesCache.flatMap(suite=>suite.tests.filter(test=>filteredStatuses.size===0||filteredStatuses.has(test.status)).map(test=>({suiteId:suite.id,test}))),chosenKeys=new Set,reserve=predicate=>{for(const{suiteId,test}of candidates){if(chosenKeys.size>=MAX_RENDERED_TESTS)break;predicate(suiteId,test)&&chosenKeys.add(this.testKey(suiteId,test.id))}};reserve((suiteId,test)=>this.manualExpanded.get(this.testKey(suiteId,test.id))===!0),reserve((_suiteId,test)=>test.status==="failed"),reserve(()=>!0),this.projectedSuitesCache=this.normalizedSuitesCache.map(suite=>({...suite,tests:suite.tests.filter(test=>chosenKeys.has(this.testKey(suite.id,test.id)))})).filter(suite=>suite.tests.length>0),this.projectionTruncated=chosenKeys.size<candidates.length}updated(changed){if(super.updated(changed),this.pendingCompletionAnnouncement!==null){const text=this.pendingCompletionAnnouncement;this.pendingCompletionAnnouncement=null,this.liveRegion?.announce(text,{force:!0})}this.limitAnnouncementInitialized&&this.projectionTruncated&&!this.previouslyTruncated&&this.limitAnnouncementSink?.announce(this.localize("testResultsLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(MAX_RENDERED_TESTS)})),this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.projectionTruncated}countOf(status){return this.completeStatusCounts[status]}computeStatusCounts(){return this.completeStatusCounts}testKey(suiteId,testId){return JSON.stringify([suiteId,testId])}scopedDetailSlot(suiteId,testId){return testResultDetailSlotName(suiteId,testId)}rebuildDetailSlotNames(){this.detailSlotNames=new Set([...this.children].map(child=>child.getAttribute("slot")).filter(name=>name!==null))}hasDetail(suiteId,testId){return this.detailSlotNames.has(this.scopedDetailSlot(suiteId,testId))}isExpanded(suiteId,test){const manual=this.manualExpanded.get(this.testKey(suiteId,test.id));return manual!==void 0?manual:this.autoExpandFailures&&test.status==="failed"}toggleFilter(status){const next=this.statusFilter.includes(status)?this.statusFilter.filter(s=>s!==status):[...this.statusFilter,status];this.statusFilter=next,this.emit("lr-filter-change",{statuses:next})}toggleExpanded(suiteId,test){const expanded=!this.isExpanded(suiteId,test),next=new Map(this.manualExpanded);next.set(this.testKey(suiteId,test.id),expanded),this.manualExpanded=next,this.emit("lr-toggle",{suiteId,testId:test.id,expanded})}onDetailSlotChange(){this.requestUpdate()}renderSummary(statusCounts){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,state,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{srOnly}from"../../../internal/a11y.js";import{styles}from"./test-results.styles.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{overallSemanticLabel,overallSemanticRole}from"../semantic-owner.js";import{LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_expand,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_noData,LYRA_DEFAULT_noMatches,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_progress,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSkipped,LYRA_DEFAULT_statusSuccess,LYRA_DEFAULT_testResultsCollapseTest,LYRA_DEFAULT_testResultsCompleteAnnounce,LYRA_DEFAULT_testResultsExpandTest,LYRA_DEFAULT_testResultsFailed,LYRA_DEFAULT_testResultsFilterLabel,LYRA_DEFAULT_testResultsLabel,LYRA_DEFAULT_testResultsLimit,LYRA_DEFAULT_testResultsPassed,LYRA_DEFAULT_testResultsRunning,LYRA_DEFAULT_testResultsSkipped}from"../../../internal/default-strings.generated.js";const STATUSES=["passed","failed","skipped","running"],MAX_RENDERED_TESTS=1e3;function normalizeTestStatus(value){switch(value){case"passed":case"failed":case"skipped":case"running":return value;default:return"skipped"}}const STATUS_COUNT_KEY={passed:"testResultsPassed",failed:"testResultsFailed",skipped:"testResultsSkipped",running:"testResultsRunning"},STATUS_LABEL_KEY={passed:"statusSuccess",failed:"statusError",skipped:"statusSkipped",running:"statusRunning"},STATUS_GLYPH={passed:"\u2713",failed:"\xD7",skipped:"\u2013"};function encodeDetailSlotSegment(value){let encoded="";for(let index=0;index<value.length;){const codePoint=value.codePointAt(index),character=String.fromCodePoint(codePoint);encoded+=codePoint>=55296&&codePoint<=57343?`%u${codePoint.toString(16).toUpperCase().padStart(4,"0")}`:encodeURIComponent(character),index+=character.length}return encoded}function testResultDetailSlotName(suiteId,testId){return`detail-${encodeDetailSlotSegment(suiteId)}:${encodeDetailSlotSegment(testId)}`}class LyraTestResults extends LyraElement{constructor(){super(...arguments),this.suites=[],this.statusFilter=[],this.runId=null,this.runState="idle",this.autoExpandFailures=!0,this.manualExpanded=new Map,this.normalizedSuitesCache=[],this.projectedSuitesCache=[],this.completeStatusCounts={passed:0,failed:0,skipped:0,running:0},this.normalizedTestKeys=new Set,this.detailSlotNames=new Set,this.projectionTruncated=!1,this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.idPrefix=nextId("test-results"),this.pendingCompletionAnnouncement=null}static{this.defaultStrings={...super.defaultStrings,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,expand:LYRA_DEFAULT_expand,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,noData:LYRA_DEFAULT_noData,noMatches:LYRA_DEFAULT_noMatches,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,progress:LYRA_DEFAULT_progress,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusError:LYRA_DEFAULT_statusError,statusRunning:LYRA_DEFAULT_statusRunning,statusSkipped:LYRA_DEFAULT_statusSkipped,statusSuccess:LYRA_DEFAULT_statusSuccess,testResultsCollapseTest:LYRA_DEFAULT_testResultsCollapseTest,testResultsCompleteAnnounce:LYRA_DEFAULT_testResultsCompleteAnnounce,testResultsExpandTest:LYRA_DEFAULT_testResultsExpandTest,testResultsFailed:LYRA_DEFAULT_testResultsFailed,testResultsFilterLabel:LYRA_DEFAULT_testResultsFilterLabel,testResultsLabel:LYRA_DEFAULT_testResultsLabel,testResultsLimit:LYRA_DEFAULT_testResultsLimit,testResultsPassed:LYRA_DEFAULT_testResultsPassed,testResultsRunning:LYRA_DEFAULT_testResultsRunning,testResultsSkipped:LYRA_DEFAULT_testResultsSkipped}}static{this.ownedCollectionProperties=Object.freeze(["suites","statusFilter"])}static{this.identityCollectionProperties=Object.freeze(["suites"])}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.immutableEventDetails=Object.freeze(["lr-filter-change"])}connectedCallback(){super.connectedCallback(),this.syncLimitAnnouncementSink(),this.limitAnnouncementInitialized=this.hasUpdated,this.previouslyTruncated=this.projectionTruncated}disconnectedCallback(){this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=void 0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=void 0,this.syncLimitAnnouncementSink()}syncLimitAnnouncementSink(){!this.isConnected||this.limitAnnouncementSink?.element.ownerDocument===this.ownerDocument||(this.limitAnnouncementSink?.release(),this.limitAnnouncementSink=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}))}willUpdate(changed){if(super.willUpdate(changed),changed.has("suites")){this.rebuildNormalizedSuites();const pruned=new Map([...this.manualExpanded].filter(([key])=>this.normalizedTestKeys.has(key)));pruned.size!==this.manualExpanded.size&&(this.manualExpanded=pruned)}if((changed.has("suites")||changed.has("statusFilter"))&&this.rebuildProjection(),this.rebuildDetailSlotNames(),changed.has("runState")||changed.has("runId")){const previousState=changed.has("runState")?changed.get("runState"):this.runState,previousRunId=changed.has("runId")?changed.get("runId"):this.runId;if(previousState==="running"&&this.runState==="complete"&&this.runId!==null&&previousRunId===this.runId){const number=getNumberFormat(this.effectiveLocale);this.pendingCompletionAnnouncement=this.localize("testResultsCompleteAnnounce",void 0,{passed:number.format(this.countOf("passed")),failed:number.format(this.countOf("failed")),skipped:number.format(this.countOf("skipped"))})}}}rebuildNormalizedSuites(){const normalizedSuites=[],suiteIds=new Set,normalizedTestKeys=new Set,counts={passed:0,failed:0,skipped:0,running:0};for(const suite of Array.isArray(this.suites)?this.suites:[]){if(!suite||typeof suite.id!="string"||suite.id.trim().length===0||suiteIds.has(suite.id))continue;suiteIds.add(suite.id);const testIds=new Set,tests=[];for(const test of Array.isArray(suite.tests)?suite.tests:[]){if(!test||typeof test.id!="string"||test.id.trim().length===0||testIds.has(test.id))continue;testIds.add(test.id);const status=normalizeTestStatus(test.status),normalized={id:test.id,name:typeof test.name=="string"?test.name:"",status,...typeof test.durationMs=="number"?{durationMs:test.durationMs}:{},...typeof test.message=="string"?{message:test.message}:{}};tests.push(normalized),normalizedTestKeys.add(this.testKey(suite.id,normalized.id)),counts[status]++}tests.length>0&&normalizedSuites.push({id:suite.id,name:typeof suite.name=="string"?suite.name:"",tests})}this.normalizedSuitesCache=normalizedSuites,this.normalizedTestKeys=normalizedTestKeys,this.completeStatusCounts=counts}rebuildProjection(){const filteredStatuses=new Set(this.statusFilter),candidates=this.normalizedSuitesCache.flatMap(suite=>suite.tests.filter(test=>filteredStatuses.size===0||filteredStatuses.has(test.status)).map(test=>({suiteId:suite.id,test}))),chosenKeys=new Set,reserve=predicate=>{for(const{suiteId,test}of candidates){if(chosenKeys.size>=MAX_RENDERED_TESTS)break;predicate(suiteId,test)&&chosenKeys.add(this.testKey(suiteId,test.id))}};reserve((suiteId,test)=>this.manualExpanded.get(this.testKey(suiteId,test.id))===!0),reserve((_suiteId,test)=>test.status==="failed"),reserve(()=>!0),this.projectedSuitesCache=this.normalizedSuitesCache.map(suite=>({...suite,tests:suite.tests.filter(test=>chosenKeys.has(this.testKey(suite.id,test.id)))})).filter(suite=>suite.tests.length>0),this.projectionTruncated=chosenKeys.size<candidates.length}updated(changed){if(super.updated(changed),this.pendingCompletionAnnouncement!==null){const text=this.pendingCompletionAnnouncement;this.pendingCompletionAnnouncement=null,this.liveRegion?.announce(text,{force:!0})}this.limitAnnouncementInitialized&&this.projectionTruncated&&!this.previouslyTruncated&&this.limitAnnouncementSink?.announce(this.localize("testResultsLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(MAX_RENDERED_TESTS)})),this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.projectionTruncated}countOf(status){return this.completeStatusCounts[status]}computeStatusCounts(){return this.completeStatusCounts}testKey(suiteId,testId){return JSON.stringify([suiteId,testId])}scopedDetailSlot(suiteId,testId){return testResultDetailSlotName(suiteId,testId)}rebuildDetailSlotNames(){this.detailSlotNames=new Set([...this.children].map(child=>child.getAttribute("slot")).filter(name=>name!==null))}hasDetail(suiteId,testId){return this.detailSlotNames.has(this.scopedDetailSlot(suiteId,testId))}isExpanded(suiteId,test){const manual=this.manualExpanded.get(this.testKey(suiteId,test.id));return manual!==void 0?manual:this.autoExpandFailures&&test.status==="failed"}toggleFilter(status){const next=this.statusFilter.includes(status)?this.statusFilter.filter(s=>s!==status):[...this.statusFilter,status];this.statusFilter=next,this.emit("lr-filter-change",{statuses:next})}toggleExpanded(suiteId,test){const expanded=!this.isExpanded(suiteId,test),next=new Map(this.manualExpanded);next.set(this.testKey(suiteId,test.id),expanded),this.manualExpanded=next,this.emit("lr-toggle",{suiteId,testId:test.id,expanded})}onDetailSlotChange(){this.requestUpdate()}renderSummary(statusCounts){return html`
2
2
  <div part="summary">
3
3
  ${STATUSES.map(status=>{const count=statusCounts[status],formattedCount=getNumberFormat(this.effectiveLocale).format(count);return html`<span part="count" data-status=${status}
4
4
  >${this.localize(STATUS_COUNT_KEY[status],void 0,{count:formattedCount})}</span
@@ -64,7 +64,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
64
64
  aria-label=${ariaLabel??nothing}
65
65
  >
66
66
  ${this.renderSummary(this.computeStatusCounts())}
67
- ${visibleSuites.length===0?html`<lr-empty part="empty" heading=${this.localize("noData")}></lr-empty>`:this.projectedSuitesCache.map((suite,index)=>this.renderSuite(suite,index))}
67
+ ${visibleSuites.length===0?html`<lr-empty part="empty" heading=${this.localize("noMatches")}></lr-empty>`:this.projectedSuitesCache.map((suite,index)=>this.renderSuite(suite,index))}
68
68
  ${this.projectionTruncated?html`<p part="limit" role="note">${this.localize("testResultsLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(MAX_RENDERED_TESTS)})}</p>`:nothing}
69
69
  </div>
70
70
  `}
@@ -47,11 +47,6 @@ import{css}from"lit";const styles=css`
47
47
  var(--lr-color-mix-partner) var(--lr-color-mix-hover)
48
48
  );
49
49
  }
50
- /* Pressed is the hovered tint pushed a further --lr-color-mix-active toward
51
- --lr-color-mix-partner (which follows the text colour), so it reads as a distinctly deeper step
52
- than hover rather than repeating it. It must stay after the [aria-pressed='true'] rule: the two
53
- selectors are both (0,2,0), so source order alone decides whether pressing an already-selected
54
- filter shows any feedback at all. */
55
50
  [part='filter-toggle']:active {
56
51
  background: color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));
57
52
  }
@@ -1,10 +1,6 @@
1
1
  import{css}from"lit";const styles=css`
2
2
  :host {
3
3
  display: block;
4
- /* Consumer-overridable cap on how tall the reasoning transcript grows
5
- before it scrolls internally, e.g. via ::part(body) or by overriding
6
- this custom property directly -- not exposed as a component prop
7
- since it's a pure layout knob, not something a template branches on. */
8
4
  --_lr-thinking-panel-max-block-size: var(--lr-size-16rem);
9
5
  }
10
6
  [part="base"] {
@@ -13,9 +9,6 @@ import{css}from"lit";const styles=css`
13
9
  background: var(--lr-color-surface);
14
10
  overflow: hidden;
15
11
  }
16
- /* Density escape for transcript rows. The values sit behind inline var() fallbacks so a
17
- containing transcript can retune them without redeclaring the rules, while an unset panel
18
- keeps the pre-existing regular dimensions. */
19
12
  :host([compact]) [part="header"] {
20
13
  padding: var(
21
14
  --lr-thinking-panel-compact-header-padding,
@@ -26,8 +19,6 @@ import{css}from"lit";const styles=css`
26
19
  :host([compact]) [part="body"] {
27
20
  padding: var(--lr-thinking-panel-compact-body-padding, var(--lr-space-s));
28
21
  }
29
- /* Removes only the outer card treatment. The header/body divider remains because it explains
30
- the expanded disclosure structure even when a surrounding message supplies the outer frame. */
31
22
  :host([frame="plain"]) [part="base"] {
32
23
  border: 0;
33
24
  border-radius: 0;
@@ -53,9 +44,6 @@ import{css}from"lit";const styles=css`
53
44
  background: var(--lr-color-brand-quiet);
54
45
  color: var(--lr-color-brand);
55
46
  }
56
- /* Pressed is the hovered tint pushed a further --lr-color-mix-active toward
57
- --lr-color-mix-partner (which follows the text colour), so it reads as a distinctly deeper step
58
- than hover in both light and dark themes rather than repeating it. */
59
47
  [part="header"]:active {
60
48
  background: color-mix(
61
49
  in oklab,
@@ -75,13 +63,6 @@ import{css}from"lit";const styles=css`
75
63
  :host([expanded]) [part="toggle"] {
76
64
  transform: rotate(90deg);
77
65
  }
78
- /* RTL: the resting (collapsed) chevron mirrors to point left, the
79
- conventional mirrored disclosure-triangle direction for RTL. Scoped to
80
- the collapsed state specifically (rather than a plain :dir(rtl) rule) so
81
- it never has to compete with the rule above for the expanded state, which
82
- needs no mirroring: rotating this left-right-asymmetric glyph 90deg
83
- already produces a left-right-symmetric down chevron. Mirrors
84
- lr-source-list's and lr-code-block's identical toggle chevron. */
85
66
  :host(:not([expanded]):dir(rtl)) [part="toggle"] {
86
67
  transform: scaleX(-1);
87
68
  }
@@ -104,12 +85,6 @@ import{css}from"lit";const styles=css`
104
85
  font-size: var(--lr-font-size-sm);
105
86
  color: var(--lr-color-text-quiet);
106
87
  }
107
- /* Actively streaming with no duration yet -- a full-opacity brand-colored
108
- label plus a separate decorative pulse dot, deliberately *not* animating
109
- the text's own opacity the way lr-typing-indicator's pulse variant
110
- does: that dims it well below AA contrast for part of every cycle, fine
111
- for a purely decorative shape but not for text carrying real content
112
- ("Thinking…"). */
113
88
  [part="duration"][data-pending] {
114
89
  color: var(--lr-thinking-panel-pending-color, var(--lr-color-brand));
115
90
  }
@@ -141,11 +116,6 @@ import{css}from"lit";const styles=css`
141
116
  overflow-inline: hidden;
142
117
  overflow-block: auto;
143
118
  overflow-wrap: anywhere;
144
- /* Reaching this region's own top/bottom edge stops there instead of
145
- chaining the scroll into the host page -- this is precisely the
146
- component that tracks and respects the reader scrolling within it, so
147
- it shouldn't hand that scroll off to the page underneath it. Same
148
- convention as virtual-list.styles.ts's own auto-scrolling region. */
149
119
  overscroll-behavior: contain;
150
120
  padding: var(--lr-space-m);
151
121
  border-block-start: var(--lr-border-width-thin) solid var(--lr-color-border);
@@ -153,21 +123,10 @@ import{css}from"lit";const styles=css`
153
123
  font-size: var(--lr-font-size-md-sm);
154
124
  line-height: var(--lr-line-height-normal);
155
125
  }
156
- /* [part='body'] unconditionally carries tabindex="0" (a real, always-focusable, independently
157
- scrollable region) -- same convention as lr-code-block's [part='body'] and lr-virtual-list's
158
- [part='base'], both cited by name in this component's own class file. Without this rule a
159
- keyboard user tabbing into the reasoning transcript gets no visible indicator at all. */
160
126
  [part="body"]:focus-visible {
161
127
  outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);
162
- /* Negative (inward) so the ring isn't clipped by this element's own
163
- overflow-block:auto -- same reasoning as lr-code-block's identical rule. */
164
128
  outline-offset: calc(-1 * var(--lr-focus-ring-offset));
165
129
  }
166
- /* Subtler preview of the same treatment for mouse users, who otherwise get no cue that this is a
167
- separately scrollable/focusable region. A plain border color, not the focus ring's brand color,
168
- so the eventual :focus-visible ring stays visually distinct -- matching lr-virtual-list. */
169
- /* no-pressed-state: this is a scroll port, not an activation target -- pressing it activates
170
- nothing, and :active would match on any press landing inside the transcript text. */
171
130
  [part="body"]:hover:not(:focus-visible) {
172
131
  outline: var(--lr-focus-ring-width) solid var(--lr-color-border);
173
132
  outline-offset: calc(-1 * var(--lr-focus-ring-offset));