@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{setNativeRangeText,nativeAutocorrectAttribute}from"../../../internal/native-text-control.js";import{collectionSupport}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property,query,state}from"lit/decorators.js";import{ifDefined}from"lit/directives/if-defined.js";import{repeat}from"lit/directives/repeat.js";import{autocorrectConverter,normalizeAutocorrect,trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LyraElement}from"../../../internal/lyra-element.js";import{lengthLimitConverter}from"../../../internal/length-constraints.js";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import{SlotPresenceController}from"../../../internal/slot-presence-controller.js";import{deepActiveElementIn}from"../../../internal/active-element.js";import{isHtmlElement}from"../../../internal/dom-guards.js";import{normalizeCatalog}from"../../../internal/catalog-picker.js";import{composedContains}from"../../../internal/overlay-manager.js";import{canonicalIdentityList,firstByRetrievalIdentity as firstByPromptIdentity}from"../../retrieval/retrieval-identity.js";import{guard}from"lit/directives/guard.js";import{acquireResolvedAriaRelationship}from"../../../internal/aria-controls.js";import{normalizeChatComposerStatus}from"../chat-composer/chat-composer.class.js";import{styles}from"./prompt-input.styles.js";import{LYRA_DEFAULT_promptInputAttachments,LYRA_DEFAULT_promptInputControls,LYRA_DEFAULT_promptInputLabel,LYRA_DEFAULT_promptInputSources}from"../../../internal/default-strings/conversation.generated.js";import{LYRA_DEFAULT_fieldRequired}from"../../../internal/default-strings/shared.generated.js";class LyraPromptInput extends LyraElement{constructor(){super(...arguments),this.suggestionCaretGeneration=0,this._value="",this.statusValue="idle",this.placeholder="",this.disabled=!1,this.readOnly=!1,this.withoutEnterSubmit=!1,this.submitDisabled=!1,this.withoutStop=!1,this.frame="card",this.actionsLayout="inline",this.minRows=1,this.maxRows=8,this.spellcheck=!0,this.autocapitalize="",this.autocorrectValue=!0,this.wrap="soft",this.autocomplete="",this.inputMode="",this.enterKeyHint="",this.attachments=[],this.attachmentCapabilities=["files","image","audio"],this.mentionItems=[],this.commandItems=[],this.model="",this.voice="",this.sources=[],this.selectedSourceIds=[],this.queue=[],this.accessibleLabel=null,this.activeSuggestion=null,this.slotPresence=new SlotPresenceController(this),this.suggestionNavigationGeneration=0,this.syncDescription=()=>{const target=this.composer?.input;this.isConnected&&target&&!this.descriptionLease&&(this.descriptionLease=acquireResolvedAriaRelationship(this,target,"aria-describedby"))},this.onCompositeKeyDown=event=>{event.composedPath()[0]===this.composer?.input&&this.onKeyDown(event)},this.onCompositeFocusOut=event=>{const popover=this.suggestionPopover;if(!popover||!this.activeSuggestion||!popover.open)return;const relatedTarget=isHtmlElement(event.relatedTarget)?event.relatedTarget:null;this.suggestionFocusIsOwned(popover,relatedTarget)||(this.suggestionNavigationGeneration+=1);const generation=this.suggestionNavigationGeneration;queueMicrotask(()=>{if(!this.isConnected||generation!==this.suggestionNavigationGeneration)return;const currentPopover=this.suggestionPopover;(!currentPopover||!this.suggestionFocusIsOwned(currentPopover))&&this.closeSuggestions()})},this.onNativeInput=event=>{if(this.disabled||this.readOnly||!this.composer||!event.composedPath().includes(this.composer)){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeChange=event=>{if(this.disabled||this.readOnly||!this.composer||!event.composedPath().includes(this.composer)){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeFocus=event=>{if(event.target!==this.composer){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeBlur=event=>{if(event.target!==this.composer){event.stopPropagation();return}relayNativeEvent(this,event)},this.firstByIdentity=new WeakMap}static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,promptInputAttachments:LYRA_DEFAULT_promptInputAttachments,promptInputControls:LYRA_DEFAULT_promptInputControls,promptInputLabel:LYRA_DEFAULT_promptInputLabel,promptInputSources:LYRA_DEFAULT_promptInputSources}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["attachments","attachmentCapabilities","mentionItems","commandItems","modelCatalog","voiceCatalog","sources","selectedSourceIds","queue"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-attachments-add","lr-sources-change","lr-queue-change","lr-send-now"])}static{this.identityEventDetailProperties=Object.freeze({"lr-send-now":Object.freeze(["item"])})}static{this.identityEventDetailCollectionItems=Object.freeze({"lr-queue-change":Object.freeze(["items"])})}get value(){return this._value}set value(next){if(next===this._value)return;const old=this._value;this._value=next,this.suggestionCaretGeneration+=1,this.requestUpdate("value",old)}get status(){return this.statusValue}set status(value){const previous=this.statusValue;this.statusValue=normalizeChatComposerStatus(value),this.requestUpdate("status",previous)}get autocorrect(){return this.autocorrectValue}set autocorrect(next){this.autocorrectValue=normalizeAutocorrect(next),this.requestUpdate()}focus(options){this.composer?.focus(options)}blur(){this.composer?.blur()}click(){this.disabled||this.composer?.click()}get input(){return this.composer?.input??null}get selectionStart(){return this.composer?.selectionStart??null}set selectionStart(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionStart=value)}get selectionEnd(){return this.composer?.selectionEnd??null}set selectionEnd(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionEnd=value)}get selectionDirection(){return this.composer?.selectionDirection??null}set selectionDirection(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionDirection=value)}select(){this.suggestionCaretGeneration+=1,this.composer?.select()}setSelectionRange(start,end,direction){this.suggestionCaretGeneration+=1,this.composer?.setSelectionRange(start,end,direction)}setRangeText(replacement,start,end,selectMode){const composer=this.composer;composer&&(setNativeRangeText(composer,replacement,start,end,selectMode),this.value=composer.value)}willUpdate(changed){super.willUpdate(changed);let invalidate=changed.has("mentionItems")||changed.has("commandItems")||changed.has("disabled")||changed.has("readOnly");if(changed.has("value")){const internal=this.pendingSuggestionValue===this.value;this.pendingSuggestionValue=void 0,invalidate||=!internal}invalidate&&(this.suggestionNavigationGeneration+=1,this.activeSuggestion=null,this.suggestionAnchor=void 0)}connectedCallback(){super.connectedCallback(),this.addEventListener("keydown",this.onCompositeKeyDown,!0),this.hasUpdated&&this.syncDescription()}disconnectedCallback(){this.removeEventListener("keydown",this.onCompositeKeyDown,!0),this.suggestionCaretGeneration+=1,this.closeSuggestions(),this.descriptionLease?.release(),this.descriptionLease=void 0,super.disconnectedCallback()}firstUpdated(changed){super.firstUpdated(changed),this.composer?.updateComplete.then(this.syncDescription)}updated(_changed){super.updated(_changed);const popover=this.suggestionPopover;popover&&this.suggestionAnchor&&(popover.anchor=this.suggestionAnchor)}suggestions(){return this.activeSuggestion?.trigger==="/"?this.commandItems:this.mentionItems}detectSuggestion(value){const caret=this.composer?.selectionStart??value.length,prefix=value.slice(0,caret),match=/(?:^|\s)([@/])([^\s@/]*)$/.exec(prefix);if(!match||match[1]!=="@"&&match[1]!=="/"){this.activeSuggestion=null;return}const start=caret-match[2].length-1,items=match[1]==="@"?this.mentionItems:this.commandItems;this.activeSuggestion=items.length?{trigger:match[1],start,query:match[2]??""}:null}onInput(event){if(event.stopPropagation(),this.disabled||this.readOnly)return;const composer=event.currentTarget;this.suggestionAnchor=composer?.input??this.composer?.input??void 0,this.pendingSuggestionValue=event.detail.value,this.value=event.detail.value,this.detectSuggestion(this.value),this.emit("lr-input",{value:this.value})}onChange(event){event.stopPropagation(),!(this.disabled||this.readOnly)&&(this.value=event.detail.value,this.emit("lr-change",{value:this.value}))}onSubmit(event){event.stopPropagation(),!this.disabled&&this.emit("lr-submit",event.detail)}onStop(event){event.stopPropagation(),!this.disabled&&this.emit("lr-stop",null)}onKeyDown(event){if(event.defaultPrevented)return;const popover=this.suggestionPopover;if(!(this.disabled||this.readOnly||!this.activeSuggestion||!popover?.open)&&popover.handleKeyDown(event)){const shouldMoveFocus=event.key==="ArrowDown"||event.key==="ArrowUp",generation=++this.suggestionNavigationGeneration;popover.updateComplete.then(async()=>{shouldMoveFocus&&generation===this.suggestionNavigationGeneration&&this.isConnected&&!this.disabled&&!this.readOnly&&this.suggestionPopover===popover&&this.activeSuggestion&&popover.open&&this.suggestionFocusIsOwned(popover)&&await popover.focusActiveOption({ownsFocus:()=>generation===this.suggestionNavigationGeneration&&this.isConnected&&!this.disabled&&!this.readOnly&&this.suggestionPopover===popover&&this.activeSuggestion!==null&&popover.open&&this.suggestionFocusIsOwned(popover)})})}}suggestionFocusIsOwned(popover,focused=deepActiveElementIn(this.ownerDocument)){return focused===this.composer?.input||focused===this.composer||focused!==null&&composedContains(popover,focused)}closeSuggestions(){this.suggestionNavigationGeneration+=1,this.activeSuggestion=null,this.suggestionAnchor=void 0}onSuggestionSelect(event){if(event.stopPropagation(),this.disabled||this.readOnly)return;const active=this.activeSuggestion;if(!active)return;const occurrence=this.suggestions()[event.detail.index];if(!occurrence||occurrence.suggestionId!==event.detail.suggestionId)return;const item=occurrence,composer=this.composer,caret=composer?.selectionStart??this.value.length,inserted=`${active.trigger}${item?.insertText??event.detail.label} `;this.value=this.value.slice(0,active.start)+inserted+this.value.slice(caret);const caretGeneration=this.suggestionCaretGeneration,nextCaret=active.start+inserted.length;this.closeSuggestions(),this.emit("lr-input",{value:this.value}),this.emit("lr-mention-select",{suggestionId:event.detail.suggestionId,index:event.detail.index,label:event.detail.label,trigger:active.trigger}),this.updateComplete.then(()=>{caretGeneration===this.suggestionCaretGeneration&&this.isConnected&&this.composer===composer&&composer?.setSelectionRange(nextCaret,nextCaret)})}onFiles(event){event.stopPropagation(),!this.disabled&&this.emit("lr-attachments-add",event.detail)}get effectiveAttachments(){const seen=new Set;return this.attachments.filter(attachment=>{const id=attachment?.attachmentId;return typeof id!="string"||id.trim()===""||seen.has(id)?!1:(seen.add(id),!0)})}firstById(values,identity){let retained=this.firstByIdentity.get(values);return retained||this.firstByIdentity.set(values,retained=firstByPromptIdentity(values,identity)),retained}get effectiveSources(){return this.firstById(this.sources,source=>source.id)}get effectiveSelectedSourceIds(){return canonicalIdentityList(this.selectedSourceIds)}get effectiveQueue(){return this.firstById(this.queue,item=>item.id)}renderDefaultAttachmentTrigger(){return html`<lr-attachment-trigger multiple
|
|
1
|
+
import{__decorate}from"tslib";import{setNativeRangeText,nativeAutocorrectAttribute}from"../../../internal/native-text-control.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{collectionSupport,publicCollectionTruncation}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property,query,state}from"lit/decorators.js";import{ifDefined}from"lit/directives/if-defined.js";import{repeat}from"lit/directives/repeat.js";import{autocorrectConverter,normalizeAutocorrect,trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LyraElement}from"../../../internal/lyra-element.js";import{lengthLimitConverter}from"../../../internal/length-constraints.js";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import{SlotPresenceController}from"../../../internal/slot-presence-controller.js";import{deepActiveElementIn}from"../../../internal/active-element.js";import{isHtmlElement}from"../../../internal/dom-guards.js";import{normalizeCatalog}from"../../../internal/catalog-picker.js";import{composedContains}from"../../../internal/overlay-manager.js";import{canonicalIdentityList,firstByRetrievalIdentity as firstByPromptIdentity}from"../../retrieval/retrieval-identity.js";import{guard}from"lit/directives/guard.js";import{acquireResolvedAriaRelationship}from"../../../internal/aria-controls.js";import{normalizeChatComposerStatus}from"../chat-composer/chat-composer.class.js";import{styles}from"./prompt-input.styles.js";import{LYRA_DEFAULT_promptInputAttachments,LYRA_DEFAULT_promptInputControls,LYRA_DEFAULT_promptInputInputLimit,LYRA_DEFAULT_promptInputLabel,LYRA_DEFAULT_promptInputSources}from"../../../internal/default-strings/conversation.generated.js";import{LYRA_DEFAULT_fieldRequired}from"../../../internal/default-strings/shared.generated.js";class LyraPromptInput extends LyraElement{constructor(){super(...arguments),this.inputLimitAnnouncements=new AnnouncementSinkController(this),this.suggestionCaretGeneration=0,this._value="",this.statusValue="idle",this.placeholder="",this.disabled=!1,this.readOnly=!1,this.withoutEnterSubmit=!1,this.submitDisabled=!1,this.withoutStop=!1,this.frame="card",this.actionsLayout="inline",this.minRows=1,this.maxRows=8,this.spellcheck=!0,this.autocapitalize="",this.autocorrectValue=!0,this.wrap="soft",this.autocomplete="",this.inputMode="",this.enterKeyHint="",this.attachments=[],this.attachmentCapabilities=["files","image","audio"],this.mentionItems=[],this.commandItems=[],this.model="",this.voice="",this.sources=[],this.selectedSourceIds=[],this.queue=[],this.accessibleLabel=null,this.activeSuggestion=null,this.slotPresence=new SlotPresenceController(this),this.suggestionNavigationGeneration=0,this.syncDescription=()=>{const target=this.composer?.input;this.isConnected&&target&&!this.descriptionLease&&(this.descriptionLease=acquireResolvedAriaRelationship(this,target,"aria-describedby"))},this.onCompositeKeyDown=event=>{event.composedPath()[0]===this.composer?.input&&this.onKeyDown(event)},this.onCompositeFocusOut=event=>{const popover=this.suggestionPopover;if(!popover||!this.activeSuggestion||!popover.open)return;const relatedTarget=isHtmlElement(event.relatedTarget)?event.relatedTarget:null;this.suggestionFocusIsOwned(popover,relatedTarget)||(this.suggestionNavigationGeneration+=1);const generation=this.suggestionNavigationGeneration;queueMicrotask(()=>{if(!this.isConnected||generation!==this.suggestionNavigationGeneration)return;const currentPopover=this.suggestionPopover;(!currentPopover||!this.suggestionFocusIsOwned(currentPopover))&&this.closeSuggestions()})},this.onNativeInput=event=>{if(this.disabled||this.readOnly||!this.composer||!event.composedPath().includes(this.composer)){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeChange=event=>{if(this.disabled||this.readOnly||!this.composer||!event.composedPath().includes(this.composer)){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeFocus=event=>{if(event.target!==this.composer){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeBlur=event=>{if(event.target!==this.composer){event.stopPropagation();return}relayNativeEvent(this,event)},this.firstByIdentity=new WeakMap}static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,promptInputAttachments:LYRA_DEFAULT_promptInputAttachments,promptInputControls:LYRA_DEFAULT_promptInputControls,promptInputInputLimit:LYRA_DEFAULT_promptInputInputLimit,promptInputLabel:LYRA_DEFAULT_promptInputLabel,promptInputSources:LYRA_DEFAULT_promptInputSources}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["attachments","attachmentCapabilities","mentionItems","commandItems","modelCatalog","voiceCatalog","sources","selectedSourceIds","queue"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-attachments-add","lr-sources-change","lr-queue-change","lr-send-now"])}static{this.identityEventDetailProperties=Object.freeze({"lr-send-now":Object.freeze(["item"])})}static{this.identityEventDetailCollectionItems=Object.freeze({"lr-queue-change":Object.freeze(["items"])})}get inputLosses(){return["modelCatalog","voiceCatalog","mentionItems","commandItems"].map(name=>publicCollectionTruncation(this,name))}get inputLimitMessage(){return this.inputLosses.some(Boolean)?this.localize("promptInputInputLimit"):""}syncInputLimitAnnouncement(){this.inputLimitAnnouncements.transition("input-limit",this.inputLosses.map(loss=>loss?`${loss.source}:${loss.retained}:${loss.kept}`:"").join("|"),this.inputLimitMessage,"polite")}get value(){return this._value}set value(next){if(next===this._value)return;const old=this._value;this._value=next,this.suggestionCaretGeneration+=1,this.requestUpdate("value",old)}get status(){return this.statusValue}set status(value){const previous=this.statusValue;this.statusValue=normalizeChatComposerStatus(value),this.requestUpdate("status",previous)}get autocorrect(){return this.autocorrectValue}set autocorrect(next){this.autocorrectValue=normalizeAutocorrect(next),this.requestUpdate()}focus(options){this.composer?.focus(options)}blur(){this.composer?.blur()}click(){this.disabled||this.composer?.click()}get input(){return this.composer?.input??null}get selectionStart(){return this.composer?.selectionStart??null}set selectionStart(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionStart=value)}get selectionEnd(){return this.composer?.selectionEnd??null}set selectionEnd(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionEnd=value)}get selectionDirection(){return this.composer?.selectionDirection??null}set selectionDirection(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionDirection=value)}select(){this.suggestionCaretGeneration+=1,this.composer?.select()}setSelectionRange(start,end,direction){this.suggestionCaretGeneration+=1,this.composer?.setSelectionRange(start,end,direction)}setRangeText(replacement,start,end,selectMode){const composer=this.composer;composer&&(setNativeRangeText(composer,replacement,start,end,selectMode),this.value=composer.value)}willUpdate(changed){super.willUpdate(changed);let invalidate=changed.has("mentionItems")||changed.has("commandItems")||changed.has("disabled")||changed.has("readOnly");if(changed.has("value")){const internal=this.pendingSuggestionValue===this.value;this.pendingSuggestionValue=void 0,invalidate||=!internal}invalidate&&(this.suggestionNavigationGeneration+=1,this.activeSuggestion=null,this.suggestionAnchor=void 0)}adoptedCallback(){super.adoptedCallback(),this.inputLimitAnnouncements.adopted()}connectedCallback(){super.connectedCallback(),this.addEventListener("keydown",this.onCompositeKeyDown,!0),this.hasUpdated&&(this.syncInputLimitAnnouncement(),this.syncDescription())}disconnectedCallback(){this.removeEventListener("keydown",this.onCompositeKeyDown,!0),this.suggestionCaretGeneration+=1,this.closeSuggestions(),this.descriptionLease?.release(),this.descriptionLease=void 0,super.disconnectedCallback()}firstUpdated(changed){super.firstUpdated(changed),this.composer?.updateComplete.then(this.syncDescription)}updated(_changed){super.updated(_changed),this.syncInputLimitAnnouncement();const popover=this.suggestionPopover;popover&&this.suggestionAnchor&&(popover.anchor=this.suggestionAnchor)}suggestions(){return this.activeSuggestion?.trigger==="/"?this.commandItems:this.mentionItems}detectSuggestion(value){const caret=this.composer?.selectionStart??value.length,prefix=value.slice(0,caret),match=/(?:^|\s)([@/])([^\s@/]*)$/.exec(prefix);if(!match||match[1]!=="@"&&match[1]!=="/"){this.activeSuggestion=null;return}const start=caret-match[2].length-1,items=match[1]==="@"?this.mentionItems:this.commandItems;this.activeSuggestion=items.length?{trigger:match[1],start,query:match[2]??""}:null}onInput(event){if(event.stopPropagation(),this.disabled||this.readOnly)return;const composer=event.currentTarget;this.suggestionAnchor=composer?.input??this.composer?.input??void 0,this.pendingSuggestionValue=event.detail.value,this.value=event.detail.value,this.detectSuggestion(this.value),this.emit("lr-input",{value:this.value})}onChange(event){event.stopPropagation(),!(this.disabled||this.readOnly)&&(this.value=event.detail.value,this.emit("lr-change",{value:this.value}))}onSubmit(event){event.stopPropagation(),!this.disabled&&this.emit("lr-submit",event.detail)}onStop(event){event.stopPropagation(),!this.disabled&&this.emit("lr-stop",null)}onKeyDown(event){if(event.defaultPrevented)return;const popover=this.suggestionPopover;if(!(this.disabled||this.readOnly||!this.activeSuggestion||!popover?.open)&&popover.handleKeyDown(event)){const shouldMoveFocus=event.key==="ArrowDown"||event.key==="ArrowUp",generation=++this.suggestionNavigationGeneration;popover.updateComplete.then(async()=>{shouldMoveFocus&&generation===this.suggestionNavigationGeneration&&this.isConnected&&!this.disabled&&!this.readOnly&&this.suggestionPopover===popover&&this.activeSuggestion&&popover.open&&this.suggestionFocusIsOwned(popover)&&await popover.focusActiveOption({ownsFocus:()=>generation===this.suggestionNavigationGeneration&&this.isConnected&&!this.disabled&&!this.readOnly&&this.suggestionPopover===popover&&this.activeSuggestion!==null&&popover.open&&this.suggestionFocusIsOwned(popover)})})}}suggestionFocusIsOwned(popover,focused=deepActiveElementIn(this.ownerDocument)){return focused===this.composer?.input||focused===this.composer||focused!==null&&composedContains(popover,focused)}closeSuggestions(){this.suggestionNavigationGeneration+=1,this.activeSuggestion=null,this.suggestionAnchor=void 0}onSuggestionSelect(event){if(event.stopPropagation(),this.disabled||this.readOnly)return;const active=this.activeSuggestion;if(!active)return;const occurrence=this.suggestions()[event.detail.index];if(!occurrence||occurrence.suggestionId!==event.detail.suggestionId)return;const item=occurrence,composer=this.composer,caret=composer?.selectionStart??this.value.length,inserted=`${active.trigger}${item?.insertText??event.detail.label} `;this.value=this.value.slice(0,active.start)+inserted+this.value.slice(caret);const caretGeneration=this.suggestionCaretGeneration,nextCaret=active.start+inserted.length;this.closeSuggestions(),this.emit("lr-input",{value:this.value}),this.emit("lr-mention-select",{suggestionId:event.detail.suggestionId,index:event.detail.index,label:event.detail.label,trigger:active.trigger}),this.updateComplete.then(()=>{caretGeneration===this.suggestionCaretGeneration&&this.isConnected&&this.composer===composer&&composer?.setSelectionRange(nextCaret,nextCaret)})}onFiles(event){event.stopPropagation(),!this.disabled&&this.emit("lr-attachments-add",event.detail)}get effectiveAttachments(){const seen=new Set;return this.attachments.filter(attachment=>{const id=attachment?.attachmentId;return typeof id!="string"||id.trim()===""||seen.has(id)?!1:(seen.add(id),!0)})}firstById(values,identity){let retained=this.firstByIdentity.get(values);return retained||this.firstByIdentity.set(values,retained=firstByPromptIdentity(values,identity)),retained}get effectiveSources(){return this.firstById(this.sources,source=>source.id)}get effectiveSelectedSourceIds(){return canonicalIdentityList(this.selectedSourceIds)}get effectiveQueue(){return this.firstById(this.queue,item=>item.id)}renderDefaultAttachmentTrigger(){return html`<lr-attachment-trigger multiple
|
|
2
2
|
.capabilities=${this.attachmentCapabilities}
|
|
3
3
|
.disabled=${this.disabled}
|
|
4
4
|
@lr-files=${this.onFiles}
|
|
@@ -69,6 +69,7 @@ import{__decorate}from"tslib";import{setNativeRangeText,nativeAutocorrectAttribu
|
|
|
69
69
|
@lr-send-now=${event=>this.reemit(event,"lr-send-now")}
|
|
70
70
|
></lr-prompt-queue>`:nothing}
|
|
71
71
|
<slot name="controls">${this.renderControls()}</slot>
|
|
72
|
+
${this.inputLimitMessage?html`<p part="limit">${this.inputLimitMessage}</p>`:nothing}
|
|
72
73
|
<lr-chat-composer
|
|
73
74
|
part="composer"
|
|
74
75
|
.spellcheck=${this.spellcheck}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{focusRing}from"../../../internal/interactive-control.styles.js";import{css}from"lit";import{compactContainerQuery}from"../../../internal/container-breakpoints.styles.js";const styles=css` :host { display: block; container-type: inline-size; contain-intrinsic-inline-size: var(--lr-size-20rem); } [part='base'] { display: flex; flex-direction: column; gap: var(--lr-space-s); min-inline-size: 0; } [part='controls'] { display: flex; flex-wrap: wrap; align-items: flex-start; gap: var(--lr-space-xs); } [part='controls'] > * { min-inline-size: min(100%, var(--lr-prompt-input-control-width, var(--lr-size-12rem))); flex: 1 1 var(--lr-prompt-input-control-width, var(--lr-size-12rem)); } [part='sources'] { inline-size: 100%; border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-radius); background: var(--lr-color-surface); } [part='sources-summary'] { display: flex; align-items: center; min-block-size: var(--lr-icon-button-size); padding: var(--lr-space-xs) var(--lr-space-s); text-align: start; cursor: pointer; transition: background-color var(--lr-transition-fast), color var(--lr-transition-fast); } [part='sources-summary']:hover { color: var(--lr-color-brand); } [part='sources-summary']:active { color: var(--lr-color-brand); background: color-mix(in oklab, var(--lr-color-surface), var(--lr-color-mix-partner) var(--lr-color-mix-active)); } [part='sources-summary']:focus-visible { ${focusRing} } [part='source-picker'] { padding: var(--lr-space-s); border-block-start: var(--lr-border-width-thin) solid var(--lr-color-border-subtle); } [part='chips'] { display: flex; flex-wrap: wrap; gap: var(--lr-space-xs); } [part='start'] { display: inline-flex; } @container ${compactContainerQuery} { [part='controls'] { flex-direction: column; } [part='controls'] > * { inline-size: 100%; flex-basis: auto; } } `;export{styles};
|
|
1
|
+
import{focusRing}from"../../../internal/interactive-control.styles.js";import{css}from"lit";import{compactContainerQuery}from"../../../internal/container-breakpoints.styles.js";const styles=css` :host { display: block; container-type: inline-size; contain-intrinsic-inline-size: var(--lr-size-20rem); } [part='base'] { display: flex; flex-direction: column; gap: var(--lr-space-s); min-inline-size: 0; } [part='controls'] { display: flex; flex-wrap: wrap; align-items: flex-start; gap: var(--lr-space-xs); } [part='controls'] > * { min-inline-size: min(100%, var(--lr-prompt-input-control-width, var(--lr-size-12rem))); flex: 1 1 var(--lr-prompt-input-control-width, var(--lr-size-12rem)); } [part='sources'] { inline-size: 100%; border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-radius); background: var(--lr-color-surface); } [part='sources-summary'] { display: flex; align-items: center; min-block-size: var(--lr-icon-button-size); padding: var(--lr-space-xs) var(--lr-space-s); text-align: start; cursor: pointer; transition: background-color var(--lr-transition-fast), color var(--lr-transition-fast); } [part='sources-summary']:hover { color: var(--lr-color-brand); } [part='sources-summary']:active { color: var(--lr-color-brand); background: color-mix(in oklab, var(--lr-color-surface), var(--lr-color-mix-partner) var(--lr-color-mix-active)); } [part='sources-summary']:focus-visible { ${focusRing} } [part='source-picker'] { padding: var(--lr-space-s); border-block-start: var(--lr-border-width-thin) solid var(--lr-color-border-subtle); } [part='chips'] { display: flex; flex-wrap: wrap; gap: var(--lr-space-xs); } [part='start'] { display: inline-flex; } @container ${compactContainerQuery} { [part='controls'] { flex-direction: column; } [part='controls'] > * { inline-size: 100%; flex-basis: auto; } } [part='limit'] { margin: 0; padding: var(--lr-space-xs) var(--lr-space-s); color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-sm); overflow-wrap: anywhere; } `;export{styles};
|
|
@@ -15,13 +15,21 @@ metadata?:Record<string,unknown>;}export type PromptQueueChangeReason='edit'|'re
|
|
|
15
15
|
* while a descriptor-safe projection copies the queue's display and proposal fields once; later
|
|
16
16
|
* rendering and events never reread the source row or its opaque metadata. Create a new collection
|
|
17
17
|
* and reassign it after changes; mutating an assigned array does not update the view.
|
|
18
|
+
* At most 10,000 outer positions and 10,000 attachment positions across the entire assignment
|
|
19
|
+
* are inspected. Internal pages keep every admitted prompt addressable, while each row previews
|
|
20
|
+
* at most 50 retained attachment names. Change events still contain all canonical admitted items.
|
|
18
21
|
*
|
|
19
22
|
* @customElement lr-prompt-queue
|
|
20
23
|
* @event lr-queue-change - A proposed controlled queue update. `detail: { items, reason, itemId }`.
|
|
21
24
|
* @event lr-send-now - Immediate send was requested. `detail: { item }`.
|
|
22
25
|
* @csspart base - The queue wrapper.
|
|
23
26
|
* @csspart heading - The queue heading; omitted when the visible label is empty.
|
|
24
|
-
* @csspart list - The
|
|
27
|
+
* @csspart list - The current page of at most 20 admitted queued prompts.
|
|
28
|
+
* @csspart input-limit - The input-admission loss notice for prompts or attachments.
|
|
29
|
+
* @csspart attachment-limit - Retained attachment counts when a row's preview exceeds 50 names.
|
|
30
|
+
* @csspart pagination - Internal queue page controls.
|
|
31
|
+
* @csspart page-status - Localized current page and page count.
|
|
32
|
+
* @csspart page-button - One page navigation button.
|
|
25
33
|
* @csspart item - One queued prompt.
|
|
26
34
|
* @csspart value - Read-only prompt text while `readonly`.
|
|
27
35
|
* @csspart editor - A queued prompt editor.
|
|
@@ -51,4 +59,4 @@ readonly:boolean;disabled:boolean;
|
|
|
51
59
|
* own accessible name independently). */
|
|
52
60
|
label?:string;accessibleLabel:string|null;
|
|
53
61
|
/** Heading level of the visible label; `none` renders it as plain text. */
|
|
54
|
-
headingLevel:LyraHeadingLevel;private pendingRemovalFocus?;private readonly canonicalItemsBySource;private canonicalItemsFor;private cachedCanonicalItemsFor;private get effectiveItems();protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private emitChange;private edit;private removeItem;private move;private sendNow;private containNativeEvent;private renderItem;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-prompt-queue':LyraPromptQueue;}}
|
|
62
|
+
headingLevel:LyraHeadingLevel;private page;private readonly announcements;private readonly inputLossByItems;private readonly drafts;private pendingRemovalFocus?;private readonly canonicalItemsBySource;private canonicalItemsFor;private cachedCanonicalItemsFor;private get effectiveItems();protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;adoptedCallback():void;disconnectedCallback():void;private get inputTruncated();private changePage;private pageText;private renderPagination;private emitChange;private edit;private removeItem;private move;private sendNow;private containNativeEvent;private renderItem;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-prompt-queue':LyraPromptQueue;}}
|
|
@@ -1,17 +1,24 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{activeElementIn,shadowFocusTarget}from"../../../internal/active-element.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{resolveHeadingLevel}from"../../../internal/heading-level.js";import{styles}from"./prompt-queue.styles.js";import{LYRA_DEFAULT_promptInputAttachments,LYRA_DEFAULT_promptQueueActionLabel,LYRA_DEFAULT_promptQueueEmpty,LYRA_DEFAULT_promptQueueItemLabel,LYRA_DEFAULT_promptQueueLabel,LYRA_DEFAULT_promptQueueSendNow}from"../../../internal/default-strings/conversation.generated.js";import{LYRA_DEFAULT_attachmentUntitledFile,LYRA_DEFAULT_moveDown,LYRA_DEFAULT_moveUp,LYRA_DEFAULT_remove}from"../../../internal/default-strings/shared.generated.js";const MAX_PROJECTED_QUEUE_ITEMS=1e4,MAX_PROJECTED_QUEUE_ATTACHMENTS=1e4,EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS=Object.freeze([]);function descriptorValue(value,property2){return getOwnDataDescriptor(value,property2)}function valueOfDescriptor(descriptor){return descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR?void 0:descriptor.value}function projectPromptQueueAttachment(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const idDescriptor=descriptorValue(value,"id"),nameDescriptor=descriptorValue(value,"name"),mimeTypeDescriptor=descriptorValue(value,"mimeType"),uriDescriptor=descriptorValue(value,"uri"),versionDescriptor=descriptorValue(value,"version");if([idDescriptor,nameDescriptor,mimeTypeDescriptor,uriDescriptor,versionDescriptor].some(descriptor=>descriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return;const id=valueOfDescriptor(idDescriptor),name=valueOfDescriptor(nameDescriptor);if(typeof id!="string"||id.trim().length===0||typeof name!="string")return;const mimeType=valueOfDescriptor(mimeTypeDescriptor),uri=valueOfDescriptor(uriDescriptor),version=valueOfDescriptor(versionDescriptor);return Object.freeze({id,name,...typeof mimeType=="string"?{mimeType}:{},...typeof uri=="string"?{uri}:{},...typeof version=="string"?{version}:{}})}catch{return}}function projectPromptQueueAttachments(value){try{if(!Array.isArray(value))return;const lengthDescriptor=descriptorValue(value,"length");if(lengthDescriptor===MISSING_OWN_DATA_DESCRIPTOR||lengthDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof lengthDescriptor.value!="number"||!Number.isSafeInteger(lengthDescriptor.value)||lengthDescriptor.value<0)return;const attachments=[],length=Math.min(lengthDescriptor.value,MAX_PROJECTED_QUEUE_ATTACHMENTS);for(let index=0;index<length;index+=1){const descriptor=descriptorValue(value,String(index));if(descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR)continue;const attachment=projectPromptQueueAttachment(descriptor.value);attachment&&attachments.push(attachment)}return Object.freeze(attachments)}catch{return}}function projectPromptQueueItem(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const idDescriptor=descriptorValue(value,"id"),valueDescriptor=descriptorValue(value,"value"),attachmentsDescriptor=descriptorValue(value,"attachments"),createdAtDescriptor=descriptorValue(value,"createdAt"),metadataDescriptor=descriptorValue(value,"metadata");if([idDescriptor,valueDescriptor,attachmentsDescriptor,createdAtDescriptor,metadataDescriptor].some(descriptor=>descriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return;const id=valueOfDescriptor(idDescriptor),prompt=valueOfDescriptor(valueDescriptor);if(typeof id!="string"||id.trim().length===0||typeof prompt!="string")return;const attachmentsValue=valueOfDescriptor(attachmentsDescriptor),attachments=attachmentsDescriptor===MISSING_OWN_DATA_DESCRIPTOR||attachmentsValue===void 0?void 0:projectPromptQueueAttachments(attachmentsValue),createdAt=valueOfDescriptor(createdAtDescriptor),metadata=valueOfDescriptor(metadataDescriptor);return Object.freeze({source:value,id,value:prompt,...attachments===void 0?{}:{attachments},...typeof createdAt=="number"&&Number.isFinite(createdAt)?{createdAt}:{},...metadata!==void 0?{metadata}:{}})}catch{return}}function projectPromptQueueItems(value){try{if(!Array.isArray(value))return EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS;const lengthDescriptor=descriptorValue(value,"length");if(lengthDescriptor===MISSING_OWN_DATA_DESCRIPTOR||lengthDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof lengthDescriptor.value!="number"||!Number.isSafeInteger(lengthDescriptor.value)||lengthDescriptor.value<0)return EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS;const items=[],seen=new Set,length=Math.min(lengthDescriptor.value,MAX_PROJECTED_QUEUE_ITEMS);for(let index=0;index<length;index+=1){const descriptor=descriptorValue(value,String(index));if(descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR)continue;const item=projectPromptQueueItem(descriptor.value);!item||seen.has(item.id)||(seen.add(item.id),items.push(item))}return Object.freeze(items)}catch{return EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS}}function toDocumentRef(attachment){return Object.freeze({id:attachment.id,name:attachment.name,...attachment.mimeType===void 0?{}:{mimeType:attachment.mimeType},...attachment.uri===void 0?{}:{uri:attachment.uri},...attachment.version===void 0?{}:{version:attachment.version}})}function toPromptQueueItem(item,value=item.value){return Object.freeze({id:item.id,value,...item.attachments===void 0?{}:{attachments:Object.freeze(item.attachments.map(toDocumentRef))},...item.createdAt===void 0?{}:{createdAt:item.createdAt},...item.metadata===void 0?{}:{metadata:item.metadata}})}class LyraPromptQueue extends LyraElement{constructor(){super(...arguments),this.items=[],this.readonly=!1,this.disabled=!1,this.accessibleLabel=null,this.headingLevel="3",this.canonicalItemsBySource=new WeakMap,this.containNativeEvent=event=>{event.stopPropagation()}}static{this.defaultStrings={...super.defaultStrings,attachmentUntitledFile:LYRA_DEFAULT_attachmentUntitledFile,moveDown:LYRA_DEFAULT_moveDown,moveUp:LYRA_DEFAULT_moveUp,promptInputAttachments:LYRA_DEFAULT_promptInputAttachments,promptQueueActionLabel:LYRA_DEFAULT_promptQueueActionLabel,promptQueueEmpty:LYRA_DEFAULT_promptQueueEmpty,promptQueueItemLabel:LYRA_DEFAULT_promptQueueItemLabel,promptQueueLabel:LYRA_DEFAULT_promptQueueLabel,promptQueueSendNow:LYRA_DEFAULT_promptQueueSendNow,remove:LYRA_DEFAULT_remove}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["items"])}static{this.identityCollectionProperties=Object.freeze(["items"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-queue-change","lr-send-now"])}static{this.identityEventDetailProperties=Object.freeze({"lr-send-now":Object.freeze(["item"])})}static{this.identityEventDetailCollectionItems=Object.freeze({"lr-queue-change":Object.freeze(["items"])})}canonicalItemsFor(source){if(source===null||typeof source!="object"&&typeof source!="function")return EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS;const cached=this.canonicalItemsBySource.get(source);if(cached)return cached;const result=projectPromptQueueItems(source);return this.canonicalItemsBySource.set(source,result),result}cachedCanonicalItemsFor(source){return source!==null&&(typeof source=="object"||typeof source=="function")?this.canonicalItemsBySource.get(source)??EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS:EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS}get effectiveItems(){return this.canonicalItemsFor(this.items)}willUpdate(changed){if(super.willUpdate(changed),!changed.has("items")&&!changed.has("readonly")&&!changed.has("disabled"))return;const focusedControl=shadowFocusTarget(this),action=focusedControl?.getAttribute("data-action")??void 0,editorFocused=focusedControl?.getAttribute("part")==="editor";if(!action&&!editorFocused)return;const focusedItem=focusedControl?.closest("[data-id]"),focusedId=focusedItem?.dataset.id;if(!focusedId||!focusedControl)return;const previousItems=changed.has("items")?this.cachedCanonicalItemsFor(changed.get("items")):EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS,items=this.effectiveItems,previousIndex=previousItems.findIndex(item=>item.id===focusedId),index=items.findIndex(item=>item.id===focusedId),rowRemoved=changed.has("items")&&index<0,rowMoved=!!action&&changed.has("items")&&index>=0&&index!==previousIndex,editorRemoved=editorFocused&&changed.has("readonly")&&this.readonly,controlDisabled=changed.has("disabled")&&this.disabled;if(!rowRemoved&&!rowMoved&&!editorRemoved&&!controlDisabled)return;const target=rowRemoved?items[Math.min(Math.max(previousIndex,0),items.length-1)]:items.find(item=>item.id===focusedId),rowActions=focusedItem?.querySelectorAll("[data-action]")??[];this.pendingRemovalFocus={targetId:target?.id,action,actionIndex:action?[...rowActions].findIndex(candidate=>candidate===focusedControl):-1,origin:focusedControl}}updated(changed){super.updated(changed);const pending=this.pendingRemovalFocus;if(!pending)return;this.pendingRemovalFocus=void 0;const internalActive=shadowFocusTarget(this),documentActive=activeElementIn(this.ownerDocument);if(internalActive!==null&&internalActive!==pending.origin||documentActive!==null&&documentActive!==this&&documentActive!==this.ownerDocument.body)return;if(!pending.targetId){this.shadowRoot?.querySelector('[part="base"]')?.focus();return}const actions=[...[...this.shadowRoot?.querySelectorAll("[data-id]")??[]].find(item=>item.dataset.id===pending.targetId)?.querySelectorAll("[data-action]")??[]],isEnabled=candidate=>candidate.disabled!==!0&&candidate.getAttribute("aria-disabled")!=="true",equivalentAction=pending.action?actions.find(candidate=>candidate.dataset.action===pending.action&&isEnabled(candidate)):void 0;if(equivalentAction){equivalentAction.focus();return}const preferredIndex=pending.actionIndex>=0?pending.actionIndex:0;for(let distance=0;distance<actions.length;distance++){const before=actions[preferredIndex-distance];if(before&&isEnabled(before)){before.focus();return}const after=actions[preferredIndex+distance];if(after&&isEnabled(after)){after.focus();return}}this.shadowRoot?.querySelector('[part="base"]')?.focus()}emitChange(items,reason,itemId){this.disabled||this.emit("lr-queue-change",{items,reason,itemId})}edit(item,value){this.disabled||this.readonly||this.emitChange(this.effectiveItems.map(candidate=>toPromptQueueItem(candidate,candidate.id===item.id?value:candidate.value)),"edit",item.id)}removeItem(item){this.disabled||this.emitChange(this.effectiveItems.filter(candidate=>candidate.id!==item.id).map(candidate=>toPromptQueueItem(candidate)),"remove",item.id)}move(item,offset){if(this.disabled)return;const items=this.effectiveItems,index=items.findIndex(candidate=>candidate.id===item.id),target=index+offset;if(index<0||target<0||target>=items.length)return;const next=[...items],[moved]=next.splice(index,1);moved&&(next.splice(target,0,moved),this.emitChange(next.map(candidate=>toPromptQueueItem(candidate)),"reorder",item.id))}sendNow(item){this.disabled||this.emit("lr-send-now",{item:toPromptQueueItem(item)})}renderItem(item,index,itemCount){const formattedIndex=getNumberFormat(this.effectiveLocale).format(index+1),editorLabel=this.localize("promptQueueItemLabel",void 0,{index:formattedIndex}),actionLabel=action=>this.localize("promptQueueActionLabel",void 0,{action,index:formattedIndex});return html`<li part="item" data-id=${item.id}>
|
|
1
|
+
import{__decorate}from"tslib";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{collectionSupport,publicCollectionTruncation}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{activeElementIn,shadowFocusTarget}from"../../../internal/active-element.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{resolveHeadingLevel}from"../../../internal/heading-level.js";import{styles}from"./prompt-queue.styles.js";import{LYRA_DEFAULT_promptInputAttachments,LYRA_DEFAULT_promptQueueActionLabel,LYRA_DEFAULT_promptQueueAttachmentLimit,LYRA_DEFAULT_promptQueueEmpty,LYRA_DEFAULT_promptQueueInputLimit,LYRA_DEFAULT_promptQueueItemLabel,LYRA_DEFAULT_promptQueueLabel,LYRA_DEFAULT_promptQueueSendNow}from"../../../internal/default-strings/conversation.generated.js";import{LYRA_DEFAULT_attachmentUntitledFile,LYRA_DEFAULT_moveDown,LYRA_DEFAULT_moveUp,LYRA_DEFAULT_next,LYRA_DEFAULT_paginationApplied,LYRA_DEFAULT_paginationFirstPage,LYRA_DEFAULT_paginationLabel,LYRA_DEFAULT_paginationLastPage,LYRA_DEFAULT_previous,LYRA_DEFAULT_remove}from"../../../internal/default-strings/shared.generated.js";const MAX_PROJECTED_QUEUE_ITEMS=1e4,MAX_PROJECTED_QUEUE_ATTACHMENTS=1e4,QUEUE_PAGE_SIZE=20,ATTACHMENT_PREVIEW_SIZE=50,canonicalByExportedItem=new WeakMap,EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS=Object.freeze([]);function descriptorValue(value,property2){return getOwnDataDescriptor(value,property2)}function valueOfDescriptor(descriptor){return descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR?void 0:descriptor.value}function projectPromptQueueAttachment(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const idDescriptor=descriptorValue(value,"id"),nameDescriptor=descriptorValue(value,"name"),mimeTypeDescriptor=descriptorValue(value,"mimeType"),uriDescriptor=descriptorValue(value,"uri"),versionDescriptor=descriptorValue(value,"version");if([idDescriptor,nameDescriptor,mimeTypeDescriptor,uriDescriptor,versionDescriptor].some(descriptor=>descriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return;const id=valueOfDescriptor(idDescriptor),name=valueOfDescriptor(nameDescriptor);if(typeof id!="string"||id.trim().length===0||typeof name!="string")return;const mimeType=valueOfDescriptor(mimeTypeDescriptor),uri=valueOfDescriptor(uriDescriptor),version=valueOfDescriptor(versionDescriptor);return Object.freeze({id,name,...typeof mimeType=="string"?{mimeType}:{},...typeof uri=="string"?{uri}:{},...typeof version=="string"?{version}:{}})}catch{return}}function projectPromptQueueAttachments(value,budget){try{if(!Array.isArray(value))return;const lengthDescriptor=descriptorValue(value,"length");if(lengthDescriptor===MISSING_OWN_DATA_DESCRIPTOR||lengthDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof lengthDescriptor.value!="number"||!Number.isSafeInteger(lengthDescriptor.value)||lengthDescriptor.value<0)return;const attachments=[],length=Math.min(lengthDescriptor.value,budget.remaining);length<lengthDescriptor.value&&budget.onTruncate?.();for(let index=0;index<length;index+=1){budget.remaining--;const descriptor=descriptorValue(value,String(index));if(descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR)continue;const attachment=projectPromptQueueAttachment(descriptor.value);attachment&&attachments.push(attachment)}return Object.freeze(attachments)}catch{return}}function projectPromptQueueItem(value,budget){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const owned=canonicalByExportedItem.get(value);if(owned&&(owned.attachments?.length??0)<=budget.remaining)return budget.remaining-=owned.attachments?.length??0,owned;const idDescriptor=descriptorValue(value,"id"),valueDescriptor=descriptorValue(value,"value"),attachmentsDescriptor=descriptorValue(value,"attachments"),createdAtDescriptor=descriptorValue(value,"createdAt"),metadataDescriptor=descriptorValue(value,"metadata");if([idDescriptor,valueDescriptor,attachmentsDescriptor,createdAtDescriptor,metadataDescriptor].some(descriptor=>descriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return;const id=valueOfDescriptor(idDescriptor),prompt=valueOfDescriptor(valueDescriptor);if(typeof id!="string"||id.trim().length===0||typeof prompt!="string")return;const attachmentsValue=valueOfDescriptor(attachmentsDescriptor),attachments=attachmentsDescriptor===MISSING_OWN_DATA_DESCRIPTOR||attachmentsValue===void 0?void 0:projectPromptQueueAttachments(attachmentsValue,budget),createdAt=valueOfDescriptor(createdAtDescriptor),metadata=valueOfDescriptor(metadataDescriptor);return Object.freeze({source:value,id,value:prompt,...attachments===void 0?{}:{attachments},...typeof createdAt=="number"&&Number.isFinite(createdAt)?{createdAt}:{},...metadata!==void 0?{metadata}:{}})}catch{return}}function projectPromptQueueItems(value,onTruncate){try{if(!Array.isArray(value))return EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS;const lengthDescriptor=descriptorValue(value,"length");if(lengthDescriptor===MISSING_OWN_DATA_DESCRIPTOR||lengthDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof lengthDescriptor.value!="number"||!Number.isSafeInteger(lengthDescriptor.value)||lengthDescriptor.value<0)return EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS;const budget={remaining:MAX_PROJECTED_QUEUE_ATTACHMENTS,onTruncate},items=[],seen=new Set,length=Math.min(lengthDescriptor.value,MAX_PROJECTED_QUEUE_ITEMS);length<lengthDescriptor.value&&onTruncate?.();for(let index=0;index<length;index+=1){const descriptor=descriptorValue(value,String(index));if(descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR)continue;const item=projectPromptQueueItem(descriptor.value,budget);!item||seen.has(item.id)||(seen.add(item.id),items.push(item))}return Object.freeze(items)}catch{return EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS}}const exportedItems=new WeakMap;function toPromptQueueItem(item,value=item.value){let exported=exportedItems.get(item);if(exported||(exported=Object.freeze({id:item.id,value:item.value,...item.attachments===void 0?{}:{attachments:item.attachments},...item.createdAt===void 0?{}:{createdAt:item.createdAt},...item.metadata===void 0?{}:{metadata:item.metadata}}),exportedItems.set(item,exported),canonicalByExportedItem.set(exported,item)),value===item.value)return exported;const edited=Object.freeze({...exported,value}),canonical=Object.freeze({...item,source:edited,value});return canonicalByExportedItem.set(edited,canonical),exportedItems.set(canonical,edited),edited}class LyraPromptQueue extends LyraElement{constructor(){super(...arguments),this.items=[],this.readonly=!1,this.disabled=!1,this.accessibleLabel=null,this.headingLevel="3",this.page=0,this.announcements=new AnnouncementSinkController(this,{eager:["polite"]}),this.inputLossByItems=new WeakSet,this.drafts=new Map,this.canonicalItemsBySource=new WeakMap,this.containNativeEvent=event=>{event.stopPropagation()}}static{this.defaultStrings={...super.defaultStrings,attachmentUntitledFile:LYRA_DEFAULT_attachmentUntitledFile,moveDown:LYRA_DEFAULT_moveDown,moveUp:LYRA_DEFAULT_moveUp,next:LYRA_DEFAULT_next,paginationApplied:LYRA_DEFAULT_paginationApplied,paginationFirstPage:LYRA_DEFAULT_paginationFirstPage,paginationLabel:LYRA_DEFAULT_paginationLabel,paginationLastPage:LYRA_DEFAULT_paginationLastPage,previous:LYRA_DEFAULT_previous,promptInputAttachments:LYRA_DEFAULT_promptInputAttachments,promptQueueActionLabel:LYRA_DEFAULT_promptQueueActionLabel,promptQueueAttachmentLimit:LYRA_DEFAULT_promptQueueAttachmentLimit,promptQueueEmpty:LYRA_DEFAULT_promptQueueEmpty,promptQueueInputLimit:LYRA_DEFAULT_promptQueueInputLimit,promptQueueItemLabel:LYRA_DEFAULT_promptQueueItemLabel,promptQueueLabel:LYRA_DEFAULT_promptQueueLabel,promptQueueSendNow:LYRA_DEFAULT_promptQueueSendNow,remove:LYRA_DEFAULT_remove}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["items"])}static{this.identityCollectionProperties=Object.freeze(["items"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-queue-change","lr-send-now"])}static{this.identityEventDetailProperties=Object.freeze({"lr-send-now":Object.freeze(["item"])})}static{this.identityEventDetailCollectionItems=Object.freeze({"lr-queue-change":Object.freeze(["items"])})}canonicalItemsFor(source){if(source===null||typeof source!="object"&&typeof source!="function")return EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS;const cached=this.canonicalItemsBySource.get(source);if(cached)return cached;let truncated=!1;const result=projectPromptQueueItems(source,()=>{truncated=!0});return truncated&&this.inputLossByItems.add(result),this.canonicalItemsBySource.set(source,result),result}cachedCanonicalItemsFor(source){return source!==null&&(typeof source=="object"||typeof source=="function")?this.canonicalItemsBySource.get(source)??EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS:EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS}get effectiveItems(){return this.canonicalItemsFor(this.items)}willUpdate(changed){super.willUpdate(changed);const currentItems=this.effectiveItems;if(this.page=Math.min(this.page,Math.max(0,Math.ceil(currentItems.length/QUEUE_PAGE_SIZE)-1)),changed.has("items")){const byId=new Map(currentItems.map(item=>[item.id,item]));for(const[id,draft]of this.drafts)byId.get(id)?.value!==draft.sourceValue&&this.drafts.delete(id);this.hasUpdated&&this.inputTruncated&&this.announcements.announcePolite(this.localize("promptQueueInputLimit"))}if(!changed.has("items")&&!changed.has("readonly")&&!changed.has("disabled")&&!changed.has("page"))return;const focusedControl=shadowFocusTarget(this),pageAction=focusedControl?.dataset.pageAction;if(pageAction&&focusedControl){this.pendingRemovalFocus={pageAction,editor:!1,actionIndex:-1,origin:focusedControl};return}const action=focusedControl?.getAttribute("data-action")??void 0,editorFocused=focusedControl?.getAttribute("part")==="editor";if(!action&&!editorFocused)return;const focusedItem=focusedControl?.closest("[data-id]"),focusedId=focusedItem?.dataset.id;if(!focusedId||!focusedControl)return;const previousItems=changed.has("items")?this.cachedCanonicalItemsFor(changed.get("items")):EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS,items=this.effectiveItems,previousIndex=previousItems.findIndex(item=>item.id===focusedId),index=items.findIndex(item=>item.id===focusedId),rowRemoved=changed.has("items")&&index<0,rowMoved=changed.has("items")&&index>=0&&index!==previousIndex,editorRemoved=editorFocused&&changed.has("readonly")&&this.readonly,controlDisabled=changed.has("disabled")&&this.disabled;if(!rowRemoved&&!rowMoved&&!editorRemoved&&!controlDisabled)return;const target=rowRemoved?items[Math.min(Math.max(previousIndex,0),items.length-1)]:items.find(item=>item.id===focusedId);target&&(this.page=Math.floor(items.indexOf(target)/QUEUE_PAGE_SIZE));const rowActions=focusedItem?.querySelectorAll("[data-action]")??[];this.pendingRemovalFocus={editor:editorFocused,targetId:target?.id,action,actionIndex:action?[...rowActions].findIndex(candidate=>candidate===focusedControl):-1,origin:focusedControl}}updated(changed){super.updated(changed);const pending=this.pendingRemovalFocus;if(!pending)return;this.pendingRemovalFocus=void 0;const internalActive=shadowFocusTarget(this),documentActive=activeElementIn(this.ownerDocument);if(internalActive!==null&&internalActive!==pending.origin||documentActive!==null&&documentActive!==this&&documentActive!==this.ownerDocument.body)return;if(pending.pageAction){const pages=[...this.shadowRoot?.querySelectorAll("[data-page-action]:not(:disabled)")??[]],page=pages.find(button=>button.dataset.pageAction===pending.pageAction)??pages[0];if(page){internalActive!==page&&page.focus();return}}if(!pending.targetId){this.shadowRoot?.querySelector('[part="base"]')?.focus();return}const targetItem=[...this.shadowRoot?.querySelectorAll("[data-id]")??[]].find(item=>item.dataset.id===pending.targetId);if(pending.editor&&!this.readonly&&!this.disabled){const editor=targetItem?.querySelector('[part="editor"]');if(editor){editor.focus();return}}const actions=[...targetItem?.querySelectorAll("[data-action]")??[]],isEnabled=candidate=>candidate.disabled!==!0&&candidate.getAttribute("aria-disabled")!=="true",equivalentAction=pending.action?actions.find(candidate=>candidate.dataset.action===pending.action&&isEnabled(candidate)):void 0;if(equivalentAction){equivalentAction.focus();return}const preferredIndex=pending.actionIndex>=0?pending.actionIndex:0;for(let distance=0;distance<actions.length;distance++){const before=actions[preferredIndex-distance];if(before&&isEnabled(before)){before.focus();return}const after=actions[preferredIndex+distance];if(after&&isEnabled(after)){after.focus();return}}this.shadowRoot?.querySelector('[part="base"]')?.focus()}adoptedCallback(){super.adoptedCallback(),this.announcements.adopted()}disconnectedCallback(){this.pendingRemovalFocus=void 0,super.disconnectedCallback()}get inputTruncated(){return!!publicCollectionTruncation(this,"items")||this.inputLossByItems.has(this.effectiveItems)}changePage(page){this.disabled||(this.page=Math.max(0,Math.min(page,Math.ceil(this.effectiveItems.length/QUEUE_PAGE_SIZE)-1)),this.announcements.announcePolite(this.pageText()))}pageText(){const format=getNumberFormat(this.effectiveLocale);return this.localize("paginationApplied",void 0,{page:format.format(this.page+1),totalPages:format.format(Math.ceil(this.effectiveItems.length/QUEUE_PAGE_SIZE))})}renderPagination(){const pages=Math.ceil(this.effectiveItems.length/QUEUE_PAGE_SIZE);return pages>1?html`<div part="pagination" role="group" aria-label=${this.localize("paginationLabel")}>
|
|
2
|
+
<button part="page-button" data-page-action="first" type="button" ?disabled=${this.disabled||this.page===0} @click=${()=>this.changePage(0)}>${this.localize("paginationFirstPage")}</button>
|
|
3
|
+
<button part="page-button" data-page-action="previous" type="button" ?disabled=${this.disabled||this.page===0} @click=${()=>this.changePage(this.page-1)}>${this.localize("previous")}</button>
|
|
4
|
+
<span part="page-status">${this.pageText()}</span>
|
|
5
|
+
<button part="page-button" data-page-action="next" type="button" ?disabled=${this.disabled||this.page>=pages-1} @click=${()=>this.changePage(this.page+1)}>${this.localize("next")}</button>
|
|
6
|
+
<button part="page-button" data-page-action="last" type="button" ?disabled=${this.disabled||this.page>=pages-1} @click=${()=>this.changePage(pages-1)}>${this.localize("paginationLastPage")}</button>
|
|
7
|
+
</div>`:nothing}emitChange(items,reason,itemId){this.disabled||this.emit("lr-queue-change",{items,reason,itemId})}edit(item,value){this.disabled||this.readonly||(this.drafts.set(item.id,{sourceValue:item.value,value}),this.emitChange(this.effectiveItems.map(candidate=>toPromptQueueItem(candidate,candidate.id===item.id?value:candidate.value)),"edit",item.id))}removeItem(item){this.disabled||this.emitChange(this.effectiveItems.filter(candidate=>candidate.id!==item.id).map(candidate=>toPromptQueueItem(candidate)),"remove",item.id)}move(item,offset){if(this.disabled)return;const items=this.effectiveItems,index=items.findIndex(candidate=>candidate.id===item.id),target=index+offset;if(index<0||target<0||target>=items.length)return;const next=[...items],[moved]=next.splice(index,1);moved&&(next.splice(target,0,moved),this.emitChange(next.map(candidate=>toPromptQueueItem(candidate)),"reorder",item.id))}sendNow(item){this.disabled||this.emit("lr-send-now",{item:toPromptQueueItem(item)})}renderItem(item,index,itemCount){const formattedIndex=getNumberFormat(this.effectiveLocale).format(index+1),editorLabel=this.localize("promptQueueItemLabel",void 0,{index:formattedIndex}),actionLabel=action=>this.localize("promptQueueActionLabel",void 0,{action,index:formattedIndex});return html`<li part="item" data-id=${item.id} aria-posinset=${index+1} aria-setsize=${itemCount}>
|
|
2
8
|
${this.readonly?html`<span part="value">${item.value}</span>`:html`<lr-textarea
|
|
3
9
|
part="editor"
|
|
4
|
-
.value=${item.value}
|
|
10
|
+
.value=${this.drafts.get(item.id)?.value??item.value}
|
|
5
11
|
.disabled=${this.disabled}
|
|
6
12
|
.label=${editorLabel}
|
|
7
13
|
resize="auto"
|
|
8
14
|
@lr-input=${event=>{event.stopPropagation(),!(this.disabled||this.readonly)&&this.edit(item,event.detail.value)}}
|
|
9
15
|
></lr-textarea>`}
|
|
10
16
|
${item.attachments?.length?html`<ul part="attachments" aria-label=${this.localize("promptInputAttachments")}>
|
|
11
|
-
${item.attachments.map(attachment=>html`
|
|
17
|
+
${item.attachments.slice(0,ATTACHMENT_PREVIEW_SIZE).map(attachment=>html`
|
|
12
18
|
<li part="attachment">${attachment.name||this.localize("attachmentUntitledFile")}</li>
|
|
13
19
|
`)}
|
|
14
20
|
</ul>`:nothing}
|
|
21
|
+
${(item.attachments?.length??0)>ATTACHMENT_PREVIEW_SIZE?html`<p part="attachment-limit" role="note">${this.localize("promptQueueAttachmentLimit",void 0,{shown:getNumberFormat(this.effectiveLocale).format(ATTACHMENT_PREVIEW_SIZE),total:getNumberFormat(this.effectiveLocale).format(item.attachments.length)})}</p>`:nothing}
|
|
15
22
|
<div part="actions">
|
|
16
23
|
<lr-button
|
|
17
24
|
part="action"
|
|
@@ -62,7 +69,9 @@ import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/co
|
|
|
62
69
|
@blur=${this.containNativeEvent}
|
|
63
70
|
>
|
|
64
71
|
${visibleLabel?html`<div part="heading" role=${level?"heading":nothing} aria-level=${level??nothing}>${visibleLabel}</div>`:nothing}
|
|
65
|
-
${
|
|
66
|
-
|
|
72
|
+
${this.inputTruncated?html`<p part="input-limit" role="note">${this.localize("promptQueueInputLimit")}</p>`:nothing}
|
|
73
|
+
${this.renderPagination()}
|
|
74
|
+
${items.length?html`<ol part="list" role="list" start=${this.page*QUEUE_PAGE_SIZE+1}>
|
|
75
|
+
${repeat(items.slice(this.page*QUEUE_PAGE_SIZE,(this.page+1)*QUEUE_PAGE_SIZE),item=>item.id,(item,index)=>this.renderItem(item,this.page*QUEUE_PAGE_SIZE+index,items.length))}
|
|
67
76
|
</ol>`:html`<p part="empty">${this.localize("promptQueueEmpty")}</p>`}
|
|
68
|
-
</section>`}}__decorate([property({attribute:!1})],LyraPromptQueue.prototype,"items",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraPromptQueue.prototype,"readonly",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraPromptQueue.prototype,"disabled",void 0),__decorate([property()],LyraPromptQueue.prototype,"label",void 0),__decorate([property({attribute:"aria-label"})],LyraPromptQueue.prototype,"accessibleLabel",void 0),__decorate([property({attribute:"heading-level"})],LyraPromptQueue.prototype,"headingLevel",void 0);export{LyraPromptQueue};
|
|
77
|
+
</section>`}}__decorate([property({attribute:!1})],LyraPromptQueue.prototype,"items",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraPromptQueue.prototype,"readonly",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraPromptQueue.prototype,"disabled",void 0),__decorate([property()],LyraPromptQueue.prototype,"label",void 0),__decorate([property({attribute:"aria-label"})],LyraPromptQueue.prototype,"accessibleLabel",void 0),__decorate([property({attribute:"heading-level"})],LyraPromptQueue.prototype,"headingLevel",void 0),__decorate([state()],LyraPromptQueue.prototype,"page",void 0);export{LyraPromptQueue};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{iconHitTarget}from"../../../internal/interactive-control.styles.js";import{css}from"lit";import{compactContainerQuery}from"../../../internal/container-breakpoints.styles.js";const styles=css` :host { display: block; container-type: inline-size; contain-intrinsic-inline-size: var(--lr-size-20rem); } [part='base'] { display: flex; flex-direction: column; gap: var(--lr-space-xs); } [part='heading'] { margin: 0; color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-sm); font-weight: var(--lr-font-weight-semibold); } [part='list'] { display: flex; flex-direction: column; gap: var(--lr-space-xs); margin: 0; padding: 0; list-style: none; } [part~='item'] { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: var(--lr-space-xs); padding: var(--lr-space-xs); border: var(--lr-border-width-thin) solid var(--lr-color-border-subtle); border-radius: var(--lr-radius); background: var(--lr-color-surface); } [part='value'] { min-inline-size: 0; white-space: pre-wrap; overflow-wrap: anywhere; } [part='attachments'] { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: var(--lr-space-2xs) var(--lr-space-xs); min-inline-size: 0; margin: 0; padding: 0; color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-xs); list-style: none; } [part='attachment'] { min-inline-size: 0; max-inline-size: 100%; overflow-wrap: anywhere; } [part='actions'] { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: var(--lr-space-2xs); } [part~='action'] { display: inline-flex; align-items: center; justify-content: center; ${iconHitTarget} } [part='empty'] { margin: 0; color: var(--lr-color-text-quiet); } @container ${compactContainerQuery} { [part~='item'] { grid-template-columns: minmax(0, 1fr); } [part='actions'] { justify-content: flex-start; } } `;export{styles};
|
|
1
|
+
import{iconHitTarget,focusRing}from"../../../internal/interactive-control.styles.js";import{css}from"lit";import{compactContainerQuery}from"../../../internal/container-breakpoints.styles.js";const styles=css` :host { display: block; container-type: inline-size; contain-intrinsic-inline-size: var(--lr-size-20rem); } [part='base'] { display: flex; flex-direction: column; gap: var(--lr-space-xs); } [part='heading'] { margin: 0; color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-sm); font-weight: var(--lr-font-weight-semibold); } [part='list'] { display: flex; flex-direction: column; gap: var(--lr-space-xs); margin: 0; padding: 0; list-style: none; } [part~='item'] { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: var(--lr-space-xs); padding: var(--lr-space-xs); border: var(--lr-border-width-thin) solid var(--lr-color-border-subtle); border-radius: var(--lr-radius); background: var(--lr-color-surface); } [part='value'] { min-inline-size: 0; white-space: pre-wrap; overflow-wrap: anywhere; } [part='attachments'] { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: var(--lr-space-2xs) var(--lr-space-xs); min-inline-size: 0; margin: 0; padding: 0; color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-xs); list-style: none; } [part='attachment'] { min-inline-size: 0; max-inline-size: 100%; overflow-wrap: anywhere; } [part='actions'] { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: var(--lr-space-2xs); } [part~='action'] { display: inline-flex; align-items: center; justify-content: center; ${iconHitTarget} } [part='empty'] { margin: 0; color: var(--lr-color-text-quiet); } @container ${compactContainerQuery} { [part~='item'] { grid-template-columns: minmax(0, 1fr); } [part='actions'] { justify-content: flex-start; } } [part='pagination'] { display: flex; flex-wrap: wrap; align-items: center; gap: var(--lr-space-xs); margin-block: var(--lr-space-s); } [part='page-button'] { ${iconHitTarget} padding: var(--lr-space-2xs) var(--lr-space-xs); border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-radius); background: var(--lr-color-surface); color: var(--lr-color-text); font: inherit; cursor: pointer; } [part='page-button']:hover:where(:not(:disabled)) { background: var(--lr-color-surface-raised); } [part='page-button']:active:where(:not(:disabled)) { background: color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active)); } [part='page-button']:focus-visible { ${focusRing} } [part='page-button']:disabled { opacity: var(--lr-opacity-disabled); cursor: default; } [part='page-status'], [part='input-limit'], [part='attachment-limit'] { color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-sm); margin-block: var(--lr-space-xs); } [part='attachment-limit'] { grid-column: 1 / -1; } `;export{styles};
|
|
@@ -9,6 +9,7 @@ import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from
|
|
|
9
9
|
*
|
|
10
10
|
* Public collection properties take bounded, clone-owned readonly snapshots. Create a new
|
|
11
11
|
* collection and reassign it after changes; mutating the assigned array does not update the view.
|
|
12
|
+
* Original input omissions are disclosed in input-limit before forwarding the retained collection.
|
|
12
13
|
*
|
|
13
14
|
* @customElement lr-realtime-session
|
|
14
15
|
* @slot controls - Additional provider-specific controls.
|
|
@@ -23,6 +24,7 @@ import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from
|
|
|
23
24
|
* @event lr-record-error - Passthrough from capture. `detail: { error: DOMException | Error }`.
|
|
24
25
|
* @event lr-level - Passthrough from capture. `detail: { level: number }`.
|
|
25
26
|
* @event lr-record-state-change - Passthrough from capture. `detail: { state: PushToTalkState }`.
|
|
27
|
+
* @csspart input-limit - Original collection admission-loss notice.
|
|
26
28
|
* @csspart base - The named session region.
|
|
27
29
|
* @csspart header - Status and session controls.
|
|
28
30
|
* @csspart status - Connection status badge.
|
|
@@ -49,4 +51,4 @@ withoutCapture:boolean;
|
|
|
49
51
|
/** Accessible name for the session shell. Omitting it localizes the default
|
|
50
52
|
* `realtimeSessionLabel` message; an explicit empty string (`label=""` or `.label = ''`)
|
|
51
53
|
* suppresses that default and renders no label. A host `aria-label` wins over both. */
|
|
52
|
-
label?:string;private transferActionFocus?;private readonly announcements;private suppressNextStateAnnouncement;constructor();connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;protected willUpdate(changed:PropertyValues<this>):void;protected updated(changed:PropertyValues<this>):void;private stateLabel;private containNativeEvent;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-realtime-session':LyraRealtimeSession;}}
|
|
54
|
+
label?:string;private transferActionFocus?;private readonly announcements;private suppressNextStateAnnouncement;constructor();connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;protected willUpdate(changed:PropertyValues<this>):void;private lastInputNotice;private inputNoticeMounted;private inputLimitMessage;protected updated(changed:PropertyValues<this>):void;private stateLabel;private containNativeEvent;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-realtime-session':LyraRealtimeSession;}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteRange}from"../../../internal/numbers.js";import{literalSetConverter}from"../../../internal/converters.js";import"../audio-visualizer/audio-visualizer.class.js";import"../push-to-talk/push-to-talk.class.js";import"../transcript-feed/transcript-feed.class.js";import"../../overlays/badge/badge.class.js";import{styles}from"./realtime-session.styles.js";import{activeElementIn,shadowFocusTarget}from"../../../internal/active-element.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{LYRA_DEFAULT_realtimeSessionConnect,LYRA_DEFAULT_realtimeSessionConnected,LYRA_DEFAULT_realtimeSessionConnecting,LYRA_DEFAULT_realtimeSessionConnectionFailed,LYRA_DEFAULT_realtimeSessionDisconnect,LYRA_DEFAULT_realtimeSessionDisconnected,LYRA_DEFAULT_realtimeSessionError,LYRA_DEFAULT_realtimeSessionInterrupt,LYRA_DEFAULT_realtimeSessionLabel,LYRA_DEFAULT_realtimeSessionMute,LYRA_DEFAULT_realtimeSessionReconnecting,LYRA_DEFAULT_realtimeSessionUnmute}from"../../../internal/default-strings/conversation.generated.js";const CONNECTION_STATE=literalSetConverter(["disconnected","connecting","connected","reconnecting","error"],"disconnected"),VOICE_STATE=literalSetConverter(["idle","listening","thinking","speaking"],"idle"),STATE_VARIANT={disconnected:"neutral",connecting:"brand",connected:"success",reconnecting:"warning",error:"danger"};class LyraRealtimeSession extends LyraElement{static{this.defaultStrings={...super.defaultStrings,realtimeSessionConnect:LYRA_DEFAULT_realtimeSessionConnect,realtimeSessionConnected:LYRA_DEFAULT_realtimeSessionConnected,realtimeSessionConnecting:LYRA_DEFAULT_realtimeSessionConnecting,realtimeSessionConnectionFailed:LYRA_DEFAULT_realtimeSessionConnectionFailed,realtimeSessionDisconnect:LYRA_DEFAULT_realtimeSessionDisconnect,realtimeSessionDisconnected:LYRA_DEFAULT_realtimeSessionDisconnected,realtimeSessionError:LYRA_DEFAULT_realtimeSessionError,realtimeSessionInterrupt:LYRA_DEFAULT_realtimeSessionInterrupt,realtimeSessionLabel:LYRA_DEFAULT_realtimeSessionLabel,realtimeSessionMute:LYRA_DEFAULT_realtimeSessionMute,realtimeSessionReconnecting:LYRA_DEFAULT_realtimeSessionReconnecting,realtimeSessionUnmute:LYRA_DEFAULT_realtimeSessionUnmute}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["entries"])}static{this.appendOrderedCollectionProperties=Object.freeze(["entries"])}static{this.styles=[LyraElement.styles,styles]}get state(){return this._state}set state(next){const normalized=CONNECTION_STATE.normalize(next),old=this._state;old!==normalized&&(this._state=normalized,this.requestUpdate("state",old))}get voiceState(){return this._voiceState}set voiceState(next){const normalized=VOICE_STATE.normalize(next),old=this._voiceState;old!==normalized&&(this._voiceState=normalized,this.requestUpdate("voiceState",old))}constructor(){super(),this._state="disconnected",this._voiceState="idle",this.level=null,this.stream=null,this.sessionId="",this.entries=[],this.muted=!1,this.withoutCapture=!1,this.announcements=new AnnouncementSinkController(this,{eager:["polite","assertive"]}),this.suppressNextStateAnnouncement=!0,this.containNativeEvent=event=>{event.stopPropagation()},this.requestUpdate("state",void 0),this.requestUpdate("voiceState",void 0)}connectedCallback(){super.connectedCallback(),this.hasUpdated&&(this.suppressNextStateAnnouncement=!0,this.requestUpdate())}disconnectedCallback(){super.disconnectedCallback(),this.suppressNextStateAnnouncement=!0}adoptedCallback(){super.adoptedCallback(),this.announcements.adopted()}willUpdate(changed){super.willUpdate(changed);const stateChanged=changed.has("state"),captureHidden=changed.has("withoutCapture")&&changed.get("withoutCapture")===!1&&this.withoutCapture,captureDisabled=changed.has("muted")&&changed.get("muted")===!1&&this.muted;if(!stateChanged&&!captureHidden&&!captureDisabled)return;const focused=this.shadowRoot?shadowFocusTarget(this):activeElementIn(this.ownerDocument),focusedPart=focused?.getAttribute("part")??null;if(!focused)return;if(captureDisabled&&!stateChanged&&!captureHidden&&focusedPart==="capture"){this.transferActionFocus={target:"mute",origin:focused};return}(captureHidden&&!stateChanged?focusedPart==="capture":focused.closest('[part="controls"]')!==null||focusedPart==="connect"||focusedPart==="disconnect"||focusedPart==="mute"||focusedPart==="interrupt"||focusedPart==="capture")&&(this.transferActionFocus={target:"connection",origin:focused})}updated(changed){super.updated(changed);const stateChanged=changed.has("state");stateChanged&&!this.suppressNextStateAnnouncement&&(this.state==="error"?this.announcements.announceAssertive(this.localize("realtimeSessionConnectionFailed")):this.announcements.announcePolite(this.stateLabel()));const pending=this.transferActionFocus;if((stateChanged||changed.has("withoutCapture")||changed.has("muted"))&&pending){this.transferActionFocus=void 0;const internalActive=shadowFocusTarget(this),documentActive=activeElementIn(this.ownerDocument);if((internalActive===null||internalActive===pending.origin)&&(documentActive===null||documentActive===this||documentActive===this.ownerDocument.body)){const selector=pending.target==="mute"?'[part="mute"]':'[part="connect"], [part="disconnect"]';this.renderRoot.querySelector(selector)?.focus()}}this.suppressNextStateAnnouncement=!1}stateLabel(){switch(this.state){case"disconnected":return this.localize("realtimeSessionDisconnected");case"connecting":return this.localize("realtimeSessionConnecting");case"connected":return this.localize("realtimeSessionConnected");case"reconnecting":return this.localize("realtimeSessionReconnecting");case"error":return this.localize("realtimeSessionError")}}render(){const label=this.getAttribute("aria-label")??(this.label==null?this.localize("realtimeSessionLabel"):this.label),active=this.state==="connected",safeLevel=this.level==null?null:finiteRange(this.level,0,0,1);return html`
|
|
1
|
+
import{__decorate}from"tslib";import{getNumberFormat}from"../../../internal/intl-cache.js";import{collectionSupport,publicCollectionTruncation}from"../../../internal/collection-snapshot.js";import{html,nothing}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteRange}from"../../../internal/numbers.js";import{literalSetConverter}from"../../../internal/converters.js";import"../audio-visualizer/audio-visualizer.class.js";import"../push-to-talk/push-to-talk.class.js";import"../transcript-feed/transcript-feed.class.js";import"../../overlays/badge/badge.class.js";import{styles}from"./realtime-session.styles.js";import{activeElementIn,shadowFocusTarget}from"../../../internal/active-element.js";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{LYRA_DEFAULT_realtimeSessionConnect,LYRA_DEFAULT_realtimeSessionConnected,LYRA_DEFAULT_realtimeSessionConnecting,LYRA_DEFAULT_realtimeSessionConnectionFailed,LYRA_DEFAULT_realtimeSessionDisconnect,LYRA_DEFAULT_realtimeSessionDisconnected,LYRA_DEFAULT_realtimeSessionError,LYRA_DEFAULT_realtimeSessionInterrupt,LYRA_DEFAULT_realtimeSessionLabel,LYRA_DEFAULT_realtimeSessionMute,LYRA_DEFAULT_realtimeSessionReconnecting,LYRA_DEFAULT_realtimeSessionUnmute,LYRA_DEFAULT_transcriptFeedInputLimit}from"../../../internal/default-strings/conversation.generated.js";const CONNECTION_STATE=literalSetConverter(["disconnected","connecting","connected","reconnecting","error"],"disconnected"),VOICE_STATE=literalSetConverter(["idle","listening","thinking","speaking"],"idle"),STATE_VARIANT={disconnected:"neutral",connecting:"brand",connected:"success",reconnecting:"warning",error:"danger"};class LyraRealtimeSession extends LyraElement{static{this.defaultStrings={...super.defaultStrings,realtimeSessionConnect:LYRA_DEFAULT_realtimeSessionConnect,realtimeSessionConnected:LYRA_DEFAULT_realtimeSessionConnected,realtimeSessionConnecting:LYRA_DEFAULT_realtimeSessionConnecting,realtimeSessionConnectionFailed:LYRA_DEFAULT_realtimeSessionConnectionFailed,realtimeSessionDisconnect:LYRA_DEFAULT_realtimeSessionDisconnect,realtimeSessionDisconnected:LYRA_DEFAULT_realtimeSessionDisconnected,realtimeSessionError:LYRA_DEFAULT_realtimeSessionError,realtimeSessionInterrupt:LYRA_DEFAULT_realtimeSessionInterrupt,realtimeSessionLabel:LYRA_DEFAULT_realtimeSessionLabel,realtimeSessionMute:LYRA_DEFAULT_realtimeSessionMute,realtimeSessionReconnecting:LYRA_DEFAULT_realtimeSessionReconnecting,realtimeSessionUnmute:LYRA_DEFAULT_realtimeSessionUnmute,transcriptFeedInputLimit:LYRA_DEFAULT_transcriptFeedInputLimit}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["entries"])}static{this.appendOrderedCollectionProperties=Object.freeze(["entries"])}static{this.styles=[LyraElement.styles,styles]}get state(){return this._state}set state(next){const normalized=CONNECTION_STATE.normalize(next),old=this._state;old!==normalized&&(this._state=normalized,this.requestUpdate("state",old))}get voiceState(){return this._voiceState}set voiceState(next){const normalized=VOICE_STATE.normalize(next),old=this._voiceState;old!==normalized&&(this._voiceState=normalized,this.requestUpdate("voiceState",old))}constructor(){super(),this._state="disconnected",this._voiceState="idle",this.level=null,this.stream=null,this.sessionId="",this.entries=[],this.muted=!1,this.withoutCapture=!1,this.announcements=new AnnouncementSinkController(this,{eager:["polite","assertive"]}),this.suppressNextStateAnnouncement=!0,this.lastInputNotice="",this.inputNoticeMounted=!1,this.containNativeEvent=event=>{event.stopPropagation()},this.requestUpdate("state",void 0),this.requestUpdate("voiceState",void 0)}connectedCallback(){super.connectedCallback(),this.hasUpdated&&(this.suppressNextStateAnnouncement=!0,this.requestUpdate())}disconnectedCallback(){super.disconnectedCallback(),this.suppressNextStateAnnouncement=!0,this.inputNoticeMounted=!1}adoptedCallback(){super.adoptedCallback(),this.announcements.adopted()}willUpdate(changed){super.willUpdate(changed);const stateChanged=changed.has("state"),captureHidden=changed.has("withoutCapture")&&changed.get("withoutCapture")===!1&&this.withoutCapture,captureDisabled=changed.has("muted")&&changed.get("muted")===!1&&this.muted;if(!stateChanged&&!captureHidden&&!captureDisabled)return;const focused=this.shadowRoot?shadowFocusTarget(this):activeElementIn(this.ownerDocument),focusedPart=focused?.getAttribute("part")??null;if(!focused)return;if(captureDisabled&&!stateChanged&&!captureHidden&&focusedPart==="capture"){this.transferActionFocus={target:"mute",origin:focused};return}(captureHidden&&!stateChanged?focusedPart==="capture":focused.closest('[part="controls"]')!==null||focusedPart==="connect"||focusedPart==="disconnect"||focusedPart==="mute"||focusedPart==="interrupt"||focusedPart==="capture")&&(this.transferActionFocus={target:"connection",origin:focused})}inputLimitMessage(){const loss=publicCollectionTruncation(this,"entries"),format=getNumberFormat(this.effectiveLocale);return loss?this.localize("transcriptFeedInputLimit",void 0,{count:format.format(loss.retained),total:format.format(loss.source)}):""}updated(changed){super.updated(changed);const notice=this.inputLimitMessage();this.inputNoticeMounted&¬ice&¬ice!==this.lastInputNotice&&this.announcements.announcePolite(notice),this.lastInputNotice=notice,this.inputNoticeMounted=!0;const stateChanged=changed.has("state");stateChanged&&!this.suppressNextStateAnnouncement&&(this.state==="error"?this.announcements.announceAssertive(this.localize("realtimeSessionConnectionFailed")):this.announcements.announcePolite(this.stateLabel()));const pending=this.transferActionFocus;if((stateChanged||changed.has("withoutCapture")||changed.has("muted"))&&pending){this.transferActionFocus=void 0;const internalActive=shadowFocusTarget(this),documentActive=activeElementIn(this.ownerDocument);if((internalActive===null||internalActive===pending.origin)&&(documentActive===null||documentActive===this||documentActive===this.ownerDocument.body)){const selector=pending.target==="mute"?'[part="mute"]':'[part="connect"], [part="disconnect"]';this.renderRoot.querySelector(selector)?.focus()}}this.suppressNextStateAnnouncement=!1}stateLabel(){switch(this.state){case"disconnected":return this.localize("realtimeSessionDisconnected");case"connecting":return this.localize("realtimeSessionConnecting");case"connected":return this.localize("realtimeSessionConnected");case"reconnecting":return this.localize("realtimeSessionReconnecting");case"error":return this.localize("realtimeSessionError")}}render(){const label=this.getAttribute("aria-label")??(this.label==null?this.localize("realtimeSessionLabel"):this.label),active=this.state==="connected",safeLevel=this.level==null?null:finiteRange(this.level,0,0,1);return html`
|
|
2
2
|
<section
|
|
3
3
|
part="base"
|
|
4
4
|
aria-label=${label}
|
|
@@ -42,6 +42,7 @@ import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/co
|
|
|
42
42
|
.disabled=${!active||this.muted||this.withoutCapture}
|
|
43
43
|
level-events
|
|
44
44
|
></lr-push-to-talk>
|
|
45
|
+
${this.inputLimitMessage()?html`<p part="input-limit" role="note">${this.inputLimitMessage()}</p>`:nothing}
|
|
45
46
|
<lr-transcript-feed
|
|
46
47
|
part="transcript"
|
|
47
48
|
.sessionId=${this.sessionId}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{css}from"lit";import{compactContainerQuery}from"../../../internal/container-breakpoints.styles.js";const styles=css` :host { display: block; container-type: inline-size; contain-intrinsic-inline-size: var(--lr-size-20rem); } [part='base'] { display: flex; flex-direction: column; gap: var(--lr-space-m); } [part='header'] { display: grid; grid-template-columns: auto minmax(var(--lr-size-8rem), 1fr) auto; gap: var(--lr-space-s); align-items: center; } [part='activity'] { min-inline-size: 0; } [part='status'] { min-inline-size: 0; max-inline-size: 100%; overflow-wrap: break-word; } [part='controls'] { display: flex; flex-wrap: wrap; gap: var(--lr-space-xs); } [part='controls'] button { min-block-size: var(--lr-icon-button-size); padding: var(--lr-space-xs) var(--lr-space-s); border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-radius); background: var(--lr-color-surface); color: var(--lr-color-text); font: inherit; cursor: pointer; transition: background-color var(--lr-transition-fast); } [part='controls'] button:hover { background: var(--lr-color-surface-raised); } [part='controls'] button:active { background: color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active)); } [part='controls'] button:focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: var(--lr-focus-ring-offset); } [part='error'] { margin: 0; padding: var(--lr-space-s); border-inline-start: var(--lr-border-width-thick) solid var(--lr-color-danger); background: var(--lr-color-danger-quiet); color: var(--lr-color-text); } [part='capture'] { align-self: center; } [part='transcript'] { min-block-size: var(--lr-size-8rem); min-inline-size: 0; } @container ${compactContainerQuery} { [part='header'] { grid-template-columns: 1fr; } [part='controls'] { justify-content: flex-start; } } `;export{styles};
|
|
1
|
+
import{css}from"lit";import{compactContainerQuery}from"../../../internal/container-breakpoints.styles.js";const styles=css` [part='input-limit'], [part='slices-limit'] { margin: 0; font-size: var(--lr-font-size-sm); color: var(--lr-color-text-quiet); overflow-wrap: anywhere; } :host { display: block; container-type: inline-size; contain-intrinsic-inline-size: var(--lr-size-20rem); } [part='base'] { display: flex; flex-direction: column; gap: var(--lr-space-m); } [part='header'] { display: grid; grid-template-columns: auto minmax(var(--lr-size-8rem), 1fr) auto; gap: var(--lr-space-s); align-items: center; } [part='activity'] { min-inline-size: 0; } [part='status'] { min-inline-size: 0; max-inline-size: 100%; overflow-wrap: break-word; } [part='controls'] { display: flex; flex-wrap: wrap; gap: var(--lr-space-xs); } [part='controls'] button { min-block-size: var(--lr-icon-button-size); padding: var(--lr-space-xs) var(--lr-space-s); border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-radius); background: var(--lr-color-surface); color: var(--lr-color-text); font: inherit; cursor: pointer; transition: background-color var(--lr-transition-fast); } [part='controls'] button:hover { background: var(--lr-color-surface-raised); } [part='controls'] button:active { background: color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active)); } [part='controls'] button:focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: var(--lr-focus-ring-offset); } [part='error'] { margin: 0; padding: var(--lr-space-s); border-inline-start: var(--lr-border-width-thick) solid var(--lr-color-danger); background: var(--lr-color-danger-quiet); color: var(--lr-color-text); } [part='capture'] { align-self: center; } [part='transcript'] { min-block-size: var(--lr-size-8rem); min-inline-size: 0; } @container ${compactContainerQuery} { [part='header'] { grid-template-columns: 1fr; } [part='controls'] { justify-content: flex-start; } } `;export{styles};
|
|
@@ -13,3 +13,5 @@ export declare const APPEND_MONOTONIC_MARKDOWN_PATTERNS:readonly RegExp[];export
|
|
|
13
13
|
* against `text`, used whenever `contentMode` is left unset (auto-detect). Exported so the
|
|
14
14
|
* heuristic is directly testable without going through either variant's render cycle. */
|
|
15
15
|
export declare function looksLikeMarkdown(text:string):boolean;
|
|
16
|
+
/** Append-only equivalent of looksLikeMarkdown; arbitrary replacements reset the finite state. */
|
|
17
|
+
export declare class IncrementalMarkdownDetector{private source;private signals;private permanent;private boundaryPending;private previous?;scannedCodeUnits:number;update(source:string):boolean;}
|
|
@@ -1 +1,4 @@
|
|
|
1
|
-
const APPEND_MONOTONIC_MARKDOWN_PATTERNS=[/^ {0,3}#{1,6}\s+\S/m,/```/,/\*\*[^*\n]+\*\*/,/`[^`\n]+`/,/^ {0,3}[-*+]\s+\S/m,/^ {0,3}\d+\.\s+\S/m,/\[[^\]]+\]\([^)\s]+\)/,/^ {0,3}>\s?\S/m],BOUNDARY_SENSITIVE_MARKDOWN_PATTERNS=[/(?:^|[^\w])_[^_\n]+_(?:[^\w]|$)/];function looksLikeMarkdown(text){return text?[...APPEND_MONOTONIC_MARKDOWN_PATTERNS,...BOUNDARY_SENSITIVE_MARKDOWN_PATTERNS].some(pattern=>pattern.test(text)):!1}
|
|
1
|
+
const APPEND_MONOTONIC_MARKDOWN_PATTERNS=[/^ {0,3}#{1,6}\s+\S/m,/```/,/\*\*[^*\n]+\*\*/,/`[^`\n]+`/,/^ {0,3}[-*+]\s+\S/m,/^ {0,3}\d+\.\s+\S/m,/\[[^\]]+\]\([^)\s]+\)/,/^ {0,3}>\s?\S/m],BOUNDARY_SENSITIVE_MARKDOWN_PATTERNS=[/(?:^|[^\w])_[^_\n]+_(?:[^\w]|$)/];function looksLikeMarkdown(text){return text?[...APPEND_MONOTONIC_MARKDOWN_PATTERNS,...BOUNDARY_SENSITIVE_MARKDOWN_PATTERNS].some(pattern=>pattern.test(text)):!1}const character=value=>input=>input===value,space=input=>/\s/.test(input),nonspace=input=>!space(input),atom=(test,min=1,max=min)=>[test,min,max];class MarkdownSignal{constructor(atoms,start="any"){this.start=start,this.states=[{edges:[],epsilon:[]}],this.active=new Set;let current=0;for(const[test,min,max]of atoms){for(let index=0;index<min;index++){const next=this.states.length;this.states.push({edges:[],epsilon:[]}),this.states[current].edges.push([test,next]),current=next}if(max===1/0)this.states[current].edges.push([test,current]);else for(let index=min;index<max;index++){const next=this.states.length;this.states.push({edges:[],epsilon:[]}),this.states[current].edges.push([test,next]),this.states[current].epsilon.push(next),current=next}}}expand(states){for(const state of states)for(const next of this.states[state].epsilon)states.add(next);return states}step(input,previous){(this.start==="any"||this.start==="line"&&(previous===void 0||/[\n\r\u2028\u2029]/.test(previous))||this.start==="boundary"&&(previous===void 0||!/\w/.test(previous)))&&this.active.add(0);const next=new Set;for(const state of this.expand(this.active))for(const[test,target]of this.states[state].edges)test(input)&&next.add(target);return this.active=this.expand(next),this.active.has(this.states.length-1)}}function markdownSignals(){const indent=atom(character(" "),0,3),whitespace=atom(space,1,1/0);return[new MarkdownSignal([indent,atom(character("#"),1,6),whitespace,atom(nonspace)],"line"),new MarkdownSignal([atom(character("`"),3)]),new MarkdownSignal([atom(character("*"),2),atom(c=>c!=="*"&&c!==`
|
|
2
|
+
`,1,1/0),atom(character("*"),2)]),new MarkdownSignal([atom(character("`")),atom(c=>c!=="`"&&c!==`
|
|
3
|
+
`,1,1/0),atom(character("`"))]),new MarkdownSignal([indent,atom(c=>/[-*+]/.test(c)),whitespace,atom(nonspace)],"line"),new MarkdownSignal([indent,atom(c=>/\d/.test(c),1,1/0),atom(character(".")),whitespace,atom(nonspace)],"line"),new MarkdownSignal([atom(character("[")),atom(c=>c!=="]",1,1/0),atom(character("]")),atom(character("(")),atom(c=>c!==")"&&nonspace(c),1,1/0),atom(character(")"))]),new MarkdownSignal([indent,atom(character(">")),atom(space,0,1),atom(nonspace)],"line"),new MarkdownSignal([atom(character("_")),atom(c=>c!=="_"&&c!==`
|
|
4
|
+
`,1,1/0),atom(character("_"))],"boundary")]}class IncrementalMarkdownDetector{constructor(){this.source="",this.signals=markdownSignals(),this.permanent=!1,this.boundaryPending=!1,this.scannedCodeUnits=0}update(source){if(source.startsWith(this.source)||(this.source="",this.signals=markdownSignals(),this.permanent=!1,this.boundaryPending=!1,this.previous=void 0),!this.permanent)for(let index=this.source.length;index<source.length;index++){const input=source[index];this.scannedCodeUnits++,this.boundaryPending&&!/\w/.test(input)&&(this.permanent=!0),this.boundaryPending=!1;for(let signal=0;signal<this.signals.length;signal++)this.signals[signal].step(input,this.previous)&&(signal===this.signals.length-1?this.boundaryPending=!0:this.permanent=!0);if(this.previous=input,this.permanent)break}return this.source=source,this.permanent||this.boundaryPending}}export{APPEND_MONOTONIC_MARKDOWN_PATTERNS,BOUNDARY_SENSITIVE_MARKDOWN_PATTERNS,IncrementalMarkdownDetector,looksLikeMarkdown};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type{LyraClipboardWriteSuccess,LyraClipboardWriteFailure}from'../../../internal/clipboard.js';import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import type{ShikiLanguageInput}from'../code-block/shiki-types.js';import type{MarkdownHtmlMode,MarkdownStreamingRender}from'../markdown/markdown-shared.js';export{looksLikeMarkdown}from'./markdown-detection.js';export type StreamingTextContentMode='auto'|'plain'|'markdown';export interface LyraStreamingTextEventMap{'lr-content-settled':CustomEvent<null>;'lr-link-activate':CustomEvent<{href:string;}>;'lr-copy':CustomEvent<LyraClipboardWriteSuccess>;'lr-copy-error':CustomEvent<LyraClipboardWriteFailure>;}
|
|
1
|
+
import type{LyraClipboardWriteSuccess,LyraClipboardWriteFailure}from'../../../internal/clipboard.js';import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import type{ShikiLanguageInput,ShikiLanguageLoader,ShikiLanguageSource}from'../code-block/shiki-types.js';import type{MarkdownHtmlMode,MarkdownStreamingRender}from'../markdown/markdown-shared.js';export{looksLikeMarkdown}from'./markdown-detection.js';export type StreamingTextContentMode='auto'|'plain'|'markdown';export interface LyraStreamingTextEventMap{'lr-content-settled':CustomEvent<null>;'lr-link-activate':CustomEvent<{href:string;}>;'lr-copy':CustomEvent<LyraClipboardWriteSuccess>;'lr-copy-error':CustomEvent<LyraClipboardWriteFailure>;}
|
|
2
2
|
/**
|
|
3
3
|
* Shared runtime for `<lr-streaming-text>`/`<lr-streaming-text-core>` -- token coalescing,
|
|
4
4
|
* `contentMode` auto-detection, and the blinking cursor -- factored out so neither variant
|
|
@@ -32,6 +32,10 @@ contentMode:StreamingTextContentMode;
|
|
|
32
32
|
* leaves the composed element's own default untouched: the full variant falls back to its
|
|
33
33
|
* ~200-language dynamic-import table, the core variant renders unmatched fences as plain text. */
|
|
34
34
|
languages?:Readonly<Record<string,ShikiLanguageInput>>;
|
|
35
|
+
/** Lazy grammar loaders forwarded with `languages` to the composed Markdown element. Concrete
|
|
36
|
+
* entries win on duplicate keys. Unset forwards `languages` verbatim; the combined map is reused
|
|
37
|
+
* until either input map changes. Only requested loaders execute. Assign a new map object after edits. */
|
|
38
|
+
languageLoaders?:Readonly<Record<string,ShikiLanguageLoader>>;protected get markdownLanguages():Readonly<Record<string,ShikiLanguageSource>> |undefined;
|
|
35
39
|
/** Forwarded verbatim to the composed Markdown element's own `tabSize` -- the tab-stop width
|
|
36
40
|
* used to expand tabs in leading indentation before parsing. `4` (the default) matches the
|
|
37
41
|
* composed element's own default. */
|
|
@@ -70,7 +74,7 @@ math:boolean;
|
|
|
70
74
|
/** Forwarded verbatim to the composed Markdown element's own `maxHeight`. Empty (the default)
|
|
71
75
|
* matches the composed element's own default -- the rendered document never scrolls
|
|
72
76
|
* internally. */
|
|
73
|
-
maxHeight:string;protected displayedContent:string;private lastScannedContent?;private lastScannedResult;private
|
|
77
|
+
maxHeight:string;protected displayedContent:string;private lastScannedContent?;private lastScannedResult;private readonly markdownDetector;private readonly coalescer;private get safeCoalesceMs();constructor();connectedCallback():void;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;disconnectedCallback():void;adoptedCallback():void;
|
|
74
78
|
/** Whether Markdown mode is actually in effect right now, resolving the
|
|
75
79
|
* `contentMode` property against the memoized `looksLikeMarkdown`
|
|
76
80
|
* result for the currently-displayed content (see `lastScannedContent`/
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{Announcer}from"../../../internal/announcer.js";import{finiteDuration}from"../../../internal/numbers.js";import{styles}from"./streaming-text.styles.js";import{
|
|
2
|
-
>${this.effectiveMarkdown?html`${this.renderMarkdown()}${cursor}`:html`<span class="plain">${this.displayedContent}</span> ${cursor}`}</div
|
|
3
|
-
>`}}__decorate([property()],StreamingTextRuntimeBase.prototype,"content",void 0),__decorate([property({type:Boolean,reflect:!0})],StreamingTextRuntimeBase.prototype,"streaming",void 0),__decorate([property({attribute:"streaming-render"})],StreamingTextRuntimeBase.prototype,"streamingRender",void 0),__decorate([property({type:Number,attribute:"coalesce-ms"})],StreamingTextRuntimeBase.prototype,"coalesceMs",void 0),__decorate([property({reflect:!0,attribute:"content-mode"})],StreamingTextRuntimeBase.prototype,"contentMode",void 0),__decorate([property({attribute:!1})],StreamingTextRuntimeBase.prototype,"languages",void 0),__decorate([property({type:Number,attribute:"tab-size"})],StreamingTextRuntimeBase.prototype,"tabSize",void 0),__decorate([property({attribute:"html-mode"})],StreamingTextRuntimeBase.prototype,"htmlMode",void 0),__decorate([property({type:Boolean,attribute:"without-gfm"})],StreamingTextRuntimeBase.prototype,"withoutGfm",void 0),__decorate([property({attribute:"link-target"})],StreamingTextRuntimeBase.prototype,"linkTarget",void 0),__decorate([property({attribute:"internal-link-prefix"})],StreamingTextRuntimeBase.prototype,"internalLinkPrefix",void 0),__decorate([property({type:Number,attribute:"heading-offset"})],StreamingTextRuntimeBase.prototype,"headingOffset",void 0),__decorate([property({type:Boolean,attribute:"without-syntax-highlighting"})],StreamingTextRuntimeBase.prototype,"withoutSyntaxHighlighting",void 0),__decorate([property({type:Boolean,attribute:"heading-anchors"})],StreamingTextRuntimeBase.prototype,"headingAnchors",void 0),__decorate([property({type:Boolean})],StreamingTextRuntimeBase.prototype,"math",void 0),__decorate([property({attribute:"max-height"})],StreamingTextRuntimeBase.prototype,"maxHeight",void 0),__decorate([state()],StreamingTextRuntimeBase.prototype,"displayedContent",void 0);export{StreamingTextRuntimeBase,looksLikeMarkdown};
|
|
1
|
+
import{__decorate}from"tslib";import{combineShikiLanguageSources}from"../../../internal/shiki-language-sources.js";import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{Announcer}from"../../../internal/announcer.js";import{finiteDuration}from"../../../internal/numbers.js";import{streamingTailText}from"../markdown/markdown-streaming-tail.js";import{styles}from"./streaming-text.styles.js";import{IncrementalMarkdownDetector}from"./markdown-detection.js";import{looksLikeMarkdown}from"./markdown-detection.js";const DEFAULT_COALESCE_MS=50;class StreamingTextRuntimeBase extends LyraElement{static{this.styles=[LyraElement.styles,styles]}get markdownLanguages(){return combineShikiLanguageSources(this.languages,this.languageLoaders)}get safeCoalesceMs(){return finiteDuration(this.coalesceMs,DEFAULT_COALESCE_MS,0)}constructor(){super(),this.content="",this.streaming=!1,this.streamingRender="plain",this.coalesceMs=DEFAULT_COALESCE_MS,this.contentMode="auto",this.tabSize=4,this.htmlMode="sanitize",this.withoutGfm=!1,this.linkTarget="_blank",this.internalLinkPrefix="",this.headingOffset=0,this.withoutSyntaxHighlighting=!1,this.headingAnchors=!1,this.math=!1,this.maxHeight="",this.displayedContent="",this.lastScannedResult=!1,this.markdownDetector=new IncrementalMarkdownDetector,this.coalescer=new Announcer({throttleMs:this.safeCoalesceMs,onFlush:text=>{this.displayedContent=text}})}connectedCallback(){super.connectedCallback();const ownerWindow=this.ownerDocument.defaultView;ownerWindow&&this.coalescer.setTimerHost(ownerWindow),this.hasUpdated&&this.displayedContent!==this.content&&this.coalescer.announce(this.content,{force:!0})}willUpdate(changed){super.willUpdate(changed),changed.has("coalesceMs")&&(this.coalescer.throttleMs=this.safeCoalesceMs),changed.has("content")&&this.coalescer.announce(this.content,{force:!this.hasUpdated}),changed.has("streaming")&&changed.get("streaming")!==void 0&&changed.get("streaming")!==this.streaming&&this.coalescer.announce(this.content,{force:!0}),changed.has("displayedContent")&&this.displayedContent!==this.lastScannedContent&&(this.lastScannedContent=this.displayedContent,this.lastScannedResult=this.markdownDetector.update(this.displayedContent))}updated(changed){super.updated(changed),changed.has("displayedContent")&&!this.effectiveMarkdown&&this.emit("lr-content-settled",null)}disconnectedCallback(){super.disconnectedCallback(),this.coalescer.cancel()}adoptedCallback(){super.adoptedCallback();const ownerWindow=this.ownerDocument.defaultView;ownerWindow&&this.coalescer.setTimerHost(ownerWindow)}get effectiveMarkdown(){return this.contentMode==="markdown"?!0:this.contentMode==="plain"?!1:this.lastScannedResult}stopOwnedEvent(event){event.stopPropagation()}render(){const cursor=this.streaming?html`<span part="cursor" aria-hidden="true"></span>`:nothing;return html`<div part="base"
|
|
2
|
+
>${this.effectiveMarkdown?html`${this.renderMarkdown()}${cursor}`:html`<span class="plain">${streamingTailText(this.displayedContent)}</span> ${cursor}`}</div
|
|
3
|
+
>`}}__decorate([property()],StreamingTextRuntimeBase.prototype,"content",void 0),__decorate([property({type:Boolean,reflect:!0})],StreamingTextRuntimeBase.prototype,"streaming",void 0),__decorate([property({attribute:"streaming-render"})],StreamingTextRuntimeBase.prototype,"streamingRender",void 0),__decorate([property({type:Number,attribute:"coalesce-ms"})],StreamingTextRuntimeBase.prototype,"coalesceMs",void 0),__decorate([property({reflect:!0,attribute:"content-mode"})],StreamingTextRuntimeBase.prototype,"contentMode",void 0),__decorate([property({attribute:!1})],StreamingTextRuntimeBase.prototype,"languages",void 0),__decorate([property({attribute:!1})],StreamingTextRuntimeBase.prototype,"languageLoaders",void 0),__decorate([property({type:Number,attribute:"tab-size"})],StreamingTextRuntimeBase.prototype,"tabSize",void 0),__decorate([property({attribute:"html-mode"})],StreamingTextRuntimeBase.prototype,"htmlMode",void 0),__decorate([property({type:Boolean,attribute:"without-gfm"})],StreamingTextRuntimeBase.prototype,"withoutGfm",void 0),__decorate([property({attribute:"link-target"})],StreamingTextRuntimeBase.prototype,"linkTarget",void 0),__decorate([property({attribute:"internal-link-prefix"})],StreamingTextRuntimeBase.prototype,"internalLinkPrefix",void 0),__decorate([property({type:Number,attribute:"heading-offset"})],StreamingTextRuntimeBase.prototype,"headingOffset",void 0),__decorate([property({type:Boolean,attribute:"without-syntax-highlighting"})],StreamingTextRuntimeBase.prototype,"withoutSyntaxHighlighting",void 0),__decorate([property({type:Boolean,attribute:"heading-anchors"})],StreamingTextRuntimeBase.prototype,"headingAnchors",void 0),__decorate([property({type:Boolean})],StreamingTextRuntimeBase.prototype,"math",void 0),__decorate([property({attribute:"max-height"})],StreamingTextRuntimeBase.prototype,"maxHeight",void 0),__decorate([state()],StreamingTextRuntimeBase.prototype,"displayedContent",void 0);export{StreamingTextRuntimeBase,looksLikeMarkdown};
|
|
@@ -4,7 +4,7 @@ import{__decorate}from"tslib";import{html}from"lit";import{property}from"lit/dec
|
|
|
4
4
|
.streaming=${this.streaming}
|
|
5
5
|
.streamingRender=${this.streamingRender}
|
|
6
6
|
.codeBlockHeader=${this.codeBlockHeader}
|
|
7
|
-
.languages=${this.
|
|
7
|
+
.languages=${this.markdownLanguages??{}}
|
|
8
8
|
.tabSize=${this.tabSize}
|
|
9
9
|
.htmlMode=${this.htmlMode}
|
|
10
10
|
.withoutGfm=${this.withoutGfm}
|
|
@@ -5,6 +5,7 @@ import{__decorate}from"tslib";import{html}from"lit";import{property}from"lit/dec
|
|
|
5
5
|
.streamingRender=${this.streamingRender}
|
|
6
6
|
.codeBlockHeader=${this.codeBlockHeader}
|
|
7
7
|
.languages=${this.languages}
|
|
8
|
+
.languageLoaders=${this.languageLoaders}
|
|
8
9
|
.tabSize=${this.tabSize}
|
|
9
10
|
.htmlMode=${this.htmlMode}
|
|
10
11
|
.withoutGfm=${this.withoutGfm}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraConversationItem}from'../conversation-item/conversation-item.class.js';import{type LyraSize}from'../../../internal/variants.js';import{type LyraTimestamp}from'../timestamp.js';export interface LyraChatThread{id:string;
|
|
1
|
+
import type{LyraPageSource}from'../../../data-sources.js';import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraConversationItem}from'../conversation-item/conversation-item.class.js';import{type LyraSize}from'../../../internal/variants.js';import{type LyraTimestamp}from'../timestamp.js';export interface LyraChatThread{id:string;
|
|
2
2
|
/** Required display/search text. Runtime records without a string title are omitted. */
|
|
3
3
|
title:string;excerpt?:string;timestamp?:LyraTimestamp;pinned?:boolean;archived?:boolean;}export type ThreadRowAction='pin'|'archive'|'delete';export type ThreadListGrouping='date'|'custom'|'none';
|
|
4
|
+
/** Global provider query; callbacks are applied by the provider, never to a partial page. */
|
|
5
|
+
export interface ThreadListSourceQuery{readonly search:string;readonly withArchived:boolean;readonly grouping:ThreadListGrouping;readonly collapsedGroupIds:readonly string[];readonly filter:LyraThreadList['filter'];readonly groupBy:LyraThreadList['groupBy'];readonly getGroupLabel:LyraThreadList['getGroupLabel'];readonly groupOrder:LyraThreadList['groupOrder'];}export type ThreadListSource=LyraPageSource<LyraChatThread,ThreadListSourceQuery>;
|
|
4
6
|
/** Payload shared by the `lr-group-toggle-request`/`lr-group-toggle` pair. */
|
|
5
7
|
export interface ThreadGroupToggleDetail{groupId:string;
|
|
6
8
|
/** Whether the group is shown in the resulting (on `lr-group-toggle-request`, the proposed)
|
|
@@ -49,12 +51,27 @@ expanded?:boolean;}export interface LyraThreadListEventMap{'lr-select':CustomEve
|
|
|
49
51
|
* `<lr-table>`) replaces the virtual list/empty state, behind its own `error` slot. `error` beats
|
|
50
52
|
* the built-in empty state, matching `<lr-table>`'s own precedence.
|
|
51
53
|
*
|
|
54
|
+
* With dataSource, the provider owns global search, filtering, ordering and group metadata.
|
|
55
|
+
* Source pages contain at most 500 records plus their intersecting group headings. sourceTotal
|
|
56
|
+
* counts all matching records before collapse; collapsedGroupIds hides only the current page's
|
|
57
|
+
* members and keeps their headings actionable. Group-label callbacks are passed to the provider;
|
|
58
|
+
* renderGroupAdornment is legacy-only because it requires a complete group array. Row render
|
|
59
|
+
* hooks still receive the original provider record identity. Source record display text is
|
|
60
|
+
* bounded to 65,536 aggregate UTF-16 units; malformed pages fail visibly without partial rows.
|
|
61
|
+
* Active IDs use provider locate to navigate once without scanning; clearing/restoring an ID
|
|
62
|
+
* starts a new lookup. Manual page changes do not reapply an unchanged active ID. Provider search
|
|
63
|
+
* events report the authoritative global record count after success. Same-source assignment or
|
|
64
|
+
* requestUpdate() refreshes; named paints retain the page. Removing dataSource restores threads
|
|
65
|
+
* and default-slot behavior. Source retry preserves the existing cancelable retry event.
|
|
66
|
+
*
|
|
52
67
|
* @customElement lr-thread-list
|
|
53
68
|
* @slot - Slotted mode only: host-supplied `lr-conversation-item`s, rendered in order. Each
|
|
54
69
|
* top-level assigned element that doesn't already carry an explicit `role` is given
|
|
55
70
|
* `role="listitem"`, since `[part="list"]` is `role="list"` in this mode and `lr-conversation-item`
|
|
56
71
|
* deliberately doesn't self-apply that role (see its own class doc).
|
|
57
72
|
* @slot empty - Replaces the built-in empty state.
|
|
73
|
+
* @csspart source-status - Provider loading text.
|
|
74
|
+
* @csspart source-pagination - Provider record-page navigation.
|
|
58
75
|
* @slot error - Replaces the built-in failed-load state, including its retry button, while `error`
|
|
59
76
|
* is set.
|
|
60
77
|
* @event lr-select - `detail: { conversationId }` -- a row was activated (data mode only).
|
|
@@ -91,6 +108,7 @@ expanded?:boolean;}export interface LyraThreadListEventMap{'lr-select':CustomEve
|
|
|
91
108
|
* @csspart clear-button - Clears the search field. Rendered only while it has a value.
|
|
92
109
|
* @csspart list - The list region.
|
|
93
110
|
* @csspart empty - The empty/no-matches state.
|
|
111
|
+
* @csspart limit - Original thread input-loss notice.
|
|
94
112
|
* @csspart error - The built-in `<lr-empty>` host rendered while `error` is set.
|
|
95
113
|
* @csspart error-base - Exported from the built-in error `<lr-empty>`'s own `base` part.
|
|
96
114
|
* @csspart error-icon - Exported from the built-in error `<lr-empty>`'s `icon` part.
|
|
@@ -185,11 +203,23 @@ expanded?:boolean;}export interface LyraThreadListEventMap{'lr-select':CustomEve
|
|
|
185
203
|
* @status stable
|
|
186
204
|
* @since 4.0.0
|
|
187
205
|
*/
|
|
188
|
-
export declare class LyraThreadList extends LyraElement<LyraThreadListEventMap>{protected static collectionSupport:import("../../../internal/lyra-element.js").LyraCollectionSupport;protected static readonly ownedCollectionProperties:readonly string[];protected static readonly identityCollectionProperties:readonly string[];protected static readonly immutableSourceCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];private readonly hostDescription;adoptedCallback():void;
|
|
206
|
+
export declare class LyraThreadList extends LyraElement<LyraThreadListEventMap>{protected static collectionSupport:import("../../../internal/lyra-element.js").LyraCollectionSupport;protected static readonly ownedCollectionProperties:readonly string[];protected static readonly identityCollectionProperties:readonly string[];protected static readonly immutableSourceCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];private readonly inputLimitAnnouncements;private get inputLimitMessage();private syncInputLimitAnnouncement;private readonly hostDescription;adoptedCallback():void;private _dataSource?;private sourceEpoch;private sourceSyncing;private sourceInputs?;private sourceQueryInputs?;private sourceRequestVersion;private sourceResult?;private sourceRows;private sourcePageModel?;private readonly sourceRowIdentities;private readonly sourceGroupIdentities;private sourceFilterIntent?;private sourceActiveInputs?;private sourceActiveReveal?;private sourceStateVersion;private readonly sourcePages;
|
|
207
|
+
/** Full-source page provider, taking precedence over threads and the default slot. Present
|
|
208
|
+
* invalid providers fail visibly. Reassign even the same source or call requestUpdate() to
|
|
209
|
+
* refresh; undefined restores legacy data/slotted mode. */
|
|
210
|
+
get dataSource():ThreadListSource|undefined;set dataSource(value:ThreadListSource|undefined);
|
|
211
|
+
/** Zero-based source record page. Collapsing groups preserves this page and its record positions. */
|
|
212
|
+
sourcePage:number;
|
|
213
|
+
/** Source records per page, normalized to 1..500. Size changes reset page 0. */
|
|
214
|
+
sourcePageSize:number;
|
|
215
|
+
/** Exact current-query record count before group collapse, or null before success/without a source. */
|
|
216
|
+
get sourceTotal():number|null;private get sourceMode();private get sourceFailed();private get sourceBlocked();private projectSourceThread;private validateSourceGroups;private syncSource;private acceptSourcePage;private syncSourceActive;private revealSourceActive;private sourceModel;private canUseThread;private canUseGroup;private onSourcePage;private currentSourceRetry;private retrySource;
|
|
189
217
|
/** At least one valid thread ⇒ data mode (the default slot is ignored). No valid threads and no
|
|
190
218
|
* slotted content ⇒ data mode with zero rows (the built-in empty state). No valid threads with
|
|
191
219
|
* slotted content ⇒ slotted mode. Thread ids must be nonempty and unique; invalid/later
|
|
192
|
-
* duplicate rows are omitted, first wins.
|
|
220
|
+
* duplicate rows are omitted, first wins. Group headings do not consume the thread admission
|
|
221
|
+
* budget: all admitted threads remain addressable in the virtual list. The first 10,000 input records are retained,
|
|
222
|
+
* matching newest-first sidebar ordering. */
|
|
193
223
|
threads:readonly LyraChatThread[];
|
|
194
224
|
/**
|
|
195
225
|
* Data mode: marks the matching raw thread id `active`/`aria-current` and scrolls it into view.
|
|
@@ -311,7 +341,7 @@ errorDescription:string;
|
|
|
311
341
|
* `[part="row"]` one level up, and an unstyled block box contributes exactly its child's height
|
|
312
342
|
* to it, so adding it leaves every measured row height unchanged. Applies to rows only -- group
|
|
313
343
|
* headers never pass through `wrapRow` and never carry `row-wrapper`. */
|
|
314
|
-
wrapRow?:(thread:LyraChatThread,row:TemplateResult)=>TemplateResult;private readonly stickyGroupItems;private dataModel?;private searchText;private hasEmptySlot;private hasDefaultSlotContent;private virtualListEl?;private liveRegion?;private searchInputEl?;private focusTaskGeneration;private readonly injectedListItemRoles;private get dataMode();connectedCallback():void;protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private defaultSlottedElements;private markAsListItems;private restoreInjectedListItemRoles;disconnectedCallback():void;private get normalizedThreads();private sourceThread;private sourceThreads;private get visibleThreads();private bucketFor;private bucketLabel;private dateForBucket;private orderedCustomGroupIds;private groupedItems;private buildItems;private setSearchText;private onSearchInput;private onClearSearch;private announceMatchCount;private onSearchKeyDown;private onSearchFocus;private onSearchBlur;
|
|
344
|
+
wrapRow?:(thread:LyraChatThread,row:TemplateResult)=>TemplateResult;private readonly stickyGroupItems;private dataModel?;private searchText;private hasEmptySlot;private hasDefaultSlotContent;private virtualListEl?;private liveRegion?;private searchInputEl?;private focusTaskGeneration;private readonly injectedListItemRoles;private get dataMode();connectedCallback():void;private contentRefreshPending;requestUpdate(...args:Parameters<LyraElement['requestUpdate']>):void;protected willUpdate(changed:PropertyValues):void;private sourceStatusInitialized;private previousSourceStatus;protected updated(changed:PropertyValues):void;private defaultSlottedElements;private markAsListItems;private restoreInjectedListItemRoles;disconnectedCallback():void;private get normalizedThreads();private sourceThread;private sourceThreads;private readonly titleHaystacks;private readonly excerptHaystacks;private get visibleThreads();private bucketFor;private bucketLabel;private dateForBucket;private orderedCustomGroupIds;private groupedItems;private buildItems;private setSearchText;private onSearchInput;private onClearSearch;private announceMatchCount;private onSearchKeyDown;private onSearchFocus;private onSearchBlur;
|
|
315
345
|
/** The rendered `<lr-conversation-item>` for one thread's `conversationId` -- a data-mode
|
|
316
346
|
* thread's own `id`, or a slotted item's own `conversation-id` -- or `null` when it is not
|
|
317
347
|
* currently rendered: filtered out by `withArchived`/search, windowed out of the virtualized
|