@aceshooting/lyra-ui 19.0.1 → 20.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +159 -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 +14 -4
- package/dist/components/agent-tools/activity-feed/activity-feed.styles.js +1 -1
- package/dist/components/agent-tools/approval-queue/approval-queue.class.d.ts +1 -0
- package/dist/components/agent-tools/approval-queue/approval-queue.class.js +4 -3
- package/dist/components/agent-tools/approval-queue/approval-queue.styles.js +1 -1
- package/dist/components/agent-tools/artifact-panel/artifact-panel.class.d.ts +3 -1
- package/dist/components/agent-tools/context-inspector/context-inspector.class.d.ts +1 -0
- package/dist/components/agent-tools/context-inspector/context-inspector.class.js +4 -3
- package/dist/components/agent-tools/context-inspector/context-inspector.styles.js +1 -1
- package/dist/components/agent-tools/eval-dataset/eval-dataset.class.js +1 -1
- package/dist/components/agent-tools/eval-result/eval-result.class.js +1 -1
- package/dist/components/agent-tools/evaluation-run/evaluation-run.class.d.ts +1 -0
- package/dist/components/agent-tools/evaluation-run/evaluation-run.class.js +4 -3
- package/dist/components/agent-tools/evaluation-run/evaluation-run.styles.js +1 -1
- package/dist/components/agent-tools/policy-summary/policy-summary.class.d.ts +1 -0
- package/dist/components/agent-tools/policy-summary/policy-summary.class.js +4 -3
- package/dist/components/agent-tools/policy-summary/policy-summary.styles.js +1 -1
- package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +1 -1
- package/dist/components/agent-tools/schema-viewer/schema-viewer.class.d.ts +10 -1
- package/dist/components/agent-tools/schema-viewer/schema-viewer.class.js +3 -3
- package/dist/components/agent-tools/subagent-panel/subagent-panel.class.js +1 -1
- package/dist/components/agent-tools/thinking-panel/thinking-panel.class.d.ts +6 -3
- package/dist/components/agent-tools/thinking-panel/thinking-panel.styles.js +1 -1
- package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +14 -3
- package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +2 -2
- package/dist/components/agent-tools/tool-param-form/tool-param-form.class.d.ts +12 -2
- package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +3 -1
- package/dist/components/charts/chart/box-plot.class.d.ts +15 -3
- package/dist/components/charts/chart/box-plot.class.js +3 -3
- package/dist/components/charts/chart/box-plot.styles.js +1 -1
- package/dist/components/charts/chart/chart.class.d.ts +23 -5
- package/dist/components/charts/chart/chart.class.js +2 -2
- package/dist/components/charts/chart/chart.styles.js +1 -1
- package/dist/components/charts/chart/lite-chart.class.js +1 -1
- package/dist/components/charts/chart/lite-chart.styles.js +1 -1
- package/dist/components/conversation/audio-visualizer/audio-visualizer.class.d.ts +4 -2
- 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/chat-viewport/chat-viewport.class.d.ts +4 -3
- package/dist/components/conversation/chat-viewport/chat-viewport.class.js +1 -1
- package/dist/components/conversation/code-block/code-block-core.class.d.ts +6 -11
- package/dist/components/conversation/code-block/code-block-core.class.js +1 -1
- package/dist/components/conversation/code-block/code-block-shared.d.ts +29 -1
- package/dist/components/conversation/code-block/code-block-shared.js +1 -1
- package/dist/components/conversation/code-block/code-block.class.d.ts +6 -11
- package/dist/components/conversation/code-block/code-block.class.js +1 -1
- package/dist/components/conversation/markdown/markdown-shared.js +2 -2
- package/dist/components/conversation/message-actions/message-actions.class.d.ts +4 -2
- package/dist/components/conversation/message-actions/message-actions.class.js +2 -2
- package/dist/components/conversation/message-parts/message-parts.class.d.ts +17 -2
- package/dist/components/conversation/model-select/model-select.class.js +1 -0
- package/dist/components/conversation/model-select/model-select.styles.js +1 -1
- package/dist/components/conversation/prompt-input/prompt-input.class.d.ts +5 -1
- package/dist/components/conversation/prompt-input/prompt-input.class.js +2 -2
- package/dist/components/conversation/prompt-queue/prompt-queue.class.d.ts +6 -1
- package/dist/components/conversation/prompt-queue/prompt-queue.class.js +2 -2
- package/dist/components/conversation/realtime-session/realtime-session.class.d.ts +5 -1
- package/dist/components/conversation/realtime-session/realtime-session.class.js +1 -1
- package/dist/components/conversation/selection-toolbar/selection-toolbar.class.d.ts +5 -1
- package/dist/components/conversation/selection-toolbar/selection-toolbar.class.js +1 -1
- package/dist/components/conversation/voice-picker/voice-picker.class.d.ts +13 -2
- package/dist/components/conversation/voice-picker/voice-picker.class.js +5 -3
- package/dist/components/conversation/voice-picker/voice-picker.styles.js +1 -1
- package/dist/components/data/calendar/calendar.class.d.ts +9 -0
- 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 +5 -1
- package/dist/components/data/context-meter/context-meter.class.d.ts +4 -0
- package/dist/components/data/context-meter/context-meter.styles.js +1 -1
- package/dist/components/data/data-grid/data-grid.class.d.ts +8 -2
- package/dist/components/data/data-grid/data-grid.class.js +1 -2
- package/dist/components/data/flow-node/flow-node.class.d.ts +7 -4
- package/dist/components/data/flow-node/flow-node.styles.js +1 -1
- package/dist/components/data/funnel/funnel.class.d.ts +5 -0
- package/dist/components/data/funnel/funnel.class.js +4 -3
- package/dist/components/data/funnel/funnel.styles.js +1 -1
- package/dist/components/data/gauge/gauge.class.d.ts +12 -1
- package/dist/components/data/gauge/gauge.styles.js +1 -1
- package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +50 -13
- package/dist/components/data/graph-query-builder/graph-query-builder.class.js +2 -2
- package/dist/components/data/graph-query-builder/graph-query-builder.styles.js +1 -1
- package/dist/components/data/heatmap/heatmap.class.d.ts +27 -9
- package/dist/components/data/heatmap/heatmap.class.js +5 -3
- package/dist/components/data/sequence-strip/sequence-strip.class.d.ts +2 -0
- package/dist/components/data/sequence-strip/sequence-strip.styles.js +1 -1
- package/dist/components/data/table/table.class.d.ts +8 -0
- package/dist/components/data/table/table.class.js +2 -1
- package/dist/components/data/tree/tree.class.d.ts +20 -1
- package/dist/components/data/tree/tree.class.js +1 -1
- package/dist/components/data/word-cloud/word-cloud.class.d.ts +4 -1
- package/dist/components/data/word-cloud/word-cloud.class.js +2 -2
- package/dist/components/forms/button/button.class.js +1 -1
- package/dist/components/forms/checkbox/checkbox.class.d.ts +11 -8
- package/dist/components/forms/checkbox/checkbox.class.js +1 -1
- package/dist/components/forms/checkbox/checkbox.styles.js +1 -1
- package/dist/components/forms/checkbox-group/checkbox-group.class.d.ts +2 -2
- package/dist/components/forms/checkbox-group/checkbox-group.class.js +1 -1
- package/dist/components/forms/code-editor/code-editor.class.d.ts +2 -0
- package/dist/components/forms/code-editor/code-editor.class.js +1 -1
- package/dist/components/forms/code-editor/code-editor.styles.js +1 -1
- package/dist/components/forms/color-picker/color-picker.class.d.ts +11 -1
- package/dist/components/forms/color-picker/color-picker.class.js +4 -3
- package/dist/components/forms/combobox/combobox.class.d.ts +67 -18
- package/dist/components/forms/combobox/combobox.class.js +7 -6
- package/dist/components/forms/combobox/combobox.styles.js +1 -1
- package/dist/components/forms/date-picker/date-input.class.d.ts +22 -2
- package/dist/components/forms/date-picker/date-input.class.js +4 -2
- package/dist/components/forms/date-picker/date-input.styles.js +1 -1
- package/dist/components/forms/emoji-picker/emoji-data-loader.d.ts +18 -4
- package/dist/components/forms/emoji-picker/emoji-data-loader.js +1 -1
- package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +18 -4
- package/dist/components/forms/emoji-picker/emoji-picker.class.js +1 -1
- package/dist/components/forms/emoji-picker/emoji-picker.styles.js +1 -1
- package/dist/components/forms/icon-button/icon-button.class.d.ts +1 -1
- package/dist/components/forms/input/time-input.class.d.ts +11 -1
- package/dist/components/forms/input/time-input.class.js +4 -3
- package/dist/components/forms/input/time-input.styles.js +1 -1
- package/dist/components/forms/locale-picker/locale-picker.class.d.ts +17 -3
- package/dist/components/forms/locale-picker/locale-picker.class.js +3 -2
- package/dist/components/forms/locale-picker/locale-picker.styles.js +1 -1
- package/dist/components/forms/otp-input/otp-input.class.d.ts +13 -5
- package/dist/components/forms/otp-input/otp-input.class.js +2 -2
- package/dist/components/forms/otp-input/otp-input.styles.js +1 -1
- package/dist/components/forms/phone-input/phone-input.class.d.ts +10 -3
- package/dist/components/forms/phone-input/phone-input.class.js +6 -2
- package/dist/components/forms/phone-input/phone-input.styles.js +1 -1
- package/dist/components/forms/radio/radio-group.class.d.ts +1 -1
- package/dist/components/forms/radio/radio-group.class.js +2 -2
- package/dist/components/forms/rubric-form/rubric-form.class.d.ts +9 -1
- package/dist/components/forms/rubric-form/rubric-form.class.js +5 -3
- package/dist/components/forms/select/select.class.d.ts +4 -0
- package/dist/components/forms/select/select.styles.js +1 -1
- package/dist/components/forms/slider/slider.class.d.ts +5 -1
- package/dist/components/forms/slider/slider.class.js +3 -3
- package/dist/components/forms/switch/switch.class.d.ts +6 -5
- package/dist/components/forms/switch/switch.class.js +1 -1
- package/dist/components/forms/time-range/time-range.class.d.ts +2 -2
- package/dist/components/forms/token-input/token-input.class.d.ts +13 -3
- package/dist/components/forms/token-input/token-input.class.js +3 -1
- package/dist/components/layout/carousel/carousel.class.d.ts +4 -1
- package/dist/components/layout/carousel/carousel.class.js +1 -1
- package/dist/components/layout/command-palette/command-palette.class.d.ts +8 -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/details/accordion.class.js +1 -1
- package/dist/components/layout/dock-panel/dock-panel.class.d.ts +10 -7
- package/dist/components/layout/dock-panel/dock-panel.class.js +2 -2
- package/dist/components/layout/dock-panel/dock-panel.styles.js +1 -1
- package/dist/components/layout/menu/menu.class.d.ts +13 -3
- package/dist/components/layout/menu/menu.class.js +4 -3
- package/dist/components/layout/menu/menu.styles.js +1 -1
- package/dist/components/layout/page/page.class.d.ts +7 -1
- package/dist/components/layout/reorder-list/reorder-list.class.d.ts +1 -1
- package/dist/components/layout/reorder-list/reorder-list.class.js +1 -1
- package/dist/components/layout/segmented/segmented.class.d.ts +2 -0
- package/dist/components/layout/segmented/segmented.styles.js +1 -1
- package/dist/components/layout/virtual-list/virtual-list.styles.js +1 -1
- package/dist/components/layout/widget/widget.class.d.ts +15 -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/avatar/avatar.class.d.ts +4 -0
- package/dist/components/media/avatar/avatar.styles.js +1 -1
- package/dist/components/media/avatar-group/avatar-group.class.d.ts +8 -1
- package/dist/components/media/avatar-group/avatar-group.styles.js +1 -1
- package/dist/components/media/drop-zone/drop-zone.class.d.ts +10 -4
- package/dist/components/media/drop-zone/drop-zone.class.js +2 -2
- package/dist/components/media/drop-zone/drop-zone.styles.js +1 -1
- package/dist/components/media/flag/flag.class.js +1 -1
- package/dist/components/media/map/map.class.d.ts +19 -5
- package/dist/components/media/map/map.class.js +3 -3
- package/dist/components/media/video-playlist/video-playlist.class.d.ts +6 -3
- package/dist/components/media/video-playlist/video-playlist.class.js +1 -1
- package/dist/components/overlays/callout/callout.class.d.ts +4 -1
- package/dist/components/overlays/dialog/dialog.class.d.ts +4 -1
- package/dist/components/overlays/overlay/overlay.styles.js +1 -1
- package/dist/components/overlays/overlay/popover.class.d.ts +9 -1
- package/dist/components/overlays/overlay/popover.class.js +3 -2
- package/dist/components/overlays/overlay/tooltip.class.d.ts +14 -4
- package/dist/components/overlays/overlay/tooltip.class.js +3 -2
- package/dist/components/overlays/popup/popup.class.d.ts +15 -1
- package/dist/components/overlays/popup/popup.class.js +3 -3
- package/dist/components/overlays/popup/popup.styles.js +1 -1
- package/dist/components/overlays/progress/progress-bar.class.d.ts +2 -0
- package/dist/components/overlays/progress/progress.styles.js +1 -1
- package/dist/components/retrieval/citation-badge/citation-badge.class.d.ts +4 -2
- package/dist/components/retrieval/citation-badge/citation-badge.class.js +1 -1
- package/dist/components/retrieval/claim-evidence/claim-evidence.class.d.ts +4 -0
- package/dist/components/retrieval/claim-evidence/claim-evidence.class.js +4 -3
- package/dist/components/retrieval/claim-evidence/claim-evidence.styles.js +1 -1
- package/dist/components/retrieval/community-card/community-card.class.d.ts +6 -1
- package/dist/components/retrieval/community-card/community-card.styles.js +1 -1
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.d.ts +9 -1
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +4 -3
- package/dist/components/retrieval/entity-card/entity-card.styles.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/entity-dossier/entity-dossier.class.js +2 -2
- package/dist/components/retrieval/graph-legend/graph-legend.class.d.ts +18 -4
- package/dist/components/retrieval/graph-legend/graph-legend.class.js +2 -2
- package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +7 -0
- package/dist/components/retrieval/grounding-summary/grounding-summary.class.js +4 -3
- package/dist/components/retrieval/grounding-summary/grounding-summary.styles.js +1 -1
- package/dist/components/retrieval/memory-panel/memory-panel.class.d.ts +6 -0
- package/dist/components/retrieval/memory-panel/memory-panel.class.js +4 -3
- package/dist/components/retrieval/memory-panel/memory-panel.styles.js +1 -1
- package/dist/components/retrieval/mind-map/mind-map-layout.d.ts +17 -1
- package/dist/components/retrieval/mind-map/mind-map-layout.js +1 -1
- package/dist/components/retrieval/mind-map/mind-map.class.d.ts +8 -1
- package/dist/components/retrieval/mind-map/mind-map.class.js +3 -2
- package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.d.ts +5 -0
- package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.class.js +6 -5
- package/dist/components/retrieval/rag-eval-dashboard/rag-eval-dashboard.styles.js +1 -1
- package/dist/components/retrieval/retrieval-compare/retrieval-compare.class.js +5 -5
- package/dist/components/retrieval/retrieval-compare/retrieval-compare.styles.js +1 -1
- package/dist/components/retrieval/source-list/source-list.class.d.ts +21 -2
- package/dist/components/retrieval/source-list/source-list.class.js +2 -2
- package/dist/components/retrieval/source-list/source-list.styles.js +1 -1
- package/dist/components/retrieval/source-picker/source-picker.class.d.ts +3 -1
- package/dist/components/retrieval/source-picker/source-picker.class.js +2 -2
- package/dist/components/utility/diff-view/diff-view.class.d.ts +105 -8
- package/dist/components/utility/diff-view/diff-view.class.js +21 -5
- package/dist/components/utility/diff-view/diff-view.styles.js +1 -1
- package/dist/components/utility/export-button/export-button.class.d.ts +26 -2
- package/dist/components/utility/export-button/export-button.class.js +4 -2
- package/dist/components/utility/export-button/export-button.styles.js +1 -1
- package/dist/components/utility/mention-popover/mention-popover.class.d.ts +19 -1
- package/dist/components/utility/mention-popover/mention-popover.class.js +3 -2
- package/dist/components/utility/mention-popover/mention-popover.styles.js +1 -1
- package/dist/components/utility/tour/tour.class.d.ts +1 -3
- package/dist/components/utility/tour/tour.class.js +1 -1
- package/dist/components/viewers/archive-viewer/archive-viewer.class.d.ts +20 -3
- package/dist/components/viewers/archive-viewer/archive-viewer.class.js +1 -1
- package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
- package/dist/components/viewers/geojson-view/geojson-view.styles.js +1 -1
- package/dist/components/viewers/geojson-view/geojson-viewer.class.d.ts +5 -0
- package/dist/components/viewers/geojson-view/geojson-viewer.class.js +6 -3
- package/dist/components/viewers/pdf-viewer/pdf-viewer.class.d.ts +7 -1
- package/dist/components/viewers/pdf-viewer/pdf-viewer.class.js +1 -1
- package/dist/components/viewers/pptx-viewer/pptx-viewer.class.d.ts +7 -1
- package/dist/components/viewers/pptx-viewer/pptx-viewer.class.js +1 -1
- package/dist/components/viewers/xml-viewer/xml-viewer.class.d.ts +5 -0
- package/dist/components/viewers/xml-viewer/xml-viewer.class.js +1 -1
- package/dist/custom-elements-jsx.d.ts +1 -1
- package/dist/events.d.ts +79 -30
- package/dist/internal/accessibility-visibility.js +1 -1
- package/dist/internal/aria-reflection.js +1 -1
- package/dist/internal/catalog-picker.d.ts +14 -3
- package/dist/internal/catalog-picker.js +1 -1
- package/dist/internal/default-strings.generated.d.ts +1 -1
- package/dist/internal/default-strings.generated.js +2 -2
- package/dist/internal/localization-types.d.ts +1 -1
- package/dist/internal/localization.js +2 -2
- package/dist/internal/lyra-element.d.ts +17 -0
- package/dist/internal/lyra-element.js +2 -2
- package/dist/internal/package-metadata.d.ts +1 -1
- package/dist/internal/package-metadata.js +1 -1
- package/dist/svelte.d.ts +1 -1
- package/dist/testing/lyra-tag-event-map.js +1 -1
- package/dist/translations/ar/agent-tools.js +1 -1
- package/dist/translations/ar/data.js +1 -1
- package/dist/translations/ar/retrieval.js +1 -1
- package/dist/translations/ar/shared.js +1 -1
- package/dist/translations/ar/viewers.js +1 -1
- package/dist/translations/de/agent-tools.js +1 -1
- package/dist/translations/de/data.js +1 -1
- package/dist/translations/de/retrieval.js +1 -1
- package/dist/translations/de/shared.js +1 -1
- package/dist/translations/de/viewers.js +1 -1
- package/dist/translations/es/agent-tools.js +1 -1
- package/dist/translations/es/data.js +1 -1
- package/dist/translations/es/retrieval.js +1 -1
- package/dist/translations/es/shared.js +1 -1
- package/dist/translations/es/viewers.js +1 -1
- package/dist/translations/fa/agent-tools.js +1 -1
- package/dist/translations/fa/data.js +1 -1
- package/dist/translations/fa/retrieval.js +1 -1
- package/dist/translations/fa/shared.js +1 -1
- package/dist/translations/fa/viewers.js +1 -1
- package/dist/translations/fr/agent-tools.js +1 -1
- package/dist/translations/fr/data.js +1 -1
- package/dist/translations/fr/retrieval.js +1 -1
- package/dist/translations/fr/shared.js +1 -1
- package/dist/translations/fr/viewers.js +1 -1
- package/dist/translations/he/agent-tools.js +1 -1
- package/dist/translations/he/data.js +1 -1
- package/dist/translations/he/retrieval.js +1 -1
- package/dist/translations/he/shared.js +1 -1
- package/dist/translations/he/viewers.js +1 -1
- package/dist/translations/it/agent-tools.js +1 -1
- package/dist/translations/it/data.js +1 -1
- package/dist/translations/it/retrieval.js +1 -1
- package/dist/translations/it/shared.js +1 -1
- package/dist/translations/it/viewers.js +1 -1
- package/dist/translations/ja/agent-tools.js +1 -1
- package/dist/translations/ja/data.js +1 -1
- package/dist/translations/ja/retrieval.js +1 -1
- package/dist/translations/ja/shared.js +1 -1
- package/dist/translations/ja/viewers.js +1 -1
- package/dist/translations/pt-BR/agent-tools.js +1 -1
- package/dist/translations/pt-BR/data.js +1 -1
- package/dist/translations/pt-BR/retrieval.js +1 -1
- package/dist/translations/pt-BR/shared.js +1 -1
- package/dist/translations/pt-BR/viewers.js +1 -1
- package/dist/translations/ro/agent-tools.js +1 -1
- package/dist/translations/ro/data.js +1 -1
- package/dist/translations/ro/retrieval.js +1 -1
- package/dist/translations/ro/shared.js +1 -1
- package/dist/translations/ro/viewers.js +1 -1
- package/dist/translations/ru/agent-tools.js +1 -1
- package/dist/translations/ru/data.js +1 -1
- package/dist/translations/ru/retrieval.js +1 -1
- package/dist/translations/ru/shared.js +1 -1
- package/dist/translations/ru/viewers.js +1 -1
- package/dist/translations/zh-CN/agent-tools.js +1 -1
- package/dist/translations/zh-CN/data.js +1 -1
- package/dist/translations/zh-CN/retrieval.js +1 -1
- package/dist/translations/zh-CN/shared.js +1 -1
- package/dist/translations/zh-CN/viewers.js +1 -1
- package/dist/vue.d.ts +1 -1
- package/llms/components/lr-activity-feed.md +20 -9
- package/llms/components/lr-approval-queue.md +3 -2
- package/llms/components/lr-archive-viewer.md +8 -1
- package/llms/components/lr-artifact-panel.md +3 -1
- package/llms/components/lr-audio-visualizer.md +3 -1
- package/llms/components/lr-avatar-group.md +13 -6
- package/llms/components/lr-avatar.md +6 -2
- package/llms/components/lr-bar-chart.md +6 -3
- package/llms/components/lr-box-plot.md +6 -2
- package/llms/components/lr-branch-picker.md +3 -1
- package/llms/components/lr-bubble-chart.md +6 -3
- package/llms/components/lr-calendar.md +10 -3
- package/llms/components/lr-carousel.md +4 -2
- package/llms/components/lr-chart.md +12 -4
- package/llms/components/lr-chat-viewport.md +3 -2
- package/llms/components/lr-checkbox.md +8 -5
- package/llms/components/lr-citation-badge.md +2 -0
- package/llms/components/lr-claim-evidence.md +6 -2
- package/llms/components/lr-code-editor.md +3 -1
- package/llms/components/lr-color-picker.md +20 -8
- package/llms/components/lr-combobox.md +26 -3
- package/llms/components/lr-command-palette.md +6 -3
- package/llms/components/lr-community-card.md +7 -4
- package/llms/components/lr-context-inspector.md +3 -2
- package/llms/components/lr-context-meter.md +13 -5
- package/llms/components/lr-data-grid.md +2 -0
- package/llms/components/lr-date-input.md +12 -3
- package/llms/components/lr-date-picker.md +11 -2
- package/llms/components/lr-diff-view.md +46 -5
- package/llms/components/lr-doughnut-chart.md +6 -3
- package/llms/components/lr-drop-zone.md +7 -3
- package/llms/components/lr-embedding-explorer.md +8 -2
- package/llms/components/lr-emoji-picker.md +5 -1
- package/llms/components/lr-entity-chip.md +2 -0
- package/llms/components/lr-eval-run.md +3 -2
- package/llms/components/lr-export-button.md +5 -2
- package/llms/components/lr-flow-node.md +7 -4
- package/llms/components/lr-funnel.md +7 -2
- package/llms/components/lr-gauge.md +7 -2
- package/llms/components/lr-geojson-view.md +10 -2
- package/llms/components/lr-geojson-viewer.md +10 -2
- package/llms/components/lr-graph-legend.md +6 -3
- package/llms/components/lr-graph-query-builder.md +21 -11
- package/llms/components/lr-grounding-summary.md +8 -2
- package/llms/components/lr-heatmap.md +5 -2
- package/llms/components/lr-histogram.md +4 -2
- package/llms/components/lr-json-schema-viewer.md +7 -5
- package/llms/components/lr-line-chart.md +6 -3
- package/llms/components/lr-locale-picker.md +4 -1
- package/llms/components/lr-map.md +5 -3
- package/llms/components/lr-memory-panel.md +6 -2
- package/llms/components/lr-mention-popover.md +7 -4
- package/llms/components/lr-message-actions.md +3 -1
- package/llms/components/lr-message-parts.md +8 -2
- package/llms/components/lr-mind-map.md +11 -2
- package/llms/components/lr-option.md +25 -2
- package/llms/components/lr-otp-input.md +3 -1
- package/llms/components/lr-phone-input.md +9 -5
- package/llms/components/lr-pie-chart.md +6 -3
- package/llms/components/lr-polar-area-chart.md +6 -3
- package/llms/components/lr-policy-summary.md +3 -2
- package/llms/components/lr-progress-bar.md +4 -1
- package/llms/components/lr-prompt-input.md +4 -1
- package/llms/components/lr-prompt-queue.md +5 -2
- package/llms/components/lr-radar-chart.md +6 -3
- package/llms/components/lr-rag-eval-dashboard.md +7 -2
- package/llms/components/lr-realtime-session.md +3 -1
- package/llms/components/lr-rubric-form.md +6 -1
- package/llms/components/lr-scatter-chart.md +6 -3
- package/llms/components/lr-segmented.md +3 -1
- package/llms/components/lr-select.md +7 -1
- package/llms/components/lr-selection-toolbar.md +4 -1
- package/llms/components/lr-sequence-strip.md +7 -3
- package/llms/components/lr-source-card.md +16 -1
- package/llms/components/lr-source-list.md +17 -2
- package/llms/components/lr-source-picker.md +3 -1
- package/llms/components/lr-subagent-panel.md +6 -3
- package/llms/components/lr-switch.md +4 -3
- package/llms/components/lr-table.md +6 -1
- package/llms/components/lr-thinking-panel.md +8 -5
- package/llms/components/lr-token-input.md +15 -1
- package/llms/components/lr-tool-call-chip.md +2 -0
- package/llms/components/lr-tool-param-form.md +15 -4
- package/llms/components/lr-tooltip.md +8 -4
- package/llms/components/lr-trace-tree.md +7 -4
- package/llms/components/lr-video-playlist.md +7 -5
- package/llms/components/lr-voice-picker.md +7 -4
- package/llms/components/lr-widget.md +15 -2
- package/llms/migration.md +4 -4
- package/llms-full.txt +552 -159
- package/package.json +11 -9
- package/registrations.json +1 -1
- package/vscode-css-data.json +1 -1
- package/vscode-html-data.json +1 -1
- package/web-types.json +1 -1
|
@@ -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.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
|
|
12
|
+
`}class LyraMessageActions extends LyraElement{constructor(){super(...arguments),this.controls=[],this.copyText="",this.feedbackRating=null,this.revealOnInteraction=!1,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`<lr-icon-button
|
|
@@ -30,7 +30,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
30
30
|
part="feedback"
|
|
31
31
|
.rating=${this.feedbackRating}
|
|
32
32
|
@lr-toolbar-actions-change=${this.onToolbarActionsChange}
|
|
33
|
-
></lr-message-feedback>`;default:return nothing}}render(){const label=this.accessibleLabel??(this.label
|
|
33
|
+
></lr-message-feedback>`;default:return nothing}}render(){const label=this.accessibleLabel??(this.label==null?this.localize("messageActionsLabel"):this.label);return html`
|
|
34
34
|
<div
|
|
35
35
|
part="base"
|
|
36
36
|
role="toolbar"
|
|
@@ -1,4 +1,17 @@
|
|
|
1
|
-
import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import{type PropertyValues,type TemplateResult}from'lit';import type{CitationSelectEventDetail,MessagePart}from'../../../ai/types.js';import type{LyraThinkingPanelEventMap}from'../../agent-tools/thinking-panel/thinking-panel.class.js';import type{LyraToolCallChipEventMap}from'../../agent-tools/tool-call-chip/tool-call-chip.class.js';import type{LyraToolResultViewEventMap}from'../../agent-tools/tool-result-view/tool-result-view.class.js';import type{LyraAttachmentChipEventMap}from'../../media/attachment-chip/attachment-chip.class.js';import type{LyraCitationBadgeEventMap}from'../../retrieval/citation-badge/citation-badge.class.js';import type{LyraJsonViewerEventMap}from'../../utility/json-viewer/json-viewer.class.js';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraMarkdownEventMap}from'../markdown/markdown.class.js';import type{LyraWidgetRendererEventMap}from'../widget-renderer/widget-renderer.class.js';
|
|
1
|
+
import type{LyraEventDetailSnapshot}from'../../../internal/lyra-element.js';import{type PropertyValues,type TemplateResult}from'lit';import type{CitationSelectEventDetail,MessagePart}from'../../../ai/types.js';import type{LyraThinkingPanelEventMap}from'../../agent-tools/thinking-panel/thinking-panel.class.js';import type{LyraToolCallChipEventMap}from'../../agent-tools/tool-call-chip/tool-call-chip.class.js';import type{LyraToolResultViewEventMap}from'../../agent-tools/tool-result-view/tool-result-view.class.js';import type{LyraAttachmentChipEventMap}from'../../media/attachment-chip/attachment-chip.class.js';import type{LyraCitationBadgeEventMap}from'../../retrieval/citation-badge/citation-badge.class.js';import type{LyraJsonViewerEventMap}from'../../utility/json-viewer/json-viewer.class.js';import{LyraElement}from'../../../internal/lyra-element.js';import type{LyraMarkdownEventMap}from'../markdown/markdown.class.js';import type{LyraWidgetRendererEventMap}from'../widget-renderer/widget-renderer.class.js';
|
|
2
|
+
/**
|
|
3
|
+
* Host override for how one message part renders. Returning `undefined` delegates that part
|
|
4
|
+
* entirely to the built-in renderer, keeping every built-in affordance intact. Returning any other
|
|
5
|
+
* value fully REPLACES the built-in rendering for that part -- not just its visual content but
|
|
6
|
+
* every interactive affordance and event the built-in renderer would otherwise wire up for that
|
|
7
|
+
* part type: the `error` part's retry button (`lr-part-retry`), a `citation` part's activation
|
|
8
|
+
* (`lr-citation-select`), and the composed children's own events for `tool-call`
|
|
9
|
+
* (`<lr-tool-call-chip>`'s `lr-tool-call-chip-select`), `tool-result`/`attachment`
|
|
10
|
+
* (`<lr-tool-result-view>`/`<lr-attachment-chip>`'s preview surface) and `data`
|
|
11
|
+
* (`<lr-widget-renderer>`'s `lr-widget-action`/`lr-widget-state-change`). A host overriding an
|
|
12
|
+
* interactive part type must reimplement whatever of that interaction it still wants.
|
|
13
|
+
*/
|
|
14
|
+
export type MessagePartRenderer=(part:MessagePart,index:number)=>unknown;
|
|
2
15
|
/** Rendering mode for text and reasoning message parts. */
|
|
3
16
|
export type MessagePartsContentMode='plain'|'markdown';export interface LyraMessagePartsEventMap extends Omit<LyraMarkdownEventMap,'lr-render-error'>,LyraThinkingPanelEventMap,LyraToolCallChipEventMap,Omit<LyraToolResultViewEventMap,'lr-render-error'>,LyraAttachmentChipEventMap,Omit<LyraCitationBadgeEventMap,'lr-citation-activate'>,LyraJsonViewerEventMap,Omit<LyraWidgetRendererEventMap,'lr-render-error'>{'lr-citation-select':CustomEvent<LyraEventDetailSnapshot<CitationSelectEventDetail>>;'lr-part-retry':CustomEvent<LyraEventDetailSnapshot<{part:MessagePart;}>>;'lr-render-error':CustomEvent<{error:unknown;}|{toolName:string;error:unknown;}>;}
|
|
4
17
|
/**
|
|
@@ -69,7 +82,9 @@ parts:readonly MessagePart[];private contentModeValue;
|
|
|
69
82
|
get contentMode():MessagePartsContentMode;set contentMode(value:MessagePartsContentMode);
|
|
70
83
|
/** Include reasoning parts. */
|
|
71
84
|
showReasoning:boolean;
|
|
72
|
-
/** Optional host renderer
|
|
85
|
+
/** Optional host renderer; see `MessagePartRenderer` for the full contract. Returning `undefined`
|
|
86
|
+
* delegates to the built-in renderer -- any other return fully replaces it, including that
|
|
87
|
+
* part's own interactive wiring (retry/citation/tool-call/widget events). */
|
|
73
88
|
renderPart?:MessagePartRenderer;
|
|
74
89
|
/** `0` (the default) renders every part -- unbounded, matching every prior release. A positive
|
|
75
90
|
* value windows rendering to the newest N parts (host `parts` data is untouched); citation
|
|
@@ -14,6 +14,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
14
14
|
</div>`})}renderListbox(rows,activeId,emptyText){return html`
|
|
15
15
|
<div
|
|
16
16
|
part="listbox"
|
|
17
|
+
?hidden=${this.catalogPicker.listboxHidden}
|
|
17
18
|
id=${this.listId}
|
|
18
19
|
role="listbox"
|
|
19
20
|
@mousedown=${this.onListboxMouseDown}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{css}from"lit";import{formControlRequiredMarker}from"../../../internal/form-control.styles.js";import{overlaySurfaceFill}from"../../../internal/overlay-surface.styles.js";const styles=css` :host { position: relative; display: inline-block; inline-size: 100%; min-inline-size: 0; max-inline-size: var(--lr-model-select-max-inline-size, var(--lr-size-24rem)); --_lr-model-select-trigger-padding: var(--lr-form-control-padding-block) var(--lr-form-control-padding-inline); --_lr-model-select-trigger-min-height: var(--lr-form-control-height); --_lr-model-select-font-size: var(--lr-form-control-font-size); --_lr-model-select-expand-size: var(--lr-size-1-75rem); --_lr-model-select-gap-default: var(--lr-space-xs); --_lr-model-select-radius-default: var(--lr-radius); } :host(:disabled) { cursor: not-allowed; } :host([size="2xs"]), :host([size="xs"]) { --_lr-model-select-expand-size: var(--lr-size-1rem); } :host([size="s"]), :host([size="small"]) { --_lr-model-select-expand-size: var(--lr-size-1-25rem); } [part="form-control-label"] { display: block; margin-block-end: var(--lr-space-xs); font-size: var(--lr-font-size-md-sm); font-weight: var(--lr-font-weight-semibold); } [part="form-control-label"][hidden] { display: none; } ${formControlRequiredMarker} [part='trigger'], [part='combobox'] { display: flex; align-items: center; gap: var(--lr-model-select-gap, var(--_lr-model-select-gap-default)); inline-size: 100%; min-inline-size: 0; min-block-size: var( --lr-model-select-trigger-height, var( --lr-model-select-trigger-min-height, var(--_lr-model-select-trigger-min-height) ) ); block-size: var(--lr-model-select-trigger-height, auto); box-sizing: border-box; padding: var( --lr-model-select-trigger-padding, var(--_lr-model-select-trigger-padding) ); border: var(--lr-border-width-thin) solid var(--lr-model-select-trigger-border-color, var(--lr-color-border)); border-radius: var( --lr-model-select-radius, var(--_lr-model-select-radius-default) ); background: var(--lr-model-select-trigger-fill, var(--lr-color-surface)); color: inherit; font: inherit; font-size: var( --lr-model-select-font-size, var(--_lr-model-select-font-size) ); } [part="trigger"] { cursor: pointer; text-align: start; } [part="combobox"] { cursor: text; } [part="trigger"]:focus-visible, [part="combobox"]:focus-within { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: var(--lr-focus-ring-offset); } :where([part="trigger"]):hover:where(:not(:disabled)) { background: var(--lr-color-brand-quiet); } :where([part="trigger"]):active:where(:not(:disabled)) { background: color-mix( in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); } :host([open]) [part="trigger"] { border-color: var( --lr-model-select-open-border-color, var(--lr-color-brand) ); } :host(:disabled) [part="trigger"], :host(:disabled) [part="combobox"] { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } [part="provider-badge"] { flex: 0 1 auto; min-inline-size: 0; max-inline-size: 40%; overflow: hidden; text-overflow: ellipsis; padding-inline-end: var(--lr-space-xs); margin-inline-end: var(--lr-space-xs); border-inline-end: var(--lr-border-width-thin) solid var(--lr-color-border); font-size: var(--lr-size-0-6875rem); font-weight: var(--lr-font-weight-bold); text-transform: uppercase; letter-spacing: var(--lr-size-0-04em); color: var(--lr-color-text-quiet); white-space: nowrap; } .trigger-label { flex: 1 1 auto; min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .trigger-label[data-placeholder] { color: var(--lr-color-text-quiet); } [part="combobox-input"] { flex: 1 1 auto; min-inline-size: 0; border: none; outline: none; background: transparent; color: inherit; font: inherit; } [part="combobox-input"]::placeholder { color: var(--lr-color-text-quiet); } [part="expand-icon"] { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; color: var(--lr-color-text-quiet); min-inline-size: min( var(--lr-icon-button-size), var(--lr-model-select-expand-size, var(--_lr-model-select-expand-size)) ); min-block-size: min( var(--lr-icon-button-size), var(--lr-model-select-expand-size, var(--_lr-model-select-expand-size)) ); line-height: var(--lr-line-height-none); } [part="expand-icon"] svg { transform: rotate(90deg); } [part="listbox"] { position: fixed; z-index: var(--lr-layer-dropdown); box-sizing: border-box; max-block-size: var(--lr-size-18rem); overflow-y: auto; overflow-x: hidden; inline-size: max-content; min-inline-size: var(--lr-size-12rem); max-inline-size: min( var(--lr-popover-viewport-clamp), var(--lr-size-28rem) ); padding: var(--lr-space-xs); ${overlaySurfaceFill} border-radius: var( --lr-model-select-radius, var(--lr-overlay-radius, var(--_lr-model-select-radius-default)) ); box-shadow: var(--lr-overlay-shadow-anchored, var(--lr-shadow-m)); visibility: hidden; opacity: 0; transform: translateY(var(--lr-size-neg-0-25rem)); transition: opacity var(--lr-transition-fast), transform var(--lr-transition-fast), visibility var(--lr-transition-fast); } :host([open]) [part="listbox"] { visibility: visible; opacity: 1; transform: translateY(0); } @media (prefers-reduced-motion: reduce) { [part="listbox"] { transition: none !important; } } [part="option"] { display: flex; align-items: center; gap: var(--lr-model-select-gap, var(--_lr-model-select-gap-default)); inline-size: 100%; box-sizing: border-box; padding: var(--lr-space-xs) var(--lr-space-s); border: var(--lr-border-width-thin) solid transparent; border-radius: var( --lr-model-select-radius, var(--_lr-model-select-radius-default) ); background: none; color: inherit; font: inherit; text-align: start; cursor: pointer; } [part="option"][aria-selected="true"] { background: var(--lr-model-select-option-selected-bg, transparent); border-color: var( --lr-model-select-option-selected-border, var(--lr-color-brand) ); color: var(--lr-model-select-option-selected-color, var(--lr-color-brand)); font-weight: var( --lr-model-select-option-selected-font-weight, var(--lr-font-weight-semibold) ); } [part="option"]:where(:not([aria-disabled='true'])):hover, [part="option"][data-active] { background: var( --lr-model-select-option-active-bg, var(--lr-color-brand-quiet) ); } [part="option"]:where(:not([aria-disabled='true'])):active { background: color-mix( in oklab, var(--lr-model-select-option-active-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); } [part="option"][aria-disabled='true'] { cursor: default; opacity: var(--lr-model-select-option-disabled-opacity, 0.5); } [part="option-icon"] { flex: 0 0 auto; line-height: var(--lr-line-height-1-4); } [part="option-label"] { flex: 1 1 auto; min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } [part="option"][data-synthetic] { border-style: var(--lr-model-select-option-synthetic-border-style, dashed); border-color: var( --lr-model-select-option-synthetic-border-color, var(--lr-color-border) ); } [part="option"][data-synthetic] [part="option-label"] { font-style: italic; } [part="option-badge"] { flex: 0 0 auto; font-size: var(--lr-size-0-6875rem); font-style: normal; font-weight: var(--lr-font-weight-normal); color: var(--lr-color-text-quiet); white-space: nowrap; } [part="empty"] { padding: var(--lr-space-m); color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-md-sm); } [part="hint"] { margin-block-start: var(--lr-space-xs); font-size: var(--lr-font-size-sm); color: var(--lr-color-text-quiet); } [part="hint"][hidden] { display: none; } [part="error"] { margin-block-start: var(--lr-space-xs); font-size: var(--lr-font-size-sm); color: var(--lr-color-danger); } [part="error"][hidden] { display: none; } `;export{styles};
|
|
1
|
+
import{css}from"lit";import{formControlRequiredMarker}from"../../../internal/form-control.styles.js";import{overlaySurfaceFill}from"../../../internal/overlay-surface.styles.js";const styles=css` :host { position: relative; display: inline-block; inline-size: 100%; min-inline-size: 0; max-inline-size: var(--lr-model-select-max-inline-size, var(--lr-size-24rem)); --_lr-model-select-trigger-padding: var(--lr-form-control-padding-block) var(--lr-form-control-padding-inline); --_lr-model-select-trigger-min-height: var(--lr-form-control-height); --_lr-model-select-font-size: var(--lr-form-control-font-size); --_lr-model-select-expand-size: var(--lr-size-1-75rem); --_lr-model-select-gap-default: var(--lr-space-xs); --_lr-model-select-radius-default: var(--lr-radius); } :host(:disabled) { cursor: not-allowed; } :host([size="2xs"]), :host([size="xs"]) { --_lr-model-select-expand-size: var(--lr-size-1rem); } :host([size="s"]), :host([size="small"]) { --_lr-model-select-expand-size: var(--lr-size-1-25rem); } [part="form-control-label"] { display: block; margin-block-end: var(--lr-space-xs); font-size: var(--lr-font-size-md-sm); font-weight: var(--lr-font-weight-semibold); } [part="form-control-label"][hidden] { display: none; } ${formControlRequiredMarker} [part='trigger'], [part='combobox'] { display: flex; align-items: center; gap: var(--lr-model-select-gap, var(--_lr-model-select-gap-default)); inline-size: 100%; min-inline-size: 0; min-block-size: var( --lr-model-select-trigger-height, var( --lr-model-select-trigger-min-height, var(--_lr-model-select-trigger-min-height) ) ); block-size: var(--lr-model-select-trigger-height, auto); box-sizing: border-box; padding: var( --lr-model-select-trigger-padding, var(--_lr-model-select-trigger-padding) ); border: var(--lr-border-width-thin) solid var(--lr-model-select-trigger-border-color, var(--lr-color-border)); border-radius: var( --lr-model-select-radius, var(--_lr-model-select-radius-default) ); background: var(--lr-model-select-trigger-fill, var(--lr-color-surface)); color: inherit; font: inherit; font-size: var( --lr-model-select-font-size, var(--_lr-model-select-font-size) ); } [part="trigger"] { cursor: pointer; text-align: start; } [part="combobox"] { cursor: text; } [part="trigger"]:focus-visible, [part="combobox"]:focus-within { outline: var(--lr-focus-ring-width) solid var(--lr-focus-ring-color); outline-offset: var(--lr-focus-ring-offset); } :where([part="trigger"]):hover:where(:not(:disabled)) { background: var(--lr-color-brand-quiet); } :where([part="trigger"]):active:where(:not(:disabled)) { background: color-mix( in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); } :host([open]) [part="trigger"] { border-color: var( --lr-model-select-open-border-color, var(--lr-color-brand) ); } :host(:disabled) [part="trigger"], :host(:disabled) [part="combobox"] { opacity: var(--lr-opacity-disabled); cursor: not-allowed; } [part="provider-badge"] { flex: 0 1 auto; min-inline-size: 0; max-inline-size: 40%; overflow: hidden; text-overflow: ellipsis; padding-inline-end: var(--lr-space-xs); margin-inline-end: var(--lr-space-xs); border-inline-end: var(--lr-border-width-thin) solid var(--lr-color-border); font-size: var(--lr-size-0-6875rem); font-weight: var(--lr-font-weight-bold); text-transform: uppercase; letter-spacing: var(--lr-size-0-04em); color: var(--lr-color-text-quiet); white-space: nowrap; } .trigger-label { flex: 1 1 auto; min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .trigger-label[data-placeholder] { color: var(--lr-color-text-quiet); } [part="combobox-input"] { flex: 1 1 auto; min-inline-size: 0; border: none; outline: none; background: transparent; color: inherit; font: inherit; } [part="combobox-input"]::placeholder { color: var(--lr-color-text-quiet); } [part="expand-icon"] { flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center; color: var(--lr-color-text-quiet); min-inline-size: min( var(--lr-icon-button-size), var(--lr-model-select-expand-size, var(--_lr-model-select-expand-size)) ); min-block-size: min( var(--lr-icon-button-size), var(--lr-model-select-expand-size, var(--_lr-model-select-expand-size)) ); line-height: var(--lr-line-height-none); } [part="expand-icon"] svg { transform: rotate(90deg); } [part="listbox"][hidden] { display: none; } [part="listbox"] { position: fixed; z-index: var(--lr-layer-dropdown); box-sizing: border-box; max-block-size: var(--lr-size-18rem); overflow-y: auto; overflow-x: hidden; inline-size: max-content; min-inline-size: var(--lr-size-12rem); max-inline-size: min( var(--lr-popover-viewport-clamp), var(--lr-size-28rem) ); padding: var(--lr-space-xs); ${overlaySurfaceFill} border-radius: var( --lr-model-select-radius, var(--lr-overlay-radius, var(--_lr-model-select-radius-default)) ); box-shadow: var(--lr-overlay-shadow-anchored, var(--lr-shadow-m)); visibility: hidden; opacity: 0; transform: translateY(var(--lr-size-neg-0-25rem)); transition: opacity var(--lr-transition-fast), transform var(--lr-transition-fast), visibility var(--lr-transition-fast); } :host([open]) [part="listbox"] { visibility: visible; opacity: 1; transform: translateY(0); } @media (prefers-reduced-motion: reduce) { [part="listbox"] { transition: none !important; } } [part="option"] { display: flex; align-items: center; gap: var(--lr-model-select-gap, var(--_lr-model-select-gap-default)); inline-size: 100%; box-sizing: border-box; padding: var(--lr-space-xs) var(--lr-space-s); border: var(--lr-border-width-thin) solid transparent; border-radius: var( --lr-model-select-radius, var(--_lr-model-select-radius-default) ); background: none; color: inherit; font: inherit; text-align: start; cursor: pointer; } [part="option"][aria-selected="true"] { background: var(--lr-model-select-option-selected-bg, transparent); border-color: var( --lr-model-select-option-selected-border, var(--lr-color-brand) ); color: var(--lr-model-select-option-selected-color, var(--lr-color-brand)); font-weight: var( --lr-model-select-option-selected-font-weight, var(--lr-font-weight-semibold) ); } [part="option"]:where(:not([aria-disabled='true'])):hover, [part="option"][data-active] { background: var( --lr-model-select-option-active-bg, var(--lr-color-brand-quiet) ); } [part="option"]:where(:not([aria-disabled='true'])):active { background: color-mix( in oklab, var(--lr-model-select-option-active-bg, var(--lr-color-brand-quiet)), var(--lr-color-mix-partner) var(--lr-color-mix-active) ); } [part="option"][aria-disabled='true'] { cursor: default; opacity: var(--lr-model-select-option-disabled-opacity, 0.5); } [part="option-icon"] { flex: 0 0 auto; line-height: var(--lr-line-height-1-4); } [part="option-label"] { flex: 1 1 auto; min-inline-size: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } [part="option"][data-synthetic] { border-style: var(--lr-model-select-option-synthetic-border-style, dashed); border-color: var( --lr-model-select-option-synthetic-border-color, var(--lr-color-border) ); } [part="option"][data-synthetic] [part="option-label"] { font-style: italic; } [part="option-badge"] { flex: 0 0 auto; font-size: var(--lr-size-0-6875rem); font-style: normal; font-weight: var(--lr-font-weight-normal); color: var(--lr-color-text-quiet); white-space: nowrap; } [part="empty"] { padding: var(--lr-space-m); color: var(--lr-color-text-quiet); font-size: var(--lr-font-size-md-sm); } [part="hint"] { margin-block-start: var(--lr-space-xs); font-size: var(--lr-font-size-sm); color: var(--lr-color-text-quiet); } [part="hint"][hidden] { display: none; } [part="error"] { margin-block-start: var(--lr-space-xs); font-size: var(--lr-font-size-sm); color: var(--lr-color-danger); } [part="error"][hidden] { display: none; } `;export{styles};
|
|
@@ -99,7 +99,11 @@ sources:readonly LyraSourceEntry[];
|
|
|
99
99
|
selectedSourceIds:readonly string[];
|
|
100
100
|
/** Queued prompts keyed by unique nonblank `id`; malformed and later duplicate rows are omitted
|
|
101
101
|
* before section gating or forwarding. */
|
|
102
|
-
queue:readonly PromptQueueItem[];
|
|
102
|
+
queue:readonly PromptQueueItem[];
|
|
103
|
+
/** Accessible name for the prompt section. Omitting it localizes the default
|
|
104
|
+
* `promptInputLabel` message; an explicit empty string (`label=""` or `.label = ''`)
|
|
105
|
+
* suppresses that default and renders no label. `accessibleLabel` wins over both. */
|
|
106
|
+
label?:string;accessibleLabel:string|null;private activeSuggestion;private readonly slotPresence;private composer?;private suggestionPopover?;private suggestionAnchor?;private pendingSuggestionValue;private suggestionNavigationGeneration;focus(options?:FocusOptions):void;blur():void;click():void;
|
|
103
107
|
/** The composed native textarea, or `null` before it has rendered. */
|
|
104
108
|
get input():HTMLTextAreaElement|null;get selectionStart():number|null;set selectionStart(value:number|null);get selectionEnd():number|null;set selectionEnd(value:number|null);get selectionDirection():ChatComposerSelectionDirection|null;set selectionDirection(value:ChatComposerSelectionDirection|null);select():void;
|
|
105
109
|
/** Forwards the native selection range to the composed textarea; a pre-render call is a no-op. */
|
|
@@ -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}from"lit";import{property,query,state}from"lit/decorators.js";import{ifDefined}from"lit/directives/if-defined.js";import{repeat}from"lit/directives/repeat.js";import{autocorrectConverter,normalizeAutocorrect,trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LyraElement}from"../../../internal/lyra-element.js";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import{SlotPresenceController}from"../../../internal/slot-presence-controller.js";import{deepActiveElementIn}from"../../../internal/active-element.js";import{isHtmlElement}from"../../../internal/dom-guards.js";import{normalizeCatalog}from"../../../internal/catalog-picker.js";import{composedContains}from"../../../internal/overlay-manager.js";import{firstByRetrievalIdentity as firstByPromptIdentity}from"../../retrieval/retrieval-identity.js";import{normalizeChatComposerStatus}from"../chat-composer/chat-composer.class.js";import{styles}from"./prompt-input.styles.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_promptInputAttachments,LYRA_DEFAULT_promptInputControls,LYRA_DEFAULT_promptInputLabel,LYRA_DEFAULT_promptInputSources}from"../../../internal/default-strings.generated.js";class LyraPromptInput extends LyraElement{constructor(){super(...arguments),this.suggestionCaretGeneration=0,this._value="",this.statusValue="idle",this.placeholder="",this.disabled=!1,this.readOnly=!1,this.submitOnEnter=!0,this.spellcheck=!0,this.autocapitalize="",this.autocorrectValue=!0,this.wrap="soft",this.autocomplete="",this.inputMode="",this.enterKeyHint="",this.attachments=[],this.attachmentCapabilities=["files","image","audio"],this.mentionItems=[],this.commandItems=[],this.model="",this.voice="",this.sources=[],this.selectedSourceIds=[],this.queue=[],this.label="",this.accessibleLabel=null,this.activeSuggestion=null,this.slotPresence=new SlotPresenceController(this),this.suggestionNavigationGeneration=0,this.onCompositeKeyDown=event=>{event.composedPath()[0]===this.composer?.input&&this.onKeyDown(event)},this.onCompositeFocusOut=event=>{const popover=this.suggestionPopover;if(!popover||!this.activeSuggestion||!popover.open)return;const relatedTarget=isHtmlElement(event.relatedTarget)?event.relatedTarget:null;this.suggestionFocusIsOwned(popover,relatedTarget)||(this.suggestionNavigationGeneration+=1);const generation=this.suggestionNavigationGeneration;queueMicrotask(()=>{if(!this.isConnected||generation!==this.suggestionNavigationGeneration)return;const currentPopover=this.suggestionPopover;(!currentPopover||!this.suggestionFocusIsOwned(currentPopover))&&this.closeSuggestions()})},this.onNativeInput=event=>{if(this.disabled||this.readOnly||!this.composer||!event.composedPath().includes(this.composer)){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeChange=event=>{if(this.disabled||this.readOnly||!this.composer||!event.composedPath().includes(this.composer)){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeFocus=event=>{if(event.target!==this.composer){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeBlur=event=>{if(event.target!==this.composer){event.stopPropagation();return}relayNativeEvent(this,event)}}static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,promptInputAttachments:LYRA_DEFAULT_promptInputAttachments,promptInputControls:LYRA_DEFAULT_promptInputControls,promptInputLabel:LYRA_DEFAULT_promptInputLabel,promptInputSources:LYRA_DEFAULT_promptInputSources}}static{this.ownedCollectionProperties=Object.freeze(["attachments","attachmentCapabilities","mentionItems","commandItems","modelCatalog","voiceCatalog","sources","selectedSourceIds","queue"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-attachments-add","lr-sources-change","lr-queue-change","lr-send-now"])}static{this.identityEventDetailProperties=Object.freeze({"lr-send-now":Object.freeze(["item"])})}static{this.identityEventDetailCollectionItems=Object.freeze({"lr-queue-change":Object.freeze(["items"])})}get value(){return this._value}set value(next){const old=this._value;this._value=next,this.suggestionCaretGeneration+=1,this.requestUpdate("value",old)}get status(){return this.statusValue}set status(value){const previous=this.statusValue;this.statusValue=normalizeChatComposerStatus(value),this.requestUpdate("status",previous)}get autocorrect(){return this.autocorrectValue}set autocorrect(next){this.autocorrectValue=normalizeAutocorrect(next),this.requestUpdate()}focus(options){this.composer?.focus(options)}blur(){this.composer?.blur()}click(){this.disabled||this.composer?.click()}get input(){return this.composer?.input??null}get selectionStart(){return this.composer?.selectionStart??null}set selectionStart(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionStart=value)}get selectionEnd(){return this.composer?.selectionEnd??null}set selectionEnd(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionEnd=value)}get selectionDirection(){return this.composer?.selectionDirection??null}set selectionDirection(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionDirection=value)}select(){this.suggestionCaretGeneration+=1,this.composer?.select()}setSelectionRange(start,end,direction){this.suggestionCaretGeneration+=1,this.composer?.setSelectionRange(start,end,direction)}setRangeText(replacement,start,end,selectMode){const composer=this.composer;composer&&(start===void 0||end===void 0?composer.setRangeText(replacement):composer.setRangeText(replacement,start,end,selectMode),this.value=composer.value)}willUpdate(changed){super.willUpdate(changed);let invalidate=changed.has("mentionItems")||changed.has("commandItems")||changed.has("disabled")||changed.has("readOnly");if(changed.has("value")){const internal=this.pendingSuggestionValue===this.value;this.pendingSuggestionValue=void 0,invalidate||=!internal}invalidate&&(this.suggestionNavigationGeneration+=1,this.activeSuggestion=null,this.suggestionAnchor=void 0)}connectedCallback(){super.connectedCallback(),this.addEventListener("keydown",this.onCompositeKeyDown,!0)}disconnectedCallback(){this.removeEventListener("keydown",this.onCompositeKeyDown,!0),this.suggestionCaretGeneration+=1,this.closeSuggestions(),super.disconnectedCallback()}updated(_changed){super.updated(_changed);const popover=this.suggestionPopover;popover&&this.suggestionAnchor&&(popover.anchor=this.suggestionAnchor)}suggestions(){return this.activeSuggestion?.trigger==="/"?this.commandItems:this.mentionItems}detectSuggestion(value){const caret=this.composer?.selectionStart??value.length,prefix=value.slice(0,caret),match=/(?:^|\s)([@/])([^\s@/]*)$/.exec(prefix);if(!match||match[1]!=="@"&&match[1]!=="/"){this.activeSuggestion=null;return}const start=caret-match[2].length-1,items=match[1]==="@"?this.mentionItems:this.commandItems;this.activeSuggestion=items.length?{trigger:match[1],start,query:match[2]??""}:null}onInput(event){if(event.stopPropagation(),this.disabled||this.readOnly)return;const composer=event.currentTarget;this.suggestionAnchor=composer?.input??this.composer?.input??void 0,this.pendingSuggestionValue=event.detail.value,this.value=event.detail.value,this.detectSuggestion(this.value),this.emit("lr-input",{value:this.value})}onChange(event){event.stopPropagation(),!(this.disabled||this.readOnly)&&(this.value=event.detail.value,this.emit("lr-change",{value:this.value}))}onSubmit(event){event.stopPropagation(),!this.disabled&&this.emit("lr-submit",event.detail)}onStop(event){event.stopPropagation(),!this.disabled&&this.emit("lr-stop",null)}onKeyDown(event){if(event.defaultPrevented)return;const popover=this.suggestionPopover;if(!(this.disabled||this.readOnly||!this.activeSuggestion||!popover?.open)&&popover.handleKeyDown(event)){const shouldMoveFocus=event.key==="ArrowDown"||event.key==="ArrowUp",generation=++this.suggestionNavigationGeneration;popover.updateComplete.then(async()=>{shouldMoveFocus&&generation===this.suggestionNavigationGeneration&&this.isConnected&&!this.disabled&&!this.readOnly&&this.suggestionPopover===popover&&this.activeSuggestion&&popover.open&&this.suggestionFocusIsOwned(popover)&&await popover.focusActiveOption({ownsFocus:()=>generation===this.suggestionNavigationGeneration&&this.isConnected&&!this.disabled&&!this.readOnly&&this.suggestionPopover===popover&&this.activeSuggestion!==null&&popover.open&&this.suggestionFocusIsOwned(popover)})})}}suggestionFocusIsOwned(popover,focused=deepActiveElementIn(this.ownerDocument)){return focused===this.composer?.input||focused===this.composer||focused!==null&&composedContains(popover,focused)}closeSuggestions(){this.suggestionNavigationGeneration+=1,this.activeSuggestion=null,this.suggestionAnchor=void 0}onSuggestionSelect(event){if(event.stopPropagation(),this.disabled||this.readOnly)return;const active=this.activeSuggestion;if(!active)return;const occurrence=this.suggestions()[event.detail.index];if(!occurrence||occurrence.suggestionId!==event.detail.suggestionId)return;const item=occurrence,composer=this.composer,caret=composer?.selectionStart??this.value.length,inserted=`${active.trigger}${item?.insertText??event.detail.label} `;this.value=this.value.slice(0,active.start)+inserted+this.value.slice(caret);const caretGeneration=this.suggestionCaretGeneration,nextCaret=active.start+inserted.length;this.closeSuggestions(),this.emit("lr-input",{value:this.value}),this.emit("lr-mention-select",{suggestionId:event.detail.suggestionId,index:event.detail.index,label:event.detail.label,trigger:active.trigger}),this.updateComplete.then(()=>{caretGeneration===this.suggestionCaretGeneration&&this.isConnected&&this.composer===composer&&composer?.setSelectionRange(nextCaret,nextCaret)})}onFiles(event){event.stopPropagation(),!this.disabled&&this.emit("lr-attachments-add",event.detail)}get effectiveAttachments(){const seen=new Set;return this.attachments.filter(attachment=>{const id=attachment?.attachmentId;return typeof id!="string"||id.trim()===""||seen.has(id)?!1:(seen.add(id),!0)})}get effectiveSources(){return firstByPromptIdentity(this.sources,source=>source.id)}get effectiveSelectedSourceIds(){return firstByPromptIdentity(this.selectedSourceIds,sourceId=>sourceId)}get effectiveQueue(){return firstByPromptIdentity(this.queue,item=>item.id)}renderDefaultAttachmentTrigger(){return html`<lr-attachment-trigger
|
|
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}from"lit";import{property,query,state}from"lit/decorators.js";import{ifDefined}from"lit/directives/if-defined.js";import{repeat}from"lit/directives/repeat.js";import{autocorrectConverter,normalizeAutocorrect,trueDefaultBooleanConverter}from"../../../internal/converters.js";import{LyraElement}from"../../../internal/lyra-element.js";import{relayNativeEvent}from"../../../internal/native-event-relay.js";import{SlotPresenceController}from"../../../internal/slot-presence-controller.js";import{deepActiveElementIn}from"../../../internal/active-element.js";import{isHtmlElement}from"../../../internal/dom-guards.js";import{normalizeCatalog}from"../../../internal/catalog-picker.js";import{composedContains}from"../../../internal/overlay-manager.js";import{firstByRetrievalIdentity as firstByPromptIdentity}from"../../retrieval/retrieval-identity.js";import{normalizeChatComposerStatus}from"../chat-composer/chat-composer.class.js";import{styles}from"./prompt-input.styles.js";import{LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_promptInputAttachments,LYRA_DEFAULT_promptInputControls,LYRA_DEFAULT_promptInputLabel,LYRA_DEFAULT_promptInputSources}from"../../../internal/default-strings.generated.js";class LyraPromptInput extends LyraElement{constructor(){super(...arguments),this.suggestionCaretGeneration=0,this._value="",this.statusValue="idle",this.placeholder="",this.disabled=!1,this.readOnly=!1,this.submitOnEnter=!0,this.spellcheck=!0,this.autocapitalize="",this.autocorrectValue=!0,this.wrap="soft",this.autocomplete="",this.inputMode="",this.enterKeyHint="",this.attachments=[],this.attachmentCapabilities=["files","image","audio"],this.mentionItems=[],this.commandItems=[],this.model="",this.voice="",this.sources=[],this.selectedSourceIds=[],this.queue=[],this.accessibleLabel=null,this.activeSuggestion=null,this.slotPresence=new SlotPresenceController(this),this.suggestionNavigationGeneration=0,this.onCompositeKeyDown=event=>{event.composedPath()[0]===this.composer?.input&&this.onKeyDown(event)},this.onCompositeFocusOut=event=>{const popover=this.suggestionPopover;if(!popover||!this.activeSuggestion||!popover.open)return;const relatedTarget=isHtmlElement(event.relatedTarget)?event.relatedTarget:null;this.suggestionFocusIsOwned(popover,relatedTarget)||(this.suggestionNavigationGeneration+=1);const generation=this.suggestionNavigationGeneration;queueMicrotask(()=>{if(!this.isConnected||generation!==this.suggestionNavigationGeneration)return;const currentPopover=this.suggestionPopover;(!currentPopover||!this.suggestionFocusIsOwned(currentPopover))&&this.closeSuggestions()})},this.onNativeInput=event=>{if(this.disabled||this.readOnly||!this.composer||!event.composedPath().includes(this.composer)){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeChange=event=>{if(this.disabled||this.readOnly||!this.composer||!event.composedPath().includes(this.composer)){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeFocus=event=>{if(event.target!==this.composer){event.stopPropagation();return}relayNativeEvent(this,event)},this.onNativeBlur=event=>{if(event.target!==this.composer){event.stopPropagation();return}relayNativeEvent(this,event)}}static{this.defaultStrings={...super.defaultStrings,fieldRequired:LYRA_DEFAULT_fieldRequired,promptInputAttachments:LYRA_DEFAULT_promptInputAttachments,promptInputControls:LYRA_DEFAULT_promptInputControls,promptInputLabel:LYRA_DEFAULT_promptInputLabel,promptInputSources:LYRA_DEFAULT_promptInputSources}}static{this.ownedCollectionProperties=Object.freeze(["attachments","attachmentCapabilities","mentionItems","commandItems","modelCatalog","voiceCatalog","sources","selectedSourceIds","queue"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-attachments-add","lr-sources-change","lr-queue-change","lr-send-now"])}static{this.identityEventDetailProperties=Object.freeze({"lr-send-now":Object.freeze(["item"])})}static{this.identityEventDetailCollectionItems=Object.freeze({"lr-queue-change":Object.freeze(["items"])})}get value(){return this._value}set value(next){const old=this._value;this._value=next,this.suggestionCaretGeneration+=1,this.requestUpdate("value",old)}get status(){return this.statusValue}set status(value){const previous=this.statusValue;this.statusValue=normalizeChatComposerStatus(value),this.requestUpdate("status",previous)}get autocorrect(){return this.autocorrectValue}set autocorrect(next){this.autocorrectValue=normalizeAutocorrect(next),this.requestUpdate()}focus(options){this.composer?.focus(options)}blur(){this.composer?.blur()}click(){this.disabled||this.composer?.click()}get input(){return this.composer?.input??null}get selectionStart(){return this.composer?.selectionStart??null}set selectionStart(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionStart=value)}get selectionEnd(){return this.composer?.selectionEnd??null}set selectionEnd(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionEnd=value)}get selectionDirection(){return this.composer?.selectionDirection??null}set selectionDirection(value){this.suggestionCaretGeneration+=1,this.composer&&(this.composer.selectionDirection=value)}select(){this.suggestionCaretGeneration+=1,this.composer?.select()}setSelectionRange(start,end,direction){this.suggestionCaretGeneration+=1,this.composer?.setSelectionRange(start,end,direction)}setRangeText(replacement,start,end,selectMode){const composer=this.composer;composer&&(start===void 0||end===void 0?composer.setRangeText(replacement):composer.setRangeText(replacement,start,end,selectMode),this.value=composer.value)}willUpdate(changed){super.willUpdate(changed);let invalidate=changed.has("mentionItems")||changed.has("commandItems")||changed.has("disabled")||changed.has("readOnly");if(changed.has("value")){const internal=this.pendingSuggestionValue===this.value;this.pendingSuggestionValue=void 0,invalidate||=!internal}invalidate&&(this.suggestionNavigationGeneration+=1,this.activeSuggestion=null,this.suggestionAnchor=void 0)}connectedCallback(){super.connectedCallback(),this.addEventListener("keydown",this.onCompositeKeyDown,!0)}disconnectedCallback(){this.removeEventListener("keydown",this.onCompositeKeyDown,!0),this.suggestionCaretGeneration+=1,this.closeSuggestions(),super.disconnectedCallback()}updated(_changed){super.updated(_changed);const popover=this.suggestionPopover;popover&&this.suggestionAnchor&&(popover.anchor=this.suggestionAnchor)}suggestions(){return this.activeSuggestion?.trigger==="/"?this.commandItems:this.mentionItems}detectSuggestion(value){const caret=this.composer?.selectionStart??value.length,prefix=value.slice(0,caret),match=/(?:^|\s)([@/])([^\s@/]*)$/.exec(prefix);if(!match||match[1]!=="@"&&match[1]!=="/"){this.activeSuggestion=null;return}const start=caret-match[2].length-1,items=match[1]==="@"?this.mentionItems:this.commandItems;this.activeSuggestion=items.length?{trigger:match[1],start,query:match[2]??""}:null}onInput(event){if(event.stopPropagation(),this.disabled||this.readOnly)return;const composer=event.currentTarget;this.suggestionAnchor=composer?.input??this.composer?.input??void 0,this.pendingSuggestionValue=event.detail.value,this.value=event.detail.value,this.detectSuggestion(this.value),this.emit("lr-input",{value:this.value})}onChange(event){event.stopPropagation(),!(this.disabled||this.readOnly)&&(this.value=event.detail.value,this.emit("lr-change",{value:this.value}))}onSubmit(event){event.stopPropagation(),!this.disabled&&this.emit("lr-submit",event.detail)}onStop(event){event.stopPropagation(),!this.disabled&&this.emit("lr-stop",null)}onKeyDown(event){if(event.defaultPrevented)return;const popover=this.suggestionPopover;if(!(this.disabled||this.readOnly||!this.activeSuggestion||!popover?.open)&&popover.handleKeyDown(event)){const shouldMoveFocus=event.key==="ArrowDown"||event.key==="ArrowUp",generation=++this.suggestionNavigationGeneration;popover.updateComplete.then(async()=>{shouldMoveFocus&&generation===this.suggestionNavigationGeneration&&this.isConnected&&!this.disabled&&!this.readOnly&&this.suggestionPopover===popover&&this.activeSuggestion&&popover.open&&this.suggestionFocusIsOwned(popover)&&await popover.focusActiveOption({ownsFocus:()=>generation===this.suggestionNavigationGeneration&&this.isConnected&&!this.disabled&&!this.readOnly&&this.suggestionPopover===popover&&this.activeSuggestion!==null&&popover.open&&this.suggestionFocusIsOwned(popover)})})}}suggestionFocusIsOwned(popover,focused=deepActiveElementIn(this.ownerDocument)){return focused===this.composer?.input||focused===this.composer||focused!==null&&composedContains(popover,focused)}closeSuggestions(){this.suggestionNavigationGeneration+=1,this.activeSuggestion=null,this.suggestionAnchor=void 0}onSuggestionSelect(event){if(event.stopPropagation(),this.disabled||this.readOnly)return;const active=this.activeSuggestion;if(!active)return;const occurrence=this.suggestions()[event.detail.index];if(!occurrence||occurrence.suggestionId!==event.detail.suggestionId)return;const item=occurrence,composer=this.composer,caret=composer?.selectionStart??this.value.length,inserted=`${active.trigger}${item?.insertText??event.detail.label} `;this.value=this.value.slice(0,active.start)+inserted+this.value.slice(caret);const caretGeneration=this.suggestionCaretGeneration,nextCaret=active.start+inserted.length;this.closeSuggestions(),this.emit("lr-input",{value:this.value}),this.emit("lr-mention-select",{suggestionId:event.detail.suggestionId,index:event.detail.index,label:event.detail.label,trigger:active.trigger}),this.updateComplete.then(()=>{caretGeneration===this.suggestionCaretGeneration&&this.isConnected&&this.composer===composer&&composer?.setSelectionRange(nextCaret,nextCaret)})}onFiles(event){event.stopPropagation(),!this.disabled&&this.emit("lr-attachments-add",event.detail)}get effectiveAttachments(){const seen=new Set;return this.attachments.filter(attachment=>{const id=attachment?.attachmentId;return typeof id!="string"||id.trim()===""||seen.has(id)?!1:(seen.add(id),!0)})}get effectiveSources(){return firstByPromptIdentity(this.sources,source=>source.id)}get effectiveSelectedSourceIds(){return firstByPromptIdentity(this.selectedSourceIds,sourceId=>sourceId)}get effectiveQueue(){return firstByPromptIdentity(this.queue,item=>item.id)}renderDefaultAttachmentTrigger(){return html`<lr-attachment-trigger
|
|
2
2
|
.capabilities=${this.attachmentCapabilities}
|
|
3
3
|
.disabled=${this.disabled}
|
|
4
4
|
@lr-files=${this.onFiles}
|
|
@@ -51,7 +51,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
51
51
|
@lr-sources-change=${event=>this.reemit(event,"lr-sources-change")}
|
|
52
52
|
></lr-source-picker>
|
|
53
53
|
</details>`:nothing}
|
|
54
|
-
</div>`}render(){const label=this.accessibleLabel??(this.label
|
|
54
|
+
</div>`}render(){const label=this.accessibleLabel??(this.label==null?this.localize("promptInputLabel"):this.label),attachments=this.effectiveAttachments,queue=this.effectiveQueue,hasChips=attachments.length>0||this.slotPresence.has("chips");return html`<section
|
|
55
55
|
part="base"
|
|
56
56
|
aria-label=${label}
|
|
57
57
|
@input=${this.onNativeInput}
|
|
@@ -41,7 +41,12 @@ protected static readonly identityCollectionProperties:readonly string[];static
|
|
|
41
41
|
protected static readonly identityEventDetailProperties:Readonly<{'lr-send-now':readonly string[];}>;protected static readonly identityEventDetailCollectionItems:Readonly<{'lr-queue-change':readonly string[];}>;
|
|
42
42
|
/** Controlled queued prompts. Accessor-backed or malformed rows and attachments are omitted;
|
|
43
43
|
* duplicate nonblank item ids normalize first-wins after full row validation. */
|
|
44
|
-
items:readonly PromptQueueItem[];editable:boolean;disabled:boolean;
|
|
44
|
+
items:readonly PromptQueueItem[];editable:boolean;disabled:boolean;
|
|
45
|
+
/** Visible queue heading and accessible-name fallback. Omitting it localizes the default
|
|
46
|
+
* `promptQueueLabel` message; an explicit empty string (`label=""` or `.label = ''`) suppresses
|
|
47
|
+
* that default, rendering no visible heading (`accessibleLabel` still overrides the region's
|
|
48
|
+
* own accessible name independently). */
|
|
49
|
+
label?:string;accessibleLabel:string|null;private pendingRemovalFocus?;private readonly canonicalItemsBySource;private canonicalItemsFor;
|
|
45
50
|
/** Never reproject a prior retained collection: a caller may have made its opaque rows hostile
|
|
46
51
|
* after admission, while focused controlled-update recovery needs only its recorded identities. */
|
|
47
52
|
private cachedCanonicalItemsFor;private get effectiveItems();protected willUpdate(changed:PropertyValues):void;protected updated(changed:PropertyValues):void;private emitChange;private edit;private removeItem;private move;private sendNow;private containNativeEvent;private renderItem;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-prompt-queue':LyraPromptQueue;}}
|
|
@@ -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}from"lit";import{property}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{activeElementIn}from"../../../internal/active-element.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{styles}from"./prompt-queue.styles.js";import{LYRA_DEFAULT_attachmentUntitledFile,LYRA_DEFAULT_moveDown,LYRA_DEFAULT_moveUp,LYRA_DEFAULT_promptInputAttachments,LYRA_DEFAULT_promptQueueActionLabel,LYRA_DEFAULT_promptQueueEmpty,LYRA_DEFAULT_promptQueueItemLabel,LYRA_DEFAULT_promptQueueLabel,LYRA_DEFAULT_promptQueueSendNow,LYRA_DEFAULT_remove}from"../../../internal/default-strings.generated.js";const MAX_PROJECTED_QUEUE_ITEMS=1e4,MAX_PROJECTED_QUEUE_ATTACHMENTS=1e4,EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS=Object.freeze([]);function descriptorValue(value,property2){return getOwnDataDescriptor(value,property2)}function valueOfDescriptor(descriptor){return descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR?void 0:descriptor.value}function projectPromptQueueAttachment(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const idDescriptor=descriptorValue(value,"id"),nameDescriptor=descriptorValue(value,"name"),mimeTypeDescriptor=descriptorValue(value,"mimeType"),uriDescriptor=descriptorValue(value,"uri"),versionDescriptor=descriptorValue(value,"version");if([idDescriptor,nameDescriptor,mimeTypeDescriptor,uriDescriptor,versionDescriptor].some(descriptor=>descriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return;const id=valueOfDescriptor(idDescriptor),name=valueOfDescriptor(nameDescriptor);if(typeof id!="string"||id.trim().length===0||typeof name!="string")return;const mimeType=valueOfDescriptor(mimeTypeDescriptor),uri=valueOfDescriptor(uriDescriptor),version=valueOfDescriptor(versionDescriptor);return Object.freeze({id,name,...typeof mimeType=="string"?{mimeType}:{},...typeof uri=="string"?{uri}:{},...typeof version=="string"?{version}:{}})}catch{return}}function projectPromptQueueAttachments(value){try{if(!Array.isArray(value))return;const lengthDescriptor=descriptorValue(value,"length");if(lengthDescriptor===MISSING_OWN_DATA_DESCRIPTOR||lengthDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof lengthDescriptor.value!="number"||!Number.isSafeInteger(lengthDescriptor.value)||lengthDescriptor.value<0)return;const attachments=[],length=Math.min(lengthDescriptor.value,MAX_PROJECTED_QUEUE_ATTACHMENTS);for(let index=0;index<length;index+=1){const descriptor=descriptorValue(value,String(index));if(descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR)continue;const attachment=projectPromptQueueAttachment(descriptor.value);attachment&&attachments.push(attachment)}return Object.freeze(attachments)}catch{return}}function projectPromptQueueItem(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const idDescriptor=descriptorValue(value,"id"),valueDescriptor=descriptorValue(value,"value"),attachmentsDescriptor=descriptorValue(value,"attachments"),createdAtDescriptor=descriptorValue(value,"createdAt"),metadataDescriptor=descriptorValue(value,"metadata");if([idDescriptor,valueDescriptor,attachmentsDescriptor,createdAtDescriptor,metadataDescriptor].some(descriptor=>descriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return;const id=valueOfDescriptor(idDescriptor),prompt=valueOfDescriptor(valueDescriptor);if(typeof id!="string"||id.trim().length===0||typeof prompt!="string")return;const attachmentsValue=valueOfDescriptor(attachmentsDescriptor),attachments=attachmentsDescriptor===MISSING_OWN_DATA_DESCRIPTOR||attachmentsValue===void 0?void 0:projectPromptQueueAttachments(attachmentsValue),createdAt=valueOfDescriptor(createdAtDescriptor),metadata=valueOfDescriptor(metadataDescriptor);return Object.freeze({source:value,id,value:prompt,...attachments===void 0?{}:{attachments},...typeof createdAt=="number"&&Number.isFinite(createdAt)?{createdAt}:{},...metadata!==void 0?{metadata}:{}})}catch{return}}function projectPromptQueueItems(value){try{if(!Array.isArray(value))return EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS;const lengthDescriptor=descriptorValue(value,"length");if(lengthDescriptor===MISSING_OWN_DATA_DESCRIPTOR||lengthDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof lengthDescriptor.value!="number"||!Number.isSafeInteger(lengthDescriptor.value)||lengthDescriptor.value<0)return EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS;const items=[],seen=new Set,length=Math.min(lengthDescriptor.value,MAX_PROJECTED_QUEUE_ITEMS);for(let index=0;index<length;index+=1){const descriptor=descriptorValue(value,String(index));if(descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR)continue;const item=projectPromptQueueItem(descriptor.value);!item||seen.has(item.id)||(seen.add(item.id),items.push(item))}return Object.freeze(items)}catch{return EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS}}function toDocumentRef(attachment){return Object.freeze({id:attachment.id,name:attachment.name,...attachment.mimeType===void 0?{}:{mimeType:attachment.mimeType},...attachment.uri===void 0?{}:{uri:attachment.uri},...attachment.version===void 0?{}:{version:attachment.version}})}function toPromptQueueItem(item,value=item.value){return Object.freeze({id:item.id,value,...item.attachments===void 0?{}:{attachments:Object.freeze(item.attachments.map(toDocumentRef))},...item.createdAt===void 0?{}:{createdAt:item.createdAt},...item.metadata===void 0?{}:{metadata:item.metadata}})}class LyraPromptQueue extends LyraElement{constructor(){super(...arguments),this.items=[],this.editable=!0,this.disabled=!1,this.label="",this.accessibleLabel=null,this.canonicalItemsBySource=new WeakMap,this.containNativeEvent=event=>{event.stopPropagation()}}static{this.defaultStrings={...super.defaultStrings,attachmentUntitledFile:LYRA_DEFAULT_attachmentUntitledFile,moveDown:LYRA_DEFAULT_moveDown,moveUp:LYRA_DEFAULT_moveUp,promptInputAttachments:LYRA_DEFAULT_promptInputAttachments,promptQueueActionLabel:LYRA_DEFAULT_promptQueueActionLabel,promptQueueEmpty:LYRA_DEFAULT_promptQueueEmpty,promptQueueItemLabel:LYRA_DEFAULT_promptQueueItemLabel,promptQueueLabel:LYRA_DEFAULT_promptQueueLabel,promptQueueSendNow:LYRA_DEFAULT_promptQueueSendNow,remove:LYRA_DEFAULT_remove}}static{this.ownedCollectionProperties=Object.freeze(["items"])}static{this.identityCollectionProperties=Object.freeze(["items"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-queue-change","lr-send-now"])}static{this.identityEventDetailProperties=Object.freeze({"lr-send-now":Object.freeze(["item"])})}static{this.identityEventDetailCollectionItems=Object.freeze({"lr-queue-change":Object.freeze(["items"])})}canonicalItemsFor(source){if(source===null||typeof source!="object"&&typeof source!="function")return EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS;const cached=this.canonicalItemsBySource.get(source);if(cached)return cached;const result=projectPromptQueueItems(source);return this.canonicalItemsBySource.set(source,result),result}cachedCanonicalItemsFor(source){return source!==null&&(typeof source=="object"||typeof source=="function")?this.canonicalItemsBySource.get(source)??EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS:EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS}get effectiveItems(){return this.canonicalItemsFor(this.items)}willUpdate(changed){if(super.willUpdate(changed),!changed.has("items")&&!changed.has("editable")&&!changed.has("disabled"))return;const focusedControl=activeElementIn(this.shadowRoot),action=focusedControl?.getAttribute("data-action")??void 0,editorFocused=focusedControl?.getAttribute("part")==="editor";if(!action&&!editorFocused)return;const focusedItem=focusedControl?.closest("[data-id]"),focusedId=focusedItem?.dataset.id;if(!focusedId||!focusedControl)return;const previousItems=changed.has("items")?this.cachedCanonicalItemsFor(changed.get("items")):EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS,items=this.effectiveItems,rowRemoved=changed.has("items")&&!items.some(item=>item.id===focusedId),editorRemoved=editorFocused&&changed.has("editable")&&!this.editable,controlDisabled=changed.has("disabled")&&this.disabled;if(!rowRemoved&&!editorRemoved&&!controlDisabled)return;const previousIndex=previousItems.findIndex(item=>item.id===focusedId),target=rowRemoved?items[Math.min(Math.max(previousIndex,0),items.length-1)]:items.find(item=>item.id===focusedId),rowActions=focusedItem?.querySelectorAll("[data-action]")??[];this.pendingRemovalFocus={targetId:target?.id,action,actionIndex:action?[...rowActions].findIndex(candidate=>candidate===focusedControl):-1,origin:focusedControl}}updated(changed){super.updated(changed);const pending=this.pendingRemovalFocus;if(!pending)return;this.pendingRemovalFocus=void 0;const internalActive=activeElementIn(this.shadowRoot),documentActive=activeElementIn(this.ownerDocument);if(internalActive!==null&&internalActive!==pending.origin||documentActive!==null&&documentActive!==this&&documentActive!==this.ownerDocument.body)return;if(!pending.targetId){this.shadowRoot?.querySelector('[part="base"]')?.focus();return}const actions=[...[...this.shadowRoot?.querySelectorAll("[data-id]")??[]].find(item=>item.dataset.id===pending.targetId)?.querySelectorAll("[data-action]")??[]],isEnabled=candidate=>candidate.disabled!==!0&&candidate.getAttribute("aria-disabled")!=="true",equivalentAction=pending.action?actions.find(candidate=>candidate.dataset.action===pending.action&&isEnabled(candidate)):void 0;if(equivalentAction){equivalentAction.focus();return}const preferredIndex=pending.actionIndex>=0?pending.actionIndex:0;for(let distance=0;distance<actions.length;distance++){const before=actions[preferredIndex-distance];if(before&&isEnabled(before)){before.focus();return}const after=actions[preferredIndex+distance];if(after&&isEnabled(after)){after.focus();return}}this.shadowRoot?.querySelector('[part="base"]')?.focus()}emitChange(items,reason,itemId){this.disabled||this.emit("lr-queue-change",{items,reason,itemId})}edit(item,value){this.disabled||!this.editable||this.emitChange(this.effectiveItems.map(candidate=>toPromptQueueItem(candidate,candidate.id===item.id?value:candidate.value)),"edit",item.id)}removeItem(item){this.disabled||this.emitChange(this.effectiveItems.filter(candidate=>candidate.id!==item.id).map(candidate=>toPromptQueueItem(candidate)),"remove",item.id)}move(item,offset){if(this.disabled)return;const items=this.effectiveItems,index=items.findIndex(candidate=>candidate.id===item.id),target=index+offset;if(index<0||target<0||target>=items.length)return;const next=[...items],[moved]=next.splice(index,1);moved&&(next.splice(target,0,moved),this.emitChange(next.map(candidate=>toPromptQueueItem(candidate)),"reorder",item.id))}sendNow(item){this.disabled||this.emit("lr-send-now",{item:toPromptQueueItem(item)})}renderItem(item,index,itemCount){const formattedIndex=getNumberFormat(this.effectiveLocale).format(index+1),editorLabel=this.localize("promptQueueItemLabel",void 0,{index:formattedIndex}),actionLabel=action=>this.localize("promptQueueActionLabel",void 0,{action,index:formattedIndex});return html`<li part="item" data-id=${item.id}>
|
|
1
|
+
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}from"lit";import{property}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{activeElementIn}from"../../../internal/active-element.js";import{trueDefaultBooleanConverter}from"../../../internal/converters.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{LyraElement}from"../../../internal/lyra-element.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{styles}from"./prompt-queue.styles.js";import{LYRA_DEFAULT_attachmentUntitledFile,LYRA_DEFAULT_moveDown,LYRA_DEFAULT_moveUp,LYRA_DEFAULT_promptInputAttachments,LYRA_DEFAULT_promptQueueActionLabel,LYRA_DEFAULT_promptQueueEmpty,LYRA_DEFAULT_promptQueueItemLabel,LYRA_DEFAULT_promptQueueLabel,LYRA_DEFAULT_promptQueueSendNow,LYRA_DEFAULT_remove}from"../../../internal/default-strings.generated.js";const MAX_PROJECTED_QUEUE_ITEMS=1e4,MAX_PROJECTED_QUEUE_ATTACHMENTS=1e4,EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS=Object.freeze([]);function descriptorValue(value,property2){return getOwnDataDescriptor(value,property2)}function valueOfDescriptor(descriptor){return descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR?void 0:descriptor.value}function projectPromptQueueAttachment(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const idDescriptor=descriptorValue(value,"id"),nameDescriptor=descriptorValue(value,"name"),mimeTypeDescriptor=descriptorValue(value,"mimeType"),uriDescriptor=descriptorValue(value,"uri"),versionDescriptor=descriptorValue(value,"version");if([idDescriptor,nameDescriptor,mimeTypeDescriptor,uriDescriptor,versionDescriptor].some(descriptor=>descriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return;const id=valueOfDescriptor(idDescriptor),name=valueOfDescriptor(nameDescriptor);if(typeof id!="string"||id.trim().length===0||typeof name!="string")return;const mimeType=valueOfDescriptor(mimeTypeDescriptor),uri=valueOfDescriptor(uriDescriptor),version=valueOfDescriptor(versionDescriptor);return Object.freeze({id,name,...typeof mimeType=="string"?{mimeType}:{},...typeof uri=="string"?{uri}:{},...typeof version=="string"?{version}:{}})}catch{return}}function projectPromptQueueAttachments(value){try{if(!Array.isArray(value))return;const lengthDescriptor=descriptorValue(value,"length");if(lengthDescriptor===MISSING_OWN_DATA_DESCRIPTOR||lengthDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof lengthDescriptor.value!="number"||!Number.isSafeInteger(lengthDescriptor.value)||lengthDescriptor.value<0)return;const attachments=[],length=Math.min(lengthDescriptor.value,MAX_PROJECTED_QUEUE_ATTACHMENTS);for(let index=0;index<length;index+=1){const descriptor=descriptorValue(value,String(index));if(descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR)continue;const attachment=projectPromptQueueAttachment(descriptor.value);attachment&&attachments.push(attachment)}return Object.freeze(attachments)}catch{return}}function projectPromptQueueItem(value){try{if(value===null||typeof value!="object"||Array.isArray(value))return;const idDescriptor=descriptorValue(value,"id"),valueDescriptor=descriptorValue(value,"value"),attachmentsDescriptor=descriptorValue(value,"attachments"),createdAtDescriptor=descriptorValue(value,"createdAt"),metadataDescriptor=descriptorValue(value,"metadata");if([idDescriptor,valueDescriptor,attachmentsDescriptor,createdAtDescriptor,metadataDescriptor].some(descriptor=>descriptor===UNSAFE_OWN_DATA_DESCRIPTOR))return;const id=valueOfDescriptor(idDescriptor),prompt=valueOfDescriptor(valueDescriptor);if(typeof id!="string"||id.trim().length===0||typeof prompt!="string")return;const attachmentsValue=valueOfDescriptor(attachmentsDescriptor),attachments=attachmentsDescriptor===MISSING_OWN_DATA_DESCRIPTOR||attachmentsValue===void 0?void 0:projectPromptQueueAttachments(attachmentsValue),createdAt=valueOfDescriptor(createdAtDescriptor),metadata=valueOfDescriptor(metadataDescriptor);return Object.freeze({source:value,id,value:prompt,...attachments===void 0?{}:{attachments},...typeof createdAt=="number"&&Number.isFinite(createdAt)?{createdAt}:{},...metadata!==void 0?{metadata}:{}})}catch{return}}function projectPromptQueueItems(value){try{if(!Array.isArray(value))return EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS;const lengthDescriptor=descriptorValue(value,"length");if(lengthDescriptor===MISSING_OWN_DATA_DESCRIPTOR||lengthDescriptor===UNSAFE_OWN_DATA_DESCRIPTOR||typeof lengthDescriptor.value!="number"||!Number.isSafeInteger(lengthDescriptor.value)||lengthDescriptor.value<0)return EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS;const items=[],seen=new Set,length=Math.min(lengthDescriptor.value,MAX_PROJECTED_QUEUE_ITEMS);for(let index=0;index<length;index+=1){const descriptor=descriptorValue(value,String(index));if(descriptor===MISSING_OWN_DATA_DESCRIPTOR||descriptor===UNSAFE_OWN_DATA_DESCRIPTOR)continue;const item=projectPromptQueueItem(descriptor.value);!item||seen.has(item.id)||(seen.add(item.id),items.push(item))}return Object.freeze(items)}catch{return EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS}}function toDocumentRef(attachment){return Object.freeze({id:attachment.id,name:attachment.name,...attachment.mimeType===void 0?{}:{mimeType:attachment.mimeType},...attachment.uri===void 0?{}:{uri:attachment.uri},...attachment.version===void 0?{}:{version:attachment.version}})}function toPromptQueueItem(item,value=item.value){return Object.freeze({id:item.id,value,...item.attachments===void 0?{}:{attachments:Object.freeze(item.attachments.map(toDocumentRef))},...item.createdAt===void 0?{}:{createdAt:item.createdAt},...item.metadata===void 0?{}:{metadata:item.metadata}})}class LyraPromptQueue extends LyraElement{constructor(){super(...arguments),this.items=[],this.editable=!0,this.disabled=!1,this.accessibleLabel=null,this.canonicalItemsBySource=new WeakMap,this.containNativeEvent=event=>{event.stopPropagation()}}static{this.defaultStrings={...super.defaultStrings,attachmentUntitledFile:LYRA_DEFAULT_attachmentUntitledFile,moveDown:LYRA_DEFAULT_moveDown,moveUp:LYRA_DEFAULT_moveUp,promptInputAttachments:LYRA_DEFAULT_promptInputAttachments,promptQueueActionLabel:LYRA_DEFAULT_promptQueueActionLabel,promptQueueEmpty:LYRA_DEFAULT_promptQueueEmpty,promptQueueItemLabel:LYRA_DEFAULT_promptQueueItemLabel,promptQueueLabel:LYRA_DEFAULT_promptQueueLabel,promptQueueSendNow:LYRA_DEFAULT_promptQueueSendNow,remove:LYRA_DEFAULT_remove}}static{this.ownedCollectionProperties=Object.freeze(["items"])}static{this.identityCollectionProperties=Object.freeze(["items"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-queue-change","lr-send-now"])}static{this.identityEventDetailProperties=Object.freeze({"lr-send-now":Object.freeze(["item"])})}static{this.identityEventDetailCollectionItems=Object.freeze({"lr-queue-change":Object.freeze(["items"])})}canonicalItemsFor(source){if(source===null||typeof source!="object"&&typeof source!="function")return EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS;const cached=this.canonicalItemsBySource.get(source);if(cached)return cached;const result=projectPromptQueueItems(source);return this.canonicalItemsBySource.set(source,result),result}cachedCanonicalItemsFor(source){return source!==null&&(typeof source=="object"||typeof source=="function")?this.canonicalItemsBySource.get(source)??EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS:EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS}get effectiveItems(){return this.canonicalItemsFor(this.items)}willUpdate(changed){if(super.willUpdate(changed),!changed.has("items")&&!changed.has("editable")&&!changed.has("disabled"))return;const focusedControl=activeElementIn(this.shadowRoot),action=focusedControl?.getAttribute("data-action")??void 0,editorFocused=focusedControl?.getAttribute("part")==="editor";if(!action&&!editorFocused)return;const focusedItem=focusedControl?.closest("[data-id]"),focusedId=focusedItem?.dataset.id;if(!focusedId||!focusedControl)return;const previousItems=changed.has("items")?this.cachedCanonicalItemsFor(changed.get("items")):EMPTY_CANONICAL_PROMPT_QUEUE_ITEMS,items=this.effectiveItems,rowRemoved=changed.has("items")&&!items.some(item=>item.id===focusedId),editorRemoved=editorFocused&&changed.has("editable")&&!this.editable,controlDisabled=changed.has("disabled")&&this.disabled;if(!rowRemoved&&!editorRemoved&&!controlDisabled)return;const previousIndex=previousItems.findIndex(item=>item.id===focusedId),target=rowRemoved?items[Math.min(Math.max(previousIndex,0),items.length-1)]:items.find(item=>item.id===focusedId),rowActions=focusedItem?.querySelectorAll("[data-action]")??[];this.pendingRemovalFocus={targetId:target?.id,action,actionIndex:action?[...rowActions].findIndex(candidate=>candidate===focusedControl):-1,origin:focusedControl}}updated(changed){super.updated(changed);const pending=this.pendingRemovalFocus;if(!pending)return;this.pendingRemovalFocus=void 0;const internalActive=activeElementIn(this.shadowRoot),documentActive=activeElementIn(this.ownerDocument);if(internalActive!==null&&internalActive!==pending.origin||documentActive!==null&&documentActive!==this&&documentActive!==this.ownerDocument.body)return;if(!pending.targetId){this.shadowRoot?.querySelector('[part="base"]')?.focus();return}const actions=[...[...this.shadowRoot?.querySelectorAll("[data-id]")??[]].find(item=>item.dataset.id===pending.targetId)?.querySelectorAll("[data-action]")??[]],isEnabled=candidate=>candidate.disabled!==!0&&candidate.getAttribute("aria-disabled")!=="true",equivalentAction=pending.action?actions.find(candidate=>candidate.dataset.action===pending.action&&isEnabled(candidate)):void 0;if(equivalentAction){equivalentAction.focus();return}const preferredIndex=pending.actionIndex>=0?pending.actionIndex:0;for(let distance=0;distance<actions.length;distance++){const before=actions[preferredIndex-distance];if(before&&isEnabled(before)){before.focus();return}const after=actions[preferredIndex+distance];if(after&&isEnabled(after)){after.focus();return}}this.shadowRoot?.querySelector('[part="base"]')?.focus()}emitChange(items,reason,itemId){this.disabled||this.emit("lr-queue-change",{items,reason,itemId})}edit(item,value){this.disabled||!this.editable||this.emitChange(this.effectiveItems.map(candidate=>toPromptQueueItem(candidate,candidate.id===item.id?value:candidate.value)),"edit",item.id)}removeItem(item){this.disabled||this.emitChange(this.effectiveItems.filter(candidate=>candidate.id!==item.id).map(candidate=>toPromptQueueItem(candidate)),"remove",item.id)}move(item,offset){if(this.disabled)return;const items=this.effectiveItems,index=items.findIndex(candidate=>candidate.id===item.id),target=index+offset;if(index<0||target<0||target>=items.length)return;const next=[...items],[moved]=next.splice(index,1);moved&&(next.splice(target,0,moved),this.emitChange(next.map(candidate=>toPromptQueueItem(candidate)),"reorder",item.id))}sendNow(item){this.disabled||this.emit("lr-send-now",{item:toPromptQueueItem(item)})}renderItem(item,index,itemCount){const formattedIndex=getNumberFormat(this.effectiveLocale).format(index+1),editorLabel=this.localize("promptQueueItemLabel",void 0,{index:formattedIndex}),actionLabel=action=>this.localize("promptQueueActionLabel",void 0,{action,index:formattedIndex});return html`<li part="item" data-id=${item.id}>
|
|
2
2
|
${this.editable?html`<lr-textarea
|
|
3
3
|
part="editor"
|
|
4
4
|
.value=${item.value}
|
|
@@ -51,7 +51,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
51
51
|
@click=${()=>this.removeItem(item)}
|
|
52
52
|
>${this.localize("remove")}</lr-button>
|
|
53
53
|
</div>
|
|
54
|
-
</li>`}render(){const visibleLabel=this.label
|
|
54
|
+
</li>`}render(){const visibleLabel=this.label==null?this.localize("promptQueueLabel"):this.label,accessibleLabel=this.accessibleLabel??visibleLabel,items=this.effectiveItems;return html`<section
|
|
55
55
|
part="base"
|
|
56
56
|
aria-label=${accessibleLabel}
|
|
57
57
|
tabindex="-1"
|
|
@@ -44,4 +44,8 @@ export declare class LyraRealtimeSession extends LyraElement<LyraRealtimeSession
|
|
|
44
44
|
sessionId:string;entries:readonly LyraTranscriptEntry[];muted:boolean;
|
|
45
45
|
/** Shows native push-to-talk capture. Hiding a focused capture transfers focus to the current
|
|
46
46
|
* connect/disconnect action; hiding it while another control owns focus leaves that focus alone. */
|
|
47
|
-
showCapture:boolean;
|
|
47
|
+
showCapture:boolean;
|
|
48
|
+
/** Accessible name for the session shell. Omitting it localizes the default
|
|
49
|
+
* `realtimeSessionLabel` message; an explicit empty string (`label=""` or `.label = ''`)
|
|
50
|
+
* suppresses that default and renders no label. A host `aria-label` wins over both. */
|
|
51
|
+
label?:string;private transferActionFocus?;private statusAnnouncementSink?;private errorAnnouncementSink?;private suppressNextStateAnnouncement;constructor();private syncAnnouncementSinks;connectedCallback():void;disconnectedCallback():void;protected willUpdate(changed:PropertyValues<this>):void;protected updated(changed:PropertyValues<this>):void;private stateLabel;private containNativeEvent;render():TemplateResult;}declare global{interface HTMLElementTagNameMap{'lr-realtime-session':LyraRealtimeSession;}}
|
|
@@ -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}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteRange}from"../../../internal/numbers.js";import{literalSetConverter,trueDefaultBooleanConverter}from"../../../internal/converters.js";import"../audio-visualizer/audio-visualizer.class.js";import"../push-to-talk/push-to-talk.class.js";import"../transcript-feed/transcript-feed.class.js";import"../../overlays/badge/badge.class.js";import{styles}from"./realtime-session.styles.js";import{activeElementIn}from"../../../internal/active-element.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{LYRA_DEFAULT_realtimeSessionConnect,LYRA_DEFAULT_realtimeSessionConnected,LYRA_DEFAULT_realtimeSessionConnecting,LYRA_DEFAULT_realtimeSessionConnectionFailed,LYRA_DEFAULT_realtimeSessionDisconnect,LYRA_DEFAULT_realtimeSessionDisconnected,LYRA_DEFAULT_realtimeSessionError,LYRA_DEFAULT_realtimeSessionInterrupt,LYRA_DEFAULT_realtimeSessionLabel,LYRA_DEFAULT_realtimeSessionMute,LYRA_DEFAULT_realtimeSessionReconnecting,LYRA_DEFAULT_realtimeSessionUnmute}from"../../../internal/default-strings.generated.js";const CONNECTION_STATE=literalSetConverter(["disconnected","connecting","connected","reconnecting","error"],"disconnected"),VOICE_STATE=literalSetConverter(["idle","listening","thinking","speaking"],"idle"),STATE_VARIANT={disconnected:"neutral",connecting:"brand",connected:"success",reconnecting:"warning",error:"danger"};class LyraRealtimeSession extends LyraElement{static{this.defaultStrings={...super.defaultStrings,realtimeSessionConnect:LYRA_DEFAULT_realtimeSessionConnect,realtimeSessionConnected:LYRA_DEFAULT_realtimeSessionConnected,realtimeSessionConnecting:LYRA_DEFAULT_realtimeSessionConnecting,realtimeSessionConnectionFailed:LYRA_DEFAULT_realtimeSessionConnectionFailed,realtimeSessionDisconnect:LYRA_DEFAULT_realtimeSessionDisconnect,realtimeSessionDisconnected:LYRA_DEFAULT_realtimeSessionDisconnected,realtimeSessionError:LYRA_DEFAULT_realtimeSessionError,realtimeSessionInterrupt:LYRA_DEFAULT_realtimeSessionInterrupt,realtimeSessionLabel:LYRA_DEFAULT_realtimeSessionLabel,realtimeSessionMute:LYRA_DEFAULT_realtimeSessionMute,realtimeSessionReconnecting:LYRA_DEFAULT_realtimeSessionReconnecting,realtimeSessionUnmute:LYRA_DEFAULT_realtimeSessionUnmute}}static{this.ownedCollectionProperties=Object.freeze(["entries"])}static{this.styles=[LyraElement.styles,styles]}get state(){return this._state}set state(next){const normalized=CONNECTION_STATE.normalize(next),old=this._state;old!==normalized&&(this._state=normalized,this.requestUpdate("state",old))}get voiceState(){return this._voiceState}set voiceState(next){const normalized=VOICE_STATE.normalize(next),old=this._voiceState;old!==normalized&&(this._voiceState=normalized,this.requestUpdate("voiceState",old))}constructor(){super(),this._state="disconnected",this._voiceState="idle",this.level=null,this.stream=null,this.sessionId="",this.entries=[],this.muted=!1,this.showCapture=!0,this.
|
|
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}from"lit";import{property}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteRange}from"../../../internal/numbers.js";import{literalSetConverter,trueDefaultBooleanConverter}from"../../../internal/converters.js";import"../audio-visualizer/audio-visualizer.class.js";import"../push-to-talk/push-to-talk.class.js";import"../transcript-feed/transcript-feed.class.js";import"../../overlays/badge/badge.class.js";import{styles}from"./realtime-session.styles.js";import{activeElementIn}from"../../../internal/active-element.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{LYRA_DEFAULT_realtimeSessionConnect,LYRA_DEFAULT_realtimeSessionConnected,LYRA_DEFAULT_realtimeSessionConnecting,LYRA_DEFAULT_realtimeSessionConnectionFailed,LYRA_DEFAULT_realtimeSessionDisconnect,LYRA_DEFAULT_realtimeSessionDisconnected,LYRA_DEFAULT_realtimeSessionError,LYRA_DEFAULT_realtimeSessionInterrupt,LYRA_DEFAULT_realtimeSessionLabel,LYRA_DEFAULT_realtimeSessionMute,LYRA_DEFAULT_realtimeSessionReconnecting,LYRA_DEFAULT_realtimeSessionUnmute}from"../../../internal/default-strings.generated.js";const CONNECTION_STATE=literalSetConverter(["disconnected","connecting","connected","reconnecting","error"],"disconnected"),VOICE_STATE=literalSetConverter(["idle","listening","thinking","speaking"],"idle"),STATE_VARIANT={disconnected:"neutral",connecting:"brand",connected:"success",reconnecting:"warning",error:"danger"};class LyraRealtimeSession extends LyraElement{static{this.defaultStrings={...super.defaultStrings,realtimeSessionConnect:LYRA_DEFAULT_realtimeSessionConnect,realtimeSessionConnected:LYRA_DEFAULT_realtimeSessionConnected,realtimeSessionConnecting:LYRA_DEFAULT_realtimeSessionConnecting,realtimeSessionConnectionFailed:LYRA_DEFAULT_realtimeSessionConnectionFailed,realtimeSessionDisconnect:LYRA_DEFAULT_realtimeSessionDisconnect,realtimeSessionDisconnected:LYRA_DEFAULT_realtimeSessionDisconnected,realtimeSessionError:LYRA_DEFAULT_realtimeSessionError,realtimeSessionInterrupt:LYRA_DEFAULT_realtimeSessionInterrupt,realtimeSessionLabel:LYRA_DEFAULT_realtimeSessionLabel,realtimeSessionMute:LYRA_DEFAULT_realtimeSessionMute,realtimeSessionReconnecting:LYRA_DEFAULT_realtimeSessionReconnecting,realtimeSessionUnmute:LYRA_DEFAULT_realtimeSessionUnmute}}static{this.ownedCollectionProperties=Object.freeze(["entries"])}static{this.styles=[LyraElement.styles,styles]}get state(){return this._state}set state(next){const normalized=CONNECTION_STATE.normalize(next),old=this._state;old!==normalized&&(this._state=normalized,this.requestUpdate("state",old))}get voiceState(){return this._voiceState}set voiceState(next){const normalized=VOICE_STATE.normalize(next),old=this._voiceState;old!==normalized&&(this._voiceState=normalized,this.requestUpdate("voiceState",old))}constructor(){super(),this._state="disconnected",this._voiceState="idle",this.level=null,this.stream=null,this.sessionId="",this.entries=[],this.muted=!1,this.showCapture=!0,this.suppressNextStateAnnouncement=!0,this.containNativeEvent=event=>{event.stopPropagation()},this.requestUpdate("state",void 0),this.requestUpdate("voiceState",void 0)}syncAnnouncementSinks(){this.isConnected&&(this.statusAnnouncementSink?.element.ownerDocument===this.ownerDocument&&this.errorAnnouncementSink?.element.ownerDocument===this.ownerDocument||(this.statusAnnouncementSink?.release(),this.errorAnnouncementSink?.release(),this.statusAnnouncementSink=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}),this.errorAnnouncementSink=acquireAnnouncementSink("assertive",{document:this.ownerDocument,source:this})))}connectedCallback(){super.connectedCallback(),this.syncAnnouncementSinks(),this.hasUpdated&&(this.suppressNextStateAnnouncement=!0,this.requestUpdate())}disconnectedCallback(){super.disconnectedCallback(),this.statusAnnouncementSink?.release(),this.errorAnnouncementSink?.release(),this.statusAnnouncementSink=void 0,this.errorAnnouncementSink=void 0,this.suppressNextStateAnnouncement=!0}willUpdate(changed){super.willUpdate(changed);const stateChanged=changed.has("state"),captureHidden=changed.has("showCapture")&&changed.get("showCapture")===!0&&!this.showCapture,captureDisabled=changed.has("muted")&&changed.get("muted")===!1&&this.muted;if(!stateChanged&&!captureHidden&&!captureDisabled)return;const focused=activeElementIn(this.shadowRoot??this.ownerDocument),focusedPart=focused?.getAttribute("part")??null;if(!focused)return;if(captureDisabled&&!stateChanged&&!captureHidden&&focusedPart==="capture"){this.transferActionFocus={target:"mute",origin:focused};return}(captureHidden&&!stateChanged?focusedPart==="capture":focused.closest('[part="controls"]')!==null||focusedPart==="connect"||focusedPart==="disconnect"||focusedPart==="mute"||focusedPart==="interrupt"||focusedPart==="capture")&&(this.transferActionFocus={target:"connection",origin:focused})}updated(changed){super.updated(changed);const stateChanged=changed.has("state");stateChanged&&!this.suppressNextStateAnnouncement&&(this.state==="error"?this.errorAnnouncementSink?.announce(this.localize("realtimeSessionConnectionFailed")):this.statusAnnouncementSink?.announce(this.stateLabel()));const pending=this.transferActionFocus;if((stateChanged||changed.has("showCapture")||changed.has("muted"))&&pending){this.transferActionFocus=void 0;const internalActive=activeElementIn(this.shadowRoot),documentActive=activeElementIn(this.ownerDocument);if((internalActive===null||internalActive===pending.origin)&&(documentActive===null||documentActive===this||documentActive===this.ownerDocument.body)){const selector=pending.target==="mute"?'[part="mute"]':'[part="connect"], [part="disconnect"]';this.renderRoot.querySelector(selector)?.focus()}}this.suppressNextStateAnnouncement=!1}stateLabel(){switch(this.state){case"disconnected":return this.localize("realtimeSessionDisconnected");case"connecting":return this.localize("realtimeSessionConnecting");case"connected":return this.localize("realtimeSessionConnected");case"reconnecting":return this.localize("realtimeSessionReconnecting");case"error":return this.localize("realtimeSessionError")}}render(){const label=this.getAttribute("aria-label")??(this.label==null?this.localize("realtimeSessionLabel"):this.label),active=this.state==="connected",safeLevel=this.level==null?null:finiteRange(this.level,0,0,1);return html`
|
|
2
2
|
<section
|
|
3
3
|
part="base"
|
|
4
4
|
aria-label=${label}
|
|
@@ -58,7 +58,11 @@ anchor:DocumentLocator|null;rect:DOMRectReadOnly|null;
|
|
|
58
58
|
* moves to the nearest action or the stable toolbar when the set becomes empty. Duplicate names
|
|
59
59
|
* normalize first-wins.
|
|
60
60
|
*/
|
|
61
|
-
actions:readonly SelectionAction[];
|
|
61
|
+
actions:readonly SelectionAction[];
|
|
62
|
+
/** Accessible name for the toolbar. Omitting it localizes the default `selectionToolbarLabel`
|
|
63
|
+
* message; an explicit empty string (`label=""` or `.label = ''`) suppresses that default and
|
|
64
|
+
* renders no label. `accessibleLabel` wins over both. */
|
|
65
|
+
label?:string;accessibleLabel:string|null;private copyFailed;private toolbar?;private overlay?;private stopPositioning?;
|
|
62
66
|
/** Announces a copy failure -- the copy button's own `aria-label`/text flipping to
|
|
63
67
|
* `localize('copyFailed')` is not reliably re-announced by a screen reader without an
|
|
64
68
|
* explicit live region, unlike every other failure/transition state in this family. */
|
|
@@ -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}from"lit";import{property,query,state}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{styleMap}from"lit/directives/style-map.js";import{deepActiveElementIn}from"../../../internal/active-element.js";import{resolveCssLength}from"../../../internal/css-length.js";import{composedParentElement}from"../../../internal/active-element.js";import{applyComposedFocusRepair,captureComposedFocusRepair,collectComposedFocusTargets,isSemanticActionElement}from"../../../internal/focus-navigation.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteAdd,finiteMidpoint,finiteRange}from"../../../internal/numbers.js";import{writeClipboardText}from"../../../internal/clipboard.js";import{activateNonmodalOverlay,composedContains}from"../../../internal/nonmodal-overlay-manager.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{styles}from"./selection-toolbar.styles.js";import{LYRA_DEFAULT_copy,LYRA_DEFAULT_copyFailed,LYRA_DEFAULT_selectionAsk,LYRA_DEFAULT_selectionCite,LYRA_DEFAULT_selectionQuote,LYRA_DEFAULT_selectionToolbarLabel}from"../../../internal/default-strings.generated.js";const SELECTION_ACTIONS=["ask","quote","cite","copy"],DEFAULT_PLACEMENT_GAP_PX=8;class LyraSelectionToolbar extends LyraElement{constructor(){super(...arguments),this.open=!1,this.text="",this.anchor=null,this.rect=null,this.actions=["ask","quote","cite","copy"],this.label="",this.accessibleLabel=null,this.copyFailed=!1,this.activeActionIndex=0,this.lifecycleGeneration=0,this.positioningGeneration=0,this.rovingGeneration=0,this.managedActionStops=new Set,this.actionTabIndexLeases=new WeakMap,this.onActionsSlotChange=()=>{this.syncRovingStops()},this.onActionMutations=records=>{this.syncRovingStops()},this.onToolbarFocusIn=event=>{const buttons=this.actionButtons(),path=event.composedPath(),index=buttons.findIndex(button=>path.includes(button));if(index<0){this.focusedAction=void 0;return}const origin=path[0],stop=origin?.nodeType===1&&typeof origin.focus=="function"?origin:buttons[index],toolbar=this.toolbar,repair=stop&&toolbar?captureComposedFocusRepair(stop,toolbar):null;this.focusedAction=stop&&repair?{action:this.actionForStop(stop),index,repair,stop}:void 0,this.syncRovingStops(index)},this.containNativeEvent=event=>{event.stopPropagation()},this.onToolbarFocusOut=event=>{const destination=event.relatedTarget;destination&&destination.nodeType===1&&!composedContains(this,destination)&&(this.focusedAction=void 0)},this.onToolbarKeyDown=event=>{const buttons=this.actionButtons();if(buttons.length===0)return;const originIndex=buttons.findIndex(button=>event.composedPath().includes(button)),currentIndex=originIndex>=0?originIndex:this.activeActionIndex,forward=this.effectiveDirection==="rtl"?"ArrowLeft":"ArrowRight",backward=this.effectiveDirection==="rtl"?"ArrowRight":"ArrowLeft";let next;if(event.key===forward)next=(currentIndex+1)%buttons.length;else if(event.key===backward)next=(currentIndex-1+buttons.length)%buttons.length;else if(event.key==="Home")next=0;else if(event.key==="End")next=buttons.length-1;else return;event.preventDefault(),this.focusedAction=void 0;const generation=this.lifecycleGeneration,owner=this.ownerDocument.defaultView;this.syncRovingStops(next).then(button=>{!button||!this.isCurrentLifecycle(generation,owner)||!button.isConnected||button.ownerDocument!==this.ownerDocument||!this.ownsActionButton(button)||button.focus()})},this.updateToolbarPosition=()=>{const toolbar=this.toolbar,view=this.ownerDocument.defaultView;if(!toolbar||!view)return;const viewport=this.viewportBounds(view),maxEdge=finiteMidpoint(0,Math.min(viewport.width,viewport.height)),gap=finiteRange(this.placementGapPx(),DEFAULT_PLACEMENT_GAP_PX,0,maxEdge),edge=gap,fallbackInline=finiteMidpoint(viewport.left,viewport.right),rect=this.rect?this.safeRect(this.rect):{left:fallbackInline,top:viewport.top,width:0,height:0,right:fallbackInline,bottom:viewport.top,inlineCenter:fallbackInline},doubleEdge=finiteAdd(edge,edge),maxInlineSize=finiteRange(finiteAdd(viewport.width,-doubleEdge),0,0,Number.MAX_VALUE),maxBlockSize=finiteRange(finiteAdd(viewport.height,-doubleEdge),0,0,Number.MAX_VALUE);toolbar.style.setProperty("--_lr-selection-toolbar-max-inline-size",this.px(maxInlineSize)),toolbar.style.setProperty("--_lr-selection-toolbar-max-block-size",this.px(maxBlockSize));const width=finiteRange(toolbar.offsetWidth,0,0,Number.MAX_VALUE),height=finiteRange(toolbar.offsetHeight,0,0,Number.MAX_VALUE),desiredInline=finiteRange(rect.inlineCenter,viewport.left,viewport.left,viewport.right),anchorBlock=finiteRange(rect.top,viewport.top,viewport.top,viewport.bottom),desiredLeft=finiteAdd(desiredInline,-finiteMidpoint(0,width)),minLeft=finiteAdd(viewport.left,edge),maxLeft=Math.max(minLeft,finiteAdd(finiteAdd(viewport.right,-width),-edge)),left=finiteRange(desiredLeft,minLeft,minLeft,maxLeft),above=finiteAdd(finiteAdd(rect.top,-height),-gap),below=finiteAdd(rect.bottom,gap),minTop=finiteAdd(viewport.top,edge),desiredTop=above>=minTop?above:below,maxTop=Math.max(minTop,finiteAdd(finiteAdd(viewport.bottom,-height),-edge)),top=finiteRange(desiredTop,minTop,minTop,maxTop),logicalInline=this.effectiveDirection==="rtl"?finiteAdd(viewport.layoutWidth,-desiredInline):desiredInline;toolbar.style.setProperty("--_lr-selection-toolbar-inline-start",this.px(logicalInline)),toolbar.style.setProperty("--_lr-selection-toolbar-block-start",this.px(anchorBlock)),toolbar.style.setProperty("--_lr-selection-toolbar-inline-shift",this.px(finiteAdd(left,-desiredLeft))),toolbar.style.setProperty("--_lr-selection-toolbar-block-shift",this.px(finiteAdd(top,-finiteAdd(anchorBlock,-height)))),toolbar.toggleAttribute("data-positioned",!0)}}static{this.defaultStrings={...super.defaultStrings,copy:LYRA_DEFAULT_copy,copyFailed:LYRA_DEFAULT_copyFailed,selectionAsk:LYRA_DEFAULT_selectionAsk,selectionCite:LYRA_DEFAULT_selectionCite,selectionQuote:LYRA_DEFAULT_selectionQuote,selectionToolbarLabel:LYRA_DEFAULT_selectionToolbarLabel}}static{this.ownedCollectionProperties=Object.freeze(["anchor","actions"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-selection-action"])}get effectiveActions(){const seen=new Set,actions=[];for(const value of this.actions){if(typeof value!="string"||!SELECTION_ACTIONS.includes(value)||seen.has(value))continue;const action=value;seen.add(action),actions.push(action)}return actions}connectedCallback(){super.connectedCallback(),this.sink??=acquireAnnouncementSink("assertive",{document:this.ownerDocument,source:this}),this.hasUpdated&&(this.syncOpenLifecycle(),this.syncRovingStops())}disconnectedCallback(){this.lifecycleGeneration++,this.rovingGeneration++,this.pendingActionFocus=void 0,this.focusedAction=void 0,this.actionObserver?.disconnect(),this.actionObserver=void 0,this.releaseManagedActionStops(),this.retirePositioning(),this.overlay?.suspend(),this.sink?.release(),this.sink=void 0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.lifecycleGeneration++,this.rovingGeneration++,this.pendingActionFocus=void 0,this.focusedAction=void 0,this.actionObserver?.disconnect(),this.actionObserver=void 0,this.releaseManagedActionStops(),this.retirePositioning()}willUpdate(changed){if(super.willUpdate(changed),this.copyFailed&&(changed.has("text")||changed.has("open")&&this.open)&&(this.copyFailed=!1),!changed.has("actions"))return;const active=deepActiveElementIn(this.ownerDocument),toolbar=this.toolbar;if(!active||!toolbar)return;const index=this.actionButtons().indexOf(active);if(index<0)return;const repair=captureComposedFocusRepair(active,toolbar);repair&&(this.pendingActionFocus={action:this.actionForStop(active),index,repair,stop:active})}updated(changed){if(super.updated(changed),(changed.has("open")||changed.has("text"))&&this.syncOpenLifecycle(),this.open&&this.text&&(changed.has("rect")||changed.has("actions"))&&this.updateToolbarPosition(),this.open&&this.text&&(changed.has("open")||changed.has("text")||changed.has("actions"))){const pending=changed.has("actions")?this.pendingActionFocus:void 0;if(this.pendingActionFocus=void 0,!pending){this.syncRovingStops();return}this.syncRovingStops(pending.index,pending)}}syncOpenLifecycle(){if(!this.isConnected){this.retirePositioning(),this.overlay?.deactivate(),this.overlay=void 0,this.releaseManagedActionStops();return}if(!this.open||!this.text){this.retirePositioning(),this.overlay?.deactivate(),this.overlay=void 0,this.releaseManagedActionStops();return}this.overlay?.isActive()?this.overlay.resume():this.overlay=activateNonmodalOverlay({host:this,panel:()=>this.toolbar??null,onEscape:()=>this.dismiss()}),this.startPositioning()}dismiss(){this.open&&(this.open=!1,this.emit("lr-dismiss",null))}async activate(action){const text=this.text,anchor=this.anchor,generation=this.lifecycleGeneration,owner=this.isConnected?this.ownerDocument.defaultView:null;if(this.copyFailed=!1,action==="copy"){const outcome=await writeClipboardText(owner,text);if(!this.isCurrentLifecycle(generation,owner))return;if(!outcome.ok){this.copyFailed=!0,this.sink?.announce(this.localize("copyFailed")),this.emit("lr-error",null),this.emit("lr-copy-error",outcome);return}this.emit("lr-copy",outcome)}this.isCurrentLifecycle(generation,owner)&&this.emit("lr-selection-action",{action,text,anchor})}isCurrentLifecycle(generation,owner){return generation===this.lifecycleGeneration&&this.isConnected&&this.ownerDocument.defaultView===owner}actionButtons(){const toolbar=this.toolbar;return toolbar?collectComposedFocusTargets(toolbar,{mode:"programmatic",includeRoot:!1}).elements.filter(button=>!!isSemanticActionElement(button)||this.hasAuthoredActionTabIndex(button)):[]}actionRoots(){const builtIn=[...this.renderRoot.querySelectorAll("lr-button[data-action]")],slot=this.renderRoot.querySelector('slot[name="actions"]');return[...builtIn,...slot?.assignedElements({flatten:!0})??[]]}actionForStop(stop){const action=[...this.renderRoot.querySelectorAll("lr-button[data-action]")].find(button=>composedContains(button,stop))?.getAttribute("data-action");return action&&SELECTION_ACTIONS.includes(action)?action:void 0}ownsActionButton(button){return this.actionButtons().includes(button)}async syncRovingStops(preferredIndex=this.activeActionIndex,requestedRepair){const generation=this.lifecycleGeneration,owner=this.ownerDocument.defaultView,request=++this.rovingGeneration;if(!owner||!this.isConnected)return;const roots=this.actionRoots();await Promise.all(roots.map(root=>root.updateComplete)),await Promise.resolve();const buttons=this.actionButtons();if(request!==this.rovingGeneration||!this.isCurrentLifecycle(generation,owner)||buttons.some(button=>!button.isConnected||button.ownerDocument!==this.ownerDocument||!this.ownsActionButton(button)))return;const focused=requestedRepair??this.focusedAction,exactIndex=focused?buttons.indexOf(focused.stop):-1,retainedIndex=exactIndex>=0?exactIndex:focused?.action?buttons.findIndex(button=>this.actionForStop(button)===focused.action):-1,targetIndex=retainedIndex>=0?retainedIndex:Math.min(focused?Math.max(0,focused.index):Math.max(0,preferredIndex),Math.max(0,buttons.length-1));this.setRovingStops(buttons,targetIndex);const target=buttons[targetIndex];return focused&&target!==focused.stop&&(applyComposedFocusRepair(focused.repair,target??this.toolbar??null),this.focusedAction===focused&&(this.focusedAction=void 0)),target}hasAuthoredActionTabIndex(button){const lease=this.actionTabIndexLeases.get(button);return lease&&lease.lastManaged!==null&&button.getAttribute("tabindex")===lease.lastManaged?lease.authored!==null:button.hasAttribute("tabindex")}writeActionTabIndex(button,tabIndex){let lease=this.actionTabIndexLeases.get(button);if(lease||(lease={authored:button.getAttribute("tabindex"),lastManaged:null,consumerOwns:!1},this.actionTabIndexLeases.set(button,lease)),lease.consumerOwns||lease.lastManaged!==null&&button.getAttribute("tabindex")!==lease.lastManaged){lease.consumerOwns=!0;return}button.tabIndex=tabIndex,lease.lastManaged=button.getAttribute("tabindex")}releaseActionTabIndex(button){const lease=this.actionTabIndexLeases.get(button);lease&&(!lease.consumerOwns&&button.getAttribute("tabindex")===lease.lastManaged&&(lease.authored===null?button.removeAttribute("tabindex"):button.setAttribute("tabindex",lease.authored)),this.actionTabIndexLeases.delete(button))}releaseManagedActionStops(){for(const button of this.managedActionStops)this.releaseActionTabIndex(button);this.managedActionStops.clear()}setRovingStops(buttons,index){this.actionObserver?.disconnect();for(const previous of this.managedActionStops)buttons.includes(previous)||this.releaseActionTabIndex(previous);this.activeActionIndex=buttons.length===0?0:Math.min(Math.max(0,index),buttons.length-1),buttons.forEach((button,buttonIndex)=>{this.writeActionTabIndex(button,buttonIndex===this.activeActionIndex?0:-1)}),this.managedActionStops=new Set(buttons),this.observeActionChanges(buttons)}observeActionChanges(buttons){this.actionObserver?.disconnect();const Observer=this.ownerDocument.defaultView?.MutationObserver,toolbar=this.toolbar;if(!Observer||!toolbar||!this.isConnected){this.actionObserver=void 0;return}const observer=new Observer(this.onActionMutations),roots=new Set([toolbar,...this.actionRoots()]);for(const button of buttons){let current=button;for(;current&¤t!==this;){const root=current.getRootNode();root.nodeType===11&&"host"in root&&roots.add(root),current=composedParentElement(current)}}const 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.actionObserver=observer}actionPartNames(action){const parts=["action"];switch(action){case"ask":parts.push("action-ask");break;case"quote":parts.push("action-quote");break;case"cite":parts.push("action-cite");break;case"copy":parts.push("action-copy");break}return parts.join(" ")}actionLabel(action){switch(action){case"ask":return this.localize("selectionAsk");case"quote":return this.localize("selectionQuote");case"cite":return this.localize("selectionCite");case"copy":return this.localize(this.copyFailed?"copyFailed":"copy")}}safeRect(rect){const left=finiteRange(rect.left,0,-Number.MAX_VALUE,Number.MAX_VALUE),top=finiteRange(rect.top,0,-Number.MAX_VALUE,Number.MAX_VALUE),width=finiteRange(rect.width,0,0,Number.MAX_VALUE),height=finiteRange(rect.height,0,0,Number.MAX_VALUE),right=finiteAdd(left,width),bottom=finiteAdd(top,height);return{left,top,width,height,right,bottom,inlineCenter:finiteMidpoint(left,right)}}viewportBounds(view){const layoutWidth=finiteRange(view.innerWidth,0,0,Number.MAX_VALUE),layoutHeight=finiteRange(view.innerHeight,0,0,Number.MAX_VALUE),viewport=view.visualViewport,left=finiteRange(viewport?.offsetLeft??0,0,0,Number.MAX_VALUE),top=finiteRange(viewport?.offsetTop??0,0,0,Number.MAX_VALUE),width=finiteRange(viewport?.width??layoutWidth,layoutWidth,0,Number.MAX_VALUE),height=finiteRange(viewport?.height??layoutHeight,layoutHeight,0,Number.MAX_VALUE);return{left,top,width,height,right:finiteAdd(left,width),bottom:finiteAdd(top,height),layoutWidth}}px(value){return`${finiteRange(value,0,-Number.MAX_VALUE,Number.MAX_VALUE)}px`}coordinates(){const view=this.ownerDocument.defaultView,viewport=view?this.viewportBounds(view):{left:0,top:0,width:0,height:0,right:0,bottom:0,layoutWidth:0},fallbackInline=finiteMidpoint(viewport.left,viewport.right),rect=this.rect?this.safeRect(this.rect):{left:fallbackInline,top:viewport.top,width:0,height:0,right:fallbackInline,bottom:viewport.top,inlineCenter:fallbackInline},desiredInline=finiteRange(rect.inlineCenter,viewport.left,viewport.left,viewport.right),block=finiteRange(rect.top,viewport.top,viewport.top,viewport.bottom),logicalInline=this.effectiveDirection==="rtl"?finiteAdd(viewport.layoutWidth,-desiredInline):desiredInline;return{"--_lr-selection-toolbar-inline-start":this.px(logicalInline),"--_lr-selection-toolbar-block-start":this.px(block)}}placementGapPx(){const computed=this.ownerDocument.defaultView?.getComputedStyle(this),publicValue=resolveCssLength(computed?.getPropertyValue("--lr-selection-toolbar-placement-gap").trim()??"",{host:this});if(publicValue!==void 0)return finiteRange(publicValue,DEFAULT_PLACEMENT_GAP_PX,0,Number.MAX_VALUE);const tokenValue=resolveCssLength(computed?.getPropertyValue("--lr-space-s").trim()??"",{host:this});return finiteRange(tokenValue??DEFAULT_PLACEMENT_GAP_PX,DEFAULT_PLACEMENT_GAP_PX,0,Number.MAX_VALUE)}startPositioning(){this.retirePositioning();const toolbar=this.toolbar,view=this.ownerDocument.defaultView;if(!toolbar||!view||!this.isConnected)return;const generation=this.positioningGeneration,update=()=>{generation!==this.positioningGeneration||!this.isConnected||this.ownerDocument.defaultView!==view||this.toolbar!==toolbar||this.updateToolbarPosition()};let resizeFrame;const scheduleResizeUpdate=()=>{resizeFrame===void 0&&(resizeFrame=view.requestAnimationFrame(()=>{resizeFrame=void 0,update()}))},observer=typeof view.ResizeObserver>"u"?void 0:new view.ResizeObserver(scheduleResizeUpdate);observer?.observe(toolbar),view.addEventListener("resize",update),view.visualViewport?.addEventListener("resize",update),view.visualViewport?.addEventListener("scroll",update),update(),this.stopPositioning=()=>{observer?.disconnect(),resizeFrame!==void 0&&view.cancelAnimationFrame(resizeFrame),resizeFrame=void 0,view.removeEventListener("resize",update),view.visualViewport?.removeEventListener("resize",update),view.visualViewport?.removeEventListener("scroll",update)}}retirePositioning(){this.positioningGeneration++;const stop=this.stopPositioning;this.stopPositioning=void 0,stop?.()}render(){if(!this.open||!this.text)return html`${nothing}`;const label=this.accessibleLabel??(this.label||this.localize("selectionToolbarLabel"));return html`<div
|
|
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}from"lit";import{property,query,state}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{styleMap}from"lit/directives/style-map.js";import{deepActiveElementIn}from"../../../internal/active-element.js";import{resolveCssLength}from"../../../internal/css-length.js";import{composedParentElement}from"../../../internal/active-element.js";import{applyComposedFocusRepair,captureComposedFocusRepair,collectComposedFocusTargets,isSemanticActionElement}from"../../../internal/focus-navigation.js";import{LyraElement}from"../../../internal/lyra-element.js";import{finiteAdd,finiteMidpoint,finiteRange}from"../../../internal/numbers.js";import{writeClipboardText}from"../../../internal/clipboard.js";import{activateNonmodalOverlay,composedContains}from"../../../internal/nonmodal-overlay-manager.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{styles}from"./selection-toolbar.styles.js";import{LYRA_DEFAULT_copy,LYRA_DEFAULT_copyFailed,LYRA_DEFAULT_selectionAsk,LYRA_DEFAULT_selectionCite,LYRA_DEFAULT_selectionQuote,LYRA_DEFAULT_selectionToolbarLabel}from"../../../internal/default-strings.generated.js";const SELECTION_ACTIONS=["ask","quote","cite","copy"],DEFAULT_PLACEMENT_GAP_PX=8;class LyraSelectionToolbar extends LyraElement{constructor(){super(...arguments),this.open=!1,this.text="",this.anchor=null,this.rect=null,this.actions=["ask","quote","cite","copy"],this.accessibleLabel=null,this.copyFailed=!1,this.activeActionIndex=0,this.lifecycleGeneration=0,this.positioningGeneration=0,this.rovingGeneration=0,this.managedActionStops=new Set,this.actionTabIndexLeases=new WeakMap,this.onActionsSlotChange=()=>{this.syncRovingStops()},this.onActionMutations=records=>{this.syncRovingStops()},this.onToolbarFocusIn=event=>{const buttons=this.actionButtons(),path=event.composedPath(),index=buttons.findIndex(button=>path.includes(button));if(index<0){this.focusedAction=void 0;return}const origin=path[0],stop=origin?.nodeType===1&&typeof origin.focus=="function"?origin:buttons[index],toolbar=this.toolbar,repair=stop&&toolbar?captureComposedFocusRepair(stop,toolbar):null;this.focusedAction=stop&&repair?{action:this.actionForStop(stop),index,repair,stop}:void 0,this.syncRovingStops(index)},this.containNativeEvent=event=>{event.stopPropagation()},this.onToolbarFocusOut=event=>{const destination=event.relatedTarget;destination&&destination.nodeType===1&&!composedContains(this,destination)&&(this.focusedAction=void 0)},this.onToolbarKeyDown=event=>{const buttons=this.actionButtons();if(buttons.length===0)return;const originIndex=buttons.findIndex(button=>event.composedPath().includes(button)),currentIndex=originIndex>=0?originIndex:this.activeActionIndex,forward=this.effectiveDirection==="rtl"?"ArrowLeft":"ArrowRight",backward=this.effectiveDirection==="rtl"?"ArrowRight":"ArrowLeft";let next;if(event.key===forward)next=(currentIndex+1)%buttons.length;else if(event.key===backward)next=(currentIndex-1+buttons.length)%buttons.length;else if(event.key==="Home")next=0;else if(event.key==="End")next=buttons.length-1;else return;event.preventDefault(),this.focusedAction=void 0;const generation=this.lifecycleGeneration,owner=this.ownerDocument.defaultView;this.syncRovingStops(next).then(button=>{!button||!this.isCurrentLifecycle(generation,owner)||!button.isConnected||button.ownerDocument!==this.ownerDocument||!this.ownsActionButton(button)||button.focus()})},this.updateToolbarPosition=()=>{const toolbar=this.toolbar,view=this.ownerDocument.defaultView;if(!toolbar||!view)return;const viewport=this.viewportBounds(view),maxEdge=finiteMidpoint(0,Math.min(viewport.width,viewport.height)),gap=finiteRange(this.placementGapPx(),DEFAULT_PLACEMENT_GAP_PX,0,maxEdge),edge=gap,fallbackInline=finiteMidpoint(viewport.left,viewport.right),rect=this.rect?this.safeRect(this.rect):{left:fallbackInline,top:viewport.top,width:0,height:0,right:fallbackInline,bottom:viewport.top,inlineCenter:fallbackInline},doubleEdge=finiteAdd(edge,edge),maxInlineSize=finiteRange(finiteAdd(viewport.width,-doubleEdge),0,0,Number.MAX_VALUE),maxBlockSize=finiteRange(finiteAdd(viewport.height,-doubleEdge),0,0,Number.MAX_VALUE);toolbar.style.setProperty("--_lr-selection-toolbar-max-inline-size",this.px(maxInlineSize)),toolbar.style.setProperty("--_lr-selection-toolbar-max-block-size",this.px(maxBlockSize));const width=finiteRange(toolbar.offsetWidth,0,0,Number.MAX_VALUE),height=finiteRange(toolbar.offsetHeight,0,0,Number.MAX_VALUE),desiredInline=finiteRange(rect.inlineCenter,viewport.left,viewport.left,viewport.right),anchorBlock=finiteRange(rect.top,viewport.top,viewport.top,viewport.bottom),desiredLeft=finiteAdd(desiredInline,-finiteMidpoint(0,width)),minLeft=finiteAdd(viewport.left,edge),maxLeft=Math.max(minLeft,finiteAdd(finiteAdd(viewport.right,-width),-edge)),left=finiteRange(desiredLeft,minLeft,minLeft,maxLeft),above=finiteAdd(finiteAdd(rect.top,-height),-gap),below=finiteAdd(rect.bottom,gap),minTop=finiteAdd(viewport.top,edge),desiredTop=above>=minTop?above:below,maxTop=Math.max(minTop,finiteAdd(finiteAdd(viewport.bottom,-height),-edge)),top=finiteRange(desiredTop,minTop,minTop,maxTop),logicalInline=this.effectiveDirection==="rtl"?finiteAdd(viewport.layoutWidth,-desiredInline):desiredInline;toolbar.style.setProperty("--_lr-selection-toolbar-inline-start",this.px(logicalInline)),toolbar.style.setProperty("--_lr-selection-toolbar-block-start",this.px(anchorBlock)),toolbar.style.setProperty("--_lr-selection-toolbar-inline-shift",this.px(finiteAdd(left,-desiredLeft))),toolbar.style.setProperty("--_lr-selection-toolbar-block-shift",this.px(finiteAdd(top,-finiteAdd(anchorBlock,-height)))),toolbar.toggleAttribute("data-positioned",!0)}}static{this.defaultStrings={...super.defaultStrings,copy:LYRA_DEFAULT_copy,copyFailed:LYRA_DEFAULT_copyFailed,selectionAsk:LYRA_DEFAULT_selectionAsk,selectionCite:LYRA_DEFAULT_selectionCite,selectionQuote:LYRA_DEFAULT_selectionQuote,selectionToolbarLabel:LYRA_DEFAULT_selectionToolbarLabel}}static{this.ownedCollectionProperties=Object.freeze(["anchor","actions"])}static{this.styles=[LyraElement.styles,styles]}static{this.immutableEventDetails=Object.freeze(["lr-selection-action"])}get effectiveActions(){const seen=new Set,actions=[];for(const value of this.actions){if(typeof value!="string"||!SELECTION_ACTIONS.includes(value)||seen.has(value))continue;const action=value;seen.add(action),actions.push(action)}return actions}connectedCallback(){super.connectedCallback(),this.sink??=acquireAnnouncementSink("assertive",{document:this.ownerDocument,source:this}),this.hasUpdated&&(this.syncOpenLifecycle(),this.syncRovingStops())}disconnectedCallback(){this.lifecycleGeneration++,this.rovingGeneration++,this.pendingActionFocus=void 0,this.focusedAction=void 0,this.actionObserver?.disconnect(),this.actionObserver=void 0,this.releaseManagedActionStops(),this.retirePositioning(),this.overlay?.suspend(),this.sink?.release(),this.sink=void 0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.lifecycleGeneration++,this.rovingGeneration++,this.pendingActionFocus=void 0,this.focusedAction=void 0,this.actionObserver?.disconnect(),this.actionObserver=void 0,this.releaseManagedActionStops(),this.retirePositioning()}willUpdate(changed){if(super.willUpdate(changed),this.copyFailed&&(changed.has("text")||changed.has("open")&&this.open)&&(this.copyFailed=!1),!changed.has("actions"))return;const active=deepActiveElementIn(this.ownerDocument),toolbar=this.toolbar;if(!active||!toolbar)return;const index=this.actionButtons().indexOf(active);if(index<0)return;const repair=captureComposedFocusRepair(active,toolbar);repair&&(this.pendingActionFocus={action:this.actionForStop(active),index,repair,stop:active})}updated(changed){if(super.updated(changed),(changed.has("open")||changed.has("text"))&&this.syncOpenLifecycle(),this.open&&this.text&&(changed.has("rect")||changed.has("actions"))&&this.updateToolbarPosition(),this.open&&this.text&&(changed.has("open")||changed.has("text")||changed.has("actions"))){const pending=changed.has("actions")?this.pendingActionFocus:void 0;if(this.pendingActionFocus=void 0,!pending){this.syncRovingStops();return}this.syncRovingStops(pending.index,pending)}}syncOpenLifecycle(){if(!this.isConnected){this.retirePositioning(),this.overlay?.deactivate(),this.overlay=void 0,this.releaseManagedActionStops();return}if(!this.open||!this.text){this.retirePositioning(),this.overlay?.deactivate(),this.overlay=void 0,this.releaseManagedActionStops();return}this.overlay?.isActive()?this.overlay.resume():this.overlay=activateNonmodalOverlay({host:this,panel:()=>this.toolbar??null,onEscape:()=>this.dismiss()}),this.startPositioning()}dismiss(){this.open&&(this.open=!1,this.emit("lr-dismiss",null))}async activate(action){const text=this.text,anchor=this.anchor,generation=this.lifecycleGeneration,owner=this.isConnected?this.ownerDocument.defaultView:null;if(this.copyFailed=!1,action==="copy"){const outcome=await writeClipboardText(owner,text);if(!this.isCurrentLifecycle(generation,owner))return;if(!outcome.ok){this.copyFailed=!0,this.sink?.announce(this.localize("copyFailed")),this.emit("lr-error",null),this.emit("lr-copy-error",outcome);return}this.emit("lr-copy",outcome)}this.isCurrentLifecycle(generation,owner)&&this.emit("lr-selection-action",{action,text,anchor})}isCurrentLifecycle(generation,owner){return generation===this.lifecycleGeneration&&this.isConnected&&this.ownerDocument.defaultView===owner}actionButtons(){const toolbar=this.toolbar;return toolbar?collectComposedFocusTargets(toolbar,{mode:"programmatic",includeRoot:!1}).elements.filter(button=>!!isSemanticActionElement(button)||this.hasAuthoredActionTabIndex(button)):[]}actionRoots(){const builtIn=[...this.renderRoot.querySelectorAll("lr-button[data-action]")],slot=this.renderRoot.querySelector('slot[name="actions"]');return[...builtIn,...slot?.assignedElements({flatten:!0})??[]]}actionForStop(stop){const action=[...this.renderRoot.querySelectorAll("lr-button[data-action]")].find(button=>composedContains(button,stop))?.getAttribute("data-action");return action&&SELECTION_ACTIONS.includes(action)?action:void 0}ownsActionButton(button){return this.actionButtons().includes(button)}async syncRovingStops(preferredIndex=this.activeActionIndex,requestedRepair){const generation=this.lifecycleGeneration,owner=this.ownerDocument.defaultView,request=++this.rovingGeneration;if(!owner||!this.isConnected)return;const roots=this.actionRoots();await Promise.all(roots.map(root=>root.updateComplete)),await Promise.resolve();const buttons=this.actionButtons();if(request!==this.rovingGeneration||!this.isCurrentLifecycle(generation,owner)||buttons.some(button=>!button.isConnected||button.ownerDocument!==this.ownerDocument||!this.ownsActionButton(button)))return;const focused=requestedRepair??this.focusedAction,exactIndex=focused?buttons.indexOf(focused.stop):-1,retainedIndex=exactIndex>=0?exactIndex:focused?.action?buttons.findIndex(button=>this.actionForStop(button)===focused.action):-1,targetIndex=retainedIndex>=0?retainedIndex:Math.min(focused?Math.max(0,focused.index):Math.max(0,preferredIndex),Math.max(0,buttons.length-1));this.setRovingStops(buttons,targetIndex);const target=buttons[targetIndex];return focused&&target!==focused.stop&&(applyComposedFocusRepair(focused.repair,target??this.toolbar??null),this.focusedAction===focused&&(this.focusedAction=void 0)),target}hasAuthoredActionTabIndex(button){const lease=this.actionTabIndexLeases.get(button);return lease&&lease.lastManaged!==null&&button.getAttribute("tabindex")===lease.lastManaged?lease.authored!==null:button.hasAttribute("tabindex")}writeActionTabIndex(button,tabIndex){let lease=this.actionTabIndexLeases.get(button);if(lease||(lease={authored:button.getAttribute("tabindex"),lastManaged:null,consumerOwns:!1},this.actionTabIndexLeases.set(button,lease)),lease.consumerOwns||lease.lastManaged!==null&&button.getAttribute("tabindex")!==lease.lastManaged){lease.consumerOwns=!0;return}button.tabIndex=tabIndex,lease.lastManaged=button.getAttribute("tabindex")}releaseActionTabIndex(button){const lease=this.actionTabIndexLeases.get(button);lease&&(!lease.consumerOwns&&button.getAttribute("tabindex")===lease.lastManaged&&(lease.authored===null?button.removeAttribute("tabindex"):button.setAttribute("tabindex",lease.authored)),this.actionTabIndexLeases.delete(button))}releaseManagedActionStops(){for(const button of this.managedActionStops)this.releaseActionTabIndex(button);this.managedActionStops.clear()}setRovingStops(buttons,index){this.actionObserver?.disconnect();for(const previous of this.managedActionStops)buttons.includes(previous)||this.releaseActionTabIndex(previous);this.activeActionIndex=buttons.length===0?0:Math.min(Math.max(0,index),buttons.length-1),buttons.forEach((button,buttonIndex)=>{this.writeActionTabIndex(button,buttonIndex===this.activeActionIndex?0:-1)}),this.managedActionStops=new Set(buttons),this.observeActionChanges(buttons)}observeActionChanges(buttons){this.actionObserver?.disconnect();const Observer=this.ownerDocument.defaultView?.MutationObserver,toolbar=this.toolbar;if(!Observer||!toolbar||!this.isConnected){this.actionObserver=void 0;return}const observer=new Observer(this.onActionMutations),roots=new Set([toolbar,...this.actionRoots()]);for(const button of buttons){let current=button;for(;current&¤t!==this;){const root=current.getRootNode();root.nodeType===11&&"host"in root&&roots.add(root),current=composedParentElement(current)}}const 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.actionObserver=observer}actionPartNames(action){const parts=["action"];switch(action){case"ask":parts.push("action-ask");break;case"quote":parts.push("action-quote");break;case"cite":parts.push("action-cite");break;case"copy":parts.push("action-copy");break}return parts.join(" ")}actionLabel(action){switch(action){case"ask":return this.localize("selectionAsk");case"quote":return this.localize("selectionQuote");case"cite":return this.localize("selectionCite");case"copy":return this.localize(this.copyFailed?"copyFailed":"copy")}}safeRect(rect){const left=finiteRange(rect.left,0,-Number.MAX_VALUE,Number.MAX_VALUE),top=finiteRange(rect.top,0,-Number.MAX_VALUE,Number.MAX_VALUE),width=finiteRange(rect.width,0,0,Number.MAX_VALUE),height=finiteRange(rect.height,0,0,Number.MAX_VALUE),right=finiteAdd(left,width),bottom=finiteAdd(top,height);return{left,top,width,height,right,bottom,inlineCenter:finiteMidpoint(left,right)}}viewportBounds(view){const layoutWidth=finiteRange(view.innerWidth,0,0,Number.MAX_VALUE),layoutHeight=finiteRange(view.innerHeight,0,0,Number.MAX_VALUE),viewport=view.visualViewport,left=finiteRange(viewport?.offsetLeft??0,0,0,Number.MAX_VALUE),top=finiteRange(viewport?.offsetTop??0,0,0,Number.MAX_VALUE),width=finiteRange(viewport?.width??layoutWidth,layoutWidth,0,Number.MAX_VALUE),height=finiteRange(viewport?.height??layoutHeight,layoutHeight,0,Number.MAX_VALUE);return{left,top,width,height,right:finiteAdd(left,width),bottom:finiteAdd(top,height),layoutWidth}}px(value){return`${finiteRange(value,0,-Number.MAX_VALUE,Number.MAX_VALUE)}px`}coordinates(){const view=this.ownerDocument.defaultView,viewport=view?this.viewportBounds(view):{left:0,top:0,width:0,height:0,right:0,bottom:0,layoutWidth:0},fallbackInline=finiteMidpoint(viewport.left,viewport.right),rect=this.rect?this.safeRect(this.rect):{left:fallbackInline,top:viewport.top,width:0,height:0,right:fallbackInline,bottom:viewport.top,inlineCenter:fallbackInline},desiredInline=finiteRange(rect.inlineCenter,viewport.left,viewport.left,viewport.right),block=finiteRange(rect.top,viewport.top,viewport.top,viewport.bottom),logicalInline=this.effectiveDirection==="rtl"?finiteAdd(viewport.layoutWidth,-desiredInline):desiredInline;return{"--_lr-selection-toolbar-inline-start":this.px(logicalInline),"--_lr-selection-toolbar-block-start":this.px(block)}}placementGapPx(){const computed=this.ownerDocument.defaultView?.getComputedStyle(this),publicValue=resolveCssLength(computed?.getPropertyValue("--lr-selection-toolbar-placement-gap").trim()??"",{host:this});if(publicValue!==void 0)return finiteRange(publicValue,DEFAULT_PLACEMENT_GAP_PX,0,Number.MAX_VALUE);const tokenValue=resolveCssLength(computed?.getPropertyValue("--lr-space-s").trim()??"",{host:this});return finiteRange(tokenValue??DEFAULT_PLACEMENT_GAP_PX,DEFAULT_PLACEMENT_GAP_PX,0,Number.MAX_VALUE)}startPositioning(){this.retirePositioning();const toolbar=this.toolbar,view=this.ownerDocument.defaultView;if(!toolbar||!view||!this.isConnected)return;const generation=this.positioningGeneration,update=()=>{generation!==this.positioningGeneration||!this.isConnected||this.ownerDocument.defaultView!==view||this.toolbar!==toolbar||this.updateToolbarPosition()};let resizeFrame;const scheduleResizeUpdate=()=>{resizeFrame===void 0&&(resizeFrame=view.requestAnimationFrame(()=>{resizeFrame=void 0,update()}))},observer=typeof view.ResizeObserver>"u"?void 0:new view.ResizeObserver(scheduleResizeUpdate);observer?.observe(toolbar),view.addEventListener("resize",update),view.visualViewport?.addEventListener("resize",update),view.visualViewport?.addEventListener("scroll",update),update(),this.stopPositioning=()=>{observer?.disconnect(),resizeFrame!==void 0&&view.cancelAnimationFrame(resizeFrame),resizeFrame=void 0,view.removeEventListener("resize",update),view.visualViewport?.removeEventListener("resize",update),view.visualViewport?.removeEventListener("scroll",update)}}retirePositioning(){this.positioningGeneration++;const stop=this.stopPositioning;this.stopPositioning=void 0,stop?.()}render(){if(!this.open||!this.text)return html`${nothing}`;const label=this.accessibleLabel??(this.label==null?this.localize("selectionToolbarLabel"):this.label);return html`<div
|
|
2
2
|
part="toolbar"
|
|
3
3
|
role="toolbar"
|
|
4
4
|
aria-label=${label}
|
|
@@ -11,7 +11,9 @@ export interface LyraVoiceCatalogEntry extends LyraCatalogEntry{
|
|
|
11
11
|
/** Rendered (with `description`) as a quiet `[part="option-meta"]` second line. */
|
|
12
12
|
language?:string;description?:string;
|
|
13
13
|
/** A sample-audio URL; validated via `safeMediaSrc()` before ever reaching an `<audio src>`. */
|
|
14
|
-
previewUrl?:string;
|
|
14
|
+
previewUrl?:string;
|
|
15
|
+
/** Optional literal icon hint (for example, an emoji), rendered decoratively before `label`. */
|
|
16
|
+
icon?:string;}export type{LyraCatalog,LyraCatalogEntry}from'../../../internal/catalog-picker.js';
|
|
15
17
|
/** Direction reported by the free-text input's native selection APIs. */
|
|
16
18
|
export type LyraVoicePickerSelectionDirection=LyraSelectionDirection;export interface LyraVoicePickerEventMap{'lr-invalid':CustomEvent<null>;'lr-change':CustomEvent<{value:string;inCatalog:boolean;}>;'lr-preview-request':CustomEvent<{voiceId:string;previewUrl?:string;}>;'lr-preview-change':CustomEvent<{voiceId:string|null;}>;input:Event;change:Event;blur:FocusEvent;focus:FocusEvent;}
|
|
17
19
|
/**
|
|
@@ -53,6 +55,11 @@ export type LyraVoicePickerSelectionDirection=LyraSelectionDirection;export inte
|
|
|
53
55
|
* previewable so a listener can hear why it is excluded. Omitted or `false` renders the row exactly
|
|
54
56
|
* as before this field existed.
|
|
55
57
|
*
|
|
58
|
+
* A catalog row can also include a literal `icon` (for example, an emoji), rendered decoratively
|
|
59
|
+
* as the leading `[part="option-icon"]`, matching `lr-model-select`'s identical
|
|
60
|
+
* `LyraModelCatalogEntry.icon` field. It is presentation only: the row's accessible name remains
|
|
61
|
+
* its `label`.
|
|
62
|
+
*
|
|
56
63
|
* @customElement lr-voice-picker
|
|
57
64
|
* @slot label - Custom visible label content.
|
|
58
65
|
* @slot hint - Custom hint content.
|
|
@@ -97,6 +104,7 @@ export type LyraVoicePickerSelectionDirection=LyraSelectionDirection;export inte
|
|
|
97
104
|
* @csspart provider-badge - The optional leading `provider` label.
|
|
98
105
|
* @csspart listbox - The options popover.
|
|
99
106
|
* @csspart option - An option row.
|
|
107
|
+
* @csspart option-icon - An option row's optional decorative leading icon.
|
|
100
108
|
* @csspart option-label - An option row's label/meta wrapper.
|
|
101
109
|
* @csspart option-meta - An option row's quiet `language · description` second line.
|
|
102
110
|
* @csspart option-badge - The "not in catalog" badge on a synthetic stale-value row.
|
|
@@ -190,7 +198,10 @@ size:LyraSize;private get activeIndex();private get query();private touched;priv
|
|
|
190
198
|
/** The voiceId currently playing via the internal `<audio>` (`null` when nothing is). */
|
|
191
199
|
private previewingId;private internals;private validityController;
|
|
192
200
|
/** Consumer-supplied validation message reflected through `custom-error`. */
|
|
193
|
-
customError:string|null;private listId;private controlId;
|
|
201
|
+
customError:string|null;private listId;private controlId;
|
|
202
|
+
/** Whether a host `aria-describedby` was last reflected onto the active control -- see
|
|
203
|
+
* `checkbox.class.ts`'s identically-named field for why the sync call must stay guarded. */
|
|
204
|
+
private hasSyncedDescribedByElements;private audioEl?;
|
|
194
205
|
/** The target whose `play()` promise has not fulfilled yet. It never drives public playing
|
|
195
206
|
* state; it exists solely to cancel/supersede stale async completions. */
|
|
196
207
|
private pendingPreviewId;private previewGeneration;private _catalog?;private _fieldsetDisabled;private _name;private _disabled;private _required;private transferControlFocus;private readonly catalogPicker;constructor();get form():HTMLFormElement|null;set form(owner:FormOwnerValue);
|