@aceshooting/lyra-ui 29.0.2 → 29.1.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 +37 -0
- package/README.md +19 -26
- package/design-tokens.json +1 -1
- package/dist/cli/migrate-wa.mjs +2 -0
- package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts +5 -3
- package/dist/components/agent-tools/activity-feed/activity-feed.class.js +4 -3
- package/dist/components/agent-tools/activity-feed/activity-feed.styles.js +1 -1
- package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts +21 -5
- package/dist/components/agent-tools/agent-trace/agent-trace.class.js +14 -11
- package/dist/components/agent-tools/agent-trace/agent-trace.styles.js +1 -1
- package/dist/components/agent-tools/confirm-bar/confirm-bar.class.js +2 -2
- package/dist/components/agent-tools/eval-dataset/eval-dataset.class.d.ts +34 -7
- package/dist/components/agent-tools/eval-dataset/eval-dataset.class.js +25 -11
- package/dist/components/agent-tools/eval-result/eval-result-source.js +1 -0
- package/dist/components/agent-tools/eval-result/eval-result.class.d.ts +31 -11
- package/dist/components/agent-tools/eval-result/eval-result.class.js +29 -15
- package/dist/components/agent-tools/eval-result/eval-result.styles.js +1 -1
- package/dist/components/agent-tools/eval-result/eval-run-result.d.ts +10 -0
- package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts +26 -5
- package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +16 -6
- package/dist/components/agent-tools/span-waterfall/span-waterfall.d.ts +1 -1
- package/dist/components/agent-tools/span-waterfall/span-waterfall.js +1 -1
- package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +1 -1
- package/dist/components/agent-tools/task-list/task-list.class.d.ts +29 -6
- package/dist/components/agent-tools/task-list/task-list.class.js +13 -7
- package/dist/components/agent-tools/task-list/task-list.d.ts +1 -1
- package/dist/components/agent-tools/task-list/task-list.js +1 -1
- package/dist/components/agent-tools/task-list/task-list.styles.js +1 -1
- package/dist/components/agent-tools/terminal/terminal.class.d.ts +9 -5
- package/dist/components/agent-tools/terminal/terminal.class.js +8 -8
- package/dist/components/agent-tools/test-results/test-results.class.d.ts +16 -4
- package/dist/components/agent-tools/test-results/test-results.class.js +15 -6
- package/dist/components/agent-tools/test-results/test-results.d.ts +1 -0
- package/dist/components/agent-tools/test-results/test-results.js +1 -1
- package/dist/components/agent-tools/test-results/test-results.styles.js +1 -1
- package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +7 -4
- package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +2 -1
- package/dist/components/agent-tools/trace-tree/span-projection.js +1 -0
- package/dist/components/agent-tools/trace-tree/span-shared.d.ts +29 -0
- package/dist/components/agent-tools/trace-tree/span-shared.js +1 -0
- package/dist/components/agent-tools/trace-tree/span.d.ts +5 -35
- package/dist/components/agent-tools/trace-tree/span.js +1 -1
- package/dist/components/agent-tools/trace-tree/trace-tree.class.d.ts +27 -5
- package/dist/components/agent-tools/trace-tree/trace-tree.class.js +19 -9
- package/dist/components/agent-tools/trace-tree/trace-tree.d.ts +1 -1
- package/dist/components/agent-tools/trace-tree/trace-tree.js +1 -1
- package/dist/components/agent-tools/trace-tree/trace-tree.styles.js +1 -1
- package/dist/components/charts/chart/bar-chart.class.d.ts +5 -1
- package/dist/components/charts/chart/box-plot.class.d.ts +2 -2
- package/dist/components/charts/chart/box-plot.class.js +3 -3
- package/dist/components/charts/chart/bubble-chart.class.d.ts +5 -1
- package/dist/components/charts/chart/chart-prepared-data.d.ts +9 -0
- package/dist/components/charts/chart/chart-prepared-data.js +1 -0
- package/dist/components/charts/chart/chart-spatial-data.js +2 -0
- package/dist/components/charts/chart/chart-sync.js +1 -1
- package/dist/components/charts/chart/chart-table-sampling.js +1 -1
- package/dist/components/charts/chart/chart.class.d.ts +56 -6
- package/dist/components/charts/chart/chart.class.js +18 -8
- package/dist/components/charts/chart/chart.styles.js +1 -1
- package/dist/components/charts/chart/doughnut-chart.class.d.ts +5 -1
- package/dist/components/charts/chart/histogram-buckets.d.ts +1 -1
- package/dist/components/charts/chart/histogram-buckets.js +1 -1
- package/dist/components/charts/chart/histogram.class.d.ts +19 -4
- package/dist/components/charts/chart/histogram.class.js +1 -1
- package/dist/components/charts/chart/line-chart.class.d.ts +5 -1
- package/dist/components/charts/chart/lite-chart.class.d.ts +51 -11
- package/dist/components/charts/chart/lite-chart.class.js +33 -27
- package/dist/components/charts/chart/lite-chart.styles.js +1 -1
- package/dist/components/charts/chart/pie-chart.class.d.ts +5 -1
- package/dist/components/charts/chart/polar-area-chart.class.d.ts +5 -1
- package/dist/components/charts/chart/radar-chart.class.d.ts +5 -1
- package/dist/components/charts/chart/scatter-chart.class.d.ts +5 -1
- package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +6 -3
- package/dist/components/conversation/agent-workspace/agent-workspace.class.js +6 -5
- package/dist/components/conversation/agent-workspace/agent-workspace.styles.js +1 -1
- package/dist/components/conversation/chat-viewport/chat-viewport.class.d.ts +8 -0
- package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
- package/dist/components/conversation/code-block/code-block-base.class.d.ts +5 -3
- package/dist/components/conversation/code-block/code-block-base.class.js +1 -1
- package/dist/components/conversation/code-block/code-block-core.class.d.ts +4 -1
- package/dist/components/conversation/code-block/code-block-core.class.js +1 -1
- package/dist/components/conversation/code-block/code-block-shared.d.ts +6 -4
- package/dist/components/conversation/code-block/code-block-shared.js +3 -2
- package/dist/components/conversation/code-block/code-block.class.d.ts +11 -4
- package/dist/components/conversation/code-block/code-block.class.js +1 -1
- package/dist/components/conversation/code-block/code-block.d.ts +1 -1
- package/dist/components/conversation/code-block/code-block.styles.js +1 -1
- package/dist/components/conversation/code-block/shiki-types.d.ts +2 -0
- package/dist/components/conversation/code-block/shiki-types.js +1 -1
- package/dist/components/conversation/markdown/markdown-base.class.d.ts +6 -4
- package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
- package/dist/components/conversation/markdown/markdown-code-header.d.ts +2 -2
- package/dist/components/conversation/markdown/markdown-code-header.js +1 -1
- package/dist/components/conversation/markdown/markdown-core.class.d.ts +8 -3
- package/dist/components/conversation/markdown/markdown-progressive.js +2 -2
- package/dist/components/conversation/markdown/markdown-shared.d.ts +5 -10
- package/dist/components/conversation/markdown/markdown-shared.js +5 -5
- package/dist/components/conversation/markdown/markdown-streaming-tail.js +1 -1
- package/dist/components/conversation/markdown/markdown.class.d.ts +17 -10
- package/dist/components/conversation/markdown/markdown.class.js +1 -1
- package/dist/components/conversation/markdown/markdown.styles.js +1 -1
- package/dist/components/conversation/model-select/model-select.class.d.ts +4 -3
- package/dist/components/conversation/model-select/model-select.class.js +3 -2
- package/dist/components/conversation/model-select/model-select.styles.js +1 -1
- package/dist/components/conversation/model-settings-panel/model-settings-panel.class.d.ts +2 -1
- package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js +2 -1
- package/dist/components/conversation/model-settings-panel/model-settings-panel.styles.js +1 -1
- package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +3 -2
- package/dist/components/conversation/prompt-input/prompt-input.class.js +2 -1
- package/dist/components/conversation/prompt-input/prompt-input.styles.js +1 -1
- package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +10 -2
- package/dist/components/conversation/prompt-queue/prompt-queue.class.js +15 -6
- package/dist/components/conversation/prompt-queue/prompt-queue.styles.js +1 -1
- package/dist/components/conversation/realtime-session/realtime-session.class.d.ts +3 -1
- package/dist/components/conversation/realtime-session/realtime-session.class.js +2 -1
- package/dist/components/conversation/realtime-session/realtime-session.styles.js +1 -1
- package/dist/components/conversation/streaming-text/markdown-detection.d.ts +2 -0
- package/dist/components/conversation/streaming-text/markdown-detection.js +4 -1
- package/dist/components/conversation/streaming-text/streaming-text-base.class.d.ts +6 -2
- package/dist/components/conversation/streaming-text/streaming-text-base.class.js +3 -3
- package/dist/components/conversation/streaming-text/streaming-text-core.class.js +1 -1
- package/dist/components/conversation/streaming-text/streaming-text.class.js +1 -0
- package/dist/components/conversation/thread-list/thread-list.class.d.ts +34 -4
- package/dist/components/conversation/thread-list/thread-list.class.js +22 -15
- package/dist/components/conversation/thread-list/thread-list.d.ts +1 -1
- package/dist/components/conversation/thread-list/thread-list.js +1 -1
- package/dist/components/conversation/thread-list/thread-list.styles.js +1 -1
- package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts +6 -2
- package/dist/components/conversation/transcript-feed/transcript-feed.class.js +3 -2
- package/dist/components/conversation/transcript-feed/transcript-feed.styles.js +1 -1
- package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +3 -2
- package/dist/components/conversation/voice-picker/voice-picker.class.js +3 -2
- package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
- package/dist/components/data/calendar/calendar.class.d.ts +5 -2
- package/dist/components/data/calendar/calendar.class.js +1 -1
- package/dist/components/data/data-grid/data-grid-processing.js +2 -2
- package/dist/components/data/data-grid/data-grid.class.d.ts +22 -8
- package/dist/components/data/data-grid/data-grid.class.js +20 -19
- package/dist/components/data/data-grid/data-grid.styles.js +1 -1
- package/dist/components/data/document-library/document-library.class.d.ts +31 -4
- package/dist/components/data/document-library/document-library.class.js +25 -12
- package/dist/components/data/document-library/document-library.styles.js +1 -1
- package/dist/components/data/file-tree/file-tree.class.d.ts +30 -6
- package/dist/components/data/file-tree/file-tree.class.js +4 -3
- package/dist/components/data/file-tree/file-tree.d.ts +1 -0
- package/dist/components/data/file-tree/file-tree.js +1 -1
- package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +31 -6
- package/dist/components/data/flow-canvas/flow-canvas.class.js +40 -19
- package/dist/components/data/flow-canvas/flow-canvas.styles.js +1 -1
- package/dist/components/data/flow-canvas/flow-model.js +1 -1
- package/dist/components/data/flow-canvas/flow-source.js +1 -0
- package/dist/components/data/flow-canvas/flow-types.d.ts +4 -2
- package/dist/components/data/flow-canvas/flow-viewport-index.js +1 -0
- package/dist/components/data/flow-minimap/flow-minimap.class.d.ts +9 -3
- package/dist/components/data/flow-minimap/flow-minimap.class.js +11 -2
- package/dist/components/data/flow-minimap/flow-minimap.styles.js +1 -1
- package/dist/components/data/funnel/funnel.class.d.ts +7 -3
- package/dist/components/data/funnel/funnel.class.js +2 -2
- package/dist/components/data/heatmap/calendar-grid.d.ts +1 -1
- package/dist/components/data/heatmap/calendar-grid.js +1 -1
- package/dist/components/data/heatmap/heatmap-grid-navigation.js +1 -1
- package/dist/components/data/heatmap/heatmap-limits.d.ts +1 -1
- package/dist/components/data/heatmap/heatmap-matrix-source-controller.js +1 -0
- package/dist/components/data/heatmap/heatmap-matrix-source.d.ts +5 -0
- package/dist/components/data/heatmap/heatmap-matrix-source.js +1 -0
- package/dist/components/data/heatmap/heatmap-scale.d.ts +0 -16
- package/dist/components/data/heatmap/heatmap-scale.js +1 -1
- package/dist/components/data/heatmap/heatmap.class.d.ts +40 -11
- package/dist/components/data/heatmap/heatmap.class.js +26 -6
- package/dist/components/data/heatmap/heatmap.styles.js +1 -1
- package/dist/components/data/pagination/pagination.class.js +1 -1
- package/dist/components/data/sequence-strip/sequence-strip-item.d.ts +17 -0
- package/dist/components/data/sequence-strip/sequence-strip-source-controller.js +1 -0
- package/dist/components/data/sequence-strip/sequence-strip-source.d.ts +5 -0
- package/dist/components/data/sequence-strip/sequence-strip-source.js +1 -0
- package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +24 -19
- package/dist/components/data/sequence-strip/sequence-strip.class.js +23 -4
- package/dist/components/data/sequence-strip/sequence-strip.styles.js +1 -1
- package/dist/components/data/sparkline/sparkline.class.d.ts +17 -4
- package/dist/components/data/sparkline/sparkline.class.js +3 -3
- package/dist/components/data/sparkline/sparkline.styles.js +1 -1
- package/dist/components/data/table/table.class.d.ts +14 -10
- package/dist/components/data/table/table.class.js +17 -16
- package/dist/components/data/timeline/timeline.class.d.ts +5 -2
- package/dist/components/data/timeline/timeline.class.js +1 -1
- package/dist/components/data/tree/tree-item.class.js +1 -1
- package/dist/components/data/tree/tree-owner-controller.js +1 -1
- package/dist/components/data/tree/tree.class.d.ts +28 -6
- package/dist/components/data/tree/tree.class.js +3 -3
- package/dist/components/data/tree/tree.d.ts +1 -0
- package/dist/components/data/tree/tree.js +1 -1
- package/dist/components/data/word-cloud/word-cloud.class.d.ts +17 -7
- package/dist/components/data/word-cloud/word-cloud.class.js +6 -4
- package/dist/components/data/word-cloud/word-cloud.styles.js +1 -1
- package/dist/components/forms/catalog-picker-base.d.ts +1 -1
- package/dist/components/forms/catalog-picker-base.js +6 -6
- package/dist/components/forms/catalog-picker-base.styles.js +1 -1
- package/dist/components/forms/combobox/combobox.class.d.ts +7 -3
- package/dist/components/forms/combobox/combobox.class.js +1 -1
- package/dist/components/forms/combobox/option.class.d.ts +4 -2
- package/dist/components/forms/combobox/option.class.js +2 -2
- package/dist/components/forms/country-picker/country-picker.class.d.ts +3 -1
- package/dist/components/forms/country-picker/country-picker.class.js +1 -1
- package/dist/components/forms/currency-picker/currency-picker.class.d.ts +2 -0
- package/dist/components/forms/currency-picker/currency-picker.class.js +1 -1
- package/dist/components/forms/currency-picker/currency-presentation.js +1 -1
- package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +6 -2
- package/dist/components/forms/emoji-picker/emoji-picker.class.js +3 -2
- package/dist/components/forms/emoji-picker/emoji-picker.styles.js +1 -1
- package/dist/components/forms/locale-picker/locale-picker.class.d.ts +8 -2
- package/dist/components/forms/locale-picker/locale-picker.class.js +5 -4
- package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
- package/dist/components/forms/select/select.class.d.ts +11 -3
- package/dist/components/forms/select/select.class.js +4 -4
- package/dist/components/forms/time-zone-picker/time-zone-picker.class.d.ts +2 -0
- package/dist/components/forms/time-zone-picker/time-zone-picker.class.js +1 -1
- package/dist/components/forms/token-input/token-input.class.d.ts +6 -1
- package/dist/components/forms/token-input/token-input.class.js +15 -13
- package/dist/components/forms/unit-picker/unit-picker.class.d.ts +2 -0
- package/dist/components/forms/unit-picker/unit-picker.class.js +1 -1
- package/dist/components/layout/app-rail/app-rail.class.d.ts +1 -1
- package/dist/components/layout/app-rail/app-rail.class.js +1 -1
- package/dist/components/layout/command-palette/command-palette.class.d.ts +5 -2
- package/dist/components/layout/command-palette/command-palette.class.js +2 -1
- package/dist/components/layout/command-palette/command-palette.styles.js +1 -1
- package/dist/components/layout/menu/menu-item.class.d.ts +2 -2
- package/dist/components/layout/menu/menu-item.class.js +2 -2
- package/dist/components/layout/menu/menu.class.d.ts +1 -1
- package/dist/components/layout/menu/menu.class.js +1 -1
- package/dist/components/layout/menubar/menubar.class.d.ts +1 -1
- package/dist/components/layout/menubar/menubar.class.js +1 -1
- package/dist/components/layout/reorder-list/reorder-item.class.d.ts +2 -2
- package/dist/components/layout/reorder-list/reorder-item.class.js +2 -2
- package/dist/components/layout/reorder-list/reorder-list.class.d.ts +1 -1
- package/dist/components/layout/reorder-list/reorder-list.class.js +1 -1
- package/dist/components/layout/virtual-list/virtual-list.class.d.ts +13 -9
- package/dist/components/layout/virtual-list/virtual-list.class.js +21 -17
- package/dist/components/media/av-player/av-cue-index.js +1 -0
- package/dist/components/media/av-player/av-cue-source.d.ts +13 -0
- package/dist/components/media/av-player/av-cue-source.js +1 -0
- package/dist/components/media/av-player/av-metadata.d.ts +2 -2
- package/dist/components/media/av-player/av-metadata.js +1 -1
- package/dist/components/media/av-player/av-player-cue-source-controller.js +1 -0
- package/dist/components/media/av-player/av-player.class.d.ts +34 -12
- package/dist/components/media/av-player/av-player.class.js +15 -10
- package/dist/components/media/flag/flag.class.js +1 -1
- package/dist/components/media/flag/language-map.js +1 -1
- package/dist/components/media/lightbox/lightbox-source.js +1 -0
- package/dist/components/media/lightbox/lightbox-types.d.ts +15 -0
- package/dist/components/media/lightbox/lightbox.class.d.ts +22 -21
- package/dist/components/media/lightbox/lightbox.class.js +6 -4
- package/dist/components/media/lightbox/lightbox.styles.js +1 -1
- package/dist/components/media/map/map-geojson-diff.d.ts +6 -6
- package/dist/components/media/map/map-geojson-diff.js +1 -1
- package/dist/components/media/map/map-loader.d.ts +5 -1
- package/dist/components/media/map/map.class.d.ts +24 -6
- package/dist/components/media/map/map.class.js +2 -2
- package/dist/components/media/map/map.styles.js +1 -1
- package/dist/components/media/video-playlist/video-playlist.class.d.ts +2 -1
- package/dist/components/media/video-playlist/video-playlist.class.js +1 -1
- package/dist/components/overlays/chip/chip.class.d.ts +1 -1
- package/dist/components/overlays/chip/chip.class.js +1 -1
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.d.ts +30 -8
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +22 -8
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.styles.js +1 -1
- package/dist/components/retrieval/graph/graph-canvas.js +1 -1
- package/dist/components/retrieval/graph/graph-source-composition.js +1 -0
- package/dist/components/retrieval/graph/graph-source-controller.js +1 -0
- package/dist/components/retrieval/graph/graph-spatial-controller.js +2 -2
- package/dist/components/retrieval/graph/graph-spatial-model.js +1 -0
- package/dist/components/retrieval/graph/graph-spatial.js +1 -1
- package/dist/components/retrieval/graph/graph.class.d.ts +31 -6
- package/dist/components/retrieval/graph/graph.class.js +26 -5
- package/dist/components/retrieval/graph/graph.d.ts +1 -1
- package/dist/components/retrieval/graph/graph.js +1 -1
- package/dist/components/retrieval/graph/graph.styles.js +1 -1
- package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.d.ts +33 -4
- package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js +27 -17
- package/dist/components/retrieval/ingestion-queue/ingestion-queue.d.ts +1 -1
- package/dist/components/retrieval/ingestion-queue/ingestion-queue.js +1 -1
- package/dist/components/retrieval/ingestion-queue/ingestion-queue.styles.js +1 -1
- package/dist/components/retrieval/knowledge-base/knowledge-base.class.d.ts +27 -4
- package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +29 -14
- package/dist/components/retrieval/knowledge-base/knowledge-base.styles.js +1 -1
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.d.ts +17 -3
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.class.js +15 -10
- package/dist/components/retrieval/knowledge-base-admin/knowledge-base-admin.styles.js +1 -1
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +24 -5
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +17 -10
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.d.ts +1 -1
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.js +1 -1
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +1 -1
- package/dist/components/retrieval/mind-map/mind-map-layout.js +1 -1
- package/dist/components/retrieval/mind-map/mind-map-model.js +1 -0
- package/dist/components/retrieval/mind-map/mind-map.class.d.ts +27 -4
- package/dist/components/retrieval/mind-map/mind-map.class.js +11 -7
- package/dist/components/retrieval/mind-map/mind-map.d.ts +1 -0
- package/dist/components/retrieval/mind-map/mind-map.js +1 -1
- package/dist/components/retrieval/mind-map/mind-map.styles.js +1 -1
- package/dist/components/retrieval/neighbor-list/neighbor-list.class.d.ts +24 -2
- package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +17 -3
- package/dist/components/retrieval/neighbor-list/neighbor-list.d.ts +1 -1
- package/dist/components/retrieval/neighbor-list/neighbor-list.js +1 -1
- package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +1 -1
- package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.d.ts +8 -4
- package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js +11 -7
- package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.styles.js +1 -1
- package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.d.ts +12 -6
- package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.js +30 -17
- package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.js +1 -1
- package/dist/components/retrieval/retrieval-results/retrieval-results-model.js +1 -0
- package/dist/components/retrieval/retrieval-results/retrieval-results.class.d.ts +46 -5
- package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +31 -9
- package/dist/components/retrieval/retrieval-results/retrieval-results.d.ts +1 -1
- package/dist/components/retrieval/retrieval-results/retrieval-results.js +1 -1
- package/dist/components/retrieval/retrieval-results/retrieval-results.styles.js +1 -1
- package/dist/components/utility/diff-view/diff-view.class.d.ts +16 -8
- package/dist/components/utility/diff-view/diff-view.class.js +3 -2
- package/dist/components/utility/diff-view/diff-view.styles.js +1 -1
- package/dist/components/utility/json-viewer/json-viewer.class.d.ts +31 -3
- package/dist/components/utility/json-viewer/json-viewer.class.js +13 -4
- package/dist/components/utility/json-viewer/json-viewer.d.ts +1 -0
- package/dist/components/utility/json-viewer/json-viewer.js +1 -1
- package/dist/components/utility/json-viewer/json-viewer.styles.js +1 -1
- package/dist/components/utility/mention-popover/mention-popover.class.d.ts +6 -4
- package/dist/components/utility/mention-popover/mention-popover.class.js +6 -5
- package/dist/components/viewers/csv-viewer/csv-viewer.class.d.ts +34 -7
- package/dist/components/viewers/csv-viewer/csv-viewer.class.js +9 -7
- package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts +28 -4
- package/dist/components/viewers/dataset-viewer/dataset-viewer.class.js +12 -11
- package/dist/components/viewers/geojson-view/geojson-viewer.class.d.ts +3 -1
- package/dist/components/viewers/geojson-view/geojson-viewer.class.js +17 -16
- package/dist/components/viewers/geojson-view/geojson-viewer.d.ts +1 -1
- package/dist/components/viewers/geojson-view/geojson-viewer.js +1 -1
- package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.d.ts +31 -5
- package/dist/components/viewers/spreadsheet-viewer/spreadsheet-viewer.class.js +11 -8
- package/dist/components/viewers/table-viewer-shared.js +19 -3
- package/dist/components/viewers/viewer-search-limits.js +1 -1
- package/dist/components/viewers/xml-viewer/xml-viewer.class.d.ts +35 -3
- package/dist/components/viewers/xml-viewer/xml-viewer.class.js +20 -5
- package/dist/components/viewers/xml-viewer/xml-viewer.d.ts +1 -1
- package/dist/components/viewers/xml-viewer/xml-viewer.js +1 -1
- package/dist/components/viewers/xml-viewer/xml-viewer.styles.js +1 -1
- package/dist/countries.js +1 -1
- package/dist/data-sources.d.ts +34 -0
- package/dist/data-sources.js +1 -0
- package/dist/events.d.ts +51 -7
- package/dist/framework-types.d.ts +1 -1
- package/dist/internal/accessibility-visibility.d.ts +4 -2
- package/dist/internal/accessibility-visibility.js +1 -1
- package/dist/internal/accessible-text-controller.js +1 -1
- package/dist/internal/anchor-target.js +2 -2
- package/dist/internal/catalog-picker.d.ts +1 -7
- package/dist/internal/catalog-picker.js +1 -1
- package/dist/internal/collection-snapshot.js +1 -1
- package/dist/internal/default-strings/agent-tools.generated.js +1 -1
- package/dist/internal/default-strings/charts.generated.js +1 -1
- package/dist/internal/default-strings/conversation.generated.js +1 -1
- package/dist/internal/default-strings/data.generated.js +1 -1
- package/dist/internal/default-strings/forms.generated.js +1 -1
- package/dist/internal/default-strings/layout.generated.js +1 -1
- package/dist/internal/default-strings/media.generated.js +1 -1
- package/dist/internal/default-strings/retrieval.generated.js +1 -1
- package/dist/internal/default-strings/shared.generated.js +1 -1
- package/dist/internal/default-strings/utility.generated.js +1 -1
- package/dist/internal/delimited-data.js +1 -1
- package/dist/internal/fixed-containing-block.js +1 -1
- package/dist/internal/flow-scene-envelope.js +1 -0
- package/dist/internal/graph-scene-controller.js +1 -0
- package/dist/internal/hierarchy-source-controller.js +1 -0
- package/dist/internal/hierarchy-source-view.js +29 -0
- package/dist/internal/hierarchy-source-view.styles.js +1 -0
- package/dist/internal/inherited-attribute-hub.d.ts +6 -0
- package/dist/internal/inherited-attribute-hub.js +1 -1
- package/dist/internal/intl-cache.js +1 -1
- package/dist/internal/keyed-index.js +1 -0
- package/dist/internal/localization-types.d.ts +1 -1
- package/dist/internal/localization.js +2 -2
- package/dist/internal/lyra-element.d.ts +2 -2
- package/dist/internal/lyra-element.js +3 -2
- package/dist/internal/native-modal-context.js +1 -1
- package/dist/internal/option-selection.js +1 -1
- package/dist/internal/package-metadata.js +1 -1
- package/dist/internal/positioner.js +1 -1
- package/dist/internal/resource-loader.d.ts +2 -0
- package/dist/internal/resource-loader.js +1 -1
- package/dist/internal/scoped-definitions.generated.js +1 -1
- package/dist/internal/search-haystack.js +1 -0
- package/dist/internal/selection-catalog.d.ts +5 -0
- package/dist/internal/selection-catalog.js +1 -1
- package/dist/internal/shiki-language-sources.js +1 -0
- package/dist/internal/source-page-controller.js +1 -0
- package/dist/internal/source-page-scope.js +1 -0
- package/dist/internal/source-request-controller.js +1 -0
- package/dist/internal/source-window-controller.js +1 -0
- package/dist/internal/spatial-source-controller.js +1 -0
- package/dist/internal/text-quote.d.ts +2 -6
- package/dist/internal/text-quote.js +1 -1
- package/dist/internal/theme-watcher.js +1 -1
- package/dist/internal/virtual-list-composition.js +1 -0
- package/dist/lyra.d.ts +1 -1
- package/dist/lyra.js +1 -1
- package/dist/testing/interaction-drivers.js +1 -1
- package/dist/testing/lyra-tag-event-map.js +1 -1
- package/dist/units.js +1 -1
- package/dist/utilities/data-preparation.d.ts +56 -0
- package/dist/utilities/data-preparation.js +1 -0
- package/dist/utilities/data-spatial.d.ts +26 -0
- package/dist/utilities/data-spatial.js +1 -0
- package/dist/utilities/index.d.ts +1 -1
- package/dist/utilities/index.js +1 -1
- package/llms/components/lr-activity-feed.md +7 -2
- package/llms/components/lr-agent-trace.md +49 -9
- package/llms/components/lr-agent-workspace.md +15 -8
- package/llms/components/lr-av-player.md +180 -10
- package/llms/components/lr-bar-chart.md +1 -1
- package/llms/components/lr-box-plot.md +8 -0
- package/llms/components/lr-bubble-chart.md +1 -1
- package/llms/components/lr-calendar.md +26 -3
- package/llms/components/lr-chart.md +310 -23
- package/llms/components/lr-chat-viewport.md +6 -0
- package/llms/components/lr-code-block-core.md +12 -7
- package/llms/components/lr-code-block.md +23 -9
- package/llms/components/lr-combobox.md +27 -15
- package/llms/components/lr-command-palette.md +16 -3
- package/llms/components/lr-country-picker.md +23 -6
- package/llms/components/lr-csv-viewer.md +95 -12
- package/llms/components/lr-currency-picker.md +23 -3
- package/llms/components/lr-data-grid.md +24 -6
- package/llms/components/lr-dataset-viewer.md +92 -11
- package/llms/components/lr-dialog.md +1 -1
- package/llms/components/lr-diff-view.md +19 -6
- package/llms/components/lr-document-library.md +60 -5
- package/llms/components/lr-doughnut-chart.md +1 -1
- package/llms/components/lr-embedding-explorer.md +89 -9
- package/llms/components/lr-emoji-picker.md +7 -2
- package/llms/components/lr-eval-dataset.md +56 -7
- package/llms/components/lr-eval-result.md +89 -4
- package/llms/components/lr-export-button.md +1 -1
- package/llms/components/lr-file-tree.md +60 -6
- package/llms/components/lr-flag.md +5 -2
- package/llms/components/lr-flow-canvas.md +152 -14
- package/llms/components/lr-flow-minimap.md +32 -4
- package/llms/components/lr-funnel.md +14 -0
- package/llms/components/lr-geojson-viewer.md +27 -10
- package/llms/components/lr-graph.md +43 -7
- package/llms/components/lr-heatmap.md +161 -5
- package/llms/components/lr-histogram.md +55 -9
- package/llms/components/lr-ingestion-queue.md +54 -3
- package/llms/components/lr-json-viewer.md +87 -7
- package/llms/components/lr-knowledge-base-admin.md +60 -4
- package/llms/components/lr-knowledge-base.md +121 -9
- package/llms/components/lr-knowledge-graph-explorer.md +106 -11
- package/llms/components/lr-lightbox.md +42 -6
- package/llms/components/lr-line-chart.md +28 -5
- package/llms/components/lr-lite-chart.md +96 -31
- package/llms/components/lr-locale-picker.md +6 -4
- package/llms/components/lr-map.md +67 -8
- package/llms/components/lr-markdown-core.md +10 -5
- package/llms/components/lr-markdown.md +23 -6
- package/llms/components/lr-mention-popover.md +11 -6
- package/llms/components/lr-mind-map.md +91 -10
- package/llms/components/lr-model-select.md +8 -4
- package/llms/components/lr-model-settings-panel.md +10 -2
- package/llms/components/lr-navigation-menu.md +1 -1
- package/llms/components/lr-neighbor-list.md +69 -2
- package/llms/components/lr-pie-chart.md +1 -1
- package/llms/components/lr-polar-area-chart.md +1 -1
- package/llms/components/lr-prompt-input.md +9 -2
- package/llms/components/lr-prompt-queue.md +11 -3
- package/llms/components/lr-radar-chart.md +1 -1
- package/llms/components/lr-rag-eval-dashboard.md +9 -2
- package/llms/components/lr-realtime-session.md +6 -2
- package/llms/components/lr-reorder-list.md +4 -0
- package/llms/components/lr-retrieval-compare.md +9 -4
- package/llms/components/lr-retrieval-results.md +104 -6
- package/llms/components/lr-scatter-chart.md +1 -1
- package/llms/components/lr-select.md +20 -10
- package/llms/components/lr-sequence-strip.md +92 -2
- package/llms/components/lr-span-waterfall.md +78 -8
- package/llms/components/lr-sparkline.md +42 -11
- package/llms/components/lr-spreadsheet-viewer.md +109 -14
- package/llms/components/lr-streaming-text-core.md +4 -2
- package/llms/components/lr-streaming-text.md +5 -1
- package/llms/components/lr-table.md +96 -115
- package/llms/components/lr-task-list.md +93 -9
- package/llms/components/lr-terminal.md +9 -0
- package/llms/components/lr-test-results.md +77 -3
- package/llms/components/lr-thread-list.md +86 -1
- package/llms/components/lr-time-zone-picker.md +8 -3
- package/llms/components/lr-timeline.md +5 -0
- package/llms/components/lr-token-input.md +7 -2
- package/llms/components/lr-tool-timeline.md +13 -4
- package/llms/components/lr-trace-tree.md +96 -10
- package/llms/components/lr-transcript-feed.md +9 -2
- package/llms/components/lr-tree.md +87 -15
- package/llms/components/lr-unit-picker.md +8 -3
- package/llms/components/lr-video-playlist.md +2 -0
- package/llms/components/lr-virtual-list.md +17 -8
- package/llms/components/lr-voice-picker.md +8 -3
- package/llms/components/lr-word-cloud.md +128 -12
- package/llms/components/lr-xml-viewer.md +106 -9
- package/llms/index.md +1 -1
- package/llms/peers.md +1 -1
- package/llms/shared/events-and-types.md +725 -264
- package/llms/shared/forms-and-accessibility.md +3 -17
- package/llms/shared/imports-and-registration.md +3 -17
- package/llms/shared/localization-and-rtl.md +0 -2
- package/llms/shared/styles-and-tokens.md +27 -36
- package/llms/shared/testing-and-utilities.md +4 -5
- package/llms/shared.md +770 -349
- package/llms.txt +1 -2
- package/locales.json +139 -139
- package/package.json +13 -4
- package/registrations.json +1 -1
- package/skills/compose-lyra-interfaces/SKILL.md +6 -8
- package/skills/lyra-ui/SKILL.md +20 -51
- package/skills/lyra-ui/commands/review.md +16 -33
- package/skills/lyra-ui/commands/update.md +6 -5
- package/skills/lyra-ui/online-api.md +15 -0
- package/skills/lyra-ui/reporting.md +2 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** @deprecated Import @aceshooting/lyra-ui/components/lr-span-waterfall.js to register this component. */
|
|
2
|
-
export*from'./span-waterfall.class.js';import'../../overlays/empty/empty.js';
|
|
2
|
+
export*from'./span-waterfall.class.js';import'../../overlays/empty/empty.js';import'../../layout/virtual-list/virtual-list.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export*from"./span-waterfall.class.js";import{LyraSpanWaterfall}from"./span-waterfall.class.js";import{defineElement}from"../../../internal/prefix.js";import"../../overlays/empty/empty.js";defineElement("span-waterfall",LyraSpanWaterfall);
|
|
1
|
+
export*from"./span-waterfall.class.js";import{LyraSpanWaterfall}from"./span-waterfall.class.js";import{defineElement}from"../../../internal/prefix.js";import"../../overlays/empty/empty.js";import"../../layout/virtual-list/virtual-list.js";defineElement("span-waterfall",LyraSpanWaterfall);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{iconHitTarget,focusRing}from"../../../internal/interactive-control.styles.js";import{css}from"lit";import{mediumContainerQuery}from"../../../internal/container-breakpoints.styles.js";const styles=css` :host { display: block; container-type: inline-size; contain-intrinsic-inline-size: var(--lr-size-20rem); --_lr-span-waterfall-name-width: var(--lr-size-8rem); } [part="base"] { display: flex; flex-direction: column; font-size: var(--lr-font-size-sm); color: var(--lr-color-text); } [part="axis"] { position: relative; block-size: var(--lr-size-1-25rem); margin-inline-start: calc( var(--lr-span-waterfall-name-width, var(--_lr-span-waterfall-name-width)) + var(--lr-space-xs) ); border-block-end: var(--lr-border-width-thin) solid var(--lr-color-border); overflow: hidden; } [part="tick"] { position: absolute; inset-block-start: 0; inset-block-end: 0; border-inline-start: var(--lr-border-width-thin) solid var(--lr-color-border); } [part="tick-label"] { position: absolute; inset-inline-start: var(--lr-space-xs); font-size: var(--lr-font-size-2xs); color: var(--lr-color-text-quiet); white-space: nowrap; } [part="tick"][data-edge="end"] [part="tick-label"], [part="tick"][data-fit="end"] [part="tick-label"] { inset-inline-start: auto; inset-inline-end: var(--lr-space-xs); } [part="tick-label"][data-collapsed] { visibility: hidden; } [part="row"] { display: grid; 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); } [part="row"][data-active] { background: var( --lr-span-waterfall-row-active-bg, var(--lr-color-brand-quiet) ); } [part="row"][data-active] :is([part="status-text"], [part="duration"]) { color: var(--lr-span-waterfall-row-active-color, var(--lr-color-text)); } [part="name"] { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } [part="bar-track"] { position: relative; block-size: var(--lr-icon-button-size); } [part="bar"] { position: absolute; inset-block: 0; --_lr-span-waterfall-target-width: min( 100%, max(var(--_lr-span-waterfall-width), var(--lr-icon-button-size)) ); ${iconHitTarget} inline-size: var(--_lr-span-waterfall-target-width); inset-inline-start: min( var(--_lr-span-waterfall-start), calc(100% - var(--_lr-span-waterfall-target-width)) ); border: none; border-radius: var(--lr-radius-xs); padding: 0; cursor: pointer; } [part="bar"][hidden] { display: none; } [part="bar"]::after { content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none; background: transparent; transition: background-color var(--lr-transition-fast), color var(--lr-transition-fast); } [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 { ${focusRing} } [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) ); background-size: 200% 100%; animation: var(--_lr-motion-animation, lr-span-waterfall-stripe var(--lr-span-waterfall-stripe-speed, var(--lr-duration-ambient)) linear infinite); } [part="bar"][data-tone="neutral"] { background: transparent; border: var(--lr-border-width-thin) dashed var( --lr-span-waterfall-pending-border-color, var(--lr-color-border-strong) ); } :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"] { font-size: var(--lr-font-size-xs); color: var(--lr-color-text-quiet); } [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 ${mediumContainerQuery} { [part="axis"] { margin-inline-start: 0; } [part="row"] { grid-template-columns: 1fr; } [part="meta"] { display: flex; gap: var(--lr-space-s); } } `;export{styles};
|
|
1
|
+
import{iconHitTarget,focusRing}from"../../../internal/interactive-control.styles.js";import{css}from"lit";import{mediumContainerQuery}from"../../../internal/container-breakpoints.styles.js";const styles=css` .source-waterfall { min-inline-size: 0; } [part~="source-row"] { display: grid; padding-inline: 0; grid-template-columns: var(--lr-icon-button-size) max(0px, calc(var(--lr-span-waterfall-name-width, var(--_lr-span-waterfall-name-width)) - var(--lr-icon-button-size) - var(--lr-space-xs))) 1fr; } [part~="source-label"], .source-span { display: contents; } .source-span [part="name"] { grid-column: 2; padding-inline-start: min(calc(var(--source-depth) * var(--lr-space-m)), var(--lr-size-3rem)); } .source-span [part="bar-track"] { grid-column: 3; min-inline-size: 0; } .source-span [part="meta"] { grid-column: 2 / -1; } [part~="source-row"]:where([data-active]) { --_source-row-fill: var(--lr-span-waterfall-row-active-bg, var(--lr-color-brand-quiet)); } [part~="source-row"]:where([data-active]) :is([part="status-text"], [part="duration"]) { color: var(--lr-span-waterfall-row-active-color, var(--lr-color-text)); } :host { display: block; container-type: inline-size; contain-intrinsic-inline-size: var(--lr-size-20rem); --_lr-span-waterfall-name-width: var(--lr-size-8rem); } [part="base"] { display: flex; flex-direction: column; font-size: var(--lr-font-size-sm); color: var(--lr-color-text); } [part="axis"] { position: relative; block-size: var(--lr-size-1-25rem); margin-inline-start: calc( var(--lr-span-waterfall-name-width, var(--_lr-span-waterfall-name-width)) + var(--lr-space-xs) ); border-block-end: var(--lr-border-width-thin) solid var(--lr-color-border); overflow: hidden; } [part="tick"] { position: absolute; inset-block-start: 0; inset-block-end: 0; border-inline-start: var(--lr-border-width-thin) solid var(--lr-color-border); } [part="tick-label"] { position: absolute; inset-inline-start: var(--lr-space-xs); font-size: var(--lr-font-size-2xs); color: var(--lr-color-text-quiet); white-space: nowrap; } [part="tick"][data-edge="end"] [part="tick-label"], [part="tick"][data-fit="end"] [part="tick-label"] { inset-inline-start: auto; inset-inline-end: var(--lr-space-xs); } [part="tick-label"][data-collapsed] { visibility: hidden; } [part="row"] { display: grid; 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); } [part="row"][data-active] { background: var( --lr-span-waterfall-row-active-bg, var(--lr-color-brand-quiet) ); } [part="row"][data-active] :is([part="status-text"], [part="duration"]) { color: var(--lr-span-waterfall-row-active-color, var(--lr-color-text)); } [part="name"] { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } [part="bar-track"] { position: relative; block-size: var(--lr-icon-button-size); } [part="bar"] { position: absolute; inset-block: 0; --_lr-span-waterfall-target-width: min( 100%, max(var(--_lr-span-waterfall-width), var(--lr-icon-button-size)) ); ${iconHitTarget} inline-size: var(--_lr-span-waterfall-target-width); inset-inline-start: min( var(--_lr-span-waterfall-start), calc(100% - var(--_lr-span-waterfall-target-width)) ); border: none; border-radius: var(--lr-radius-xs); padding: 0; cursor: pointer; } [part="bar"][hidden] { display: none; } [part="bar"]::after { content: ""; position: absolute; inset: 0; border-radius: inherit; pointer-events: none; background: transparent; transition: background-color var(--lr-transition-fast), color var(--lr-transition-fast); } [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 { ${focusRing} } [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) ); background-size: 200% 100%; animation: var(--_lr-motion-animation, lr-span-waterfall-stripe var(--lr-span-waterfall-stripe-speed, var(--lr-duration-ambient)) linear infinite); } [part="bar"][data-tone="neutral"] { background: transparent; border: var(--lr-border-width-thin) dashed var( --lr-span-waterfall-pending-border-color, var(--lr-color-border-strong) ); } :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"] { font-size: var(--lr-font-size-xs); color: var(--lr-color-text-quiet); } [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 ${mediumContainerQuery} { [part~="source-row"] { grid-template-columns: var(--lr-icon-button-size) minmax(0, 1fr); } .source-span [part="bar-track"], .source-span [part="meta"] { grid-column: 1 / -1; } [part="axis"] { margin-inline-start: 0; } [part="row"] { grid-template-columns: 1fr; } [part="meta"] { display: flex; gap: var(--lr-space-s); } } `;export{styles};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraFrame,LyraSize}from'../../../internal/variants.js';import{type LyraHeadingLevel}from'../../../internal/heading-level.js';
|
|
1
|
+
import type{LyraHierarchySource,LyraHierarchyQuery,LyraTaskSourceSummary}from'../../../data-sources.js';import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraFrame,LyraSize}from'../../../internal/variants.js';import{type LyraHeadingLevel}from'../../../internal/heading-level.js';
|
|
2
2
|
/** A plan step's lifecycle state — not permission-gated, so there is no `denied` state here
|
|
3
3
|
* (unlike `<lr-tool-call-chip>`'s status vocabulary, which does need one). `incomplete` is a step
|
|
4
4
|
* that stopped without finishing (a cancelled run): neither a success nor a failure. */
|
|
@@ -11,7 +11,9 @@ id:string;label:string;status:TaskStatus;
|
|
|
11
11
|
/** Optional secondary plain-text line, e.g. an error message or a short progress note. */
|
|
12
12
|
detail?:string;
|
|
13
13
|
/** One level of sub-steps. Deeper nesting (a child's own `children`) is ignored. */
|
|
14
|
-
children?:readonly TaskItem[];}
|
|
14
|
+
children?:readonly TaskItem[];}
|
|
15
|
+
/** Complete two-level provider preorder with a global top-level task summary. */
|
|
16
|
+
export type TaskListSource=LyraHierarchySource<TaskItem,LyraHierarchyQuery,LyraTaskSourceSummary>;export interface TaskListToggleDetail{expanded:boolean;}export interface LyraTaskListEventMap{'lr-toggle-request':CustomEvent<TaskListToggleDetail>;'lr-toggle':CustomEvent<TaskListToggleDetail>;'lr-reorder':CustomEvent<{taskId:string;parentTaskId:string|null;fromIndex:number;toIndex:number;}>;}
|
|
15
17
|
/**
|
|
16
18
|
* `<lr-task-list>` — a live, collapsible tracker for an agent's plan: ordered steps with
|
|
17
19
|
* per-step lifecycle status and one level of nested sub-steps, embedded in the transcript.
|
|
@@ -25,14 +27,25 @@ children?:readonly TaskItem[];}export interface TaskListToggleDetail{expanded:bo
|
|
|
25
27
|
* `heading-level` from `1`–`6` to expose it at that level in the surrounding document outline.
|
|
26
28
|
* Status changes and confirmed moves are announced through an internal `<lr-live-region>`.
|
|
27
29
|
*
|
|
28
|
-
*
|
|
30
|
+
* The outer items array is an identity-kept readonly snapshot of at most 10,000 entries.
|
|
31
|
+
* Display fields are copied without invoking accessors; direct child input positions share a
|
|
32
|
+
* 10,000-entry projection budget, independent of opaque provider metadata. Create a new
|
|
29
33
|
* collection and reassign it after changes; mutating the assigned array does not update the view.
|
|
30
34
|
*
|
|
31
|
-
*
|
|
35
|
+
* By default, only the first 500 tasks, including direct children, are mounted into the DOM (matching the render ceiling this
|
|
32
36
|
* family's other bounded lists use); the header's "N of M completed" summary still counts every
|
|
33
37
|
* item in `items`, and reorder index math still reads full sibling order from `items` regardless
|
|
34
38
|
* of what is actually rendered.
|
|
35
39
|
*
|
|
40
|
+
* Defined treeSource uses complete provider preorder, limited to top-level tasks and direct
|
|
41
|
+
* children. Its required summary counts top-level tasks independently of visible rows. Source
|
|
42
|
+
* mode supports navigation and expansion, not selection or legacy full-model reorder.
|
|
43
|
+
* @csspart source-list - Bounded provider viewport.
|
|
44
|
+
* @csspart source-row - Provider task tree item and focus owner.
|
|
45
|
+
* @csspart source-label - Task presentation.
|
|
46
|
+
* @csspart source-toggle - Provider expansion/retry control.
|
|
47
|
+
* @csspart source-status - Localized provider state.
|
|
48
|
+
* @csspart source-error - Localized provider failure.
|
|
36
49
|
* @customElement lr-task-list
|
|
37
50
|
* @slot detail-<id> - Dynamic, one per item id (e.g. `slot="detail-step-3"`). Rich detail under
|
|
38
51
|
* that item's label, after its `detail` text -- typically a `<lr-tool-call-chip>` or file
|
|
@@ -87,11 +100,21 @@ children?:readonly TaskItem[];}export interface TaskListToggleDetail{expanded:bo
|
|
|
87
100
|
* @status stable
|
|
88
101
|
* @since 4.0.0
|
|
89
102
|
*/
|
|
90
|
-
export declare class LyraTaskList extends LyraElement<LyraTaskListEventMap>{protected static collectionSupport:import("../../../internal/lyra-element.js").LyraCollectionSupport;protected static readonly ownedCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];
|
|
103
|
+
export declare class LyraTaskList extends LyraElement<LyraTaskListEventMap>{protected static collectionSupport:import("../../../internal/lyra-element.js").LyraCollectionSupport;protected static readonly ownedCollectionProperties:readonly string[];protected static readonly identityCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];private _treeSource;private sourceVersion;private sourcePaintVersion;private sourceWrapper?;private readonly sourceSummaries;private sourceAnnouncement?;private readonly sourceControl;
|
|
104
|
+
/** Immutable provider preorder; defined sources win over items, even when invalid.
|
|
105
|
+
* Four 100-row pages and one focused row are retained; at most 301 rows mount.
|
|
106
|
+
* Provider metadata owns topology and selection, and summary counts all top-level tasks. Source mode disables legacy reorder.
|
|
107
|
+
* Reassign or requestUpdate() after changing revision. Unset restores legacy items.
|
|
108
|
+
* @default undefined */
|
|
109
|
+
get treeSource():TaskListSource|undefined;set treeSource(value:TaskListSource|undefined);
|
|
110
|
+
/** Reveal and focus a full-source key; false when absent, disabled or superseded. */
|
|
111
|
+
revealSourceKey(key:string):Promise<boolean>;private syncSource;private wrapSource;private normalizeSourceTask;
|
|
91
112
|
/** The plan. Controlled and never mutated by this component -- pass a new array to update it.
|
|
92
113
|
* Runtime non-record rows and rows without a nonempty string id are omitted before rendering,
|
|
93
114
|
* summaries, announcements, and reorder validation. */
|
|
94
115
|
items:readonly TaskItem[];
|
|
116
|
+
/** Maximum rendered tasks including direct children; bounded to 1–5,000, default 500. */
|
|
117
|
+
maxNodes:number;private taskProjection?;private renderedProjection?;private get effectiveMaxNodes();private taskModel;private visibleTaskItems;requestUpdate(...args:Parameters<LyraElement['requestUpdate']>):void;private sourceSummary;private updateSourceEffects;
|
|
95
118
|
/** Opts into Ctrl/Cmd+ArrowUp/ArrowDown reorder requests. `items` remains host-owned: the
|
|
96
119
|
* component never moves a task until the host reassigns a confirmed sibling order. All ids
|
|
97
120
|
* across top-level tasks and direct children must be unique; otherwise the feature fails closed
|
|
@@ -121,4 +144,4 @@ size:LyraSize;
|
|
|
121
144
|
* keeps the bordered, filled box. `'plain'` removes `[part="base"]`'s border, background, and
|
|
122
145
|
* corner radius, so a list embedded in the transcript inside a container that already draws a
|
|
123
146
|
* border (an agent-run panel, a message bubble) doesn't double it. */
|
|
124
|
-
frame:LyraFrame;private liveRegion?;private readonly headerId;private readonly bodyId;private isMounting;private readonly limitAnnouncements;private previouslyTruncated;private renderedTasksTruncated;private previousStatusById;private pendingReorder?;private pendingFocusId;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;disconnectedCallback():void;connectedCallback():void;adoptedCallback():void;private renderedTaskItems;private
|
|
147
|
+
frame:LyraFrame;private liveRegion?;private readonly headerId;private readonly bodyId;private isMounting;private readonly limitAnnouncements;private previouslyTruncated;private renderedTasksTruncated;private previousStatusById;private pendingReorder?;private pendingFocusId;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;disconnectedCallback():void;connectedCallback():void;adoptedCallback():void;private renderedTaskItems;private diffAndAnnounce;private toggle;private idsAreUnique;private canReorderItems;private siblingItems;private requestReorder;private onItemKeyDown;private capturePendingReorderFocus;private confirmPendingReorder;private focusItem;private clearPendingReorder;private renderItem;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-task-list':LyraTaskList;}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/collection-snapshot.js";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,srOnly}from"../../../internal/a11y.js";import{shadowFocusTarget}from"../../../internal/active-element.js";import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{resolveHeadingLevel}from"../../../internal/heading-level.js";import{chevronIcon}from"../../../internal/icons.js";import{styles}from"./task-list.styles.js";import{LYRA_DEFAULT_taskListCompletedOfTotal,LYRA_DEFAULT_taskListLabel,LYRA_DEFAULT_taskListLimit,LYRA_DEFAULT_taskListStepCompletedAnnounce,LYRA_DEFAULT_taskListStepFailedAnnounce,LYRA_DEFAULT_taskListStepIncompleteAnnounce,LYRA_DEFAULT_taskListStepStartedAnnounce}from"../../../internal/default-strings/agent-tools.generated.js";import{LYRA_DEFAULT_collapse,LYRA_DEFAULT_copy,LYRA_DEFAULT_date,LYRA_DEFAULT_details,LYRA_DEFAULT_item,LYRA_DEFAULT_items,LYRA_DEFAULT_loading,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_open,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusIncomplete,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess,LYRA_DEFAULT_treeNodeMoved}from"../../../internal/default-strings/shared.generated.js";function normalizeTaskStatus(value){return value==="running"||value==="success"||value==="error"||value==="incomplete"?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.",MAX_RENDERED_TASKS=500;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
|
+
import{__decorate}from"tslib";import{HierarchySourceController,hierarchyField,hierarchyKey,hierarchyText}from"../../../internal/hierarchy-source-controller.js";import{hierarchySourceView}from"../../../internal/hierarchy-source-view.js";import{hierarchySourceStyles}from"../../../internal/hierarchy-source-view.styles.js";import{readOwnDataValue}from"../../../internal/data-descriptors.js";import{finiteCount}from"../../../internal/numbers.js";import{collectionSupport,publicCollectionTruncation}from"../../../internal/collection-snapshot.js";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,srOnly}from"../../../internal/a11y.js";import{shadowFocusTarget}from"../../../internal/active-element.js";import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{resolveHeadingLevel}from"../../../internal/heading-level.js";import{chevronIcon}from"../../../internal/icons.js";import{styles}from"./task-list.styles.js";import{LYRA_DEFAULT_taskListCompletedOfTotal,LYRA_DEFAULT_taskListLabel,LYRA_DEFAULT_taskListLimit,LYRA_DEFAULT_taskListStepCompletedAnnounce,LYRA_DEFAULT_taskListStepFailedAnnounce,LYRA_DEFAULT_taskListStepIncompleteAnnounce,LYRA_DEFAULT_taskListStepStartedAnnounce}from"../../../internal/default-strings/agent-tools.generated.js";import{LYRA_DEFAULT_collapse,LYRA_DEFAULT_copy,LYRA_DEFAULT_date,LYRA_DEFAULT_details,LYRA_DEFAULT_expand,LYRA_DEFAULT_item,LYRA_DEFAULT_items,LYRA_DEFAULT_loading,LYRA_DEFAULT_map,LYRA_DEFAULT_navigation,LYRA_DEFAULT_noData,LYRA_DEFAULT_open,LYRA_DEFAULT_retry,LYRA_DEFAULT_search,LYRA_DEFAULT_select,LYRA_DEFAULT_statusError,LYRA_DEFAULT_statusIncomplete,LYRA_DEFAULT_statusPending,LYRA_DEFAULT_statusRunning,LYRA_DEFAULT_statusSuccess,LYRA_DEFAULT_treeNodeMoved,LYRA_DEFAULT_treeSourceError,LYRA_DEFAULT_treeSourceSummary}from"../../../internal/default-strings/shared.generated.js";function normalizeTaskStatus(value){return value==="running"||value==="success"||value==="error"||value==="incomplete"?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.",MAX_RENDERED_TASKS=500,canonicalTaskArrays=new WeakSet;function validTaskItems(value){if(value&&typeof value=="object"&&canonicalTaskArrays.has(value))return 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}function isTaskArray(value){try{return Array.isArray(value)}catch{return!1}}function isTaskRecord(value){try{return value!==null&&typeof value=="object"&&!Array.isArray(value)}catch{return!1}}function taskArrayLength(values){const value=readOwnDataValue(values,"length");return finiteCount(typeof value=="number"?value:0,0)}function projectTaskItems(source){let childBudget=1e4,valid=!0,deep=!1,truncated=!1;const copy=(values,depth)=>{const result=[];try{if(!isTaskArray(values))return result;const length=taskArrayLength(values),count=Math.min(length,depth===0?1e4:childBudget);count<length&&(truncated=!0,valid=!1),depth>0&&(childBudget-=count);for(let index=0;index<count;index++){const value=readOwnDataValue(values,String(index));if(!isTaskRecord(value)){valid=!1;continue}const id=readOwnDataValue(value,"id");if(typeof id!="string"||!id.trim()){valid=!1;continue}const label=readOwnDataValue(value,"label"),detail=readOwnDataValue(value,"detail"),children=readOwnDataValue(value,"children");depth>0&&isTaskArray(children)&&taskArrayLength(children)>0&&(deep=!0);const item={id,label:typeof label=="string"?label:"",status:normalizeTaskStatus(readOwnDataValue(value,"status")),...typeof detail=="string"?{detail}:{},...depth===0&&isTaskArray(children)?{children:copy(children,1)}:{}};result.push(Object.freeze(item))}}catch{valid=!1}return canonicalTaskArrays.add(result),Object.freeze(result),result},items=copy(source,0),flat=[];let completed=0,unique=!0;const ids=new Set;for(const item of items)item.status==="success"&&completed++,flat.push(item,...item.children??[]);for(const item of flat)ids.has(item.id)&&(unique=!1),ids.add(item.id);return{source,items,flat,valid,unique,completed,deep,truncated}}const SOURCE_QUERY=Object.freeze({search:"",hiddenKinds:Object.freeze([])}),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 @@ import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/co
|
|
|
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 incompleteIcon(){return icon(svg`<circle cx="12" cy="12" r="9"></circle><line x1="8" y1="12" x2="16" y2="12"></line>`)}const STATUS_ICON={pending:pendingIcon,running:runningIcon,success:successIcon,error:errorIcon,incomplete:incompleteIcon},STATUS_LABEL_KEY={pending:"statusPending",running:"statusRunning",success:"statusSuccess",error:"statusError",incomplete:"statusIncomplete"};class LyraTaskList extends LyraElement{constructor(){super(...arguments),this.items=[],this.reorderable=!1,this.headingLevel="none",this.collapsed=!1,this.withoutCollapse=!1,this.size="m",this.frame="card",this.headerId=nextId("task-list-header"),this.bodyId=nextId("task-list-body"),this.isMounting=!0,this.limitAnnouncements=new AnnouncementSinkController(this,{eager:["polite"]}),this.previouslyTruncated=!1,this.renderedTasksTruncated=!1,this.previousStatusById=new Map,this.pendingFocusId=null,this.toggle=()=>{if(this.withoutCollapse)return;const expanded=this.collapsed;this.emit("lr-toggle-request",{expanded},{cancelable:!0}).defaultPrevented||(this.collapsed=!expanded,this.emit("lr-toggle",{expanded}))}}static{this.defaultStrings={...super.defaultStrings,collapse:LYRA_DEFAULT_collapse,copy:LYRA_DEFAULT_copy,date:LYRA_DEFAULT_date,details:LYRA_DEFAULT_details,item:LYRA_DEFAULT_item,items:LYRA_DEFAULT_items,loading:LYRA_DEFAULT_loading,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,open:LYRA_DEFAULT_open,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusError:LYRA_DEFAULT_statusError,statusIncomplete:LYRA_DEFAULT_statusIncomplete,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess,taskListCompletedOfTotal:LYRA_DEFAULT_taskListCompletedOfTotal,taskListLabel:LYRA_DEFAULT_taskListLabel,taskListLimit:LYRA_DEFAULT_taskListLimit,taskListStepCompletedAnnounce:LYRA_DEFAULT_taskListStepCompletedAnnounce,taskListStepFailedAnnounce:LYRA_DEFAULT_taskListStepFailedAnnounce,taskListStepIncompleteAnnounce:LYRA_DEFAULT_taskListStepIncompleteAnnounce,taskListStepStartedAnnounce:LYRA_DEFAULT_taskListStepStartedAnnounce,treeNodeMoved:LYRA_DEFAULT_treeNodeMoved}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["items"])}static{this.styles=[LyraElement.styles,srOnly,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()),!wasMounting&&this.renderedTasksTruncated&&!this.previouslyTruncated&&this.limitAnnouncements.announcePolite(this.localize("taskListLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(MAX_RENDERED_TASKS)})),this.previouslyTruncated=this.renderedTasksTruncated}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")}adoptedCallback(){super.adoptedCallback(),this.limitAnnouncements.adopted()}renderedTaskItems(items){const rendered=[];let remaining=MAX_RENDERED_TASKS,truncated=!1;for(const item of items){if(remaining===0){truncated=!0;break}remaining--;const children=validTaskItems(item.children),visibleChildren=children.slice(0,remaining);remaining-=visibleChildren.length,visibleChildren.length<children.length&&(truncated=!0),rendered.push(visibleChildren.length===children.length?item:{...item,children:visibleChildren})}return this.renderedTasksTruncated=truncated,rendered}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})):status==="incomplete"&&(region.mode="polite",region.announce(this.localize("taskListStepIncompleteAnnounce",void 0,{label:item.label,status:this.localize("statusIncomplete")}),{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=shadowFocusTarget(this);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`
|
|
18
|
+
`)}function incompleteIcon(){return icon(svg`<circle cx="12" cy="12" r="9"></circle><line x1="8" y1="12" x2="16" y2="12"></line>`)}const STATUS_ICON={pending:pendingIcon,running:runningIcon,success:successIcon,error:errorIcon,incomplete:incompleteIcon},STATUS_LABEL_KEY={pending:"statusPending",running:"statusRunning",success:"statusSuccess",error:"statusError",incomplete:"statusIncomplete"};class LyraTaskList extends LyraElement{constructor(){super(...arguments),this._treeSource=void 0,this.sourceVersion=0,this.sourcePaintVersion=0,this.sourceSummaries=new WeakMap,this.sourceControl=new HierarchySourceController(this,{normalize:(value,key)=>this.normalizeSourceTask(value,key),payload:{maxUnits:2e6,maxRowUnits:65536,unitsOf:item=>item.id.length+item.label.length+(item.detail?.length??0)},onChange:()=>{const old=this.sourcePaintVersion++;this.requestUpdate("sourcePaintVersion",old)},accepted:()=>{}}),this.items=[],this.maxNodes=500,this.reorderable=!1,this.headingLevel="none",this.collapsed=!1,this.withoutCollapse=!1,this.size="m",this.frame="card",this.headerId=nextId("task-list-header"),this.bodyId=nextId("task-list-body"),this.isMounting=!0,this.limitAnnouncements=new AnnouncementSinkController(this,{eager:["polite"]}),this.previouslyTruncated=!1,this.renderedTasksTruncated=!1,this.previousStatusById=new Map,this.pendingFocusId=null,this.toggle=()=>{if(this.withoutCollapse)return;const expanded=this.collapsed,version=this.sourceVersion,owner=this.ownerDocument;this.emit("lr-toggle-request",{expanded},{cancelable:!0}).defaultPrevented||!this.isConnected||this.ownerDocument!==owner||this.sourceVersion!==version||this.withoutCollapse||this.collapsed!==expanded||(this.collapsed=!expanded,this.emit("lr-toggle",{expanded}))}}static{this.defaultStrings={...super.defaultStrings,collapse:LYRA_DEFAULT_collapse,copy:LYRA_DEFAULT_copy,date:LYRA_DEFAULT_date,details:LYRA_DEFAULT_details,expand:LYRA_DEFAULT_expand,item:LYRA_DEFAULT_item,items:LYRA_DEFAULT_items,loading:LYRA_DEFAULT_loading,map:LYRA_DEFAULT_map,navigation:LYRA_DEFAULT_navigation,noData:LYRA_DEFAULT_noData,open:LYRA_DEFAULT_open,retry:LYRA_DEFAULT_retry,search:LYRA_DEFAULT_search,select:LYRA_DEFAULT_select,statusError:LYRA_DEFAULT_statusError,statusIncomplete:LYRA_DEFAULT_statusIncomplete,statusPending:LYRA_DEFAULT_statusPending,statusRunning:LYRA_DEFAULT_statusRunning,statusSuccess:LYRA_DEFAULT_statusSuccess,taskListCompletedOfTotal:LYRA_DEFAULT_taskListCompletedOfTotal,taskListLabel:LYRA_DEFAULT_taskListLabel,taskListLimit:LYRA_DEFAULT_taskListLimit,taskListStepCompletedAnnounce:LYRA_DEFAULT_taskListStepCompletedAnnounce,taskListStepFailedAnnounce:LYRA_DEFAULT_taskListStepFailedAnnounce,taskListStepIncompleteAnnounce:LYRA_DEFAULT_taskListStepIncompleteAnnounce,taskListStepStartedAnnounce:LYRA_DEFAULT_taskListStepStartedAnnounce,treeNodeMoved:LYRA_DEFAULT_treeNodeMoved,treeSourceError:LYRA_DEFAULT_treeSourceError,treeSourceSummary:LYRA_DEFAULT_treeSourceSummary}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["items"])}static{this.identityCollectionProperties=Object.freeze(["items"])}static{this.styles=[LyraElement.styles,srOnly,hierarchySourceStyles,styles]}get treeSource(){return this._treeSource}set treeSource(value){const previous=this._treeSource;this._treeSource=value,this.sourceVersion++,this.clearPendingReorder(),this.previousStatusById.clear(),this.sourceWrapper=value===void 0?void 0:this.wrapSource(value),this.syncSource(!0),this.requestUpdate("treeSource",previous)}revealSourceKey(key){return this.treeSource===void 0?Promise.resolve(!1):this.sourceControl.reveal(key)}syncSource(force=!1){this.sourceControl?.update(this.sourceWrapper,this.effectiveLocale,force,SOURCE_QUERY)}wrapSource(source){const host=this;return{get revision(){return source.revision},async project(request){const version=host.sourceVersion,owner=host.ownerDocument,owned=()=>host._treeSource===source&&host.sourceVersion===version&&host.ownerDocument===owner&&host.isConnected&&!request.signal.aborted,current=()=>{if(!owned())return!1;const revision=source.revision;return owned()&&revision===request.revision},check=()=>{if(!current())throw new Error("Task source changed")};check();const project=source.project;check();const result=await project.call(source,request);check();const summary=result.summary;check();const taskTotal=hierarchyField(summary,"total");check();const completed=hierarchyField(summary,"completed");if(check(),typeof taskTotal!="number"||typeof completed!="number"||!Number.isSafeInteger(taskTotal)||!Number.isSafeInteger(completed)||taskTotal<0||completed<0||completed>taskTotal)throw new TypeError("Invalid task summary");const validateRow=value=>{const copy={};for(const name of["key","parentKey","level","position","setSize","childCount","expanded","selected","disabled","selectionState","value"])check(),copy[name]=hierarchyField(value,name),check();const{level,parentKey,childCount}=copy;if(!(level===1&&parentKey===null||level===2&&typeof parentKey=="string"&&parentKey.length>0&&childCount===0))throw new TypeError("Invalid task depth");return Object.freeze(copy)},view=result.rows;check();const count=view.count;check();const hasItemAt="itemAt"in view;check();const itemAt=hasItemAt?view.itemAt:void 0;check();let wrapped;if(typeof itemAt=="function"){const indexed=view;wrapped={count,itemAt(index){check();const method=indexed.itemAt;check();const value=method.call(indexed,index);return check(),validateRow(value)},keyAt(index){check();const method=indexed.keyAt;check();const value=method.call(indexed,index);return check(),value},indexOfKey(key){check();const method=indexed.indexOfKey;check();const value=method.call(indexed,key);return check(),value}}}else{const ranged=view;wrapped={count,async read(range){const active=()=>{if(check(),range.signal.aborted)throw new Error("Task range changed")};active();const method=ranged.read;active();const value=await method.call(ranged,range);active();const length=hierarchyField(value,"length");if(active(),!Array.isArray(value)||typeof length!="number"||!Number.isSafeInteger(length)||length<0||length>range.limit)throw new TypeError("Invalid task range");const rows=[];for(let index=0;index<length;index++){active();const row=hierarchyField(value,String(index));active(),rows.push(validateRow(row))}return active(),rows},async indexOfKey(key,context){const active=()=>{if(check(),context.signal.aborted)throw new Error("Task navigation changed")};active();const method=ranged.indexOfKey;active();const value=await method.call(ranged,key,context);return active(),value}}}const state=result.state;check();const total=result.total;if(check(),typeof total!="number"||taskTotal>total)throw new TypeError("Invalid task summary total");const focusIndex=result.focusIndex;return check(),host.sourceSummaries.set(wrapped,Object.freeze({total:taskTotal,completed,current})),{state,total,rows:wrapped,...focusIndex===void 0?{}:{focusIndex}}}}}normalizeSourceTask(value,key){const source=this.treeSource,version=this.sourceVersion,owner=this.ownerDocument,control=this.sourceControl,epoch=control.epoch,projection=control.projection,owned=()=>this.isConnected&&this.ownerDocument===owner&&this.treeSource===source&&this.sourceVersion===version&&this.sourceControl===control&&control.epoch===epoch&&control.projection===projection&&!control.loading,accepted=projection?this.sourceSummaries.get(projection.rows):void 0,current=()=>owned()&&!!accepted?.current()&&owned(),field=name=>{if(!current())throw new Error("Task source changed");const result=hierarchyField(value,name);if(!current())throw new Error("Task source changed");return result},id=hierarchyKey(field("id"));if(id!==key)throw new TypeError("Task key mismatch");const label=hierarchyText(field("label")),status=normalizeTaskStatus(field("status")),detail=field("detail");return Object.freeze({id,label,status,...detail===void 0?{}:{detail:hierarchyText(detail)}})}get effectiveMaxNodes(){return Math.max(1,Math.min(5e3,finiteCount(this.maxNodes,MAX_RENDERED_TASKS)))}taskModel(){return this.taskProjection?.source!==this.items&&(this.taskProjection=projectTaskItems(this.items)),this.taskProjection}visibleTaskItems(){const model=this.taskModel(),limit=this.effectiveMaxNodes;if(this.renderedProjection?.model!==model||this.renderedProjection.limit!==limit){const items=this.renderedTaskItems(model.items);this.renderedProjection={model,limit,items,truncated:this.renderedTasksTruncated}}return this.renderedTasksTruncated=this.renderedProjection.truncated||model.truncated||!!publicCollectionTruncation(this,"items"),this.renderedProjection.items}requestUpdate(...args){this._treeSource!==void 0&&args[0]===void 0&&(this.sourceVersion++,this.syncSource(!0)),this._treeSource===void 0&&args[0]==="items"&&this.taskProjection?.source!==this.items&&(this.taskProjection=void 0,this.taskModel()),super.requestUpdate(...args)}sourceSummary(){const projection=this.sourceControl.projection;return projection?this.localize("treeSourceSummary",void 0,{visible:getNumberFormat(this.effectiveLocale).format(projection.rows.count),total:getNumberFormat(this.effectiveLocale).format(projection.total)}):""}updateSourceEffects(){const source=this.treeSource,binding=this.sourceWrapper,version=this.sourceVersion,epoch=this.sourceControl.epoch,owner=this.ownerDocument,projection=this.sourceControl.projection,{error,loading,rowError,rowsObserved}=this.sourceControl,bound=()=>this.isConnected&&this.ownerDocument===owner&&this.treeSource===source&&this.sourceWrapper===binding&&this.sourceVersion===version&&this.sourceControl.epoch===epoch,current=()=>bound()&&this.sourceControl.projection===projection&&this.sourceControl.error===error&&this.sourceControl.loading===loading&&this.sourceControl.rowError===rowError&&this.sourceControl.rowsObserved===rowsObserved;if(!current())return;const status=error?this.localize("treeSourceError"):loading?this.localize("loading"):this.sourceSummary();if(current()&&!(this.sourceAnnouncement!==void 0&&status!==this.sourceAnnouncement&&(this.limitAnnouncements.announcePolite(status),!current()))){if(rowsObserved){const message=rowError?this.localize("treeSourceError"):"";if(!current()||(this.limitAnnouncements.transition("source-rows",rowError?"error":"ready",message),!current()))return}this.sourceAnnouncement=status}}willUpdate(changed){if(super.willUpdate(changed),this.syncSource(),this.treeSource!==void 0){this.clearPendingReorder();return}changed.has("reorderable")&&!this.reorderable&&this.clearPendingReorder(),changed.has("items")&&(this.taskModel().deep&&devWarnOnce(DEEP_NESTING_WARNING_KEY,DEEP_NESTING_WARNING),this.capturePendingReorderFocus())}updated(changed){super.updated(changed);const wasMounting=this.isMounting||!this.isConnected;if(this.isMounting=!this.isConnected,this.treeSource!==void 0){this.updateSourceEffects();return}changed.has("items")&&(this.diffAndAnnounce(wasMounting),this.confirmPendingReorder()),!wasMounting&&this.renderedTasksTruncated&&!this.previouslyTruncated&&this.limitAnnouncements.announcePolite(this.localize("taskListLimit",void 0,{count:getNumberFormat(this.effectiveLocale).format(this.effectiveMaxNodes)})),this.previouslyTruncated=this.renderedTasksTruncated}disconnectedCallback(){this.sourceVersion++,this.sourceAnnouncement=void 0,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")}adoptedCallback(){super.adoptedCallback(),this.limitAnnouncements.adopted(),this.sourceVersion++,this.sourceAnnouncement=void 0,this.sourceControl.adopted(),this.syncSource(!0)}renderedTaskItems(items){const rendered=[];let remaining=this.effectiveMaxNodes,truncated=!1;for(const item of items){if(remaining===0){truncated=!0;break}remaining--;const children=validTaskItems(item.children),visibleChildren=children.slice(0,remaining);canonicalTaskArrays.add(visibleChildren),remaining-=visibleChildren.length,visibleChildren.length<children.length&&(truncated=!0),rendered.push(visibleChildren.length===children.length?item:{...item,children:visibleChildren})}return this.renderedTasksTruncated=truncated,rendered}diffAndAnnounce(firstSight){const region=this.liveRegion,nextMap=new Map;for(const item of this.taskModel().flat){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})):status==="incomplete"&&(region.mode="polite",region.announce(this.localize("taskListStepIncompleteAnnounce",void 0,{label:item.label,status:this.localize("statusIncomplete")}),{force:!0})))}}this.previousStatusById=nextMap}idsAreUnique(){return this.taskModel().unique}canReorderItems(){if(this.treeSource!==void 0)return!1;const model=this.taskModel();return this.reorderable&&model.valid&&model.unique}siblingItems(parentId){return parentId===null?this.taskModel().items:this.taskModel().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){this.treeSource!==void 0||!event.currentTarget?.isConnected||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=shadowFocusTarget(this);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"
|
|
@@ -34,7 +34,7 @@ import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/co
|
|
|
34
34
|
${canReorder?repeat(children,child=>child.id,child=>this.renderItem(child,1,item.id,canReorder)):children.map(child=>this.renderItem(child,1,item.id,canReorder))}
|
|
35
35
|
</div>`:nothing}
|
|
36
36
|
</div>
|
|
37
|
-
`}render(){const label=this.heading==null?this.localize("taskListLabel"):this.heading,ariaLabel=hostAriaLabel(this)??label,
|
|
37
|
+
`}render(){const label=this.heading==null?this.localize("taskListLabel"):this.heading,ariaLabel=hostAriaLabel(this)??label,sourceMode=this.treeSource!==void 0,model=sourceMode?void 0:this.taskModel(),projection=this.sourceControl.projection,sourceSummary=sourceMode&&projection?this.sourceSummaries.get(projection.rows):void 0,total=sourceMode?sourceSummary?.total:model.items.length,completed=sourceMode?sourceSummary?.completed:model.completed,renderedItems=sourceMode?[]:this.visibleTaskItems(),canReorder=this.canReorderItems(),number=getNumberFormat(this.effectiveLocale),summary=total===void 0||completed===void 0?"":this.localize("taskListCompletedOfTotal",void 0,{completed:number.format(completed),total:number.format(total)}),headingLevel=resolveHeadingLevel(this.headingLevel),header=this.withoutCollapse?html`
|
|
38
38
|
<div part="header" id=${this.headerId}>
|
|
39
39
|
<span part="label">${label}</span>
|
|
40
40
|
<span part="summary">${summary}</span>
|
|
@@ -57,10 +57,16 @@ import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/co
|
|
|
57
57
|
<div role=${headingLevel?"heading":nothing} aria-level=${headingLevel??nothing}>
|
|
58
58
|
${header}
|
|
59
59
|
</div>
|
|
60
|
-
<div part="body" id=${this.bodyId} role
|
|
61
|
-
${
|
|
60
|
+
<div part="body" id=${this.bodyId} role=${sourceMode?nothing:"list"} aria-label=${ariaLabel} ?hidden=${this.collapsed}>
|
|
61
|
+
${sourceMode?hierarchySourceView(this.sourceControl,{label:ariaLabel,rtl:this.effectiveDirection==="rtl",multiple:!1,loading:this.localize("loading"),error:this.localize("treeSourceError"),empty:this.localize("noData"),retry:this.localize("retry"),expand:this.localize("expand"),collapse:this.localize("collapse"),summary:this.sourceSummary(),name:()=>"",select:()=>{},content:item=>html`<span class="source-task" data-status=${item.status}>
|
|
62
|
+
<span part="status-icon" aria-hidden="true">${STATUS_ICON[item.status]()}</span>
|
|
63
|
+
<span class="sr-only">${this.localize(STATUS_LABEL_KEY[item.status])}</span>
|
|
64
|
+
<span part="item-label">${item.label}</span>
|
|
65
|
+
${item.detail?html`<span part="item-detail">${item.detail}</span>`:nothing}
|
|
66
|
+
<slot name=${`detail-${item.id}`}></slot>
|
|
67
|
+
</span>`}):canReorder?repeat(renderedItems,item=>item.id,item=>this.renderItem(item,0,null,canReorder)):renderedItems.map(item=>this.renderItem(item,0,null,canReorder))}
|
|
62
68
|
</div>
|
|
63
|
-
${this.renderedTasksTruncated?html`<p part="limit" role="note">${this.localize("taskListLimit",void 0,{count:number.format(
|
|
69
|
+
${!sourceMode&&this.renderedTasksTruncated?html`<p part="limit" role="note">${this.localize("taskListLimit",void 0,{count:number.format(this.effectiveMaxNodes)})}</p>`:nothing}
|
|
64
70
|
<lr-live-region></lr-live-region>
|
|
65
71
|
</div>
|
|
66
|
-
`}}__decorate([property({attribute:!1})],LyraTaskList.prototype,"items",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraTaskList.prototype,"reorderable",void 0),__decorate([property()],LyraTaskList.prototype,"heading",void 0),__decorate([property({attribute:"heading-level",reflect:!0})],LyraTaskList.prototype,"headingLevel",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraTaskList.prototype,"collapsed",void 0),__decorate([property({type:Boolean,attribute:"without-collapse"})],LyraTaskList.prototype,"withoutCollapse",void 0),__decorate([property({reflect:!0})],LyraTaskList.prototype,"size",void 0),__decorate([property({reflect:!0})],LyraTaskList.prototype,"frame",void 0),__decorate([query("lr-live-region")],LyraTaskList.prototype,"liveRegion",void 0);export{LyraTaskList};
|
|
72
|
+
`}}__decorate([property({attribute:!1})],LyraTaskList.prototype,"treeSource",null),__decorate([property({attribute:!1})],LyraTaskList.prototype,"items",void 0),__decorate([property({type:Number,attribute:"max-nodes"})],LyraTaskList.prototype,"maxNodes",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraTaskList.prototype,"reorderable",void 0),__decorate([property()],LyraTaskList.prototype,"heading",void 0),__decorate([property({attribute:"heading-level",reflect:!0})],LyraTaskList.prototype,"headingLevel",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraTaskList.prototype,"collapsed",void 0),__decorate([property({type:Boolean,attribute:"without-collapse"})],LyraTaskList.prototype,"withoutCollapse",void 0),__decorate([property({reflect:!0})],LyraTaskList.prototype,"size",void 0),__decorate([property({reflect:!0})],LyraTaskList.prototype,"frame",void 0),__decorate([query("lr-live-region")],LyraTaskList.prototype,"liveRegion",void 0);export{LyraTaskList};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** @deprecated Import @aceshooting/lyra-ui/components/lr-task-list.js to register this component. */
|
|
2
|
-
export*from'./task-list.class.js';import'../../utility/live-region/live-region.js';
|
|
2
|
+
export*from'./task-list.class.js';import'../../utility/live-region/live-region.js';import'../../layout/virtual-list/virtual-list.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export*from"./task-list.class.js";import"../../utility/live-region/live-region.js";import{LyraTaskList}from"./task-list.class.js";import{defineElement}from"../../../internal/prefix.js";defineElement("task-list",LyraTaskList);
|
|
1
|
+
export*from"./task-list.class.js";import"../../utility/live-region/live-region.js";import"../../layout/virtual-list/virtual-list.js";import{LyraTaskList}from"./task-list.class.js";import{defineElement}from"../../../internal/prefix.js";defineElement("task-list",LyraTaskList);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{css}from"lit";import{srOnly}from"../../../internal/a11y.js";const styles=[srOnly,css`:host{--_lr-task-list-spin:var(--lr-transition-ambient);display:block}[part=base]{border:var(--lr-border-width-thin) solid var(--lr-task-list-border-color,var(--lr-color-border));border-radius:var(--lr-task-list-radius,var(--lr-radius));background:var(--lr-task-list-bg,var(--lr-color-surface));overflow:hidden}:host(:is([size="2xs"],[size=xs],[size=s],[size=small])) [part=header]{padding:var(--lr-task-list-compact-header-padding,var(--lr-space-2xs) var(--lr-space-s));gap:var(--lr-task-list-compact-header-gap,var(--lr-space-2xs));font-size:var(--lr-task-list-compact-header-font-size,var(--lr-font-size-sm))}:host(:is([size="2xs"],[size=xs],[size=s],[size=small])) [part=body]{gap:var(--lr-task-list-compact-gap,var(--lr-space-2xs));padding:var(--lr-task-list-compact-body-padding,var(--lr-space-2xs) var(--lr-space-s) 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);box-sizing:border-box;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;background:0 0;border:none;display:flex}button[part=header]{cursor:pointer}:where(button[part=header]):hover{background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}:where(button[part=header]):active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-text)}:where(button[part=header]):hover [part=summary],:where(button[part=header]):active [part=summary]{color:inherit}button[part=header]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * max(var(--lr-focus-ring-width), calc(var(--lr-focus-ring-width) + var(--lr-focus-ring-offset))))}[part=toggle]{transition:transform var(--lr-transition-fast);flex:none;display:inline-flex}:host(:not([collapsed])) [part=toggle]{transform:rotate(90deg)}:host([collapsed]:dir(rtl)) [part=toggle]{transform:scaleX(-1)}[part=label]{overflow-wrap:anywhere;flex:auto;min-inline-size:0}[part=summary]{font-weight:var(--lr-font-weight-normal);font-size:var(--lr-font-size-sm);color:var(--lr-color-text-quiet);flex:none}[part=body]{gap:var(--lr-space-s);min-inline-size:0;max-inline-size:100%;padding:var(--lr-space-xs) var(--lr-space-m) var(--lr-space-m);border-block-start:var(--lr-border-width-thin) solid var(--lr-task-list-border-color,var(--lr-color-border));flex-direction:column;display:flex}[part=body][hidden]{display:none}[part=item]{align-items:baseline;gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part=item][tabindex]{border-radius:var(--lr-radius)}:where([part=item][tabindex]):hover{background:var(--lr-color-brand-quiet)}:where([part=item][tabindex]):active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=item][tabindex]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-offset))}[part=item][data-depth="1"]{margin-inline-start:var(--lr-space-l)}[part=item-children]{gap:var(--lr-space-s);flex-direction:column;flex-basis:100%;margin-block-start:var(--lr-space-xs);display:flex}[part=status-icon]{color:var(--lr-task-list-pending-color,var(--lr-color-text-quiet));flex:none;display:inline-flex}[part=status-icon] svg{display:block}[part=item][data-status=running] [part=status-icon]{color:var(--lr-task-list-running-color,var(--lr-color-brand))}[part=item][data-status=running] [part=status-icon] svg{animation:var(--_lr-motion-animation,lr-task-list-spin var(--lr-task-list-spin,var(--_lr-task-list-spin)) infinite)}[part=item][data-status=success] [part=status-icon]{color:var(--lr-task-list-success-color,var(--lr-color-success))}[part=item][data-status=incomplete] [part=status-icon]{color:var(--lr-task-list-incomplete-color,var(--lr-color-text-quiet))}[part=item][data-status=error] [part=status-icon]{color:var(--lr-task-list-error-color,var(--lr-color-danger))}[part=item-label]{overflow-wrap:anywhere;flex:auto;min-inline-size:0;max-inline-size:100%}[part=item-detail]{overflow-wrap:anywhere;min-inline-size:0;max-inline-size:100%;font-size:var(--lr-font-size-sm);color:var(--lr-color-text-quiet);flex-basis:100%}[part=limit]{margin:var(--lr-space-s);color:var(--lr-color-text-quiet)}@keyframes lr-task-list-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){[part=toggle]{transition:none!important}[part=item][data-status=running] [part=status-icon] svg{animation:none!important}}`];export{styles};
|
|
1
|
+
import{css}from"lit";import{srOnly}from"../../../internal/a11y.js";const styles=[srOnly,css`:host{--_lr-task-list-spin:var(--lr-transition-ambient);display:block}.source-task{gap:var(--lr-space-2xs) var(--lr-space-xs);grid-template-columns:auto minmax(0,1fr);min-inline-size:0;display:grid}.source-task [part=item-detail],.source-task slot{grid-column:2}[part=source-label]{flex:1;min-inline-size:0}[part=base]{border:var(--lr-border-width-thin) solid var(--lr-task-list-border-color,var(--lr-color-border));border-radius:var(--lr-task-list-radius,var(--lr-radius));background:var(--lr-task-list-bg,var(--lr-color-surface));overflow:hidden}:host(:is([size="2xs"],[size=xs],[size=s],[size=small])) [part=header]{padding:var(--lr-task-list-compact-header-padding,var(--lr-space-2xs) var(--lr-space-s));gap:var(--lr-task-list-compact-header-gap,var(--lr-space-2xs));font-size:var(--lr-task-list-compact-header-font-size,var(--lr-font-size-sm))}:host(:is([size="2xs"],[size=xs],[size=s],[size=small])) [part=body]{gap:var(--lr-task-list-compact-gap,var(--lr-space-2xs));padding:var(--lr-task-list-compact-body-padding,var(--lr-space-2xs) var(--lr-space-s) 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);box-sizing:border-box;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;background:0 0;border:none;display:flex}button[part=header]{cursor:pointer}:where(button[part=header]):hover{background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}:where(button[part=header]):active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-text)}:where(button[part=header]):hover [part=summary],:where(button[part=header]):active [part=summary]{color:inherit}button[part=header]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * max(var(--lr-focus-ring-width), calc(var(--lr-focus-ring-width) + var(--lr-focus-ring-offset))))}[part=toggle]{transition:transform var(--lr-transition-fast);flex:none;display:inline-flex}:host(:not([collapsed])) [part=toggle]{transform:rotate(90deg)}:host([collapsed]:dir(rtl)) [part=toggle]{transform:scaleX(-1)}[part=label]{overflow-wrap:anywhere;flex:auto;min-inline-size:0}[part=summary]{font-weight:var(--lr-font-weight-normal);font-size:var(--lr-font-size-sm);color:var(--lr-color-text-quiet);flex:none}[part=body]{gap:var(--lr-space-s);min-inline-size:0;max-inline-size:100%;padding:var(--lr-space-xs) var(--lr-space-m) var(--lr-space-m);border-block-start:var(--lr-border-width-thin) solid var(--lr-task-list-border-color,var(--lr-color-border));flex-direction:column;display:flex}[part=body][hidden]{display:none}[part=item]{align-items:baseline;gap:var(--lr-space-xs);flex-wrap:wrap;display:flex}[part=item][tabindex]{border-radius:var(--lr-radius)}:where([part=item][tabindex]):hover{background:var(--lr-color-brand-quiet)}:where([part=item][tabindex]):active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=item][tabindex]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:calc(-1 * var(--lr-focus-ring-offset))}[part=item][data-depth="1"]{margin-inline-start:var(--lr-space-l)}[part=item-children]{gap:var(--lr-space-s);flex-direction:column;flex-basis:100%;margin-block-start:var(--lr-space-xs);display:flex}[part=status-icon]{color:var(--lr-task-list-pending-color,var(--lr-color-text-quiet));flex:none;display:inline-flex}[part=status-icon] svg{display:block}:is([part=item],.source-task)[data-status=running] [part=status-icon]{color:var(--lr-task-list-running-color,var(--lr-color-brand))}:is([part=item],.source-task)[data-status=running] [part=status-icon] svg{animation:var(--_lr-motion-animation,lr-task-list-spin var(--lr-task-list-spin,var(--_lr-task-list-spin)) infinite)}:is([part=item],.source-task)[data-status=success] [part=status-icon]{color:var(--lr-task-list-success-color,var(--lr-color-success))}:is([part=item],.source-task)[data-status=incomplete] [part=status-icon]{color:var(--lr-task-list-incomplete-color,var(--lr-color-text-quiet))}:is([part=item],.source-task)[data-status=error] [part=status-icon]{color:var(--lr-task-list-error-color,var(--lr-color-danger))}[part=item-label]{overflow-wrap:anywhere;flex:auto;min-inline-size:0;max-inline-size:100%}[part=item-detail]{overflow-wrap:anywhere;min-inline-size:0;max-inline-size:100%;font-size:var(--lr-font-size-sm);color:var(--lr-color-text-quiet);flex-basis:100%}[part=limit]{margin:var(--lr-space-s);color:var(--lr-color-text-quiet)}@keyframes lr-task-list-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){[part=toggle]{transition:none!important}:is([part=item],.source-task)[data-status=running] [part=status-icon] svg{animation:none!important}}`];export{styles};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraAnchor,LyraHighlight,HighlightActivateDetail,TextSelectDetail}from'../../viewers/document-viewer/anchors.js';export type{LyraAnchor,LyraHighlight,LyraHighlightTone,HighlightActivateDetail,TextSelectDetail,}from'../../viewers/document-viewer/anchors.js';import type{LyraFrame,LyraSize}from'../../../internal/variants.js';import type{LyraSearchChangeDetail}from'../../../internal/text-viewer-target.js';import{type LyraClipboardWriteFailure,type LyraClipboardWriteSuccess}from'../../../internal/clipboard.js';export interface LyraTerminalEventMap{'lr-copy':CustomEvent<LyraClipboardWriteSuccess>;'lr-error':CustomEvent<null>;'lr-copy-error':CustomEvent<LyraClipboardWriteFailure>;'lr-download-request':CustomEvent<{filename:string;}>;'lr-follow-change':CustomEvent<{following:boolean;}>;'lr-search-change':CustomEvent<LyraSearchChangeDetail>;'lr-highlight-activate':CustomEvent<HighlightActivateDetail>;'lr-text-select':CustomEvent<TextSelectDetail>;}
|
|
1
|
+
import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraAnchor,LyraHighlight,HighlightActivateDetail,TextSelectDetail}from'../../viewers/document-viewer/anchors.js';export type{LyraAnchor,LyraHighlight,LyraHighlightTone,HighlightActivateDetail,TextSelectDetail,}from'../../viewers/document-viewer/anchors.js';import type{LyraFrame,LyraSize}from'../../../internal/variants.js';import type{LyraSearchChangeDetail}from'../../../internal/text-viewer-target.js';import{type LyraClipboardWriteFailure,type LyraClipboardWriteSuccess}from'../../../internal/clipboard.js';export interface LyraTerminalOverflowDetail{truncated:true;inputCharactersDropped:number;lineCharactersDropped:number;linesDropped:number;}export interface LyraTerminalEventMap{'lr-overflow':CustomEvent<LyraTerminalOverflowDetail>;'lr-copy':CustomEvent<LyraClipboardWriteSuccess>;'lr-error':CustomEvent<null>;'lr-copy-error':CustomEvent<LyraClipboardWriteFailure>;'lr-download-request':CustomEvent<{filename:string;}>;'lr-follow-change':CustomEvent<{following:boolean;}>;'lr-search-change':CustomEvent<LyraSearchChangeDetail>;'lr-highlight-activate':CustomEvent<HighlightActivateDetail>;'lr-text-select':CustomEvent<TextSelectDetail>;}
|
|
2
2
|
/**
|
|
3
3
|
* `<lr-terminal>` — read-only ANSI console for streamed agent/tool output. Not a PTY: no
|
|
4
4
|
* stdin/keystroke handling, no cursor-addressed full-screen apps. Split ANSI sequences retain at
|
|
@@ -22,6 +22,7 @@ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from
|
|
|
22
22
|
* page direction. By default (lines soft-wrap), the scrollport follows the page direction.
|
|
23
23
|
*
|
|
24
24
|
* @customElement lr-terminal
|
|
25
|
+
* @event lr-overflow - `detail: { truncated: true, inputCharactersDropped, lineCharactersDropped, linesDropped }` — a write/content commit exceeded an input, line, or retained-history limit. Character counts use UTF-16 units; dropped lines include max-scrollback pruning.
|
|
25
26
|
* @event lr-copy - `detail: { ok: true, text }` — the plain-text clipboard write completed.
|
|
26
27
|
* @event lr-error - The clipboard write failed; generic no-detail notification.
|
|
27
28
|
* @event lr-copy-error - `detail: { ok: false, text, reason, error }` — typed clipboard failure.
|
|
@@ -107,7 +108,9 @@ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from
|
|
|
107
108
|
*/
|
|
108
109
|
export declare class LyraTerminal extends LyraElement<LyraTerminalEventMap>{private emitDownloadRequest;protected static collectionSupport:import("../../../internal/lyra-element.js").LyraCollectionSupport;protected static readonly immutableEventDetails:readonly string[];static styles:import("lit").CSSResultGroup[];content:string;
|
|
109
110
|
/** Line-count scrollback buffer limit. NaN/negative/oversized (e.g. `Infinity`) normalize to a
|
|
110
|
-
* 1..10,000 range
|
|
111
|
+
* 1..10,000 range. Retained text is additionally limited to 2,000,000 UTF-16 units, each line
|
|
112
|
+
* to 20,000 scalar columns, and each write/content commit to 1,000,000 input UTF-16 units.
|
|
113
|
+
* lr-overflow reports loss; effective retained lines also depend on their lengths. */
|
|
111
114
|
maxScrollback:number;follow:boolean;
|
|
112
115
|
/** Keeps each line on one row (horizontally scrollable) instead of soft-wrapping it. */
|
|
113
116
|
withoutWrap:boolean;
|
|
@@ -133,10 +136,11 @@ frame:LyraFrame;
|
|
|
133
136
|
/** Feature-detectable capability mirror -- the same pattern `DocumentAnchorTarget`-adopting
|
|
134
137
|
* viewers use for their own `anchorKinds` field. This component isn't document-viewer-registry-
|
|
135
138
|
* routed, so it has no registry `capabilities.anchors` entry to declare this on instead. */
|
|
136
|
-
readonly anchorKinds:readonly LyraAnchor['kind'][];private linesRevision;private linesSnapshot;private get lines();private invalidateLines;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;private pendingAnnounceText;private announceRegionEl?;private sink?;private readonly announcer;private searchQuery;private searchMatches;private searchMatchCountExact;private searchActiveIndex;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;firstUpdated(changed:PropertyValues):void;protected willUpdate(changed:PropertyValues):void;private resetBuffer;private appendLine;private effectiveMaxScrollback;private trimScrollback;private
|
|
139
|
+
readonly anchorKinds:readonly LyraAnchor['kind'][];private linesRevision;private linesSnapshot;private get lines();private invalidateLines;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;private pendingAnnounceText;private announceRegionEl?;private sink?;private readonly announcer;private searchQuery;private searchMatches;private searchMatchCountExact;private searchActiveIndex;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;firstUpdated(changed:PropertyValues):void;protected willUpdate(changed:PropertyValues):void;private resetBuffer;private appendLine;private effectiveMaxScrollback;private trimScrollback;private pendingOverflow?;private putText;private applyChunk;private eraseLine;private writeInternal;
|
|
137
140
|
/** Append streamed output. Escape sequences may split across chunks -- the shared parser buffers
|
|
138
141
|
* partial sequences internally up to its 4,096-character ceiling, then drops an unterminated
|
|
139
|
-
* sequence and resumes from a clean boundary on the next write.
|
|
142
|
+
* sequence and resumes from a clean boundary on the next write. Input above 1,000,000 UTF-16
|
|
143
|
+
* units and text above 20,000 scalar columns per line are omitted; lr-overflow reports loss. */
|
|
140
144
|
write(chunk:string):void;
|
|
141
145
|
/** Synchronously replaces the buffer and the reactive `content` source. This is the explicit
|
|
142
146
|
* commit-order primitive for code that mixes replacement with same-turn `write()`/`clear()`. */
|
|
@@ -152,4 +156,4 @@ search(query:string):Promise<number>;
|
|
|
152
156
|
searchNext():Promise<boolean>;
|
|
153
157
|
/** Moves to the previous match, wrapping to the last before the first. Resolves `true` once the
|
|
154
158
|
* active match moved, `false` when there are no matches. */
|
|
155
|
-
searchPrevious():Promise<boolean>;clearSearch():void;private resolvedHighlightLines;private activateHighlight;private onLineKeyDown;scrollToAnchor(target:LyraAnchor|string):Promise<boolean>;private onCopy;private copyOutput;private isCurrentCopy;private showCopyStatus;private resetCopyFeedback;private clearCopyTimeout;private cancelPendingAnnouncement;private downloadDispatching;private onDownload;private onVisibleRangeChanged;private onViewportKeyDown;private onViewportPointerUp;private lineStateStyle;private renderLine;private segmentStyle;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-terminal':LyraTerminal;}}
|
|
159
|
+
searchPrevious():Promise<boolean>;clearSearch():void;private resolvedHighlightLines;private activateHighlight;private onLineKeyDown;scrollToAnchor(target:LyraAnchor|string):Promise<boolean>;private onCopy;private copyOutput;private isCurrentCopy;private showCopyStatus;private resetCopyFeedback;private clearCopyTimeout;private cancelPendingAnnouncement;private downloadDispatching;private onDownload;private onVisibleRangeChanged;private onViewportKeyDown;private onViewportPointerUp;private lineStateStyle;private renderLine;private segmentStyle;private matchSetMemo?;private matchedLineNumbers;private sourceMemo?;private lineSource;private rowRenderState?;private readonly renderTerminalLine;private explicitRowRefresh;requestUpdate(...args:Parameters<LyraElement['requestUpdate']>):void;protected updated(changed:PropertyValues):void;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-terminal':LyraTerminal;}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import{eventCollectionSupport}from"../../../internal/collection-snapshot.js";import{tag}from"../../../internal/prefix.js";import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{
|
|
1
|
+
import{__decorate}from"tslib";import{eventCollectionSupport}from"../../../internal/collection-snapshot.js";import{tag}from"../../../internal/prefix.js";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-host-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{advanceViewerSearchIndex,sameViewerSearchDetail,viewerSearchDetail}from"../../../internal/viewer-search.js";import{presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{writeClipboardText}from"../../../internal/clipboard.js";import{LYRA_DEFAULT_accessibleLabelSeparator,LYRA_DEFAULT_terminalDownload,LYRA_DEFAULT_terminalHighlightLine,LYRA_DEFAULT_terminalLabel}from"../../../internal/default-strings/agent-tools.generated.js";import{LYRA_DEFAULT_copied,LYRA_DEFAULT_copy,LYRA_DEFAULT_copyFailed,LYRA_DEFAULT_highlightWithLabel,LYRA_DEFAULT_jumpToLatest,LYRA_DEFAULT_viewerSearchActiveMatch,LYRA_DEFAULT_viewerSearchMatchCount,LYRA_DEFAULT_viewerSearchNoMatches}from"../../../internal/default-strings/shared.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=2e6,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.text}function columnOffset(text,column){let offset=0;for(let index=0;index<column&&offset<text.length;index++)offset+=text.codePointAt(offset)>65535?2:1;return offset}function replaceLineText(line,start,end,text,styles2){if(start===line.text.length&&end===start){const previous=line.runs.at(-1);text&&previous&&stylesEqual(previous.styles,styles2)?previous.end+=text.length:text&&line.runs.push({start,end:start+text.length,styles:styles2}),line.text+=text;return}const delta=text.length-(end-start),next=[],append=run=>{if(run.start>=run.end)return;const previous=next.at(-1);previous&&previous.end===run.start&&stylesEqual(previous.styles,run.styles)?previous.end=run.end:next.push(run)};for(const run of line.runs)run.start<start&&append({start:run.start,end:Math.min(start,run.end),styles:run.styles});append({start,end:start+text.length,styles:styles2});for(const run of line.runs)run.end>end&&append({start:Math.max(end,run.start)+delta,end:run.end+delta,styles:run.styles});line.text=line.text.slice(0,start)+text+line.text.slice(end),line.runs=next}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.withoutWrap=!1,this.withoutCopyButton=!1,this.downloadable=!1,this.filename="terminal.log",this.announceOutput=!1,this.accessibleLabel="",this._highlights=snapshotLyraHighlights([]),this.lastHighlightsInput=this._highlights,this.activeHighlightId=null,this.size="m",this.frame="card",this.anchorKinds=["line-range"],this.linesRevision=0,this.linesSnapshot=[],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.downloadDispatching=!1,this.onDownload=()=>{if(!this.downloadDispatching){this.downloadDispatching=!0;try{const filename=this.filename||"terminal.log";if(this.emitDownloadRequest({filename}).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)}finally{this.downloadDispatching=!1}}},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(tag("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;let highlightLabel="";if(highlightOwner){const 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}const 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"
|
|
@@ -12,12 +12,12 @@ import{__decorate}from"tslib";import{eventCollectionSupport}from"../../../intern
|
|
|
12
12
|
aria-current=${highlightOwner?highlightOwner.id===this.activeHighlightId?"true":"false":nothing}
|
|
13
13
|
@click=${highlightOwner?()=>this.activateHighlight(highlightOwner):nothing}
|
|
14
14
|
@keydown=${highlightOwner?e=>this.onLineKeyDown(e,highlightOwner):nothing}
|
|
15
|
-
>${
|
|
16
|
-
`}}static{this.defaultStrings={...super.defaultStrings,accessibleLabelSeparator:LYRA_DEFAULT_accessibleLabelSeparator,copied:LYRA_DEFAULT_copied,copy:LYRA_DEFAULT_copy,copyFailed:LYRA_DEFAULT_copyFailed,highlightWithLabel:LYRA_DEFAULT_highlightWithLabel,jumpToLatest:LYRA_DEFAULT_jumpToLatest,terminalDownload:LYRA_DEFAULT_terminalDownload,terminalHighlightLine:LYRA_DEFAULT_terminalHighlightLine,terminalLabel:LYRA_DEFAULT_terminalLabel,viewerSearchActiveMatch:LYRA_DEFAULT_viewerSearchActiveMatch,viewerSearchMatchCount:LYRA_DEFAULT_viewerSearchMatchCount,viewerSearchNoMatches:LYRA_DEFAULT_viewerSearchNoMatches}}emitDownloadRequest(detail){return this.emit("lr-download-request",Object.freeze(detail),{cancelable:!0})}static{this.collectionSupport=eventCollectionSupport}static{this.immutableEventDetails=Object.freeze(["lr-text-select"])}static{this.styles=[LyraElement.styles,specialistTokens,styles,srOnly]}get highlights(){return this._highlights}set highlights(value){if(value===this._highlights||value===this.lastHighlightsInput)return;this.lastHighlightsInput=value;const previous=this._highlights;this._highlights=snapshotLyraHighlights(value),this.requestUpdate("highlights",previous)}get normalizedHighlights(){return this.highlights}get lines(){return this.linesRevision,this.linesSnapshot??=[...this.buffer]}invalidateLines(){this.linesSnapshot=null,this.linesRevision+=1}connectedCallback(){super.connectedCallback();const ownerWindow=this.ownerDocument.defaultView;ownerWindow&&this.announcer.setTimerHost(ownerWindow),this.sink??=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this})}disconnectedCallback(){super.disconnectedCallback(),this.resetCopyFeedback(),this.cancelPendingAnnouncement(),this.sink?.release(),this.sink=void 0}adoptedCallback(){super.adoptedCallback(),this.resetCopyFeedback();const ownerWindow=this.ownerDocument.defaultView;ownerWindow&&this.announcer.setTimerHost(ownerWindow)}firstUpdated(changed){super.firstUpdated(changed),this.announceRegionEl=this.renderRoot.querySelector('[part="announcer"]')??void 0}willUpdate(changed){super.willUpdate(changed),changed.has("content")&&this.commitPendingContent(),changed.has("maxScrollback")&&this.trimScrollback(),changed.has("announceOutput")&&!this.announceOutput&&this.cancelPendingAnnouncement()}resetBuffer(){this.ansiParser.reset(),this.buffer=[],this.retainedCellCount=0,this.lineSeq=0,this.column=0,this.invalidateLines(),this.scrollTargetLineNumber=null,this.searchQuery="",this.searchMatches=[],this.searchMatchCountExact=!0,this.searchActiveIndex=-1}appendLine(){this.buffer.push({number:++this.lineSeq,
|
|
17
|
-
`?this.appendLine():ch==="\r"?this.column=0:ch==="\b"?this.column=Math.max(0,this.column-1):
|
|
18
|
-
`:"")+visibleAnnouncement,this.announcer.announce(this.pendingAnnounceText)),notifySearch&&this.emitSearchChangeIfChanged(previousSearch)}write(chunk){this.commitPendingContent(),this.writeInternal(typeof chunk=="string"?chunk:String(chunk))}replace(content){this.content=typeof content=="string"?content:String(content),this.commitPendingContent()}commitPendingContent(){if(this.appliedContent===this.content)return;const previousSearch=this.searchState();this.cancelPendingAnnouncement(),this.resetBuffer(),this.appliedContent=this.content,this.writeInternal(this.content??"",!1),this.emitSearchChangeIfChanged(previousSearch)}clear(){const previousSearch=this.searchState();this.cancelPendingAnnouncement(),this.appliedContent=this.content,this.resetBuffer(),this.emitSearchChangeIfChanged(previousSearch)}getPlainText(){return this.buffer.map(plainTextOfLine).join(`
|
|
15
|
+
>${line.runs.map(run=>html`<span style=${styleMap(this.segmentStyle(run.styles))}>${line.text.slice(run.start,run.end)}</span>`)}</div>
|
|
16
|
+
`},this.renderTerminalLine=item=>{const state2=this.rowRenderState;return this.renderLine(item,state2.highlightByLine,state2.highlightOwnerLines,state2.matchedLineNumbers,state2.activeMatchLineNumber)},this.explicitRowRefresh=!1}static{this.defaultStrings={...super.defaultStrings,accessibleLabelSeparator:LYRA_DEFAULT_accessibleLabelSeparator,copied:LYRA_DEFAULT_copied,copy:LYRA_DEFAULT_copy,copyFailed:LYRA_DEFAULT_copyFailed,highlightWithLabel:LYRA_DEFAULT_highlightWithLabel,jumpToLatest:LYRA_DEFAULT_jumpToLatest,terminalDownload:LYRA_DEFAULT_terminalDownload,terminalHighlightLine:LYRA_DEFAULT_terminalHighlightLine,terminalLabel:LYRA_DEFAULT_terminalLabel,viewerSearchActiveMatch:LYRA_DEFAULT_viewerSearchActiveMatch,viewerSearchMatchCount:LYRA_DEFAULT_viewerSearchMatchCount,viewerSearchNoMatches:LYRA_DEFAULT_viewerSearchNoMatches}}emitDownloadRequest(detail){return this.emit("lr-download-request",Object.freeze(detail),{cancelable:!0})}static{this.collectionSupport=eventCollectionSupport}static{this.immutableEventDetails=Object.freeze(["lr-text-select"])}static{this.styles=[LyraElement.styles,specialistTokens,styles,srOnly]}get highlights(){return this._highlights}set highlights(value){if(value===this._highlights||value===this.lastHighlightsInput)return;this.lastHighlightsInput=value;const previous=this._highlights;this._highlights=snapshotLyraHighlights(value),this.requestUpdate("highlights",previous)}get normalizedHighlights(){return this.highlights}get lines(){return this.linesRevision,this.linesSnapshot??=[...this.buffer]}invalidateLines(){this.linesSnapshot=null,this.linesRevision+=1}connectedCallback(){super.connectedCallback();const ownerWindow=this.ownerDocument.defaultView;ownerWindow&&this.announcer.setTimerHost(ownerWindow),this.sink??=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this})}disconnectedCallback(){super.disconnectedCallback(),this.resetCopyFeedback(),this.cancelPendingAnnouncement(),this.sink?.release(),this.sink=void 0}adoptedCallback(){super.adoptedCallback(),this.resetCopyFeedback();const ownerWindow=this.ownerDocument.defaultView;ownerWindow&&this.announcer.setTimerHost(ownerWindow)}firstUpdated(changed){super.firstUpdated(changed),this.announceRegionEl=this.renderRoot.querySelector('[part="announcer"]')??void 0}willUpdate(changed){super.willUpdate(changed),changed.has("content")&&this.commitPendingContent(),changed.has("maxScrollback")&&this.trimScrollback(),changed.has("announceOutput")&&!this.announceOutput&&this.cancelPendingAnnouncement()}resetBuffer(){this.ansiParser.reset(),this.buffer=[],this.retainedCellCount=0,this.lineSeq=0,this.column=0,this.invalidateLines(),this.scrollTargetLineNumber=null,this.searchQuery="",this.searchMatches=[],this.searchMatchCountExact=!0,this.searchActiveIndex=-1}appendLine(){this.buffer.push({number:++this.lineSeq,text:"",runs:[],columns:0});const max=this.effectiveMaxScrollback();this.buffer.length-max>=SCROLLBACK_PRUNE_BATCH&&this.trimScrollback(!1,!1),this.column=0}effectiveMaxScrollback(){return Math.max(1,finiteCount(this.maxScrollback,5e3,MAX_SCROLLBACK_LINES))}trimScrollback(notifySearch=!0,refresh=!0){const previousSearch=this.searchState(),max=this.effectiveMaxScrollback(),removeCount=Math.max(0,this.buffer.length-max),removed=removeCount>0?this.buffer.splice(0,removeCount):[];for(const line of removed)this.retainedCellCount-=line.text.length;let resourceTrimmed=0;for(;this.retainedCellCount>MAX_RETAINED_CELLS&&this.buffer.length>1;){const line=this.buffer.shift();line&&(this.retainedCellCount-=line.text.length),resourceTrimmed++}this.pendingOverflow&&(this.pendingOverflow.linesDropped+=removed.length+resourceTrimmed),(removed.length>0||resourceTrimmed)&&(refresh&&(this.invalidateLines(),this.searchQuery&&this.recomputeSearchMatches()),this.scrollTargetLineNumber!==null&&(this.scrollTargetLineNumber<(this.buffer[0]?.number??1/0)||this.scrollTargetLineNumber>(this.buffer.at(-1)?.number??-1/0))&&(this.scrollTargetLineNumber=this.buffer[0]?.number??null),notifySearch&&this.emitSearchChangeIfChanged(previousSearch))}putText(text,styles2){if(!text)return;this.buffer.length===0&&this.appendLine();const line=this.buffer.at(-1);let accepted=0,offset=0;for(;offset<text.length&&this.column+accepted<MAX_CELLS_PER_LINE;)offset+=text.codePointAt(offset)>65535?2:1,accepted++;if(offset<text.length&&this.pendingOverflow&&(this.pendingOverflow.lineCharactersDropped+=text.length-offset),!accepted)return;const before=line.text.length;if(this.column>line.columns){const padding=" ".repeat(this.column-line.columns);replaceLineText(line,line.text.length,line.text.length,padding,EMPTY_CELL_STYLES),line.columns=this.column}const start=this.column===line.columns?line.text.length:columnOffset(line.text,this.column),end=this.column+accepted>=line.columns?line.text.length:columnOffset(line.text,this.column+accepted);replaceLineText(line,start,end,text.slice(0,offset),styles2),line.columns=Math.max(line.columns,this.column+accepted),this.retainedCellCount+=line.text.length-before,this.column+=accepted}applyChunk(text,styles2){const controls=/[\n\r\b\t]/g;let start=0;for(const match of text.matchAll(controls)){this.putText(text.slice(start,match.index),styles2);const ch=match[0];ch===`
|
|
17
|
+
`?this.appendLine():ch==="\r"?this.column=0:ch==="\b"?this.column=Math.max(0,this.column-1):this.column=Math.min(MAX_CELLS_PER_LINE,(Math.floor(this.column/8)+1)*8),start=match.index+1}this.putText(text.slice(start),styles2)}eraseLine(mode){const line=this.buffer.at(-1);if(!line)return;const before=line.text.length;if(mode===1){const columns=Math.min(this.column+1,line.columns);replaceLineText(line,0,columnOffset(line.text,columns)," ".repeat(columns),EMPTY_CELL_STYLES)}else{const columns=mode===2?0:Math.min(this.column,line.columns);replaceLineText(line,columnOffset(line.text,columns),line.text.length,"",EMPTY_CELL_STYLES),line.columns=columns}this.retainedCellCount+=line.text.length-before}writeInternal(raw,notifySearch=!0){const previousSearch=this.searchState(),overflow={truncated:!0,inputCharactersDropped:Math.max(0,raw.length-MAX_INPUT_CHARACTERS),lineCharactersDropped:0,linesDropped:0};this.pendingOverflow=overflow;const startLine=this.buffer[this.buffer.length-1],startNumber=startLine?startLine.number:this.lineSeq+1,announce=this.hasUpdated&&this.announceOutput,startText=announce&&startLine?plainTextOfLine(startLine):void 0,boundedRaw=raw.slice(0,MAX_INPUT_CHARACTERS);if(boundedRaw!==""){const segments=this.ansiParser.push(boundedRaw);for(const seg of segments)seg.eraseLine!==void 0?this.eraseLine(seg.eraseLine):this.applyChunk(seg.text,seg.styles)}if(this.trimScrollback(!1,!1),this.invalidateLines(),this.searchQuery&&this.refreshSearchMatchesFrom(startNumber),this.follow){const last=this.buffer[this.buffer.length-1];this.scrollTargetLineNumber=last?last.number:null}const visibleAnnouncement=announce?this.writtenText(startNumber,startText):"";visibleAnnouncement!==""&&(this.pendingAnnounceText+=(this.pendingAnnounceText?`
|
|
18
|
+
`:"")+visibleAnnouncement,this.announcer.announce(this.pendingAnnounceText)),this.pendingOverflow=void 0,(overflow.inputCharactersDropped||overflow.lineCharactersDropped||overflow.linesDropped)&&this.emit("lr-overflow",overflow),notifySearch&&this.emitSearchChangeIfChanged(previousSearch)}write(chunk){this.commitPendingContent(),this.writeInternal(typeof chunk=="string"?chunk:String(chunk))}replace(content){this.content=typeof content=="string"?content:String(content),this.commitPendingContent()}commitPendingContent(){if(this.appliedContent===this.content)return;const previousSearch=this.searchState();this.cancelPendingAnnouncement(),this.resetBuffer(),this.appliedContent=this.content,this.writeInternal(this.content??"",!1),this.emitSearchChangeIfChanged(previousSearch)}clear(){const previousSearch=this.searchState();this.cancelPendingAnnouncement(),this.appliedContent=this.content,this.resetBuffer(),this.emitSearchChangeIfChanged(previousSearch)}getPlainText(){return this.buffer.map(plainTextOfLine).join(`
|
|
19
19
|
`)}writtenText(startNumber,startText){const first=this.buffer[0]?.number;if(first===void 0)return"";const pieces=[];for(let index=Math.max(0,startNumber-first);index<this.buffer.length;index+=1){const line=this.buffer[index],text=plainTextOfLine(line);line.number===startNumber&&startText!==void 0?pieces.push(text.startsWith(startText)?text.slice(startText.length):text):pieces.push(text)}return pieces.filter(piece=>piece!=="").join(`
|
|
20
|
-
`)}scrollToBottom(){this.follow=!0;const last=this.buffer[this.buffer.length-1];this.scrollTargetLineNumber=last?last.number:null}recomputeSearchMatches(){this.searchMatches=[],this.searchMatchCountExact=!0,this.searchQuery&&this.scanSearchMatches(0)}refreshSearchMatchesFrom(startNumber){const first=this.buffer[0]?.number;if(!this.searchMatchCountExact||first===void 0){this.recomputeSearchMatches();return}this.searchMatches=this.searchMatches.filter(match=>match.lineNumber>=first&&match.lineNumber<startNumber),this.scanSearchMatches(Math.max(0,startNumber-first))}scanSearchMatches(fromIndex){const needle=this.searchQuery.toLocaleLowerCase(this.effectiveLocale);for(let index=fromIndex;index<this.buffer.length;index+=1){const line=this.buffer[index],haystack=plainTextOfLine(line).toLocaleLowerCase(this.effectiveLocale);let from=0;for(;;){const idx=haystack.indexOf(needle,from);if(idx<0)break;if(this.searchMatches.push({lineNumber:line.number}),this.searchMatches.length>=MAX_SEARCH_MATCHES){this.searchMatchCountExact=!1;break}from=idx+needle.length}if(this.searchMatches.length>=MAX_SEARCH_MATCHES)break}this.searchActiveIndex>=this.searchMatches.length&&(this.searchActiveIndex=this.searchMatches.length>0?0:-1)}emitSearchChange(){this.emit("lr-search-change",this.searchState())}searchState(){return viewerSearchDetail(this.searchQuery,this.searchMatches.length,this.searchMatchCountExact,this.searchActiveIndex)}emitSearchChangeIfChanged(previous){sameViewerSearchDetail(previous,this.searchState())||this.emitSearchChange()}jumpToActiveMatch(){const match=this.searchMatches[this.searchActiveIndex];match&&(this.follow&&(this.follow=!1),this.scrollTargetLineNumber=match.lineNumber)}async search(query){const previousSearch=this.searchState();return this.searchQuery=query,this.recomputeSearchMatches(),this.searchActiveIndex=this.searchMatches.length>0?0:-1,this.emitSearchChangeIfChanged(previousSearch),this.searchActiveIndex>=0&&this.jumpToActiveMatch(),this.requestUpdate(),await this.updateComplete,this.searchMatches.length}async searchNext(){if(this.searchMatches.length===0)return!1;const previousSearch=this.searchState();return this.searchActiveIndex=advanceViewerSearchIndex(this.searchActiveIndex,this.searchMatches.length,1),this.emitSearchChangeIfChanged(previousSearch),this.jumpToActiveMatch(),!0}async searchPrevious(){if(this.searchMatches.length===0)return!1;const previousSearch=this.searchState();return this.searchActiveIndex=advanceViewerSearchIndex(this.searchActiveIndex,this.searchMatches.length,-1),this.emitSearchChangeIfChanged(previousSearch),this.jumpToActiveMatch(),!0}clearSearch(){const previousSearch=this.searchState();this.searchQuery="",this.searchMatches=[],this.searchMatchCountExact=!0,this.searchActiveIndex=-1,this.emitSearchChangeIfChanged(previousSearch),this.requestUpdate()}resolvedHighlightLines(){const perLine=new Map,owners=new Map,highlights=this.normalizedHighlights;if(this.lines.length===0||highlights.length===0)return{perLine,owners};const minLine=this.lines[0].number,maxLine=this.lines[this.lines.length-1].number;for(const highlight of highlights){if(highlight.anchor.kind!=="line-range")continue;const start=Math.max(highlight.anchor.start,minLine),end=Math.min(highlight.anchor.end??highlight.anchor.start,maxLine);for(let lineNumber=start;lineNumber<=end;lineNumber++)perLine.has(lineNumber)||(perLine.set(lineNumber,highlight),owners.has(highlight)||owners.set(highlight,lineNumber))}return{perLine,owners}}activateHighlight(h){this.activeHighlightId=h.id,this.emit("lr-highlight-activate",{highlightId:h.id})}async scrollToAnchor(target){let start;if(typeof target=="string"){const highlight=this.normalizedHighlights.find(h=>h.id===target);highlight?.anchor.kind==="line-range"&&(start=highlight.anchor.start)}else target.kind==="line-range"&&(start=target.start);return start===void 0||!this.buffer.
|
|
20
|
+
`)}scrollToBottom(){this.follow=!0;const last=this.buffer[this.buffer.length-1];this.scrollTargetLineNumber=last?last.number:null}recomputeSearchMatches(){this.searchMatches=[],this.searchMatchCountExact=!0,this.searchQuery&&this.scanSearchMatches(0)}refreshSearchMatchesFrom(startNumber){const first=this.buffer[0]?.number;if(!this.searchMatchCountExact||first===void 0){this.recomputeSearchMatches();return}this.searchMatches=this.searchMatches.filter(match=>match.lineNumber>=first&&match.lineNumber<startNumber),this.scanSearchMatches(Math.max(0,startNumber-first))}scanSearchMatches(fromIndex){const needle=this.searchQuery.toLocaleLowerCase(this.effectiveLocale);for(let index=fromIndex;index<this.buffer.length;index+=1){const line=this.buffer[index],haystack=plainTextOfLine(line).toLocaleLowerCase(this.effectiveLocale);let from=0;for(;;){const idx=haystack.indexOf(needle,from);if(idx<0)break;if(this.searchMatches.push({lineNumber:line.number}),this.searchMatches.length>=MAX_SEARCH_MATCHES){this.searchMatchCountExact=!1;break}from=idx+needle.length}if(this.searchMatches.length>=MAX_SEARCH_MATCHES)break}this.searchActiveIndex>=this.searchMatches.length&&(this.searchActiveIndex=this.searchMatches.length>0?0:-1)}emitSearchChange(){this.emit("lr-search-change",this.searchState())}searchState(){return viewerSearchDetail(this.searchQuery,this.searchMatches.length,this.searchMatchCountExact,this.searchActiveIndex)}emitSearchChangeIfChanged(previous){sameViewerSearchDetail(previous,this.searchState())||this.emitSearchChange()}jumpToActiveMatch(){const match=this.searchMatches[this.searchActiveIndex];match&&(this.follow&&(this.follow=!1),this.scrollTargetLineNumber=match.lineNumber)}async search(query){const previousSearch=this.searchState();return this.searchQuery=query,this.recomputeSearchMatches(),this.searchActiveIndex=this.searchMatches.length>0?0:-1,this.emitSearchChangeIfChanged(previousSearch),this.searchActiveIndex>=0&&this.jumpToActiveMatch(),this.requestUpdate(),await this.updateComplete,this.searchMatches.length}async searchNext(){if(this.searchMatches.length===0)return!1;const previousSearch=this.searchState();return this.searchActiveIndex=advanceViewerSearchIndex(this.searchActiveIndex,this.searchMatches.length,1),this.emitSearchChangeIfChanged(previousSearch),this.jumpToActiveMatch(),!0}async searchPrevious(){if(this.searchMatches.length===0)return!1;const previousSearch=this.searchState();return this.searchActiveIndex=advanceViewerSearchIndex(this.searchActiveIndex,this.searchMatches.length,-1),this.emitSearchChangeIfChanged(previousSearch),this.jumpToActiveMatch(),!0}clearSearch(){const previousSearch=this.searchState();this.searchQuery="",this.searchMatches=[],this.searchMatchCountExact=!0,this.searchActiveIndex=-1,this.emitSearchChangeIfChanged(previousSearch),this.requestUpdate()}resolvedHighlightLines(){const perLine=new Map,owners=new Map,highlights=this.normalizedHighlights;if(this.lines.length===0||highlights.length===0)return{perLine,owners};const minLine=this.lines[0].number,maxLine=this.lines[this.lines.length-1].number;for(const highlight of highlights){if(highlight.anchor.kind!=="line-range")continue;const start=Math.max(highlight.anchor.start,minLine),end=Math.min(highlight.anchor.end??highlight.anchor.start,maxLine);for(let lineNumber=start;lineNumber<=end;lineNumber++)perLine.has(lineNumber)||(perLine.set(lineNumber,highlight),owners.has(highlight)||owners.set(highlight,lineNumber))}return{perLine,owners}}activateHighlight(h){this.activeHighlightId=h.id,this.emit("lr-highlight-activate",{highlightId:h.id})}async scrollToAnchor(target){let start;if(typeof target=="string"){const highlight=this.normalizedHighlights.find(h=>h.id===target);highlight?.anchor.kind==="line-range"&&(start=highlight.anchor.start)}else target.kind==="line-range"&&(start=target.start);return start===void 0||!(start>=(this.buffer[0]?.number??1/0)&&start<=(this.buffer.at(-1)?.number??-1/0))?!1:(this.follow&&(this.follow=!1),this.scrollTargetLineNumber=start,await this.updateComplete,!0)}async copyOutput(){const text=this.getPlainText(),ownerWindow=this.isConnected?this.ownerDocument.defaultView:null,generation=++this.copyGeneration;this.clearCopyTimeout(),this.copyStatus="rest";const outcome=await writeClipboardText(ownerWindow,text);if(!(!ownerWindow||!this.isCurrentCopy(generation,ownerWindow))){if(!outcome.ok){this.showCopyStatus("error",generation,ownerWindow),this.emit("lr-error"),this.emit("lr-copy-error",outcome);return}this.showCopyStatus("success",generation,ownerWindow),this.emit("lr-copy",outcome)}}isCurrentCopy(generation,ownerWindow){return this.isConnected&&generation===this.copyGeneration&&this.ownerDocument.defaultView===ownerWindow}showCopyStatus(status,generation,ownerWindow){this.copyStatus=status,this.clearCopyTimeout(),this.copyTimeoutWindow=ownerWindow,this.copyTimeoutGeneration=generation,this.copyTimeoutId=ownerWindow.setTimeout(()=>{this.copyTimeoutWindow!==ownerWindow||this.copyTimeoutGeneration!==generation||generation!==this.copyGeneration||!this.isConnected||this.ownerDocument.defaultView!==ownerWindow||(this.copyTimeoutId=void 0,this.copyTimeoutWindow=void 0,this.copyTimeoutGeneration=void 0,this.copyStatus="rest")},1500)}resetCopyFeedback(){this.copyGeneration+=1,this.clearCopyTimeout(),this.copyStatus="rest"}clearCopyTimeout(){this.copyTimeoutId!==void 0&&this.copyTimeoutWindow?.clearTimeout(this.copyTimeoutId),this.copyTimeoutId=void 0,this.copyTimeoutWindow=void 0,this.copyTimeoutGeneration=void 0}cancelPendingAnnouncement(){this.pendingAnnounceText="",this.announcer.cancel(),this.announceRegionEl&&(this.announceRegionEl.textContent="")}lineStateStyle(highlight,interactive,isMatchLine,isActiveMatchLine){return{cursor:interactive?"pointer":"",outline:isMatchLine?`var(--lr-size-2px) solid ${isActiveMatchLine?"var(--lr-terminal-search-active-outline-color, var(--lr-color-brand))":"var(--lr-terminal-search-outline-color, var(--lr-color-warning))"}`:"",background:highlight?.tone?TONE_BACKGROUND_VAR[highlight.tone]:""}}segmentStyle(s){const fg=sanitizeCssColor(s.fg)??"var(--lr-color-text)",bg=sanitizeCssColor(s.bg);return{"font-weight":s.bold?"bold":"normal",opacity:s.dim?"0.7":"1","font-style":s.italic?"italic":"normal","text-decoration":s.underline?"underline":"none",color:s.inverse?bg??"var(--lr-terminal-surface-color, var(--lr-color-surface-raised))":fg,"background-color":s.inverse?fg:bg??"transparent"}}matchedLineNumbers(){return(this.matchSetMemo?.source!==this.searchMatches||this.matchSetMemo.size!==this.searchMatches.length)&&(this.matchSetMemo={source:this.searchMatches,size:this.searchMatches.length,value:new Set(this.searchMatches.map(match=>match.lineNumber))}),this.matchSetMemo.value}lineSource(){const lines=this.lines;return this.sourceMemo?.lines!==lines&&(this.sourceMemo={lines,source:{count:lines.length,itemAt:index=>lines[index],keyAt:index=>lines[index].number,indexOfKey:key=>typeof key=="number"?key-(lines[0]?.number??1):-1}}),this.sourceMemo.source}requestUpdate(...args){args[0]===void 0&&(this.explicitRowRefresh=!0),super.requestUpdate(...args)}updated(changed){super.updated(changed);const explicitRefresh=this.explicitRowRefresh;this.explicitRowRefresh=!1,(explicitRefresh||["highlights","activeHighlightId","locale","strings","scrollTargetLineNumber"].some(key=>changed.has(key)))&&this.renderRoot.querySelector(tag("virtual-list"))?.requestUpdate()}render(){const hasToolbar=!this.withoutCopyButton||this.downloadable,ariaLabel=this.accessibleLabel||this.localize("terminalLabel"),{perLine:highlightByLine,owners:highlightOwnerLines}=this.resolvedHighlightLines(),matchedLineNumbers=this.matchedLineNumbers(),activeMatchLineNumber=this.searchMatches[this.searchActiveIndex]?.lineNumber??null;return this.rowRenderState={highlightByLine,highlightOwnerLines,matchedLineNumbers,activeMatchLineNumber},html`
|
|
21
21
|
<div part="base">
|
|
22
22
|
<div part="announcer" class="sr-only" aria-hidden="true"></div>
|
|
23
23
|
${hasToolbar?html`
|
|
@@ -40,8 +40,8 @@ import{__decorate}from"tslib";import{eventCollectionSupport}from"../../../intern
|
|
|
40
40
|
>
|
|
41
41
|
<lr-virtual-list
|
|
42
42
|
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"
|
|
43
|
-
.
|
|
44
|
-
.renderItem=${
|
|
43
|
+
.source=${this.lineSource()}
|
|
44
|
+
.renderItem=${this.renderTerminalLine}
|
|
45
45
|
.keyFunction=${this.terminalLineKey}
|
|
46
46
|
.activeItemId=${this.scrollTargetLineNumber??""}
|
|
47
47
|
row-height=${this.withoutWrap?"24":"auto"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';export{testResultDetailSlotName}from'./test-results-slots.js';export type TestStatus='passed'|'failed'|'skipped'|'running';export type TestRunState='idle'|'running'|'complete';export interface TestCaseResult{id:string;name:string;
|
|
1
|
+
import type{LyraPageSource}from'../../../data-sources.js';import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';export{testResultDetailSlotName}from'./test-results-slots.js';export type TestStatus='passed'|'failed'|'skipped'|'running';export type TestRunState='idle'|'running'|'complete';export interface TestCaseResult{id:string;name:string;
|
|
2
2
|
/** Foreign runtime values normalize once: `error`/`timedOut`/`broken` to `failed`, any other to `skipped`. */
|
|
3
|
-
status:TestStatus;durationMs?:number;message?:string;}export interface TestSuiteResult{id:string;name:string;tests:readonly TestCaseResult[];}export interface LyraTestResultsEventMap{'lr-test-select':CustomEvent<{suiteId:string;testId:string;}>;'lr-filter-change':CustomEvent<LyraEventDetailSnapshot<{statuses:TestStatus[];}>>;'lr-toggle-request':CustomEvent<{suiteId:string;testId:string;expanded:boolean;}>;'lr-toggle':CustomEvent<{suiteId:string;testId:string;expanded:boolean;}>;}
|
|
3
|
+
status:TestStatus;durationMs?:number;message?:string;}export interface TestSuiteResult{id:string;name:string;tests:readonly TestCaseResult[];}export interface TestResultsSourceQuery{readonly statuses:readonly TestStatus[];}export interface TestResultsSourceRow{readonly suiteId:string;readonly suiteName:string;readonly test:TestCaseResult;}export interface TestResultsSourceSummary{readonly total:number;readonly passed:number;readonly failed:number;readonly skipped:number;readonly running:number;}export type TestResultsSource=LyraPageSource<TestResultsSourceRow,TestResultsSourceQuery,TestResultsSourceSummary>;export interface LyraTestResultsEventMap{'lr-test-select':CustomEvent<{suiteId:string;testId:string;}>;'lr-filter-change':CustomEvent<LyraEventDetailSnapshot<{statuses:TestStatus[];}>>;'lr-toggle-request':CustomEvent<{suiteId:string;testId:string;expanded:boolean;}>;'lr-toggle':CustomEvent<{suiteId:string;testId:string;expanded:boolean;}>;}
|
|
4
4
|
/**
|
|
5
5
|
* `<lr-test-results>` — a pass/fail suite summary with per-status counts, status filter
|
|
6
6
|
* toggles, and per-test rows whose failures auto-expand by default and can host rich slotted
|
|
@@ -63,6 +63,10 @@ status:TestStatus;durationMs?:number;message?:string;}export interface TestSuite
|
|
|
63
63
|
* @cssprop [--lr-test-results-running-color=var(--lr-color-brand)] - Running-state foreground.
|
|
64
64
|
* @cssprop [--lr-test-results-spinner-size=var(--lr-size-1em)] - Diameter of the composed spinner
|
|
65
65
|
* in a running test row.
|
|
66
|
+
* @csspart source-status - Provider loading or failure message.
|
|
67
|
+
* @csspart source-retry - Retry the current failed provider request.
|
|
68
|
+
* @csspart source-pagination - Provider page controls.
|
|
69
|
+
* @csspart input-error - Oversized legacy result input message.
|
|
66
70
|
* @status stable
|
|
67
71
|
* @since 4.0.0
|
|
68
72
|
*/
|
|
@@ -77,7 +81,15 @@ protected static readonly identityCollectionProperties:readonly string[];static
|
|
|
77
81
|
/** The suites to render, grouped in order. Controlled and never mutated by this component --
|
|
78
82
|
* pass a new array (e.g. as a run streams in) to update it. Duplicate suite ids and per-suite
|
|
79
83
|
* test ids use deterministic first-wins identity. */
|
|
80
|
-
suites:readonly TestSuiteResult[];
|
|
84
|
+
suites:readonly TestSuiteResult[];private _dataSource?;private sourceEpoch;private sourceSyncing;private sourceInputs?;private sourceSize?;private sourceFilter?;private sourceExpanded;private sourceVersion;private readonly sourcePages;
|
|
85
|
+
/** Complete result provider; undefined restores suites. Same-source assignment refreshes. */
|
|
86
|
+
get dataSource():TestResultsSource|undefined;set dataSource(value:TestResultsSource|undefined);
|
|
87
|
+
/** Zero-based provider page. */
|
|
88
|
+
sourcePage:number;
|
|
89
|
+
/** Provider page size, normalized to 1..500; changes reset the page. */
|
|
90
|
+
sourcePageSize:number;
|
|
91
|
+
/** Exact current filtered count, or null while unavailable. */
|
|
92
|
+
get sourceTotal():number|null;private get sourceMode();private normalizeSourceRecord;private syncSource;requestUpdate(...args:Parameters<LyraElement['requestUpdate']>):void;
|
|
81
93
|
/** When non-empty, only tests whose status is in this set are shown. Empty means "show all". */
|
|
82
94
|
statusFilter:readonly TestStatus[];
|
|
83
95
|
/** Stable source-run identity used to correlate lifecycle announcements. */
|
|
@@ -87,4 +99,4 @@ runState:TestRunState;
|
|
|
87
99
|
/** Keeps a failed test's detail collapsed until the user expands it, instead of auto-expanding
|
|
88
100
|
* it. A row the user has manually toggled always keeps its own explicit state regardless of this
|
|
89
101
|
* flag. */
|
|
90
|
-
withoutAutoExpandFailures:boolean;private manualExpanded;private liveRegion?;private normalizedSuitesCache;private projectedSuitesCache;private completeStatusCounts;private
|
|
102
|
+
withoutAutoExpandFailures:boolean;private manualExpanded;private liveRegion?;private legacyGeneration;private legacyNeedsNormalization;private legacyIntentScheduled;private legacyPending;private legacyError;private legacyDone;private settleLegacy?;private legacyTimer?;private legacyRows;private pendingCompletionRun;private normalizedSuitesCache;private projectedSuitesCache;private completeStatusCounts;private detailSlotNames;private detailSlotsDirty;private projectionTruncated;private readonly announcements;private limitAnnouncementInitialized;private statusAnnouncementInitialized;private previousStatusAnnouncement;private previouslyTruncated;private readonly idPrefix;connectedCallback():void;adoptedCallback():void;protected willUpdate(changed:PropertyValues):void;private cancelLegacy;private rebuildNormalizedSuites;protected getUpdateComplete():Promise<boolean>;disconnectedCallback():void;private rebuildProjection;protected updated(changed:PropertyValues):void;private computeStatusCounts;private testKey;private scopedDetailSlot;private rebuildDetailSlotNames;private hasDetail;private isExpanded;private toggleFilter;private toggleExpanded;private onDetailSlotChange;private renderSummary;private renderTest;private renderSuite;private renderSource;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-test-results':LyraTestResults;}}
|