@aceshooting/lyra-ui 14.0.0 → 14.1.1
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 +155 -19
- package/custom-elements.json +1 -1
- package/dist/components/agent-tools/commit-card/commit-card.class.d.ts +3 -1
- package/dist/components/agent-tools/commit-card/commit-card.class.js +2 -2
- package/dist/components/agent-tools/compare-panel/compare-panel.class.d.ts +2 -1
- package/dist/components/agent-tools/compare-panel/compare-panel.styles.js +1 -1
- package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +6 -2
- package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +4 -4
- package/dist/components/agent-tools/result-card/result-card.class.d.ts +1 -1
- package/dist/components/agent-tools/result-card/result-card.class.js +1 -1
- package/dist/components/agent-tools/result-card/result-field.class.d.ts +1 -1
- package/dist/components/agent-tools/result-card/result-field.class.js +1 -1
- package/dist/components/agent-tools/stack-trace/stack-trace.class.d.ts +1 -1
- package/dist/components/agent-tools/stack-trace/stack-trace.class.js +1 -1
- package/dist/components/agent-tools/terminal/terminal.class.d.ts +1 -1
- package/dist/components/agent-tools/terminal/terminal.class.js +2 -2
- package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +2 -2
- package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +1 -1
- package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +1 -1
- package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.js +2 -2
- package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +4 -4
- package/dist/components/agent-tools/trace-tree/span.d.ts +3 -1
- package/dist/components/agent-tools/trace-tree/span.js +1 -1
- package/dist/components/charts/chart/box-plot.class.d.ts +2 -0
- package/dist/components/charts/chart/box-plot.class.js +1 -1
- package/dist/components/charts/chart/chart.class.d.ts +6 -1
- package/dist/components/charts/chart/chart.class.js +1 -1
- package/dist/components/charts/chart/lite-chart.class.d.ts +20 -11
- package/dist/components/charts/chart/lite-chart.class.js +10 -8
- package/dist/components/conversation/chat-message/chat-message.class.d.ts +4 -3
- package/dist/components/conversation/code-block/code-block-core.class.d.ts +4 -3
- package/dist/components/conversation/code-block/code-block-core.class.js +1 -1
- package/dist/components/conversation/code-block/code-block-shared.d.ts +3 -3
- package/dist/components/conversation/code-block/code-block-shared.js +2 -2
- package/dist/components/conversation/code-block/code-block.class.d.ts +4 -3
- package/dist/components/conversation/code-block/code-block.class.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/conversation-item/conversation-item.class.js +1 -1
- package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
- package/dist/components/conversation/markdown/markdown-core.class.d.ts +1 -1
- package/dist/components/conversation/markdown/markdown.class.d.ts +1 -1
- package/dist/components/conversation/message-actions/message-actions.class.d.ts +2 -0
- package/dist/components/conversation/message-actions/message-actions.class.js +1 -1
- package/dist/components/conversation/message-feedback/message-feedback.class.d.ts +3 -1
- package/dist/components/conversation/message-feedback/message-feedback.class.js +2 -2
- package/dist/components/conversation/message-parts/message-parts.class.d.ts +3 -0
- package/dist/components/conversation/model-select/model-select.class.js +3 -3
- package/dist/components/conversation/thread-list/thread-list.class.js +1 -1
- package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts +2 -0
- package/dist/components/conversation/transcript-feed/transcript-feed.class.js +1 -1
- package/dist/components/conversation/typing-indicator/typing-indicator.class.d.ts +2 -1
- package/dist/components/conversation/typing-indicator/typing-indicator.class.js +1 -1
- package/dist/components/conversation/usage-badge/usage-badge-overlay-runtime.d.ts +3 -0
- package/dist/components/conversation/usage-badge/usage-badge-overlay-runtime.js +1 -0
- package/dist/components/conversation/usage-badge/usage-badge.class.d.ts +4 -2
- package/dist/components/conversation/usage-badge/usage-badge.class.js +1 -1
- package/dist/components/conversation/voice-picker/voice-picker.class.js +3 -3
- package/dist/components/conversation/widget-renderer/resolve.d.ts +4 -6
- package/dist/components/conversation/widget-renderer/resolve.js +1 -1
- package/dist/components/data/calendar/calendar.class.d.ts +6 -3
- package/dist/components/data/calendar/calendar.class.js +1 -1
- package/dist/components/data/calendar/calendar.styles.js +1 -1
- package/dist/components/data/condition-builder/condition-builder.class.d.ts +3 -1
- package/dist/components/data/condition-builder/condition-builder.class.js +15 -1
- package/dist/components/data/context-meter/context-meter.class.js +2 -2
- package/dist/components/data/data-grid/data-grid.class.d.ts +6 -2
- package/dist/components/data/data-grid/data-grid.class.js +1 -1
- package/dist/components/data/document-library/document-library.class.d.ts +5 -2
- package/dist/components/data/document-library/document-library.class.js +1 -1
- package/dist/components/data/file-tree/file-tree.class.d.ts +2 -1
- package/dist/components/data/file-tree/file-tree.class.js +1 -1
- package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +5 -2
- 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-types.d.ts +2 -1
- package/dist/components/data/funnel/funnel.class.d.ts +1 -0
- package/dist/components/data/funnel/funnel.class.js +1 -1
- package/dist/components/data/gauge/gauge.class.d.ts +4 -1
- package/dist/components/data/gauge/gauge.class.js +6 -6
- package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +5 -2
- package/dist/components/data/graph-query-builder/graph-query-builder.class.js +15 -1
- package/dist/components/data/heatmap/heatmap.class.d.ts +7 -4
- package/dist/components/data/heatmap/heatmap.class.js +1 -1
- package/dist/components/data/sparkline/sparkline.class.d.ts +2 -1
- package/dist/components/data/sparkline/sparkline.class.js +1 -1
- package/dist/components/data/stat/stat.class.d.ts +6 -2
- package/dist/components/data/stat/stat.class.js +1 -1
- package/dist/components/data/table/table.class.d.ts +5 -2
- package/dist/components/data/table/table.class.js +2 -2
- package/dist/components/data/timeline/timeline.class.d.ts +7 -2
- package/dist/components/data/timeline/timeline.class.js +1 -1
- package/dist/components/data/timeline/timeline.styles.js +1 -1
- package/dist/components/data/tree/tree-item.class.d.ts +3 -1
- package/dist/components/data/tree/tree-item.class.js +1 -1
- package/dist/components/data/tree/tree.class.d.ts +4 -1
- package/dist/components/data/tree/tree.class.js +1 -1
- package/dist/components/data/word-cloud/word-cloud-layout.d.ts +2 -1
- package/dist/components/data/word-cloud/word-cloud-layout.js +1 -1
- package/dist/components/data/word-cloud/word-cloud.class.d.ts +2 -1
- package/dist/components/forms/button/button.class.d.ts +5 -3
- package/dist/components/forms/button/button.class.js +1 -1
- package/dist/components/forms/checkbox/checkbox.class.d.ts +3 -0
- package/dist/components/forms/checkbox/checkbox.class.js +1 -1
- package/dist/components/forms/code-editor/code-editor.class.d.ts +11 -3
- package/dist/components/forms/code-editor/code-editor.class.js +6 -7
- package/dist/components/forms/code-editor/code-editor.styles.js +1 -1
- package/dist/components/forms/color-picker/color-picker.class.d.ts +5 -1
- package/dist/components/forms/color-picker/color-picker.class.js +4 -4
- package/dist/components/forms/combobox/combobox.class.d.ts +19 -8
- package/dist/components/forms/combobox/combobox.class.js +3 -3
- package/dist/components/forms/combobox/option.class.d.ts +4 -0
- package/dist/components/forms/combobox/option.class.js +2 -2
- package/dist/components/forms/date-picker/calendar-core.d.ts +1 -1
- package/dist/components/forms/date-picker/calendar-core.js +1 -1
- package/dist/components/forms/date-picker/date-input.class.d.ts +20 -10
- package/dist/components/forms/date-picker/date-input.class.js +4 -4
- package/dist/components/forms/date-picker/date-picker.class.d.ts +24 -13
- package/dist/components/forms/date-picker/date-picker.class.js +7 -7
- package/dist/components/forms/date-picker/date-picker.styles.js +1 -1
- package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +11 -3
- package/dist/components/forms/emoji-picker/emoji-picker.class.js +3 -3
- package/dist/components/forms/emoji-picker/emoji-types.d.ts +2 -2
- package/dist/components/forms/icon-button/icon-button.class.d.ts +4 -2
- package/dist/components/forms/icon-button/icon-button.class.js +1 -1
- package/dist/components/forms/input/input.class.d.ts +5 -1
- package/dist/components/forms/input/input.class.js +1 -1
- package/dist/components/forms/input/native-time-input.class.d.ts +3 -0
- package/dist/components/forms/input/number-input.class.d.ts +3 -0
- package/dist/components/forms/input/time-input.class.d.ts +3 -0
- package/dist/components/forms/input/time-input.class.js +1 -1
- package/dist/components/forms/locale-picker/locale-picker.class.d.ts +5 -1
- package/dist/components/forms/locale-picker/locale-picker.class.js +2 -2
- package/dist/components/forms/otp-input/otp-input.class.d.ts +5 -1
- package/dist/components/forms/otp-input/otp-input.class.js +1 -1
- package/dist/components/forms/phone-input/phone-input.class.d.ts +21 -8
- package/dist/components/forms/phone-input/phone-input.class.js +1 -1
- package/dist/components/forms/radio/radio-button.class.d.ts +4 -0
- package/dist/components/forms/radio/radio-group.class.d.ts +4 -1
- package/dist/components/forms/radio/radio-group.class.js +1 -1
- package/dist/components/forms/radio/radio.class.d.ts +6 -2
- package/dist/components/forms/radio/radio.class.js +1 -1
- package/dist/components/forms/rubric-form/rubric-form.class.d.ts +7 -1
- package/dist/components/forms/rubric-form/rubric-form.class.js +3 -3
- package/dist/components/forms/select/select.class.d.ts +8 -2
- package/dist/components/forms/select/select.class.js +2 -2
- package/dist/components/forms/slider/slider.class.d.ts +12 -6
- package/dist/components/forms/slider/slider.class.js +2 -2
- package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts +4 -0
- package/dist/components/forms/swatch-picker/swatch-picker.class.js +1 -1
- package/dist/components/forms/switch/switch.class.d.ts +5 -1
- package/dist/components/forms/switch/switch.class.js +1 -1
- package/dist/components/forms/textarea/textarea.class.d.ts +3 -0
- package/dist/components/forms/textarea/textarea.class.js +1 -1
- package/dist/components/forms/time-range/time-range.class.d.ts +3 -0
- package/dist/components/forms/time-range/time-range.class.js +1 -1
- package/dist/components/forms/token-input/token-input.class.d.ts +8 -2
- package/dist/components/forms/token-input/token-input.class.js +2 -2
- package/dist/components/forms/token-input/token-input.styles.js +1 -1
- package/dist/components/layout/app-rail/app-rail.class.d.ts +3 -1
- package/dist/components/layout/app-rail/app-rail.class.js +1 -1
- package/dist/components/layout/carousel/carousel.class.d.ts +3 -2
- package/dist/components/layout/carousel/carousel.class.js +1 -1
- package/dist/components/layout/command-palette/command-palette.class.js +1 -1
- package/dist/components/layout/dashboard-grid/dashboard-grid.class.d.ts +2 -0
- package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +1 -1
- package/dist/components/layout/details/details.class.d.ts +3 -3
- package/dist/components/layout/filter-bar/filter-bar.class.d.ts +3 -1
- package/dist/components/layout/filter-bar/filter-bar.class.js +1 -1
- package/dist/components/layout/menu/menu-label.class.d.ts +3 -3
- package/dist/components/layout/menu/menu.class.d.ts +4 -1
- package/dist/components/layout/menu/menu.class.js +1 -1
- package/dist/components/layout/multi-split/multi-split.class.d.ts +9 -3
- package/dist/components/layout/multi-split/multi-split.class.js +1 -1
- package/dist/components/layout/multi-split/multi-split.styles.js +1 -1
- package/dist/components/layout/reorder-list/reorder-item.class.d.ts +2 -1
- package/dist/components/layout/reorder-list/reorder-item.class.js +1 -1
- package/dist/components/layout/reorder-list/reorder-list.class.js +1 -1
- package/dist/components/layout/reorder-list/reorder-owner.js +1 -1
- package/dist/components/layout/split-panel/split-panel.class.d.ts +2 -1
- package/dist/components/layout/split-panel/split-panel.class.js +1 -1
- package/dist/components/layout/tab-group/tab-group.class.d.ts +3 -1
- package/dist/components/layout/tab-group/tab-group.class.js +1 -1
- package/dist/components/layout/widget/widget.class.d.ts +6 -2
- package/dist/components/layout/widget/widget.class.js +1 -1
- package/dist/components/media/animation/animation.class.d.ts +3 -2
- package/dist/components/media/animation/animation.class.js +1 -1
- package/dist/components/media/attachment-chip/attachment-chip.class.d.ts +4 -3
- package/dist/components/media/attachment-chip/attachment-chip.class.js +1 -1
- package/dist/components/media/av-player/av-metadata.d.ts +3 -2
- package/dist/components/media/av-player/av-player.class.d.ts +4 -3
- package/dist/components/media/av-player/av-player.class.js +3 -3
- package/dist/components/media/av-player/av-player.styles.js +1 -1
- package/dist/components/media/avatar/avatar.class.d.ts +2 -1
- package/dist/components/media/avatar/avatar.class.js +1 -1
- package/dist/components/media/file-input/file-input.class.d.ts +4 -2
- package/dist/components/media/file-input/file-input.class.js +1 -1
- package/dist/components/media/file-input/file-input.styles.js +1 -1
- package/dist/components/media/image-viewer/image-viewer.class.d.ts +2 -1
- package/dist/components/media/image-viewer/image-viewer.class.js +1 -1
- package/dist/components/media/image-viewer/image-viewer.styles.js +1 -1
- package/dist/components/media/map/map.class.d.ts +5 -3
- package/dist/components/media/map/map.class.js +1 -1
- package/dist/components/media/map/map.styles.js +1 -1
- package/dist/components/media/media-card/media-card.class.d.ts +1 -1
- package/dist/components/media/media-card/media-card.class.js +1 -1
- package/dist/components/media/pan-zoom/pan-zoom.class.js +1 -1
- package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +1 -1
- package/dist/components/media/sequence-playback/sequence-playback.styles.js +1 -1
- package/dist/components/media/video/video.class.d.ts +2 -1
- package/dist/components/media/video/video.styles.js +1 -1
- package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts +3 -2
- package/dist/components/media/zoomable-frame/zoomable-frame.class.js +2 -2
- package/dist/components/overlays/chip/chip-group.class.d.ts +2 -0
- package/dist/components/overlays/chip/chip-group.class.js +1 -1
- package/dist/components/overlays/dialog/dialog.class.d.ts +2 -0
- package/dist/components/overlays/dialog/dialog.class.js +1 -1
- package/dist/components/overlays/empty/empty.class.d.ts +2 -0
- package/dist/components/overlays/empty/empty.class.js +1 -1
- package/dist/components/overlays/kbd/kbd.class.d.ts +2 -0
- package/dist/components/overlays/kbd/kbd.class.js +1 -1
- package/dist/components/overlays/overlay/popover.class.d.ts +3 -1
- package/dist/components/overlays/overlay/popover.class.js +1 -1
- package/dist/components/overlays/overlay/tooltip.class.d.ts +3 -1
- package/dist/components/overlays/overlay/tooltip.class.js +1 -1
- package/dist/components/overlays/rating/rating.class.d.ts +2 -0
- package/dist/components/overlays/rating/rating.class.js +1 -1
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +2 -2
- package/dist/components/retrieval/entity-card/entity-card.class.d.ts +5 -2
- package/dist/components/retrieval/entity-card/entity-card.class.js +1 -1
- package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts +4 -2
- package/dist/components/retrieval/entity-chip/entity-chip.class.js +1 -1
- package/dist/components/retrieval/graph/graph-canvas.js +1 -1
- package/dist/components/retrieval/graph/graph.class.d.ts +9 -7
- package/dist/components/retrieval/graph/graph.class.js +1 -1
- package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +1 -3
- package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.d.ts +2 -0
- package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js +1 -1
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +3 -2
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +7 -3
- package/dist/components/retrieval/provenance-panel/provenance-panel.class.d.ts +2 -1
- package/dist/components/retrieval/provenance-panel/provenance-panel.class.js +1 -1
- package/dist/components/retrieval/source-picker/source-picker.class.d.ts +2 -1
- package/dist/components/retrieval/source-picker/source-picker.class.js +1 -1
- package/dist/components/utility/format/format-number.class.d.ts +3 -1
- package/dist/components/utility/format/format-options.js +1 -1
- package/dist/components/utility/json-viewer/json-viewer.class.d.ts +3 -2
- package/dist/components/utility/json-viewer/json-viewer.class.js +2 -2
- package/dist/components/utility/known-date/known-date.class.d.ts +9 -5
- package/dist/components/utility/known-date/known-date.class.js +2 -2
- package/dist/components/utility/known-date/known-date.styles.js +1 -1
- package/dist/components/utility/mention-popover/mention-popover.class.d.ts +3 -1
- package/dist/components/utility/mention-popover/mention-popover.class.js +1 -1
- package/dist/components/utility/poll-status/poll-status.class.d.ts +3 -0
- package/dist/components/utility/poll-status/poll-status.styles.js +1 -1
- package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts +1 -0
- package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js +1 -1
- package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts +2 -1
- package/dist/components/viewers/dataset-viewer/dataset-viewer.styles.js +1 -1
- package/dist/components/viewers/document-preview/document-preview.class.d.ts +4 -2
- package/dist/components/viewers/document-preview/document-preview.class.js +1 -1
- package/dist/components/viewers/document-preview/document-preview.styles.js +1 -1
- package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +3 -2
- package/dist/components/viewers/document-viewer/document-viewer.class.js +2 -2
- package/dist/components/viewers/document-viewer/registry-ownership.d.ts +1 -0
- package/dist/components/viewers/document-viewer/registry-ownership.js +1 -0
- package/dist/components/viewers/document-viewer/registry.js +1 -1
- package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +7 -1
- package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
- package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +2 -1
- package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -2
- package/dist/components/viewers/include/include-resource.js +1 -1
- package/dist/components/viewers/include/include.class.d.ts +3 -1
- package/dist/components/viewers/notebook-viewer/notebook-viewer.class.d.ts +4 -2
- package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +4 -4
- package/dist/components/viewers/notebook-viewer/notebook-viewer.styles.js +1 -1
- package/dist/components/viewers/passive-markup.js +1 -1
- package/dist/components/viewers/svg-viewer/svg-viewer.class.d.ts +2 -1
- package/dist/components/viewers/svg-viewer/svg-viewer.styles.js +1 -1
- package/dist/components/viewers/xml-viewer/xml-viewer.class.d.ts +2 -1
- package/dist/components/viewers/xml-viewer/xml-viewer.class.js +1 -1
- package/dist/components/viewers/xml-viewer/xml-viewer.js +1 -1
- package/dist/custom-elements-jsx.d.ts +1 -1
- package/dist/internal/aria-reflection.js +1 -1
- package/dist/internal/catalog-picker.js +1 -1
- package/dist/internal/default-strings.generated.d.ts +1 -1
- package/dist/internal/default-strings.generated.js +1 -1
- package/dist/internal/dev-mode-attribute-warning.d.ts +3 -0
- package/dist/internal/dev-mode-attribute-warning.js +1 -1
- package/dist/internal/form-associated.js +1 -1
- package/dist/internal/localization-types.d.ts +1 -1
- package/dist/internal/localization.js +1 -1
- package/dist/internal/lyra-element.js +1 -1
- package/dist/internal/native-control-description.d.ts +7 -0
- package/dist/internal/native-control-description.js +1 -0
- package/dist/internal/option-selection.js +1 -1
- package/dist/internal/overlay-order.d.ts +6 -0
- package/dist/internal/overlay-order.js +1 -0
- package/dist/internal/overlay-stack.d.ts +1 -1
- package/dist/internal/overlay-stack.js +1 -1
- package/dist/internal/package-metadata.d.ts +1 -1
- package/dist/internal/package-metadata.js +1 -1
- package/dist/internal/positioner.d.ts +5 -4
- package/dist/internal/reactive-property-writes.d.ts +1 -0
- package/dist/internal/reactive-property-writes.js +1 -0
- package/dist/internal/svg-title.d.ts +3 -0
- package/dist/internal/svg-title.js +1 -0
- package/dist/svelte.d.ts +1 -1
- package/dist/translations/ar.js +1 -1
- package/dist/translations/de.js +1 -1
- package/dist/translations/es.js +1 -1
- package/dist/translations/fa.js +1 -1
- package/dist/translations/fr.js +1 -1
- package/dist/translations/he.js +1 -1
- package/dist/translations/ja.js +1 -1
- package/dist/translations/pt-BR.js +1 -1
- package/dist/translations/ru.js +1 -1
- package/dist/translations/zh-CN.js +1 -1
- package/dist/vue.d.ts +1 -1
- package/llms/components/lr-accordion-item.md +4 -0
- package/llms/components/lr-accordion.md +4 -0
- package/llms/components/lr-agent-trace.md +3 -0
- package/llms/components/lr-animation.md +4 -0
- package/llms/components/lr-app-rail-item.md +4 -2
- package/llms/components/lr-app-rail.md +4 -2
- package/llms/components/lr-attachment-chip.md +6 -0
- package/llms/components/lr-av-player.md +14 -0
- package/llms/components/lr-avatar.md +4 -0
- package/llms/components/lr-box-plot.md +6 -0
- package/llms/components/lr-button.md +11 -3
- package/llms/components/lr-calendar-viewer.md +4 -0
- package/llms/components/lr-calendar.md +5 -0
- package/llms/components/lr-carousel.md +5 -0
- package/llms/components/lr-chart.md +13 -4
- package/llms/components/lr-chat-message.md +4 -0
- package/llms/components/lr-checkbox.md +3 -0
- package/llms/components/lr-chip-group.md +3 -0
- package/llms/components/lr-chip.md +3 -0
- package/llms/components/lr-code-block-core.md +16 -4
- package/llms/components/lr-code-block.md +7 -0
- package/llms/components/lr-code-editor.md +18 -5
- package/llms/components/lr-color-picker.md +9 -0
- package/llms/components/lr-combobox.md +35 -4
- package/llms/components/lr-command-palette.md +4 -0
- package/llms/components/lr-commit-card.md +3 -0
- package/llms/components/lr-compare-panel.md +7 -0
- package/llms/components/lr-condition-builder.md +5 -0
- package/llms/components/lr-conversation-item.md +3 -0
- package/llms/components/lr-copy-button.md +6 -0
- package/llms/components/lr-dashboard-grid.md +5 -0
- package/llms/components/lr-data-grid.md +11 -1
- package/llms/components/lr-dataset-viewer.md +3 -2
- package/llms/components/lr-date-input.md +46 -6
- package/llms/components/lr-date-picker.md +46 -6
- package/llms/components/lr-details.md +4 -0
- package/llms/components/lr-dialog.md +4 -0
- package/llms/components/lr-document-library.md +4 -0
- package/llms/components/lr-document-preview.md +7 -1
- package/llms/components/lr-document-viewer.md +9 -3
- package/llms/components/lr-dropdown-item.md +4 -0
- package/llms/components/lr-dropdown.md +3 -0
- package/llms/components/lr-ebook-viewer.md +4 -0
- package/llms/components/lr-email-viewer.md +5 -0
- package/llms/components/lr-emoji-picker.md +17 -3
- package/llms/components/lr-empty.md +3 -0
- package/llms/components/lr-entity-card.md +3 -0
- package/llms/components/lr-entity-chip.md +4 -0
- package/llms/components/lr-file-input.md +7 -0
- package/llms/components/lr-file-tree.md +5 -1
- package/llms/components/lr-filter-bar.md +5 -0
- package/llms/components/lr-flow-canvas.md +8 -1
- package/llms/components/lr-flow-node.md +2 -1
- package/llms/components/lr-flow-run-status.md +1 -1
- package/llms/components/lr-format-number.md +4 -0
- package/llms/components/lr-funnel.md +4 -0
- package/llms/components/lr-gauge.md +4 -0
- package/llms/components/lr-generation-metrics.md +5 -0
- package/llms/components/lr-graph-query-builder.md +6 -0
- package/llms/components/lr-graph.md +8 -2
- package/llms/components/lr-heatmap.md +13 -0
- package/llms/components/lr-icon-button.md +7 -0
- package/llms/components/lr-image-viewer.md +9 -0
- package/llms/components/lr-include.md +5 -0
- package/llms/components/lr-ingestion-queue.md +4 -0
- package/llms/components/lr-input.md +22 -8
- package/llms/components/lr-json-viewer.md +4 -0
- package/llms/components/lr-kbd.md +3 -0
- package/llms/components/lr-knowledge-graph-explorer.md +7 -0
- package/llms/components/lr-known-date.md +7 -0
- package/llms/components/lr-lite-chart.md +21 -4
- package/llms/components/lr-live-region.md +3 -0
- package/llms/components/lr-locale-picker.md +6 -0
- package/llms/components/lr-map.md +8 -0
- package/llms/components/lr-markdown-core.md +4 -0
- package/llms/components/lr-markdown.md +8 -4
- package/llms/components/lr-media-card.md +5 -2
- package/llms/components/lr-mention-popover.md +5 -0
- package/llms/components/lr-menu-item.md +4 -0
- package/llms/components/lr-menu-label.md +4 -3
- package/llms/components/lr-menu.md +4 -0
- package/llms/components/lr-message-actions.md +3 -0
- package/llms/components/lr-message-feedback.md +4 -0
- package/llms/components/lr-message-parts.md +3 -2
- package/llms/components/lr-model-select.md +8 -0
- package/llms/components/lr-multi-split.md +15 -6
- package/llms/components/lr-native-time-input.md +10 -0
- package/llms/components/lr-node-palette.md +3 -0
- package/llms/components/lr-notebook-viewer.md +4 -1
- package/llms/components/lr-number-input.md +12 -1
- package/llms/components/lr-option.md +35 -4
- package/llms/components/lr-otp-input.md +10 -0
- package/llms/components/lr-pan-zoom.md +1 -2
- package/llms/components/lr-phone-input.md +20 -5
- package/llms/components/lr-poll-status.md +4 -0
- package/llms/components/lr-popover.md +3 -0
- package/llms/components/lr-popup.md +3 -2
- package/llms/components/lr-prompt-studio.md +7 -0
- package/llms/components/lr-provenance-panel.md +3 -0
- package/llms/components/lr-push-to-talk.md +3 -0
- package/llms/components/lr-radio-button.md +13 -4
- package/llms/components/lr-radio-group.md +5 -0
- package/llms/components/lr-radio.md +9 -0
- package/llms/components/lr-rating.md +3 -0
- package/llms/components/lr-reorder-item.md +6 -0
- package/llms/components/lr-reorder-list.md +6 -0
- package/llms/components/lr-result-card.md +3 -0
- package/llms/components/lr-result-field.md +3 -0
- package/llms/components/lr-rubric-form.md +12 -0
- package/llms/components/lr-select.md +9 -0
- package/llms/components/lr-sequence-playback.md +4 -0
- package/llms/components/lr-slider.md +16 -4
- package/llms/components/lr-source-picker.md +4 -0
- package/llms/components/lr-span-waterfall.md +3 -0
- package/llms/components/lr-sparkline.md +4 -0
- package/llms/components/lr-split-panel.md +4 -0
- package/llms/components/lr-stack-trace.md +3 -0
- package/llms/components/lr-stat.md +10 -0
- package/llms/components/lr-subagent-panel.md +3 -2
- package/llms/components/lr-svg-viewer.md +3 -0
- package/llms/components/lr-swatch-picker.md +4 -0
- package/llms/components/lr-switch.md +6 -0
- package/llms/components/lr-tab-group.md +4 -0
- package/llms/components/lr-table.md +10 -2
- package/llms/components/lr-terminal.md +3 -0
- package/llms/components/lr-textarea.md +9 -0
- package/llms/components/lr-thread-list.md +6 -3
- package/llms/components/lr-time-input.md +3 -0
- package/llms/components/lr-time-range.md +5 -0
- package/llms/components/lr-timeline-item.md +6 -0
- package/llms/components/lr-timeline.md +6 -0
- package/llms/components/lr-token-input.md +14 -0
- package/llms/components/lr-tool-call-chip.md +5 -3
- package/llms/components/lr-tool-param-form.md +4 -0
- package/llms/components/lr-tool-result-dialog.md +4 -0
- package/llms/components/lr-tool-select-dialog.md +4 -0
- package/llms/components/lr-tooltip.md +6 -0
- package/llms/components/lr-trace-tree.md +3 -0
- package/llms/components/lr-transcript-feed.md +3 -0
- package/llms/components/lr-tree-item.md +12 -5
- package/llms/components/lr-tree.md +12 -5
- package/llms/components/lr-typing-indicator.md +3 -0
- package/llms/components/lr-usage-badge.md +4 -0
- package/llms/components/lr-video.md +8 -2
- package/llms/components/lr-virtual-list.md +5 -3
- package/llms/components/lr-voice-picker.md +8 -0
- package/llms/components/lr-widget-renderer.md +9 -0
- package/llms/components/lr-widget.md +4 -2
- package/llms/components/lr-word-cloud.md +4 -0
- package/llms/components/lr-xml-viewer.md +9 -2
- package/llms/components/lr-zoomable-frame.md +6 -3
- package/llms-full.txt +4080 -2711
- package/package.json +4 -4
- package/vscode-css-data.json +1 -1
- package/vscode-html-data.json +1 -1
- package/web-types.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,svg,nothing}from"lit";import{property,state,query}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{specialistTokens}from"../../../internal/specialist-tokens.styles.js";import{hostAriaLabel,nextId,srOnly}from"../../../internal/a11y.js";import{getListFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{finiteAdd,finiteCount,finiteRange}from"../../../internal/numbers.js";import{escapeCsvField}from"../../utility/export-button/csv.js";import"../../utility/live-region/live-region.class.js";import{styles}from"./lite-chart.styles.js";import{forcedColorEncoding,forcedColorsActive}from"./chart-forced-colors.js";import{literalSetConverter,trueDefaultBooleanFromAttributeConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{sanitizeCssColor,sanitizeCssLength}from"../../../internal/safe-css.js";import{activeElementIn}from"../../../internal/active-element.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{MAX_RENDERED_CHART_RECORDS,sampleChartTableIndexes}from"./chart-table-sampling.js";import{chartChromeLegendPlacement,normalizeChartChromeLegendPosition}from"./chart-chrome.js";import{LYRA_DEFAULT_chart,LYRA_DEFAULT_chartCategory,LYRA_DEFAULT_chartData,LYRA_DEFAULT_chartDataSampled,LYRA_DEFAULT_chartSeriesLabel,LYRA_DEFAULT_chartTotal,LYRA_DEFAULT_liteChartBarLabel,LYRA_DEFAULT_liteChartCustomMarkSummary,LYRA_DEFAULT_liteChartMarkSummary}from"../../../internal/default-strings.generated.js";function isLiteChartSeries(value){try{return typeof value=="object"&&value!==null&&!Array.isArray(value)&&Array.isArray(value.data)}catch{return!1}}function normalizeLiteChartSeries(value){try{return Object.freeze(Array.isArray(value)?value.filter(isLiteChartSeries):[])}catch{return Object.freeze([])}}function normalizeLiteChartType(value){return value==="line"||value==="bar"?value:"bar"}const LITE_CHART_LAYOUT=literalSetConverter(["fit","scroll"],"fit"),autoNumberConverter={fromAttribute:value=>{if(value===null)return;const trimmed=value.trim();return trimmed.toLowerCase()==="auto"?"auto":Number(trimmed)}},DEFAULT_PALETTE=["var(--lr-chart-color-1, var(--lr-color-chart-1))","var(--lr-chart-color-2, var(--lr-color-chart-2))","var(--lr-chart-color-3, var(--lr-color-chart-3))","var(--lr-chart-color-4, var(--lr-color-chart-4))","var(--lr-chart-color-5, var(--lr-color-chart-5))","var(--lr-chart-color-6, var(--lr-color-chart-6))","var(--lr-chart-color-7, var(--lr-color-chart-7))","var(--lr-chart-color-8, var(--lr-color-chart-8))"],PAD_LEFT=36,PAD_RIGHT=8,PAD_TOP=8,PAD_BOTTOM=30,CATEGORY_LABEL_OFFSET=24,AXIS_TITLE_SPACE=14,TICK_COUNT=4,BAR_GROUP_GAP=.2,BAR_GAP=.08,BAR_CORNER_RADIUS=4,APPROX_LABEL_CHARACTER_WIDTH=7,AUTO_CATEGORY_LABEL_INSET=10,VALUE_AXIS_TICK_OFFSET=6,AUTO_VALUE_AXIS_SAFETY_INSET=8,MAX_AUTO_VALUE_AXIS_GUTTER=240,MAX_AUTO_VALUE_AXIS_GUTTER_FRACTION=.4,MAX_SCROLL_CONTENT_WIDTH=1e6;function niceStep(span,count){const rough=span/Math.max(1,count),magnitude=10**Math.floor(Math.log10(rough)),residual=rough/magnitude;return(residual<1.5?1:residual<3?2:residual<7?5:10)*magnitude}function logDomainFraction(value,lo,hi){const top=Math.max(hi,0);if(!Number.isFinite(top)||top<=0)return domainFraction(value,lo,hi);const bottom=lo>0?lo:top/10;if(!Number.isFinite(bottom)||bottom<=0||bottom>=top)return domainFraction(value,lo,hi);if(!Number.isFinite(value)||value<=bottom)return 0;if(value>=top)return 1;const fraction=(Math.log10(value)-Math.log10(bottom))/(Math.log10(top)-Math.log10(bottom));return Number.isFinite(fraction)?Math.min(1,Math.max(0,fraction)):0}function domainFraction(value,lo,hi){const span=hi-lo;if(Number.isFinite(span)&&span>0)return Math.min(1,Math.max(0,(value-lo)/span));const scale=Math.max(Math.abs(value),Math.abs(lo),Math.abs(hi),1),scaledSpan=hi/scale-lo/scale;if(!Number.isFinite(scaledSpan)||scaledSpan<=0)return 0;const fraction=(value/scale-lo/scale)/scaledSpan;return Number.isFinite(fraction)?Math.min(1,Math.max(0,fraction)):0}function safeDomainTicks(lo,hi,count){return Array.from({length:Math.max(1,count)+1},(_,index)=>{if(index===0)return lo;if(index===count)return hi;const ratio=index/count;return lo*(1-ratio)+hi*ratio}).filter(Number.isFinite)}function niceDomain(dataLo,dataHi,beginAtZero,count){let lo=beginAtZero?Math.min(0,dataLo):dataLo,hi=beginAtZero?Math.max(0,dataHi):dataHi;lo===hi&&(Math.abs(lo)>Number.MAX_VALUE/2?(lo=lo>0?lo/2:lo,hi=hi<0?hi/2:hi):(lo-=1,hi+=1));const span=hi-lo;if(!Number.isFinite(span))return{lo,hi,ticks:safeDomainTicks(lo,hi,count)};const step=niceStep(span,count);if(!Number.isFinite(step)||step<=0)return{lo,hi,ticks:safeDomainTicks(lo,hi,count)};const roundedLo=Math.floor(lo/step)*step,roundedHi=Math.ceil(hi/step)*step;Number.isFinite(roundedLo)&&(lo=roundedLo),Number.isFinite(roundedHi)&&(hi=roundedHi);const slots=Math.floor((hi-lo)/step);if(!Number.isFinite(slots)||slots<0||slots>100)return{lo,hi,ticks:safeDomainTicks(lo,hi,count)};const ticks=[];for(let index=0;index<=slots;index++){const value=lo+index*step;Number.isFinite(value)&&ticks.push(value)}return ticks.at(-1)!==hi&&ticks.push(hi),{lo,hi,ticks}}class LyraLiteChart extends LyraElement{constructor(){super(...arguments),this.type="bar",this.labels=[],this._datasets=Object.freeze([]),this.legend=!1,this.legendPosition="bottom",this.height="280px",this.xLabel="",this.yLabel="",this.beginAtZero=!0,this.stacked=!1,this.tableTotals=!1,this.showDataTable=!1,this.dataTableToggle=!1,this.dataTableExpandedOverride=null,this.dataTableId=nextId("lite-chart-data-table"),this._layout="fit",this.barWidth=32,this.roundedBars=!1,this.skipZero=!1,this.scale="linear",this.withoutValueAxis=!1,this.selectedIndices=[],this.label=null,this.description=null,this.forcedColorPatternId=nextId("lite-chart-pattern"),this.descriptionId=nextId("lite-chart-description"),this.plotWidth=0,this.plotHeight=0,this.fitMeasurementAvailable=!1,this.activeMarkIndex=0,this.resizeObserverGeneration=0,this.refocusMarkAfterUpdate=!1,this.refocusChartAfterUpdate=!1,this.lastDataTruncationAnnouncement="",this.isMounting=!0,this.onForcedColorsChange=()=>{!this.isConnected||this.ownerDocument.defaultView!==this.forcedColorsWindow||this.requestUpdate()}}static{this.defaultStrings={...super.defaultStrings,chart:LYRA_DEFAULT_chart,chartCategory:LYRA_DEFAULT_chartCategory,chartData:LYRA_DEFAULT_chartData,chartDataSampled:LYRA_DEFAULT_chartDataSampled,chartSeriesLabel:LYRA_DEFAULT_chartSeriesLabel,chartTotal:LYRA_DEFAULT_chartTotal,liteChartBarLabel:LYRA_DEFAULT_liteChartBarLabel,liteChartCustomMarkSummary:LYRA_DEFAULT_liteChartCustomMarkSummary,liteChartMarkSummary:LYRA_DEFAULT_liteChartMarkSummary}}static{this.ownedCollectionProperties=Object.freeze(["labels","datasets","selectedIndices"])}static{this.styles=[LyraElement.styles,specialistTokens,styles,srOnly]}get datasets(){return this._datasets}set datasets(value){const previous=this._datasets;this._datasets=normalizeLiteChartSeries(value),this.requestUpdate("datasets",previous)}get dataTableVisible(){return this.dataTableToggle?this.dataTableExpandedOverride??this.showDataTable:this.showDataTable}toggleDataTable(){this.dataTableExpandedOverride=!this.dataTableVisible}get layout(){return this._layout}set layout(next){const normalized=LITE_CHART_LAYOUT.normalizeReflected(this,"layout",next),old=this._layout;old!==normalized&&(this._layout=normalized,this.requestUpdate("layout",old))}appendData(label,values,maxPoints=0){const limit=Math.max(0,finiteCount(maxPoints,0));let domainLength=this.labels.length;for(const series of this.datasets)domainLength=Math.max(domainLength,series.data.length);const labels=[...this.labels,...Array.from({length:Math.max(0,domainLength-this.labels.length)},()=>""),label],datasets=this.datasets.map((series,index)=>({...series,data:[...series.data,...Array.from({length:Math.max(0,domainLength-series.data.length)},()=>null),values[index]??null]}));this.labels=limit>0?labels.slice(-limit):labels,this.datasets=limit>0?datasets.map(series=>({...series,data:series.data.slice(-limit)})):datasets}exportData(format){if(format==="svg"){const XMLSerializerCtor=this.ownerDocument.defaultView?.XMLSerializer;return!this.svgEl||typeof XMLSerializerCtor!="function"?"":new XMLSerializerCtor().serializeToString(this.svgEl)}const header=["label",...this.datasets.map(series=>series.label)].map(escapeCsvField).join(","),rows=Array.from({length:this.recordCount()},(_,index)=>{const label=this.labels[index]??"";return[label,...this.datasets.map((series,datasetIndex)=>{const value=series.data[index];return typeof value=="number"&&Number.isFinite(value)?this.formatter?.({value,surface:"export",datasetIndex,index,label,seriesLabel:series.label})??value:""})].map(escapeCsvField).join(",")});return[header,...rows].join(`\r
|
|
2
|
-
`)}connectedCallback(){super.connectedCallback(),this.syncAnnouncementSink(),this.armResizeObserver(),this.armForcedColorsWatcher()}armResizeObserver(){const target=this.svgEl,ownerDocument=this.ownerDocument;if(!this.isConnected||!target||this.resizeObserver&&this.resizeObserverDocument===ownerDocument&&this.resizeObserverTarget===target)return;this.resetResizeObserver();const ResizeObserverCtor=ownerDocument.defaultView?.ResizeObserver;if(!ResizeObserverCtor)return;const generation=this.resizeObserverGeneration,observer=new ResizeObserverCtor(entries=>{if(this.resizeObserver!==observer||this.resizeObserverGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||this.resizeObserverTarget!==target)return;const box=
|
|
1
|
+
var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{nativeSvgTitle}from"../../../internal/svg-title.js";import{html,svg,nothing}from"lit";import{property,state,query}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{LyraElement}from"../../../internal/lyra-element.js";import{specialistTokens}from"../../../internal/specialist-tokens.styles.js";import{hostAriaLabel,nextId,srOnly}from"../../../internal/a11y.js";import{getListFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{finiteAdd,finiteCount,finiteRange}from"../../../internal/numbers.js";import{escapeCsvField}from"../../utility/export-button/csv.js";import"../../utility/live-region/live-region.class.js";import{styles}from"./lite-chart.styles.js";import{forcedColorEncoding,forcedColorsActive}from"./chart-forced-colors.js";import{literalSetConverter,trueDefaultBooleanFromAttributeConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{sanitizeCssColor,sanitizeCssLength}from"../../../internal/safe-css.js";import{activeElementIn}from"../../../internal/active-element.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{MAX_RENDERED_CHART_RECORDS,sampleChartTableIndexes}from"./chart-table-sampling.js";import{chartChromeLegendPlacement,normalizeChartChromeLegendPosition}from"./chart-chrome.js";import{LYRA_DEFAULT_chart,LYRA_DEFAULT_chartCategory,LYRA_DEFAULT_chartData,LYRA_DEFAULT_chartDataSampled,LYRA_DEFAULT_chartSeriesLabel,LYRA_DEFAULT_chartTotal,LYRA_DEFAULT_liteChartBarLabel,LYRA_DEFAULT_liteChartCustomMarkSummary,LYRA_DEFAULT_liteChartMarkSummary}from"../../../internal/default-strings.generated.js";function isLiteChartSeries(value){try{return typeof value=="object"&&value!==null&&!Array.isArray(value)&&Array.isArray(value.data)}catch{return!1}}function normalizeLiteChartSeries(value){try{return Object.freeze(Array.isArray(value)?value.filter(isLiteChartSeries):[])}catch{return Object.freeze([])}}function normalizeLiteChartType(value){return value==="line"||value==="bar"?value:"bar"}const LITE_CHART_LAYOUT=literalSetConverter(["fit","scroll"],"fit"),autoNumberConverter={fromAttribute:value=>{if(value===null)return;const trimmed=value.trim();return trimmed.toLowerCase()==="auto"?"auto":Number(trimmed)}},DEFAULT_PALETTE=["var(--lr-chart-color-1, var(--lr-color-chart-1))","var(--lr-chart-color-2, var(--lr-color-chart-2))","var(--lr-chart-color-3, var(--lr-color-chart-3))","var(--lr-chart-color-4, var(--lr-color-chart-4))","var(--lr-chart-color-5, var(--lr-color-chart-5))","var(--lr-chart-color-6, var(--lr-color-chart-6))","var(--lr-chart-color-7, var(--lr-color-chart-7))","var(--lr-chart-color-8, var(--lr-color-chart-8))"],PAD_LEFT=36,PAD_RIGHT=8,PAD_TOP=8,PAD_BOTTOM=30,CATEGORY_LABEL_OFFSET=24,AXIS_TITLE_SPACE=14,TICK_COUNT=4,BAR_GROUP_GAP=.2,BAR_GAP=.08,BAR_CORNER_RADIUS=4,APPROX_LABEL_CHARACTER_WIDTH=7,AUTO_CATEGORY_LABEL_INSET=10,VALUE_AXIS_TICK_OFFSET=6,AUTO_VALUE_AXIS_SAFETY_INSET=8,MAX_AUTO_VALUE_AXIS_GUTTER=240,MAX_AUTO_VALUE_AXIS_GUTTER_FRACTION=.4,MAX_SCROLL_CONTENT_WIDTH=1e6;function niceStep(span,count){const rough=span/Math.max(1,count),magnitude=10**Math.floor(Math.log10(rough)),residual=rough/magnitude;return(residual<1.5?1:residual<3?2:residual<7?5:10)*magnitude}function logDomainFraction(value,lo,hi){const top=Math.max(hi,0);if(!Number.isFinite(top)||top<=0)return domainFraction(value,lo,hi);const bottom=lo>0?lo:top/10;if(!Number.isFinite(bottom)||bottom<=0||bottom>=top)return domainFraction(value,lo,hi);if(!Number.isFinite(value)||value<=bottom)return 0;if(value>=top)return 1;const fraction=(Math.log10(value)-Math.log10(bottom))/(Math.log10(top)-Math.log10(bottom));return Number.isFinite(fraction)?Math.min(1,Math.max(0,fraction)):0}function domainFraction(value,lo,hi){const span=hi-lo;if(Number.isFinite(span)&&span>0)return Math.min(1,Math.max(0,(value-lo)/span));const scale=Math.max(Math.abs(value),Math.abs(lo),Math.abs(hi),1),scaledSpan=hi/scale-lo/scale;if(!Number.isFinite(scaledSpan)||scaledSpan<=0)return 0;const fraction=(value/scale-lo/scale)/scaledSpan;return Number.isFinite(fraction)?Math.min(1,Math.max(0,fraction)):0}function safeDomainTicks(lo,hi,count){return Array.from({length:Math.max(1,count)+1},(_,index)=>{if(index===0)return lo;if(index===count)return hi;const ratio=index/count;return lo*(1-ratio)+hi*ratio}).filter(Number.isFinite)}function logarithmicTicks(lo,hi,count){if(!(lo>0&&hi>lo)||!Number.isFinite(lo)||!Number.isFinite(hi))return;const start=Math.log10(lo),end=Math.log10(hi),span=end-start;if(!(span>0))return;const decades=span>=1,step=decades?Math.ceil(span/count):niceStep(hi-lo,count);if(!Number.isFinite(step)||step<=0)return[...new Set(safeDomainTicks(lo,hi,count))];const ticks=[lo],minimumGap=decades?step/2:span/(count*2),first=Math.ceil((decades?start:lo)/step);for(let index=0;index<=count+1;index++){const value=decades?10**((first+index)*step):(first+index)*step;if(!Number.isFinite(value)||value>=hi)break;if(value<=ticks.at(-1))continue;const logarithm=Math.log10(value);logarithm-Math.log10(ticks.at(-1))>=minimumGap&&end-logarithm>=minimumGap&&ticks.push(value)}return ticks.push(hi),ticks}function niceDomain(dataLo,dataHi,beginAtZero,count){let lo=beginAtZero?Math.min(0,dataLo):dataLo,hi=beginAtZero?Math.max(0,dataHi):dataHi;lo===hi&&(Math.abs(lo)>Number.MAX_VALUE/2?(lo=lo>0?lo/2:lo,hi=hi<0?hi/2:hi):(lo-=1,hi+=1));const span=hi-lo;if(!Number.isFinite(span))return{lo,hi,ticks:safeDomainTicks(lo,hi,count)};const step=niceStep(span,count);if(!Number.isFinite(step)||step<=0)return{lo,hi,ticks:safeDomainTicks(lo,hi,count)};const roundedLo=Math.floor(lo/step)*step,roundedHi=Math.ceil(hi/step)*step;Number.isFinite(roundedLo)&&(lo=roundedLo),Number.isFinite(roundedHi)&&(hi=roundedHi);const slots=Math.floor((hi-lo)/step);if(!Number.isFinite(slots)||slots<0||slots>100)return{lo,hi,ticks:safeDomainTicks(lo,hi,count)};const ticks=[];for(let index=0;index<=slots;index++){const value=lo+index*step;Number.isFinite(value)&&ticks.push(value)}return ticks.at(-1)!==hi&&ticks.push(hi),{lo,hi,ticks}}class LyraLiteChart extends LyraElement{constructor(){super(...arguments),this.type="bar",this.labels=[],this._datasets=Object.freeze([]),this.legend=!1,this.legendPosition="bottom",this.height="280px",this.xLabel="",this.yLabel="",this.beginAtZero=!0,this.stacked=!1,this.tableTotals=!1,this.showDataTable=!1,this.dataTableToggle=!1,this.dataTableExpandedOverride=null,this.dataTableId=nextId("lite-chart-data-table"),this._layout="fit",this.barWidth=32,this.roundedBars=!1,this.skipZero=!1,this.scale="linear",this.withoutValueAxis=!1,this.selectedIndices=[],this.label=null,this.description=null,this.forcedColorPatternId=nextId("lite-chart-pattern"),this.descriptionId=nextId("lite-chart-description"),this.plotWidth=0,this.plotHeight=0,this.fitMeasurementAvailable=!1,this.activeMarkIndex=0,this.resizeObserverGeneration=0,this.axisTitleTargets=new Set,this.axisTitleFits=new WeakMap,this.refocusMarkAfterUpdate=!1,this.refocusChartAfterUpdate=!1,this.lastDataTruncationAnnouncement="",this.isMounting=!0,this.onForcedColorsChange=()=>{!this.isConnected||this.ownerDocument.defaultView!==this.forcedColorsWindow||this.requestUpdate()}}static{this.defaultStrings={...super.defaultStrings,chart:LYRA_DEFAULT_chart,chartCategory:LYRA_DEFAULT_chartCategory,chartData:LYRA_DEFAULT_chartData,chartDataSampled:LYRA_DEFAULT_chartDataSampled,chartSeriesLabel:LYRA_DEFAULT_chartSeriesLabel,chartTotal:LYRA_DEFAULT_chartTotal,liteChartBarLabel:LYRA_DEFAULT_liteChartBarLabel,liteChartCustomMarkSummary:LYRA_DEFAULT_liteChartCustomMarkSummary,liteChartMarkSummary:LYRA_DEFAULT_liteChartMarkSummary}}static{this.ownedCollectionProperties=Object.freeze(["labels","datasets","selectedIndices"])}static{this.styles=[LyraElement.styles,specialistTokens,styles,srOnly]}get datasets(){return this._datasets}set datasets(value){const previous=this._datasets;this._datasets=normalizeLiteChartSeries(value),this.requestUpdate("datasets",previous)}get dataTableVisible(){return this.dataTableToggle?this.dataTableExpandedOverride??this.showDataTable:this.showDataTable}toggleDataTable(){this.dataTableExpandedOverride=!this.dataTableVisible}get layout(){return this._layout}set layout(next){const normalized=LITE_CHART_LAYOUT.normalizeReflected(this,"layout",next),old=this._layout;old!==normalized&&(this._layout=normalized,this.requestUpdate("layout",old))}appendData(label,values,maxPoints=0){const limit=Math.max(0,finiteCount(maxPoints,0));let domainLength=this.labels.length;for(const series of this.datasets)domainLength=Math.max(domainLength,series.data.length);const labels=[...this.labels,...Array.from({length:Math.max(0,domainLength-this.labels.length)},()=>""),label],datasets=this.datasets.map((series,index)=>({...series,data:[...series.data,...Array.from({length:Math.max(0,domainLength-series.data.length)},()=>null),values[index]??null]}));this.labels=limit>0?labels.slice(-limit):labels,this.datasets=limit>0?datasets.map(series=>({...series,data:series.data.slice(-limit)})):datasets}exportData(format){if(format==="svg"){const XMLSerializerCtor=this.ownerDocument.defaultView?.XMLSerializer;return!this.svgEl||typeof XMLSerializerCtor!="function"?"":new XMLSerializerCtor().serializeToString(this.svgEl)}const header=["label",...this.datasets.map(series=>series.label)].map(escapeCsvField).join(","),rows=Array.from({length:this.recordCount()},(_,index)=>{const label=this.labels[index]??"";return[label,...this.datasets.map((series,datasetIndex)=>{const value=series.data[index];return typeof value=="number"&&Number.isFinite(value)?this.formatter?.({value,surface:"export",datasetIndex,index,label,seriesLabel:series.label})??value:""})].map(escapeCsvField).join(",")});return[header,...rows].join(`\r
|
|
2
|
+
`)}attributeChangedCallback(name,oldValue,value){super.attributeChangedCallback(name,oldValue,value),oldValue!==value&&(name==="style"||name==="class")&&this.fitAxisTitles()}connectedCallback(){super.connectedCallback(),this.syncAnnouncementSink(),this.armResizeObserver(),this.armForcedColorsWatcher()}armResizeObserver(){const target=this.svgEl,ownerDocument=this.ownerDocument;if(!this.isConnected||!target||this.resizeObserver&&this.resizeObserverDocument===ownerDocument&&this.resizeObserverTarget===target)return;this.resetResizeObserver();const ResizeObserverCtor=ownerDocument.defaultView?.ResizeObserver;if(!ResizeObserverCtor)return;const generation=this.resizeObserverGeneration,observer=new ResizeObserverCtor(entries=>{if(this.resizeObserver!==observer||this.resizeObserverGeneration!==generation||!this.isConnected||this.ownerDocument!==ownerDocument||this.resizeObserverTarget!==target)return;const svgEntry=entries.find(entry=>entry.target===target);if(svgEntry){const box=svgEntry.contentBoxSize?.[0];if(box)this.plotWidth=box.inlineSize,this.plotHeight=box.blockSize;else{const rect=target.getBoundingClientRect();this.plotWidth=rect.width,this.plotHeight=rect.height}this.fitAxisTitles()}entries.some(entry=>this.axisTitleTargets.has(entry.target))&&this.queueAxisTitleFit()});this.resizeObserver=observer,this.resizeObserverDocument=ownerDocument,this.resizeObserverTarget=target,target&&observer.observe(target),this.syncAxisTitleTargets()}disconnectedCallback(){super.disconnectedCallback(),this.releaseAnnouncementSink(),this.lastDataTruncationAnnouncement="",this.isMounting=!0,this.resetResizeObserver(),this.disarmForcedColorsWatcher()}adoptedCallback(){super.adoptedCallback(),this.resetResizeObserver(),this.releaseAnnouncementSink(),this.syncAnnouncementSink(),this.refreshFitMeasurementAvailability(),this.armForcedColorsWatcher()}armForcedColorsWatcher(){const ownerWindow=this.ownerDocument?.defaultView??void 0;ownerWindow?.matchMedia&&(this.forcedColorsWindow===ownerWindow&&this.forcedColorsQuery||(this.disarmForcedColorsWatcher(),this.forcedColorsWindow=ownerWindow,this.forcedColorsQuery=ownerWindow.matchMedia("(forced-colors: active)"),this.forcedColorsQuery.addEventListener("change",this.onForcedColorsChange)))}disarmForcedColorsWatcher(){this.forcedColorsQuery?.removeEventListener("change",this.onForcedColorsChange),this.forcedColorsQuery=void 0,this.forcedColorsWindow=void 0}syncAnnouncementSink(){this.isConnected&&this.politeAnnouncementSink?.element.ownerDocument!==this.ownerDocument&&(this.releaseAnnouncementSink(),this.politeAnnouncementSink=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}))}releaseAnnouncementSink(){this.politeAnnouncementSink?.release(),this.politeAnnouncementSink=void 0}resetResizeObserver(){this.axisTitleFrame!==void 0&&(this.resizeObserverDocument?.defaultView?.cancelAnimationFrame(this.axisTitleFrame),this.axisTitleFrame=void 0),this.axisTitleTargets.clear(),this.resizeObserverGeneration+=1,this.resizeObserver?.disconnect(),this.resizeObserver=void 0,this.resizeObserverDocument=void 0,this.resizeObserverTarget=void 0}firstUpdated(changed){super.firstUpdated(changed),this.armResizeObserver()}willUpdate(changed){if(super.willUpdate(changed),this.seedFirstRenderState(()=>{this.refreshFitMeasurementAvailability()}),!["type","labels","datasets","skipZero"].some(name=>changed.has(name)))return;const active=activeElementIn(this.shadowRoot)??null,hadFocusedMark=active?.matches('[part="bar"], [part="point"]')??!1,priorPosition=Number(active?.getAttribute("data-mark-index")??this.activeMarkIndex),datasetAttribute=active?.getAttribute("data-dataset-index"),indexAttribute=active?.getAttribute("data-index"),datasetIndex=Number(datasetAttribute),index=Number(indexAttribute),marks=this.interactiveMarks(),sameIdentity=datasetAttribute!=null&&indexAttribute!==null&&indexAttribute!==void 0?marks.findIndex(mark=>mark.datasetIndex===datasetIndex&&mark.index===index):-1;this.activeMarkIndex=marks.length?sameIdentity>=0?sameIdentity:Math.min(Math.max(priorPosition,0),marks.length-1):0,this.refocusMarkAfterUpdate=hadFocusedMark&&marks.length>0,this.refocusChartAfterUpdate=hadFocusedMark&&marks.length===0}updated(changed){super.updated(changed);const wasMounting=this.isMounting;if(this.isMounting=!1,changed.has("height")){const height=sanitizeCssLength(this.height,"height");height?this.style.setProperty("--_lr-chart-height",height):this.style.removeProperty("--_lr-chart-height")}const dataTruncation=this.dataTruncationMessage();wasMounting?this.lastDataTruncationAnnouncement=dataTruncation:dataTruncation!==this.lastDataTruncationAnnouncement&&(this.lastDataTruncationAnnouncement=dataTruncation,dataTruncation&&this.politeAnnouncementSink?.announce(dataTruncation)),this.refocusMarkAfterUpdate&&(this.refocusMarkAfterUpdate=!1,this.renderRoot.querySelectorAll('[part="bar"], [part="point"]')[this.normalizedMarkIndex()]?.focus()),this.refocusChartAfterUpdate&&(this.refocusChartAfterUpdate=!1,this.svgEl?.focus()),this.fitAxisTitles(),this.syncAxisTitleTargets()}fitAxisTitles(){if(!(!this.ownerDocument?.defaultView||!this.isConnected||!this.svgEl?.getClientRects().length))for(const title of this.svgEl.querySelectorAll('[part="axis-title"]')){const text=Array.from(title.childNodes).find(node=>node.nodeType===3);if(!text)continue;const source=title.getAttribute("aria-label")??"",extent=finiteRange(Number(title.getAttribute("data-title-extent")),0,0,MAX_SCROLL_CONTENT_WIDTH),previous=this.axisTitleFits.get(title);if(!(previous?.source===source&&previous.extent===extent&&previous.display===text.data&&previous.width===title.getComputedTextLength())){if(title.style.removeProperty("opacity"),text.data=source,title.getComputedTextLength()>extent)if(text.data="…",title.getComputedTextLength()>extent)title.style.opacity="0";else{let lower=0,upper=source.length;for(;lower<upper;){const middle=Math.ceil((lower+upper)/2);text.data=`${source.slice(0,middle)}…`,title.getComputedTextLength()<=extent?lower=middle:upper=middle-1}const last=source.charCodeAt(lower-1);last>=55296&&last<=56319&&(lower-=1),text.data=`${source.slice(0,lower)}…`}this.axisTitleFits.set(title,{source,extent,display:text.data,width:title.getComputedTextLength()})}}}syncAxisTitleTargets(){if(!this.resizeObserver||!this.svgEl)return;const current=new Set(this.svgEl.querySelectorAll('[part="axis-title"]'));for(const title of this.axisTitleTargets)current.has(title)||this.resizeObserver.unobserve(title);for(const title of current)this.axisTitleTargets.has(title)||this.resizeObserver.observe(title);this.axisTitleTargets=current}queueAxisTitleFit(){const document=this.resizeObserverDocument,window=document?.defaultView;if(!window||this.axisTitleFrame!==void 0)return;const generation=this.resizeObserverGeneration,frame=window.requestAnimationFrame(()=>{this.axisTitleFrame!==frame||this.resizeObserverGeneration!==generation||!this.isConnected||this.ownerDocument!==document||(this.axisTitleFrame=void 0,this.fitAxisTitles())});this.axisTitleFrame=frame}colorFor(index,series){return sanitizeCssColor(series.color)??DEFAULT_PALETTE[index%DEFAULT_PALETTE.length]}get effectiveType(){return normalizeLiteChartType(this.type)}forcedColors(){return forcedColorsActive(this.ownerDocument?.defaultView)}markPaint(index,series){const color=this.colorFor(index,series);return this.effectiveType==="bar"&&this.forcedColors()?`url(#${this.forcedColorPatternId}-${index})`:color}legendEncoding(index){return this.forcedColors()?forcedColorEncoding(index).name:nothing}markDash(index){if(!this.forcedColors())return nothing;const dash=forcedColorEncoding(index).dash;return dash.length?dash.join(" "):"none"}renderForcedColorPatterns(){if(this.effectiveType!=="bar"||!this.forcedColors())return nothing;const size=8,half=size/2,texture="var(--lr-color-surface)";return svg`<defs>
|
|
3
3
|
${this.recordSample().seriesIndexes.map(index=>{const series=this.datasets[index],encoding=forcedColorEncoding(index).name,shapes=(()=>{switch(encoding){case"horizontal":return svg`<rect y=${half} width=${size} height="1" fill=${texture}></rect>`;case"vertical":return svg`<rect x=${half} width="1" height=${size} fill=${texture}></rect>`;case"diagonal":return svg`<path
|
|
4
4
|
d=${`M${-half},${size} L${half},0 M${half},${size} L${size+half},0`}
|
|
5
5
|
stroke=${texture}
|
|
@@ -19,7 +19,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
19
19
|
<rect width=${size} height=${size} fill=${this.colorFor(index,series)}></rect>
|
|
20
20
|
${shapes}
|
|
21
21
|
</pattern>`})}
|
|
22
|
-
</defs>`}resolvePointText(label,value,datasetIndex){return this.formatter?.({value,surface:"visual",datasetIndex,label,seriesLabel:this.datasets[datasetIndex]?.label})??this.pointText?.(label,value,datasetIndex)}formatTableCell(value,context,numberFormat){return this.formatter?.({value,surface:"table",datasetIndex:context.datasetIndex??void 0,index:context.index,label:context.label,seriesLabel:context.seriesLabel??void 0,...context.kind==="total"?{statistic:"total"}:{}})??this.tableCellFormatter?.(value,context)??numberFormat.format(value)}tableTotalAt(index,seriesIndexes){let total=0,hasValue=!1;for(const seriesIndex of seriesIndexes){const series=this.datasets[seriesIndex];if(!series)continue;const value=series.data[index];value==null||!Number.isFinite(value)||(total=finiteAdd(total,value),hasValue=!0)}return hasValue?total:null}recordCount(){let count=this.labels.length;for(const series of this.datasets)count=Math.max(count,series.data.length);return count}recordSample(){const rowCount=this.recordCount(),seriesCount=this.datasets.length;return{rowCount,seriesCount,...sampleChartTableIndexes(rowCount,seriesCount)}}generatedDataIsSampled(){if(this.hasCustomDataTable())return!1;const sample=this.recordSample();return sample.rowCount===0||sample.seriesCount===0?!1:sample.rowIndexes.length<sample.rowCount||sample.seriesIndexes.length<sample.seriesCount}dataTruncationMessage(){return this.generatedDataIsSampled()?this.localize("chartDataSampled"):""}hasCustomDataTable(){return Array.from(this.children).some(child=>child.getAttribute("slot")==="data-table")}interactiveMarks(){const marks=[],sample=this.recordSample();if(this.effectiveType==="bar")for(const index of sample.rowIndexes)for(const datasetIndex of sample.seriesIndexes){const value=this.datasets[datasetIndex]?.data[index];value==null||!Number.isFinite(value)||this.skipZero&&value===0||marks.push({datasetIndex,index,label:this.labels[index]??"",value})}else sample.seriesIndexes.forEach(datasetIndex=>{const series=this.datasets[datasetIndex];series&&sample.rowIndexes.forEach(index=>{const value=series.data[index];value==null||!Number.isFinite(value)||marks.push({datasetIndex,index,label:this.labels[index]??"",value})})});return marks}awaitingFitMeasurement(){return this.layout==="fit"&&this.fitMeasurementAvailable&&(this.plotWidth<=0||this.plotHeight<=0)}refreshFitMeasurementAvailability(){this.fitMeasurementAvailable=typeof this.ownerDocument?.defaultView?.ResizeObserver=="function"}markIndexMap(){return new Map(this.interactiveMarks().map((mark,index)=>[`${mark.datasetIndex}:${mark.index}`,index]))}normalizedMarkIndex(marks=this.interactiveMarks()){return marks.length?Math.min(Math.max(this.activeMarkIndex,0),marks.length-1):-1}markAnnouncement(index,marks=this.interactiveMarks()){const mark=marks[index];if(!mark)return"";const series=this.datasets[mark.datasetIndex]?.label??this.localize("chartSeriesLabel"),custom=this.formatter?.({value:mark.value,surface:"spoken",datasetIndex:mark.datasetIndex,index:mark.index,label:mark.label,seriesLabel:series})??this.resolvePointText(mark.label,mark.value,mark.datasetIndex);return custom?this.localize("liteChartCustomMarkSummary",void 0,{content:custom,index:getNumberFormat(this.effectiveLocale).format(index+1),total:getNumberFormat(this.effectiveLocale).format(marks.length)}):this.localize("liteChartMarkSummary",void 0,{series,label:mark.label,value:getNumberFormat(this.effectiveLocale).format(mark.value),index:getNumberFormat(this.effectiveLocale).format(index+1),total:getNumberFormat(this.effectiveLocale).format(marks.length)})}onMarkFocus(index){const marks=this.interactiveMarks();marks[index]&&(this.activeMarkIndex=index,this.liveRegion?.announce(this.markAnnouncement(index,marks),{force:!0}))}focusMark(index){this.interactiveMarks()[index]&&(this.activeMarkIndex=index,this.updateComplete.then(()=>{const mark=Array.from(this.renderRoot.querySelectorAll('[part="bar"], [part="point"]'))[index];mark&&(activeElementIn(this.shadowRoot)===mark?this.onMarkFocus(index):mark.focus())}))}barValueToY(value,plotY,plotH,lo,hi){if(this.scale==="sqrt"){const zeroY=plotY+plotH-domainFraction(0,lo,hi)*plotH;if(value>=0){const domainMax2=hi>0?hi:1,fraction2=Math.sqrt(Math.min(domainMax2,value)/domainMax2);return zeroY-fraction2*(zeroY-plotY)}const domainMax=lo<0?-lo:1,fraction=Math.sqrt(Math.min(domainMax,-value)/domainMax);return zeroY+fraction*(plotY+plotH-zeroY)}return plotY+plotH-this.valueFraction(value,lo,hi)*plotH}valueFraction(value,lo,hi){return this.scale==="logarithmic"?logDomainFraction(value,this.logDomainFloor(lo,hi),hi):domainFraction(value,lo,hi)}logDomainFloor(lo,hi){if(lo>0)return lo;let smallest=Number.POSITIVE_INFINITY;for(const series of this.datasets)for(const value of series.data)value==null||!Number.isFinite(value)||value<=0||value<smallest&&(smallest=value);return Number.isFinite(smallest)?smallest:hi>0?hi/10:1}effectiveMinBarHeight(){return this.minBarHeight==null?void 0:finiteRange(this.minBarHeight,0,0,MAX_SCROLL_CONTENT_WIDTH)}roundedBarPath(x,y,w,h){const r=Math.max(0,Math.min(BAR_CORNER_RADIUS,w/2,h));return r<=0?`M${x},${y} h${w} v${h} h${-w} Z`:`M${x},${y+r} Q${x},${y} ${x+r},${y} H${x+w-r} Q${x+w},${y} ${x+w},${y+r} V${y+h} H${x} Z`}domain(){let lo=1/0,hi=-1/0;if(this.effectiveType==="bar"&&this.stacked)for(let i=0;i<this.recordCount();i++){let pos=0,neg=0;for(const s of this.datasets){const v=s.data[i];v==null||!Number.isFinite(v)||(v>=0?pos=finiteAdd(pos,v):neg=finiteAdd(neg,v))}lo=Math.min(lo,neg),hi=Math.max(hi,pos)}else for(const s of this.datasets)for(const v of s.data)v==null||!Number.isFinite(v)||(lo=Math.min(lo,v),hi=Math.max(hi,v));
|
|
22
|
+
</defs>`}resolvePointText(label,value,datasetIndex){return this.formatter?.({value,surface:"visual",datasetIndex,label,seriesLabel:this.datasets[datasetIndex]?.label})??this.pointText?.(label,value,datasetIndex)}formatTableCell(value,context,numberFormat){return this.formatter?.({value,surface:"table",datasetIndex:context.datasetIndex??void 0,index:context.index,label:context.label,seriesLabel:context.seriesLabel??void 0,...context.kind==="total"?{statistic:"total"}:{}})??this.tableCellFormatter?.(value,context)??numberFormat.format(value)}tableTotalAt(index,seriesIndexes){let total=0,hasValue=!1;for(const seriesIndex of seriesIndexes){const series=this.datasets[seriesIndex];if(!series)continue;const value=series.data[index];value==null||!Number.isFinite(value)||(total=finiteAdd(total,value),hasValue=!0)}return hasValue?total:null}recordCount(){let count=this.labels.length;for(const series of this.datasets)count=Math.max(count,series.data.length);return count}recordSample(){const rowCount=this.recordCount(),seriesCount=this.datasets.length;return{rowCount,seriesCount,...sampleChartTableIndexes(rowCount,seriesCount)}}generatedDataIsSampled(){if(this.hasCustomDataTable())return!1;const sample=this.recordSample();return sample.rowCount===0||sample.seriesCount===0?!1:sample.rowIndexes.length<sample.rowCount||sample.seriesIndexes.length<sample.seriesCount}dataTruncationMessage(){return this.generatedDataIsSampled()?this.localize("chartDataSampled"):""}hasCustomDataTable(){return Array.from(this.children).some(child=>child.getAttribute("slot")==="data-table")}interactiveMarks(){const marks=[],sample=this.recordSample();if(this.effectiveType==="bar")for(const index of sample.rowIndexes)for(const datasetIndex of sample.seriesIndexes){const value=this.datasets[datasetIndex]?.data[index];value==null||!Number.isFinite(value)||this.skipZero&&value===0||marks.push({datasetIndex,index,label:this.labels[index]??"",value})}else sample.seriesIndexes.forEach(datasetIndex=>{const series=this.datasets[datasetIndex];series&&sample.rowIndexes.forEach(index=>{const value=series.data[index];value==null||!Number.isFinite(value)||marks.push({datasetIndex,index,label:this.labels[index]??"",value})})});return marks}awaitingFitMeasurement(){return this.layout==="fit"&&this.fitMeasurementAvailable&&(this.plotWidth<=0||this.plotHeight<=0)}refreshFitMeasurementAvailability(){this.fitMeasurementAvailable=typeof this.ownerDocument?.defaultView?.ResizeObserver=="function"}markIndexMap(){return new Map(this.interactiveMarks().map((mark,index)=>[`${mark.datasetIndex}:${mark.index}`,index]))}normalizedMarkIndex(marks=this.interactiveMarks()){return marks.length?Math.min(Math.max(this.activeMarkIndex,0),marks.length-1):-1}markAnnouncement(index,marks=this.interactiveMarks()){const mark=marks[index];if(!mark)return"";const series=this.datasets[mark.datasetIndex]?.label??this.localize("chartSeriesLabel"),custom=this.formatter?.({value:mark.value,surface:"spoken",datasetIndex:mark.datasetIndex,index:mark.index,label:mark.label,seriesLabel:series})??this.resolvePointText(mark.label,mark.value,mark.datasetIndex);return custom?this.localize("liteChartCustomMarkSummary",void 0,{content:custom,index:getNumberFormat(this.effectiveLocale).format(index+1),total:getNumberFormat(this.effectiveLocale).format(marks.length)}):this.localize("liteChartMarkSummary",void 0,{series,label:mark.label,value:getNumberFormat(this.effectiveLocale).format(mark.value),index:getNumberFormat(this.effectiveLocale).format(index+1),total:getNumberFormat(this.effectiveLocale).format(marks.length)})}onMarkFocus(index){const marks=this.interactiveMarks();marks[index]&&(this.activeMarkIndex=index,this.liveRegion?.announce(this.markAnnouncement(index,marks),{force:!0}))}focusMark(index){this.interactiveMarks()[index]&&(this.activeMarkIndex=index,this.updateComplete.then(()=>{const mark=Array.from(this.renderRoot.querySelectorAll('[part="bar"], [part="point"]'))[index];mark&&(activeElementIn(this.shadowRoot)===mark?this.onMarkFocus(index):mark.focus())}))}barValueToY(value,plotY,plotH,lo,hi){if(this.scale==="sqrt"){const zeroY=plotY+plotH-domainFraction(0,lo,hi)*plotH;if(value>=0){const domainMax2=hi>0?hi:1,fraction2=Math.sqrt(Math.min(domainMax2,value)/domainMax2);return zeroY-fraction2*(zeroY-plotY)}const domainMax=lo<0?-lo:1,fraction=Math.sqrt(Math.min(domainMax,-value)/domainMax);return zeroY+fraction*(plotY+plotH-zeroY)}return plotY+plotH-this.valueFraction(value,lo,hi)*plotH}valueFraction(value,lo,hi){return this.scale==="logarithmic"?logDomainFraction(value,this.logDomainFloor(lo,hi),hi):domainFraction(value,lo,hi)}logDomainFloor(lo,hi){if(lo>0)return lo;let smallest=Number.POSITIVE_INFINITY;for(const series of this.datasets)for(const value of series.data)value==null||!Number.isFinite(value)||value<=0||value<smallest&&(smallest=value);return Number.isFinite(smallest)?smallest:hi>0?hi/10:1}effectiveMinBarHeight(){return this.minBarHeight==null?void 0:finiteRange(this.minBarHeight,0,0,MAX_SCROLL_CONTENT_WIDTH)}roundedBarPath(x,y,w,h){const r=Math.max(0,Math.min(BAR_CORNER_RADIUS,w/2,h));return r<=0?`M${x},${y} h${w} v${h} h${-w} Z`:`M${x},${y+r} Q${x},${y} ${x+r},${y} H${x+w-r} Q${x+w},${y} ${x+w},${y+r} V${y+h} H${x} Z`}domain(){let lo=1/0,hi=-1/0;if(this.effectiveType==="bar"&&this.stacked)for(let i=0;i<this.recordCount();i++){let pos=0,neg=0;for(const s of this.datasets){const v=s.data[i];v==null||!Number.isFinite(v)||(v>=0?pos=finiteAdd(pos,v):neg=finiteAdd(neg,v))}lo=Math.min(lo,neg),hi=Math.max(hi,pos)}else for(const s of this.datasets)for(const v of s.data)v==null||!Number.isFinite(v)||(lo=Math.min(lo,v),hi=Math.max(hi,v));(!Number.isFinite(lo)||!Number.isFinite(hi))&&(lo=0,hi=1);const domain=niceDomain(lo,hi,this.beginAtZero,TICK_COUNT);if(this.scale==="logarithmic"){const ticks=logarithmicTicks(this.logDomainFloor(domain.lo,domain.hi),domain.hi,TICK_COUNT);if(ticks)return{...domain,ticks}}return domain}emitPoint(datasetIndex,index){const label=this.labels[index],value=this.datasets[datasetIndex]?.data[index]??null;this.emit("lr-datum-activate",{kind:this.effectiveType==="bar"?"bar":"point",datasetIndex,index,label,value}),this.emit("lr-point-click",{datasetIndex,index,label,value})}emitNearestLinePoint(event,points,fallbackDatasetIndex,fallbackIndex){let selected=points.find(point=>point.datasetIndex===fallbackDatasetIndex&&point.index===fallbackIndex);const currentTarget=event.currentTarget,svgElement=currentTarget instanceof SVGElement?currentTarget.ownerSVGElement:null,screenMatrix=svgElement?.getScreenCTM();if(event.detail>0&&svgElement&&screenMatrix&&points.length){const renderedPoint=svgElement.createSVGPoint(),squaredDistance=point=>{renderedPoint.x=point.x,renderedPoint.y=point.y;const screenPoint=renderedPoint.matrixTransform(screenMatrix),dx=event.clientX-screenPoint.x,dy=event.clientY-screenPoint.y;return dx*dx+dy*dy};let bestDistance=selected?squaredDistance(selected):Number.POSITIVE_INFINITY;for(const point of points){const distance=squaredDistance(point);distance<bestDistance&&(selected=point,bestDistance=distance)}}this.emitPoint(selected?.datasetIndex??fallbackDatasetIndex,selected?.index??fallbackIndex)}onPointKeyDown(e,datasetIndex,index,markIndex){if(e.key==="Enter"||e.key===" "){e.preventDefault(),this.onMarkFocus(markIndex),this.emitPoint(datasetIndex,index);return}const marks=this.interactiveMarks();if(!marks.length)return;const rtl=this.effectiveDirection==="rtl",forwardKey=rtl?"ArrowLeft":"ArrowRight",backwardKey=rtl?"ArrowRight":"ArrowLeft";let next=markIndex;if(e.key===forwardKey||e.key==="ArrowDown")next=Math.min(marks.length-1,markIndex+1);else if(e.key===backwardKey||e.key==="ArrowUp")next=Math.max(0,markIndex-1);else if(e.key==="Home")next=0;else if(e.key==="End")next=marks.length-1;else return;e.preventDefault(),this.focusMark(next)}formatValueAxisTick(value){return this.formatter?.({value,surface:"tick"})??(this.tickFormat?this.tickFormat(value):formatTick(value,this.effectiveLocale))}renderGrid(plotX,plotY,plotW,plotH,ticks,lo,hi){const rtl=this.effectiveDirection==="rtl";return ticks.map(({value,label})=>{const y=plotY+plotH-this.valueFraction(value,lo,hi)*plotH;return svg`
|
|
23
23
|
<line part="grid-line" x1=${plotX} y1=${y} x2=${plotX+plotW} y2=${y}></line>
|
|
24
24
|
<text
|
|
25
25
|
part="axis-label"
|
|
@@ -28,7 +28,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
28
28
|
text-anchor="end"
|
|
29
29
|
dominant-baseline="middle"
|
|
30
30
|
>${label}</text>
|
|
31
|
-
`})}renderBars(plotX,plotY,plotH,slot,lo,hi,barOrigins,recordSample,selectedIndices){const groupCount=this.stacked?1:Math.max(1,recordSample.seriesIndexes.length),groupGap=finiteRange(this.barGapRatio??BAR_GROUP_GAP,BAR_GROUP_GAP,0,1),groupW=slot*(1-groupGap),
|
|
31
|
+
`})}renderBars(plotX,plotY,plotH,slot,lo,hi,barOrigins,recordSample,selectedIndices){const groupCount=this.stacked?1:Math.max(1,recordSample.seriesIndexes.length),groupGap=finiteRange(this.barGapRatio??BAR_GROUP_GAP,BAR_GROUP_GAP,0,1),groupW=slot*(1-groupGap),barGap=groupCount>1?Math.min(BAR_GAP*slot,groupW/(2*(groupCount-1))):0,barW=(groupW-barGap*(groupCount-1))/groupCount,markIndexes=this.markIndexMap(),activeMarkIndex=this.normalizedMarkIndex(),numberFormat=getNumberFormat(this.effectiveLocale),minBarHeight=this.effectiveMinBarHeight(),stackedSqrt=this.stacked&&this.scale==="sqrt",stackedLog=this.stacked&&this.scale==="logarithmic",domainMax=hi>0?hi:1,negDomainMax=lo<0?-lo:1,zeroY=plotY+plotH-(stackedLog?0:domainFraction(0,lo,hi))*plotH,clampSvgCoordinate=(value,fallback=zeroY)=>finiteRange(value,fallback,-MAX_SCROLL_CONTENT_WIDTH,MAX_SCROLL_CONTENT_WIDTH),clampSvgLength=value=>finiteRange(value,0,0,MAX_SCROLL_CONTENT_WIDTH),posAvailH=zeroY-plotY,negAvailH=plotY+plotH-zeroY,posTotals=new Map,negTotals=new Map;if(stackedSqrt||stackedLog)for(const i of recordSample.rowIndexes){let pos=0,neg=0;for(const datasetIndex of recordSample.seriesIndexes){const s=this.datasets[datasetIndex];if(!s)continue;const v=s.data[i];v==null||!Number.isFinite(v)||this.skipZero&&v===0||(v>=0?pos=finiteAdd(pos,v):neg=finiteAdd(neg,v))}posTotals.set(i,pos),negTotals.set(i,neg)}const bars=[];for(const i of recordSample.rowIndexes){const slotStart=(barOrigins.get(i)??plotX+i*slot)+(slot-groupW)/2;let stackPos=0,stackNeg=0,posPixelTop=zeroY,negPixelBottom=zeroY;const posCompressedH=stackedSqrt?Math.sqrt(Math.min(domainMax,posTotals.get(i)??0)/domainMax)*posAvailH:0,negCompressedH=stackedSqrt?Math.sqrt(Math.min(negDomainMax,-(negTotals.get(i)??0))/negDomainMax)*negAvailH:0,logTotal=posTotals.get(i)??0,logStackH=stackedLog?this.valueFraction(logTotal,lo,hi)*plotH:0;let logShareTotal=0;if(stackedLog&&logTotal>0)for(const datasetIndex of recordSample.seriesIndexes){const value=this.datasets[datasetIndex]?.data[i];value!=null&&Number.isFinite(value)&&value>0&&(logShareTotal+=value/logTotal)}recordSample.seriesIndexes.forEach((di,sampledDatasetIndex)=>{const s=this.datasets[di];if(!s)return;const v=s.data[i];if(v==null||!Number.isFinite(v)||this.skipZero&&v===0)return;const color=this.colorFor(di,s),paint=this.markPaint(di,s);let rectX,y1,y2;if(this.stacked&&stackedSqrt)if(rectX=slotStart,v>=0){const total=posTotals.get(i)??0,shareLo=total>0?stackPos/total:0,nextStackPos=finiteAdd(stackPos,v),shareHi=total>0?nextStackPos/total:0;y1=zeroY-shareHi*posCompressedH,y2=zeroY-shareLo*posCompressedH,stackPos=nextStackPos}else{const total=-(negTotals.get(i)??0),shareLo=-stackNeg/total,nextStackNeg=finiteAdd(stackNeg,v),shareHi=-nextStackNeg/total;y1=zeroY+shareLo*negCompressedH,y2=zeroY+shareHi*negCompressedH,stackNeg=nextStackNeg}else if(stackedLog){rectX=slotStart;const naturalH=v>0&&logShareTotal>0?v/logTotal/logShareTotal*logStackH:0,segH=clampSvgLength(minBarHeight!=null&&v!==0&&naturalH<minBarHeight?minBarHeight:naturalH);v>=0?(y2=posPixelTop,y1=clampSvgCoordinate(finiteAdd(posPixelTop,-segH),posPixelTop),posPixelTop=y1):(y1=negPixelBottom,y2=clampSvgCoordinate(finiteAdd(negPixelBottom,segH),negPixelBottom),negPixelBottom=y2)}else if(this.stacked)if(rectX=slotStart,v>=0){const naturalH=clampSvgLength(Math.max(0,zeroY-this.barValueToY(v,plotY,plotH,lo,hi))),segH=clampSvgLength(minBarHeight!=null&&v!==0&&naturalH<minBarHeight?minBarHeight:naturalH);y2=posPixelTop,y1=clampSvgCoordinate(finiteAdd(posPixelTop,-segH),posPixelTop),posPixelTop=y1}else{const naturalH=clampSvgLength(Math.max(0,this.barValueToY(v,plotY,plotH,lo,hi)-zeroY)),segH=clampSvgLength(minBarHeight!=null&&v!==0&&naturalH<minBarHeight?minBarHeight:naturalH);y1=negPixelBottom,y2=clampSvgCoordinate(finiteAdd(negPixelBottom,segH),negPixelBottom),negPixelBottom=y2}else{rectX=slotStart+sampledDatasetIndex*(barW+barGap);const zeroClamped=Math.min(hi,Math.max(lo,0)),barValLo=Math.min(zeroClamped,v),barValHi=Math.max(zeroClamped,v);y1=this.barValueToY(barValHi,plotY,plotH,lo,hi),y2=this.barValueToY(barValLo,plotY,plotH,lo,hi)}rectX=clampSvgCoordinate(rectX,plotX),y1=clampSvgCoordinate(y1),y2=clampSvgCoordinate(y2);const label=this.labels[i]??"",titleText=this.resolvePointText(label,v,di)??this.localize("liteChartBarLabel",void 0,{series:s.label,label,value:numberFormat.format(v)}),w=clampSvgLength(Math.max(0,barW));let h=clampSvgLength(Math.max(0,y2-y1));if(!(this.stacked&&!stackedSqrt)&&minBarHeight!=null&&v!==0&&h<minBarHeight){const extra=minBarHeight-h;y1=clampSvgCoordinate(finiteAdd(y1,-extra),y1),h=clampSvgLength(Math.max(0,y2-y1))}const markIndex=markIndexes.get(`${di}:${i}`),selected=selectedIndices.has(i),intraGroupSpacing=barW+barGap,crossCategorySpacing=slot-Math.max(0,groupCount-1)*intraGroupSpacing,horizontalSpacing=Math.max(0,groupCount>1?Math.min(intraGroupSpacing,crossCategorySpacing):slot),hitWidth=clampSvgLength(Math.max(w,Math.min(24,horizontalSpacing))),hitHeight=this.stacked?h:clampSvgLength(Math.max(24,h)),hitX=clampSvgCoordinate(rectX-(hitWidth-w)/2,rectX),hitY=clampSvgCoordinate(y1-(hitHeight-h)/2,y1),hitTarget=svg`
|
|
32
32
|
<rect
|
|
33
33
|
data-mark-hit-target="bar"
|
|
34
34
|
aria-hidden="true"
|
|
@@ -58,7 +58,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
58
58
|
@click=${()=>this.emitPoint(di,i)}
|
|
59
59
|
@focus=${()=>this.onMarkFocus(markIndex)}
|
|
60
60
|
@keydown=${e=>this.onPointKeyDown(e,di,i,markIndex)}
|
|
61
|
-
|
|
61
|
+
>${nativeSvgTitle(titleText)}</path>
|
|
62
62
|
</g>
|
|
63
63
|
`:svg`
|
|
64
64
|
<g class="mark-hit-group">
|
|
@@ -82,7 +82,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
82
82
|
@click=${()=>this.emitPoint(di,i)}
|
|
83
83
|
@focus=${()=>this.onMarkFocus(markIndex)}
|
|
84
84
|
@keydown=${e=>this.onPointKeyDown(e,di,i,markIndex)}
|
|
85
|
-
|
|
85
|
+
>${nativeSvgTitle(titleText)}</rect>
|
|
86
86
|
</g>
|
|
87
87
|
`)})}return bars}renderLines(plotX,plotY,plotW,plotH,lo,hi,recordSample,selectedIndices){const n=this.recordCount(),xFor=i=>plotX+(n>1?i/(n-1)*plotW:plotW/2),yFor=v=>plotY+plotH-this.valueFraction(v,lo,hi)*plotH,markIndexes=this.markIndexMap(),activeMarkIndex=this.normalizedMarkIndex(),numberFormat=getNumberFormat(this.effectiveLocale),hitPoints=[];return recordSample.seriesIndexes.forEach(datasetIndex=>{const series=this.datasets[datasetIndex];series&&recordSample.rowIndexes.forEach(index=>{const value=series.data[index];value==null||!Number.isFinite(value)||hitPoints.push({datasetIndex,index,x:xFor(index),y:yFor(value)})})}),recordSample.seriesIndexes.map(di=>{const s=this.datasets[di];if(!s)return nothing;const color=this.colorFor(di,s);let d="",penDown=!1,previousSourceIndex=-1;recordSample.rowIndexes.forEach(i=>{const v=s.data[i];if(v==null||!Number.isFinite(v)){penDown=!1,previousSourceIndex=i;return}if(penDown&&previousSourceIndex>=0&&i>previousSourceIndex+1)for(let skipped=previousSourceIndex+1;skipped<i;skipped++){const candidate=s.data[skipped];if(candidate==null||!Number.isFinite(candidate)){penDown=!1;break}}d+=`${penDown?"L":"M"}${xFor(i)},${yFor(v)} `,penDown=!0,previousSourceIndex=i});const dots=recordSample.rowIndexes.map(i=>{const v=s.data[i];if(v==null||!Number.isFinite(v))return nothing;const label=this.labels[i]??"",titleText=this.resolvePointText(label,v,di)??this.localize("liteChartBarLabel",void 0,{series:s.label,label,value:numberFormat.format(v)}),markIndex=markIndexes.get(`${di}:${i}`),selected=selectedIndices.has(i);return svg`
|
|
88
88
|
<g class="mark-hit-group">
|
|
@@ -113,7 +113,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
113
113
|
@click=${event=>this.emitNearestLinePoint(event,hitPoints,di,i)}
|
|
114
114
|
@focus=${()=>this.onMarkFocus(markIndex)}
|
|
115
115
|
@keydown=${e=>this.onPointKeyDown(e,di,i,markIndex)}
|
|
116
|
-
|
|
116
|
+
>${nativeSvgTitle(titleText)}</circle>
|
|
117
117
|
</g>
|
|
118
118
|
`});return svg`<path
|
|
119
119
|
part="line"
|
|
@@ -145,12 +145,14 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
145
145
|
${marks}
|
|
146
146
|
${!awaitingFitMeasurement&&this.yLabel?svg`<text
|
|
147
147
|
part="axis-title"
|
|
148
|
+
aria-label=${this.yLabel}
|
|
149
|
+
data-title-extent=${plotH}
|
|
148
150
|
x=${rtl?w-12:12}
|
|
149
151
|
y=${plotY+plotH/2}
|
|
150
152
|
text-anchor="middle"
|
|
151
153
|
transform="rotate(${rtl?90:-90}, ${rtl?w-12:12}, ${plotY+plotH/2})"
|
|
152
154
|
>${this.yLabel}</text>`:nothing}
|
|
153
|
-
${!awaitingFitMeasurement&&this.xLabel?svg`<text part="axis-title" x=${plotX+plotW/2} y=${plotY+plotH+padBottom-2} text-anchor="middle">${this.xLabel}</text>`:nothing}
|
|
155
|
+
${!awaitingFitMeasurement&&this.xLabel?svg`<text part="axis-title" aria-label=${this.xLabel} data-title-extent=${plotW} x=${plotX+plotW/2} y=${plotY+plotH+padBottom-2} text-anchor="middle">${this.xLabel}</text>`:nothing}
|
|
154
156
|
</svg>
|
|
155
157
|
<lr-live-region part="live-region"></lr-live-region>
|
|
156
158
|
${this.description?html`<p part="description" id=${this.descriptionId} class="sr-only">${this.description}</p>`:nothing}
|
|
@@ -14,9 +14,10 @@ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from
|
|
|
14
14
|
* an arbitrary slotted message even means (plain text? the rendered
|
|
15
15
|
* markdown source? something else?) is exactly the kind of content
|
|
16
16
|
* interpretation this shell deliberately stays out of — slot a copy control
|
|
17
|
-
* into `actions` instead.
|
|
18
|
-
*
|
|
19
|
-
*
|
|
17
|
+
* into `actions` instead. Compose `<lr-copy-button>` with the intended source
|
|
18
|
+
* text, or emit `lr-copy` from a custom control only after its clipboard write
|
|
19
|
+
* fulfills, with frozen `detail: { ok: true, text }`. This matches the success
|
|
20
|
+
* contract used by copy controls across the conversation surface.
|
|
20
21
|
*
|
|
21
22
|
* Accessibility of `status`: the current status is always available as
|
|
22
23
|
* plain visible text (`[part="status-text"]`), never color alone. A
|
|
@@ -90,7 +90,7 @@ export declare class LyraCodeBlockCore extends LyraElement<LyraCodeBlockCoreEven
|
|
|
90
90
|
* in-place mutation of a caller's grammar object can never silently change what this instance
|
|
91
91
|
* has already handed to `loadShikiHighlighterCore()`. */
|
|
92
92
|
protected static readonly ownedCollectionProperties:readonly string[];static styles:import("lit").CSSResultGroup[];
|
|
93
|
-
/** The raw source text. */
|
|
93
|
+
/** The raw source text. Removing the attribute renders an empty code block. */
|
|
94
94
|
code:string;
|
|
95
95
|
/** A shiki-recognized language id or alias (e.g. `"javascript"`,
|
|
96
96
|
* `"python"`, `"json"`). When unset, or when it isn't a key in
|
|
@@ -113,10 +113,11 @@ copyable:boolean;
|
|
|
113
113
|
/** A CSS length (e.g. `"20rem"`); once set, the code scrolls internally
|
|
114
114
|
* past this height instead of growing the page. */
|
|
115
115
|
maxHeight:string;
|
|
116
|
-
/** Whether to display one-based line numbers beside the code.
|
|
116
|
+
/** Whether to display one-based line numbers beside the code. Highlighted gutters
|
|
117
|
+
* follow live locale and line-label string changes. */
|
|
117
118
|
lineNumbers:boolean;
|
|
118
119
|
/** Comma-separated 1-based inclusive line ranges (e.g. `"3-5,7"`) to visually emphasize.
|
|
119
|
-
* Declarative sugar over `highlights` — merges with, and renders identically to, any
|
|
120
|
+
* Removing the attribute clears these ranges. Declarative sugar over `highlights` — merges with, and renders identically to, any
|
|
120
121
|
* `line-range` entries in `highlights`. */
|
|
121
122
|
highlightLines:string;
|
|
122
123
|
/** Turns the (`line-numbers`-gated) gutter into a roving-tabindex group of buttons emitting
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{ThemeWatcher}from"../../../internal/theme-watcher.js";import{snapshotLyraHighlights}from"../../../internal/highlight-collection.js";import{loadShikiHighlighterCore,normalizeShikiLanguage}from"./shiki-types.js";import{styles}from"./code-block.styles.js";import{CodeBlockInteractionController,applyCodeBlockAriaBusy,clampCodeBlockFocusedLine,codeBlockActiveHighlightLineSet,codeBlockLineHasFocus,codeBlockLineCount,codeBlockLineHighlightSet,codeBlockNeedsHighlightResync,codeBlockPreSuppliedGrammar,codeBlockShowsSkeleton,renderCodeBlockPlainCode,renderCodeBlockShell,restoreCodeBlockLineFocus,scrollCodeBlockToAnchor,tokenizeCodeBlock}from"./code-block-shared.js";import"../../overlays/skeleton/skeleton.class.js";import{presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LYRA_DEFAULT_codeBlockLineLabel,LYRA_DEFAULT_codeRegion,LYRA_DEFAULT_codeRegionWithLanguage,LYRA_DEFAULT_collapseCode,LYRA_DEFAULT_copied,LYRA_DEFAULT_copiedToClipboard,LYRA_DEFAULT_copy,LYRA_DEFAULT_copyCode,LYRA_DEFAULT_copyFailed,LYRA_DEFAULT_expandCode}from"../../../internal/default-strings.generated.js";class LyraCodeBlockCore extends LyraElement{static{this.defaultStrings={...super.defaultStrings,codeBlockLineLabel:LYRA_DEFAULT_codeBlockLineLabel,codeRegion:LYRA_DEFAULT_codeRegion,codeRegionWithLanguage:LYRA_DEFAULT_codeRegionWithLanguage,collapseCode:LYRA_DEFAULT_collapseCode,copied:LYRA_DEFAULT_copied,copiedToClipboard:LYRA_DEFAULT_copiedToClipboard,copy:LYRA_DEFAULT_copy,copyCode:LYRA_DEFAULT_copyCode,copyFailed:LYRA_DEFAULT_copyFailed,expandCode:LYRA_DEFAULT_expandCode}}static{this.immutableEventDetails=Object.freeze(["lr-text-select"])}static{this.ownedCollectionProperties=Object.freeze(["languages"])}static{this.styles=[LyraElement.styles,styles]}get highlights(){return this._highlights}set highlights(value){const previous=this._highlights;this._highlights=snapshotLyraHighlights(value),this.requestUpdate("highlights",previous)}constructor(){super(),this.code="",this.language="",this.filename="",this.accessibleLabel=null,this.collapsible=!1,this.collapsed=!1,this.copyable=!0,this.maxHeight="",this.lineNumbers=!1,this.highlightLines="",this.activatableLines=!1,this._highlights=snapshotLyraHighlights([]),this.activeHighlightId=null,this.anchorKinds=["line-range"],this.focusedLine=1,this.restoreFocusedLineAfterUpdate=!1,this.languages={},this.highlightedHtml=null,this.shikiReady=!1,this.justCopied=!1,this.copyFailed=!1,this.isDarkTheme=!1,this.interactions=new CodeBlockInteractionController({host:this,setFocusedLine:line=>{this.focusedLine=line},setJustCopied:value=>{this.justCopied=value},setCopyFailed:value=>{this.copyFailed=value},setDarkTheme:value=>{this.isDarkTheme=value},emitLineActivate:line=>this.emit("lr-line-activate",{line}),emitCopy:outcome=>this.emit("lr-copy",outcome),emitError:()=>this.emit("lr-error",null),emitCopyError:outcome=>this.emit("lr-copy-error",outcome),requestToggle:collapsed=>!this.emit("lr-toggle-request",{collapsed},{cancelable:!0}).defaultPrevented,emitToggle:collapsed=>this.emit("lr-toggle",{collapsed}),emitTextSelect:selection=>this.emit("lr-text-select",selection)}),this.highlightToken=0,this.highlighterGeneration=0,this.bodyId=nextId("code-block-body"),new ThemeWatcher(this,()=>this.refreshTheme())}connectedCallback(){super.connectedCallback(),this.refreshTheme();const languages=this.languages,generation=this.activateLanguages(languages);Object.keys(languages).length!==0&&loadShikiHighlighterCore(languages).then(()=>{!this.isConnected||generation!==this.highlighterGeneration||languages!==this.languages||(this.shikiReady=!0,this.syncHighlight())})}disconnectedCallback(){super.disconnectedCallback(),this.interactions.disconnect(),this.activeLanguages=void 0,this.highlighterGeneration+=1,this.highlightToken+=1,this.shikiReady=!1,this.highlightedHtml=null}adoptedCallback(){super.adoptedCallback(),this.interactions.disconnect()}preSuppliedGrammar(){return codeBlockPreSuppliedGrammar(this.languages,this.language)}lineHighlightSet(){return codeBlockLineHighlightSet(this.highlightLines,this.highlights,this.lineCount())}activeHighlightLineSet(){return codeBlockActiveHighlightLineSet(this.highlights,this.activeHighlightId,this.lineCount())}lineCount(){return codeBlockLineCount(this.code)}async scrollToAnchor(target){return scrollCodeBlockToAnchor(this,target)}refreshTheme(){this.interactions.refreshTheme()}willUpdate(changed){super.willUpdate(changed),this.restoreFocusedLineAfterUpdate=codeBlockLineHasFocus(this),changed.has("code")&&(this.focusedLine=clampCodeBlockFocusedLine(this.focusedLine,this.lineCount())),changed.has("languages")&&this.activateLanguages(this.languages),codeBlockNeedsHighlightResync(changed)&&(this.shikiReady||this.preSuppliedGrammar()?this.syncHighlight():this.highlightedHtml=null)}updated(changed){super.updated(changed),applyCodeBlockAriaBusy(this,this.showsSkeleton()),this.restoreFocusedLineAfterUpdate&&(restoreCodeBlockLineFocus(this,this.focusedLine),this.restoreFocusedLineAfterUpdate=!1)}showsSkeleton(){return codeBlockShowsSkeleton(this.shikiReady,this.language,!!this.preSuppliedGrammar())}activateLanguages(languages){return this.activeLanguages===languages?this.highlighterGeneration:(this.activeLanguages=languages,this.highlighterGeneration+=1,this.highlightToken+=1,this.shikiReady=!1,this.highlightedHtml=null,this.highlighterGeneration)}syncHighlight(){const languages=this.languages,generation=this.activateLanguages(languages),token=++this.highlightToken,lang=normalizeShikiLanguage(this.language);if(!lang){this.highlightedHtml=null;return}if(!languages?.[lang]&&!languages?.[this.language]){this.highlightedHtml=null;return}this.highlightedHtml=null,loadShikiHighlighterCore(languages).then(hl=>{token===this.highlightToken&&(generation!==this.highlighterGeneration||languages!==this.languages||this.isConnected&&(this.shikiReady=!0,this.highlightedHtml=hl?this.tokenize(hl,lang):null))})}tokenize(hl,lang){return tokenizeCodeBlock(hl,{code:this.code,lang,lineNumbers:this.lineNumbers,activatableLines:this.activatableLines,focusedLine:this.focusedLine,highlightedLines:this.lineHighlightSet(),activeLines:this.activeHighlightLineSet(),lineLabel:line=>this.localize("codeBlockLineLabel",void 0,{line:getNumberFormat(this.effectiveLocale).format(line)}),lineNumberText:line=>getNumberFormat(this.effectiveLocale).format(line)})}renderPlainCode(){return renderCodeBlockPlainCode({code:this.code,lineNumbers:this.lineNumbers,activatableLines:this.activatableLines,focusedLine:this.focusedLine,highlightedLines:this.lineHighlightSet(),activeLines:this.activeHighlightLineSet(),localize:this.localize.bind(this),lineLabel:line=>this.localize("codeBlockLineLabel",void 0,{line:getNumberFormat(this.effectiveLocale).format(line)}),lineNumberText:line=>getNumberFormat(this.effectiveLocale).format(line),onLineActivate:line=>this.interactions.onLineActivate(line),onLineKeyDown:(e,line)=>this.interactions.onLineKeyDown(e,line)})}render(){return renderCodeBlockShell({filename:this.filename,language:this.language,copyable:this.copyable,collapsible:this.collapsible,collapsed:this.collapsed,justCopied:this.justCopied,copyFailed:this.copyFailed,bodyId:this.bodyId,accessibleLabel:this.accessibleLabel,maxHeight:this.maxHeight,isDarkTheme:this.isDarkTheme,showSkeleton:this.showsSkeleton(),highlightedHtml:this.highlightedHtml,lineNumbers:this.lineNumbers,localize:this.localize.bind(this),renderPlainCode:()=>this.renderPlainCode(),onToggle:this.interactions.toggleCollapsed,onCopy:this.interactions.copy,onBodyMouseUp:this.interactions.onBodyMouseUp,onBodyClick:this.interactions.onBodyClick,onBodyKeyDown:this.interactions.onBodyKeyDown,onBodyFocusIn:this.interactions.onBodyFocusIn})}}__decorate([property()],LyraCodeBlockCore.prototype,"code",void 0),__decorate([property()],LyraCodeBlockCore.prototype,"language",void 0),__decorate([property()],LyraCodeBlockCore.prototype,"filename",void 0),__decorate([property({attribute:"aria-label"})],LyraCodeBlockCore.prototype,"accessibleLabel",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraCodeBlockCore.prototype,"collapsible",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraCodeBlockCore.prototype,"collapsed",void 0),__decorate([property({type:Boolean,reflect:!0,converter:trueDefaultBooleanConverter})],LyraCodeBlockCore.prototype,"copyable",void 0),__decorate([property({attribute:"max-height"})],LyraCodeBlockCore.prototype,"maxHeight",void 0),__decorate([property({type:Boolean,attribute:"line-numbers",reflect:!0})],LyraCodeBlockCore.prototype,"lineNumbers",void 0),__decorate([property({attribute:"highlight-lines"})],LyraCodeBlockCore.prototype,"highlightLines",void 0),__decorate([property({type:Boolean,attribute:"activatable-lines"})],LyraCodeBlockCore.prototype,"activatableLines",void 0),__decorate([property({attribute:!1})],LyraCodeBlockCore.prototype,"highlights",null),__decorate([property({attribute:"active-highlight-id"})],LyraCodeBlockCore.prototype,"activeHighlightId",void 0),__decorate([state()],LyraCodeBlockCore.prototype,"focusedLine",void 0),__decorate([property({attribute:!1})],LyraCodeBlockCore.prototype,"languages",void 0),__decorate([state()],LyraCodeBlockCore.prototype,"highlightedHtml",void 0),__decorate([state()],LyraCodeBlockCore.prototype,"shikiReady",void 0),__decorate([state()],LyraCodeBlockCore.prototype,"justCopied",void 0),__decorate([state()],LyraCodeBlockCore.prototype,"copyFailed",void 0),__decorate([state()],LyraCodeBlockCore.prototype,"isDarkTheme",void 0);export{LyraCodeBlockCore};
|
|
1
|
+
var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{ThemeWatcher}from"../../../internal/theme-watcher.js";import{snapshotLyraHighlights}from"../../../internal/highlight-collection.js";import{loadShikiHighlighterCore,normalizeShikiLanguage}from"./shiki-types.js";import{styles}from"./code-block.styles.js";import{CodeBlockInteractionController,applyCodeBlockAriaBusy,clampCodeBlockFocusedLine,codeBlockActiveHighlightLineSet,codeBlockLineHasFocus,codeBlockLineCount,codeBlockLineHighlightSet,codeBlockPreSuppliedGrammar,codeBlockShowsSkeleton,renderCodeBlockPlainCode,renderCodeBlockShell,restoreCodeBlockLineFocus,scrollCodeBlockToAnchor,tokenizeCodeBlock}from"./code-block-shared.js";import"../../overlays/skeleton/skeleton.class.js";import{presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LYRA_DEFAULT_codeBlockLineLabel,LYRA_DEFAULT_codeRegion,LYRA_DEFAULT_codeRegionWithLanguage,LYRA_DEFAULT_collapseCode,LYRA_DEFAULT_copied,LYRA_DEFAULT_copiedToClipboard,LYRA_DEFAULT_copy,LYRA_DEFAULT_copyCode,LYRA_DEFAULT_copyFailed,LYRA_DEFAULT_expandCode}from"../../../internal/default-strings.generated.js";class LyraCodeBlockCore extends LyraElement{static{this.defaultStrings={...super.defaultStrings,codeBlockLineLabel:LYRA_DEFAULT_codeBlockLineLabel,codeRegion:LYRA_DEFAULT_codeRegion,codeRegionWithLanguage:LYRA_DEFAULT_codeRegionWithLanguage,collapseCode:LYRA_DEFAULT_collapseCode,copied:LYRA_DEFAULT_copied,copiedToClipboard:LYRA_DEFAULT_copiedToClipboard,copy:LYRA_DEFAULT_copy,copyCode:LYRA_DEFAULT_copyCode,copyFailed:LYRA_DEFAULT_copyFailed,expandCode:LYRA_DEFAULT_expandCode}}static{this.immutableEventDetails=Object.freeze(["lr-text-select"])}static{this.ownedCollectionProperties=Object.freeze(["languages"])}static{this.styles=[LyraElement.styles,styles]}get highlights(){return this._highlights}set highlights(value){const previous=this._highlights;this._highlights=snapshotLyraHighlights(value),this.requestUpdate("highlights",previous)}constructor(){super(),this.code="",this.language="",this.filename="",this.accessibleLabel=null,this.collapsible=!1,this.collapsed=!1,this.copyable=!0,this.maxHeight="",this.lineNumbers=!1,this.highlightLines="",this.activatableLines=!1,this._highlights=snapshotLyraHighlights([]),this.activeHighlightId=null,this.anchorKinds=["line-range"],this.focusedLine=1,this.restoreFocusedLineAfterUpdate=!1,this.languages={},this.highlightedHtml=null,this.shikiReady=!1,this.justCopied=!1,this.copyFailed=!1,this.isDarkTheme=!1,this.interactions=new CodeBlockInteractionController({host:this,setFocusedLine:line=>{this.focusedLine=line},setJustCopied:value=>{this.justCopied=value},setCopyFailed:value=>{this.copyFailed=value},setDarkTheme:value=>{this.isDarkTheme=value},emitLineActivate:line=>this.emit("lr-line-activate",{line}),emitCopy:outcome=>this.emit("lr-copy",outcome),emitError:()=>this.emit("lr-error",null),emitCopyError:outcome=>this.emit("lr-copy-error",outcome),requestToggle:collapsed=>!this.emit("lr-toggle-request",{collapsed},{cancelable:!0}).defaultPrevented,emitToggle:collapsed=>this.emit("lr-toggle",{collapsed}),emitTextSelect:selection=>this.emit("lr-text-select",selection)}),this.highlightToken=0,this.highlighterGeneration=0,this.bodyId=nextId("code-block-body"),new ThemeWatcher(this,()=>this.refreshTheme())}connectedCallback(){super.connectedCallback(),this.refreshTheme();const languages=this.languages,generation=this.activateLanguages(languages);Object.keys(languages).length!==0&&loadShikiHighlighterCore(languages).then(()=>{!this.isConnected||generation!==this.highlighterGeneration||languages!==this.languages||(this.shikiReady=!0,this.syncHighlight())})}disconnectedCallback(){super.disconnectedCallback(),this.interactions.disconnect(),this.activeLanguages=void 0,this.highlighterGeneration+=1,this.highlightToken+=1,this.shikiReady=!1,this.highlightedHtml=null}adoptedCallback(){super.adoptedCallback(),this.interactions.disconnect()}preSuppliedGrammar(){return codeBlockPreSuppliedGrammar(this.languages,this.language??"")}lineHighlightSet(){return codeBlockLineHighlightSet(this.highlightLines??"",this.highlights,this.lineCount())}activeHighlightLineSet(){return codeBlockActiveHighlightLineSet(this.highlights,this.activeHighlightId,this.lineCount())}lineCount(){return codeBlockLineCount(this.code??"")}async scrollToAnchor(target){return scrollCodeBlockToAnchor(this,target)}refreshTheme(){this.interactions.refreshTheme()}willUpdate(changed){super.willUpdate(changed),this.restoreFocusedLineAfterUpdate=codeBlockLineHasFocus(this),changed.has("code")&&(this.focusedLine=clampCodeBlockFocusedLine(this.focusedLine,this.lineCount())),changed.has("languages")&&this.activateLanguages(this.languages),this.interactions.needsHighlightResync(changed,this.effectiveLocale,this.localize("codeBlockLineLabel"))&&(this.shikiReady||this.preSuppliedGrammar()?this.syncHighlight():this.highlightedHtml=null)}updated(changed){super.updated(changed),applyCodeBlockAriaBusy(this,this.showsSkeleton()),this.restoreFocusedLineAfterUpdate&&(restoreCodeBlockLineFocus(this,this.focusedLine),this.restoreFocusedLineAfterUpdate=!1)}showsSkeleton(){return codeBlockShowsSkeleton(this.shikiReady,this.language,!!this.preSuppliedGrammar())}activateLanguages(languages){return this.activeLanguages===languages?this.highlighterGeneration:(this.activeLanguages=languages,this.highlighterGeneration+=1,this.highlightToken+=1,this.shikiReady=!1,this.highlightedHtml=null,this.highlighterGeneration)}syncHighlight(){const languages=this.languages,generation=this.activateLanguages(languages),token=++this.highlightToken,lang=normalizeShikiLanguage(this.language??"");if(!lang){this.highlightedHtml=null;return}if(!languages?.[lang]&&!languages?.[this.language]){this.highlightedHtml=null;return}this.highlightedHtml=null,loadShikiHighlighterCore(languages).then(hl=>{token===this.highlightToken&&(generation!==this.highlighterGeneration||languages!==this.languages||this.isConnected&&(this.shikiReady=!0,this.highlightedHtml=hl?this.tokenize(hl,lang):null))})}tokenize(hl,lang){return tokenizeCodeBlock(hl,{code:this.code??"",lang,lineNumbers:this.lineNumbers,activatableLines:this.activatableLines,focusedLine:this.focusedLine,highlightedLines:this.lineHighlightSet(),activeLines:this.activeHighlightLineSet(),lineLabel:line=>this.localize("codeBlockLineLabel",void 0,{line:getNumberFormat(this.effectiveLocale).format(line)}),lineNumberText:line=>getNumberFormat(this.effectiveLocale).format(line)})}renderPlainCode(){return renderCodeBlockPlainCode({code:this.code??"",lineNumbers:this.lineNumbers,activatableLines:this.activatableLines,focusedLine:this.focusedLine,highlightedLines:this.lineHighlightSet(),activeLines:this.activeHighlightLineSet(),localize:this.localize.bind(this),lineLabel:line=>this.localize("codeBlockLineLabel",void 0,{line:getNumberFormat(this.effectiveLocale).format(line)}),lineNumberText:line=>getNumberFormat(this.effectiveLocale).format(line),onLineActivate:line=>this.interactions.onLineActivate(line),onLineKeyDown:(e,line)=>this.interactions.onLineKeyDown(e,line)})}render(){return renderCodeBlockShell({filename:this.filename,language:this.language,copyable:this.copyable,collapsible:this.collapsible,collapsed:this.collapsed,justCopied:this.justCopied,copyFailed:this.copyFailed,bodyId:this.bodyId,accessibleLabel:this.accessibleLabel,maxHeight:this.maxHeight,isDarkTheme:this.isDarkTheme,showSkeleton:this.showsSkeleton(),highlightedHtml:this.highlightedHtml,lineNumbers:this.lineNumbers,localize:this.localize.bind(this),renderPlainCode:()=>this.renderPlainCode(),onToggle:this.interactions.toggleCollapsed,onCopy:this.interactions.copy,onBodyMouseUp:this.interactions.onBodyMouseUp,onBodyClick:this.interactions.onBodyClick,onBodyKeyDown:this.interactions.onBodyKeyDown,onBodyFocusIn:this.interactions.onBodyFocusIn})}}__decorate([property()],LyraCodeBlockCore.prototype,"code",void 0),__decorate([property()],LyraCodeBlockCore.prototype,"language",void 0),__decorate([property()],LyraCodeBlockCore.prototype,"filename",void 0),__decorate([property({attribute:"aria-label"})],LyraCodeBlockCore.prototype,"accessibleLabel",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraCodeBlockCore.prototype,"collapsible",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraCodeBlockCore.prototype,"collapsed",void 0),__decorate([property({type:Boolean,reflect:!0,converter:trueDefaultBooleanConverter})],LyraCodeBlockCore.prototype,"copyable",void 0),__decorate([property({attribute:"max-height"})],LyraCodeBlockCore.prototype,"maxHeight",void 0),__decorate([property({type:Boolean,attribute:"line-numbers",reflect:!0})],LyraCodeBlockCore.prototype,"lineNumbers",void 0),__decorate([property({attribute:"highlight-lines"})],LyraCodeBlockCore.prototype,"highlightLines",void 0),__decorate([property({type:Boolean,attribute:"activatable-lines"})],LyraCodeBlockCore.prototype,"activatableLines",void 0),__decorate([property({attribute:!1})],LyraCodeBlockCore.prototype,"highlights",null),__decorate([property({attribute:"active-highlight-id"})],LyraCodeBlockCore.prototype,"activeHighlightId",void 0),__decorate([state()],LyraCodeBlockCore.prototype,"focusedLine",void 0),__decorate([property({attribute:!1})],LyraCodeBlockCore.prototype,"languages",void 0),__decorate([state()],LyraCodeBlockCore.prototype,"highlightedHtml",void 0),__decorate([state()],LyraCodeBlockCore.prototype,"shikiReady",void 0),__decorate([state()],LyraCodeBlockCore.prototype,"justCopied",void 0),__decorate([state()],LyraCodeBlockCore.prototype,"copyFailed",void 0),__decorate([state()],LyraCodeBlockCore.prototype,"isDarkTheme",void 0);export{LyraCodeBlockCore};
|
|
@@ -53,8 +53,6 @@ export declare function scrollCodeBlockToAnchor(host:CodeBlockAnchorHost,target:
|
|
|
53
53
|
export declare function codeBlockEventLine(e:Event):number|null;
|
|
54
54
|
/** An `lr-text-select` payload for a selection ending inside `[part="body"]`. */
|
|
55
55
|
interface CodeBlockSelection{readonly text:string;readonly anchor:LyraAnchor;readonly rects:readonly TextSelectRect[];}
|
|
56
|
-
/** Every property whose change invalidates the cached `highlightedHtml`. */
|
|
57
|
-
export declare function codeBlockNeedsHighlightResync(changed:PropertyValues):boolean;
|
|
58
56
|
/**
|
|
59
57
|
* Whether the `<lr-skeleton>` placeholder stands in for the code this render. Both components gate
|
|
60
58
|
* it on "a highlighter this instance is actually waiting for hasn't settled yet, and there's a
|
|
@@ -146,7 +144,9 @@ export interface CodeBlockInteractionOptions{host:CodeBlockInteractionHost;setFo
|
|
|
146
144
|
* rendered stay as each component's own `@state()`, written through the callbacks above so Lit
|
|
147
145
|
* still sees them change.
|
|
148
146
|
*/
|
|
149
|
-
export declare class CodeBlockInteractionController{private readonly options;private copyTimer?;private copyGeneration;
|
|
147
|
+
export declare class CodeBlockInteractionController{private readonly options;private copyTimer?;private copyGeneration;private highlightedLocale?;private highlightedLineLabel?;
|
|
148
|
+
/** Localized gutter markup is cached with the effective catalog label and number locale. */
|
|
149
|
+
needsHighlightResync(changed:PropertyValues,locale:string,lineLabel:string):boolean;constructor(options:CodeBlockInteractionOptions);
|
|
150
150
|
/** Re-resolves token colors after an imperative CSSOM/adopted-stylesheet theme change. */
|
|
151
151
|
refreshTheme():void;
|
|
152
152
|
/** Retires an in-flight copy-confirmation timer against the window that scheduled it. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{html,nothing}from"lit";import{unsafeHTML}from"lit/directives/unsafe-html.js";import{activeElementIn}from"../../../internal/active-element.js";import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";import{chevronIcon}from"../../../internal/icons.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{styleMap}from"lit/directives/style-map.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{boundedSelectionRects,boundedSelectionText}from"../../../internal/text-quote.js";import{writeClipboardText}from"../../../internal/clipboard.js";import{normalizeShikiLanguage,SHIKI_THEMES}from"./shiki-types.js";import{resolveIsDarkTheme}from"./shiki-dark-theme.js";const INVALID_HIGHLIGHT_LINES_WARNING_KEY="lyra-code-block-invalid-highlight-lines",INVALID_HIGHLIGHT_LINES_WARNING="<lr-code-block> and <lr-code-block-core>: invalid highlight-lines entries are ignored; use one-based line numbers or ranges such as `3-5,7`.";function codeBlockToggleLabel(localize,collapsed){return localize(collapsed?"expandCode":"collapseCode")}function codeBlockCopyLabel(localize,justCopied,copyFailed){return localize(copyFailed?"copyFailed":justCopied?"copiedToClipboard":"copyCode")}function codeBlockBodyLabel(localize,filename,language){return filename||(language?localize("codeRegionWithLanguage",void 0,{language}):localize("codeRegion"))}function addBoundedLineRange(lines,start,end,maxLine){if(!Number.isFinite(start)||!Number.isFinite(end)||maxLine<1)return;const low=Math.max(1,Math.min(Math.trunc(start),Math.trunc(end))),high=Math.min(Math.trunc(maxLine),Math.max(Math.trunc(start),Math.trunc(end)));for(let line=low;line<=high;line++)lines.add(line)}const CODE_BLOCK_COPY_CONFIRM_MS=1500;function codeBlockLineCount(code){return code.split(/\r\n|\r|\n/).length}function clampCodeBlockFocusedLine(focusedLine,lineCount){return Math.min(Math.max(1,focusedLine),lineCount)}function codeBlockLineHasFocus(host){return activeElementIn(host.shadowRoot)?.matches('[data-line][part~="line-button"]')??!1}function restoreCodeBlockLineFocus(host,line){const shadowActive=activeElementIn(host.shadowRoot);if(shadowActive)return shadowActive.matches('[data-line][part~="line-button"]');const documentActive=activeElementIn(host.ownerDocument);if(documentActive&&documentActive!==host.ownerDocument.body&&documentActive!==host)return!1;const target=host.renderRoot.querySelector(`[data-line="${line}"][part~="line-button"]`);return target?.focus(),activeElementIn(host.shadowRoot)===target}function codeBlockLineHighlightSet(highlightLines,highlights,maxLine){const merged=parseHighlightLines(highlightLines,maxLine);if(!Array.isArray(highlights))return merged;for(const highlight of highlights){const anchor=lineRangeAnchor(highlight);if(!anchor)continue;const end=anchor.end??anchor.start;addBoundedLineRange(merged,anchor.start,end,maxLine)}return merged}function lineRangeAnchor(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const anchor=value.anchor;return anchor===null||typeof anchor!="object"||Array.isArray(anchor)?void 0:anchor.kind==="line-range"?anchor:void 0}catch{return}}function lineRangeAnchorById(highlights,id){if(Array.isArray(highlights))for(const highlight of highlights)try{if(highlight!==null&&typeof highlight=="object"&&highlight.id===id){const anchor=lineRangeAnchor(highlight);if(anchor)return anchor}}catch{}}function codeBlockActiveHighlightLineSet(highlights,activeHighlightId,maxLine){const result=new Set,anchor=lineRangeAnchorById(highlights,activeHighlightId);if(!anchor)return result;const end=anchor.end??anchor.start;return addBoundedLineRange(result,anchor.start,end,maxLine),result}function codeBlockPreSuppliedGrammar(languages,language){const normalized=normalizeShikiLanguage(language);return languages?.[normalized]??languages?.[language]}async function scrollCodeBlockToAnchor(host,target){const anchor=typeof target=="string"?lineRangeAnchorById(host.highlights,target):target;if(!anchor||anchor.kind!=="line-range"||anchor.start<1||anchor.start>codeBlockLineCount(host.code))return!1;await host.updateComplete;const body=host.renderRoot.querySelector('[part="body"]'),lineEl=host.renderRoot.querySelector(`[data-line="${anchor.start}"]`);if(!body||!lineEl)return!1;const offset=lineEl.offsetTop-body.clientHeight/2,ownerWindow=body.ownerDocument.defaultView,reducedMotion=!ownerWindow||prefersReducedMotion(ownerWindow);return body.scrollTo({top:Math.max(0,offset),behavior:reducedMotion?"auto":"smooth"}),!0}function codeBlockEventLine(e){const target=e.composedPath()[0];if(typeof target!="object"||target===null||target.nodeType!==1||typeof target.localName!="string"||typeof target.closest!="function")return null;const lineElement=target.closest('[data-line][part~="line-button"]'),line=Number(lineElement?.dataset.line);return Number.isInteger(line)&&line>=1?line:null}function codeBlockLineKeyAction(key,line,total){if(key==="Enter"||key===" ")return{kind:"activate"};let next=null;return key==="ArrowDown"?next=Math.min(total,line+1):key==="ArrowUp"?next=Math.max(1,line-1):key==="Home"?next=1:key==="End"&&(next=total),next===null||next===line?null:{kind:"move",line:next}}function codeBlockSelectionAnchor(shadowRoot){if(!shadowRoot)return null;const ownerDocument=shadowRoot.ownerDocument,globalSelection=ownerDocument.defaultView?.getSelection();let range=null;if(globalSelection?.getComposedRanges){const[composed]=globalSelection.getComposedRanges({shadowRoots:[shadowRoot]});composed&&(composed.startContainer!==composed.endContainer||composed.startOffset!==composed.endOffset)&&(range=ownerDocument.createRange(),range.setStart(composed.startContainer,composed.startOffset),range.setEnd(composed.endContainer,composed.endOffset))}const selection=shadowRoot.getSelection?.()??globalSelection;if(!range){if(!selection||selection.isCollapsed||selection.rangeCount===0)return null;range=selection.getRangeAt(0)}const text=boundedSelectionText(range);if(!text)return null;const lineOf=node=>{const attr=(node.nodeType===Node.ELEMENT_NODE?node:node.parentElement)?.closest("[data-line]")?.getAttribute("data-line");return attr==null?null:Number(attr)},start=lineOf(range.startContainer),end=lineOf(range.endContainer);return start===null||end===null?null:{text,anchor:{kind:"line-range",start:Math.min(start,end),end:Math.max(start,end)},rects:boundedSelectionRects(range)}}function codeBlockNeedsHighlightResync(changed){return changed.has("code")||changed.has("language")||changed.has("languages")||changed.has("highlightLines")||changed.has("highlights")||changed.has("activeHighlightId")||changed.has("lineNumbers")||changed.has("activatableLines")}function codeBlockShowsSkeleton(shikiReady,language,loaderPending){return!shikiReady&&!!language&&loaderPending}function applyCodeBlockAriaBusy(host,showingSkeleton){showingSkeleton?host.setAttribute("aria-busy","true"):host.removeAttribute("aria-busy")}function tokenizeCodeBlock(hl,options){try{return hl.codeToHtml(options.code,{lang:options.lang,themes:SHIKI_THEMES,transformers:[codeBlockLineTransformer(options)]})}catch{return null}}function parseHighlightLines(spec,maxLine=Number.MAX_SAFE_INTEGER){const lines=new Set;for(const raw of spec.split(",")){const segment=raw.trim();if(!segment)continue;const rangeMatch=/^(\d+)\s*-\s*(\d+)$/.exec(segment);if(rangeMatch){const a=Number(rangeMatch[1]),b=Number(rangeMatch[2]);addBoundedLineRange(lines,a,b,maxLine);continue}const single=/^(\d+)$/.exec(segment);if(single){addBoundedLineRange(lines,Number(single[1]),Number(single[1]),maxLine);continue}devWarnOnce(INVALID_HIGHLIGHT_LINES_WARNING_KEY,INVALID_HIGHLIGHT_LINES_WARNING)}return lines}function codeBlockLineTransformer(options){return{name:"lr-code-block-parts",pre(node){if(node.properties.part=["pre"],options.lineNumbers){const classValue=node.properties.class,classes=Array.isArray(classValue)?classValue.map(String):classValue?[String(classValue)]:[];node.properties.class=[...classes,"line-numbers"]}delete node.properties.tabindex},code(node){node.properties.part=["code"]},line(node,line){node.properties["data-line"]=String(line);const parts=[],contentNode=node,children=contentNode.children??[];contentNode.children=children;let gutter;options.activatableLines&&options.lineNumbers?gutter={type:"element",tagName:"button",properties:{type:"button",class:["line-gutter"],part:["line-button"],"data-line":String(line),tabindex:String(options.focusedLine===line?0:-1),"aria-label":options.lineLabel(line)},children:[{type:"text",value:options.lineNumberText(line)}]}:options.lineNumbers&&(gutter={type:"element",tagName:"span",properties:{class:["line-number"],"aria-hidden":"true"},children:[{type:"text",value:options.lineNumberText(line)}]});const source={type:"element",tagName:"span",properties:{class:["line-source"]},children:[...children]};children.splice(0,children.length,...gutter?[gutter,source]:[source]),options.highlightedLines.has(line)&&(parts.push("line-highlight"),node.properties["data-highlighted"]=""),parts.length>0&&(node.properties.part=parts),options.activeLines.has(line)&&(node.properties["data-active"]="")}}}function renderCodeBlockPlainCode(options){const lines=options.code.split(/\r\n|\r|\n/),interactive=options.activatableLines&&options.lineNumbers;return html`<code
|
|
1
|
+
import{html,nothing}from"lit";import{unsafeHTML}from"lit/directives/unsafe-html.js";import{activeElementIn}from"../../../internal/active-element.js";import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";import{chevronIcon}from"../../../internal/icons.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{styleMap}from"lit/directives/style-map.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{boundedSelectionRects,boundedSelectionText}from"../../../internal/text-quote.js";import{writeClipboardText}from"../../../internal/clipboard.js";import{normalizeShikiLanguage,SHIKI_THEMES}from"./shiki-types.js";import{resolveIsDarkTheme}from"./shiki-dark-theme.js";const INVALID_HIGHLIGHT_LINES_WARNING_KEY="lyra-code-block-invalid-highlight-lines",INVALID_HIGHLIGHT_LINES_WARNING="<lr-code-block> and <lr-code-block-core>: invalid highlight-lines entries are ignored; use one-based line numbers or ranges such as `3-5,7`.";function codeBlockToggleLabel(localize,collapsed){return localize(collapsed?"expandCode":"collapseCode")}function codeBlockCopyLabel(localize,justCopied,copyFailed){return localize(copyFailed?"copyFailed":justCopied?"copiedToClipboard":"copyCode")}function codeBlockBodyLabel(localize,filename,language){return filename||(language?localize("codeRegionWithLanguage",void 0,{language}):localize("codeRegion"))}function addBoundedLineRange(lines,start,end,maxLine){if(!Number.isFinite(start)||!Number.isFinite(end)||maxLine<1)return;const low=Math.max(1,Math.min(Math.trunc(start),Math.trunc(end))),high=Math.min(Math.trunc(maxLine),Math.max(Math.trunc(start),Math.trunc(end)));for(let line=low;line<=high;line++)lines.add(line)}const CODE_BLOCK_COPY_CONFIRM_MS=1500;function codeBlockLineCount(code){return code.split(/\r\n|\r|\n/).length}function clampCodeBlockFocusedLine(focusedLine,lineCount){return Math.min(Math.max(1,focusedLine),lineCount)}function codeBlockLineHasFocus(host){return activeElementIn(host.shadowRoot)?.matches('[data-line][part~="line-button"]')??!1}function restoreCodeBlockLineFocus(host,line){const shadowActive=activeElementIn(host.shadowRoot);if(shadowActive)return shadowActive.matches('[data-line][part~="line-button"]');const documentActive=activeElementIn(host.ownerDocument);if(documentActive&&documentActive!==host.ownerDocument.body&&documentActive!==host)return!1;const target=host.renderRoot.querySelector(`[data-line="${line}"][part~="line-button"]`);return target?.focus(),activeElementIn(host.shadowRoot)===target}function codeBlockLineHighlightSet(highlightLines,highlights,maxLine){const merged=parseHighlightLines(highlightLines,maxLine);if(!Array.isArray(highlights))return merged;for(const highlight of highlights){const anchor=lineRangeAnchor(highlight);if(!anchor)continue;const end=anchor.end??anchor.start;addBoundedLineRange(merged,anchor.start,end,maxLine)}return merged}function lineRangeAnchor(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const anchor=value.anchor;return anchor===null||typeof anchor!="object"||Array.isArray(anchor)?void 0:anchor.kind==="line-range"?anchor:void 0}catch{return}}function lineRangeAnchorById(highlights,id){if(Array.isArray(highlights))for(const highlight of highlights)try{if(highlight!==null&&typeof highlight=="object"&&highlight.id===id){const anchor=lineRangeAnchor(highlight);if(anchor)return anchor}}catch{}}function codeBlockActiveHighlightLineSet(highlights,activeHighlightId,maxLine){const result=new Set,anchor=lineRangeAnchorById(highlights,activeHighlightId);if(!anchor)return result;const end=anchor.end??anchor.start;return addBoundedLineRange(result,anchor.start,end,maxLine),result}function codeBlockPreSuppliedGrammar(languages,language){const normalized=normalizeShikiLanguage(language);return languages?.[normalized]??languages?.[language]}async function scrollCodeBlockToAnchor(host,target){const anchor=typeof target=="string"?lineRangeAnchorById(host.highlights,target):target;if(!anchor||anchor.kind!=="line-range"||anchor.start<1||anchor.start>codeBlockLineCount(host.code??""))return!1;await host.updateComplete;const body=host.renderRoot.querySelector('[part="body"]'),lineEl=host.renderRoot.querySelector(`[data-line="${anchor.start}"]`);if(!body||!lineEl)return!1;const offset=lineEl.offsetTop-body.clientHeight/2,ownerWindow=body.ownerDocument.defaultView,reducedMotion=!ownerWindow||prefersReducedMotion(ownerWindow);return body.scrollTo({top:Math.max(0,offset),behavior:reducedMotion?"auto":"smooth"}),!0}function codeBlockEventLine(e){const target=e.composedPath()[0];if(typeof target!="object"||target===null||target.nodeType!==1||typeof target.localName!="string"||typeof target.closest!="function")return null;const lineElement=target.closest('[data-line][part~="line-button"]'),line=Number(lineElement?.dataset.line);return Number.isInteger(line)&&line>=1?line:null}function codeBlockLineKeyAction(key,line,total){if(key==="Enter"||key===" ")return{kind:"activate"};let next=null;return key==="ArrowDown"?next=Math.min(total,line+1):key==="ArrowUp"?next=Math.max(1,line-1):key==="Home"?next=1:key==="End"&&(next=total),next===null||next===line?null:{kind:"move",line:next}}function codeBlockSelectionAnchor(shadowRoot){if(!shadowRoot)return null;const ownerDocument=shadowRoot.ownerDocument,globalSelection=ownerDocument.defaultView?.getSelection();let range=null;if(globalSelection?.getComposedRanges){const[composed]=globalSelection.getComposedRanges({shadowRoots:[shadowRoot]});composed&&(composed.startContainer!==composed.endContainer||composed.startOffset!==composed.endOffset)&&(range=ownerDocument.createRange(),range.setStart(composed.startContainer,composed.startOffset),range.setEnd(composed.endContainer,composed.endOffset))}const selection=shadowRoot.getSelection?.()??globalSelection;if(!range){if(!selection||selection.isCollapsed||selection.rangeCount===0)return null;range=selection.getRangeAt(0)}const text=boundedSelectionText(range);if(!text)return null;const lineOf=node=>{const attr=(node.nodeType===Node.ELEMENT_NODE?node:node.parentElement)?.closest("[data-line]")?.getAttribute("data-line");return attr==null?null:Number(attr)},start=lineOf(range.startContainer),end=lineOf(range.endContainer);return start===null||end===null?null:{text,anchor:{kind:"line-range",start:Math.min(start,end),end:Math.max(start,end)},rects:boundedSelectionRects(range)}}function codeBlockNeedsHighlightResync(changed){return changed.has("code")||changed.has("language")||changed.has("languages")||changed.has("highlightLines")||changed.has("highlights")||changed.has("activeHighlightId")||changed.has("lineNumbers")||changed.has("activatableLines")}function codeBlockShowsSkeleton(shikiReady,language,loaderPending){return!shikiReady&&!!language&&loaderPending}function applyCodeBlockAriaBusy(host,showingSkeleton){showingSkeleton?host.setAttribute("aria-busy","true"):host.removeAttribute("aria-busy")}function tokenizeCodeBlock(hl,options){try{return hl.codeToHtml(options.code,{lang:options.lang,themes:SHIKI_THEMES,transformers:[codeBlockLineTransformer(options)]})}catch{return null}}function parseHighlightLines(spec,maxLine=Number.MAX_SAFE_INTEGER){const lines=new Set;for(const raw of spec.split(",")){const segment=raw.trim();if(!segment)continue;const rangeMatch=/^(\d+)\s*-\s*(\d+)$/.exec(segment);if(rangeMatch){const a=Number(rangeMatch[1]),b=Number(rangeMatch[2]);addBoundedLineRange(lines,a,b,maxLine);continue}const single=/^(\d+)$/.exec(segment);if(single){addBoundedLineRange(lines,Number(single[1]),Number(single[1]),maxLine);continue}devWarnOnce(INVALID_HIGHLIGHT_LINES_WARNING_KEY,INVALID_HIGHLIGHT_LINES_WARNING)}return lines}function codeBlockLineTransformer(options){return{name:"lr-code-block-parts",pre(node){if(node.properties.part=["pre"],options.lineNumbers){const classValue=node.properties.class,classes=Array.isArray(classValue)?classValue.map(String):classValue?[String(classValue)]:[];node.properties.class=[...classes,"line-numbers"]}delete node.properties.tabindex},code(node){node.properties.part=["code"]},line(node,line){node.properties["data-line"]=String(line);const parts=[],contentNode=node,children=contentNode.children??[];contentNode.children=children;let gutter;options.activatableLines&&options.lineNumbers?gutter={type:"element",tagName:"button",properties:{type:"button",class:["line-gutter"],part:["line-button"],"data-line":String(line),tabindex:String(options.focusedLine===line?0:-1),"aria-label":options.lineLabel(line)},children:[{type:"text",value:options.lineNumberText(line)}]}:options.lineNumbers&&(gutter={type:"element",tagName:"span",properties:{class:["line-number"],"aria-hidden":"true"},children:[{type:"text",value:options.lineNumberText(line)}]});const source={type:"element",tagName:"span",properties:{class:["line-source"]},children:[...children]};children.splice(0,children.length,...gutter?[gutter,source]:[source]),options.highlightedLines.has(line)&&(parts.push("line-highlight"),node.properties["data-highlighted"]=""),parts.length>0&&(node.properties.part=parts),options.activeLines.has(line)&&(node.properties["data-active"]="")}}}function renderCodeBlockPlainCode(options){const lines=options.code.split(/\r\n|\r|\n/),interactive=options.activatableLines&&options.lineNumbers;return html`<code
|
|
2
2
|
part="code"
|
|
3
3
|
class=${options.lineNumbers?"line-numbered-code":nothing}
|
|
4
4
|
>${lines.map((line,index)=>{const lineNumber=index+1,isHighlighted=options.highlightedLines.has(lineNumber),isActive=options.activeLines.has(lineNumber),part=isHighlighted?"line-highlight":nothing,gutter=interactive?html`<button
|
|
@@ -71,4 +71,4 @@ import{html,nothing}from"lit";import{unsafeHTML}from"lit/directives/unsafe-html.
|
|
|
71
71
|
${options.showSkeleton?html`<lr-skeleton shape="rect" .announce=${!1}></lr-skeleton>`:options.highlightedHtml!==null?unsafeHTML(options.highlightedHtml):html`<pre part="pre" class=${options.lineNumbers?"line-numbers":nothing}>${options.renderPlainCode()}</pre>`}
|
|
72
72
|
</div>
|
|
73
73
|
</div>
|
|
74
|
-
`}class CodeBlockInteractionController{constructor(options){this.options=options,this.copyGeneration=0,this.onLineActivate=line=>{this.setFocusedLine(line),this.options.emitLineActivate(line)},this.onLineKeyDown=(e,line)=>{const{host}=this.options,action=codeBlockLineKeyAction(e.key,line,codeBlockLineCount(host.code));if(action===null)return;if(e.preventDefault(),action.kind==="activate"){this.onLineActivate(line);return}const next=action.line;this.setFocusedLine(next),host.updateComplete.then(()=>{host.renderRoot.querySelector(`[part~="line-button"][data-line="${next}"]`)?.focus()})},this.onBodyClick=e=>{if(e.composedPath()[0]?.closest?.("button[data-inline-handler]"))return;const line=codeBlockEventLine(e);line!==null&&this.onLineActivate(line)},this.onBodyKeyDown=e=>{if(e.composedPath()[0]?.closest?.("button[data-inline-handler]"))return;const line=codeBlockEventLine(e);line!==null&&this.onLineKeyDown(e,line)},this.onBodyFocusIn=e=>{const line=codeBlockEventLine(e);line!==null&&this.setFocusedLine(line)},this.onBodyMouseUp=()=>{const selection=codeBlockSelectionAnchor(this.options.host.shadowRoot);selection&&this.options.emitTextSelect(selection)},this.copy=async()=>{const{host}=this.options,owner=host.isConnected?host.ownerDocument.defaultView:null,text=host.code,generation=++this.copyGeneration;this.cancelCopyTimer(),this.setCopyStatus("rest");const outcome=await writeClipboardText(owner,text);if(!owner||!host.isConnected||host.ownerDocument.defaultView!==owner||generation!==this.copyGeneration)return;outcome.ok?(this.options.emitCopy(outcome),this.setCopyStatus("success")):(this.setCopyStatus("error"),this.options.emitError(),this.options.emitCopyError(outcome));let handle=0;handle=owner.setTimeout(()=>{this.copyTimer?.owner!==owner||this.copyTimer.handle!==handle||!host.isConnected||host.ownerDocument.defaultView!==owner||generation!==this.copyGeneration||(this.copyTimer=void 0,this.setCopyStatus("rest"))},CODE_BLOCK_COPY_CONFIRM_MS),this.copyTimer={owner,handle}},this.toggleCollapsed=()=>{const{host}=this.options,collapsed=!host.collapsed;this.options.requestToggle(collapsed)&&(host.collapsed=collapsed,this.options.emitToggle(host.collapsed))}}refreshTheme(){this.options.setDarkTheme(resolveIsDarkTheme(this.options.host))}cancelCopyTimer(){const timer=this.copyTimer;this.copyTimer=void 0,timer&&timer.owner.clearTimeout(timer.handle)}disconnect(){this.copyGeneration++,this.cancelCopyTimer(),this.options.setJustCopied(!1),this.options.setCopyFailed(!1)}setCopyStatus(status){this.options.setJustCopied(status==="success"),this.options.setCopyFailed(status==="error")}setFocusedLine(line){this.options.setFocusedLine(line);for(const target of this.options.host.renderRoot.querySelectorAll('[data-line][part~="line-button"]'))target.tabIndex=Number(target.dataset.line)===line?0:-1}}export{CodeBlockInteractionController,applyCodeBlockAriaBusy,clampCodeBlockFocusedLine,codeBlockActiveHighlightLineSet,codeBlockEventLine,codeBlockLineCount,codeBlockLineHasFocus,codeBlockLineHighlightSet,codeBlockLineTransformer,
|
|
74
|
+
`}class CodeBlockInteractionController{needsHighlightResync(changed,locale,lineLabel){const localizationChanged=this.highlightedLocale!==locale||this.highlightedLineLabel!==lineLabel;return this.highlightedLocale=locale,this.highlightedLineLabel=lineLabel,localizationChanged||codeBlockNeedsHighlightResync(changed)}constructor(options){this.options=options,this.copyGeneration=0,this.onLineActivate=line=>{this.setFocusedLine(line),this.options.emitLineActivate(line)},this.onLineKeyDown=(e,line)=>{const{host}=this.options,action=codeBlockLineKeyAction(e.key,line,codeBlockLineCount(host.code??""));if(action===null)return;if(e.preventDefault(),action.kind==="activate"){this.onLineActivate(line);return}const next=action.line;this.setFocusedLine(next),host.updateComplete.then(()=>{host.renderRoot.querySelector(`[part~="line-button"][data-line="${next}"]`)?.focus()})},this.onBodyClick=e=>{if(e.composedPath()[0]?.closest?.("button[data-inline-handler]"))return;const line=codeBlockEventLine(e);line!==null&&this.onLineActivate(line)},this.onBodyKeyDown=e=>{if(e.composedPath()[0]?.closest?.("button[data-inline-handler]"))return;const line=codeBlockEventLine(e);line!==null&&this.onLineKeyDown(e,line)},this.onBodyFocusIn=e=>{const line=codeBlockEventLine(e);line!==null&&this.setFocusedLine(line)},this.onBodyMouseUp=()=>{const selection=codeBlockSelectionAnchor(this.options.host.shadowRoot);selection&&this.options.emitTextSelect(selection)},this.copy=async()=>{const{host}=this.options,owner=host.isConnected?host.ownerDocument.defaultView:null,text=host.code??"",generation=++this.copyGeneration;this.cancelCopyTimer(),this.setCopyStatus("rest");const outcome=await writeClipboardText(owner,text);if(!owner||!host.isConnected||host.ownerDocument.defaultView!==owner||generation!==this.copyGeneration)return;outcome.ok?(this.options.emitCopy(outcome),this.setCopyStatus("success")):(this.setCopyStatus("error"),this.options.emitError(),this.options.emitCopyError(outcome));let handle=0;handle=owner.setTimeout(()=>{this.copyTimer?.owner!==owner||this.copyTimer.handle!==handle||!host.isConnected||host.ownerDocument.defaultView!==owner||generation!==this.copyGeneration||(this.copyTimer=void 0,this.setCopyStatus("rest"))},CODE_BLOCK_COPY_CONFIRM_MS),this.copyTimer={owner,handle}},this.toggleCollapsed=()=>{const{host}=this.options,collapsed=!host.collapsed;this.options.requestToggle(collapsed)&&(host.collapsed=collapsed,this.options.emitToggle(host.collapsed))}}refreshTheme(){this.options.setDarkTheme(resolveIsDarkTheme(this.options.host))}cancelCopyTimer(){const timer=this.copyTimer;this.copyTimer=void 0,timer&&timer.owner.clearTimeout(timer.handle)}disconnect(){this.copyGeneration++,this.cancelCopyTimer(),this.options.setJustCopied(!1),this.options.setCopyFailed(!1)}setCopyStatus(status){this.options.setJustCopied(status==="success"),this.options.setCopyFailed(status==="error")}setFocusedLine(line){this.options.setFocusedLine(line);for(const target of this.options.host.renderRoot.querySelectorAll('[data-line][part~="line-button"]'))target.tabIndex=Number(target.dataset.line)===line?0:-1}}export{CodeBlockInteractionController,applyCodeBlockAriaBusy,clampCodeBlockFocusedLine,codeBlockActiveHighlightLineSet,codeBlockEventLine,codeBlockLineCount,codeBlockLineHasFocus,codeBlockLineHighlightSet,codeBlockLineTransformer,codeBlockPreSuppliedGrammar,codeBlockShowsSkeleton,parseHighlightLines,renderCodeBlockPlainCode,renderCodeBlockShell,restoreCodeBlockLineFocus,scrollCodeBlockToAnchor,tokenizeCodeBlock};
|
|
@@ -117,7 +117,7 @@ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from
|
|
|
117
117
|
* @since 4.0.0
|
|
118
118
|
*/
|
|
119
119
|
export declare class LyraCodeBlock extends LyraElement<LyraCodeBlockEventMap>{protected static readonly immutableEventDetails:readonly string[];static styles:import("lit").CSSResultGroup[];
|
|
120
|
-
/** The raw source text. */
|
|
120
|
+
/** The raw source text. Removing the attribute renders an empty code block. */
|
|
121
121
|
code:string;
|
|
122
122
|
/** A shiki-recognized language id or alias (e.g. `"javascript"`,
|
|
123
123
|
* `"python"`, `"json"`). When unset, or when shiki doesn't recognize it,
|
|
@@ -140,10 +140,11 @@ copyable:boolean;
|
|
|
140
140
|
/** A CSS length (e.g. `"20rem"`); once set, the code scrolls internally
|
|
141
141
|
* past this height instead of growing the page. */
|
|
142
142
|
maxHeight:string;
|
|
143
|
-
/** Whether to display one-based line numbers beside the code.
|
|
143
|
+
/** Whether to display one-based line numbers beside the code. Highlighted gutters
|
|
144
|
+
* follow live locale and line-label string changes. */
|
|
144
145
|
lineNumbers:boolean;
|
|
145
146
|
/** Comma-separated 1-based inclusive line ranges (e.g. `"3-5,7"`) to visually emphasize.
|
|
146
|
-
* Declarative sugar over `highlights` — merges with, and renders identically to, any
|
|
147
|
+
* Removing the attribute clears these ranges. Declarative sugar over `highlights` — merges with, and renders identically to, any
|
|
147
148
|
* `line-range` entries in `highlights`. */
|
|
148
149
|
highlightLines:string;
|
|
149
150
|
/** Makes the (`line-numbers`-gated) gutter a roving group of activation buttons. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{ThemeWatcher}from"../../../internal/theme-watcher.js";import{snapshotLyraHighlights}from"../../../internal/highlight-collection.js";import{loadShikiHighlighter,loadShikiLanguage,loadShikiHighlighterCore,normalizeShikiLanguage,shikiHasLoadedLanguage}from"./code-loader.js";import{styles}from"./code-block.styles.js";import{CodeBlockInteractionController,applyCodeBlockAriaBusy,clampCodeBlockFocusedLine,codeBlockActiveHighlightLineSet,codeBlockLineHasFocus,codeBlockLineCount,codeBlockLineHighlightSet,codeBlockNeedsHighlightResync,codeBlockPreSuppliedGrammar,codeBlockShowsSkeleton,renderCodeBlockPlainCode,renderCodeBlockShell,restoreCodeBlockLineFocus,scrollCodeBlockToAnchor,tokenizeCodeBlock}from"./code-block-shared.js";import"../../overlays/skeleton/skeleton.class.js";import{presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LYRA_DEFAULT_codeBlockLineLabel,LYRA_DEFAULT_codeRegion,LYRA_DEFAULT_codeRegionWithLanguage,LYRA_DEFAULT_collapseCode,LYRA_DEFAULT_copied,LYRA_DEFAULT_copiedToClipboard,LYRA_DEFAULT_copy,LYRA_DEFAULT_copyCode,LYRA_DEFAULT_copyFailed,LYRA_DEFAULT_expandCode}from"../../../internal/default-strings.generated.js";class LyraCodeBlock extends LyraElement{static{this.defaultStrings={...super.defaultStrings,codeBlockLineLabel:LYRA_DEFAULT_codeBlockLineLabel,codeRegion:LYRA_DEFAULT_codeRegion,codeRegionWithLanguage:LYRA_DEFAULT_codeRegionWithLanguage,collapseCode:LYRA_DEFAULT_collapseCode,copied:LYRA_DEFAULT_copied,copiedToClipboard:LYRA_DEFAULT_copiedToClipboard,copy:LYRA_DEFAULT_copy,copyCode:LYRA_DEFAULT_copyCode,copyFailed:LYRA_DEFAULT_copyFailed,expandCode:LYRA_DEFAULT_expandCode}}static{this.immutableEventDetails=Object.freeze(["lr-text-select"])}static{this.styles=[LyraElement.styles,styles]}get highlights(){return this._highlights}set highlights(value){const previous=this._highlights;this._highlights=snapshotLyraHighlights(value),this.requestUpdate("highlights",previous)}constructor(){super(),this.code="",this.language="",this.filename="",this.accessibleLabel=null,this.collapsible=!1,this.collapsed=!1,this.copyable=!0,this.maxHeight="",this.lineNumbers=!1,this.highlightLines="",this.activatableLines=!1,this._highlights=snapshotLyraHighlights([]),this.activeHighlightId=null,this.anchorKinds=["line-range"],this.focusedLine=1,this.restoreFocusedLineAfterUpdate=!1,this.highlightedHtml=null,this.shikiReady=!1,this.justCopied=!1,this.copyFailed=!1,this.isDarkTheme=!1,this.interactions=new CodeBlockInteractionController({host:this,setFocusedLine:line=>{this.focusedLine=line},setJustCopied:value=>{this.justCopied=value},setCopyFailed:value=>{this.copyFailed=value},setDarkTheme:value=>{this.isDarkTheme=value},emitLineActivate:line=>this.emit("lr-line-activate",{line}),emitCopy:outcome=>this.emit("lr-copy",outcome),emitError:()=>this.emit("lr-error",null),emitCopyError:outcome=>this.emit("lr-copy-error",outcome),requestToggle:collapsed=>!this.emit("lr-toggle-request",{collapsed},{cancelable:!0}).defaultPrevented,emitToggle:collapsed=>this.emit("lr-toggle",{collapsed}),emitTextSelect:selection=>this.emit("lr-text-select",selection)}),this.highlightToken=0,this.defaultHighlighterLoading=!1,this.bodyId=nextId("code-block-body"),new ThemeWatcher(this,()=>this.refreshTheme())}connectedCallback(){super.connectedCallback(),this.refreshTheme(),this.ensureDefaultHighlighter(),(this.preSuppliedGrammar()||this.highlighter)&&this.syncHighlight()}ensureDefaultHighlighter(){!this.isConnected||this.highlighter!==void 0||this.defaultHighlighterLoading||(this.defaultHighlighterLoading=!0,loadShikiHighlighter().then(hl=>{this.defaultHighlighterLoading=!1,this.isConnected&&(this.highlighter=hl,this.shikiReady=!0,this.syncHighlight())}))}disconnectedCallback(){this.highlightToken++,super.disconnectedCallback(),this.interactions.disconnect(),this.highlightedHtml=null}adoptedCallback(){super.adoptedCallback(),this.interactions.disconnect()}preSuppliedGrammar(){return codeBlockPreSuppliedGrammar(this.languages,this.language)}lineHighlightSet(){return codeBlockLineHighlightSet(this.highlightLines,this.highlights,this.lineCount())}activeHighlightLineSet(){return codeBlockActiveHighlightLineSet(this.highlights,this.activeHighlightId,this.lineCount())}lineCount(){return codeBlockLineCount(this.code)}async scrollToAnchor(target){return scrollCodeBlockToAnchor(this,target)}refreshTheme(){this.interactions.refreshTheme()}willUpdate(changed){super.willUpdate(changed),this.restoreFocusedLineAfterUpdate=codeBlockLineHasFocus(this),changed.has("code")&&(this.focusedLine=clampCodeBlockFocusedLine(this.focusedLine,this.lineCount())),codeBlockNeedsHighlightResync(changed)&&(this.shikiReady||this.preSuppliedGrammar())&&this.syncHighlight()}updated(changed){super.updated(changed),applyCodeBlockAriaBusy(this,this.showsSkeleton()),this.restoreFocusedLineAfterUpdate&&(restoreCodeBlockLineFocus(this,this.focusedLine),this.restoreFocusedLineAfterUpdate=!1)}showsSkeleton(){return codeBlockShowsSkeleton(this.shikiReady,this.language,!this.preSuppliedGrammar())}syncHighlight(){const token=++this.highlightToken,lang=normalizeShikiLanguage(this.language);if(!lang){this.highlightedHtml=null;return}const languages=this.languages;if(languages?.[lang]??languages?.[this.language]){this.highlightedHtml=null,loadShikiHighlighterCore(languages).then(hl2=>{token===this.highlightToken&&this.isConnected&&(this.highlightedHtml=hl2?this.tokenize(hl2,lang):null)});return}const hl=this.highlighter;if(!hl){this.highlightedHtml=null;return}if(shikiHasLoadedLanguage(hl,lang)){this.highlightedHtml=this.tokenize(hl,lang);return}this.highlightedHtml=null,loadShikiLanguage(hl,lang).then(ok=>{token===this.highlightToken&&this.isConnected&&(this.highlightedHtml=ok?this.tokenize(hl,lang):null)})}tokenize(hl,lang){return tokenizeCodeBlock(hl,{code:this.code,lang,lineNumbers:this.lineNumbers,activatableLines:this.activatableLines,focusedLine:this.focusedLine,highlightedLines:this.lineHighlightSet(),activeLines:this.activeHighlightLineSet(),lineLabel:line=>this.localize("codeBlockLineLabel",void 0,{line:getNumberFormat(this.effectiveLocale).format(line)}),lineNumberText:line=>getNumberFormat(this.effectiveLocale).format(line)})}renderPlainCode(){return renderCodeBlockPlainCode({code:this.code,lineNumbers:this.lineNumbers,activatableLines:this.activatableLines,focusedLine:this.focusedLine,highlightedLines:this.lineHighlightSet(),activeLines:this.activeHighlightLineSet(),localize:this.localize.bind(this),lineLabel:line=>this.localize("codeBlockLineLabel",void 0,{line:getNumberFormat(this.effectiveLocale).format(line)}),lineNumberText:line=>getNumberFormat(this.effectiveLocale).format(line),onLineActivate:line=>this.interactions.onLineActivate(line),onLineKeyDown:(e,line)=>this.interactions.onLineKeyDown(e,line)})}render(){return renderCodeBlockShell({filename:this.filename,language:this.language,copyable:this.copyable,collapsible:this.collapsible,collapsed:this.collapsed,justCopied:this.justCopied,copyFailed:this.copyFailed,bodyId:this.bodyId,accessibleLabel:this.accessibleLabel,maxHeight:this.maxHeight,isDarkTheme:this.isDarkTheme,showSkeleton:this.showsSkeleton(),highlightedHtml:this.highlightedHtml,lineNumbers:this.lineNumbers,localize:this.localize.bind(this),renderPlainCode:()=>this.renderPlainCode(),onToggle:this.interactions.toggleCollapsed,onCopy:this.interactions.copy,onBodyMouseUp:this.interactions.onBodyMouseUp,onBodyClick:this.interactions.onBodyClick,onBodyKeyDown:this.interactions.onBodyKeyDown,onBodyFocusIn:this.interactions.onBodyFocusIn})}}__decorate([property()],LyraCodeBlock.prototype,"code",void 0),__decorate([property()],LyraCodeBlock.prototype,"language",void 0),__decorate([property()],LyraCodeBlock.prototype,"filename",void 0),__decorate([property({attribute:"aria-label"})],LyraCodeBlock.prototype,"accessibleLabel",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraCodeBlock.prototype,"collapsible",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraCodeBlock.prototype,"collapsed",void 0),__decorate([property({type:Boolean,reflect:!0,converter:trueDefaultBooleanConverter})],LyraCodeBlock.prototype,"copyable",void 0),__decorate([property({attribute:"max-height"})],LyraCodeBlock.prototype,"maxHeight",void 0),__decorate([property({type:Boolean,attribute:"line-numbers",reflect:!0})],LyraCodeBlock.prototype,"lineNumbers",void 0),__decorate([property({attribute:"highlight-lines"})],LyraCodeBlock.prototype,"highlightLines",void 0),__decorate([property({type:Boolean,attribute:"activatable-lines"})],LyraCodeBlock.prototype,"activatableLines",void 0),__decorate([property({attribute:!1})],LyraCodeBlock.prototype,"highlights",null),__decorate([property({attribute:"active-highlight-id"})],LyraCodeBlock.prototype,"activeHighlightId",void 0),__decorate([state()],LyraCodeBlock.prototype,"focusedLine",void 0),__decorate([property({attribute:!1})],LyraCodeBlock.prototype,"languages",void 0),__decorate([state()],LyraCodeBlock.prototype,"highlightedHtml",void 0),__decorate([state()],LyraCodeBlock.prototype,"shikiReady",void 0),__decorate([state()],LyraCodeBlock.prototype,"justCopied",void 0),__decorate([state()],LyraCodeBlock.prototype,"copyFailed",void 0),__decorate([state()],LyraCodeBlock.prototype,"isDarkTheme",void 0);export{LyraCodeBlock};
|
|
1
|
+
var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import"lit";import{property,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{nextId}from"../../../internal/a11y.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{ThemeWatcher}from"../../../internal/theme-watcher.js";import{snapshotLyraHighlights}from"../../../internal/highlight-collection.js";import{loadShikiHighlighter,loadShikiLanguage,loadShikiHighlighterCore,normalizeShikiLanguage,shikiHasLoadedLanguage}from"./code-loader.js";import{styles}from"./code-block.styles.js";import{CodeBlockInteractionController,applyCodeBlockAriaBusy,clampCodeBlockFocusedLine,codeBlockActiveHighlightLineSet,codeBlockLineHasFocus,codeBlockLineCount,codeBlockLineHighlightSet,codeBlockPreSuppliedGrammar,codeBlockShowsSkeleton,renderCodeBlockPlainCode,renderCodeBlockShell,restoreCodeBlockLineFocus,scrollCodeBlockToAnchor,tokenizeCodeBlock}from"./code-block-shared.js";import"../../overlays/skeleton/skeleton.class.js";import{presenceTrueDefaultBooleanConverter as trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LYRA_DEFAULT_codeBlockLineLabel,LYRA_DEFAULT_codeRegion,LYRA_DEFAULT_codeRegionWithLanguage,LYRA_DEFAULT_collapseCode,LYRA_DEFAULT_copied,LYRA_DEFAULT_copiedToClipboard,LYRA_DEFAULT_copy,LYRA_DEFAULT_copyCode,LYRA_DEFAULT_copyFailed,LYRA_DEFAULT_expandCode}from"../../../internal/default-strings.generated.js";class LyraCodeBlock extends LyraElement{static{this.defaultStrings={...super.defaultStrings,codeBlockLineLabel:LYRA_DEFAULT_codeBlockLineLabel,codeRegion:LYRA_DEFAULT_codeRegion,codeRegionWithLanguage:LYRA_DEFAULT_codeRegionWithLanguage,collapseCode:LYRA_DEFAULT_collapseCode,copied:LYRA_DEFAULT_copied,copiedToClipboard:LYRA_DEFAULT_copiedToClipboard,copy:LYRA_DEFAULT_copy,copyCode:LYRA_DEFAULT_copyCode,copyFailed:LYRA_DEFAULT_copyFailed,expandCode:LYRA_DEFAULT_expandCode}}static{this.immutableEventDetails=Object.freeze(["lr-text-select"])}static{this.styles=[LyraElement.styles,styles]}get highlights(){return this._highlights}set highlights(value){const previous=this._highlights;this._highlights=snapshotLyraHighlights(value),this.requestUpdate("highlights",previous)}constructor(){super(),this.code="",this.language="",this.filename="",this.accessibleLabel=null,this.collapsible=!1,this.collapsed=!1,this.copyable=!0,this.maxHeight="",this.lineNumbers=!1,this.highlightLines="",this.activatableLines=!1,this._highlights=snapshotLyraHighlights([]),this.activeHighlightId=null,this.anchorKinds=["line-range"],this.focusedLine=1,this.restoreFocusedLineAfterUpdate=!1,this.highlightedHtml=null,this.shikiReady=!1,this.justCopied=!1,this.copyFailed=!1,this.isDarkTheme=!1,this.interactions=new CodeBlockInteractionController({host:this,setFocusedLine:line=>{this.focusedLine=line},setJustCopied:value=>{this.justCopied=value},setCopyFailed:value=>{this.copyFailed=value},setDarkTheme:value=>{this.isDarkTheme=value},emitLineActivate:line=>this.emit("lr-line-activate",{line}),emitCopy:outcome=>this.emit("lr-copy",outcome),emitError:()=>this.emit("lr-error",null),emitCopyError:outcome=>this.emit("lr-copy-error",outcome),requestToggle:collapsed=>!this.emit("lr-toggle-request",{collapsed},{cancelable:!0}).defaultPrevented,emitToggle:collapsed=>this.emit("lr-toggle",{collapsed}),emitTextSelect:selection=>this.emit("lr-text-select",selection)}),this.highlightToken=0,this.defaultHighlighterLoading=!1,this.bodyId=nextId("code-block-body"),new ThemeWatcher(this,()=>this.refreshTheme())}connectedCallback(){super.connectedCallback(),this.refreshTheme(),this.ensureDefaultHighlighter(),(this.preSuppliedGrammar()||this.highlighter)&&this.syncHighlight()}ensureDefaultHighlighter(){!this.isConnected||this.highlighter!==void 0||this.defaultHighlighterLoading||(this.defaultHighlighterLoading=!0,loadShikiHighlighter().then(hl=>{this.defaultHighlighterLoading=!1,this.isConnected&&(this.highlighter=hl,this.shikiReady=!0,this.syncHighlight())}))}disconnectedCallback(){this.highlightToken++,super.disconnectedCallback(),this.interactions.disconnect(),this.highlightedHtml=null}adoptedCallback(){super.adoptedCallback(),this.interactions.disconnect()}preSuppliedGrammar(){return codeBlockPreSuppliedGrammar(this.languages,this.language??"")}lineHighlightSet(){return codeBlockLineHighlightSet(this.highlightLines??"",this.highlights,this.lineCount())}activeHighlightLineSet(){return codeBlockActiveHighlightLineSet(this.highlights,this.activeHighlightId,this.lineCount())}lineCount(){return codeBlockLineCount(this.code??"")}async scrollToAnchor(target){return scrollCodeBlockToAnchor(this,target)}refreshTheme(){this.interactions.refreshTheme()}willUpdate(changed){super.willUpdate(changed),this.restoreFocusedLineAfterUpdate=codeBlockLineHasFocus(this),changed.has("code")&&(this.focusedLine=clampCodeBlockFocusedLine(this.focusedLine,this.lineCount())),this.interactions.needsHighlightResync(changed,this.effectiveLocale,this.localize("codeBlockLineLabel"))&&(this.shikiReady||this.preSuppliedGrammar())&&this.syncHighlight()}updated(changed){super.updated(changed),applyCodeBlockAriaBusy(this,this.showsSkeleton()),this.restoreFocusedLineAfterUpdate&&(restoreCodeBlockLineFocus(this,this.focusedLine),this.restoreFocusedLineAfterUpdate=!1)}showsSkeleton(){return codeBlockShowsSkeleton(this.shikiReady,this.language,!this.preSuppliedGrammar())}syncHighlight(){const token=++this.highlightToken,lang=normalizeShikiLanguage(this.language??"");if(!lang){this.highlightedHtml=null;return}const languages=this.languages;if(languages?.[lang]??languages?.[this.language]){this.highlightedHtml=null,loadShikiHighlighterCore(languages).then(hl2=>{token===this.highlightToken&&this.isConnected&&(this.highlightedHtml=hl2?this.tokenize(hl2,lang):null)});return}const hl=this.highlighter;if(!hl){this.highlightedHtml=null;return}if(shikiHasLoadedLanguage(hl,lang)){this.highlightedHtml=this.tokenize(hl,lang);return}this.highlightedHtml=null,loadShikiLanguage(hl,lang).then(ok=>{token===this.highlightToken&&this.isConnected&&(this.highlightedHtml=ok?this.tokenize(hl,lang):null)})}tokenize(hl,lang){return tokenizeCodeBlock(hl,{code:this.code??"",lang,lineNumbers:this.lineNumbers,activatableLines:this.activatableLines,focusedLine:this.focusedLine,highlightedLines:this.lineHighlightSet(),activeLines:this.activeHighlightLineSet(),lineLabel:line=>this.localize("codeBlockLineLabel",void 0,{line:getNumberFormat(this.effectiveLocale).format(line)}),lineNumberText:line=>getNumberFormat(this.effectiveLocale).format(line)})}renderPlainCode(){return renderCodeBlockPlainCode({code:this.code??"",lineNumbers:this.lineNumbers,activatableLines:this.activatableLines,focusedLine:this.focusedLine,highlightedLines:this.lineHighlightSet(),activeLines:this.activeHighlightLineSet(),localize:this.localize.bind(this),lineLabel:line=>this.localize("codeBlockLineLabel",void 0,{line:getNumberFormat(this.effectiveLocale).format(line)}),lineNumberText:line=>getNumberFormat(this.effectiveLocale).format(line),onLineActivate:line=>this.interactions.onLineActivate(line),onLineKeyDown:(e,line)=>this.interactions.onLineKeyDown(e,line)})}render(){return renderCodeBlockShell({filename:this.filename,language:this.language,copyable:this.copyable,collapsible:this.collapsible,collapsed:this.collapsed,justCopied:this.justCopied,copyFailed:this.copyFailed,bodyId:this.bodyId,accessibleLabel:this.accessibleLabel,maxHeight:this.maxHeight,isDarkTheme:this.isDarkTheme,showSkeleton:this.showsSkeleton(),highlightedHtml:this.highlightedHtml,lineNumbers:this.lineNumbers,localize:this.localize.bind(this),renderPlainCode:()=>this.renderPlainCode(),onToggle:this.interactions.toggleCollapsed,onCopy:this.interactions.copy,onBodyMouseUp:this.interactions.onBodyMouseUp,onBodyClick:this.interactions.onBodyClick,onBodyKeyDown:this.interactions.onBodyKeyDown,onBodyFocusIn:this.interactions.onBodyFocusIn})}}__decorate([property()],LyraCodeBlock.prototype,"code",void 0),__decorate([property()],LyraCodeBlock.prototype,"language",void 0),__decorate([property()],LyraCodeBlock.prototype,"filename",void 0),__decorate([property({attribute:"aria-label"})],LyraCodeBlock.prototype,"accessibleLabel",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraCodeBlock.prototype,"collapsible",void 0),__decorate([property({type:Boolean,reflect:!0})],LyraCodeBlock.prototype,"collapsed",void 0),__decorate([property({type:Boolean,reflect:!0,converter:trueDefaultBooleanConverter})],LyraCodeBlock.prototype,"copyable",void 0),__decorate([property({attribute:"max-height"})],LyraCodeBlock.prototype,"maxHeight",void 0),__decorate([property({type:Boolean,attribute:"line-numbers",reflect:!0})],LyraCodeBlock.prototype,"lineNumbers",void 0),__decorate([property({attribute:"highlight-lines"})],LyraCodeBlock.prototype,"highlightLines",void 0),__decorate([property({type:Boolean,attribute:"activatable-lines"})],LyraCodeBlock.prototype,"activatableLines",void 0),__decorate([property({attribute:!1})],LyraCodeBlock.prototype,"highlights",null),__decorate([property({attribute:"active-highlight-id"})],LyraCodeBlock.prototype,"activeHighlightId",void 0),__decorate([state()],LyraCodeBlock.prototype,"focusedLine",void 0),__decorate([property({attribute:!1})],LyraCodeBlock.prototype,"languages",void 0),__decorate([state()],LyraCodeBlock.prototype,"highlightedHtml",void 0),__decorate([state()],LyraCodeBlock.prototype,"shikiReady",void 0),__decorate([state()],LyraCodeBlock.prototype,"justCopied",void 0),__decorate([state()],LyraCodeBlock.prototype,"copyFailed",void 0),__decorate([state()],LyraCodeBlock.prototype,"isDarkTheme",void 0);export{LyraCodeBlock};
|
|
@@ -40,6 +40,8 @@ export declare const SHIKI_THEMES:Record<'light'|'dark',string>;
|
|
|
40
40
|
export declare function normalizeShikiLanguage(lang:string):string;
|
|
41
41
|
/**
|
|
42
42
|
* Builds and caches a fine-grained `HighlighterCore` seeded with only the supplied grammars.
|
|
43
|
+
* The identity cache also shares recently used equivalent, deeply frozen plain grammar maps.
|
|
44
|
+
* This bounded weak reuse never changes mutable or unusual inputs' identity-only caching.
|
|
43
45
|
* Only Shiki subpaths are imported here; the package's main entry and full grammar table remain
|
|
44
46
|
* unreachable from lean component graphs.
|
|
45
47
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";function isShikiHighlighter(candidate){return(typeof candidate=="object"||typeof candidate=="function")&&candidate!==null&&typeof candidate.getLoadedLanguages=="function"&&typeof candidate.loadLanguage=="function"&&typeof candidate.codeToHtml=="function"}const SHIKI_LIGHT_THEME="github-light",SHIKI_DARK_THEME="github-dark",SHIKI_THEMES={light:SHIKI_LIGHT_THEME,dark:SHIKI_DARK_THEME};function normalizeShikiLanguage(lang){return lang.trim().toLowerCase().replace(/^\./,"")}const highlighterCores=new WeakMap;let highlighterCoreLoaderForTesting;const FINE_GRAINED_SHIKI_WARNING_KEY="lyra-fine-grained-shiki-highlighter-unavailable",FINE_GRAINED_SHIKI_WARNING="Lyra syntax highlighting failed to build a fine-grained shiki highlighter from the supplied grammars. Code is rendered as plain text.";function __setShikiHighlighterCoreLoaderForTesting(loader){highlighterCoreLoaderForTesting=loader}function loadShikiHighlighterCore(languages){if(highlighterCoreLoaderForTesting)return highlighterCoreLoaderForTesting(languages);let cached=highlighterCores.get(languages);
|
|
1
|
+
import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";function isShikiHighlighter(candidate){return(typeof candidate=="object"||typeof candidate=="function")&&candidate!==null&&typeof candidate.getLoadedLanguages=="function"&&typeof candidate.loadLanguage=="function"&&typeof candidate.codeToHtml=="function"}const SHIKI_LIGHT_THEME="github-light",SHIKI_DARK_THEME="github-dark",SHIKI_THEMES={light:SHIKI_LIGHT_THEME,dark:SHIKI_DARK_THEME};function normalizeShikiLanguage(lang){return lang.trim().toLowerCase().replace(/^\./,"")}const highlighterCores=new WeakMap,recentHighlighterCores=[];function equalFrozenGrammars(left,right){let remaining=2e4;const leftSeen=new WeakSet,rightSeen=new WeakSet,equal=(a,b,depth)=>{if(--remaining<0||depth>32||typeof a!=typeof b||typeof a=="function"||typeof a=="symbol"||typeof a=="number"&&(!Number.isFinite(a)||!Number.isFinite(b)))return!1;if(a===null||b===null||typeof a!="object"||typeof b!="object")return Object.is(a,b);if(!Object.isFrozen(a)||!Object.isFrozen(b)||leftSeen.has(a)||rightSeen.has(b))return!1;const prototype=Object.getPrototypeOf(a);if(prototype!==Object.getPrototypeOf(b)||prototype!==Object.prototype&&prototype!==Array.prototype&&prototype!==null||Array.isArray(a)!==Array.isArray(b))return!1;leftSeen.add(a),rightSeen.add(b);const leftKeys=Reflect.ownKeys(a),rightKeys=Reflect.ownKeys(b);if(leftKeys.length!==rightKeys.length||leftKeys.length>remaining)return!1;for(let i=0;i<leftKeys.length;i+=1){const key=leftKeys[i];if(typeof key!="string"||key!==rightKeys[i])return!1;const first=Object.getOwnPropertyDescriptor(a,key),second=Object.getOwnPropertyDescriptor(b,key);if(!("value"in first)||!("value"in second)||first.enumerable!==second.enumerable||!equal(first.value,second.value,depth+1))return!1}return!0};try{return equal(left,right,0)}catch{return!1}}let highlighterCoreLoaderForTesting;const FINE_GRAINED_SHIKI_WARNING_KEY="lyra-fine-grained-shiki-highlighter-unavailable",FINE_GRAINED_SHIKI_WARNING="Lyra syntax highlighting failed to build a fine-grained shiki highlighter from the supplied grammars. Code is rendered as plain text.";function __setShikiHighlighterCoreLoaderForTesting(loader){highlighterCoreLoaderForTesting=loader}function loadShikiHighlighterCore(languages){if(highlighterCoreLoaderForTesting)return highlighterCoreLoaderForTesting(languages);let cached=highlighterCores.get(languages),frozen=!1;if(!cached)try{frozen=Object.isFrozen(languages)}catch{}if(frozen)for(let i=recentHighlighterCores.length-1;i>=0;i-=1){const entry=recentHighlighterCores[i],previous=entry.languages.deref(),promise=entry.promise.deref();if(!previous||!promise)recentHighlighterCores.splice(i,1);else if(equalFrozenGrammars(languages,previous)){cached=promise,recentHighlighterCores.splice(i,1),recentHighlighterCores.push({languages:new WeakRef(languages),promise:entry.promise}),highlighterCores.set(languages,cached);break}}if(!cached&&(cached=Promise.all([import("shiki/core"),import("shiki/engine/oniguruma"),import("shiki/themes/github-light.mjs"),import("shiki/themes/github-dark.mjs")]).then(async([{createHighlighterCore},{createOnigurumaEngine},light,dark])=>{const core=await createHighlighterCore({themes:[light.default,dark.default],langs:Object.values(languages),engine:createOnigurumaEngine(import("shiki/wasm"))});if(!isShikiHighlighter(core))throw new Error("Invalid optional peer `shiki`: `createHighlighterCore()` did not produce a usable highlighter capability.");return core}).catch(()=>(devWarnOnce(FINE_GRAINED_SHIKI_WARNING_KEY,FINE_GRAINED_SHIKI_WARNING),null)),highlighterCores.set(languages,cached),frozen)){recentHighlighterCores.push({languages:new WeakRef(languages),promise:new WeakRef(cached)}),recentHighlighterCores.length>8&&recentHighlighterCores.shift();const pending=cached;pending.then(core=>{if(!core)for(let i=recentHighlighterCores.length-1;i>=0;i-=1)recentHighlighterCores[i].promise.deref()===pending&&recentHighlighterCores.splice(i,1)})}return cached}export{SHIKI_DARK_THEME,SHIKI_LIGHT_THEME,SHIKI_THEMES,__setShikiHighlighterCoreLoaderForTesting,isShikiHighlighter,loadShikiHighlighterCore,normalizeShikiLanguage};
|
|
@@ -11,7 +11,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
11
11
|
aria-hidden="true"
|
|
12
12
|
focusable="false"
|
|
13
13
|
><path d="M12 20h9"></path><path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4Z"></path></svg>
|
|
14
|
-
`}function defaultFormatTimestamp(date,locale,now=new Date){if(date.toDateString()===now.toDateString())return getDateTimeFormat(locale,{hour:"numeric",minute:"2-digit"}).format(date);const sameYear=date.getFullYear()===now.getFullYear();return getDateTimeFormat(locale,sameYear?{month:"short",day:"numeric"}:{month:"short",day:"numeric",year:"numeric"}).format(date)}class LyraConversationItem extends LyraElement{constructor(){super(...arguments),this.conversationId="",this.label="",this.excerpt="",this.active=!1,this.compact=!1,this.renamable=!0,this.spellcheck=!0,this.autocapitalize="",this.autocorrectValue=!0,this.renaming=!1,this.draftLabel="",this.hasActionsSlot=!1,this.hasStartSlot=!1,this.hasContentSlot=!1,this.hasMetaSlot=!1,this.hasExcerptSlot=!1,this.blurCommitGeneration=0,this.onOptionClick=()=>{this.renaming||this.select()},this.onOptionKeyDown=e=>{this.renaming||(e.key==="Enter"||e.key===" "||e.key==="Spacebar")&&(e.preventDefault(),this.select())},this.onRenameButtonClick=()=>{this.startRename()},this.onLabelInputChange=e=>{this.draftLabel=e.target.value},this.onLabelInputKeyDown=e=>{e.stopPropagation()
|
|
14
|
+
`}function defaultFormatTimestamp(date,locale,now=new Date){if(date.toDateString()===now.toDateString())return getDateTimeFormat(locale,{hour:"numeric",minute:"2-digit"}).format(date);const sameYear=date.getFullYear()===now.getFullYear();return getDateTimeFormat(locale,sameYear?{month:"short",day:"numeric"}:{month:"short",day:"numeric",year:"numeric"}).format(date)}class LyraConversationItem extends LyraElement{constructor(){super(...arguments),this.conversationId="",this.label="",this.excerpt="",this.active=!1,this.compact=!1,this.renamable=!0,this.spellcheck=!0,this.autocapitalize="",this.autocorrectValue=!0,this.renaming=!1,this.draftLabel="",this.hasActionsSlot=!1,this.hasStartSlot=!1,this.hasContentSlot=!1,this.hasMetaSlot=!1,this.hasExcerptSlot=!1,this.blurCommitGeneration=0,this.onOptionClick=()=>{this.renaming||this.select()},this.onOptionKeyDown=e=>{this.renaming||(e.key==="Enter"||e.key===" "||e.key==="Spacebar")&&(e.preventDefault(),this.select())},this.onRenameButtonClick=()=>{this.startRename()},this.onLabelInputChange=e=>{this.draftLabel=e.target.value},this.onLabelInputKeyDown=e=>{e.stopPropagation(),!(e.isComposing||e.keyCode===229)&&(e.key==="Enter"?(e.preventDefault(),this.commitRename(!0)):e.key==="Escape"&&(e.preventDefault(),this.cancelRename(!0)))},this.onLabelInputFocus=()=>{this.emit("focus",null)},this.onLabelInputBlur=event=>{if(this.emit("blur",null),!this.renaming)return;const generation=++this.blurCommitGeneration,synthetic=!event.isTrusted;queueMicrotask(()=>{generation!==this.blurCommitGeneration||!this.renaming||!this.isConnected||!synthetic&&activeElementIn(this.shadowRoot)===this.labelInput||this.commitRename()})},this.onActionsSlotChange=e=>{this.hasActionsSlot=e.target.assignedElements({flatten:!0}).length>0},this.syncStartSlot=()=>{this.hasStartSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="start")},this.onContentSlotChange=e=>{this.hasContentSlot=e.target.assignedElements({flatten:!0}).length>0},this.onMetaSlotChange=e=>{this.hasMetaSlot=e.target.assignedElements({flatten:!0}).length>0},this.onExcerptSlotChange=e=>{this.hasExcerptSlot=e.target.assignedElements({flatten:!0}).length>0}}static{this.defaultStrings={...super.defaultStrings,rename:LYRA_DEFAULT_rename,untitledConversation:LYRA_DEFAULT_untitledConversation}}static{this.styles=[LyraElement.styles,styles]}get autocorrect(){return this.autocorrectValue}set autocorrect(next){this.autocorrectValue=normalizeAutocorrect(next)}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.renaming&&this.focusRenameInput()}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||(this.hasActionsSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="actions"),this.syncStartSlot(),this.hasContentSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="content"),this.hasMetaSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="meta"),this.hasExcerptSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="excerpt")),changed.has("renamable")&&!this.renamable&&this.renaming&&this.cancelRename()}updated(changed){super.updated(changed),changed.has("renaming")&&this.renaming&&this.focusRenameInput()}focusRenameInput(){this.labelInput?.focus(),this.labelInput?.select()}get normalizedTimestamp(){return normalizeLyraTimestamp(this.timestamp)}select(){this.emit("lr-select",{conversationId:this.conversationId})}click(){this.renaming?this.labelInput?.click():this.renderRoot.querySelector('[part="select-button"]')?.click()}startRename(){!this.renamable||this.renaming||(this.draftLabel=this.label,this.renaming=!0)}restoreOptionFocus(){this.updateComplete.then(()=>{this.renderRoot.querySelector('[part="select-button"]')?.focus()})}commitRename(restoreFocus=!1){this.renaming=!1,restoreFocus&&this.restoreOptionFocus();const next=this.draftLabel.trim();!next||next===this.label||this.emit("lr-rename",{conversationId:this.conversationId,label:next})}cancelRename(restoreFocus=!1){this.renaming=!1,restoreFocus&&this.restoreOptionFocus()}render(){const ts=this.normalizedTimestamp,formatter=this.formatTimestamp??(date=>defaultFormatTimestamp(date,this.effectiveLocale)),displayLabel=this.label||this.localize("untitledConversation"),showRenameButton=this.renamable&&!this.renaming,renameLabel=this.localize("rename",void 0,{title:displayLabel});return html`
|
|
15
15
|
<div part="base">
|
|
16
16
|
${this.active?html`<span part="active-indicator" aria-hidden="true"></span>`:nothing}
|
|
17
17
|
<div
|