@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.
- package/CHANGELOG.md +597 -0
- package/custom-elements.json +1 -1
- package/dist/cli/migrate-wa.mjs +52 -0
- package/dist/cli/migration-contract.json +1 -1
- package/dist/components/agent-tools/activity-feed/activity-feed.class.js +1 -1
- package/dist/components/agent-tools/activity-feed/activity-feed.styles.js +0 -16
- package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.class.js +1 -1
- package/dist/components/agent-tools/agent-eval-dashboard/agent-eval-dashboard.styles.js +7 -5
- package/dist/components/agent-tools/agent-run/agent-run.class.js +2 -2
- package/dist/components/agent-tools/agent-run/agent-run.styles.js +0 -13
- package/dist/components/agent-tools/agent-trace/agent-trace.styles.js +7 -4
- package/dist/components/agent-tools/approval-queue/approval-queue.styles.js +7 -5
- package/dist/components/agent-tools/artifact-panel/artifact-panel.styles.js +0 -3
- package/dist/components/agent-tools/browser-frame/browser-frame.styles.js +3 -5
- package/dist/components/agent-tools/commit-card/commit-card.styles.js +0 -10
- package/dist/components/agent-tools/compare-panel/compare-panel.styles.js +11 -6
- package/dist/components/agent-tools/confirm-bar/confirm-bar.styles.js +0 -46
- package/dist/components/agent-tools/eval-dataset/eval-dataset.styles.js +0 -7
- package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js +2 -2
- package/dist/components/agent-tools/prompt-studio/prompt-studio.styles.js +0 -15
- package/dist/components/agent-tools/result-card/result-card.styles.js +0 -7
- package/dist/components/agent-tools/result-card/result-field.styles.js +0 -5
- package/dist/components/agent-tools/schema-viewer/schema-viewer.styles.js +0 -3
- package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +0 -15
- package/dist/components/agent-tools/stack-trace/stack-trace.styles.js +0 -20
- package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +2 -2
- package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js +0 -3
- package/dist/components/agent-tools/task-list/task-list.styles.js +0 -15
- package/dist/components/agent-tools/terminal/terminal.class.d.ts +11 -6
- package/dist/components/agent-tools/terminal/terminal.class.js +4 -4
- package/dist/components/agent-tools/terminal/terminal.styles.js +0 -46
- package/dist/components/agent-tools/test-results/test-results.class.js +2 -2
- package/dist/components/agent-tools/test-results/test-results.styles.js +0 -5
- package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +0 -41
- package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.styles.js +0 -41
- package/dist/components/agent-tools/tool-call-chip/tool-call-chip.styles.js +0 -30
- package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +6 -6
- package/dist/components/agent-tools/tool-param-form/tool-param-form.styles.js +0 -5
- package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +0 -20
- package/dist/components/agent-tools/tool-result-view/tool-result-view.styles.js +0 -4
- package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.styles.js +0 -21
- package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +7 -31
- package/dist/components/charts/chart/box-plot.styles.js +0 -20
- package/dist/components/charts/chart/chart-colors.d.ts +1 -1
- package/dist/components/charts/chart/chart-colors.js +1 -1
- package/dist/components/charts/chart/chart-core-loader.d.ts +1 -0
- package/dist/components/charts/chart/chart-core-loader.js +1 -1
- package/dist/components/charts/chart/chart-feature-loader.d.ts +35 -0
- package/dist/components/charts/chart/chart-feature-loader.js +1 -1
- package/dist/components/charts/chart/chart.class.d.ts +93 -0
- package/dist/components/charts/chart/chart.class.js +3 -3
- package/dist/components/charts/chart/chart.styles.js +0 -27
- package/dist/components/charts/chart/lite-chart.class.d.ts +20 -1
- package/dist/components/charts/chart/lite-chart.class.js +4 -4
- package/dist/components/charts/chart/lite-chart.styles.js +0 -27
- package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +20 -0
- package/dist/components/conversation/agent-workspace/agent-workspace.class.js +3 -1
- package/dist/components/conversation/agent-workspace/agent-workspace.styles.js +3 -0
- package/dist/components/conversation/audio-visualizer/audio-visualizer.styles.js +0 -7
- package/dist/components/conversation/branch-picker/branch-picker.styles.js +0 -3
- package/dist/components/conversation/chat-composer/chat-composer.styles.js +0 -51
- package/dist/components/conversation/chat-message/chat-message.styles.js +7 -35
- package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
- package/dist/components/conversation/chat-viewport/chat-viewport.styles.js +0 -33
- package/dist/components/conversation/checkpoint/checkpoint.class.js +1 -1
- package/dist/components/conversation/checkpoint/checkpoint.styles.js +0 -3
- package/dist/components/conversation/code-block/code-block-shared.d.ts +5 -2
- package/dist/components/conversation/code-block/code-block.class.js +1 -1
- package/dist/components/conversation/code-block/code-block.styles.js +4 -95
- package/dist/components/conversation/code-block/code-loader.d.ts +11 -0
- package/dist/components/conversation/code-block/code-loader.js +1 -1
- package/dist/components/conversation/code-block/shiki-types.d.ts +12 -0
- package/dist/components/conversation/code-block/shiki-types.js +1 -1
- package/dist/components/conversation/conversation-item/conversation-item.styles.js +8 -54
- package/dist/components/conversation/generation-metrics/generation-metrics.class.js +2 -2
- package/dist/components/conversation/generation-metrics/generation-metrics.styles.js +0 -17
- package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
- package/dist/components/conversation/markdown/markdown.styles.js +0 -41
- package/dist/components/conversation/message-actions/message-actions.styles.js +0 -3
- package/dist/components/conversation/message-feedback/message-feedback.styles.js +0 -35
- package/dist/components/conversation/message-parts/message-parts.class.d.ts +1 -1
- package/dist/components/conversation/message-parts/message-parts.styles.js +0 -5
- package/dist/components/conversation/model-select/model-select.class.js +3 -3
- package/dist/components/conversation/model-select/model-select.styles.js +12 -47
- package/dist/components/conversation/model-settings-panel/model-settings-panel.styles.js +0 -6
- package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +3 -0
- package/dist/components/conversation/prompt-input/prompt-input.styles.js +0 -10
- package/dist/components/conversation/push-to-talk/push-to-talk.styles.js +0 -8
- package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js +1 -11
- package/dist/components/conversation/stream-status/stream-status.styles.js +0 -16
- package/dist/components/conversation/streaming-text/streaming-text.styles.js +0 -15
- package/dist/components/conversation/suggestion-chips/suggestion-chips.styles.js +0 -5
- package/dist/components/conversation/thread-list/thread-list.styles.js +0 -23
- package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts +16 -4
- package/dist/components/conversation/transcript-feed/transcript-feed.class.js +1 -1
- package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +0 -1
- package/dist/components/conversation/typing-indicator/typing-indicator.styles.js +0 -23
- package/dist/components/conversation/usage-badge/usage-badge.styles.js +0 -3
- package/dist/components/conversation/voice-picker/voice-picker.class.js +3 -3
- package/dist/components/conversation/voice-picker/voice-picker.styles.js +9 -29
- package/dist/components/conversation/widget-renderer/resolve.d.ts +2 -0
- package/dist/components/conversation/widget-renderer/resolve.js +1 -1
- package/dist/components/data/calendar/calendar.class.d.ts +15 -2
- package/dist/components/data/calendar/calendar.class.js +2 -2
- package/dist/components/data/calendar/calendar.styles.js +2 -28
- package/dist/components/data/condition-builder/condition-builder.class.d.ts +10 -6
- package/dist/components/data/condition-builder/condition-builder.class.js +2 -2
- package/dist/components/data/condition-builder/condition-builder.styles.js +0 -6
- package/dist/components/data/context-meter/context-meter.styles.js +0 -24
- package/dist/components/data/data-grid/data-grid.class.js +3 -3
- package/dist/components/data/data-grid/data-grid.styles.js +0 -22
- package/dist/components/data/document-library/document-library.class.js +2 -2
- package/dist/components/data/document-library/document-library.styles.js +0 -4
- package/dist/components/data/env-list/env-list.class.js +1 -1
- package/dist/components/data/env-list/env-list.styles.js +7 -4
- package/dist/components/data/file-tree/file-tree.class.d.ts +12 -0
- package/dist/components/data/flow-canvas/flow-canvas.styles.js +12 -19
- package/dist/components/data/flow-controls/flow-controls.class.js +2 -2
- package/dist/components/data/flow-controls/flow-controls.styles.js +3 -36
- package/dist/components/data/flow-minimap/flow-minimap.class.js +1 -1
- package/dist/components/data/flow-minimap/flow-minimap.styles.js +0 -9
- package/dist/components/data/flow-node/flow-node.styles.js +0 -23
- package/dist/components/data/flow-run-status/flow-run-status.class.js +1 -1
- package/dist/components/data/flow-run-status/flow-run-status.styles.js +0 -7
- package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +0 -7
- package/dist/components/data/graph-query-builder/graph-query-builder.class.js +1 -1
- package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +0 -10
- package/dist/components/data/heatmap/heatmap-scale.d.ts +20 -0
- package/dist/components/data/heatmap/heatmap-scale.js +1 -1
- package/dist/components/data/heatmap/heatmap.class.d.ts +84 -1
- package/dist/components/data/heatmap/heatmap.class.js +2 -2
- package/dist/components/data/heatmap/heatmap.styles.js +0 -54
- package/dist/components/data/pagination/pagination.styles.js +23 -46
- package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +34 -1
- package/dist/components/data/sequence-strip/sequence-strip.class.js +5 -2
- package/dist/components/data/sequence-strip/sequence-strip.styles.js +14 -20
- package/dist/components/data/sparkline/sparkline.class.js +1 -1
- package/dist/components/data/stat/stat.styles.js +0 -67
- package/dist/components/data/table/table.class.d.ts +42 -3
- package/dist/components/data/table/table.class.js +4 -4
- package/dist/components/data/table/table.styles.js +20 -91
- package/dist/components/data/timeline/timeline-item.styles.js +0 -30
- package/dist/components/data/timeline/timeline.class.d.ts +89 -1
- package/dist/components/data/timeline/timeline.class.js +2 -2
- package/dist/components/data/timeline/timeline.styles.js +111 -31
- package/dist/components/data/tree/tree-item.styles.js +1 -28
- package/dist/components/data/tree/tree.class.js +2 -2
- package/dist/components/data/tree/tree.styles.js +0 -6
- package/dist/components/data/word-cloud/word-cloud.styles.js +0 -5
- package/dist/components/forms/button/button.class.js +1 -1
- package/dist/components/forms/button/button.styles.js +0 -105
- package/dist/components/forms/checkbox/checkbox.class.d.ts +3 -0
- package/dist/components/forms/checkbox/checkbox.class.js +1 -1
- package/dist/components/forms/checkbox/checkbox.styles.js +0 -39
- package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +21 -2
- package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
- package/dist/components/forms/checkbox-group/checkbox-group.styles.js +0 -18
- package/dist/components/forms/code-editor/code-editor.styles.js +0 -30
- package/dist/components/forms/color-picker/color-picker.class.js +2 -2
- package/dist/components/forms/color-picker/color-picker.styles.js +0 -69
- package/dist/components/forms/combobox/combobox.class.js +2 -2
- package/dist/components/forms/combobox/combobox.styles.js +22 -111
- package/dist/components/forms/combobox/option.styles.js +7 -1
- package/dist/components/forms/date-picker/date-input.class.js +1 -1
- package/dist/components/forms/date-picker/date-input.styles.js +12 -67
- package/dist/components/forms/date-picker/date-picker.class.d.ts +1 -0
- package/dist/components/forms/date-picker/date-picker.class.js +22 -20
- package/dist/components/forms/date-picker/date-picker.styles.js +36 -29
- package/dist/components/forms/emoji-picker/emoji-data-loader.d.ts +6 -3
- package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
- package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +8 -1
- package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
- package/dist/components/forms/emoji-picker/emoji-picker.styles.js +3 -41
- package/dist/components/forms/icon-button/icon-button.class.js +1 -1
- package/dist/components/forms/icon-button/icon-button.styles.js +0 -16
- package/dist/components/forms/input/input.styles.js +0 -54
- package/dist/components/forms/input/number-input.styles.d.ts +4 -5
- package/dist/components/forms/input/number-input.styles.js +0 -11
- package/dist/components/forms/input/time-input-shared.d.ts +11 -0
- package/dist/components/forms/input/time-input-shared.js +1 -1
- package/dist/components/forms/input/time-input.class.d.ts +11 -2
- package/dist/components/forms/input/time-input.class.js +1 -1
- package/dist/components/forms/input/time-input.styles.js +0 -6
- package/dist/components/forms/locale-picker/locale-picker.class.js +2 -2
- package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -26
- package/dist/components/forms/otp-input/otp-input.class.js +3 -3
- package/dist/components/forms/otp-input/otp-input.styles.js +0 -16
- package/dist/components/forms/phone-input/phone-input.class.d.ts +9 -1
- package/dist/components/forms/phone-input/phone-input.class.js +2 -2
- package/dist/components/forms/phone-input/phone-input.styles.js +0 -37
- package/dist/components/forms/radio/radio-button.styles.js +1 -30
- package/dist/components/forms/radio/radio-group.styles.js +0 -4
- package/dist/components/forms/radio/radio.styles.js +0 -44
- package/dist/components/forms/rubric-form/rubric-form.styles.js +0 -5
- package/dist/components/forms/select/select.class.js +1 -1
- package/dist/components/forms/select/select.styles.js +14 -114
- package/dist/components/forms/slider/slider.styles.js +0 -55
- package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts +0 -11
- package/dist/components/forms/swatch-picker/swatch-picker.class.js +2 -2
- package/dist/components/forms/swatch-picker/swatch-picker.styles.js +0 -77
- package/dist/components/forms/switch/switch.class.d.ts +3 -0
- package/dist/components/forms/switch/switch.class.js +1 -1
- package/dist/components/forms/switch/switch.styles.js +0 -37
- package/dist/components/forms/textarea/textarea.styles.js +0 -28
- package/dist/components/forms/time-range/time-range.styles.js +12 -84
- package/dist/components/forms/token-input/token-input.class.d.ts +23 -9
- package/dist/components/forms/token-input/token-input.class.js +1 -1
- package/dist/components/forms/token-input/token-input.styles.js +1 -54
- package/dist/components/layout/app-rail/app-rail-item.class.js +2 -2
- package/dist/components/layout/app-rail/app-rail-item.styles.js +0 -13
- package/dist/components/layout/app-rail/app-rail.class.d.ts +5 -0
- package/dist/components/layout/app-rail/app-rail.class.js +1 -1
- package/dist/components/layout/app-rail/app-rail.styles.js +0 -46
- package/dist/components/layout/button-group/button-group.styles.js +0 -6
- package/dist/components/layout/card/card.class.d.ts +12 -0
- package/dist/components/layout/card/card.styles.js +3 -11
- package/dist/components/layout/carousel/carousel.styles.js +0 -1
- package/dist/components/layout/command-palette/command-palette.class.d.ts +8 -0
- package/dist/components/layout/command-palette/command-palette.class.js +3 -1
- package/dist/components/layout/command-palette/command-palette.styles.js +1 -13
- package/dist/components/layout/control-group/control-group.styles.js +0 -7
- package/dist/components/layout/dashboard-grid/dashboard-grid.styles.js +6 -25
- package/dist/components/layout/details/accordion.class.d.ts +13 -0
- package/dist/components/layout/details/accordion.class.js +1 -1
- package/dist/components/layout/details/details.class.js +1 -1
- package/dist/components/layout/details/details.styles.js +0 -12
- package/dist/components/layout/dock-panel/dock-panel.styles.js +0 -45
- package/dist/components/layout/drilldown-panel/drilldown-panel.class.d.ts +2 -0
- package/dist/components/layout/drilldown-panel/drilldown-panel.class.js +2 -2
- package/dist/components/layout/drilldown-panel/drilldown-panel.styles.js +0 -4
- package/dist/components/layout/filter-bar/filter-bar.class.js +1 -1
- package/dist/components/layout/filter-bar/filter-bar.styles.js +0 -9
- package/dist/components/layout/menu/menu-item.class.d.ts +5 -0
- package/dist/components/layout/menu/menu-item.class.js +1 -1
- package/dist/components/layout/menu/menu-item.styles.js +0 -49
- package/dist/components/layout/menu/menu-label.styles.js +0 -2
- package/dist/components/layout/menu/menu.styles.js +0 -18
- package/dist/components/layout/multi-split/multi-split.styles.js +0 -63
- package/dist/components/layout/page/page.class.d.ts +4 -0
- package/dist/components/layout/page/page.class.js +1 -1
- package/dist/components/layout/reorder-list/reorder-item.styles.js +0 -4
- package/dist/components/layout/responsive-panel/responsive-panel.styles.js +0 -27
- package/dist/components/layout/scroller/scroller.styles.js +0 -20
- package/dist/components/layout/segmented/segmented.class.d.ts +7 -1
- package/dist/components/layout/segmented/segmented.class.js +1 -1
- package/dist/components/layout/segmented/segmented.styles.js +69 -37
- package/dist/components/layout/split-panel/split-panel.styles.js +1 -7
- package/dist/components/layout/stepper/stepper.class.d.ts +8 -1
- package/dist/components/layout/stepper/stepper.class.js +1 -1
- package/dist/components/layout/stepper/stepper.styles.js +140 -41
- package/dist/components/layout/tab-group/tab-group.class.d.ts +4 -1
- package/dist/components/layout/tab-group/tab-group.styles.js +9 -75
- package/dist/components/layout/tab-group/tab.styles.js +0 -2
- package/dist/components/layout/virtual-list/virtual-list.class.d.ts +4 -4
- package/dist/components/layout/virtual-list/virtual-list.class.js +1 -1
- package/dist/components/layout/virtual-list/virtual-list.styles.js +0 -68
- package/dist/components/layout/widget/widget.class.d.ts +5 -1
- package/dist/components/layout/widget/widget.class.js +1 -1
- package/dist/components/layout/widget/widget.styles.js +97 -40
- package/dist/components/media/animated-image/animated-image.class.d.ts +3 -0
- package/dist/components/media/animated-image/animated-image.class.js +1 -1
- package/dist/components/media/animated-image/animated-image.styles.js +0 -28
- package/dist/components/media/attachment-chip/attachment-chip.class.d.ts +1 -1
- package/dist/components/media/attachment-chip/attachment-chip.class.js +1 -1
- package/dist/components/media/attachment-chip/attachment-chip.styles.js +0 -31
- package/dist/components/media/attachment-trigger/attachment-trigger.class.js +3 -3
- package/dist/components/media/attachment-trigger/attachment-trigger.styles.js +0 -40
- package/dist/components/media/av-player/av-player.class.d.ts +5 -6
- package/dist/components/media/av-player/av-player.class.js +1 -1
- package/dist/components/media/av-player/av-player.styles.js +0 -45
- package/dist/components/media/avatar/avatar.styles.js +3 -16
- package/dist/components/media/file-icon/file-icon.class.d.ts +1 -2
- package/dist/components/media/file-icon/file-icon.class.js +1 -1
- package/dist/components/media/file-input/file-input.class.d.ts +12 -0
- package/dist/components/media/file-input/file-input.styles.js +3 -24
- package/dist/components/media/flag/flag.class.d.ts +20 -0
- package/dist/components/media/flag/flag.class.js +4 -2
- package/dist/components/media/flag/flag.styles.js +7 -1
- package/dist/components/media/flag/language-map.d.ts +10 -0
- package/dist/components/media/flag/language-map.js +1 -1
- package/dist/components/media/image-comparer/image-comparer.styles.js +4 -33
- package/dist/components/media/image-viewer/image-viewer.class.js +0 -2
- package/dist/components/media/image-viewer/image-viewer.styles.js +7 -27
- package/dist/components/media/lightbox/lightbox.class.js +0 -2
- package/dist/components/media/lightbox/lightbox.styles.js +0 -21
- package/dist/components/media/map/map-loader.d.ts +19 -1
- package/dist/components/media/map/map-loader.js +1 -1
- package/dist/components/media/map/map.class.d.ts +141 -1
- package/dist/components/media/map/map.class.js +15 -3
- package/dist/components/media/map/map.styles.js +20 -17
- package/dist/components/media/media-card/media-card.class.d.ts +14 -3
- package/dist/components/media/media-card/media-card.class.js +1 -1
- package/dist/components/media/media-card/media-card.styles.js +2 -28
- package/dist/components/media/pan-zoom/pan-zoom.styles.js +0 -3
- package/dist/components/media/qr-code/qr-code.class.d.ts +3 -2
- package/dist/components/media/qr-code/qr-code.class.js +2 -2
- package/dist/components/media/qr-code/qr-code.styles.js +0 -3
- package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +2 -0
- package/dist/components/media/sequence-playback/sequence-playback.class.js +2 -1
- package/dist/components/media/sequence-playback/sequence-playback.styles.js +0 -19
- package/dist/components/media/video/video.class.d.ts +23 -2
- package/dist/components/media/video/video.class.js +3 -3
- package/dist/components/media/video/video.styles.js +4 -2
- package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts +3 -2
- package/dist/components/media/zoomable-frame/zoomable-frame.class.js +2 -2
- package/dist/components/media/zoomable-frame/zoomable-frame.styles.js +0 -5
- package/dist/components/overlays/alert/alert.styles.js +4 -2
- package/dist/components/overlays/badge/badge.styles.js +4 -48
- package/dist/components/overlays/badge/tag.styles.js +0 -14
- package/dist/components/overlays/callout/callout.styles.js +0 -11
- package/dist/components/overlays/chip/chip-group.styles.js +0 -18
- package/dist/components/overlays/chip/chip.styles.js +6 -69
- package/dist/components/overlays/dialog/confirm.d.ts +1 -4
- package/dist/components/overlays/dialog/confirm.js +1 -1
- package/dist/components/overlays/dialog/dialog.class.d.ts +12 -9
- package/dist/components/overlays/dialog/dialog.class.js +1 -1
- package/dist/components/overlays/dialog/dialog.styles.js +0 -43
- package/dist/components/overlays/drawer/drawer.class.d.ts +2 -2
- package/dist/components/overlays/drawer/drawer.styles.js +0 -9
- package/dist/components/overlays/empty/empty.styles.js +0 -12
- package/dist/components/overlays/kbd/kbd.styles.js +0 -8
- package/dist/components/overlays/overlay/dropdown.class.d.ts +1 -6
- package/dist/components/overlays/overlay/dropdown.class.js +2 -2
- package/dist/components/overlays/overlay/overlay.styles.js +0 -28
- package/dist/components/overlays/overlay/popover.class.d.ts +9 -1
- package/dist/components/overlays/overlay/popover.class.js +2 -2
- package/dist/components/overlays/overlay/tooltip.class.d.ts +10 -0
- package/dist/components/overlays/overlay/tooltip.class.js +1 -1
- package/dist/components/overlays/popup/popup.class.d.ts +1 -0
- package/dist/components/overlays/popup/popup.class.js +1 -1
- package/dist/components/overlays/popup/popup.styles.js +0 -15
- package/dist/components/overlays/progress/progress-ring.class.d.ts +9 -1
- package/dist/components/overlays/progress/progress-ring.class.js +3 -3
- package/dist/components/overlays/progress/progress.styles.js +0 -21
- package/dist/components/overlays/rating/rating.styles.js +0 -25
- package/dist/components/overlays/skeleton/skeleton.styles.js +0 -4
- package/dist/components/overlays/spinner/spinner.styles.js +0 -3
- package/dist/components/overlays/toast/toast-item.styles.js +3 -45
- package/dist/components/retrieval/chunk-inspector/chunk-inspector.styles.js +0 -35
- package/dist/components/retrieval/citation-badge/citation-badge.class.d.ts +2 -2
- package/dist/components/retrieval/citation-badge/citation-badge.class.js +3 -3
- package/dist/components/retrieval/citation-badge/citation-badge.styles.js +0 -20
- package/dist/components/retrieval/claim-evidence/claim-evidence.styles.js +0 -8
- package/dist/components/retrieval/community-card/community-card.class.d.ts +1 -0
- package/dist/components/retrieval/community-card/community-card.styles.js +0 -6
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js +8 -12
- package/dist/components/retrieval/entity-card/entity-card.class.d.ts +4 -3
- package/dist/components/retrieval/entity-card/entity-card.class.js +1 -1
- package/dist/components/retrieval/entity-card/entity-card.styles.js +0 -12
- package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts +10 -4
- package/dist/components/retrieval/entity-chip/entity-chip.class.js +3 -3
- package/dist/components/retrieval/entity-chip/entity-chip.styles.js +6 -9
- package/dist/components/retrieval/entity-dossier/entity-dossier.class.d.ts +19 -5
- package/dist/components/retrieval/graph/graph.class.d.ts +5 -0
- package/dist/components/retrieval/graph/graph.class.js +1 -1
- package/dist/components/retrieval/graph/graph.styles.js +0 -30
- package/dist/components/retrieval/graph-legend/graph-legend.styles.js +0 -3
- package/dist/components/retrieval/ingestion-queue/ingestion-queue.styles.js +0 -25
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts +2 -0
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js +0 -7
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +20 -6
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +2 -2
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +0 -16
- package/dist/components/retrieval/mind-map/mind-map.class.d.ts +5 -3
- package/dist/components/retrieval/mind-map/mind-map.class.js +1 -1
- package/dist/components/retrieval/mind-map/mind-map.styles.js +0 -2
- package/dist/components/retrieval/neighbor-list/neighbor-list.class.d.ts +3 -2
- package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +1 -1
- package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +0 -30
- package/dist/components/retrieval/node-palette/node-palette.styles.js +0 -11
- package/dist/components/retrieval/path-strip/path-strip.styles.js +0 -10
- package/dist/components/retrieval/provenance-panel/provenance-panel.class.d.ts +12 -3
- package/dist/components/retrieval/provenance-panel/provenance-panel.styles.js +0 -2
- package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.d.ts +3 -2
- package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js +2 -2
- package/dist/components/retrieval/retrieval-results/retrieval-results.styles.js +0 -28
- package/dist/components/retrieval/retrieval-search/retrieval-search.styles.js +0 -4
- package/dist/components/retrieval/retrieval-trace/retrieval-trace.styles.js +0 -2
- package/dist/components/retrieval/source-card/source-card.styles.js +0 -13
- package/dist/components/retrieval/source-list/source-list.styles.js +0 -7
- package/dist/components/retrieval/source-picker/source-picker.styles.js +0 -7
- package/dist/components/utility/copy-button/copy-button.styles.js +0 -10
- package/dist/components/utility/diff-view/diff-view.styles.js +0 -14
- package/dist/components/utility/export-button/export-button.styles.js +0 -22
- package/dist/components/utility/icon/icon.styles.js +0 -6
- package/dist/components/utility/json-viewer/json-viewer.styles.js +2 -48
- package/dist/components/utility/known-date/known-date.class.d.ts +7 -3
- package/dist/components/utility/known-date/known-date.styles.js +10 -51
- package/dist/components/utility/live-region/live-region.styles.js +0 -4
- package/dist/components/utility/mention-popover/mention-popover.styles.js +0 -25
- package/dist/components/utility/poll-status/poll-status.styles.js +0 -4
- package/dist/components/utility/random-content/random-content.class.d.ts +22 -0
- package/dist/components/utility/random-content/random-content.class.js +3 -2
- package/dist/components/utility/random-content/random-content.styles.js +6 -13
- package/dist/components/utility/tour/tour.class.d.ts +4 -2
- package/dist/components/utility/tour/tour.class.js +3 -3
- package/dist/components/utility/tour/tour.styles.js +0 -13
- package/dist/components/utility/visually-hidden/visually-hidden.styles.js +0 -5
- package/dist/components/viewers/archive-viewer/archive-viewer.class.js +1 -1
- package/dist/components/viewers/archive-viewer/archive-viewer.styles.d.ts +2 -2
- package/dist/components/viewers/archive-viewer/archive-viewer.styles.js +0 -10
- package/dist/components/viewers/csv-viewer/csv-viewer.class.js +1 -1
- package/dist/components/viewers/csv-viewer/csv-viewer.styles.js +0 -19
- package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js +1 -1
- package/dist/components/viewers/dataset-viewer/dataset-viewer.styles.js +0 -15
- package/dist/components/viewers/document-compare/document-compare.styles.js +0 -3
- package/dist/components/viewers/document-preview/document-preview.styles.js +0 -25
- package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +2 -1
- package/dist/components/viewers/document-viewer/document-viewer.class.js +1 -1
- package/dist/components/viewers/document-viewer/document-viewer.styles.js +0 -5
- package/dist/components/viewers/docx-viewer/docx-viewer.styles.js +0 -17
- package/dist/components/viewers/ebook-viewer/ebook-viewer.styles.js +0 -4
- package/dist/components/viewers/email-viewer/email-viewer.styles.js +0 -7
- package/dist/components/viewers/geojson-view/geojson-view.styles.js +0 -5
- package/dist/components/viewers/highlight-layer/highlight-layer.styles.js +0 -3
- package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +1 -1
- package/dist/components/viewers/notebook-viewer/notebook-viewer.styles.js +0 -38
- package/dist/components/viewers/page-rail/page-rail.class.js +1 -1
- package/dist/components/viewers/page-rail/page-rail.styles.js +0 -13
- package/dist/components/viewers/pdf-viewer/pdf-loader.d.ts +13 -2
- package/dist/components/viewers/pdf-viewer/pdf-loader.js +1 -1
- package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts +32 -2
- package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +4 -4
- package/dist/components/viewers/pdf-viewer/pdf-viewer.styles.js +1 -27
- package/dist/components/viewers/pptx-viewer/pptx-viewer.styles.js +0 -3
- package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.js +1 -1
- package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.styles.js +0 -14
- package/dist/components/viewers/svg-viewer/svg-viewer.styles.js +0 -7
- package/dist/components/viewers/xml-viewer/xml-viewer.styles.js +2 -24
- package/dist/custom-elements-jsx.d.ts +56 -37
- package/dist/events.d.ts +43 -33
- package/dist/internal/agent-status-variants.d.ts +18 -0
- package/dist/internal/agent-status-variants.js +1 -0
- package/dist/internal/announcer.d.ts +8 -3
- package/dist/internal/announcer.js +1 -1
- package/dist/internal/autoloader-manifest.js +1 -1
- package/dist/internal/canvas-color.d.ts +16 -0
- package/dist/internal/canvas-color.js +1 -1
- package/dist/internal/catalog-picker.d.ts +0 -1
- package/dist/internal/catalog-picker.js +1 -1
- package/dist/internal/default-strings.generated.d.ts +1 -0
- package/dist/internal/default-strings.generated.js +1 -1
- package/dist/internal/dev-mode-attribute-warning.d.ts +27 -4
- package/dist/internal/dev-mode-attribute-warning.js +1 -1
- package/dist/internal/localization-runtime.js +1 -1
- package/dist/internal/localization-types.d.ts +1 -1
- package/dist/internal/localization.js +1 -1
- package/dist/internal/lyra-element.d.ts +13 -0
- package/dist/internal/lyra-element.js +1 -1
- package/dist/internal/media-controller.js +1 -1
- package/dist/internal/package-metadata.d.ts +1 -1
- package/dist/internal/package-metadata.js +1 -1
- package/dist/internal/scroll-overflow.d.ts +35 -13
- package/dist/internal/scroll-overflow.js +1 -1
- package/dist/internal/sizes.styles.js +0 -2
- package/dist/internal/specialist-tokens.styles.js +6 -11
- package/dist/internal/text-highlights.d.ts +4 -1
- package/dist/internal/text-highlights.js +1 -1
- package/dist/internal/tokens/palette.styles.js +0 -15
- package/dist/internal/tokens.styles.js +19 -113
- package/dist/lyra.d.ts +8 -5
- package/dist/styles/reservations.css +82 -0
- package/dist/svelte.d.ts +56 -37
- package/dist/translations/ar.js +1 -1
- package/dist/translations/de.js +1 -1
- package/dist/translations/es.js +1 -1
- package/dist/translations/fa.js +1 -1
- package/dist/translations/fr.js +1 -1
- package/dist/translations/he.js +1 -1
- package/dist/translations/ja.js +1 -1
- package/dist/translations/pt-BR.js +1 -1
- package/dist/translations/ru.js +1 -1
- package/dist/translations/zh-CN.js +1 -1
- package/dist/vue.d.ts +56 -37
- package/llms/components/lr-accordion-item.md +12 -3
- package/llms/components/lr-accordion.md +11 -2
- package/llms/components/lr-agent-eval-dashboard.md +1 -1
- package/llms/components/lr-agent-trace.md +3 -1
- package/llms/components/lr-agent-workspace.md +20 -0
- package/llms/components/lr-artifact-panel.md +10 -4
- package/llms/components/lr-attachment-chip.md +7 -4
- package/llms/components/lr-attachment-trigger.md +7 -4
- package/llms/components/lr-av-player.md +3 -1
- package/llms/components/lr-avatar.md +6 -6
- package/llms/components/lr-bar-chart.md +4 -3
- package/llms/components/lr-box-plot.md +1 -1
- package/llms/components/lr-browser-frame.md +7 -3
- package/llms/components/lr-bubble-chart.md +4 -3
- package/llms/components/lr-calendar.md +9 -2
- package/llms/components/lr-card.md +24 -0
- package/llms/components/lr-chart.md +32 -8
- package/llms/components/lr-chat-viewport.md +7 -2
- package/llms/components/lr-checkbox-group.md +13 -5
- package/llms/components/lr-checkbox.md +5 -2
- package/llms/components/lr-checkpoint.md +6 -2
- package/llms/components/lr-combobox.md +5 -2
- package/llms/components/lr-command-palette.md +4 -1
- package/llms/components/lr-confirm-bar.md +7 -3
- package/llms/components/lr-context-meter.md +12 -11
- package/llms/components/lr-conversation-item.md +7 -4
- package/llms/components/lr-details.md +11 -2
- package/llms/components/lr-dialog.md +15 -10
- package/llms/components/lr-dock-panel.md +7 -10
- package/llms/components/lr-document-preview.md +6 -1
- package/llms/components/lr-document-viewer.md +3 -2
- package/llms/components/lr-doughnut-chart.md +4 -3
- package/llms/components/lr-drawer.md +3 -3
- package/llms/components/lr-entity-card.md +3 -3
- package/llms/components/lr-entity-chip.md +1 -1
- package/llms/components/lr-entity-dossier.md +4 -1
- package/llms/components/lr-file-input.md +2 -2
- package/llms/components/lr-flag.md +20 -5
- package/llms/components/lr-heatmap.md +28 -0
- package/llms/components/lr-histogram.md +3 -1
- package/llms/components/lr-icon.md +1 -1
- package/llms/components/lr-json-schema-viewer.md +2 -1
- package/llms/components/lr-knowledge-graph-explorer.md +8 -3
- package/llms/components/lr-known-date.md +4 -2
- package/llms/components/lr-line-chart.md +4 -3
- package/llms/components/lr-lite-chart.md +16 -6
- package/llms/components/lr-map.md +72 -8
- package/llms/components/lr-markdown-core.md +3 -2
- package/llms/components/lr-media-card.md +28 -12
- package/llms/components/lr-message-parts.md +2 -1
- package/llms/components/lr-model-select.md +9 -10
- package/llms/components/lr-model-settings-panel.md +9 -9
- package/llms/components/lr-neighbor-list.md +1 -1
- package/llms/components/lr-notebook-viewer.md +6 -3
- package/llms/components/lr-option.md +5 -2
- package/llms/components/lr-pdf-viewer.md +62 -2
- package/llms/components/lr-pie-chart.md +4 -3
- package/llms/components/lr-polar-area-chart.md +4 -3
- package/llms/components/lr-popover.md +5 -0
- package/llms/components/lr-progress-ring.md +8 -1
- package/llms/components/lr-prompt-studio.md +1 -1
- package/llms/components/lr-provenance-panel.md +4 -2
- package/llms/components/lr-qr-code.md +1 -1
- package/llms/components/lr-radar-chart.md +4 -3
- package/llms/components/lr-rag-eval-dashboard.md +2 -2
- package/llms/components/lr-random-content.md +13 -0
- package/llms/components/lr-reorder-item.md +6 -1
- package/llms/components/lr-reorder-list.md +6 -1
- package/llms/components/lr-responsive-panel.md +11 -7
- package/llms/components/lr-scatter-chart.md +4 -3
- package/llms/components/lr-sequence-strip.md +16 -2
- package/llms/components/lr-slider.md +12 -5
- package/llms/components/lr-sparkline.md +1 -1
- package/llms/components/lr-suggestion-chips.md +7 -2
- package/llms/components/lr-swatch-picker.md +5 -5
- package/llms/components/lr-switch.md +5 -2
- package/llms/components/lr-table.md +30 -4
- package/llms/components/lr-terminal.md +3 -1
- package/llms/components/lr-thread-list.md +8 -8
- package/llms/components/lr-time-input.md +6 -1
- package/llms/components/lr-timeline-item.md +24 -0
- package/llms/components/lr-timeline.md +25 -1
- package/llms/components/lr-token-input.md +7 -2
- package/llms/components/lr-tool-approval-dialog.md +7 -8
- package/llms/components/lr-tool-call-chip.md +5 -1
- package/llms/components/lr-tool-param-form.md +14 -12
- package/llms/components/lr-tool-result-dialog.md +11 -9
- package/llms/components/lr-tool-result-view.md +7 -6
- package/llms/components/lr-tool-select-dialog.md +18 -16
- package/llms/components/lr-trace-tree.md +3 -1
- package/llms/components/lr-usage-badge.md +4 -1
- package/llms/components/lr-video-playlist.md +1 -1
- package/llms/components/lr-virtual-list.md +22 -14
- package/llms/components/lr-voice-picker.md +8 -5
- package/llms/components/lr-widget-renderer.md +3 -3
- package/llms/components/lr-widget.md +1 -1
- package/llms/components/lr-word-cloud.md +6 -2
- package/llms/peers.md +12 -2
- package/llms/shared.md +70 -2
- package/llms-full.txt +1143 -285
- package/package.json +17 -5
- package/vscode-css-data.json +37 -2
- package/vscode-html-data.json +401 -44
- 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
|
|
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=${
|
|
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
|
|
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-
|
|
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("
|
|
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));
|