@aceshooting/lyra-ui 13.0.1 → 14.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +329 -0
- package/custom-elements.json +1 -1
- package/dist/cli/migration-contract.json +1 -1
- package/dist/components/agent-tools/activity-feed/activity-feed.class.d.ts +23 -15
- package/dist/components/agent-tools/activity-feed/activity-feed.class.js +9 -6
- package/dist/components/agent-tools/agent-trace/agent-trace.class.d.ts +12 -3
- package/dist/components/agent-tools/agent-trace/agent-trace.class.js +2 -1
- package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +4 -2
- package/dist/components/agent-tools/approval-queue/approval-queue.class.js +1 -1
- package/dist/components/agent-tools/artifact-panel/artifact-panel.styles.js +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 +8 -8
- 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/schema-viewer/schema-viewer.class.d.ts +5 -5
- package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +23 -10
- package/dist/components/agent-tools/span-waterfall/span-waterfall.class.d.ts +13 -6
- package/dist/components/agent-tools/span-waterfall/span-waterfall.class.js +3 -3
- package/dist/components/agent-tools/span-waterfall/span-waterfall.styles.js +1 -1
- package/dist/components/agent-tools/stack-trace/stack-trace-parse.js +3 -3
- 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/subagent-panel/subagent-panel.class.js +1 -1
- package/dist/components/agent-tools/subagent-panel/subagent-panel.styles.js +1 -1
- package/dist/components/agent-tools/task-list/task-list.class.d.ts +1 -2
- package/dist/components/agent-tools/task-list/task-list.class.js +2 -2
- package/dist/components/agent-tools/terminal/terminal.class.d.ts +11 -2
- package/dist/components/agent-tools/terminal/terminal.class.js +5 -5
- package/dist/components/agent-tools/terminal/terminal.styles.js +1 -1
- package/dist/components/agent-tools/test-results/test-results.class.d.ts +4 -2
- package/dist/components/agent-tools/test-results/test-results.class.js +2 -2
- package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts +2 -0
- package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +1 -1
- package/dist/components/agent-tools/tool-approval-dialog/tool-approval-dialog.class.js +1 -1
- 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 +3 -2
- package/dist/components/agent-tools/tool-param-form/tool-param-form.d.ts +1 -1
- package/dist/components/agent-tools/tool-param-form/tool-param-form.js +1 -1
- package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.js +2 -2
- package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.styles.js +1 -1
- package/dist/components/agent-tools/tool-result-view/registry.d.ts +2 -1
- package/dist/components/agent-tools/tool-result-view/tool-result-view.class.d.ts +1 -1
- package/dist/components/agent-tools/tool-result-view/tool-result-view.class.js +1 -1
- package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.d.ts +18 -12
- package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +7 -7
- package/dist/components/agent-tools/tool-timeline/tool-timeline.class.d.ts +9 -3
- package/dist/components/agent-tools/tool-timeline/tool-timeline.class.js +1 -1
- 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/agent-tools/trace-tree/trace-tree.styles.js +1 -1
- package/dist/components/charts/chart/box-plot.class.d.ts +12 -3
- package/dist/components/charts/chart/box-plot.class.js +9 -9
- package/dist/components/charts/chart/box-plot.styles.js +1 -1
- package/dist/components/charts/chart/chart-core-loader.js +1 -1
- package/dist/components/charts/chart/chart-feature-loader.js +1 -1
- package/dist/components/charts/chart/chart-preload.d.ts +1 -1
- package/dist/components/charts/chart/chart-preload.js +1 -1
- package/dist/components/charts/chart/chart.class.d.ts +33 -10
- package/dist/components/charts/chart/chart.class.js +23 -14
- package/dist/components/charts/chart/chart.styles.js +1 -1
- package/dist/components/charts/chart/histogram-bin.js +1 -1
- package/dist/components/charts/chart/lite-chart.class.d.ts +20 -11
- package/dist/components/charts/chart/lite-chart.class.js +17 -11
- package/dist/components/charts/chart/lite-chart.styles.js +1 -1
- package/dist/components/conversation/agent-workspace/agent-workspace.class.d.ts +1 -1
- package/dist/components/conversation/agent-workspace/agent-workspace.class.js +2 -2
- package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +10 -5
- package/dist/components/conversation/audio-visualizer/audio-visualizer.class.js +1 -1
- package/dist/components/conversation/branch-picker/branch-picker.class.d.ts +4 -2
- package/dist/components/conversation/branch-picker/branch-picker.class.js +1 -1
- package/dist/components/conversation/branch-picker/branch-picker.styles.js +1 -1
- package/dist/components/conversation/chat-composer/chat-composer.class.d.ts +6 -2
- package/dist/components/conversation/chat-composer/chat-composer.class.js +3 -3
- package/dist/components/conversation/chat-composer/chat-composer.styles.js +1 -1
- package/dist/components/conversation/chat-message/chat-message.class.d.ts +4 -3
- package/dist/components/conversation/chat-message/chat-message.class.js +2 -2
- package/dist/components/conversation/chat-message/chat-message.styles.js +1 -1
- package/dist/components/conversation/chat-viewport/chat-viewport.styles.js +1 -1
- 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/code-block.styles.js +1 -1
- package/dist/components/conversation/code-block/code-loader.d.ts +1 -1
- package/dist/components/conversation/code-block/code-loader.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/conversation-item/conversation-item.styles.js +1 -1
- package/dist/components/conversation/generation-metrics/generation-metrics.styles.js +1 -1
- package/dist/components/conversation/markdown/katex-loader.d.ts +4 -4
- package/dist/components/conversation/markdown/katex-loader.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-loader.d.ts +1 -1
- package/dist/components/conversation/markdown/markdown-loader.js +1 -1
- package/dist/components/conversation/markdown/markdown-shared.d.ts +6 -1
- package/dist/components/conversation/markdown/markdown-shared.js +5 -4
- package/dist/components/conversation/markdown/markdown.class.d.ts +1 -1
- package/dist/components/conversation/message-actions/message-actions.class.d.ts +18 -3
- package/dist/components/conversation/message-actions/message-actions.class.js +2 -2
- package/dist/components/conversation/message-actions/message-actions.styles.js +1 -1
- package/dist/components/conversation/message-actions/toolbar-actions.d.ts +3 -1
- package/dist/components/conversation/message-actions/toolbar-actions.js +1 -1
- package/dist/components/conversation/message-feedback/message-feedback.class.d.ts +40 -15
- package/dist/components/conversation/message-feedback/message-feedback.class.js +7 -3
- package/dist/components/conversation/message-feedback/message-feedback.styles.js +1 -1
- package/dist/components/conversation/message-parts/message-parts.class.d.ts +10 -4
- package/dist/components/conversation/message-parts/message-parts.class.js +2 -2
- package/dist/components/conversation/message-parts/message-parts.styles.js +1 -1
- package/dist/components/conversation/model-select/model-select.class.d.ts +5 -2
- package/dist/components/conversation/model-select/model-select.class.js +8 -5
- package/dist/components/conversation/model-settings-panel/model-settings-panel.class.d.ts +3 -5
- package/dist/components/conversation/model-settings-panel/model-settings-panel.class.js +2 -1
- package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +9 -2
- package/dist/components/conversation/prompt-input/prompt-input.class.js +3 -3
- package/dist/components/conversation/prompt-input/prompt-input.styles.js +1 -1
- package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +20 -4
- package/dist/components/conversation/prompt-queue/prompt-queue.class.js +1 -1
- package/dist/components/conversation/prompt-queue/prompt-queue.styles.js +1 -1
- package/dist/components/conversation/push-to-talk/push-to-talk.class.d.ts +17 -8
- package/dist/components/conversation/push-to-talk/push-to-talk.class.js +1 -1
- package/dist/components/conversation/push-to-talk/push-to-talk.styles.js +1 -1
- package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts +6 -3
- package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
- package/dist/components/conversation/selection-toolbar/selection-toolbar.styles.js +1 -1
- package/dist/components/conversation/thread-list/thread-list.class.d.ts +14 -4
- package/dist/components/conversation/thread-list/thread-list.class.js +11 -11
- package/dist/components/conversation/thread-list/thread-list.styles.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/transcript-feed/transcript-feed.styles.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.d.ts +12 -4
- package/dist/components/conversation/voice-picker/voice-picker.class.js +8 -5
- package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
- 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 +16 -5
- package/dist/components/data/calendar/calendar.class.js +2 -2
- 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.d.ts +3 -1
- package/dist/components/data/context-meter/context-meter.class.js +4 -4
- package/dist/components/data/data-grid/data-grid.class.d.ts +51 -6
- package/dist/components/data/data-grid/data-grid.class.js +25 -11
- package/dist/components/data/data-grid/data-grid.styles.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/env-list/env-list.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 +24 -14
- package/dist/components/data/flow-canvas/flow-canvas.class.js +1 -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/flow-controls/flow-controls.styles.js +1 -1
- package/dist/components/data/flow-run-status/flow-run-status.class.js +1 -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/graph-query-builder/graph-query-builder.styles.js +1 -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/sequence-strip/sequence-strip.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 +15 -16
- package/dist/components/data/table/table.class.js +5 -4
- package/dist/components/data/table/table.styles.js +1 -1
- 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-item.styles.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/data/word-cloud/word-cloud.class.js +1 -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/checkbox-group/checkbox-group.class.d.ts +7 -2
- package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
- package/dist/components/forms/code-editor/code-editor.class.d.ts +16 -4
- package/dist/components/forms/code-editor/code-editor.class.js +19 -9
- package/dist/components/forms/code-editor/code-editor.styles.js +1 -1
- package/dist/components/forms/color-picker/color-picker.class.d.ts +6 -2
- 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/combobox.styles.js +1 -1
- 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 +33 -15
- package/dist/components/forms/date-picker/date-picker.class.js +8 -8
- package/dist/components/forms/date-picker/date-picker.styles.js +1 -1
- package/dist/components/forms/emoji-picker/emoji-data-loader.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 +16 -5
- package/dist/components/forms/input/input.class.js +7 -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 +11 -2
- package/dist/components/forms/input/time-input.class.js +2 -2
- package/dist/components/forms/locale-picker/locale-picker.class.d.ts +22 -4
- package/dist/components/forms/locale-picker/locale-picker.class.js +2 -2
- package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
- 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/select/select.styles.js +1 -1
- 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 +9 -5
- package/dist/components/layout/app-rail/app-rail.class.js +4 -3
- package/dist/components/layout/app-rail/app-rail.styles.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.d.ts +2 -2
- package/dist/components/layout/command-palette/command-palette.class.js +1 -1
- package/dist/components/layout/command-palette/command-palette.styles.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 +16 -15
- package/dist/components/layout/details/details.class.js +43 -34
- package/dist/components/layout/details/details.styles.js +1 -1
- package/dist/components/layout/dock-panel/dock-panel.class.d.ts +4 -3
- package/dist/components/layout/dock-panel/dock-panel.class.js +2 -1
- package/dist/components/layout/filter-bar/filter-bar.class.d.ts +3 -1
- package/dist/components/layout/filter-bar/filter-bar.class.js +2 -2
- package/dist/components/layout/menu/menu-item.class.js +2 -2
- 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 +19 -8
- package/dist/components/layout/multi-split/multi-split.class.js +2 -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/scroller/scroller.class.d.ts +4 -4
- package/dist/components/layout/scroller/scroller.styles.js +1 -1
- package/dist/components/layout/split-panel/split-panel.class.d.ts +5 -3
- package/dist/components/layout/split-panel/split-panel.class.js +3 -2
- 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/tab-group/tab-group.styles.js +1 -1
- package/dist/components/layout/virtual-list/virtual-list.class.js +2 -2
- package/dist/components/layout/widget/widget.class.d.ts +6 -2
- package/dist/components/layout/widget/widget.class.js +1 -1
- package/dist/components/layout/widget/widget.styles.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/flag/flag.class.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/lightbox/lightbox.styles.js +1 -1
- package/dist/components/media/map/map-loader.js +1 -1
- package/dist/components/media/map/map.class.d.ts +22 -34
- 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/qr-code/qr-code-loader.js +1 -1
- package/dist/components/media/qr-code/qr-code.class.d.ts +5 -2
- package/dist/components/media/qr-code/qr-code.class.js +2 -2
- package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +3 -3
- package/dist/components/media/sequence-playback/sequence-playback.class.js +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/alert/alert.styles.js +1 -1
- package/dist/components/overlays/callout/callout.styles.js +1 -1
- 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/dialog/dialog.styles.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/overlays/toast/toast-item.class.js +1 -1
- package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts +11 -5
- package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +3 -3
- 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-loader.js +1 -1
- package/dist/components/retrieval/graph/graph.class.d.ts +10 -8
- package/dist/components/retrieval/graph/graph.class.js +10 -10
- package/dist/components/retrieval/graph-legend/graph-legend.class.d.ts +4 -2
- package/dist/components/retrieval/graph-legend/graph-legend.class.js +1 -1
- package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +15 -9
- package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +7 -5
- 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-base/knowledge-base.class.d.ts +3 -2
- package/dist/components/retrieval/knowledge-base/knowledge-base.class.js +4 -3
- package/dist/components/retrieval/knowledge-base/knowledge-base.styles.js +1 -1
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +7 -3
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +8 -3
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.styles.js +1 -1
- package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +15 -6
- package/dist/components/retrieval/memory-panel/memory-panel.class.js +1 -1
- package/dist/components/retrieval/neighbor-list/neighbor-list.class.js +1 -1
- package/dist/components/retrieval/neighbor-list/neighbor-list.styles.js +1 -1
- package/dist/components/retrieval/node-palette/node-palette.class.d.ts +17 -12
- package/dist/components/retrieval/node-palette/node-palette.class.js +2 -2
- package/dist/components/retrieval/node-palette/node-palette.styles.js +1 -1
- package/dist/components/retrieval/path-strip/path-strip.class.js +1 -1
- 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/retrieval-results/retrieval-results.class.d.ts +1 -1
- package/dist/components/retrieval/retrieval-results/retrieval-results.class.js +5 -5
- package/dist/components/retrieval/retrieval-trace/retrieval-trace.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 +2 -2
- package/dist/components/utility/copy-button/copy-button.class.d.ts +2 -1
- package/dist/components/utility/copy-button/copy-button.class.js +1 -1
- package/dist/components/utility/diff-view/diff-view.class.d.ts +4 -1
- package/dist/components/utility/diff-view/diff-view.class.js +1 -1
- package/dist/components/utility/export-button/export-button.class.d.ts +2 -2
- package/dist/components/utility/export-button/export-button.class.js +1 -1
- package/dist/components/utility/export-button/export-button.styles.js +1 -1
- package/dist/components/utility/format/format-date.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/format/relative-time.class.js +1 -1
- package/dist/components/utility/icon/dompurify-loader.js +1 -1
- package/dist/components/utility/icon/icon-library.js +1 -1
- package/dist/components/utility/intersection-observer/intersection-observer.class.js +1 -1
- package/dist/components/utility/json-viewer/json-viewer.class.d.ts +6 -3
- package/dist/components/utility/json-viewer/json-viewer.class.js +5 -5
- 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 +32 -45
- package/dist/components/utility/mention-popover/mention-popover.class.js +1 -1
- package/dist/components/utility/mutation-observer/mutation-observer.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-loader.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-compare/document-compare.class.d.ts +11 -8
- package/dist/components/viewers/document-compare/document-compare.class.js +2 -2
- package/dist/components/viewers/document-preview/document-preview.class.d.ts +8 -4
- package/dist/components/viewers/document-preview/document-preview.class.js +4 -4
- package/dist/components/viewers/document-preview/document-preview.styles.js +1 -1
- package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +5 -2
- package/dist/components/viewers/document-viewer/document-viewer.class.js +2 -2
- package/dist/components/viewers/document-viewer/document-viewer.styles.js +1 -1
- 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/docx-viewer/docx-loader.js +1 -1
- package/dist/components/viewers/docx-viewer/docx-viewer.class.js +1 -1
- package/dist/components/viewers/ebook-viewer/ebook-loader.d.ts +1 -1
- package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +8 -2
- package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
- package/dist/components/viewers/email-viewer/email-loader.js +1 -1
- package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +3 -2
- package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -2
- package/dist/components/viewers/html-viewer/dompurify-loader.js +1 -1
- 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/dompurify-loader.js +1 -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/pdf-viewer/pdf-loader.js +1 -1
- package/dist/components/viewers/pptx-viewer/pptx-loader.js +1 -1
- package/dist/components/viewers/spreadsheet-viewer/spreadsheet-loader.js +1 -1
- package/dist/components/viewers/svg-viewer/dompurify-loader.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/viewer-loading.js +1 -1
- package/dist/components/viewers/viewer-search-limits.d.ts +2 -0
- package/dist/components/viewers/viewer-search-limits.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/events.d.ts +13 -6
- package/dist/internal/aria-controls.d.ts +16 -13
- package/dist/internal/aria-controls.js +1 -1
- package/dist/internal/aria-reflection.js +1 -1
- package/dist/internal/catalog-picker.d.ts +2 -2
- package/dist/internal/catalog-picker.js +1 -1
- package/dist/internal/chart-annotation-registration.d.ts +1 -0
- package/dist/internal/chart-annotation-registration.js +1 -0
- package/dist/internal/data-descriptors.d.ts +13 -0
- package/dist/internal/data-descriptors.js +1 -0
- package/dist/internal/default-strings.generated.d.ts +1 -1
- package/dist/internal/default-strings.generated.js +2 -2
- package/dist/internal/dev-mode-attribute-warning.d.ts +3 -0
- package/dist/internal/dev-mode-attribute-warning.js +1 -1
- package/dist/internal/element-internals.d.ts +4 -3
- package/dist/internal/element-internals.js +1 -1
- package/dist/internal/form-associated.js +1 -1
- package/dist/internal/highlight-collection.d.ts +2 -0
- package/dist/internal/highlight-collection.js +1 -1
- package/dist/internal/localization-types.d.ts +1 -1
- package/dist/internal/localization.js +2 -2
- package/dist/internal/lyra-element.d.ts +10 -1
- package/dist/internal/lyra-element.js +2 -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/papaparse-loader.js +1 -1
- package/dist/internal/positioner.d.ts +5 -4
- package/dist/internal/pseudo-localization.js +1 -1
- package/dist/internal/reactive-property-writes.d.ts +1 -0
- package/dist/internal/reactive-property-writes.js +1 -0
- package/dist/internal/safe-css.js +1 -1
- package/dist/internal/step-value.d.ts +6 -0
- package/dist/internal/step-value.js +1 -0
- package/dist/internal/svg-title.d.ts +3 -0
- package/dist/internal/svg-title.js +1 -0
- package/dist/internal/text-quote.js +1 -1
- package/dist/lyra.d.ts +1 -1
- package/dist/svelte.d.ts +1 -1
- package/dist/translations/ar.js +2 -2
- package/dist/translations/de.js +2 -2
- package/dist/translations/es.js +2 -2
- package/dist/translations/fa.js +2 -2
- package/dist/translations/fr.js +2 -2
- package/dist/translations/he.js +2 -2
- package/dist/translations/ja.js +2 -2
- package/dist/translations/pseudo/ar-XB.js +1 -1
- package/dist/translations/pt-BR.js +2 -2
- package/dist/translations/ru.js +2 -2
- package/dist/translations/zh-CN.js +2 -2
- package/dist/vue.d.ts +1 -1
- package/llms/components/lr-accordion-item.md +10 -5
- package/llms/components/lr-accordion.md +10 -5
- package/llms/components/lr-activity-feed.md +6 -5
- package/llms/components/lr-agent-run.md +1 -1
- package/llms/components/lr-agent-trace.md +3 -0
- package/llms/components/lr-agent-workspace.md +3 -2
- 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 +8 -3
- package/llms/components/lr-audio-visualizer.md +9 -6
- package/llms/components/lr-av-player.md +14 -0
- package/llms/components/lr-avatar.md +4 -0
- package/llms/components/lr-bar-chart.md +2 -2
- package/llms/components/lr-box-plot.md +15 -6
- package/llms/components/lr-bubble-chart.md +2 -2
- package/llms/components/lr-button.md +11 -3
- package/llms/components/lr-calendar-viewer.md +4 -0
- package/llms/components/lr-calendar.md +15 -4
- package/llms/components/lr-carousel.md +5 -0
- package/llms/components/lr-chart.md +24 -9
- package/llms/components/lr-chat-composer.md +2 -1
- 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-chunk-inspector.md +2 -2
- package/llms/components/lr-code-block-core.md +20 -8
- package/llms/components/lr-code-block.md +17 -14
- package/llms/components/lr-code-editor.md +20 -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 +10 -1
- package/llms/components/lr-dashboard-grid.md +5 -0
- package/llms/components/lr-data-grid.md +22 -3
- package/llms/components/lr-dataset-viewer.md +3 -2
- package/llms/components/lr-date-input.md +50 -6
- package/llms/components/lr-date-picker.md +51 -7
- package/llms/components/lr-details.md +10 -5
- package/llms/components/lr-dialog.md +4 -0
- package/llms/components/lr-diff-view.md +6 -0
- package/llms/components/lr-document-compare.md +6 -2
- package/llms/components/lr-document-library.md +4 -0
- package/llms/components/lr-document-preview.md +18 -4
- package/llms/components/lr-document-viewer.md +14 -4
- package/llms/components/lr-docx-viewer.md +6 -0
- package/llms/components/lr-doughnut-chart.md +2 -2
- package/llms/components/lr-dropdown-item.md +4 -0
- package/llms/components/lr-dropdown.md +3 -0
- package/llms/components/lr-ebook-viewer.md +12 -3
- package/llms/components/lr-email-viewer.md +10 -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-eval-dataset.md +2 -2
- package/llms/components/lr-export-button.md +9 -0
- package/llms/components/lr-file-input.md +12 -8
- 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-date.md +3 -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-legend.md +4 -2
- package/llms/components/lr-graph-query-builder.md +6 -0
- package/llms/components/lr-graph.md +8 -2
- package/llms/components/lr-grounding-summary.md +8 -8
- package/llms/components/lr-heatmap.md +13 -0
- package/llms/components/lr-histogram.md +2 -2
- 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 +5 -1
- package/llms/components/lr-input.md +22 -8
- package/llms/components/lr-intersection-observer.md +9 -0
- package/llms/components/lr-json-viewer.md +10 -1
- package/llms/components/lr-kbd.md +3 -0
- package/llms/components/lr-knowledge-base.md +10 -1
- package/llms/components/lr-knowledge-graph-explorer.md +7 -0
- package/llms/components/lr-known-date.md +7 -0
- package/llms/components/lr-line-chart.md +2 -2
- package/llms/components/lr-lite-chart.md +29 -9
- package/llms/components/lr-live-region.md +3 -0
- package/llms/components/lr-locale-picker.md +12 -0
- package/llms/components/lr-map.md +23 -5
- package/llms/components/lr-markdown-core.md +4 -0
- package/llms/components/lr-markdown.md +15 -8
- package/llms/components/lr-media-card.md +5 -8
- package/llms/components/lr-mention-popover.md +17 -10
- 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 +13 -3
- package/llms/components/lr-message-feedback.md +24 -7
- package/llms/components/lr-message-parts.md +6 -3
- package/llms/components/lr-model-select.md +13 -2
- package/llms/components/lr-multi-split.md +20 -7
- package/llms/components/lr-mutation-observer.md +8 -0
- package/llms/components/lr-native-time-input.md +10 -0
- package/llms/components/lr-node-palette.md +8 -2
- 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-pie-chart.md +2 -2
- package/llms/components/lr-polar-area-chart.md +2 -2
- 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-input.md +7 -3
- package/llms/components/lr-prompt-queue.md +6 -0
- 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 +8 -0
- package/llms/components/lr-qr-code.md +6 -0
- package/llms/components/lr-radar-chart.md +2 -2
- 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 +8 -0
- package/llms/components/lr-relative-time.md +2 -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 +6 -3
- package/llms/components/lr-result-field.md +6 -3
- package/llms/components/lr-retrieval-results.md +1 -1
- package/llms/components/lr-rubric-form.md +12 -0
- package/llms/components/lr-scatter-chart.md +2 -2
- package/llms/components/lr-scroller.md +5 -5
- package/llms/components/lr-select.md +9 -0
- package/llms/components/lr-sequence-playback.md +5 -2
- package/llms/components/lr-slider.md +19 -5
- 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-streaming-text.md +2 -3
- 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 +17 -5
- package/llms/components/lr-textarea.md +9 -0
- package/llms/components/lr-thinking-panel.md +3 -1
- package/llms/components/lr-thread-list.md +26 -4
- 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 +7 -5
- package/llms/components/lr-tool-param-form.md +6 -2
- package/llms/components/lr-tool-result-dialog.md +4 -0
- package/llms/components/lr-tool-result-view.md +2 -3
- package/llms/components/lr-tool-select-dialog.md +6 -2
- 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 +15 -2
- package/llms/components/lr-widget-renderer.md +21 -13
- 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/peers.md +5 -5
- package/llms/shared.md +74 -63
- package/llms-full.txt +4705 -2954
- package/package.json +19 -14
- package/vscode-css-data.json +1 -1
- package/vscode-html-data.json +1 -1
- package/web-types.json +1 -1
- package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.d.ts +0 -1
- package/dist/components/viewers/docx-viewer/fixtures/minimal-docx-fixture.js +0 -1
- package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.d.ts +0 -1
- package/dist/components/viewers/ebook-viewer/fixtures/minimal-epub-fixture.js +0 -1
- package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.d.ts +0 -1
- package/dist/components/viewers/spreadsheet-viewer/fixtures/minimal-xlsx-fixture.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{css}from"lit";const styles=css`:host{font-size:var(--lr-font-size-md-sm);line-height:var(--lr-line-height-1-4);display:block}[part=base]{align-items:flex-start;gap:var(--lr-space-xs);padding:var(--lr-space-s) var(--lr-space-m);border-radius:var(--lr-radius);transition:background-color var(--lr-transition-fast);display:flex;position:relative}[part=active-indicator]{inset-block:0;inset-inline:var(--lr-conversation-item-active-indicator-inset-inline,0 auto);inline-size:var(--lr-conversation-item-active-indicator-width,var(--lr-size-2px));box-sizing:border-box;border-radius:var(--lr-radius-xs);background:var(--lr-conversation-item-active-indicator-color,var(--lr-color-brand));pointer-events:none;z-index:var(--lr-layer-content);position:absolute}:host([compact]) [part=base]{padding:var(--lr-conversation-item-compact-padding,var(--lr-space-xs) var(--lr-space-s));gap:var(--lr-conversation-item-compact-gap,var(--lr-space-2xs))}:host(:hover) [part=base]{background:color-mix(in srgb, var(--lr-color-text) 6%, transparent)}:host(:active) [part=base]{background:color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active))}:host([active]) [part=base]{background:var(--lr-conversation-item-active-bg,var(--lr-color-brand-quiet))}:host([active]:active) [part=base]{background:color-mix(in oklab, var(--lr-conversation-item-active-bg,var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))}:host([active]) [part=excerpt],:host([active]) [part=timestamp]{color:var(--lr-conversation-item-active-color,var(--lr-color-text))}[part=select-button]{align-items:flex-start;gap:var(--lr-space-s);cursor:pointer;-webkit-tap-highlight-color:transparent;outline:none;flex:auto;min-inline-size:0;display:flex}[part=start]{min-inline-size:var(--lr-size-1-5rem);min-block-size:var(--lr-size-1-5rem);flex:none;justify-content:center;align-items:center;display:inline-flex}[part=start][hidden]{display:none}[part=select-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=content]{gap:var(--lr-size-0-125rem);flex-direction:column;flex:auto;min-inline-size:0;display:flex}:host([compact]) [part=content]{gap:0}[part=label]{text-overflow:ellipsis;white-space:nowrap;font-weight:var(--lr-font-weight-semibold);color:var(--lr-color-text);display:block;overflow:hidden}[part=label-input]{box-sizing:border-box;inline-size:100%;padding:var(--lr-size-0-125rem) var(--lr-space-xs);border:var(--lr-border-width-thin) solid var(--lr-color-brand);border-radius:calc(var(--lr-radius) * .6);background:var(--lr-color-surface);color:var(--lr-color-text);font:inherit;font-weight:var(--lr-font-weight-semibold);display:block}[part=label-input]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=excerpt]{text-overflow:ellipsis;white-space:nowrap;color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm);display:block;overflow:hidden}[part=excerpt][hidden]{display:none}[part=timestamp]{white-space:nowrap;color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs);font-variant-numeric:tabular-nums;flex:none;align-self:flex-start}[part=rename-button]{min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);border-radius:calc(var(--lr-radius) * .6);color:var(--lr-color-text-quiet);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background-color var(--lr-transition-fast);background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}[part=rename-button]:hover{background:color-mix(in srgb, var(--lr-color-text) 8%, transparent);color:var(--lr-color-text)}[part=rename-button]:active{background:color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-text)}[part=rename-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=rename-button] svg{display:block}[part=actions]{align-items:center;gap:var(--lr-space-xs);flex:none;display:flex}[part=actions][hidden]{display:none}@media (prefers-reduced-motion:reduce){[part=base],[part=rename-button]{transition:none!important}}`;export{styles};
|
|
1
|
+
import{css}from"lit";const styles=css`:host{font-size:var(--lr-font-size-md-sm);line-height:var(--lr-line-height-1-4);display:block}[part=base]{align-items:flex-start;gap:var(--lr-space-xs);padding:var(--lr-space-s) var(--lr-space-m);border-radius:var(--lr-radius);transition:background-color var(--lr-transition-fast);display:flex;position:relative}[part=active-indicator]{inset-block:0;inset-inline:var(--lr-conversation-item-active-indicator-inset-inline,0 auto);inline-size:var(--lr-conversation-item-active-indicator-width,var(--lr-size-2px));box-sizing:border-box;border-radius:var(--lr-radius-xs);background:var(--lr-conversation-item-active-indicator-color,var(--lr-color-brand));pointer-events:none;z-index:var(--lr-layer-content);position:absolute}:host([compact]) [part=base]{padding:var(--lr-conversation-item-compact-padding,var(--lr-space-xs) var(--lr-space-s));gap:var(--lr-conversation-item-compact-gap,var(--lr-space-2xs))}:host(:hover) [part=base]{background:color-mix(in srgb, var(--lr-color-text) 6%, transparent)}:host(:active) [part=base]{background:color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active))}:host([active]) [part=base]{background:var(--lr-conversation-item-active-bg,var(--lr-color-brand-quiet))}:host([active]:active) [part=base]{background:color-mix(in oklab, var(--lr-conversation-item-active-bg,var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active))}:host([active]) [part=excerpt],:host([active]) [part=timestamp]{color:var(--lr-conversation-item-active-color,var(--lr-color-text))}[part=select-button]{align-items:flex-start;gap:var(--lr-space-s);cursor:pointer;-webkit-tap-highlight-color:transparent;outline:none;flex:auto;min-inline-size:0;display:flex}[part=start]{min-inline-size:var(--lr-size-1-5rem);min-block-size:var(--lr-size-1-5rem);flex:none;justify-content:center;align-items:center;display:inline-flex}[part=start][hidden]{display:none}[part=select-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=content]{gap:var(--lr-size-0-125rem);flex-direction:column;flex:auto;min-inline-size:0;display:flex}:host([compact]) [part=content]{gap:0}[part=label]{text-overflow:ellipsis;white-space:nowrap;font-weight:var(--lr-font-weight-semibold);color:var(--lr-color-text);display:block;overflow:hidden}[part=label-input]{box-sizing:border-box;inline-size:100%;padding:var(--lr-size-0-125rem) var(--lr-space-xs);border:var(--lr-border-width-thin) solid var(--lr-color-brand);border-radius:calc(var(--lr-radius) * .6);background:var(--lr-color-surface);color:var(--lr-color-text);font:inherit;font-weight:var(--lr-font-weight-semibold);display:block}[part=label-input]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=excerpt]{text-overflow:ellipsis;white-space:nowrap;color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-sm);display:block;overflow:hidden}[part=excerpt][hidden]{display:none}[part=timestamp]{white-space:nowrap;color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-xs);font-variant-numeric:tabular-nums;flex:none;align-self:flex-start}[part=rename-button]{font:inherit;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);border-radius:calc(var(--lr-radius) * .6);color:var(--lr-color-text-quiet);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background-color var(--lr-transition-fast);background:0 0;border:none;flex:none;justify-content:center;align-items:center;padding:0;display:inline-flex}[part=rename-button]:hover{background:color-mix(in srgb, var(--lr-color-text) 8%, transparent);color:var(--lr-color-text)}[part=rename-button]:active{background:color-mix(in oklab, transparent, var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-text)}[part=rename-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=rename-button] svg{display:block}[part=actions]{align-items:center;gap:var(--lr-space-xs);flex:none;display:flex}[part=actions][hidden]{display:none}@media (prefers-reduced-motion:reduce){[part=base],[part=rename-button]{transition:none!important}}`;export{styles};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{css}from"lit";const styles=css`:host{vertical-align:middle;min-inline-size:0;max-inline-size:100%;display:inline-flex}[part=base]{max-inline-size:100%;font
|
|
1
|
+
import{css}from"lit";const styles=css`:host{vertical-align:middle;min-inline-size:0;max-inline-size:100%;font-size:var(--lr-font-size-sm);display:inline-flex}[part=base]{max-inline-size:100%;font:inherit;line-height:var(--lr-line-height-snug);color:var(--lr-color-text-quiet);flex-wrap:wrap;align-items:center;display:inline-flex}[part=elapsed]{color:var(--lr-color-text);font-variant-numeric:tabular-nums;white-space:nowrap}[part=tokens],[part=throughput]{font-variant-numeric:tabular-nums;overflow-wrap:anywhere;min-inline-size:0}[part=tokens]:before,[part=throughput]:before{content:"·";margin-inline:var(--lr-size-0-4em);opacity:.6}[part=stop-button]{font:inherit;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);border:var(--lr-border-width-thin) solid var(--lr-color-border);background:var(--lr-color-surface);color:var(--lr-color-text);cursor:pointer;-webkit-tap-highlight-color:transparent;transition:background-color var(--lr-transition-fast), border-color var(--lr-transition-fast), color var(--lr-transition-fast);border-radius:50%;flex:none;justify-content:center;align-items:center;margin-inline-start:var(--lr-space-s);padding:0;display:inline-flex}[part=stop-button]:hover{border-color:var(--lr-color-brand);color:var(--lr-color-brand)}[part=stop-button]:active{border-color:var(--lr-color-brand);color:var(--lr-color-brand);background:color-mix(in oklab, var(--lr-color-surface), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=stop-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}[part=stop-button] svg{display:block}@media (prefers-reduced-motion:reduce){[part=stop-button]{transition:none!important}}`;export{styles};
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
export interface KatexApi{renderToString(tex:string,options?:Record<string,unknown>):string;}
|
|
4
4
|
/**
|
|
5
5
|
* Loads the optional peer dependency `katex`, used by `<lr-markdown>`'s `math` property to
|
|
6
|
-
* render `$...$`/`$$...$$` TeX as MathML. Resolves `null`
|
|
7
|
-
* peer isn't installed -- rendering falls back to the literal, unparsed TeX source in that
|
|
8
|
-
* a fully supported default rather than a degraded mode. Mirrors `dompurify-loader.ts`'s
|
|
9
|
-
* optional-peer shape.
|
|
6
|
+
* render `$...$`/`$$...$$` TeX as MathML. Resolves `null` with a one-time development diagnostic
|
|
7
|
+
* if the peer isn't installed -- rendering falls back to the literal, unparsed TeX source in that
|
|
8
|
+
* case, a fully supported default rather than a degraded mode. Mirrors `dompurify-loader.ts`'s
|
|
9
|
+
* single-optional-peer shape.
|
|
10
10
|
*/
|
|
11
11
|
export declare function loadKatex(importKatex?:()=>Promise<unknown>):Promise<KatexApi|null>;
|
|
12
12
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{resolveOptionalPeerCapability}from"../../../internal/optional-peer-capabilities.js";function isKatexApi(value){return(typeof value=="object"||typeof value=="function")&&value!==null&&"renderToString"in value&&typeof value.renderToString=="function"}let cached,cacheGeneration;const KATEX_CACHE_GENERATION=Symbol.for("@aceshooting/lyra-ui/markdown-katex-cache-generation");async function loadKatex(importKatex=()=>import("katex")){try{return resolveOptionalPeerCapability(await importKatex(),isKatexApi)}catch
|
|
1
|
+
import{resolveOptionalPeerCapability}from"../../../internal/optional-peer-capabilities.js";import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";const KATEX_WARNING_KEY="lyra-markdown-katex-unavailable",KATEX_WARNING="<lr-markdown>/<lr-markdown-core>: Math rendering is unavailable because the optional KaTeX peer could not load. TeX is rendered as literal text.";function isKatexApi(value){return(typeof value=="object"||typeof value=="function")&&value!==null&&"renderToString"in value&&typeof value.renderToString=="function"}let cached,cacheGeneration;const KATEX_CACHE_GENERATION=Symbol.for("@aceshooting/lyra-ui/markdown-katex-cache-generation");async function loadKatex(importKatex=()=>import("katex")){try{return resolveOptionalPeerCapability(await importKatex(),isKatexApi)}catch{return devWarnOnce(KATEX_WARNING_KEY,KATEX_WARNING),null}}function getKatex(importKatex){const generation=Reflect.get(globalThis,KATEX_CACHE_GENERATION);return generation!==cacheGeneration&&(cached=void 0,cacheGeneration=generation),cached||(cached=loadKatex(importKatex)),cached}export{getKatex,loadKatex};
|
|
@@ -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{state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteInteger}from"../../../internal/numbers.js";import{DocumentAnchorTarget}from"../../../internal/anchor-target.js";import{buildQuoteAnchor,createTextQuoteIndex,scopeFromElement}from"../../../internal/text-quote.js";import{acquireHighlightHandle,supportsCustomHighlights}from"../../../internal/text-highlights.js";import{ThemeWatcher}from"../../../internal/theme-watcher.js";import{addFailedHighlightKey,applyMarkdownAriaBusy,applyMarkdownFragmentAnchor,applyMarkdownTextQuoteAnchor,beginMarkdownDepsLoad,getCachedHighlight,hitTestHighlightRanges,HIGHLIGHT_CACHE_MAX,internalLinkHrefFrom,markdownHighlightConfigChanged,markdownLanguageSetChanged,markdownMathPeerError,markdownNeedsReparse,MarkdownOwnedAnimationFrameController,MarkdownParserController,normalizeMarkdownHtmlMode,normalizeMarkdownLeadingTabs,parseMarkdownDocument,processPendingHighlights,renderMarkdownContent,renderMarkdownDocument,repaintMarkdownHighlights,resolveMarkdownDarkTheme,setCachedHighlight}from"./markdown-shared.js";import{LYRA_DEFAULT_anchorJumped,LYRA_DEFAULT_anchorJumpedToPage,LYRA_DEFAULT_anchorNotFound}from"../../../internal/default-strings.generated.js";class LyraMarkdownRuntimeElement extends LyraElement{static{this.defaultStrings={...super.defaultStrings,anchorJumped:LYRA_DEFAULT_anchorJumped,anchorJumpedToPage:LYRA_DEFAULT_anchorJumpedToPage,anchorNotFound:LYRA_DEFAULT_anchorNotFound}}}function createMarkdownVariantContext(tag,katexState){return{tag,connectedInstances:new Set,sharedParser:new MarkdownParserController,katexState}}class MarkdownRuntimeBase extends DocumentAnchorTarget(LyraMarkdownRuntimeElement){constructor(){super(),this.anchorKinds=["fragment","text-quote"],this.renderedHtml=null,this.isDarkTheme=!1,this.parser=new MarkdownParserController,this.headingTree=[],this.markdownTextScopeBuilds=0,this.resolvedHighlightRanges=[],this.mathFailureReported=!1,this.highlightCache=new Map,this.highlightToken=0,this.streamingRenderFrames=new MarkdownOwnedAnimationFrameController,this.failedHighlightKeys=new Set,this.inFlightHighlightKeys=new Set,this.handleKatexResolved=()=>{this.isConnected&&this.renderMarkdown()},this.onContentClick=event=>{const highlightId=hitTestHighlightRanges(this.resolvedHighlightRanges,event.clientX,event.clientY);if(highlightId){this.emit("lr-highlight-activate",{highlightId});return}const href=internalLinkHrefFrom(event,this.internalLinkPrefix);href!==null&&(event.preventDefault(),this.emit("lr-link-click",{href}))},new ThemeWatcher(this,()=>this.refreshTheme())}get marked(){return this.parser.get(this.deps?.marked)}refreshTheme(){this.isDarkTheme=resolveMarkdownDarkTheme(this)}connectedCallback(){super.connectedCallback(),this.markdownVariant.connectedInstances.add(this),this.refreshTheme(),beginMarkdownDepsLoad(this,resolved=>{this.deps=resolved,this.renderMarkdown(),this.requestUpdate()})}disconnectedCallback(){this.markdownVariant.connectedInstances.delete(this),super.disconnectedCallback(),this.highlightToken++,this.cancelStreamingRender(),this.highlightHandle?.release(),this.highlightHandle=void 0,this.textQuoteIndexCache=void 0}adoptedCallback(){super.adoptedCallback(),this.cancelStreamingRender()}firstUpdated(changed){super.firstUpdated(changed);const contentRoot=this.renderRoot.querySelector('[part="content"]');contentRoot&&this.bindTextSelection(contentRoot)}willUpdate(changed){if(super.willUpdate(changed),changed.has("math")&&(this.mathFailureReported=!1),!this.deps||!markdownNeedsReparse(changed))return;if((changed.has("content")||changed.has("streaming")||markdownHighlightConfigChanged(changed))&&this.highlightToken++,markdownHighlightConfigChanged(changed)&&(this.failedHighlightKeys.clear(),markdownLanguageSetChanged(changed)&&this.highlightCache.clear()),this.streaming){this.scheduleStreamingRender();return}this.cancelStreamingRender(),this.renderMarkdown()}cancelStreamingRender(){const handle=this.streamingRenderRaf;this.streamingRenderRaf=void 0,!this.streamingRenderFrames.cancel()&&handle!==void 0&&this.ownerDocument.defaultView?.cancelAnimationFrame(handle)}scheduleStreamingRender(){if(this.streamingRenderRaf!==void 0)return;const view=this.ownerDocument.defaultView;if(!view){this.isConnected&&this.renderMarkdown();return}const handle=this.streamingRenderFrames.request(view,()=>{this.streamingRenderRaf=void 0,this.isConnected&&this.ownerDocument.defaultView===view&&this.renderMarkdown()});handle===void 0?this.isConnected&&this.renderMarkdown():this.streamingRenderFrames.handle===handle&&(this.streamingRenderRaf=handle)}async getUpdateComplete(){const complete=await super.getUpdateComplete(),settled=this.streamingRenderFrames.settled;return settled?(await settled,super.getUpdateComplete()):complete}updated(changed){super.updated(changed),applyMarkdownAriaBusy(this,!this.deps||this.streaming);const locale=this.effectiveLocale,localeChanged=this.textQuoteLocale!==void 0&&this.textQuoteLocale!==locale;this.textQuoteLocale=locale,localeChanged&&(this.textQuoteIndexCache=void 0),changed.has("renderedHtml")&&(this.textQuoteIndexCache=void 0),(changed.has("renderedHtml")||changed.has("highlights")||changed.has("activeHighlightId")||localeChanged&&this.highlights.length>0)&&this.repaintHighlights()}renderMarkdown(){if(this.streaming){this.renderedHtml=null,this.headingTree=[];return}const deps=this.deps;if(!deps)return;const variant=this.markdownVariant,outcome=renderMarkdownDocument({tag:variant.tag,deps,htmlMode:normalizeMarkdownHtmlMode(this.htmlMode),math:this.math,parse:(marked,pendingKeys,headingTreeOut)=>this.parseMarkdown(marked,pendingKeys,headingTreeOut),onParsed:()=>this.maybeLoadKatex(),isKatexConfirmedMissing:()=>variant.katexState.isConfirmedMissing()});if(outcome.headingTree&&(this.headingTree=outcome.headingTree),outcome.status==="fallback"){this.renderedHtml=null,this.emit("lr-render-error",{error:outcome.error});return}this.renderedHtml=outcome.html,outcome.mathFailed&&this.reportMathFailure(),outcome.pendingKeys.length>0&&this.highlightCode&&!this.streaming&&this.highlightPending(outcome.pendingKeys)}maybeLoadKatex(){this.math&&this.markdownVariant.katexState.startLoad(this.handleKatexResolved)}reportMathFailure(){this.mathFailureReported||(this.mathFailureReported=!0,this.emit("lr-render-error",{error:markdownMathPeerError(this.markdownVariant.tag)}))}getCachedHighlight(key){return getCachedHighlight(this.highlightCache,key)}setCachedHighlight(key,html){return setCachedHighlight(this.highlightCache,key,html,HIGHLIGHT_CACHE_MAX)}async highlightPending(pendingKeys){const work=pendingKeys.filter(({key})=>!this.inFlightHighlightKeys.has(key));if(work.length===0)return;for(const{key}of work)this.inFlightHighlightKeys.add(key);const token=this.highlightToken,languages=this.languages,isCurrent=()=>token===this.highlightToken&&this.isConnected,tokenizeOne=async pending=>{const html=await this.tokenizePendingHighlight(pending,languages,isCurrent);!isCurrent()||html===void 0||(html===null||!this.setCachedHighlight(pending.key,html))&&addFailedHighlightKey(this.failedHighlightKeys,pending.key)};try{await processPendingHighlights(work,tokenizeOne)}catch(error){console.warn("<lr-markdown>/<lr-markdown-core> failed to tokenize a pending highlight:",error)}finally{for(const{key}of work)this.inFlightHighlightKeys.delete(key)}this.isConnected&&this.renderMarkdown()}parseMarkdown(marked,pendingKeys,headingTreeOut){const variant=this.markdownVariant;return parseMarkdownDocument({marked,content:normalizeMarkdownLeadingTabs(this.content,finiteInteger(this.tabSize,4,1,32)),markedConfigurations:[variant.sharedParser.get(marked)?.defaults,this.marked?.defaults],gfm:this.gfm,linkTarget:this.linkTarget,headingOffset:finiteInteger(this.headingOffset,0,0,6),escapeHtmlOption:normalizeMarkdownHtmlMode(this.htmlMode)==="escape",trustedHtmlOption:normalizeMarkdownHtmlMode(this.htmlMode)==="trusted",highlightCodeOption:this.highlightCode&&!this.streaming,getCachedHighlight:key=>this.getCachedHighlight(key),failedHighlightKeys:this.failedHighlightKeys,headingAnchorsOption:this.headingAnchors,mathOption:this.math,cachedKatex:this.math?variant.katexState.getIfLoaded():null,pendingKeys,headingTreeOut})}getHeadingTree(){return[...this.headingTree]}contentRoot(){return this.renderRoot.querySelector('[part="content"]')}async applyAnchor(anchor){const root=this.contentRoot();if(!root)return!1;if(anchor.kind==="fragment")return applyMarkdownFragmentAnchor(root,anchor,this.headingTree);if(anchor.kind==="text-quote"){const index=this.markdownTextIndex(root),found=applyMarkdownTextQuoteAnchor(root,anchor,this.effectiveLocale,index);return!supportsCustomHighlights(this.ownerDocument)&&this.highlights.length>0&&this.repaintHighlights(),found}return!1}computeSelectionAnchor(range){const root=this.contentRoot();if(!root)return null;const anchor=buildQuoteAnchor(range,this.markdownTextIndex(root).scope);return!supportsCustomHighlights(this.ownerDocument)&&this.highlights.length>0&&this.scheduleAfterUpdate(()=>this.repaintHighlights()),anchor}ensureHighlightHandle(){return this.highlightHandle??=acquireHighlightHandle(this,this.ownerDocument),this.highlightHandle}markdownTextIndex(root){const locale=this.effectiveLocale,cached=this.textQuoteIndexCache;if(cached?.root===root&&cached.locale===locale&&!cached.mappingDirty)return cached.index;if(cached?.mappingDirty){const handle=this.ensureHighlightHandle();for(const tone of["accent","success","warning","danger","neutral"])handle.setRanges(tone,[]);handle.setActive(null)}const scope=scopeFromElement(root);if(this.markdownTextScopeBuilds++,cached?.root===root&&cached.locale===locale&&cached.index.rebindScope(scope))return cached.mappingDirty=!1,cached.index;const index=createTextQuoteIndex(scope,locale);return this.textQuoteIndexCache={root,locale,index,mappingDirty:!1},index}markdownTextScopeBuildCount(){return this.markdownTextScopeBuilds}markdownTextQuoteScanCount(){return this.textQuoteIndexCache?.index.scanCount??0}repaintHighlights(){this.resolvedHighlightRanges=[];const root=this.contentRoot();if(!root)return;const index=this.markdownTextIndex(root);this.resolvedHighlightRanges=repaintMarkdownHighlights({locale:this.effectiveLocale,root,handle:this.ensureHighlightHandle(),highlights:this.highlights,activeHighlightId:this.activeHighlightId,index}),!supportsCustomHighlights(this.ownerDocument)&&this.textQuoteIndexCache&&(this.textQuoteIndexCache.mappingDirty=!0)}render(){return renderMarkdownContent({content:this.content,sanitized:normalizeMarkdownHtmlMode(this.htmlMode)==="sanitize",renderedHtml:this.renderedHtml,hostAriaLabel:this.getAttribute("aria-label"),isDarkTheme:this.isDarkTheme,onClick:this.onContentClick,liveRegion:this.renderAnchorLiveRegion()})}}__decorate([state()],MarkdownRuntimeBase.prototype,"renderedHtml",void 0),__decorate([state()],MarkdownRuntimeBase.prototype,"isDarkTheme",void 0);export{MarkdownRuntimeBase,createMarkdownVariantContext};
|
|
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{state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteInteger}from"../../../internal/numbers.js";import{DocumentAnchorTarget}from"../../../internal/anchor-target.js";import{buildQuoteAnchor,createTextQuoteIndex,scopeFromElement}from"../../../internal/text-quote.js";import{acquireHighlightHandle,supportsCustomHighlights}from"../../../internal/text-highlights.js";import{ThemeWatcher}from"../../../internal/theme-watcher.js";import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";import{addFailedHighlightKey,applyMarkdownAriaBusy,applyMarkdownFragmentAnchor,applyMarkdownTextQuoteAnchor,beginMarkdownDepsLoad,getCachedHighlight,hitTestHighlightRanges,HIGHLIGHT_CACHE_MAX,internalLinkHrefFrom,markdownAnchorFromTarget,markdownHighlightConfigChanged,markdownLanguageSetChanged,markdownMathPeerError,markdownNeedsReparse,MarkdownOwnedAnimationFrameController,MarkdownParserController,normalizeMarkdownHtmlMode,normalizeMarkdownLeadingTabs,parseMarkdownDocument,processPendingHighlights,renderMarkdownContent,renderMarkdownDocument,repaintMarkdownHighlights,resolveMarkdownDarkTheme,setCachedHighlight}from"./markdown-shared.js";import{LYRA_DEFAULT_anchorJumped,LYRA_DEFAULT_anchorJumpedToPage,LYRA_DEFAULT_anchorNotFound}from"../../../internal/default-strings.generated.js";const HIGHLIGHT_FAILURE_WARNING_KEY="lyra-markdown-highlight-failed",HIGHLIGHT_FAILURE_WARNING="<lr-markdown>/<lr-markdown-core>: Syntax highlighting could not complete. Code is rendered as plain text.";function keyboardHighlightIdFrom(ranges,event){const coordinateLess=event.clientX===0&&event.clientY===0&&event.screenX===0&&event.screenY===0;if(event.detail!==0&&!coordinateLess)return null;const anchor=event.composedPath().find(target=>markdownAnchorFromTarget(target)!==void 0);if(!anchor)return null;for(let index=ranges.length-1;index>=0;index--){const range=ranges[index];if(range)try{if(range.range.intersectsNode(anchor))return range.id}catch{}}return null}class LyraMarkdownRuntimeElement extends LyraElement{static{this.defaultStrings={...super.defaultStrings,anchorJumped:LYRA_DEFAULT_anchorJumped,anchorJumpedToPage:LYRA_DEFAULT_anchorJumpedToPage,anchorNotFound:LYRA_DEFAULT_anchorNotFound}}}function createMarkdownVariantContext(tag,katexState){return{tag,connectedInstances:new Set,sharedParser:new MarkdownParserController,katexState}}class MarkdownRuntimeBase extends DocumentAnchorTarget(LyraMarkdownRuntimeElement){constructor(){super(),this.anchorKinds=["fragment","text-quote"],this.renderedHtml=null,this.isDarkTheme=!1,this.parser=new MarkdownParserController,this.headingTree=[],this.markdownTextScopeBuilds=0,this.resolvedHighlightRanges=[],this.mathFailureReported=!1,this.highlightCache=new Map,this.highlightToken=0,this.streamingRenderFrames=new MarkdownOwnedAnimationFrameController,this.failedHighlightKeys=new Set,this.inFlightHighlightKeys=new Set,this.handleKatexResolved=()=>{this.isConnected&&this.renderMarkdown()},this.onContentClick=event=>{const href=internalLinkHrefFrom(event,this.internalLinkPrefix);href!==null&&event.preventDefault();const highlightId=hitTestHighlightRanges(this.resolvedHighlightRanges,event.clientX,event.clientY)??keyboardHighlightIdFrom(this.resolvedHighlightRanges,event);highlightId&&this.emit("lr-highlight-activate",{highlightId}),href!==null&&this.emit("lr-link-click",{href})},new ThemeWatcher(this,()=>this.refreshTheme())}get marked(){return this.parser.get(this.deps?.marked)}refreshTheme(){this.isDarkTheme=resolveMarkdownDarkTheme(this)}connectedCallback(){super.connectedCallback(),this.markdownVariant.connectedInstances.add(this),this.refreshTheme(),beginMarkdownDepsLoad(this,resolved=>{this.deps=resolved,this.renderMarkdown(),this.requestUpdate()})}disconnectedCallback(){this.markdownVariant.connectedInstances.delete(this),super.disconnectedCallback(),this.highlightToken++,this.cancelStreamingRender(),this.highlightHandle?.release(),this.highlightHandle=void 0,this.textQuoteIndexCache=void 0}adoptedCallback(){super.adoptedCallback(),this.cancelStreamingRender()}firstUpdated(changed){super.firstUpdated(changed);const contentRoot=this.renderRoot.querySelector('[part="content"]');contentRoot&&this.bindTextSelection(contentRoot)}willUpdate(changed){if(super.willUpdate(changed),changed.has("math")&&(this.mathFailureReported=!1),!this.deps||!markdownNeedsReparse(changed))return;if((changed.has("content")||changed.has("streaming")||markdownHighlightConfigChanged(changed))&&this.highlightToken++,markdownHighlightConfigChanged(changed)&&(this.failedHighlightKeys.clear(),markdownLanguageSetChanged(changed)&&this.highlightCache.clear()),this.streaming){this.scheduleStreamingRender();return}this.cancelStreamingRender(),this.renderMarkdown()}cancelStreamingRender(){const handle=this.streamingRenderRaf;this.streamingRenderRaf=void 0,!this.streamingRenderFrames.cancel()&&handle!==void 0&&this.ownerDocument.defaultView?.cancelAnimationFrame(handle)}scheduleStreamingRender(){if(this.streamingRenderRaf!==void 0)return;const view=this.ownerDocument.defaultView;if(!view){this.isConnected&&this.renderMarkdown();return}const handle=this.streamingRenderFrames.request(view,()=>{this.streamingRenderRaf=void 0,this.isConnected&&this.ownerDocument.defaultView===view&&this.renderMarkdown()});handle===void 0?this.isConnected&&this.renderMarkdown():this.streamingRenderFrames.handle===handle&&(this.streamingRenderRaf=handle)}async getUpdateComplete(){const complete=await super.getUpdateComplete(),settled=this.streamingRenderFrames.settled;return settled?(await settled,super.getUpdateComplete()):complete}updated(changed){super.updated(changed),applyMarkdownAriaBusy(this,!this.deps||this.streaming);const locale=this.effectiveLocale,localeChanged=this.textQuoteLocale!==void 0&&this.textQuoteLocale!==locale;this.textQuoteLocale=locale,localeChanged&&(this.textQuoteIndexCache=void 0),changed.has("renderedHtml")&&(this.textQuoteIndexCache=void 0),(changed.has("renderedHtml")||changed.has("highlights")||changed.has("activeHighlightId")||localeChanged&&this.highlights.length>0)&&this.repaintHighlights()}renderMarkdown(){if(this.streaming){this.renderedHtml=null,this.headingTree=[];return}const deps=this.deps;if(!deps)return;const variant=this.markdownVariant,outcome=renderMarkdownDocument({tag:variant.tag,deps,htmlMode:normalizeMarkdownHtmlMode(this.htmlMode),math:this.math,parse:(marked,pendingKeys,headingTreeOut)=>this.parseMarkdown(marked,pendingKeys,headingTreeOut),onParsed:()=>this.maybeLoadKatex(),isKatexConfirmedMissing:()=>variant.katexState.isConfirmedMissing()});if(outcome.headingTree&&(this.headingTree=outcome.headingTree),outcome.status==="fallback"){this.renderedHtml=null,this.emit("lr-render-error",{error:outcome.error});return}this.renderedHtml=outcome.html,outcome.mathFailed&&this.reportMathFailure(),outcome.pendingKeys.length>0&&this.highlightCode&&!this.streaming&&this.highlightPending(outcome.pendingKeys)}maybeLoadKatex(){this.math&&this.markdownVariant.katexState.startLoad(this.handleKatexResolved)}reportMathFailure(){this.mathFailureReported||(this.mathFailureReported=!0,this.emit("lr-render-error",{error:markdownMathPeerError(this.markdownVariant.tag)}))}getCachedHighlight(key){return getCachedHighlight(this.highlightCache,key)}setCachedHighlight(key,html){return setCachedHighlight(this.highlightCache,key,html,HIGHLIGHT_CACHE_MAX)}async highlightPending(pendingKeys){const work=pendingKeys.filter(({key})=>!this.inFlightHighlightKeys.has(key));if(work.length===0)return;for(const{key}of work)this.inFlightHighlightKeys.add(key);const token=this.highlightToken,languages=this.languages,isCurrent=()=>token===this.highlightToken&&this.isConnected,tokenizeOne=async pending=>{const html=await this.tokenizePendingHighlight(pending,languages,isCurrent);!isCurrent()||html===void 0||(html===null||!this.setCachedHighlight(pending.key,html))&&addFailedHighlightKey(this.failedHighlightKeys,pending.key)};try{await processPendingHighlights(work,tokenizeOne)}catch{devWarnOnce(HIGHLIGHT_FAILURE_WARNING_KEY,HIGHLIGHT_FAILURE_WARNING)}finally{for(const{key}of work)this.inFlightHighlightKeys.delete(key)}this.isConnected&&this.renderMarkdown()}parseMarkdown(marked,pendingKeys,headingTreeOut){const variant=this.markdownVariant;return parseMarkdownDocument({marked,content:normalizeMarkdownLeadingTabs(this.content??"",finiteInteger(this.tabSize,4,1,32)),markedConfigurations:[variant.sharedParser.get(marked)?.defaults,this.marked?.defaults],gfm:this.gfm,linkTarget:this.linkTarget,headingOffset:finiteInteger(this.headingOffset,0,0,6),escapeHtmlOption:normalizeMarkdownHtmlMode(this.htmlMode)==="escape",trustedHtmlOption:normalizeMarkdownHtmlMode(this.htmlMode)==="trusted",highlightCodeOption:this.highlightCode&&!this.streaming,getCachedHighlight:key=>this.getCachedHighlight(key),failedHighlightKeys:this.failedHighlightKeys,headingAnchorsOption:this.headingAnchors,mathOption:this.math,cachedKatex:this.math?variant.katexState.getIfLoaded():null,pendingKeys,headingTreeOut})}getHeadingTree(){return[...this.headingTree]}contentRoot(){return this.renderRoot.querySelector('[part="content"]')}async applyAnchor(anchor){const root=this.contentRoot();if(!root)return!1;if(anchor.kind==="fragment")return applyMarkdownFragmentAnchor(root,anchor,this.headingTree);if(anchor.kind==="text-quote"){const index=this.markdownTextIndex(root),found=applyMarkdownTextQuoteAnchor(root,anchor,this.effectiveLocale,index);return!supportsCustomHighlights(this.ownerDocument)&&this.highlights.length>0&&this.repaintHighlights(),found}return!1}computeSelectionAnchor(range){const root=this.contentRoot();if(!root)return null;const anchor=buildQuoteAnchor(range,this.markdownTextIndex(root).scope);return!supportsCustomHighlights(this.ownerDocument)&&this.highlights.length>0&&this.scheduleAfterUpdate(()=>this.repaintHighlights()),anchor}ensureHighlightHandle(){return this.highlightHandle??=acquireHighlightHandle(this,this.ownerDocument),this.highlightHandle}markdownTextIndex(root){const locale=this.effectiveLocale,cached=this.textQuoteIndexCache;if(cached?.root===root&&cached.locale===locale&&!cached.mappingDirty)return cached.index;if(cached?.mappingDirty){const handle=this.ensureHighlightHandle();for(const tone of["accent","success","warning","danger","neutral"])handle.setRanges(tone,[]);handle.setActive(null)}const scope=scopeFromElement(root);if(this.markdownTextScopeBuilds++,cached?.root===root&&cached.locale===locale&&cached.index.rebindScope(scope))return cached.mappingDirty=!1,cached.index;const index=createTextQuoteIndex(scope,locale);return this.textQuoteIndexCache={root,locale,index,mappingDirty:!1},index}markdownTextScopeBuildCount(){return this.markdownTextScopeBuilds}markdownTextQuoteScanCount(){return this.textQuoteIndexCache?.index.scanCount??0}repaintHighlights(){this.resolvedHighlightRanges=[];const root=this.contentRoot();if(!root)return;const index=this.markdownTextIndex(root);this.resolvedHighlightRanges=repaintMarkdownHighlights({locale:this.effectiveLocale,root,handle:this.ensureHighlightHandle(),highlights:this.highlights,activeHighlightId:this.activeHighlightId,index}),!supportsCustomHighlights(this.ownerDocument)&&this.textQuoteIndexCache&&(this.textQuoteIndexCache.mappingDirty=!0)}render(){return renderMarkdownContent({content:this.content??"",sanitized:normalizeMarkdownHtmlMode(this.htmlMode)==="sanitize",renderedHtml:this.renderedHtml,hostAriaLabel:this.getAttribute("aria-label"),isDarkTheme:this.isDarkTheme,onClick:this.onContentClick,liveRegion:this.renderAnchorLiveRegion()})}}__decorate([state()],MarkdownRuntimeBase.prototype,"renderedHtml",void 0),__decorate([state()],MarkdownRuntimeBase.prototype,"isDarkTheme",void 0);export{MarkdownRuntimeBase,createMarkdownVariantContext};
|
|
@@ -145,7 +145,7 @@ export declare class LyraMarkdownCore extends MarkdownRuntimeBase{static styles:
|
|
|
145
145
|
static getMarked():Marked;
|
|
146
146
|
/** Re-renders every connected `<lr-markdown-core>` instance after shared parser changes. */
|
|
147
147
|
static updateAll():void;
|
|
148
|
-
/** The Markdown source to render. */
|
|
148
|
+
/** The Markdown source to render. Removing the attribute clears the document and its tab stop. */
|
|
149
149
|
content:string;
|
|
150
150
|
/** Tab-stop width used to expand tabs in leading indentation before parsing. Finite values are
|
|
151
151
|
* truncated and clamped to `[1, 32]`; non-finite values fall back to `4`. This is separate from
|
|
@@ -26,7 +26,7 @@ export interface MarkdownDeps{marked:MarkedModule|undefined;DOMPurify:HtmlSaniti
|
|
|
26
26
|
* set `html-mode="trusted"` and doesn't need `dompurify` at all — degrades to
|
|
27
27
|
* "that one half is missing" rather than failing outright. Exported (in
|
|
28
28
|
* addition to the cached `loadMarkdownDeps()` below) so both failure paths —
|
|
29
|
-
* and
|
|
29
|
+
* and their development diagnostics — are directly testable without
|
|
30
30
|
* needing to actually uninstall either package.
|
|
31
31
|
*/
|
|
32
32
|
export declare function loadMarkdownAndSanitizer(importMarked?:()=>Promise<unknown>,importDompurify?:()=>Promise<unknown>):Promise<MarkdownDeps>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isHtmlSanitizer,resolveOptionalPeerCapability}from"../../../internal/optional-peer-capabilities.js";function isLyraMarkedParser(value){return typeof value=="object"&&value!==null&&"defaults"in value&&typeof value.defaults=="object"&&value.defaults!==null&&"use"in value&&typeof value.use=="function"&&"parse"in value&&typeof value.parse=="function"}function isMarkedModule(value){if(typeof value!="object"&&typeof value!="function"||value===null||!("Marked"in value))return!1;try{const Marked=value.Marked;return typeof Marked!="function"?!1:isLyraMarkedParser(new Marked)}catch{return!1}}let deps,resolvedDeps;async function loadMarkdownAndSanitizer(importMarked=()=>import("marked"),importDompurify=()=>import("dompurify")){let marked;try{marked=resolveOptionalPeerCapability(await importMarked(),isMarkedModule)??void 0}catch
|
|
1
|
+
import{isHtmlSanitizer,resolveOptionalPeerCapability}from"../../../internal/optional-peer-capabilities.js";import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";const MARKDOWN_PARSER_WARNING_KEY="lyra-markdown-marked-unavailable",MARKDOWN_PARSER_WARNING="<lr-markdown>/<lr-markdown-core>: Markdown parsing is unavailable because the optional marked peer could not load. Content is rendered as plain text.",MARKDOWN_SANITIZER_WARNING_KEY="lyra-markdown-dompurify-unavailable",MARKDOWN_SANITIZER_WARNING="<lr-markdown>/<lr-markdown-core>: HTML sanitization is unavailable because the optional DOMPurify peer could not load. Content is rendered as plain text unless trusted HTML is explicitly selected.";function warnMarkdownParserUnavailable(){devWarnOnce(MARKDOWN_PARSER_WARNING_KEY,MARKDOWN_PARSER_WARNING)}function warnMarkdownSanitizerUnavailable(){devWarnOnce(MARKDOWN_SANITIZER_WARNING_KEY,MARKDOWN_SANITIZER_WARNING)}function isLyraMarkedParser(value){return typeof value=="object"&&value!==null&&"defaults"in value&&typeof value.defaults=="object"&&value.defaults!==null&&"use"in value&&typeof value.use=="function"&&"parse"in value&&typeof value.parse=="function"}function isMarkedModule(value){if(typeof value!="object"&&typeof value!="function"||value===null||!("Marked"in value))return!1;try{const Marked=value.Marked;return typeof Marked!="function"?!1:isLyraMarkedParser(new Marked)}catch{return!1}}let deps,resolvedDeps;async function loadMarkdownAndSanitizer(importMarked=()=>import("marked"),importDompurify=()=>import("dompurify")){let marked;try{marked=resolveOptionalPeerCapability(await importMarked(),isMarkedModule)??void 0}catch{warnMarkdownParserUnavailable()}let DOMPurify;try{DOMPurify=resolveOptionalPeerCapability(await importDompurify(),isHtmlSanitizer)??void 0}catch{warnMarkdownSanitizerUnavailable()}return{marked,DOMPurify}}function loadMarkdownDeps(){return deps||(deps=loadMarkdownAndSanitizer().then(resolved=>(resolvedDeps=resolved,resolved))),deps}function getMarkdownDepsIfLoaded(){return resolvedDeps}export{getMarkdownDepsIfLoaded,loadMarkdownAndSanitizer,loadMarkdownDeps};
|
|
@@ -172,7 +172,8 @@ onParsed:()=>void;isKatexConfirmedMissing:()=>boolean;}
|
|
|
172
172
|
* event, so this stays a pure function of its inputs.
|
|
173
173
|
*
|
|
174
174
|
* Rendering never ships unsanitized or broken markup silently: a missing/throwing `marked`, or a
|
|
175
|
-
* missing `dompurify` in `sanitize` mode both fall back to plain text plus
|
|
175
|
+
* missing/throwing `dompurify` in `sanitize` mode both fall back to plain text plus
|
|
176
|
+
* `lr-render-error`.
|
|
176
177
|
*/
|
|
177
178
|
export declare function renderMarkdownDocument(options:RenderMarkdownOptions):MarkdownRenderOutcome;
|
|
178
179
|
/** The `lr-render-error` payload for a permanently-missing `katex` peer while `math` is set. */
|
|
@@ -215,6 +216,10 @@ locale?:string;}):ResolvedHighlightRange[];
|
|
|
215
216
|
* events).
|
|
216
217
|
*/
|
|
217
218
|
export declare function hitTestHighlightRanges(ranges:readonly ResolvedHighlightRange[],x:number,y:number):string|null;
|
|
219
|
+
/** Returns a genuine HTML anchor from a composed-path entry, rejecting hostile and structural
|
|
220
|
+
* lookalikes without relying on ambient-realm `instanceof` checks. The captured native calls
|
|
221
|
+
* brand-check foreign and adopted elements without trusting candidate-owned realm metadata. */
|
|
222
|
+
export declare function markdownAnchorFromTarget(target:unknown):HTMLAnchorElement|undefined;
|
|
218
223
|
/** The `href` of the rendered link a click landed on, when `internal-link-prefix` claims it --
|
|
219
224
|
* `null` for every other click, including one on an ordinary external link.
|
|
220
225
|
*
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import{html,nothing}from"lit";import{unsafeHTML}from"lit/directives/unsafe-html.js";import{Slugger}from"../../../internal/slugger.js";import{finiteInteger}from"../../../internal/numbers.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{createTextQuoteIndex,rangeFromTextQuoteMatch,rangesFromTextQuoteMatches,scopeFromElement,TEXT_QUOTE_LIMITS,TEXT_SELECTION_RECT_LIMIT}from"../../../internal/text-quote.js";import{prioritizedHighlightCandidates}from"../../../internal/anchor-target.js";import{safeLinkHref,safeMediaSrc}from"../../../internal/safe-url.js";import{supportsCustomHighlights}from"../../../internal/text-highlights.js";import{normalizeShikiLanguage,SHIKI_THEMES}from"../code-block/shiki-types.js";import{resolveIsDarkTheme,watchDarkTheme}from"../code-block/shiki-dark-theme.js";import{loadMarkdownDeps,getMarkdownDepsIfLoaded}from"./markdown-loader.js";import{getKatex}from"./katex-loader.js";function createMarkdownParser(marked){if(!(!marked||typeof marked!="object"&&typeof marked!="function"||typeof marked.Marked!="function"))return new marked.Marked}class MarkdownParserController{get(marked){if(marked)return this.module!==marked&&(this.module=marked,this.parser=createMarkdownParser(marked)),this.parser}}function normalizeMarkdownLeadingTabs(content,tabSize){const width=finiteInteger(tabSize,4,1,32);return content.replace(/^[\t ]+/gm,indentation=>{let column=0,normalized="";for(const character of indentation){const spaces=character===" "?width-column%width:1;normalized+=" ".repeat(spaces),column+=spaces}return normalized})}class MarkdownOwnedAnimationFrameController{get handle(){return this.pending?.handle}get settled(){return this.pending?.settled}request(owner,callback){if(this.pending)return this.pending.handle;let resolveFrame;const settled=new Promise(resolve=>{resolveFrame=resolve}),pending={owner,settled,resolve:resolveFrame};this.pending=pending;try{pending.handle=owner.requestAnimationFrame(()=>{this.pending===pending&&(this.pending=void 0,pending.resolve(),callback())})}catch{this.pending===pending&&(this.pending=void 0),pending.resolve();return}return pending.handle}cancel(){const pending=this.pending;if(!pending)return!1;this.pending=void 0;try{pending.handle!==void 0&&pending.owner.cancelAnimationFrame(pending.handle)}catch{}finally{pending.resolve()}return!0}}const HTML_ESCAPES={"&":"&","<":"<",">":">",'"':""","'":"'"};function escapeHtml(text){return text.replace(/[&<>"']/g,ch=>HTML_ESCAPES[ch]??ch)}function cleanHref(href){try{return encodeURI(href).replace(/%25/g,"%")}catch{return null}}const HIGHLIGHT_CACHE_MAX=100,HIGHLIGHT_CACHE_MAX_BYTES=2*1024*1024,HIGHLIGHT_CACHE_ENTRY_MAX_BYTES=512*1024,FAILED_HIGHLIGHT_MAX=256;function markdownHighlightKey(language,code){let a=2166136261,b=2654435769;const input=`${language}\0${code}`;for(let index=0;index<input.length;index++){const unit=input.charCodeAt(index);a=Math.imul(a^unit,16777619)>>>0,b=Math.imul(b^unit,2246822507)>>>0}return`${language}:${code.length}:${a.toString(36)}:${b.toString(36)}`}function addFailedHighlightKey(failed,key){if(!failed.has(key)){if(failed.size>=FAILED_HIGHLIGHT_MAX){const oldest=failed.values().next().value;oldest!==void 0&&failed.delete(oldest)}failed.add(key)}}async function processPendingHighlights(pending,worker,concurrency=4){const unique=[...new Map(pending.map(item=>[item.key,item])).values()];let next=0;const run=async()=>{for(;next<unique.length;){const item=unique[next++];item&&await worker(item)}};await Promise.all(Array.from({length:Math.min(concurrency,unique.length)},()=>run()))}function getCachedHighlight(cache,key){const cached=cache.get(key);return cached!==void 0&&(cache.delete(key),cache.set(key,cached)),cached}function setCachedHighlight(cache,key,html2,max=HIGHLIGHT_CACHE_MAX,maxBytes=HIGHLIGHT_CACHE_MAX_BYTES){const entryBytes=(key.length+html2.length)*2;if(entryBytes>HIGHLIGHT_CACHE_ENTRY_MAX_BYTES||entryBytes>maxBytes)return!1;cache.has(key)&&cache.delete(key);let retainedBytes=0;for(const[cachedKey,cachedHtml]of cache)retainedBytes+=(cachedKey.length+cachedHtml.length)*2;for(;cache.size>=max||retainedBytes+entryBytes>maxBytes;){const oldest=cache.keys().next().value;if(oldest===void 0)break;const oldestHtml=cache.get(oldest)??"";retainedBytes-=(oldest.length+oldestHtml.length)*2,cache.delete(oldest)}return cache.set(key,html2),!0}const MATH_INLINE_RE=/^\$((?:\\\$|[^$\s])(?:\\\$|[^$])*?)\$(?!\$)/;function mathExtension(renderMath){return{name:"math",level:"inline",start(src){const index=src.indexOf("$");return index===-1?void 0:index},tokenizer(src){if(src.startsWith("$$")){const close=src.indexOf("$$",2);if(close>2){const raw=src.slice(0,close+2),tex=src.slice(2,close).trim();if(tex)return{type:"math",raw,tex,display:!0}}}const inline=MATH_INLINE_RE.exec(src);if(inline)return{type:"math",raw:inline[0],tex:inline[1].replace(/\\\$/g,"$").trim(),display:!1}},renderer(token){return renderMath(token)}}}function parseMarkdownDocument(options){const{marked,content,gfm,linkTarget,escapeHtmlOption,trustedHtmlOption,highlightCodeOption,getCachedHighlight:getCached,failedHighlightKeys,headingAnchorsOption,mathOption,cachedKatex,pendingKeys,headingTreeOut}=options,headingOffset=finiteInteger(options.headingOffset,0),slugger=new Slugger,activeHighlightKeys=new Set,pendingHighlightKeys=new Set(options.pendingKeys.map(({key})=>key));let hadMathFallback=!1;const instance=new marked.Marked;mathOption&&instance.use({extensions:[mathExtension(token=>{if(!cachedKatex)return hadMathFallback=!0,escapeHtml(token.display?`$$${token.tex}$$`:`$${token.tex}$`);try{const mathml=cachedKatex.renderToString(token.tex,{output:"mathml",throwOnError:!1});return`<span part='math' data-display='${token.display?"block":"inline"}'>${mathml}</span>`}catch{return escapeHtml(token.display?`$$${token.tex}$$`:`$${token.tex}$`)}})]}),instance.use({renderer:{heading(token){const depth=Math.min(6,Math.max(1,token.depth+headingOffset)),label=this.parser.parseInline(token.tokens,this.parser.textRenderer),slug=slugger.slug(label);headingTreeOut.push({id:slug,label,level:depth});const idAttr=headingAnchorsOption&&slug?` id='${escapeHtml(slug)}'`:"";return`<h${depth} part='heading'${idAttr}>${this.parser.parseInline(token.tokens)}</h${depth}>
|
|
1
|
+
import{html,nothing}from"lit";import{unsafeHTML}from"lit/directives/unsafe-html.js";import{Slugger}from"../../../internal/slugger.js";import{finiteInteger}from"../../../internal/numbers.js";import{devWarnOnce}from"../../../internal/dev-mode-attribute-warning.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{createTextQuoteIndex,rangeFromTextQuoteMatch,rangesFromTextQuoteMatches,scopeFromElement,TEXT_QUOTE_LIMITS,TEXT_SELECTION_RECT_LIMIT}from"../../../internal/text-quote.js";import{prioritizedHighlightCandidates}from"../../../internal/anchor-target.js";import{safeLinkHref,safeMediaSrc}from"../../../internal/safe-url.js";import{supportsCustomHighlights}from"../../../internal/text-highlights.js";import{normalizeShikiLanguage,SHIKI_THEMES}from"../code-block/shiki-types.js";import{resolveIsDarkTheme,watchDarkTheme}from"../code-block/shiki-dark-theme.js";import{loadMarkdownDeps,getMarkdownDepsIfLoaded}from"./markdown-loader.js";import{getKatex}from"./katex-loader.js";function createMarkdownParser(marked){if(!(!marked||typeof marked!="object"&&typeof marked!="function"||typeof marked.Marked!="function"))return new marked.Marked}class MarkdownParserController{get(marked){if(marked)return this.module!==marked&&(this.module=marked,this.parser=createMarkdownParser(marked)),this.parser}}function normalizeMarkdownLeadingTabs(content,tabSize){const width=finiteInteger(tabSize,4,1,32);return content.replace(/^[\t ]+/gm,indentation=>{let column=0,normalized="";for(const character of indentation){const spaces=character===" "?width-column%width:1;normalized+=" ".repeat(spaces),column+=spaces}return normalized})}class MarkdownOwnedAnimationFrameController{get handle(){return this.pending?.handle}get settled(){return this.pending?.settled}request(owner,callback){if(this.pending)return this.pending.handle;let resolveFrame;const settled=new Promise(resolve=>{resolveFrame=resolve}),pending={owner,settled,resolve:resolveFrame};this.pending=pending;try{pending.handle=owner.requestAnimationFrame(()=>{this.pending===pending&&(this.pending=void 0,pending.resolve(),callback())})}catch{this.pending===pending&&(this.pending=void 0),pending.resolve();return}return pending.handle}cancel(){const pending=this.pending;if(!pending)return!1;this.pending=void 0;try{pending.handle!==void 0&&pending.owner.cancelAnimationFrame(pending.handle)}catch{}finally{pending.resolve()}return!0}}const HTML_ESCAPES={"&":"&","<":"<",">":">",'"':""","'":"'"};function escapeHtml(text){return text.replace(/[&<>"']/g,ch=>HTML_ESCAPES[ch]??ch)}function cleanHref(href){try{return encodeURI(href).replace(/%25/g,"%")}catch{return null}}const HIGHLIGHT_CACHE_MAX=100,HIGHLIGHT_CACHE_MAX_BYTES=2*1024*1024,HIGHLIGHT_CACHE_ENTRY_MAX_BYTES=512*1024,FAILED_HIGHLIGHT_MAX=256;function markdownHighlightKey(language,code){let a=2166136261,b=2654435769;const input=`${language}\0${code}`;for(let index=0;index<input.length;index++){const unit=input.charCodeAt(index);a=Math.imul(a^unit,16777619)>>>0,b=Math.imul(b^unit,2246822507)>>>0}return`${language}:${code.length}:${a.toString(36)}:${b.toString(36)}`}function addFailedHighlightKey(failed,key){if(!failed.has(key)){if(failed.size>=FAILED_HIGHLIGHT_MAX){const oldest=failed.values().next().value;oldest!==void 0&&failed.delete(oldest)}failed.add(key)}}async function processPendingHighlights(pending,worker,concurrency=4){const unique=[...new Map(pending.map(item=>[item.key,item])).values()];let next=0;const run=async()=>{for(;next<unique.length;){const item=unique[next++];item&&await worker(item)}};await Promise.all(Array.from({length:Math.min(concurrency,unique.length)},()=>run()))}function getCachedHighlight(cache,key){const cached=cache.get(key);return cached!==void 0&&(cache.delete(key),cache.set(key,cached)),cached}function setCachedHighlight(cache,key,html2,max=HIGHLIGHT_CACHE_MAX,maxBytes=HIGHLIGHT_CACHE_MAX_BYTES){const entryBytes=(key.length+html2.length)*2;if(entryBytes>HIGHLIGHT_CACHE_ENTRY_MAX_BYTES||entryBytes>maxBytes)return!1;cache.has(key)&&cache.delete(key);let retainedBytes=0;for(const[cachedKey,cachedHtml]of cache)retainedBytes+=(cachedKey.length+cachedHtml.length)*2;for(;cache.size>=max||retainedBytes+entryBytes>maxBytes;){const oldest=cache.keys().next().value;if(oldest===void 0)break;const oldestHtml=cache.get(oldest)??"";retainedBytes-=(oldest.length+oldestHtml.length)*2,cache.delete(oldest)}return cache.set(key,html2),!0}const MATH_INLINE_RE=/^\$((?:\\\$|[^$\s])(?:\\\$|[^$])*?)\$(?!\$)/;function mathExtension(renderMath){return{name:"math",level:"inline",start(src){const index=src.indexOf("$");return index===-1?void 0:index},tokenizer(src){if(src.startsWith("$$")){const close=src.indexOf("$$",2);if(close>2){const raw=src.slice(0,close+2),tex=src.slice(2,close).trim();if(tex)return{type:"math",raw,tex,display:!0}}}const inline=MATH_INLINE_RE.exec(src);if(inline)return{type:"math",raw:inline[0],tex:inline[1].replace(/\\\$/g,"$").trim(),display:!1}},renderer(token){return renderMath(token)}}}const MARKDOWN_SANITIZER_WARNING_KEY="lyra-markdown-dompurify-unavailable",MARKDOWN_SANITIZER_WARNING="<lr-markdown>/<lr-markdown-core>: HTML sanitization is unavailable because the optional DOMPurify peer could not load. Content is rendered as plain text unless trusted HTML is explicitly selected.";function warnMarkdownSanitizerUnavailable(){devWarnOnce(MARKDOWN_SANITIZER_WARNING_KEY,MARKDOWN_SANITIZER_WARNING)}function taskItemCheckboxLabel(context,tokens){for(const candidate of tokens){if(typeof candidate!="object"||candidate===null)continue;const token=candidate;if(token.type!=="text"&&token.type!=="paragraph"||!Array.isArray(token.tokens))continue;const inlineTokens=token.tokens.filter(inline=>typeof inline!="object"||inline===null?!0:inline.type!=="checkbox"),label=context.parser.parseInline(inlineTokens,context.parser.textRenderer).replace(/\s+/g," ").trim();if(label)return label}return null}function parseMarkdownDocument(options){const{marked,content,gfm,linkTarget,escapeHtmlOption,trustedHtmlOption,highlightCodeOption,getCachedHighlight:getCached,failedHighlightKeys,headingAnchorsOption,mathOption,cachedKatex,pendingKeys,headingTreeOut}=options,headingOffset=finiteInteger(options.headingOffset,0),slugger=new Slugger,activeHighlightKeys=new Set,pendingHighlightKeys=new Set(options.pendingKeys.map(({key})=>key)),taskItemCheckboxLabels=[];let hadMathFallback=!1;const instance=new marked.Marked;mathOption&&instance.use({extensions:[mathExtension(token=>{if(!cachedKatex)return hadMathFallback=!0,escapeHtml(token.display?`$$${token.tex}$$`:`$${token.tex}$`);try{const mathml=cachedKatex.renderToString(token.tex,{output:"mathml",throwOnError:!1});return`<span part='math' data-display='${token.display?"block":"inline"}'>${mathml}</span>`}catch{return escapeHtml(token.display?`$$${token.tex}$$`:`$${token.tex}$`)}})]}),instance.use({renderer:{heading(token){const depth=Math.min(6,Math.max(1,token.depth+headingOffset)),label=this.parser.parseInline(token.tokens,this.parser.textRenderer),slug=slugger.slug(label);headingTreeOut.push({id:slug,label,level:depth});const idAttr=headingAnchorsOption&&slug?` id='${escapeHtml(slug)}'`:"";return`<h${depth} part='heading'${idAttr}>${this.parser.parseInline(token.tokens)}</h${depth}>
|
|
2
2
|
`},paragraph(token){return`<p part='paragraph'>${this.parser.parseInline(token.tokens)}</p>
|
|
3
3
|
`},list(token){const ordered=token.ordered,start=token.start;let body="";for(const item of token.items)body+=this.listitem(item);const tag=ordered?"ol":"ul",startAttr=ordered&&start!==1?` start='${start}'`:"";return`<${tag} part='list'${startAttr}>
|
|
4
4
|
${body}</${tag}>
|
|
5
|
-
`},
|
|
5
|
+
`},listitem(token){const label=token.task===!0?taskItemCheckboxLabel(this,token.tokens):null;taskItemCheckboxLabels.push(label);try{return`<li>${this.parser.parse(token.tokens)}</li>
|
|
6
|
+
`}finally{taskItemCheckboxLabels.pop()}},checkbox(token){const label=taskItemCheckboxLabels.at(-1),checked=token.checked?" checked=''":"",labelAttr=label?` aria-label='${escapeHtml(label)}'`:"";return`<input${checked} disabled='' type='checkbox'${labelAttr}> `},code(token){const lang=(token.lang??"").trim().split(/\s+/)[0]??"",body=`${token.text.replace(/\n$/,"")}
|
|
6
7
|
`,text=token.escaped?body:escapeHtml(body);if(highlightCodeOption&&lang){const key=markdownHighlightKey(lang,body);if(activeHighlightKeys.has(key)||activeHighlightKeys.size<HIGHLIGHT_CACHE_MAX){activeHighlightKeys.add(key);const cached=getCached(key);if(cached!==void 0)return cached;!failedHighlightKeys.has(key)&&!pendingHighlightKeys.has(key)&&(pendingHighlightKeys.add(key),pendingKeys.push({key,lang,code:body}))}}return`<pre part='code-block' tabindex='0'><code${lang?` class='language-${escapeHtml(lang)}'`:""}>${text}</code></pre>
|
|
7
8
|
`},codespan(token){return`<code part='inline-code'>${escapeHtml(token.text)}</code>`},blockquote(token){return`<blockquote part='blockquote'>
|
|
8
9
|
${this.parser.parse(token.tokens)}</blockquote>
|
|
@@ -12,7 +13,7 @@ ${this.tablerow({text:headerRow})}</thead>
|
|
|
12
13
|
`:"";return`<table part='table'>
|
|
13
14
|
${thead}${tbody}</table>
|
|
14
15
|
`},link(token){const text=this.parser.parseInline(token.tokens),href=cleanHref(token.href);if(href===null)return text;const safeHref=trustedHtmlOption?href:safeLinkHref(href);if(safeHref===null)return text;const titleAttr=token.title?` title='${escapeHtml(token.title)}'`:"",targetAttr=linkTarget?` target='${escapeHtml(linkTarget)}' rel='noopener noreferrer'`:"";return`<a part='link' href='${escapeHtml(safeHref)}'${titleAttr}${targetAttr}>${text}</a>`},image(token){const altText=this.parser.parseInline(token.tokens,this.parser.textRenderer),href=cleanHref(token.href);if(href===null)return escapeHtml(altText);const safeHref=trustedHtmlOption?href:safeMediaSrc(href);if(safeHref===null)return escapeHtml(altText);const titleAttr=token.title?` title='${escapeHtml(token.title)}'`:"";return`<img part='img' src='${escapeHtml(safeHref)}' alt='${escapeHtml(altText)}'${titleAttr}>`},html(token){return escapeHtmlOption?escapeHtml(token.text):token.text}}});for(const configuration of options.markedConfigurations??[]){if(!configuration||typeof configuration!="object")continue;const configuredDefaults=Object.fromEntries(Object.entries(configuration).filter(([,value])=>value!=null));Object.keys(configuredDefaults).length>0&&instance.use(configuredDefaults)}return{html:instance.parse(content,{gfm,async:!1}),hadMathFallback}}const KATEX_OVERRIDE=Symbol.for("@aceshooting/lyra-ui/markdown-katex-override");function readKatexOverride(){return Reflect.has(globalThis,KATEX_OVERRIDE)?{present:!0,value:Reflect.get(globalThis,KATEX_OVERRIDE)}:{present:!1,value:null}}function createMarkdownKatexState(){let resolved,loadStarted=!1;const subscribers=new Set;return{getIfLoaded(){const override=readKatexOverride();return override.present?override.value:resolved??null},isConfirmedMissing(){const override=readKatexOverride();return(override.present?override.value:resolved)===null},startLoad(onResolved){readKatexOverride().present||resolved!==void 0||(subscribers.add(onResolved),!loadStarted&&(loadStarted=!0,getKatex().then(katex=>{resolved=katex;const pending=[...subscribers];subscribers.clear();for(const subscriber of pending)subscriber()})))}}}function markdownCodeTransformer(lang){return{name:"lr-markdown-code-block",pre(node){node.properties.part=["code-block"],node.properties.tabindex="0"},code(node){const classValue=node.properties.class,classes=Array.isArray(classValue)?classValue.map(String):classValue?[String(classValue)]:[];node.properties.class=[...classes,`language-${lang}`]}}}const SHIKI_COLOR=/^#(?:[\da-f]{3}|[\da-f]{4}|[\da-f]{6}|[\da-f]{8})$/i,SHIKI_STYLE_TO_DATA={color:"data-lr-shiki-light","background-color":"data-lr-shiki-light-bg","--shiki-light":"data-lr-shiki-light","--shiki-light-bg":"data-lr-shiki-light-bg","--shiki-dark":"data-lr-shiki-dark","--shiki-dark-bg":"data-lr-shiki-dark-bg"},SHIKI_DATA_TO_STYLE={"data-lr-shiki-light":"color","data-lr-shiki-light-bg":"background-color","data-lr-shiki-dark":"--shiki-dark","data-lr-shiki-dark-bg":"--shiki-dark-bg"};function encodeMarkdownHighlightStyles(markup){return markup.replace(/\sstyle=(["'])(.*?)\1/gi,(_attribute,_quote,value)=>{const attributes=[];for(const declaration of value.split(";")){const separator=declaration.indexOf(":");if(separator<0)continue;const property=declaration.slice(0,separator).trim().toLowerCase(),color=declaration.slice(separator+1).trim(),dataAttribute=SHIKI_STYLE_TO_DATA[property];dataAttribute&&SHIKI_COLOR.test(color)&&attributes.push(`${dataAttribute}="${color}"`)}return attributes.length>0?` ${attributes.join(" ")}`:""})}function restoreMarkdownHighlightStyles(markup){return markup.replace(/<[a-z][^<>]*>/gi,openingTag=>{const declarations=[],cleanTag=openingTag.replace(/\s(data-lr-shiki-(?:light-bg|dark-bg|light|dark))=(["'])(#[\da-f]+)\2/gi,(attribute,name,_quote,color)=>{const property=SHIKI_DATA_TO_STYLE[name.toLowerCase()];return!property||!SHIKI_COLOR.test(color)?attribute:(declarations.push(`${property}:${color}`),"")});return declarations.length===0?cleanTag:`${cleanTag.slice(0,-1)} style="${declarations.join(";")}">`})}function tokenizeMarkdownHighlight(hl,pending){try{const highlighted=hl.codeToHtml(pending.code,{lang:normalizeShikiLanguage(pending.lang),themes:SHIKI_THEMES,transformers:[markdownCodeTransformer(pending.lang)]});return`${encodeMarkdownHighlightStyles(highlighted)}
|
|
15
|
-
`}catch{return null}}const markdownDepsLoadGenerations=new WeakMap;function beginMarkdownDepsLoad(host,apply){const generation=(markdownDepsLoadGenerations.get(host)??0)+1;markdownDepsLoadGenerations.set(host,generation);const alreadyLoaded=getMarkdownDepsIfLoaded();if(alreadyLoaded){apply(alreadyLoaded);return}loadMarkdownDeps().then(resolved=>{!host.isConnected||markdownDepsLoadGenerations.get(host)!==generation||apply(resolved)})}function markdownNeedsReparse(changed){return changed.has("content")||changed.has("tabSize")||changed.has("htmlMode")||changed.has("gfm")||changed.has("linkTarget")||changed.has("headingOffset")||changed.has("streaming")||changed.has("headingAnchors")||changed.has("math")||changed.has("highlightCode")||changed.has("languages")}function markdownHighlightConfigChanged(changed){return changed.has("highlightCode")||changed.has("languages")}function markdownLanguageSetChanged(changed){return changed.has("languages")}function normalizeMarkdownHtmlMode(value){return value==="escape"||value==="trusted"?value:"sanitize"}function renderMarkdownDocument(options){const{deps,tag}=options;if(!deps.marked)return{status:"fallback",error:new Error(`<${tag}> could not render: the "marked" peer dependency failed to load.`),headingTree:null};const pendingKeys=[],headingTree=[];let rawHtml,hadMathFallback;try{const parsed=options.parse(deps.marked,pendingKeys,headingTree);rawHtml=parsed.html,hadMathFallback=parsed.hadMathFallback}catch(error){return{status:"fallback",error,headingTree:null}}options.onParsed();const mathFailed=hadMathFallback&&options.isKatexConfirmedMissing();if(options.htmlMode!=="sanitize")return{status:"rendered",html:restoreMarkdownHighlightStyles(rawHtml),headingTree,mathFailed,pendingKeys};if(!deps.DOMPurify){const error=new Error(`<${tag}> could not render: sanitize is enabled (the default) but the "dompurify" peer dependency failed to load
|
|
16
|
+
`}catch{return null}}const markdownDepsLoadGenerations=new WeakMap;function beginMarkdownDepsLoad(host,apply){const generation=(markdownDepsLoadGenerations.get(host)??0)+1;markdownDepsLoadGenerations.set(host,generation);const alreadyLoaded=getMarkdownDepsIfLoaded();if(alreadyLoaded){apply(alreadyLoaded);return}loadMarkdownDeps().then(resolved=>{!host.isConnected||markdownDepsLoadGenerations.get(host)!==generation||apply(resolved)})}function markdownNeedsReparse(changed){return changed.has("content")||changed.has("tabSize")||changed.has("htmlMode")||changed.has("gfm")||changed.has("linkTarget")||changed.has("headingOffset")||changed.has("streaming")||changed.has("headingAnchors")||changed.has("math")||changed.has("highlightCode")||changed.has("languages")}function markdownHighlightConfigChanged(changed){return changed.has("highlightCode")||changed.has("languages")}function markdownLanguageSetChanged(changed){return changed.has("languages")}function normalizeMarkdownHtmlMode(value){return value==="escape"||value==="trusted"?value:"sanitize"}function renderMarkdownDocument(options){const{deps,tag}=options;if(!deps.marked)return{status:"fallback",error:new Error(`<${tag}> could not render: the "marked" peer dependency failed to load.`),headingTree:null};const pendingKeys=[],headingTree=[];let rawHtml,hadMathFallback;try{const parsed=options.parse(deps.marked,pendingKeys,headingTree);rawHtml=parsed.html,hadMathFallback=parsed.hadMathFallback}catch(error){return{status:"fallback",error,headingTree:null}}options.onParsed();const mathFailed=hadMathFallback&&options.isKatexConfirmedMissing();if(options.htmlMode!=="sanitize")return{status:"rendered",html:restoreMarkdownHighlightStyles(rawHtml),headingTree,mathFailed,pendingKeys};if(!deps.DOMPurify){const error=new Error(`<${tag}> could not render: sanitize is enabled (the default) but the "dompurify" peer dependency failed to load — refusing to render unsanitized HTML. Install it with \`pnpm add dompurify\`, or set html-mode="trusted" to explicitly opt out of sanitization.`);return warnMarkdownSanitizerUnavailable(),{status:"fallback",error,headingTree}}let sanitized;try{const result=deps.DOMPurify.sanitize(rawHtml,{ADD_ATTR:["target"],FORBID_ATTR:["style"],...options.math?{ADD_TAGS:["semantics","annotation"]}:{}});if(typeof result!="string")throw new TypeError("The HTML sanitizer returned non-string markup.");sanitized=restoreMarkdownHighlightStyles(result)}catch(error){return warnMarkdownSanitizerUnavailable(),{status:"fallback",error,headingTree}}return{status:"rendered",html:sanitized,headingTree,mathFailed,pendingKeys}}function markdownMathPeerError(tag){return new Error(`<${tag}> needs the optional peer dependency \`katex\` to render math (the \`math\` property is set) — install it with \`pnpm add katex\`.`)}function applyMarkdownAriaBusy(host,busy){busy?host.setAttribute("aria-busy","true"):host.removeAttribute("aria-busy")}function markdownScrollBehavior(root){const view=root.ownerDocument.defaultView;return!view||prefersReducedMotion(view)?"auto":"smooth"}function applyMarkdownFragmentAnchor(root,anchor,headingTree){if(!anchor.id)return!1;let index=-1;const headingLimit=Math.min(headingTree.length,TEXT_QUOTE_LIMITS.maxTraversalNodes);for(let headingIndex2=0;headingIndex2<headingLimit;headingIndex2++)if(headingTree[headingIndex2]?.id===anchor.id){index=headingIndex2;break}if(index<0)return!1;const walker=root.ownerDocument.createTreeWalker(root,1);let inspected=0,headingIndex=0,escapedIdMatch=null,positionalMatch=null,node;for(;inspected<TEXT_QUOTE_LIMITS.maxTraversalNodes&&(node=walker.nextNode());){inspected++;const candidate=node;if(candidate.getAttribute("id")===anchor.id&&(escapedIdMatch??=candidate),/^H[1-6]$/.test(candidate.tagName)&&(headingIndex===index&&(positionalMatch=candidate),headingIndex++),escapedIdMatch&&positionalMatch)break}const el=escapedIdMatch??positionalMatch;return el?(el.scrollIntoView({behavior:markdownScrollBehavior(root),block:"start"}),!0):!1}function applyMarkdownTextQuoteAnchor(root,anchor,locale,index=createTextQuoteIndex(scopeFromElement(root),locale)){const match=index.resolve(anchor),range=match?rangeFromTextQuoteMatch(index.scope,match):null;return range?(((range.startContainer.nodeType===1?range.startContainer:range.startContainer.parentElement)??root).scrollIntoView({behavior:markdownScrollBehavior(root),block:"center"}),!0):!1}const HIGHLIGHT_TONES=["accent","success","warning","danger","neutral"],MARKDOWN_PAINTED_HIGHLIGHT_LIMIT=100;function repaintMarkdownHighlights(options){const resolved=[],rangesByTone=new Map(HIGHLIGHT_TONES.map(tone=>[tone,[]]));let activeRange=null;const workBudget=options.index.createWorkBudget(),matches=[];for(const highlight of prioritizedHighlightCandidates(options.highlights,options.activeHighlightId)){if(matches.length>=MARKDOWN_PAINTED_HIGHLIGHT_LIMIT)break;if(highlight.anchor.kind!=="text-quote")continue;const match=options.index.resolve(highlight.anchor,workBudget);match&&matches.push({highlight,match})}const ranges=rangesFromTextQuoteMatches(options.index.scope,matches.map(({match})=>match));for(let position=0;position<matches.length;position++){const{highlight}=matches[position],range=ranges[position]??null;range&&(rangesByTone.get(highlight.tone??"accent").push(range),resolved.push({id:highlight.id,range}),highlight.id===options.activeHighlightId&&(activeRange=range))}for(const[tone,ranges2]of rangesByTone)options.handle.setRanges(tone,ranges2);if(options.handle.setActive(activeRange),!supportsCustomHighlights(options.root.ownerDocument)){const walker=options.root.ownerDocument.createTreeWalker(options.root,1);let inspected=0,node;for(;inspected<TEXT_QUOTE_LIMITS.maxTraversalNodes+MARKDOWN_PAINTED_HIGHLIGHT_LIMIT&&(node=walker.nextNode());){inspected++;const mark=node;mark.localName==="mark"&&mark.hasAttribute("data-lr-highlight-tone")&&!mark.hasAttribute("part")&&mark.setAttribute("part","highlight")}}return resolved}function hitTestHighlightRanges(ranges,x,y){let remainingRects=TEXT_SELECTION_RECT_LIMIT;for(let i=ranges.length-1;i>=0;i--){const hit=ranges[i];if(hit)for(const rect of hit.range.getClientRects()){if(remainingRects--<=0)return null;if(x>=rect.left&&x<=rect.right&&y>=rect.top&&y<=rect.bottom)return hit.id}}return null}const nativeElementGetAttribute=typeof Element>"u"?void 0:Element.prototype.getAttribute,nativeAnchorHref=typeof HTMLAnchorElement>"u"?void 0:Object.getOwnPropertyDescriptor(HTMLAnchorElement.prototype,"href")?.get;function markdownAnchorFromTarget(target){if(!(typeof target!="object"&&typeof target!="function"||target===null)&&!(!nativeElementGetAttribute||!nativeAnchorHref))try{return nativeElementGetAttribute.call(target,"data-lr-brand-probe"),nativeAnchorHref.call(target),target}catch{return}}function nativeAnchorAttribute(anchor,name){try{const value=nativeElementGetAttribute?.call(anchor,name);return typeof value=="string"?value:void 0}catch{return}}function internalLinkHrefFrom(e,prefix){if(!prefix)return null;const anchor=e.composedPath().find(target=>markdownAnchorFromTarget(target)!==void 0);if(!anchor)return null;const href=nativeAnchorAttribute(anchor,"href")??"";return href.startsWith(prefix)?href:null}function renderMarkdownContent(options){const isFallback=options.renderedHtml===null;return html`
|
|
16
17
|
<div
|
|
17
18
|
part="content"
|
|
18
19
|
role="document"
|
|
@@ -26,4 +27,4 @@ ${thead}${tbody}</table>
|
|
|
26
27
|
${isFallback?options.content:unsafeHTML(options.renderedHtml)}
|
|
27
28
|
</div>
|
|
28
29
|
${options.liveRegion}
|
|
29
|
-
`}function watchMarkdownDarkTheme(host,apply){return apply(resolveIsDarkTheme(host)),watchDarkTheme(host,()=>apply(resolveIsDarkTheme(host)))}function resolveMarkdownDarkTheme(host){return resolveIsDarkTheme(host)}export{FAILED_HIGHLIGHT_MAX,HIGHLIGHT_CACHE_ENTRY_MAX_BYTES,HIGHLIGHT_CACHE_MAX,HIGHLIGHT_CACHE_MAX_BYTES,MARKDOWN_PAINTED_HIGHLIGHT_LIMIT,MarkdownOwnedAnimationFrameController,MarkdownParserController,addFailedHighlightKey,applyMarkdownAriaBusy,applyMarkdownFragmentAnchor,applyMarkdownTextQuoteAnchor,beginMarkdownDepsLoad,cleanHref,createMarkdownKatexState,createMarkdownParser,escapeHtml,getCachedHighlight,hitTestHighlightRanges,internalLinkHrefFrom,markdownCodeTransformer,markdownHighlightConfigChanged,markdownHighlightKey,markdownLanguageSetChanged,markdownMathPeerError,markdownNeedsReparse,normalizeMarkdownHtmlMode,normalizeMarkdownLeadingTabs,parseMarkdownDocument,processPendingHighlights,renderMarkdownContent,renderMarkdownDocument,repaintMarkdownHighlights,resolveMarkdownDarkTheme,setCachedHighlight,tokenizeMarkdownHighlight,watchMarkdownDarkTheme};
|
|
30
|
+
`}function watchMarkdownDarkTheme(host,apply){return apply(resolveIsDarkTheme(host)),watchDarkTheme(host,()=>apply(resolveIsDarkTheme(host)))}function resolveMarkdownDarkTheme(host){return resolveIsDarkTheme(host)}export{FAILED_HIGHLIGHT_MAX,HIGHLIGHT_CACHE_ENTRY_MAX_BYTES,HIGHLIGHT_CACHE_MAX,HIGHLIGHT_CACHE_MAX_BYTES,MARKDOWN_PAINTED_HIGHLIGHT_LIMIT,MarkdownOwnedAnimationFrameController,MarkdownParserController,addFailedHighlightKey,applyMarkdownAriaBusy,applyMarkdownFragmentAnchor,applyMarkdownTextQuoteAnchor,beginMarkdownDepsLoad,cleanHref,createMarkdownKatexState,createMarkdownParser,escapeHtml,getCachedHighlight,hitTestHighlightRanges,internalLinkHrefFrom,markdownAnchorFromTarget,markdownCodeTransformer,markdownHighlightConfigChanged,markdownHighlightKey,markdownLanguageSetChanged,markdownMathPeerError,markdownNeedsReparse,normalizeMarkdownHtmlMode,normalizeMarkdownLeadingTabs,parseMarkdownDocument,processPendingHighlights,renderMarkdownContent,renderMarkdownDocument,repaintMarkdownHighlights,resolveMarkdownDarkTheme,setCachedHighlight,tokenizeMarkdownHighlight,watchMarkdownDarkTheme};
|
|
@@ -136,7 +136,7 @@ export declare class LyraMarkdown extends MarkdownRuntimeBase{static styles:impo
|
|
|
136
136
|
static getMarked():Marked;
|
|
137
137
|
/** Re-renders every connected `<lr-markdown>` instance after shared parser configuration changes. */
|
|
138
138
|
static updateAll():void;
|
|
139
|
-
/** The Markdown source to render. */
|
|
139
|
+
/** The Markdown source to render. Removing the attribute clears the document and its tab stop. */
|
|
140
140
|
content:string;
|
|
141
141
|
/** Tab-stop width used when converting tabs in leading indentation to spaces before parsing.
|
|
142
142
|
* Defaults to `4`; non-finite values fall back to that default and finite values are truncated
|
|
@@ -12,6 +12,8 @@ import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';impo
|
|
|
12
12
|
* `LyraToolbarActionProvider` protocol, which keeps implementation nodes private while exposing
|
|
13
13
|
* ordered focus/tab-stop operations and stable action IDs. Both feedback thumbs and both branch
|
|
14
14
|
* controls therefore remain independent arrow-key stops without parent shadow-root inspection.
|
|
15
|
+
* When a managed action leaves the toolbar, its optional `releaseTabIndex()` restores an untouched
|
|
16
|
+
* authored tab stop; a consumer change made after toolbar management always remains authoritative.
|
|
15
17
|
* Providers notify availability/order changes with `lr-toolbar-actions-change`; plain authored
|
|
16
18
|
* actions are observed in light DOM. A former stop is cleared, and if it held focus, focus moves to
|
|
17
19
|
* the nearest survivor or the stable toolbar without overriding a newer external focus move.
|
|
@@ -22,6 +24,8 @@ import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';impo
|
|
|
22
24
|
* events, so each built-in can occur at most once. Provider action ids must be nonblank and unique
|
|
23
25
|
* within that provider; invalid actions and later duplicates are omitted.
|
|
24
26
|
*
|
|
27
|
+
* ArrowLeft/ArrowRight/Home/End from a slotted feedback comment editor remain native editing keys. Roving navigation still operates on the actual toolbar and thumb actions.
|
|
28
|
+
*
|
|
25
29
|
* @customElement lr-message-actions
|
|
26
30
|
* @slot - Additional controls (e.g. `lr-copy-button`, `lr-icon-button`, `lr-branch-picker`)
|
|
27
31
|
* appended after the built-ins; they participate in the toolbar's arrow-key navigation.
|
|
@@ -39,7 +43,9 @@ import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';impo
|
|
|
39
43
|
* `lr-message-feedback`. `detail: { rating }`. A colliding event from a slotted custom child is
|
|
40
44
|
* contained at the slot boundary and remains observable directly on that child.
|
|
41
45
|
* @event lr-feedback-submit - The built-in feedback control's terminal cancelable persistence
|
|
42
|
-
* request, including thumbs-only choices.
|
|
46
|
+
* request, including thumbs-only choices. Its frozen detail includes a nonblank `submissionId`;
|
|
47
|
+
* when prevented, pass that exact ID to `finalizePendingSubmit()` or
|
|
48
|
+
* `revertPendingSubmit()` on this wrapper. Slotted collisions are contained at the slot boundary.
|
|
43
49
|
* @csspart base - The toolbar (`role="toolbar"`).
|
|
44
50
|
* @csspart copy-button - The embedded `lr-copy-button`.
|
|
45
51
|
* @csspart regenerate-button - The built-in regenerate icon button.
|
|
@@ -56,6 +62,15 @@ controls:readonly MessageActionControl[];private get effectiveControls();
|
|
|
56
62
|
copyText:string;
|
|
57
63
|
/** Forwarded to the embedded thumbs-only `lr-message-feedback` when enabled. */
|
|
58
64
|
feedbackRating:MessageFeedbackValue;
|
|
65
|
+
/** Whether this component's current built-in feedback child is awaiting a persistence settle.
|
|
66
|
+
* This is a nonreflecting read-through; no `feedback-pending` attribute or change event exists. */
|
|
67
|
+
get feedbackPending():boolean;
|
|
68
|
+
/** Settles only the currently rendered built-in feedback transaction identified by `submissionId`.
|
|
69
|
+
* A removed, replaced, stale, or mismatched child fails closed. */
|
|
70
|
+
finalizePendingSubmit(submissionId:string):boolean;
|
|
71
|
+
/** Reverts only the currently rendered built-in feedback transaction identified by `submissionId`.
|
|
72
|
+
* A removed, replaced, stale, or mismatched child fails closed. */
|
|
73
|
+
revertPendingSubmit(submissionId:string):boolean;
|
|
59
74
|
/** Visually hides the bar until the enclosing message is hovered or any control inside has focus. */
|
|
60
75
|
revealOnInteraction:boolean;
|
|
61
76
|
/** Accessible name for the toolbar. Defaults to the localized `messageActionsLabel`. */
|
|
@@ -69,6 +84,6 @@ accessibleLabel:string|null;private activeStopIndex;
|
|
|
69
84
|
* technique) while `revealOnInteraction` is active. CSS alone cannot key `:host`'s own opacity off the
|
|
70
85
|
* ancestor `lr-chat-message`'s hover state from inside this component's own shadow DOM, so the
|
|
71
86
|
* reveal state is tracked in JS instead (see `bindHoverTarget()`). */
|
|
72
|
-
private revealed;private hoverTarget;private stopSyncGeneration;private stopObserver?;private managedStops;private
|
|
87
|
+
private revealed;private hoverTarget;private stopSyncGeneration;private stopObserver?;private managedStops;private directActions;private nextDirectActionId;private focusedStop?;private currentBuiltInFeedback;connectedCallback():void;disconnectedCallback():void;adoptedCallback():void;protected willUpdate(changed:PropertyValues):void;protected firstUpdated(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private bindHoverTarget;private unbindHoverTarget;private onHoverTargetEnter;private onHoverTargetLeave;private onFocusIn;private onFocusOut;
|
|
73
88
|
/** Immediate rendered children plus flattened slotted roots that own logical actions. */
|
|
74
|
-
private actionRoots;private sameAction;private isAvailable;private directActionFor;private logicalActions;private setActiveStop;private observeStopChanges;private onStopMutations;private reconcileStopsAfterChildren;private onSlotChange;private onToolbarActionsChange;private containSlottedFeedbackEvent;private onToolbarKeyDown;private onRegenerateClick;private onEditClick;private renderControl;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-message-actions':LyraMessageActions;}}
|
|
89
|
+
private actionRoots;private sameAction;private isAvailable;private directActionFor;private logicalActions;private setActiveStop;private releaseManagedStop;private releaseManagedStops;private observeStopChanges;private onStopMutations;private reconcileStopsAfterChildren;private onSlotChange;private onToolbarActionsChange;private containSlottedFeedbackEvent;private onToolbarKeyDown;private onRegenerateClick;private onEditClick;private renderControl;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-message-actions':LyraMessageActions;}}
|
|
@@ -1,4 +1,4 @@
|
|
|
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,nothing,svg}from"lit";import{property,state}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import"../../utility/copy-button/copy-button.class.js";import"../message-feedback/message-feedback.class.js";import{styles}from"./message-actions.styles.js";import{applyComposedFocusRepair,captureComposedFocusRepair,isComposedFocusAvailable,isSemanticActionElement}from"../../../internal/focus-navigation.js";import{composedContains}from"../../../internal/overlay-manager.js";import{isLyraToolbarActionProvider}from"./toolbar-actions.js";import{LYRA_DEFAULT_editMessage,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_messageActionsLabel,LYRA_DEFAULT_regenerateResponse}from"../../../internal/default-strings.generated.js";const MESSAGE_ACTION_CONTROLS=["copy","regenerate","edit","feedback"];function regenerateIcon(){return svg`
|
|
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,nothing,svg}from"lit";import{property,state}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import"../../utility/copy-button/copy-button.class.js";import"../message-feedback/message-feedback.class.js";import{styles}from"./message-actions.styles.js";import{applyComposedFocusRepair,captureComposedFocusRepair,isComposedFocusAvailable,isSemanticActionElement}from"../../../internal/focus-navigation.js";import{composedContains}from"../../../internal/overlay-manager.js";import{isLyraToolbarActionProvider}from"./toolbar-actions.js";import{LYRA_DEFAULT_editMessage,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_messageActionsLabel,LYRA_DEFAULT_regenerateResponse}from"../../../internal/default-strings.generated.js";const MESSAGE_ACTION_CONTROLS=["copy","regenerate","edit","feedback"],MAX_TOOLBAR_ACTIONS=100,MAX_DESCRIPTOR_PROTOTYPES=100;function isObjectValue(value){return value!==null&&(typeof value=="object"||typeof value=="function")}function inheritedDescriptor(value,key){let current=value;for(let depth=0;current&&depth<MAX_DESCRIPTOR_PROTOTYPES;depth+=1){let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(current,key)}catch{return}if(descriptor)return descriptor;try{current=Object.getPrototypeOf(current)}catch{return}}}function dataCallable(value,key){const descriptor=inheritedDescriptor(value,key);return descriptor&&"value"in descriptor&&typeof descriptor.value=="function"?descriptor.value:void 0}function dataValue(value,key){const descriptor=inheritedDescriptor(value,key);return descriptor&&"value"in descriptor?descriptor.value:void 0}function projectDisabled(value){const descriptor=inheritedDescriptor(value,"disabled");if(!descriptor)return{valid:!0,disabled:!1};if("value"in descriptor)return{valid:!0,disabled:descriptor.value===!0};if(typeof descriptor.get!="function")return{valid:!1,disabled:!0};try{return{valid:!0,disabled:Reflect.apply(descriptor.get,value,[])===!0}}catch{return{valid:!1,disabled:!0}}}function projectToolbarAction(value){if(!isObjectValue(value))return;const id=dataValue(value,"id"),focus=dataCallable(value,"focus"),setTabIndex=dataCallable(value,"setTabIndex"),matchesEventPath=dataCallable(value,"matchesEventPath"),releaseTabIndex=dataCallable(value,"releaseTabIndex"),disabled=projectDisabled(value);if(typeof id!="string"||id.trim().length===0||!focus||!setTabIndex||!matchesEventPath||!disabled.valid)return;const action={id,disabled:disabled.disabled,focus(options){try{Reflect.apply(focus,value,[options])}catch{}},setTabIndex(tabIndex){try{Reflect.apply(setTabIndex,value,[tabIndex])}catch{}},...releaseTabIndex?{releaseTabIndex(){try{Reflect.apply(releaseTabIndex,value,[])}catch{}}}:{},matchesEventPath(path){try{return Reflect.apply(matchesEventPath,value,[path])===!0}catch{return!1}}};return{source:value,action}}function regenerateIcon(){return svg`
|
|
2
2
|
<svg width="1em" height="1em" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
|
|
3
3
|
<polyline points="23 4 23 10 17 10"></polyline>
|
|
4
4
|
<polyline points="1 20 1 14 7 14"></polyline>
|
|
@@ -9,7 +9,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
9
9
|
<path d="M12 20h9"></path>
|
|
10
10
|
<path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4Z"></path>
|
|
11
11
|
</svg>
|
|
12
|
-
`}class LyraMessageActions extends LyraElement{constructor(){super(...arguments),this.controls=[],this.copyText="",this.feedbackRating=null,this.revealOnInteraction=!1,this.label="",this.accessibleLabel=null,this.activeStopIndex=0,this.revealed=!1,this.hoverTarget=null,this.stopSyncGeneration=0,this.managedStops=[],this.authoredTabIndex=new WeakMap,this.directActions=new WeakMap,this.nextDirectActionId=0,this.onHoverTargetEnter=()=>{this.revealed=!0},this.onHoverTargetLeave=()=>{this.matches(":focus-within")||(this.revealed=!1)},this.onFocusIn=event=>{this.revealed=!0;const stops=this.logicalActions(),path=event.composedPath(),index=stops.findIndex(({action})=>action.matchesEventPath(path));if(index>=0){this.setActiveStop(stops,index,stops[index]);const base=this.renderRoot.querySelector('[part="base"]'),repair=base?captureComposedFocusRepair(this,base):null,stop=stops[index];this.focusedStop=stop&&repair?{index,owner:stop.owner,id:stop.action.id,repair}:void 0}else this.focusedStop=void 0},this.onFocusOut=event=>{this.hoverTarget?.matches(":hover")||(this.revealed=!1);const destination=event.relatedTarget;destination&&destination.nodeType===1&&!composedContains(this,destination)&&(this.focusedStop=void 0)},this.onStopMutations=records=>{for(const record of records){if(record.type!=="attributes"||record.attributeName!=="tabindex")continue;const target=record.target;this.authoredTabIndex.set(target,target.getAttribute("tabindex"))}this.reconcileStopsAfterChildren()},this.onSlotChange=()=>{const stops=this.logicalActions();this.setActiveStop(stops,Math.min(this.activeStopIndex,Math.max(0,stops.length-1))),this.reconcileStopsAfterChildren()},this.onToolbarActionsChange=event=>{event.stopPropagation(),this.reconcileStopsAfterChildren()},this.containSlottedFeedbackEvent=event=>{event.stopPropagation()},this.onToolbarKeyDown=e=>{const stops=this.logicalActions();if(stops.length===0)return;const path=e.composedPath(),originIndex=stops.findIndex(({action})=>action.matchesEventPath(path)),currentIndex=originIndex>=0?originIndex:this.activeStopIndex,forwardKey=this.effectiveDirection==="rtl"?"ArrowLeft":"ArrowRight",backwardKey=this.effectiveDirection==="rtl"?"ArrowRight":"ArrowLeft";let target;if(e.key===forwardKey)target=(currentIndex+1)%stops.length;else if(e.key===backwardKey)target=(currentIndex-1+stops.length)%stops.length;else if(e.key==="Home")target=0;else if(e.key==="End")target=stops.length-1;else return;e.preventDefault(),this.setActiveStop(stops,target),stops[target]?.action.focus()},this.onRegenerateClick=()=>{this.emit("lr-regenerate",null)},this.onEditClick=()=>{this.emit("lr-edit",null)}}static{this.defaultStrings={...super.defaultStrings,editMessage:LYRA_DEFAULT_editMessage,fieldRequired:LYRA_DEFAULT_fieldRequired,messageActionsLabel:LYRA_DEFAULT_messageActionsLabel,regenerateResponse:LYRA_DEFAULT_regenerateResponse}}static{this.ownedCollectionProperties=Object.freeze(["controls"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-feedback-submit"])}get effectiveControls(){const seen=new Set,controls=[];for(const value of this.controls){if(typeof value!="string"||!MESSAGE_ACTION_CONTROLS.includes(value)||seen.has(value))continue;const control=value;seen.add(control),controls.push(control)}return controls}connectedCallback(){super.connectedCallback(),this.addEventListener("focusin",this.onFocusIn),this.addEventListener("focusout",this.onFocusOut),this.revealOnInteraction&&this.bindHoverTarget(),this.hasUpdated&&this.reconcileStopsAfterChildren()}disconnectedCallback(){this.stopSyncGeneration++,this.stopObserver?.disconnect(),this.stopObserver=void 0,this.focusedStop=void 0,this.unbindHoverTarget(),this.removeEventListener("focusin",this.onFocusIn),this.removeEventListener("focusout",this.onFocusOut),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.stopSyncGeneration++,this.stopObserver?.disconnect(),this.stopObserver=void 0}willUpdate(changed){super.willUpdate(changed),changed.has("revealOnInteraction")&&(this.revealOnInteraction?this.bindHoverTarget():this.unbindHoverTarget())}firstUpdated(changed){super.firstUpdated(changed),this.setActiveStop(this.logicalActions(),0),this.reconcileStopsAfterChildren()}updated(changed){if(super.updated(changed),changed.has("controls")){const stops=this.logicalActions();this.setActiveStop(stops,Math.min(this.activeStopIndex,Math.max(0,stops.length-1))),this.reconcileStopsAfterChildren()}changed.has("revealed")&&this.toggleAttribute("data-revealed",this.revealed)}bindHoverTarget(){this.unbindHoverTarget();const target=this.closest("lr-chat-message")??this.parentElement;target&&(this.hoverTarget=target,target.addEventListener("pointerenter",this.onHoverTargetEnter),target.addEventListener("pointerleave",this.onHoverTargetLeave))}unbindHoverTarget(){this.hoverTarget?.removeEventListener("pointerenter",this.onHoverTargetEnter),this.hoverTarget?.removeEventListener("pointerleave",this.onHoverTargetLeave),this.hoverTarget=null,this.revealed=!1}actionRoots(){const base=this.renderRoot.querySelector('[part="base"]');if(!base)return[];const direct=[...base.children].filter(element=>element.localName!=="slot"),slot=base.querySelector("slot");return[...direct,...slot?.assignedElements({flatten:!0})??[]]}sameAction(left,right){return left.owner===right.owner&&left.action.id===right.action.id}isAvailable(action){try{return action.disabled!==!0}catch{return!1}}directActionFor(element){let action=this.directActions.get(element);if(action)return action;this.authoredTabIndex.has(element)||this.authoredTabIndex.set(element,element.getAttribute("tabindex"));const target=element;return action={id:`direct-${++this.nextDirectActionId}`,get disabled(){return!isComposedFocusAvailable(element)},focus(options){target.focus(options)},setTabIndex(tabIndex){target.tabIndex=tabIndex},matchesEventPath(path){return path.includes(element)}},this.directActions.set(element,action),action}logicalActions(){const actions=[],addProvider=(owner,provider)=>{let provided;try{provided=provider.getToolbarActions()}catch{return}const seen=new Set;for(const action of Array.from(provided).slice(0,100))!action||typeof action.id!="string"||action.id.trim().length===0||seen.has(action.id)||typeof action.focus!="function"||typeof action.setTabIndex!="function"||typeof action.matchesEventPath!="function"||(seen.add(action.id),this.isAvailable(action)&&actions.push({owner,action}))},visit=element=>{if(isLyraToolbarActionProvider(element)){addProvider(element,element);return}const authoredTabIndex=this.authoredTabIndex.has(element)?this.authoredTabIndex.get(element):element.getAttribute("tabindex");if(isSemanticActionElement(element)||authoredTabIndex!==null){const action=this.directActionFor(element);this.isAvailable(action)&&actions.push({owner:element,action});return}for(const child of element.children)visit(child)};for(const root of this.actionRoots())visit(root);return actions}setActiveStop(stops,index,preferred){this.stopObserver?.disconnect();for(const previous of this.managedStops)stops.some(stop=>this.sameAction(stop,previous))||previous.action.setTabIndex(-1);const preferredIndex=preferred?stops.findIndex(stop=>this.sameAction(stop,preferred)):-1;this.activeStopIndex=stops.length===0?0:preferredIndex>=0?preferredIndex:Math.min(Math.max(0,index),stops.length-1),stops.forEach(({action},stopIndex)=>{action.setTabIndex(stopIndex===this.activeStopIndex?0:-1)}),this.managedStops=stops,this.observeStopChanges()}observeStopChanges(){this.stopObserver?.disconnect();const Observer=this.ownerDocument.defaultView?.MutationObserver,base=this.renderRoot.querySelector('[part="base"]');if(!Observer||!base||!this.isConnected){this.stopObserver=void 0;return}const observer=new Observer(this.onStopMutations),roots=new Set([base,...this.actionRoots()]),options={attributes:!0,attributeOldValue:!0,attributeFilter:["aria-disabled","aria-hidden","contenteditable","controls","disabled","hidden","href","inert","open","role","tabindex","type"],childList:!0,subtree:!0};for(const root of roots)observer.observe(root,options);this.stopObserver=observer}async reconcileStopsAfterChildren(){const generation=++this.stopSyncGeneration,pending=this.actionRoots().map(root=>root.updateComplete).filter(value=>value!==void 0&&typeof value.then=="function");if(await Promise.all(pending),await Promise.resolve(),generation!==this.stopSyncGeneration||!this.isConnected)return;const stops=this.logicalActions(),focused=this.focusedStop,retainedIndex=focused?stops.findIndex(stop=>stop.owner===focused.owner&&stop.action.id===focused.id):-1,targetIndex=retainedIndex>=0?retainedIndex:Math.min(focused?Math.max(0,focused.index):this.activeStopIndex,Math.max(0,stops.length-1));if(this.setActiveStop(stops,targetIndex),focused&&retainedIndex<0){const base=this.renderRoot.querySelector('[part="base"]');base&&applyComposedFocusRepair(focused.repair,base)&&stops[targetIndex]?.action.focus(),this.focusedStop===focused&&(this.focusedStop=void 0)}}renderControl(type){switch(type){case"copy":return this.copyText?html`<lr-copy-button
|
|
12
|
+
`}class LyraMessageActions extends LyraElement{constructor(){super(...arguments),this.controls=[],this.copyText="",this.feedbackRating=null,this.revealOnInteraction=!1,this.label="",this.accessibleLabel=null,this.activeStopIndex=0,this.revealed=!1,this.hoverTarget=null,this.stopSyncGeneration=0,this.managedStops=[],this.directActions=new WeakMap,this.nextDirectActionId=0,this.onHoverTargetEnter=()=>{this.revealed=!0},this.onHoverTargetLeave=()=>{this.matches(":focus-within")||(this.revealed=!1)},this.onFocusIn=event=>{this.revealed=!0;const stops=this.logicalActions(),path=event.composedPath(),index=stops.findIndex(({action})=>action.matchesEventPath(path));if(index>=0){this.setActiveStop(stops,index,stops[index]);const base=this.renderRoot.querySelector('[part="base"]'),repair=base?captureComposedFocusRepair(this,base):null,stop=stops[index];this.focusedStop=stop&&repair?{index,owner:stop.owner,id:stop.action.id,source:stop.source,repair}:void 0}else this.focusedStop=void 0},this.onFocusOut=event=>{this.hoverTarget?.matches(":hover")||(this.revealed=!1);const destination=event.relatedTarget;destination&&destination.nodeType===1&&!composedContains(this,destination)&&(this.focusedStop=void 0)},this.onStopMutations=records=>{this.reconcileStopsAfterChildren()},this.onSlotChange=()=>{const stops=this.logicalActions();this.setActiveStop(stops,Math.min(this.activeStopIndex,Math.max(0,stops.length-1))),this.reconcileStopsAfterChildren()},this.onToolbarActionsChange=event=>{event.stopPropagation(),this.reconcileStopsAfterChildren()},this.containSlottedFeedbackEvent=event=>{event.stopPropagation()},this.onToolbarKeyDown=e=>{const stops=this.logicalActions();if(stops.length===0)return;const path=e.composedPath(),originIndex=stops.findIndex(({action})=>action.matchesEventPath(path));if(originIndex<0&&path[0]!==e.currentTarget)return;const currentIndex=originIndex>=0?originIndex:this.activeStopIndex,forwardKey=this.effectiveDirection==="rtl"?"ArrowLeft":"ArrowRight",backwardKey=this.effectiveDirection==="rtl"?"ArrowRight":"ArrowLeft";let target;if(e.key===forwardKey)target=(currentIndex+1)%stops.length;else if(e.key===backwardKey)target=(currentIndex-1+stops.length)%stops.length;else if(e.key==="Home")target=0;else if(e.key==="End")target=stops.length-1;else return;e.preventDefault(),this.setActiveStop(stops,target),stops[target]?.action.focus()},this.onRegenerateClick=()=>{this.emit("lr-regenerate",null)},this.onEditClick=()=>{this.emit("lr-edit",null)}}static{this.defaultStrings={...super.defaultStrings,editMessage:LYRA_DEFAULT_editMessage,fieldRequired:LYRA_DEFAULT_fieldRequired,messageActionsLabel:LYRA_DEFAULT_messageActionsLabel,regenerateResponse:LYRA_DEFAULT_regenerateResponse}}static{this.ownedCollectionProperties=Object.freeze(["controls"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-feedback-submit"])}get effectiveControls(){const seen=new Set,controls=[];for(const value of this.controls){if(typeof value!="string"||!MESSAGE_ACTION_CONTROLS.includes(value)||seen.has(value))continue;const control=value;seen.add(control),controls.push(control)}return controls}get feedbackPending(){return this.currentBuiltInFeedback()?.pending===!0}finalizePendingSubmit(submissionId){const feedback=this.currentBuiltInFeedback();return typeof submissionId=="string"&&submissionId.trim().length>0&&feedback!==void 0?feedback.finalizePendingSubmit(submissionId):!1}revertPendingSubmit(submissionId){const feedback=this.currentBuiltInFeedback();return typeof submissionId=="string"&&submissionId.trim().length>0&&feedback!==void 0?feedback.revertPendingSubmit(submissionId):!1}currentBuiltInFeedback(){const base=this.renderRoot.querySelector('[part="base"]'),feedback=base?.querySelector('lr-message-feedback[part~="feedback"]');return feedback&&feedback.parentElement===base&&feedback.getRootNode()===this.renderRoot&&feedback.isConnected?feedback:void 0}connectedCallback(){super.connectedCallback(),this.addEventListener("focusin",this.onFocusIn),this.addEventListener("focusout",this.onFocusOut),this.revealOnInteraction&&this.bindHoverTarget(),this.hasUpdated&&this.reconcileStopsAfterChildren()}disconnectedCallback(){this.stopSyncGeneration++,this.stopObserver?.disconnect(),this.stopObserver=void 0,this.releaseManagedStops(),this.focusedStop=void 0,this.unbindHoverTarget(),this.removeEventListener("focusin",this.onFocusIn),this.removeEventListener("focusout",this.onFocusOut),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.stopSyncGeneration++,this.stopObserver?.disconnect(),this.stopObserver=void 0,this.releaseManagedStops()}willUpdate(changed){super.willUpdate(changed),changed.has("revealOnInteraction")&&(this.revealOnInteraction?this.bindHoverTarget():this.unbindHoverTarget())}firstUpdated(changed){super.firstUpdated(changed),this.setActiveStop(this.logicalActions(),0),this.reconcileStopsAfterChildren()}updated(changed){if(super.updated(changed),changed.has("controls")){const stops=this.logicalActions();this.setActiveStop(stops,Math.min(this.activeStopIndex,Math.max(0,stops.length-1))),this.reconcileStopsAfterChildren()}changed.has("revealed")&&this.toggleAttribute("data-revealed",this.revealed)}bindHoverTarget(){this.unbindHoverTarget();const target=this.closest("lr-chat-message")??this.parentElement;target&&(this.hoverTarget=target,target.addEventListener("pointerenter",this.onHoverTargetEnter),target.addEventListener("pointerleave",this.onHoverTargetLeave))}unbindHoverTarget(){this.hoverTarget?.removeEventListener("pointerenter",this.onHoverTargetEnter),this.hoverTarget?.removeEventListener("pointerleave",this.onHoverTargetLeave),this.hoverTarget=null,this.revealed=!1}actionRoots(){const base=this.renderRoot.querySelector('[part="base"]');if(!base)return[];const direct=[...base.children].filter(element=>element.localName!=="slot"),slot=base.querySelector("slot");return[...direct,...slot?.assignedElements({flatten:!0})??[]]}sameAction(left,right){return left.owner===right.owner&&left.source===right.source&&left.action.id===right.action.id}isAvailable(action){try{return action.disabled!==!0}catch{return!1}}directActionFor(element){let action=this.directActions.get(element);if(action)return action;const target=element,id=`direct-${++this.nextDirectActionId}`;let leasedTarget,leasedAuthoredTabIndex=null,lastManagedTabIndex=null,consumerOwnsTabIndex=!1;const releaseTabIndex=()=>{const leased=leasedTarget;leased&&leased.getAttribute("tabindex")===lastManagedTabIndex&&(leasedAuthoredTabIndex===null?leased.removeAttribute("tabindex"):leased.setAttribute("tabindex",leasedAuthoredTabIndex)),leasedTarget=void 0,leasedAuthoredTabIndex=null,lastManagedTabIndex=null,consumerOwnsTabIndex=!1};return action={id,get disabled(){return!isComposedFocusAvailable(element)},focus(options){target.focus(options)},setTabIndex(tabIndex){if(leasedTarget!==target&&(releaseTabIndex(),leasedTarget=target,leasedAuthoredTabIndex=target.getAttribute("tabindex")),consumerOwnsTabIndex||lastManagedTabIndex!==null&&target.getAttribute("tabindex")!==lastManagedTabIndex){consumerOwnsTabIndex=!0;return}target.tabIndex=tabIndex,lastManagedTabIndex=target.getAttribute("tabindex")},releaseTabIndex,hasAuthoredTabIndex(){return leasedTarget!==target?target.hasAttribute("tabindex"):lastManagedTabIndex!==null&&target.getAttribute("tabindex")===lastManagedTabIndex?leasedAuthoredTabIndex!==null:target.hasAttribute("tabindex")},matchesEventPath(path){return path.includes(element)}},this.directActions.set(element,action),action}logicalActions(){const actions=[],addProvider=(owner,provider)=>{const getToolbarActions=dataCallable(provider,"getToolbarActions");if(!getToolbarActions)return;let provided;try{provided=Reflect.apply(getToolbarActions,provider,[])}catch{return}let isArray=!1;try{isArray=Array.isArray(provided)}catch{return}if(!isArray)return;const length=getOwnDataDescriptor(provided,"length");if(length===MISSING_OWN_DATA_DESCRIPTOR||length===UNSAFE_OWN_DATA_DESCRIPTOR||typeof length.value!="number"||!Number.isSafeInteger(length.value)||length.value<0)return;const seen=new Set,inspected=Math.min(length.value,MAX_TOOLBAR_ACTIONS);for(let index=0;index<inspected;index+=1){const candidate=getOwnDataDescriptor(provided,String(index));if(candidate===MISSING_OWN_DATA_DESCRIPTOR||candidate===UNSAFE_OWN_DATA_DESCRIPTOR)continue;const projected=projectToolbarAction(candidate.value);!projected||seen.has(projected.action.id)||(seen.add(projected.action.id),this.isAvailable(projected.action)&&actions.push({owner,...projected}))}},visit=element=>{if(isLyraToolbarActionProvider(element)){addProvider(element,element);return}const knownAction=this.directActions.get(element);if(isSemanticActionElement(element)||(knownAction?.hasAuthoredTabIndex()??element.hasAttribute("tabindex"))){const action=this.directActionFor(element);this.isAvailable(action)&&actions.push({owner:element,action,source:action});return}for(const child of element.children)visit(child)};for(const root of this.actionRoots())visit(root);return actions}setActiveStop(stops,index,preferred){this.stopObserver?.disconnect();for(const previous of this.managedStops)stops.some(stop=>this.sameAction(stop,previous))||this.releaseManagedStop(previous);const preferredIndex=preferred?stops.findIndex(stop=>this.sameAction(stop,preferred)):-1;this.activeStopIndex=stops.length===0?0:preferredIndex>=0?preferredIndex:Math.min(Math.max(0,index),stops.length-1),stops.forEach(({action},stopIndex)=>{try{action.setTabIndex(stopIndex===this.activeStopIndex?0:-1)}catch{}}),this.managedStops=stops,this.observeStopChanges()}releaseManagedStop(stop){try{stop.action.releaseTabIndex?.()}catch{}this.directActions.get(stop.owner)===stop.action&&this.directActions.delete(stop.owner)}releaseManagedStops(){for(const stop of this.managedStops)this.releaseManagedStop(stop);this.managedStops=[]}observeStopChanges(){this.stopObserver?.disconnect();const Observer=this.ownerDocument.defaultView?.MutationObserver,base=this.renderRoot.querySelector('[part="base"]');if(!Observer||!base||!this.isConnected){this.stopObserver=void 0;return}const observer=new Observer(this.onStopMutations),roots=new Set([base,...this.actionRoots()]),options={attributes:!0,attributeOldValue:!0,attributeFilter:["aria-disabled","aria-hidden","contenteditable","controls","disabled","hidden","href","inert","open","role","tabindex","type"],childList:!0,subtree:!0};for(const root of roots)observer.observe(root,options);this.stopObserver=observer}async reconcileStopsAfterChildren(){const generation=++this.stopSyncGeneration,pending=this.actionRoots().map(root=>root.updateComplete).filter(value=>value!==void 0&&typeof value.then=="function");if(await Promise.all(pending),await Promise.resolve(),generation!==this.stopSyncGeneration||!this.isConnected)return;const stops=this.logicalActions(),focused=this.focusedStop,retainedIndex=focused?stops.findIndex(stop=>stop.owner===focused.owner&&stop.source===focused.source&&stop.action.id===focused.id):-1,targetIndex=retainedIndex>=0?retainedIndex:Math.min(focused?Math.max(0,focused.index):this.activeStopIndex,Math.max(0,stops.length-1));if(this.setActiveStop(stops,targetIndex),focused&&retainedIndex<0){const base=this.renderRoot.querySelector('[part="base"]');base&&applyComposedFocusRepair(focused.repair,base)&&stops[targetIndex]?.action.focus(),this.focusedStop===focused&&(this.focusedStop=void 0)}}renderControl(type){switch(type){case"copy":return this.copyText?html`<lr-copy-button
|
|
13
13
|
part="copy-button"
|
|
14
14
|
.value=${this.copyText}
|
|
15
15
|
></lr-copy-button>`:nothing;case"regenerate":return html`<button
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{css}from"lit";const styles=css`:host{max-inline-size:100%;display:inline-flex}:host([reveal-on-interaction]){opacity:0;transition:opacity var(--lr-transition-fast)}:host([reveal-on-interaction][data-revealed]){opacity:1}@media (hover:none){:host([reveal-on-interaction]){opacity:1}}@media (prefers-reduced-motion:reduce){:host([reveal-on-interaction]){transition:none}}[part=base]{align-items:center;gap:var(--lr-space-2xs);flex-wrap:wrap;max-inline-size:100%;display:flex}[part~=regenerate-button],[part~=edit-button]{inline-size:var(--lr-size-1-75rem);block-size:var(--lr-size-1-75rem);min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);border-radius:var(--lr-radius);color:var(--lr-color-text-quiet);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}[part~=regenerate-button]:hover,[part~=edit-button]:hover{background:var(--lr-color-surface-raised);color:var(--lr-color-text)}[part~=regenerate-button]:active,[part~=edit-button]:active{background:color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-text)}[part~=regenerate-button]:focus-visible,[part~=edit-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}`;export{styles};
|
|
1
|
+
import{css}from"lit";const styles=css`:host{max-inline-size:100%;display:inline-flex}:host([reveal-on-interaction]){opacity:0;transition:opacity var(--lr-transition-fast)}:host([reveal-on-interaction][data-revealed]){opacity:1}@media (hover:none){:host([reveal-on-interaction]){opacity:1}}@media (prefers-reduced-motion:reduce){:host([reveal-on-interaction]){transition:none}}[part=base]{align-items:center;gap:var(--lr-space-2xs);flex-wrap:wrap;max-inline-size:100%;display:flex}[part~=regenerate-button],[part~=edit-button]{inline-size:var(--lr-size-1-75rem);block-size:var(--lr-size-1-75rem);min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);font:inherit;border-radius:var(--lr-radius);color:var(--lr-color-text-quiet);cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}[part~=regenerate-button]:hover,[part~=edit-button]:hover{background:var(--lr-color-surface-raised);color:var(--lr-color-text)}[part~=regenerate-button]:active,[part~=edit-button]:active{background:color-mix(in oklab, var(--lr-color-surface-raised), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-text)}[part~=regenerate-button]:focus-visible,[part~=edit-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}`;export{styles};
|
|
@@ -5,7 +5,9 @@
|
|
|
5
5
|
* tab stop, focus an action, and associate a composed event with that action without receiving the
|
|
6
6
|
* underlying element. `id` must remain stable while the logical action remains available.
|
|
7
7
|
*/
|
|
8
|
-
export interface LyraToolbarAction{readonly id:string;readonly disabled:boolean;focus(options?:FocusOptions):void;setTabIndex(tabIndex:0| -1):void;
|
|
8
|
+
export interface LyraToolbarAction{readonly id:string;readonly disabled:boolean;focus(options?:FocusOptions):void;setTabIndex(tabIndex:0| -1):void;
|
|
9
|
+
/** Releases a parent toolbar's current tabindex lease, restoring an untouched authored value. */
|
|
10
|
+
releaseTabIndex?():void;matchesEventPath(path:readonly EventTarget[]):boolean;}
|
|
9
11
|
/**
|
|
10
12
|
* Public opt-in protocol for a composite child of `<lr-message-actions>`.
|
|
11
13
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function isLyraToolbarActionProvider(value){return(typeof value=="object"&&value!==null||typeof value=="function")&&
|
|
1
|
+
const MAX_DESCRIPTOR_PROTOTYPES=100;function hasCallableDataDescriptor(value,key){let current=value;for(let depth=0;current&&depth<100;depth+=1){let descriptor;try{descriptor=Object.getOwnPropertyDescriptor(current,key)}catch{return!1}if(descriptor)return"value"in descriptor&&typeof descriptor.value=="function";try{current=Object.getPrototypeOf(current)}catch{return!1}}return!1}function isLyraToolbarActionProvider(value){return(typeof value=="object"&&value!==null||typeof value=="function")&&hasCallableDataDescriptor(value,"getToolbarActions")}export{isLyraToolbarActionProvider};
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import{type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraToolbarAction}from'../message-actions/toolbar-actions.js';export interface MessageFeedbackReason{readonly id:string;readonly label:string;}export type MessageFeedbackRating='up'|'down';export type MessageFeedbackValue=MessageFeedbackRating|null;export type MessageFeedbackDetailFor='none'|'up'|'down'|'both';export interface MessageFeedbackDetailConfiguration{readonly reasons?:readonly MessageFeedbackReason[];readonly commentable?:boolean;}
|
|
1
|
+
import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import{type PropertyDeclaration,type PropertyValues,type TemplateResult}from'lit';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraTextWrap}from'../../../internal/shared-unions.js';import type{LyraToolbarAction}from'../message-actions/toolbar-actions.js';export interface MessageFeedbackReason{readonly id:string;readonly label:string;}export type MessageFeedbackRating='up'|'down';export type MessageFeedbackValue=MessageFeedbackRating|null;export type MessageFeedbackDetailFor='none'|'up'|'down'|'both';export interface MessageFeedbackDetailConfiguration{readonly reasons?:readonly MessageFeedbackReason[];readonly commentable?:boolean;}
|
|
2
|
+
/** Native `<textarea wrap>` values accepted by the optional comment field. */
|
|
3
|
+
export type MessageFeedbackWrap=LyraTextWrap;export interface MessageFeedbackSubmitDetail{rating:MessageFeedbackValue;reasonIds:string[];comment:string;
|
|
4
|
+
/** Opaque, nonblank correlation identity for this one feedback persistence transaction. */
|
|
5
|
+
readonly submissionId:string;}export interface LyraMessageFeedbackEventMap{'lr-feedback-change':CustomEvent<{rating:MessageFeedbackValue;}>;'lr-feedback-submit':CustomEvent<LyraEventDetailSnapshot<MessageFeedbackSubmitDetail>>;'lr-toolbar-actions-change':Event;blur:CustomEvent<null>;focus:CustomEvent<null>;}
|
|
2
6
|
/**
|
|
3
7
|
* `<lr-message-feedback>` — thumbs up/down for one assistant message, with an optional inline
|
|
4
8
|
* detail step (categorical reason chips + a free-text comment) that opens as a disclosure directly
|
|
@@ -12,16 +16,23 @@ import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';impo
|
|
|
12
16
|
* `<lr-message-actions>`'s embedded built-in) never has a panel to reopen, so its thumbs always
|
|
13
17
|
* behave as a plain toggle.
|
|
14
18
|
* The detail record and its reasons are a bounded clone-owned readonly snapshot. Create and
|
|
15
|
-
* reassign a new detail record after changes.
|
|
19
|
+
* reassign a new detail record after changes. When the detail record enables a comment textarea,
|
|
20
|
+
* its native `spellcheck`, `autocapitalize`, `autocorrect`, and `wrap` properties forward from
|
|
21
|
+
* this element; no textarea exists, and those values have no rendered target, otherwise.
|
|
22
|
+
*
|
|
23
|
+
* Asynchronous finalization or reversion preserves focus on an outside control. Settlement retains the existing thumb/submit fallback when focus remains within the feedback or was lost as its pending controls became disabled.
|
|
16
24
|
*
|
|
17
25
|
* @customElement lr-message-feedback
|
|
18
26
|
* @event lr-feedback-change - `detail: { rating }`. Fires whenever thumb interaction changes the
|
|
19
27
|
* provisional rating, including clearing it to `null`.
|
|
20
|
-
* @event lr-feedback-submit - `detail: { rating, reasonIds, comment }`, fired
|
|
21
|
-
* thumbs-only terminal choice or by the detail panel's submit button.
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
28
|
+
* @event lr-feedback-submit - Frozen `detail: { rating, reasonIds, comment, submissionId }`, fired
|
|
29
|
+
* immediately for a thumbs-only terminal choice or by the detail panel's submit button.
|
|
30
|
+
* `submissionId` is a nonblank, never-reused transaction identity. Cancelable:
|
|
31
|
+
* `preventDefault()` holds the panel in its reflected `pending` state until the host calls
|
|
32
|
+
* `finalizePendingSubmit(submissionId)` after persistence succeeds or
|
|
33
|
+
* `revertPendingSubmit(submissionId)` after it fails. The legacy no-argument settle form works
|
|
34
|
+
* only for this instance's first never-invalidated transaction; later calls fail closed. An
|
|
35
|
+
* uncanceled submit retains the synchronous close/announce/focus behavior.
|
|
25
36
|
* @event blur - Re-dispatched from the comment `<textarea>`'s own native `blur` -- bubbling and
|
|
26
37
|
* composed (unlike the native event, which is neither), so a listener above the shadow boundary
|
|
27
38
|
* can observe it. Mirrors `<lr-model-select>`'s identical re-dispatch for its own free-text
|
|
@@ -69,17 +80,31 @@ disabled:boolean;
|
|
|
69
80
|
/** A canceled `lr-feedback-submit` is awaiting host persistence. While true, every feedback control is
|
|
70
81
|
* disabled and the open panel is busy. Resolve through `finalizePendingSubmit()` or
|
|
71
82
|
* `revertPendingSubmit()`; the component sets this state automatically. */
|
|
72
|
-
pending:boolean;
|
|
73
|
-
/**
|
|
83
|
+
pending:boolean;
|
|
84
|
+
/** Native spellcheck state for the optional comment textarea. `spellcheck="false"` parses false. */
|
|
85
|
+
spellcheck:boolean;
|
|
86
|
+
/** Native autocapitalization hint for the optional comment textarea. Empty preserves its default. */
|
|
87
|
+
autocapitalize:string;private autocorrectValue;
|
|
88
|
+
/** Native autocorrect state for the optional comment textarea. Reads are boolean; writes also
|
|
89
|
+
* accept the legacy `'off'` and `'false'` string forms. */
|
|
90
|
+
get autocorrect():boolean;set autocorrect(next:boolean|string);
|
|
91
|
+
/** Native wrapping mode for the optional comment textarea. Removing `wrap` restores `'soft'`. */
|
|
92
|
+
wrap:MessageFeedbackWrap;private panelOpen;private selectedReasonIds;private commentDraft;private detailProjectionSource;private detailProjection;private pendingInternalRating;private submissionSequence;private submissionCount;private legacyNoArgumentSettlementInvalidated;private lifecycleGeneration;private focusGeneration;private settingPending;private dispatchingSubmission?;private pendingSubmission?;private upButtonEl?;private downButtonEl?;private submitButtonEl?;private liveRegion?;private readonly panelId;private readonly upToolbarAction;private readonly downToolbarAction;private createToolbarAction;
|
|
93
|
+
/** Ordered logical actions exposed to an enclosing toolbar without exposing shadow nodes.
|
|
94
|
+
* A parent releases its optional lease when this provider leaves, restoring an untouched
|
|
95
|
+
* authored thumb tabindex without replacing a later consumer value. */
|
|
74
96
|
getToolbarActions():readonly LyraToolbarAction[];
|
|
75
97
|
/** Focuses the thumb matching the current `rating` (the up thumb when `rating` is `null`) --
|
|
76
98
|
* lets a toolbar embedding this component (e.g. `<lr-message-actions>`) treat it as one
|
|
77
99
|
* arrow-key stop. */
|
|
78
100
|
focus(options?:FocusOptions):void;blur():void;
|
|
79
101
|
/** Activates the thumb matching the current rating (the up thumb when unset). */
|
|
80
|
-
click():void;private get detailReasons();private get detailCommentable();private get hasDetailContent();private detailApplies;protected willUpdate(changed:PropertyValues<this>):void;protected updated(changed:PropertyValues<this>):void;private setRatingFromInteraction;private activateThumb;private focusActiveThumb;private closePanel;private onPanelKeyDown;private toggleReason;private onCommentInput;private onCommentFocus;private onCommentBlur;private
|
|
81
|
-
/**
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
*
|
|
85
|
-
|
|
102
|
+
click():void;private get detailReasons();private get detailCommentable();private get currentDetailProjection();private get hasDetailContent();private detailApplies;requestUpdate(name?:PropertyKey,oldValue?:unknown,options?:PropertyDeclaration):void;disconnectedCallback():void;adoptedCallback():void;protected willUpdate(changed:PropertyValues<this>):void;protected updated(changed:PropertyValues<this>):void;private setRatingFromInteraction;private activateThumb;private focusActiveThumb;private closePanel;private onPanelKeyDown;private toggleReason;private onCommentInput;private onCommentFocus;private onCommentBlur;private setPending;
|
|
103
|
+
/** Retires a transaction synchronously so a later same-turn settlement cannot affect it. */
|
|
104
|
+
private invalidatePendingSubmission;private isCurrentPendingSubmission;private canSettleWithoutSubmissionId;private scheduleSettlementFocus;private ownsSettlementFocus;private settlePendingSubmission;private commitSettlement;
|
|
105
|
+
/** Completes a live held submit. Pass its event `submissionId`; a no-argument call is retained
|
|
106
|
+
* only for this instance's never-invalidated first transaction. Returns whether this call won. */
|
|
107
|
+
finalizePendingSubmit(submissionId?:string):boolean;
|
|
108
|
+
/** Reverts a live held submit to the rating preceding it. Pass its event `submissionId`; the
|
|
109
|
+
* restricted legacy no-argument form follows `finalizePendingSubmit()`. Returns whether it won. */
|
|
110
|
+
revertPendingSubmit(submissionId?:string):boolean;private requestSubmission;private onSubmit;private renderThumb;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-message-feedback':LyraMessageFeedback;}}
|