@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{streamingTailText}from"./markdown-streaming-tail.js";import{MARKDOWN_CODE_HEADER_MAX,sanitizeCodeLanguageLabel}from"./markdown-code-header.js";import{html,nothing}from"lit";import{unsafeHTML}from"lit/directives/unsafe-html.js";import{styleMap}from"lit/directives/style-map.js";import{Slugger}from"../../../internal/slugger.js";import{finiteInteger}from"../../../internal/numbers.js";import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{createTextQuoteIndex,rangeFromTextQuoteMatch,rangesFromTextQuoteMatches,scopeFromElement,TEXT_QUOTE_LIMITS,TEXT_SELECTION_RECT_LIMIT}from"../../../internal/text-quote.js";import{prioritizedHighlightCandidates}from"../../../internal/anchor-target.js";import{resolveGuardedRel}from"../../../internal/link-rel.js";import{safeLinkHref,safeMediaSrc}from"../../../internal/safe-url.js";import{supportsCustomHighlights}from"../../../internal/text-highlights.js";import{normalizeShikiLanguage,SHIKI_THEMES}from"../code-block/shiki-types.js";import{resolveIsDarkTheme,watchDarkTheme}from"../code-block/shiki-dark-theme.js";import{loadMarkdownDeps,getMarkdownDepsIfLoaded}from"./markdown-loader.js";import{getKatex}from"./katex-loader.js";function createMarkdownParser(marked){if(!(!marked||typeof marked!="object"&&typeof marked!="function"||typeof marked.Marked!="function"))return new marked.Marked}class MarkdownParserController{get(marked){if(marked)return this.module!==marked&&(this.module=marked,this.parser=createMarkdownParser(marked)),this.parser}}function normalizeMarkdownLeadingTabs(content,tabSize){const width=finiteInteger(tabSize,4,1,32);return content.replace(/^[\t ]+/gm,indentation=>{let column=0,normalized="";for(const character of indentation){const spaces=character===" "?width-column%width:1;normalized+=" ".repeat(spaces),column+=spaces}return normalized})}class MarkdownOwnedAnimationFrameController{get handle(){return this.pending?.handle}get settled(){return this.pending?.settled}request(owner,callback){if(this.pending)return this.pending.handle;let resolveFrame;const settled=new Promise(resolve=>{resolveFrame=resolve}),pending={owner,settled,resolve:resolveFrame};this.pending=pending;try{pending.handle=owner.requestAnimationFrame(()=>{this.pending===pending&&(this.pending=void 0,pending.resolve(),callback())})}catch{this.pending===pending&&(this.pending=void 0),pending.resolve();return}return pending.handle}cancel(){const pending=this.pending;if(!pending)return!1;this.pending=void 0;try{pending.handle!==void 0&&pending.owner.cancelAnimationFrame(pending.handle)}catch{}finally{pending.resolve()}return!0}}const HTML_ESCAPES={"&":"&","<":"<",">":">",'"':""","'":"'"};function escapeHtml(text){return text.replace(/[&<>"']/g,ch=>HTML_ESCAPES[ch]??ch)}const TEXT_ESCAPE_PATTERN=/[<>"']|&(?!(?:#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g;function escapeMarkdownText(text){return text.replace(TEXT_ESCAPE_PATTERN,ch=>HTML_ESCAPES[ch]??ch)}function cleanHref(href){try{return encodeURI(href).replace(/%25/g,"%")}catch{return null}}const HIGHLIGHT_CACHE_MAX=100,HIGHLIGHT_CACHE_MAX_BYTES=2*1024*1024,HIGHLIGHT_CACHE_ENTRY_MAX_BYTES=512*1024,FAILED_HIGHLIGHT_MAX=256;function markdownHighlightKey(language,code){let a=2166136261,b=2654435769;const input=`${language}\0${code}`;for(let index=0;index<input.length;index++){const unit=input.charCodeAt(index);a=Math.imul(a^unit,16777619)>>>0,b=Math.imul(b^unit,2246822507)>>>0}return`${language}:${code.length}:${a.toString(36)}:${b.toString(36)}`}function addFailedHighlightKey(failed,key){if(!failed.has(key)){if(failed.size>=FAILED_HIGHLIGHT_MAX){const oldest=failed.values().next().value;oldest!==void 0&&failed.delete(oldest)}failed.add(key)}}async function processPendingHighlights(pending,worker,concurrency=4){const unique=[...new Map(pending.map(item=>[item.key,item])).values()];let next=0;const run=async()=>{for(;next<unique.length;){const item=unique[next++];item&&await worker(item)}};await Promise.all(Array.from({length:Math.min(concurrency,unique.length)},()=>run()))}function getCachedHighlight(cache,key){const cached=cache.get(key);return cached!==void 0&&(cache.delete(key),cache.set(key,cached)),cached}const cacheBytes=new WeakMap;function setCachedHighlight(cache,key,html2,max=HIGHLIGHT_CACHE_MAX,maxBytes=HIGHLIGHT_CACHE_MAX_BYTES){const entryBytes=(key.length+html2.length)*2;if(entryBytes>HIGHLIGHT_CACHE_ENTRY_MAX_BYTES||entryBytes>maxBytes)return!1;let retainedBytes=cacheBytes.get(cache)??0;const evict=evictedKey=>{retainedBytes-=(evictedKey.length+(cache.get(evictedKey)??"").length)*2,cache.delete(evictedKey)};for(cache.has(key)&&evict(key);cache.size>=max||retainedBytes+entryBytes>maxBytes;){const oldest=cache.keys().next().value;if(oldest===void 0)break;evict(oldest)}return cache.set(key,html2),cacheBytes.set(cache,retainedBytes+entryBytes),!0}const MATH_INLINE_RE=/^\$(?![\s$])((?:\\\$|[^$])*?(?:\\\$|[^$\s\\]))\$(?![$\d])/;function mathExtension(renderMath){return{name:"math",level:"inline",start(src){const index=src.indexOf("$");return index===-1?void 0:index},tokenizer(src){if(src.startsWith("$$")){const close=src.indexOf("$$",2);if(close>2){const raw=src.slice(0,close+2),tex=src.slice(2,close).trim();if(tex)return{type:"math",raw,tex,display:!0}}}const inline=MATH_INLINE_RE.exec(src);if(inline)return{type:"math",raw:inline[0],tex:inline[1].replace(/\\\$/g,"$").trim(),display:!1}},renderer(token){return renderMath(token)}}}const MARKDOWN_SANITIZER_WARNING_KEY="lyra-markdown-dompurify-unavailable",MARKDOWN_SANITIZER_WARNING="<lr-markdown>/<lr-markdown-core>: HTML sanitization is unavailable because the optional DOMPurify peer could not load. Content is rendered as plain text unless trusted HTML is explicitly selected.";function warnMarkdownSanitizerUnavailable(){devWarnOnce(MARKDOWN_SANITIZER_WARNING_KEY,MARKDOWN_SANITIZER_WARNING)}function isTaskListItem(item){return typeof item=="object"&&item!==null&&item.task===!0}function taskItemCheckboxLabel(context,tokens){for(const candidate of tokens){if(typeof candidate!="object"||candidate===null)continue;const token=candidate;if(token.type!=="text"&&token.type!=="paragraph"||!Array.isArray(token.tokens))continue;const inlineTokens=token.tokens.filter(inline=>typeof inline!="object"||inline===null?!0:inline.type!=="checkbox"),label=context.parser.parseInline(inlineTokens,context.parser.textRenderer).replace(/\s+/g," ").trim();if(label)return label}return null}function parseMarkdownDocument(options){return createMarkdownRenderContext(options).render(options.content)}function createMarkdownRenderContext(options){const{marked,gfm,linkTarget,escapeHtmlOption,trustedHtmlOption,highlightCodeOption,getCachedHighlight:getCached,failedHighlightKeys,headingAnchorsOption,mathOption,cachedKatex,pendingKeys,headingTreeOut}=options,headingOffset=finiteInteger(options.headingOffset,0),slugger=options.slugger??new Slugger,activeHighlightKeys=options.activeHighlightKeys??new Set,pendingHighlightKeys=new Set(options.pendingKeys.map(({key})=>key)),taskItemCheckboxLabels=[];let hadMathFallback=!1,hasRawHtml
|
|
1
|
+
import{progressiveMarkdownBlocks,streamingTailText}from"./markdown-streaming-tail.js";import{MARKDOWN_CODE_HEADER_MAX,sanitizeCodeLanguageLabel}from"./markdown-code-header.js";import{html,nothing}from"lit";import{unsafeHTML}from"lit/directives/unsafe-html.js";import{styleMap}from"lit/directives/style-map.js";import{Slugger}from"../../../internal/slugger.js";import{finiteInteger}from"../../../internal/numbers.js";import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{createTextQuoteIndex,rangeFromTextQuoteMatch,rangesFromTextQuoteMatches,scopeFromElement,TEXT_QUOTE_LIMITS,TEXT_SELECTION_RECT_LIMIT}from"../../../internal/text-quote.js";import{prioritizedHighlightCandidates}from"../../../internal/anchor-target.js";import{resolveGuardedRel}from"../../../internal/link-rel.js";import{safeLinkHref,safeMediaSrc}from"../../../internal/safe-url.js";import{supportsCustomHighlights}from"../../../internal/text-highlights.js";import{normalizeShikiLanguage,SHIKI_THEMES}from"../code-block/shiki-types.js";import{resolveIsDarkTheme,watchDarkTheme}from"../code-block/shiki-dark-theme.js";import{loadMarkdownDeps,getMarkdownDepsIfLoaded}from"./markdown-loader.js";import{getKatex}from"./katex-loader.js";function createMarkdownParser(marked){if(!(!marked||typeof marked!="object"&&typeof marked!="function"||typeof marked.Marked!="function"))return new marked.Marked}class MarkdownParserController{get(marked){if(marked)return this.module!==marked&&(this.module=marked,this.parser=createMarkdownParser(marked)),this.parser}}function normalizeMarkdownLeadingTabs(content,tabSize){const width=finiteInteger(tabSize,4,1,32);return content.replace(/^[\t ]+/gm,indentation=>{let column=0,normalized="";for(const character of indentation){const spaces=character===" "?width-column%width:1;normalized+=" ".repeat(spaces),column+=spaces}return normalized})}class MarkdownOwnedAnimationFrameController{get handle(){return this.pending?.handle}get settled(){return this.pending?.settled}request(owner,callback){if(this.pending)return this.pending.handle;let resolveFrame;const settled=new Promise(resolve=>{resolveFrame=resolve}),pending={owner,settled,resolve:resolveFrame};this.pending=pending;try{pending.handle=owner.requestAnimationFrame(()=>{this.pending===pending&&(this.pending=void 0,pending.resolve(),callback())})}catch{this.pending===pending&&(this.pending=void 0),pending.resolve();return}return pending.handle}cancel(){const pending=this.pending;if(!pending)return!1;this.pending=void 0;try{pending.handle!==void 0&&pending.owner.cancelAnimationFrame(pending.handle)}catch{}finally{pending.resolve()}return!0}}const HTML_ESCAPES={"&":"&","<":"<",">":">",'"':""","'":"'"};function escapeHtml(text){return text.replace(/[&<>"']/g,ch=>HTML_ESCAPES[ch]??ch)}const TEXT_ESCAPE_PATTERN=/[<>"']|&(?!(?:#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g;function escapeMarkdownText(text){return text.replace(TEXT_ESCAPE_PATTERN,ch=>HTML_ESCAPES[ch]??ch)}function cleanHref(href){try{return encodeURI(href).replace(/%25/g,"%")}catch{return null}}const HIGHLIGHT_CACHE_MAX=100,MARKDOWN_HIGHLIGHT_SOURCE_MAX=8192,HIGHLIGHT_CACHE_MAX_BYTES=2*1024*1024,HIGHLIGHT_CACHE_ENTRY_MAX_BYTES=512*1024,FAILED_HIGHLIGHT_MAX=256;function markdownHighlightKey(language,code){let a=2166136261,b=2654435769;const input=`${language}\0${code}`;for(let index=0;index<input.length;index++){const unit=input.charCodeAt(index);a=Math.imul(a^unit,16777619)>>>0,b=Math.imul(b^unit,2246822507)>>>0}return`${language}:${code.length}:${a.toString(36)}:${b.toString(36)}`}function addFailedHighlightKey(failed,key){if(!failed.has(key)){if(failed.size>=FAILED_HIGHLIGHT_MAX){const oldest=failed.values().next().value;oldest!==void 0&&failed.delete(oldest)}failed.add(key)}}async function processPendingHighlights(pending,worker,concurrency=4){const unique=[...new Map(pending.map(item=>[item.key,item])).values()];let next=0;const run=async()=>{for(;next<unique.length;){const item=unique[next++];item&&await worker(item)}};await Promise.all(Array.from({length:Math.min(concurrency,unique.length)},()=>run()))}function getCachedHighlight(cache,key){const cached=cache.get(key);return cached!==void 0&&(cache.delete(key),cache.set(key,cached)),cached}const cacheBytes=new WeakMap;function setCachedHighlight(cache,key,html2,max=HIGHLIGHT_CACHE_MAX,maxBytes=HIGHLIGHT_CACHE_MAX_BYTES){const entryBytes=(key.length+html2.length)*2;if(entryBytes>HIGHLIGHT_CACHE_ENTRY_MAX_BYTES||entryBytes>maxBytes)return!1;let retainedBytes=cacheBytes.get(cache)??0;const evict=evictedKey=>{retainedBytes-=(evictedKey.length+(cache.get(evictedKey)??"").length)*2,cache.delete(evictedKey)};for(cache.has(key)&&evict(key);cache.size>=max||retainedBytes+entryBytes>maxBytes;){const oldest=cache.keys().next().value;if(oldest===void 0)break;evict(oldest)}return cache.set(key,html2),cacheBytes.set(cache,retainedBytes+entryBytes),!0}const MATH_INLINE_RE=/^\$(?![\s$])((?:\\\$|[^$])*?(?:\\\$|[^$\s\\]))\$(?![$\d])/;function mathExtension(renderMath){return{name:"math",level:"inline",start(src){const index=src.indexOf("$");return index===-1?void 0:index},tokenizer(src){if(src.startsWith("$$")){const close=src.indexOf("$$",2);if(close>2){const raw=src.slice(0,close+2),tex=src.slice(2,close).trim();if(tex)return{type:"math",raw,tex,display:!0}}}const inline=MATH_INLINE_RE.exec(src);if(inline)return{type:"math",raw:inline[0],tex:inline[1].replace(/\\\$/g,"$").trim(),display:!1}},renderer(token){return renderMath(token)}}}const MARKDOWN_SANITIZER_WARNING_KEY="lyra-markdown-dompurify-unavailable",MARKDOWN_SANITIZER_WARNING="<lr-markdown>/<lr-markdown-core>: HTML sanitization is unavailable because the optional DOMPurify peer could not load. Content is rendered as plain text unless trusted HTML is explicitly selected.";function warnMarkdownSanitizerUnavailable(){devWarnOnce(MARKDOWN_SANITIZER_WARNING_KEY,MARKDOWN_SANITIZER_WARNING)}function isTaskListItem(item){return typeof item=="object"&&item!==null&&item.task===!0}function taskItemCheckboxLabel(context,tokens){for(const candidate of tokens){if(typeof candidate!="object"||candidate===null)continue;const token=candidate;if(token.type!=="text"&&token.type!=="paragraph"||!Array.isArray(token.tokens))continue;const inlineTokens=token.tokens.filter(inline=>typeof inline!="object"||inline===null?!0:inline.type!=="checkbox"),label=context.parser.parseInline(inlineTokens,context.parser.textRenderer).replace(/\s+/g," ").trim();if(label)return label}return null}function parseMarkdownDocument(options){return createMarkdownRenderContext(options).render(options.content)}function createMarkdownRenderContext(options){const{marked,gfm,linkTarget,escapeHtmlOption,trustedHtmlOption,highlightCodeOption,getCachedHighlight:getCached,failedHighlightKeys,headingAnchorsOption,mathOption,cachedKatex,pendingKeys,headingTreeOut}=options,headingOffset=finiteInteger(options.headingOffset,0),slugger=options.slugger??new Slugger,activeHighlightKeys=options.activeHighlightKeys??new Set,pendingHighlightKeys=new Set(options.pendingKeys.map(({key})=>key)),taskItemCheckboxLabels=[];let hadMathFallback=!1,hasRawHtml=(options.markedConfigurations??[]).some(configuration=>!!(configuration?.renderer||configuration?.hooks||configuration?.extensions)),codeInvocations=0,codeHasSourceTabs=!1;const probeCodeTabs=options.codeBlockHeaderOption===!0&&options.rawContent!==void 0&&/^[\t ]*\t/m.test(options.rawContent)?rawCodeTabProbe(options.rawContent,options.content,options.tabSize??4):void 0,headerEnabled=options.codeBlockHeaderOption===!0&&!!(options.codeFrameNonce&&options.codeBlocksOut),wrapCode=(inner,token,lang)=>{const ordinal=codeInvocations++,source=token.text.replace(/\n$/,""),hasSourceTabs=probeCodeTabs?.(token.raw)??!1,records=options.codeBlocksOut;if(!headerEnabled||!records||!source||token.escaped||records.length+(options.codeBlockIndexOffset??0)>=MARKDOWN_CODE_HEADER_MAX)return inner;const index=records.length+(options.codeBlockIndexOffset??0);return/^ +/m.test(source)&&hasSourceTabs&&(codeHasSourceTabs=!0),records.push({language:sanitizeCodeLanguageLabel(lang),source,ordinal}),`<div part='code-block-frame' data-lr-code-frame='${options.codeFrameNonce}:${index}'>${inner.replace(/\n$/,"")}</div>
|
|
2
2
|
`},instance=new marked.Marked;mathOption&&instance.use({extensions:[mathExtension(token=>{if(!cachedKatex)return hadMathFallback=!0,escapeHtml(token.display?`$$${token.tex}$$`:`$${token.tex}$`);try{const mathml=cachedKatex.renderToString(token.tex,{output:"mathml",throwOnError:!1});return`<span part='math' data-display='${token.display?"block":"inline"}'>${mathml}</span>`}catch{return escapeHtml(token.display?`$$${token.tex}$$`:`$${token.tex}$`)}})]}),instance.use({renderer:{heading(token){const depth=Math.min(6,Math.max(1,token.depth+headingOffset)),label=this.parser.parseInline(token.tokens,this.parser.textRenderer),slug=slugger.slug(label);headingTreeOut.push({id:slug,label,level:depth});const idAttr=headingAnchorsOption&&slug?` id='${escapeHtml(slug)}'`:"";return`<h${depth} part='heading'${idAttr}>${this.parser.parseInline(token.tokens)}</h${depth}>
|
|
3
3
|
`},paragraph(token){return`<p part='paragraph'>${this.parser.parseInline(token.tokens)}</p>
|
|
4
4
|
`},list(token){const ordered=token.ordered,start=token.start,allTaskItems=token.items.length>0&&token.items.every(isTaskListItem);let body="";for(const item of token.items)body+=this.listitem(item);const tag=ordered?"ol":"ul",startAttr=ordered&&start!==1?` start='${start}'`:"";return`<${tag}${allTaskItems?ordered?" part='list task-list'":" part='list task-list' role='list'":" part='list'"}${startAttr}>
|
|
@@ -6,7 +6,7 @@ ${body}</${tag}>
|
|
|
6
6
|
`},listitem(token){const isTaskItem=token.task===!0,label=token.task===!0?taskItemCheckboxLabel(this,token.tokens):null;taskItemCheckboxLabels.push(label);try{return isTaskItem?`<li${token.checked===!0?" part='task-item task-item-checked'":" part='task-item'"}>${this.parser.parse(token.tokens)}</li>
|
|
7
7
|
`:`<li>${this.parser.parse(token.tokens)}</li>
|
|
8
8
|
`}finally{taskItemCheckboxLabels.pop()}},checkbox(token){const label=taskItemCheckboxLabels.at(-1),checked=token.checked?" checked=''":"",labelAttr=label?` aria-label='${escapeHtml(label)}'`:"";return`<input part='task-checkbox'${checked} disabled='' type='checkbox'${labelAttr}>`},code(token){const lang=(token.lang??"").trim().split(/\s+/)[0]??"",body=`${token.text.replace(/\n$/,"")}
|
|
9
|
-
`,text=token.escaped?body:escapeHtml(body);if(highlightCodeOption&&lang){const key=markdownHighlightKey(lang,body);if(activeHighlightKeys.has(key)||activeHighlightKeys.size<HIGHLIGHT_CACHE_MAX){activeHighlightKeys.add(key);const cached=getCached(key);if(cached!==void 0)return wrapCode(cached,token,lang);!failedHighlightKeys.has(key)&&!pendingHighlightKeys.has(key)&&(pendingHighlightKeys.add(key),pendingKeys.push({key,lang,code:body}))}}const cls=lang?` class='language-${escapeHtml(lang)}'`:"";return wrapCode(`<pre part='code-block' tabindex='0'><code${cls}>${text}</code></pre>
|
|
9
|
+
`,text=token.escaped?body:escapeHtml(body);if(highlightCodeOption&&lang&&body.length<=MARKDOWN_HIGHLIGHT_SOURCE_MAX){const key=markdownHighlightKey(lang,body);if(activeHighlightKeys.has(key)||activeHighlightKeys.size<HIGHLIGHT_CACHE_MAX){activeHighlightKeys.add(key);const cached=getCached(key);if(cached!==void 0)return wrapCode(cached,token,lang);!failedHighlightKeys.has(key)&&!pendingHighlightKeys.has(key)&&(pendingHighlightKeys.add(key),pendingKeys.push({key,lang,code:body}))}}const cls=lang?` class='language-${escapeHtml(lang)}'`:"";return wrapCode(`<pre part='code-block' tabindex='0'><code${cls}>${text}</code></pre>
|
|
10
10
|
`,token,lang)},codespan(token){return`<code part='inline-code'>${escapeHtml(token.text)}</code>`},blockquote(token){return`<blockquote part='blockquote'>
|
|
11
11
|
${this.parser.parse(token.tokens)}</blockquote>
|
|
12
12
|
`},table(token){let headerRow="";for(const cell of token.header){const text=this.parser.parseInline(cell.tokens),alignAttr=cell.align?` align='${cell.align}'`:"";headerRow+=`<th scope='col'${alignAttr}>${text}</th>`}let bodyRows="";for(const row of token.rows){let rowHtml="";for(const cell of row)rowHtml+=this.tablecell(cell);bodyRows+=this.tablerow({text:rowHtml})}const thead=`<thead>
|
|
@@ -14,8 +14,8 @@ ${this.tablerow({text:headerRow})}</thead>
|
|
|
14
14
|
`,tbody=bodyRows?`<tbody>${bodyRows}</tbody>
|
|
15
15
|
`:"";return`<div part='table-wrapper' role='group' tabindex='0'><table part='table'>
|
|
16
16
|
${thead}${tbody}</table></div>
|
|
17
|
-
`},link(token){const text=this.parser.parseInline(token.tokens),href=cleanHref(token.href);if(href===null)return text;const safeHref=trustedHtmlOption?href:safeLinkHref(href);if(safeHref===null)return text;const titleAttr=token.title?` title='${escapeHtml(token.title)}'`:"",targetAttr=linkTarget?` target='${escapeHtml(linkTarget)}' rel='noopener noreferrer'`:"";return`<a part='link' href='${escapeHtml(safeHref)}'${titleAttr}${targetAttr}>${text}</a>`},image(token){const altText=this.parser.parseInline(token.tokens,this.parser.textRenderer),href=cleanHref(token.href);if(href===null)return escapeHtml(altText);const safeHref=trustedHtmlOption?href:safeMediaSrc(href);if(safeHref===null)return escapeHtml(altText);const titleAttr=token.title?` title='${escapeHtml(token.title)}'`:"";return`<img part='img' src='${escapeHtml(safeHref)}' alt='${escapeHtml(altText)}'${titleAttr}>`},html(token){return hasRawHtml=!0,escapeHtmlOption?escapeHtml(token.text):token.text},text(token){return escapeHtmlOption&&token.escaped===!0&&!token.tokens?escapeMarkdownText(token.text):!1}}});for(const configuration of options.markedConfigurations??[]){if(!configuration||typeof configuration!="object")continue;const configuredDefaults=Object.fromEntries(Object.entries(configuration).filter(([,value])=>value!=null));Object.keys(configuredDefaults).length>0&&instance.use(configuredDefaults)}const capable=instance;return{instance:capable,render(source,seed){let html2,state={inLink:!1,inRawBlock:!1};if(seed){const defaults={...instance.defaults,gfm,async:!1},lexer=new capable.Lexer(defaults);Object.assign(lexer.tokens.links,seed.links),Object.assign(lexer.state,seed.state);const tokens=lexer.lex(source);state={inLink:lexer.state.inLink,inRawBlock:lexer.state.inRawBlock},instance.defaults.walkTokens&&capable.walkTokens(tokens,instance.defaults.walkTokens),html2=capable.parser(tokens,defaults)}else html2=instance.parse(source,{gfm,async:!1});if(typeof html2!="string")throw new TypeError("The Markdown parser returned non-string markup.");return headerEnabled&&options.rawContent!==void 0&&options.tabSize!==void 0
|
|
18
|
-
`}catch{return null}}const markdownDepsLoadGenerations=new WeakMap;function beginMarkdownDepsLoad(host,apply){const generation=(markdownDepsLoadGenerations.get(host)??0)+1;markdownDepsLoadGenerations.set(host,generation);const alreadyLoaded=getMarkdownDepsIfLoaded();if(alreadyLoaded){apply(alreadyLoaded);return}loadMarkdownDeps().then(resolved=>{!host.isConnected||markdownDepsLoadGenerations.get(host)!==generation||apply(resolved)})}function markdownNeedsReparse(changed){return changed.has("content")||changed.has("tabSize")||changed.has("htmlMode")||changed.has("withoutGfm")||changed.has("linkTarget")||changed.has("headingOffset")||changed.has("streaming")||changed.has("headingAnchors")||changed.has("math")||changed.has("withoutSyntaxHighlighting")||changed.has("languages")||changed.has("codeBlockHeader")||changed.has("streamingRender")}function markdownHighlightConfigChanged(changed){return changed.has("withoutSyntaxHighlighting")||changed.has("languages")||changed.has("codeBlockHeader")}function markdownLanguageSetChanged(changed){return changed.has("languages")}function normalizeMarkdownStreamingRender(value){return value==="progressive"?"progressive":"plain"}function normalizeMarkdownHtmlMode(value){return value==="escape"||value==="trusted"?value:"sanitize"}function markdownSanitizerPolicy(options){return options.htmlMode!=="sanitize"?null:{ADD_ATTR:["target"],FORBID_ATTR:["style","data-lr-code-chrome"],...options.codeBlockHeader?{FORBID_TAGS:["style"]}:{},...options.math?{ADD_TAGS:["semantics","annotation"]}:{}}}function renderMarkdownDocument(options){const{deps,tag}=options;if(!deps.marked)return{status:"fallback",error:new Error(`<${tag}> could not render: the "marked" peer dependency failed to load.`),headingTree:null};const pendingKeys=[],headingTree=[];let rawHtml,hadMathFallback;try{const parsed=options.parse(deps.marked,pendingKeys,headingTree);rawHtml=parsed.html,hadMathFallback=parsed.hadMathFallback}catch(error){return{status:"fallback",error,headingTree:null}}options.onParsed();const mathFailed=hadMathFallback&&options.isKatexConfirmedMissing(),policy=markdownSanitizerPolicy({...options,codeBlockHeader:options.codeBlockHeader??!1});if(policy===null)return{status:"rendered",html:
|
|
17
|
+
`},link(token){const text=this.parser.parseInline(token.tokens),href=cleanHref(token.href);if(href===null)return text;const safeHref=trustedHtmlOption?href:safeLinkHref(href);if(safeHref===null)return text;const titleAttr=token.title?` title='${escapeHtml(token.title)}'`:"",targetAttr=linkTarget?` target='${escapeHtml(linkTarget)}' rel='noopener noreferrer'`:"";return`<a part='link' href='${escapeHtml(safeHref)}'${titleAttr}${targetAttr}>${text}</a>`},image(token){const altText=this.parser.parseInline(token.tokens,this.parser.textRenderer),href=cleanHref(token.href);if(href===null)return escapeHtml(altText);const safeHref=trustedHtmlOption?href:safeMediaSrc(href);if(safeHref===null)return escapeHtml(altText);const titleAttr=token.title?` title='${escapeHtml(token.title)}'`:"";return`<img part='img' src='${escapeHtml(safeHref)}' alt='${escapeHtml(altText)}'${titleAttr}>`},html(token){return hasRawHtml=!0,escapeHtmlOption?escapeHtml(token.text):token.text},text(token){return escapeHtmlOption&&token.escaped===!0&&!token.tokens?escapeMarkdownText(token.text):!1}}});for(const configuration of options.markedConfigurations??[]){if(!configuration||typeof configuration!="object")continue;const configuredDefaults=Object.fromEntries(Object.entries(configuration).filter(([,value])=>value!=null));Object.keys(configuredDefaults).length>0&&instance.use(configuredDefaults)}const capable=instance;return{instance:capable,render(source,seed){let html2,state={inLink:!1,inRawBlock:!1};if(seed){const defaults={...instance.defaults,gfm,async:!1},lexer=new capable.Lexer(defaults);Object.assign(lexer.tokens.links,seed.links),Object.assign(lexer.state,seed.state);const tokens=lexer.lex(source);state={inLink:lexer.state.inLink,inRawBlock:lexer.state.inRawBlock},instance.defaults.walkTokens&&capable.walkTokens(tokens,instance.defaults.walkTokens),html2=capable.parser(tokens,defaults)}else html2=instance.parse(source,{gfm,async:!1});if(typeof html2!="string")throw new TypeError("The Markdown parser returned non-string markup.");return headerEnabled&&options.rawContent!==void 0&&options.tabSize!==void 0&&codeHasSourceTabs&&restoreMarkdownCodeTabs(instance,options,codeInvocations),{html:html2,hadMathFallback,hasRawHtml,state}}}}function rawCodeTabProbe(raw,normalized,tabSize){let cursor=0,lines;return envelope=>{if(!envelope)return!0;const start=normalized.indexOf(envelope,cursor);if(start<0)return!0;if(cursor=start+envelope.length,!lines){lines=[];let offset=0;for(const match of raw.matchAll(/[^\r\n\u2028\u2029]*(?:\r\n|[\r\n\u2028\u2029]|$)/g))match[0]&&(lines.push({normalized:offset,raw:match.index,end:match.index+match[0].length}),offset+=normalizeMarkdownLeadingTabs(match[0],tabSize).length);if(offset!==normalized.length)return!0}const locate=offset=>{let low=0,high=lines.length;for(;low+1<high;){const middle=low+high>>>1;lines[middle].normalized<=offset?low=middle:high=middle}return low},first=lines[locate(start)],last=lines[locate(Math.max(start,cursor-1))];return!first||!last||/^[\t ]*\t/m.test(raw.slice(first.raw,last.end))}}function restoreMarkdownCodeTabs(instance,options,invocations){const parser=instance;if(!(typeof parser.lexer!="function"||typeof parser.walkTokens!="function"))try{const defaults={...instance.defaults,gfm:options.gfm,async:!1},hooks=defaults.hooks,source=hooks?.preprocess?hooks.preprocess(options.rawContent):options.rawContent;if(typeof source!="string")return;let tokens=parser.lexer(source,defaults);if(hooks?.processAllTokens&&(tokens=hooks.processAllTokens(tokens)),!Array.isArray(tokens))return;const originals=[];if(parser.walkTokens(tokens,token=>{token.type==="code"&&typeof token.text=="string"&&originals.push(token.text.replace(/\n$/,""))}),originals.length!==invocations)return;for(const record of options.codeBlocksOut??[]){const candidate=originals[record.ordinal];candidate!==void 0&&normalizeMarkdownLeadingTabs(candidate,options.tabSize)===record.source&&(record.source=candidate)}}catch{}}const KATEX_OVERRIDE=Symbol.for("@aceshooting/lyra-ui/markdown-katex-override");function readKatexOverride(){return Reflect.has(globalThis,KATEX_OVERRIDE)?{present:!0,value:Reflect.get(globalThis,KATEX_OVERRIDE)}:{present:!1,value:null}}function createMarkdownKatexState(){let resolved,loadStarted=!1;const subscribers=new Set;return{getIfLoaded(){const override=readKatexOverride();return override.present?override.value:resolved??null},isConfirmedMissing(){const override=readKatexOverride();return(override.present?override.value:resolved)===null},startLoad(onResolved){readKatexOverride().present||resolved!==void 0||(subscribers.add(onResolved),!loadStarted&&(loadStarted=!0,getKatex().then(katex=>{resolved=katex;const pending=[...subscribers];subscribers.clear();for(const subscriber of pending)subscriber()})))}}}function markdownCodeTransformer(lang){return{name:"lr-markdown-code-block",pre(node){node.properties.part=["code-block"],node.properties.tabindex="0"},code(node){const classValue=node.properties.class,classes=Array.isArray(classValue)?classValue.map(String):classValue?[String(classValue)]:[];node.properties.class=[...classes,`language-${lang}`]}}}const SHIKI_COLOR=/^#(?:[\da-f]{3}|[\da-f]{4}|[\da-f]{6}|[\da-f]{8})$/i,SHIKI_STYLE_TO_DATA={color:"data-lr-shiki-light","background-color":"data-lr-shiki-light-bg","--shiki-light":"data-lr-shiki-light","--shiki-light-bg":"data-lr-shiki-light-bg","--shiki-dark":"data-lr-shiki-dark","--shiki-dark-bg":"data-lr-shiki-dark-bg"},SHIKI_DATA_TO_STYLE={"data-lr-shiki-light":"color","data-lr-shiki-light-bg":"background-color","data-lr-shiki-dark":"--shiki-dark","data-lr-shiki-dark-bg":"--shiki-dark-bg"};function encodeMarkdownHighlightStyles(markup){return markup.replace(/\sstyle=([\x22\x27])(.*?)\1/gi,(_attribute,_quote,value)=>{const attributes=[];for(const declaration of value.split(";")){const separator=declaration.indexOf(":");if(separator<0)continue;const property=declaration.slice(0,separator).trim().toLowerCase(),color=declaration.slice(separator+1).trim(),dataAttribute=SHIKI_STYLE_TO_DATA[property];dataAttribute&&SHIKI_COLOR.test(color)&&attributes.push(`${dataAttribute}="${color}"`)}return attributes.length>0?` ${attributes.join(" ")}`:""})}function restoreMarkdownHighlightStyles(markup){return markup.includes("data-lr-shiki-")?markup.replace(/<[a-z][^<>]*>/gi,openingTag=>{const declarations=[],cleanTag=openingTag.replace(/\s(data-lr-shiki-(?:light-bg|dark-bg|light|dark))=([\x22\x27])(#[\da-f]+)\2/gi,(attribute,name,_quote,color)=>{const property=SHIKI_DATA_TO_STYLE[name.toLowerCase()];return!property||!SHIKI_COLOR.test(color)?attribute:(declarations.push(`${property}:${color}`),"")});return declarations.length===0?cleanTag:`${cleanTag.slice(0,-1)} style="${declarations.join(";")}">`}):markup}function enforceMarkdownAnchorRelGuard(markup){if(!/target/i.test(markup))return markup;const template=document.createElement("template");template.innerHTML=markup;let changed=!1;for(const link of template.content.querySelectorAll("a[target],area[target]")){const rel=resolveGuardedRel(link.getAttribute("rel"),"target");rel!==link.getAttribute("rel")&&(link.setAttribute("rel",rel),changed=!0)}return changed?template.innerHTML:markup}function tokenizeMarkdownHighlight(hl,pending){if(pending.code.length>MARKDOWN_HIGHLIGHT_SOURCE_MAX)return null;try{const highlighted=hl.codeToHtml(pending.code,{lang:normalizeShikiLanguage(pending.lang),themes:SHIKI_THEMES,transformers:[markdownCodeTransformer(pending.lang)]});return`${encodeMarkdownHighlightStyles(highlighted)}
|
|
18
|
+
`}catch{return null}}const markdownDepsLoadGenerations=new WeakMap;function beginMarkdownDepsLoad(host,apply){const generation=(markdownDepsLoadGenerations.get(host)??0)+1;markdownDepsLoadGenerations.set(host,generation);const alreadyLoaded=getMarkdownDepsIfLoaded();if(alreadyLoaded){apply(alreadyLoaded);return}loadMarkdownDeps().then(resolved=>{!host.isConnected||markdownDepsLoadGenerations.get(host)!==generation||apply(resolved)})}function markdownNeedsReparse(changed){return changed.has("content")||changed.has("tabSize")||changed.has("htmlMode")||changed.has("withoutGfm")||changed.has("linkTarget")||changed.has("headingOffset")||changed.has("streaming")||changed.has("headingAnchors")||changed.has("math")||changed.has("withoutSyntaxHighlighting")||changed.has("languages")||changed.has("languageLoaders")||changed.has("codeBlockHeader")||changed.has("streamingRender")}function markdownHighlightConfigChanged(changed){return changed.has("withoutSyntaxHighlighting")||changed.has("languages")||changed.has("languageLoaders")||changed.has("codeBlockHeader")}function markdownLanguageSetChanged(changed){return changed.has("languages")||changed.has("languageLoaders")}function normalizeMarkdownStreamingRender(value){return value==="progressive"?"progressive":"plain"}function normalizeMarkdownHtmlMode(value){return value==="escape"||value==="trusted"?value:"sanitize"}function markdownSanitizerPolicy(options){return options.htmlMode!=="sanitize"?null:{ADD_ATTR:["target"],FORBID_ATTR:["style","data-lr-code-chrome"],...options.codeBlockHeader?{FORBID_TAGS:["style"]}:{},...options.math?{ADD_TAGS:["semantics","annotation"]}:{}}}function renderMarkdownDocument(options){const{deps,tag}=options;if(!deps.marked)return{status:"fallback",error:new Error(`<${tag}> could not render: the "marked" peer dependency failed to load.`),headingTree:null};const pendingKeys=[],headingTree=[];let rawHtml,hadMathFallback,hasRawHtml=!0;try{const parsed=options.parse(deps.marked,pendingKeys,headingTree);rawHtml=parsed.html,hadMathFallback=parsed.hadMathFallback,hasRawHtml=parsed.hasRawHtml!==!1}catch(error){return{status:"fallback",error,headingTree:null}}options.onParsed();const mathFailed=hadMathFallback&&options.isKatexConfirmedMissing(),policy=markdownSanitizerPolicy({...options,codeBlockHeader:options.codeBlockHeader??!1});if(policy===null)return{status:"rendered",html:finishMarkdownHtml(deps,null,rawHtml,hasRawHtml),headingTree,mathFailed,pendingKeys};if(!deps.DOMPurify){const error=new Error(`<${tag}> could not render: sanitize is enabled (the default) but the "dompurify" peer dependency failed to load — refusing to render unsanitized HTML. Install it with \`pnpm add dompurify\`, or set html-mode="trusted" to explicitly opt out of sanitization.`);return warnMarkdownSanitizerUnavailable(),{status:"fallback",error,headingTree}}let sanitized;try{sanitized=finishMarkdownHtml(deps,policy,rawHtml,hasRawHtml)}catch(error){return warnMarkdownSanitizerUnavailable(),{status:"fallback",error,headingTree}}return{status:"rendered",html:sanitized,headingTree,mathFailed,pendingKeys}}function finishMarkdownHtml(deps,policy,rawHtml,hasRawHtml=!0){if(typeof rawHtml!="string")throw new TypeError("The Markdown parser returned non-string markup.");let result=rawHtml;if(policy!==null){if(!deps.DOMPurify)throw new Error("The HTML sanitizer is unavailable.");const sanitized=deps.DOMPurify.sanitize(rawHtml,policy);if(typeof sanitized!="string")throw new TypeError("The HTML sanitizer returned non-string markup.");result=sanitized}const styled=restoreMarkdownHighlightStyles(result);return hasRawHtml?enforceMarkdownAnchorRelGuard(styled):styled}function markdownMathPeerError(tag){return new Error(`<${tag}> needs the optional peer dependency \`katex\` to render math (the \`math\` property is set) — install it with \`pnpm add katex\`.`)}function applyMarkdownAriaBusy(host,busy){busy?host.setAttribute("aria-busy","true"):host.removeAttribute("aria-busy")}function markdownScrollBehavior(root){return!root.ownerDocument.defaultView||prefersReducedMotion(root)?"auto":"smooth"}function applyMarkdownFragmentAnchor(root,anchor,headingTree){if(!anchor.id)return!1;let index=-1;const headingLimit=Math.min(headingTree.length,TEXT_QUOTE_LIMITS.maxTraversalNodes);for(let headingIndex2=0;headingIndex2<headingLimit;headingIndex2++)if(headingTree[headingIndex2]?.id===anchor.id){index=headingIndex2;break}if(index<0)return!1;const walker=root.ownerDocument.createTreeWalker(root,1);let inspected=0,headingIndex=0,escapedIdMatch=null,positionalMatch=null,node;for(;inspected<TEXT_QUOTE_LIMITS.maxTraversalNodes&&(node=walker.nextNode());){inspected++;const candidate=node;if(candidate.getAttribute("id")===anchor.id&&(escapedIdMatch??=candidate),/^H[1-6]$/.test(candidate.tagName)&&(headingIndex===index&&(positionalMatch=candidate),headingIndex++),escapedIdMatch&&positionalMatch)break}const el=escapedIdMatch??positionalMatch;return el?(el.scrollIntoView({behavior:markdownScrollBehavior(root),block:"start"}),!0):!1}function applyMarkdownTextQuoteAnchor(root,anchor,locale,index=createTextQuoteIndex(scopeFromElement(root),locale)){const match=index.resolve(anchor),range=match?rangeFromTextQuoteMatch(index.scope,match):null;return range?(((range.startContainer.nodeType===1?range.startContainer:range.startContainer.parentElement)??root).scrollIntoView({behavior:markdownScrollBehavior(root),block:"center"}),!0):!1}const HIGHLIGHT_TONES=["accent","success","warning","danger","neutral"],MARKDOWN_PAINTED_HIGHLIGHT_LIMIT=100;function repaintMarkdownHighlights(options){const resolved=[],rangesByTone=new Map(HIGHLIGHT_TONES.map(tone=>[tone,[]]));let activeRange=null;const workBudget=options.index.createWorkBudget(),matches=[];for(const highlight of prioritizedHighlightCandidates(options.highlights,options.activeHighlightId)){if(matches.length>=MARKDOWN_PAINTED_HIGHLIGHT_LIMIT)break;if(highlight.anchor.kind!=="text-quote")continue;const match=options.index.resolve(highlight.anchor,workBudget);match&&matches.push({highlight,match})}const ranges=rangesFromTextQuoteMatches(options.index.scope,matches.map(({match})=>match));for(let position=0;position<matches.length;position++){const{highlight}=matches[position],range=ranges[position]??null;range&&(rangesByTone.get(highlight.tone??"accent").push(range),resolved.push({id:highlight.id,range}),highlight.id===options.activeHighlightId&&(activeRange=range))}for(const[tone,ranges2]of rangesByTone)options.handle.setRanges(tone,ranges2);if(options.handle.setActive(activeRange),!supportsCustomHighlights(options.root.ownerDocument)){const walker=options.root.ownerDocument.createTreeWalker(options.root,1);let inspected=0,node;for(;inspected<TEXT_QUOTE_LIMITS.maxTraversalNodes+MARKDOWN_PAINTED_HIGHLIGHT_LIMIT&&(node=walker.nextNode());){inspected++;const mark=node;mark.localName==="mark"&&mark.hasAttribute("data-lr-highlight-tone")&&!mark.hasAttribute("part")&&mark.setAttribute("part","highlight")}}return resolved}function hitTestHighlightRanges(ranges,x,y){let remainingRects=TEXT_SELECTION_RECT_LIMIT;for(let i=ranges.length-1;i>=0;i--){const hit=ranges[i];if(hit)for(const rect of hit.range.getClientRects()){if(remainingRects--<=0)return null;if(x>=rect.left&&x<=rect.right&&y>=rect.top&&y<=rect.bottom)return hit.id}}return null}const nativeElementGetAttribute=typeof Element>"u"?void 0:Element.prototype.getAttribute,nativeAnchorHref=typeof HTMLAnchorElement>"u"?void 0:Object.getOwnPropertyDescriptor(HTMLAnchorElement.prototype,"href")?.get;function markdownAnchorFromTarget(target){if(!(typeof target!="object"&&typeof target!="function"||target===null)&&!(!nativeElementGetAttribute||!nativeAnchorHref))try{return nativeElementGetAttribute.call(target,"data-lr-brand-probe"),nativeAnchorHref.call(target),target}catch{return}}function nativeAnchorAttribute(anchor,name){try{const value=nativeElementGetAttribute?.call(anchor,name);return typeof value=="string"?value:void 0}catch{return}}function internalLinkHrefFrom(e,prefix){if(!prefix)return null;const anchor=e.composedPath().find(target=>markdownAnchorFromTarget(target)!==void 0);if(!anchor)return null;const href=nativeAnchorAttribute(anchor,"href")??"";return href.startsWith(prefix)?href:null}function markdownTableRegionLabel(localize){return localize("markdownTableRegion")}const MARKDOWN_TABLE_WRAPPER_SELECTOR='[part="table-wrapper"][role="group"]';function markdownHasTableWrappers(root){return root?.nodeType===1&&root.matches(MARKDOWN_TABLE_WRAPPER_SELECTOR)||root?.querySelector(MARKDOWN_TABLE_WRAPPER_SELECTOR)!=null}function labelMarkdownTableWrappers(root,label){if(!root)return;const wrappers=[...root?.nodeType===1&&root.matches(MARKDOWN_TABLE_WRAPPER_SELECTOR)?[root]:[],...root.querySelectorAll(MARKDOWN_TABLE_WRAPPER_SELECTOR)];for(const wrapper of wrappers)wrapper.getAttribute("aria-label")!==label&&wrapper.setAttribute("aria-label",label)}function renderMarkdownContent(options){const isFallback=!options.progressive&&options.renderedHtml===null,tail=options.progressive?.tail,sanitizedMaxHeight=sanitizeCssLength(options.maxHeight);return html`<div
|
|
19
19
|
part="content"
|
|
20
20
|
role="document"
|
|
21
21
|
tabindex=${options.content.trim()?"0":nothing}
|
|
@@ -25,4 +25,4 @@ ${thead}${tbody}</table></div>
|
|
|
25
25
|
data-dark-theme=${options.isDarkTheme?"true":nothing}
|
|
26
26
|
style=${sanitizedMaxHeight?styleMap({"--lr-markdown-max-height":sanitizedMaxHeight,"overflow-block":"auto"}):nothing}
|
|
27
27
|
@click=${options.onClick}
|
|
28
|
-
>${options.progressive?html`${options.progressive.blocks.
|
|
28
|
+
>${options.progressive?html`${progressiveMarkdownBlocks(options.progressive.blocks,options.progressive.revision??0,options.progressive.changedFrom??0)}${tail?tail.kind==="open-fence"?html`<pre part="code-block" tabindex="0"><code>${streamingTailText(tail.text)}</code></pre>`:html`<div part="streaming-tail">${streamingTailText(tail.text)}</div>`:nothing}`:isFallback?options.fallbackSegments?.map(segment=>segment.kind==="prose"?streamingTailText(segment.text):segment.kind==="block"?html`<span class="fallback-code">${streamingTailText(segment.text)}</span>`:html`<span class="fallback-inline-code">${streamingTailText(segment.text)}</span>`)??streamingTailText(options.content):unsafeHTML(options.renderedHtml)}</div>${options.liveRegion}`}function watchMarkdownDarkTheme(host,apply){return apply(resolveIsDarkTheme(host)),watchDarkTheme(host,()=>apply(resolveIsDarkTheme(host)))}function resolveMarkdownDarkTheme(host){return resolveIsDarkTheme(host)}export{FAILED_HIGHLIGHT_MAX,HIGHLIGHT_CACHE_ENTRY_MAX_BYTES,HIGHLIGHT_CACHE_MAX,HIGHLIGHT_CACHE_MAX_BYTES,MARKDOWN_HIGHLIGHT_SOURCE_MAX,MARKDOWN_PAINTED_HIGHLIGHT_LIMIT,MarkdownOwnedAnimationFrameController,MarkdownParserController,addFailedHighlightKey,applyMarkdownAriaBusy,applyMarkdownFragmentAnchor,applyMarkdownTextQuoteAnchor,beginMarkdownDepsLoad,cleanHref,createMarkdownKatexState,createMarkdownParser,createMarkdownRenderContext,escapeHtml,finishMarkdownHtml,getCachedHighlight,hitTestHighlightRanges,internalLinkHrefFrom,labelMarkdownTableWrappers,markdownAnchorFromTarget,markdownCodeTransformer,markdownHasTableWrappers,markdownHighlightConfigChanged,markdownHighlightKey,markdownLanguageSetChanged,markdownMathPeerError,markdownNeedsReparse,markdownSanitizerPolicy,markdownTableRegionLabel,normalizeMarkdownHtmlMode,normalizeMarkdownLeadingTabs,normalizeMarkdownStreamingRender,parseMarkdownDocument,processPendingHighlights,renderMarkdownContent,renderMarkdownDocument,repaintMarkdownHighlights,resolveMarkdownDarkTheme,setCachedHighlight,tokenizeMarkdownHighlight,watchMarkdownDarkTheme};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{noChange}from"lit";import{directive,Directive,PartType}from"lit/directive.js";class StreamingTailText extends Directive{constructor(info){if(super(info),info.type!==PartType.CHILD)throw new Error("Streaming text requires a child part.")}render(text){return text}update(part,[text]){super.update(part,[text]);const node=this.node;return!node||node.parentNode!==part.parentNode||node.previousSibling!==part.startNode||node.nextSibling!==part.endNode?(this.node=part.parentNode.ownerDocument.createTextNode(text),this.node):(text.startsWith(node.data)?node.appendData(text.slice(node.length)):node.data!==text&&(node.data=text),noChange)}}const streamingTailText=directive(StreamingTailText);export{streamingTailText};
|
|
1
|
+
import{noChange}from"lit";import{directive,Directive,PartType}from"lit/directive.js";class StreamingTailText extends Directive{constructor(info){if(super(info),info.type!==PartType.CHILD)throw new Error("Streaming text requires a child part.")}render(text){return text}update(part,[text]){super.update(part,[text]);const node=this.node;return!node||node.parentNode!==part.parentNode||node.previousSibling!==part.startNode||node.nextSibling!==part.endNode?(this.node=part.parentNode.ownerDocument.createTextNode(text),this.node):(text.startsWith(node.data)?node.appendData(text.slice(node.length)):node.data!==text&&(node.data=text),noChange)}}const streamingTailText=directive(StreamingTailText);import{insertPart,removePart,setChildPartValue,setCommittedValue}from"lit/directive-helpers.js";import{unsafeHTML}from"lit/directives/unsafe-html.js";class ProgressiveMarkdownBlocks extends Directive{constructor(){super(...arguments),this.parts=[]}render(blocks,_revision,_start){return blocks.map(block=>unsafeHTML(block.html))}update(part,[blocks,revision,start]){if(this.blocks===blocks&&this.revision===revision)return noChange;const from=this.blocks===blocks?start:0;for(this.blocks=blocks,this.revision=revision;this.parts.length>blocks.length;)removePart(this.parts.pop());for(let index=from;index<blocks.length;index++){const child=this.parts[index]??=insertPart(part);setChildPartValue(child,unsafeHTML(blocks[index].html))}return setCommittedValue(part,this.parts),noChange}}const progressiveMarkdownBlocks=directive(ProgressiveMarkdownBlocks);export{progressiveMarkdownBlocks,streamingTailText};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type{LyraClipboardWriteSuccess,LyraClipboardWriteFailure}from'../../../internal/clipboard.js';import type{LyraAnchorTargetEventMap}from'../../../internal/anchor-target.js';import{type LyraMarkedParser}from'./markdown-loader.js';import{type ShikiLanguageInput}from'../code-block/
|
|
1
|
+
import type{LyraClipboardWriteSuccess,LyraClipboardWriteFailure}from'../../../internal/clipboard.js';import type{LyraAnchorTargetEventMap}from'../../../internal/anchor-target.js';import{type LyraMarkedParser}from'./markdown-loader.js';import{type ShikiLanguageInput,type ShikiLanguageLoader,type ShikiLanguageSource}from'../code-block/shiki-types.js';import{type PendingHighlight,type MarkdownHeadingItem as SharedMarkdownHeadingItem,type MarkdownHtmlMode,type MarkdownStreamingRender}from'./markdown-shared.js';import{MarkdownRuntimeBase,type MarkdownStreamingRenderMode,type MarkdownHighlightAttempt,type MarkdownVariantContext}from'./markdown-base.class.js';
|
|
2
2
|
/** Re-exported so `markdown.ts`'s `export *` keeps exposing this from the same public path as
|
|
3
3
|
* before this type moved into the pair's shared module -- see `markdown-shared.ts`'s class doc. */
|
|
4
4
|
export type MarkdownHeadingItem=SharedMarkdownHeadingItem;
|
|
@@ -241,25 +241,32 @@ streaming:boolean;
|
|
|
241
241
|
/** How content is displayed while `streaming` is true. `plain` (the default) keeps the current
|
|
242
242
|
* accumulated source as plain text. `progressive` parses complete top-level Markdown blocks as
|
|
243
243
|
* they settle, keeps only the mutable trailing block as text, and renders an open fenced block
|
|
244
|
-
* as unhighlighted code.
|
|
245
|
-
*
|
|
244
|
+
* as unhighlighted code. The offscreen plain-text tail reserves an estimated height until
|
|
245
|
+
* revealed, while its complete text remains in the DOM. Once `streaming` becomes false the
|
|
246
|
+
* component performs its regular full document parse, including cross-block reference links. */
|
|
246
247
|
streamingRender:MarkdownStreamingRender;
|
|
247
248
|
/** Adds a language label and source-copy button to the first 200 non-empty built-in code blocks.
|
|
248
249
|
* Custom code renderers and pre-escaped code bypass the header. In sanitize mode this also strips
|
|
249
250
|
* authored style elements; trusted mode has no guarantee against authored visual copy deception. */
|
|
250
251
|
codeBlockHeader:boolean;
|
|
251
|
-
/**
|
|
252
|
-
*
|
|
252
|
+
/** Syntax highlighting admits the first 100 distinct language/code pairs per document and
|
|
253
|
+
* blocks of at most 8,192 UTF-16 code units (including their terminal newline). Later or larger
|
|
254
|
+
* blocks remain readable plain code. The shared page cache holds at most 100 entries / 2 MiB.
|
|
255
|
+
* Output evicted by the byte budget stays plain until the highlighting configuration changes.
|
|
256
|
+
* Turns off syntax highlighting of fenced code blocks, keeping plain output even when `shiki`
|
|
257
|
+
* is installed. Unset (the default), eligible fenced blocks are upgraded from plain `<pre><code>`
|
|
253
258
|
* via the same optional `shiki` peer `<lr-code-block>` uses once the peer is available -- a pure
|
|
254
259
|
* upgrade, not a behavior change gated on opt-in, since it's itself gated transparently by
|
|
255
260
|
* whether `shiki` is installed at all (an app that never installs it sees byte-identical output
|
|
256
261
|
* to today). Plain streaming defers highlighting until completion; progressive mode highlights settled blocks. */
|
|
257
262
|
withoutSyntaxHighlighting:boolean;
|
|
258
|
-
/**
|
|
259
|
-
*
|
|
260
|
-
* full ~200-language bundle. Forwarded verbatim to `loadShikiHighlighterCore()`. Unset uses the
|
|
261
|
-
* default full-bundle loader, unchanged from how `<lr-code-block>` itself defaults. */
|
|
263
|
+
/** Explicit resolved grammars. Languages absent from both this map and `languageLoaders`
|
|
264
|
+
* use the full loader's built-in fallback. Replace the map identity when changing grammars. */
|
|
262
265
|
languages?:Readonly<Record<string,ShikiLanguageInput>>;
|
|
266
|
+
/** Optional lazy grammar loaders, resolved only for a requested fence language. Concrete
|
|
267
|
+
* `languages` entries take priority. Unset preserves concrete grammars and the default loader.
|
|
268
|
+
* Assign a new map object after changing entries. */
|
|
269
|
+
languageLoaders?:Readonly<Record<string,ShikiLanguageLoader>>;
|
|
263
270
|
/** Stamps a computed slug as `id` on every rendered heading. `getHeadingTree()` computes the
|
|
264
271
|
* same slugs regardless of this property -- it only controls whether the `id` attribute is
|
|
265
272
|
* emitted into the rendered DOM. `false` (the default) preserves today's exact output.
|
|
@@ -278,4 +285,4 @@ headingAnchors:boolean;
|
|
|
278
285
|
math:boolean;
|
|
279
286
|
/** A CSS length (e.g. `"20rem"`); once set, the rendered document scrolls internally past this
|
|
280
287
|
* height instead of growing the page. Invalid values are ignored. */
|
|
281
|
-
maxHeight:string;connectedCallback():void;private adoptScriptContent;protected get markdownVariant():MarkdownVariantContext;protected tokenizePendingHighlight(pending:PendingHighlight,languages:Readonly<Record<string,ShikiLanguageInput>> |undefined,isCurrent:()=>boolean):Promise<MarkdownHighlightAttempt>;}declare global{interface HTMLElementTagNameMap{'lr-markdown':LyraMarkdown;}}
|
|
288
|
+
maxHeight:string;connectedCallback():void;private adoptScriptContent;protected get markdownVariant():MarkdownVariantContext;protected get highlightLanguageSources():Readonly<Record<string,ShikiLanguageSource>> |undefined;protected tokenizePendingHighlight(pending:PendingHighlight,languages:Readonly<Record<string,ShikiLanguageInput>> |undefined,isCurrent:()=>boolean):Promise<MarkdownHighlightAttempt>;}declare global{interface HTMLElementTagNameMap{'lr-markdown':LyraMarkdown;}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{srOnly}from"../../../internal/a11y.js";import{getMarkdownDepsIfLoaded}from"./markdown-loader.js";import{loadShikiHighlighter,loadShikiLanguage,loadShikiHighlighterCore,normalizeShikiLanguage}from"../code-block/code-loader.js";import{createMarkdownKatexState,tokenizeMarkdownHighlight}from"./markdown-shared.js";import{createMarkdownVariantContext,MarkdownRuntimeBase}from"./markdown-base.class.js";import{styles}from"./markdown.styles.js";import{LYRA_DEFAULT_codeRegion,LYRA_DEFAULT_codeRegionWithLanguage,LYRA_DEFAULT_copiedToClipboard,LYRA_DEFAULT_copyCode,LYRA_DEFAULT_markdownTableRegion}from"../../../internal/default-strings/conversation.generated.js";import{LYRA_DEFAULT_anchorJumped,LYRA_DEFAULT_anchorJumpedToPage,LYRA_DEFAULT_anchorNotFound,LYRA_DEFAULT_copyFailed}from"../../../internal/default-strings/shared.generated.js";const katexState=createMarkdownKatexState();class LyraMarkdown extends MarkdownRuntimeBase{constructor(){super(...arguments),this.content="",this.tabSize=4,this.htmlMode="sanitize",this.withoutGfm=!1,this.linkTarget="_blank",this.internalLinkPrefix="",this.headingOffset=0,this.streaming=!1,this.streamingRender="plain",this.codeBlockHeader=!1,this.withoutSyntaxHighlighting=!1,this.headingAnchors=!1,this.math=!1,this.maxHeight=""}static{this.defaultStrings={...super.defaultStrings,anchorJumped:LYRA_DEFAULT_anchorJumped,anchorJumpedToPage:LYRA_DEFAULT_anchorJumpedToPage,anchorNotFound:LYRA_DEFAULT_anchorNotFound,codeRegion:LYRA_DEFAULT_codeRegion,codeRegionWithLanguage:LYRA_DEFAULT_codeRegionWithLanguage,copiedToClipboard:LYRA_DEFAULT_copiedToClipboard,copyCode:LYRA_DEFAULT_copyCode,copyFailed:LYRA_DEFAULT_copyFailed,markdownTableRegion:LYRA_DEFAULT_markdownTableRegion}}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.variant=createMarkdownVariantContext("lr-markdown",katexState)}static getMarked(){const parser=this.variant.sharedParser.get(getMarkdownDepsIfLoaded()?.marked);if(!parser)throw new Error("LyraMarkdown.getMarked() requires the optional `marked` peer; await preloadMarkdown() first.");return parser}static updateAll(){for(const instance of this.variant.connectedInstances)instance.renderMarkdown()}connectedCallback(){this.adoptScriptContent(),super.connectedCallback()}adoptScriptContent(){if(this.hasAttribute("content")||this.content)return;const text=this.querySelector(':scope > script[type="text/markdown"]')?.textContent;text!=null&&(this.content=text.trim())}get markdownVariant(){return LyraMarkdown.variant}async tokenizePendingHighlight(pending,languages,isCurrent){const normalizedLang=normalizeShikiLanguage(pending.lang);let highlighter;if(
|
|
1
|
+
import{__decorate}from"tslib";import{combineShikiLanguageSources}from"../../../internal/shiki-language-sources.js";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{srOnly}from"../../../internal/a11y.js";import{getMarkdownDepsIfLoaded}from"./markdown-loader.js";import{loadShikiHighlighter,loadShikiLanguage,loadShikiHighlighterCore,normalizeShikiLanguage}from"../code-block/code-loader.js";import{ensureShikiLanguageLoaded,resolvedShikiLanguages}from"../code-block/shiki-types.js";import{createMarkdownKatexState,tokenizeMarkdownHighlight}from"./markdown-shared.js";import{createMarkdownVariantContext,MarkdownRuntimeBase}from"./markdown-base.class.js";import{styles}from"./markdown.styles.js";import{LYRA_DEFAULT_codeRegion,LYRA_DEFAULT_codeRegionWithLanguage,LYRA_DEFAULT_copiedToClipboard,LYRA_DEFAULT_copyCode,LYRA_DEFAULT_markdownTableRegion}from"../../../internal/default-strings/conversation.generated.js";import{LYRA_DEFAULT_anchorJumped,LYRA_DEFAULT_anchorJumpedToPage,LYRA_DEFAULT_anchorNotFound,LYRA_DEFAULT_copyFailed}from"../../../internal/default-strings/shared.generated.js";const katexState=createMarkdownKatexState();class LyraMarkdown extends MarkdownRuntimeBase{constructor(){super(...arguments),this.content="",this.tabSize=4,this.htmlMode="sanitize",this.withoutGfm=!1,this.linkTarget="_blank",this.internalLinkPrefix="",this.headingOffset=0,this.streaming=!1,this.streamingRender="plain",this.codeBlockHeader=!1,this.withoutSyntaxHighlighting=!1,this.headingAnchors=!1,this.math=!1,this.maxHeight=""}static{this.defaultStrings={...super.defaultStrings,anchorJumped:LYRA_DEFAULT_anchorJumped,anchorJumpedToPage:LYRA_DEFAULT_anchorJumpedToPage,anchorNotFound:LYRA_DEFAULT_anchorNotFound,codeRegion:LYRA_DEFAULT_codeRegion,codeRegionWithLanguage:LYRA_DEFAULT_codeRegionWithLanguage,copiedToClipboard:LYRA_DEFAULT_copiedToClipboard,copyCode:LYRA_DEFAULT_copyCode,copyFailed:LYRA_DEFAULT_copyFailed,markdownTableRegion:LYRA_DEFAULT_markdownTableRegion}}static{this.styles=[LyraElement.styles,styles,srOnly]}static{this.variant=createMarkdownVariantContext("lr-markdown",katexState)}static getMarked(){const parser=this.variant.sharedParser.get(getMarkdownDepsIfLoaded()?.marked);if(!parser)throw new Error("LyraMarkdown.getMarked() requires the optional `marked` peer; await preloadMarkdown() first.");return parser}static updateAll(){for(const instance of this.variant.connectedInstances)instance.renderMarkdown()}connectedCallback(){this.adoptScriptContent(),super.connectedCallback()}adoptScriptContent(){if(this.hasAttribute("content")||this.content)return;const text=this.querySelector(':scope > script[type="text/markdown"]')?.textContent;text!=null&&(this.content=text.trim())}get markdownVariant(){return LyraMarkdown.variant}get highlightLanguageSources(){return combineShikiLanguageSources(this.languages,this.languageLoaders)}async tokenizePendingHighlight(pending,languages,isCurrent){const normalizedLang=normalizeShikiLanguage(pending.lang),sources=combineShikiLanguageSources(languages,this.languageLoaders);let highlighter;if(sources&&(sources[normalizedLang]??sources[pending.lang])){if(highlighter=await loadShikiHighlighterCore(resolvedShikiLanguages(sources)),!isCurrent())return;if(!highlighter)return null;const loaded=await ensureShikiLanguageLoaded(highlighter,normalizedLang,sources[normalizedLang]??sources[pending.lang]);if(!isCurrent())return;if(!loaded)return null}else{const base=await loadShikiHighlighter();if(!isCurrent())return;if(!base)return null;const loaded=await loadShikiLanguage(base,pending.lang);if(!isCurrent())return;highlighter=loaded?base:null}if(isCurrent())return highlighter?tokenizeMarkdownHighlight(highlighter,pending):null}}__decorate([property()],LyraMarkdown.prototype,"content",void 0),__decorate([property({type:Number,attribute:"tab-size"})],LyraMarkdown.prototype,"tabSize",void 0),__decorate([property({attribute:"html-mode"})],LyraMarkdown.prototype,"htmlMode",void 0),__decorate([property({type:Boolean,attribute:"without-gfm"})],LyraMarkdown.prototype,"withoutGfm",void 0),__decorate([property({attribute:"link-target"})],LyraMarkdown.prototype,"linkTarget",void 0),__decorate([property({attribute:"internal-link-prefix"})],LyraMarkdown.prototype,"internalLinkPrefix",void 0),__decorate([property({type:Number,attribute:"heading-offset"})],LyraMarkdown.prototype,"headingOffset",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraMarkdown.prototype,"streaming",void 0),__decorate([property({attribute:"streaming-render"})],LyraMarkdown.prototype,"streamingRender",void 0),__decorate([property({type:Boolean,attribute:"code-block-header"})],LyraMarkdown.prototype,"codeBlockHeader",void 0),__decorate([property({type:Boolean,attribute:"without-syntax-highlighting"})],LyraMarkdown.prototype,"withoutSyntaxHighlighting",void 0),__decorate([property({attribute:!1})],LyraMarkdown.prototype,"languages",void 0),__decorate([property({attribute:!1})],LyraMarkdown.prototype,"languageLoaders",void 0),__decorate([property({type:Boolean,attribute:"heading-anchors"})],LyraMarkdown.prototype,"headingAnchors",void 0),__decorate([property({type:Boolean})],LyraMarkdown.prototype,"math",void 0),__decorate([property({attribute:"max-height"})],LyraMarkdown.prototype,"maxHeight",void 0);export{LyraMarkdown};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{iconHitTarget}from"../../../internal/interactive-control.styles.js";import{css}from"lit";const styles=css` :host { display: block; min-inline-size: 0; max-inline-size: 100%; line-height: var(--lr-line-height-loose); --_lr-markdown-max-height: none; } [part='content'] { min-block-size: var(--lr-icon-button-size); box-sizing: border-box; min-inline-size: var(--lr-icon-button-size); max-inline-size: 100%; max-block-size: var(--lr-markdown-max-height, var(--_lr-markdown-max-height)); overflow-inline: auto; overflow-block: hidden; overflow-wrap: anywhere; } [part='content'][data-unsanitized] { contain: paint; } [part='streaming-tail'] { white-space: pre-wrap; overflow-wrap: anywhere; } [part='content']:focus-visible, [part='code-block']:focus-visible, [part='table-wrapper']:focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: calc(-1 * var(--lr-focus-ring-offset)); } [part='code-block']:focus-visible, [part='table-wrapper']:focus-visible { outline-offset: calc(-1 * max(var(--lr-focus-ring-width), calc(var(--lr-focus-ring-width) + var(--lr-focus-ring-offset)))); } [part='content'][data-fallback] { white-space: pre-wrap; font-family: inherit; } [part='content'] > :first-child { margin-block-start: 0; } [part='content'] > :last-child { margin-block-end: 0; } [part='heading'] { line-height: var(--lr-line-height-compact); margin-block: var(--lr-space-l) var(--lr-space-s); } [part='content'] p, [part='content'] ul, [part='content'] ol { margin-block: 0 var(--lr-space-s); } ul > [part~='task-item'] { list-style: none; } [part~='task-checkbox'] { --_lr-markdown-task-box: var(--lr-markdown-task-checkbox-size, var(--lr-size-0-875em)); appearance: none; box-sizing: border-box; display: inline-grid; place-content: center; inline-size: var(--_lr-markdown-task-box); block-size: var(--_lr-markdown-task-box); margin-block: 0; margin-inline: 0 var(--lr-space-s); vertical-align: middle; font-size: inherit; opacity: 1; -webkit-print-color-adjust: exact; print-color-adjust: exact; border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-radius-xs); background: var(--lr-color-surface); } ul > [part~='task-item'] > [part~='task-checkbox'], ul > [part~='task-item'] > p:first-child > [part~='task-checkbox'] { margin-inline-start: calc(-1 * (var(--_lr-markdown-task-box) + var(--lr-space-s))); } [part~='task-checkbox']:where(:checked) { background: var(--lr-color-brand); border-color: var(--lr-color-brand); } [part~='task-checkbox']:where(:checked)::before { content: ''; direction: ltr; inline-size: var(--lr-size-0-3em); block-size: var(--lr-size-0-5em); border: 0 solid var(--lr-color-on-brand); border-inline-end-width: var(--lr-border-width-medium); border-block-end-width: var(--lr-border-width-medium); transform: translateY(-10%) rotate(45deg); } [part='content'] code { font-family: var(--lr-markdown-font-mono, var(--lr-font-mono)); font-size: var(--lr-size-0-875em); background: var(--lr-markdown-code-bg, var(--lr-color-brand-quiet)); border-radius: var(--lr-markdown-code-radius, calc(var(--lr-radius) * 0.5)); padding: var(--lr-markdown-code-padding, var(--lr-size-0-125rem) var(--lr-size-0-3125rem)); } [part='code-block'] { margin-block: 0 var(--lr-space-s); padding: var(--lr-markdown-code-block-padding, var(--lr-space-s) var(--lr-space-m)); border-radius: var(--lr-markdown-code-block-radius, var(--lr-radius)); background: var(--lr-markdown-code-bg, var(--lr-color-brand-quiet)); white-space: pre; overflow-wrap: normal; overflow-x: auto; overflow-y: hidden; overflow-inline: auto; overflow-block: hidden; tab-size: var(--lr-code-block-tab-size, 2); } [part='content'] :where(pre[part~='code-block']:not([dir]), code:not([dir], pre *)) { direction: ltr; unicode-bidi: isolate; text-align: start; } [part='content'] :where(pre:not([part~='code-block'], [dir])) { unicode-bidi: plaintext; } [part='content'][data-fallback] :where(.fallback-code, .fallback-inline-code) { direction: ltr; unicode-bidi: isolate; } [part='content'][data-fallback] .fallback-code { display: block; text-align: start; } [part='code-block'] code { padding: 0; background: none; font-size: var(--lr-font-size-sm); line-height: var(--lr-line-height-normal); } [part='content'][data-dark-theme='true'] [part='code-block'], [part='content'][data-dark-theme='true'] [part='code-block'] span { color: var(--shiki-dark, inherit) !important; background-color: var(--shiki-dark-bg, transparent) !important; } [part='link'] { color: var(--lr-color-brand); text-underline-offset: var(--lr-size-0-125rem); } [part='img'] { max-inline-size: 100%; } [part='blockquote'] { margin-block: 0 var(--lr-space-s); margin-inline: 0; padding-inline-start: var(--lr-space-m); border-inline-start: var(--lr-border-width-thick) solid var(--lr-color-border-subtle); color: var(--lr-color-text-quiet); } [part='table-wrapper'] { margin-block: 0 var(--lr-space-s); overflow-x: auto; overflow-y: hidden; overflow-inline: auto; overflow-block: hidden; } [part='table'] { border-collapse: collapse; margin-block: 0 var(--lr-space-s); inline-size: 100%; } [part='table-wrapper'] > [part='table'] { margin-block: 0; overflow-wrap: break-word; word-break: normal; } [part='table'] th, [part='table'] td { border: var(--lr-border-width-thin) solid var(--lr-color-border-subtle); padding: var(--lr-space-xs) var(--lr-space-s); } [part='table'] th:not([align]), [part='table'] td:not([align]) { text-align: start; } [part='table'] th { background: var(--lr-markdown-table-header-bg, var(--lr-color-brand-quiet)); font-weight: var(--lr-font-weight-semibold); } [part='math'][data-display='block'] { display: block; margin-block: var(--lr-space-s) var(--lr-space-s); white-space: pre; overflow-wrap: normal; overflow-x: auto; overflow-y: hidden; overflow-inline: auto; overflow-block: hidden; text-align: center; } [part='math'][data-display='inline'] { display: inline-block; } ::highlight(lr-highlight-accent) { background-color: var(--lr-markdown-highlight-accent-bg, var(--lr-color-brand-quiet)); } ::highlight(lr-highlight-success) { background-color: var(--lr-markdown-highlight-success-bg, var(--lr-color-success-quiet)); } ::highlight(lr-highlight-warning) { background-color: var(--lr-markdown-highlight-warning-bg, var(--lr-color-warning-quiet)); } ::highlight(lr-highlight-danger) { background-color: var(--lr-markdown-highlight-danger-bg, var(--lr-color-danger-quiet)); } ::highlight(lr-highlight-neutral) { background-color: var(--lr-markdown-highlight-neutral-bg, var(--lr-color-surface)); } ::highlight(lr-highlight-active) { background-color: var(--lr-markdown-highlight-active-bg, var(--lr-color-brand-quiet)); text-decoration: underline; } [part='content'] mark[data-lr-highlight-tone] { background: var(--lr-markdown-highlight-accent-bg, var(--lr-color-brand-quiet)); color: inherit; border-radius: calc(var(--lr-radius) * 0.5); } [part='content'] mark[data-lr-highlight-tone='success'] { background: var(--lr-markdown-highlight-success-bg, var(--lr-color-success-quiet)); } [part='content'] mark[data-lr-highlight-tone='warning'] { background: var(--lr-markdown-highlight-warning-bg, var(--lr-color-warning-quiet)); } [part='content'] mark[data-lr-highlight-tone='danger'] { background: var(--lr-markdown-highlight-danger-bg, var(--lr-color-danger-quiet)); } [part='content'] mark[data-lr-highlight-tone='neutral'] { background: var(--lr-markdown-highlight-neutral-bg, var(--lr-color-surface)); } [part='content'] mark[data-lr-highlight-name='lr-highlight-active'] { outline: var(--lr-border-width-thin) solid var(--lr-markdown-highlight-active-outline-color, var(--lr-color-brand)); outline-offset: var(--lr-focus-ring-offset); } [part~='code-block-frame']:where([data-lr-code-chrome]) { margin-block: 0 var(--lr-space-s); border: var(--lr-border-width-thin) solid var(--lr-color-border-subtle); border-radius: var(--lr-markdown-code-block-radius, var(--lr-radius)); overflow: clip; } [part~='code-block-frame']:where([data-lr-code-chrome]) > [part='code-block'] { margin: 0; border-radius: 0; } [part~='code-block-header']:where([data-lr-code-chrome]) { display: flex; align-items: center; gap: var(--lr-space-xs); min-inline-size: 0; padding-inline: var(--lr-space-s) var(--lr-space-2xs); background: var(--lr-markdown-code-header-bg, var(--lr-color-surface)); color: var(--lr-markdown-code-header-color, var(--lr-color-text-quiet)); border-block-end: var(--lr-border-width-thin) solid var(--lr-color-border-subtle); font: var(--lr-font-size-xs)/var(--lr-line-height-normal) var(--lr-font); user-select: none; } [part~='code-block-language']:where([data-lr-code-chrome]) { flex: 0 1 auto; min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; direction: ltr; unicode-bidi: isolate; } [part~='code-block-language']:where([data-lr-code-chrome])::before { content: attr(data-language); } [part~='code-block-copy']:where([data-lr-code-chrome]) { margin-inline-start: auto; ${iconHitTarget} display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; padding: 0; border: none; border-radius: var(--lr-radius); background: transparent; color: inherit; font: inherit; cursor: pointer; transition: var(--lr-transition-interactive); } [part~='code-block-copy']:where([data-lr-code-chrome]) svg { inline-size: var(--lr-size-1em); block-size: var(--lr-size-1em); } [part~='code-block-copy']:where([data-lr-code-chrome]:hover) { background: var(--lr-color-brand-quiet); color: var(--lr-color-brand); } [part~='code-block-copy']:where([data-lr-code-chrome]:active) { background: color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active)); } [part~='code-block-copy']:where([data-lr-code-chrome]):focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: calc(-1 * max(var(--lr-focus-ring-width), calc(var(--lr-focus-ring-width) + var(--lr-focus-ring-offset)))); } @media (forced-colors: active) { [part~='code-block-copy']:where([data-lr-code-chrome]) { border: var(--lr-border-width-thin) solid ButtonText; } } [part~='code-block-copy-success']:where([data-lr-code-chrome]) { color: var(--lr-color-success); } [part~='code-block-copy-error']:where([data-lr-code-chrome]) { color: var(--lr-color-danger); } `;export{styles};
|
|
1
|
+
import{iconHitTarget}from"../../../internal/interactive-control.styles.js";import{css}from"lit";const styles=css` :host { display: block; min-inline-size: 0; max-inline-size: 100%; line-height: var(--lr-line-height-loose); --_lr-markdown-max-height: none; } [part='content'] { min-block-size: var(--lr-icon-button-size); box-sizing: border-box; min-inline-size: var(--lr-icon-button-size); max-inline-size: 100%; max-block-size: var(--lr-markdown-max-height, var(--_lr-markdown-max-height)); overflow-inline: auto; overflow-block: hidden; overflow-wrap: anywhere; } [part='content'][data-unsanitized] { contain: paint; } [part='streaming-tail'] { content-visibility: auto; contain-intrinsic-block-size: auto var(--lr-size-24rem); white-space: pre-wrap; overflow-wrap: anywhere; } [part='content']:focus-visible, [part='code-block']:focus-visible, [part='table-wrapper']:focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: calc(-1 * var(--lr-focus-ring-offset)); } [part='code-block']:focus-visible, [part='table-wrapper']:focus-visible { outline-offset: calc(-1 * max(var(--lr-focus-ring-width), calc(var(--lr-focus-ring-width) + var(--lr-focus-ring-offset)))); } [part='content'][data-fallback] { white-space: pre-wrap; font-family: inherit; } [part='content'] > :first-child { margin-block-start: 0; } [part='content'] > :last-child { margin-block-end: 0; } [part='heading'] { line-height: var(--lr-line-height-compact); margin-block: var(--lr-space-l) var(--lr-space-s); } [part='content'] p, [part='content'] ul, [part='content'] ol { margin-block: 0 var(--lr-space-s); } ul > [part~='task-item'] { list-style: none; } [part~='task-checkbox'] { --_lr-markdown-task-box: var(--lr-markdown-task-checkbox-size, var(--lr-size-0-875em)); appearance: none; box-sizing: border-box; display: inline-grid; place-content: center; inline-size: var(--_lr-markdown-task-box); block-size: var(--_lr-markdown-task-box); margin-block: 0; margin-inline: 0 var(--lr-space-s); vertical-align: middle; font-size: inherit; opacity: 1; -webkit-print-color-adjust: exact; print-color-adjust: exact; border: var(--lr-border-width-thin) solid var(--lr-color-border); border-radius: var(--lr-radius-xs); background: var(--lr-color-surface); } ul > [part~='task-item'] > [part~='task-checkbox'], ul > [part~='task-item'] > p:first-child > [part~='task-checkbox'] { margin-inline-start: calc(-1 * (var(--_lr-markdown-task-box) + var(--lr-space-s))); } [part~='task-checkbox']:where(:checked) { background: var(--lr-color-brand); border-color: var(--lr-color-brand); } [part~='task-checkbox']:where(:checked)::before { content: ''; direction: ltr; inline-size: var(--lr-size-0-3em); block-size: var(--lr-size-0-5em); border: 0 solid var(--lr-color-on-brand); border-inline-end-width: var(--lr-border-width-medium); border-block-end-width: var(--lr-border-width-medium); transform: translateY(-10%) rotate(45deg); } [part='content'] code { font-family: var(--lr-markdown-font-mono, var(--lr-font-mono)); font-size: var(--lr-size-0-875em); background: var(--lr-markdown-code-bg, var(--lr-color-brand-quiet)); border-radius: var(--lr-markdown-code-radius, calc(var(--lr-radius) * 0.5)); padding: var(--lr-markdown-code-padding, var(--lr-size-0-125rem) var(--lr-size-0-3125rem)); } [part='code-block'] { margin-block: 0 var(--lr-space-s); padding: var(--lr-markdown-code-block-padding, var(--lr-space-s) var(--lr-space-m)); border-radius: var(--lr-markdown-code-block-radius, var(--lr-radius)); background: var(--lr-markdown-code-bg, var(--lr-color-brand-quiet)); white-space: pre; overflow-wrap: normal; overflow-x: auto; overflow-y: hidden; overflow-inline: auto; overflow-block: hidden; tab-size: var(--lr-code-block-tab-size, 2); } [part='content'] :where(pre[part~='code-block']:not([dir]), code:not([dir], pre *)) { direction: ltr; unicode-bidi: isolate; text-align: start; } [part='content'] :where(pre:not([part~='code-block'], [dir])) { unicode-bidi: plaintext; } [part='content'][data-fallback] :where(.fallback-code, .fallback-inline-code) { direction: ltr; unicode-bidi: isolate; } [part='content'][data-fallback] .fallback-code { display: block; text-align: start; } [part='code-block'] code { padding: 0; background: none; font-size: var(--lr-font-size-sm); line-height: var(--lr-line-height-normal); } [part='content'][data-dark-theme='true'] [part='code-block'], [part='content'][data-dark-theme='true'] [part='code-block'] span { color: var(--shiki-dark, inherit) !important; background-color: var(--shiki-dark-bg, transparent) !important; } [part='link'] { color: var(--lr-color-brand); text-underline-offset: var(--lr-size-0-125rem); } [part='img'] { max-inline-size: 100%; } [part='blockquote'] { margin-block: 0 var(--lr-space-s); margin-inline: 0; padding-inline-start: var(--lr-space-m); border-inline-start: var(--lr-border-width-thick) solid var(--lr-color-border-subtle); color: var(--lr-color-text-quiet); } [part='table-wrapper'] { margin-block: 0 var(--lr-space-s); overflow-x: auto; overflow-y: hidden; overflow-inline: auto; overflow-block: hidden; } [part='table'] { border-collapse: collapse; margin-block: 0 var(--lr-space-s); inline-size: 100%; } [part='table-wrapper'] > [part='table'] { margin-block: 0; overflow-wrap: break-word; word-break: normal; } [part='table'] th, [part='table'] td { border: var(--lr-border-width-thin) solid var(--lr-color-border-subtle); padding: var(--lr-space-xs) var(--lr-space-s); } [part='table'] th:not([align]), [part='table'] td:not([align]) { text-align: start; } [part='table'] th { background: var(--lr-markdown-table-header-bg, var(--lr-color-brand-quiet)); font-weight: var(--lr-font-weight-semibold); } [part='math'][data-display='block'] { display: block; margin-block: var(--lr-space-s) var(--lr-space-s); white-space: pre; overflow-wrap: normal; overflow-x: auto; overflow-y: hidden; overflow-inline: auto; overflow-block: hidden; text-align: center; } [part='math'][data-display='inline'] { display: inline-block; } ::highlight(lr-highlight-accent) { background-color: var(--lr-markdown-highlight-accent-bg, var(--lr-color-brand-quiet)); } ::highlight(lr-highlight-success) { background-color: var(--lr-markdown-highlight-success-bg, var(--lr-color-success-quiet)); } ::highlight(lr-highlight-warning) { background-color: var(--lr-markdown-highlight-warning-bg, var(--lr-color-warning-quiet)); } ::highlight(lr-highlight-danger) { background-color: var(--lr-markdown-highlight-danger-bg, var(--lr-color-danger-quiet)); } ::highlight(lr-highlight-neutral) { background-color: var(--lr-markdown-highlight-neutral-bg, var(--lr-color-surface)); } ::highlight(lr-highlight-active) { background-color: var(--lr-markdown-highlight-active-bg, var(--lr-color-brand-quiet)); text-decoration: underline; } [part='content'] mark[data-lr-highlight-tone] { background: var(--lr-markdown-highlight-accent-bg, var(--lr-color-brand-quiet)); color: inherit; border-radius: calc(var(--lr-radius) * 0.5); } [part='content'] mark[data-lr-highlight-tone='success'] { background: var(--lr-markdown-highlight-success-bg, var(--lr-color-success-quiet)); } [part='content'] mark[data-lr-highlight-tone='warning'] { background: var(--lr-markdown-highlight-warning-bg, var(--lr-color-warning-quiet)); } [part='content'] mark[data-lr-highlight-tone='danger'] { background: var(--lr-markdown-highlight-danger-bg, var(--lr-color-danger-quiet)); } [part='content'] mark[data-lr-highlight-tone='neutral'] { background: var(--lr-markdown-highlight-neutral-bg, var(--lr-color-surface)); } [part='content'] mark[data-lr-highlight-name='lr-highlight-active'] { outline: var(--lr-border-width-thin) solid var(--lr-markdown-highlight-active-outline-color, var(--lr-color-brand)); outline-offset: var(--lr-focus-ring-offset); } [part~='code-block-frame']:where([data-lr-code-chrome]) { margin-block: 0 var(--lr-space-s); border: var(--lr-border-width-thin) solid var(--lr-color-border-subtle); border-radius: var(--lr-markdown-code-block-radius, var(--lr-radius)); overflow: clip; } [part~='code-block-frame']:where([data-lr-code-chrome]) > [part='code-block'] { margin: 0; border-radius: 0; } [part~='code-block-header']:where([data-lr-code-chrome]) { display: flex; align-items: center; gap: var(--lr-space-xs); min-inline-size: 0; padding-inline: var(--lr-space-s) var(--lr-space-2xs); background: var(--lr-markdown-code-header-bg, var(--lr-color-surface)); color: var(--lr-markdown-code-header-color, var(--lr-color-text-quiet)); border-block-end: var(--lr-border-width-thin) solid var(--lr-color-border-subtle); font: var(--lr-font-size-xs)/var(--lr-line-height-normal) var(--lr-font); user-select: none; } [part~='code-block-language']:where([data-lr-code-chrome]) { flex: 0 1 auto; min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; direction: ltr; unicode-bidi: isolate; } [part~='code-block-language']:where([data-lr-code-chrome])::before { content: attr(data-language); } [part~='code-block-copy']:where([data-lr-code-chrome]) { margin-inline-start: auto; ${iconHitTarget} display: inline-flex; align-items: center; justify-content: center; flex-shrink: 0; padding: 0; border: none; border-radius: var(--lr-radius); background: transparent; color: inherit; font: inherit; cursor: pointer; transition: var(--lr-transition-interactive); } [part~='code-block-copy']:where([data-lr-code-chrome]) svg { inline-size: var(--lr-size-1em); block-size: var(--lr-size-1em); } [part~='code-block-copy']:where([data-lr-code-chrome]:hover) { background: var(--lr-color-brand-quiet); color: var(--lr-color-brand); } [part~='code-block-copy']:where([data-lr-code-chrome]:active) { background: color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active)); } [part~='code-block-copy']:where([data-lr-code-chrome]):focus-visible { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: calc(-1 * max(var(--lr-focus-ring-width), calc(var(--lr-focus-ring-width) + var(--lr-focus-ring-offset)))); } @media (forced-colors: active) { [part~='code-block-copy']:where([data-lr-code-chrome]) { border: var(--lr-border-width-thin) solid ButtonText; } } [part~='code-block-copy-success']:where([data-lr-code-chrome]) { color: var(--lr-color-success); } [part~='code-block-copy-error']:where([data-lr-code-chrome]) { color: var(--lr-color-danger); } `;export{styles};
|
|
@@ -38,7 +38,7 @@ export type LyraModelSelectSelectionDirection=LyraSelectionDirection;export inte
|
|
|
38
38
|
* A focused trigger/input follows a rendering-mode replacement. If that new owner is disabled or
|
|
39
39
|
* inert, focus returns to the available element that led into the picker, or to the stable
|
|
40
40
|
* `form-control` owner when there is no return target; a newer external focus move always wins.
|
|
41
|
-
* Array-valued catalogs are clone-owned
|
|
41
|
+
* Array-valued catalogs retain at most the first 1,024 source rows under a 50,000-value deep snapshot budget. Input loss is disclosed through the limit part. Snapshots are clone-owned and readonly. Create and reassign a new
|
|
42
42
|
* catalog array after changing its rows.
|
|
43
43
|
*
|
|
44
44
|
* @customElement lr-model-select
|
|
@@ -71,6 +71,7 @@ export type LyraModelSelectSelectionDirection=LyraSelectionDirection;export inte
|
|
|
71
71
|
* @cssstate user-invalid - `invalid` after that same interaction. Style validation errors with this
|
|
72
72
|
* rather than `invalid`: a pristine required picker is genuinely invalid, but colouring it red
|
|
73
73
|
* before the user has done anything is hostile.
|
|
74
|
+
* @csspart limit - Localized notice when input admission omits catalog data.
|
|
74
75
|
* @csspart form-control - The complete label, control, hint, error, and listbox frame.
|
|
75
76
|
* @csspart form-control-label - The `<label>` element containing the `label` property and slot.
|
|
76
77
|
* @csspart trigger - The trigger button (closed-dropdown mode's positioning anchor).
|
|
@@ -139,7 +140,7 @@ export type LyraModelSelectSelectionDirection=LyraSelectionDirection;export inte
|
|
|
139
140
|
* @status stable
|
|
140
141
|
* @since 4.0.0
|
|
141
142
|
*/
|
|
142
|
-
export declare class LyraModelSelect extends LyraCatalogPickerElement<LyraModelSelectEventMap>{protected static collectionSupport:import("../../../internal/lyra-element.js").LyraCollectionSupport;protected static readonly ownedCollectionProperties:readonly string[];static formAssociated:boolean;static styles:import("lit").CSSResultGroup[];static properties:{value:{attribute:boolean;noAccessor:boolean;};defaultValue:{attribute:string;reflect:boolean;useDefault:boolean;noAccessor:boolean;};};
|
|
143
|
+
export declare class LyraModelSelect extends LyraCatalogPickerElement<LyraModelSelectEventMap>{protected static collectionSupport:import("../../../internal/lyra-element.js").LyraCollectionSupport;protected static readonly ownedCollectionProperties:readonly string[];protected static readonly ownedCollectionLimits:{catalog:{entries:number;};};static formAssociated:boolean;static styles:import("lit").CSSResultGroup[];static properties:{value:{attribute:boolean;noAccessor:boolean;};defaultValue:{attribute:string;reflect:boolean;useDefault:boolean;noAccessor:boolean;};};
|
|
143
144
|
/** Informational only — e.g. `'ollama'`. Rendered as a small leading badge for display grouping. */
|
|
144
145
|
provider:string;
|
|
145
146
|
/** The clone-owned full model list. Omit (or leave empty) to fall back to plain free-text entry.
|
|
@@ -185,4 +186,4 @@ size:LyraSize;private get activeIndex();private get query();private readonly slo
|
|
|
185
186
|
/** The current model id (empty string when nothing is selected). */
|
|
186
187
|
get value():string;set value(next:string);
|
|
187
188
|
/** Reflected current reset default; changing it never overwrites a dirty live `value`. */
|
|
188
|
-
get defaultValue():string;set defaultValue(next:string);protected requiredMessage():string;formResetCallback():void;formStateRestoreCallback(state:string|File|FormData|null,_mode?:'restore'|'autocomplete'):void;formDisabledCallback(disabled:boolean):void;private get closedMode();private get effectiveEntries();private get filteredEntries();private labelFor;private show;private hide;protected updated(changed:PropertyValues):void;private onTriggerClick;private onTriggerBlur;private onTriggerFocus;private onTriggerKeyDown;private onComboMouseDown;private onInputFocus;private onInput;private onInputBlur;private onInputKeyDown;private onListboxMouseDown;private onListboxClick;private renderRows;private renderListbox;private get hasVisibleLabel();private renderLabel;private renderHintError;private renderClosed;private renderFreeText;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-model-select':LyraModelSelect;}}
|
|
189
|
+
get defaultValue():string;set defaultValue(next:string);protected requiredMessage():string;formResetCallback():void;formStateRestoreCallback(state:string|File|FormData|null,_mode?:'restore'|'autocomplete'):void;formDisabledCallback(disabled:boolean):void;private get closedMode();private get effectiveEntries();private get filteredEntries();private labelFor;private show;private hide;private readonly limitAnnouncements;private limitMounted;private previousInputLimit;private get inputLimited();protected updated(changed:PropertyValues):void;private onTriggerClick;private onTriggerBlur;private onTriggerFocus;private onTriggerKeyDown;private onComboMouseDown;private onInputFocus;private onInput;private onInputBlur;private onInputKeyDown;private onListboxMouseDown;private onListboxClick;private renderRows;private renderListbox;private get hasVisibleLabel();private renderLabel;private renderHintError;private renderClosed;private renderFreeText;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-model-select':LyraModelSelect;}}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import{nativeAutocorrectAttribute}from"../../../internal/native-text-control.js";import{renderFormControlHintError}from"../../../internal/form-control-template.js";import{installFormControlLabelSupport}from"../../../internal/form-control-labels.js";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{LyraCatalogPickerElement}from"../catalog-picker-element.js";import{sizes}from"../../../internal/sizes.styles.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{chevronIcon}from"../../../internal/icons.js";import{VALIDITY_ANCHOR}from"../../../internal/anchored-validity.js";import{styles}from"./model-select.styles.js";import{autocorrectConverter,normalizeAutocorrect,spellcheckFromAttributeConverter as spellcheckConverter}from"../../../internal/converters.js";import{CatalogPickerController}from"../../../internal/catalog-picker.js";import{SlotPresenceController}from"../../../internal/slot-presence-controller.js";import{LYRA_DEFAULT_model,LYRA_DEFAULT_modelSelectNoModels,LYRA_DEFAULT_modelSelectRequired}from"../../../internal/default-strings/conversation.generated.js";import{LYRA_DEFAULT_noMatches,LYRA_DEFAULT_notInCatalog}from"../../../internal/default-strings/shared.generated.js";installFormControlLabelSupport();class LyraModelSelect extends LyraCatalogPickerElement{constructor(){super(...arguments),this.provider="",this.allowCustom=!1,this.readonly=!1,this.label="",this.hint="",this.errorText="",this.placeholder="",this.spellcheck=!0,this.autocapitalize="",this.autocorrectValue=!0,this.autocomplete="off",this.inputMode="",this.enterKeyHint="",this.size="m",this.slotPresence=new SlotPresenceController(this),this.listId=nextId("model-select-list"),this.controlId=nextId("model-select-control"),this.catalogPicker=new CatalogPickerController(this,{catalog:()=>this.catalog,allowCustom:()=>this.allowCustom,isReadonly:()=>this.readonly,locale:()=>this.effectiveLocale,searchableFields:entry=>[entry.id,entry.label],emitInput:detail=>this.emit("lr-input",detail),emitChange:detail=>this.emit("lr-change",detail),onValueChange:(value,oldValue)=>{this.internals.setFormValue(value),this.updateValidity(),this.requestUpdate("value",oldValue)},onDefaultValueChange:(_value,oldValue)=>this.requestUpdate("defaultValue",oldValue),onStateChange:(state,oldValue)=>{state==="open"?this.requestUpdate("open",oldValue):this.requestUpdate()},onControlFocus:event=>this.captureModeFocus(event),onControlBlur:event=>{this.effectiveDisabled||(this.touched=!0),this.retireModeFocusAfterBlur(event)},forwardFreeInputClick:!0}),this.onTriggerClick=()=>{this.effectiveDisabled||(this.open?this.hide():this.show())},this.onTriggerBlur=event=>{this.catalogPicker.handleControlBlur(event)},this.onTriggerFocus=event=>{this.catalogPicker.handleControlFocus(event)},this.onTriggerKeyDown=e=>{this.catalogPicker.handleTriggerKeyDown(e)},this.onComboMouseDown=e=>{this.catalogPicker.handleComboMouseDown(e)},this.onInputFocus=event=>{this.catalogPicker.handleInputFocus(event)},this.onInput=e=>{this.catalogPicker.handleInput(e)},this.onInputBlur=event=>{this.catalogPicker.handleControlBlur(event)},this.onInputKeyDown=e=>{this.catalogPicker.handleInputKeyDown(e)},this.onListboxMouseDown=e=>{this.catalogPicker.handleListboxMouseDown(e)},this.onListboxClick=e=>{this.catalogPicker.handleListboxClick(e)}}static{this.defaultStrings={...super.defaultStrings,model:LYRA_DEFAULT_model,modelSelectNoModels:LYRA_DEFAULT_modelSelectNoModels,modelSelectRequired:LYRA_DEFAULT_modelSelectRequired,noMatches:LYRA_DEFAULT_noMatches,notInCatalog:LYRA_DEFAULT_notInCatalog}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["catalog"])}static{this.formAssociated=!0}static{this.styles=[LyraElement.styles,sizes,styles]}static{this.properties={value:{attribute:!1,noAccessor:!0},defaultValue:{attribute:"value",reflect:!0,useDefault:!0,noAccessor:!0}}}get autocorrect(){return this.autocorrectValue}set autocorrect(next){this.autocorrectValue=normalizeAutocorrect(next),this.requestUpdate()}get open(){return this.catalogPicker.open}set open(next){this.catalogPicker.setOpen(next)}get activeIndex(){return this.catalogPicker.activeIndex}get query(){return this.catalogPicker.query}get catalogEditing(){return this.catalogPicker}[VALIDITY_ANCHOR](){return this.renderRoot?.querySelector('[part="trigger"], [part="combobox-input"]')??null}connectedCallback(){super.connectedCallback(),this.updateValidity(),this.catalogPicker.connected(this.hasUpdated)}willUpdate(changed){super.willUpdate(changed);const modeChanged=this.prepareModeFocus(this.closedMode);if(this.catalogPicker.suppressControlEvents=modeChanged,this.open&&(changed.has("catalog")||changed.has("value")||changed.has("allowCustom"))){const activeValue=typeof this.renderRoot?.querySelector=="function"?this.renderRoot.querySelector('[part="option"][data-active]')?.dataset.value:void 0;this.catalogPicker.reconcileRows(activeValue,changed.has("value")||changed.has("allowCustom")||modeChanged,!1)}}disconnectedCallback(){super.disconnectedCallback(),this.clearModeFocus(),this.catalogPicker.disconnected()}adoptedCallback(){super.adoptedCallback(),this.clearModeFocus(),this.catalogPicker.adopted()}get value(){return this.catalogPicker.value}set value(next){this.catalogPicker.value=next}get defaultValue(){return this.catalogPicker.defaultValue}set defaultValue(next){this.catalogPicker.defaultValue=next}requiredMessage(){return this.localize("modelSelectRequired")}formResetCallback(){this.touched=!1,this.catalogPicker.resetValue()}formStateRestoreCallback(state,_mode){this.catalogPicker.restoreState(state)}formDisabledCallback(disabled){this.formDisabledChanged(disabled)}get closedMode(){return this.catalogPicker.closedMode}get effectiveEntries(){return this.catalogPicker.effectiveEntries}get filteredEntries(){return this.catalogPicker.filteredEntries}labelFor(id){return this.catalogPicker.labelFor(id)}show(){this.catalogPicker.show()}hide(){this.catalogPicker.hide()}updated(changed){super.updated(changed),this.syncCatalogDescription(this.controlId);const reposition=changed.has("open")||this.open&&(changed.has("catalog")||changed.has("allowCustom"));this.catalogPicker.updated(reposition),(changed.has("required")||changed.has("readonly")||changed.has("touched")||changed.has("value"))&&(changed.has("readonly")&&this.updateValidity(),this.toggleAttribute("data-invalid",this.touched&&!this.internals.validity.valid)),this.publishValidityStates(),this.catalogPicker.suppressControlEvents=!1,this.finishModeFocus("model-select-mode-focus")}renderRows(rows,activeId){return rows.map((entry,i)=>{const id=`${this.listId}-opt-${i}`,selected=entry.id===this.value,disabled=entry.disabled===!0;return html`<div
|
|
1
|
+
import{__decorate}from"tslib";import{AnnouncementSinkController}from"../../../internal/announcer.js";import{guard}from"lit/directives/guard.js";import{nativeAutocorrectAttribute}from"../../../internal/native-text-control.js";import{renderFormControlHintError}from"../../../internal/form-control-template.js";import{installFormControlLabelSupport}from"../../../internal/form-control-labels.js";import{publicCollectionTruncation,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{LyraCatalogPickerElement}from"../catalog-picker-element.js";import{sizes}from"../../../internal/sizes.styles.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{chevronIcon}from"../../../internal/icons.js";import{VALIDITY_ANCHOR}from"../../../internal/anchored-validity.js";import{styles}from"./model-select.styles.js";import{autocorrectConverter,normalizeAutocorrect,spellcheckFromAttributeConverter as spellcheckConverter}from"../../../internal/converters.js";import{CatalogPickerController}from"../../../internal/catalog-picker.js";import{SlotPresenceController}from"../../../internal/slot-presence-controller.js";import{LYRA_DEFAULT_model,LYRA_DEFAULT_modelSelectNoModels,LYRA_DEFAULT_modelSelectRequired}from"../../../internal/default-strings/conversation.generated.js";import{LYRA_DEFAULT_catalogPickerInputLimit,LYRA_DEFAULT_noMatches,LYRA_DEFAULT_notInCatalog}from"../../../internal/default-strings/shared.generated.js";installFormControlLabelSupport();class LyraModelSelect extends LyraCatalogPickerElement{constructor(){super(...arguments),this.provider="",this.allowCustom=!1,this.readonly=!1,this.label="",this.hint="",this.errorText="",this.placeholder="",this.spellcheck=!0,this.autocapitalize="",this.autocorrectValue=!0,this.autocomplete="off",this.inputMode="",this.enterKeyHint="",this.size="m",this.slotPresence=new SlotPresenceController(this),this.listId=nextId("model-select-list"),this.controlId=nextId("model-select-control"),this.catalogPicker=new CatalogPickerController(this,{catalog:()=>this.catalog,allowCustom:()=>this.allowCustom,isReadonly:()=>this.readonly,locale:()=>this.effectiveLocale,searchableFields:entry=>[entry.id,entry.label],emitInput:detail=>this.emit("lr-input",detail),emitChange:detail=>this.emit("lr-change",detail),onValueChange:(value,oldValue)=>{this.internals.setFormValue(value),this.updateValidity(),this.requestUpdate("value",oldValue)},onDefaultValueChange:(_value,oldValue)=>this.requestUpdate("defaultValue",oldValue),onStateChange:(state,oldValue)=>{state==="open"?this.requestUpdate("open",oldValue):this.requestUpdate()},onControlFocus:event=>this.captureModeFocus(event),onControlBlur:event=>{this.effectiveDisabled||(this.touched=!0),this.retireModeFocusAfterBlur(event)},forwardFreeInputClick:!0}),this.limitAnnouncements=new AnnouncementSinkController(this),this.limitMounted=!1,this.previousInputLimit=!1,this.onTriggerClick=()=>{this.effectiveDisabled||(this.open?this.hide():this.show())},this.onTriggerBlur=event=>{this.catalogPicker.handleControlBlur(event)},this.onTriggerFocus=event=>{this.catalogPicker.handleControlFocus(event)},this.onTriggerKeyDown=e=>{this.catalogPicker.handleTriggerKeyDown(e)},this.onComboMouseDown=e=>{this.catalogPicker.handleComboMouseDown(e)},this.onInputFocus=event=>{this.catalogPicker.handleInputFocus(event)},this.onInput=e=>{this.catalogPicker.handleInput(e)},this.onInputBlur=event=>{this.catalogPicker.handleControlBlur(event)},this.onInputKeyDown=e=>{this.catalogPicker.handleInputKeyDown(e)},this.onListboxMouseDown=e=>{this.catalogPicker.handleListboxMouseDown(e)},this.onListboxClick=e=>{this.catalogPicker.handleListboxClick(e)}}static{this.defaultStrings={...super.defaultStrings,catalogPickerInputLimit:LYRA_DEFAULT_catalogPickerInputLimit,model:LYRA_DEFAULT_model,modelSelectNoModels:LYRA_DEFAULT_modelSelectNoModels,modelSelectRequired:LYRA_DEFAULT_modelSelectRequired,noMatches:LYRA_DEFAULT_noMatches,notInCatalog:LYRA_DEFAULT_notInCatalog}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["catalog"])}static{this.ownedCollectionLimits={catalog:{entries:1024}}}static{this.formAssociated=!0}static{this.styles=[LyraElement.styles,sizes,styles]}static{this.properties={value:{attribute:!1,noAccessor:!0},defaultValue:{attribute:"value",reflect:!0,useDefault:!0,noAccessor:!0}}}get autocorrect(){return this.autocorrectValue}set autocorrect(next){this.autocorrectValue=normalizeAutocorrect(next),this.requestUpdate()}get open(){return this.catalogPicker.open}set open(next){this.catalogPicker.setOpen(next)}get activeIndex(){return this.catalogPicker.activeIndex}get query(){return this.catalogPicker.query}get catalogEditing(){return this.catalogPicker}[VALIDITY_ANCHOR](){return this.renderRoot?.querySelector('[part="trigger"], [part="combobox-input"]')??null}connectedCallback(){super.connectedCallback(),this.updateValidity(),this.catalogPicker.connected(this.hasUpdated)}willUpdate(changed){super.willUpdate(changed);const modeChanged=this.prepareModeFocus(this.closedMode);if(this.catalogPicker.suppressControlEvents=modeChanged,this.open&&(changed.has("catalog")||changed.has("value")||changed.has("allowCustom"))){const activeValue=typeof this.renderRoot?.querySelector=="function"?this.renderRoot.querySelector('[part="option"][data-active]')?.dataset.value:void 0;this.catalogPicker.reconcileRows(activeValue,changed.has("value")||changed.has("allowCustom")||modeChanged,!1)}}disconnectedCallback(){super.disconnectedCallback(),this.clearModeFocus(),this.catalogPicker.disconnected()}adoptedCallback(){super.adoptedCallback(),this.clearModeFocus(),this.catalogPicker.adopted()}get value(){return this.catalogPicker.value}set value(next){this.catalogPicker.value=next}get defaultValue(){return this.catalogPicker.defaultValue}set defaultValue(next){this.catalogPicker.defaultValue=next}requiredMessage(){return this.localize("modelSelectRequired")}formResetCallback(){this.touched=!1,this.catalogPicker.resetValue()}formStateRestoreCallback(state,_mode){this.catalogPicker.restoreState(state)}formDisabledCallback(disabled){this.formDisabledChanged(disabled)}get closedMode(){return this.catalogPicker.closedMode}get effectiveEntries(){return this.catalogPicker.effectiveEntries}get filteredEntries(){return this.catalogPicker.filteredEntries}labelFor(id){return this.catalogPicker.labelFor(id)}show(){this.catalogPicker.show()}hide(){this.catalogPicker.hide()}get inputLimited(){return publicCollectionTruncation(this,"catalog")!==void 0}updated(changed){super.updated(changed);const limited=this.inputLimited;this.limitMounted&&limited&&!this.previousInputLimit&&this.limitAnnouncements.announcePolite(this.localize("catalogPickerInputLimit")),this.previousInputLimit=limited,this.limitMounted=!0,this.syncCatalogDescription(this.controlId);const reposition=changed.has("open")||this.open&&(changed.has("catalog")||changed.has("allowCustom"));this.catalogPicker.updated(reposition),(changed.has("required")||changed.has("readonly")||changed.has("touched")||changed.has("value"))&&(changed.has("readonly")&&this.updateValidity(),this.toggleAttribute("data-invalid",this.touched&&!this.internals.validity.valid)),this.publishValidityStates(),this.catalogPicker.suppressControlEvents=!1,this.finishModeFocus("model-select-mode-focus")}renderRows(rows,activeId){return rows.map((entry,i)=>{const id=`${this.listId}-opt-${i}`,selected=entry.id===this.value,disabled=entry.disabled===!0;return html`<div
|
|
2
2
|
part="option"
|
|
3
3
|
id=${id}
|
|
4
4
|
role="option"
|
|
@@ -21,7 +21,7 @@ import{__decorate}from"tslib";import{nativeAutocorrectAttribute}from"../../../in
|
|
|
21
21
|
@click=${this.onListboxClick}
|
|
22
22
|
>
|
|
23
23
|
<span class="glass-scroll-layer" aria-hidden="true"></span>
|
|
24
|
-
${rows.length===0?html`<div part="empty" role="option" aria-selected="false" aria-disabled="true">${emptyText}</div>`:this.renderRows(rows,activeId)}
|
|
24
|
+
${this.catalogPicker.listboxHidden?nothing:rows.length===0?html`<div part="empty" role="option" aria-selected="false" aria-disabled="true">${emptyText}</div>`:guard([rows,this.value,this.effectiveLocale,this.strings,this.localize("notInCatalog")],()=>this.renderRows(rows,activeId))}
|
|
25
25
|
</div>
|
|
26
26
|
`}get hasVisibleLabel(){return(this.label??"").length>0||this.slotPresence.has("label")}renderLabel(){return html`<label part="form-control-label" for=${this.controlId} ?hidden=${!this.hasVisibleLabel}
|
|
27
27
|
>${this.label}<slot name="label"></slot></label
|
|
@@ -94,5 +94,6 @@ import{__decorate}from"tslib";import{nativeAutocorrectAttribute}from"../../../in
|
|
|
94
94
|
${this.renderListbox(rows,activeId,this.localize("noMatches"))}
|
|
95
95
|
${this.renderHintError(hasError,hasHint)}
|
|
96
96
|
`}render(){return html`<div part="form-control" tabindex="-1">
|
|
97
|
+
${this.inputLimited?html`<p part="limit">${this.localize("catalogPickerInputLimit")}</p>`:nothing}
|
|
97
98
|
${this.closedMode?this.renderClosed():this.renderFreeText()}
|
|
98
99
|
</div>`}}__decorate([property()],LyraModelSelect.prototype,"provider",void 0),__decorate([property({attribute:!1})],LyraModelSelect.prototype,"catalog",void 0),__decorate([property({type:Boolean,reflect:!0,attribute:"allow-custom"})],LyraModelSelect.prototype,"allowCustom",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraModelSelect.prototype,"readonly",void 0),__decorate([property()],LyraModelSelect.prototype,"label",void 0),__decorate([property()],LyraModelSelect.prototype,"hint",void 0),__decorate([property({attribute:"error-text"})],LyraModelSelect.prototype,"errorText",void 0),__decorate([property()],LyraModelSelect.prototype,"placeholder",void 0),__decorate([property({converter:spellcheckConverter})],LyraModelSelect.prototype,"spellcheck",void 0),__decorate([property()],LyraModelSelect.prototype,"autocapitalize",void 0),__decorate([property({converter:autocorrectConverter})],LyraModelSelect.prototype,"autocorrect",null),__decorate([property()],LyraModelSelect.prototype,"autocomplete",void 0),__decorate([property({attribute:"inputmode"})],LyraModelSelect.prototype,"inputMode",void 0),__decorate([property({attribute:"enterkeyhint"})],LyraModelSelect.prototype,"enterKeyHint",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraModelSelect.prototype,"open",null),__decorate([property({reflect:!0})],LyraModelSelect.prototype,"size",void 0);export{LyraModelSelect};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{focusRing}from"../../../internal/interactive-control.styles.js";import{css}from"lit";import{catalogPickerTriggerLabel}from"../catalog-picker-trigger.styles.js";import{glassSurface}from"../../../internal/glass-surface.styles.js";import{glassScrollLayerStyles}from"../../../internal/glass-scroll-layer.styles.js";import{glassIndependentRootStyles}from"../../../internal/glass-independent-root.styles.js";import{formControlChrome,formControlFocusHalo,formControlRequiredMarker}from"../../../internal/form-control.styles.js";import{overlaySurfaceFill,overlaySurfaceControlEdge}from"../../../internal/overlay-surface.styles.js";const styles=css` :host { position: relative; display: inline-block; inline-size: 100%; min-inline-size: 0; max-inline-size: var(--lr-model-select-max-inline-size, var(--lr-size-24rem)); --_lr-model-select-trigger-padding: var(--lr-form-control-padding-block) var(--lr-form-control-padding-inline); --_lr-model-select-trigger-min-height: var(--lr-form-control-height); --_lr-model-select-font-size: var(--lr-form-control-font-size); --_lr-model-select-expand-size: var(--lr-size-1-75rem); --_lr-model-select-gap-default: var(--lr-space-xs); --_lr-model-select-radius-default: var(--lr-form-control-radius); --_lr-form-control-focus-shadow: var(--lr-form-control-focus-shadow, none); } :host(:disabled) { cursor: not-allowed; } :host([size="2xs"]), :host([size="xs"]) { --_lr-model-select-expand-size: var(--lr-size-1rem); } :host([size="s"]), :host([size="small"]) { --_lr-model-select-expand-size: var(--lr-size-1-25rem); } ${formControlChrome} ${formControlRequiredMarker} [part='trigger'], [part='combobox'] { display: flex; align-items: center; gap: var(--lr-model-select-gap, var(--_lr-model-select-gap-default)); inline-size: 100%; min-inline-size: 0; min-block-size: var( --lr-model-select-trigger-height, var( --lr-model-select-trigger-min-height, var(--_lr-model-select-trigger-min-height) ) ); block-size: var(--lr-model-select-trigger-height, auto); box-sizing: border-box; padding: var( --lr-model-select-trigger-padding, var(--_lr-model-select-trigger-padding) ); border: var(--lr-border-width-thin) solid var(--lr-model-select-trigger-border-color, var(--lr-color-border)); border-radius: var( --lr-model-select-radius, var(--_lr-model-select-radius-default) ); background: var(--lr-model-select-trigger-fill, var(--lr-color-surface)); color: inherit; font: inherit; font-size: var( --lr-model-select-font-size, var(--_lr-model-select-font-size) ); } [part="trigger"] { cursor: pointer; text-align: start; } [part="combobox"] { cursor: text; } [part="trigger"]:focus-visible, [part="combobox"]:focus-within { ${focusRing} } [part="trigger"]:focus, [part="combobox"]:focus-within { ${formControlFocusHalo} } :where([part="trigger"]):hover:where(:not(:disabled)) { background: var(--lr-color-brand-quiet); border-color: var( --lr-model-select-trigger-hover-border-color, var(--lr-model-select-trigger-border-color, var(--lr-color-border)) ); } :where([part="trigger"]):active:where(:not(:disabled)) { background: color-mix( in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); } :host([open]) [part="trigger"] { border-color: var( --lr-model-select-open-border-color, var(--lr-color-brand) ); } :host(:disabled) [part="trigger"], :host(:disabled) [part="combobox"] { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } ${catalogPickerTriggerLabel} [part="combobox-input"] { flex: 1 1 auto; min-inline-size: 0; border: none; outline: none; background: transparent; color: inherit; font: inherit; } [part="combobox-input"]::placeholder { color: var(--lr-color-text-quiet); } [part="expand-icon"] { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; color: var(--lr-color-text-quiet); min-inline-size: min( var(--lr-icon-button-size), var(--lr-model-select-expand-size, var(--_lr-model-select-expand-size)) ); min-block-size: min( var(--lr-icon-button-size), var(--lr-model-select-expand-size, var(--_lr-model-select-expand-size)) ); line-height: var(--lr-line-height-none); } [part="expand-icon"] svg { transform: rotate(90deg); } [part="listbox"][hidden] { display: none; } [part="listbox"] { position: fixed; z-index: var(--lr-layer-dropdown); box-sizing: border-box; max-block-size: min(var(--lr-size-18rem), var(--lr-positioner-available-block-size, var(--lr-size-18rem))); overflow-y: auto; overflow-x: hidden; inline-size: max-content; min-inline-size: min(var(--lr-size-12rem), var(--lr-positioner-available-inline-size, var(--lr-size-12rem))); max-inline-size: min(var(--lr-popover-viewport-clamp), var(--lr-size-28rem), var(--lr-positioner-available-inline-size, 100vw)); padding: var(--lr-space-xs); ${overlaySurfaceFill} ${overlaySurfaceControlEdge} border-radius: var( --lr-model-select-radius, var(--lr-overlay-radius, var(--_lr-model-select-radius-default)) ); box-shadow: var(--lr-overlay-shadow-anchored, var(--lr-shadow-m)); visibility: hidden; opacity: 0; transform: translateY(var(--lr-size-neg-0-25rem)); transition: opacity var(--lr-transition-fast), transform var(--lr-transition-fast), visibility var(--lr-transition-fast); } :host([open]) [part="listbox"] { visibility: visible; opacity: 1; transform: translateY(0); } @media (prefers-reduced-motion: reduce) { [part="listbox"] { transition: none !important; } } [part="option"] { display: flex; align-items: center; gap: var(--lr-model-select-gap, var(--_lr-model-select-gap-default)); inline-size: 100%; box-sizing: border-box; padding: var(--lr-space-xs) var(--lr-space-s); border: var(--lr-border-width-thin) solid transparent; border-radius: var( --lr-model-select-radius, var(--_lr-model-select-radius-default) ); background: none; color: inherit; font: inherit; text-align: start; cursor: pointer; } [part="option"][aria-selected="true"] { background: var(--lr-model-select-option-selected-bg, transparent); border-color: var( --lr-model-select-option-selected-border, var(--lr-color-brand) ); color: var(--lr-model-select-option-selected-color, var(--lr-color-brand)); font-weight: var( --lr-model-select-option-selected-font-weight, var(--lr-font-weight-semibold) ); } [part="option"]:where(:not([aria-disabled='true'])):hover, [part="option"][data-active] { background: var( --lr-model-select-option-active-bg, var(--lr-color-brand-quiet) ); } [part="option"]:where(:not([aria-disabled='true'])):active { background: color-mix( in oklab, var(--lr-model-select-option-active-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); } [part="option"][aria-disabled='true'] { cursor: default; opacity: var(--lr-model-select-option-disabled-opacity, 0.5); } [part="option-icon"] { flex: 0 0 auto; line-height: var(--lr-line-height-1-4); } [part="option-label"] { flex: 1 1 auto; min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } [part="option"][data-synthetic] { border-style: var(--lr-model-select-option-synthetic-border-style, dashed); border-color: var( --lr-model-select-option-synthetic-border-color, var(--lr-color-border) ); } [part="option"][data-synthetic] [part="option-label"] { font-style: var(--lr-model-select-option-synthetic-font-style, italic); } [part="option-badge"] { flex: 0 0 auto; font-size: var(--lr-size-0-6875rem); font-style: normal; font-weight: var(--lr-font-weight-normal); color: var(--lr-color-text-quiet); white-space: nowrap; } [part="empty"] { padding: var(--lr-space-m); color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-md-sm); } ${glassScrollLayerStyles} ${glassIndependentRootStyles} ${glassSurface('[part="listbox"]',css`var(--lr-overlay-surface, var(--_lr-overlay-surface, var(--lr-color-surface-container-high)))`,void 0,!0)} `;export{styles};
|
|
1
|
+
import{focusRing}from"../../../internal/interactive-control.styles.js";import{css}from"lit";import{catalogPickerTriggerLabel}from"../catalog-picker-trigger.styles.js";import{glassSurface}from"../../../internal/glass-surface.styles.js";import{glassScrollLayerStyles}from"../../../internal/glass-scroll-layer.styles.js";import{glassIndependentRootStyles}from"../../../internal/glass-independent-root.styles.js";import{formControlChrome,formControlFocusHalo,formControlRequiredMarker}from"../../../internal/form-control.styles.js";import{overlaySurfaceFill,overlaySurfaceControlEdge}from"../../../internal/overlay-surface.styles.js";const styles=css` [part='limit'] { margin: 0; padding: var(--lr-space-s); color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-sm); overflow-wrap: anywhere; } :host { position: relative; display: inline-block; inline-size: 100%; min-inline-size: 0; max-inline-size: var(--lr-model-select-max-inline-size, var(--lr-size-24rem)); --_lr-model-select-trigger-padding: var(--lr-form-control-padding-block) var(--lr-form-control-padding-inline); --_lr-model-select-trigger-min-height: var(--lr-form-control-height); --_lr-model-select-font-size: var(--lr-form-control-font-size); --_lr-model-select-expand-size: var(--lr-size-1-75rem); --_lr-model-select-gap-default: var(--lr-space-xs); --_lr-model-select-radius-default: var(--lr-form-control-radius); --_lr-form-control-focus-shadow: var(--lr-form-control-focus-shadow, none); } :host(:disabled) { cursor: not-allowed; } :host([size="2xs"]), :host([size="xs"]) { --_lr-model-select-expand-size: var(--lr-size-1rem); } :host([size="s"]), :host([size="small"]) { --_lr-model-select-expand-size: var(--lr-size-1-25rem); } ${formControlChrome} ${formControlRequiredMarker} [part='trigger'], [part='combobox'] { display: flex; align-items: center; gap: var(--lr-model-select-gap, var(--_lr-model-select-gap-default)); inline-size: 100%; min-inline-size: 0; min-block-size: var( --lr-model-select-trigger-height, var( --lr-model-select-trigger-min-height, var(--_lr-model-select-trigger-min-height) ) ); block-size: var(--lr-model-select-trigger-height, auto); box-sizing: border-box; padding: var( --lr-model-select-trigger-padding, var(--_lr-model-select-trigger-padding) ); border: var(--lr-border-width-thin) solid var(--lr-model-select-trigger-border-color, var(--lr-color-border)); border-radius: var( --lr-model-select-radius, var(--_lr-model-select-radius-default) ); background: var(--lr-model-select-trigger-fill, var(--lr-color-surface)); color: inherit; font: inherit; font-size: var( --lr-model-select-font-size, var(--_lr-model-select-font-size) ); } [part="trigger"] { cursor: pointer; text-align: start; } [part="combobox"] { cursor: text; } [part="trigger"]:focus-visible, [part="combobox"]:focus-within { ${focusRing} } [part="trigger"]:focus, [part="combobox"]:focus-within { ${formControlFocusHalo} } :where([part="trigger"]):hover:where(:not(:disabled)) { background: var(--lr-color-brand-quiet); border-color: var( --lr-model-select-trigger-hover-border-color, var(--lr-model-select-trigger-border-color, var(--lr-color-border)) ); } :where([part="trigger"]):active:where(:not(:disabled)) { background: color-mix( in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); } :host([open]) [part="trigger"] { border-color: var( --lr-model-select-open-border-color, var(--lr-color-brand) ); } :host(:disabled) [part="trigger"], :host(:disabled) [part="combobox"] { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } ${catalogPickerTriggerLabel} [part="combobox-input"] { flex: 1 1 auto; min-inline-size: 0; border: none; outline: none; background: transparent; color: inherit; font: inherit; } [part="combobox-input"]::placeholder { color: var(--lr-color-text-quiet); } [part="expand-icon"] { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; color: var(--lr-color-text-quiet); min-inline-size: min( var(--lr-icon-button-size), var(--lr-model-select-expand-size, var(--_lr-model-select-expand-size)) ); min-block-size: min( var(--lr-icon-button-size), var(--lr-model-select-expand-size, var(--_lr-model-select-expand-size)) ); line-height: var(--lr-line-height-none); } [part="expand-icon"] svg { transform: rotate(90deg); } [part="listbox"][hidden] { display: none; } [part="listbox"] { position: fixed; z-index: var(--lr-layer-dropdown); box-sizing: border-box; max-block-size: min(var(--lr-size-18rem), var(--lr-positioner-available-block-size, var(--lr-size-18rem))); overflow-y: auto; overflow-x: hidden; inline-size: max-content; min-inline-size: min(var(--lr-size-12rem), var(--lr-positioner-available-inline-size, var(--lr-size-12rem))); max-inline-size: min(var(--lr-popover-viewport-clamp), var(--lr-size-28rem), var(--lr-positioner-available-inline-size, 100vw)); padding: var(--lr-space-xs); ${overlaySurfaceFill} ${overlaySurfaceControlEdge} border-radius: var( --lr-model-select-radius, var(--lr-overlay-radius, var(--_lr-model-select-radius-default)) ); box-shadow: var(--lr-overlay-shadow-anchored, var(--lr-shadow-m)); visibility: hidden; opacity: 0; transform: translateY(var(--lr-size-neg-0-25rem)); transition: opacity var(--lr-transition-fast), transform var(--lr-transition-fast), visibility var(--lr-transition-fast); } :host([open]) [part="listbox"] { visibility: visible; opacity: 1; transform: translateY(0); } @media (prefers-reduced-motion: reduce) { [part="listbox"] { transition: none !important; } } [part="option"] { display: flex; align-items: center; gap: var(--lr-model-select-gap, var(--_lr-model-select-gap-default)); inline-size: 100%; box-sizing: border-box; padding: var(--lr-space-xs) var(--lr-space-s); border: var(--lr-border-width-thin) solid transparent; border-radius: var( --lr-model-select-radius, var(--_lr-model-select-radius-default) ); background: none; color: inherit; font: inherit; text-align: start; cursor: pointer; } [part="option"][aria-selected="true"] { background: var(--lr-model-select-option-selected-bg, transparent); border-color: var( --lr-model-select-option-selected-border, var(--lr-color-brand) ); color: var(--lr-model-select-option-selected-color, var(--lr-color-brand)); font-weight: var( --lr-model-select-option-selected-font-weight, var(--lr-font-weight-semibold) ); } [part="option"]:where(:not([aria-disabled='true'])):hover, [part="option"][data-active] { background: var( --lr-model-select-option-active-bg, var(--lr-color-brand-quiet) ); } [part="option"]:where(:not([aria-disabled='true'])):active { background: color-mix( in oklab, var(--lr-model-select-option-active-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); } [part="option"][aria-disabled='true'] { cursor: default; opacity: var(--lr-model-select-option-disabled-opacity, 0.5); } [part="option-icon"] { flex: 0 0 auto; line-height: var(--lr-line-height-1-4); } [part="option-label"] { flex: 1 1 auto; min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } [part="option"][data-synthetic] { border-style: var(--lr-model-select-option-synthetic-border-style, dashed); border-color: var( --lr-model-select-option-synthetic-border-color, var(--lr-color-border) ); } [part="option"][data-synthetic] [part="option-label"] { font-style: var(--lr-model-select-option-synthetic-font-style, italic); } [part="option-badge"] { flex: 0 0 auto; font-size: var(--lr-size-0-6875rem); font-style: normal; font-weight: var(--lr-font-weight-normal); color: var(--lr-color-text-quiet); white-space: nowrap; } [part="empty"] { padding: var(--lr-space-m); color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-md-sm); } ${glassScrollLayerStyles} ${glassIndependentRootStyles} ${glassSurface('[part="listbox"]',css`var(--lr-overlay-surface, var(--_lr-overlay-surface, var(--lr-color-surface-container-high)))`,void 0,!0)} `;export{styles};
|
|
@@ -31,6 +31,7 @@ export interface ModelSettingsChangeDetail{model:string;inCatalog:boolean;temper
|
|
|
31
31
|
* @customElement lr-model-settings-panel
|
|
32
32
|
* @event lr-change - Either child control changed. `detail: { model: string; inCatalog: boolean; temperature: number }` — always the full current settings, not just whatever changed.
|
|
33
33
|
* @csspart base - The outermost wrapping container.
|
|
34
|
+
* @csspart limit - Catalog loss at this wrapper's input boundary.
|
|
34
35
|
* @csspart model-row - The row wrapping the internal `lr-model-select`.
|
|
35
36
|
* @csspart model-select - The internal model selector.
|
|
36
37
|
* @csspart model-label - The model selector's visible label.
|
|
@@ -60,4 +61,4 @@ temperature:number;temperatureMin:number;temperatureMax:number;temperatureStep:n
|
|
|
60
61
|
* `lr-model-select` and `lr-slider` — a wrapping `<fieldset disabled>`
|
|
61
62
|
* alone would not reach either, since a form-associated control's own
|
|
62
63
|
* `disabled` IDL property/attribute is never mutated by fieldset cascading. */
|
|
63
|
-
disabled:boolean;private get inCatalog();private get temperatureDomain();private clampTemperature;private readonly formatTemperature;private emitChange;private onModelChange;private onTemperatureChange;private onTemperatureInput;private containNativeEvent;protected willUpdate(changed:PropertyValues<this>):void;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-model-settings-panel':LyraModelSettingsPanel;}}
|
|
64
|
+
disabled:boolean;private get inCatalog();private get temperatureDomain();private clampTemperature;private readonly formatTemperature;private emitChange;private onModelChange;private onTemperatureChange;private onTemperatureInput;private containNativeEvent;protected willUpdate(changed:PropertyValues<this>):void;private readonly inputLimitAnnouncements;private get inputLimitMessage();private syncInputLimitAnnouncement;protected updated(changed:PropertyValues):void;connectedCallback():void;adoptedCallback():void;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-model-settings-panel':LyraModelSettingsPanel;}}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import{collectionSupport}from"../../../internal/collection-snapshot.js";import{html}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{normalizeCatalog}from"../../../internal/catalog-picker.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{finiteNumber,finiteRange}from"../../../internal/numbers.js";import{clampSteppedValue}from"../../../internal/step-value.js";import{literalSetConverter}from"../../../internal/converters.js";import{styles}from"./model-settings-panel.styles.js";import"../model-select/model-select.class.js";import"../../forms/slider/slider.class.js";import{LYRA_DEFAULT_model,LYRA_DEFAULT_selectModel,LYRA_DEFAULT_temperature}from"../../../internal/default-strings/conversation.generated.js";const MODEL_SETTINGS_PANEL_LAYOUT=literalSetConverter(["vertical","compact"],"vertical"),DEFAULT_TEMPERATURE_MIN=0,DEFAULT_TEMPERATURE_MAX=2,DEFAULT_TEMPERATURE_STEP=.1,DEFAULT_TEMPERATURE=1;class LyraModelSettingsPanel extends LyraElement{constructor(){super(...arguments),this.provider="",this.model="",this.allowCustom=!1,this.temperature=DEFAULT_TEMPERATURE,this.temperatureMin=DEFAULT_TEMPERATURE_MIN,this.temperatureMax=DEFAULT_TEMPERATURE_MAX,this.temperatureStep=DEFAULT_TEMPERATURE_STEP,this._layout="vertical",this.disabled=!1,this.formatTemperature=value=>{const expanded=getNumberFormat(this.effectiveLocale,{maximumFractionDigits:20}).format(value);return expanded.length<=24?expanded:getNumberFormat(this.effectiveLocale,{notation:"scientific",maximumSignificantDigits:6}).format(value)},this.onModelChange=e=>{e.stopPropagation(),!this.disabled&&(this.model=e.detail.value,this.emitChange())},this.onTemperatureChange=e=>{e.stopPropagation(),!this.disabled&&(this.temperature=this.clampTemperature(e.detail.value),this.emitChange())},this.onTemperatureInput=e=>{e.stopPropagation(),!this.disabled&&(this.temperature=this.clampTemperature(e.detail.value))},this.containNativeEvent=event=>{event.stopPropagation()}}static{this.defaultStrings={...super.defaultStrings,model:LYRA_DEFAULT_model,selectModel:LYRA_DEFAULT_selectModel,temperature:LYRA_DEFAULT_temperature}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["catalog"])}static{this.styles=[LyraElement.styles,styles]}get layout(){return this._layout}set layout(next){const normalized=MODEL_SETTINGS_PANEL_LAYOUT.normalizeReflected(this,"layout",next),old=this._layout;old!==normalized&&(this._layout=normalized,this.requestUpdate("layout",old))}get inCatalog(){return normalizeCatalog(this.catalog).some(entry=>entry.id===this.model)}get temperatureDomain(){const min=finiteNumber(this.temperatureMin,DEFAULT_TEMPERATURE_MIN),max=finiteNumber(this.temperatureMax,DEFAULT_TEMPERATURE_MAX);return{min,max,lo:Math.min(min,max),hi:Math.max(min,max),step:finiteRange(this.temperatureStep,0,0)}}clampTemperature(raw){const{lo,hi,step}=this.temperatureDomain,temperature=finiteNumber(raw,lo);return clampSteppedValue(temperature,lo,hi,step)}emitChange(){this.emit("lr-change",{model:this.model,inCatalog:this.inCatalog,temperature:this.temperature})}willUpdate(changed){if(super.willUpdate(changed),changed.has("temperature")||changed.has("temperatureMin")||changed.has("temperatureMax")||changed.has("temperatureStep")){const clamped=this.clampTemperature(this.temperature);clamped!==this.temperature&&(this.temperature=clamped)}}render(){const domain=this.temperatureDomain,modelLabel=this.localize("model"),temperatureLabel=this.localize("temperature");return html`
|
|
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}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{normalizeCatalog}from"../../../internal/catalog-picker.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{finiteNumber,finiteRange}from"../../../internal/numbers.js";import{clampSteppedValue}from"../../../internal/step-value.js";import{literalSetConverter}from"../../../internal/converters.js";import{styles}from"./model-settings-panel.styles.js";import"../model-select/model-select.class.js";import"../../forms/slider/slider.class.js";import{LYRA_DEFAULT_model,LYRA_DEFAULT_selectModel,LYRA_DEFAULT_temperature}from"../../../internal/default-strings/conversation.generated.js";import{LYRA_DEFAULT_catalogPickerInputLimit}from"../../../internal/default-strings/shared.generated.js";const MODEL_SETTINGS_PANEL_LAYOUT=literalSetConverter(["vertical","compact"],"vertical"),DEFAULT_TEMPERATURE_MIN=0,DEFAULT_TEMPERATURE_MAX=2,DEFAULT_TEMPERATURE_STEP=.1,DEFAULT_TEMPERATURE=1;class LyraModelSettingsPanel extends LyraElement{constructor(){super(...arguments),this.provider="",this.model="",this.allowCustom=!1,this.temperature=DEFAULT_TEMPERATURE,this.temperatureMin=DEFAULT_TEMPERATURE_MIN,this.temperatureMax=DEFAULT_TEMPERATURE_MAX,this.temperatureStep=DEFAULT_TEMPERATURE_STEP,this._layout="vertical",this.disabled=!1,this.formatTemperature=value=>{const expanded=getNumberFormat(this.effectiveLocale,{maximumFractionDigits:20}).format(value);return expanded.length<=24?expanded:getNumberFormat(this.effectiveLocale,{notation:"scientific",maximumSignificantDigits:6}).format(value)},this.onModelChange=e=>{e.stopPropagation(),!this.disabled&&(this.model=e.detail.value,this.emitChange())},this.onTemperatureChange=e=>{e.stopPropagation(),!this.disabled&&(this.temperature=this.clampTemperature(e.detail.value),this.emitChange())},this.onTemperatureInput=e=>{e.stopPropagation(),!this.disabled&&(this.temperature=this.clampTemperature(e.detail.value))},this.containNativeEvent=event=>{event.stopPropagation()},this.inputLimitAnnouncements=new AnnouncementSinkController(this)}static{this.defaultStrings={...super.defaultStrings,catalogPickerInputLimit:LYRA_DEFAULT_catalogPickerInputLimit,model:LYRA_DEFAULT_model,selectModel:LYRA_DEFAULT_selectModel,temperature:LYRA_DEFAULT_temperature}}static{this.collectionSupport=collectionSupport}static{this.ownedCollectionProperties=Object.freeze(["catalog"])}static{this.styles=[LyraElement.styles,styles]}get layout(){return this._layout}set layout(next){const normalized=MODEL_SETTINGS_PANEL_LAYOUT.normalizeReflected(this,"layout",next),old=this._layout;old!==normalized&&(this._layout=normalized,this.requestUpdate("layout",old))}get inCatalog(){return normalizeCatalog(this.catalog).some(entry=>entry.id===this.model)}get temperatureDomain(){const min=finiteNumber(this.temperatureMin,DEFAULT_TEMPERATURE_MIN),max=finiteNumber(this.temperatureMax,DEFAULT_TEMPERATURE_MAX);return{min,max,lo:Math.min(min,max),hi:Math.max(min,max),step:finiteRange(this.temperatureStep,0,0)}}clampTemperature(raw){const{lo,hi,step}=this.temperatureDomain,temperature=finiteNumber(raw,lo);return clampSteppedValue(temperature,lo,hi,step)}emitChange(){this.emit("lr-change",{model:this.model,inCatalog:this.inCatalog,temperature:this.temperature})}willUpdate(changed){if(super.willUpdate(changed),changed.has("temperature")||changed.has("temperatureMin")||changed.has("temperatureMax")||changed.has("temperatureStep")){const clamped=this.clampTemperature(this.temperature);clamped!==this.temperature&&(this.temperature=clamped)}}get inputLimitMessage(){return publicCollectionTruncation(this,"catalog")?this.localize("catalogPickerInputLimit"):""}syncInputLimitAnnouncement(){const loss=publicCollectionTruncation(this,"catalog");this.inputLimitAnnouncements.transition("input-limit",loss?`${loss.source}:${loss.retained}:${loss.kept}`:"",this.inputLimitMessage,"polite")}updated(changed){super.updated(changed),this.syncInputLimitAnnouncement()}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.syncInputLimitAnnouncement()}adoptedCallback(){super.adoptedCallback(),this.inputLimitAnnouncements.adopted()}render(){const domain=this.temperatureDomain,modelLabel=this.localize("model"),temperatureLabel=this.localize("temperature");return html`
|
|
2
2
|
<div part="base" @input=${this.containNativeEvent} @change=${this.containNativeEvent}>
|
|
3
|
+
${this.inputLimitMessage?html`<p part="limit">${this.inputLimitMessage}</p>`:nothing}
|
|
3
4
|
<div part="model-row">
|
|
4
5
|
<lr-model-select
|
|
5
6
|
part="model-select"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{css}from"lit";const styles=css`:host{inline-size:100%;max-inline-size:var(--lr-model-settings-panel-max-inline-size,var(--lr-size-28rem));display:block}[part=base]{gap:var(--lr-space-l);box-sizing:border-box;padding:var(--lr-space-l);border:var(--lr-border-width-thin) solid var(--lr-color-border-subtle);border-radius:var(--lr-radius);background:var(--lr-color-surface);flex-direction:column;display:flex}[part=model-row]{gap:var(--lr-space-xs);--lr-model-select-max-inline-size:none;flex-direction:column;min-inline-size:0;display:flex}[part=model-row] lr-model-select{inline-size:100%}[part=temperature-row]{align-items:center;gap:var(--lr-space-s);grid-template-columns:minmax(0,auto) minmax(0,1fr) auto;min-inline-size:0;display:grid}[part=temperature-row] lr-slider{min-inline-size:0}[part=temperature-label]{font-size:var(--lr-font-size-sm);font-weight:var(--lr-font-weight-semibold);color:var(--lr-color-text);overflow-wrap:anywhere}[part=temperature-value]{font-size:var(--lr-font-size-sm);color:var(--lr-color-text-quiet);font-variant-numeric:tabular-nums;min-inline-size:var(--lr-size-2-5ch);text-align:end}:host([layout=compact]){max-inline-size:var(--lr-model-settings-panel-max-inline-size,none)}:host([layout=compact]) [part=base]{align-items:flex-start;gap:var(--lr-space-m);padding:var(--lr-space-m);flex-flow:wrap}:host([layout=compact]) [part=model-row],:host([layout=compact]) [part=temperature-row]{flex:1 1 var(--lr-size-12rem);min-inline-size:var(--lr-size-10rem)}:host([layout=compact]) [part=temperature-label]{font-size:var(--lr-size-0-6875rem);font-weight:var(--lr-font-weight-bold);text-transform:uppercase;letter-spacing:var(--lr-size-0-04em);color:var(--lr-color-text-quiet)}`;export{styles};
|
|
1
|
+
import{css}from"lit";const styles=css`:host{inline-size:100%;max-inline-size:var(--lr-model-settings-panel-max-inline-size,var(--lr-size-28rem));display:block}[part=base]{gap:var(--lr-space-l);box-sizing:border-box;padding:var(--lr-space-l);border:var(--lr-border-width-thin) solid var(--lr-color-border-subtle);border-radius:var(--lr-radius);background:var(--lr-color-surface);flex-direction:column;display:flex}[part=model-row]{gap:var(--lr-space-xs);--lr-model-select-max-inline-size:none;flex-direction:column;min-inline-size:0;display:flex}[part=model-row] lr-model-select{inline-size:100%}[part=temperature-row]{align-items:center;gap:var(--lr-space-s);grid-template-columns:minmax(0,auto) minmax(0,1fr) auto;min-inline-size:0;display:grid}[part=temperature-row] lr-slider{min-inline-size:0}[part=temperature-label]{font-size:var(--lr-font-size-sm);font-weight:var(--lr-font-weight-semibold);color:var(--lr-color-text);overflow-wrap:anywhere}[part=temperature-value]{font-size:var(--lr-font-size-sm);color:var(--lr-color-text-quiet);font-variant-numeric:tabular-nums;min-inline-size:var(--lr-size-2-5ch);text-align:end}:host([layout=compact]){max-inline-size:var(--lr-model-settings-panel-max-inline-size,none)}:host([layout=compact]) [part=base]{align-items:flex-start;gap:var(--lr-space-m);padding:var(--lr-space-m);flex-flow:wrap}:host([layout=compact]) [part=model-row],:host([layout=compact]) [part=temperature-row]{flex:1 1 var(--lr-size-12rem);min-inline-size:var(--lr-size-10rem)}:host([layout=compact]) [part=temperature-label]{font-size:var(--lr-size-0-6875rem);font-weight:var(--lr-font-weight-bold);text-transform:uppercase;letter-spacing:var(--lr-size-0-04em);color:var(--lr-color-text-quiet)}:host([layout=compact]) [part=limit]{flex-basis:100%}[part=limit]{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;margin:0}`;export{styles};
|
|
@@ -56,6 +56,7 @@ bytes?:number;status?:LyraAttachmentUploadStatus;progress?:number;}export interf
|
|
|
56
56
|
* @event lr-attachment-preview-request - Cancelable preview request.
|
|
57
57
|
* `detail: { attachmentId, name, mimeType, src }`.
|
|
58
58
|
* @csspart base - The prompt surface.
|
|
59
|
+
* @csspart limit - Suggestions or catalog loss at this wrapper's input boundary.
|
|
59
60
|
* @csspart controls - Model, voice, and source controls.
|
|
60
61
|
* @csspart sources - The collapsible source-picker region.
|
|
61
62
|
* @csspart sources-summary - The source-picker disclosure.
|
|
@@ -73,7 +74,7 @@ bytes?:number;status?:LyraAttachmentUploadStatus;progress?:number;}export interf
|
|
|
73
74
|
export declare class LyraPromptInput extends LyraElement<LyraPromptInputEventMap>{protected static collectionSupport:import("../../../internal/lyra-element.js").LyraCollectionSupport;protected static readonly ownedCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];protected static readonly immutableEventDetails:readonly string[];
|
|
74
75
|
/** Prompt-queue metadata is opaque caller state; retain it while freezing the forwarding
|
|
75
76
|
* envelope instead of recursively reflecting a detail the child has already canonicalized. */
|
|
76
|
-
protected static readonly identityEventDetailProperties:Readonly<{'lr-send-now':readonly string[];}>;protected static readonly identityEventDetailCollectionItems:Readonly<{'lr-queue-change':readonly string[];}>;private suggestionCaretGeneration;private _value;get value():string;set value(next:string);private statusValue;
|
|
77
|
+
protected static readonly identityEventDetailProperties:Readonly<{'lr-send-now':readonly string[];}>;protected static readonly identityEventDetailCollectionItems:Readonly<{'lr-queue-change':readonly string[];}>;private readonly inputLimitAnnouncements;private get inputLosses();private get inputLimitMessage();private syncInputLimitAnnouncement;private suggestionCaretGeneration;private _value;get value():string;set value(next:string);private statusValue;
|
|
77
78
|
/** Forwarded composer state. Invalid input reads as the safe idle state without rewriting this host's attribute. */
|
|
78
79
|
get status():ChatComposerStatus;set status(value:ChatComposerStatus);placeholder:string;disabled:boolean;readOnly:boolean;minLength?:number;maxLength?:number;
|
|
79
80
|
/** Forwarded to the composed composer: plain Enter inserts a newline instead of submitting. */
|
|
@@ -120,4 +121,4 @@ label?:string;accessibleLabel:string|null;private activeSuggestion;private reado
|
|
|
120
121
|
/** The composed native textarea, or `null` before it has rendered. */
|
|
121
122
|
get input():HTMLTextAreaElement|null;get selectionStart():number|null;set selectionStart(value:number|null);get selectionEnd():number|null;set selectionEnd(value:number|null);get selectionDirection():ChatComposerSelectionDirection|null;set selectionDirection(value:ChatComposerSelectionDirection|null);select():void;
|
|
122
123
|
/** Forwards the native selection range to the composed textarea; a pre-render call is a no-op. */
|
|
123
|
-
setSelectionRange(start:number|null,end:number|null,direction?:ChatComposerSelectionDirection):void;setRangeText(replacement:string):void;setRangeText(replacement:string,start:number,end:number,selectMode?:SelectionMode):void;protected willUpdate(changed:PropertyValues<this>):void;connectedCallback():void;disconnectedCallback():void;protected firstUpdated(changed:PropertyValues):void;private syncDescription;protected updated(_changed:PropertyValues):void;private suggestions;private detectSuggestion;private onInput;private onChange;private onSubmit;private onStop;private onKeyDown;private suggestionFocusIsOwned;private closeSuggestions;private onCompositeKeyDown;private onCompositeFocusOut;private onNativeInput;private onNativeChange;private onNativeFocus;private onNativeBlur;private onSuggestionSelect;private onFiles;private get effectiveAttachments();private readonly firstByIdentity;private firstById;private get effectiveSources();private get effectiveSelectedSourceIds();private get effectiveQueue();private renderDefaultAttachmentTrigger;private reemit;private renderAttachment;private onAttachmentPreviewRequest;private renderControls;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-prompt-input':LyraPromptInput;}}
|
|
124
|
+
setSelectionRange(start:number|null,end:number|null,direction?:ChatComposerSelectionDirection):void;setRangeText(replacement:string):void;setRangeText(replacement:string,start:number,end:number,selectMode?:SelectionMode):void;protected willUpdate(changed:PropertyValues<this>):void;adoptedCallback():void;connectedCallback():void;disconnectedCallback():void;protected firstUpdated(changed:PropertyValues):void;private syncDescription;protected updated(_changed:PropertyValues):void;private suggestions;private detectSuggestion;private onInput;private onChange;private onSubmit;private onStop;private onKeyDown;private suggestionFocusIsOwned;private closeSuggestions;private onCompositeKeyDown;private onCompositeFocusOut;private onNativeInput;private onNativeChange;private onNativeFocus;private onNativeBlur;private onSuggestionSelect;private onFiles;private get effectiveAttachments();private readonly firstByIdentity;private firstById;private get effectiveSources();private get effectiveSelectedSourceIds();private get effectiveQueue();private renderDefaultAttachmentTrigger;private reemit;private renderAttachment;private onAttachmentPreviewRequest;private renderControls;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-prompt-input':LyraPromptInput;}}
|