@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,4 +1,4 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import{html,nothing}from"lit";import{property,query,state}from"lit/decorators.js";import{live}from"lit/directives/live.js";import{deepActiveElementIn}from"../../../internal/active-element.js";import{setCustomState}from"../../../internal/custom-states.js";import{attachInternalsSafely}from"../../../internal/element-internals.js";import{chevronIcon}from"../../../internal/icons.js";import{literalSetConverter,trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LyraElement}from"../../../internal/lyra-element.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import{finiteCount,finiteInteger}from"../../../internal/numbers.js";import{styles}from"./pagination.styles.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{safeLinkHref}from"../../../internal/safe-url.js";import{sizes}from"../../../internal/sizes.styles.js";import{LYRA_DEFAULT_paginationApplied,LYRA_DEFAULT_paginationAppliedUnknownTotal,LYRA_DEFAULT_paginationEmptySummary,LYRA_DEFAULT_paginationFirstPage,LYRA_DEFAULT_paginationJumpToPage,LYRA_DEFAULT_paginationLastPage,LYRA_DEFAULT_paginationPage}from"../../../internal/default-strings/data.generated.js";import{LYRA_DEFAULT_items,LYRA_DEFAULT_next,LYRA_DEFAULT_paginationLabel,LYRA_DEFAULT_paginationSummary,LYRA_DEFAULT_previous}from"../../../internal/default-strings/shared.generated.js";const PAGINATION_FORMAT=literalSetConverter(["standard","compact"],"standard"),MAX_PAGE_SLOTS=101,MAX_WINDOW_COUNT=25;function pageSequence(from,to){return to<from?[]:Array.from({length:to-from+1},(_,offset)=>from+offset)}function paginationItems(current,totalPages,siblingCount,boundaryCount){if(totalPages<=0)return[];const asPage=page=>({type:"page",page}),budget=Math.min(boundaryCount*2+siblingCount*2+3,MAX_PAGE_SLOTS);if(totalPages<=budget)return pageSequence(1,totalPages).map(asPage);const windowFloor=boundaryCount+1,windowCeiling=totalPages-boundaryCount;let from=current-siblingCount,to=current+siblingCount;from<windowFloor&&(to+=windowFloor-from,from=windowFloor),to>windowCeiling&&(from-=to-windowCeiling,to=windowCeiling),from=Math.max(from,windowFloor),to=Math.min(to,windowCeiling);let spare=(from>windowFloor?0:1)+(to<windowCeiling?0:1);for(;spare>0;){if(to<windowCeiling)to+=1;else if(from>windowFloor)from-=1;else break;spare-=1}return from===windowFloor+1&&(from=windowFloor),to===windowCeiling-1&&(to=windowCeiling),[...pageSequence(1,boundaryCount).map(asPage),...from>windowFloor?[{type:"gap",target:Math.max(windowFloor,from-Math.max(1,siblingCount*2+1))}]:[],...pageSequence(from,to).map(asPage),...to<windowCeiling?[{type:"gap",target:Math.min(windowCeiling,to+Math.max(1,siblingCount*2+1))}]:[],...pageSequence(totalPages-boundaryCount+1,totalPages).map(asPage)]}class LyraPagination extends LyraElement{constructor(){super(...arguments),this.page=1,this.pageSize=10,this.total=0,this.hasNext=!0,this.disabled=!1,this.loading=!1,this.withSummary=!1,this.size="m",this._format="standard",this.siblingCount=2,this.boundaryCount=1,this.withEdges=!1,this.withoutNav=!1,this.hideSinglePage=!1,this.hrefTemplate="",this.appearance="outlined",this.itemLabel="",this.accessibleLabel=null,this.draftPage="",this.invalidDraft=!1,this.liveText="",this.internals=attachInternalsSafely(this),this.initialized=!1,this.pendingFocusOrigin=null,this.onPageInput=event=>{const input=event.currentTarget;this.draftPage=input.value,this.invalidDraft=input.value!==""&&this.validRequestedPage(input.value)==null},this.commitPage=event=>{const input=event.currentTarget,page=this.validRequestedPage(input.value);if(page==null){this.invalidDraft=!0;return}this.requestPage(page)},this.onPageKeyDown=event=>{event.key==="Enter"&&(event.preventDefault(),this.commitPage(event))},this.onControlFocus=event=>{relayNativeEvent(this,event)},this.onControlBlur=event=>{relayNativeEvent(this,event)}}static{this.defaultStrings={...super.defaultStrings,items:LYRA_DEFAULT_items,next:LYRA_DEFAULT_next,paginationApplied:LYRA_DEFAULT_paginationApplied,paginationAppliedUnknownTotal:LYRA_DEFAULT_paginationAppliedUnknownTotal,paginationEmptySummary:LYRA_DEFAULT_paginationEmptySummary,paginationFirstPage:LYRA_DEFAULT_paginationFirstPage,paginationJumpToPage:LYRA_DEFAULT_paginationJumpToPage,paginationLabel:LYRA_DEFAULT_paginationLabel,paginationLastPage:LYRA_DEFAULT_paginationLastPage,paginationPage:LYRA_DEFAULT_paginationPage,paginationSummary:LYRA_DEFAULT_paginationSummary,previous:LYRA_DEFAULT_previous}}static{this.styles=[LyraElement.styles,sizes,styles]}get format(){return this._format}set format(value){const normalized=PAGINATION_FORMAT.normalizeReflected(this,"format",value),previous=this._format;previous!==normalized&&(this._format=normalized,this.requestUpdate("format",previous))}clearPendingFocus(){this.pendingFocusPage=void 0,this.pendingFocusOrigin=null}focusTargetIsInside(target){if(typeof target!="object"||!("nodeType"in target))return!1;const node=target;return this.contains(node)||this.renderRoot.contains(node)}connectedCallback(){super.connectedCallback(),this.sink??=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this})}disconnectedCallback(){this.clearPendingFocus(),this.sink?.release(),this.sink=void 0,super.disconnectedCallback()}get primaryControl(){return this.format==="compact"||this.indeterminate?this.pageInput:this.renderRoot.querySelector('[part~="page-current"]')??void 0}focus(options){this.primaryControl?.focus(options)}blur(){this.primaryControl?.blur()}click(){this.controlsDisabled||this.primaryControl?.click()}get normalizedTotalItems(){return finiteCount(this.total)}get normalizedPageSize(){return finiteCount(this.pageSize)}get calculatedTotalPages(){return this.normalizedTotalItems===0||this.normalizedPageSize===0?0:Math.ceil(this.normalizedTotalItems/this.normalizedPageSize)}get totalPages(){return this.calculatedTotalPages}get indeterminate(){return finiteInteger(this.total,0)===-1}get hasPages(){return this.indeterminate||this.calculatedTotalPages>0}get maxRequestablePage(){return this.indeterminate?Number.MAX_SAFE_INTEGER:this.calculatedTotalPages}get currentPage(){return this.indeterminate?finiteInteger(this.page,1,1,Number.MAX_SAFE_INTEGER):this.calculatedTotalPages===0?0:finiteInteger(this.page,1,1,this.calculatedTotalPages)}get controlsDisabled(){return this.disabled||this.loading||!this.hasPages}get normalizedSiblingCount(){return finiteCount(this.siblingCount,2,MAX_WINDOW_COUNT)}get normalizedBoundaryCount(){return finiteCount(this.boundaryCount,1,MAX_WINDOW_COUNT)}pageHref(page){const template=this.hrefTemplate;return typeof template=="function"?safeLinkHref(template(page)):typeof template!="string"||template===""?null:safeLinkHref(template.split("{page}").join(String(page)))}get hasHrefTemplate(){const template=this.hrefTemplate;return typeof template=="function"||typeof template=="string"&&template!==""}pageLink(page,inactive){if(!this.hasHrefTemplate)return{href:null,renderAnchor:!1};if(inactive||page<1||page>this.maxRequestablePage)return{href:null,renderAnchor:!0};const href=this.pageHref(page);return{href,renderAnchor:href!==null}}formatNumber(value){return getNumberFormat(this.effectiveLocale).format(value)}summaryText(){const total=this.normalizedTotalItems,itemLabel=this.itemLabel||this.localize("items",void 0,{count:total});if(this.calculatedTotalPages===0)return this.localize("paginationEmptySummary",void 0,{total:this.formatNumber(0),itemLabel});const start=(this.currentPage-1)*this.normalizedPageSize+1,end=Math.min(total,this.currentPage*this.normalizedPageSize);return this.localize("paginationSummary",void 0,{start:this.formatNumber(start),end:this.formatNumber(end),total:this.formatNumber(total),itemLabel})}willUpdate(changed){super.willUpdate(changed),setCustomState(this.internals,"disabled",this.disabled),(changed.has("page")||changed.has("pageSize")||changed.has("total"))&&(this.draftPage=this.hasPages?String(this.currentPage):"",this.invalidDraft=!1),this.initialized&&changed.has("page")&&this.indeterminate?(this.liveText=this.localize("paginationAppliedUnknownTotal",void 0,{page:this.formatNumber(this.currentPage)}),this.sink?.announce(this.liveText)):this.initialized&&changed.has("page")&&this.calculatedTotalPages>0&&(this.liveText=this.localize("paginationApplied",void 0,{page:this.formatNumber(this.currentPage),totalPages:this.formatNumber(this.calculatedTotalPages)}),this.sink?.announce(this.liveText)),this.initialized=!0}updated(changed){if(super.updated(changed),!changed.has("page")||this.pendingFocusPage===void 0)return;const requestedPage=this.pendingFocusPage,active=deepActiveElementIn(this.ownerDocument),focusMovedOutside=active!==this.pendingFocusOrigin&&active!==null&&active!==this.ownerDocument.body&&!this.focusTargetIsInside(active);if(this.clearPendingFocus(),this.currentPage!==requestedPage||focusMovedOutside)return;(this.format==="compact"||this.indeterminate?this.pageInput:this.renderRoot.querySelector('[part~="page-current"]'))?.focus()}validRequestedPage(value){if(value.trim()==="")return null;const page=Number(value);return!Number.isInteger(page)||page<1||page>this.maxRequestablePage?null:page}requestPage(page){if(!(this.controlsDisabled||page<1||page>this.maxRequestablePage)&&!(this.indeterminate&&page>this.currentPage&&!this.hasNext)){if(page!==this.currentPage){const focusOrigin=deepActiveElementIn(this.ownerDocument),detail=()=>Object.freeze({page,pageSize:this.normalizedPageSize});if(this.emit("lr-before-page-change",detail(),{cancelable:!0}).defaultPrevented){this.draftPage=this.hasPages?String(this.currentPage):"",this.invalidDraft=!1;return}this.pendingFocusPage=page,this.pendingFocusOrigin=focusOrigin,this.emit("lr-page-change",detail()),this.draftPage=this.hasPages?String(this.currentPage):"",this.invalidDraft=!1}this.emit("lr-activate",{value:page})}}renderNavButton(direction){const isPrevious=direction==="previous",current=this.currentPage,label=isPrevious?this.previousLabel??this.localize("previous"):this.nextLabel??this.localize("next"),spent=isPrevious?current<=1:this.indeterminate?!this.hasNext:current>=this.calculatedTotalPages,target=isPrevious?current-1:current+1,inactive=this.controlsDisabled||spent,{href,renderAnchor}=this.pageLink(target,inactive),part=isPrevious?"button previous-button":"button next-button",icon=html`<span part=${isPrevious?"previous-icon":"next-icon"} aria-hidden="true"
|
|
1
|
+
import{__decorate}from"tslib";import{html,nothing}from"lit";import{property,query,state}from"lit/decorators.js";import{live}from"lit/directives/live.js";import{deepActiveElementIn}from"../../../internal/active-element.js";import{setCustomState}from"../../../internal/custom-states.js";import{attachInternalsSafely}from"../../../internal/element-internals.js";import{chevronIcon}from"../../../internal/icons.js";import{literalSetConverter,trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LyraElement}from"../../../internal/lyra-element.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import{finiteCount,finiteInteger}from"../../../internal/numbers.js";import{styles}from"./pagination.styles.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{safeLinkHref}from"../../../internal/safe-url.js";import{sizes}from"../../../internal/sizes.styles.js";import{LYRA_DEFAULT_paginationAppliedUnknownTotal,LYRA_DEFAULT_paginationEmptySummary,LYRA_DEFAULT_paginationJumpToPage,LYRA_DEFAULT_paginationPage}from"../../../internal/default-strings/data.generated.js";import{LYRA_DEFAULT_items,LYRA_DEFAULT_next,LYRA_DEFAULT_paginationApplied,LYRA_DEFAULT_paginationFirstPage,LYRA_DEFAULT_paginationLabel,LYRA_DEFAULT_paginationLastPage,LYRA_DEFAULT_paginationSummary,LYRA_DEFAULT_previous}from"../../../internal/default-strings/shared.generated.js";const PAGINATION_FORMAT=literalSetConverter(["standard","compact"],"standard"),MAX_PAGE_SLOTS=101,MAX_WINDOW_COUNT=25;function pageSequence(from,to){return to<from?[]:Array.from({length:to-from+1},(_,offset)=>from+offset)}function paginationItems(current,totalPages,siblingCount,boundaryCount){if(totalPages<=0)return[];const asPage=page=>({type:"page",page}),budget=Math.min(boundaryCount*2+siblingCount*2+3,MAX_PAGE_SLOTS);if(totalPages<=budget)return pageSequence(1,totalPages).map(asPage);const windowFloor=boundaryCount+1,windowCeiling=totalPages-boundaryCount;let from=current-siblingCount,to=current+siblingCount;from<windowFloor&&(to+=windowFloor-from,from=windowFloor),to>windowCeiling&&(from-=to-windowCeiling,to=windowCeiling),from=Math.max(from,windowFloor),to=Math.min(to,windowCeiling);let spare=(from>windowFloor?0:1)+(to<windowCeiling?0:1);for(;spare>0;){if(to<windowCeiling)to+=1;else if(from>windowFloor)from-=1;else break;spare-=1}return from===windowFloor+1&&(from=windowFloor),to===windowCeiling-1&&(to=windowCeiling),[...pageSequence(1,boundaryCount).map(asPage),...from>windowFloor?[{type:"gap",target:Math.max(windowFloor,from-Math.max(1,siblingCount*2+1))}]:[],...pageSequence(from,to).map(asPage),...to<windowCeiling?[{type:"gap",target:Math.min(windowCeiling,to+Math.max(1,siblingCount*2+1))}]:[],...pageSequence(totalPages-boundaryCount+1,totalPages).map(asPage)]}class LyraPagination extends LyraElement{constructor(){super(...arguments),this.page=1,this.pageSize=10,this.total=0,this.hasNext=!0,this.disabled=!1,this.loading=!1,this.withSummary=!1,this.size="m",this._format="standard",this.siblingCount=2,this.boundaryCount=1,this.withEdges=!1,this.withoutNav=!1,this.hideSinglePage=!1,this.hrefTemplate="",this.appearance="outlined",this.itemLabel="",this.accessibleLabel=null,this.draftPage="",this.invalidDraft=!1,this.liveText="",this.internals=attachInternalsSafely(this),this.initialized=!1,this.pendingFocusOrigin=null,this.onPageInput=event=>{const input=event.currentTarget;this.draftPage=input.value,this.invalidDraft=input.value!==""&&this.validRequestedPage(input.value)==null},this.commitPage=event=>{const input=event.currentTarget,page=this.validRequestedPage(input.value);if(page==null){this.invalidDraft=!0;return}this.requestPage(page)},this.onPageKeyDown=event=>{event.key==="Enter"&&(event.preventDefault(),this.commitPage(event))},this.onControlFocus=event=>{relayNativeEvent(this,event)},this.onControlBlur=event=>{relayNativeEvent(this,event)}}static{this.defaultStrings={...super.defaultStrings,items:LYRA_DEFAULT_items,next:LYRA_DEFAULT_next,paginationApplied:LYRA_DEFAULT_paginationApplied,paginationAppliedUnknownTotal:LYRA_DEFAULT_paginationAppliedUnknownTotal,paginationEmptySummary:LYRA_DEFAULT_paginationEmptySummary,paginationFirstPage:LYRA_DEFAULT_paginationFirstPage,paginationJumpToPage:LYRA_DEFAULT_paginationJumpToPage,paginationLabel:LYRA_DEFAULT_paginationLabel,paginationLastPage:LYRA_DEFAULT_paginationLastPage,paginationPage:LYRA_DEFAULT_paginationPage,paginationSummary:LYRA_DEFAULT_paginationSummary,previous:LYRA_DEFAULT_previous}}static{this.styles=[LyraElement.styles,sizes,styles]}get format(){return this._format}set format(value){const normalized=PAGINATION_FORMAT.normalizeReflected(this,"format",value),previous=this._format;previous!==normalized&&(this._format=normalized,this.requestUpdate("format",previous))}clearPendingFocus(){this.pendingFocusPage=void 0,this.pendingFocusOrigin=null}focusTargetIsInside(target){if(typeof target!="object"||!("nodeType"in target))return!1;const node=target;return this.contains(node)||this.renderRoot.contains(node)}connectedCallback(){super.connectedCallback(),this.sink??=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this})}disconnectedCallback(){this.clearPendingFocus(),this.sink?.release(),this.sink=void 0,super.disconnectedCallback()}get primaryControl(){return this.format==="compact"||this.indeterminate?this.pageInput:this.renderRoot.querySelector('[part~="page-current"]')??void 0}focus(options){this.primaryControl?.focus(options)}blur(){this.primaryControl?.blur()}click(){this.controlsDisabled||this.primaryControl?.click()}get normalizedTotalItems(){return finiteCount(this.total)}get normalizedPageSize(){return finiteCount(this.pageSize)}get calculatedTotalPages(){return this.normalizedTotalItems===0||this.normalizedPageSize===0?0:Math.ceil(this.normalizedTotalItems/this.normalizedPageSize)}get totalPages(){return this.calculatedTotalPages}get indeterminate(){return finiteInteger(this.total,0)===-1}get hasPages(){return this.indeterminate||this.calculatedTotalPages>0}get maxRequestablePage(){return this.indeterminate?Number.MAX_SAFE_INTEGER:this.calculatedTotalPages}get currentPage(){return this.indeterminate?finiteInteger(this.page,1,1,Number.MAX_SAFE_INTEGER):this.calculatedTotalPages===0?0:finiteInteger(this.page,1,1,this.calculatedTotalPages)}get controlsDisabled(){return this.disabled||this.loading||!this.hasPages}get normalizedSiblingCount(){return finiteCount(this.siblingCount,2,MAX_WINDOW_COUNT)}get normalizedBoundaryCount(){return finiteCount(this.boundaryCount,1,MAX_WINDOW_COUNT)}pageHref(page){const template=this.hrefTemplate;return typeof template=="function"?safeLinkHref(template(page)):typeof template!="string"||template===""?null:safeLinkHref(template.split("{page}").join(String(page)))}get hasHrefTemplate(){const template=this.hrefTemplate;return typeof template=="function"||typeof template=="string"&&template!==""}pageLink(page,inactive){if(!this.hasHrefTemplate)return{href:null,renderAnchor:!1};if(inactive||page<1||page>this.maxRequestablePage)return{href:null,renderAnchor:!0};const href=this.pageHref(page);return{href,renderAnchor:href!==null}}formatNumber(value){return getNumberFormat(this.effectiveLocale).format(value)}summaryText(){const total=this.normalizedTotalItems,itemLabel=this.itemLabel||this.localize("items",void 0,{count:total});if(this.calculatedTotalPages===0)return this.localize("paginationEmptySummary",void 0,{total:this.formatNumber(0),itemLabel});const start=(this.currentPage-1)*this.normalizedPageSize+1,end=Math.min(total,this.currentPage*this.normalizedPageSize);return this.localize("paginationSummary",void 0,{start:this.formatNumber(start),end:this.formatNumber(end),total:this.formatNumber(total),itemLabel})}willUpdate(changed){super.willUpdate(changed),setCustomState(this.internals,"disabled",this.disabled),(changed.has("page")||changed.has("pageSize")||changed.has("total"))&&(this.draftPage=this.hasPages?String(this.currentPage):"",this.invalidDraft=!1),this.initialized&&changed.has("page")&&this.indeterminate?(this.liveText=this.localize("paginationAppliedUnknownTotal",void 0,{page:this.formatNumber(this.currentPage)}),this.sink?.announce(this.liveText)):this.initialized&&changed.has("page")&&this.calculatedTotalPages>0&&(this.liveText=this.localize("paginationApplied",void 0,{page:this.formatNumber(this.currentPage),totalPages:this.formatNumber(this.calculatedTotalPages)}),this.sink?.announce(this.liveText)),this.initialized=!0}updated(changed){if(super.updated(changed),!changed.has("page")||this.pendingFocusPage===void 0)return;const requestedPage=this.pendingFocusPage,active=deepActiveElementIn(this.ownerDocument),focusMovedOutside=active!==this.pendingFocusOrigin&&active!==null&&active!==this.ownerDocument.body&&!this.focusTargetIsInside(active);if(this.clearPendingFocus(),this.currentPage!==requestedPage||focusMovedOutside)return;(this.format==="compact"||this.indeterminate?this.pageInput:this.renderRoot.querySelector('[part~="page-current"]'))?.focus()}validRequestedPage(value){if(value.trim()==="")return null;const page=Number(value);return!Number.isInteger(page)||page<1||page>this.maxRequestablePage?null:page}requestPage(page){if(!(this.controlsDisabled||page<1||page>this.maxRequestablePage)&&!(this.indeterminate&&page>this.currentPage&&!this.hasNext)){if(page!==this.currentPage){const focusOrigin=deepActiveElementIn(this.ownerDocument),detail=()=>Object.freeze({page,pageSize:this.normalizedPageSize});if(this.emit("lr-before-page-change",detail(),{cancelable:!0}).defaultPrevented){this.draftPage=this.hasPages?String(this.currentPage):"",this.invalidDraft=!1;return}this.pendingFocusPage=page,this.pendingFocusOrigin=focusOrigin,this.emit("lr-page-change",detail()),this.draftPage=this.hasPages?String(this.currentPage):"",this.invalidDraft=!1}this.emit("lr-activate",{value:page})}}renderNavButton(direction){const isPrevious=direction==="previous",current=this.currentPage,label=isPrevious?this.previousLabel??this.localize("previous"):this.nextLabel??this.localize("next"),spent=isPrevious?current<=1:this.indeterminate?!this.hasNext:current>=this.calculatedTotalPages,target=isPrevious?current-1:current+1,inactive=this.controlsDisabled||spent,{href,renderAnchor}=this.pageLink(target,inactive),part=isPrevious?"button previous-button":"button next-button",icon=html`<span part=${isPrevious?"previous-icon":"next-icon"} aria-hidden="true"
|
|
2
2
|
><slot name=${isPrevious?"previous-icon":"next-icon"}>${chevronIcon()}</slot></span
|
|
3
3
|
>`;return renderAnchor?html`<a
|
|
4
4
|
part=${part}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface SequenceStripItem{readonly id:string;readonly categoryId:string;
|
|
2
|
+
/** A small marker rendered at the bottom of this cell — a secondary boolean annotation
|
|
3
|
+
* independent of the primary category color (e.g. a subagent-dispatched turn). */
|
|
4
|
+
readonly marker?:boolean;
|
|
5
|
+
/** Per-item text shown in the hover/focus tooltip and exposed as the item's accessible name
|
|
6
|
+
* (falls back to the category's own `label`, or the localized unnamed-category label). */
|
|
7
|
+
readonly label?:string;
|
|
8
|
+
/**
|
|
9
|
+
* Marks this item non-actionable: `aria-disabled="true"` replaces the selected/active
|
|
10
|
+
* affordances of the cell that represents it, activating it (click, or Enter/Space while
|
|
11
|
+
* roving-focused) emits nothing, and roving keyboard navigation (arrow keys, Home/End) steps
|
|
12
|
+
* past it instead of landing on it. Above `MAX_RENDERED_CELLS`, one cell paints a whole RANGE of
|
|
13
|
+
* items and activating it always resolves to that range's first item (`cell.start`, see
|
|
14
|
+
* `activateCell()`), so a range cell's disabled state follows that same first item. Omitted or
|
|
15
|
+
* `false` renders the item exactly as before this field existed.
|
|
16
|
+
*/
|
|
17
|
+
readonly disabled?:boolean;}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{SourceRequestController,sourceCount,sourceRevision}from"../../../internal/source-request-controller.js";import{sequenceItem,sequenceSnapshot}from"./sequence-strip-source.js";class SequenceStripSourceController{constructor(host,repaint,locale){this.host=host,this.repaint=repaint,this.locale=locale,this.length=0,this.pending=!1,this.error=!1,this.exactPending=!1,this.exactUnavailable=!1,this.configuration=0,this.summaryRunning=!1,this.exactRunning=!1,this.exactVersion=0,this.requests=new SourceRequestController(host,{channels:["summary","exact"],onReset:()=>this.clear()})}clear(){this.configuration++,this.exactVersion++,this.summaryIntent=void 0,this.exactIntent?.settle(null),this.exactIntent=void 0,this.source=void 0,this.snapshot=void 0,this.exact=void 0,this.length=0,this.pending=!1,this.error=!1,this.exactPending=!1,this.exactUnavailable=!1}fail(){this.detach(),this.error=!0,this.repaint()}detach(){this.requests.setSource(void 0,void 0),this.requests.refresh()}configure(source){this.detach();const operation=this.configuration,owner=this.host.ownerDocument,current=()=>operation===this.configuration&&this.host.isConnected&&this.host.ownerDocument===owner;try{if(!source||typeof source!="object"&&typeof source!="function")throw new TypeError("Invalid sequence source");const revision=sourceRevision(source.revision);if(!current())return;const length=sourceCount(source.length);if(!current())return;for(const key of["summarize","getItem","findIndex"]){const method=source[key];if(!current())return;if(typeof method!="function")throw new TypeError("Invalid sequence source method")}if(this.requests.setSource(source,revision),!this.host.isConnected||this.host.ownerDocument!==owner||this.configuration!==operation+1)return;this.source=source,this.length=length;const lease=this.requests.begin("summary",this.locale());if(!lease?.isCurrent()||this.source!==source)return;if(!length){this.snapshot=sequenceSnapshot([],0,()=>lease.isCurrent()),this.repaint();return}this.pending=!0,this.summaryIntent={source,length,lease},this.repaint(),this.pumpSummary()}catch{current()&&(this.error=!0,this.repaint())}}pumpSummary(){if(this.summaryRunning||!this.summaryIntent)return;const intent=this.summaryIntent,current=()=>this.summaryIntent===intent&&intent.lease.isCurrent()&&this.source===intent.source;current()&&(this.summaryRunning=!0,Promise.resolve().then(async()=>{const method=intent.source.summarize;if(!current())return;const raw=await method.call(intent.source,{startIndex:0,endIndex:intent.length,maxRanges:Math.min(intent.length,200),signal:intent.lease.context.signal});if(!current())return;const snapshot=sequenceSnapshot(raw,intent.length,current);current()&&(this.snapshot=snapshot,this.pending=!1,this.error=!1,this.repaint())}).catch(()=>{current()&&(this.snapshot=void 0,this.pending=!1,this.error=!0,this.repaint())}).finally(()=>{this.summaryIntent===intent&&(this.summaryIntent=void 0),this.summaryRunning=!1,this.pumpSummary()}))}resolve(target){const operation=++this.exactVersion;if(this.exactIntent?.settle(null),this.exactIntent=void 0,this.requests.invalidate("exact"),operation!==this.exactVersion)return Promise.resolve(null);this.exact=void 0,this.exactPending=!1,this.exactUnavailable=!1;const source=this.source;if(!source||!this.snapshot||(typeof target=="number"?!Number.isSafeInteger(target)||target<0||target>=this.length:typeof target!="string"||target.length>65536||!target.trim()))return this.repaint(),Promise.resolve(null);const lease=this.requests.begin("exact",this.locale());if(!lease?.isCurrent()||this.source!==source||operation!==this.exactVersion)return Promise.resolve(null);let settle;const done=new Promise(resolve=>{settle=resolve});return this.exactIntent={target,source,length:this.length,lease,settle},this.exactPending=!0,this.repaint(),this.pumpExact(),done}pumpExact(){if(this.exactRunning||!this.exactIntent)return;const intent=this.exactIntent,current=()=>this.exactIntent===intent&&intent.lease.isCurrent()&&this.source===intent.source;current()&&(this.exactRunning=!0,Promise.resolve().then(async()=>{let index;if(typeof intent.target=="string"){const lookup=intent.source.findIndex;if(!current()||(index=await lookup.call(intent.source,intent.target,{signal:intent.lease.context.signal}),!current()))return}else index=intent.target;if(index===null)return this.unavailable(intent);if(sourceCount(index),index>=intent.length)throw new RangeError("Invalid sequence index");const read=intent.source.getItem;if(!current())return;const raw=await read.call(intent.source,index,{signal:intent.lease.context.signal});if(!current())return;const item=sequenceItem(raw,current);if(!current())return;if(!item)return this.unavailable(intent);if(typeof intent.target=="string"&&item.id!==intent.target)throw new TypeError("Sequence identity mismatch");const record=Object.freeze({index,item});this.exact=record,this.exactPending=!1,this.exactUnavailable=!1,this.repaint(),intent.settle(record)}).catch(()=>{current()&&this.unavailable(intent)}).finally(()=>{intent.settle(null),this.exactIntent===intent&&(this.exactIntent=void 0),this.exactRunning=!1,this.pumpExact()}))}unavailable(intent){this.exact=void 0,this.exactPending=!1,this.exactUnavailable=!0,this.repaint(),intent.settle(null)}}export{SequenceStripSourceController};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type{LyraSourceRevision}from'../../../data-sources.js';import type{LyraSourceRequest,LyraSourceValue}from'../../../utilities/data-preparation.js';import type{SequenceStripItem}from'./sequence-strip-item.js';
|
|
2
|
+
/** Immutable complete sequence with provider-owned indexing and aggregation. */
|
|
3
|
+
export interface LyraSequenceSource<T>{readonly revision:LyraSourceRevision;readonly length:number;getItem(index:number,request:LyraSourceRequest):LyraSourceValue<T|null>;findIndex(id:string,request:LyraSourceRequest):LyraSourceValue<number|null>;summarize(request:LyraSourceRequest&{readonly startIndex:number;readonly endIndex:number;readonly maxRanges:number;}):LyraSourceValue<readonly LyraSequenceRangeSummary[]>;}
|
|
4
|
+
/** Ascending, half-open source range. Category counts cover every position. */
|
|
5
|
+
export interface LyraSequenceRangeSummary{readonly startIndex:number;readonly endIndex:number;readonly categoryCounts:Readonly<Record<string,number>>;readonly markerCount:number;readonly enabledCount:number;}export interface SequenceSourceSnapshot{readonly ranges:readonly LyraSequenceRangeSummary[];readonly counts:ReadonlyMap<string,number>;readonly markerCount:number;readonly enabledCount:number;}export declare function sequenceSnapshot(raw:unknown,length:number,current:()=>boolean):SequenceSourceSnapshot;export declare function sequenceItem(raw:unknown,current:()=>boolean):SequenceStripItem|null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{sourceCount}from"../../../internal/source-request-controller.js";function field(value,key,current){if(value===null||typeof value!="object"&&typeof value!="function")throw new TypeError("Invalid sequence record");const descriptor=Object.getOwnPropertyDescriptor(value,key);if(!current())throw new Error("Sequence operation revoked");if(descriptor&&!Object.hasOwn(descriptor,"value"))throw new TypeError("Invalid sequence field");return descriptor?.value}function sum(left,right){return sourceCount(left+right)}function sequenceSnapshot(raw,length,current){if(!Array.isArray(raw))throw new TypeError("Invalid sequence ranges");const size=sourceCount(field(raw,"length",current));if(size>200||size>length||length>0&&size===0)throw new RangeError("Invalid sequence range count");const ranges=[],counts=new Map;let end=0,markerCount=0,enabledCount=0;for(let index=0;index<size;index++){const input=field(raw,index,current),startIndex=sourceCount(field(input,"startIndex",current)),endIndex=sourceCount(field(input,"endIndex",current));if(startIndex!==end||endIndex<=startIndex||endIndex>length)throw new RangeError("Invalid sequence partition");const markers=sourceCount(field(input,"markerCount",current)),enabled=sourceCount(field(input,"enabledCount",current)),total=endIndex-startIndex;if(markers>total||enabled>total)throw new RangeError("Invalid sequence counts");const dictionary=field(input,"categoryCounts",current);if(!dictionary||typeof dictionary!="object"||Array.isArray(dictionary))throw new TypeError("Invalid sequence categories");const keys=Reflect.ownKeys(dictionary);if(!current())throw new Error("Sequence operation revoked");if(keys.length>200)throw new RangeError("Too many sequence categories");const categoryCounts=Object.create(null);let categoryTotal=0;for(const key of keys){if(typeof key!="string"||key.length>1024||!key.trim())throw new TypeError("Invalid sequence category");const count=sourceCount(field(dictionary,key,current));if(!count)throw new RangeError("Invalid sequence category count");if(categoryTotal=sum(categoryTotal,count),categoryCounts[key]=count,counts.set(key,sum(counts.get(key)??0,count)),counts.size>200)throw new RangeError("Too many sequence categories")}if(categoryTotal!==total)throw new RangeError("Incomplete sequence category counts");ranges.push(Object.freeze({startIndex,endIndex,categoryCounts:Object.freeze(categoryCounts),markerCount:markers,enabledCount:enabled})),markerCount=sum(markerCount,markers),enabledCount=sum(enabledCount,enabled),end=endIndex}if(end!==length)throw new RangeError("Incomplete sequence partition");return Object.freeze({ranges:Object.freeze(ranges),counts,markerCount,enabledCount})}function sequenceItem(raw,current){if(raw===null)return null;const id=field(raw,"id",current),categoryId=field(raw,"categoryId",current),label=field(raw,"label",current),marker=field(raw,"marker",current),disabled=field(raw,"disabled",current);if(typeof id!="string"||typeof categoryId!="string"||label!==void 0&&typeof label!="string"||marker!==void 0&&typeof marker!="boolean"||disabled!==void 0&&typeof disabled!="boolean")throw new TypeError("Invalid sequence item");if(id.length+categoryId.length+(label?.length??0)>65536||!id.trim()||!categoryId.trim())throw new RangeError("Invalid sequence item text");return Object.freeze({id,categoryId,...label===void 0?{}:{label},...marker===void 0?{}:{marker},...disabled===void 0?{}:{disabled}})}export{sequenceItem,sequenceSnapshot};
|
|
@@ -1,20 +1,4 @@
|
|
|
1
|
-
import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';export interface
|
|
2
|
-
/** A small marker rendered at the bottom of this cell — a secondary boolean annotation
|
|
3
|
-
* independent of the primary category color (e.g. a subagent-dispatched turn). */
|
|
4
|
-
readonly marker?:boolean;
|
|
5
|
-
/** Per-item text shown in the hover/focus tooltip and exposed as the item's accessible name
|
|
6
|
-
* (falls back to the category's own `label`, or the localized unnamed-category label). */
|
|
7
|
-
readonly label?:string;
|
|
8
|
-
/**
|
|
9
|
-
* Marks this item non-actionable: `aria-disabled="true"` replaces the selected/active
|
|
10
|
-
* affordances of the cell that represents it, activating it (click, or Enter/Space while
|
|
11
|
-
* roving-focused) emits nothing, and roving keyboard navigation (arrow keys, Home/End) steps
|
|
12
|
-
* past it instead of landing on it. Above `MAX_RENDERED_CELLS`, one cell paints a whole RANGE of
|
|
13
|
-
* items and activating it always resolves to that range's first item (`cell.start`, see
|
|
14
|
-
* `activateCell()`), so a range cell's disabled state follows that same first item. Omitted or
|
|
15
|
-
* `false` renders the item exactly as before this field existed.
|
|
16
|
-
*/
|
|
17
|
-
readonly disabled?:boolean;}export interface SequenceStripCategory{readonly id:string;
|
|
1
|
+
import type{SequenceStripItem}from'./sequence-strip-item.js';export type{SequenceStripItem}from'./sequence-strip-item.js';import type{LyraSequenceSource}from'./sequence-strip-source.js';export type{LyraSequenceSource,LyraSequenceRangeSummary}from'./sequence-strip-source.js';import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';export interface SequenceStripCategory{readonly id:string;
|
|
18
2
|
/** A CSS color. Invalid values and `url()` paint servers render transparently. */
|
|
19
3
|
readonly color:string;
|
|
20
4
|
/** Human-readable name used in the auto-generated `aria-label` summary and as the hover-tooltip
|
|
@@ -55,6 +39,18 @@ export interface LyraSequenceStripActivateDetail{readonly index:number;readonly
|
|
|
55
39
|
* follows its own activated item, the range's first (see `lr-item-activate` above). Omitted or
|
|
56
40
|
* `false` renders the item exactly as before this field existed.
|
|
57
41
|
*
|
|
42
|
+
* A non-null source supplies complete indexed access instead of the bounded items snapshot.
|
|
43
|
+
* Source summaries partition the full logical sequence into at most 200 proportional ranges,
|
|
44
|
+
* with at most 200 distinct categories and 40,000 count pairs. Providers own indexing and
|
|
45
|
+
* aggregation. Source dominant-category ties use category configuration order, then lexical ID;
|
|
46
|
+
* legacy ties still use earliest occurrence. Mixed ranges report their enabled count; activation
|
|
47
|
+
* resolves the first exact item and emits nothing if it is disabled or unavailable.
|
|
48
|
+
* revealSourceItem(indexOrId) and the exact inspector address arbitrary original positions.
|
|
49
|
+
* Arrow keys, Home and End inspect exact positions; Enter activates the admitted enabled item.
|
|
50
|
+
* Inspection does not change selectedIndex. Exact item text is limited to 65,536 aggregate UTF-16
|
|
51
|
+
* units and summary category IDs to 1,024 units. Loading/errors revoke previous actions. Null or
|
|
52
|
+
* undefined restores legacy inputs; other invalid source values fail visibly.
|
|
53
|
+
*
|
|
58
54
|
* @customElement lr-sequence-strip
|
|
59
55
|
* @event lr-item-activate - Fired when a cell is clicked, or activated with Enter/Space on the
|
|
60
56
|
* roving-tabindex focus. `detail: { index, id, item }` identifies the picked item — the range's
|
|
@@ -89,10 +85,19 @@ export interface LyraSequenceStripActivateDetail{readonly index:number;readonly
|
|
|
89
85
|
* @cssprop [--lr-sequence-strip-disabled-opacity=var(--lr-opacity-disabled)] - Opacity of a cell whose activated item sets `disabled`.
|
|
90
86
|
* @cssprop [--lr-sequence-strip-selected-color=var(--lr-color-text)] - Colour of the persistent selection ring on a cell whose index is in `selectedIndex`.
|
|
91
87
|
* @cssprop [--lr-sequence-strip-selected-focus-color=var(--lr-focus-ring-color)] - Colour of that same selection ring while the cell also has keyboard focus.
|
|
88
|
+
* @csspart source-status - Complete-source loading and failure message.
|
|
89
|
+
* @csspart source-retry - Retry the current source failure.
|
|
90
|
+
* @csspart source-exact - Exact item inspection and activation control.
|
|
92
91
|
* @status stable
|
|
93
92
|
* @since 4.0.0
|
|
94
93
|
*/
|
|
95
|
-
export declare class LyraSequenceStrip extends LyraElement<LyraSequenceStripEventMap>{static styles:import("lit").CSSResultGroup[];private
|
|
94
|
+
export declare class LyraSequenceStrip extends LyraElement<LyraSequenceStripEventMap>{static styles:import("lit").CSSResultGroup[];private _source;private sourceInputs?;private sourceEpoch;private sourceMetadataFailed;private sourceSelection?;private sourceCursor?;private sourceFocusIntent;private sourceVersion;private readonly sourceController;private readonly sourceAnnouncements;private sourceStatusInitialized;private previousSourceStatus;
|
|
95
|
+
/** Complete indexed sequence. Null or undefined restores items; invalid defined sources fail visibly.
|
|
96
|
+
* Same-source assignment or a keyless requestUpdate refreshes the immutable provider revision. */
|
|
97
|
+
get source():LyraSequenceSource<SequenceStripItem> |null;set source(value:LyraSequenceSource<SequenceStripItem> |null);private get sourceMode();private invalidateSource;requestUpdate(...args:Parameters<LyraElement['requestUpdate']>):void;private syncSource;
|
|
98
|
+
/** Inspect an exact source index or stable ID and focus its control. Does not change selection
|
|
99
|
+
* or emit activation. Disabled items remain inspectable. Unavailable or revoked requests return false. */
|
|
100
|
+
revealSourceItem(target:number|string):Promise<boolean>;private inspectSourceItem;private _items;private _categories;private itemsSource?;private categoriesSource?;
|
|
96
101
|
/** Frozen snapshot of at most the first 10,000 items. Empty/blank ids are omitted and duplicate
|
|
97
102
|
* ids use the first entry. Reassign to update. */
|
|
98
103
|
get items():readonly SequenceStripItem[];set items(value:readonly SequenceStripItem[]);
|
|
@@ -124,4 +129,4 @@ withLegend:boolean;
|
|
|
124
129
|
* cell's own marker treatment — and to have the marker counted in the auto-generated summary,
|
|
125
130
|
* which is otherwise per-category only. Unset (the default) nothing changes: no extra legend row
|
|
126
131
|
* and no extra summary clause. */
|
|
127
|
-
markerLabel?:string;private hoverIndex;private keyboardIndex;private keyboardTooltip;private cellCacheSource;private cellCache;private pendingFocusTarget;private restoringOwnedFocus;private focusRestoreGeneration;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;disconnectedCallback():void;private cells;private viewKey;private view?;private cellView;private categoryMap;private categoryColor;private categoryLabel;private autoSummary;private bucketSummary;private cellLabel;private itemLabel;private onCellEnter;private onCellLeave;private onCellFocus;private onStripFocusOut;private onCellKeyDown;private renderLegend;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-sequence-strip':LyraSequenceStrip;}}
|
|
132
|
+
markerLabel?:string;private hoverIndex;private keyboardIndex;private keyboardTooltip;private cellCacheSource;private cellCache;private pendingFocusTarget;private restoringOwnedFocus;private focusRestoreGeneration;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;connectedCallback():void;adoptedCallback():void;disconnectedCallback():void;private cells;private viewKey;private view?;private cellView;private categoryMemo?;private categoryMap;private categoryColor;private categoryLabel;private autoSummary;private bucketSummary;private cellLabel;private itemLabel;private onCellEnter;private onCellLeave;private onCellFocus;private onStripFocusOut;private onCellKeyDown;private renderLegend;private sourceCategory;private sourceExactKey;private renderSource;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-sequence-strip':LyraSequenceStrip;}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{__decorate}from"tslib";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{getListFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{resolveListMove}from"../../../internal/list-navigation.js";import{sanitizeCssColor}from"../../../internal/safe-css.js";import{finiteCount,finiteInteger}from"../../../internal/numbers.js";import{shadowFocusTarget}from"../../../internal/active-element.js";import{isKeyboardFocusEvent}from"../../../internal/focus-modality.js";import{lyraLocaleCatalogVersion}from"../../../internal/localization-runtime.js";import{styles}from"./sequence-strip.styles.js";import{LYRA_DEFAULT_sequenceStripBucketLabel,LYRA_DEFAULT_sequenceStripBucketSummary,LYRA_DEFAULT_sequenceStripCategoryCount,LYRA_DEFAULT_sequenceStripEmpty,LYRA_DEFAULT_sequenceStripUnnamedCategory}from"../../../internal/default-strings/data.generated.js";const MAX_RENDERED_CELLS=200,MAX_RENDERED_CATEGORIES=200,MAX_SEQUENCE_COLLECTION_ENTRIES=1e4;function bucketStartIndex(cell,total,cellCount){return Math.ceil(cell*total/cellCount)}function buildSequenceStripCells(items){const total=finiteCount(items.length);if(total===0)return[];const cellCount=Math.min(total,MAX_RENDERED_CELLS);if(cellCount===total)return items.map((item,index)=>({start:index,end:index,categoryId:item.categoryId,marker:item.marker===!0}));const cells=[];for(let cell=0;cell<cellCount;cell++){const start=bucketStartIndex(cell,total,cellCount),end=bucketStartIndex(cell+1,total,cellCount)-1,counts=new Map;let marker=!1;for(let index=start;index<=end;index++){const item=items[index];item&&(item.marker===!0&&(marker=!0),counts.set(item.categoryId,(counts.get(item.categoryId)??0)+1))}let categoryId="",dominantCount=0;for(const[id,count]of counts)count>dominantCount&&(dominantCount=count,categoryId=id);cells.push({start,end,categoryId,marker})}return cells}class LyraSequenceStrip extends LyraElement{constructor(){super(...arguments),this._items=[],this._categories=[],this.hostAccessibleLabel=null,this.selectedIndex=-1,this.withLegend=!1,this.hoverIndex=null,this.keyboardIndex=null,this.keyboardTooltip=!1,this.cellCache=[],this.restoringOwnedFocus=!1,this.focusRestoreGeneration=0,this.viewKey=[]}static{this.defaultStrings={...super.defaultStrings,sequenceStripBucketLabel:LYRA_DEFAULT_sequenceStripBucketLabel,sequenceStripBucketSummary:LYRA_DEFAULT_sequenceStripBucketSummary,sequenceStripCategoryCount:LYRA_DEFAULT_sequenceStripCategoryCount,sequenceStripEmpty:LYRA_DEFAULT_sequenceStripEmpty,sequenceStripUnnamedCategory:LYRA_DEFAULT_sequenceStripUnnamedCategory}}static{this.styles=[LyraElement.styles,styles]}get items(){return this._items}set items(value){if(value===this.itemsSource||value===this._items)return;this.itemsSource=value;const previous=this._items,seen=new Set,next=[];if(Array.isArray(value))for(const item of value.slice(0,MAX_SEQUENCE_COLLECTION_ENTRIES))try{if(!item||typeof item.id!="string"||item.id.trim().length===0||seen.has(item.id))continue;seen.add(item.id),next.push(Object.freeze({id:item.id,categoryId:typeof item.categoryId=="string"?item.categoryId:"",...item.marker===void 0?{}:{marker:!!item.marker},...typeof item.label=="string"?{label:item.label}:{},...item.disabled===void 0?{}:{disabled:!!item.disabled}}))}catch{}this._items=Object.freeze(next),this.requestUpdate("items",previous)}get categories(){return this._categories}set categories(value){if(value===this.categoriesSource||value===this._categories)return;this.categoriesSource=value;const previous=this._categories,seen=new Set,next=[];if(Array.isArray(value))for(const category of value.slice(0,MAX_SEQUENCE_COLLECTION_ENTRIES))try{if(!category||typeof category.id!="string"||category.id.trim().length===0||seen.has(category.id))continue;seen.add(category.id),next.push(Object.freeze({id:category.id,color:typeof category.color=="string"?category.color:"",...typeof category.label=="string"?{label:category.label}:{}}))}catch{}this._categories=Object.freeze(next),this.requestUpdate("categories",previous)}cellIndexForItem(itemIndex){const total=finiteCount(this.items.length);if(total===0)return-1;const index=finiteInteger(itemIndex,-1,-1,total-1);if(index<0)return-1;const cellCount=Math.min(total,MAX_RENDERED_CELLS);return cellCount===total?index:Math.min(cellCount-1,Math.floor(index*cellCount/total))}selectedCellIndex(){if(!Number.isInteger(this.selectedIndex)||this.selectedIndex<0||this.selectedIndex>=this.items.length)return null;const cellIndex=this.cellIndexForItem(this.selectedIndex);return cellIndex>=0?cellIndex:null}activateItem(index){const item=this.items[index];!item||item.disabled||this.emit("lr-item-activate",{index,id:item.id,item})}activateCell(cellIndex){const cell=this.cells()[cellIndex];cell&&this.activateItem(cell.start)}cellDisabled(cell){return this.items[cell.start]?.disabled===!0}nearestEnabledCellIndex(cells,index){const count=cells.length;if(!count)return-1;const clamped=Math.min(Math.max(index,0),count-1);if(!this.cellDisabled(cells[clamped]))return clamped;for(let forward=clamped+1;forward<count;forward+=1)if(!this.cellDisabled(cells[forward]))return forward;for(let backward=clamped-1;backward>=0;backward-=1)if(!this.cellDisabled(cells[backward]))return backward;return-1}willUpdate(changed){if(super.willUpdate(changed),changed.has("items")){this.focusRestoreGeneration++,this.hoverIndex=null;const focusedCell=shadowFocusTarget(this),focusedCellIndex=Number(focusedCell?.dataset?.index);if(!Number.isInteger(focusedCellIndex)||focusedCellIndex<0){this.keyboardIndex=null;return}const focusedId=focusedCell?.dataset?.itemId,retainedItemIndex=focusedId===void 0||focusedId===""?-1:this.items.findIndex(item=>item.id===focusedId),cells=this.cells(),nextIndex=retainedItemIndex>=0?this.cellIndexForItem(retainedItemIndex):cells.length?Math.min(focusedCellIndex,cells.length-1):-1;this.keyboardIndex=nextIndex>=0?nextIndex:null,this.pendingFocusTarget=nextIndex>=0?nextIndex:"base",this.restoringOwnedFocus=!0}}updated(changed){super.updated(changed);const pending=this.pendingFocusTarget;if(pending===void 0)return;this.pendingFocusTarget=void 0;const generation=this.focusRestoreGeneration;this.scheduleAfterUpdate(()=>{try{if(generation!==this.focusRestoreGeneration||!this.isConnected)return;if(pending==="base"){this.shadowRoot?.querySelector('[part="base"]')?.focus();return}this.shadowRoot?.querySelector(`[part="cell"][data-index="${pending}"]`)?.focus()}finally{this.restoringOwnedFocus=!1}},"sequence-strip-focus")}disconnectedCallback(){this.focusRestoreGeneration++,this.pendingFocusTarget=void 0,this.restoringOwnedFocus=!1,this.hoverIndex=null,this.keyboardIndex=null,super.disconnectedCallback()}cells(){const items=this._items;return this.cellCacheSource===items?this.cellCache:(this.cellCacheSource=items,this.cellCache=Object.freeze(buildSequenceStripCells(items)),this.cellCache)}cellView(cells){const locale=this.effectiveLocale,key=[cells,this._categories,this.markerLabel,locale,this.strings,lyraLocaleCatalogVersion(locale)];if(!this.view||key.some((part,index)=>part!==this.viewKey[index])){const categories=this.categoryMap();this.viewKey=key,this.view={labels:cells.map(cell=>this.cellLabel(cell,categories)),colors:cells.map(cell=>this.categoryColor(cell.categoryId,categories)),summary:this.autoSummary()}}return this.view}categoryMap(){return new Map(this.categories.map(category=>[category.id,category]))}categoryColor(categoryId,categories){return sanitizeCssColor(categories.get(categoryId)?.color)??"transparent"}categoryLabel(categoryId,categories){const label=categories.get(categoryId)?.label;return label!==void 0&&label.trim().length>0?label:this.localize("sequenceStripUnnamedCategory")}autoSummary(){const counts=new Map,categories=this.categoryMap();for(const item of this.items)counts.set(item.categoryId,(counts.get(item.categoryId)??0)+1);if(counts.size===0)return this.localize("sequenceStripEmpty");const clauses=[...counts.entries()].map(([categoryId,count])=>{const label=this.categoryLabel(categoryId,categories);return this.localize("sequenceStripCategoryCount",void 0,{label,count:getNumberFormat(this.effectiveLocale).format(count),pluralCount:count})}),markerCount=this.items.filter(item=>item.marker).length;this.markerLabel&&markerCount>0&&clauses.push(this.localize("sequenceStripCategoryCount",void 0,{label:this.markerLabel,count:getNumberFormat(this.effectiveLocale).format(markerCount),pluralCount:markerCount}));const overview=this.bucketSummary();return overview!==void 0&&clauses.push(overview),getListFormat(this.effectiveLocale,{style:"long",type:"unit"}).format(clauses)}bucketSummary(){const cells=this.cells();if(cells.length===0||cells.length>=this.items.length)return;const number=getNumberFormat(this.effectiveLocale);return this.localize("sequenceStripBucketSummary",void 0,{items:number.format(this.items.length),ranges:number.format(cells.length),pluralCount:this.items.length})}cellLabel(cell,categories=this.categoryMap()){if(cell.end<=cell.start){const item=this.items[cell.start];return item?this.itemLabel(item,categories):this.categoryLabel(cell.categoryId,categories)}const number=getNumberFormat(this.effectiveLocale);return this.localize("sequenceStripBucketLabel",void 0,{label:this.categoryLabel(cell.categoryId,categories),start:number.format(cell.start+1),end:number.format(cell.end+1),pluralCount:cell.end-cell.start+1})}itemLabel(item,categories=this.categoryMap()){return item.label!==void 0&&item.label.trim().length>0?item.label:this.categoryLabel(item.categoryId,categories)}onCellEnter(index){this.hoverIndex=index}onCellLeave(){this.hoverIndex=null}onCellFocus(index,event){this.restoringOwnedFocus||(this.keyboardIndex=index,this.keyboardTooltip=isKeyboardFocusEvent(event))}onStripFocusOut(e){if(this.restoringOwnedFocus)return;const next=e.relatedTarget;(!(next instanceof Element)||next.getAttribute("part")!=="cell")&&(this.keyboardIndex=null)}onCellKeyDown(e,index){if(e.key==="Enter"||e.key===" "||e.key==="Spacebar"){e.preventDefault(),this.activateCell(index);return}const cells=this.cells();if(!["ArrowLeft","ArrowRight","Home","End"].includes(e.key)||cells.length===0)return;e.preventDefault();const next=resolveListMove(e,{count:cells.length,current:index,orientation:"horizontal",direction:this.effectiveDirection,wrap:!1,isAvailable:cellIndex=>!this.cellDisabled(cells[cellIndex])})??(e.key==="Home"||e.key==="End"?-1:index);if(next<0)return;const items=this.items,targetStart=cells[next]?.start,targetId=targetStart===void 0?void 0:items[targetStart]?.id;if(targetId===void 0)return;const generation=this.focusRestoreGeneration;this.keyboardIndex=next,this.keyboardTooltip=!0,this.updateComplete.then(()=>{if(generation!==this.focusRestoreGeneration||!this.isConnected||this.items!==items)return;const target=this.shadowRoot?.querySelector(`[part="cell"][data-index="${next}"]`);target?.dataset.itemId===targetId&&target.focus()})}renderLegend(){const renderedCategories=this.categories.slice(0,MAX_RENDERED_CATEGORIES),categoryMap=this.categoryMap(),number=getNumberFormat(this.effectiveLocale);return html`
|
|
1
|
+
import{__decorate}from"tslib";import{SequenceStripSourceController}from"./sequence-strip-source-controller.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{guard}from"lit/directives/guard.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getListFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{resolveListMove}from"../../../internal/list-navigation.js";import{sanitizeCssColor}from"../../../internal/safe-css.js";import{finiteCount,finiteInteger}from"../../../internal/numbers.js";import{shadowFocusTarget}from"../../../internal/active-element.js";import{isKeyboardFocusEvent}from"../../../internal/focus-modality.js";import{lyraLocaleCatalogVersion}from"../../../internal/localization-runtime.js";import{styles}from"./sequence-strip.styles.js";import{LYRA_DEFAULT_sequenceStripBucketLabel,LYRA_DEFAULT_sequenceStripBucketSummary,LYRA_DEFAULT_sequenceStripCategoryCount,LYRA_DEFAULT_sequenceStripEmpty,LYRA_DEFAULT_sequenceStripSourceError,LYRA_DEFAULT_sequenceStripSourceItemLabel,LYRA_DEFAULT_sequenceStripSourceItemUnavailable,LYRA_DEFAULT_sequenceStripSourceKeyboardHelp,LYRA_DEFAULT_sequenceStripSourceRangeDetails,LYRA_DEFAULT_sequenceStripUnnamedCategory}from"../../../internal/default-strings/data.generated.js";import{LYRA_DEFAULT_loading,LYRA_DEFAULT_retry}from"../../../internal/default-strings/shared.generated.js";const MAX_RENDERED_CELLS=200,MAX_RENDERED_CATEGORIES=200,MAX_SEQUENCE_COLLECTION_ENTRIES=1e4;function bucketStartIndex(cell,total,cellCount){return Math.ceil(cell*total/cellCount)}function buildSequenceStripCells(items){const total=finiteCount(items.length);if(total===0)return[];const cellCount=Math.min(total,MAX_RENDERED_CELLS);if(cellCount===total)return items.map((item,index)=>({start:index,end:index,categoryId:item.categoryId,marker:item.marker===!0}));const cells=[];for(let cell=0;cell<cellCount;cell++){const start=bucketStartIndex(cell,total,cellCount),end=bucketStartIndex(cell+1,total,cellCount)-1,counts=new Map;let marker=!1;for(let index=start;index<=end;index++){const item=items[index];item&&(item.marker===!0&&(marker=!0),counts.set(item.categoryId,(counts.get(item.categoryId)??0)+1))}let categoryId="",dominantCount=0;for(const[id,count]of counts)count>dominantCount&&(dominantCount=count,categoryId=id);cells.push({start,end,categoryId,marker})}return cells}class LyraSequenceStrip extends LyraElement{constructor(){super(...arguments),this._source=null,this.sourceEpoch=0,this.sourceMetadataFailed=!1,this.sourceFocusIntent=0,this.sourceVersion=0,this.sourceController=new SequenceStripSourceController(this,()=>{this.sourceVersion++},()=>this.effectiveLocale),this.sourceAnnouncements=new AnnouncementSinkController(this,{eager:["polite"]}),this.sourceStatusInitialized=!1,this.previousSourceStatus="",this._items=[],this._categories=[],this.hostAccessibleLabel=null,this.selectedIndex=-1,this.withLegend=!1,this.hoverIndex=null,this.keyboardIndex=null,this.keyboardTooltip=!1,this.cellCache=[],this.restoringOwnedFocus=!1,this.focusRestoreGeneration=0,this.viewKey=[]}static{this.defaultStrings={...super.defaultStrings,loading:LYRA_DEFAULT_loading,retry:LYRA_DEFAULT_retry,sequenceStripBucketLabel:LYRA_DEFAULT_sequenceStripBucketLabel,sequenceStripBucketSummary:LYRA_DEFAULT_sequenceStripBucketSummary,sequenceStripCategoryCount:LYRA_DEFAULT_sequenceStripCategoryCount,sequenceStripEmpty:LYRA_DEFAULT_sequenceStripEmpty,sequenceStripSourceError:LYRA_DEFAULT_sequenceStripSourceError,sequenceStripSourceItemLabel:LYRA_DEFAULT_sequenceStripSourceItemLabel,sequenceStripSourceItemUnavailable:LYRA_DEFAULT_sequenceStripSourceItemUnavailable,sequenceStripSourceKeyboardHelp:LYRA_DEFAULT_sequenceStripSourceKeyboardHelp,sequenceStripSourceRangeDetails:LYRA_DEFAULT_sequenceStripSourceRangeDetails,sequenceStripUnnamedCategory:LYRA_DEFAULT_sequenceStripUnnamedCategory}}static{this.styles=[LyraElement.styles,styles]}get source(){return this._source}set source(value){const previous=this._source;this._source=value,this.invalidateSource(),this.sourceVersion=(this.sourceVersion??0)+1,this.requestUpdate("source",previous)}get sourceMode(){return this.source!=null}invalidateSource(){this.sourceEpoch=(this.sourceEpoch??0)+1,this.sourceFocusIntent=(this.sourceFocusIntent??0)+1,this.sourceMetadataFailed=!1,this.sourceInputs=void 0,this.sourceSelection=void 0,this.sourceCursor=void 0,this.sourceController?.detach(),this.hoverIndex=null,this.keyboardIndex=null}requestUpdate(...args){args[0]===void 0&&this.sourceController&&this.invalidateSource(),super.requestUpdate(...args)}syncSource(){if(!this.sourceMode||!this.isConnected)return;const source=this.source,epoch=this.sourceEpoch;if(!(this.sourceMetadataFailed&&this.sourceInputs?.[0]===source&&this.sourceInputs[1]===this.effectiveLocale))try{const revision=source.revision;if(source!==this.source||epoch!==this.sourceEpoch)return;const inputs=[source,revision,this.effectiveLocale];if(this.sourceInputs&&inputs.every((value,index)=>value===this.sourceInputs[index]))return;this.sourceInputs=inputs,this.sourceSelection=void 0,this.sourceFocusIntent++,this.sourceCursor=void 0,this.hoverIndex=null,this.keyboardIndex=null,this.sourceController.configure(source)}catch{source===this.source&&epoch===this.sourceEpoch&&(this.sourceMetadataFailed=!0,this.sourceInputs=[source,this.effectiveLocale],this.sourceController.fail())}}async revealSourceItem(target){return this.inspectSourceItem(target,!0,!1)}async inspectSourceItem(target,focus,activate){if(!this.sourceMode)return!1;this.sourceController.snapshot&&(this.sourceSelection=[this.sourceController.snapshot,this.selectedIndex]);const intent=++this.sourceFocusIntent,source=this.source,epoch=this.sourceController.requests.epoch,owner=this.ownerDocument,focused=shadowFocusTarget(this),outside=owner.activeElement,current=()=>this.isConnected&&this.ownerDocument===owner&&this.source===source&&this.sourceFocusIntent===intent&&this.sourceController.requests.epoch===epoch;typeof target=="number"&&Number.isSafeInteger(target)&&target>=0&&target<this.sourceController.length&&(this.sourceCursor=target);const record=await this.sourceController.resolve(target);if(!current()||!record||(this.sourceCursor=record.index,activate&&!record.item.disabled&&(this.emit("lr-item-activate",{index:record.index,id:record.item.id,item:record.item}),!current())))return!1;if(focus){if(await this.updateComplete,!current())return!1;(focused?shadowFocusTarget(this)===focused:owner.activeElement===outside)&&this.shadowRoot?.querySelector('[part="source-exact"]')?.focus()}return current()}get items(){return this._items}set items(value){if(value===this.itemsSource||value===this._items)return;this.itemsSource=value;const previous=this._items,seen=new Set,next=[];if(Array.isArray(value))for(const item of value.slice(0,MAX_SEQUENCE_COLLECTION_ENTRIES))try{if(!item||typeof item.id!="string"||item.id.trim().length===0||seen.has(item.id))continue;seen.add(item.id),next.push(Object.freeze({id:item.id,categoryId:typeof item.categoryId=="string"?item.categoryId:"",...item.marker===void 0?{}:{marker:!!item.marker},...typeof item.label=="string"?{label:item.label}:{},...item.disabled===void 0?{}:{disabled:!!item.disabled}}))}catch{}this._items=Object.freeze(next),this.requestUpdate("items",previous)}get categories(){return this._categories}set categories(value){if(value===this.categoriesSource||value===this._categories)return;this.categoriesSource=value;const previous=this._categories,seen=new Set,next=[];if(Array.isArray(value))for(const category of value.slice(0,MAX_SEQUENCE_COLLECTION_ENTRIES))try{if(!category||typeof category.id!="string"||category.id.trim().length===0||seen.has(category.id))continue;seen.add(category.id),next.push(Object.freeze({id:category.id,color:typeof category.color=="string"?category.color:"",...typeof category.label=="string"?{label:category.label}:{}}))}catch{}this._categories=Object.freeze(next),this.requestUpdate("categories",previous)}cellIndexForItem(itemIndex){const total=finiteCount(this.items.length);if(total===0)return-1;const index=finiteInteger(itemIndex,-1,-1,total-1);if(index<0)return-1;const cellCount=Math.min(total,MAX_RENDERED_CELLS);return cellCount===total?index:Math.min(cellCount-1,Math.floor(index*cellCount/total))}selectedCellIndex(){if(!Number.isInteger(this.selectedIndex)||this.selectedIndex<0||this.selectedIndex>=this.items.length)return null;const cellIndex=this.cellIndexForItem(this.selectedIndex);return cellIndex>=0?cellIndex:null}activateItem(index){const item=this.items[index];!item||item.disabled||this.emit("lr-item-activate",{index,id:item.id,item})}activateCell(cellIndex){const cell=this.cells()[cellIndex];cell&&this.activateItem(cell.start)}cellDisabled(cell){return this.items[cell.start]?.disabled===!0}nearestEnabledCellIndex(cells,index){const count=cells.length;if(!count)return-1;const clamped=Math.min(Math.max(index,0),count-1);if(!this.cellDisabled(cells[clamped]))return clamped;for(let forward=clamped+1;forward<count;forward+=1)if(!this.cellDisabled(cells[forward]))return forward;for(let backward=clamped-1;backward>=0;backward-=1)if(!this.cellDisabled(cells[backward]))return backward;return-1}willUpdate(changed){if(super.willUpdate(changed),this.sourceMode){this.syncSource();const snapshot=this.sourceController.snapshot,selection=[snapshot,this.selectedIndex];snapshot&&(!this.sourceSelection||selection.some((value,index)=>value!==this.sourceSelection[index]))&&(this.sourceSelection=selection,Number.isSafeInteger(this.selectedIndex)&&this.selectedIndex>=0&&this.selectedIndex<this.sourceController.length&&this.inspectSourceItem(this.selectedIndex,!1,!1));return}if(changed.has("items")){this.focusRestoreGeneration++,this.hoverIndex=null;const focusedCell=shadowFocusTarget(this),focusedCellIndex=Number(focusedCell?.dataset?.index);if(!Number.isInteger(focusedCellIndex)||focusedCellIndex<0){this.keyboardIndex=null;return}const focusedId=focusedCell?.dataset?.itemId,retainedItemIndex=focusedId===void 0||focusedId===""?-1:this.items.findIndex(item=>item.id===focusedId),cells=this.cells(),nextIndex=retainedItemIndex>=0?this.cellIndexForItem(retainedItemIndex):cells.length?Math.min(focusedCellIndex,cells.length-1):-1;this.keyboardIndex=nextIndex>=0?nextIndex:null,this.pendingFocusTarget=nextIndex>=0?nextIndex:"base",this.restoringOwnedFocus=!0}}updated(changed){if(super.updated(changed),this.sourceMode){const status=this.sourceController.pending?this.localize("loading"):this.sourceController.error?this.localize("sequenceStripSourceError"):this.sourceController.exactUnavailable?this.localize("sequenceStripSourceItemUnavailable"):"";this.sourceStatusInitialized&&status&&status!==this.previousSourceStatus&&this.sourceAnnouncements.announcePolite(status),this.sourceStatusInitialized=!0,this.previousSourceStatus=status;return}const pending=this.pendingFocusTarget;if(pending===void 0)return;this.pendingFocusTarget=void 0;const generation=this.focusRestoreGeneration;this.scheduleAfterUpdate(()=>{try{if(generation!==this.focusRestoreGeneration||!this.isConnected)return;if(pending==="base"){this.shadowRoot?.querySelector('[part="base"]')?.focus();return}this.shadowRoot?.querySelector(`[part="cell"][data-index="${pending}"]`)?.focus()}finally{this.restoringOwnedFocus=!1}},"sequence-strip-focus")}connectedCallback(){super.connectedCallback(),this.sourceMode&&this.requestUpdate("source")}adoptedCallback(){super.adoptedCallback(),this.sourceController.requests.adopted(),this.sourceAnnouncements.adopted(),this.invalidateSource(),this.requestUpdate("source")}disconnectedCallback(){this.invalidateSource(),this.sourceStatusInitialized=!1,this.previousSourceStatus="",this.focusRestoreGeneration++,this.pendingFocusTarget=void 0,this.restoringOwnedFocus=!1,this.hoverIndex=null,this.keyboardIndex=null,super.disconnectedCallback()}cells(){const items=this._items;return this.cellCacheSource===items?this.cellCache:(this.cellCacheSource=items,this.cellCache=Object.freeze(buildSequenceStripCells(items)),this.cellCache)}cellView(cells){const locale=this.effectiveLocale,key=[cells,this._categories,this.markerLabel,locale,this.strings,lyraLocaleCatalogVersion(locale)];if(!this.view||key.some((part,index)=>part!==this.viewKey[index])){const categories=this.categoryMap();this.viewKey=key;const overview=this.bucketSummary();this.view={labels:cells.map(cell=>this.cellLabel(cell,categories)),colors:cells.map(cell=>this.categoryColor(cell.categoryId,categories)),summary:this.autoSummary(overview),overview}}return this.view}categoryMap(){return this.categoryMemo?.source!==this.categories&&(this.categoryMemo={source:this.categories,map:new Map(this.categories.map(category=>[category.id,category]))}),this.categoryMemo.map}categoryColor(categoryId,categories){return sanitizeCssColor(categories.get(categoryId)?.color)??"transparent"}categoryLabel(categoryId,categories){const label=categories.get(categoryId)?.label;return label!==void 0&&label.trim().length>0?label:this.localize("sequenceStripUnnamedCategory")}autoSummary(overview){const counts=new Map,categories=this.categoryMap();for(const item of this.items)counts.set(item.categoryId,(counts.get(item.categoryId)??0)+1);if(counts.size===0)return this.localize("sequenceStripEmpty");const clauses=[...counts.entries()].map(([categoryId,count])=>{const label=this.categoryLabel(categoryId,categories);return this.localize("sequenceStripCategoryCount",void 0,{label,count:getNumberFormat(this.effectiveLocale).format(count),pluralCount:count})}),markerCount=this.items.filter(item=>item.marker).length;return this.markerLabel&&markerCount>0&&clauses.push(this.localize("sequenceStripCategoryCount",void 0,{label:this.markerLabel,count:getNumberFormat(this.effectiveLocale).format(markerCount),pluralCount:markerCount})),overview!==void 0&&clauses.push(overview),getListFormat(this.effectiveLocale,{style:"long",type:"unit"}).format(clauses)}bucketSummary(){const cells=this.cells();if(cells.length===0||cells.length>=this.items.length)return;const number=getNumberFormat(this.effectiveLocale);return this.localize("sequenceStripBucketSummary",void 0,{items:number.format(this.items.length),ranges:number.format(cells.length),pluralCount:this.items.length})}cellLabel(cell,categories=this.categoryMap()){if(cell.end<=cell.start){const item=this.items[cell.start];return item?this.itemLabel(item,categories):this.categoryLabel(cell.categoryId,categories)}const number=getNumberFormat(this.effectiveLocale);return this.localize("sequenceStripBucketLabel",void 0,{label:this.categoryLabel(cell.categoryId,categories),start:number.format(cell.start+1),end:number.format(cell.end+1),pluralCount:cell.end-cell.start+1})}itemLabel(item,categories=this.categoryMap()){return item.label!==void 0&&item.label.trim().length>0?item.label:this.categoryLabel(item.categoryId,categories)}onCellEnter(index){this.hoverIndex=index}onCellLeave(){this.hoverIndex=null}onCellFocus(index,event){this.restoringOwnedFocus||(this.keyboardIndex=index,this.keyboardTooltip=isKeyboardFocusEvent(event))}onStripFocusOut(e){if(this.restoringOwnedFocus)return;const next=e.relatedTarget;(!(next instanceof Element)||next.getAttribute("part")!=="cell")&&(this.keyboardIndex=null)}onCellKeyDown(e,index){if(e.key==="Enter"||e.key===" "||e.key==="Spacebar"){e.preventDefault(),this.activateCell(index);return}const cells=this.cells();if(!["ArrowLeft","ArrowRight","Home","End"].includes(e.key)||cells.length===0)return;e.preventDefault();const next=resolveListMove(e,{count:cells.length,current:index,orientation:"horizontal",direction:this.effectiveDirection,wrap:!1,isAvailable:cellIndex=>!this.cellDisabled(cells[cellIndex])})??(e.key==="Home"||e.key==="End"?-1:index);if(next<0)return;const items=this.items,targetStart=cells[next]?.start,targetId=targetStart===void 0?void 0:items[targetStart]?.id;if(targetId===void 0)return;const generation=this.focusRestoreGeneration;this.keyboardIndex=next,this.keyboardTooltip=!0,this.updateComplete.then(()=>{if(generation!==this.focusRestoreGeneration||!this.isConnected||this.items!==items)return;const target=this.shadowRoot?.querySelector(`[part="cell"][data-index="${next}"]`);target?.dataset.itemId===targetId&&target.focus()})}renderLegend(){const renderedCategories=this.categories.slice(0,MAX_RENDERED_CATEGORIES),categoryMap=this.categoryMap(),number=getNumberFormat(this.effectiveLocale);return html`
|
|
2
2
|
<div part="legend" aria-hidden="true">
|
|
3
3
|
${renderedCategories.map(category=>html`
|
|
4
4
|
<span part="legend-item">
|
|
@@ -17,7 +17,26 @@ import{__decorate}from"tslib";import{html,nothing}from"lit";import{property,stat
|
|
|
17
17
|
`:nothing}
|
|
18
18
|
${this.categories.length>renderedCategories.length?html`<span part="legend-limit">${number.format(renderedCategories.length)} / ${number.format(this.categories.length)}</span>`:nothing}
|
|
19
19
|
</div>
|
|
20
|
-
`}
|
|
20
|
+
`}sourceCategory(range,rank){let winner="",maximum=-1;for(const[id,count]of Object.entries(range.categoryCounts)){const position=rank.get(id)??Number.MAX_SAFE_INTEGER,previous=rank.get(winner)??Number.MAX_SAFE_INTEGER;(count>maximum||count===maximum&&(position<previous||position===previous&&id<winner))&&(winner=id,maximum=count)}return winner}sourceExactKey(event){const current=this.sourceController.exact,length=this.sourceController.length;if(!length)return;let next;if(event.key==="Home")next=0;else if(event.key==="End")next=length-1;else if(event.key==="ArrowLeft"||event.key==="ArrowRight"){const forward=event.key==="ArrowRight"!=(this.effectiveDirection==="rtl");next=Math.max(0,Math.min(length-1,(current?.index??this.sourceCursor??0)+(forward?1:-1)))}else return;event.preventDefault(),this.inspectSourceItem(next,!0,!1)}renderSource(){const controller=this.sourceController,snapshot=controller.snapshot,source=this.source,epoch=controller.requests.epoch,owner=this.ownerDocument,current=()=>this.isConnected&&this.ownerDocument===owner&&this.source===source&&controller.requests.epoch===epoch&&controller.snapshot===snapshot,categories=this.categoryMap(),number=getNumberFormat(this.effectiveLocale),ranges=snapshot?.ranges??[],categoryRanks=new Map(this.categories.map((category,index)=>[category.id,index])),clauses=snapshot?[...snapshot.counts].map(([id,count])=>this.localize("sequenceStripCategoryCount",void 0,{label:this.categoryLabel(id,categories),count:number.format(count),pluralCount:count})):[];snapshot&&this.markerLabel&&snapshot.markerCount&&clauses.push(this.localize("sequenceStripCategoryCount",void 0,{label:this.markerLabel,count:number.format(snapshot.markerCount),pluralCount:snapshot.markerCount}));const overview=snapshot&&controller.length?this.localize("sequenceStripBucketSummary",void 0,{items:number.format(controller.length),ranges:number.format(ranges.length),pluralCount:controller.length}):void 0;overview&&clauses.push(overview);const summary=snapshot?clauses.length?getListFormat(this.effectiveLocale,{style:"long",type:"unit"}).format(clauses):this.localize("sequenceStripEmpty"):this.localize(controller.error?"sequenceStripSourceError":"loading"),exact=controller.exact,unavailableLabel=this.localize(controller.exactPending?"loading":"sequenceStripSourceItemUnavailable"),inspectedIndex=exact?.index??this.sourceCursor,exactLabel=inspectedIndex!==void 0?this.localize("sequenceStripSourceItemLabel",void 0,{label:exact?this.itemLabel(exact.item,categories):unavailableLabel,index:number.format(inspectedIndex+1),total:number.format(controller.length)}):unavailableLabel,active=this.hoverIndex??(this.keyboardTooltip?this.keyboardIndex:null),selected=ranges.findIndex(range=>Number.isSafeInteger(this.selectedIndex)&&this.selectedIndex>=range.startIndex&&this.selectedIndex<range.endIndex),requestedEntry=this.keyboardIndex??(selected>=0?selected:0);let entry=requestedEntry;if(!ranges[entry]?.enabledCount){const forward=ranges.findIndex((range,index)=>index>=requestedEntry&&range.enabledCount>0);entry=forward>=0?forward:ranges.findIndex(range=>range.enabledCount>0),entry<0&&(entry=requestedEntry)}return html`
|
|
21
|
+
${snapshot?nothing:html`<div part="source-status" aria-busy=${controller.pending?"true":"false"}>${summary}</div>
|
|
22
|
+
${controller.error?html`<button part="source-retry" type="button" @click=${()=>{current()&&(this.invalidateSource(),this.requestUpdate("source"))}}>${this.localize("retry")}</button>`:nothing}`}
|
|
23
|
+
<div part="base" role="list" aria-label=${this.hostAccessibleLabel??summary} tabindex=${ranges.length?"-1":"0"} @focusout=${this.onStripFocusOut} ?data-dense=${ranges.length>=MAX_RENDERED_CELLS}>
|
|
24
|
+
${ranges.map((range,index)=>{const category=this.sourceCategory(range,categoryRanks),label=this.localize("sequenceStripSourceRangeDetails",void 0,{label:this.categoryLabel(category,categories),start:number.format(range.startIndex+1),end:number.format(range.endIndex),enabled:number.format(range.enabledCount),total:number.format(range.endIndex-range.startIndex),markers:number.format(range.markerCount)}),activate=()=>{current()&&range.enabledCount&&this.inspectSourceItem(range.startIndex,!1,!0)};return html`<span part="cell" role="listitem" data-index=${index} data-range-start=${range.startIndex} data-range-end=${range.endIndex-1}
|
|
25
|
+
aria-posinset=${index+1} aria-setsize=${ranges.length} aria-label=${label} aria-disabled=${range.enabledCount?"false":"true"}
|
|
26
|
+
aria-current=${selected===index?"true":"false"} ?data-selected=${selected===index} tabindex=${entry===index?"0":"-1"}
|
|
27
|
+
style=${styleMap({backgroundColor:this.categoryColor(category,categories),flexGrow:String((range.endIndex-range.startIndex)/controller.length)})}
|
|
28
|
+
@click=${activate} @pointerenter=${()=>{current()&&this.onCellEnter(index)}} @pointerleave=${()=>{current()&&this.onCellLeave()}}
|
|
29
|
+
@focus=${event=>{current()&&this.onCellFocus(index,event)}}
|
|
30
|
+
@keydown=${event=>{if(!current())return;if(event.key==="Enter"||event.key===" "||event.key==="Spacebar"){event.preventDefault(),activate();return}const next=resolveListMove(event,{count:ranges.length,current:index,orientation:"horizontal",direction:this.effectiveDirection,wrap:!1,isAvailable:target=>ranges[target].enabledCount>0});next!=null&&(event.preventDefault(),this.keyboardIndex=next,this.keyboardTooltip=!0,this.updateComplete.then(()=>{current()&&this.shadowRoot?.querySelector(`[part="cell"][data-index="${next}"]`)?.focus()}))}}>${range.markerCount?html`<span part="marker"></span>`:nothing}
|
|
31
|
+
${active===index?html`<span part="tooltip">${label}</span>`:nothing}</span>`})}
|
|
32
|
+
</div>
|
|
33
|
+
${snapshot&&!controller.length?html`<span part="empty">${this.localize("sequenceStripEmpty")}</span>`:nothing}
|
|
34
|
+
${overview?html`<div part="bucket-summary" aria-hidden="true">${overview}</div>`:nothing}
|
|
35
|
+
${snapshot&&controller.length?html`<button part="source-exact" type="button" aria-disabled=${!exact||exact.item.disabled?"true":"false"}
|
|
36
|
+
title=${this.localize("sequenceStripSourceKeyboardHelp")} aria-busy=${controller.exactPending?"true":"false"} @keydown=${event=>{current()&&controller.exact===exact&&this.sourceExactKey(event)}}
|
|
37
|
+
@click=${()=>{current()&&exact&&controller.exact===exact&&!exact.item.disabled&&this.emit("lr-item-activate",{index:exact.index,id:exact.item.id,item:exact.item})}}>${exactLabel}</button>`:nothing}
|
|
38
|
+
${this.withLegend?this.renderLegend():nothing}
|
|
39
|
+
`}render(){if(this.sourceMode)return this.renderSource();const cells=this.cells(),view=this.cellView(cells),ariaLabel=this.hostAccessibleLabel??view.summary,activeIndex=this.hoverIndex??(this.keyboardTooltip?this.keyboardIndex:null),active=activeIndex!==null?cells[activeIndex]:void 0,selectedCell=this.selectedCellIndex(),requestedTabStop=this.keyboardIndex??selectedCell??0,nearestEnabledTabStop=this.nearestEnabledCellIndex(cells,requestedTabStop),tabStop=nearestEnabledTabStop>=0?nearestEnabledTabStop:requestedTabStop,tooltipIndex=activeIndex??tabStop,overview=view.overview;return html`
|
|
21
40
|
<div
|
|
22
41
|
part="base"
|
|
23
42
|
role="list"
|
|
@@ -59,5 +78,5 @@ import{__decorate}from"tslib";import{html,nothing}from"lit";import{property,stat
|
|
|
59
78
|
</div>
|
|
60
79
|
${cells.length===0?html`<span part="empty" aria-hidden="true">${this.localize("sequenceStripEmpty")}</span>`:nothing}
|
|
61
80
|
${overview===void 0?nothing:html`<div part="bucket-summary" aria-hidden="true">${overview}</div>`}
|
|
62
|
-
${this.withLegend?this.renderLegend():nothing}
|
|
63
|
-
`}}__decorate([property({attribute:!1})],LyraSequenceStrip.prototype,"items",null),__decorate([property({attribute:!1})],LyraSequenceStrip.prototype,"categories",null),__decorate([property({attribute:"aria-label"})],LyraSequenceStrip.prototype,"hostAccessibleLabel",void 0),__decorate([property({type:Number,attribute:"selected-index"})],LyraSequenceStrip.prototype,"selectedIndex",void 0),__decorate([property({type:Boolean,reflect:!0,attribute:"with-legend"})],LyraSequenceStrip.prototype,"withLegend",void 0),__decorate([property({attribute:"marker-label"})],LyraSequenceStrip.prototype,"markerLabel",void 0),__decorate([state()],LyraSequenceStrip.prototype,"hoverIndex",void 0),__decorate([state()],LyraSequenceStrip.prototype,"keyboardIndex",void 0),__decorate([state()],LyraSequenceStrip.prototype,"keyboardTooltip",void 0);export{LyraSequenceStrip};
|
|
81
|
+
${this.withLegend?guard([this.categories,this.markerLabel,this.effectiveLocale,this.strings,lyraLocaleCatalogVersion(this.effectiveLocale)],()=>this.renderLegend()):nothing}
|
|
82
|
+
`}}__decorate([state()],LyraSequenceStrip.prototype,"sourceVersion",void 0),__decorate([property({attribute:!1})],LyraSequenceStrip.prototype,"source",null),__decorate([property({attribute:!1})],LyraSequenceStrip.prototype,"items",null),__decorate([property({attribute:!1})],LyraSequenceStrip.prototype,"categories",null),__decorate([property({attribute:"aria-label"})],LyraSequenceStrip.prototype,"hostAccessibleLabel",void 0),__decorate([property({type:Number,attribute:"selected-index"})],LyraSequenceStrip.prototype,"selectedIndex",void 0),__decorate([property({type:Boolean,reflect:!0,attribute:"with-legend"})],LyraSequenceStrip.prototype,"withLegend",void 0),__decorate([property({attribute:"marker-label"})],LyraSequenceStrip.prototype,"markerLabel",void 0),__decorate([state()],LyraSequenceStrip.prototype,"hoverIndex",void 0),__decorate([state()],LyraSequenceStrip.prototype,"keyboardIndex",void 0),__decorate([state()],LyraSequenceStrip.prototype,"keyboardTooltip",void 0);export{LyraSequenceStrip};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{css}from"lit";const styles=css
|
|
1
|
+
import{css}from"lit";import{focusRing}from"../../../internal/interactive-control.styles.js";const styles=css` [part='source-status'] { overflow-wrap: anywhere; color: var(--lr-color-text-quiet); } [part='source-retry'], [part='source-exact'] { min-inline-size: var(--lr-icon-button-size); min-block-size: var(--lr-icon-button-size); max-inline-size: 100%; white-space: normal; overflow-wrap: anywhere; font: inherit; text-align: start; color: var(--lr-color-text); background: var(--lr-color-surface); border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-radius); padding: var(--lr-space-xs) var(--lr-space-s); margin-block-start: var(--lr-space-s); cursor: pointer; transition: var(--lr-transition-interactive); } [part='source-retry']:hover, [part='source-exact']:hover { background: color-mix(in oklab, var(--lr-color-surface), var(--lr-color-mix-partner) var(--lr-color-mix-hover)); } [part='source-retry']:active, [part='source-exact']:active { background: color-mix(in oklab, var(--lr-color-surface), var(--lr-color-mix-partner) var(--lr-color-mix-active)); } [part='source-retry']:focus-visible, [part='source-exact']:focus-visible { ${focusRing} } :host { display: block; } [part='base'] { position: relative; display: flex; align-items: stretch; gap: var(--lr-size-1px); block-size: var(--lr-sequence-strip-height, var(--lr-size-1-5rem)); } [part='base'][data-dense] { gap: 0; } [part='cell'] { position: relative; flex: 1 1 0; min-inline-size: 0; display: flex; align-items: flex-end; justify-content: center; } [part='cell'] { cursor: pointer; } [part='cell']:where(:not([aria-disabled='true'])):hover { outline: var(--lr-border-width-thin) solid var(--lr-color-text-quiet); outline-offset: calc(-1 * var(--lr-border-width-thin)); } [part='cell']:where(:not([aria-disabled='true'])):focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: calc(-1 * var(--lr-focus-ring-width)); } [part='cell']:where(:not([aria-disabled='true'])):active { outline: var(--lr-focus-ring-width) solid var(--lr-color-text); outline-offset: calc(-1 * var(--lr-focus-ring-width)); } [part='cell'][aria-disabled='true'] { cursor: default; opacity: var(--lr-sequence-strip-disabled-opacity, var(--lr-opacity-disabled)); } [part='cell'][data-selected] { outline: var(--lr-focus-ring-width) solid var(--lr-sequence-strip-selected-color, var(--lr-color-text)); outline-offset: calc(-1 * var(--lr-focus-ring-width)); } [part='cell'][data-selected]:focus-visible { outline-color: var(--lr-sequence-strip-selected-focus-color, var(--lr-focus-ring-color)); } [part='cell']:first-child { border-start-start-radius: var(--lr-radius-xs); border-end-start-radius: var(--lr-radius-xs); } [part='cell']:last-child { border-start-end-radius: var(--lr-radius-xs); border-end-end-radius: var(--lr-radius-xs); } [part='marker'] { display: block; inline-size: 100%; block-size: var(--lr-size-2px); background: var(--lr-sequence-strip-marker-color, var(--lr-color-text)); } [part='tooltip'] { position: absolute; inset-block-end: 100%; inset-inline-start: 50%; transform: translate(-50%, calc(-1 * var(--lr-size-6px))); padding: var(--lr-size-2px) var(--lr-size-6px); border-radius: var(--lr-radius); background: var(--lr-color-surface); color: var(--lr-color-text); font-size: var(--lr-font-size-xs); white-space: nowrap; box-shadow: var(--lr-shadow-m); pointer-events: none; z-index: var(--lr-layer-content); } :host(:dir(rtl)) [part='tooltip'] { transform: translate(50%, calc(-1 * var(--lr-size-6px))); } [part='tooltip'][hidden] { display: none; } [part='legend'] { display: flex; flex-wrap: wrap; align-items: center; gap: var(--lr-space-2xs) var(--lr-space-s); margin-block-start: var(--lr-space-xs); font-size: var(--lr-font-size-xs); color: var(--lr-color-text-quiet); } [part='empty'], [part='bucket-summary'], [part='legend-limit'] { color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-xs); font-variant-numeric: tabular-nums; } [part='bucket-summary'] { margin-block-start: var(--lr-space-2xs); text-align: end; } [part='legend-item'] { display: inline-flex; align-items: center; gap: var(--lr-space-2xs); min-inline-size: 0; } [part='legend-swatch'], [part='legend-marker-swatch'] { flex: none; inline-size: var(--lr-sequence-strip-legend-swatch-size, var(--lr-size-0-625rem)); block-size: var(--lr-sequence-strip-legend-swatch-size, var(--lr-size-0-625rem)); border-radius: var(--lr-radius-xs); } [part='legend-marker-swatch'] { background: var(--lr-sequence-strip-legend-marker-bg, var(--lr-color-surface-raised)); box-shadow: inset 0 calc(-1 * var(--lr-size-2px)) 0 0 var(--lr-sequence-strip-marker-color, var(--lr-color-text)); } [part='legend-label'] { min-inline-size: 0; overflow-wrap: anywhere; } `;export{styles};
|
|
@@ -1,16 +1,21 @@
|
|
|
1
|
-
import{type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';export type LyraSparklineAppearance='gradient'|'line'|'solid';export type LyraSparklineCurve='linear'|'natural'|'step';export type LyraSparklineTrend='positive'|'negative'|'neutral';
|
|
1
|
+
import{type TemplateResult,type PropertyValues}from'lit';import type{LyraPreparedSeriesData}from'../../../utilities/data-preparation.js';export type{LyraPreparedSeriesData}from'../../../utilities/data-preparation.js';import{LyraElement}from'../../../internal/lyra-element.js';export type LyraSparklineAppearance='gradient'|'line'|'solid';export type LyraSparklineCurve='linear'|'natural'|'step';export type LyraSparklineTrend='positive'|'negative'|'neutral';
|
|
2
2
|
/** Geometry used to plot each sample. */
|
|
3
3
|
export type LyraSparklineMark='line'|'bar';
|
|
4
4
|
/**
|
|
5
5
|
* `<lr-sparkline>` — a zero-dependency inline SVG trend chart.
|
|
6
6
|
* Mirrors the Web Awesome `<wa-sparkline>` API under the `lr-` prefix and retains the earlier
|
|
7
|
-
* `values`/`mark`/`min`/`max` Lyra surface as an additive programmatic extension.
|
|
7
|
+
* `values`/`mark`/`min`/`max` Lyra surface as an additive programmatic extension. Large inputs retain
|
|
8
|
+
* at most 500 plotted samples: endpoints and source-bucket extrema, positioned in finite-sample
|
|
9
|
+
* order. The accessible summary counts all finite input samples. A preparedData summary
|
|
10
|
+
* instead preserves original x coordinates and declared full domains/counts, with gaps in both
|
|
11
|
+
* stroke and fill. It never reads the original source, values or data while supplied.
|
|
8
12
|
*
|
|
9
13
|
* @customElement lr-sparkline
|
|
10
14
|
* @csspart sparkline - The outer SVG wrapper.
|
|
11
15
|
* @csspart base - Deprecated alias for `sparkline` on the same SVG wrapper.
|
|
12
16
|
* @csspart fill - The filled area rendered by `appearance="solid"` and `appearance="gradient"`.
|
|
13
17
|
* @csspart line - The stroked trend path.
|
|
18
|
+
* @csspart status - The visible localized invalid-prepared-input message.
|
|
14
19
|
* @csspart bar - Each rectangle rendered by the additive `mark="bar"` mode.
|
|
15
20
|
* @cssprop [--fill-color=var(--lr-color-brand-quiet)] - Area fill color. A `trend` supplies a
|
|
16
21
|
* semantic token default, while an authored value always wins.
|
|
@@ -35,11 +40,19 @@ trend?:LyraSparklineTrend;
|
|
|
35
40
|
/** Compatibility accessible-name property. An authored host `aria-label` wins; otherwise a
|
|
36
41
|
* nonempty `label` precedes a nonempty programmatic value here. */
|
|
37
42
|
accessibleLabel:string|null;
|
|
38
|
-
/** Additive programmatic data source used when `data` is empty. Property-only.
|
|
43
|
+
/** Additive programmatic data source used when `data` is empty. Property-only.
|
|
44
|
+
* Reassign after changes, or call `requestUpdate()` after mutating the existing array. */
|
|
39
45
|
values:readonly number[];private _mark;
|
|
40
46
|
/** Geometry used to plot samples. Foreign tokens normalize to `line`. */
|
|
41
47
|
get mark():LyraSparklineMark;set mark(value:LyraSparklineMark);
|
|
42
48
|
/** Lower bound of the value scale (defaults to the data minimum). */
|
|
43
49
|
min?:number;
|
|
44
50
|
/** Upper bound of the value scale (defaults to the data maximum). */
|
|
45
|
-
max?:number;private
|
|
51
|
+
max?:number;private _preparedData;
|
|
52
|
+
/** Property-only immutable whole-source summary with exactly one series and at most 500 samples.
|
|
53
|
+
* Takes precedence over values/data. Original x, full domains/counts and gap breaks are retained;
|
|
54
|
+
* min/max still explicitly override the y scale. Invalid/oversized inputs fail visibly rather
|
|
55
|
+
* than being sampled again. Reassign or requestUpdate after mutable descriptor changes.
|
|
56
|
+
* Source readers remain host-owned and are never invoked by this component.
|
|
57
|
+
*/
|
|
58
|
+
get preparedData():LyraPreparedSeriesData|null;set preparedData(value:LyraPreparedSeriesData|null);private preparedDirty;private preparedActive;private preparedInvalid;private preparedSeries?;private preparedValues;private announcedPreparedInvalid;private mounted;private readonly announcements;private refreshPrepared;protected updated(changed:PropertyValues):void;disconnectedCallback():void;connectedCallback():void;adoptedCallback():void;private readonly gradientId;private valuesMemo?;private pointsMemo?;requestUpdate(name?:PropertyKey,oldValue?:unknown,options?:Parameters<LyraElement['requestUpdate']>[2]):void;private plotValues;private points;private linePath;private accessibleName;private renderBars;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-sparkline':LyraSparkline;}}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import{html,nothing,svg}from"lit";import{property}from"lit/decorators.js";import{nextId}from"../../../internal/a11y.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{finiteNumber,finiteRatio}from"../../../internal/numbers.js";import{styles}from"./sparkline.styles.js";import{LYRA_DEFAULT_trendOf}from"../../../internal/default-strings/data.generated.js";import{LYRA_DEFAULT_noData}from"../../../internal/default-strings/shared.generated.js";const VIEW=100,MAX_POINTS=500;function
|
|
1
|
+
import{__decorate}from"tslib";import{html,nothing,svg}from"lit";import{property}from"lit/decorators.js";import{prepareChartModel}from"../../charts/chart/chart-prepared-data.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{nextId}from"../../../internal/a11y.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{finiteNumber,finiteRatio}from"../../../internal/numbers.js";import{styles}from"./sparkline.styles.js";import{LYRA_DEFAULT_trendOf}from"../../../internal/default-strings/data.generated.js";import{LYRA_DEFAULT_chartPreparedSummary,LYRA_DEFAULT_chartPreparedUnavailable,LYRA_DEFAULT_chartSummary,LYRA_DEFAULT_chartSummarySeparator,LYRA_DEFAULT_chartTrendDecreasing,LYRA_DEFAULT_chartTrendFlat,LYRA_DEFAULT_chartTrendIncreasing,LYRA_DEFAULT_noData}from"../../../internal/default-strings/shared.generated.js";const VIEW=100,MAX_POINTS=500;function sampleValues(data,values){const text=data.trim(),length=text?text.length:Array.isArray(values)?values.length:0,bucketCount=(MAX_POINTS-2)/2,buckets=[],small=[];let count=0,first,last;const accept=(value,offset)=>{if(!Number.isFinite(value))return;const index=count++,sample={value,index};first??=sample,last=sample,small.length<MAX_POINTS&&small.push(sample);const bucketIndex=Math.min(bucketCount-1,Math.floor(offset/Math.max(1,length)*bucketCount)),bucket=buckets[bucketIndex];bucket?(value<bucket.min.value&&(bucket.min=sample),value>bucket.max.value&&(bucket.max=sample)):buckets[bucketIndex]={min:sample,max:sample}};if(text){const tokens=/\S+/gu;for(let token=tokens.exec(text);token;token=tokens.exec(text))accept(Number(token[0]),token.index);if(count<2)return{values:[],positions:[],count:0}}else for(let index=0;index<length;index++)accept(values[index],index);const retained=count<=MAX_POINTS?small:[first,last,...buckets.flatMap(bucket=>bucket?[bucket.min,bucket.max]:[])];retained.sort((a,b)=>a.index-b.index);const unique=retained.filter((sample,index)=>index===0||sample.index!==retained[index-1].index);return{values:unique.map(sample=>sample.value),positions:unique.map(sample=>sample.index),count}}function normalizeAppearance(value){return value==="gradient"||value==="line"||value==="solid"?value:"solid"}function normalizeCurve(value){return value==="natural"||value==="step"||value==="linear"?value:"linear"}class LyraSparkline extends LyraElement{constructor(){super(...arguments),this.appearance="solid",this.curve="linear",this.data="",this.label="",this.accessibleLabel=null,this.values=[],this._mark="line",this._preparedData=null,this.preparedDirty=!0,this.preparedActive=!1,this.preparedInvalid=!1,this.preparedValues=[],this.announcedPreparedInvalid=!1,this.mounted=!1,this.announcements=new AnnouncementSinkController(this),this.gradientId=nextId("sparkline-gradient")}static{this.defaultStrings={...super.defaultStrings,chartPreparedSummary:LYRA_DEFAULT_chartPreparedSummary,chartPreparedUnavailable:LYRA_DEFAULT_chartPreparedUnavailable,chartSummary:LYRA_DEFAULT_chartSummary,chartSummarySeparator:LYRA_DEFAULT_chartSummarySeparator,chartTrendDecreasing:LYRA_DEFAULT_chartTrendDecreasing,chartTrendFlat:LYRA_DEFAULT_chartTrendFlat,chartTrendIncreasing:LYRA_DEFAULT_chartTrendIncreasing,noData:LYRA_DEFAULT_noData,trendOf:LYRA_DEFAULT_trendOf}}static{this.styles=[LyraElement.styles,styles]}get mark(){return this._mark}set mark(value){const normalized=value==="bar"?"bar":"line",previous=this._mark;if(previous===normalized){value!==normalized&&this.requestUpdate("mark",previous);return}this._mark=normalized,this.requestUpdate("mark",previous)}get preparedData(){return this._preparedData}set preparedData(value){const previous=this._preparedData;this._preparedData=value,this.requestUpdate("preparedData",previous),previous===value&&this.requestUpdate()}refreshPrepared(){if(this.preparedDirty&&(this.preparedDirty=!1,this.preparedActive=this._preparedData!==null,this.preparedInvalid=!1,this.preparedSeries=void 0,this.preparedValues=[],this.pointsMemo=void 0,!!this.preparedActive))try{const model=prepareChartModel(this._preparedData,"bar",MAX_POINTS+2);if(model.kind!=="series"||model.series.length!==1||model.displayedCount>MAX_POINTS)throw new TypeError("Invalid sparkline summary");this.preparedSeries=model.series[0],this.preparedValues=this.preparedSeries.samples.map(point=>point.y)}catch{this.preparedInvalid=!0}}updated(changed){super.updated(changed),this.mounted&&this.preparedInvalid&&!this.announcedPreparedInvalid&&this.announcements.announceAssertive(this.localize("chartPreparedUnavailable")),this.announcedPreparedInvalid=this.preparedInvalid,this.mounted=!0}disconnectedCallback(){super.disconnectedCallback(),this.preparedSeries=void 0,this.preparedValues=[],this.pointsMemo=void 0,this.preparedDirty=!0,this.mounted=!1,this.announcedPreparedInvalid=!1}connectedCallback(){super.connectedCallback(),this.requestUpdate()}adoptedCallback(){super.adoptedCallback(),this.announcements.adopted(),this.requestUpdate()}requestUpdate(name,oldValue,options){(name===void 0||name==="preparedData")&&(this.preparedDirty=!0),(name===void 0||name==="preparedData"||name==="values"||name==="data")&&(this.valuesMemo=void 0,this.pointsMemo=void 0),super.requestUpdate(name,oldValue,options)}plotValues(){if(this.preparedActive)return this.preparedValues;const data=this.data??"";if(this.valuesMemo?.data===data&&this.valuesMemo.values===this.values)return this.valuesMemo.result;const sample=sampleValues(data,this.values);return this.valuesMemo={data,values:this.values,result:sample.values,positions:sample.positions,count:sample.count},sample.values}points(values=this.plotValues()){const direction=this.effectiveDirection,memo=this.pointsMemo;if(memo&&memo.values===values&&memo.min===this.min&&memo.max===this.max&&memo.direction===direction)return memo.result;let autoLo=this.preparedSeries?.yDomain?.min??values[0]??0,autoHi=this.preparedSeries?.yDomain?.max??values[0]??0;if(!this.preparedActive&&(!Number.isFinite(this.min)||!Number.isFinite(this.max)))for(const value of values)value<autoLo&&(autoLo=value),value>autoHi&&(autoHi=value);let lo=finiteNumber(this.min??autoLo,autoLo),hi=finiteNumber(this.max??autoHi,autoHi);lo>hi&&([lo,hi]=[hi,lo]);const sample=this.valuesMemo?.result===values?this.valuesMemo:void 0,count=sample?.count??values.length,result=values.map((value,index)=>{const position=sample?.positions[index]??index,source=this.preparedSeries,domain=source?.xDomain,forwardX=domain&&source?domain.min===domain.max?VIEW/2:finiteRatio(source.samples[index].x,domain.min,domain.max)*VIEW:count>1?position/(count-1)*VIEW:VIEW/2,x=direction==="rtl"?VIEW-forwardX:forwardX,y=lo===hi?VIEW/2:VIEW-finiteRatio(value,lo,hi)*VIEW;return[x,y]});return this.pointsMemo={values,min:this.min,max:this.max,direction,result},result}linePath(points){const first=points[0];if(!first)return"";if(points.length===1)return`M${first[0]},${first[1]} L${first[0]},${first[1]}`;const curve=normalizeCurve(this.curve);if(curve==="step")return points.slice(1).reduce((path,point)=>`${path} H${point[0]} V${point[1]}`,`M${first[0]},${first[1]}`);if(curve==="natural"){let path=`M${first[0]},${first[1]}`;for(let index=0;index<points.length-1;index++){const before=points[Math.max(0,index-1)],start=points[index],end=points[index+1],after=points[Math.min(points.length-1,index+2)],c1x=start[0]+(end[0]-before[0])/6,c1y=start[1]+(end[1]-before[1])/6,c2x=end[0]-(after[0]-start[0])/6,c2y=end[1]-(after[1]-start[1])/6;path+=` C${c1x},${c1y} ${c2x},${c2y} ${end[0]},${end[1]}`}return path}return points.map(([x,y],index)=>`${index?"L":"M"}${x},${y}`).join(" ")}accessibleName(values){const hostLabel=this.getAttribute("aria-label");if(hostLabel!==null)return hostLabel;if(this.label)return this.label;if(typeof this.accessibleLabel=="string"&&this.accessibleLabel.length>0)return this.accessibleLabel;if(this.preparedSeries){const series=this.preparedSeries,number=getNumberFormat(this.effectiveLocale),summary=this.localize("chartPreparedSummary",void 0,{validCount:number.format(series.counts.validCount),invalidCount:number.format(series.counts.invalidCount),displayedCount:number.format(series.samples.length)});if(!series.yDomain)return summary;const first=values[0]??0,last2=values.at(-1)??0;return[this.localize("chartSummary",void 0,{label:series.label,count:number.format(series.counts.validCount),min:number.format(series.yDomain.min),max:number.format(series.yDomain.max),trend:this.localize(last2>first?"chartTrendIncreasing":last2<first?"chartTrendDecreasing":"chartTrendFlat")}),summary].join(this.localize("chartSummarySeparator"))}const last=values.at(-1);if(last===void 0)return this.localize("noData");const magnitude=Math.abs(last),digits=magnitude>0&&magnitude<1?Math.min(20,Math.max(2,1-Math.floor(Math.log10(magnitude)))):2;return this.localize("trendOf",void 0,{count:getNumberFormat(this.effectiveLocale).format(this.valuesMemo?.result===values?this.valuesMemo.count:values.length),value:getNumberFormat(this.effectiveLocale,{maximumFractionDigits:digits}).format(last)})}renderBars(points){const slot=VIEW/Math.max(1,points.length),barWidth=Math.min(4,Math.max(1,slot*.7));return html`${points.map(([x,y])=>{const barY=Math.min(VIEW,Math.max(0,y));return svg`<rect
|
|
2
2
|
part="bar"
|
|
3
3
|
x="${x-barWidth/2}"
|
|
4
4
|
y="${barY}"
|
|
5
5
|
width="${barWidth}"
|
|
6
6
|
height="${VIEW-barY}"
|
|
7
|
-
></rect>`})}`}render(){const values=this.plotValues(),points=this.points(values),name=this.accessibleName(values),
|
|
7
|
+
></rect>`})}`}render(){if(this.refreshPrepared(),this.preparedInvalid)return html`<span part="status">${this.localize("chartPreparedUnavailable")}</span>`;const values=this.plotValues(),points=this.points(values),name=this.accessibleName(values),segments=[];for(let index=0;index<points.length;index++)(!segments.length||this.preparedSeries?.samples[index]?.breakBefore)&&segments.push([]),segments[segments.length-1].push(points[index]);const paths=segments.map(segment=>this.linePath(segment)),path=paths.join(" "),appearance=normalizeAppearance(this.appearance),showFill=this.mark!=="bar"&&appearance!=="line"&&points.length>0,fillPath=segments.map((segment,index)=>{const first=segment[0],last=segment[segment.length-1];return`${paths[index]} L${last[0]},${VIEW} L${first[0]},${VIEW} Z`}).join(" ");return html`<svg
|
|
8
8
|
part="sparkline base"
|
|
9
9
|
viewBox="0 0 ${VIEW} ${VIEW}"
|
|
10
10
|
preserveAspectRatio="none"
|
|
@@ -25,4 +25,4 @@ import{__decorate}from"tslib";import{html,nothing,svg}from"lit";import{property}
|
|
|
25
25
|
></path>`:nothing}
|
|
26
26
|
${path?svg`<path part="line" d=${path}></path>`:nothing}
|
|
27
27
|
`}
|
|
28
|
-
</svg>`}}__decorate([property({reflect:!0})],LyraSparkline.prototype,"appearance",void 0),__decorate([property({reflect:!0})],LyraSparkline.prototype,"curve",void 0),__decorate([property()],LyraSparkline.prototype,"data",void 0),__decorate([property()],LyraSparkline.prototype,"label",void 0),__decorate([property({reflect:!0})],LyraSparkline.prototype,"trend",void 0),__decorate([property({attribute:"aria-label"})],LyraSparkline.prototype,"accessibleLabel",void 0),__decorate([property({attribute:!1})],LyraSparkline.prototype,"values",void 0),__decorate([property({reflect:!0})],LyraSparkline.prototype,"mark",null),__decorate([property({type:Number})],LyraSparkline.prototype,"min",void 0),__decorate([property({type:Number})],LyraSparkline.prototype,"max",void 0);export{LyraSparkline};
|
|
28
|
+
</svg>`}}__decorate([property({reflect:!0})],LyraSparkline.prototype,"appearance",void 0),__decorate([property({reflect:!0})],LyraSparkline.prototype,"curve",void 0),__decorate([property()],LyraSparkline.prototype,"data",void 0),__decorate([property()],LyraSparkline.prototype,"label",void 0),__decorate([property({reflect:!0})],LyraSparkline.prototype,"trend",void 0),__decorate([property({attribute:"aria-label"})],LyraSparkline.prototype,"accessibleLabel",void 0),__decorate([property({attribute:!1})],LyraSparkline.prototype,"values",void 0),__decorate([property({reflect:!0})],LyraSparkline.prototype,"mark",null),__decorate([property({type:Number})],LyraSparkline.prototype,"min",void 0),__decorate([property({type:Number})],LyraSparkline.prototype,"max",void 0),__decorate([property({attribute:!1})],LyraSparkline.prototype,"preparedData",null);export{LyraSparkline};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{css}from"lit";const styles=css`:host{inline-size:auto;min-inline-size:0;max-inline-size:100%;block-size:var(--lr-size-1em);aspect-ratio:4;vertical-align:middle;--_lr-sparkline-line-color:var(--lr-color-brand);--_lr-sparkline-fill-color:var(--lr-color-brand-quiet);display:inline-block}:host([trend=positive]){--_lr-sparkline-line-color:var(--lr-color-success);--_lr-sparkline-fill-color:var(--lr-color-success-quiet)}:host([trend=negative]){--_lr-sparkline-line-color:var(--lr-color-danger);--_lr-sparkline-fill-color:var(--lr-color-danger-quiet)}:host([trend=neutral]){--_lr-sparkline-line-color:var(--lr-color-text-quiet);--_lr-sparkline-fill-color:var(--lr-color-surface-raised)}svg{block-size:100%;inline-size:100%;display:block;overflow:hidden}[part~=line]{fill:none;stroke:var(--line-color,var(--_lr-sparkline-line-color));stroke-width:var(--line-width,var(--lr-border-width-medium));stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}[part~=fill]{fill:var(--fill-color,var(--_lr-sparkline-fill-color));stroke:none}.gradient-start{stop-color:var(--fill-color,var(--_lr-sparkline-fill-color));stop-opacity:var(--lr-opacity-muted)}.gradient-end{stop-color:transparent}[part=bar]{fill:var(--fill-color,var(--_lr-sparkline-fill-color))}`;export{styles};
|
|
1
|
+
import{css}from"lit";const styles=css`:host{inline-size:auto;min-inline-size:0;max-inline-size:100%;block-size:var(--lr-size-1em);aspect-ratio:4;vertical-align:middle;--_lr-sparkline-line-color:var(--lr-color-brand);--_lr-sparkline-fill-color:var(--lr-color-brand-quiet);display:inline-block}:host([trend=positive]){--_lr-sparkline-line-color:var(--lr-color-success);--_lr-sparkline-fill-color:var(--lr-color-success-quiet)}:host([trend=negative]){--_lr-sparkline-line-color:var(--lr-color-danger);--_lr-sparkline-fill-color:var(--lr-color-danger-quiet)}:host([trend=neutral]){--_lr-sparkline-line-color:var(--lr-color-text-quiet);--_lr-sparkline-fill-color:var(--lr-color-surface-raised)}[part=status]{color:var(--lr-color-text);font:inherit;overflow-wrap:anywhere;display:block}svg{block-size:100%;inline-size:100%;display:block;overflow:hidden}[part~=line]{fill:none;stroke:var(--line-color,var(--_lr-sparkline-line-color));stroke-width:var(--line-width,var(--lr-border-width-medium));stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}[part~=fill]{fill:var(--fill-color,var(--_lr-sparkline-fill-color));stroke:none}.gradient-start{stop-color:var(--fill-color,var(--_lr-sparkline-fill-color));stop-opacity:var(--lr-opacity-muted)}.gradient-end{stop-color:transparent}[part=bar]{fill:var(--fill-color,var(--_lr-sparkline-fill-color))}`;export{styles};
|
|
@@ -323,7 +323,7 @@ export interface LyraTableEventMap<T=unknown,K extends string|number=string|numb
|
|
|
323
323
|
* @csspart pagination-page-input - The compact page-jump input.
|
|
324
324
|
* @csspart pagination-page-count - The compact total page count after the input.
|
|
325
325
|
* @csspart pagination-button - Every page, ellipsis and navigation control of the nested pager.
|
|
326
|
-
* @csspart row-limit - Localized notice when the assigned row collection exceeds
|
|
326
|
+
* @csspart row-limit - Localized notice when the assigned row collection exceeds `maxRows`.
|
|
327
327
|
* @csspart empty - The built-in `<lr-empty>` host, in all three empty states (no columns
|
|
328
328
|
* configured, no rows at all, and filtered/paginated down to zero rows). The two data-empty
|
|
329
329
|
* states render it as the `empty` slot's fallback, so it disappears once that slot is filled.
|
|
@@ -433,13 +433,17 @@ export declare class LyraTable<T=unknown,K extends string|number=string|number>e
|
|
|
433
433
|
* positions. Blank keys and later duplicate keys are omitted (first valid occurrence wins)
|
|
434
434
|
* before any header, cell, sort, focus, or event path. Column objects and callbacks retain their
|
|
435
435
|
* identities; reassign the collection to update. */
|
|
436
|
-
get columns():readonly TableColumn<T>[];set columns(value:readonly TableColumn<T>[]);private
|
|
437
|
-
/**
|
|
436
|
+
get columns():readonly TableColumn<T>[];set columns(value:readonly TableColumn<T>[]);private _maxRows;
|
|
437
|
+
/** Maximum admitted rows and controlled keys. Defaults to 10,000; bounded to 1..100,000.
|
|
438
|
+
* Set before assigning rows. Raising after admission recovers the original input only while
|
|
439
|
+
* its caller still retains it; otherwise assign a new collection to supply additional rows. */
|
|
440
|
+
get maxRows():number;set maxRows(value:number);private rowSource?;private rowSourceLength;private _rows;
|
|
441
|
+
/** Clone-owned readonly row sequence, bounded to the first `maxRows` rows (10,000 by default). Row objects are retained
|
|
438
442
|
* here; the rendered model applies `rowKey` as one unique nonempty first-wins identity
|
|
439
443
|
* projection before filtering, counts, pagination, focus, actions, and events. Reassign the
|
|
440
444
|
* collection to update. */
|
|
441
|
-
get rows():readonly T[];set rows(value:readonly T[]);private _rowsTruncated;
|
|
442
|
-
/** Whether
|
|
445
|
+
get rows():readonly T[];set rows(value:readonly T[]);private admitRows;private _rowsTruncated;
|
|
446
|
+
/** Whether row admission omitted source rows; the rest are not shown,
|
|
443
447
|
* counted, paged or exported. */
|
|
444
448
|
get rowsTruncated():boolean;private _layout;get layout():'auto'|'fixed';set layout(next:'auto'|'fixed');sortKey:string;sortDir:TableSortDirection;
|
|
445
449
|
/** `'active'` preserves the active-column chevron alone. `'all'` also reserves the same icon
|
|
@@ -712,19 +716,19 @@ priorityColumnsVisible:boolean;
|
|
|
712
716
|
* `.priorityColumnsVisible=${...}` binding) -- including a binding that pins it to `false`, its
|
|
713
717
|
* own default. The same "explicit beats persisted" guarantee as `lr-app-rail`'s and
|
|
714
718
|
* `lr-widget`'s `storage-key` restores, which share this one's write-tracking mechanism. */
|
|
715
|
-
storageKey?:string;private get storageFullKey();private persistReady;private readonly announcements;private firstUpdateAnnouncementsReady;private activeColKey;private activeRowKey;private editingCell;private focusedEditorCell;private editorHadFocusBeforeUpdate;private rovingFocusSnapshot;private _resizedColumnWidths;private readonly resizeWriteGuard;private get resizedColumnWidths();private set resizedColumnWidths(value);private resizeState?;private readonly resizePointer;private rowsByKey;private rowsLocale?;private columnsByKey;private resizeObserver?;private layoutFrame;private observedBase?;private observedTable?;private readonly observedHeaders;private readonly priorityTierNaturalWidth;private alwaysVisibleNaturalWidth;private readonly priorityTierHiddenAllocation;private readonly priorityTierRevealAllocation;private parsePixelLength;
|
|
719
|
+
storageKey?:string;private get storageFullKey();private persistReady;private readonly announcements;private firstUpdateAnnouncementsReady;private _activeColKey;private get activeColKey();private set activeColKey(value);private _activeRowKey;private get activeRowKey();private set activeRowKey(value);private patchRovingTabStop;private editingCell;private focusedEditorCell;private editorHadFocusBeforeUpdate;private rovingFocusSnapshot;private _resizedColumnWidths;private readonly resizeWriteGuard;private get resizedColumnWidths();private set resizedColumnWidths(value);private resizeState?;private readonly resizePointer;private rowsByKey;private rowsLocale?;private columnsByKey;private resizeObserver?;private layoutFrame;private observedBase?;private observedTable?;private readonly observedHeaders;private readonly priorityTierNaturalWidth;private alwaysVisibleNaturalWidth;private readonly priorityTierHiddenAllocation;private readonly priorityTierRevealAllocation;private parsePixelLength;
|
|
716
720
|
/** The themed floor a column may be dragged/keyed down to, in used pixels. `rem`/`em` resolve
|
|
717
721
|
* against the live root/own font size through the shared `resolveCssTokenLength()` -- a hardcoded
|
|
718
722
|
* `* 16` would pick the wrong floor on a page whose root font-size isn't the browser default.
|
|
719
723
|
* CSS math resolves in the host's theme scope. A token with no used pixel length here (a bare `%` with no
|
|
720
724
|
* base) falls back to DEFAULT_RESIZE_MIN_WIDTH_PX rather than being read as raw pixels. */
|
|
721
|
-
private themedResizeMinWidth?;private minimumResizeWidth;private resolveThemedResizeMinWidth;private maximumResizeWidth;private currentResizeWidth;private resizeValueText;private resizeColumnTo;private renderedColumnWidth;private onResizePointerDown;private onResizePointerMove;private onResizeKeyDown;private renderResizeHandle;private syncResizeHandleValues;private onResizePointerEnd;private rollbackResizePreview;private cancelResizeGesture;private scheduleLayoutSync;protected firstUpdated(changed:PropertyValues):void;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;private localizedOverride;private loadingText;private loadingMoreText;private onLoadMore;private observeBase;private observeTable;private syncAutoScrollMode;private observeHeaders;private priorityTierHeaders;private recomputeHiddenPriorityColumns;private settlePriorityTier;private rehomeFocusedColumn;private keyOf;private cachedCanonicalRowEntries;private canonicalRowEntriesInputs;private canonicalRowEntries;private cachedMatchingEntries;private matchingEntriesInputs;private matchingEntries;private get normalizedPageSize();private get effectiveSkeletonRows();private get matchingTotalItems();private get serverUnknownTotal();private get pageCount();private get appliedPage();private cachedSortedEntries;private sortedEntriesInputs;private sortedEntries;private renderedEntries;
|
|
725
|
+
private themedResizeMinWidth?;private minimumResizeWidth;private resolveThemedResizeMinWidth;private maximumResizeWidth;private currentResizeWidth;private resizeValueText;private resizeColumnTo;private renderedColumnWidth;private onResizePointerDown;private onResizePointerMove;private onResizeKeyDown;private renderResizeHandle;private syncResizeHandleValues;private onResizePointerEnd;private rollbackResizePreview;private cancelResizeGesture;private syncLayoutGeometry;private scheduleLayoutSync;protected firstUpdated(changed:PropertyValues):void;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;private localizedOverride;private loadingText;private loadingMoreText;private onLoadMore;private observeBase;private observeTable;private syncAutoScrollMode;private observeHeaders;private priorityTierHeaders;private recomputeHiddenPriorityColumns;private settlePriorityTier;private rehomeFocusedColumn;private keyOf;private cachedCanonicalRowEntries;private canonicalRowEntriesInputs;private canonicalRowEntries;private cachedMatchingEntries;private matchingEntriesInputs;private matchingEntries;private get normalizedPageSize();private get effectiveSkeletonRows();private get matchingTotalItems();private get serverUnknownTotal();private get pageCount();private get appliedPage();private cachedSortedEntries;private sortedEntriesInputs;private sortedEntries;private sortedCanonicalEntries;private pageEntriesMemo?;private renderedEntries;private readonly publicRowsMemo;private publicRows;private aggregateRows?;private aggregateColumns?;private aggregateLocale?;private readonly aggregateValues;private aggregate;
|
|
722
726
|
/** `rows` after filtering and (client-mode) sorting, ignoring pagination -- the same set
|
|
723
727
|
* `columns[].footer(rows)`/`grandTotal(rows)` and the heat-tint domain already compute over.
|
|
724
728
|
* Lets a consumer that needs "what the grid currently shows" (e.g. exporting the visible rows)
|
|
725
729
|
* read this instead of re-implementing filtering/sorting itself. Reads `sortedEntries()`'s
|
|
726
730
|
* existing memoized cache, so an unrelated update (a roving-tabindex move, an inline-editor
|
|
727
|
-
* open, ...) costs nothing extra here.
|
|
731
|
+
* open, ...) costs nothing extra here. Returns the same frozen array until its inputs change: mutating what this returns
|
|
728
732
|
* cannot reach or corrupt the table's own internal state. */
|
|
729
733
|
get viewRows():readonly T[];
|
|
730
734
|
/** `viewRows` sliced to the page currently rendered in `<tbody>` -- exactly the rows on screen
|
|
@@ -751,7 +755,7 @@ private heatDomainCache?;private computeHeatDomain;private deriveHeatDomain;priv
|
|
|
751
755
|
* when `hasSticky` is true (opt-in) and simply recomputes on every
|
|
752
756
|
* update; column widths are measured per update so the current layout
|
|
753
757
|
* reflects the rendered columns. */
|
|
754
|
-
protected updated(changed:PropertyValues):void;private restoreRovingFocus;private activateColumn;private activateRow;private get hasAlwaysOnEditors();private editorValue;private startEditing;private commitEdit;private editorElementFor;private onTableFocusIn;private restoreAlwaysOnEditorFocus;private onEditorKeyDown;private onTableDoubleClick;private activateExpandToggle;
|
|
758
|
+
protected updated(changed:PropertyValues):void;private restoreRovingFocus;private activateColumn;private commitSelectedKeys;private activateRow;private get hasAlwaysOnEditors();private editorValue;private startEditing;private commitEdit;private editorElementFor;private onTableFocusIn;private restoreAlwaysOnEditorFocus;private onEditorKeyDown;private onTableDoubleClick;private activateExpandToggle;
|
|
755
759
|
/** The rendered `<tr>` for one row key, or `null` when that row is not in the current render
|
|
756
760
|
* output (filtered out, paginated away, or never present). Public counterpart of the
|
|
757
761
|
* `data-row-key` attribute the row carries: the attribute's value is a type-tagged encoding
|
|
@@ -784,7 +788,7 @@ editCell(rowKey:K,columnKey:string):void;
|
|
|
784
788
|
* exactly like `data-row-key`, and left off the data-row attribute so every existing
|
|
785
789
|
* `[data-row-key]` row query keeps resolving one element per row). Same `updateComplete`
|
|
786
790
|
* contract as {@link rowElement}. */
|
|
787
|
-
expandedContentElement(rowKey:K):HTMLElement|null;private rowElementForToken;private cellElementForToken;private visibleHeaders;private focusHeader;private focusRow;private toggleColumns;private onTableClick;private onTableKeyDown;private onHeaderKeyDown;private editableCellFor;private editableCellsInRow;private onRowKeyDown;private onRowLateralKeyDown;
|
|
791
|
+
expandedContentElement(rowKey:K):HTMLElement|null;private rowElementForToken;private cellElementForToken;private visibleHeaders;private focusHeader;private focusRow;private toggleColumns;private onExpandToggleClick;private onTableClick;private onTableKeyDown;private onHeaderKeyDown;private editableCellFor;private editableCellsInRow;private onRowKeyDown;private onRowLateralKeyDown;
|
|
788
792
|
/** One body cell's inline editor.
|
|
789
793
|
*
|
|
790
794
|
* For `editType: 'text'`/`'number'`, the persistent (`editTrigger: 'always'`) and double-click
|