@aceshooting/lyra-ui 13.0.0 → 14.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +212 -0
- package/custom-elements.json +1 -1
- package/dist/cli/migration-contract.json +1 -1
- package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts +23 -15
- package/dist/components/agent-tools/activity-feed/activity-feed.class.js +9 -6
- package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts +12 -3
- package/dist/components/agent-tools/agent-trace/agent-trace.class.js +2 -1
- package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +4 -2
- package/dist/components/agent-tools/approval-queue/approval-queue.class.js +1 -1
- package/dist/components/agent-tools/artifact-panel/artifact-panel.styles.js +1 -1
- package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +1 -1
- package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +7 -7
- package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +5 -5
- package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +23 -10
- package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts +13 -6
- package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +3 -3
- package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +1 -1
- package/dist/components/agent-tools/stack-trace/stack-trace-parse.js +3 -3
- package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +1 -1
- package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js +1 -1
- package/dist/components/agent-tools/task-list/task-list.class.d.ts +1 -2
- package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
- package/dist/components/agent-tools/terminal/terminal.class.d.ts +10 -1
- package/dist/components/agent-tools/terminal/terminal.class.js +3 -3
- package/dist/components/agent-tools/terminal/terminal.styles.js +1 -1
- package/dist/components/agent-tools/test-results/test-results.class.d.ts +4 -2
- package/dist/components/agent-tools/test-results/test-results.class.js +2 -2
- package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts +2 -0
- package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +1 -1
- package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js +1 -1
- package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +1 -1
- package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +3 -2
- package/dist/components/agent-tools/tool-param-form/tool-param-form.d.ts +1 -1
- package/dist/components/agent-tools/tool-param-form/tool-param-form.js +1 -1
- package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +1 -1
- package/dist/components/agent-tools/tool-result-view/registry.d.ts +2 -1
- package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts +1 -1
- package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +1 -1
- package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.d.ts +18 -12
- package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +6 -6
- package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +9 -3
- package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +1 -1
- package/dist/components/agent-tools/trace-tree/span.js +1 -1
- package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +1 -1
- package/dist/components/charts/chart/box-plot.class.d.ts +10 -3
- package/dist/components/charts/chart/box-plot.class.js +9 -9
- package/dist/components/charts/chart/box-plot.styles.js +1 -1
- package/dist/components/charts/chart/chart-core-loader.js +1 -1
- package/dist/components/charts/chart/chart-feature-loader.js +1 -1
- package/dist/components/charts/chart/chart-preload.d.ts +1 -1
- package/dist/components/charts/chart/chart-preload.js +1 -1
- package/dist/components/charts/chart/chart.class.d.ts +27 -9
- package/dist/components/charts/chart/chart.class.js +23 -14
- package/dist/components/charts/chart/chart.styles.js +1 -1
- package/dist/components/charts/chart/histogram-bin.js +1 -1
- package/dist/components/charts/chart/lite-chart.class.js +7 -3
- package/dist/components/charts/chart/lite-chart.styles.js +1 -1
- package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +1 -1
- package/dist/components/conversation/agent-workspace/agent-workspace.class.js +2 -2
- package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +10 -5
- package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +1 -1
- package/dist/components/conversation/branch-picker/branch-picker.class.d.ts +4 -2
- package/dist/components/conversation/branch-picker/branch-picker.class.js +1 -1
- package/dist/components/conversation/branch-picker/branch-picker.styles.js +1 -1
- package/dist/components/conversation/chat-composer/chat-composer.class.d.ts +6 -2
- package/dist/components/conversation/chat-composer/chat-composer.class.js +3 -3
- package/dist/components/conversation/chat-composer/chat-composer.styles.js +1 -1
- package/dist/components/conversation/chat-message/chat-message.class.js +2 -2
- package/dist/components/conversation/chat-message/chat-message.styles.js +1 -1
- package/dist/components/conversation/chat-viewport/chat-viewport.styles.js +1 -1
- package/dist/components/conversation/code-block/code-block-shared.js +1 -1
- package/dist/components/conversation/code-block/code-block.styles.js +1 -1
- package/dist/components/conversation/code-block/code-loader.d.ts +1 -1
- package/dist/components/conversation/code-block/code-loader.js +1 -1
- package/dist/components/conversation/code-block/shiki-types.js +1 -1
- package/dist/components/conversation/conversation-item/conversation-item.styles.js +1 -1
- package/dist/components/conversation/generation-metrics/generation-metrics.styles.js +1 -1
- package/dist/components/conversation/markdown/katex-loader.d.ts +4 -4
- package/dist/components/conversation/markdown/katex-loader.js +1 -1
- package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
- package/dist/components/conversation/markdown/markdown-loader.d.ts +1 -1
- package/dist/components/conversation/markdown/markdown-loader.js +1 -1
- package/dist/components/conversation/markdown/markdown-shared.d.ts +6 -1
- package/dist/components/conversation/markdown/markdown-shared.js +5 -4
- package/dist/components/conversation/message-actions/message-actions.class.d.ts +16 -3
- package/dist/components/conversation/message-actions/message-actions.class.js +2 -2
- package/dist/components/conversation/message-actions/message-actions.styles.js +1 -1
- package/dist/components/conversation/message-actions/toolbar-actions.d.ts +3 -1
- package/dist/components/conversation/message-actions/toolbar-actions.js +1 -1
- package/dist/components/conversation/message-feedback/message-feedback.class.d.ts +38 -15
- package/dist/components/conversation/message-feedback/message-feedback.class.js +7 -3
- package/dist/components/conversation/message-feedback/message-feedback.styles.js +1 -1
- package/dist/components/conversation/message-parts/message-parts.class.d.ts +7 -4
- package/dist/components/conversation/message-parts/message-parts.class.js +2 -2
- package/dist/components/conversation/message-parts/message-parts.styles.js +1 -1
- package/dist/components/conversation/model-select/model-select.class.d.ts +5 -2
- package/dist/components/conversation/model-select/model-select.class.js +5 -2
- package/dist/components/conversation/model-settings-panel/model-settings-panel.class.d.ts +3 -5
- package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js +2 -1
- package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +9 -2
- package/dist/components/conversation/prompt-input/prompt-input.class.js +3 -3
- package/dist/components/conversation/prompt-input/prompt-input.styles.js +1 -1
- package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +20 -4
- package/dist/components/conversation/prompt-queue/prompt-queue.class.js +1 -1
- package/dist/components/conversation/prompt-queue/prompt-queue.styles.js +1 -1
- package/dist/components/conversation/push-to-talk/push-to-talk.class.d.ts +17 -8
- package/dist/components/conversation/push-to-talk/push-to-talk.class.js +1 -1
- package/dist/components/conversation/push-to-talk/push-to-talk.styles.js +1 -1
- package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts +6 -3
- package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
- package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js +1 -1
- package/dist/components/conversation/thread-list/thread-list.class.d.ts +14 -4
- package/dist/components/conversation/thread-list/thread-list.class.js +11 -11
- package/dist/components/conversation/thread-list/thread-list.styles.js +1 -1
- package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +1 -1
- package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +12 -4
- package/dist/components/conversation/voice-picker/voice-picker.class.js +5 -2
- package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
- package/dist/components/data/calendar/calendar.class.d.ts +12 -4
- package/dist/components/data/calendar/calendar.class.js +2 -2
- package/dist/components/data/calendar/calendar.styles.js +1 -1
- package/dist/components/data/context-meter/context-meter.class.d.ts +3 -1
- package/dist/components/data/context-meter/context-meter.class.js +3 -3
- package/dist/components/data/data-grid/data-grid.class.d.ts +45 -4
- package/dist/components/data/data-grid/data-grid.class.js +25 -11
- package/dist/components/data/data-grid/data-grid.styles.js +1 -1
- package/dist/components/data/document-library/document-library.class.js +1 -1
- package/dist/components/data/env-list/env-list.class.js +1 -1
- package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +19 -12
- package/dist/components/data/flow-canvas/flow-canvas.class.js +1 -2
- package/dist/components/data/flow-controls/flow-controls.styles.js +1 -1
- package/dist/components/data/flow-run-status/flow-run-status.class.js +1 -1
- package/dist/components/data/gauge/gauge.class.js +1 -1
- package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +1 -1
- package/dist/components/data/heatmap/heatmap.class.js +1 -1
- package/dist/components/data/sequence-strip/sequence-strip.class.js +1 -1
- package/dist/components/data/stat/stat.class.js +1 -1
- package/dist/components/data/table/table.class.d.ts +10 -14
- package/dist/components/data/table/table.class.js +4 -3
- package/dist/components/data/table/table.styles.js +1 -1
- package/dist/components/data/timeline/timeline.class.js +1 -1
- package/dist/components/data/tree/tree-item.styles.js +1 -1
- package/dist/components/data/word-cloud/word-cloud.class.js +1 -1
- package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +7 -2
- package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
- package/dist/components/forms/code-editor/code-editor.class.d.ts +8 -4
- package/dist/components/forms/code-editor/code-editor.class.js +16 -5
- package/dist/components/forms/code-editor/code-editor.styles.js +1 -1
- package/dist/components/forms/color-picker/color-picker.class.d.ts +1 -1
- package/dist/components/forms/color-picker/color-picker.class.js +1 -1
- package/dist/components/forms/combobox/combobox.styles.js +1 -1
- package/dist/components/forms/date-picker/date-input.class.js +1 -1
- package/dist/components/forms/date-picker/date-picker.class.d.ts +9 -2
- package/dist/components/forms/date-picker/date-picker.class.js +4 -4
- package/dist/components/forms/date-picker/date-picker.styles.js +1 -1
- package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
- package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
- package/dist/components/forms/input/input.class.d.ts +11 -4
- package/dist/components/forms/input/input.class.js +7 -1
- package/dist/components/forms/input/time-input.class.d.ts +8 -2
- package/dist/components/forms/input/time-input.class.js +1 -1
- package/dist/components/forms/locale-picker/locale-picker.class.d.ts +17 -3
- package/dist/components/forms/locale-picker/locale-picker.class.js +1 -1
- package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
- package/dist/components/forms/rubric-form/rubric-form.class.js +1 -1
- package/dist/components/forms/select/select.styles.js +1 -1
- package/dist/components/forms/slider/slider.class.js +1 -1
- package/dist/components/forms/swatch-picker/swatch-picker.class.js +1 -1
- package/dist/components/forms/token-input/token-input.class.js +1 -1
- package/dist/components/forms/token-input/token-input.styles.js +1 -1
- package/dist/components/layout/app-rail/app-rail.class.d.ts +6 -4
- package/dist/components/layout/app-rail/app-rail.class.js +4 -3
- package/dist/components/layout/app-rail/app-rail.styles.js +1 -1
- package/dist/components/layout/command-palette/command-palette.class.d.ts +2 -2
- package/dist/components/layout/command-palette/command-palette.class.js +1 -1
- package/dist/components/layout/command-palette/command-palette.styles.js +1 -1
- package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +1 -1
- package/dist/components/layout/details/details.class.d.ts +13 -12
- package/dist/components/layout/details/details.class.js +43 -34
- package/dist/components/layout/details/details.styles.js +1 -1
- package/dist/components/layout/dock-panel/dock-panel.class.d.ts +4 -3
- package/dist/components/layout/dock-panel/dock-panel.class.js +2 -1
- package/dist/components/layout/filter-bar/filter-bar.class.js +2 -2
- package/dist/components/layout/menu/menu-item.class.js +2 -2
- package/dist/components/layout/menu/menu.class.js +1 -1
- package/dist/components/layout/multi-split/multi-split.class.d.ts +10 -5
- package/dist/components/layout/multi-split/multi-split.class.js +2 -1
- package/dist/components/layout/scroller/scroller.class.d.ts +4 -4
- package/dist/components/layout/scroller/scroller.styles.js +1 -1
- package/dist/components/layout/split-panel/split-panel.class.d.ts +3 -2
- package/dist/components/layout/split-panel/split-panel.class.js +3 -2
- package/dist/components/layout/tab-group/tab-group.styles.js +1 -1
- package/dist/components/layout/virtual-list/virtual-list.class.js +2 -2
- package/dist/components/layout/widget/widget.styles.js +1 -1
- package/dist/components/media/file-input/file-input.styles.js +1 -1
- package/dist/components/media/flag/flag.class.js +1 -1
- package/dist/components/media/lightbox/lightbox.styles.js +1 -1
- package/dist/components/media/map/map-loader.js +1 -1
- package/dist/components/media/map/map.class.d.ts +17 -31
- package/dist/components/media/map/map.class.js +1 -1
- package/dist/components/media/qr-code/qr-code-loader.js +1 -1
- package/dist/components/media/qr-code/qr-code.class.d.ts +5 -2
- package/dist/components/media/qr-code/qr-code.class.js +2 -2
- package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +2 -2
- package/dist/components/media/sequence-playback/sequence-playback.class.js +1 -1
- package/dist/components/overlays/alert/alert.styles.js +1 -1
- package/dist/components/overlays/callout/callout.styles.js +1 -1
- package/dist/components/overlays/dialog/dialog.styles.js +1 -1
- package/dist/components/overlays/kbd/kbd.class.js +1 -1
- package/dist/components/overlays/overlay/popover.class.js +1 -1
- package/dist/components/overlays/overlay/tooltip.class.js +1 -1
- package/dist/components/overlays/rating/rating.class.js +1 -1
- package/dist/components/overlays/toast/toast-item.class.js +1 -1
- package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts +11 -5
- package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +3 -3
- package/dist/components/retrieval/graph/graph-loader.js +1 -1
- package/dist/components/retrieval/graph/graph.class.d.ts +1 -1
- package/dist/components/retrieval/graph/graph.class.js +10 -10
- package/dist/components/retrieval/graph-legend/graph-legend.class.d.ts +4 -2
- package/dist/components/retrieval/graph-legend/graph-legend.class.js +1 -1
- package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +14 -6
- package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +7 -5
- package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +3 -2
- package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +4 -3
- package/dist/components/retrieval/knowledge-base/knowledge-base.styles.js +1 -1
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +4 -1
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +2 -1
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +1 -1
- package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +15 -6
- package/dist/components/retrieval/memory-panel/memory-panel.class.js +1 -1
- package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +1 -1
- package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +1 -1
- package/dist/components/retrieval/node-palette/node-palette.class.d.ts +17 -12
- package/dist/components/retrieval/node-palette/node-palette.class.js +2 -2
- package/dist/components/retrieval/node-palette/node-palette.styles.js +1 -1
- package/dist/components/retrieval/path-strip/path-strip.class.js +1 -1
- package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +1 -1
- package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +5 -5
- package/dist/components/retrieval/retrieval-trace/retrieval-trace.class.js +1 -1
- package/dist/components/retrieval/source-picker/source-picker.class.js +1 -1
- package/dist/components/utility/copy-button/copy-button.class.d.ts +2 -1
- package/dist/components/utility/copy-button/copy-button.class.js +1 -1
- package/dist/components/utility/diff-view/diff-view.class.d.ts +4 -1
- package/dist/components/utility/diff-view/diff-view.class.js +1 -1
- package/dist/components/utility/export-button/export-button.class.d.ts +2 -2
- package/dist/components/utility/export-button/export-button.class.js +1 -1
- package/dist/components/utility/export-button/export-button.styles.js +1 -1
- package/dist/components/utility/format/format-date.class.js +1 -1
- package/dist/components/utility/format/relative-time.class.js +1 -1
- package/dist/components/utility/icon/dompurify-loader.js +1 -1
- package/dist/components/utility/icon/icon-library.js +1 -1
- package/dist/components/utility/intersection-observer/intersection-observer.class.js +1 -1
- package/dist/components/utility/json-viewer/json-viewer.class.d.ts +3 -1
- package/dist/components/utility/json-viewer/json-viewer.class.js +5 -5
- package/dist/components/utility/known-date/known-date.class.js +1 -1
- package/dist/components/utility/mention-popover/mention-popover.class.d.ts +29 -44
- package/dist/components/utility/mention-popover/mention-popover.class.js +1 -1
- package/dist/components/utility/mutation-observer/mutation-observer.class.js +1 -1
- package/dist/components/viewers/calendar-viewer/calendar-loader.js +1 -1
- package/dist/components/viewers/document-compare/document-compare.class.d.ts +11 -8
- package/dist/components/viewers/document-compare/document-compare.class.js +2 -2
- package/dist/components/viewers/document-preview/document-preview.class.d.ts +4 -2
- package/dist/components/viewers/document-preview/document-preview.class.js +4 -4
- package/dist/components/viewers/document-preview/document-preview.styles.js +1 -1
- package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +2 -0
- package/dist/components/viewers/document-viewer/document-viewer.styles.js +1 -1
- package/dist/components/viewers/docx-viewer/docx-loader.js +1 -1
- package/dist/components/viewers/docx-viewer/docx-viewer.class.js +1 -1
- package/dist/components/viewers/ebook-viewer/ebook-loader.d.ts +1 -1
- package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +2 -2
- package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
- package/dist/components/viewers/email-viewer/email-loader.js +1 -1
- package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +1 -1
- package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -2
- package/dist/components/viewers/html-viewer/dompurify-loader.js +1 -1
- package/dist/components/viewers/notebook-viewer/dompurify-loader.js +1 -1
- package/dist/components/viewers/pdf-viewer/pdf-loader.js +1 -1
- package/dist/components/viewers/pptx-viewer/pptx-loader.js +1 -1
- package/dist/components/viewers/spreadsheet-viewer/spreadsheet-loader.js +1 -1
- package/dist/components/viewers/svg-viewer/dompurify-loader.js +1 -1
- package/dist/components/viewers/viewer-loading.js +1 -1
- package/dist/components/viewers/viewer-search-limits.d.ts +2 -0
- package/dist/components/viewers/viewer-search-limits.js +1 -1
- package/dist/custom-elements-jsx.d.ts +1 -1
- package/dist/events.d.ts +13 -6
- package/dist/internal/aria-controls.d.ts +16 -13
- package/dist/internal/aria-controls.js +1 -1
- package/dist/internal/aria-reflection.js +1 -1
- package/dist/internal/catalog-picker.d.ts +2 -2
- package/dist/internal/catalog-picker.js +1 -1
- package/dist/internal/chart-annotation-registration.d.ts +1 -0
- package/dist/internal/chart-annotation-registration.js +1 -0
- package/dist/internal/data-descriptors.d.ts +13 -0
- package/dist/internal/data-descriptors.js +1 -0
- package/dist/internal/default-strings.generated.d.ts +1 -1
- package/dist/internal/default-strings.generated.js +2 -2
- package/dist/internal/dev-mode-attribute-warning.js +1 -1
- package/dist/internal/element-internals.d.ts +4 -3
- package/dist/internal/element-internals.js +1 -1
- package/dist/internal/highlight-collection.d.ts +2 -0
- package/dist/internal/highlight-collection.js +1 -1
- package/dist/internal/localization-types.d.ts +1 -1
- package/dist/internal/localization.js +2 -2
- package/dist/internal/lyra-element.d.ts +10 -1
- package/dist/internal/lyra-element.js +2 -1
- package/dist/internal/package-metadata.d.ts +1 -1
- package/dist/internal/package-metadata.js +1 -1
- package/dist/internal/papaparse-loader.js +1 -1
- package/dist/internal/pseudo-localization.js +1 -1
- package/dist/internal/safe-css.js +1 -1
- package/dist/internal/step-value.d.ts +6 -0
- package/dist/internal/step-value.js +1 -0
- package/dist/internal/text-quote.js +1 -1
- package/dist/lyra.d.ts +1 -1
- package/dist/svelte.d.ts +1 -1
- package/dist/translations/ar.js +2 -2
- package/dist/translations/de.js +2 -2
- package/dist/translations/es.js +2 -2
- package/dist/translations/fa.js +2 -2
- package/dist/translations/fr.js +2 -2
- package/dist/translations/he.js +2 -2
- package/dist/translations/ja.js +2 -2
- package/dist/translations/pseudo/ar-XB.js +1 -1
- package/dist/translations/pt-BR.js +2 -2
- package/dist/translations/ru.js +2 -2
- package/dist/translations/zh-CN.js +2 -2
- package/dist/vue.d.ts +1 -1
- package/llms/components/lr-accordion-item.md +6 -5
- package/llms/components/lr-accordion.md +6 -5
- package/llms/components/lr-activity-feed.md +6 -5
- package/llms/components/lr-agent-run.md +1 -1
- package/llms/components/lr-agent-workspace.md +3 -2
- package/llms/components/lr-attachment-chip.md +2 -3
- package/llms/components/lr-audio-visualizer.md +9 -6
- package/llms/components/lr-bar-chart.md +2 -2
- package/llms/components/lr-box-plot.md +9 -6
- package/llms/components/lr-bubble-chart.md +2 -2
- package/llms/components/lr-calendar.md +10 -4
- package/llms/components/lr-chart.md +11 -5
- package/llms/components/lr-chat-composer.md +2 -1
- package/llms/components/lr-chunk-inspector.md +2 -2
- package/llms/components/lr-code-block-core.md +4 -4
- package/llms/components/lr-code-block.md +10 -14
- package/llms/components/lr-code-editor.md +2 -0
- package/llms/components/lr-copy-button.md +4 -1
- package/llms/components/lr-data-grid.md +11 -2
- package/llms/components/lr-date-input.md +4 -0
- package/llms/components/lr-date-picker.md +5 -1
- package/llms/components/lr-details.md +6 -5
- package/llms/components/lr-diff-view.md +6 -0
- package/llms/components/lr-document-compare.md +6 -2
- package/llms/components/lr-document-preview.md +11 -3
- package/llms/components/lr-document-viewer.md +5 -1
- package/llms/components/lr-docx-viewer.md +6 -0
- package/llms/components/lr-doughnut-chart.md +2 -2
- package/llms/components/lr-ebook-viewer.md +8 -3
- package/llms/components/lr-email-viewer.md +5 -0
- package/llms/components/lr-eval-dataset.md +2 -2
- package/llms/components/lr-export-button.md +9 -0
- package/llms/components/lr-file-input.md +5 -8
- package/llms/components/lr-format-date.md +3 -1
- package/llms/components/lr-graph-legend.md +4 -2
- package/llms/components/lr-grounding-summary.md +8 -8
- package/llms/components/lr-histogram.md +2 -2
- package/llms/components/lr-ingestion-queue.md +1 -1
- package/llms/components/lr-intersection-observer.md +9 -0
- package/llms/components/lr-json-viewer.md +6 -1
- package/llms/components/lr-knowledge-base.md +10 -1
- package/llms/components/lr-line-chart.md +2 -2
- package/llms/components/lr-lite-chart.md +8 -5
- package/llms/components/lr-locale-picker.md +6 -0
- package/llms/components/lr-map.md +15 -5
- package/llms/components/lr-markdown.md +7 -4
- package/llms/components/lr-media-card.md +0 -6
- package/llms/components/lr-mention-popover.md +12 -10
- package/llms/components/lr-message-actions.md +10 -3
- package/llms/components/lr-message-feedback.md +20 -7
- package/llms/components/lr-message-parts.md +3 -1
- package/llms/components/lr-model-select.md +5 -2
- package/llms/components/lr-multi-split.md +5 -1
- package/llms/components/lr-mutation-observer.md +8 -0
- package/llms/components/lr-node-palette.md +5 -2
- package/llms/components/lr-pie-chart.md +2 -2
- package/llms/components/lr-polar-area-chart.md +2 -2
- package/llms/components/lr-prompt-input.md +7 -3
- package/llms/components/lr-prompt-queue.md +6 -0
- package/llms/components/lr-push-to-talk.md +5 -0
- package/llms/components/lr-qr-code.md +6 -0
- package/llms/components/lr-radar-chart.md +2 -2
- package/llms/components/lr-rating.md +5 -0
- package/llms/components/lr-relative-time.md +2 -0
- package/llms/components/lr-result-card.md +3 -3
- package/llms/components/lr-result-field.md +3 -3
- package/llms/components/lr-retrieval-results.md +1 -1
- package/llms/components/lr-scatter-chart.md +2 -2
- package/llms/components/lr-scroller.md +5 -5
- package/llms/components/lr-sequence-playback.md +1 -2
- package/llms/components/lr-slider.md +3 -1
- package/llms/components/lr-streaming-text.md +2 -3
- package/llms/components/lr-terminal.md +14 -5
- package/llms/components/lr-thinking-panel.md +3 -1
- package/llms/components/lr-thread-list.md +20 -1
- package/llms/components/lr-tool-call-chip.md +2 -2
- package/llms/components/lr-tool-param-form.md +2 -2
- package/llms/components/lr-tool-result-view.md +2 -3
- package/llms/components/lr-tool-select-dialog.md +2 -2
- package/llms/components/lr-voice-picker.md +7 -2
- package/llms/components/lr-widget-renderer.md +12 -13
- package/llms/peers.md +5 -5
- package/llms/shared.md +74 -63
- package/llms-full.txt +629 -247
- package/package.json +21 -14
- package/vscode-css-data.json +1 -1
- package/vscode-html-data.json +1 -1
- package/web-types.json +1 -1
- package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.d.ts +0 -1
- package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.js +0 -1
- package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.d.ts +0 -1
- package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.js +0 -1
- package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.d.ts +0 -1
- package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.js +0 -1
|
@@ -5,8 +5,10 @@ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from
|
|
|
5
5
|
* in start order, status-toned bars (Langfuse timeline / Temporal
|
|
6
6
|
* event-history style).
|
|
7
7
|
*
|
|
8
|
-
* Public collection properties take bounded
|
|
9
|
-
*
|
|
8
|
+
* Public collection properties take bounded readonly snapshots. `spans` keeps admitted item
|
|
9
|
+
* identities only long enough for the shared descriptor-safe projection to copy its closed
|
|
10
|
+
* display schema; later rendering never re-reads an admitted source row. Create a new collection
|
|
11
|
+
* and reassign it after changes; mutating the assigned array does not update the view.
|
|
10
12
|
*
|
|
11
13
|
* @customElement lr-span-waterfall
|
|
12
14
|
* @event lr-span-select - `detail: { spanId }` — a bar/row was activated (click, Enter, Space).
|
|
@@ -17,8 +19,9 @@ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from
|
|
|
17
19
|
* @csspart row - One span's row.
|
|
18
20
|
* @csspart name - The span's name (the row's name gutter).
|
|
19
21
|
* @csspart bar-track - The bar's positioning track.
|
|
20
|
-
* @csspart bar - The interactive, focusable status-toned bar (`role` via `<button>`), with
|
|
21
|
-
*
|
|
22
|
+
* @csspart bar - The interactive, focusable status-toned bar (`role` via `<button>`), with the
|
|
23
|
+
* shared `--lr-icon-button-size` minimum target in both axes even when its duration would paint
|
|
24
|
+
* more narrowly.
|
|
22
25
|
* @csspart meta - Secondary row info (status/duration), shown inline under 480px.
|
|
23
26
|
* @csspart status-text - The visible status label.
|
|
24
27
|
* @csspart duration - The formatted duration text.
|
|
@@ -42,7 +45,11 @@ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from
|
|
|
42
45
|
* @status stable
|
|
43
46
|
* @since 4.0.0
|
|
44
47
|
*/
|
|
45
|
-
export declare class LyraSpanWaterfall extends LyraElement<LyraSpanWaterfallEventMap>{protected static readonly ownedCollectionProperties:readonly string[];
|
|
48
|
+
export declare class LyraSpanWaterfall extends LyraElement<LyraSpanWaterfallEventMap>{protected static readonly ownedCollectionProperties:readonly string[];
|
|
49
|
+
/** Span sources can carry opaque provider metadata; the shared normalizer copies only its closed
|
|
50
|
+
* display schema once, so cloning each whole source record would both lose opaque identity and
|
|
51
|
+
* create an unsafe second traversal. */
|
|
52
|
+
protected static readonly identityCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];
|
|
46
53
|
/** Identical contract to `<lr-trace-tree>.spans`; rows sort by `startMs` (ties keep array order).
|
|
47
54
|
* The controlled `activeSpanId` reserves a position inside the shared 500-row ceiling. Foreign
|
|
48
55
|
* runtime `kind`/`status` values normalize to `'other'`/`'pending'` before rendering. */
|
|
@@ -51,4 +58,4 @@ spans:readonly LyraSpan[];activeSpanId:string|null;
|
|
|
51
58
|
* `LyraSpan.startMs`/`endMs` -- never a wall-clock timestamp). Both `null` (the default) fits
|
|
52
59
|
* the whole trace; a non-null NaN (e.g. an unparsable attribute) is normalized the same way as
|
|
53
60
|
* `null` by `viewWindow()` rather than poisoning the axis/bar math with NaN. */
|
|
54
|
-
viewStartMs:number|null;viewEndMs:number|null;hideAxis:boolean;label:string;private focusedId;private sortedSource?;private sortedActiveSpanId;private sortedCache;private sortedCacheTruncated;private limitAnnouncementSink?;private limitAnnouncementInitialized;private previouslyTruncated;private liveRegion?;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;private syncLimitAnnouncementSink;private sortedSpans;private viewWindow;private barGeometry;private formatDuration;private focusRow;private announceFocus;private selectRow;private onKeyDown;protected willUpdate(changed:PropertyValues):void;private renderedBarById;protected updated(changed:PropertyValues):void;private renderAxis;private renderRow;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-span-waterfall':LyraSpanWaterfall;}}
|
|
61
|
+
viewStartMs:number|null;viewEndMs:number|null;hideAxis:boolean;label:string;private focusedId;private sortedSource?;private sortedActiveSpanId;private sortedCache;private sortedCacheTruncated;private limitAnnouncementSink?;private limitAnnouncementInitialized;private previouslyTruncated;private liveRegion?;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;private syncLimitAnnouncementSink;private sortedSpans;private viewWindow;private barGeometry;private formatDuration;private projectionLimitText;private focusRow;private announceFocus;private selectRow;private onKeyDown;protected willUpdate(changed:PropertyValues):void;private renderedBarById;protected updated(changed:PropertyValues):void;private renderAxis;private renderRow;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-span-waterfall':LyraSpanWaterfall;}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{finiteRatio,finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{hostAriaLabel}from"../../../internal/a11y.js";import{styles}from"./span-waterfall.styles.js";import{MAX_RENDERED_LYRA_SPANS,normalizeLyraSpans}from"../trace-tree/span.js";import{LYRA_DEFAULT_accessibleLabelSeparator,LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_noData,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_spanKindAgent,LYRA_DEFAULT_spanKindEmbedding,LYRA_DEFAULT_spanKindLlm,LYRA_DEFAULT_spanKindOther,LYRA_DEFAULT_spanKindRetriever,LYRA_DEFAULT_spanKindTool,LYRA_DEFAULT_spanProjectionLimit,LYRA_DEFAULT_spanStartedAtOffset,LYRA_DEFAULT_spanWaterfall,LYRA_DEFAULT_statusDenied,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess}from"../../../internal/default-strings.generated.js";const KIND_LABEL_KEY={agent:"spanKindAgent",llm:"spanKindLlm",tool:"spanKindTool",retriever:"spanKindRetriever",embedding:"spanKindEmbedding",other:"spanKindOther"},STATUS_LABEL_KEY={pending:"statusPending",running:"statusRunning",success:"statusSuccess",error:"statusError",denied:"statusDenied"},STATUS_TONE={success:"success",error:"danger",denied:"warning",running:"accent",pending:"neutral"};function niceStep(span,count){if(span<=0)return 1;const rough=span/Math.max(1,count),magnitude=10**Math.floor(Math.log10(rough)),residual=rough/magnitude;return(residual<1.5?1:residual<3?2:residual<7?5:10)*magnitude}function axisTicks(start,end,count=5){const step=niceStep(end-start,count);if(!Number.isFinite(step)||step<=0)return[start,end];const first=Math.ceil(start/step)*step;if(!Number.isFinite(first))return[start,end];const ticks=[];for(let index=0;index<=count+2;index++){const value=first+index*step;if(!Number.isFinite(value)||value>end+step/2)break;const rounded=Math.round(value/step)*step;Number.isFinite(rounded)&&(ticks.length===0||rounded>ticks[ticks.length-1])&&ticks.push(rounded)}return ticks}class LyraSpanWaterfall extends LyraElement{constructor(){super(...arguments),this.spans=[],this.activeSpanId=null,this.viewStartMs=null,this.viewEndMs=null,this.hideAxis=!1,this.label="",this.focusedId=null,this.sortedActiveSpanId=null,this.sortedCache=[],this.sortedCacheTruncated=!1,this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.onKeyDown=e=>{const view=this.viewWindow(),rows=this.sortedSpans().filter(span=>this.barGeometry(span,view).visible);if(rows.length===0)return;const currentIndex=rows.findIndex(s=>s.id===this.focusedId),idx=currentIndex>=0?currentIndex:0;switch(e.key){case"ArrowDown":e.preventDefault(),this.focusRow(rows[Math.min(rows.length-1,idx+1)]);break;case"ArrowUp":e.preventDefault(),this.focusRow(rows[Math.max(0,idx-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" ":e.preventDefault(),this.selectRow(rows[idx].id);break;default:return}}}static{this.defaultStrings={...super.defaultStrings,accessibleLabelSeparator:LYRA_DEFAULT_accessibleLabelSeparator,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,noData:LYRA_DEFAULT_noData,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,spanKindAgent:LYRA_DEFAULT_spanKindAgent,spanKindEmbedding:LYRA_DEFAULT_spanKindEmbedding,spanKindLlm:LYRA_DEFAULT_spanKindLlm,spanKindOther:LYRA_DEFAULT_spanKindOther,spanKindRetriever:LYRA_DEFAULT_spanKindRetriever,spanKindTool:LYRA_DEFAULT_spanKindTool,spanProjectionLimit:LYRA_DEFAULT_spanProjectionLimit,spanStartedAtOffset:LYRA_DEFAULT_spanStartedAtOffset,spanWaterfall:LYRA_DEFAULT_spanWaterfall,statusDenied:LYRA_DEFAULT_statusDenied,statusError:LYRA_DEFAULT_statusError,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess}}static{this.ownedCollectionProperties=Object.freeze(["spans"])}static{this.styles=[LyraElement.styles,styles]}connectedCallback(){super.connectedCallback(),this.syncLimitAnnouncementSink(),this.limitAnnouncementInitialized=this.hasUpdated,this.previouslyTruncated=this.sortedCacheTruncated}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}))}sortedSpans(){if(this.sortedSource===this.spans&&this.sortedActiveSpanId===this.activeSpanId)return this.sortedCache;this.sortedSource=this.spans,this.sortedActiveSpanId=this.activeSpanId;const projection=normalizeLyraSpans(this.spans,this.activeSpanId);return this.sortedCacheTruncated=projection.truncated,this.sortedCache=projection.spans.map((s,i)=>({s,i})).sort((a,b)=>a.s.startMs-b.s.startMs||a.i-b.i).map(x=>x.s),this.sortedCache}viewWindow(){const extentEnd=this.sortedSpans().reduce((m,s)=>Math.max(m,s.endMs??s.startMs,s.startMs),0),fallbackEnd=Math.max(extentEnd,1),start=this.viewStartMs==null?0:finiteRange(this.viewStartMs,0,0,Number.MAX_SAFE_INTEGER-1),end=this.viewEndMs==null?fallbackEnd:finiteRange(this.viewEndMs,fallbackEnd,0,Number.MAX_SAFE_INTEGER);return{start,end:end>start?end:start+1}}barGeometry(span,view){const endMs=span.endMs??(span.status==="running"?view.end:span.startMs),visible=span.startMs<=view.end&&endMs>=view.start,clampedStart=Math.max(view.start,span.startMs),clampedEnd=Math.min(view.end,Math.max(endMs,span.startMs)),startPct=finiteRatio(clampedStart,view.start,view.end)*100,endPct=finiteRatio(clampedEnd,view.start,view.end)*100;return{startPct,widthPct:Math.max(0,endPct-startPct),visible}}formatDuration(ms){if(ms==null||!Number.isFinite(ms))return"";const milliseconds=Math.max(0,ms);return milliseconds<1e3?getNumberFormat(this.effectiveLocale,{style:"unit",unit:"millisecond",unitDisplay:"short",maximumFractionDigits:0}).format(milliseconds):getNumberFormat(this.effectiveLocale,{style:"unit",unit:"second",unitDisplay:"short",maximumFractionDigits:1}).format(milliseconds/1e3)}focusRow(span){if(!span)return;const previous=this.renderRoot.querySelector('[part="bar"][tabindex="0"]');this.focusedId=span.id,this.announceFocus(span),previous?.setAttribute("tabindex","-1");const next=this.renderedBarById(span.id);next?.setAttribute("tabindex","0"),next?.focus()}announceFocus(span){const parts=[span.name,this.localize(KIND_LABEL_KEY[span.kind]),this.localize(STATUS_LABEL_KEY[span.status]),this.localize("spanStartedAtOffset",void 0,{value:this.formatDuration(span.startMs)||this.localize("durationMilliseconds",void 0,{value:0})})];span.endMs!=null&&parts.push(this.formatDuration(span.endMs-span.startMs)),this.liveRegion?.announce(parts.join(this.localize("accessibleLabelSeparator")),{force:!0})}selectRow(id){this.focusedId=id,this.emit("lr-span-select",{spanId:id})}willUpdate(changed){if(super.willUpdate(changed),(changed.has("spans")||changed.has("activeSpanId"))&&(this.sortedSource=void 0),changed.has("spans")||changed.has("viewStartMs")||changed.has("viewEndMs")||changed.has("activeSpanId")){const view=this.viewWindow(),ids=new Set(this.sortedSpans().filter(span=>this.barGeometry(span,view).visible).map(span=>span.id));(this.focusedId==null||!ids.has(this.focusedId))&&(this.focusedId=this.activeSpanId&&ids.has(this.activeSpanId)?this.activeSpanId:this.sortedSpans()[0]?.id??null),this.focusedId!==null&&!ids.has(this.focusedId)&&(this.focusedId=this.sortedSpans().find(span=>ids.has(span.id))?.id??null),changed.has("activeSpanId")&&this.activeSpanId&&ids.has(this.activeSpanId)&&(this.focusedId=this.activeSpanId)}}renderedBarById(id){const ownerCss=this.ownerDocument.defaultView?.CSS;return typeof ownerCss?.escape=="function"?this.renderRoot.querySelector(`[data-id="${ownerCss.escape(id)}"]`):Array.from(this.renderRoot.querySelectorAll("[data-id]")).find(element=>element.dataset.id===id)??null}updated(changed){if(super.updated(changed),changed.has("activeSpanId")&&this.activeSpanId){const bar=this.renderedBarById(this.activeSpanId);if(bar&&!bar.hidden){const ownerWindow=bar.ownerDocument.defaultView,reducedMotion=!ownerWindow||prefersReducedMotion(ownerWindow);bar.scrollIntoView({block:"nearest",behavior:reducedMotion?"auto":"smooth"})}}this.limitAnnouncementInitialized&&this.sortedCacheTruncated&&!this.previouslyTruncated&&this.limitAnnouncementSink?.announce(this.localize("spanProjectionLimit",void 0,{count:MAX_RENDERED_LYRA_SPANS})),this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.sortedCacheTruncated}renderAxis(view){const ticks=axisTicks(view.start,view.end);return html`
|
|
1
|
+
var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{finiteRatio,finiteRange}from"../../../internal/numbers.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{hostAriaLabel}from"../../../internal/a11y.js";import{styles}from"./span-waterfall.styles.js";import{MAX_RENDERED_LYRA_SPANS,normalizeLyraSpans}from"../trace-tree/span.js";import{LYRA_DEFAULT_accessibleLabelSeparator,LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_durationMilliseconds,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_noData,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_spanKindAgent,LYRA_DEFAULT_spanKindEmbedding,LYRA_DEFAULT_spanKindLlm,LYRA_DEFAULT_spanKindOther,LYRA_DEFAULT_spanKindRetriever,LYRA_DEFAULT_spanKindTool,LYRA_DEFAULT_spanProjectionLimit,LYRA_DEFAULT_spanStartedAtOffset,LYRA_DEFAULT_spanWaterfall,LYRA_DEFAULT_statusDenied,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess,LYRA_DEFAULT_tokensIn,LYRA_DEFAULT_tokensOut}from"../../../internal/default-strings.generated.js";const KIND_LABEL_KEY={agent:"spanKindAgent",llm:"spanKindLlm",tool:"spanKindTool",retriever:"spanKindRetriever",embedding:"spanKindEmbedding",other:"spanKindOther"},STATUS_LABEL_KEY={pending:"statusPending",running:"statusRunning",success:"statusSuccess",error:"statusError",denied:"statusDenied"},STATUS_TONE={success:"success",error:"danger",denied:"warning",running:"accent",pending:"neutral"};function niceStep(span,count){if(span<=0)return 1;const rough=span/Math.max(1,count),magnitude=10**Math.floor(Math.log10(rough)),residual=rough/magnitude;return(residual<1.5?1:residual<3?2:residual<7?5:10)*magnitude}function axisTicks(start,end,count=5){const step=niceStep(end-start,count);if(!Number.isFinite(step)||step<=0)return[start,end];const first=Math.ceil(start/step)*step;if(!Number.isFinite(first))return[start,end];const ticks=[];for(let index=0;index<=count+2;index++){const value=first+index*step;if(!Number.isFinite(value)||value>end+step/2)break;const rounded=Math.round(value/step)*step;Number.isFinite(rounded)&&(ticks.length===0||rounded>ticks[ticks.length-1])&&ticks.push(rounded)}return ticks}class LyraSpanWaterfall extends LyraElement{constructor(){super(...arguments),this.spans=[],this.activeSpanId=null,this.viewStartMs=null,this.viewEndMs=null,this.hideAxis=!1,this.label="",this.focusedId=null,this.sortedActiveSpanId=null,this.sortedCache=[],this.sortedCacheTruncated=!1,this.limitAnnouncementInitialized=!1,this.previouslyTruncated=!1,this.onKeyDown=e=>{const view=this.viewWindow(),rows=this.sortedSpans().filter(span=>this.barGeometry(span,view).visible);if(rows.length===0)return;const currentIndex=rows.findIndex(s=>s.id===this.focusedId),idx=currentIndex>=0?currentIndex:0;switch(e.key){case"ArrowDown":e.preventDefault(),this.focusRow(rows[Math.min(rows.length-1,idx+1)]);break;case"ArrowUp":e.preventDefault(),this.focusRow(rows[Math.max(0,idx-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" ":e.preventDefault(),this.selectRow(rows[idx].id);break;default:return}}}static{this.defaultStrings={...super.defaultStrings,accessibleLabelSeparator:LYRA_DEFAULT_accessibleLabelSeparator,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,noData:LYRA_DEFAULT_noData,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,spanKindAgent:LYRA_DEFAULT_spanKindAgent,spanKindEmbedding:LYRA_DEFAULT_spanKindEmbedding,spanKindLlm:LYRA_DEFAULT_spanKindLlm,spanKindOther:LYRA_DEFAULT_spanKindOther,spanKindRetriever:LYRA_DEFAULT_spanKindRetriever,spanKindTool:LYRA_DEFAULT_spanKindTool,spanProjectionLimit:LYRA_DEFAULT_spanProjectionLimit,spanStartedAtOffset:LYRA_DEFAULT_spanStartedAtOffset,spanWaterfall:LYRA_DEFAULT_spanWaterfall,statusDenied:LYRA_DEFAULT_statusDenied,statusError:LYRA_DEFAULT_statusError,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess,tokensIn:LYRA_DEFAULT_tokensIn,tokensOut:LYRA_DEFAULT_tokensOut}}static{this.ownedCollectionProperties=Object.freeze(["spans"])}static{this.identityCollectionProperties=Object.freeze(["spans"])}static{this.styles=[LyraElement.styles,styles]}connectedCallback(){super.connectedCallback(),this.syncLimitAnnouncementSink(),this.limitAnnouncementInitialized=this.hasUpdated,this.previouslyTruncated=this.sortedCacheTruncated}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}))}sortedSpans(){if(this.sortedSource===this.spans&&this.sortedActiveSpanId===this.activeSpanId)return this.sortedCache;this.sortedSource=this.spans,this.sortedActiveSpanId=this.activeSpanId;const projection=normalizeLyraSpans(this.spans,this.activeSpanId);return this.sortedCacheTruncated=projection.truncated,this.sortedCache=projection.spans.map((s,i)=>({s,i})).sort((a,b)=>a.s.startMs-b.s.startMs||a.i-b.i).map(x=>x.s),this.sortedCache}viewWindow(){const extentEnd=this.sortedSpans().reduce((m,s)=>Math.max(m,s.endMs??s.startMs,s.startMs),0),fallbackEnd=Math.max(extentEnd,1),start=this.viewStartMs==null?0:finiteRange(this.viewStartMs,0,0,Number.MAX_SAFE_INTEGER-1),end=this.viewEndMs==null?fallbackEnd:finiteRange(this.viewEndMs,fallbackEnd,0,Number.MAX_SAFE_INTEGER);return{start,end:end>start?end:start+1}}barGeometry(span,view){const endMs=span.endMs??(span.status==="running"?view.end:span.startMs),visible=span.startMs<=view.end&&endMs>=view.start,clampedStart=Math.max(view.start,span.startMs),clampedEnd=Math.min(view.end,Math.max(endMs,span.startMs)),startPct=finiteRatio(clampedStart,view.start,view.end)*100,endPct=finiteRatio(clampedEnd,view.start,view.end)*100;return{startPct,widthPct:Math.max(0,endPct-startPct),visible}}formatDuration(ms){if(ms==null||!Number.isFinite(ms))return"";const milliseconds=Math.max(0,ms);return milliseconds<1e3?getNumberFormat(this.effectiveLocale,{style:"unit",unit:"millisecond",unitDisplay:"short",maximumFractionDigits:0}).format(milliseconds):getNumberFormat(this.effectiveLocale,{style:"unit",unit:"second",unitDisplay:"short",maximumFractionDigits:1}).format(milliseconds/1e3)}projectionLimitText(){return this.localize("spanProjectionLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(MAX_RENDERED_LYRA_SPANS)})}focusRow(span){if(!span)return;const previous=this.renderRoot.querySelector('[part="bar"][tabindex="0"]');this.focusedId=span.id,this.announceFocus(span),previous?.setAttribute("tabindex","-1");const next=this.renderedBarById(span.id);next?.setAttribute("tabindex","0"),next?.focus()}announceFocus(span){const parts=[span.name,this.localize(KIND_LABEL_KEY[span.kind]),this.localize(STATUS_LABEL_KEY[span.status]),this.localize("spanStartedAtOffset",void 0,{value:this.formatDuration(span.startMs)||this.localize("durationMilliseconds",void 0,{value:0})})];span.endMs!=null&&parts.push(this.formatDuration(span.endMs-span.startMs)),this.liveRegion?.announce(parts.join(this.localize("accessibleLabelSeparator")),{force:!0})}selectRow(id){this.focusedId=id,this.emit("lr-span-select",{spanId:id})}willUpdate(changed){if(super.willUpdate(changed),(changed.has("spans")||changed.has("activeSpanId"))&&(this.sortedSource=void 0),changed.has("spans")||changed.has("viewStartMs")||changed.has("viewEndMs")||changed.has("activeSpanId")){const view=this.viewWindow(),ids=new Set(this.sortedSpans().filter(span=>this.barGeometry(span,view).visible).map(span=>span.id));(this.focusedId==null||!ids.has(this.focusedId))&&(this.focusedId=this.activeSpanId&&ids.has(this.activeSpanId)?this.activeSpanId:this.sortedSpans()[0]?.id??null),this.focusedId!==null&&!ids.has(this.focusedId)&&(this.focusedId=this.sortedSpans().find(span=>ids.has(span.id))?.id??null),changed.has("activeSpanId")&&this.activeSpanId&&ids.has(this.activeSpanId)&&(this.focusedId=this.activeSpanId)}}renderedBarById(id){const ownerCss=this.ownerDocument.defaultView?.CSS;return typeof ownerCss?.escape=="function"?this.renderRoot.querySelector(`[data-id="${ownerCss.escape(id)}"]`):Array.from(this.renderRoot.querySelectorAll("[data-id]")).find(element=>element.dataset.id===id)??null}updated(changed){if(super.updated(changed),changed.has("activeSpanId")&&this.activeSpanId){const bar=this.renderedBarById(this.activeSpanId);if(bar&&!bar.hidden){const ownerWindow=bar.ownerDocument.defaultView,reducedMotion=!ownerWindow||prefersReducedMotion(ownerWindow);bar.scrollIntoView({block:"nearest",behavior:reducedMotion?"auto":"smooth"})}}this.limitAnnouncementInitialized&&this.sortedCacheTruncated&&!this.previouslyTruncated&&this.limitAnnouncementSink?.announce(this.projectionLimitText()),this.limitAnnouncementInitialized=!0,this.previouslyTruncated=this.sortedCacheTruncated}renderAxis(view){const ticks=axisTicks(view.start,view.end);return html`
|
|
2
2
|
<div part="axis" aria-hidden="true">
|
|
3
3
|
${ticks.map(t=>{const pct=finiteRatio(t,view.start,view.end)*100;return pct<0||pct>100?nothing:html`<span
|
|
4
4
|
part="tick"
|
|
@@ -21,7 +21,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
21
21
|
tabindex=${tabbable?"0":"-1"}
|
|
22
22
|
aria-current=${isActive?"true":"false"}
|
|
23
23
|
aria-label=${fragments.join(this.localize("accessibleLabelSeparator"))}
|
|
24
|
-
style=${
|
|
24
|
+
style=${`--_lr-span-waterfall-start:${startPct}%;--_lr-span-waterfall-width:${widthPct}%`}
|
|
25
25
|
@click=${()=>this.selectRow(span.id)}
|
|
26
26
|
@focus=${()=>{this.focusedId=span.id}}
|
|
27
27
|
></button>
|
|
@@ -41,6 +41,6 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
41
41
|
${!this.hideAxis&&rows.length>0?this.renderAxis(view):nothing}
|
|
42
42
|
${rows.length===0?html`<lr-empty part="empty" heading=${this.localize("noData")}></lr-empty>`:rows.map((span,index)=>this.renderRow(span,view,index+1,rows.length,firstId))}
|
|
43
43
|
</div>
|
|
44
|
-
${this.sortedCacheTruncated?html`<p part="limit" role="note">${this.
|
|
44
|
+
${this.sortedCacheTruncated?html`<p part="limit" role="note">${this.projectionLimitText()}</p>`:nothing}
|
|
45
45
|
<lr-live-region part="live-region" mode="polite"></lr-live-region>
|
|
46
46
|
`}}__decorate([property({attribute:!1})],LyraSpanWaterfall.prototype,"spans",void 0),__decorate([property({attribute:"active-span-id"})],LyraSpanWaterfall.prototype,"activeSpanId",void 0),__decorate([property({type:Number,attribute:"view-start-ms"})],LyraSpanWaterfall.prototype,"viewStartMs",void 0),__decorate([property({type:Number,attribute:"view-end-ms"})],LyraSpanWaterfall.prototype,"viewEndMs",void 0),__decorate([property({type:Boolean,attribute:"hide-axis"})],LyraSpanWaterfall.prototype,"hideAxis",void 0),__decorate([property()],LyraSpanWaterfall.prototype,"label",void 0),__decorate([query("lr-live-region")],LyraSpanWaterfall.prototype,"liveRegion",void 0);export{LyraSpanWaterfall};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);--_lr-span-waterfall-name-width:var(--lr-size-8rem);display:block;container-type:inline-size}[part=base]{font-size:var(--lr-font-size-sm);color:var(--lr-color-text);flex-direction:column;display:flex}[part=axis]{block-size:var(--lr-size-1-25rem);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border);margin-inline-start:calc(var(--lr-span-waterfall-name-width,var(--_lr-span-waterfall-name-width)) + var(--lr-space-xs));position:relative;overflow:hidden}[part=tick]{border-inline-start:var(--lr-border-width-thin) solid var(--lr-color-border);position:absolute;inset-block:0}[part=tick-label]{font-size:var(--lr-font-size-2xs);color:var(--lr-color-text-quiet);white-space:nowrap;position:absolute;inset-inline-start:var(--lr-space-xs)}[part=tick][data-edge=end] [part=tick-label]{inset-inline-start:auto;inset-inline-end:var(--lr-space-xs)}[part=row]{grid-template-columns:var(--lr-span-waterfall-name-width,var(--_lr-span-waterfall-name-width)) 1fr;align-items:center;gap:var(--lr-space-xs);padding-block:var(--lr-space-2xs);min-block-size:var(--lr-size-1-75rem);display:grid}[part=row][data-active]{background:var(--lr-span-waterfall-row-active-bg,var(--lr-color-brand-quiet))}[part=name]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}[part=bar-track]{block-size:var(--lr-
|
|
1
|
+
import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);--_lr-span-waterfall-name-width:var(--lr-size-8rem);display:block;container-type:inline-size}[part=base]{font-size:var(--lr-font-size-sm);color:var(--lr-color-text);flex-direction:column;display:flex}[part=axis]{block-size:var(--lr-size-1-25rem);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border);margin-inline-start:calc(var(--lr-span-waterfall-name-width,var(--_lr-span-waterfall-name-width)) + var(--lr-space-xs));position:relative;overflow:hidden}[part=tick]{border-inline-start:var(--lr-border-width-thin) solid var(--lr-color-border);position:absolute;inset-block:0}[part=tick-label]{font-size:var(--lr-font-size-2xs);color:var(--lr-color-text-quiet);white-space:nowrap;position:absolute;inset-inline-start:var(--lr-space-xs)}[part=tick][data-edge=end] [part=tick-label]{inset-inline-start:auto;inset-inline-end:var(--lr-space-xs)}[part=row]{grid-template-columns:var(--lr-span-waterfall-name-width,var(--_lr-span-waterfall-name-width)) 1fr;align-items:center;gap:var(--lr-space-xs);padding-block:var(--lr-space-2xs);min-block-size:var(--lr-size-1-75rem);display:grid}[part=row][data-active]{background:var(--lr-span-waterfall-row-active-bg,var(--lr-color-brand-quiet))}[part=name]{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}[part=bar-track]{block-size:var(--lr-icon-button-size);position:relative}[part=bar]{--_lr-span-waterfall-target-width:min(100%, max(var(--_lr-span-waterfall-width), var(--lr-icon-button-size)));min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);inline-size:var(--_lr-span-waterfall-target-width);border-radius:var(--lr-radius-xs);cursor:pointer;border:none;padding:0;position:absolute;inset-block:0;inset-inline-start:min(var(--_lr-span-waterfall-start), calc(100% - var(--_lr-span-waterfall-target-width)))}[part=bar][hidden]{display:none}[part=bar]:after{content:"";border-radius:inherit;pointer-events:none;background:0 0;position:absolute;inset:0}[part=bar]:hover:after{background:color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-hover))}[part=bar]:active:after{background:color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=bar]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=bar][data-tone=success]{background:var(--lr-span-waterfall-success-color,var(--lr-color-success))}[part=bar][data-tone=danger]{background:var(--lr-span-waterfall-error-color,var(--lr-color-danger))}[part=bar][data-tone=warning]{background:var(--lr-span-waterfall-denied-color,var(--lr-color-warning))}[part=bar][data-tone=accent]{background-image:repeating-linear-gradient(45deg, var(--lr-span-waterfall-running-color,var(--lr-color-brand)) 0 var(--lr-size-6px), var(--lr-span-waterfall-running-stripe-color,var(--lr-color-brand-quiet)) var(--lr-size-6px) calc(var(--lr-size-6px) * 2));animation:lr-span-waterfall-stripe var(--lr-span-waterfall-stripe-speed,var(--lr-duration-ambient)) linear infinite;background-size:200% 100%}[part=bar][data-tone=neutral]{border:var(--lr-border-width-thin) dashed var(--lr-span-waterfall-pending-border-color,var(--lr-color-border-strong));background:0 0}:host(:dir(rtl)) [part=bar][data-tone=accent]{animation-direction:reverse}@media (prefers-reduced-motion:reduce){[part=bar][data-tone=accent]{animation:none}}@keyframes lr-span-waterfall-stripe{to{background-position:calc(var(--lr-size-24px) * -1) 0}}[part=meta]{display:none}[part=status-text],[part=duration]{font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet)}[part=empty]{padding:var(--lr-space-l)}[part=limit]{margin:var(--lr-space-s) 0 0;color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs)}@container (inline-size<=479.98px){[part=axis]{margin-inline-start:0}[part=row]{grid-template-columns:1fr}[part=meta]{gap:var(--lr-space-s);display:flex}}`;export{styles};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const DEFAULT_INTERNAL_PATTERNS=Object.freeze(["node_modules/","node:internal","(native)","site-packages/","dist-packages/","/usr/lib/python"]),STACK_TRACE_LIMITS=Object.freeze({bytes:256*1024,lines:4e3,groups:64,frames:2e3,lineCharacters:8192}),V8_FRAME_PREFIX=/^\s*at\s+(?:async\s+)?(?:new\s+)?/,DIGITS_RE=/^\d+$/,JS_CAUSE=/^\s*(?:Caused by:|\[cause\]:)(.*)$/,PYTHON_HEADER=/^Traceback \(most recent call last\):\s*$/,PYTHON_FRAME=/^\s*File \x22([^\x22]+)\x22, line ([^,]*), in (.+)$/,PYTHON_CHAIN_SEPARATOR
|
|
2
|
-
`).trim(),groups.push(current)};for(const line of lines){const causeMatch=JS_CAUSE.exec(line);if(causeMatch){flush(),current={message:"",frames:[]},messageLines=[causeMatch[1]],sawFrame=!1;continue}const withFn=matchV8FrameWithFn(line),bare=withFn?null:matchV8BareFrame(line),firefox=!withFn&&!bare?matchFirefoxFrame(line):null;if(withFn){const{fn,file,line:ln,col}=withFn,frame=makeFrame(line,file,ln,col,fn,internalPatterns);current.frames.push(frame),sawFrame||=frame.file!==void 0}else if(bare){const frame=makeFrame(line,bare.file,bare.line,bare.col,void 0,internalPatterns);current.frames.push(frame),sawFrame||=frame.file!==void 0}else if(firefox){const frame=makeFrame(line,firefox.file,firefox.line,firefox.col,firefox.fn,internalPatterns);current.frames.push(frame),sawFrame||=frame.file!==void 0}else sawFrame&&line.trim()!==""?current.frames.push({internal:!1,raw:line}):sawFrame||messageLines.push(line)}return flush(),groups.reduce((n,g)=>n+g.frames.filter(f=>f.file!==void 0).length,0)>0?groups:[]}function parsePython(lines,internalPatterns){const groups=[];let current=null,i=0;for(;i<lines.length;){const line=lines[i];if(PYTHON_HEADER.test(line)){current={frames:[],trailerLines:[]},groups.push(current),i++;continue}if(PYTHON_CHAIN_SEPARATOR.test(line)){i++;continue}const frameMatch=PYTHON_FRAME.exec(line);if(frameMatch&¤t){const[,file,ln,fn]=frameMatch,frame=makeFrame(line,file,ln,void 0,fn.trimEnd(),internalPatterns);current.frames.push(frame),i++;const maybeSource=lines[i];maybeSource!==void 0&&maybeSource.trim()!==""&&!PYTHON_FRAME.test(maybeSource)&&!PYTHON_HEADER.test(maybeSource)&&!PYTHON_CHAIN_SEPARATOR.test(maybeSource)&&!PYTHON_EXC_TRAILER.test(maybeSource)&&(frame.raw+=`
|
|
3
|
-
${maybeSource}`,i++);continue}current&¤t.trailerLines.push(line),i++}const parsedGroups=groups.filter(g=>g.frames.length>0||g.trailerLines.some(l=>l.trim()!=="")).map(g=>({message:g.trailerLines.join(`
|
|
1
|
+
const DEFAULT_INTERNAL_PATTERNS=Object.freeze(["node_modules/","node:internal","(native)","site-packages/","dist-packages/","/usr/lib/python"]),STACK_TRACE_LIMITS=Object.freeze({bytes:256*1024,lines:4e3,groups:64,frames:2e3,lineCharacters:8192}),V8_FRAME_PREFIX=/^\s*at\s+(?:async\s+)?(?:new\s+)?/,DIGITS_RE=/^\d+$/,JS_CAUSE=/^\s*(?:Caused by:|\[cause\]:)(.*)$/,PYTHON_HEADER=/^Traceback \(most recent call last\):\s*$/,PYTHON_FRAME=/^\s*File \x22([^\x22]+)\x22, line ([^,]*), in (.+)$/,PYTHON_CHAIN_SEPARATOR=/^(?:The above exception was the direct cause of the following exception:|During handling of the above exception, another exception occurred:)\s*$/,PYTHON_EMPTY_TRAILER=/^(?:[A-Za-z_][A-Za-z0-9_]*)(?:\.[A-Za-z_][A-Za-z0-9_]*)*:?\s*$/,PYTHON_EXC_TRAILER=/^\S+:\s/;function parseSafeLocation(lineToken,columnToken){const line=DIGITS_RE.test(lineToken)?Number(lineToken):Number.NaN;if(!Number.isSafeInteger(line))return null;if(columnToken===void 0)return{line};const column=DIGITS_RE.test(columnToken)?Number(columnToken):Number.NaN;return Number.isSafeInteger(column)?{line,column}:null}function matchV8FrameWithFn(line){const prefixMatch=V8_FRAME_PREFIX.exec(line);if(!prefixMatch)return null;const rest=line.slice(prefixMatch[0].length).trimEnd(),openParen=rest.length>1&&rest.endsWith(")")?rest.lastIndexOf("("):-1;if(openParen<=0||rest[openParen-1]!==" ")return null;const fn=rest.slice(0,openParen-1),inner=rest.slice(openParen+1,-1),lastColon=inner.lastIndexOf(":"),secondLastColon=lastColon===-1?-1:inner.lastIndexOf(":",lastColon-1);if(fn.length===0||secondLastColon===-1)return null;const file=inner.slice(0,secondLastColon),lineStr=inner.slice(secondLastColon+1,lastColon),col=inner.slice(lastColon+1);return file?{fn,file,line:lineStr,col}:null}function matchV8BareFrame(line){const prefixMatch=V8_FRAME_PREFIX.exec(line);if(!prefixMatch)return null;const rest=line.slice(prefixMatch[0].length).trimEnd(),lastColon=rest.lastIndexOf(":"),secondLastColon=lastColon===-1?-1:rest.lastIndexOf(":",lastColon-1);if(secondLastColon===-1)return null;const file=rest.slice(0,secondLastColon);return file?{file,line:rest.slice(secondLastColon+1,lastColon),col:rest.slice(lastColon+1)}:null}function matchFirefoxFrame(line){const at=line.indexOf("@");if(at===-1)return null;const fn=line.slice(0,at);if(/\s/.test(fn))return null;const rest=line.slice(at+1),lastColon=rest.lastIndexOf(":"),secondLastColon=lastColon===-1?-1:rest.lastIndexOf(":",lastColon-1);if(secondLastColon===-1)return null;const file=rest.slice(0,secondLastColon);return file?{...fn?{fn}:{},file,line:rest.slice(secondLastColon+1,lastColon),col:rest.slice(lastColon+1)}:null}function isInternal(file,patterns){return file?patterns.some(pattern=>typeof pattern=="string"?file.includes(pattern):new RegExp(pattern.source,pattern.flags.replace(/[gy]/g,"")).test(file)):!1}function makeFrame(raw,file,lineToken,columnToken,functionName,internalPatterns){const location=parseSafeLocation(lineToken,columnToken);return location?{...functionName?{functionName}:{},file,...location,internal:isInternal(file,internalPatterns),raw}:{internal:!1,raw}}function parseJs(lines,internalPatterns){const groups=[];let current={message:"",frames:[]},messageLines=[],sawFrame=!1;const flush=()=>{current.message=messageLines.join(`
|
|
2
|
+
`).trim(),groups.push(current)};for(const line of lines){const causeMatch=JS_CAUSE.exec(line);if(causeMatch){flush(),current={message:"",frames:[]},messageLines=[causeMatch[1]],sawFrame=!1;continue}const withFn=matchV8FrameWithFn(line),bare=withFn?null:matchV8BareFrame(line),firefox=!withFn&&!bare?matchFirefoxFrame(line):null;if(withFn){const{fn,file,line:ln,col}=withFn,frame=makeFrame(line,file,ln,col,fn,internalPatterns);current.frames.push(frame),sawFrame||=frame.file!==void 0}else if(bare){const frame=makeFrame(line,bare.file,bare.line,bare.col,void 0,internalPatterns);current.frames.push(frame),sawFrame||=frame.file!==void 0}else if(firefox){const frame=makeFrame(line,firefox.file,firefox.line,firefox.col,firefox.fn,internalPatterns);current.frames.push(frame),sawFrame||=frame.file!==void 0}else sawFrame&&line.trim()!==""?current.frames.push({internal:!1,raw:line}):sawFrame||messageLines.push(line)}return flush(),groups.reduce((n,g)=>n+g.frames.filter(f=>f.file!==void 0).length,0)>0?groups:[]}function parsePython(lines,internalPatterns){const groups=[];let current=null,i=0;for(;i<lines.length;){const line=lines[i];if(PYTHON_HEADER.test(line)){current={frames:[],trailerLines:[]},groups.push(current),i++;continue}if(PYTHON_CHAIN_SEPARATOR.test(line)){i++;continue}const frameMatch=PYTHON_FRAME.exec(line);if(frameMatch&¤t){const[,file,ln,fn]=frameMatch,frame=makeFrame(line,file,ln,void 0,fn.trimEnd(),internalPatterns);current.frames.push(frame),i++;const maybeSource=lines[i];maybeSource!==void 0&&maybeSource.trim()!==""&&!PYTHON_FRAME.test(maybeSource)&&!PYTHON_HEADER.test(maybeSource)&&!PYTHON_CHAIN_SEPARATOR.test(maybeSource)&&!PYTHON_EXC_TRAILER.test(maybeSource)&&!PYTHON_EMPTY_TRAILER.test(maybeSource)&&(frame.raw+=`
|
|
3
|
+
${maybeSource}`,i++);continue}current&¤t.trailerLines.push(line),i++}const parsedGroups=groups.filter(g=>g.frames.length>0||g.trailerLines.some(l=>l.trim()!=="")).map(g=>({message:g.trailerLines.filter(line=>line.trim()!=="").length===1&&PYTHON_EMPTY_TRAILER.test(g.trailerLines.find(line=>line.trim()!=="")??"")?"":g.trailerLines.join(`
|
|
4
4
|
`).trim(),frames:[...g.frames].reverse()}));return parsedGroups.reduce((n,group)=>n+group.frames.filter(frame=>frame.file!==void 0).length,0)>0?parsedGroups:[]}function utf8Prefix(value,byteLimit){let bytes=0,index=0;for(;index<value.length;){const first=value.charCodeAt(index);let width=first<128?1:first<2048?2:3,units=1;if(first>=55296&&first<=56319&&index+1<value.length){const second=value.charCodeAt(index+1);second>=56320&&second<=57343&&(width=4,units=2)}if(bytes+width>byteLimit)break;bytes+=width,index+=units}return{source:value.slice(0,index),truncated:index<value.length}}function boundedLines(trace){const byteBound=utf8Prefix(trace,STACK_TRACE_LIMITS.bytes),split=byteBound.source.split(/\r\n|\r|\n/,STACK_TRACE_LIMITS.lines+1);let truncated=byteBound.truncated||split.length>STACK_TRACE_LIMITS.lines;const lines=split.slice(0,STACK_TRACE_LIMITS.lines).map(line=>line.length<=STACK_TRACE_LIMITS.lineCharacters?line:(truncated=!0,line.slice(0,STACK_TRACE_LIMITS.lineCharacters)));return{source:lines.join(`
|
|
5
5
|
`),lines,truncated}}function boundedGroups(groups){let remainingFrames=STACK_TRACE_LIMITS.frames,truncated=groups.length>STACK_TRACE_LIMITS.groups;const bounded=[];for(const group of groups.slice(0,STACK_TRACE_LIMITS.groups)){const frames=group.frames.slice(0,remainingFrames);if(frames.length<group.frames.length&&(truncated=!0),bounded.push({message:group.message,frames}),remainingFrames-=frames.length,remainingFrames===0){bounded.length<groups.length&&(truncated=!0);break}}return{groups:bounded,truncated}}function parseStackTrace(trace,options={}){const bounded=boundedLines(trace),parsed=bounded.lines.some(line=>PYTHON_HEADER.test(line))?parsePython(bounded.lines,options.internalPatterns??DEFAULT_INTERNAL_PATTERNS):parseJs(bounded.lines,options.internalPatterns??DEFAULT_INTERNAL_PATTERNS),limited=boundedGroups(parsed);return{groups:limited.groups,truncated:bounded.truncated||limited.truncated,source:bounded.source}}export{DEFAULT_INTERNAL_PATTERNS,STACK_TRACE_LIMITS,parseStackTrace};
|
|
@@ -48,7 +48,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
48
48
|
</li>
|
|
49
49
|
`}}static{this.defaultStrings={...super.defaultStrings,agentRunStatusCancelled:LYRA_DEFAULT_agentRunStatusCancelled,agentRunStatusCollecting:LYRA_DEFAULT_agentRunStatusCollecting,agentRunStatusDone:LYRA_DEFAULT_agentRunStatusDone,agentRunStatusIdle:LYRA_DEFAULT_agentRunStatusIdle,agentRunStatusQueued:LYRA_DEFAULT_agentRunStatusQueued,agentRunStatusWaitingApproval:LYRA_DEFAULT_agentRunStatusWaitingApproval,agentRunStatusWaitingInput:LYRA_DEFAULT_agentRunStatusWaitingInput,statusError:LYRA_DEFAULT_statusError,statusRunning:LYRA_DEFAULT_statusRunning,subagentPanelCancelRun:LYRA_DEFAULT_subagentPanelCancelRun,subagentPanelEmpty:LYRA_DEFAULT_subagentPanelEmpty,subagentPanelLabel:LYRA_DEFAULT_subagentPanelLabel,subagentPanelLimit:LYRA_DEFAULT_subagentPanelLimit,subagentPanelRetry:LYRA_DEFAULT_subagentPanelRetry,subagentPanelRetryRun:LYRA_DEFAULT_subagentPanelRetryRun}}static{this.ownedCollectionProperties=Object.freeze(["runs"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-run-activate","lr-cancel","lr-run-retry"])}syncAnnouncementSink(){this.isConnected&&this.announcementSink?.element.ownerDocument!==this.ownerDocument&&(this.announcementSink?.release(),this.announcementSink=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}))}connectedCallback(){super.connectedCallback(),this.syncAnnouncementSink(),this.hasUpdated&&(this.suppressNextLimitAnnouncement=!0,this.requestUpdate())}disconnectedCallback(){super.disconnectedCallback(),this.announcementSink?.release(),this.announcementSink=void 0,this.suppressNextLimitAnnouncement=!0}statusLabel(status){switch(status){case"idle":return this.localize("agentRunStatusIdle");case"queued":return this.localize("agentRunStatusQueued");case"running":return this.localize("statusRunning");case"collecting":return this.localize("agentRunStatusCollecting");case"waiting-input":return this.localize("agentRunStatusWaitingInput");case"waiting-approval":return this.localize("agentRunStatusWaitingApproval");case"done":return this.localize("agentRunStatusDone");case"error":return this.localize("statusError");case"cancelled":return this.localize("agentRunStatusCancelled");default:return status}}ordered(){const normalized=[],byId=new Map,runs=firstByIdentity(Array.isArray(this.runs)?this.runs:[],run=>run.id),truncated=runs.length>MAX_RENDERED_RUNS;for(const run of runs.slice(0,MAX_RENDERED_RUNS))normalized.push(run),byId.set(run.id,run);const byParent=new Map,roots=[],hasCyclicParentChain=run=>{const visited2=new Set([run.id]);let parentId=run.parentId;for(;parentId;){if(visited2.has(parentId))return!0;visited2.add(parentId),parentId=byId.get(parentId)?.parentId}return!1};for(const run of normalized){const parent=run.parentId&&byId.has(run.parentId)&&!hasCyclicParentChain(run)?run.parentId:"";byParent.set(parent,[...byParent.get(parent)??[],run]),parent||roots.push(run)}const rows=[],stack=[...roots].reverse().map((run,reverseIndex)=>({run,depth:0,posInSet:roots.length-reverseIndex,setSize:roots.length})),visited=new Set;for(;stack.length>0&&rows.length<MAX_RENDERED_RUNS;){const row=stack.pop();if(!row||visited.has(row.run.id))continue;visited.add(row.run.id),rows.push(row);const children=byParent.get(row.run.id)??[];for(let index=children.length-1;index>=0;index--){const child=children[index];child&&stack.push({run:child,depth:row.depth+1,posInSet:index+1,setSize:children.length})}}return{rows,truncated}}willUpdate(changed){if(super.willUpdate(changed),changed.has("runs")){this.orderedRunsCache=this.ordered();const rows=this.orderedRunsCache.rows,ids=new Set(rows.map(row=>row.run.id));(this.focusedId==null||!ids.has(this.focusedId))&&(this.focusedId=rows[0]?.run.id??null)}}updated(_changed){super.updated(_changed);const limitText=this.renderRoot.querySelector('[part="limit"]')?.textContent?.trim()??"";!this.suppressNextLimitAnnouncement&&limitText&&limitText!==this.previousLimitText&&this.announcementSink?.announce(limitText),this.previousLimitText=limitText,this.suppressNextLimitAnnouncement=!1}runElement(runId){const ownerCss=this.ownerDocument.defaultView?.CSS;if(typeof ownerCss?.escape=="function")try{const candidate=this.renderRoot.querySelector(`[data-run-id="${ownerCss.escape(runId)}"]`);if(candidate?.getAttribute("data-run-id")===runId)return candidate}catch{}return Array.from(this.renderRoot.querySelectorAll("[data-run-id]")).find(candidate=>candidate.getAttribute("data-run-id")===runId)??null}focusRow(row){row&&(this.focusedId=row.run.id,this.updateComplete.then(()=>{this.runElement(row.run.id)?.focus()}))}render(){const label=hostAriaLabel(this)??(this.label==null?this.localize("subagentPanelLabel"):this.label),ordered=this.orderedRunsCache,firstId=ordered.rows[0]?.run.id;return html`
|
|
50
50
|
<div part="base">
|
|
51
|
-
${
|
|
51
|
+
${ordered.rows.length?html`<ul
|
|
52
52
|
part="list"
|
|
53
53
|
role="tree"
|
|
54
54
|
aria-label=${label}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);display:block;container-type:inline-size}[part=list]{gap:var(--lr-space-xs);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}[part~=run]{border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);margin-inline-start:calc(var(--lr-subagent-depth,0) * var(--lr-space-l));overflow:hidden}[part~=run-selected]{border-color:var(--lr-subagent-panel-selected-border,var(--lr-color-brand))}[part=run-row]{grid-template-columns:minmax(0,1fr) auto;display:grid}[part=run-trigger]{gap:var(--lr-space-xs);min-inline-size:0;min-block-size:var(--lr-icon-button-size);padding:var(--lr-space-s);background:var(--lr-color-surface);color:var(--lr-color-text);font:inherit;text-align:start;cursor:pointer;border:0;grid-template-columns:minmax(0,1fr) auto;display:grid}[part=run-trigger]:hover,[part=cancel]:hover,[part=retry]:hover{background:var(--lr-color-surface-raised)}[part=run-trigger]:active,[part=cancel]:active,[part=retry]:active{background:color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=run-trigger]:focus-visible,[part=cancel]:focus-visible,[part=retry]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(var(--lr-focus-ring-offset) * -1)}[part=label],[part=task],[part=model]{overflow-wrap:break-word;min-inline-size:0}[part=task],[part=model]{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm);grid-column:1/-1}[part=progress]{block-size:var(--lr-size-0-25rem);border-radius:var(--lr-radius-pill);background:var(--lr-subagent-panel-progress-track,var(--lr-color-border));grid-column:1/-1;overflow:hidden}[part=progress]>span{background:var(--lr-subagent-panel-progress-fill,var(--lr-color-brand));block-size:100%;display:block}[part=actions]{display:flex}[part=cancel],[part=retry]{min-block-size:var(--lr-icon-button-size);min-inline-size:var(--lr-icon-button-size);padding:var(--lr-space-xs);border:0;border-inline-start:var(--lr-border-width-thin) solid var(--lr-color-border);background:var(--lr-color-surface);color:var(--lr-color-text);font:inherit;cursor:pointer}@container (inline-size<=
|
|
1
|
+
import{css}from"lit";const styles=css`:host{contain-intrinsic-inline-size:var(--lr-size-20rem);display:block;container-type:inline-size}[part=list]{gap:var(--lr-space-xs);flex-direction:column;margin:0;padding:0;list-style:none;display:flex}[part~=run]{border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);margin-inline-start:calc(var(--lr-subagent-depth,0) * var(--lr-space-l));overflow:hidden}[part~=run-selected]{border-color:var(--lr-subagent-panel-selected-border,var(--lr-color-brand))}[part=run-row]{grid-template-columns:minmax(0,1fr) auto;display:grid}[part=run-trigger]{gap:var(--lr-space-xs);min-inline-size:0;min-block-size:var(--lr-icon-button-size);padding:var(--lr-space-s);background:var(--lr-color-surface);color:var(--lr-color-text);font:inherit;text-align:start;cursor:pointer;border:0;grid-template-columns:minmax(0,1fr) auto;display:grid}[part=run-trigger]:hover,[part=cancel]:hover,[part=retry]:hover{background:var(--lr-color-surface-raised)}[part=run-trigger]:active,[part=cancel]:active,[part=retry]:active{background:color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=run-trigger]:focus-visible,[part=cancel]:focus-visible,[part=retry]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(var(--lr-focus-ring-offset) * -1)}[part=label],[part=task],[part=model]{overflow-wrap:break-word;min-inline-size:0}[part=task],[part=model]{color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm);grid-column:1/-1}[part=progress]{block-size:var(--lr-size-0-25rem);border-radius:var(--lr-radius-pill);background:var(--lr-subagent-panel-progress-track,var(--lr-color-border));grid-column:1/-1;overflow:hidden}[part=progress]>span{background:var(--lr-subagent-panel-progress-fill,var(--lr-color-brand));block-size:100%;display:block}[part=actions]{display:flex}[part=cancel],[part=retry]{min-block-size:var(--lr-icon-button-size);min-inline-size:var(--lr-icon-button-size);padding:var(--lr-space-xs);border:0;border-inline-start:var(--lr-border-width-thin) solid var(--lr-color-border);background:var(--lr-color-surface);color:var(--lr-color-text);font:inherit;cursor:pointer}@container (inline-size<=20rem){[part~=run]{margin-inline-start:calc(var(--lr-subagent-depth,0) * var(--lr-space-s))}[part=run-trigger]{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}[part=status]{min-inline-size:0;max-inline-size:100%}[part=run-row]{grid-template-columns:1fr}[part=actions]{border-block-start:var(--lr-border-width-thin) solid var(--lr-color-border)}}`;export{styles};
|
|
@@ -9,8 +9,7 @@ export type TaskListAppearance=LyraFrame;export interface TaskItem{
|
|
|
9
9
|
id:string;label:string;status:TaskStatus;
|
|
10
10
|
/** Optional secondary plain-text line, e.g. an error message or a short progress note. */
|
|
11
11
|
detail?:string;
|
|
12
|
-
/** One level of sub-steps. Deeper nesting (a child's own `children`) is ignored
|
|
13
|
-
* `console.warn`. */
|
|
12
|
+
/** One level of sub-steps. Deeper nesting (a child's own `children`) is ignored. */
|
|
14
13
|
children?:readonly TaskItem[];}export interface TaskListToggleDetail{expanded:boolean;}export interface LyraTaskListEventMap{'lr-toggle':CustomEvent<TaskListToggleDetail>;'lr-reorder':CustomEvent<{taskId:string;parentTaskId:string|null;fromIndex:number;toIndex:number;}>;}
|
|
15
14
|
/** `true`-defaulting boolean attribute converter -- Lit's default presence-based `type: Boolean`
|
|
16
15
|
* can never be set back to `false` from a plain-HTML attribute once the property's own default is
|
|
@@ -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,svg,nothing}from"lit";import{repeat}from"lit/directives/repeat.js";import{property,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{activeElementIn}from"../../../internal/active-element.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{resolveHeadingLevel}from"../../../internal/heading-level.js";import{chevronIcon}from"../../../internal/icons.js";import{styles}from"./task-list.styles.js";import{presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_item,LYRA_DEFAULT_items,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess,LYRA_DEFAULT_taskListCompletedOfTotal,LYRA_DEFAULT_taskListLabel,LYRA_DEFAULT_taskListStepCompletedAnnounce,LYRA_DEFAULT_taskListStepFailedAnnounce,LYRA_DEFAULT_taskListStepStartedAnnounce,LYRA_DEFAULT_treeNodeMoved}from"../../../internal/default-strings.generated.js";function normalizeTaskStatus(value){return value==="running"||value==="success"||value==="error"?value:"pending"}function validTaskItems(value){const items=[];for(const item of Array.isArray(value)?value:[])try{item!==null&&typeof item=="object"&&!Array.isArray(item)&&typeof item.id=="string"&&item.id.trim().length>0&&items.push(item)}catch{}return items}const ICON_VIEW_BOX="0 0 24 24",ICON_STROKE_WIDTH="1.75";function icon(paths){return svg`
|
|
1
|
+
var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,svg,nothing}from"lit";import{repeat}from"lit/directives/repeat.js";import{property,query}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{activeElementIn}from"../../../internal/active-element.js";import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{resolveHeadingLevel}from"../../../internal/heading-level.js";import{chevronIcon}from"../../../internal/icons.js";import{styles}from"./task-list.styles.js";import{presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LYRA_DEFAULT_collapse,LYRA_DEFAULT_details,LYRA_DEFAULT_item,LYRA_DEFAULT_items,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess,LYRA_DEFAULT_taskListCompletedOfTotal,LYRA_DEFAULT_taskListLabel,LYRA_DEFAULT_taskListStepCompletedAnnounce,LYRA_DEFAULT_taskListStepFailedAnnounce,LYRA_DEFAULT_taskListStepStartedAnnounce,LYRA_DEFAULT_treeNodeMoved}from"../../../internal/default-strings.generated.js";function normalizeTaskStatus(value){return value==="running"||value==="success"||value==="error"?value:"pending"}const DEEP_NESTING_WARNING_KEY="lyra-task-list-nesting-depth",DEEP_NESTING_WARNING="<lr-task-list>: task nesting deeper than one level is ignored.";function validTaskItems(value){const items=[];for(const item of Array.isArray(value)?value:[])try{item!==null&&typeof item=="object"&&!Array.isArray(item)&&typeof item.id=="string"&&item.id.trim().length>0&&items.push(item)}catch{}return items}const ICON_VIEW_BOX="0 0 24 24",ICON_STROKE_WIDTH="1.75";function icon(paths){return svg`
|
|
2
2
|
<svg
|
|
3
3
|
width="1em"
|
|
4
4
|
height="1em"
|
|
@@ -15,7 +15,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
15
15
|
<circle cx="12" cy="12" r="9"></circle>
|
|
16
16
|
<line x1="9" y1="9" x2="15" y2="15"></line>
|
|
17
17
|
<line x1="15" y1="9" x2="9" y2="15"></line>
|
|
18
|
-
`)}const STATUS_ICON={pending:pendingIcon,running:runningIcon,success:successIcon,error:errorIcon},STATUS_LABEL_KEY={pending:"statusPending",running:"statusRunning",success:"statusSuccess",error:"statusError"};class LyraTaskList extends LyraElement{constructor(){super(...arguments),this.items=[],this.reorderable=!1,this.headingLevel="3",this.expanded=!0,this.collapsible=!0,this.compact=!1,this.frame="card",this.headerId=nextId("task-list-header"),this.bodyId=nextId("task-list-body"),this.isMounting=!0,this.previousStatusById=new Map,this.pendingFocusId=null,this.toggle=()=>{this.collapsible&&(this.expanded=!this.expanded,this.emit("lr-toggle",{expanded:this.expanded}))}}static{this.defaultStrings={...super.defaultStrings,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,item:LYRA_DEFAULT_item,items:LYRA_DEFAULT_items,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusError:LYRA_DEFAULT_statusError,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess,taskListCompletedOfTotal:LYRA_DEFAULT_taskListCompletedOfTotal,taskListLabel:LYRA_DEFAULT_taskListLabel,taskListStepCompletedAnnounce:LYRA_DEFAULT_taskListStepCompletedAnnounce,taskListStepFailedAnnounce:LYRA_DEFAULT_taskListStepFailedAnnounce,taskListStepStartedAnnounce:LYRA_DEFAULT_taskListStepStartedAnnounce,treeNodeMoved:LYRA_DEFAULT_treeNodeMoved}}static{this.ownedCollectionProperties=Object.freeze(["items"])}static{this.styles=[LyraElement.styles,styles]}willUpdate(changed){if(super.willUpdate(changed),changed.has("reorderable")&&!this.reorderable&&this.clearPendingReorder(),changed.has("items")){for(const item of validTaskItems(this.items))for(const child of validTaskItems(item.children))
|
|
18
|
+
`)}const STATUS_ICON={pending:pendingIcon,running:runningIcon,success:successIcon,error:errorIcon},STATUS_LABEL_KEY={pending:"statusPending",running:"statusRunning",success:"statusSuccess",error:"statusError"};class LyraTaskList extends LyraElement{constructor(){super(...arguments),this.items=[],this.reorderable=!1,this.headingLevel="3",this.expanded=!0,this.collapsible=!0,this.compact=!1,this.frame="card",this.headerId=nextId("task-list-header"),this.bodyId=nextId("task-list-body"),this.isMounting=!0,this.previousStatusById=new Map,this.pendingFocusId=null,this.toggle=()=>{this.collapsible&&(this.expanded=!this.expanded,this.emit("lr-toggle",{expanded:this.expanded}))}}static{this.defaultStrings={...super.defaultStrings,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,item:LYRA_DEFAULT_item,items:LYRA_DEFAULT_items,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusError:LYRA_DEFAULT_statusError,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess,taskListCompletedOfTotal:LYRA_DEFAULT_taskListCompletedOfTotal,taskListLabel:LYRA_DEFAULT_taskListLabel,taskListStepCompletedAnnounce:LYRA_DEFAULT_taskListStepCompletedAnnounce,taskListStepFailedAnnounce:LYRA_DEFAULT_taskListStepFailedAnnounce,taskListStepStartedAnnounce:LYRA_DEFAULT_taskListStepStartedAnnounce,treeNodeMoved:LYRA_DEFAULT_treeNodeMoved}}static{this.ownedCollectionProperties=Object.freeze(["items"])}static{this.styles=[LyraElement.styles,styles]}willUpdate(changed){if(super.willUpdate(changed),changed.has("reorderable")&&!this.reorderable&&this.clearPendingReorder(),changed.has("items")){for(const item of validTaskItems(this.items))for(const child of validTaskItems(item.children))validTaskItems(child.children).length>0&&devWarnOnce(DEEP_NESTING_WARNING_KEY,DEEP_NESTING_WARNING);this.capturePendingReorderFocus()}}updated(changed){super.updated(changed);const wasMounting=this.isMounting||!this.isConnected;this.isMounting=!this.isConnected,changed.has("items")&&(this.diffAndAnnounce(wasMounting),this.confirmPendingReorder())}disconnectedCallback(){super.disconnectedCallback(),this.isMounting=!0,this.previousStatusById.clear(),this.clearPendingReorder()}connectedCallback(){const reconnecting=this.hasUpdated;this.isMounting=!0,this.previousStatusById.clear(),super.connectedCallback(),reconnecting&&this.requestUpdate("items")}flattenOneLevel(items){const out=[];for(const item of validTaskItems(items)){out.push(item);for(const child of validTaskItems(item.children))out.push(child)}return out}diffAndAnnounce(firstSight){const region=this.liveRegion,nextMap=new Map;for(const item of this.flattenOneLevel(validTaskItems(this.items))){const status=normalizeTaskStatus(item.status);if(nextMap.set(item.id,status),!firstSight&®ion){const previous=this.previousStatusById.get(item.id);previous!==void 0&&previous!==status&&(status==="running"?(region.mode="polite",region.announce(this.localize("taskListStepStartedAnnounce",void 0,{label:item.label}),{force:!0})):status==="success"?(region.mode="polite",region.announce(this.localize("taskListStepCompletedAnnounce",void 0,{label:item.label}),{force:!0})):status==="error"&&(region.mode="assertive",region.announce(this.localize("taskListStepFailedAnnounce",void 0,{label:item.label}),{force:!0})))}}this.previousStatusById=nextMap}idsAreUnique(){const ids=new Set;for(const item of this.flattenOneLevel(this.items)){if(item.id.trim().length===0||ids.has(item.id))return!1;ids.add(item.id)}return!0}canReorderItems(){if(!this.reorderable||!Array.isArray(this.items))return!1;const items=validTaskItems(this.items);return items.length!==this.items.length||items.some(item=>Array.isArray(item.children)&&validTaskItems(item.children).length!==item.children.length)?!1:this.idsAreUnique()}siblingItems(parentId){return parentId===null?this.items:this.items.find(item=>item.id===parentId)?.children}requestReorder(item,parentId,delta){if(!this.canReorderItems())return;const siblings=this.siblingItems(parentId);if(!siblings)return;const fromIndex=siblings.findIndex(candidate=>candidate.id===item.id),toIndex=fromIndex+delta;fromIndex<0||toIndex<0||toIndex>=siblings.length||(this.pendingReorder={id:item.id,parentId,originalSiblingIds:siblings.map(candidate=>candidate.id),targetSiblingId:siblings[toIndex].id,fromIndex,toIndex},this.pendingFocusId=null,this.emit("lr-reorder",{taskId:item.id,parentTaskId:parentId,fromIndex,toIndex}))}onItemKeyDown(event,item,parentId){event.composedPath()[0]===event.currentTarget&&(!this.canReorderItems()||!(event.ctrlKey||event.metaKey)||event.key!=="ArrowUp"&&event.key!=="ArrowDown"||(event.preventDefault(),this.requestReorder(item,parentId,event.key==="ArrowDown"?1:-1)))}capturePendingReorderFocus(){const pending=this.pendingReorder;if(!pending)return;const active=activeElementIn(this.shadowRoot);this.pendingFocusId=active instanceof HTMLElement&&active.getAttribute("part")==="item"&&active.dataset.id===pending.id?pending.id:null}confirmPendingReorder(){const pending=this.pendingReorder;if(!pending)return;const siblings=this.siblingItems(pending.parentId);if(!siblings||!this.idsAreUnique()){this.clearPendingReorder();return}const siblingIds=siblings.map(item=>item.id);if(!(siblingIds.length!==pending.originalSiblingIds.length||siblingIds.some((id,index)=>id!==pending.originalSiblingIds[index])))return;this.pendingReorder=void 0;const restoreFocus=this.pendingFocusId===pending.id;if(this.pendingFocusId=null,siblingIds[pending.toIndex]!==pending.id||siblingIds[pending.fromIndex]!==pending.targetSiblingId)return;const moved=siblings[pending.toIndex],region=this.liveRegion;region&&(region.mode="polite",region.announce(this.localize("treeNodeMoved",void 0,{label:moved.label,index:getNumberFormat(this.effectiveLocale).format(pending.toIndex+1),total:getNumberFormat(this.effectiveLocale).format(siblings.length)}),{force:!0})),restoreFocus&&this.focusItem(pending.id)}focusItem(id){[...this.shadowRoot?.querySelectorAll('[part="item"]')??[]].find(candidate=>candidate.dataset.id===id)?.focus()}clearPendingReorder(){this.pendingReorder=void 0,this.pendingFocusId=null}renderItem(item,depth,parentId,canReorder){const status=normalizeTaskStatus(item.status),children=depth===0?validTaskItems(item.children):[],hasChildren=children.length>0;return html`
|
|
19
19
|
<div
|
|
20
20
|
part="item"
|
|
21
21
|
role="listitem"
|
|
@@ -54,6 +54,15 @@ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from
|
|
|
54
54
|
* @cssprop [--lr-terminal-height=var(--lr-size-20rem)] - Block size of `[part="viewport"]`, the
|
|
55
55
|
* scrollable log region. Not declared on `:host`, so it is inherited — set it on the host or any
|
|
56
56
|
* ancestor.
|
|
57
|
+
* @cssprop [--lr-terminal-surface-color=var(--lr-color-surface-raised)] - Card-frame background
|
|
58
|
+
* and the fallback foreground for inverse ANSI segments without an explicit background. The
|
|
59
|
+
* `frame="plain"` escape remains transparent.
|
|
60
|
+
* @cssprop [--lr-terminal-toolbar-button-hover-bg=var(--lr-color-brand-quiet)] - Hover background
|
|
61
|
+
* of `[part="copy-button"]` and `[part="download-button"]`.
|
|
62
|
+
* @cssprop [--lr-terminal-toolbar-button-active-bg=color-mix(in oklab, var(--lr-terminal-toolbar-button-hover-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))] - Pressed background of the toolbar buttons.
|
|
63
|
+
* @cssprop [--lr-terminal-line-hover-bg=var(--lr-color-brand-quiet)] - Hover background of an
|
|
64
|
+
* ordinary rendered `[part="line"]`.
|
|
65
|
+
* @cssprop [--lr-terminal-line-active-bg=color-mix(in oklab, var(--lr-terminal-line-hover-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))] - Pressed background of an ordinary rendered line.
|
|
57
66
|
* @cssprop [--lr-terminal-highlight-accent-bg=var(--lr-color-brand-quiet)] - Background of an
|
|
58
67
|
* `accent`-tone highlighted line. Decoupled from the shared `--lr-color-brand-quiet` token also
|
|
59
68
|
* used by `[part="copy-button"]`/`[part="download-button"]`'s hover state, and from any
|
|
@@ -106,7 +115,7 @@ frame:LyraFrame;
|
|
|
106
115
|
/** Feature-detectable capability mirror -- the same pattern `DocumentAnchorTarget`-adopting
|
|
107
116
|
* viewers use for their own `anchorKinds` field. This component isn't document-viewer-registry-
|
|
108
117
|
* routed, so it has no registry `capabilities.anchors` entry to declare this on instead. */
|
|
109
|
-
readonly anchorKinds:readonly LyraAnchor['kind'][];private lines;private scrollTargetLineNumber;private copyStatus;private buffer;private retainedCellCount;private lineSeq;private column;private appliedContent;private readonly ansiParser;private copyTimeoutId?;private copyTimeoutWindow?;private copyTimeoutGeneration?;private copyGeneration;
|
|
118
|
+
readonly anchorKinds:readonly LyraAnchor['kind'][];private lines;private scrollTargetLineNumber;private copyStatus;private buffer;private retainedCellCount;private lineSeq;private column;private appliedContent;private readonly terminalLineKey;private readonly ansiParser;private copyTimeoutId?;private copyTimeoutWindow?;private copyTimeoutGeneration?;private copyGeneration;
|
|
110
119
|
/** Plain text appended since the last announcer flush -- coalesced so a burst of small
|
|
111
120
|
* `write()` chunks (a common line-by-line stdout pattern) becomes one throttled announcement
|
|
112
121
|
* instead of one per chunk. Reset in the announcer's own `onFlush` callback below, so it always
|
|
@@ -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{snapshotLyraHighlights}from"../../../internal/highlight-collection.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=snapshotLyraHighlights([]),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`
|
|
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{guard}from"lit/directives/guard.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{snapshotLyraHighlights}from"../../../internal/highlight-collection.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=snapshotLyraHighlights([]),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.terminalLineKey=item=>item.number,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"
|
|
@@ -39,9 +39,9 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
39
39
|
>
|
|
40
40
|
<lr-virtual-list
|
|
41
41
|
exportparts="line:line, line-interactive:line-interactive, line-highlight-accent:line-highlight-accent, line-highlight-success:line-highlight-success, line-highlight-warning:line-highlight-warning, line-highlight-danger:line-highlight-danger, line-highlight-neutral:line-highlight-neutral, line-match:line-match, line-active-match:line-active-match"
|
|
42
|
-
.items=${this.lines}
|
|
42
|
+
.items=${guard([this.lines],()=>this.lines)}
|
|
43
43
|
.renderItem=${item=>this.renderLine(item,highlightByLine,highlightOwnerLines,matchedLineNumbers,activeMatchLineNumber)}
|
|
44
|
-
.keyFunction=${
|
|
44
|
+
.keyFunction=${this.terminalLineKey}
|
|
45
45
|
.activeItemId=${this.scrollTargetLineNumber??""}
|
|
46
46
|
row-height=${this.wrap?"auto":"24"}
|
|
47
47
|
@lr-visible-range-change=${this.onVisibleRangeChanged}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{css}from"lit";const styles=css`:host{display:block}[part=base]{border:var(--lr-size-1px) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface-raised);flex-direction:column;display:flex;overflow:hidden}:host([frame=plain]) [part=base]{background:0 0;border:0;border-radius:0}[part=toolbar]{justify-content:flex-end;gap:var(--lr-space-xs);padding:var(--lr-space-xs) var(--lr-space-s);border-block-end:var(--lr-size-1px) solid var(--lr-color-border);display:flex}:host([compact]) [part=toolbar]{gap:var(--lr-terminal-compact-toolbar-gap,var(--lr-space-2xs));padding:var(--lr-terminal-compact-toolbar-padding,var(--lr-space-2xs) var(--lr-space-xs))}[part=copy-button],[part=download-button]{font:inherit;font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);border:var(--lr-size-1px) solid var(--lr-color-border);border-radius:var(--lr-radius-xs);padding:var(--lr-space-2xs) var(--lr-space-xs);cursor:pointer;background:0 0}[part=copy-button]:hover,[part=download-button]:hover{background:var(--lr-color-brand-quiet)}[part=copy-button]:active,[part=download-button]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=copy-button]:focus-visible,[part=download-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=viewport]{block-size:var(--lr-terminal-height,var(--lr-size-20rem));position:relative}lr-virtual-list{block-size:100%;font-family:var(--lr-font-mono);font-size:var(--lr-font-size-sm);color:var(--lr-color-text);display:block}lr-virtual-list::part(line){white-space:pre-wrap;overflow-wrap:anywhere;padding-inline:var(--lr-space-s);line-height:var(--lr-line-height-normal)}lr-virtual-list::part(line):hover{background:var(--lr-color-brand-quiet)}lr-virtual-list::part(line):active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}lr-virtual-list::part(line-highlight-accent):hover,lr-virtual-list::part(line-highlight-accent):active{background:var(--lr-terminal-highlight-accent-bg,var(--lr-color-brand-quiet))}lr-virtual-list::part(line-highlight-success):hover,lr-virtual-list::part(line-highlight-success):active{background:var(--lr-terminal-highlight-success-bg,var(--lr-color-success-quiet))}lr-virtual-list::part(line-highlight-warning):hover,lr-virtual-list::part(line-highlight-warning):active{background:var(--lr-terminal-highlight-warning-bg,var(--lr-color-warning-quiet))}lr-virtual-list::part(line-highlight-danger):hover,lr-virtual-list::part(line-highlight-danger):active{background:var(--lr-terminal-highlight-danger-bg,var(--lr-color-danger-quiet))}lr-virtual-list::part(line-highlight-neutral):hover,lr-virtual-list::part(line-highlight-neutral):active{background:var(--lr-terminal-highlight-neutral-bg,var(--lr-color-surface))}lr-virtual-list::part(line):focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}:host([compact]) lr-virtual-list::part(line){padding-inline:var(--lr-terminal-compact-line-padding-inline,var(--lr-space-xs))}:host(:not([wrap])) lr-virtual-list::part(line){white-space:pre;overflow-wrap:normal;box-sizing:border-box;inline-size:max-content;min-inline-size:100%}:host(:not([wrap])) lr-virtual-list::part(base){overflow-x:auto}[part=jump-to-latest]{font:inherit;font-size:var(--lr-font-size-xs);color:var(--lr-color-surface);background:var(--lr-color-brand);border-radius:var(--lr-radius-pill);padding:var(--lr-space-2xs) var(--lr-space-s);box-shadow:var(--lr-shadow-m);cursor:pointer;z-index:var(--lr-layer-content);transition:opacity var(--lr-transition-fast);border:none;position:absolute;inset-block-end:var(--lr-space-s);inset-inline-end:var(--lr-space-s)}[part=jump-to-latest]:hover{background:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-hover))}[part=jump-to-latest]:active{background:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=jump-to-latest]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}`;export{styles};
|
|
1
|
+
import{css}from"lit";const styles=css`:host{display:block}[part=base]{border:var(--lr-size-1px) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-terminal-surface-color,var(--lr-color-surface-raised));flex-direction:column;display:flex;overflow:hidden}:host([frame=plain]) [part=base]{background:0 0;border:0;border-radius:0}[part=toolbar]{justify-content:flex-end;gap:var(--lr-space-xs);padding:var(--lr-space-xs) var(--lr-space-s);border-block-end:var(--lr-size-1px) solid var(--lr-color-border);display:flex}:host([compact]) [part=toolbar]{gap:var(--lr-terminal-compact-toolbar-gap,var(--lr-space-2xs));padding:var(--lr-terminal-compact-toolbar-padding,var(--lr-space-2xs) var(--lr-space-xs))}[part=copy-button],[part=download-button]{font:inherit;font-size:var(--lr-font-size-xs);color:var(--lr-color-text-quiet);border:var(--lr-size-1px) solid var(--lr-color-border);border-radius:var(--lr-radius-xs);padding:var(--lr-space-2xs) var(--lr-space-xs);cursor:pointer;background:0 0}[part=copy-button]:hover,[part=download-button]:hover{background:var(--lr-terminal-toolbar-button-hover-bg,var(--lr-color-brand-quiet))}[part=copy-button]:active,[part=download-button]:active{background:var(--lr-terminal-toolbar-button-active-bg,color-mix(in oklab, var(--lr-terminal-toolbar-button-hover-bg,var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active)))}[part=copy-button]:focus-visible,[part=download-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=viewport]{block-size:var(--lr-terminal-height,var(--lr-size-20rem));position:relative}lr-virtual-list{block-size:100%;font-family:var(--lr-font-mono);font-size:var(--lr-font-size-sm);color:var(--lr-color-text);display:block}lr-virtual-list::part(line){white-space:pre-wrap;overflow-wrap:anywhere;padding-inline:var(--lr-space-s);line-height:var(--lr-line-height-normal)}lr-virtual-list::part(line):hover{background:var(--lr-terminal-line-hover-bg,var(--lr-color-brand-quiet))}lr-virtual-list::part(line):active{background:var(--lr-terminal-line-active-bg,color-mix(in oklab, var(--lr-terminal-line-hover-bg,var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active)))}lr-virtual-list::part(line-highlight-accent):hover,lr-virtual-list::part(line-highlight-accent):active{background:var(--lr-terminal-highlight-accent-bg,var(--lr-color-brand-quiet))}lr-virtual-list::part(line-highlight-success):hover,lr-virtual-list::part(line-highlight-success):active{background:var(--lr-terminal-highlight-success-bg,var(--lr-color-success-quiet))}lr-virtual-list::part(line-highlight-warning):hover,lr-virtual-list::part(line-highlight-warning):active{background:var(--lr-terminal-highlight-warning-bg,var(--lr-color-warning-quiet))}lr-virtual-list::part(line-highlight-danger):hover,lr-virtual-list::part(line-highlight-danger):active{background:var(--lr-terminal-highlight-danger-bg,var(--lr-color-danger-quiet))}lr-virtual-list::part(line-highlight-neutral):hover,lr-virtual-list::part(line-highlight-neutral):active{background:var(--lr-terminal-highlight-neutral-bg,var(--lr-color-surface))}lr-virtual-list::part(line):focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}:host([compact]) lr-virtual-list::part(line){padding-inline:var(--lr-terminal-compact-line-padding-inline,var(--lr-space-xs))}:host(:not([wrap])) lr-virtual-list::part(line){white-space:pre;overflow-wrap:normal;box-sizing:border-box;inline-size:max-content;min-inline-size:100%}:host(:not([wrap])) lr-virtual-list::part(base){overflow-x:auto}[part=jump-to-latest]{font:inherit;font-size:var(--lr-font-size-xs);color:var(--lr-color-surface);background:var(--lr-color-brand);border-radius:var(--lr-radius-pill);padding:var(--lr-space-2xs) var(--lr-space-s);box-shadow:var(--lr-shadow-m);cursor:pointer;z-index:var(--lr-layer-content);transition:opacity var(--lr-transition-fast);border:none;position:absolute;inset-block-end:var(--lr-space-s);inset-inline-end:var(--lr-space-s)}[part=jump-to-latest]:hover{background:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-hover))}[part=jump-to-latest]:active{background:color-mix(in oklab, var(--lr-color-brand), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=jump-to-latest]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}`;export{styles};
|
|
@@ -47,8 +47,10 @@ export declare function testResultDetailSlotName(suiteId:string,testId:string):s
|
|
|
47
47
|
* status-word text; carries `data-status`.
|
|
48
48
|
* @csspart test-name - The activatable test-name button.
|
|
49
49
|
* @csspart test-duration - The duration text.
|
|
50
|
-
* @csspart test-expand-toggle - The expand/collapse button for a row's failure detail.
|
|
51
|
-
*
|
|
50
|
+
* @csspart test-expand-toggle - The expand/collapse button for a row's failure detail. Its
|
|
51
|
+
* accessible name joins the suite and test name with the localized
|
|
52
|
+
* `accessibleLabelSeparator`. Rendered for any failed test, or any test with canonical
|
|
53
|
+
* suite-scoped detail content.
|
|
52
54
|
* @csspart failure - The failure-detail wrapper; hidden while collapsed.
|
|
53
55
|
* @csspart failure-message - The failure's plain message text.
|
|
54
56
|
* @csspart limit - Localized resource-ceiling notice.
|
|
@@ -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_noMatches,LYRA_DEFAULT_open,LYRA_DEFAULT_popover,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,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_accessibleLabelSeparator,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_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:"✓",failed:"×",skipped:"–"};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,accessibleLabelSeparator:LYRA_DEFAULT_accessibleLabelSeparator,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,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
|
|
@@ -17,7 +17,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
17
17
|
</button>
|
|
18
18
|
`})}
|
|
19
19
|
</div>
|
|
20
|
-
`}renderTest(suiteId,suiteName,test,suiteIndex,testIndex){const expanded=this.isExpanded(suiteId,test),scopedSlot=this.scopedDetailSlot(suiteId,test.id),canExpand=test.status==="failed"||this.hasDetail(suiteId,test.id),domKey=`${suiteIndex}-${testIndex}`,failureId=`${this.idPrefix}-${domKey}-failure`,statusId=`${this.idPrefix}-${domKey}-status`,toggleName=this.localize(expanded?"testResultsCollapseTest":"testResultsExpandTest",void 0,{name
|
|
20
|
+
`}renderTest(suiteId,suiteName,test,suiteIndex,testIndex){const expanded=this.isExpanded(suiteId,test),scopedSlot=this.scopedDetailSlot(suiteId,test.id),canExpand=test.status==="failed"||this.hasDetail(suiteId,test.id),domKey=`${suiteIndex}-${testIndex}`,failureId=`${this.idPrefix}-${domKey}-failure`,statusId=`${this.idPrefix}-${domKey}-status`,toggleName=this.localize(expanded?"testResultsCollapseTest":"testResultsExpandTest",void 0,{name:[suiteName,test.name].join(this.localize("accessibleLabelSeparator"))});return html`
|
|
21
21
|
<div part="test" role="listitem" data-status=${test.status}>
|
|
22
22
|
<span part="test-status" id=${statusId} data-status=${test.status}>
|
|
23
23
|
${test.status==="running"?html`<span aria-hidden="true"><lr-spinner></lr-spinner></span>`:html`<span aria-hidden="true">${STATUS_GLYPH[test.status]}</span>`}
|
|
@@ -95,6 +95,8 @@ export type ThinkingPanelAppearance=LyraFrame;export interface ThinkingPanelTogg
|
|
|
95
95
|
* `[part="header"]` padding while `compact`.
|
|
96
96
|
* @cssprop [--lr-thinking-panel-compact-header-gap=var(--lr-space-2xs)] - Gap between the header
|
|
97
97
|
* toggle, label, and duration while `compact`.
|
|
98
|
+
* @cssprop [--lr-thinking-panel-compact-header-font-size=var(--lr-font-size-sm)] - Font size of
|
|
99
|
+
* `[part="header"]` while `compact`.
|
|
98
100
|
* @cssprop [--lr-thinking-panel-compact-body-padding=var(--lr-space-s)] - `[part="body"]` padding
|
|
99
101
|
* while `compact`.
|
|
100
102
|
* @status stable
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{css}from"lit";const styles=css`:host{--_lr-thinking-panel-max-block-size:var(--lr-size-16rem);display:block}[part=base]{border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);overflow:hidden}:host([compact]) [part=header]{padding:var(--lr-thinking-panel-compact-header-padding,var(--lr-space-2xs) var(--lr-space-s));gap:var(--lr-thinking-panel-compact-header-gap,var(--lr-space-2xs))}:host([compact]) [part=body]{padding:var(--lr-thinking-panel-compact-body-padding,var(--lr-space-s))}:host([frame=plain]) [part=base]{background:0 0;border:0;border-radius:0}[part=header]{align-items:center;gap:var(--lr-space-xs);inline-size:100%;padding:var(--lr-space-s) var(--lr-space-m);color:var(--lr-color-text);font:inherit;font-weight:var(--lr-font-weight-semibold);font-size:var(--lr-font-size-md-sm);text-align:start;cursor:pointer;background:0 0;border:none;flex-wrap:wrap;display:flex}[part=header]:hover{background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=header]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=header]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-offset))}[part=toggle]{transition:transform var(--lr-transition-fast);flex:none;display:inline-flex}:host([expanded]) [part=toggle]{transform:rotate(90deg)}:host(:not([expanded]):dir(rtl)) [part=toggle]{transform:scaleX(-1)}[part=label]{min-inline-size:var(--lr-size-6ch);text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}[part=duration]{align-items:center;gap:var(--lr-size-0-35em);overflow-wrap:anywhere;text-align:end;min-inline-size:0;font-weight:var(--lr-font-weight-normal);font-size:var(--lr-font-size-sm);color:var(--lr-color-text-quiet);flex:0 auto;display:inline-flex}[part=duration][data-pending]{color:var(--lr-thinking-panel-pending-color,var(--lr-color-brand))}.pending-dot{inline-size:var(--lr-size-0-375rem);block-size:var(--lr-size-0-375rem);animation:lr-thinking-panel-pulse var(--lr-transition-ambient) infinite;background:currentColor;border-radius:50%}@keyframes lr-thinking-panel-pulse{0%,to{opacity:.4;transform:scale(.85)}50%{opacity:1;transform:scale(1)}}[part=body]{min-inline-size:0;max-inline-size:100%;max-block-size:var(--lr-thinking-panel-max-block-size,var(--_lr-thinking-panel-max-block-size));overflow-inline:hidden;overflow-block:auto;overflow-wrap:anywhere;overscroll-behavior:contain;padding:var(--lr-space-m);border-block-start:var(--lr-border-width-thin) solid var(--lr-color-border);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-md-sm);line-height:var(--lr-line-height-normal)}[part=body]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-offset))}[part=body]:hover:not(:focus-visible){outline:var(--lr-focus-ring-width) solid var(--lr-color-border);outline-offset:calc(-1 * var(--lr-focus-ring-offset))}[part=body][hidden]{display:none}@media (prefers-reduced-motion:reduce){[part=toggle]{transition:none!important}.pending-dot{opacity:1;transform:none;animation:none!important}}`;export{styles};
|
|
1
|
+
import{css}from"lit";const styles=css`:host{--_lr-thinking-panel-max-block-size:var(--lr-size-16rem);display:block}[part=base]{border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);overflow:hidden}:host([compact]) [part=header]{padding:var(--lr-thinking-panel-compact-header-padding,var(--lr-space-2xs) var(--lr-space-s));gap:var(--lr-thinking-panel-compact-header-gap,var(--lr-space-2xs));font-size:var(--lr-thinking-panel-compact-header-font-size,var(--lr-font-size-sm))}:host([compact]) [part=body]{padding:var(--lr-thinking-panel-compact-body-padding,var(--lr-space-s))}:host([frame=plain]) [part=base]{background:0 0;border:0;border-radius:0}[part=header]{align-items:center;gap:var(--lr-space-xs);inline-size:100%;padding:var(--lr-space-s) var(--lr-space-m);color:var(--lr-color-text);font:inherit;font-weight:var(--lr-font-weight-semibold);font-size:var(--lr-font-size-md-sm);text-align:start;cursor:pointer;background:0 0;border:none;flex-wrap:wrap;display:flex}[part=header]:hover{background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=header]:active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=header]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-offset))}[part=toggle]{transition:transform var(--lr-transition-fast);flex:none;display:inline-flex}:host([expanded]) [part=toggle]{transform:rotate(90deg)}:host(:not([expanded]):dir(rtl)) [part=toggle]{transform:scaleX(-1)}[part=label]{min-inline-size:var(--lr-size-6ch);text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}[part=duration]{align-items:center;gap:var(--lr-size-0-35em);overflow-wrap:anywhere;text-align:end;min-inline-size:0;font-weight:var(--lr-font-weight-normal);font-size:var(--lr-font-size-sm);color:var(--lr-color-text-quiet);flex:0 auto;display:inline-flex}[part=duration][data-pending]{color:var(--lr-thinking-panel-pending-color,var(--lr-color-brand))}.pending-dot{inline-size:var(--lr-size-0-375rem);block-size:var(--lr-size-0-375rem);animation:lr-thinking-panel-pulse var(--lr-transition-ambient) infinite;background:currentColor;border-radius:50%}@keyframes lr-thinking-panel-pulse{0%,to{opacity:.4;transform:scale(.85)}50%{opacity:1;transform:scale(1)}}[part=body]{min-inline-size:0;max-inline-size:100%;max-block-size:var(--lr-thinking-panel-max-block-size,var(--_lr-thinking-panel-max-block-size));overflow-inline:hidden;overflow-block:auto;overflow-wrap:anywhere;overscroll-behavior:contain;padding:var(--lr-space-m);border-block-start:var(--lr-border-width-thin) solid var(--lr-color-border);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-md-sm);line-height:var(--lr-line-height-normal)}[part=body]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-offset))}[part=body]:hover:not(:focus-visible){outline:var(--lr-focus-ring-width) solid var(--lr-color-border);outline-offset:calc(-1 * var(--lr-focus-ring-offset))}[part=body][hidden]{display:none}@media (prefers-reduced-motion:reduce){[part=toggle]{transition:none!important}.pending-dot{opacity:1;transform:none;animation:none!important}}`;export{styles};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{activateOverlay}from"../../../internal/overlay-manager.js";import{
|
|
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{LyraElement}from"../../../internal/lyra-element.js";import{activateOverlay}from"../../../internal/overlay-manager.js";import{nextId}from"../../../internal/a11y.js";import{resolveLocalizedParts}from"../../../internal/localization-runtime.js";import{styles}from"./tool-approval-dialog.styles.js";import"../../utility/json-viewer/json-viewer.class.js";import"../../forms/button/button.class.js";import{trueDefaultBooleanConverter,trueDefaultSpellcheckConverter as spellcheckConverter}from"../../../internal/converters.js";import{activeElementIn}from"../../../internal/active-element.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{LYRA_DEFAULT_approve,LYRA_DEFAULT_cancel,LYRA_DEFAULT_deny,LYRA_DEFAULT_edit,LYRA_DEFAULT_invalidJson,LYRA_DEFAULT_toolApprovalArgsLabel,LYRA_DEFAULT_toolApprovalGenericTool,LYRA_DEFAULT_toolApprovalHeading}from"../../../internal/default-strings.generated.js";class LyraToolApprovalDialog extends LyraElement{constructor(){super(...arguments),this.open=!1,this.lightDismiss=!1,this.proposalKey="",this.toolName="",this.accessibleLabel=null,this.args={},this.editable=!0,this.pending=null,this.spellcheck=!1,this.autocapitalize="off",this.autoCorrect="off",this.autocomplete="off",this.wrap="soft",this.inputMode="",this.enterKeyHint="",this.editing=!1,this.draftText="",this.draftError="",this.suppressNextErrorAnnouncement=!0,this.titleId=nextId("tool-approval-dialog-title"),this.errorId=nextId("tool-approval-dialog-error"),this.onBackdropClick=()=>{this.overlay?.dismissBackdrop()},this.toggleEdit=()=>{this.pending==null&&(this.editing?(this.editing=!1,this.draftText="",this.draftError=""):(this.editing=!0,this.draftText=this.stringifyArgs(),this.draftError=""))},this.onDraftInput=e=>{if(this.pending!=null){e.stopPropagation();return}const value=e.target.value;this.draftText=value;try{JSON.parse(value),this.draftError=""}catch{this.draftError=this.localize("invalidJson")}e.stopPropagation()},this.onEditorFocus=()=>{this.emit("focus")},this.onEditorBlur=()=>{this.emit("blur")},this.onApprove=()=>{if(this.pending!=null)return;let currentArgs=this.args;if(this.editing)try{currentArgs=JSON.parse(this.draftText)}catch{return}if(this.emit("lr-approve",{args:currentArgs},{cancelable:!0}).defaultPrevented){this.pending="approve";return}this.close("approve")},this.onDeny=()=>{if(this.pending!=null)return;if(this.emit("lr-deny",null,{cancelable:!0}).defaultPrevented){this.pending="deny";return}this.close("deny")}}static{this.defaultStrings={...super.defaultStrings,approve:LYRA_DEFAULT_approve,cancel:LYRA_DEFAULT_cancel,deny:LYRA_DEFAULT_deny,edit:LYRA_DEFAULT_edit,invalidJson:LYRA_DEFAULT_invalidJson,toolApprovalArgsLabel:LYRA_DEFAULT_toolApprovalArgsLabel,toolApprovalGenericTool:LYRA_DEFAULT_toolApprovalGenericTool,toolApprovalHeading:LYRA_DEFAULT_toolApprovalHeading}}static{this.styles=[LyraElement.styles,styles]}resetProposalState(){this.editing=!1,this.draftText="",this.draftError="",this.pending=null}willUpdate(changed){super.willUpdate(changed),this.hasUpdated&&!this.suppressNextErrorAnnouncement&&changed.has("draftError")&&this.draftError&&!changed.get("draftError")&&this.errorAnnouncementSink?.announce(this.draftError),changed.has("open")&&(this.open?(this.activateOverlay(),this.resetProposalState()):(this.overlay?.deactivate(),this.overlay=void 0));const proposalChanged=changed.has("proposalKey")||changed.has("toolName")||changed.has("args");this.hasUpdated&&proposalChanged&&!(changed.has("open")&&this.open)&&this.resetProposalState(),changed.has("editable")&&!this.editable&&this.editing&&(this.editing=!1,this.draftText="",this.draftError="")}updated(changed){if(super.updated(changed),this.suppressNextErrorAnnouncement=!1,changed.has("open")&&this.open){this.overlay?.focusInitial();return}changed.has("editing")&&(this.editing?this.shadowRoot?.querySelector('[part="args-editor"]')?.focus():this.open&&!activeElementIn(this.shadowRoot)&&this.shadowRoot?.querySelector('[part="deny-button"]')?.focus())}connectedCallback(){super.connectedCallback(),this.errorAnnouncementSink?.element.ownerDocument!==this.ownerDocument&&(this.errorAnnouncementSink?.release(),this.errorAnnouncementSink=acquireAnnouncementSink("assertive",{document:this.ownerDocument,source:this})),this.hasUpdated&&(this.suppressNextErrorAnnouncement=!0,this.requestUpdate()),this.hasUpdated&&this.open&&(this.activateOverlay(),queueMicrotask(()=>this.overlay?.focusInitial()))}disconnectedCallback(){super.disconnectedCallback(),this.overlay?.suspend(),this.errorAnnouncementSink?.release(),this.errorAnnouncementSink=void 0,this.suppressNextErrorAnnouncement=!0}activateOverlay(){if(this.overlay?.isActive()){this.overlay.resume();return}this.overlay=activateOverlay({host:this,panel:()=>this.shadowRoot?.querySelector('[part="panel"]')??null,onEscape:()=>{this.pending==null&&this.close("escape")},onBackdrop:()=>{this.pending!=null||!this.lightDismiss||this.close("backdrop")},preferredInitialFocus:()=>this.shadowRoot?.querySelector('[part="deny-button"]')??null,lockScroll:!0,suspendWhenUnrendered:!0})}close(reason="api"){this.open&&(this.open=!1,this.emit("lr-close",reason))}show(){this.open||(this.open=!0)}hide(reason="api"){this.close(reason)}stringifyArgs(){try{return JSON.stringify(this.args,null,2)??"null"}catch{return"null"}}render(){const hasError=this.editing&&this.draftError.length>0,toolName=this.toolName||this.localize("toolApprovalGenericTool"),headingTemplate=this.localize("toolApprovalHeading"),headingParts=resolveLocalizedParts(headingTemplate,marker=>this.localize("toolApprovalHeading",void 0,{tool:marker})),panelLabel=!this.hasAttribute("aria-label")&&typeof this.accessibleLabel=="string"&&this.accessibleLabel.length>0?this.accessibleLabel:null;return html`
|
|
2
2
|
<div part="backdrop" @click=${this.onBackdropClick}></div>
|
|
3
3
|
<div
|
|
4
4
|
part="panel"
|
|
@@ -15,7 +15,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
15
15
|
<circle cx="12" cy="12" r="9"></circle>
|
|
16
16
|
<line x1="9" y1="9" x2="15" y2="15"></line>
|
|
17
17
|
<line x1="15" y1="9" x2="9" y2="15"></line>
|
|
18
|
-
`)}function deniedIcon(){return icon(svg`<circle cx="12" cy="12" r="9"></circle><line x1="6" y1="18" x2="18" y2="6"></line>`)}const STATUS_ICON={pending:pendingIcon,running:runningIcon,success:successIcon,error:errorIcon,denied:deniedIcon},STATUS_LABEL={pending:"Pending",running:"Running",success:"Success",error:"Error",denied:"Denied"},STATUS_LABEL_KEY={pending:"statusPending",running:"statusRunning",success:"statusSuccess",error:"statusError",denied:"statusDenied"},STATUS_VALUES=new Set(Object.keys(STATUS_LABEL)),statusConverter={fromAttribute(value){return value!==null&&STATUS_VALUES.has(value)?value:"pending"},toAttribute(value){return value}};class LyraToolCallChip extends LyraElement{constructor(){super(...arguments),this.name="",this.category="",this.status="pending",this.summary="",this.icon="",this.callId="",this.hasDetailSlot=!1,this.tooltipOpen=!1,this.tooltipId=nextId("tool-call-chip-tooltip"),this.hovering=!1,this.focused=!1,this.onDetailSlotChange=e=>{this.hasDetailSlot=this.hasPreviewNodes(e.target.assignedNodes({flatten:!0})),this.hasDetailSlot||this.hideTooltip()},this.onMouseEnter=()=>{this.hovering=!0,this.showTooltip()},this.onMouseLeave=()=>{this.hovering=!1,!this.focused&&this.hideTooltip()},this.onFocus=()=>{this.focused=!0,this.showTooltip()},this.onBlur=()=>{this.focused=!1,!this.hovering&&this.hideTooltip()},this.onKeyDown=e=>{e.key==="Escape"&&this.tooltipOpen&&(e.stopPropagation(),this.hideTooltip())},this.onClick=()=>{this.emit("lr-tool-call-chip-select",{name:this.name,callId:this.callId})}}static{this.defaultStrings={...super.defaultStrings,accessibleLabelSeparator:LYRA_DEFAULT_accessibleLabelSeparator,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,durationSeconds:LYRA_DEFAULT_durationSeconds,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusDenied:LYRA_DEFAULT_statusDenied,statusError:LYRA_DEFAULT_statusError,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess,toolCall:LYRA_DEFAULT_toolCall}}static{this.styles=[LyraElement.styles,styles]}hasPreviewNodes(nodes){return nodes.some(node=>node.nodeType===3
|
|
18
|
+
`)}function deniedIcon(){return icon(svg`<circle cx="12" cy="12" r="9"></circle><line x1="6" y1="18" x2="18" y2="6"></line>`)}const STATUS_ICON={pending:pendingIcon,running:runningIcon,success:successIcon,error:errorIcon,denied:deniedIcon},STATUS_LABEL={pending:"Pending",running:"Running",success:"Success",error:"Error",denied:"Denied"},STATUS_LABEL_KEY={pending:"statusPending",running:"statusRunning",success:"statusSuccess",error:"statusError",denied:"statusDenied"},STATUS_VALUES=new Set(Object.keys(STATUS_LABEL)),statusConverter={fromAttribute(value){return value!==null&&STATUS_VALUES.has(value)?value:"pending"},toAttribute(value){return value}};class LyraToolCallChip extends LyraElement{constructor(){super(...arguments),this.name="",this.category="",this.status="pending",this.summary="",this.icon="",this.callId="",this.hasDetailSlot=!1,this.tooltipOpen=!1,this.tooltipId=nextId("tool-call-chip-tooltip"),this.hovering=!1,this.focused=!1,this.onDetailSlotChange=e=>{this.hasDetailSlot=this.hasPreviewNodes(e.target.assignedNodes({flatten:!0})),this.hasDetailSlot||this.hideTooltip()},this.onMouseEnter=()=>{this.hovering=!0,this.showTooltip()},this.onMouseLeave=()=>{this.hovering=!1,!this.focused&&this.hideTooltip()},this.onFocus=()=>{this.focused=!0,this.showTooltip()},this.onBlur=()=>{this.focused=!1,!this.hovering&&this.hideTooltip()},this.onKeyDown=e=>{e.key==="Escape"&&this.tooltipOpen&&(e.stopPropagation(),this.hideTooltip())},this.onClick=()=>{this.emit("lr-tool-call-chip-select",{name:this.name,callId:this.callId})}}static{this.defaultStrings={...super.defaultStrings,accessibleLabelSeparator:LYRA_DEFAULT_accessibleLabelSeparator,collapse:LYRA_DEFAULT_collapse,details:LYRA_DEFAULT_details,durationMilliseconds:LYRA_DEFAULT_durationMilliseconds,durationSeconds:LYRA_DEFAULT_durationSeconds,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,popover:LYRA_DEFAULT_popover,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusDenied:LYRA_DEFAULT_statusDenied,statusError:LYRA_DEFAULT_statusError,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess,toolCall:LYRA_DEFAULT_toolCall}}static{this.styles=[LyraElement.styles,styles]}hasPreviewNodes(nodes){return nodes.some(node=>{if(node.nodeType===3)return!!node.textContent?.trim();if(node.nodeType!==1)return!1;const slotName=node.getAttribute("slot");return slotName===null||slotName===""})}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||(this.hasDetailSlot=this.hasPreviewNodes(Array.from(this.childNodes)))}updated(changed){if(super.updated(changed),changed.has("tooltipOpen")&&(this.cleanupPositioner?.(),this.cleanupPositioner=void 0,this.tooltipOpen)){const anchor=this.renderRoot.querySelector('[part="base"]'),tooltip=this.renderRoot.querySelector('[part="tooltip"]');anchor&&tooltip&&(this.cleanupPositioner=place(anchor,tooltip,{placement:"top-start"}))}}disconnectedCallback(){super.disconnectedCallback(),this.cleanupPositioner?.(),this.cleanupPositioner=void 0,this.tooltipOpen=!1,this.hovering=!1,this.focused=!1}showTooltip(){!this.hasDetailSlot||this.tooltipOpen||(this.tooltipOpen=!0)}hideTooltip(){this.tooltipOpen&&(this.tooltipOpen=!1)}focus(options){this.baseEl?.focus(options)}blur(){this.baseEl?.blur()}click(){this.baseEl?.click()}get effectiveStatus(){return STATUS_VALUES.has(this.status)?this.status:"pending"}get safeDurationMs(){return this.durationMs!=null&&Number.isFinite(this.durationMs)?finiteRange(this.durationMs,0,0):null}get accessibleLabel(){const parts=[this.name||this.localize("toolCall")];this.summary&&parts.push(this.summary),parts.push(this.localize(STATUS_LABEL_KEY[this.effectiveStatus]));const durationMs=this.safeDurationMs;return durationMs!=null&&parts.push(this.localizedDuration(durationMs)),parts.join(this.localize("accessibleLabelSeparator"))}localizedDuration(ms){const duration=durationMessageValue(ms);return this.localize(duration.key,void 0,{value:getNumberFormat(this.effectiveLocale,{maximumFractionDigits:duration.key==="durationSeconds"?1:0}).format(duration.value)})}render(){const hasCategory=this.category.length>0,hasSummary=this.summary.length>0,durationMs=this.safeDurationMs,hasDuration=durationMs!=null,status=this.effectiveStatus;return html`
|
|
19
19
|
<button
|
|
20
20
|
part="base"
|
|
21
21
|
type="button"
|