@aceshooting/lyra-ui 14.0.0 → 14.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +149 -19
- package/custom-elements.json +1 -1
- package/dist/components/agent-tools/commit-card/commit-card.class.d.ts +3 -1
- package/dist/components/agent-tools/commit-card/commit-card.class.js +2 -2
- package/dist/components/agent-tools/compare-panel/compare-panel.class.d.ts +2 -1
- package/dist/components/agent-tools/compare-panel/compare-panel.styles.js +1 -1
- package/dist/components/agent-tools/prompt-studio/prompt-studio.class.d.ts +6 -2
- package/dist/components/agent-tools/prompt-studio/prompt-studio.class.js +4 -4
- package/dist/components/agent-tools/result-card/result-card.class.d.ts +1 -1
- package/dist/components/agent-tools/result-card/result-card.class.js +1 -1
- package/dist/components/agent-tools/result-card/result-field.class.d.ts +1 -1
- package/dist/components/agent-tools/result-card/result-field.class.js +1 -1
- package/dist/components/agent-tools/stack-trace/stack-trace.class.d.ts +1 -1
- package/dist/components/agent-tools/stack-trace/stack-trace.class.js +1 -1
- package/dist/components/agent-tools/terminal/terminal.class.d.ts +1 -1
- package/dist/components/agent-tools/terminal/terminal.class.js +2 -2
- package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.d.ts +2 -2
- package/dist/components/agent-tools/tool-call-chip/tool-call-chip.class.js +1 -1
- package/dist/components/agent-tools/tool-param-form/tool-param-form.class.js +1 -1
- package/dist/components/agent-tools/tool-result-dialog/tool-result-dialog.class.js +2 -2
- package/dist/components/agent-tools/tool-select-dialog/tool-select-dialog.class.js +4 -4
- package/dist/components/agent-tools/trace-tree/span.d.ts +3 -1
- package/dist/components/agent-tools/trace-tree/span.js +1 -1
- package/dist/components/charts/chart/box-plot.class.d.ts +2 -0
- package/dist/components/charts/chart/box-plot.class.js +1 -1
- package/dist/components/charts/chart/chart.class.d.ts +6 -1
- package/dist/components/charts/chart/chart.class.js +1 -1
- package/dist/components/charts/chart/lite-chart.class.d.ts +20 -11
- package/dist/components/charts/chart/lite-chart.class.js +10 -8
- package/dist/components/conversation/chat-message/chat-message.class.d.ts +4 -3
- package/dist/components/conversation/code-block/code-block-core.class.d.ts +4 -3
- package/dist/components/conversation/code-block/code-block-core.class.js +1 -1
- package/dist/components/conversation/code-block/code-block-shared.d.ts +3 -3
- package/dist/components/conversation/code-block/code-block-shared.js +2 -2
- package/dist/components/conversation/code-block/code-block.class.d.ts +4 -3
- package/dist/components/conversation/code-block/code-block.class.js +1 -1
- package/dist/components/conversation/code-block/shiki-types.d.ts +2 -0
- package/dist/components/conversation/code-block/shiki-types.js +1 -1
- package/dist/components/conversation/conversation-item/conversation-item.class.js +1 -1
- package/dist/components/conversation/markdown/markdown-base.class.js +1 -1
- package/dist/components/conversation/markdown/markdown-core.class.d.ts +1 -1
- package/dist/components/conversation/markdown/markdown.class.d.ts +1 -1
- package/dist/components/conversation/message-actions/message-actions.class.d.ts +2 -0
- package/dist/components/conversation/message-actions/message-actions.class.js +1 -1
- package/dist/components/conversation/message-feedback/message-feedback.class.d.ts +3 -1
- package/dist/components/conversation/message-feedback/message-feedback.class.js +2 -2
- package/dist/components/conversation/message-parts/message-parts.class.d.ts +3 -0
- package/dist/components/conversation/model-select/model-select.class.js +3 -3
- package/dist/components/conversation/thread-list/thread-list.class.js +1 -1
- package/dist/components/conversation/transcript-feed/transcript-feed.class.d.ts +2 -0
- package/dist/components/conversation/transcript-feed/transcript-feed.class.js +1 -1
- package/dist/components/conversation/typing-indicator/typing-indicator.class.d.ts +2 -1
- package/dist/components/conversation/typing-indicator/typing-indicator.class.js +1 -1
- package/dist/components/conversation/usage-badge/usage-badge-overlay-runtime.d.ts +3 -0
- package/dist/components/conversation/usage-badge/usage-badge-overlay-runtime.js +1 -0
- package/dist/components/conversation/usage-badge/usage-badge.class.d.ts +4 -2
- package/dist/components/conversation/usage-badge/usage-badge.class.js +1 -1
- package/dist/components/conversation/voice-picker/voice-picker.class.js +3 -3
- package/dist/components/conversation/widget-renderer/resolve.d.ts +4 -6
- package/dist/components/conversation/widget-renderer/resolve.js +1 -1
- package/dist/components/data/calendar/calendar.class.d.ts +6 -3
- package/dist/components/data/calendar/calendar.class.js +1 -1
- package/dist/components/data/calendar/calendar.styles.js +1 -1
- package/dist/components/data/condition-builder/condition-builder.class.d.ts +3 -1
- package/dist/components/data/condition-builder/condition-builder.class.js +15 -1
- package/dist/components/data/context-meter/context-meter.class.js +2 -2
- package/dist/components/data/data-grid/data-grid.class.d.ts +6 -2
- package/dist/components/data/data-grid/data-grid.class.js +1 -1
- package/dist/components/data/document-library/document-library.class.d.ts +5 -2
- package/dist/components/data/document-library/document-library.class.js +1 -1
- package/dist/components/data/file-tree/file-tree.class.d.ts +2 -1
- package/dist/components/data/file-tree/file-tree.class.js +1 -1
- package/dist/components/data/flow-canvas/flow-canvas.class.d.ts +5 -2
- package/dist/components/data/flow-canvas/flow-canvas.styles.js +1 -1
- package/dist/components/data/flow-canvas/flow-model.js +1 -1
- package/dist/components/data/flow-canvas/flow-types.d.ts +2 -1
- package/dist/components/data/funnel/funnel.class.d.ts +1 -0
- package/dist/components/data/funnel/funnel.class.js +1 -1
- package/dist/components/data/gauge/gauge.class.d.ts +4 -1
- package/dist/components/data/gauge/gauge.class.js +6 -6
- package/dist/components/data/graph-query-builder/graph-query-builder.class.d.ts +5 -2
- package/dist/components/data/graph-query-builder/graph-query-builder.class.js +15 -1
- package/dist/components/data/heatmap/heatmap.class.d.ts +7 -4
- package/dist/components/data/heatmap/heatmap.class.js +1 -1
- package/dist/components/data/sparkline/sparkline.class.d.ts +2 -1
- package/dist/components/data/sparkline/sparkline.class.js +1 -1
- package/dist/components/data/stat/stat.class.d.ts +6 -2
- package/dist/components/data/stat/stat.class.js +1 -1
- package/dist/components/data/table/table.class.d.ts +5 -2
- package/dist/components/data/table/table.class.js +2 -2
- package/dist/components/data/timeline/timeline.class.d.ts +7 -2
- package/dist/components/data/timeline/timeline.class.js +1 -1
- package/dist/components/data/timeline/timeline.styles.js +1 -1
- package/dist/components/data/tree/tree-item.class.d.ts +3 -1
- package/dist/components/data/tree/tree-item.class.js +1 -1
- package/dist/components/data/tree/tree.class.d.ts +4 -1
- package/dist/components/data/tree/tree.class.js +1 -1
- package/dist/components/data/word-cloud/word-cloud-layout.d.ts +2 -1
- package/dist/components/data/word-cloud/word-cloud-layout.js +1 -1
- package/dist/components/data/word-cloud/word-cloud.class.d.ts +2 -1
- package/dist/components/forms/button/button.class.d.ts +5 -3
- package/dist/components/forms/button/button.class.js +1 -1
- package/dist/components/forms/checkbox/checkbox.class.d.ts +3 -0
- package/dist/components/forms/checkbox/checkbox.class.js +1 -1
- package/dist/components/forms/code-editor/code-editor.class.d.ts +11 -3
- package/dist/components/forms/code-editor/code-editor.class.js +6 -7
- package/dist/components/forms/code-editor/code-editor.styles.js +1 -1
- package/dist/components/forms/color-picker/color-picker.class.d.ts +5 -1
- package/dist/components/forms/color-picker/color-picker.class.js +4 -4
- package/dist/components/forms/combobox/combobox.class.d.ts +19 -8
- package/dist/components/forms/combobox/combobox.class.js +3 -3
- package/dist/components/forms/combobox/option.class.d.ts +4 -0
- package/dist/components/forms/combobox/option.class.js +2 -2
- package/dist/components/forms/date-picker/calendar-core.d.ts +1 -1
- package/dist/components/forms/date-picker/calendar-core.js +1 -1
- package/dist/components/forms/date-picker/date-input.class.d.ts +20 -10
- package/dist/components/forms/date-picker/date-input.class.js +4 -4
- package/dist/components/forms/date-picker/date-picker.class.d.ts +24 -13
- package/dist/components/forms/date-picker/date-picker.class.js +7 -7
- package/dist/components/forms/date-picker/date-picker.styles.js +1 -1
- package/dist/components/forms/emoji-picker/emoji-picker.class.d.ts +11 -3
- package/dist/components/forms/emoji-picker/emoji-picker.class.js +3 -3
- package/dist/components/forms/emoji-picker/emoji-types.d.ts +2 -2
- package/dist/components/forms/icon-button/icon-button.class.d.ts +4 -2
- package/dist/components/forms/icon-button/icon-button.class.js +1 -1
- package/dist/components/forms/input/input.class.d.ts +5 -1
- package/dist/components/forms/input/input.class.js +1 -1
- package/dist/components/forms/input/native-time-input.class.d.ts +3 -0
- package/dist/components/forms/input/number-input.class.d.ts +3 -0
- package/dist/components/forms/input/time-input.class.d.ts +3 -0
- package/dist/components/forms/input/time-input.class.js +1 -1
- package/dist/components/forms/locale-picker/locale-picker.class.d.ts +5 -1
- package/dist/components/forms/locale-picker/locale-picker.class.js +2 -2
- package/dist/components/forms/otp-input/otp-input.class.d.ts +5 -1
- package/dist/components/forms/otp-input/otp-input.class.js +1 -1
- package/dist/components/forms/phone-input/phone-input.class.d.ts +21 -8
- package/dist/components/forms/phone-input/phone-input.class.js +1 -1
- package/dist/components/forms/radio/radio-button.class.d.ts +4 -0
- package/dist/components/forms/radio/radio-group.class.d.ts +4 -1
- package/dist/components/forms/radio/radio-group.class.js +1 -1
- package/dist/components/forms/radio/radio.class.d.ts +6 -2
- package/dist/components/forms/radio/radio.class.js +1 -1
- package/dist/components/forms/rubric-form/rubric-form.class.d.ts +7 -1
- package/dist/components/forms/rubric-form/rubric-form.class.js +3 -3
- package/dist/components/forms/select/select.class.d.ts +8 -2
- package/dist/components/forms/select/select.class.js +2 -2
- package/dist/components/forms/slider/slider.class.d.ts +12 -6
- package/dist/components/forms/slider/slider.class.js +2 -2
- package/dist/components/forms/swatch-picker/swatch-picker.class.d.ts +4 -0
- package/dist/components/forms/swatch-picker/swatch-picker.class.js +1 -1
- package/dist/components/forms/switch/switch.class.d.ts +5 -1
- package/dist/components/forms/switch/switch.class.js +1 -1
- package/dist/components/forms/textarea/textarea.class.d.ts +3 -0
- package/dist/components/forms/textarea/textarea.class.js +1 -1
- package/dist/components/forms/time-range/time-range.class.d.ts +3 -0
- package/dist/components/forms/time-range/time-range.class.js +1 -1
- package/dist/components/forms/token-input/token-input.class.d.ts +8 -2
- package/dist/components/forms/token-input/token-input.class.js +2 -2
- package/dist/components/forms/token-input/token-input.styles.js +1 -1
- package/dist/components/layout/app-rail/app-rail.class.d.ts +3 -1
- package/dist/components/layout/app-rail/app-rail.class.js +1 -1
- package/dist/components/layout/carousel/carousel.class.d.ts +3 -2
- package/dist/components/layout/carousel/carousel.class.js +1 -1
- package/dist/components/layout/command-palette/command-palette.class.js +1 -1
- package/dist/components/layout/dashboard-grid/dashboard-grid.class.d.ts +2 -0
- package/dist/components/layout/dashboard-grid/dashboard-grid.class.js +1 -1
- package/dist/components/layout/details/details.class.d.ts +3 -3
- package/dist/components/layout/filter-bar/filter-bar.class.d.ts +3 -1
- package/dist/components/layout/filter-bar/filter-bar.class.js +1 -1
- package/dist/components/layout/menu/menu-label.class.d.ts +3 -3
- package/dist/components/layout/menu/menu.class.d.ts +4 -1
- package/dist/components/layout/menu/menu.class.js +1 -1
- package/dist/components/layout/multi-split/multi-split.class.d.ts +9 -3
- package/dist/components/layout/multi-split/multi-split.class.js +1 -1
- package/dist/components/layout/multi-split/multi-split.styles.js +1 -1
- package/dist/components/layout/reorder-list/reorder-item.class.d.ts +2 -1
- package/dist/components/layout/reorder-list/reorder-item.class.js +1 -1
- package/dist/components/layout/reorder-list/reorder-list.class.js +1 -1
- package/dist/components/layout/reorder-list/reorder-owner.js +1 -1
- package/dist/components/layout/split-panel/split-panel.class.d.ts +2 -1
- package/dist/components/layout/split-panel/split-panel.class.js +1 -1
- package/dist/components/layout/tab-group/tab-group.class.d.ts +3 -1
- package/dist/components/layout/tab-group/tab-group.class.js +1 -1
- package/dist/components/layout/widget/widget.class.d.ts +6 -2
- package/dist/components/layout/widget/widget.class.js +1 -1
- package/dist/components/media/animation/animation.class.d.ts +3 -2
- package/dist/components/media/animation/animation.class.js +1 -1
- package/dist/components/media/attachment-chip/attachment-chip.class.d.ts +4 -3
- package/dist/components/media/attachment-chip/attachment-chip.class.js +1 -1
- package/dist/components/media/av-player/av-metadata.d.ts +3 -2
- package/dist/components/media/av-player/av-player.class.d.ts +4 -3
- package/dist/components/media/av-player/av-player.class.js +3 -3
- package/dist/components/media/av-player/av-player.styles.js +1 -1
- package/dist/components/media/avatar/avatar.class.d.ts +2 -1
- package/dist/components/media/avatar/avatar.class.js +1 -1
- package/dist/components/media/file-input/file-input.class.d.ts +4 -2
- package/dist/components/media/file-input/file-input.class.js +1 -1
- package/dist/components/media/file-input/file-input.styles.js +1 -1
- package/dist/components/media/image-viewer/image-viewer.class.d.ts +2 -1
- package/dist/components/media/image-viewer/image-viewer.class.js +1 -1
- package/dist/components/media/image-viewer/image-viewer.styles.js +1 -1
- package/dist/components/media/map/map.class.d.ts +5 -3
- package/dist/components/media/map/map.class.js +1 -1
- package/dist/components/media/map/map.styles.js +1 -1
- package/dist/components/media/media-card/media-card.class.d.ts +1 -1
- package/dist/components/media/media-card/media-card.class.js +1 -1
- package/dist/components/media/pan-zoom/pan-zoom.class.js +1 -1
- package/dist/components/media/sequence-playback/sequence-playback.class.d.ts +1 -1
- package/dist/components/media/sequence-playback/sequence-playback.styles.js +1 -1
- package/dist/components/media/video/video.class.d.ts +2 -1
- package/dist/components/media/video/video.styles.js +1 -1
- package/dist/components/media/zoomable-frame/zoomable-frame.class.d.ts +3 -2
- package/dist/components/media/zoomable-frame/zoomable-frame.class.js +2 -2
- package/dist/components/overlays/chip/chip-group.class.d.ts +2 -0
- package/dist/components/overlays/chip/chip-group.class.js +1 -1
- package/dist/components/overlays/dialog/dialog.class.d.ts +2 -0
- package/dist/components/overlays/dialog/dialog.class.js +1 -1
- package/dist/components/overlays/empty/empty.class.d.ts +2 -0
- package/dist/components/overlays/empty/empty.class.js +1 -1
- package/dist/components/overlays/kbd/kbd.class.d.ts +2 -0
- package/dist/components/overlays/kbd/kbd.class.js +1 -1
- package/dist/components/overlays/overlay/popover.class.d.ts +3 -1
- package/dist/components/overlays/overlay/popover.class.js +1 -1
- package/dist/components/overlays/overlay/tooltip.class.d.ts +3 -1
- package/dist/components/overlays/overlay/tooltip.class.js +1 -1
- package/dist/components/overlays/rating/rating.class.d.ts +2 -0
- package/dist/components/overlays/rating/rating.class.js +1 -1
- package/dist/components/retrieval/embedding-explorer/embedding-explorer.class.js +2 -2
- package/dist/components/retrieval/entity-card/entity-card.class.d.ts +5 -2
- package/dist/components/retrieval/entity-card/entity-card.class.js +1 -1
- package/dist/components/retrieval/entity-chip/entity-chip.class.d.ts +4 -2
- package/dist/components/retrieval/entity-chip/entity-chip.class.js +1 -1
- package/dist/components/retrieval/graph/graph-canvas.js +1 -1
- package/dist/components/retrieval/graph/graph.class.d.ts +9 -7
- package/dist/components/retrieval/graph/graph.class.js +1 -1
- package/dist/components/retrieval/grounding-summary/grounding-summary.class.d.ts +1 -3
- package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.d.ts +2 -0
- package/dist/components/retrieval/ingestion-queue/ingestion-queue.class.js +1 -1
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.d.ts +3 -2
- package/dist/components/retrieval/knowledge-graph-explorer/knowledge-graph-explorer.class.js +7 -3
- package/dist/components/retrieval/provenance-panel/provenance-panel.class.d.ts +2 -1
- package/dist/components/retrieval/provenance-panel/provenance-panel.class.js +1 -1
- package/dist/components/retrieval/source-picker/source-picker.class.d.ts +2 -1
- package/dist/components/retrieval/source-picker/source-picker.class.js +1 -1
- package/dist/components/utility/format/format-number.class.d.ts +3 -1
- package/dist/components/utility/format/format-options.js +1 -1
- package/dist/components/utility/json-viewer/json-viewer.class.d.ts +3 -2
- package/dist/components/utility/json-viewer/json-viewer.class.js +2 -2
- package/dist/components/utility/known-date/known-date.class.d.ts +9 -5
- package/dist/components/utility/known-date/known-date.class.js +2 -2
- package/dist/components/utility/known-date/known-date.styles.js +1 -1
- package/dist/components/utility/mention-popover/mention-popover.class.d.ts +3 -1
- package/dist/components/utility/mention-popover/mention-popover.class.js +1 -1
- package/dist/components/utility/poll-status/poll-status.class.d.ts +3 -0
- package/dist/components/utility/poll-status/poll-status.styles.js +1 -1
- package/dist/components/viewers/calendar-viewer/calendar-viewer.class.d.ts +1 -0
- package/dist/components/viewers/calendar-viewer/calendar-viewer.class.js +1 -1
- package/dist/components/viewers/dataset-viewer/dataset-viewer.class.d.ts +2 -1
- package/dist/components/viewers/dataset-viewer/dataset-viewer.styles.js +1 -1
- package/dist/components/viewers/document-preview/document-preview.class.d.ts +4 -2
- package/dist/components/viewers/document-preview/document-preview.class.js +1 -1
- package/dist/components/viewers/document-preview/document-preview.styles.js +1 -1
- package/dist/components/viewers/document-viewer/document-viewer.class.d.ts +3 -2
- package/dist/components/viewers/document-viewer/document-viewer.class.js +2 -2
- package/dist/components/viewers/document-viewer/registry-ownership.d.ts +1 -0
- package/dist/components/viewers/document-viewer/registry-ownership.js +1 -0
- package/dist/components/viewers/document-viewer/registry.js +1 -1
- package/dist/components/viewers/ebook-viewer/ebook-viewer.class.d.ts +7 -1
- package/dist/components/viewers/ebook-viewer/ebook-viewer.class.js +1 -1
- package/dist/components/viewers/email-viewer/email-viewer.class.d.ts +2 -1
- package/dist/components/viewers/email-viewer/email-viewer.class.js +2 -2
- package/dist/components/viewers/include/include-resource.js +1 -1
- package/dist/components/viewers/include/include.class.d.ts +3 -1
- package/dist/components/viewers/notebook-viewer/notebook-viewer.class.d.ts +4 -2
- package/dist/components/viewers/notebook-viewer/notebook-viewer.class.js +4 -4
- package/dist/components/viewers/notebook-viewer/notebook-viewer.styles.js +1 -1
- package/dist/components/viewers/passive-markup.js +1 -1
- package/dist/components/viewers/svg-viewer/svg-viewer.class.d.ts +2 -1
- package/dist/components/viewers/svg-viewer/svg-viewer.styles.js +1 -1
- package/dist/components/viewers/xml-viewer/xml-viewer.class.d.ts +2 -1
- package/dist/components/viewers/xml-viewer/xml-viewer.class.js +1 -1
- package/dist/components/viewers/xml-viewer/xml-viewer.js +1 -1
- package/dist/custom-elements-jsx.d.ts +1 -1
- package/dist/internal/aria-reflection.js +1 -1
- package/dist/internal/catalog-picker.js +1 -1
- package/dist/internal/default-strings.generated.d.ts +1 -1
- package/dist/internal/default-strings.generated.js +1 -1
- package/dist/internal/dev-mode-attribute-warning.d.ts +3 -0
- package/dist/internal/dev-mode-attribute-warning.js +1 -1
- package/dist/internal/form-associated.js +1 -1
- package/dist/internal/localization-types.d.ts +1 -1
- package/dist/internal/localization.js +1 -1
- package/dist/internal/lyra-element.js +1 -1
- package/dist/internal/native-control-description.d.ts +7 -0
- package/dist/internal/native-control-description.js +1 -0
- package/dist/internal/option-selection.js +1 -1
- package/dist/internal/overlay-order.d.ts +6 -0
- package/dist/internal/overlay-order.js +1 -0
- package/dist/internal/overlay-stack.d.ts +1 -1
- package/dist/internal/overlay-stack.js +1 -1
- package/dist/internal/package-metadata.d.ts +1 -1
- package/dist/internal/package-metadata.js +1 -1
- package/dist/internal/positioner.d.ts +5 -4
- package/dist/internal/reactive-property-writes.d.ts +1 -0
- package/dist/internal/reactive-property-writes.js +1 -0
- package/dist/internal/svg-title.d.ts +3 -0
- package/dist/internal/svg-title.js +1 -0
- package/dist/svelte.d.ts +1 -1
- package/dist/translations/ar.js +1 -1
- package/dist/translations/de.js +1 -1
- package/dist/translations/es.js +1 -1
- package/dist/translations/fa.js +1 -1
- package/dist/translations/fr.js +1 -1
- package/dist/translations/he.js +1 -1
- package/dist/translations/ja.js +1 -1
- package/dist/translations/pt-BR.js +1 -1
- package/dist/translations/ru.js +1 -1
- package/dist/translations/zh-CN.js +1 -1
- package/dist/vue.d.ts +1 -1
- package/llms/components/lr-accordion-item.md +4 -0
- package/llms/components/lr-accordion.md +4 -0
- package/llms/components/lr-agent-trace.md +3 -0
- package/llms/components/lr-animation.md +4 -0
- package/llms/components/lr-app-rail-item.md +4 -2
- package/llms/components/lr-app-rail.md +4 -2
- package/llms/components/lr-attachment-chip.md +6 -0
- package/llms/components/lr-av-player.md +14 -0
- package/llms/components/lr-avatar.md +4 -0
- package/llms/components/lr-box-plot.md +6 -0
- package/llms/components/lr-button.md +11 -3
- package/llms/components/lr-calendar-viewer.md +4 -0
- package/llms/components/lr-calendar.md +5 -0
- package/llms/components/lr-carousel.md +5 -0
- package/llms/components/lr-chart.md +13 -4
- package/llms/components/lr-chat-message.md +4 -0
- package/llms/components/lr-checkbox.md +3 -0
- package/llms/components/lr-chip-group.md +3 -0
- package/llms/components/lr-chip.md +3 -0
- package/llms/components/lr-code-block-core.md +16 -4
- package/llms/components/lr-code-block.md +7 -0
- package/llms/components/lr-code-editor.md +18 -5
- package/llms/components/lr-color-picker.md +9 -0
- package/llms/components/lr-combobox.md +35 -4
- package/llms/components/lr-command-palette.md +4 -0
- package/llms/components/lr-commit-card.md +3 -0
- package/llms/components/lr-compare-panel.md +7 -0
- package/llms/components/lr-condition-builder.md +5 -0
- package/llms/components/lr-conversation-item.md +3 -0
- package/llms/components/lr-copy-button.md +6 -0
- package/llms/components/lr-dashboard-grid.md +5 -0
- package/llms/components/lr-data-grid.md +11 -1
- package/llms/components/lr-dataset-viewer.md +3 -2
- package/llms/components/lr-date-input.md +46 -6
- package/llms/components/lr-date-picker.md +46 -6
- package/llms/components/lr-details.md +4 -0
- package/llms/components/lr-dialog.md +4 -0
- package/llms/components/lr-document-library.md +4 -0
- package/llms/components/lr-document-preview.md +7 -1
- package/llms/components/lr-document-viewer.md +9 -3
- package/llms/components/lr-dropdown-item.md +4 -0
- package/llms/components/lr-dropdown.md +3 -0
- package/llms/components/lr-ebook-viewer.md +4 -0
- package/llms/components/lr-email-viewer.md +5 -0
- package/llms/components/lr-emoji-picker.md +17 -3
- package/llms/components/lr-empty.md +3 -0
- package/llms/components/lr-entity-card.md +3 -0
- package/llms/components/lr-entity-chip.md +4 -0
- package/llms/components/lr-file-input.md +7 -0
- package/llms/components/lr-file-tree.md +5 -1
- package/llms/components/lr-filter-bar.md +5 -0
- package/llms/components/lr-flow-canvas.md +8 -1
- package/llms/components/lr-flow-node.md +2 -1
- package/llms/components/lr-flow-run-status.md +1 -1
- package/llms/components/lr-format-number.md +4 -0
- package/llms/components/lr-funnel.md +4 -0
- package/llms/components/lr-gauge.md +4 -0
- package/llms/components/lr-generation-metrics.md +5 -0
- package/llms/components/lr-graph-query-builder.md +6 -0
- package/llms/components/lr-graph.md +8 -2
- package/llms/components/lr-heatmap.md +13 -0
- package/llms/components/lr-icon-button.md +7 -0
- package/llms/components/lr-image-viewer.md +9 -0
- package/llms/components/lr-include.md +5 -0
- package/llms/components/lr-ingestion-queue.md +4 -0
- package/llms/components/lr-input.md +22 -8
- package/llms/components/lr-json-viewer.md +4 -0
- package/llms/components/lr-kbd.md +3 -0
- package/llms/components/lr-knowledge-graph-explorer.md +7 -0
- package/llms/components/lr-known-date.md +7 -0
- package/llms/components/lr-lite-chart.md +21 -4
- package/llms/components/lr-live-region.md +3 -0
- package/llms/components/lr-locale-picker.md +6 -0
- package/llms/components/lr-map.md +8 -0
- package/llms/components/lr-markdown-core.md +4 -0
- package/llms/components/lr-markdown.md +8 -4
- package/llms/components/lr-media-card.md +5 -2
- package/llms/components/lr-mention-popover.md +5 -0
- package/llms/components/lr-menu-item.md +4 -0
- package/llms/components/lr-menu-label.md +4 -3
- package/llms/components/lr-menu.md +4 -0
- package/llms/components/lr-message-actions.md +3 -0
- package/llms/components/lr-message-feedback.md +4 -0
- package/llms/components/lr-message-parts.md +3 -2
- package/llms/components/lr-model-select.md +8 -0
- package/llms/components/lr-multi-split.md +15 -6
- package/llms/components/lr-native-time-input.md +10 -0
- package/llms/components/lr-node-palette.md +3 -0
- package/llms/components/lr-notebook-viewer.md +4 -1
- package/llms/components/lr-number-input.md +12 -1
- package/llms/components/lr-option.md +35 -4
- package/llms/components/lr-otp-input.md +10 -0
- package/llms/components/lr-pan-zoom.md +1 -2
- package/llms/components/lr-phone-input.md +20 -5
- package/llms/components/lr-poll-status.md +4 -0
- package/llms/components/lr-popover.md +3 -0
- package/llms/components/lr-popup.md +3 -2
- package/llms/components/lr-prompt-studio.md +7 -0
- package/llms/components/lr-provenance-panel.md +3 -0
- package/llms/components/lr-push-to-talk.md +3 -0
- package/llms/components/lr-radio-button.md +13 -4
- package/llms/components/lr-radio-group.md +5 -0
- package/llms/components/lr-radio.md +9 -0
- package/llms/components/lr-rating.md +3 -0
- package/llms/components/lr-reorder-item.md +6 -0
- package/llms/components/lr-reorder-list.md +6 -0
- package/llms/components/lr-result-card.md +3 -0
- package/llms/components/lr-result-field.md +3 -0
- package/llms/components/lr-rubric-form.md +12 -0
- package/llms/components/lr-select.md +9 -0
- package/llms/components/lr-sequence-playback.md +4 -0
- package/llms/components/lr-slider.md +16 -4
- package/llms/components/lr-source-picker.md +4 -0
- package/llms/components/lr-span-waterfall.md +3 -0
- package/llms/components/lr-sparkline.md +4 -0
- package/llms/components/lr-split-panel.md +4 -0
- package/llms/components/lr-stack-trace.md +3 -0
- package/llms/components/lr-stat.md +10 -0
- package/llms/components/lr-subagent-panel.md +3 -2
- package/llms/components/lr-svg-viewer.md +3 -0
- package/llms/components/lr-swatch-picker.md +4 -0
- package/llms/components/lr-switch.md +6 -0
- package/llms/components/lr-tab-group.md +4 -0
- package/llms/components/lr-table.md +10 -2
- package/llms/components/lr-terminal.md +3 -0
- package/llms/components/lr-textarea.md +9 -0
- package/llms/components/lr-thread-list.md +6 -3
- package/llms/components/lr-time-input.md +3 -0
- package/llms/components/lr-time-range.md +5 -0
- package/llms/components/lr-timeline-item.md +6 -0
- package/llms/components/lr-timeline.md +6 -0
- package/llms/components/lr-token-input.md +14 -0
- package/llms/components/lr-tool-call-chip.md +5 -3
- package/llms/components/lr-tool-param-form.md +4 -0
- package/llms/components/lr-tool-result-dialog.md +4 -0
- package/llms/components/lr-tool-select-dialog.md +4 -0
- package/llms/components/lr-tooltip.md +6 -0
- package/llms/components/lr-trace-tree.md +3 -0
- package/llms/components/lr-transcript-feed.md +3 -0
- package/llms/components/lr-tree-item.md +12 -5
- package/llms/components/lr-tree.md +12 -5
- package/llms/components/lr-typing-indicator.md +3 -0
- package/llms/components/lr-usage-badge.md +4 -0
- package/llms/components/lr-video.md +8 -2
- package/llms/components/lr-virtual-list.md +5 -3
- package/llms/components/lr-voice-picker.md +8 -0
- package/llms/components/lr-widget-renderer.md +9 -0
- package/llms/components/lr-widget.md +4 -2
- package/llms/components/lr-word-cloud.md +4 -0
- package/llms/components/lr-xml-viewer.md +9 -2
- package/llms/components/lr-zoomable-frame.md +6 -3
- package/llms-full.txt +4080 -2711
- package/package.json +2 -2
- package/vscode-css-data.json +1 -1
- package/vscode-html-data.json +1 -1
- package/web-types.json +1 -1
|
@@ -7,7 +7,9 @@ import{type TemplateResult}from'lit';import{LyraElement}from'../../../internal/l
|
|
|
7
7
|
* @status stable
|
|
8
8
|
* @since 4.0.0
|
|
9
9
|
*/
|
|
10
|
-
export declare class LyraFormatNumber extends LyraElement{static styles:import("lit").CSSResultGroup[];value:number;type:LyraFormatNumberType;
|
|
10
|
+
export declare class LyraFormatNumber extends LyraElement{static styles:import("lit").CSSResultGroup[];value:number;type:LyraFormatNumberType;
|
|
11
|
+
/** ISO currency code. Removed or blank attributes format with the existing USD fallback. */
|
|
12
|
+
currency:string;currencyDisplay:LyraFormatCurrencyDisplay;
|
|
11
13
|
/** Web Awesome grouping alias. When both grouping aliases are false, `Intl` keeps the locale's
|
|
12
14
|
* default grouping policy rather than being forced on. */
|
|
13
15
|
withoutGrouping:boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{finiteInteger,finiteRange}from"../../../internal/numbers.js";const NUMBER_TYPES=["currency","decimal","percent"],NUMBER_NOTATIONS=["standard","compact","scientific","engineering"],CURRENCY_DISPLAYS=["symbol","narrowSymbol","code","name"],DISPLAY_STYLES=["long","short","narrow"],BYTE_UNITS=["byte","kilobyte","megabyte","gigabyte","terabyte","petabyte"],BIT_UNITS=["bit","kilobit","megabit","gigabit","terabit","petabit"],DATE_STYLES=["full","long","medium","short"],DATE_TEXT_STYLES=["narrow","short","long"],DATE_NUMERIC_STYLES=["numeric","2-digit"],MONTH_STYLES=["numeric","2-digit","narrow","short","long"],TIME_ZONE_NAME_STYLES=["short","long"],HOUR_FORMATS=["auto","12","24"],NUMERIC_DATE_SOURCE=/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,dateSourceConverter={fromAttribute(value){const source=value??"",normalized=source.trim();if(NUMERIC_DATE_SOURCE.test(normalized)){const epoch=Number(normalized);if(Number.isFinite(epoch))return epoch}return source}};function closedValue(value,values,fallback){return typeof value=="string"&&values.includes(value)?value:fallback}function optionalClosedValue(value,values){return typeof value=="string"&&values.includes(value)?value:void 0}function numberFormatOptions(input){const type=closedValue(input.type,NUMBER_TYPES,"decimal"),notation=closedValue(input.notation,NUMBER_NOTATIONS,"standard"),currencyDisplay=closedValue(input.currencyDisplay,CURRENCY_DISPLAYS,"symbol"),options={style:type,notation};return(input.withoutGrouping||input.noGrouping)&&(options.useGrouping=!1),type==="currency"&&(options.currency=input.currency.trim()||"USD",options.currencyDisplay=currencyDisplay),input.minimumIntegerDigits!==void 0&&(options.minimumIntegerDigits=input.minimumIntegerDigits),input.minimumFractionDigits!==void 0&&(options.minimumFractionDigits=input.minimumFractionDigits),input.maximumFractionDigits!==void 0&&(options.maximumFractionDigits=input.maximumFractionDigits),input.minimumSignificantDigits!==void 0&&(options.minimumSignificantDigits=input.minimumSignificantDigits),input.maximumSignificantDigits!==void 0&&(options.maximumSignificantDigits=input.maximumSignificantDigits),options}function dateTimeFormatOptions(input){const dateStyle=optionalClosedValue(input.dateStyle,DATE_STYLES),timeStyle=optionalClosedValue(input.timeStyle,DATE_STYLES),options=dateStyle||timeStyle?{dateStyle,timeStyle}:{weekday:optionalClosedValue(input.weekday,DATE_TEXT_STYLES),era:optionalClosedValue(input.era,DATE_TEXT_STYLES),year:optionalClosedValue(input.year,DATE_NUMERIC_STYLES),month:optionalClosedValue(input.month,MONTH_STYLES),day:optionalClosedValue(input.day,DATE_NUMERIC_STYLES),hour:optionalClosedValue(input.hour,DATE_NUMERIC_STYLES),minute:optionalClosedValue(input.minute,DATE_NUMERIC_STYLES),second:optionalClosedValue(input.second,DATE_NUMERIC_STYLES),timeZoneName:optionalClosedValue(input.timeZoneName,TIME_ZONE_NAME_STYLES)};input.timeZone?.trim()&&(options.timeZone=input.timeZone.trim());const hourFormat=closedValue(input.hourFormat,HOUR_FORMATS,"auto");return hourFormat!=="auto"&&(options.hour12=hourFormat==="12"),options}function byteFormat(value,unit,display,unitStep,decimals){const units=closedValue(unit,["byte","bit"],"byte")==="bit"?BIT_UNITS:BYTE_UNITS,step=finiteRange(unitStep,1e3,1),safeStep=step>1?step:1e3,index=value===0?0:Math.max(0,Math.min(units.length-1,Math.floor(Math.log(Math.abs(value))/Math.log(safeStep))));return{amount:value/safeStep**index,options:{style:"unit",unit:units[index],unitDisplay:closedValue(display,DISPLAY_STYLES,"short"),maximumFractionDigits:finiteInteger(decimals,1,0,10)}}}function relativeTimeFormatOptions(format,numeric){return{style:closedValue(format,DISPLAY_STYLES,"long"),numeric:closedValue(numeric,["always","auto"],"auto")}}export{byteFormat,dateSourceConverter,dateTimeFormatOptions,numberFormatOptions,relativeTimeFormatOptions};
|
|
1
|
+
import{finiteInteger,finiteRange}from"../../../internal/numbers.js";const NUMBER_TYPES=["currency","decimal","percent"],NUMBER_NOTATIONS=["standard","compact","scientific","engineering"],CURRENCY_DISPLAYS=["symbol","narrowSymbol","code","name"],DISPLAY_STYLES=["long","short","narrow"],BYTE_UNITS=["byte","kilobyte","megabyte","gigabyte","terabyte","petabyte"],BIT_UNITS=["bit","kilobit","megabit","gigabit","terabit","petabit"],DATE_STYLES=["full","long","medium","short"],DATE_TEXT_STYLES=["narrow","short","long"],DATE_NUMERIC_STYLES=["numeric","2-digit"],MONTH_STYLES=["numeric","2-digit","narrow","short","long"],TIME_ZONE_NAME_STYLES=["short","long"],HOUR_FORMATS=["auto","12","24"],NUMERIC_DATE_SOURCE=/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,dateSourceConverter={fromAttribute(value){const source=value??"",normalized=source.trim();if(NUMERIC_DATE_SOURCE.test(normalized)){const epoch=Number(normalized);if(Number.isFinite(epoch))return epoch}return source}};function closedValue(value,values,fallback){return typeof value=="string"&&values.includes(value)?value:fallback}function optionalClosedValue(value,values){return typeof value=="string"&&values.includes(value)?value:void 0}function numberFormatOptions(input){const type=closedValue(input.type,NUMBER_TYPES,"decimal"),notation=closedValue(input.notation,NUMBER_NOTATIONS,"standard"),currencyDisplay=closedValue(input.currencyDisplay,CURRENCY_DISPLAYS,"symbol"),options={style:type,notation};return(input.withoutGrouping||input.noGrouping)&&(options.useGrouping=!1),type==="currency"&&(options.currency=(input.currency??"USD").trim()||"USD",options.currencyDisplay=currencyDisplay),input.minimumIntegerDigits!==void 0&&(options.minimumIntegerDigits=input.minimumIntegerDigits),input.minimumFractionDigits!==void 0&&(options.minimumFractionDigits=input.minimumFractionDigits),input.maximumFractionDigits!==void 0&&(options.maximumFractionDigits=input.maximumFractionDigits),input.minimumSignificantDigits!==void 0&&(options.minimumSignificantDigits=input.minimumSignificantDigits),input.maximumSignificantDigits!==void 0&&(options.maximumSignificantDigits=input.maximumSignificantDigits),options}function dateTimeFormatOptions(input){const dateStyle=optionalClosedValue(input.dateStyle,DATE_STYLES),timeStyle=optionalClosedValue(input.timeStyle,DATE_STYLES),options=dateStyle||timeStyle?{dateStyle,timeStyle}:{weekday:optionalClosedValue(input.weekday,DATE_TEXT_STYLES),era:optionalClosedValue(input.era,DATE_TEXT_STYLES),year:optionalClosedValue(input.year,DATE_NUMERIC_STYLES),month:optionalClosedValue(input.month,MONTH_STYLES),day:optionalClosedValue(input.day,DATE_NUMERIC_STYLES),hour:optionalClosedValue(input.hour,DATE_NUMERIC_STYLES),minute:optionalClosedValue(input.minute,DATE_NUMERIC_STYLES),second:optionalClosedValue(input.second,DATE_NUMERIC_STYLES),timeZoneName:optionalClosedValue(input.timeZoneName,TIME_ZONE_NAME_STYLES)};input.timeZone?.trim()&&(options.timeZone=input.timeZone.trim());const hourFormat=closedValue(input.hourFormat,HOUR_FORMATS,"auto");return hourFormat!=="auto"&&(options.hour12=hourFormat==="12"),options}function byteFormat(value,unit,display,unitStep,decimals){const units=closedValue(unit,["byte","bit"],"byte")==="bit"?BIT_UNITS:BYTE_UNITS,step=finiteRange(unitStep,1e3,1),safeStep=step>1?step:1e3,index=value===0?0:Math.max(0,Math.min(units.length-1,Math.floor(Math.log(Math.abs(value))/Math.log(safeStep))));return{amount:value/safeStep**index,options:{style:"unit",unit:units[index],unitDisplay:closedValue(display,DISPLAY_STYLES,"short"),maximumFractionDigits:finiteInteger(decimals,1,0,10)}}}function relativeTimeFormatOptions(format,numeric){return{style:closedValue(format,DISPLAY_STYLES,"long"),numeric:closedValue(numeric,["always","auto"],"auto")}}export{byteFormat,dateSourceConverter,dateTimeFormatOptions,numberFormatOptions,relativeTimeFormatOptions};
|
|
@@ -60,7 +60,7 @@ collapsedDepth?:number;
|
|
|
60
60
|
maxHeight:string;
|
|
61
61
|
/** Shows copy-to-clipboard affordances: one for the whole value, plus one per node. */
|
|
62
62
|
copyable:boolean;
|
|
63
|
-
/** Case-insensitive substring match against keys/values; matches are highlighted and their ancestors auto-expanded. See also `runSearch()`/`searchNext()`/`searchPrevious()`/`clearSearch()` for imperative, cursor-navigable search built on top of this property. */
|
|
63
|
+
/** Removing the attribute clears search without changing its null readback. Case-insensitive substring match against keys/values; matches are highlighted and their ancestors auto-expanded. See also `runSearch()`/`searchNext()`/`searchPrevious()`/`clearSearch()` for imperative, cursor-navigable search built on top of this property. */
|
|
64
64
|
search:string;
|
|
65
65
|
/**
|
|
66
66
|
* Per-path (`JSON.stringify(path)`) explicit expand/collapse, overriding
|
|
@@ -121,7 +121,8 @@ runSearch(query:string):Promise<number>;
|
|
|
121
121
|
/** Advances the cursor to the next match (wrapping), revealing collapsed ancestors and
|
|
122
122
|
* scrolling the selected match into view. Resolves `false` with no match to move to. */
|
|
123
123
|
searchNext():Promise<boolean>;
|
|
124
|
-
/** Moves the cursor to the previous match (wrapping),
|
|
124
|
+
/** Moves the cursor to the previous match (wrapping), starting at the last result when unset,
|
|
125
|
+
* revealing collapsed ancestors and
|
|
125
126
|
* scrolling the selected match into view. Resolves `false` with no match to move to. */
|
|
126
127
|
searchPrevious():Promise<boolean>;
|
|
127
128
|
/** Resets `search` to `''`, clearing all matches and the cursor. */
|
|
@@ -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,state}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{styleMap}from"lit/directives/style-map.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{LyraElement}from"../../../internal/lyra-element.js";import{hostAriaLabel,srOnly}from"../../../internal/a11y.js";import{chevronIcon}from"../../../internal/icons.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{finiteCount}from"../../../internal/numbers.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{styles}from"./json-viewer.styles.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{writeClipboardText}from"../../../internal/clipboard.js";import{LYRA_DEFAULT_circularReference,LYRA_DEFAULT_copied,LYRA_DEFAULT_copy,LYRA_DEFAULT_copyFailed,LYRA_DEFAULT_copyJson,LYRA_DEFAULT_jsonArray,LYRA_DEFAULT_jsonCollapseLabel,LYRA_DEFAULT_jsonCopyLabel,LYRA_DEFAULT_jsonExpandLabel,LYRA_DEFAULT_jsonItemCount,LYRA_DEFAULT_jsonKeyCount,LYRA_DEFAULT_jsonObject,LYRA_DEFAULT_jsonValue,LYRA_DEFAULT_jsonViewerLimit,LYRA_DEFAULT_viewerSearchActiveMatch}from"../../../internal/default-strings.generated.js";const MAX_JSON_NODES=5e3,MAX_JSON_DEPTH=100,MAX_JSON_SNAPSHOT_INSPECTIONS=MAX_JSON_NODES*2,OMIT_JSON_SNAPSHOT=Symbol("omit-json-viewer-snapshot"),EMPTY_SEARCH={keyMatches:new Set,valueMatches:new Set,forceExpand:new Set,paths:new Set,orderedMatches:[],truncated:!1};function isArrayContainer(value){try{return Array.isArray(value)}catch{return!1}}function isPlainContainer(value){return typeof value=="object"&&value!==null&&!isArrayContainer(value)}function snapshotJsonData(value){const budget={remainingNodes:MAX_JSON_NODES,remainingInspections:MAX_JSON_SNAPSHOT_INSPECTIONS,truncated:!1},projected=snapshotJsonValue(value,budget,new WeakMap,0);return Object.freeze({value:projected===OMIT_JSON_SNAPSHOT?void 0:projected,truncated:budget.truncated||projected===OMIT_JSON_SNAPSHOT})}function snapshotJsonValue(value,budget,copies,depth){if(budget.remainingNodes<=0)return budget.truncated=!0,OMIT_JSON_SNAPSHOT;if(budget.remainingNodes-=1,value==null||typeof value=="string"||typeof value=="number"||typeof value=="boolean"||typeof value=="bigint")return value;if(typeof value!="object")return budget.truncated=!0,OMIT_JSON_SNAPSHOT;const source=value,existing=copies.get(source);if(existing)return existing;const array=isArrayContainer(source);if(depth>=MAX_JSON_DEPTH){budget.truncated=!0;const shell=array?[]:Object.create(null);return copies.set(source,shell),Object.freeze(shell)}return array?snapshotJsonArray(source,budget,copies,depth):snapshotJsonObject(source,budget,copies,depth)}function snapshotJsonArray(source,budget,copies,depth){const length=getOwnDataDescriptor(source,"length");if(length===MISSING_OWN_DATA_DESCRIPTOR||length===UNSAFE_OWN_DATA_DESCRIPTOR||typeof length.value!="number"||!Number.isSafeInteger(length.value)||length.value<0)return budget.truncated=!0,OMIT_JSON_SNAPSHOT;const projected=[];copies.set(source,projected);let retainedLength=0;const count=Math.min(length.value,budget.remainingInspections);count<length.value&&(budget.truncated=!0);for(let index=0;index<count;index+=1){if(budget.remainingNodes<=0||budget.remainingInspections<=0){budget.truncated=!0;break}budget.remainingInspections-=1,retainedLength=index+1;const descriptor=getOwnDataDescriptor(source,String(index));if(descriptor===MISSING_OWN_DATA_DESCRIPTOR)continue;if(descriptor===UNSAFE_OWN_DATA_DESCRIPTOR){budget.truncated=!0;continue}const child=snapshotJsonValue(descriptor.value,budget,copies,depth+1);if(child===OMIT_JSON_SNAPSHOT){budget.truncated=!0;continue}projected[index]=child}projected.length=retainedLength;try{return Object.freeze(projected)}catch{return copies.delete(source),budget.truncated=!0,OMIT_JSON_SNAPSHOT}}function snapshotJsonObject(source,budget,copies,depth){const projected=Object.create(null);copies.set(source,projected);let keys;try{keys=Object.getOwnPropertyNames(source)}catch{return copies.delete(source),budget.truncated=!0,OMIT_JSON_SNAPSHOT}try{for(const key of keys){if(budget.remainingInspections<=0){budget.truncated=!0;break}budget.remainingInspections-=1;const descriptor=getOwnDataDescriptor(source,key);if(descriptor===MISSING_OWN_DATA_DESCRIPTOR)continue;if(descriptor===UNSAFE_OWN_DATA_DESCRIPTOR||!descriptor.enumerable){descriptor===UNSAFE_OWN_DATA_DESCRIPTOR&&(budget.truncated=!0);continue}if(budget.remainingNodes<=0){budget.truncated=!0;break}const child=snapshotJsonValue(descriptor.value,budget,copies,depth+1);if(child===OMIT_JSON_SNAPSHOT){budget.truncated=!0;continue}Object.defineProperty(projected,key,{value:child,enumerable:!0,configurable:!1,writable:!1})}return Object.freeze(projected)}catch{return copies.delete(source),budget.truncated=!0,OMIT_JSON_SNAPSHOT}}function entriesOf(value,limit){const entries=[];if(isArrayContainer(value)){const length=getOwnDataDescriptor(value,"length");if(length===MISSING_OWN_DATA_DESCRIPTOR||length===UNSAFE_OWN_DATA_DESCRIPTOR||typeof length.value!="number"||!Number.isSafeInteger(length.value)||length.value<0)return{entries,truncated:!0,total:0,exact:!1};const total=length.value,count=Math.min(total,limit);let truncated=total>count,exact=!0;for(let index=0;index<count;index+=1){const descriptor=getOwnDataDescriptor(value,String(index));if(descriptor===MISSING_OWN_DATA_DESCRIPTOR){entries.push([index,void 0]);continue}if(descriptor===UNSAFE_OWN_DATA_DESCRIPTOR){truncated=!0,exact=!1;continue}entries.push([index,descriptor.value])}return{entries,truncated,total,exact}}if(isPlainContainer(value)){let truncated=!1,total=0,exact=!0,inspected=0;try{for(const key in value){if(inspected+=1,inspected>MAX_JSON_NODES){exact=!1,truncated=!0;break}const descriptor=getOwnDataDescriptor(value,key);if(descriptor!==MISSING_OWN_DATA_DESCRIPTOR){if(descriptor===UNSAFE_OWN_DATA_DESCRIPTOR||!descriptor.enumerable){exact=!1,truncated=!0;continue}total+=1,entries.length<limit?entries.push([key,descriptor.value]):truncated=!0}}}catch{exact=!1,truncated=!0}return{entries,truncated,total,exact}}return{entries,truncated:!1,total:0,exact:!0}}function valueType(value){if(value===null)return"null";if(value===void 0)return"undefined";if(isArrayContainer(value))return"array";const t=typeof value;return t==="string"||t==="number"||t==="boolean"?t:t==="object"?"object":"string"}function formatPrimitive(value,type){switch(type){case"string":if(typeof value=="string")return JSON.stringify(value);try{return String(value)}catch{return""}case"null":return"null";case"undefined":return"undefined";default:try{return String(value)}catch{return""}}}class LyraJsonViewer extends LyraElement{constructor(){super(...arguments),this.maxHeight="",this.copyable=!1,this.search="",this.expandedOverrides=new Map,this.activeSearchIndex=-1,this.searchState=EMPTY_SEARCH,this.searchLocale="",this.dataSnapshot=void 0,this.dataSnapshotTruncated=!1,this.searchAnnouncementsArmed=!1,this.searchAnnouncementGeneration=0}static{this.defaultStrings={...super.defaultStrings,circularReference:LYRA_DEFAULT_circularReference,copied:LYRA_DEFAULT_copied,copy:LYRA_DEFAULT_copy,copyFailed:LYRA_DEFAULT_copyFailed,copyJson:LYRA_DEFAULT_copyJson,jsonArray:LYRA_DEFAULT_jsonArray,jsonCollapseLabel:LYRA_DEFAULT_jsonCollapseLabel,jsonCopyLabel:LYRA_DEFAULT_jsonCopyLabel,jsonExpandLabel:LYRA_DEFAULT_jsonExpandLabel,jsonItemCount:LYRA_DEFAULT_jsonItemCount,jsonKeyCount:LYRA_DEFAULT_jsonKeyCount,jsonObject:LYRA_DEFAULT_jsonObject,jsonValue:LYRA_DEFAULT_jsonValue,jsonViewerLimit:LYRA_DEFAULT_jsonViewerLimit,viewerSearchActiveMatch:LYRA_DEFAULT_viewerSearchActiveMatch}}static{this.styles=[LyraElement.styles,styles,srOnly]}connectedCallback(){super.connectedCallback(),this.searchAnnouncementSink??=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}),this.searchAnnouncementsArmed=!1;const generation=++this.searchAnnouncementGeneration;this.updateComplete.then(()=>{this.isConnected&&generation===this.searchAnnouncementGeneration&&(this.searchAnnouncementsArmed=!0)})}disconnectedCallback(){this.searchAnnouncementGeneration+=1,this.searchAnnouncementSink?.release(),this.searchAnnouncementSink=void 0,this.searchAnnouncementsArmed=!1,super.disconnectedCallback()}get safeCollapsedDepth(){return this.collapsedDepth===void 0?void 0:finiteCount(this.collapsedDepth)}previewText(type,count,exact=!0){const formattedCount=getNumberFormat(this.effectiveLocale).format(count),localizedCount=exact?formattedCount:`≥${formattedCount}`;return type==="array"?this.localize("jsonItemCount",void 0,{count:localizedCount,pluralCount:count}):this.localize("jsonKeyCount",void 0,{count:localizedCount,pluralCount:count})}isExpanded(pathKey,depth,forceExpand){const override=this.expandedOverrides.get(pathKey);if(override!==void 0)return override;if(forceExpand.has(pathKey))return!0;const collapsedDepth=this.safeCollapsedDepth;return!(collapsedDepth!==void 0&&depth>=collapsedDepth)}toggleNode(pathKey,currentlyExpanded){const next=new Map(this.expandedOverrides);next.set(pathKey,!currentlyExpanded),this.expandedOverrides=next}reportCopyFailure(outcome){this.searchAnnouncementSink?.announce(this.localize("copyFailed")),this.emit("lr-error"),this.emit("lr-copy-error",outcome)}async copy(value){let text="";try{text=value===void 0?"undefined":this.stringifyForClipboard(value)}catch(error){this.isConnected&&this.reportCopyFailure(Object.freeze({ok:!1,text,reason:"failed",error}));return}const owner=this.isConnected?this.ownerDocument.defaultView:null,outcome=await writeClipboardText(owner,text);if(!(!this.isConnected||this.ownerDocument.defaultView!==owner)){if(!outcome.ok){this.reportCopyFailure(outcome);return}this.searchAnnouncementSink?.announce(this.localize("copied")),this.emit("lr-copy",outcome)}}stringifyForClipboard(value){const circularMarker=this.localize("circularReference"),stack=[];return JSON.stringify(value,function(_key,v){if(typeof v=="bigint")return v.toString();if(typeof v!="object"||v===null)return v;const holderIndex=stack.indexOf(this);return stack.length=holderIndex+1,stack.includes(v)?circularMarker:(stack.push(v),v)},2)??formatPrimitive(value,valueType(value))}computeSearch(){const locale=this.effectiveLocale,query=this.search.trim().toLocaleLowerCase(locale),keyMatches=new Set,valueMatches=new Set,forceExpand=new Set,paths=new Set,orderedMatches=[],ancestors=new WeakSet;let truncated=this.dataSnapshotTruncated;const markAncestors=path=>{for(let i=path.length-1;i>=0;i--)forceExpand.add(JSON.stringify(path.slice(0,i)))},stack=[{kind:"visit",value:this.dataSnapshot,path:[]}];let visited=0;for(;stack.length>0;){const frame=stack.pop();if(frame.kind==="leave"){ancestors.delete(frame.value);continue}if(visited>=MAX_JSON_NODES){truncated=!0;break}visited+=1;const{value,path,keyLabel}=frame,pathKey=JSON.stringify(path);paths.add(pathKey);const type=valueType(value);if(query){let hit=!1;keyLabel!==void 0&&keyLabel.toLocaleLowerCase(locale).includes(query)&&(keyMatches.add(pathKey),orderedMatches.push({pathKey,kind:"key"}),hit=!0),type!=="object"&&type!=="array"&&formatPrimitive(value,type).toLocaleLowerCase(locale).includes(query)&&(valueMatches.add(pathKey),orderedMatches.push({pathKey,kind:"value"}),hit=!0),hit&&markAncestors(path)}if((type==="object"||type==="array")&&!ancestors.has(value)){const available=Math.max(0,MAX_JSON_NODES-visited),{entries,truncated:entriesTruncated}=entriesOf(value,available);if(entriesTruncated&&(truncated=!0),path.length>=MAX_JSON_DEPTH){entries.length>0&&(truncated=!0);continue}ancestors.add(value),stack.push({kind:"leave",value});for(let index=entries.length-1;index>=0;index-=1){const[key,child]=entries[index];stack.push({kind:"visit",value:child,path:[...path,key],keyLabel:String(key)})}}}return{keyMatches,valueMatches,forceExpand,paths,orderedMatches,truncated}}renderCopyButton(value,label){if(!this.copyable)return nothing;const resolvedLabel=label??this.localize("jsonValue");return html`
|
|
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,state}from"lit/decorators.js";import{repeat}from"lit/directives/repeat.js";import{styleMap}from"lit/directives/style-map.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{LyraElement}from"../../../internal/lyra-element.js";import{hostAriaLabel,srOnly}from"../../../internal/a11y.js";import{chevronIcon}from"../../../internal/icons.js";import{getNumberFormat}from"../../../internal/intl-cache.js";import{prefersReducedMotion}from"../../../internal/motion.js";import{finiteCount}from"../../../internal/numbers.js";import{getOwnDataDescriptor,MISSING_OWN_DATA_DESCRIPTOR,UNSAFE_OWN_DATA_DESCRIPTOR}from"../../../internal/data-descriptors.js";import{styles}from"./json-viewer.styles.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{writeClipboardText}from"../../../internal/clipboard.js";import{LYRA_DEFAULT_circularReference,LYRA_DEFAULT_copied,LYRA_DEFAULT_copy,LYRA_DEFAULT_copyFailed,LYRA_DEFAULT_copyJson,LYRA_DEFAULT_jsonArray,LYRA_DEFAULT_jsonCollapseLabel,LYRA_DEFAULT_jsonCopyLabel,LYRA_DEFAULT_jsonExpandLabel,LYRA_DEFAULT_jsonItemCount,LYRA_DEFAULT_jsonKeyCount,LYRA_DEFAULT_jsonObject,LYRA_DEFAULT_jsonValue,LYRA_DEFAULT_jsonViewerLimit,LYRA_DEFAULT_viewerSearchActiveMatch}from"../../../internal/default-strings.generated.js";const MAX_JSON_NODES=5e3,MAX_JSON_DEPTH=100,MAX_JSON_SNAPSHOT_INSPECTIONS=MAX_JSON_NODES*2,OMIT_JSON_SNAPSHOT=Symbol("omit-json-viewer-snapshot"),EMPTY_SEARCH={keyMatches:new Set,valueMatches:new Set,forceExpand:new Set,paths:new Set,orderedMatches:[],truncated:!1};function isArrayContainer(value){try{return Array.isArray(value)}catch{return!1}}function isPlainContainer(value){return typeof value=="object"&&value!==null&&!isArrayContainer(value)}function snapshotJsonData(value){const budget={remainingNodes:MAX_JSON_NODES,remainingInspections:MAX_JSON_SNAPSHOT_INSPECTIONS,truncated:!1},projected=snapshotJsonValue(value,budget,new WeakMap,0);return Object.freeze({value:projected===OMIT_JSON_SNAPSHOT?void 0:projected,truncated:budget.truncated||projected===OMIT_JSON_SNAPSHOT})}function snapshotJsonValue(value,budget,copies,depth){if(budget.remainingNodes<=0)return budget.truncated=!0,OMIT_JSON_SNAPSHOT;if(budget.remainingNodes-=1,value==null||typeof value=="string"||typeof value=="number"||typeof value=="boolean"||typeof value=="bigint")return value;if(typeof value!="object")return budget.truncated=!0,OMIT_JSON_SNAPSHOT;const source=value,existing=copies.get(source);if(existing)return existing;const array=isArrayContainer(source);if(depth>=MAX_JSON_DEPTH){budget.truncated=!0;const shell=array?[]:Object.create(null);return copies.set(source,shell),Object.freeze(shell)}return array?snapshotJsonArray(source,budget,copies,depth):snapshotJsonObject(source,budget,copies,depth)}function snapshotJsonArray(source,budget,copies,depth){const length=getOwnDataDescriptor(source,"length");if(length===MISSING_OWN_DATA_DESCRIPTOR||length===UNSAFE_OWN_DATA_DESCRIPTOR||typeof length.value!="number"||!Number.isSafeInteger(length.value)||length.value<0)return budget.truncated=!0,OMIT_JSON_SNAPSHOT;const projected=[];copies.set(source,projected);let retainedLength=0;const count=Math.min(length.value,budget.remainingInspections);count<length.value&&(budget.truncated=!0);for(let index=0;index<count;index+=1){if(budget.remainingNodes<=0||budget.remainingInspections<=0){budget.truncated=!0;break}budget.remainingInspections-=1,retainedLength=index+1;const descriptor=getOwnDataDescriptor(source,String(index));if(descriptor===MISSING_OWN_DATA_DESCRIPTOR)continue;if(descriptor===UNSAFE_OWN_DATA_DESCRIPTOR){budget.truncated=!0;continue}const child=snapshotJsonValue(descriptor.value,budget,copies,depth+1);if(child===OMIT_JSON_SNAPSHOT){budget.truncated=!0;continue}projected[index]=child}projected.length=retainedLength;try{return Object.freeze(projected)}catch{return copies.delete(source),budget.truncated=!0,OMIT_JSON_SNAPSHOT}}function snapshotJsonObject(source,budget,copies,depth){const projected=Object.create(null);copies.set(source,projected);let keys;try{keys=Object.getOwnPropertyNames(source)}catch{return copies.delete(source),budget.truncated=!0,OMIT_JSON_SNAPSHOT}try{for(const key of keys){if(budget.remainingInspections<=0){budget.truncated=!0;break}budget.remainingInspections-=1;const descriptor=getOwnDataDescriptor(source,key);if(descriptor===MISSING_OWN_DATA_DESCRIPTOR)continue;if(descriptor===UNSAFE_OWN_DATA_DESCRIPTOR||!descriptor.enumerable){descriptor===UNSAFE_OWN_DATA_DESCRIPTOR&&(budget.truncated=!0);continue}if(budget.remainingNodes<=0){budget.truncated=!0;break}const child=snapshotJsonValue(descriptor.value,budget,copies,depth+1);if(child===OMIT_JSON_SNAPSHOT){budget.truncated=!0;continue}Object.defineProperty(projected,key,{value:child,enumerable:!0,configurable:!1,writable:!1})}return Object.freeze(projected)}catch{return copies.delete(source),budget.truncated=!0,OMIT_JSON_SNAPSHOT}}function entriesOf(value,limit){const entries=[];if(isArrayContainer(value)){const length=getOwnDataDescriptor(value,"length");if(length===MISSING_OWN_DATA_DESCRIPTOR||length===UNSAFE_OWN_DATA_DESCRIPTOR||typeof length.value!="number"||!Number.isSafeInteger(length.value)||length.value<0)return{entries,truncated:!0,total:0,exact:!1};const total=length.value,count=Math.min(total,limit);let truncated=total>count,exact=!0;for(let index=0;index<count;index+=1){const descriptor=getOwnDataDescriptor(value,String(index));if(descriptor===MISSING_OWN_DATA_DESCRIPTOR){entries.push([index,void 0]);continue}if(descriptor===UNSAFE_OWN_DATA_DESCRIPTOR){truncated=!0,exact=!1;continue}entries.push([index,descriptor.value])}return{entries,truncated,total,exact}}if(isPlainContainer(value)){let truncated=!1,total=0,exact=!0,inspected=0;try{for(const key in value){if(inspected+=1,inspected>MAX_JSON_NODES){exact=!1,truncated=!0;break}const descriptor=getOwnDataDescriptor(value,key);if(descriptor!==MISSING_OWN_DATA_DESCRIPTOR){if(descriptor===UNSAFE_OWN_DATA_DESCRIPTOR||!descriptor.enumerable){exact=!1,truncated=!0;continue}total+=1,entries.length<limit?entries.push([key,descriptor.value]):truncated=!0}}}catch{exact=!1,truncated=!0}return{entries,truncated,total,exact}}return{entries,truncated:!1,total:0,exact:!0}}function valueType(value){if(value===null)return"null";if(value===void 0)return"undefined";if(isArrayContainer(value))return"array";const t=typeof value;return t==="string"||t==="number"||t==="boolean"?t:t==="object"?"object":"string"}function formatPrimitive(value,type){switch(type){case"string":if(typeof value=="string")return JSON.stringify(value);try{return String(value)}catch{return""}case"null":return"null";case"undefined":return"undefined";default:try{return String(value)}catch{return""}}}class LyraJsonViewer extends LyraElement{constructor(){super(...arguments),this.maxHeight="",this.copyable=!1,this.search="",this.expandedOverrides=new Map,this.activeSearchIndex=-1,this.searchState=EMPTY_SEARCH,this.searchLocale="",this.dataSnapshot=void 0,this.dataSnapshotTruncated=!1,this.searchAnnouncementsArmed=!1,this.searchAnnouncementGeneration=0}static{this.defaultStrings={...super.defaultStrings,circularReference:LYRA_DEFAULT_circularReference,copied:LYRA_DEFAULT_copied,copy:LYRA_DEFAULT_copy,copyFailed:LYRA_DEFAULT_copyFailed,copyJson:LYRA_DEFAULT_copyJson,jsonArray:LYRA_DEFAULT_jsonArray,jsonCollapseLabel:LYRA_DEFAULT_jsonCollapseLabel,jsonCopyLabel:LYRA_DEFAULT_jsonCopyLabel,jsonExpandLabel:LYRA_DEFAULT_jsonExpandLabel,jsonItemCount:LYRA_DEFAULT_jsonItemCount,jsonKeyCount:LYRA_DEFAULT_jsonKeyCount,jsonObject:LYRA_DEFAULT_jsonObject,jsonValue:LYRA_DEFAULT_jsonValue,jsonViewerLimit:LYRA_DEFAULT_jsonViewerLimit,viewerSearchActiveMatch:LYRA_DEFAULT_viewerSearchActiveMatch}}static{this.styles=[LyraElement.styles,styles,srOnly]}connectedCallback(){super.connectedCallback(),this.searchAnnouncementSink??=acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}),this.searchAnnouncementsArmed=!1;const generation=++this.searchAnnouncementGeneration;this.updateComplete.then(()=>{this.isConnected&&generation===this.searchAnnouncementGeneration&&(this.searchAnnouncementsArmed=!0)})}disconnectedCallback(){this.searchAnnouncementGeneration+=1,this.searchAnnouncementSink?.release(),this.searchAnnouncementSink=void 0,this.searchAnnouncementsArmed=!1,super.disconnectedCallback()}get safeCollapsedDepth(){return this.collapsedDepth===void 0?void 0:finiteCount(this.collapsedDepth)}previewText(type,count,exact=!0){const formattedCount=getNumberFormat(this.effectiveLocale).format(count),localizedCount=exact?formattedCount:`≥${formattedCount}`;return type==="array"?this.localize("jsonItemCount",void 0,{count:localizedCount,pluralCount:count}):this.localize("jsonKeyCount",void 0,{count:localizedCount,pluralCount:count})}isExpanded(pathKey,depth,forceExpand){const override=this.expandedOverrides.get(pathKey);if(override!==void 0)return override;if(forceExpand.has(pathKey))return!0;const collapsedDepth=this.safeCollapsedDepth;return!(collapsedDepth!==void 0&&depth>=collapsedDepth)}toggleNode(pathKey,currentlyExpanded){const next=new Map(this.expandedOverrides);next.set(pathKey,!currentlyExpanded),this.expandedOverrides=next}reportCopyFailure(outcome){this.searchAnnouncementSink?.announce(this.localize("copyFailed")),this.emit("lr-error"),this.emit("lr-copy-error",outcome)}async copy(value){let text="";try{text=value===void 0?"undefined":this.stringifyForClipboard(value)}catch(error){this.isConnected&&this.reportCopyFailure(Object.freeze({ok:!1,text,reason:"failed",error}));return}const owner=this.isConnected?this.ownerDocument.defaultView:null,outcome=await writeClipboardText(owner,text);if(!(!this.isConnected||this.ownerDocument.defaultView!==owner)){if(!outcome.ok){this.reportCopyFailure(outcome);return}this.searchAnnouncementSink?.announce(this.localize("copied")),this.emit("lr-copy",outcome)}}stringifyForClipboard(value){const circularMarker=this.localize("circularReference"),stack=[];return JSON.stringify(value,function(_key,v){if(typeof v=="bigint")return v.toString();if(typeof v!="object"||v===null)return v;const holderIndex=stack.indexOf(this);return stack.length=holderIndex+1,stack.includes(v)?circularMarker:(stack.push(v),v)},2)??formatPrimitive(value,valueType(value))}computeSearch(){const locale=this.effectiveLocale,query=(this.search??"").trim().toLocaleLowerCase(locale),keyMatches=new Set,valueMatches=new Set,forceExpand=new Set,paths=new Set,orderedMatches=[],ancestors=new WeakSet;let truncated=this.dataSnapshotTruncated;const markAncestors=path=>{for(let i=path.length-1;i>=0;i--)forceExpand.add(JSON.stringify(path.slice(0,i)))},stack=[{kind:"visit",value:this.dataSnapshot,path:[]}];let visited=0;for(;stack.length>0;){const frame=stack.pop();if(frame.kind==="leave"){ancestors.delete(frame.value);continue}if(visited>=MAX_JSON_NODES){truncated=!0;break}visited+=1;const{value,path,keyLabel}=frame,pathKey=JSON.stringify(path);paths.add(pathKey);const type=valueType(value);if(query){let hit=!1;keyLabel!==void 0&&keyLabel.toLocaleLowerCase(locale).includes(query)&&(keyMatches.add(pathKey),orderedMatches.push({pathKey,kind:"key"}),hit=!0),type!=="object"&&type!=="array"&&formatPrimitive(value,type).toLocaleLowerCase(locale).includes(query)&&(valueMatches.add(pathKey),orderedMatches.push({pathKey,kind:"value"}),hit=!0),hit&&markAncestors(path)}if((type==="object"||type==="array")&&!ancestors.has(value)){const available=Math.max(0,MAX_JSON_NODES-visited),{entries,truncated:entriesTruncated}=entriesOf(value,available);if(entriesTruncated&&(truncated=!0),path.length>=MAX_JSON_DEPTH){entries.length>0&&(truncated=!0);continue}ancestors.add(value),stack.push({kind:"leave",value});for(let index=entries.length-1;index>=0;index-=1){const[key,child]=entries[index];stack.push({kind:"visit",value:child,path:[...path,key],keyLabel:String(key)})}}}return{keyMatches,valueMatches,forceExpand,paths,orderedMatches,truncated}}renderCopyButton(value,label){if(!this.copyable)return nothing;const resolvedLabel=label??this.localize("jsonValue");return html`
|
|
2
2
|
<button
|
|
3
3
|
part="copy-button"
|
|
4
4
|
type="button"
|
|
@@ -59,7 +59,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
59
59
|
</div>
|
|
60
60
|
`:nothing}
|
|
61
61
|
</div>
|
|
62
|
-
`}willUpdate(changed){if(super.willUpdate(changed),!this.hasUpdated||changed.has("data")){const snapshot=snapshotJsonData(this.data);this.dataSnapshot=snapshot.value,this.dataSnapshotTruncated=snapshot.truncated}const locale=this.effectiveLocale;if(!this.hasUpdated||changed.has("data")||changed.has("search")||locale!==this.searchLocale){this.searchLocale=locale;const next=this.computeSearch();if(!this.hasUpdated||changed.has("data")){let pruned=null;for(const key of this.expandedOverrides.keys())next.paths.has(key)||(pruned??=new Map(this.expandedOverrides),pruned.delete(key));pruned&&(this.expandedOverrides=pruned)}this.searchState=next,this.hasUpdated&&(this.activeSearchIndex=-1,this.emitSearchChange())}}updated(changed){super.updated(changed),this.searchAnnouncementsArmed&&changed.has("activeSearchIndex")&&this.searchAnnouncementSink?.announce(this.activeSearchAnnouncement())}emitSearchChange(){this.emit("lr-search-change",{query:this.search,matchCount:this.searchState.orderedMatches.length,matchCountExact:!this.searchState.truncated,activeIndex:this.activeSearchIndex})}revealActiveMatch(){const match=this.searchState.orderedMatches[this.activeSearchIndex];if(!match)return;let path;try{path=JSON.parse(match.pathKey)}catch{return}if(!Array.isArray(path))return;let next=null;for(let depth=0;depth<path.length;depth++){const ancestorKey=JSON.stringify(path.slice(0,depth));this.expandedOverrides.get(ancestorKey)!==!0&&(next??=new Map(this.expandedOverrides),next.set(ancestorKey,!0))}next&&(this.expandedOverrides=next)}activeSearchAnnouncement(){const total=this.searchState.orderedMatches.length;if(this.activeSearchIndex<0||total===0)return"";const numberFormat=getNumberFormat(this.effectiveLocale);return this.localize("viewerSearchActiveMatch",void 0,{current:numberFormat.format(this.activeSearchIndex+1),total:this.searchState.truncated?`≥${numberFormat.format(total)}`:numberFormat.format(total)})}async runSearch(query){return this.search=query,await this.updateComplete,this.searchState.orderedMatches.length}async searchNext(){const total=this.searchState.orderedMatches.length;return total===0?!1:(this.activeSearchIndex=(this.activeSearchIndex+1)%total,this.revealActiveMatch(),this.emitSearchChange(),await this.scrollActiveMatchIntoView(),!0)}async searchPrevious(){const total=this.searchState.orderedMatches.length;return total===0?!1:(this.activeSearchIndex=(this.activeSearchIndex-1+total)%total,this.revealActiveMatch(),this.emitSearchChange(),await this.scrollActiveMatchIntoView(),!0)}clearSearch(){this.search=""}async scrollActiveMatchIntoView(){await this.updateComplete,this.renderRoot.querySelector("[data-active]")?.scrollIntoView({behavior:prefersReducedMotion(this.ownerDocument.defaultView)?"auto":"smooth",block:"nearest"})}render(){const budget={remaining:MAX_JSON_NODES,truncated:!1},tree=this.renderNode(this.dataSnapshot,[],void 0,0,this.searchState,new WeakSet,budget),limited=budget.truncated||this.searchState.truncated||this.dataSnapshotTruncated;return html`
|
|
62
|
+
`}willUpdate(changed){if(super.willUpdate(changed),!this.hasUpdated||changed.has("data")){const snapshot=snapshotJsonData(this.data);this.dataSnapshot=snapshot.value,this.dataSnapshotTruncated=snapshot.truncated}const locale=this.effectiveLocale;if(!this.hasUpdated||changed.has("data")||changed.has("search")||locale!==this.searchLocale){this.searchLocale=locale;const next=this.computeSearch();if(!this.hasUpdated||changed.has("data")){let pruned=null;for(const key of this.expandedOverrides.keys())next.paths.has(key)||(pruned??=new Map(this.expandedOverrides),pruned.delete(key));pruned&&(this.expandedOverrides=pruned)}this.searchState=next,this.hasUpdated&&(this.activeSearchIndex=-1,this.emitSearchChange())}}updated(changed){super.updated(changed),this.searchAnnouncementsArmed&&changed.has("activeSearchIndex")&&this.searchAnnouncementSink?.announce(this.activeSearchAnnouncement())}emitSearchChange(){this.emit("lr-search-change",{query:this.search,matchCount:this.searchState.orderedMatches.length,matchCountExact:!this.searchState.truncated,activeIndex:this.activeSearchIndex})}revealActiveMatch(){const match=this.searchState.orderedMatches[this.activeSearchIndex];if(!match)return;let path;try{path=JSON.parse(match.pathKey)}catch{return}if(!Array.isArray(path))return;let next=null;for(let depth=0;depth<path.length;depth++){const ancestorKey=JSON.stringify(path.slice(0,depth));this.expandedOverrides.get(ancestorKey)!==!0&&(next??=new Map(this.expandedOverrides),next.set(ancestorKey,!0))}next&&(this.expandedOverrides=next)}activeSearchAnnouncement(){const total=this.searchState.orderedMatches.length;if(this.activeSearchIndex<0||total===0)return"";const numberFormat=getNumberFormat(this.effectiveLocale);return this.localize("viewerSearchActiveMatch",void 0,{current:numberFormat.format(this.activeSearchIndex+1),total:this.searchState.truncated?`≥${numberFormat.format(total)}`:numberFormat.format(total)})}async runSearch(query){return this.search=query,await this.updateComplete,this.searchState.orderedMatches.length}async searchNext(){const total=this.searchState.orderedMatches.length;return total===0?!1:(this.activeSearchIndex=(this.activeSearchIndex+1)%total,this.revealActiveMatch(),this.emitSearchChange(),await this.scrollActiveMatchIntoView(),!0)}async searchPrevious(){const total=this.searchState.orderedMatches.length;return total===0?!1:(this.activeSearchIndex=this.activeSearchIndex<0?total-1:(this.activeSearchIndex-1+total)%total,this.revealActiveMatch(),this.emitSearchChange(),await this.scrollActiveMatchIntoView(),!0)}clearSearch(){this.search=""}async scrollActiveMatchIntoView(){await this.updateComplete,this.renderRoot.querySelector("[data-active]")?.scrollIntoView({behavior:prefersReducedMotion(this.ownerDocument.defaultView)?"auto":"smooth",block:"nearest"})}render(){const budget={remaining:MAX_JSON_NODES,truncated:!1},tree=this.renderNode(this.dataSnapshot,[],void 0,0,this.searchState,new WeakSet,budget),limited=budget.truncated||this.searchState.truncated||this.dataSnapshotTruncated;return html`
|
|
63
63
|
<div
|
|
64
64
|
part="base"
|
|
65
65
|
style=${sanitizeCssLength(this.maxHeight)?styleMap({"--lr-json-viewer-max-height":sanitizeCssLength(this.maxHeight)}):nothing}
|
|
@@ -44,6 +44,10 @@ field:LyraKnownDateField;}export interface LyraKnownDateEventMap{'lr-invalid':Cu
|
|
|
44
44
|
* announcement text, and no error is announced while the control or a composed ancestor is
|
|
45
45
|
* hidden. Initial and reconnected validation state remains silent.
|
|
46
46
|
*
|
|
47
|
+
* Host `aria-describedby` resolves external guidance onto the aggregate date fieldset;
|
|
48
|
+
* each native field retains its local hint/error guidance. Removed label/hint attributes
|
|
49
|
+
* render as absent. Disabled native fields retain their resting border on hover or press.
|
|
50
|
+
*
|
|
47
51
|
* @customElement lr-known-date
|
|
48
52
|
* @event {InputEvent & { readonly detail: LyraKnownDateEventDetail }} input - A bubbling, composed
|
|
49
53
|
* native input event fired on every keystroke in
|
|
@@ -155,21 +159,21 @@ withHint:boolean;
|
|
|
155
159
|
/** Overrides the fieldset's computed accessible name (normally the `<legend>`'s content). Applied
|
|
156
160
|
* as `aria-label` on the `part="fieldset"` element, which owns the role -- not just the host. */
|
|
157
161
|
accessibleLabel:string|null;
|
|
158
|
-
/** Visible + accessible day label.
|
|
162
|
+
/** Visible + accessible day label. Omission or attribute removal localizes the default; supplied empty text stays empty. */
|
|
159
163
|
dayLabel?:string;
|
|
160
|
-
/** Visible + accessible month label.
|
|
164
|
+
/** Visible + accessible month label. Omission or attribute removal localizes the default; supplied empty text stays empty. */
|
|
161
165
|
monthLabel?:string;
|
|
162
|
-
/** Visible + accessible year label.
|
|
166
|
+
/** Visible + accessible year label. Omission or attribute removal localizes the default; supplied empty text stays empty. */
|
|
163
167
|
yearLabel?:string;private _parts;private touched;private hasLabelSlot;private hasHintSlot;private hasErrorSlot;private _min;private _max;private _readonly;
|
|
164
168
|
/** The last value a `change` event was fired for (or the constructed initial value) -- lets
|
|
165
169
|
* `commitChangeIfNeeded()` fire `change` only on a real transition, matching `lr-date-input`'s
|
|
166
170
|
* own "input fires more often than change" contract. */
|
|
167
|
-
private lastCommittedValue;private lastEditedField;private errorAnnouncementSink?;private errorObserver?;private errorAnnouncementsArmed;private lastVisibleError;private connectionGeneration;private readonly onForwardedSlotChange;private readonly hintId;private readonly errorId;private readonly dayId;private readonly monthId;private readonly yearId;
|
|
171
|
+
private lastCommittedValue;private lastEditedField;private errorAnnouncementSink?;private errorObserver?;private externalDescriptionLease?;private errorAnnouncementsArmed;private lastVisibleError;private connectionGeneration;private readonly onForwardedSlotChange;private readonly hintId;private readonly errorId;private readonly dayId;private readonly monthId;private readonly yearId;
|
|
168
172
|
/** Hidden native date mirror used by integrations that inspect native constraints directly.
|
|
169
173
|
* Stays a writable `@query` field rather than a readonly `get`: `wa-known-date` declares it
|
|
170
174
|
* writable, and check-pinned-upstream-manifests treats a readonly-vs-writable difference on a
|
|
171
175
|
* mirrored member as an `unsupported` surface drift -- a release blocker. */
|
|
172
|
-
valueInput:HTMLInputElement;private validationTargetOverride?;constructor();connectedCallback():void;private observeErrorNode;private bindErrorObserverTargets;disconnectedCallback():void;get min():string;set min(next:string);get max():string;set max(next:string);get readonly():boolean;set readonly(next:boolean);
|
|
176
|
+
valueInput:HTMLInputElement;private validationTargetOverride?;constructor();connectedCallback():void;private observeErrorNode;private bindErrorObserverTargets;disconnectedCallback():void;adoptedCallback():void;private syncExternalDescription;private releaseExternalDescription;get min():string;set min(next:string);get max():string;set max(next:string);get readonly():boolean;set readonly(next:boolean);
|
|
173
177
|
/** The three raw day/month/year field strings. Assigning a complete valid set updates `value`. */
|
|
174
178
|
get parts():LyraKnownDateParts;set parts(next:LyraKnownDateParts);private setParts;get value():string;
|
|
175
179
|
/** Normalizes an assignment to the canonical ISO date or `''`, and repopulates the three raw
|
|
@@ -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{LyraElement}from"../../../internal/lyra-element.js";import{FormAssociated,isBarredFromValidation}from"../../../internal/form-associated.js";import{SET_ANCHORED_VALIDITY,VALIDITY_ANCHOR}from"../../../internal/anchored-validity.js";import{composedParentElement,isAccessibilitySubtreeExcluded,isAccessibilityVisible,isAccessibilityVisibilityHidden,nextId}from"../../../internal/a11y.js";import{sizes}from"../../../internal/sizes.styles.js";import{styles}from"./known-date.styles.js";import{getDateTimeFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{activeElementIn}from"../../../internal/active-element.js";import{isImplicitSubmission,submitOnEnter}from"../../../internal/submit-on-enter.js";import{setCustomState}from"../../../internal/custom-states.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{currentValidityValidator}from"../../forms/form-validator.js";import{LYRA_DEFAULT_dateInputInvalid,LYRA_DEFAULT_dateInputMaxMessage,LYRA_DEFAULT_dateInputMinMessage,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_knownDateDay,LYRA_DEFAULT_knownDateMonth,LYRA_DEFAULT_knownDateYear}from"../../../internal/default-strings.generated.js";const EMPTY_PARTS={day:"",month:"",year:""};function localDate(year,month,day){const date=new Date(0);return date.setHours(0,0,0,0),date.setFullYear(year,month,day),date}function parseISO(value){const match=/^(\d{4})-(\d{2})-(\d{2})$/.exec(value);if(!match)return null;const year=Number(match[1]),month=Number(match[2]),day=Number(match[3]),date=localDate(year,month-1,day);return isNaN(date.getTime())||date.getFullYear()!==year||date.getMonth()!==month-1||date.getDate()!==day?null:date}function formatISO(date){const mm=String(date.getMonth()+1).padStart(2,"0"),dd=String(date.getDate()).padStart(2,"0");return`${String(date.getFullYear()).padStart(4,"0")}-${mm}-${dd}`}function localeDateOrder(locale){try{const order=getDateTimeFormat(locale||void 0,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2026,0,2)).filter(p=>p.type==="day"||p.type==="month"||p.type==="year").map(p=>p.type);return order.length===3?order:["month","day","year"]}catch{return["month","day","year"]}}class LyraKnownDateBase extends LyraElement{}function addCompatibilityDetail(event,detail){return Object.defineProperty(event,"detail",{configurable:!0,value:detail}),event}class LyraKnownDate extends FormAssociated(LyraKnownDateBase){static{this.defaultStrings={...super.defaultStrings,dateInputInvalid:LYRA_DEFAULT_dateInputInvalid,dateInputMaxMessage:LYRA_DEFAULT_dateInputMaxMessage,dateInputMinMessage:LYRA_DEFAULT_dateInputMinMessage,fieldRequired:LYRA_DEFAULT_fieldRequired,knownDateDay:LYRA_DEFAULT_knownDateDay,knownDateMonth:LYRA_DEFAULT_knownDateMonth,knownDateYear:LYRA_DEFAULT_knownDateYear}}static get validators(){return[currentValidityValidator("required","disabled","readonly","value","min","max")]}static{this.styles=[LyraElement.styles,sizes,styles]}static{this.properties={min:{reflect:!0,noAccessor:!0},max:{reflect:!0,noAccessor:!0},readonly:{type:Boolean,reflect:!0,noAccessor:!0},parts:{attribute:!1,noAccessor:!0}}}constructor(){super(),this.size="m",this.appearance="outlined",this.pill=!1,this.label="",this.hint="",this.errorText="",this.locale="",this.autocomplete="",this.withLabel=!1,this.withHint=!1,this.accessibleLabel=null,this._parts={...EMPTY_PARTS},this.touched=!1,this.hasLabelSlot=!1,this.hasHintSlot=!1,this.hasErrorSlot=!1,this._min="",this._max="",this._readonly=!1,this.lastCommittedValue="",this.lastEditedField="day",this.errorAnnouncementsArmed=!1,this.lastVisibleError="",this.connectionGeneration=0,this.onForwardedSlotChange=event=>{const target=event.target;target?.nodeType!==1||target.localName!=="slot"||(this.bindErrorObserverTargets(),this.announceVisibleError())},this.hintId=nextId("known-date-hint"),this.errorId=nextId("known-date-error"),this.dayId=nextId("known-date-day"),this.monthId=nextId("known-date-month"),this.yearId=nextId("known-date-year"),this.onLabelSlotChange=e=>{this.hasLabelSlot=e.target.assignedElements({flatten:!0}).length>0},this.onHintSlotChange=e=>{this.hasHintSlot=e.target.assignedElements({flatten:!0}).length>0},this.onErrorSlotChange=e=>{this.hasErrorSlot=e.target.assignedElements({flatten:!0}).length>0},this.onFieldInput=(field,e)=>{e.stopPropagation();const input=e.target,maxLength=field==="year"?4:2,digits=this.normalizeFieldDigits(input.value).slice(0,maxLength);input.value!==digits&&(input.value=digits),this.setFieldText(field,digits),this.lastEditedField=field,this.commitFromFields();const InputEventConstructor=this.ownerDocument.defaultView?.InputEvent??InputEvent,event=addCompatibilityDetail(new InputEventConstructor("input",{bubbles:!0,composed:!0,inputType:e.inputType||"insertText"}),this.detailFor(field));this.dispatchEvent(event),field!=="year"&&digits.length===maxLength&&this.focusAdjacentField(field,1)},this.onFieldKeydown=(field,e)=>{const input=e.currentTarget;if(isImplicitSubmission(e)){if(this.effectiveDisabled||this.readonly)return;submitOnEnter(this,e,{beforeSubmit:()=>this.commitChangeIfNeeded()});return}if(e.key==="Backspace"&&this.textFor(field)===""){e.preventDefault(),this.focusAdjacentField(field,-1);return}if(e.key!=="ArrowLeft"&&e.key!=="ArrowRight")return;const atStart=input.selectionStart===0&&input.selectionEnd===0,atEnd=input.selectionStart===input.value.length&&input.selectionEnd===input.value.length,rtl=this.effectiveDirection==="rtl";e.key==="ArrowLeft"&&atStart?(e.preventDefault(),this.focusAdjacentField(field,rtl?1:-1)):e.key==="ArrowRight"&&atEnd&&(e.preventDefault(),this.focusAdjacentField(field,rtl?-1:1))},this.onFieldFocus=e=>{e.stopPropagation(),this.emit("focus")},this.onFieldBlur=e=>{e.stopPropagation(),this.commitChangeIfNeeded();const related=e.relatedTarget,active=activeElementIn(this.shadowRoot);e.isTrusted&&(this.isRenderedFieldTarget(related)||active!==e.target&&this.isRenderedFieldTarget(active))||(this.effectiveDisabled||(this.touched=!0),this.emit("blur"))},this.addEventListener("invalid",()=>{this.touched=!0})}connectedCallback(){super.connectedCallback(),this.errorAnnouncementSink??=acquireAnnouncementSink("assertive",{document:this.ownerDocument,source:this});const MutationObserverCtor=this.ownerDocument.defaultView?.MutationObserver;this.errorObserver=MutationObserverCtor?new MutationObserverCtor(()=>{this.bindErrorObserverTargets(),this.announceVisibleError()}):void 0,this.addEventListener("slotchange",this.onForwardedSlotChange),this.bindErrorObserverTargets(),this.errorAnnouncementsArmed=!1;const generation=++this.connectionGeneration;this.updateComplete.then(()=>{const view=this.ownerDocument.defaultView;return typeof view?.requestAnimationFrame=="function"?new Promise(resolve=>view.requestAnimationFrame(()=>resolve())):Promise.resolve()}).then(()=>this.updateComplete).then(()=>{!this.isConnected||generation!==this.connectionGeneration||(this.lastVisibleError=this.visibleErrorText(),this.errorAnnouncementsArmed=!0)})}observeErrorNode(node){if(this.errorObserver){if(node.nodeType===3){this.errorObserver.observe(node,{characterData:!0});return}node.nodeType===1&&this.errorObserver.observe(node,{attributes:!0,attributeFilter:["aria-hidden","aria-label","class","hidden","inert","slot","style"],characterData:!0,childList:!0,subtree:!0})}}bindErrorObserverTargets(){if(!this.errorObserver)return;this.errorObserver.disconnect(),this.observeErrorNode(this);let ancestor=composedParentElement(this);for(;ancestor;)this.errorObserver.observe(ancestor,{attributes:!0,attributeFilter:["aria-hidden","class","hidden","inert","style"]}),ancestor=composedParentElement(ancestor);const forwardedSlots=Array.from(this.children).filter(element=>element.getAttribute("slot")==="error").flatMap(branch=>[...branch.localName==="slot"?[branch]:[],...branch.querySelectorAll("slot")]);for(const slot of forwardedSlots)for(const assigned of slot.assignedNodes({flatten:!0}))this.observeErrorNode(assigned)}disconnectedCallback(){this.connectionGeneration+=1,this.errorAnnouncementsArmed=!1,this.lastVisibleError="",this.removeEventListener("slotchange",this.onForwardedSlotChange),this.errorObserver?.disconnect(),this.errorObserver=void 0,this.errorAnnouncementSink?.release(),this.errorAnnouncementSink=void 0,super.disconnectedCallback()}get min(){return this._min}set min(next){const old=this._min;this._min=next??"",this.updateValidity(),this.requestUpdate("min",old)}get max(){return this._max}set max(next){const old=this._max;this._max=next??"",this.updateValidity(),this.requestUpdate("max",old)}get readonly(){return this._readonly}set readonly(next){const old=this._readonly;this._readonly=!!next,this.toggleAttribute("readonly",this._readonly),this.updateValidity(),this.requestUpdate("readonly",old)}get parts(){return this._parts}set parts(next){this.setParts(next,!0)}setParts(next,programmatic){const old=this._parts;this._parts={day:String(next?.day??""),month:String(next?.month??""),year:String(next?.year??"")},programmatic&&(this.commitFromFields(),this.lastCommittedValue=this.value),this.requestUpdate("parts",old)}get value(){return super.value}set value(next){const parsed=this.parseStrictISO(next??"");parsed?(this.setParts({day:String(parsed.getDate()),month:String(parsed.getMonth()+1),year:String(parsed.getFullYear())},!1),super.value=formatISO(parsed)):(this.setParts({day:"",month:"",year:""},!1),super.value=""),this.lastCommittedValue=super.value}get valueAsDate(){return this.value?parseISO(this.value):null}set valueAsDate(next){this.value=next?formatISO(next):""}parseStrictISO(value){return/^\d{4}-\d{2}-\d{2}$/.test(value)?parseISO(value):null}get fieldOrder(){return localeDateOrder(this.effectiveLocale)}textFor(field){return this._parts[field]}setFieldText(field,text){this.setParts({...this._parts,[field]:text},!1)}idFor(field){return field==="day"?this.dayId:field==="month"?this.monthId:this.yearId}get effectiveDayLabel(){return this.dayLabel===void 0?this.localize("knownDateDay"):this.dayLabel}get effectiveMonthLabel(){return this.monthLabel===void 0?this.localize("knownDateMonth"):this.monthLabel}get effectiveYearLabel(){return this.yearLabel===void 0?this.localize("knownDateYear"):this.yearLabel}labelFor(field){return field==="day"?this.effectiveDayLabel:field==="month"?this.effectiveMonthLabel:this.effectiveYearLabel}autocompleteFor(field){return this.autocomplete?this.autocomplete==="bday"?`bday-${field}`:this.autocomplete==="on"||this.autocomplete==="off"?this.autocomplete:field==="year"?this.autocomplete:"":""}computeCanonicalValue(){if(!this._parts.day||!this._parts.month||!this._parts.year)return"";const iso=`${this._parts.year.padStart(4,"0")}-${this._parts.month.padStart(2,"0")}-${this._parts.day.padStart(2,"0")}`;return parseISO(iso)?iso:""}commitFromFields(){super.value=this.computeCanonicalValue()}get eventDetail(){return{value:this.value,...this._parts}}detailFor(field){return{...this.eventDetail,field}}commitChangeIfNeeded(){if(this.value===this.lastCommittedValue)return;this.lastCommittedValue=this.value;const EventConstructor=this.ownerDocument.defaultView?.Event??Event,event=addCompatibilityDetail(new EventConstructor("change",{bubbles:!0,composed:!0}),this.detailFor(this.lastEditedField));this.dispatchEvent(event)}fieldInputElement(field){return this.renderRoot?.querySelector(`input[data-field="${field}"]`)??null}isRenderedFieldTarget(target){if(!target||typeof target!="object")return!1;const field=target.dataset?.field;return field!=="day"&&field!=="month"&&field!=="year"?!1:this.fieldInputElement(field)===target}focusAdjacentField(field,delta){const order=this.fieldOrder,targetIndex=order.indexOf(field)+delta;targetIndex<0||targetIndex>=order.length||this.fieldInputElement(order[targetIndex])?.focus()}updateValidity(){if(isBarredFromValidation(this,this.internals)){this[SET_ANCHORED_VALIDITY]({});return}const flags={};let message="";const blank=this._parts.day===""&&this._parts.month===""&&this._parts.year==="";if(this.value==="")this.required&&blank?(flags.valueMissing=!0,message=this.localize("fieldRequired")):blank||(flags.badInput=!0,message=this.localize("dateInputInvalid"));else{const date=parseISO(this.value),min=this.parseStrictISO(this.min),max=this.parseStrictISO(this.max);min&&date<min&&(flags.rangeUnderflow=!0,message=this.localize("dateInputMinMessage",void 0,{min:this.min})),max&&date>max&&(flags.rangeOverflow=!0,message||=this.localize("dateInputMaxMessage",void 0,{max:this.max}))}this[SET_ANCHORED_VALIDITY](flags,message)}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||(this.hasLabelSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="label"),this.hasHintSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="hint"),this.hasErrorSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="error"))}updated(changed){super.updated(changed),setCustomState(this.internals,"blank",this.value===""),setCustomState(this.internals,"disabled",this.effectiveDisabled),(changed.has("touched")||changed.has("required")||changed.has("value")||changed.has("min")||changed.has("max")||changed.has("readonly"))&&this.toggleAttribute("data-invalid",this.touched&&!this.internals.validity.valid),this.announceVisibleError()}formResetCallback(){super.formResetCallback(),this.touched=!1}formStateRestoreCallback(state2){this.value=typeof state2=="string"?state2:""}setCustomValidity(message){super.setCustomValidity(message),this.requestUpdate()}get validationTarget(){return this.validationTargetOverride??this.fieldInputElement(this.fieldOrder[0])??void 0}set validationTarget(next){const old=this.validationTarget;this.validationTargetOverride=next??void 0,this.requestUpdate("validationTarget",old)}[VALIDITY_ANCHOR](){return this.validationTarget}resetValidity(){this.setCustomValidity(""),this.updateValidity()}visibleErrorText(){const slottedElements=Array.from(this.children).filter(element=>element.getAttribute("slot")==="error");return slottedElements.length>0?slottedElements.map(element=>this.accessibleVisibleText(element)).join(" ").replace(/\s+/g," ").trim():(this.errorText||(this.touched?this.validationMessage:"")).trim()}accessibleVisibleText(node){if(node.nodeType===3)return node.textContent??"";if(node.nodeType!==1)return"";const element=node;if(isAccessibilitySubtreeExcluded(element))return"";const visibilityHidden=isAccessibilityVisibilityHidden(element),accessibleLabel=visibilityHidden?null:element.getAttribute("aria-label");if(accessibleLabel?.trim())return accessibleLabel;const assigned=element.localName==="slot"?element.assignedNodes({flatten:!0}):[];return(assigned.length>0?assigned:Array.from(element.childNodes)).map(child=>child.nodeType===3&&visibilityHidden?"":this.accessibleVisibleText(child)).join(" ")}announceVisibleError(){if(!this.errorAnnouncementsArmed||!isAccessibilityVisible(this))return;const message=this.visibleErrorText();message!==this.lastVisibleError&&(this.lastVisibleError=message,message&&this.errorAnnouncementSink?.announce(message))}normalizeFieldDigits(value){const digitMap=new Map([["٠","0"],["١","1"],["٢","2"],["٣","3"],["٤","4"],["٥","5"],["٦","6"],["٧","7"],["٨","8"],["٩","9"],["۰","0"],["۱","1"],["۲","2"],["۳","3"],["۴","4"],["۵","5"],["۶","6"],["۷","7"],["۸","8"],["۹","9"]]);try{const formatter=getNumberFormat(this.effectiveLocale||void 0,{useGrouping:!1});for(let digit=0;digit<=9;digit++)digitMap.set(formatter.format(digit),String(digit))}catch{}let normalized="";for(const character of value)character>="0"&&character<="9"?normalized+=character:normalized+=digitMap.get(character)??"";return normalized}focus(options){const target=this.fieldOrder.find(field=>this.textFor(field)==="")??this.fieldOrder[0];this.fieldInputElement(target)?.focus(options)}blur(){this.renderRoot.querySelector("input:focus")?.blur()}click(){this.fieldInputElement(this.fieldOrder[0])?.click()}renderField(field,describedBy,invalid){const id=this.idFor(field),maxLength=field==="year"?4:2;return html`
|
|
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{LyraElement}from"../../../internal/lyra-element.js";import{FormAssociated,isBarredFromValidation}from"../../../internal/form-associated.js";import{SET_ANCHORED_VALIDITY,VALIDITY_ANCHOR}from"../../../internal/anchored-validity.js";import{composedParentElement,isAccessibilitySubtreeExcluded,isAccessibilityVisible,isAccessibilityVisibilityHidden,nextId}from"../../../internal/a11y.js";import{acquireResolvedAriaRelationship}from"../../../internal/aria-controls.js";import{sizes}from"../../../internal/sizes.styles.js";import{styles}from"./known-date.styles.js";import{getDateTimeFormat,getNumberFormat}from"../../../internal/intl-cache.js";import{activeElementIn}from"../../../internal/active-element.js";import{isImplicitSubmission,submitOnEnter}from"../../../internal/submit-on-enter.js";import{setCustomState}from"../../../internal/custom-states.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{currentValidityValidator}from"../../forms/form-validator.js";import{LYRA_DEFAULT_dateInputInvalid,LYRA_DEFAULT_dateInputMaxMessage,LYRA_DEFAULT_dateInputMinMessage,LYRA_DEFAULT_fieldRequired,LYRA_DEFAULT_knownDateDay,LYRA_DEFAULT_knownDateMonth,LYRA_DEFAULT_knownDateYear}from"../../../internal/default-strings.generated.js";const EMPTY_PARTS={day:"",month:"",year:""};function localDate(year,month,day){const date=new Date(0);return date.setHours(0,0,0,0),date.setFullYear(year,month,day),date}function parseISO(value){const match=/^(\d{4})-(\d{2})-(\d{2})$/.exec(value);if(!match)return null;const year=Number(match[1]),month=Number(match[2]),day=Number(match[3]),date=localDate(year,month-1,day);return isNaN(date.getTime())||date.getFullYear()!==year||date.getMonth()!==month-1||date.getDate()!==day?null:date}function formatISO(date){const mm=String(date.getMonth()+1).padStart(2,"0"),dd=String(date.getDate()).padStart(2,"0");return`${String(date.getFullYear()).padStart(4,"0")}-${mm}-${dd}`}function localeDateOrder(locale){try{const order=getDateTimeFormat(locale||void 0,{year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(new Date(2026,0,2)).filter(p=>p.type==="day"||p.type==="month"||p.type==="year").map(p=>p.type);return order.length===3?order:["month","day","year"]}catch{return["month","day","year"]}}class LyraKnownDateBase extends LyraElement{}function addCompatibilityDetail(event,detail){return Object.defineProperty(event,"detail",{configurable:!0,value:detail}),event}class LyraKnownDate extends FormAssociated(LyraKnownDateBase){static{this.defaultStrings={...super.defaultStrings,dateInputInvalid:LYRA_DEFAULT_dateInputInvalid,dateInputMaxMessage:LYRA_DEFAULT_dateInputMaxMessage,dateInputMinMessage:LYRA_DEFAULT_dateInputMinMessage,fieldRequired:LYRA_DEFAULT_fieldRequired,knownDateDay:LYRA_DEFAULT_knownDateDay,knownDateMonth:LYRA_DEFAULT_knownDateMonth,knownDateYear:LYRA_DEFAULT_knownDateYear}}static get validators(){return[currentValidityValidator("required","disabled","readonly","value","min","max")]}static{this.styles=[LyraElement.styles,sizes,styles]}static{this.properties={min:{reflect:!0,noAccessor:!0},max:{reflect:!0,noAccessor:!0},readonly:{type:Boolean,reflect:!0,noAccessor:!0},parts:{attribute:!1,noAccessor:!0}}}constructor(){super(),this.size="m",this.appearance="outlined",this.pill=!1,this.label="",this.hint="",this.errorText="",this.locale="",this.autocomplete="",this.withLabel=!1,this.withHint=!1,this.accessibleLabel=null,this._parts={...EMPTY_PARTS},this.touched=!1,this.hasLabelSlot=!1,this.hasHintSlot=!1,this.hasErrorSlot=!1,this._min="",this._max="",this._readonly=!1,this.lastCommittedValue="",this.lastEditedField="day",this.errorAnnouncementsArmed=!1,this.lastVisibleError="",this.connectionGeneration=0,this.onForwardedSlotChange=event=>{const target=event.target;target?.nodeType!==1||target.localName!=="slot"||(this.bindErrorObserverTargets(),this.announceVisibleError())},this.hintId=nextId("known-date-hint"),this.errorId=nextId("known-date-error"),this.dayId=nextId("known-date-day"),this.monthId=nextId("known-date-month"),this.yearId=nextId("known-date-year"),this.onLabelSlotChange=e=>{this.hasLabelSlot=e.target.assignedElements({flatten:!0}).length>0},this.onHintSlotChange=e=>{this.hasHintSlot=e.target.assignedElements({flatten:!0}).length>0},this.onErrorSlotChange=e=>{this.hasErrorSlot=e.target.assignedElements({flatten:!0}).length>0},this.onFieldInput=(field,e)=>{e.stopPropagation();const input=e.target,maxLength=field==="year"?4:2,digits=this.normalizeFieldDigits(input.value).slice(0,maxLength);input.value!==digits&&(input.value=digits),this.setFieldText(field,digits),this.lastEditedField=field,this.commitFromFields();const InputEventConstructor=this.ownerDocument.defaultView?.InputEvent??InputEvent,event=addCompatibilityDetail(new InputEventConstructor("input",{bubbles:!0,composed:!0,inputType:e.inputType||"insertText"}),this.detailFor(field));this.dispatchEvent(event),field!=="year"&&digits.length===maxLength&&this.focusAdjacentField(field,1)},this.onFieldKeydown=(field,e)=>{const input=e.currentTarget;if(isImplicitSubmission(e)){if(this.effectiveDisabled||this.readonly)return;submitOnEnter(this,e,{beforeSubmit:()=>this.commitChangeIfNeeded()});return}if(e.key==="Backspace"&&this.textFor(field)===""){e.preventDefault(),this.focusAdjacentField(field,-1);return}if(e.key!=="ArrowLeft"&&e.key!=="ArrowRight")return;const atStart=input.selectionStart===0&&input.selectionEnd===0,atEnd=input.selectionStart===input.value.length&&input.selectionEnd===input.value.length,rtl=this.effectiveDirection==="rtl";e.key==="ArrowLeft"&&atStart?(e.preventDefault(),this.focusAdjacentField(field,rtl?1:-1)):e.key==="ArrowRight"&&atEnd&&(e.preventDefault(),this.focusAdjacentField(field,rtl?-1:1))},this.onFieldFocus=e=>{e.stopPropagation(),this.emit("focus")},this.onFieldBlur=e=>{e.stopPropagation(),this.commitChangeIfNeeded();const related=e.relatedTarget,active=activeElementIn(this.shadowRoot);e.isTrusted&&(this.isRenderedFieldTarget(related)||active!==e.target&&this.isRenderedFieldTarget(active))||(this.effectiveDisabled||(this.touched=!0),this.emit("blur"))},this.addEventListener("invalid",()=>{this.touched=!0})}connectedCallback(){super.connectedCallback(),this.hasUpdated&&this.syncExternalDescription(),this.errorAnnouncementSink??=acquireAnnouncementSink("assertive",{document:this.ownerDocument,source:this});const MutationObserverCtor=this.ownerDocument.defaultView?.MutationObserver;this.errorObserver=MutationObserverCtor?new MutationObserverCtor(()=>{this.bindErrorObserverTargets(),this.announceVisibleError()}):void 0,this.addEventListener("slotchange",this.onForwardedSlotChange),this.bindErrorObserverTargets(),this.errorAnnouncementsArmed=!1;const generation=++this.connectionGeneration;this.updateComplete.then(()=>{const view=this.ownerDocument.defaultView;return typeof view?.requestAnimationFrame=="function"?new Promise(resolve=>view.requestAnimationFrame(()=>resolve())):Promise.resolve()}).then(()=>this.updateComplete).then(()=>{!this.isConnected||generation!==this.connectionGeneration||(this.lastVisibleError=this.visibleErrorText(),this.errorAnnouncementsArmed=!0)})}observeErrorNode(node){if(this.errorObserver){if(node.nodeType===3){this.errorObserver.observe(node,{characterData:!0});return}node.nodeType===1&&this.errorObserver.observe(node,{attributes:!0,attributeFilter:["aria-hidden","aria-label","class","hidden","inert","slot","style"],characterData:!0,childList:!0,subtree:!0})}}bindErrorObserverTargets(){if(!this.errorObserver)return;this.errorObserver.disconnect(),this.observeErrorNode(this);let ancestor=composedParentElement(this);for(;ancestor;)this.errorObserver.observe(ancestor,{attributes:!0,attributeFilter:["aria-hidden","class","hidden","inert","style"]}),ancestor=composedParentElement(ancestor);const forwardedSlots=Array.from(this.children).filter(element=>element.getAttribute("slot")==="error").flatMap(branch=>[...branch.localName==="slot"?[branch]:[],...branch.querySelectorAll("slot")]);for(const slot of forwardedSlots)for(const assigned of slot.assignedNodes({flatten:!0}))this.observeErrorNode(assigned)}disconnectedCallback(){this.releaseExternalDescription(),this.connectionGeneration+=1,this.errorAnnouncementsArmed=!1,this.lastVisibleError="",this.removeEventListener("slotchange",this.onForwardedSlotChange),this.errorObserver?.disconnect(),this.errorObserver=void 0,this.errorAnnouncementSink?.release(),this.errorAnnouncementSink=void 0,super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.releaseExternalDescription(),this.isConnected&&this.hasUpdated&&this.syncExternalDescription()}syncExternalDescription(){if(!this.isConnected)return;const owner=this.renderRoot.querySelector('[part="fieldset"]');owner&&(this.externalDescriptionLease?this.externalDescriptionLease.update(owner):this.externalDescriptionLease=acquireResolvedAriaRelationship(this,owner,"aria-describedby"))}releaseExternalDescription(){this.externalDescriptionLease?.release(),this.externalDescriptionLease=void 0}get min(){return this._min}set min(next){const old=this._min;this._min=next??"",this.updateValidity(),this.requestUpdate("min",old)}get max(){return this._max}set max(next){const old=this._max;this._max=next??"",this.updateValidity(),this.requestUpdate("max",old)}get readonly(){return this._readonly}set readonly(next){const old=this._readonly;this._readonly=!!next,this.toggleAttribute("readonly",this._readonly),this.updateValidity(),this.requestUpdate("readonly",old)}get parts(){return this._parts}set parts(next){this.setParts(next,!0)}setParts(next,programmatic){const old=this._parts;this._parts={day:String(next?.day??""),month:String(next?.month??""),year:String(next?.year??"")},programmatic&&(this.commitFromFields(),this.lastCommittedValue=this.value),this.requestUpdate("parts",old)}get value(){return super.value}set value(next){const parsed=this.parseStrictISO(next??"");parsed?(this.setParts({day:String(parsed.getDate()),month:String(parsed.getMonth()+1),year:String(parsed.getFullYear())},!1),super.value=formatISO(parsed)):(this.setParts({day:"",month:"",year:""},!1),super.value=""),this.lastCommittedValue=super.value}get valueAsDate(){return this.value?parseISO(this.value):null}set valueAsDate(next){this.value=next?formatISO(next):""}parseStrictISO(value){return/^\d{4}-\d{2}-\d{2}$/.test(value)?parseISO(value):null}get fieldOrder(){return localeDateOrder(this.effectiveLocale)}textFor(field){return this._parts[field]}setFieldText(field,text){this.setParts({...this._parts,[field]:text},!1)}idFor(field){return field==="day"?this.dayId:field==="month"?this.monthId:this.yearId}get effectiveDayLabel(){return this.dayLabel??this.localize("knownDateDay")}get effectiveMonthLabel(){return this.monthLabel??this.localize("knownDateMonth")}get effectiveYearLabel(){return this.yearLabel??this.localize("knownDateYear")}labelFor(field){return field==="day"?this.effectiveDayLabel:field==="month"?this.effectiveMonthLabel:this.effectiveYearLabel}autocompleteFor(field){return this.autocomplete?this.autocomplete==="bday"?`bday-${field}`:this.autocomplete==="on"||this.autocomplete==="off"?this.autocomplete:field==="year"?this.autocomplete:"":""}computeCanonicalValue(){if(!this._parts.day||!this._parts.month||!this._parts.year)return"";const iso=`${this._parts.year.padStart(4,"0")}-${this._parts.month.padStart(2,"0")}-${this._parts.day.padStart(2,"0")}`;return parseISO(iso)?iso:""}commitFromFields(){super.value=this.computeCanonicalValue()}get eventDetail(){return{value:this.value,...this._parts}}detailFor(field){return{...this.eventDetail,field}}commitChangeIfNeeded(){if(this.value===this.lastCommittedValue)return;this.lastCommittedValue=this.value;const EventConstructor=this.ownerDocument.defaultView?.Event??Event,event=addCompatibilityDetail(new EventConstructor("change",{bubbles:!0,composed:!0}),this.detailFor(this.lastEditedField));this.dispatchEvent(event)}fieldInputElement(field){return this.renderRoot?.querySelector(`input[data-field="${field}"]`)??null}isRenderedFieldTarget(target){if(!target||typeof target!="object")return!1;const field=target.dataset?.field;return field!=="day"&&field!=="month"&&field!=="year"?!1:this.fieldInputElement(field)===target}focusAdjacentField(field,delta){const order=this.fieldOrder,targetIndex=order.indexOf(field)+delta;targetIndex<0||targetIndex>=order.length||this.fieldInputElement(order[targetIndex])?.focus()}updateValidity(){if(isBarredFromValidation(this,this.internals)){this[SET_ANCHORED_VALIDITY]({});return}const flags={};let message="";const blank=this._parts.day===""&&this._parts.month===""&&this._parts.year==="";if(this.value==="")this.required&&blank?(flags.valueMissing=!0,message=this.localize("fieldRequired")):blank||(flags.badInput=!0,message=this.localize("dateInputInvalid"));else{const date=parseISO(this.value),min=this.parseStrictISO(this.min),max=this.parseStrictISO(this.max);min&&date<min&&(flags.rangeUnderflow=!0,message=this.localize("dateInputMinMessage",void 0,{min:this.min})),max&&date>max&&(flags.rangeOverflow=!0,message||=this.localize("dateInputMaxMessage",void 0,{max:this.max}))}this[SET_ANCHORED_VALIDITY](flags,message)}willUpdate(changed){super.willUpdate(changed),this.hasUpdated||(this.hasLabelSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="label"),this.hasHintSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="hint"),this.hasErrorSlot=Array.from(this.children).some(el=>el.getAttribute("slot")==="error"))}updated(changed){super.updated(changed),this.syncExternalDescription(),setCustomState(this.internals,"blank",this.value===""),setCustomState(this.internals,"disabled",this.effectiveDisabled),(changed.has("touched")||changed.has("required")||changed.has("value")||changed.has("min")||changed.has("max")||changed.has("readonly"))&&this.toggleAttribute("data-invalid",this.touched&&!this.internals.validity.valid),this.announceVisibleError()}formResetCallback(){super.formResetCallback(),this.touched=!1}formStateRestoreCallback(state2){this.value=typeof state2=="string"?state2:""}setCustomValidity(message){super.setCustomValidity(message),this.requestUpdate()}get validationTarget(){return this.validationTargetOverride??this.fieldInputElement(this.fieldOrder[0])??void 0}set validationTarget(next){const old=this.validationTarget;this.validationTargetOverride=next??void 0,this.requestUpdate("validationTarget",old)}[VALIDITY_ANCHOR](){return this.validationTarget}resetValidity(){this.setCustomValidity(""),this.updateValidity()}visibleErrorText(){const slottedElements=Array.from(this.children).filter(element=>element.getAttribute("slot")==="error");return slottedElements.length>0?slottedElements.map(element=>this.accessibleVisibleText(element)).join(" ").replace(/\s+/g," ").trim():(this.errorText||(this.touched?this.validationMessage:"")).trim()}accessibleVisibleText(node){if(node.nodeType===3)return node.textContent??"";if(node.nodeType!==1)return"";const element=node;if(isAccessibilitySubtreeExcluded(element))return"";const visibilityHidden=isAccessibilityVisibilityHidden(element),accessibleLabel=visibilityHidden?null:element.getAttribute("aria-label");if(accessibleLabel?.trim())return accessibleLabel;const assigned=element.localName==="slot"?element.assignedNodes({flatten:!0}):[];return(assigned.length>0?assigned:Array.from(element.childNodes)).map(child=>child.nodeType===3&&visibilityHidden?"":this.accessibleVisibleText(child)).join(" ")}announceVisibleError(){if(!this.errorAnnouncementsArmed||!isAccessibilityVisible(this))return;const message=this.visibleErrorText();message!==this.lastVisibleError&&(this.lastVisibleError=message,message&&this.errorAnnouncementSink?.announce(message))}normalizeFieldDigits(value){const digitMap=new Map([["٠","0"],["١","1"],["٢","2"],["٣","3"],["٤","4"],["٥","5"],["٦","6"],["٧","7"],["٨","8"],["٩","9"],["۰","0"],["۱","1"],["۲","2"],["۳","3"],["۴","4"],["۵","5"],["۶","6"],["۷","7"],["۸","8"],["۹","9"]]);try{const formatter=getNumberFormat(this.effectiveLocale||void 0,{useGrouping:!1});for(let digit=0;digit<=9;digit++)digitMap.set(formatter.format(digit),String(digit))}catch{}let normalized="";for(const character of value)character>="0"&&character<="9"?normalized+=character:normalized+=digitMap.get(character)??"";return normalized}focus(options){const target=this.fieldOrder.find(field=>this.textFor(field)==="")??this.fieldOrder[0];this.fieldInputElement(target)?.focus(options)}blur(){this.renderRoot.querySelector("input:focus")?.blur()}click(){this.fieldInputElement(this.fieldOrder[0])?.click()}renderField(field,describedBy,invalid){const id=this.idFor(field),maxLength=field==="year"?4:2;return html`
|
|
2
2
|
<div part=${field==="day"?"field field-day":field==="month"?"field field-month":"field field-year"} data-field=${field}>
|
|
3
3
|
<label part="field-label" for=${id}>${this.labelFor(field)}</label>
|
|
4
4
|
<input
|
|
@@ -24,7 +24,7 @@ var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3
|
|
|
24
24
|
@blur=${this.onFieldBlur}
|
|
25
25
|
/>
|
|
26
26
|
</div>
|
|
27
|
-
`}render(){const hasLabel=this.withLabel||this.hasLabelSlot||this.label.length>0,validationError=this.touched?this.validationMessage:"",renderedError=this.errorText||validationError,hasHint=this.withHint||this.hasHintSlot||this.hint.length>0,hasError=this.hasErrorSlot||renderedError.length>0,invalid=this.touched&&!this.internals.validity.valid,describedBy=[hasHint?this.hintId:"",hasError?this.errorId:""].filter(Boolean).join(" ");return html`
|
|
27
|
+
`}render(){const hasLabel=this.withLabel||this.hasLabelSlot||(this.label??"").length>0,validationError=this.touched?this.validationMessage:"",renderedError=this.errorText||validationError,hasHint=this.withHint||this.hasHintSlot||(this.hint??"").length>0,hasError=this.hasErrorSlot||renderedError.length>0,invalid=this.touched&&!this.internals.validity.valid,describedBy=[hasHint?this.hintId:"",hasError?this.errorId:""].filter(Boolean).join(" ");return html`
|
|
28
28
|
<div part="form-control base known-date">
|
|
29
29
|
<input
|
|
30
30
|
data-value-input
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{css}from"lit";const styles=css`:host{--_lr-known-date-field-padding-block:var(--lr-form-control-padding-block);--_lr-known-date-field-padding-inline:var(--lr-form-control-padding-inline);--_lr-known-date-field-font-size:var(--lr-form-control-font-size);--_lr-known-date-field-gap:var(--lr-space-s);--_lr-known-date-field-fill:var(--lr-color-surface);--_lr-known-date-field-border-color:var(--lr-color-border);--_lr-known-date-year-field-width:var(--lr-size-5em);--_lr-known-date-day-field-width:var(--lr-size-3-5em);--_lr-known-date-month-field-width:var(--lr-size-3-5em);--_lr-known-date-field-min-height:max(var(--lr-form-control-height), var(--lr-size-24px));display:block}[part~=form-control]{min-inline-size:0}:host([appearance=filled]){--_lr-known-date-field-border-color:transparent;--_lr-known-date-field-fill:var(--lr-color-surface-raised)}:host([appearance=filled-outlined]){--_lr-known-date-field-fill:var(--lr-color-surface-raised)}:host([pill]) [part=field-input]{border-radius:var(--lr-radius-pill)}[part=fieldset]{border:none;min-inline-size:0;margin:0;padding:0}[part=legend]{color:var(--lr-color-text);font-size:var(--lr-font-size-md-sm);font-weight:var(--lr-font-weight-semibold);overflow-wrap:anywhere;margin-block-end:var(--lr-space-xs);padding:0;display:block}[part=legend][hidden]{display:none}:host([required]) [part=legend]:after{content:var(--lr-form-control-required-content," *");color:var(--lr-form-control-required-color,var(--lr-color-danger));margin-inline-start:var(--lr-form-control-required-offset,0)}[part~=fields]{gap:var(--lr-known-date-field-gap,var(--_lr-known-date-field-gap));flex-wrap:wrap;display:flex}[part~=field]{gap:var(--lr-space-2xs);flex-direction:column;min-inline-size:0;display:flex}[part=field-label]{font-size:var(--lr-font-size-sm);color:var(--lr-color-text-quiet);overflow-wrap:anywhere}[part=field-input]{box-sizing:border-box;min-block-size:var(--lr-known-date-field-height,var(--lr-known-date-field-min-height,var(--_lr-known-date-field-min-height)));block-size:var(--lr-known-date-field-height,auto);padding-block:var(--lr-known-date-field-padding-block,var(--_lr-known-date-field-padding-block));padding-inline:var(--lr-known-date-field-padding-inline,var(--_lr-known-date-field-padding-inline));border:var(--lr-border-width-thin) solid var(--_lr-known-date-field-border-color);border-radius:var(--lr-form-control-radius);background:var(--_lr-known-date-field-fill);color:var(--lr-color-text);font-family:inherit;font-size:var(--lr-known-date-field-font-size,var(--_lr-known-date-field-font-size));text-align:center}[part~=field][data-field=day] [part=field-input]{inline-size:var(--lr-known-date-day-field-width,var(--_lr-known-date-day-field-width))}[part~=field][data-field=month] [part=field-input]{inline-size:var(--lr-known-date-month-field-width,var(--_lr-known-date-month-field-width))}[part~=field][data-field=year] [part=field-input]{inline-size:var(--lr-known-date-year-field-width,var(--_lr-known-date-year-field-width))}[part=field-input]:hover{border-color:var(--lr-color-brand)}[part=field-input]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}:host([data-invalid]) [part=field-input]{border-color:var(--lr-known-date-invalid-border-color,var(--lr-color-danger))}[part=field-input]:disabled{opacity:var(--lr-opacity-disabled);cursor:not-allowed}[part=hint]{font-size:var(--lr-font-size-sm);color:var(--lr-color-text-quiet);overflow-wrap:anywhere;margin-block-start:var(--lr-space-xs)}[part=hint][hidden]{display:none}[part=error]{font-size:var(--lr-font-size-sm);color:var(--lr-color-danger);overflow-wrap:anywhere;margin-block-start:var(--lr-space-xs)}[part=error][hidden]{display:none}`;export{styles};
|
|
1
|
+
import{css}from"lit";const styles=css`:host{--_lr-known-date-field-padding-block:var(--lr-form-control-padding-block);--_lr-known-date-field-padding-inline:var(--lr-form-control-padding-inline);--_lr-known-date-field-font-size:var(--lr-form-control-font-size);--_lr-known-date-field-gap:var(--lr-space-s);--_lr-known-date-field-fill:var(--lr-color-surface);--_lr-known-date-field-border-color:var(--lr-color-border);--_lr-known-date-year-field-width:var(--lr-size-5em);--_lr-known-date-day-field-width:var(--lr-size-3-5em);--_lr-known-date-month-field-width:var(--lr-size-3-5em);--_lr-known-date-field-min-height:max(var(--lr-form-control-height), var(--lr-size-24px));display:block}[part~=form-control]{min-inline-size:0}:host([appearance=filled]){--_lr-known-date-field-border-color:transparent;--_lr-known-date-field-fill:var(--lr-color-surface-raised)}:host([appearance=filled-outlined]){--_lr-known-date-field-fill:var(--lr-color-surface-raised)}:host([pill]) [part=field-input]{border-radius:var(--lr-radius-pill)}[part=fieldset]{border:none;min-inline-size:0;margin:0;padding:0}[part=legend]{color:var(--lr-color-text);font-size:var(--lr-font-size-md-sm);font-weight:var(--lr-font-weight-semibold);overflow-wrap:anywhere;margin-block-end:var(--lr-space-xs);padding:0;display:block}[part=legend][hidden]{display:none}:host([required]) [part=legend]:after{content:var(--lr-form-control-required-content," *");color:var(--lr-form-control-required-color,var(--lr-color-danger));margin-inline-start:var(--lr-form-control-required-offset,0)}[part~=fields]{gap:var(--lr-known-date-field-gap,var(--_lr-known-date-field-gap));flex-wrap:wrap;display:flex}[part~=field]{gap:var(--lr-space-2xs);flex-direction:column;min-inline-size:0;display:flex}[part=field-label]{font-size:var(--lr-font-size-sm);color:var(--lr-color-text-quiet);overflow-wrap:anywhere}[part=field-input]{box-sizing:border-box;min-block-size:var(--lr-known-date-field-height,var(--lr-known-date-field-min-height,var(--_lr-known-date-field-min-height)));block-size:var(--lr-known-date-field-height,auto);padding-block:var(--lr-known-date-field-padding-block,var(--_lr-known-date-field-padding-block));padding-inline:var(--lr-known-date-field-padding-inline,var(--_lr-known-date-field-padding-inline));border:var(--lr-border-width-thin) solid var(--_lr-known-date-field-border-color);border-radius:var(--lr-form-control-radius);background:var(--_lr-known-date-field-fill);color:var(--lr-color-text);font-family:inherit;font-size:var(--lr-known-date-field-font-size,var(--_lr-known-date-field-font-size));text-align:center}[part~=field][data-field=day] [part=field-input]{inline-size:var(--lr-known-date-day-field-width,var(--_lr-known-date-day-field-width))}[part~=field][data-field=month] [part=field-input]{inline-size:var(--lr-known-date-month-field-width,var(--_lr-known-date-month-field-width))}[part~=field][data-field=year] [part=field-input]{inline-size:var(--lr-known-date-year-field-width,var(--_lr-known-date-year-field-width))}[part=field-input]:where(:not(:disabled)):hover{border-color:var(--lr-color-brand)}[part=field-input]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}:host([data-invalid]) [part=field-input]{border-color:var(--lr-known-date-invalid-border-color,var(--lr-color-danger))}[part=field-input]:disabled{opacity:var(--lr-opacity-disabled);cursor:not-allowed}[part=hint]{font-size:var(--lr-font-size-sm);color:var(--lr-color-text-quiet);overflow-wrap:anywhere;margin-block-start:var(--lr-space-xs)}[part=hint][hidden]{display:none}[part=error]{font-size:var(--lr-font-size-sm);color:var(--lr-color-danger);overflow-wrap:anywhere;margin-block-start:var(--lr-space-xs)}[part=error][hidden]{display:none}`;export{styles};
|
|
@@ -144,7 +144,8 @@ anchor?:HTMLElement;private _items;
|
|
|
144
144
|
* filtered/rendered projection. */
|
|
145
145
|
get items():readonly Readonly<LyraMentionItem>[];set items(next:readonly LyraMentionItem[]);
|
|
146
146
|
/** The text typed since the trigger character (`@`/`/`/…) — drives the
|
|
147
|
-
* built-in internal filtering (see `filter` to override it).
|
|
147
|
+
* built-in internal filtering (see `filter` to override it). Removing the attribute
|
|
148
|
+
* uses the unfiltered empty-query behavior without changing null readback. */
|
|
148
149
|
query:string;
|
|
149
150
|
/** Whether the popover is shown. */
|
|
150
151
|
open:boolean;
|
|
@@ -190,6 +191,7 @@ get listboxId():string;
|
|
|
190
191
|
* popover is open. Returns `true` when the key was intercepted
|
|
191
192
|
* (`preventDefault()` already called) and the host should not also act on
|
|
192
193
|
* it; `false` when the host's normal handling should proceed untouched --
|
|
194
|
+
* including composing events and the legacy keyCode 229 marker,
|
|
193
195
|
* including ArrowDown/ArrowUp/Enter/Tab when there are zero filtered rows
|
|
194
196
|
* to act on, so e.g. the host's own textarea still moves its caret a line
|
|
195
197
|
* normally rather than having the keystroke silently eaten.
|
|
@@ -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,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{deferredPlaceReady as place}from"../../../internal/anchored-overlay-runtime.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{styles}from"./mention-popover.styles.js";import{activeElementIn}from"../../../internal/active-element.js";import{LYRA_DEFAULT_mentionResultCount,LYRA_DEFAULT_mentionResultPosition,LYRA_DEFAULT_mentionSuggestions,LYRA_DEFAULT_noMatches}from"../../../internal/default-strings.generated.js";function isTextControl(el){const view=el.ownerDocument.defaultView;return view?el instanceof view.HTMLTextAreaElement?!0:el instanceof view.HTMLInputElement&&(el.type==="text"||el.type==="search"):!1}function isTextareaAnchor(el){const view=el.ownerDocument.defaultView;return!!(view&&el instanceof view.HTMLTextAreaElement)}const MIRROR_CSS_PROPS=["box-sizing","width","padding-top","padding-right","padding-bottom","padding-left","border-top-width","border-right-width","border-bottom-width","border-left-width","border-style","font-family","font-size","font-style","font-variant","font-weight","font-stretch","letter-spacing","word-spacing","line-height","text-align","text-indent","text-transform","tab-size","direction"];function caretClientRect(el){const owner=el.ownerDocument,view=owner.defaultView;if(!view)return null;const elRect=el.getBoundingClientRect();if(elRect.width===0||elRect.height===0)return null;const computed=view.getComputedStyle(el),mirror=owner.createElement("div");mirror.style.position="absolute",mirror.style.visibility="hidden",mirror.style.top="0",mirror.style.left="-9999px",mirror.style.whiteSpace=el instanceof view.HTMLTextAreaElement?"pre-wrap":"pre",mirror.style.overflowWrap="break-word";for(const prop of MIRROR_CSS_PROPS)mirror.style.setProperty(prop,computed.getPropertyValue(prop));const index=el.selectionStart??el.value.length;mirror.append(owner.createTextNode(el.value.slice(0,index)));const marker=owner.createElement("span");marker.textContent=el.value.slice(index)||"",mirror.appendChild(marker),owner.body.appendChild(mirror);const mirrorRect=mirror.getBoundingClientRect(),markerRect=marker.getBoundingClientRect();mirror.remove();const lineHeight=parseFloat(computed.lineHeight)||markerRect.height||16;return new view.DOMRect(elRect.left+(markerRect.left-mirrorRect.left)-el.scrollLeft,elRect.top+(markerRect.top-mirrorRect.top)-el.scrollTop,1,lineHeight)}class LyraMentionPopover extends LyraElement{constructor(){super(...arguments),this._textareaFocusSessionGeneration=0,this._items=Object.freeze([]),this.query="",this.open=!1,this.filter=null,this.activeIndex=0,this._listId=nextId("mention-popover-listbox"),this.virtualAnchor=null,this._isFirstUpdate=!0,this._silentClose=!1,this._ownsFocus=!1,this._focusTransferGeneration=0,this.onListboxMouseDown=e=>{e.target.closest('[part="option"]')&&e.preventDefault()},this.onListboxClick=e=>{const optionEl=e.target.closest('[part="option"]'),index=Number(optionEl?.dataset.index);if(!Number.isInteger(index)||index<0)return;const item=this.filteredItems[index];item&&this.commit(item)},this.onListboxKeyDown=e=>{e.defaultPrevented||!this._ownsFocus||this.handleKeyDown(e)&&this.open&&this.focusActiveOption()}}static{this.defaultStrings={...super.defaultStrings,mentionResultCount:LYRA_DEFAULT_mentionResultCount,mentionResultPosition:LYRA_DEFAULT_mentionResultPosition,mentionSuggestions:LYRA_DEFAULT_mentionSuggestions,noMatches:LYRA_DEFAULT_noMatches}}static{this.styles=[LyraElement.styles,styles]}static{this.properties={items:{attribute:!1,noAccessor:!0}}}requestUpdate(name,oldValue,options){(name==="open"||name==="anchor"||name==="query"||name==="items"||name==="filter")&&this.hasTextareaFocusSession()&&(this._textareaFocusSessionGeneration+=1),super.requestUpdate(name,oldValue,options)}hasTextareaFocusSession(){const relationshipControl=this.anchorRelationship?.control;return this.anchor!==void 0&&isTextareaAnchor(this.anchor)||relationshipControl!==void 0&&isTextareaAnchor(relationshipControl)}get items(){return this._items}set items(next){const previous=this._items,source=Array.isArray(next)?next:[];this._items=Object.freeze(source.map(item=>Object.freeze({...item}))),this.requestUpdate("items",previous)}connectedCallback(){super.connectedCallback(),this.syncAnnouncementSink(),this.announceResultState()}willUpdate(changed){super.willUpdate(changed),this._isFirstUpdate=!this.hasUpdated,this._ownsFocus&&!this.fallbackFocusIsStillOwned()&&(this._ownsFocus=!1,this._focusOwnerPredicate=void 0),(changed.has("query")||changed.has("items")||changed.has("filter"))&&(this.activeIndex=0);const candidatesChanged=changed.has("query")||changed.has("items")||changed.has("filter");this._ownsFocus&&changed.has("open")&&!this.open?(this.restoreAnchorFocus(),this._ownsFocus=!1,this._focusOwnerPredicate=void 0):this._ownsFocus&&this.open&&candidatesChanged&&this.filteredItems.length===0&&(this.anchor?.isConnected?this.restoreAnchorFocus():this.renderRoot.querySelector('[part="listbox"]')?.focus({preventScroll:!0}),this._ownsFocus=!1,this._focusOwnerPredicate=void 0),this._ownsFocus&&changed.has("anchor")&&this.anchorRelationship?.control!==this.anchor&&this.detachAnchorRelationship()}updated(changed){if(super.updated(changed),changed.has("open"))if(this.open)this.reposition();else{this.cleanup?.(),this.cleanup=void 0,this.virtualAnchor?.remove();const relationshipControl=this.anchorRelationship?.control;relationshipControl&&isTextareaAnchor(relationshipControl)&&this.detachAnchorRelationship(),!this._isFirstUpdate&&!this._silentClose&&queueMicrotask(()=>this.emit("lr-mention-close")),this._silentClose=!1}else this.open&&(changed.has("anchor")||changed.has("query"))&&this.reposition();if(changed.has("activeIndex")||changed.has("query")||changed.has("items")||changed.has("filter")){const active=this.renderRoot.querySelector('[part="option"][data-active]');active?.scrollIntoView({block:"nearest"}),this._ownsFocus&&(!active&&this.anchor?.isConnected?this.restoreFocus():this.restoreFocus(!0))}this.syncAnchorRelationship(),this.open?this.announceResultState():this.resetResultAnnouncements()}disconnectedCallback(){this._focusTransferGeneration+=1,this.resetResultAnnouncements(),this.announcementSink?.release(),this.announcementSink=void 0,this._ownsFocus&&this.callFocusOwner(this._focusOwnerPredicate)&&this.restoreAnchorFocus(),this._ownsFocus=!1,this._focusOwnerPredicate=void 0,this.detachAnchorRelationship(),super.disconnectedCallback(),this.cleanup?.(),this.cleanup=void 0,this.virtualAnchor?.remove(),this.open=!1}adoptedCallback(){super.adoptedCallback(),this._focusTransferGeneration+=1,this.resetResultAnnouncements(),this.syncAnnouncementSink(),this._ownsFocus&&this.callFocusOwner(this._focusOwnerPredicate)&&this.restoreAnchorFocus(),this._ownsFocus=!1,this._focusOwnerPredicate=void 0,this.detachAnchorRelationship(),this.open=!1}syncAnnouncementSink(){this.announcementSink?.element?.ownerDocument!==this.ownerDocument&&(this.announcementSink?.release(),this.announcementSink=this.isConnected?acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}):void 0)}resetResultAnnouncements(){this.announcedResultCount=void 0,this.announcedResultPosition=void 0}announceResultState(){if(!this.open||!this.announcementSink)return;const rows=this.filteredItems,resultState=rows.length===0?this.localize("noMatches"):this.localize("mentionResultCount",void 0,{count:rows.length}),index=this.clampedIndex(rows),position=index<0?void 0:this.localize("mentionResultPosition",void 0,{current:index+1,total:rows.length});if(this._isFirstUpdate){this.announcedResultCount=resultState,this.announcedResultPosition=position;return}if(resultState!==this.announcedResultCount&&(this.announcementSink.announce(resultState),this.announcedResultCount=resultState),position===void 0){this.announcedResultPosition=void 0;return}position!==this.announcedResultPosition&&(this.announcementSink.announce(position),this.announcedResultPosition=position)}snapshotAttribute(control,name){return{present:control.hasAttribute(name),value:control.getAttribute(name)}}restoreAttribute(control,name,snapshot){snapshot.present?control.setAttribute(name,snapshot.value??""):control.removeAttribute(name)}captureAnchorCaret(relationship=this.anchorRelationship){if(!relationship||!isTextareaAnchor(relationship.control))return;const{control}=relationship;relationship.selectionStart=control.selectionStart,relationship.selectionEnd=control.selectionEnd,relationship.selectionDirection=control.selectionDirection}restoreRelationshipFocus(relationship){const{control}=relationship;if(control.isConnected)try{control.focus({preventScroll:!0}),isTextareaAnchor(control)&&relationship.selectionStart!==null&&relationship.selectionStart!==void 0&&relationship.selectionEnd!==null&&relationship.selectionEnd!==void 0&&control.setSelectionRange(relationship.selectionStart,relationship.selectionEnd,relationship.selectionDirection??void 0)}catch{}}restoreAnchorFocus(){const relationship=this.anchorRelationship;if(relationship){this.restoreRelationshipFocus(relationship);return}const anchor=this.anchor;if(anchor?.isConnected)try{anchor.focus({preventScroll:!0})}catch{}}attachAnchorRelationship(control){const reflected=control,textarea=isTextareaAnchor(control),attributes=new Map((textarea?["role","aria-expanded","aria-haspopup","aria-autocomplete","aria-controls","aria-activedescendant"]:["role","aria-expanded","aria-haspopup","aria-controls","aria-activedescendant"]).map(name=>[name,this.snapshotAttribute(control,name)])),activeElement="ariaActiveDescendantElement"in control?reflected.ariaActiveDescendantElement??null:void 0,controlsElements="ariaControlsElements"in control?reflected.ariaControlsElements??null:void 0,capturedTextareaActiveElement=textarea&&attributes.get("aria-activedescendant")?.present&&attributes.get("aria-activedescendant")?.value===""?activeElement??void 0:void 0,capturedTextareaControlsElements=textarea&&attributes.get("aria-controls")?.present&&attributes.get("aria-controls")?.value===""&&controlsElements?.length?controlsElements:void 0,relationship={control,attributes,activeElement:textarea?capturedTextareaActiveElement:activeElement,controlsElements:textarea?capturedTextareaControlsElements:controlsElements,selectionStart:textarea?control.selectionStart:void 0,selectionEnd:textarea?control.selectionEnd:void 0,selectionDirection:textarea?control.selectionDirection:void 0};return this.anchorRelationship=relationship,relationship}detachAnchorRelationship(){const relationship=this.anchorRelationship;if(!relationship)return;if(this.anchorRelationship=void 0,this._ownsFocus&&(this.restoreRelationshipFocus(relationship),this._ownsFocus=!1,this._focusOwnerPredicate=void 0),!isTextareaAnchor(relationship.control)){const reflected2=relationship.control;if(relationship.activeElement!==void 0)try{reflected2.ariaActiveDescendantElement=relationship.activeElement}catch{}if(relationship.controlsElements!==void 0)try{reflected2.ariaControlsElements=relationship.controlsElements}catch{}for(const[name,snapshot]of relationship.attributes)this.restoreAttribute(relationship.control,name,snapshot);return}for(const[name,snapshot]of relationship.attributes)this.restoreAttribute(relationship.control,name,snapshot);const reflected=relationship.control;if(relationship.activeElement!==void 0)try{reflected.ariaActiveDescendantElement=relationship.activeElement}catch{}if(relationship.controlsElements!==void 0)try{reflected.ariaControlsElements=relationship.controlsElements}catch{}}syncAnchorRelationship(){const next=this.open&&this.anchor&&isTextControl(this.anchor)?this.anchor:void 0;if(this.anchorRelationship?.control!==next&&this.detachAnchorRelationship(),!next)return;const relationship=this.anchorRelationship??this.attachAnchorRelationship(next),control=relationship.control;if(isTextareaAnchor(control)){control.removeAttribute("role"),control.removeAttribute("aria-expanded"),control.removeAttribute("aria-controls"),control.removeAttribute("aria-activedescendant");const reflected2=control;if(relationship.activeElement!==void 0)try{reflected2.ariaActiveDescendantElement=null}catch{}if(relationship.controlsElements!==void 0)try{reflected2.ariaControlsElements=null}catch{}control.removeAttribute("aria-controls"),control.removeAttribute("aria-activedescendant"),control.setAttribute("aria-haspopup","listbox"),control.setAttribute("aria-autocomplete","list");return}relationship.attributes.get("role")?.present||control.setAttribute("role","combobox"),control.setAttribute("aria-expanded","true"),control.setAttribute("aria-haspopup","listbox");const listbox=this.renderRoot.querySelector('[part="listbox"]'),reflected=control;if(listbox&&"ariaControlsElements"in control)try{control.removeAttribute("aria-controls"),reflected.ariaControlsElements=[listbox],reflected.ariaControlsElements?.[0]!==listbox&&(reflected.ariaControlsElements=[this],reflected.ariaControlsElements?.[0]!==this&&control.removeAttribute("aria-controls"))}catch{control.removeAttribute("aria-controls")}else control.removeAttribute("aria-controls");control.removeAttribute("aria-activedescendant"),this.syncActiveDescendant(control)}get filteredItems(){const locale=this.effectiveLocale,q=this.query.trim().toLocaleLowerCase(locale);return this.items.filter(item=>typeof item.label!="string"?!1:q?this.filter?this.filter(item,q):item.label.toLocaleLowerCase(locale).includes(q)||(typeof item.description=="string"?item.description:"").toLocaleLowerCase(locale).includes(q):!0)}get activeDescendantId(){if(!this.open)return null;const idx=this.clampedIndex(this.filteredItems);return idx>=0?this.rowId(idx):null}get activeDescendantElement(){const id=this.activeDescendantId,escape=this.ownerDocument.defaultView?.CSS.escape;return id&&escape?this.renderRoot.querySelector(`#${escape(id)}`):null}syncActiveDescendant(_control){if(isTextareaAnchor(_control)||(_control.removeAttribute("aria-activedescendant"),!("ariaActiveDescendantElement"in _control)))return!1;const active=this.activeDescendantElement;try{const reflected=_control;reflected.ariaActiveDescendantElement=active;const accepted=reflected.ariaActiveDescendantElement===active;return accepted||(reflected.ariaActiveDescendantElement=null,_control.removeAttribute("aria-activedescendant")),accepted}catch{return _control.removeAttribute("aria-activedescendant"),!1}}async focusActiveOption(options={}){const ownsFocus=options.ownsFocus??(this._ownsFocus?this._focusOwnerPredicate:void 0);if(!this.open||!this.isConnected||!this.activeDescendantElement||!this.callFocusOwner(ownsFocus))return!1;const generation=++this._focusTransferGeneration,textareaSession=this.anchor!==void 0&&isTextareaAnchor(this.anchor),textareaSessionGeneration=this._textareaFocusSessionGeneration,snapshot={ownerDocument:this.ownerDocument,anchor:this.anchor,items:this.items,query:this.query,filter:this.filter,activeIndex:this.activeIndex};if(await this.updateComplete,await this.cleanup?.ready===!1||generation!==this._focusTransferGeneration||textareaSession&&textareaSessionGeneration!==this._textareaFocusSessionGeneration||!this.isConnected||!this.open||this.ownerDocument!==snapshot.ownerDocument||this.anchor!==snapshot.anchor||this.items!==snapshot.items||this.query!==snapshot.query||this.filter!==snapshot.filter||this.activeIndex!==snapshot.activeIndex||!this.callFocusOwner(ownsFocus))return!1;const active=this.activeDescendantElement;return!active?.isConnected||!this.callFocusOwner(ownsFocus)||(this.captureAnchorCaret(),active.focus({preventScroll:!0}),activeElementIn(this.shadowRoot)!==active)?!1:(this._focusOwnerPredicate=ownsFocus,this._ownsFocus=!0,!0)}async restoreFocus(waitForPlacement=!1){if(waitForPlacement){if(await this.cleanup?.ready===!1||!this._ownsFocus||!this.open)return;if(this.hasTextareaFocusSession()&&!this.fallbackFocusIsStillOwned()){this._ownsFocus=!1,this._focusOwnerPredicate=void 0;return}}const active=this.renderRoot.querySelector('[part="option"][data-active]');active?active.focus({preventScroll:!0}):this.anchor?.isConnected?(this.renderRoot.querySelector('[part="listbox"]')?.setAttribute("tabindex","-1"),this.restoreAnchorFocus(),this.scheduleAfterUpdate(()=>{this._ownsFocus=!1,this._focusOwnerPredicate=void 0})):this.renderRoot.querySelector('[part="listbox"]')?.focus({preventScroll:!0})}callFocusOwner(predicate){try{return predicate?.()??!0}catch{return!1}}fallbackFocusIsStillOwned(){return this.callFocusOwner(this._focusOwnerPredicate)&&activeElementIn(this.shadowRoot)!==null}get listboxId(){return this._listId}handleKeyDown(e){if(!this.open)return!1;const rows=this.filteredItems;switch(e.key){case"ArrowDown":return rows.length?(e.preventDefault(),this.activeIndex=Math.min(rows.length-1,this.clampedIndex(rows)+1),!0):!1;case"ArrowUp":return rows.length?(e.preventDefault(),this.activeIndex=Math.max(0,this.clampedIndex(rows)-1),!0):!1;case"Enter":case"Tab":{const idx=this.clampedIndex(rows);return idx<0?!1:(e.preventDefault(),this.commit(rows[idx]),!0)}case"Escape":return e.preventDefault(),this.open=!1,!0;default:return!1}}clampedIndex(rows){return rows.length?Math.min(Math.max(this.activeIndex,0),rows.length-1):-1}rowId(index){return`${this._listId}-opt-${index}`}commit(item){const index=this.items.indexOf(item);if(index<0)return;const relationshipControl=this.anchorRelationship?.control;relationshipControl&&isTextareaAnchor(relationshipControl)&&this.detachAnchorRelationship(),this.emit("lr-mention-select",Object.freeze({suggestionId:item.suggestionId,index,label:item.label})),this._silentClose=!0,this.open=!1}reposition(){this.cleanup?.(),this.cleanup=void 0;const anchorEl=this.resolveAnchorElement(),popup=this.renderRoot.querySelector('[part="listbox"]');if(anchorEl&&popup){const placement=place(anchorEl,popup,{placement:"bottom-start"});this.cleanup=placement,placement.ready.then(positioned=>{positioned||this.cleanup!==placement||!this.open||(this._silentClose=!0,this.open=!1)})}}resolveAnchorElement(){const anchor=this.anchor;if(!anchor)return null;if(isTextControl(anchor)){const rect=caretClientRect(anchor);if(rect){const owner=anchor.ownerDocument;this.virtualAnchor&&this.virtualAnchor.ownerDocument!==owner&&(this.virtualAnchor.remove(),this.virtualAnchor=null);const virtual=this.virtualAnchor??(this.virtualAnchor=owner.createElement("div"));return virtual.style.position="fixed",virtual.style.left=`${rect.left}px`,virtual.style.top=`${rect.top}px`,virtual.style.width="0",virtual.style.height=`${rect.height}px`,virtual.style.pointerEvents="none",virtual.isConnected||owner.body.appendChild(virtual),virtual}}return anchor}get effectiveEmptyText(){return this.emptyText===void 0?this.localize("noMatches"):this.emptyText}get effectiveLabel(){return hostAriaLabel(this)??(this.label===void 0?this.localize("mentionSuggestions"):this.label)}renderRow(item,index,activeId){const id=this.rowId(index),active=id===activeId;return html`
|
|
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,state}from"lit/decorators.js";import{LyraElement}from"../../../internal/lyra-element.js";import{deferredPlaceReady as place}from"../../../internal/anchored-overlay-runtime.js";import{hostAriaLabel,nextId}from"../../../internal/a11y.js";import{acquireAnnouncementSink}from"../../../internal/announcer.js";import{styles}from"./mention-popover.styles.js";import{activeElementIn}from"../../../internal/active-element.js";import{LYRA_DEFAULT_mentionResultCount,LYRA_DEFAULT_mentionResultPosition,LYRA_DEFAULT_mentionSuggestions,LYRA_DEFAULT_noMatches}from"../../../internal/default-strings.generated.js";function isTextControl(el){const view=el.ownerDocument.defaultView;return view?el instanceof view.HTMLTextAreaElement?!0:el instanceof view.HTMLInputElement&&(el.type==="text"||el.type==="search"):!1}function isTextareaAnchor(el){const view=el.ownerDocument.defaultView;return!!(view&&el instanceof view.HTMLTextAreaElement)}const MIRROR_CSS_PROPS=["box-sizing","width","padding-top","padding-right","padding-bottom","padding-left","border-top-width","border-right-width","border-bottom-width","border-left-width","border-style","font-family","font-size","font-style","font-variant","font-weight","font-stretch","letter-spacing","word-spacing","line-height","text-align","text-indent","text-transform","tab-size","direction"];function caretClientRect(el){const owner=el.ownerDocument,view=owner.defaultView;if(!view)return null;const elRect=el.getBoundingClientRect();if(elRect.width===0||elRect.height===0)return null;const computed=view.getComputedStyle(el),mirror=owner.createElement("div");mirror.style.position="absolute",mirror.style.visibility="hidden",mirror.style.top="0",mirror.style.left="-9999px",mirror.style.whiteSpace=el instanceof view.HTMLTextAreaElement?"pre-wrap":"pre",mirror.style.overflowWrap="break-word";for(const prop of MIRROR_CSS_PROPS)mirror.style.setProperty(prop,computed.getPropertyValue(prop));const index=el.selectionStart??el.value.length;mirror.append(owner.createTextNode(el.value.slice(0,index)));const marker=owner.createElement("span");marker.textContent=el.value.slice(index)||"",mirror.appendChild(marker),owner.body.appendChild(mirror);const mirrorRect=mirror.getBoundingClientRect(),markerRect=marker.getBoundingClientRect();mirror.remove();const lineHeight=parseFloat(computed.lineHeight)||markerRect.height||16;return new view.DOMRect(elRect.left+(markerRect.left-mirrorRect.left)-el.scrollLeft,elRect.top+(markerRect.top-mirrorRect.top)-el.scrollTop,1,lineHeight)}class LyraMentionPopover extends LyraElement{constructor(){super(...arguments),this._textareaFocusSessionGeneration=0,this._items=Object.freeze([]),this.query="",this.open=!1,this.filter=null,this.activeIndex=0,this._listId=nextId("mention-popover-listbox"),this.virtualAnchor=null,this._isFirstUpdate=!0,this._silentClose=!1,this._ownsFocus=!1,this._focusTransferGeneration=0,this.onListboxMouseDown=e=>{e.target.closest('[part="option"]')&&e.preventDefault()},this.onListboxClick=e=>{const optionEl=e.target.closest('[part="option"]'),index=Number(optionEl?.dataset.index);if(!Number.isInteger(index)||index<0)return;const item=this.filteredItems[index];item&&this.commit(item)},this.onListboxKeyDown=e=>{e.defaultPrevented||!this._ownsFocus||this.handleKeyDown(e)&&this.open&&this.focusActiveOption()}}static{this.defaultStrings={...super.defaultStrings,mentionResultCount:LYRA_DEFAULT_mentionResultCount,mentionResultPosition:LYRA_DEFAULT_mentionResultPosition,mentionSuggestions:LYRA_DEFAULT_mentionSuggestions,noMatches:LYRA_DEFAULT_noMatches}}static{this.styles=[LyraElement.styles,styles]}static{this.properties={items:{attribute:!1,noAccessor:!0}}}requestUpdate(name,oldValue,options){(name==="open"||name==="anchor"||name==="query"||name==="items"||name==="filter")&&this.hasTextareaFocusSession()&&(this._textareaFocusSessionGeneration+=1),super.requestUpdate(name,oldValue,options)}hasTextareaFocusSession(){const relationshipControl=this.anchorRelationship?.control;return this.anchor!==void 0&&isTextareaAnchor(this.anchor)||relationshipControl!==void 0&&isTextareaAnchor(relationshipControl)}get items(){return this._items}set items(next){const previous=this._items,source=Array.isArray(next)?next:[];this._items=Object.freeze(source.map(item=>Object.freeze({...item}))),this.requestUpdate("items",previous)}connectedCallback(){super.connectedCallback(),this.syncAnnouncementSink(),this.announceResultState()}willUpdate(changed){super.willUpdate(changed),this._isFirstUpdate=!this.hasUpdated,this._ownsFocus&&!this.fallbackFocusIsStillOwned()&&(this._ownsFocus=!1,this._focusOwnerPredicate=void 0),(changed.has("query")||changed.has("items")||changed.has("filter"))&&(this.activeIndex=0);const candidatesChanged=changed.has("query")||changed.has("items")||changed.has("filter");this._ownsFocus&&changed.has("open")&&!this.open?(this.restoreAnchorFocus(),this._ownsFocus=!1,this._focusOwnerPredicate=void 0):this._ownsFocus&&this.open&&candidatesChanged&&this.filteredItems.length===0&&(this.anchor?.isConnected?this.restoreAnchorFocus():this.renderRoot.querySelector('[part="listbox"]')?.focus({preventScroll:!0}),this._ownsFocus=!1,this._focusOwnerPredicate=void 0),this._ownsFocus&&changed.has("anchor")&&this.anchorRelationship?.control!==this.anchor&&this.detachAnchorRelationship()}updated(changed){if(super.updated(changed),changed.has("open"))if(this.open)this.reposition();else{this.cleanup?.(),this.cleanup=void 0,this.virtualAnchor?.remove();const relationshipControl=this.anchorRelationship?.control;relationshipControl&&isTextareaAnchor(relationshipControl)&&this.detachAnchorRelationship(),!this._isFirstUpdate&&!this._silentClose&&queueMicrotask(()=>this.emit("lr-mention-close")),this._silentClose=!1}else this.open&&(changed.has("anchor")||changed.has("query"))&&this.reposition();if(changed.has("activeIndex")||changed.has("query")||changed.has("items")||changed.has("filter")){const active=this.renderRoot.querySelector('[part="option"][data-active]');active?.scrollIntoView({block:"nearest"}),this._ownsFocus&&(!active&&this.anchor?.isConnected?this.restoreFocus():this.restoreFocus(!0))}this.syncAnchorRelationship(),this.open?this.announceResultState():this.resetResultAnnouncements()}disconnectedCallback(){this._focusTransferGeneration+=1,this.resetResultAnnouncements(),this.announcementSink?.release(),this.announcementSink=void 0,this._ownsFocus&&this.callFocusOwner(this._focusOwnerPredicate)&&this.restoreAnchorFocus(),this._ownsFocus=!1,this._focusOwnerPredicate=void 0,this.detachAnchorRelationship(),super.disconnectedCallback(),this.cleanup?.(),this.cleanup=void 0,this.virtualAnchor?.remove(),this.open=!1}adoptedCallback(){super.adoptedCallback(),this._focusTransferGeneration+=1,this.resetResultAnnouncements(),this.syncAnnouncementSink(),this._ownsFocus&&this.callFocusOwner(this._focusOwnerPredicate)&&this.restoreAnchorFocus(),this._ownsFocus=!1,this._focusOwnerPredicate=void 0,this.detachAnchorRelationship(),this.open=!1}syncAnnouncementSink(){this.announcementSink?.element?.ownerDocument!==this.ownerDocument&&(this.announcementSink?.release(),this.announcementSink=this.isConnected?acquireAnnouncementSink("polite",{document:this.ownerDocument,source:this}):void 0)}resetResultAnnouncements(){this.announcedResultCount=void 0,this.announcedResultPosition=void 0}announceResultState(){if(!this.open||!this.announcementSink)return;const rows=this.filteredItems,resultState=rows.length===0?this.localize("noMatches"):this.localize("mentionResultCount",void 0,{count:rows.length}),index=this.clampedIndex(rows),position=index<0?void 0:this.localize("mentionResultPosition",void 0,{current:index+1,total:rows.length});if(this._isFirstUpdate){this.announcedResultCount=resultState,this.announcedResultPosition=position;return}if(resultState!==this.announcedResultCount&&(this.announcementSink.announce(resultState),this.announcedResultCount=resultState),position===void 0){this.announcedResultPosition=void 0;return}position!==this.announcedResultPosition&&(this.announcementSink.announce(position),this.announcedResultPosition=position)}snapshotAttribute(control,name){return{present:control.hasAttribute(name),value:control.getAttribute(name)}}restoreAttribute(control,name,snapshot){snapshot.present?control.setAttribute(name,snapshot.value??""):control.removeAttribute(name)}captureAnchorCaret(relationship=this.anchorRelationship){if(!relationship||!isTextareaAnchor(relationship.control))return;const{control}=relationship;relationship.selectionStart=control.selectionStart,relationship.selectionEnd=control.selectionEnd,relationship.selectionDirection=control.selectionDirection}restoreRelationshipFocus(relationship){const{control}=relationship;if(control.isConnected)try{control.focus({preventScroll:!0}),isTextareaAnchor(control)&&relationship.selectionStart!==null&&relationship.selectionStart!==void 0&&relationship.selectionEnd!==null&&relationship.selectionEnd!==void 0&&control.setSelectionRange(relationship.selectionStart,relationship.selectionEnd,relationship.selectionDirection??void 0)}catch{}}restoreAnchorFocus(){const relationship=this.anchorRelationship;if(relationship){this.restoreRelationshipFocus(relationship);return}const anchor=this.anchor;if(anchor?.isConnected)try{anchor.focus({preventScroll:!0})}catch{}}attachAnchorRelationship(control){const reflected=control,textarea=isTextareaAnchor(control),attributes=new Map((textarea?["role","aria-expanded","aria-haspopup","aria-autocomplete","aria-controls","aria-activedescendant"]:["role","aria-expanded","aria-haspopup","aria-controls","aria-activedescendant"]).map(name=>[name,this.snapshotAttribute(control,name)])),activeElement="ariaActiveDescendantElement"in control?reflected.ariaActiveDescendantElement??null:void 0,controlsElements="ariaControlsElements"in control?reflected.ariaControlsElements??null:void 0,capturedTextareaActiveElement=textarea&&attributes.get("aria-activedescendant")?.present&&attributes.get("aria-activedescendant")?.value===""?activeElement??void 0:void 0,capturedTextareaControlsElements=textarea&&attributes.get("aria-controls")?.present&&attributes.get("aria-controls")?.value===""&&controlsElements?.length?controlsElements:void 0,relationship={control,attributes,activeElement:textarea?capturedTextareaActiveElement:activeElement,controlsElements:textarea?capturedTextareaControlsElements:controlsElements,selectionStart:textarea?control.selectionStart:void 0,selectionEnd:textarea?control.selectionEnd:void 0,selectionDirection:textarea?control.selectionDirection:void 0};return this.anchorRelationship=relationship,relationship}detachAnchorRelationship(){const relationship=this.anchorRelationship;if(!relationship)return;if(this.anchorRelationship=void 0,this._ownsFocus&&(this.restoreRelationshipFocus(relationship),this._ownsFocus=!1,this._focusOwnerPredicate=void 0),!isTextareaAnchor(relationship.control)){const reflected2=relationship.control;if(relationship.activeElement!==void 0)try{reflected2.ariaActiveDescendantElement=relationship.activeElement}catch{}if(relationship.controlsElements!==void 0)try{reflected2.ariaControlsElements=relationship.controlsElements}catch{}for(const[name,snapshot]of relationship.attributes)this.restoreAttribute(relationship.control,name,snapshot);return}for(const[name,snapshot]of relationship.attributes)this.restoreAttribute(relationship.control,name,snapshot);const reflected=relationship.control;if(relationship.activeElement!==void 0)try{reflected.ariaActiveDescendantElement=relationship.activeElement}catch{}if(relationship.controlsElements!==void 0)try{reflected.ariaControlsElements=relationship.controlsElements}catch{}}syncAnchorRelationship(){const next=this.open&&this.anchor&&isTextControl(this.anchor)?this.anchor:void 0;if(this.anchorRelationship?.control!==next&&this.detachAnchorRelationship(),!next)return;const relationship=this.anchorRelationship??this.attachAnchorRelationship(next),control=relationship.control;if(isTextareaAnchor(control)){control.removeAttribute("role"),control.removeAttribute("aria-expanded"),control.removeAttribute("aria-controls"),control.removeAttribute("aria-activedescendant");const reflected2=control;if(relationship.activeElement!==void 0)try{reflected2.ariaActiveDescendantElement=null}catch{}if(relationship.controlsElements!==void 0)try{reflected2.ariaControlsElements=null}catch{}control.removeAttribute("aria-controls"),control.removeAttribute("aria-activedescendant"),control.setAttribute("aria-haspopup","listbox"),control.setAttribute("aria-autocomplete","list");return}relationship.attributes.get("role")?.present||control.setAttribute("role","combobox"),control.setAttribute("aria-expanded","true"),control.setAttribute("aria-haspopup","listbox");const listbox=this.renderRoot.querySelector('[part="listbox"]'),reflected=control;if(listbox&&"ariaControlsElements"in control)try{control.removeAttribute("aria-controls"),reflected.ariaControlsElements=[listbox],reflected.ariaControlsElements?.[0]!==listbox&&(reflected.ariaControlsElements=[this],reflected.ariaControlsElements?.[0]!==this&&control.removeAttribute("aria-controls"))}catch{control.removeAttribute("aria-controls")}else control.removeAttribute("aria-controls");control.removeAttribute("aria-activedescendant"),this.syncActiveDescendant(control)}get filteredItems(){const locale=this.effectiveLocale,q=(this.query??"").trim().toLocaleLowerCase(locale);return this.items.filter(item=>typeof item.label!="string"?!1:q?this.filter?this.filter(item,q):item.label.toLocaleLowerCase(locale).includes(q)||(typeof item.description=="string"?item.description:"").toLocaleLowerCase(locale).includes(q):!0)}get activeDescendantId(){if(!this.open)return null;const idx=this.clampedIndex(this.filteredItems);return idx>=0?this.rowId(idx):null}get activeDescendantElement(){const id=this.activeDescendantId,escape=this.ownerDocument.defaultView?.CSS.escape;return id&&escape?this.renderRoot.querySelector(`#${escape(id)}`):null}syncActiveDescendant(_control){if(isTextareaAnchor(_control)||(_control.removeAttribute("aria-activedescendant"),!("ariaActiveDescendantElement"in _control)))return!1;const active=this.activeDescendantElement;try{const reflected=_control;reflected.ariaActiveDescendantElement=active;const accepted=reflected.ariaActiveDescendantElement===active;return accepted||(reflected.ariaActiveDescendantElement=null,_control.removeAttribute("aria-activedescendant")),accepted}catch{return _control.removeAttribute("aria-activedescendant"),!1}}async focusActiveOption(options={}){const ownsFocus=options.ownsFocus??(this._ownsFocus?this._focusOwnerPredicate:void 0);if(!this.open||!this.isConnected||!this.activeDescendantElement||!this.callFocusOwner(ownsFocus))return!1;const generation=++this._focusTransferGeneration,textareaSession=this.anchor!==void 0&&isTextareaAnchor(this.anchor),textareaSessionGeneration=this._textareaFocusSessionGeneration,snapshot={ownerDocument:this.ownerDocument,anchor:this.anchor,items:this.items,query:this.query,filter:this.filter,activeIndex:this.activeIndex};if(await this.updateComplete,await this.cleanup?.ready===!1||generation!==this._focusTransferGeneration||textareaSession&&textareaSessionGeneration!==this._textareaFocusSessionGeneration||!this.isConnected||!this.open||this.ownerDocument!==snapshot.ownerDocument||this.anchor!==snapshot.anchor||this.items!==snapshot.items||this.query!==snapshot.query||this.filter!==snapshot.filter||this.activeIndex!==snapshot.activeIndex||!this.callFocusOwner(ownsFocus))return!1;const active=this.activeDescendantElement;return!active?.isConnected||!this.callFocusOwner(ownsFocus)||(this.captureAnchorCaret(),active.focus({preventScroll:!0}),activeElementIn(this.shadowRoot)!==active)?!1:(this._focusOwnerPredicate=ownsFocus,this._ownsFocus=!0,!0)}async restoreFocus(waitForPlacement=!1){if(waitForPlacement){if(await this.cleanup?.ready===!1||!this._ownsFocus||!this.open)return;if(this.hasTextareaFocusSession()&&!this.fallbackFocusIsStillOwned()){this._ownsFocus=!1,this._focusOwnerPredicate=void 0;return}}const active=this.renderRoot.querySelector('[part="option"][data-active]');active?active.focus({preventScroll:!0}):this.anchor?.isConnected?(this.renderRoot.querySelector('[part="listbox"]')?.setAttribute("tabindex","-1"),this.restoreAnchorFocus(),this.scheduleAfterUpdate(()=>{this._ownsFocus=!1,this._focusOwnerPredicate=void 0})):this.renderRoot.querySelector('[part="listbox"]')?.focus({preventScroll:!0})}callFocusOwner(predicate){try{return predicate?.()??!0}catch{return!1}}fallbackFocusIsStillOwned(){return this.callFocusOwner(this._focusOwnerPredicate)&&activeElementIn(this.shadowRoot)!==null}get listboxId(){return this._listId}handleKeyDown(e){if(!this.open||e.isComposing||e.keyCode===229)return!1;const rows=this.filteredItems;switch(e.key){case"ArrowDown":return rows.length?(e.preventDefault(),this.activeIndex=Math.min(rows.length-1,this.clampedIndex(rows)+1),!0):!1;case"ArrowUp":return rows.length?(e.preventDefault(),this.activeIndex=Math.max(0,this.clampedIndex(rows)-1),!0):!1;case"Enter":case"Tab":{const idx=this.clampedIndex(rows);return idx<0?!1:(e.preventDefault(),this.commit(rows[idx]),!0)}case"Escape":return e.preventDefault(),this.open=!1,!0;default:return!1}}clampedIndex(rows){return rows.length?Math.min(Math.max(this.activeIndex,0),rows.length-1):-1}rowId(index){return`${this._listId}-opt-${index}`}commit(item){const index=this.items.indexOf(item);if(index<0)return;const relationshipControl=this.anchorRelationship?.control;relationshipControl&&isTextareaAnchor(relationshipControl)&&this.detachAnchorRelationship(),this.emit("lr-mention-select",Object.freeze({suggestionId:item.suggestionId,index,label:item.label})),this._silentClose=!0,this.open=!1}reposition(){this.cleanup?.(),this.cleanup=void 0;const anchorEl=this.resolveAnchorElement(),popup=this.renderRoot.querySelector('[part="listbox"]');if(anchorEl&&popup){const placement=place(anchorEl,popup,{placement:"bottom-start"});this.cleanup=placement,placement.ready.then(positioned=>{positioned||this.cleanup!==placement||!this.open||(this._silentClose=!0,this.open=!1)})}}resolveAnchorElement(){const anchor=this.anchor;if(!anchor)return null;if(isTextControl(anchor)){const rect=caretClientRect(anchor);if(rect){const owner=anchor.ownerDocument;this.virtualAnchor&&this.virtualAnchor.ownerDocument!==owner&&(this.virtualAnchor.remove(),this.virtualAnchor=null);const virtual=this.virtualAnchor??(this.virtualAnchor=owner.createElement("div"));return virtual.style.position="fixed",virtual.style.left=`${rect.left}px`,virtual.style.top=`${rect.top}px`,virtual.style.width="0",virtual.style.height=`${rect.height}px`,virtual.style.pointerEvents="none",virtual.isConnected||owner.body.appendChild(virtual),virtual}}return anchor}get effectiveEmptyText(){return this.emptyText===void 0?this.localize("noMatches"):this.emptyText}get effectiveLabel(){return hostAriaLabel(this)??(this.label===void 0?this.localize("mentionSuggestions"):this.label)}renderRow(item,index,activeId){const id=this.rowId(index),active=id===activeId;return html`
|
|
2
2
|
<div
|
|
3
3
|
part="option"
|
|
4
4
|
id=${id}
|
|
@@ -9,6 +9,9 @@ import{type TemplateResult,type PropertyValues}from'lit';import{LyraElement}from
|
|
|
9
9
|
* phases, a different concern from a scheduled-interval countdown -- this mirrors its internal
|
|
10
10
|
* `<lr-live-region>` composition for accessible phase-transition announcements.
|
|
11
11
|
*
|
|
12
|
+
* Long translated labels wrap within the allocated inline size while the pause/resume
|
|
13
|
+
* action retains its minimum target size.
|
|
14
|
+
*
|
|
12
15
|
* @customElement lr-poll-status
|
|
13
16
|
* @event lr-poll-due - Fired once when the countdown reaches zero (not fired while `paused`).
|
|
14
17
|
* @event lr-pause-change - Fired when `paused` changes via the built-in button.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{css}from"lit";const styles=css`:host{display:inline-flex}[part=base]{align-items:center;gap:var(--lr-space-xs);font-size:var(--lr-font-size-sm);color:var(--lr-color-text-quiet);display:inline-flex}[part=indicator]{inline-size:var(--lr-size-0-375rem);block-size:var(--lr-size-0-375rem);border-radius:var(--lr-radius-pill);background:var(--lr-color-brand);animation:lr-poll-status-pulse var(--lr-transition-ambient) infinite;display:inline-block}[part=indicator][data-due]{background:var(--lr-poll-status-due-bg,var(--lr-color-success))}[part=indicator][data-inactive]{opacity:var(--lr-opacity-disabled);animation:none}@keyframes lr-poll-status-pulse{0%,to{opacity:1}50%{opacity:.4}}@media (prefers-reduced-motion:reduce){[part=indicator]{animation:none}}[part=pause-button]{min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:inherit;cursor:pointer;padding:var(--lr-size-0-125rem);border-radius:var(--lr-radius);background:0 0;border:none;justify-content:center;align-items:center;display:inline-flex}[part=pause-button]:hover:not(:disabled){background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=pause-button]:active:not(:disabled){background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-brand)}[part=pause-button]:disabled{cursor:default;opacity:var(--lr-opacity-disabled)}[part=pause-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}`;export{styles};
|
|
1
|
+
import{css}from"lit";const styles=css`:host{min-inline-size:0;max-inline-size:100%;display:inline-flex}[part=base]{align-items:center;gap:var(--lr-space-xs);min-inline-size:0;max-inline-size:100%;font-size:var(--lr-font-size-sm);color:var(--lr-color-text-quiet);display:inline-flex}[part=countdown]{overflow-wrap:anywhere;min-inline-size:0}[part=indicator]{inline-size:var(--lr-size-0-375rem);block-size:var(--lr-size-0-375rem);border-radius:var(--lr-radius-pill);background:var(--lr-color-brand);animation:lr-poll-status-pulse var(--lr-transition-ambient) infinite;flex-shrink:0;display:inline-block}[part=indicator][data-due]{background:var(--lr-poll-status-due-bg,var(--lr-color-success))}[part=indicator][data-inactive]{opacity:var(--lr-opacity-disabled);animation:none}@keyframes lr-poll-status-pulse{0%,to{opacity:1}50%{opacity:.4}}@media (prefers-reduced-motion:reduce){[part=indicator]{animation:none}}[part=pause-button]{min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);color:inherit;cursor:pointer;padding:var(--lr-size-0-125rem);border-radius:var(--lr-radius);background:0 0;border:none;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex}[part=pause-button]:hover:not(:disabled){background:var(--lr-color-brand-quiet);color:var(--lr-color-brand)}[part=pause-button]:active:not(:disabled){background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active));color:var(--lr-color-brand)}[part=pause-button]:disabled{cursor:default;opacity:var(--lr-opacity-disabled)}[part=pause-button]:focus-visible{outline:var(--lr-focus-ring-width) solid var(--lr-focus-ring-color);outline-offset:var(--lr-focus-ring-offset)}`;export{styles};
|
|
@@ -6,6 +6,7 @@ endKind:ParsedCalendarTimeKind|null;location:string;description:string;}export i
|
|
|
6
6
|
/**
|
|
7
7
|
* Parses `.ics` calendars with the optional `ical.js` peer and renders each
|
|
8
8
|
* VEVENT as plain text, preserving summaries, DATE/DATE-TIME semantics, locations, and details.
|
|
9
|
+
* Early all-day years retain UTC calendar semantics and the exclusive DTEND display boundary.
|
|
9
10
|
* At most 250 events and 2 MiB of rendered event text are retained so search, selection and
|
|
10
11
|
* text-quote anchors continue to cover the complete accepted document without eager 10k-row DOM.
|
|
11
12
|
* The inherited fragment path performs an exact DOM `id` lookup, but generated event markup has
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var __decorate=function(decorators,target,key,desc){var c=arguments.length,r=c<3?target:desc===null?desc=Object.getOwnPropertyDescriptor(target,key):desc,d;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r};import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{srOnly}from"../../../internal/a11y.js";import{LyraElement}from"../../../internal/lyra-element.js";import{TextViewerTarget}from"../../../internal/text-viewer-target.js";import{isAbortError,isResourceLimitError,LyraResourceLimitError,LyraUserFacingError,readResponseText,resolveOwnerFetchTarget}from"../../../internal/resource-loader.js";import{loadIcal}from"./calendar-loader.js";import{styles}from"./calendar-viewer.styles.js";import{getDateTimeFormat}from"../../../internal/intl-cache.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{ViewerAnnouncementController}from"../viewer-announcements.js";import{renderViewerLoading,viewerLoadingStyles}from"../viewer-loading.js";import{viewerSemanticLabel,viewerSemanticRole}from"../viewer-semantic-owner.js";import{LYRA_DEFAULT_anchorJumped,LYRA_DEFAULT_anchorJumpedToPage,LYRA_DEFAULT_anchorNotFound,LYRA_DEFAULT_calendarViewerEmpty,LYRA_DEFAULT_calendarViewerLabel,LYRA_DEFAULT_calendarViewerMissingParser,LYRA_DEFAULT_calendarViewerNoSummary,LYRA_DEFAULT_documentPreviewEmpty,LYRA_DEFAULT_documentPreviewFailedToLoad,LYRA_DEFAULT_documentPreviewResourceTooLarge,LYRA_DEFAULT_documentPreviewTypeCalendar,LYRA_DEFAULT_documentPreviewUrlNotAllowed,LYRA_DEFAULT_loadingDocument}from"../../../internal/default-strings.generated.js";const MAX_CALENDAR_EVENTS=250,MAX_CALENDAR_RENDERED_CHARS=2*1024*1024;function formatEventTime(event,locale){if(!event.start)return"";if(event.startKind==="date"){const formatter2=getDateTimeFormat(locale,{dateStyle:"medium",timeZone:"UTC"});if(!event.end||event.endKind!=="date")return formatter2.format(event.start);const inclusiveEnd=new Date(event.end.getTime());return inclusiveEnd.setUTCDate(inclusiveEnd.getUTCDate()-1),inclusiveEnd.getTime()<=event.start.getTime()?formatter2.format(event.start):formatter2.formatRange(event.start,inclusiveEnd)}const formatter=getDateTimeFormat(locale,{dateStyle:"medium",timeStyle:"short"});return event.end&&event.endKind==="date-time"?formatter.formatRange(event.start,event.end):formatter.format(event.start)}function parseCalendarTime(time){if(!time)return null;let value;if(time.isDate===!0&&Number.isInteger(time.year)&&Number.isInteger(time.month)&&Number.isInteger(time.day)){if(value=
|
|
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{utcDate}from"../../forms/date-picker/calendar-core.js";import{html,nothing}from"lit";import{property,state}from"lit/decorators.js";import{styleMap}from"lit/directives/style-map.js";import{srOnly}from"../../../internal/a11y.js";import{LyraElement}from"../../../internal/lyra-element.js";import{TextViewerTarget}from"../../../internal/text-viewer-target.js";import{isAbortError,isResourceLimitError,LyraResourceLimitError,LyraUserFacingError,readResponseText,resolveOwnerFetchTarget}from"../../../internal/resource-loader.js";import{loadIcal}from"./calendar-loader.js";import{styles}from"./calendar-viewer.styles.js";import{getDateTimeFormat}from"../../../internal/intl-cache.js";import{sanitizeCssLength}from"../../../internal/safe-css.js";import{ViewerAnnouncementController}from"../viewer-announcements.js";import{renderViewerLoading,viewerLoadingStyles}from"../viewer-loading.js";import{viewerSemanticLabel,viewerSemanticRole}from"../viewer-semantic-owner.js";import{LYRA_DEFAULT_anchorJumped,LYRA_DEFAULT_anchorJumpedToPage,LYRA_DEFAULT_anchorNotFound,LYRA_DEFAULT_calendarViewerEmpty,LYRA_DEFAULT_calendarViewerLabel,LYRA_DEFAULT_calendarViewerMissingParser,LYRA_DEFAULT_calendarViewerNoSummary,LYRA_DEFAULT_documentPreviewEmpty,LYRA_DEFAULT_documentPreviewFailedToLoad,LYRA_DEFAULT_documentPreviewResourceTooLarge,LYRA_DEFAULT_documentPreviewTypeCalendar,LYRA_DEFAULT_documentPreviewUrlNotAllowed,LYRA_DEFAULT_loadingDocument}from"../../../internal/default-strings.generated.js";const MAX_CALENDAR_EVENTS=250,MAX_CALENDAR_RENDERED_CHARS=2*1024*1024;function formatEventTime(event,locale){if(!event.start)return"";if(event.startKind==="date"){const formatter2=getDateTimeFormat(locale,{dateStyle:"medium",timeZone:"UTC"});if(!event.end||event.endKind!=="date")return formatter2.format(event.start);const inclusiveEnd=new Date(event.end.getTime());return inclusiveEnd.setUTCDate(inclusiveEnd.getUTCDate()-1),inclusiveEnd.getTime()<=event.start.getTime()?formatter2.format(event.start):formatter2.formatRange(event.start,inclusiveEnd)}const formatter=getDateTimeFormat(locale,{dateStyle:"medium",timeStyle:"short"});return event.end&&event.endKind==="date-time"?formatter.formatRange(event.start,event.end):formatter.format(event.start)}function parseCalendarTime(time){if(!time)return null;let value;if(time.isDate===!0&&Number.isInteger(time.year)&&Number.isInteger(time.month)&&Number.isInteger(time.day)){if(value=utcDate(time.year,time.month-1,time.day),value.getUTCFullYear()!==time.year||value.getUTCMonth()+1!==time.month||value.getUTCDate()!==time.day)throw new Error("Invalid all-day calendar date.")}else value=time.toJSDate();if(!Number.isFinite(value.getTime()))throw new Error("Invalid calendar date.");return{value,kind:time.isDate===!0?"date":"date-time"}}class LyraCalendarViewerBase extends LyraElement{}class LyraCalendarViewer extends TextViewerTarget(LyraCalendarViewerBase){constructor(){super(...arguments),this.src="",this.name="",this.maxHeight="",this.fetchState={kind:"idle"},this.generation=0,this.lastLoadSrc="",this.announcements=new ViewerAnnouncementController(this)}static{this.defaultStrings={...super.defaultStrings,anchorJumped:LYRA_DEFAULT_anchorJumped,anchorJumpedToPage:LYRA_DEFAULT_anchorJumpedToPage,anchorNotFound:LYRA_DEFAULT_anchorNotFound,calendarViewerEmpty:LYRA_DEFAULT_calendarViewerEmpty,calendarViewerLabel:LYRA_DEFAULT_calendarViewerLabel,calendarViewerMissingParser:LYRA_DEFAULT_calendarViewerMissingParser,calendarViewerNoSummary:LYRA_DEFAULT_calendarViewerNoSummary,documentPreviewEmpty:LYRA_DEFAULT_documentPreviewEmpty,documentPreviewFailedToLoad:LYRA_DEFAULT_documentPreviewFailedToLoad,documentPreviewResourceTooLarge:LYRA_DEFAULT_documentPreviewResourceTooLarge,documentPreviewTypeCalendar:LYRA_DEFAULT_documentPreviewTypeCalendar,documentPreviewUrlNotAllowed:LYRA_DEFAULT_documentPreviewUrlNotAllowed,loadingDocument:LYRA_DEFAULT_loadingDocument}}static{this.styles=[LyraElement.styles,styles,srOnly,viewerLoadingStyles]}async search(query){return super.search(query)}async searchNext(){return super.searchNext()}async searchPrevious(){return super.searchPrevious()}clearSearch(){super.clearSearch()}connectedCallback(){super.connectedCallback(),this.announcements.connect(),this.hasUpdated&&this.src&&(this.requestUpdate(),this.src===this.lastLoadSrc&&this.scheduleAfterUpdate(()=>{this.load()}))}disconnectedCallback(){this.generation++,this.announcements.disconnect(),super.disconnectedCallback()}adoptedCallback(){super.adoptedCallback(),this.announcements.adopted()}updated(changed){super.updated(changed),this.announcements.transition("load",this.fetchState.kind,this.fetchState.kind==="error"?this.fetchState.message:this.localize("loadingDocument")),changed.has("src")&&this.scheduleAfterUpdate(()=>{this.load()})}async load(){this.lastLoadSrc=this.src;const generation=++this.generation,signal=this.beginAbortableLoad();if(!this.src){this.fetchState={kind:"idle"};return}const fetchTarget=resolveOwnerFetchTarget(this,this.src);if(!fetchTarget){const error=new LyraUserFacingError(this.localize("documentPreviewUrlNotAllowed"));this.fetchState={kind:"error",message:error.message},this.emit("lr-render-error",{error});return}this.fetchState={kind:"loading"};try{const response=await fetchTarget.view.fetch(fetchTarget.url,signal?{signal}:void 0);if(!response.ok)throw new Error(`${response.status} ${response.statusText}`);const source=await readResponseText(response);if(!this.isConnected||generation!==this.generation)return;const events=await this.parse(source,generation);if(!this.isConnected||generation!==this.generation||!events)return;generation===this.generation&&(this.fetchState={kind:"loaded",events})}catch(error){if(isAbortError(error)||!this.isConnected||generation!==this.generation)return;this.fetchState={kind:"error",message:error instanceof LyraUserFacingError?error.message:this.localize(isResourceLimitError(error)?"documentPreviewResourceTooLarge":"documentPreviewFailedToLoad")},this.emit("lr-render-error",{error})}}async parse(source,generation){const ical=await loadIcal();if(!this.isConnected||generation!==this.generation)return;if(!ical)throw new LyraUserFacingError(this.localize("calendarViewerMissingParser"));const subcomponents=new ical.Component(ical.parse(source)).getAllSubcomponents("vevent");if(subcomponents.length>MAX_CALENDAR_EVENTS)throw new LyraResourceLimitError("The calendar contains too many events.");let renderedChars=0;return subcomponents.map(subcomponent=>{const event=new ical.Event(subcomponent),parsedStart=parseCalendarTime(event.startDate),parsedEnd=parseCalendarTime(event.endDate),end=parsedStart&&parsedEnd&&(parsedStart.kind!==parsedEnd.kind||parsedEnd.value.getTime()<parsedStart.value.getTime())?null:parsedEnd,uid=event.uid??"",summary=event.summary??"",location=event.location??"",description=event.description??"";if(renderedChars+=uid.length+summary.length+location.length+description.length,renderedChars>MAX_CALENDAR_RENDERED_CHARS)throw new LyraResourceLimitError("The calendar contains too much rendered text.");return{uid,summary,start:parsedStart?.value??null,end:end?.value??null,startKind:parsedStart?.kind??null,endKind:end?.kind??null,location,description}})}renderEvent(event){return html`<li part="event"><span part="event-summary">${event.summary||this.localize("calendarViewerNoSummary")}</span><span part="event-time">${formatEventTime(event,this.effectiveLocale)}</span>${event.location?html`<span part="event-location">${event.location}</span>`:nothing}${event.description?html`<p part="event-description">${event.description}</p>`:nothing}</li>`}renderBody(){switch(this.fetchState.kind){case"loaded":return this.fetchState.events.length?html`<ul part="event-list">${this.fetchState.events.map(event=>this.renderEvent(event))}</ul>`:html`<p class="empty-note">${this.localize("calendarViewerEmpty")}</p>`;case"loading":return renderViewerLoading(this.localize("loadingDocument"));case"error":return html`<div part="error">${this.fetchState.message}</div>`;default:return html`<p class="empty-note">${this.localize("documentPreviewEmpty",void 0,{type:this.localize("documentPreviewTypeCalendar")})}</p>`}}render(){const maxHeight=sanitizeCssLength(this.maxHeight);return html`<div part="base" role=${viewerSemanticRole(this,"region")??nothing} style=${maxHeight?styleMap({"--lr-calendar-viewer-max-height":maxHeight}):nothing} aria-label=${viewerSemanticLabel(this,this.name||this.localize("calendarViewerLabel"))??nothing} aria-busy=${this.fetchState.kind==="loading"?"true":"false"}><div part="body">${this.renderBody()}</div>${this.renderAnchorLiveRegion()}</div>`}}__decorate([property()],LyraCalendarViewer.prototype,"src",void 0),__decorate([property()],LyraCalendarViewer.prototype,"name",void 0),__decorate([property({attribute:"max-height"})],LyraCalendarViewer.prototype,"maxHeight",void 0),__decorate([state()],LyraCalendarViewer.prototype,"fetchState",void 0);export{LyraCalendarViewer};
|
|
@@ -79,7 +79,8 @@ name:string;
|
|
|
79
79
|
maxHeight:string;private _scrollMode;
|
|
80
80
|
/**
|
|
81
81
|
* Which element scrolls when the table overflows. `'self'` preserves contained horizontal
|
|
82
|
-
* scrolling and applies `maxHeight`. `'page'`
|
|
82
|
+
* scrolling and applies `maxHeight`. `'page'` removes intervening scroll containers while
|
|
83
|
+
* retaining rounded header corners, making the page the sticky header's scrollport; a
|
|
83
84
|
* wide dataset can consequently overflow its host.
|
|
84
85
|
*/
|
|
85
86
|
get scrollMode():DatasetViewerScrollMode;set scrollMode(next:DatasetViewerScrollMode);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{css}from"lit";const styles=css`:host{--_lr-dataset-viewer-max-height:none;min-inline-size:0;display:block}[part=base]{box-sizing:border-box;border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);flex-direction:column;min-inline-size:0;display:flex;overflow:hidden}[part=body]{box-sizing:border-box;max-block-size:var(--lr-dataset-viewer-max-height,var(--_lr-dataset-viewer-max-height));overflow:auto}:host([scroll-mode=page]) [part=body]{max-block-size:none;overflow:visible}[part=table]{min-inline-size:max-content;font-size:var(--lr-font-size-sm);flex-direction:column;display:flex}[part=header-row]{grid-auto-flow:column;grid-auto-columns:minmax(var(--lr-size-8rem), 1fr);z-index:var(--lr-layer-content);background:var(--lr-color-brand-quiet);color:var(--lr-color-text);font-weight:var(--lr-font-weight-semibold);border-block-end:var(--lr-border-width-medium) solid var(--lr-color-border);display:grid;position:sticky;inset-block-start:0}[part=header-cell]{padding:var(--lr-space-xs) var(--lr-space-s);border-inline-end:var(--lr-border-width-thin) solid var(--lr-color-border);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}lr-virtual-list::part(data-row){grid-auto-flow:column;grid-auto-columns:minmax(var(--lr-size-8rem), 1fr);display:grid}lr-virtual-list::part(cell){padding:var(--lr-space-xs) var(--lr-space-s);border-inline-end:var(--lr-border-width-thin) solid var(--lr-color-border);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border);text-overflow:ellipsis;white-space:nowrap;color:var(--lr-color-text);overflow:hidden}[part~=cell-highlight],lr-virtual-list::part(cell-highlight){outline:var(--lr-border-width-medium) solid var(--lr-dataset-viewer-highlight-color,var(--_lr-dataset-viewer-highlight-color,var(--lr-color-brand)));outline-offset:calc(-1 * var(--lr-border-width-medium));cursor:pointer;padding:0}[part=cell-highlight-action],lr-virtual-list::part(cell-highlight-action){all:unset;box-sizing:border-box;inline-size:100%;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);padding:var(--lr-space-xs) var(--lr-space-s);text-overflow:ellipsis;white-space:nowrap;cursor:pointer;display:block;overflow:hidden}[part=cell-highlight-action]:hover,lr-virtual-list::part(cell-highlight-action):hover{background:var(--lr-color-brand-quiet)}[part=cell-highlight-action]:active,lr-virtual-list::part(cell-highlight-action):active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=cell-highlight-action]:focus-visible,lr-virtual-list::part(cell-highlight-action):focus-visible{outline:var(--lr-focus-ring);outline-offset:calc(var(--lr-focus-ring-offset) * -1)}lr-virtual-list{--lr-virtual-list-height:var(--lr-size-20rem);min-inline-size:max-content}.empty-note,[part=error]{padding:var(--lr-space-m);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-md-sm);margin:0}[part=error]{padding:var(--lr-space-l);color:var(--lr-color-danger);text-align:center}`;export{styles};
|
|
1
|
+
import{css}from"lit";const styles=css`:host{--_lr-dataset-viewer-max-height:none;min-inline-size:0;display:block}[part=base]{box-sizing:border-box;border:var(--lr-border-width-thin) solid var(--lr-color-border);border-radius:var(--lr-radius);background:var(--lr-color-surface);flex-direction:column;min-inline-size:0;display:flex;overflow:hidden}[part=body]{box-sizing:border-box;max-block-size:var(--lr-dataset-viewer-max-height,var(--_lr-dataset-viewer-max-height));overflow:auto}:host([scroll-mode=page]) [part=base]{overflow:visible}:host([scroll-mode=page]) [part=header-row]{border-start-start-radius:calc(var(--lr-radius) - var(--lr-border-width-thin));border-start-end-radius:calc(var(--lr-radius) - var(--lr-border-width-thin));overflow:clip}:host([scroll-mode=page]) [part=body]{max-block-size:none;overflow:visible}[part=table]{min-inline-size:max-content;font-size:var(--lr-font-size-sm);flex-direction:column;display:flex}[part=header-row]{grid-auto-flow:column;grid-auto-columns:minmax(var(--lr-size-8rem), 1fr);z-index:var(--lr-layer-content);background:var(--lr-color-brand-quiet);color:var(--lr-color-text);font-weight:var(--lr-font-weight-semibold);border-block-end:var(--lr-border-width-medium) solid var(--lr-color-border);display:grid;position:sticky;inset-block-start:0}[part=header-cell]{padding:var(--lr-space-xs) var(--lr-space-s);border-inline-end:var(--lr-border-width-thin) solid var(--lr-color-border);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}lr-virtual-list::part(data-row){grid-auto-flow:column;grid-auto-columns:minmax(var(--lr-size-8rem), 1fr);display:grid}lr-virtual-list::part(cell){padding:var(--lr-space-xs) var(--lr-space-s);border-inline-end:var(--lr-border-width-thin) solid var(--lr-color-border);border-block-end:var(--lr-border-width-thin) solid var(--lr-color-border);text-overflow:ellipsis;white-space:nowrap;color:var(--lr-color-text);overflow:hidden}[part~=cell-highlight],lr-virtual-list::part(cell-highlight){outline:var(--lr-border-width-medium) solid var(--lr-dataset-viewer-highlight-color,var(--_lr-dataset-viewer-highlight-color,var(--lr-color-brand)));outline-offset:calc(-1 * var(--lr-border-width-medium));cursor:pointer;padding:0}[part=cell-highlight-action],lr-virtual-list::part(cell-highlight-action){all:unset;box-sizing:border-box;inline-size:100%;min-inline-size:var(--lr-icon-button-size);min-block-size:var(--lr-icon-button-size);padding:var(--lr-space-xs) var(--lr-space-s);text-overflow:ellipsis;white-space:nowrap;cursor:pointer;display:block;overflow:hidden}[part=cell-highlight-action]:hover,lr-virtual-list::part(cell-highlight-action):hover{background:var(--lr-color-brand-quiet)}[part=cell-highlight-action]:active,lr-virtual-list::part(cell-highlight-action):active{background:color-mix(in oklab, var(--lr-color-brand-quiet), var(--lr-color-mix-partner) var(--lr-color-mix-active))}[part=cell-highlight-action]:focus-visible,lr-virtual-list::part(cell-highlight-action):focus-visible{outline:var(--lr-focus-ring);outline-offset:calc(var(--lr-focus-ring-offset) * -1)}lr-virtual-list{--lr-virtual-list-height:var(--lr-size-20rem);min-inline-size:max-content}.empty-note,[part=error]{padding:var(--lr-space-m);color:var(--lr-color-text-quiet);font-size:var(--lr-font-size-md-sm);margin:0}[part=error]{padding:var(--lr-space-l);color:var(--lr-color-danger);text-align:center}`;export{styles};
|
|
@@ -115,7 +115,8 @@ export declare class LyraDocumentPreview extends LyraElement<LyraDocumentPreview
|
|
|
115
115
|
* a sink-specific scheme allowlist before use. Optional — gracefully
|
|
116
116
|
* absent while, e.g., a conversion is still in progress. */
|
|
117
117
|
src:string;
|
|
118
|
-
/** Drives format dispatch
|
|
118
|
+
/** Drives format dispatch using the case-insensitive MIME essence before parameters.
|
|
119
|
+
* Removing the attribute is treated as an absent format at render time. */
|
|
119
120
|
mimeType:string;
|
|
120
121
|
/** Shown in the header and used as the download link's suggested filename. */
|
|
121
122
|
filename:string;
|
|
@@ -137,7 +138,8 @@ progress?:number;
|
|
|
137
138
|
errorText:string;
|
|
138
139
|
/** A CSS length (e.g. `"24rem"`); once set, `[part="body"]` scrolls
|
|
139
140
|
* internally past this height instead of growing the page — same
|
|
140
|
-
* contract as `<lr-json-viewer>`'s identically-named prop.
|
|
141
|
+
* contract as `<lr-json-viewer>`'s identically-named prop. Fitting images stay centered;
|
|
142
|
+
* oversized images start inside the reachable scroll range. Invalid values are ignored. */
|
|
141
143
|
maxHeight:string;
|
|
142
144
|
/** Wraps the rendered image (image format only) in an internal `<lr-pan-zoom>`. `false`
|
|
143
145
|
* (the default) preserves today's exact DOM -- an inline thumbnail (e.g. in a chat stream) must
|