@videojs/html 10.0.0-rc.2 → 10.0.0-rc.4
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/README.md +12 -2
- package/dist/default/define/audio/minimal-skin.css +663 -414
- package/dist/default/define/audio/minimal-skin.js +0 -2
- package/dist/default/define/audio/minimal-skin2.js +1 -3
- package/dist/default/define/audio/minimal-ui.js +0 -2
- package/dist/default/define/audio/player.js +0 -2
- package/dist/default/define/audio/skin.css +409 -205
- package/dist/default/define/audio/skin.js +0 -2
- package/dist/default/define/audio/skin2.js +1 -3
- package/dist/default/define/audio/ui.js +0 -2
- package/dist/default/define/background/player.js +0 -2
- package/dist/default/define/background/skin.js +0 -2
- package/dist/default/define/background/skin2.js +1 -3
- package/dist/default/define/extensions/google-cast.js +0 -2
- package/dist/default/define/extensions/mux-data.js +0 -2
- package/dist/default/define/global.css +13 -0
- package/dist/default/define/global.js +1 -3
- package/dist/default/define/i18n.js +0 -2
- package/dist/default/define/live-audio/minimal-skin.css +458 -368
- package/dist/default/define/live-audio/minimal-skin.js +0 -2
- package/dist/default/define/live-audio/minimal-skin2.js +1 -3
- package/dist/default/define/live-audio/minimal-ui.js +0 -2
- package/dist/default/define/live-audio/player.js +0 -2
- package/dist/default/define/live-audio/skin.css +221 -159
- package/dist/default/define/live-audio/skin.js +0 -2
- package/dist/default/define/live-audio/skin2.js +1 -3
- package/dist/default/define/live-audio/ui.js +0 -2
- package/dist/default/define/live-video/minimal-skin.css +1002 -863
- package/dist/default/define/live-video/minimal-skin.js +0 -2
- package/dist/default/define/live-video/minimal-skin2.js +1 -3
- package/dist/default/define/live-video/minimal-ui.js +0 -2
- package/dist/default/define/live-video/player.js +0 -2
- package/dist/default/define/live-video/skin.css +804 -687
- package/dist/default/define/live-video/skin.js +0 -2
- package/dist/default/define/live-video/skin2.js +1 -3
- package/dist/default/define/live-video/ui.js +0 -2
- package/dist/default/define/media/background-video.js +0 -2
- package/dist/default/define/media/cloudflare-video.js +0 -2
- package/dist/default/define/media/dash-video.js +0 -2
- package/dist/default/define/media/hls-audio.js +0 -2
- package/dist/default/define/media/hls-background-video.js +0 -2
- package/dist/default/define/media/hls-video.js +0 -2
- package/dist/default/define/media/hlsjs-video.js +0 -2
- package/dist/default/define/media/mux-audio/hls-js.js +0 -2
- package/dist/default/define/media/mux-audio/spf.js +0 -2
- package/dist/default/define/media/mux-background-video.js +0 -2
- package/dist/default/define/media/mux-video/hls-js.js +0 -2
- package/dist/default/define/media/mux-video/spf.js +0 -2
- package/dist/default/define/media/native-hls-video.js +0 -2
- package/dist/default/define/media/shaka-video.js +0 -2
- package/dist/default/define/media/spotify-audio.js +0 -2
- package/dist/default/define/media/tiktok-video.js +0 -2
- package/dist/default/define/media/twitch-video.js +0 -2
- package/dist/default/define/media/vimeo-video.js +0 -2
- package/dist/default/define/media/wistia-video.js +0 -2
- package/dist/default/define/media/youtube-video.js +0 -2
- package/dist/default/define/shadow.css +22 -0
- package/dist/default/define/shadow.js +4 -0
- package/dist/default/define/ui/airplay-button.js +0 -2
- package/dist/default/define/ui/alert-dialog.js +0 -2
- package/dist/default/define/ui/audio-track-radio-group.js +0 -2
- package/dist/default/define/ui/buffering-indicator.js +0 -2
- package/dist/default/define/ui/captions-button.js +0 -2
- package/dist/default/define/ui/captions-radio-group.js +0 -2
- package/dist/default/define/ui/cast-button.js +0 -2
- package/dist/default/define/ui/container.js +0 -2
- package/dist/default/define/ui/controls-backdrop.js +0 -2
- package/dist/default/define/ui/controls-content.js +0 -2
- package/dist/default/define/ui/controls-group.js +0 -2
- package/dist/default/define/ui/controls.js +0 -2
- package/dist/default/define/ui/dialog-backdrop.js +0 -2
- package/dist/default/define/ui/dialog-close.js +0 -2
- package/dist/default/define/ui/dialog-description.js +0 -2
- package/dist/default/define/ui/dialog-popup.js +0 -2
- package/dist/default/define/ui/dialog-title.js +0 -2
- package/dist/default/define/ui/dialog.js +0 -2
- package/dist/default/define/ui/error-dialog.js +0 -2
- package/dist/default/define/ui/fullscreen-button.js +0 -2
- package/dist/default/define/ui/gesture.js +0 -2
- package/dist/default/define/ui/hotkey.js +0 -2
- package/dist/default/define/ui/live-button.js +0 -2
- package/dist/default/define/ui/menu-checkbox-item.js +0 -2
- package/dist/default/define/ui/menu-content.js +0 -2
- package/dist/default/define/ui/menu-group-label.js +0 -2
- package/dist/default/define/ui/menu-group.js +0 -2
- package/dist/default/define/ui/menu-item-indicator.js +0 -2
- package/dist/default/define/ui/menu-item.js +0 -2
- package/dist/default/define/ui/menu-radio-group.js +0 -2
- package/dist/default/define/ui/menu-radio-item.js +0 -2
- package/dist/default/define/ui/menu-separator.js +0 -2
- package/dist/default/define/ui/menu.js +0 -2
- package/dist/default/define/ui/mute-button.js +0 -2
- package/dist/default/define/ui/pip-button.js +0 -2
- package/dist/default/define/ui/play-button.js +0 -2
- package/dist/default/define/ui/playback-rate-button.js +0 -2
- package/dist/default/define/ui/playback-rate-radio-group.js +0 -2
- package/dist/default/define/ui/popover.js +0 -2
- package/dist/default/define/ui/poster.js +0 -2
- package/dist/default/define/ui/quality-radio-group.js +0 -2
- package/dist/default/define/ui/seek-button.js +0 -2
- package/dist/default/define/ui/seek-indicator-value.js +0 -2
- package/dist/default/define/ui/seek-indicator.js +0 -2
- package/dist/default/define/ui/slider-buffer.js +0 -2
- package/dist/default/define/ui/slider-fill.js +0 -2
- package/dist/default/define/ui/slider-preview.js +0 -2
- package/dist/default/define/ui/slider-thumb.js +0 -2
- package/dist/default/define/ui/slider-thumbnail.js +0 -2
- package/dist/default/define/ui/slider-track.js +0 -2
- package/dist/default/define/ui/slider-value.js +0 -2
- package/dist/default/define/ui/slider.js +0 -2
- package/dist/default/define/ui/status-announcer.js +0 -2
- package/dist/default/define/ui/status-indicator-value.js +0 -2
- package/dist/default/define/ui/status-indicator.js +0 -2
- package/dist/default/define/ui/thumbnail.js +0 -2
- package/dist/default/define/ui/time-group.js +0 -2
- package/dist/default/define/ui/time-separator.js +0 -2
- package/dist/default/define/ui/time-slider-chapter-title.js +0 -2
- package/dist/default/define/ui/time-slider-chapters.js +0 -2
- package/dist/default/define/ui/time-slider.js +0 -2
- package/dist/default/define/ui/time.js +0 -2
- package/dist/default/define/ui/title.js +0 -2
- package/dist/default/define/ui/tooltip-group.js +0 -2
- package/dist/default/define/ui/tooltip-label.js +0 -2
- package/dist/default/define/ui/tooltip-shortcut.js +0 -2
- package/dist/default/define/ui/tooltip.js +0 -2
- package/dist/default/define/ui/volume-indicator-fill.js +0 -2
- package/dist/default/define/ui/volume-indicator-value.js +0 -2
- package/dist/default/define/ui/volume-indicator.js +0 -2
- package/dist/default/define/ui/volume-popover.js +0 -2
- package/dist/default/define/ui/volume-slider.js +0 -2
- package/dist/default/define/video/minimal-skin.css +764 -647
- package/dist/default/define/video/minimal-skin.js +0 -2
- package/dist/default/define/video/minimal-skin2.js +1 -3
- package/dist/default/define/video/minimal-ui.js +0 -2
- package/dist/default/define/video/player.js +0 -2
- package/dist/default/define/video/skin.css +528 -441
- package/dist/default/define/video/skin.js +0 -2
- package/dist/default/define/video/skin2.js +1 -3
- package/dist/default/define/video/ui.js +0 -2
- package/dist/default/extensions/google-cast/extension.js +0 -2
- package/dist/default/extensions/media-extension-element.js +0 -2
- package/dist/default/extensions/mux-data/extension.js +0 -2
- package/dist/default/i18n/cache-key.js +0 -2
- package/dist/default/i18n/context.js +0 -2
- package/dist/default/i18n/controller.js +0 -2
- package/dist/default/i18n/create-i18n.js +0 -2
- package/dist/default/i18n/index.js +2 -2
- package/dist/default/i18n/locale.js +0 -2
- package/dist/default/i18n/locales/all/register.js +0 -2
- package/dist/default/i18n/locales/ar/register.js +0 -2
- package/dist/default/i18n/locales/az/register.js +0 -2
- package/dist/default/i18n/locales/bg/register.js +0 -2
- package/dist/default/i18n/locales/bn/register.js +0 -2
- package/dist/default/i18n/locales/bs/register.js +0 -2
- package/dist/default/i18n/locales/ca/register.js +0 -2
- package/dist/default/i18n/locales/cs/register.js +0 -2
- package/dist/default/i18n/locales/cy/register.js +0 -2
- package/dist/default/i18n/locales/da/register.js +0 -2
- package/dist/default/i18n/locales/de/register.js +0 -2
- package/dist/default/i18n/locales/el/register.js +0 -2
- package/dist/default/i18n/locales/en/register.js +0 -2
- package/dist/default/i18n/locales/es/register.js +0 -2
- package/dist/default/i18n/locales/et/register.js +0 -2
- package/dist/default/i18n/locales/eu/register.js +0 -2
- package/dist/default/i18n/locales/fa/register.js +0 -2
- package/dist/default/i18n/locales/fi/register.js +0 -2
- package/dist/default/i18n/locales/fr/register.js +0 -2
- package/dist/default/i18n/locales/gd/register.js +0 -2
- package/dist/default/i18n/locales/gl/register.js +0 -2
- package/dist/default/i18n/locales/he/register.js +0 -2
- package/dist/default/i18n/locales/hi/register.js +0 -2
- package/dist/default/i18n/locales/hr/register.js +0 -2
- package/dist/default/i18n/locales/hu/register.js +0 -2
- package/dist/default/i18n/locales/id/register.js +0 -2
- package/dist/default/i18n/locales/it/register.js +0 -2
- package/dist/default/i18n/locales/ja/register.js +0 -2
- package/dist/default/i18n/locales/ko/register.js +0 -2
- package/dist/default/i18n/locales/lt/register.js +0 -2
- package/dist/default/i18n/locales/lv/register.js +0 -2
- package/dist/default/i18n/locales/mr/register.js +0 -2
- package/dist/default/i18n/locales/nb/register.js +0 -2
- package/dist/default/i18n/locales/ne/register.js +0 -2
- package/dist/default/i18n/locales/nl/register.js +0 -2
- package/dist/default/i18n/locales/nn/register.js +0 -2
- package/dist/default/i18n/locales/oc/register.js +0 -2
- package/dist/default/i18n/locales/pl/register.js +0 -2
- package/dist/default/i18n/locales/pt/register.js +0 -2
- package/dist/default/i18n/locales/pt-BR/register.js +0 -2
- package/dist/default/i18n/locales/pt-PT/register.js +0 -2
- package/dist/default/i18n/locales/ro/register.js +0 -2
- package/dist/default/i18n/locales/ru/register.js +0 -2
- package/dist/default/i18n/locales/sk/register.js +0 -2
- package/dist/default/i18n/locales/sl/register.js +0 -2
- package/dist/default/i18n/locales/sr/register.js +0 -2
- package/dist/default/i18n/locales/sv/register.js +0 -2
- package/dist/default/i18n/locales/te/register.js +0 -2
- package/dist/default/i18n/locales/th/register.js +0 -2
- package/dist/default/i18n/locales/tr/register.js +0 -2
- package/dist/default/i18n/locales/uk/register.js +0 -2
- package/dist/default/i18n/locales/vi/register.js +0 -2
- package/dist/default/i18n/locales/zh/register.js +0 -2
- package/dist/default/i18n/locales/zh-CN/register.js +0 -2
- package/dist/default/i18n/locales/zh-TW/register.js +0 -2
- package/dist/default/i18n/provider-element.js +0 -2
- package/dist/default/i18n/provider-mixin.js +0 -2
- package/dist/default/i18n/render-text.js +0 -2
- package/dist/default/i18n/text-mixin.js +0 -2
- package/dist/default/icons/dist/element/base.js +0 -2
- package/dist/default/icons/dist/element/default/icons.js +0 -2
- package/dist/default/icons/dist/element/default/index.js +0 -2
- package/dist/default/icons/dist/element/index.js +0 -2
- package/dist/default/icons/dist/element/minimal/icons.js +0 -2
- package/dist/default/icons/dist/element/minimal/index.js +0 -2
- package/dist/default/icons/dist/html/default/airplay-enter.js +0 -2
- package/dist/default/icons/dist/html/default/airplay-exit.js +0 -2
- package/dist/default/icons/dist/html/default/captions-off.js +0 -2
- package/dist/default/icons/dist/html/default/captions-on.js +0 -2
- package/dist/default/icons/dist/html/default/cast-enter.js +0 -2
- package/dist/default/icons/dist/html/default/cast-exit.js +0 -2
- package/dist/default/icons/dist/html/default/check.js +0 -2
- package/dist/default/icons/dist/html/default/chevron.js +0 -2
- package/dist/default/icons/dist/html/default/fullscreen-enter.js +0 -2
- package/dist/default/icons/dist/html/default/fullscreen-exit.js +0 -2
- package/dist/default/icons/dist/html/default/gear.js +0 -2
- package/dist/default/icons/dist/html/default/pause.js +0 -2
- package/dist/default/icons/dist/html/default/pip-enter.js +0 -2
- package/dist/default/icons/dist/html/default/pip-exit.js +0 -2
- package/dist/default/icons/dist/html/default/play.js +0 -2
- package/dist/default/icons/dist/html/default/quality.js +0 -2
- package/dist/default/icons/dist/html/default/restart.js +0 -2
- package/dist/default/icons/dist/html/default/seek.js +0 -2
- package/dist/default/icons/dist/html/default/speech.js +0 -2
- package/dist/default/icons/dist/html/default/speed.js +0 -2
- package/dist/default/icons/dist/html/default/spinner.js +0 -2
- package/dist/default/icons/dist/html/default/switches.js +0 -2
- package/dist/default/icons/dist/html/default/volume-high.js +0 -2
- package/dist/default/icons/dist/html/default/volume-low.js +0 -2
- package/dist/default/icons/dist/html/default/volume-off.js +0 -2
- package/dist/default/icons/dist/html/minimal/airplay-enter.js +0 -2
- package/dist/default/icons/dist/html/minimal/airplay-exit.js +0 -2
- package/dist/default/icons/dist/html/minimal/captions-off.js +0 -2
- package/dist/default/icons/dist/html/minimal/captions-on.js +0 -2
- package/dist/default/icons/dist/html/minimal/cast-enter.js +0 -2
- package/dist/default/icons/dist/html/minimal/cast-exit.js +0 -2
- package/dist/default/icons/dist/html/minimal/check.js +0 -2
- package/dist/default/icons/dist/html/minimal/chevron.js +0 -2
- package/dist/default/icons/dist/html/minimal/fullscreen-enter.js +0 -2
- package/dist/default/icons/dist/html/minimal/fullscreen-exit.js +0 -2
- package/dist/default/icons/dist/html/minimal/gear.js +0 -2
- package/dist/default/icons/dist/html/minimal/pause.js +0 -2
- package/dist/default/icons/dist/html/minimal/pip-enter.js +0 -2
- package/dist/default/icons/dist/html/minimal/pip-exit.js +0 -2
- package/dist/default/icons/dist/html/minimal/play.js +0 -2
- package/dist/default/icons/dist/html/minimal/quality.js +0 -2
- package/dist/default/icons/dist/html/minimal/restart.js +0 -2
- package/dist/default/icons/dist/html/minimal/seek.js +0 -2
- package/dist/default/icons/dist/html/minimal/speech.js +0 -2
- package/dist/default/icons/dist/html/minimal/speed.js +0 -2
- package/dist/default/icons/dist/html/minimal/spinner.js +0 -2
- package/dist/default/icons/dist/html/minimal/switches.js +0 -2
- package/dist/default/icons/dist/html/minimal/volume-high.js +0 -2
- package/dist/default/icons/dist/html/minimal/volume-low.js +0 -2
- package/dist/default/icons/dist/html/minimal/volume-off.js +0 -2
- package/dist/default/icons/element/register/index.js +0 -2
- package/dist/default/index.js +2 -2
- package/dist/default/internal/skins/default-audio/register.js +0 -2
- package/dist/default/internal/skins/default-audio/skin.css +387 -191
- package/dist/default/internal/skins/default-audio/template.js +12 -14
- package/dist/default/internal/skins/default-live-audio/register.js +0 -2
- package/dist/default/internal/skins/default-live-audio/skin.css +199 -145
- package/dist/default/internal/skins/default-live-audio/template.js +5 -7
- package/dist/default/internal/skins/default-live-video/register.js +1 -2
- package/dist/default/internal/skins/default-live-video/skin.css +713 -604
- package/dist/default/internal/skins/default-live-video/template.js +18 -19
- package/dist/default/internal/skins/default-video/register.js +1 -2
- package/dist/default/internal/skins/default-video/skin.css +506 -427
- package/dist/default/internal/skins/default-video/template.js +33 -33
- package/dist/default/internal/skins/minimal-audio/register.js +0 -2
- package/dist/default/internal/skins/minimal-audio/skin.css +641 -400
- package/dist/default/internal/skins/minimal-audio/template.js +12 -14
- package/dist/default/internal/skins/minimal-live-audio/register.js +0 -2
- package/dist/default/internal/skins/minimal-live-audio/skin.css +436 -354
- package/dist/default/internal/skins/minimal-live-audio/template.js +5 -7
- package/dist/default/internal/skins/minimal-live-video/register.js +1 -2
- package/dist/default/internal/skins/minimal-live-video/skin.css +916 -785
- package/dist/default/internal/skins/minimal-live-video/template.js +18 -19
- package/dist/default/internal/skins/minimal-video/register.js +1 -2
- package/dist/default/internal/skins/minimal-video/skin.css +742 -633
- package/dist/default/internal/skins/minimal-video/template.js +33 -33
- package/dist/default/internal/skins/properties.css +11 -0
- package/dist/default/media/background-video/adapter.js +0 -2
- package/dist/default/media/background-video/template.js +0 -2
- package/dist/default/media/cloudflare-video/adapter.js +0 -2
- package/dist/default/media/dash-video/adapter.js +0 -2
- package/dist/default/media/hls-audio/adapter.js +0 -2
- package/dist/default/media/hls-background-video/adapter.js +0 -2
- package/dist/default/media/hls-video/adapter.js +0 -2
- package/dist/default/media/hlsjs-video/adapter.js +0 -2
- package/dist/default/media/mux-audio/hls-js.js +0 -2
- package/dist/default/media/mux-audio/mixin.js +0 -2
- package/dist/default/media/mux-audio/spf.js +0 -2
- package/dist/default/media/mux-video/hls-js.js +0 -2
- package/dist/default/media/mux-video/mixin.js +0 -2
- package/dist/default/media/mux-video/spf.js +0 -2
- package/dist/default/media/native-hls-video/adapter.js +0 -2
- package/dist/default/media/shaka-video/adapter.js +0 -2
- package/dist/default/media/spotify-audio/adapter.js +0 -2
- package/dist/default/media/tiktok-video/adapter.js +0 -2
- package/dist/default/media/twitch-video/adapter.js +0 -2
- package/dist/default/media/vimeo-video/adapter.js +0 -2
- package/dist/default/media/wistia-video/adapter.js +0 -2
- package/dist/default/media/youtube-video/adapter.js +0 -2
- package/dist/default/player/context.js +0 -2
- package/dist/default/player/controller.js +0 -2
- package/dist/default/player/create-player.js +0 -2
- package/dist/default/player/element.js +0 -2
- package/dist/default/player/popup-group-context.js +0 -2
- package/dist/default/presets/audio/minimal-skin.js +0 -2
- package/dist/default/presets/audio/player.js +0 -2
- package/dist/default/presets/audio/skin.js +0 -2
- package/dist/default/presets/background/player.js +0 -2
- package/dist/default/presets/background/skin.js +2 -2
- package/dist/default/presets/live-audio/minimal-skin.js +0 -2
- package/dist/default/presets/live-audio/player.js +0 -2
- package/dist/default/presets/live-audio/skin.js +0 -2
- package/dist/default/presets/live-video/minimal-skin.js +0 -2
- package/dist/default/presets/live-video/player.js +0 -2
- package/dist/default/presets/live-video/skin.js +0 -2
- package/dist/default/presets/skin.js +14 -5
- package/dist/default/presets/video/minimal-skin.js +0 -2
- package/dist/default/presets/video/player.js +0 -2
- package/dist/default/presets/video/skin.js +0 -2
- package/dist/default/registration/safe-define.js +0 -2
- package/dist/default/registration/ui-compounds.js +0 -2
- package/dist/default/store/media-attach-mixin.js +0 -2
- package/dist/default/ui/airplay-button/element.js +0 -2
- package/dist/default/ui/alert-dialog/element.js +0 -2
- package/dist/default/ui/audio-track-radio-group/element.js +5 -2
- package/dist/default/ui/buffering-indicator/element.js +0 -2
- package/dist/default/ui/captions-button/element.js +0 -2
- package/dist/default/ui/captions-radio-group/element.js +5 -2
- package/dist/default/ui/cast-button/element.js +0 -2
- package/dist/default/ui/command-for.js +0 -2
- package/dist/default/ui/container/element.js +0 -2
- package/dist/default/ui/context-part-element.js +0 -2
- package/dist/default/ui/controls/backdrop.js +0 -2
- package/dist/default/ui/controls/content.js +0 -2
- package/dist/default/ui/controls/context.js +0 -2
- package/dist/default/ui/controls/element.js +4 -2
- package/dist/default/ui/controls/group.js +0 -2
- package/dist/default/ui/dialog/backdrop.js +0 -2
- package/dist/default/ui/dialog/close.js +1 -2
- package/dist/default/ui/dialog/context.js +0 -2
- package/dist/default/ui/dialog/description.js +4 -2
- package/dist/default/ui/dialog/element.js +0 -2
- package/dist/default/ui/dialog/popup.js +0 -2
- package/dist/default/ui/dialog/title.js +1 -2
- package/dist/default/ui/error-dialog/element.js +0 -2
- package/dist/default/ui/fullscreen-button/element.js +0 -2
- package/dist/default/ui/gesture/element.js +0 -2
- package/dist/default/ui/hotkey/aria-key-shortcuts-controller.js +0 -2
- package/dist/default/ui/hotkey/element.js +0 -2
- package/dist/default/ui/input-indicator/element.js +0 -2
- package/dist/default/ui/input-indicator/live-indicator.js +0 -2
- package/dist/default/ui/live-button/element.js +0 -2
- package/dist/default/ui/media-button-element.js +0 -2
- package/dist/default/ui/media-ui-element.js +0 -2
- package/dist/default/ui/menu/checkbox-item.js +6 -3
- package/dist/default/ui/menu/content.js +1 -3
- package/dist/default/ui/menu/context.js +0 -2
- package/dist/default/ui/menu/element.js +0 -2
- package/dist/default/ui/menu/group-controller.js +0 -2
- package/dist/default/ui/menu/group-label.js +1 -2
- package/dist/default/ui/menu/group.js +4 -2
- package/dist/default/ui/menu/item-indicator.js +4 -2
- package/dist/default/ui/menu/item.js +4 -2
- package/dist/default/ui/menu/radio-group.js +1 -2
- package/dist/default/ui/menu/radio-item.js +4 -2
- package/dist/default/ui/menu/separator.js +1 -2
- package/dist/default/ui/mute-button/element.js +0 -2
- package/dist/default/ui/pip-button/element.js +0 -2
- package/dist/default/ui/play-button/element.js +0 -2
- package/dist/default/ui/playback-rate-button/element.js +0 -2
- package/dist/default/ui/playback-rate-radio-group/element.js +5 -2
- package/dist/default/ui/popover/element.js +0 -2
- package/dist/default/ui/position-controller.js +0 -2
- package/dist/default/ui/poster/element.js +0 -2
- package/dist/default/ui/quality-radio-group/element.js +6 -2
- package/dist/default/ui/radio-group/context.js +0 -2
- package/dist/default/ui/radio-group/element.js +0 -2
- package/dist/default/ui/radio-options/controller.js +0 -2
- package/dist/default/ui/seek-button/element.js +0 -2
- package/dist/default/ui/seek-indicator/element.js +0 -2
- package/dist/default/ui/seek-indicator/value.js +0 -2
- package/dist/default/ui/slider/buffer.js +0 -2
- package/dist/default/ui/slider/context.js +0 -2
- package/dist/default/ui/slider/element.js +0 -2
- package/dist/default/ui/slider/fill.js +0 -2
- package/dist/default/ui/slider/preview.js +0 -2
- package/dist/default/ui/slider/thumb.js +0 -2
- package/dist/default/ui/slider/thumbnail.js +4 -2
- package/dist/default/ui/slider/track.js +0 -2
- package/dist/default/ui/slider/value.js +1 -2
- package/dist/default/ui/status-announcer/element.js +0 -2
- package/dist/default/ui/status-indicator/element.js +0 -2
- package/dist/default/ui/status-indicator/value.js +0 -2
- package/dist/default/ui/text/element.js +0 -2
- package/dist/default/ui/thumbnail/element.js +28 -8
- package/dist/default/ui/time/element.js +0 -2
- package/dist/default/ui/time/group.js +1 -2
- package/dist/default/ui/time/separator.js +0 -2
- package/dist/default/ui/time-slider/chapter-title.js +0 -2
- package/dist/default/ui/time-slider/chapters.js +0 -2
- package/dist/default/ui/time-slider/element.js +5 -4
- package/dist/default/ui/title/element.js +5 -9
- package/dist/default/ui/tooltip/context.js +0 -2
- package/dist/default/ui/tooltip/element.js +0 -2
- package/dist/default/ui/tooltip/group.js +0 -2
- package/dist/default/ui/tooltip/label.js +0 -2
- package/dist/default/ui/tooltip/shortcut.js +0 -2
- package/dist/default/ui/ui-element.js +0 -2
- package/dist/default/ui/volume-indicator/element.js +0 -2
- package/dist/default/ui/volume-indicator/fill.js +0 -2
- package/dist/default/ui/volume-indicator/value.js +0 -2
- package/dist/default/ui/volume-popover/element.js +0 -2
- package/dist/default/ui/volume-slider/element.js +0 -2
- package/dist/dev/define/audio/minimal-skin.css +663 -414
- package/dist/dev/define/audio/minimal-skin2.js +1 -1
- package/dist/dev/define/audio/minimal-skin2.js.map +1 -1
- package/dist/dev/define/audio/skin.css +409 -205
- package/dist/dev/define/audio/skin2.js +1 -1
- package/dist/dev/define/audio/skin2.js.map +1 -1
- package/dist/dev/define/global.css +13 -0
- package/dist/dev/define/global.js +1 -1
- package/dist/dev/define/global.js.map +1 -1
- package/dist/dev/define/live-audio/minimal-skin.css +458 -368
- package/dist/dev/define/live-audio/minimal-skin2.js +1 -1
- package/dist/dev/define/live-audio/minimal-skin2.js.map +1 -1
- package/dist/dev/define/live-audio/skin.css +221 -159
- package/dist/dev/define/live-audio/skin2.js +1 -1
- package/dist/dev/define/live-audio/skin2.js.map +1 -1
- package/dist/dev/define/live-video/minimal-skin.css +1002 -863
- package/dist/dev/define/live-video/minimal-skin2.js +1 -1
- package/dist/dev/define/live-video/minimal-skin2.js.map +1 -1
- package/dist/dev/define/live-video/skin.css +804 -687
- package/dist/dev/define/live-video/skin2.js +1 -1
- package/dist/dev/define/live-video/skin2.js.map +1 -1
- package/dist/dev/define/shadow.css +22 -0
- package/dist/dev/define/shadow.js +6 -0
- package/dist/dev/define/shadow.js.map +1 -0
- package/dist/dev/define/video/minimal-skin.css +764 -647
- package/dist/dev/define/video/minimal-skin2.js +1 -1
- package/dist/dev/define/video/minimal-skin2.js.map +1 -1
- package/dist/dev/define/video/skin.css +528 -441
- package/dist/dev/define/video/skin2.js +1 -1
- package/dist/dev/define/video/skin2.js.map +1 -1
- package/dist/dev/i18n/index.d.ts +2 -2
- package/dist/dev/i18n/index.js +2 -2
- package/dist/dev/index.d.ts +3 -3
- package/dist/dev/index.js +2 -2
- package/dist/dev/internal/skins/default-audio/skin.css +387 -191
- package/dist/dev/internal/skins/default-audio/template.js +12 -12
- package/dist/dev/internal/skins/default-audio/template.js.map +1 -1
- package/dist/dev/internal/skins/default-live-audio/skin.css +199 -145
- package/dist/dev/internal/skins/default-live-audio/template.js +5 -5
- package/dist/dev/internal/skins/default-live-audio/template.js.map +1 -1
- package/dist/dev/internal/skins/default-live-video/register.d.ts +1 -0
- package/dist/dev/internal/skins/default-live-video/register.js +1 -0
- package/dist/dev/internal/skins/default-live-video/register.js.map +1 -1
- package/dist/dev/internal/skins/default-live-video/skin.css +713 -604
- package/dist/dev/internal/skins/default-live-video/template.js +18 -17
- package/dist/dev/internal/skins/default-live-video/template.js.map +1 -1
- package/dist/dev/internal/skins/default-video/register.d.ts +1 -0
- package/dist/dev/internal/skins/default-video/register.js +1 -0
- package/dist/dev/internal/skins/default-video/register.js.map +1 -1
- package/dist/dev/internal/skins/default-video/skin.css +506 -427
- package/dist/dev/internal/skins/default-video/template.js +33 -31
- package/dist/dev/internal/skins/default-video/template.js.map +1 -1
- package/dist/dev/internal/skins/minimal-audio/skin.css +641 -400
- package/dist/dev/internal/skins/minimal-audio/template.js +12 -12
- package/dist/dev/internal/skins/minimal-audio/template.js.map +1 -1
- package/dist/dev/internal/skins/minimal-live-audio/skin.css +436 -354
- package/dist/dev/internal/skins/minimal-live-audio/template.js +5 -5
- package/dist/dev/internal/skins/minimal-live-audio/template.js.map +1 -1
- package/dist/dev/internal/skins/minimal-live-video/register.d.ts +1 -0
- package/dist/dev/internal/skins/minimal-live-video/register.js +1 -0
- package/dist/dev/internal/skins/minimal-live-video/register.js.map +1 -1
- package/dist/dev/internal/skins/minimal-live-video/skin.css +916 -785
- package/dist/dev/internal/skins/minimal-live-video/template.js +18 -17
- package/dist/dev/internal/skins/minimal-live-video/template.js.map +1 -1
- package/dist/dev/internal/skins/minimal-video/register.d.ts +1 -0
- package/dist/dev/internal/skins/minimal-video/register.js +1 -0
- package/dist/dev/internal/skins/minimal-video/register.js.map +1 -1
- package/dist/dev/internal/skins/minimal-video/skin.css +742 -633
- package/dist/dev/internal/skins/minimal-video/template.js +33 -31
- package/dist/dev/internal/skins/minimal-video/template.js.map +1 -1
- package/dist/dev/internal/skins/properties.css +11 -0
- package/dist/dev/player/context.d.ts +1 -0
- package/dist/dev/player/context.js.map +1 -1
- package/dist/dev/presets/background/skin.js +2 -0
- package/dist/dev/presets/background/skin.js.map +1 -1
- package/dist/dev/presets/skin.js +14 -3
- package/dist/dev/presets/skin.js.map +1 -1
- package/dist/dev/ui/audio-track-radio-group/element.d.ts +5 -0
- package/dist/dev/ui/audio-track-radio-group/element.js +5 -0
- package/dist/dev/ui/audio-track-radio-group/element.js.map +1 -1
- package/dist/dev/ui/captions-radio-group/element.d.ts +5 -0
- package/dist/dev/ui/captions-radio-group/element.js +5 -0
- package/dist/dev/ui/captions-radio-group/element.js.map +1 -1
- package/dist/dev/ui/controls/element.d.ts +4 -0
- package/dist/dev/ui/controls/element.js +4 -0
- package/dist/dev/ui/controls/element.js.map +1 -1
- package/dist/dev/ui/dialog/close.d.ts +1 -0
- package/dist/dev/ui/dialog/close.js +1 -0
- package/dist/dev/ui/dialog/close.js.map +1 -1
- package/dist/dev/ui/dialog/description.d.ts +4 -0
- package/dist/dev/ui/dialog/description.js +4 -0
- package/dist/dev/ui/dialog/description.js.map +1 -1
- package/dist/dev/ui/dialog/title.d.ts +1 -0
- package/dist/dev/ui/dialog/title.js +1 -0
- package/dist/dev/ui/dialog/title.js.map +1 -1
- package/dist/dev/ui/menu/checkbox-item.d.ts +6 -1
- package/dist/dev/ui/menu/checkbox-item.js +6 -1
- package/dist/dev/ui/menu/checkbox-item.js.map +1 -1
- package/dist/dev/ui/menu/content.js +1 -1
- package/dist/dev/ui/menu/content.js.map +1 -1
- package/dist/dev/ui/menu/group-label.d.ts +1 -0
- package/dist/dev/ui/menu/group-label.js +1 -0
- package/dist/dev/ui/menu/group-label.js.map +1 -1
- package/dist/dev/ui/menu/group.d.ts +4 -0
- package/dist/dev/ui/menu/group.js +4 -0
- package/dist/dev/ui/menu/group.js.map +1 -1
- package/dist/dev/ui/menu/item-indicator.d.ts +4 -0
- package/dist/dev/ui/menu/item-indicator.js +4 -0
- package/dist/dev/ui/menu/item-indicator.js.map +1 -1
- package/dist/dev/ui/menu/item.d.ts +4 -0
- package/dist/dev/ui/menu/item.js +4 -0
- package/dist/dev/ui/menu/item.js.map +1 -1
- package/dist/dev/ui/menu/radio-group.d.ts +1 -0
- package/dist/dev/ui/menu/radio-group.js +1 -0
- package/dist/dev/ui/menu/radio-group.js.map +1 -1
- package/dist/dev/ui/menu/radio-item.d.ts +4 -0
- package/dist/dev/ui/menu/radio-item.js +4 -0
- package/dist/dev/ui/menu/radio-item.js.map +1 -1
- package/dist/dev/ui/menu/separator.d.ts +1 -0
- package/dist/dev/ui/menu/separator.js +1 -0
- package/dist/dev/ui/menu/separator.js.map +1 -1
- package/dist/dev/ui/playback-rate-radio-group/element.d.ts +5 -0
- package/dist/dev/ui/playback-rate-radio-group/element.js +5 -0
- package/dist/dev/ui/playback-rate-radio-group/element.js.map +1 -1
- package/dist/dev/ui/quality-radio-group/element.d.ts +6 -0
- package/dist/dev/ui/quality-radio-group/element.js +6 -0
- package/dist/dev/ui/quality-radio-group/element.js.map +1 -1
- package/dist/dev/ui/slider/thumbnail.d.ts +4 -0
- package/dist/dev/ui/slider/thumbnail.js +4 -0
- package/dist/dev/ui/slider/thumbnail.js.map +1 -1
- package/dist/dev/ui/slider/value.d.ts +1 -0
- package/dist/dev/ui/slider/value.js +1 -0
- package/dist/dev/ui/slider/value.js.map +1 -1
- package/dist/dev/ui/thumbnail/element.d.ts +3 -1
- package/dist/dev/ui/thumbnail/element.js +28 -6
- package/dist/dev/ui/thumbnail/element.js.map +1 -1
- package/dist/dev/ui/time/group.d.ts +1 -0
- package/dist/dev/ui/time/group.js +1 -0
- package/dist/dev/ui/time/group.js.map +1 -1
- package/dist/dev/ui/time-slider/element.js +5 -2
- package/dist/dev/ui/time-slider/element.js.map +1 -1
- package/dist/dev/ui/title/element.d.ts +1 -2
- package/dist/dev/ui/title/element.js +5 -7
- package/dist/dev/ui/title/element.js.map +1 -1
- package/docs/README.md +1 -1
- package/docs/guides/accessibility.md +93 -0
- package/docs/{concepts/overview.md → guides/architecture.md} +20 -21
- package/docs/{how-to → guides}/autoplay.md +42 -47
- package/docs/{how-to/add-a-background-video.md → guides/background-video.md} +36 -51
- package/docs/guides/browser-support.md +145 -0
- package/docs/guides/build-with-ai.md +167 -0
- package/docs/guides/build-your-own-component.md +245 -0
- package/docs/{concepts → guides}/bundlers.md +13 -5
- package/docs/guides/captions.md +140 -0
- package/docs/{how-to/cast-to-airplay-and-chromecast.md → guides/casting.md} +40 -39
- package/docs/guides/cdn.md +102 -0
- package/docs/guides/content-security-policy.md +37 -0
- package/docs/{how-to/show-and-hide-controls.md → guides/controls.md} +38 -37
- package/docs/guides/customize-skins.md +141 -0
- package/docs/{concepts → guides}/features.md +22 -46
- package/docs/guides/fullscreen.md +145 -0
- package/docs/guides/installation-cdn.md +164 -0
- package/docs/guides/installation-shadcn.md +305 -0
- package/docs/guides/installation-svelte.md +198 -0
- package/docs/guides/installation-vue.md +229 -0
- package/docs/guides/installation.md +186 -0
- package/docs/{how-to/internationalize-the-player.md → guides/internationalization.md} +84 -103
- package/docs/guides/keyboard-shortcuts.md +98 -0
- package/docs/guides/live-streams.md +110 -0
- package/docs/guides/llms.txt +79 -0
- package/docs/{concepts → guides}/media-sources.md +66 -260
- package/docs/{how-to → guides}/migrate-from-media-chrome.md +79 -249
- package/docs/{how-to → guides}/migrate-from-mux-player.md +146 -321
- package/docs/guides/migrate-from-plyr.md +296 -0
- package/docs/guides/migrate-from-video-js-8.md +467 -0
- package/docs/{concepts → guides}/mux-data.md +26 -27
- package/docs/{how-to/use-picture-in-picture.md → guides/picture-in-picture.md} +31 -33
- package/docs/guides/playback-errors.md +129 -0
- package/docs/{how-to/add-a-poster-and-loading-placeholder.md → guides/poster.md} +24 -34
- package/docs/{concepts → guides}/presets.md +17 -131
- package/docs/{how-to/add-quality-selector.md → guides/quality.md} +41 -41
- package/docs/{how-to/self-host-the-player.md → guides/self-hosting.md} +31 -41
- package/docs/guides/skins.md +68 -0
- package/docs/{how-to/use-videojs-with-svelte.md → guides/svelte.md} +15 -18
- package/docs/guides/thumbnails.md +183 -0
- package/docs/{concepts → guides}/typescript.md +10 -3
- package/docs/{concepts → guides}/ui-components.md +8 -14
- package/docs/{how-to/remember-user-preferences.md → guides/user-preferences.md} +25 -28
- package/docs/guides/v10-roadmap.md +92 -0
- package/docs/{how-to/use-videojs-with-vue.md → guides/vue.md} +19 -22
- package/docs/{concepts → guides}/why-videojs.md +36 -17
- package/docs/llms.txt +253 -181
- package/docs/reference/api/aria-key-shortcuts-controller.md +50 -0
- package/docs/reference/{create-i18n.md → api/create-i18n.md} +13 -52
- package/docs/reference/{create-selector.md → api/create-selector.md} +11 -33
- package/docs/reference/api/create-translator.md +36 -0
- package/docs/reference/api/error-codes.md +25 -0
- package/docs/reference/{feature-audio-track.md → api/feature-audio-track.md} +10 -36
- package/docs/reference/{feature-buffer.md → api/feature-buffer.md} +8 -31
- package/docs/reference/{feature-controls.md → api/feature-controls.md} +12 -58
- package/docs/reference/{feature-error.md → api/feature-error.md} +10 -36
- package/docs/reference/{feature-fullscreen.md → api/feature-fullscreen.md} +14 -69
- package/docs/reference/{feature-live.md → api/feature-live.md} +15 -42
- package/docs/reference/{feature-metadata.md → api/feature-metadata.md} +20 -80
- package/docs/reference/{feature-orientation-lock.md → api/feature-orientation-lock.md} +16 -64
- package/docs/reference/{feature-pip.md → api/feature-pip.md} +13 -66
- package/docs/reference/{feature-playback-rate.md → api/feature-playback-rate.md} +11 -46
- package/docs/reference/{feature-playback.md → api/feature-playback.md} +15 -86
- package/docs/reference/{feature-quality.md → api/feature-quality.md} +11 -46
- package/docs/reference/{feature-remote-playback.md → api/feature-remote-playback.md} +12 -47
- package/docs/reference/{feature-source.md → api/feature-source.md} +11 -46
- package/docs/reference/{feature-stream-type.md → api/feature-stream-type.md} +7 -23
- package/docs/reference/api/feature-text-tracks.md +54 -0
- package/docs/reference/{feature-time.md → api/feature-time.md} +12 -56
- package/docs/reference/{feature-volume.md → api/feature-volume.md} +14 -76
- package/docs/reference/{get-i18n-translations.md → api/get-i18n-translations.md} +11 -41
- package/docs/reference/{has-registered-locale.md → api/has-registered-locale.md} +7 -29
- package/docs/reference/{html-create-player.md → api/html-create-player.md} +45 -203
- package/docs/reference/{i-18-n-controller.md → api/i18n-controller.md} +12 -62
- package/docs/reference/api/llms.txt +74 -0
- package/docs/reference/{media-i18n.md → api/media-i18n.md} +8 -16
- package/docs/reference/{media-text.md → api/media-text.md} +3 -7
- package/docs/reference/{on-i18n-registry-change.md → api/on-i18n-registry-change.md} +9 -37
- package/docs/reference/{player-controller.md → api/player-controller.md} +36 -142
- package/docs/reference/{register-i18n.md → api/register-i18n.md} +9 -42
- package/docs/reference/api/snapshot-controller.md +95 -0
- package/docs/reference/api/store-controller.md +85 -0
- package/docs/reference/{subscription-controller.md → api/subscription-controller.md} +12 -70
- package/docs/reference/api/translation-phrases.md +107 -0
- package/docs/reference/api/vjs8-legacy-component.md +21 -0
- package/docs/reference/api/vjs8-legacy-get-player.md +21 -0
- package/docs/reference/api/vjs8-legacy-init.md +21 -0
- package/docs/reference/api/vjs8-legacy-options.md +21 -0
- package/docs/reference/api/vjs8-legacy-plugin.md +21 -0
- package/docs/reference/{airplay-button.md → components/airplay-button.md} +41 -194
- package/docs/reference/{alert-dialog.md → components/alert-dialog.md} +91 -280
- package/docs/reference/components/audio-minimal-skin.md +39 -0
- package/docs/reference/components/audio-skin.md +39 -0
- package/docs/reference/{audio-track-radio-group.md → components/audio-track-radio-group.md} +47 -219
- package/docs/reference/{audio.md → components/audio.md} +16 -17
- package/docs/reference/components/background-video-skin.md +37 -0
- package/docs/reference/{background-video.md → components/background-video.md} +25 -53
- package/docs/reference/{buffering-indicator.md → components/buffering-indicator.md} +21 -65
- package/docs/reference/{captions-button.md → components/captions-button.md} +35 -171
- package/docs/reference/{captions-radio-group.md → components/captions-radio-group.md} +48 -227
- package/docs/reference/{cast-button.md → components/cast-button.md} +39 -179
- package/docs/reference/components/cloudflare-video.md +157 -0
- package/docs/reference/{controls.md → components/controls.md} +52 -171
- package/docs/reference/components/dash-video.md +111 -0
- package/docs/reference/{dialog.md → components/dialog.md} +101 -314
- package/docs/reference/{error-dialog.md → components/error-dialog.md} +66 -162
- package/docs/reference/{fullscreen-button.md → components/fullscreen-button.md} +35 -153
- package/docs/reference/{gesture.md → components/gesture.md} +28 -130
- package/docs/reference/components/google-cast.md +47 -0
- package/docs/reference/components/hls-audio.md +87 -0
- package/docs/reference/components/hls-background-video.md +51 -0
- package/docs/reference/components/hls-video.md +110 -0
- package/docs/reference/components/hlsjs-video.md +126 -0
- package/docs/reference/{hotkey.md → components/hotkey.md} +28 -115
- package/docs/reference/{live-audio-minimal-skin.md → components/live-audio-minimal-skin.md} +12 -16
- package/docs/reference/{live-audio-skin.md → components/live-audio-skin.md} +12 -16
- package/docs/reference/{live-button.md → components/live-button.md} +36 -156
- package/docs/reference/components/live-video-minimal-skin.md +47 -0
- package/docs/reference/components/live-video-skin.md +47 -0
- package/docs/reference/components/llms.txt +122 -0
- package/docs/reference/{menu.md → components/menu.md} +123 -541
- package/docs/reference/{mute-button.md → components/mute-button.md} +50 -200
- package/docs/reference/components/mux-audio.md +127 -0
- package/docs/reference/{mux-background-video.md → components/mux-background-video.md} +9 -15
- package/docs/reference/components/mux-data.md +51 -0
- package/docs/reference/components/mux-video.md +220 -0
- package/docs/reference/components/native-hls-video.md +128 -0
- package/docs/reference/{pip-button.md → components/pip-button.md} +35 -153
- package/docs/reference/{play-button.md → components/play-button.md} +30 -134
- package/docs/reference/{playback-rate-button.md → components/playback-rate-button.md} +25 -105
- package/docs/reference/{playback-rate-radio-group.md → components/playback-rate-radio-group.md} +47 -223
- package/docs/reference/{player-container.md → components/player-container.md} +16 -27
- package/docs/reference/{player.md → components/player.md} +14 -24
- package/docs/reference/components/popover.md +193 -0
- package/docs/reference/{poster.md → components/poster.md} +42 -162
- package/docs/reference/{quality-radio-group.md → components/quality-radio-group.md} +47 -219
- package/docs/reference/{seek-button.md → components/seek-button.md} +26 -127
- package/docs/reference/{seek-indicator.md → components/seek-indicator.md} +55 -233
- package/docs/reference/components/shaka-video.md +161 -0
- package/docs/reference/components/slider.md +414 -0
- package/docs/reference/components/spotify-audio.md +144 -0
- package/docs/reference/{status-announcer.md → components/status-announcer.md} +37 -122
- package/docs/reference/{status-indicator.md → components/status-indicator.md} +57 -278
- package/docs/reference/components/thumbnail.md +321 -0
- package/docs/reference/components/tiktok-video.md +165 -0
- package/docs/reference/{time-slider.md → components/time-slider.md} +136 -595
- package/docs/reference/{time.md → components/time.md} +96 -286
- package/docs/reference/{title.md → components/title.md} +31 -70
- package/docs/reference/components/tooltip.md +274 -0
- package/docs/reference/components/twitch-video.md +161 -0
- package/docs/reference/components/video-minimal-skin.md +51 -0
- package/docs/reference/components/video-skin.md +51 -0
- package/docs/reference/{video.md → components/video.md} +14 -17
- package/docs/reference/components/vimeo-video.md +173 -0
- package/docs/reference/{volume-indicator.md → components/volume-indicator.md} +78 -291
- package/docs/reference/components/volume-popover.md +232 -0
- package/docs/reference/components/volume-slider.md +331 -0
- package/docs/reference/{wistia-video.md → components/wistia-video.md} +22 -30
- package/docs/reference/components/youtube-video.md +163 -0
- package/package.json +39 -38
- package/dist/default/define/audio/minimal-skin.js.map +0 -1
- package/dist/default/define/audio/minimal-skin2.js.map +0 -1
- package/dist/default/define/audio/minimal-ui.js.map +0 -1
- package/dist/default/define/audio/player.js.map +0 -1
- package/dist/default/define/audio/skin.js.map +0 -1
- package/dist/default/define/audio/skin2.js.map +0 -1
- package/dist/default/define/audio/ui.js.map +0 -1
- package/dist/default/define/background/player.js.map +0 -1
- package/dist/default/define/background/skin.js.map +0 -1
- package/dist/default/define/background/skin2.js.map +0 -1
- package/dist/default/define/extensions/google-cast.js.map +0 -1
- package/dist/default/define/extensions/mux-data.js.map +0 -1
- package/dist/default/define/global.js.map +0 -1
- package/dist/default/define/i18n.js.map +0 -1
- package/dist/default/define/live-audio/minimal-skin.js.map +0 -1
- package/dist/default/define/live-audio/minimal-skin2.js.map +0 -1
- package/dist/default/define/live-audio/minimal-ui.js.map +0 -1
- package/dist/default/define/live-audio/player.js.map +0 -1
- package/dist/default/define/live-audio/skin.js.map +0 -1
- package/dist/default/define/live-audio/skin2.js.map +0 -1
- package/dist/default/define/live-audio/ui.js.map +0 -1
- package/dist/default/define/live-video/minimal-skin.js.map +0 -1
- package/dist/default/define/live-video/minimal-skin2.js.map +0 -1
- package/dist/default/define/live-video/minimal-ui.js.map +0 -1
- package/dist/default/define/live-video/player.js.map +0 -1
- package/dist/default/define/live-video/skin.js.map +0 -1
- package/dist/default/define/live-video/skin2.js.map +0 -1
- package/dist/default/define/live-video/ui.js.map +0 -1
- package/dist/default/define/media/background-video.js.map +0 -1
- package/dist/default/define/media/cloudflare-video.js.map +0 -1
- package/dist/default/define/media/dash-video.js.map +0 -1
- package/dist/default/define/media/hls-audio.js.map +0 -1
- package/dist/default/define/media/hls-background-video.js.map +0 -1
- package/dist/default/define/media/hls-video.js.map +0 -1
- package/dist/default/define/media/hlsjs-video.js.map +0 -1
- package/dist/default/define/media/mux-audio/hls-js.js.map +0 -1
- package/dist/default/define/media/mux-audio/spf.js.map +0 -1
- package/dist/default/define/media/mux-background-video.js.map +0 -1
- package/dist/default/define/media/mux-video/hls-js.js.map +0 -1
- package/dist/default/define/media/mux-video/spf.js.map +0 -1
- package/dist/default/define/media/native-hls-video.js.map +0 -1
- package/dist/default/define/media/shaka-video.js.map +0 -1
- package/dist/default/define/media/spotify-audio.js.map +0 -1
- package/dist/default/define/media/tiktok-video.js.map +0 -1
- package/dist/default/define/media/twitch-video.js.map +0 -1
- package/dist/default/define/media/vimeo-video.js.map +0 -1
- package/dist/default/define/media/wistia-video.js.map +0 -1
- package/dist/default/define/media/youtube-video.js.map +0 -1
- package/dist/default/define/shared.css +0 -27
- package/dist/default/define/shared.js +0 -6
- package/dist/default/define/shared.js.map +0 -1
- package/dist/default/define/ui/airplay-button.js.map +0 -1
- package/dist/default/define/ui/alert-dialog.js.map +0 -1
- package/dist/default/define/ui/audio-track-radio-group.js.map +0 -1
- package/dist/default/define/ui/buffering-indicator.js.map +0 -1
- package/dist/default/define/ui/captions-button.js.map +0 -1
- package/dist/default/define/ui/captions-radio-group.js.map +0 -1
- package/dist/default/define/ui/cast-button.js.map +0 -1
- package/dist/default/define/ui/container.js.map +0 -1
- package/dist/default/define/ui/controls-backdrop.js.map +0 -1
- package/dist/default/define/ui/controls-content.js.map +0 -1
- package/dist/default/define/ui/controls-group.js.map +0 -1
- package/dist/default/define/ui/controls.js.map +0 -1
- package/dist/default/define/ui/dialog-backdrop.js.map +0 -1
- package/dist/default/define/ui/dialog-close.js.map +0 -1
- package/dist/default/define/ui/dialog-description.js.map +0 -1
- package/dist/default/define/ui/dialog-popup.js.map +0 -1
- package/dist/default/define/ui/dialog-title.js.map +0 -1
- package/dist/default/define/ui/dialog.js.map +0 -1
- package/dist/default/define/ui/error-dialog.js.map +0 -1
- package/dist/default/define/ui/fullscreen-button.js.map +0 -1
- package/dist/default/define/ui/gesture.js.map +0 -1
- package/dist/default/define/ui/hotkey.js.map +0 -1
- package/dist/default/define/ui/live-button.js.map +0 -1
- package/dist/default/define/ui/menu-checkbox-item.js.map +0 -1
- package/dist/default/define/ui/menu-content.js.map +0 -1
- package/dist/default/define/ui/menu-group-label.js.map +0 -1
- package/dist/default/define/ui/menu-group.js.map +0 -1
- package/dist/default/define/ui/menu-item-indicator.js.map +0 -1
- package/dist/default/define/ui/menu-item.js.map +0 -1
- package/dist/default/define/ui/menu-radio-group.js.map +0 -1
- package/dist/default/define/ui/menu-radio-item.js.map +0 -1
- package/dist/default/define/ui/menu-separator.js.map +0 -1
- package/dist/default/define/ui/menu.js.map +0 -1
- package/dist/default/define/ui/mute-button.js.map +0 -1
- package/dist/default/define/ui/pip-button.js.map +0 -1
- package/dist/default/define/ui/play-button.js.map +0 -1
- package/dist/default/define/ui/playback-rate-button.js.map +0 -1
- package/dist/default/define/ui/playback-rate-radio-group.js.map +0 -1
- package/dist/default/define/ui/popover.js.map +0 -1
- package/dist/default/define/ui/poster.js.map +0 -1
- package/dist/default/define/ui/quality-radio-group.js.map +0 -1
- package/dist/default/define/ui/seek-button.js.map +0 -1
- package/dist/default/define/ui/seek-indicator-value.js.map +0 -1
- package/dist/default/define/ui/seek-indicator.js.map +0 -1
- package/dist/default/define/ui/slider-buffer.js.map +0 -1
- package/dist/default/define/ui/slider-fill.js.map +0 -1
- package/dist/default/define/ui/slider-preview.js.map +0 -1
- package/dist/default/define/ui/slider-thumb.js.map +0 -1
- package/dist/default/define/ui/slider-thumbnail.js.map +0 -1
- package/dist/default/define/ui/slider-track.js.map +0 -1
- package/dist/default/define/ui/slider-value.js.map +0 -1
- package/dist/default/define/ui/slider.js.map +0 -1
- package/dist/default/define/ui/status-announcer.js.map +0 -1
- package/dist/default/define/ui/status-indicator-value.js.map +0 -1
- package/dist/default/define/ui/status-indicator.js.map +0 -1
- package/dist/default/define/ui/thumbnail.js.map +0 -1
- package/dist/default/define/ui/time-group.js.map +0 -1
- package/dist/default/define/ui/time-separator.js.map +0 -1
- package/dist/default/define/ui/time-slider-chapter-title.js.map +0 -1
- package/dist/default/define/ui/time-slider-chapters.js.map +0 -1
- package/dist/default/define/ui/time-slider.js.map +0 -1
- package/dist/default/define/ui/time.js.map +0 -1
- package/dist/default/define/ui/title.js.map +0 -1
- package/dist/default/define/ui/tooltip-group.js.map +0 -1
- package/dist/default/define/ui/tooltip-label.js.map +0 -1
- package/dist/default/define/ui/tooltip-shortcut.js.map +0 -1
- package/dist/default/define/ui/tooltip.js.map +0 -1
- package/dist/default/define/ui/volume-indicator-fill.js.map +0 -1
- package/dist/default/define/ui/volume-indicator-value.js.map +0 -1
- package/dist/default/define/ui/volume-indicator.js.map +0 -1
- package/dist/default/define/ui/volume-popover.js.map +0 -1
- package/dist/default/define/ui/volume-slider.js.map +0 -1
- package/dist/default/define/video/minimal-skin.js.map +0 -1
- package/dist/default/define/video/minimal-skin2.js.map +0 -1
- package/dist/default/define/video/minimal-ui.js.map +0 -1
- package/dist/default/define/video/player.js.map +0 -1
- package/dist/default/define/video/skin.js.map +0 -1
- package/dist/default/define/video/skin2.js.map +0 -1
- package/dist/default/define/video/ui.js.map +0 -1
- package/dist/default/extensions/google-cast/extension.js.map +0 -1
- package/dist/default/extensions/media-extension-element.js.map +0 -1
- package/dist/default/extensions/mux-data/extension.js.map +0 -1
- package/dist/default/i18n/cache-key.js.map +0 -1
- package/dist/default/i18n/context.js.map +0 -1
- package/dist/default/i18n/controller.js.map +0 -1
- package/dist/default/i18n/create-i18n.js.map +0 -1
- package/dist/default/i18n/locale.js.map +0 -1
- package/dist/default/i18n/locales/all/register.js.map +0 -1
- package/dist/default/i18n/locales/ar/register.js.map +0 -1
- package/dist/default/i18n/locales/az/register.js.map +0 -1
- package/dist/default/i18n/locales/bg/register.js.map +0 -1
- package/dist/default/i18n/locales/bn/register.js.map +0 -1
- package/dist/default/i18n/locales/bs/register.js.map +0 -1
- package/dist/default/i18n/locales/ca/register.js.map +0 -1
- package/dist/default/i18n/locales/cs/register.js.map +0 -1
- package/dist/default/i18n/locales/cy/register.js.map +0 -1
- package/dist/default/i18n/locales/da/register.js.map +0 -1
- package/dist/default/i18n/locales/de/register.js.map +0 -1
- package/dist/default/i18n/locales/el/register.js.map +0 -1
- package/dist/default/i18n/locales/en/register.js.map +0 -1
- package/dist/default/i18n/locales/es/register.js.map +0 -1
- package/dist/default/i18n/locales/et/register.js.map +0 -1
- package/dist/default/i18n/locales/eu/register.js.map +0 -1
- package/dist/default/i18n/locales/fa/register.js.map +0 -1
- package/dist/default/i18n/locales/fi/register.js.map +0 -1
- package/dist/default/i18n/locales/fr/register.js.map +0 -1
- package/dist/default/i18n/locales/gd/register.js.map +0 -1
- package/dist/default/i18n/locales/gl/register.js.map +0 -1
- package/dist/default/i18n/locales/he/register.js.map +0 -1
- package/dist/default/i18n/locales/hi/register.js.map +0 -1
- package/dist/default/i18n/locales/hr/register.js.map +0 -1
- package/dist/default/i18n/locales/hu/register.js.map +0 -1
- package/dist/default/i18n/locales/id/register.js.map +0 -1
- package/dist/default/i18n/locales/it/register.js.map +0 -1
- package/dist/default/i18n/locales/ja/register.js.map +0 -1
- package/dist/default/i18n/locales/ko/register.js.map +0 -1
- package/dist/default/i18n/locales/lt/register.js.map +0 -1
- package/dist/default/i18n/locales/lv/register.js.map +0 -1
- package/dist/default/i18n/locales/mr/register.js.map +0 -1
- package/dist/default/i18n/locales/nb/register.js.map +0 -1
- package/dist/default/i18n/locales/ne/register.js.map +0 -1
- package/dist/default/i18n/locales/nl/register.js.map +0 -1
- package/dist/default/i18n/locales/nn/register.js.map +0 -1
- package/dist/default/i18n/locales/oc/register.js.map +0 -1
- package/dist/default/i18n/locales/pl/register.js.map +0 -1
- package/dist/default/i18n/locales/pt/register.js.map +0 -1
- package/dist/default/i18n/locales/pt-BR/register.js.map +0 -1
- package/dist/default/i18n/locales/pt-PT/register.js.map +0 -1
- package/dist/default/i18n/locales/ro/register.js.map +0 -1
- package/dist/default/i18n/locales/ru/register.js.map +0 -1
- package/dist/default/i18n/locales/sk/register.js.map +0 -1
- package/dist/default/i18n/locales/sl/register.js.map +0 -1
- package/dist/default/i18n/locales/sr/register.js.map +0 -1
- package/dist/default/i18n/locales/sv/register.js.map +0 -1
- package/dist/default/i18n/locales/te/register.js.map +0 -1
- package/dist/default/i18n/locales/th/register.js.map +0 -1
- package/dist/default/i18n/locales/tr/register.js.map +0 -1
- package/dist/default/i18n/locales/uk/register.js.map +0 -1
- package/dist/default/i18n/locales/vi/register.js.map +0 -1
- package/dist/default/i18n/locales/zh/register.js.map +0 -1
- package/dist/default/i18n/locales/zh-CN/register.js.map +0 -1
- package/dist/default/i18n/locales/zh-TW/register.js.map +0 -1
- package/dist/default/i18n/provider-element.js.map +0 -1
- package/dist/default/i18n/provider-mixin.js.map +0 -1
- package/dist/default/i18n/render-text.js.map +0 -1
- package/dist/default/i18n/text-mixin.js.map +0 -1
- package/dist/default/icons/dist/element/base.js.map +0 -1
- package/dist/default/icons/dist/element/default/icons.js.map +0 -1
- package/dist/default/icons/dist/element/default/index.js.map +0 -1
- package/dist/default/icons/dist/element/index.js.map +0 -1
- package/dist/default/icons/dist/element/minimal/icons.js.map +0 -1
- package/dist/default/icons/dist/element/minimal/index.js.map +0 -1
- package/dist/default/icons/dist/html/default/airplay-enter.js.map +0 -1
- package/dist/default/icons/dist/html/default/airplay-exit.js.map +0 -1
- package/dist/default/icons/dist/html/default/captions-off.js.map +0 -1
- package/dist/default/icons/dist/html/default/captions-on.js.map +0 -1
- package/dist/default/icons/dist/html/default/cast-enter.js.map +0 -1
- package/dist/default/icons/dist/html/default/cast-exit.js.map +0 -1
- package/dist/default/icons/dist/html/default/check.js.map +0 -1
- package/dist/default/icons/dist/html/default/chevron.js.map +0 -1
- package/dist/default/icons/dist/html/default/fullscreen-enter.js.map +0 -1
- package/dist/default/icons/dist/html/default/fullscreen-exit.js.map +0 -1
- package/dist/default/icons/dist/html/default/gear.js.map +0 -1
- package/dist/default/icons/dist/html/default/pause.js.map +0 -1
- package/dist/default/icons/dist/html/default/pip-enter.js.map +0 -1
- package/dist/default/icons/dist/html/default/pip-exit.js.map +0 -1
- package/dist/default/icons/dist/html/default/play.js.map +0 -1
- package/dist/default/icons/dist/html/default/quality.js.map +0 -1
- package/dist/default/icons/dist/html/default/restart.js.map +0 -1
- package/dist/default/icons/dist/html/default/seek.js.map +0 -1
- package/dist/default/icons/dist/html/default/speech.js.map +0 -1
- package/dist/default/icons/dist/html/default/speed.js.map +0 -1
- package/dist/default/icons/dist/html/default/spinner.js.map +0 -1
- package/dist/default/icons/dist/html/default/switches.js.map +0 -1
- package/dist/default/icons/dist/html/default/volume-high.js.map +0 -1
- package/dist/default/icons/dist/html/default/volume-low.js.map +0 -1
- package/dist/default/icons/dist/html/default/volume-off.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/airplay-enter.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/airplay-exit.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/captions-off.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/captions-on.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/cast-enter.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/cast-exit.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/check.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/chevron.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/fullscreen-enter.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/fullscreen-exit.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/gear.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/pause.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/pip-enter.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/pip-exit.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/play.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/quality.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/restart.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/seek.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/speech.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/speed.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/spinner.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/switches.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/volume-high.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/volume-low.js.map +0 -1
- package/dist/default/icons/dist/html/minimal/volume-off.js.map +0 -1
- package/dist/default/icons/element/register/index.js.map +0 -1
- package/dist/default/internal/skins/default-audio/register.js.map +0 -1
- package/dist/default/internal/skins/default-audio/template.js.map +0 -1
- package/dist/default/internal/skins/default-live-audio/register.js.map +0 -1
- package/dist/default/internal/skins/default-live-audio/template.js.map +0 -1
- package/dist/default/internal/skins/default-live-video/register.js.map +0 -1
- package/dist/default/internal/skins/default-live-video/template.js.map +0 -1
- package/dist/default/internal/skins/default-video/register.js.map +0 -1
- package/dist/default/internal/skins/default-video/template.js.map +0 -1
- package/dist/default/internal/skins/minimal-audio/register.js.map +0 -1
- package/dist/default/internal/skins/minimal-audio/template.js.map +0 -1
- package/dist/default/internal/skins/minimal-live-audio/register.js.map +0 -1
- package/dist/default/internal/skins/minimal-live-audio/template.js.map +0 -1
- package/dist/default/internal/skins/minimal-live-video/register.js.map +0 -1
- package/dist/default/internal/skins/minimal-live-video/template.js.map +0 -1
- package/dist/default/internal/skins/minimal-video/register.js.map +0 -1
- package/dist/default/internal/skins/minimal-video/template.js.map +0 -1
- package/dist/default/media/background-video/adapter.js.map +0 -1
- package/dist/default/media/background-video/template.js.map +0 -1
- package/dist/default/media/cloudflare-video/adapter.js.map +0 -1
- package/dist/default/media/dash-video/adapter.js.map +0 -1
- package/dist/default/media/hls-audio/adapter.js.map +0 -1
- package/dist/default/media/hls-background-video/adapter.js.map +0 -1
- package/dist/default/media/hls-video/adapter.js.map +0 -1
- package/dist/default/media/hlsjs-video/adapter.js.map +0 -1
- package/dist/default/media/mux-audio/hls-js.js.map +0 -1
- package/dist/default/media/mux-audio/mixin.js.map +0 -1
- package/dist/default/media/mux-audio/spf.js.map +0 -1
- package/dist/default/media/mux-video/hls-js.js.map +0 -1
- package/dist/default/media/mux-video/mixin.js.map +0 -1
- package/dist/default/media/mux-video/spf.js.map +0 -1
- package/dist/default/media/native-hls-video/adapter.js.map +0 -1
- package/dist/default/media/shaka-video/adapter.js.map +0 -1
- package/dist/default/media/spotify-audio/adapter.js.map +0 -1
- package/dist/default/media/tiktok-video/adapter.js.map +0 -1
- package/dist/default/media/twitch-video/adapter.js.map +0 -1
- package/dist/default/media/vimeo-video/adapter.js.map +0 -1
- package/dist/default/media/wistia-video/adapter.js.map +0 -1
- package/dist/default/media/youtube-video/adapter.js.map +0 -1
- package/dist/default/player/context.js.map +0 -1
- package/dist/default/player/controller.js.map +0 -1
- package/dist/default/player/create-player.js.map +0 -1
- package/dist/default/player/element.js.map +0 -1
- package/dist/default/player/popup-group-context.js.map +0 -1
- package/dist/default/presets/audio/minimal-skin.js.map +0 -1
- package/dist/default/presets/audio/player.js.map +0 -1
- package/dist/default/presets/audio/skin.js.map +0 -1
- package/dist/default/presets/background/player.js.map +0 -1
- package/dist/default/presets/background/skin.js.map +0 -1
- package/dist/default/presets/live-audio/minimal-skin.js.map +0 -1
- package/dist/default/presets/live-audio/player.js.map +0 -1
- package/dist/default/presets/live-audio/skin.js.map +0 -1
- package/dist/default/presets/live-video/minimal-skin.js.map +0 -1
- package/dist/default/presets/live-video/player.js.map +0 -1
- package/dist/default/presets/live-video/skin.js.map +0 -1
- package/dist/default/presets/skin.js.map +0 -1
- package/dist/default/presets/video/minimal-skin.js.map +0 -1
- package/dist/default/presets/video/player.js.map +0 -1
- package/dist/default/presets/video/skin.js.map +0 -1
- package/dist/default/registration/safe-define.js.map +0 -1
- package/dist/default/registration/ui-compounds.js.map +0 -1
- package/dist/default/store/media-attach-mixin.js.map +0 -1
- package/dist/default/ui/airplay-button/element.js.map +0 -1
- package/dist/default/ui/alert-dialog/element.js.map +0 -1
- package/dist/default/ui/audio-track-radio-group/element.js.map +0 -1
- package/dist/default/ui/buffering-indicator/element.js.map +0 -1
- package/dist/default/ui/captions-button/element.js.map +0 -1
- package/dist/default/ui/captions-radio-group/element.js.map +0 -1
- package/dist/default/ui/cast-button/element.js.map +0 -1
- package/dist/default/ui/command-for.js.map +0 -1
- package/dist/default/ui/container/element.js.map +0 -1
- package/dist/default/ui/context-part-element.js.map +0 -1
- package/dist/default/ui/controls/backdrop.js.map +0 -1
- package/dist/default/ui/controls/content.js.map +0 -1
- package/dist/default/ui/controls/context.js.map +0 -1
- package/dist/default/ui/controls/element.js.map +0 -1
- package/dist/default/ui/controls/group.js.map +0 -1
- package/dist/default/ui/dialog/backdrop.js.map +0 -1
- package/dist/default/ui/dialog/close.js.map +0 -1
- package/dist/default/ui/dialog/context.js.map +0 -1
- package/dist/default/ui/dialog/description.js.map +0 -1
- package/dist/default/ui/dialog/element.js.map +0 -1
- package/dist/default/ui/dialog/popup.js.map +0 -1
- package/dist/default/ui/dialog/title.js.map +0 -1
- package/dist/default/ui/error-dialog/element.js.map +0 -1
- package/dist/default/ui/fullscreen-button/element.js.map +0 -1
- package/dist/default/ui/gesture/element.js.map +0 -1
- package/dist/default/ui/hotkey/aria-key-shortcuts-controller.js.map +0 -1
- package/dist/default/ui/hotkey/element.js.map +0 -1
- package/dist/default/ui/input-indicator/element.js.map +0 -1
- package/dist/default/ui/input-indicator/live-indicator.js.map +0 -1
- package/dist/default/ui/live-button/element.js.map +0 -1
- package/dist/default/ui/media-button-element.js.map +0 -1
- package/dist/default/ui/media-ui-element.js.map +0 -1
- package/dist/default/ui/menu/checkbox-item.js.map +0 -1
- package/dist/default/ui/menu/content.js.map +0 -1
- package/dist/default/ui/menu/context.js.map +0 -1
- package/dist/default/ui/menu/element.js.map +0 -1
- package/dist/default/ui/menu/group-controller.js.map +0 -1
- package/dist/default/ui/menu/group-label.js.map +0 -1
- package/dist/default/ui/menu/group.js.map +0 -1
- package/dist/default/ui/menu/item-indicator.js.map +0 -1
- package/dist/default/ui/menu/item.js.map +0 -1
- package/dist/default/ui/menu/radio-group.js.map +0 -1
- package/dist/default/ui/menu/radio-item.js.map +0 -1
- package/dist/default/ui/menu/separator.js.map +0 -1
- package/dist/default/ui/mute-button/element.js.map +0 -1
- package/dist/default/ui/pip-button/element.js.map +0 -1
- package/dist/default/ui/play-button/element.js.map +0 -1
- package/dist/default/ui/playback-rate-button/element.js.map +0 -1
- package/dist/default/ui/playback-rate-radio-group/element.js.map +0 -1
- package/dist/default/ui/popover/element.js.map +0 -1
- package/dist/default/ui/position-controller.js.map +0 -1
- package/dist/default/ui/poster/element.js.map +0 -1
- package/dist/default/ui/quality-radio-group/element.js.map +0 -1
- package/dist/default/ui/radio-group/context.js.map +0 -1
- package/dist/default/ui/radio-group/element.js.map +0 -1
- package/dist/default/ui/radio-options/controller.js.map +0 -1
- package/dist/default/ui/seek-button/element.js.map +0 -1
- package/dist/default/ui/seek-indicator/element.js.map +0 -1
- package/dist/default/ui/seek-indicator/value.js.map +0 -1
- package/dist/default/ui/slider/buffer.js.map +0 -1
- package/dist/default/ui/slider/context.js.map +0 -1
- package/dist/default/ui/slider/element.js.map +0 -1
- package/dist/default/ui/slider/fill.js.map +0 -1
- package/dist/default/ui/slider/preview.js.map +0 -1
- package/dist/default/ui/slider/thumb.js.map +0 -1
- package/dist/default/ui/slider/thumbnail.js.map +0 -1
- package/dist/default/ui/slider/track.js.map +0 -1
- package/dist/default/ui/slider/value.js.map +0 -1
- package/dist/default/ui/status-announcer/element.js.map +0 -1
- package/dist/default/ui/status-indicator/element.js.map +0 -1
- package/dist/default/ui/status-indicator/value.js.map +0 -1
- package/dist/default/ui/text/element.js.map +0 -1
- package/dist/default/ui/thumbnail/element.js.map +0 -1
- package/dist/default/ui/time/element.js.map +0 -1
- package/dist/default/ui/time/group.js.map +0 -1
- package/dist/default/ui/time/separator.js.map +0 -1
- package/dist/default/ui/time-slider/chapter-title.js.map +0 -1
- package/dist/default/ui/time-slider/chapters.js.map +0 -1
- package/dist/default/ui/time-slider/element.js.map +0 -1
- package/dist/default/ui/title/element.js.map +0 -1
- package/dist/default/ui/tooltip/context.js.map +0 -1
- package/dist/default/ui/tooltip/element.js.map +0 -1
- package/dist/default/ui/tooltip/group.js.map +0 -1
- package/dist/default/ui/tooltip/label.js.map +0 -1
- package/dist/default/ui/tooltip/shortcut.js.map +0 -1
- package/dist/default/ui/ui-element.js.map +0 -1
- package/dist/default/ui/volume-indicator/element.js.map +0 -1
- package/dist/default/ui/volume-indicator/fill.js.map +0 -1
- package/dist/default/ui/volume-indicator/value.js.map +0 -1
- package/dist/default/ui/volume-popover/element.js.map +0 -1
- package/dist/default/ui/volume-slider/element.js.map +0 -1
- package/dist/dev/define/extensions/google-cast.d.ts.map +0 -1
- package/dist/dev/define/extensions/mux-data.d.ts.map +0 -1
- package/dist/dev/define/i18n.d.ts.map +0 -1
- package/dist/dev/define/media/background-video.d.ts.map +0 -1
- package/dist/dev/define/media/cloudflare-video.d.ts.map +0 -1
- package/dist/dev/define/media/dash-video.d.ts.map +0 -1
- package/dist/dev/define/media/hls-audio.d.ts.map +0 -1
- package/dist/dev/define/media/hls-background-video.d.ts.map +0 -1
- package/dist/dev/define/media/hls-video.d.ts.map +0 -1
- package/dist/dev/define/media/hlsjs-video.d.ts.map +0 -1
- package/dist/dev/define/media/mux-audio/hls-js.d.ts.map +0 -1
- package/dist/dev/define/media/mux-audio/spf.d.ts.map +0 -1
- package/dist/dev/define/media/mux-background-video.d.ts.map +0 -1
- package/dist/dev/define/media/mux-video/hls-js.d.ts.map +0 -1
- package/dist/dev/define/media/mux-video/spf.d.ts.map +0 -1
- package/dist/dev/define/media/native-hls-video.d.ts.map +0 -1
- package/dist/dev/define/media/shaka-video.d.ts.map +0 -1
- package/dist/dev/define/media/spotify-audio.d.ts.map +0 -1
- package/dist/dev/define/media/tiktok-video.d.ts.map +0 -1
- package/dist/dev/define/media/twitch-video.d.ts.map +0 -1
- package/dist/dev/define/media/vimeo-video.d.ts.map +0 -1
- package/dist/dev/define/media/wistia-video.d.ts.map +0 -1
- package/dist/dev/define/media/youtube-video.d.ts.map +0 -1
- package/dist/dev/define/shared.css +0 -27
- package/dist/dev/define/shared.js +0 -6
- package/dist/dev/define/shared.js.map +0 -1
- package/dist/dev/define/ui/airplay-button.d.ts.map +0 -1
- package/dist/dev/define/ui/alert-dialog.d.ts.map +0 -1
- package/dist/dev/define/ui/audio-track-radio-group.d.ts.map +0 -1
- package/dist/dev/define/ui/buffering-indicator.d.ts.map +0 -1
- package/dist/dev/define/ui/captions-button.d.ts.map +0 -1
- package/dist/dev/define/ui/captions-radio-group.d.ts.map +0 -1
- package/dist/dev/define/ui/cast-button.d.ts.map +0 -1
- package/dist/dev/define/ui/container.d.ts.map +0 -1
- package/dist/dev/define/ui/controls-backdrop.d.ts.map +0 -1
- package/dist/dev/define/ui/controls-content.d.ts.map +0 -1
- package/dist/dev/define/ui/controls-group.d.ts.map +0 -1
- package/dist/dev/define/ui/controls.d.ts.map +0 -1
- package/dist/dev/define/ui/dialog-backdrop.d.ts.map +0 -1
- package/dist/dev/define/ui/dialog-close.d.ts.map +0 -1
- package/dist/dev/define/ui/dialog-description.d.ts.map +0 -1
- package/dist/dev/define/ui/dialog-popup.d.ts.map +0 -1
- package/dist/dev/define/ui/dialog-title.d.ts.map +0 -1
- package/dist/dev/define/ui/dialog.d.ts.map +0 -1
- package/dist/dev/define/ui/error-dialog.d.ts.map +0 -1
- package/dist/dev/define/ui/fullscreen-button.d.ts.map +0 -1
- package/dist/dev/define/ui/gesture.d.ts.map +0 -1
- package/dist/dev/define/ui/hotkey.d.ts.map +0 -1
- package/dist/dev/define/ui/live-button.d.ts.map +0 -1
- package/dist/dev/define/ui/menu-checkbox-item.d.ts.map +0 -1
- package/dist/dev/define/ui/menu-content.d.ts.map +0 -1
- package/dist/dev/define/ui/menu-group-label.d.ts.map +0 -1
- package/dist/dev/define/ui/menu-group.d.ts.map +0 -1
- package/dist/dev/define/ui/menu-item-indicator.d.ts.map +0 -1
- package/dist/dev/define/ui/menu-item.d.ts.map +0 -1
- package/dist/dev/define/ui/menu-radio-group.d.ts.map +0 -1
- package/dist/dev/define/ui/menu-radio-item.d.ts.map +0 -1
- package/dist/dev/define/ui/menu-separator.d.ts.map +0 -1
- package/dist/dev/define/ui/menu.d.ts.map +0 -1
- package/dist/dev/define/ui/mute-button.d.ts.map +0 -1
- package/dist/dev/define/ui/pip-button.d.ts.map +0 -1
- package/dist/dev/define/ui/play-button.d.ts.map +0 -1
- package/dist/dev/define/ui/playback-rate-button.d.ts.map +0 -1
- package/dist/dev/define/ui/playback-rate-radio-group.d.ts.map +0 -1
- package/dist/dev/define/ui/popover.d.ts.map +0 -1
- package/dist/dev/define/ui/poster.d.ts.map +0 -1
- package/dist/dev/define/ui/quality-radio-group.d.ts.map +0 -1
- package/dist/dev/define/ui/seek-button.d.ts.map +0 -1
- package/dist/dev/define/ui/seek-indicator-value.d.ts.map +0 -1
- package/dist/dev/define/ui/seek-indicator.d.ts.map +0 -1
- package/dist/dev/define/ui/slider-buffer.d.ts.map +0 -1
- package/dist/dev/define/ui/slider-fill.d.ts.map +0 -1
- package/dist/dev/define/ui/slider-preview.d.ts.map +0 -1
- package/dist/dev/define/ui/slider-thumb.d.ts.map +0 -1
- package/dist/dev/define/ui/slider-thumbnail.d.ts.map +0 -1
- package/dist/dev/define/ui/slider-track.d.ts.map +0 -1
- package/dist/dev/define/ui/slider-value.d.ts.map +0 -1
- package/dist/dev/define/ui/slider.d.ts.map +0 -1
- package/dist/dev/define/ui/status-announcer.d.ts.map +0 -1
- package/dist/dev/define/ui/status-indicator-value.d.ts.map +0 -1
- package/dist/dev/define/ui/status-indicator.d.ts.map +0 -1
- package/dist/dev/define/ui/thumbnail.d.ts.map +0 -1
- package/dist/dev/define/ui/time-group.d.ts.map +0 -1
- package/dist/dev/define/ui/time-separator.d.ts.map +0 -1
- package/dist/dev/define/ui/time-slider-chapter-title.d.ts.map +0 -1
- package/dist/dev/define/ui/time-slider-chapters.d.ts.map +0 -1
- package/dist/dev/define/ui/time-slider.d.ts.map +0 -1
- package/dist/dev/define/ui/time.d.ts.map +0 -1
- package/dist/dev/define/ui/title.d.ts.map +0 -1
- package/dist/dev/define/ui/tooltip-group.d.ts.map +0 -1
- package/dist/dev/define/ui/tooltip-label.d.ts.map +0 -1
- package/dist/dev/define/ui/tooltip-shortcut.d.ts.map +0 -1
- package/dist/dev/define/ui/tooltip.d.ts.map +0 -1
- package/dist/dev/define/ui/volume-indicator-fill.d.ts.map +0 -1
- package/dist/dev/define/ui/volume-indicator-value.d.ts.map +0 -1
- package/dist/dev/define/ui/volume-indicator.d.ts.map +0 -1
- package/dist/dev/define/ui/volume-popover.d.ts.map +0 -1
- package/dist/dev/define/ui/volume-slider.d.ts.map +0 -1
- package/dist/dev/extensions/google-cast/extension.d.ts.map +0 -1
- package/dist/dev/extensions/media-extension-element.d.ts.map +0 -1
- package/dist/dev/extensions/mux-data/extension.d.ts.map +0 -1
- package/dist/dev/i18n/context.d.ts.map +0 -1
- package/dist/dev/i18n/controller.d.ts.map +0 -1
- package/dist/dev/i18n/create-i18n.d.ts.map +0 -1
- package/dist/dev/i18n/locale.d.ts.map +0 -1
- package/dist/dev/i18n/provider-element.d.ts.map +0 -1
- package/dist/dev/i18n/provider-mixin.d.ts.map +0 -1
- package/dist/dev/i18n/render-text.d.ts.map +0 -1
- package/dist/dev/i18n/text-mixin.d.ts.map +0 -1
- package/dist/dev/i18n/types.d.ts.map +0 -1
- package/dist/dev/icons/dist/element/base.d.ts.map +0 -1
- package/dist/dev/icons/dist/html/default/index.d.ts.map +0 -1
- package/dist/dev/icons/dist/html/minimal/index.d.ts.map +0 -1
- package/dist/dev/icons/element/register/index.d.ts.map +0 -1
- package/dist/dev/index.d.ts.map +0 -1
- package/dist/dev/media/background-video/adapter.d.ts.map +0 -1
- package/dist/dev/media/background-video/template.d.ts.map +0 -1
- package/dist/dev/media/cloudflare-video/adapter.d.ts.map +0 -1
- package/dist/dev/media/dash-video/adapter.d.ts.map +0 -1
- package/dist/dev/media/hls-audio/adapter.d.ts.map +0 -1
- package/dist/dev/media/hls-background-video/adapter.d.ts.map +0 -1
- package/dist/dev/media/hls-video/adapter.d.ts.map +0 -1
- package/dist/dev/media/hlsjs-video/adapter.d.ts.map +0 -1
- package/dist/dev/media/mux-audio/hls-js.d.ts.map +0 -1
- package/dist/dev/media/mux-audio/spf.d.ts.map +0 -1
- package/dist/dev/media/mux-video/hls-js.d.ts.map +0 -1
- package/dist/dev/media/mux-video/spf.d.ts.map +0 -1
- package/dist/dev/media/native-hls-video/adapter.d.ts.map +0 -1
- package/dist/dev/media/shaka-video/adapter.d.ts.map +0 -1
- package/dist/dev/media/spotify-audio/adapter.d.ts.map +0 -1
- package/dist/dev/media/tiktok-video/adapter.d.ts.map +0 -1
- package/dist/dev/media/twitch-video/adapter.d.ts.map +0 -1
- package/dist/dev/media/vimeo-video/adapter.d.ts.map +0 -1
- package/dist/dev/media/wistia-video/adapter.d.ts.map +0 -1
- package/dist/dev/media/youtube-video/adapter.d.ts.map +0 -1
- package/dist/dev/player/context.d.ts.map +0 -1
- package/dist/dev/player/controller.d.ts.map +0 -1
- package/dist/dev/player/create-player.d.ts.map +0 -1
- package/dist/dev/presets/audio/minimal-skin.d.ts.map +0 -1
- package/dist/dev/presets/audio/player.d.ts.map +0 -1
- package/dist/dev/presets/audio/skin.d.ts.map +0 -1
- package/dist/dev/presets/background/player.d.ts.map +0 -1
- package/dist/dev/presets/background/skin.d.ts.map +0 -1
- package/dist/dev/presets/live-audio/minimal-skin.d.ts.map +0 -1
- package/dist/dev/presets/live-audio/player.d.ts.map +0 -1
- package/dist/dev/presets/live-audio/skin.d.ts.map +0 -1
- package/dist/dev/presets/live-video/minimal-skin.d.ts.map +0 -1
- package/dist/dev/presets/live-video/player.d.ts.map +0 -1
- package/dist/dev/presets/live-video/skin.d.ts.map +0 -1
- package/dist/dev/presets/skin.d.ts.map +0 -1
- package/dist/dev/presets/video/minimal-skin.d.ts.map +0 -1
- package/dist/dev/presets/video/player.d.ts.map +0 -1
- package/dist/dev/presets/video/skin.d.ts.map +0 -1
- package/dist/dev/store/media-attach-mixin.d.ts.map +0 -1
- package/dist/dev/store/types.d.ts.map +0 -1
- package/dist/dev/ui/airplay-button/element.d.ts.map +0 -1
- package/dist/dev/ui/alert-dialog/element.d.ts.map +0 -1
- package/dist/dev/ui/audio-track-radio-group/element.d.ts.map +0 -1
- package/dist/dev/ui/buffering-indicator/element.d.ts.map +0 -1
- package/dist/dev/ui/captions-button/element.d.ts.map +0 -1
- package/dist/dev/ui/captions-radio-group/element.d.ts.map +0 -1
- package/dist/dev/ui/cast-button/element.d.ts.map +0 -1
- package/dist/dev/ui/container/element.d.ts.map +0 -1
- package/dist/dev/ui/context-part-element.d.ts.map +0 -1
- package/dist/dev/ui/controls/backdrop.d.ts.map +0 -1
- package/dist/dev/ui/controls/content.d.ts.map +0 -1
- package/dist/dev/ui/controls/context.d.ts.map +0 -1
- package/dist/dev/ui/controls/element.d.ts.map +0 -1
- package/dist/dev/ui/controls/group.d.ts.map +0 -1
- package/dist/dev/ui/dialog/backdrop.d.ts.map +0 -1
- package/dist/dev/ui/dialog/close.d.ts.map +0 -1
- package/dist/dev/ui/dialog/context.d.ts.map +0 -1
- package/dist/dev/ui/dialog/description.d.ts.map +0 -1
- package/dist/dev/ui/dialog/element.d.ts.map +0 -1
- package/dist/dev/ui/dialog/popup.d.ts.map +0 -1
- package/dist/dev/ui/dialog/title.d.ts.map +0 -1
- package/dist/dev/ui/error-dialog/element.d.ts.map +0 -1
- package/dist/dev/ui/fullscreen-button/element.d.ts.map +0 -1
- package/dist/dev/ui/gesture/element.d.ts.map +0 -1
- package/dist/dev/ui/hotkey/aria-key-shortcuts-controller.d.ts.map +0 -1
- package/dist/dev/ui/hotkey/element.d.ts.map +0 -1
- package/dist/dev/ui/input-indicator/element.d.ts.map +0 -1
- package/dist/dev/ui/input-indicator/live-indicator.d.ts.map +0 -1
- package/dist/dev/ui/live-button/element.d.ts.map +0 -1
- package/dist/dev/ui/media-button-element.d.ts.map +0 -1
- package/dist/dev/ui/media-ui-element.d.ts.map +0 -1
- package/dist/dev/ui/menu/checkbox-item.d.ts.map +0 -1
- package/dist/dev/ui/menu/content.d.ts.map +0 -1
- package/dist/dev/ui/menu/context.d.ts.map +0 -1
- package/dist/dev/ui/menu/element.d.ts.map +0 -1
- package/dist/dev/ui/menu/group-label.d.ts.map +0 -1
- package/dist/dev/ui/menu/group.d.ts.map +0 -1
- package/dist/dev/ui/menu/item-indicator.d.ts.map +0 -1
- package/dist/dev/ui/menu/item.d.ts.map +0 -1
- package/dist/dev/ui/menu/radio-group.d.ts.map +0 -1
- package/dist/dev/ui/menu/radio-item.d.ts.map +0 -1
- package/dist/dev/ui/menu/separator.d.ts.map +0 -1
- package/dist/dev/ui/mute-button/element.d.ts.map +0 -1
- package/dist/dev/ui/pip-button/element.d.ts.map +0 -1
- package/dist/dev/ui/play-button/element.d.ts.map +0 -1
- package/dist/dev/ui/playback-rate-button/element.d.ts.map +0 -1
- package/dist/dev/ui/playback-rate-radio-group/element.d.ts.map +0 -1
- package/dist/dev/ui/popover/element.d.ts.map +0 -1
- package/dist/dev/ui/poster/element.d.ts.map +0 -1
- package/dist/dev/ui/quality-radio-group/element.d.ts.map +0 -1
- package/dist/dev/ui/radio-group/context.d.ts.map +0 -1
- package/dist/dev/ui/radio-group/element.d.ts.map +0 -1
- package/dist/dev/ui/seek-button/element.d.ts.map +0 -1
- package/dist/dev/ui/seek-indicator/element.d.ts.map +0 -1
- package/dist/dev/ui/seek-indicator/value.d.ts.map +0 -1
- package/dist/dev/ui/slider/buffer.d.ts.map +0 -1
- package/dist/dev/ui/slider/context.d.ts.map +0 -1
- package/dist/dev/ui/slider/element.d.ts.map +0 -1
- package/dist/dev/ui/slider/events.d.ts.map +0 -1
- package/dist/dev/ui/slider/fill.d.ts.map +0 -1
- package/dist/dev/ui/slider/preview.d.ts.map +0 -1
- package/dist/dev/ui/slider/thumb.d.ts.map +0 -1
- package/dist/dev/ui/slider/thumbnail.d.ts.map +0 -1
- package/dist/dev/ui/slider/track.d.ts.map +0 -1
- package/dist/dev/ui/slider/value.d.ts.map +0 -1
- package/dist/dev/ui/status-announcer/element.d.ts.map +0 -1
- package/dist/dev/ui/status-indicator/element.d.ts.map +0 -1
- package/dist/dev/ui/status-indicator/value.d.ts.map +0 -1
- package/dist/dev/ui/text/element.d.ts.map +0 -1
- package/dist/dev/ui/thumbnail/element.d.ts.map +0 -1
- package/dist/dev/ui/time/element.d.ts.map +0 -1
- package/dist/dev/ui/time/group.d.ts.map +0 -1
- package/dist/dev/ui/time/separator.d.ts.map +0 -1
- package/dist/dev/ui/time-slider/chapter-title.d.ts.map +0 -1
- package/dist/dev/ui/time-slider/chapters.d.ts.map +0 -1
- package/dist/dev/ui/time-slider/element.d.ts.map +0 -1
- package/dist/dev/ui/title/element.d.ts.map +0 -1
- package/dist/dev/ui/tooltip/context.d.ts.map +0 -1
- package/dist/dev/ui/tooltip/element.d.ts.map +0 -1
- package/dist/dev/ui/tooltip/group.d.ts.map +0 -1
- package/dist/dev/ui/tooltip/label.d.ts.map +0 -1
- package/dist/dev/ui/tooltip/shortcut.d.ts.map +0 -1
- package/dist/dev/ui/ui-element.d.ts.map +0 -1
- package/dist/dev/ui/volume-indicator/element.d.ts.map +0 -1
- package/dist/dev/ui/volume-indicator/fill.d.ts.map +0 -1
- package/dist/dev/ui/volume-indicator/value.d.ts.map +0 -1
- package/dist/dev/ui/volume-popover/element.d.ts.map +0 -1
- package/dist/dev/ui/volume-slider/element.d.ts.map +0 -1
- package/docs/concepts/accessibility.md +0 -68
- package/docs/concepts/browser-support.md +0 -45
- package/docs/concepts/cdn.md +0 -119
- package/docs/concepts/custom-element-lifecycle.md +0 -115
- package/docs/concepts/security.md +0 -32
- package/docs/concepts/skins.md +0 -188
- package/docs/concepts/v10-roadmap.md +0 -75
- package/docs/how-to/add-keyboard-shortcuts-and-gestures.md +0 -98
- package/docs/how-to/build-with-ai.md +0 -39
- package/docs/how-to/build-your-own-component.md +0 -350
- package/docs/how-to/customize-skins.md +0 -358
- package/docs/how-to/go-fullscreen-and-lock-orientation.md +0 -147
- package/docs/how-to/handle-playback-errors.md +0 -88
- package/docs/how-to/installation.md +0 -165
- package/docs/how-to/migrate-from-plyr.md +0 -406
- package/docs/how-to/migrate-from-video-js-8.md +0 -626
- package/docs/how-to/play-live-streams.md +0 -116
- package/docs/how-to/show-captions-and-subtitles.md +0 -140
- package/docs/how-to/show-timeline-thumbnail-previews.md +0 -164
- package/docs/reference/aria-key-shortcuts-controller.md +0 -117
- package/docs/reference/audio-minimal-skin.md +0 -43
- package/docs/reference/audio-skin.md +0 -43
- package/docs/reference/background-video-skin.md +0 -39
- package/docs/reference/cloudflare-video.md +0 -513
- package/docs/reference/create-translator.md +0 -81
- package/docs/reference/dash-video.md +0 -363
- package/docs/reference/feature-text-tracks.md +0 -134
- package/docs/reference/google-cast.md +0 -83
- package/docs/reference/hls-audio.md +0 -212
- package/docs/reference/hls-background-video.md +0 -100
- package/docs/reference/hls-video.md +0 -339
- package/docs/reference/hlsjs-video.md +0 -1047
- package/docs/reference/html-i-18-n-context.md +0 -55
- package/docs/reference/live-video-minimal-skin.md +0 -51
- package/docs/reference/live-video-skin.md +0 -51
- package/docs/reference/media-attach-mixin.md +0 -101
- package/docs/reference/mux-audio.md +0 -951
- package/docs/reference/mux-data.md +0 -107
- package/docs/reference/mux-video.md +0 -1152
- package/docs/reference/native-hls-video.md +0 -375
- package/docs/reference/player-context.md +0 -60
- package/docs/reference/popover.md +0 -505
- package/docs/reference/shaka-video.md +0 -642
- package/docs/reference/slider.md +0 -859
- package/docs/reference/snapshot-controller.md +0 -244
- package/docs/reference/spotify-audio.md +0 -424
- package/docs/reference/store-controller.md +0 -208
- package/docs/reference/thumbnail.md +0 -386
- package/docs/reference/tiktok-video.md +0 -534
- package/docs/reference/tooltip.md +0 -631
- package/docs/reference/translation-phrases.md +0 -453
- package/docs/reference/twitch-video.md +0 -477
- package/docs/reference/video-minimal-skin.md +0 -49
- package/docs/reference/video-skin.md +0 -49
- package/docs/reference/vimeo-video.md +0 -1056
- package/docs/reference/volume-popover.md +0 -527
- package/docs/reference/volume-slider.md +0 -759
- package/docs/reference/youtube-video.md +0 -603
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":["#core","#stateAttrMap","#provider","#position","#popupId","#titleId","#descriptionId","#bindTrigger","#dialog","#snapshot","#cleanupTrigger","#syncTrigger","#triggerElement","#triggerAbort"],"sources":["../../../../src/ui/dialog/element.ts"],"sourcesContent":["import { DialogCore, DialogDataAttrs, type DialogInput, type DialogState, type StateAttrMap } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createDialog,\n createTransition,\n type DialogApi,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\nimport { SnapshotController } from '@videojs/store/html';\n\nimport { PositionController } from '../position-controller';\nimport { UIElement } from '../ui-element';\nimport { dialogContext } from './context';\n\nlet idCounter = 0;\n\nexport interface DialogElementBaseOptions {\n core?: DialogCore;\n stateAttrMap?: StateAttrMap<DialogState>;\n idPrefix?: string;\n bindTrigger?: boolean;\n}\n\nexport class DialogElementBase extends UIElement {\n static override properties = {\n open: { type: Boolean },\n defaultOpen: { type: Boolean, attribute: 'default-open' },\n closeOnEscape: { type: Boolean, attribute: 'close-on-escape' },\n } satisfies PropertyDeclarationMap<keyof DialogCore.Props>;\n\n open = DialogCore.defaultProps.open;\n defaultOpen = DialogCore.defaultProps.defaultOpen;\n closeOnEscape = DialogCore.defaultProps.closeOnEscape;\n\n readonly #core: DialogCore;\n readonly #stateAttrMap: StateAttrMap<DialogState>;\n readonly #provider = new ContextProvider(this, { context: dialogContext });\n readonly #position = new PositionController(this);\n readonly #popupId: string;\n readonly #titleId: string;\n readonly #descriptionId: string;\n readonly #bindTrigger: boolean;\n\n #dialog: DialogApi | null = null;\n #snapshot: SnapshotController<DialogInput> | null = null;\n #triggerAbort: AbortController | null = null;\n #triggerElement: HTMLElement | null = null;\n\n constructor({\n core = new DialogCore(),\n stateAttrMap = DialogDataAttrs,\n idPrefix = 'dialog',\n bindTrigger = true,\n }: DialogElementBaseOptions = {}) {\n super();\n this.#core = core;\n this.#stateAttrMap = stateAttrMap;\n this.#bindTrigger = bindTrigger;\n this.#popupId = `vjs-${idPrefix}-popup-${idCounter++}`;\n this.#titleId = `vjs-${idPrefix}-title-${idCounter++}`;\n this.#descriptionId = `vjs-${idPrefix}-desc-${idCounter++}`;\n this.#core.setTitleId(this.#titleId);\n this.#core.setDescriptionId(this.#descriptionId);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.#dialog = createDialog({\n transition: createTransition(),\n closeOnEscape: () => this.closeOnEscape,\n onOpenChange: (nextOpen: boolean) => {\n this.open = nextOpen;\n this.dispatchEvent(new CustomEvent('open-change', { detail: { open: nextOpen } }));\n },\n onOpenChangeComplete: (nextOpen: boolean) => {\n this.dispatchEvent(new CustomEvent('open-change-complete', { detail: { open: nextOpen } }));\n },\n });\n\n if (this.#snapshot) {\n this.#snapshot.track(this.#dialog.input);\n } else {\n this.#snapshot = new SnapshotController(this, this.#dialog.input);\n }\n }\n\n protected override firstUpdated(changed: PropertyValues): void {\n super.firstUpdated(changed);\n\n if (this.defaultOpen && !this.open) this.#dialog?.open();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#cleanupTrigger();\n this.#dialog?.destroy();\n this.#dialog = null;\n }\n\n close(): void {\n this.#dialog?.close();\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.#core.setProps(this);\n\n if (this.#dialog && changed.has('open')) {\n const { active: inputOpen } = this.#dialog.input.current;\n\n if (this.open !== inputOpen) {\n if (this.open) this.#dialog.open();\n else this.#dialog.close();\n }\n }\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n if (!this.#dialog) return;\n\n const triggerElement = this.#bindTrigger ? this.#position.findTrigger() : null;\n\n this.#syncTrigger(triggerElement);\n\n const input = this.#dialog.input.current;\n\n this.#core.setInput(input);\n const state = this.#core.getState();\n\n applyStateDataAttrs(this, state, this.#stateAttrMap);\n\n if (this.#triggerElement) {\n applyElementProps(this.#triggerElement, this.#core.getTriggerAttrs(state, this.#popupId));\n }\n\n this.#provider.setValue({\n state,\n stateAttrMap: this.#stateAttrMap,\n dialog: this.#dialog,\n popupId: this.#popupId,\n popupAttrs: this.#core.getPopupAttrs(state),\n close: () => this.#dialog?.close(),\n });\n }\n\n #syncTrigger(triggerElement: HTMLElement | null): void {\n if (triggerElement === this.#triggerElement) return;\n\n this.#cleanupTrigger();\n this.#triggerElement = triggerElement;\n this.#dialog?.setTriggerElement(triggerElement);\n\n if (triggerElement && this.#dialog) {\n this.#triggerAbort = new AbortController();\n applyElementProps(triggerElement, this.#dialog.triggerProps, { signal: this.#triggerAbort.signal });\n }\n }\n\n #cleanupTrigger(): void {\n if (this.#triggerElement) {\n applyElementProps(this.#triggerElement, {\n 'aria-expanded': undefined,\n 'aria-haspopup': undefined,\n 'aria-controls': undefined,\n });\n }\n\n this.#triggerAbort?.abort();\n this.#triggerAbort = null;\n this.#triggerElement = null;\n this.#dialog?.setTriggerElement(null);\n }\n}\n\nexport class DialogElement extends DialogElementBase {\n static readonly tagName = 'media-dialog';\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"popup.js","names":["#dialog"],"sources":["../../../../src/ui/dialog/popup.ts"],"sourcesContent":["import type { DialogState } from '@videojs/core';\nimport { applyElementProps, type DialogApi } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { ContextPartElement } from '../context-part-element';\nimport { dialogContext } from './context';\n\n/** Semantic popup that owns focus management and dialog transition completion. */\nexport class DialogPopupElement extends ContextPartElement<DialogState> {\n static readonly tagName = 'media-dialog-popup';\n\n protected readonly consumer = new ContextConsumer(this, { context: dialogContext, subscribe: true });\n\n #dialog: DialogApi | null = null;\n\n override disconnectedCallback(): void {\n this.#dialog?.setPopupElement(null);\n this.#dialog = null;\n super.disconnectedCallback();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const ctx = this.consumer.value;\n if (!ctx) return;\n\n if (this.#dialog !== ctx.dialog) {\n this.#dialog?.setPopupElement(null);\n this.#dialog = ctx.dialog;\n this.#dialog.setPopupElement(this);\n }\n\n applyElementProps(this, {\n id: ctx.popupId,\n tabIndex: -1,\n ...ctx.popupAttrs,\n });\n }\n}\n"],"mappings":";;;;;;AASA,IAAa,qBAAb,cAAwC,mBAAgC;;;EAGxC,KAAA,WAAA,IAAI,gBAAgB,MAAM;GAAE,SAAS;GAAe,WAAW;EAAK,CAAC;EAEvE,KAAA,UAAA;;;EAJF,KAAA,UAAA;;CAI1B;CAEA,uBAAsC;EACpC,KAAKA,SAAS,gBAAgB,IAAI;EAClC,KAAKA,UAAU;EACf,MAAM,qBAAqB;CAC7B;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAEpB,MAAM,MAAM,KAAK,SAAS;EAC1B,IAAI,CAAC,KAAK;EAEV,IAAI,KAAKA,YAAY,IAAI,QAAQ;GAC/B,KAAKA,SAAS,gBAAgB,IAAI;GAClC,KAAKA,UAAU,IAAI;GACnB,KAAKA,QAAQ,gBAAgB,IAAI;EACnC;EAEA,kBAAkB,MAAM;GACtB,IAAI,IAAI;GACR,UAAU;GACV,GAAG,IAAI;EACT,CAAC;CACH;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"title.js","names":[],"sources":["../../../../src/ui/dialog/title.ts"],"sourcesContent":["import type { DialogState } from '@videojs/core';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { ContextPartElement } from '../context-part-element';\nimport { dialogContext } from './context';\n\nexport class DialogTitleElement extends ContextPartElement<DialogState> {\n static readonly tagName: string = 'media-dialog-title';\n\n protected readonly consumer = new ContextConsumer(this, { context: dialogContext, subscribe: true });\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n const titleId = this.consumer.value?.state.titleId;\n\n if (titleId) this.id = titleId;\n }\n}\n"],"mappings":";;;;AAOA,IAAa,qBAAb,cAAwC,mBAAgC;;;EAGxC,KAAA,WAAA,IAAI,gBAAgB,MAAM;GAAE,SAAS;GAAe,WAAW;EAAK,CAAC;;;EAFjE,KAAA,UAAA;;CAIlC,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EACpB,MAAM,UAAU,KAAK,SAAS,OAAO,MAAM;EAE3C,IAAI,SAAS,KAAK,KAAK;CACzB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":["#core","#provider","#popupId","#titleId","#descriptionId","#errorState","#i18n","#container","#dialog","#snapshot","#modalitySnapshot","#lastError","#syncDialogCopy","#lastDescription","#hasAuthoredCopy","#seenCopyParts","#authoredCopyParts"],"sources":["../../../../src/ui/error-dialog/element.ts"],"sourcesContent":["import {\n type DialogInput,\n ErrorDialogCore,\n ErrorDialogDataAttrs,\n getErrorDialogDismissText,\n getErrorDialogTitleText,\n getErrorDialogUnexpectedText,\n resolveErrorDialogDescription,\n} from '@videojs/core';\nimport {\n applyStateDataAttrs,\n createDialog,\n createTransition,\n type DialogApi,\n type DialogModality,\n selectError,\n} from '@videojs/core/dom';\nimport { translateText } from '@videojs/core/i18n';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer, ContextProvider } from '@videojs/element/context';\nimport type { ErrorLike } from '@videojs/media';\nimport { SnapshotController } from '@videojs/store/html';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { dialogContext } from '../dialog/context';\nimport { UIElement } from '../ui-element';\n\nlet idCounter = 0;\n\nfunction hasAuthoredContent(host: HTMLElement): boolean {\n return Array.from(host.childNodes).some((node) => !!node.textContent?.trim());\n}\n\nexport class ErrorDialogElement extends UIElement {\n static readonly tagName = 'media-error-dialog';\n\n readonly #core = new ErrorDialogCore();\n readonly #provider = new ContextProvider(this, { context: dialogContext });\n readonly #popupId = `vjs-error-dialog-popup-${idCounter++}`;\n readonly #titleId = `vjs-error-dialog-title-${idCounter++}`;\n readonly #descriptionId = `vjs-error-dialog-desc-${idCounter++}`;\n readonly #errorState = new PlayerController(this, playerContext, selectError);\n readonly #i18n = new I18nController(this, i18nContext);\n readonly #container = new ContextConsumer(this, { context: containerContext, subscribe: true });\n\n #dialog: DialogApi | null = null;\n #snapshot: SnapshotController<DialogInput> | null = null;\n #modalitySnapshot: SnapshotController<DialogModality> | null = null;\n #lastError: ErrorLike | null = null;\n #lastDescription: ReturnType<typeof resolveErrorDialogDescription> | null = null;\n #seenCopyParts = new WeakSet<HTMLElement>();\n #authoredCopyParts = new WeakSet<HTMLElement>();\n\n constructor() {\n super();\n this.#core.setTitleId(this.#titleId);\n this.#core.setDescriptionId(this.#descriptionId);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.#dialog = createDialog({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean) => {\n if (!nextOpen) {\n this.#errorState.value?.dismissError();\n }\n },\n });\n\n if (this.#snapshot) {\n this.#snapshot.track(this.#dialog.input);\n } else {\n this.#snapshot = new SnapshotController(this, this.#dialog.input);\n }\n\n if (this.#modalitySnapshot) {\n this.#modalitySnapshot.track(this.#dialog.modality);\n } else {\n this.#modalitySnapshot = new SnapshotController(this, this.#dialog.modality);\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#dialog?.destroy();\n this.#dialog = null;\n }\n\n protected override willUpdate(_changed: PropertyValues): void {\n super.willUpdate(_changed);\n\n if (!this.#dialog) return;\n\n this.#dialog.setInteractionRoot(this.#container.value?.container ?? null);\n\n const errorState = this.#errorState.value;\n const hasError = Boolean(errorState?.error);\n const { active: isOpen } = this.#dialog.input.current;\n\n if (errorState?.error) {\n this.#lastError = errorState.error;\n }\n\n const errorForCopy = errorState?.error ?? (isOpen ? this.#lastError : null);\n\n this.#syncDialogCopy(errorForCopy);\n\n if (!hasError && !isOpen) {\n this.#lastError = null;\n this.#lastDescription = null;\n }\n\n if (hasError && !isOpen) {\n this.#dialog.open();\n } else if (!hasError && isOpen) {\n this.#dialog.close();\n }\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n if (!this.#dialog) return;\n\n const input = this.#dialog.input.current;\n\n this.#core.setInput(input);\n this.#core.setDocumentModal(this.#dialog.modality.current.documentModal);\n const state = this.#core.getState();\n\n applyStateDataAttrs(this, state, ErrorDialogDataAttrs);\n\n this.#provider.setValue({\n state,\n stateAttrMap: ErrorDialogDataAttrs,\n dialog: this.#dialog,\n popupId: this.#popupId,\n popupAttrs: this.#core.getPopupAttrs(state),\n close: () => this.#dialog?.close(),\n });\n }\n\n #syncDialogCopy(error: ErrorLike | null): void {\n const t = this.#i18n.value;\n const title = this.querySelector<HTMLElement>('media-dialog-title');\n\n if (title && !this.#hasAuthoredCopy(title)) {\n title.textContent = translateText(getErrorDialogTitleText(), t);\n }\n\n const desc = this.querySelector<HTMLElement>('media-dialog-description');\n\n if (desc && !this.#hasAuthoredCopy(desc)) {\n const description = error ? resolveErrorDialogDescription(error) : null;\n\n if (description) {\n this.#lastDescription = description;\n }\n\n const copy = description ?? this.#lastDescription;\n\n desc.textContent = copy ? translateText(copy, t) : translateText(getErrorDialogUnexpectedText(), t);\n }\n\n const close = this.querySelector<HTMLElement>('media-dialog-close');\n\n if (close && !this.#hasAuthoredCopy(close)) {\n close.textContent = translateText(getErrorDialogDismissText(), t);\n }\n }\n\n #hasAuthoredCopy(el: HTMLElement): boolean {\n if (!this.#seenCopyParts.has(el)) {\n this.#seenCopyParts.add(el);\n\n if (hasAuthoredContent(el)) {\n this.#authoredCopyParts.add(el);\n }\n }\n\n return this.#authoredCopyParts.has(el);\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":["#container"],"sources":["../../../../src/ui/fullscreen-button/element.ts"],"sourcesContent":["import { FullscreenButtonCore, FullscreenButtonDataAttrs } from '@videojs/core';\nimport { type ButtonActivationSource, selectFullscreen, type UIEvent } from '@videojs/core/dom';\nimport { ContextConsumer } from '@videojs/element/context';\nimport type { MediaFullscreenState } from '@videojs/media';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class FullscreenButtonElement extends MediaButtonElement<FullscreenButtonCore> {\n static readonly tagName = 'media-fullscreen-button';\n\n protected readonly core = new FullscreenButtonCore();\n protected readonly stateAttrMap = FullscreenButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectFullscreen);\n protected override readonly hotkeyAction = 'toggleFullscreen';\n readonly #container = new ContextConsumer(this, { context: containerContext, subscribe: true });\n\n protected activate(state: MediaFullscreenState, _event: UIEvent, source: ButtonActivationSource): Promise<void> {\n if (source === 'pointer') {\n this.#container.value?.container?.focus({ preventScroll: true });\n }\n\n return this.core.toggle(state);\n }\n}\n"],"mappings":";;;;;;;AASA,IAAa,0BAAb,cAA6C,mBAAyC;;;EAG1D,KAAA,OAAA,IAAI,qBAAqB;EACjB,KAAA,eAAA;EACF,KAAA,aAAA,IAAI,iBAAiB,MAAM,eAAe,gBAAgB;EAC/C,KAAA,eAAA;EACrB,KAAA,aAAA,IAAI,gBAAgB,MAAM;GAAE,SAAS;GAAkB,WAAW;EAAK,CAAC;;;EANpE,KAAA,UAAA;;CAM1B;CAEA,SAAmB,OAA6B,QAAiB,QAA+C;EAC9G,IAAI,WAAW,WACb,KAAKA,WAAW,OAAO,WAAW,MAAM,EAAE,eAAe,KAAK,CAAC;EAGjE,OAAO,KAAK,KAAK,OAAO,KAAK;CAC/B;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":["#player","#container","#register","#unregister","#cleanup"],"sources":["../../../../src/ui/gesture/element.ts"],"sourcesContent":["import type { GestureProps } from '@videojs/core';\nimport {\n createDoubleTapGesture,\n createTapGesture,\n getGestureActionValue,\n resolveGestureAction,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { UIElement } from '../ui-element';\n\nexport class GestureElement extends UIElement {\n static readonly tagName = 'media-gesture';\n\n static override properties: PropertyDeclarationMap = {\n type: { type: String },\n action: { type: String },\n value: { type: Number },\n pointer: { type: String },\n region: { type: String },\n disabled: { type: Boolean },\n };\n\n type: GestureProps['type'] | '' = '';\n action: GestureProps['action'] = '';\n value: GestureProps['value'] = undefined;\n pointer: GestureProps['pointer'] = undefined;\n region: GestureProps['region'] = undefined;\n disabled: NonNullable<GestureProps['disabled']> = false;\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.type || !this.action || !store || !container) return;\n\n const resolver = resolveGestureAction(this.action);\n if (!resolver) return;\n\n const { value, region } = this;\n const actionValue = getGestureActionValue(this.action, region, value);\n\n const onActivate = (event: PointerEvent) => {\n resolver({ store, value: actionValue, event });\n };\n\n const options = {\n pointer: this.pointer,\n region,\n disabled: this.disabled,\n action: this.action,\n value: actionValue,\n };\n\n if (this.type === 'doubletap') {\n this.#cleanup = createDoubleTapGesture(container, onActivate, options);\n } else if (this.type === 'tap') {\n this.#cleanup = createTapGesture(container, onActivate, options);\n }\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n"],"mappings":";;;;;;AAcA,IAAa,iBAAb,cAAoC,UAAU;;;EAYV,KAAA,OAAA;EACD,KAAA,SAAA;EACF,KAAA,QAAA,KAAA;EACI,KAAA,UAAA,KAAA;EACF,KAAA,SAAA,KAAA;EACiB,KAAA,WAAA;EAE/B,KAAA,UAAA,IAAI,iBAAiB,MAAM,aAAa;EACrC,KAAA,aAAA,IAAI,gBAAgB,MAAM;GAC9C,SAAS;GACT,gBAAgB,KAAK,cAAc;GACnC,WAAW;EACb,CAAC;EAC+B,KAAA,WAAA;;;EAxBN,KAAA,UAAA;;;EAE2B,KAAA,aAAA;GACnD,MAAM,EAAE,MAAM,OAAO;GACrB,QAAQ,EAAE,MAAM,OAAO;GACvB,OAAO,EAAE,MAAM,OAAO;GACtB,SAAS,EAAE,MAAM,OAAO;GACxB,QAAQ,EAAE,MAAM,OAAO;GACvB,UAAU,EAAE,MAAM,QAAQ;EAC5B;;CASA;CACA;CAKA;CAEA,oBAAmC;EACjC,MAAM,kBAAkB;EACxB,KAAK,MAAM,UAAU;EACrB,KAAKE,UAAU;CACjB;CAEA,uBAAsC;EACpC,MAAM,qBAAqB;EAC3B,KAAKC,YAAY;CACnB;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAGpB,IAAI,KAAK,aAAa;GACpB,KAAKA,YAAY;GACjB,KAAKD,UAAU;EACjB;CACF;CAEA,YAAkB;EAChB,MAAM,QAAQ,KAAKF,QAAQ;EAC3B,MAAM,YAAY,KAAKC,WAAW,OAAO;EACzC,IAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,UAAU,CAAC,SAAS,CAAC,WAAW;EAExD,MAAM,WAAW,qBAAqB,KAAK,MAAM;EACjD,IAAI,CAAC,UAAU;EAEf,MAAM,EAAE,OAAO,WAAW;EAC1B,MAAM,cAAc,sBAAsB,KAAK,QAAQ,QAAQ,KAAK;EAEpE,MAAM,cAAc,UAAwB;GAC1C,SAAS;IAAE;IAAO,OAAO;IAAa;GAAM,CAAC;EAC/C;EAEA,MAAM,UAAU;GACd,SAAS,KAAK;GACd;GACA,UAAU,KAAK;GACf,QAAQ,KAAK;GACb,OAAO;EACT;EAEA,IAAI,KAAK,SAAS,aAChB,KAAKG,WAAW,uBAAuB,WAAW,YAAY,OAAO;OAChE,IAAI,KAAK,SAAS,OACvB,KAAKA,WAAW,iBAAiB,WAAW,YAAY,OAAO;CAEnE;CAEA,cAAoB;EAClB,KAAKA,WAAW;EAChB,KAAKA,WAAW;CAClB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aria-key-shortcuts-controller.js","names":["#host","#action","#getValue","#container","#connect","#disconnect","#unsubscribe"],"sources":["../../../../src/ui/hotkey/aria-key-shortcuts-controller.ts"],"sourcesContent":["import { getHotkeyCoordinator, type HotkeyShortcutDetails } from '@videojs/core/dom';\nimport type { ReactiveController } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport type { ContainerContextConsumer } from '../../player/context';\nimport { containerContext } from '../../player/context';\nimport type { PlayerControllerHost } from '../../player/controller';\n\nexport interface AriaKeyShortcutsControllerOptions {\n value?: (() => number | undefined) | undefined;\n}\n\n/** Provides hotkey shortcut metadata for a given hotkey action name. */\nexport class AriaKeyShortcutsController implements ReactiveController {\n #host: PlayerControllerHost;\n #action: string;\n #getValue: (() => number | undefined) | undefined;\n #container: ContainerContextConsumer;\n #unsubscribe: (() => void) | null = null;\n\n /**\n * @param host - Host element whose nearest player container supplies hotkey registrations.\n * @param action - Registered hotkey action to look up.\n * @param options - Optional value resolver for value-dependent shortcuts.\n */\n constructor(host: PlayerControllerHost, action: string, options: AriaKeyShortcutsControllerOptions = {}) {\n this.#host = host;\n this.#action = action;\n this.#getValue = options.value;\n this.#container = new ContextConsumer(host, {\n context: containerContext,\n callback: (ctx) => this.#connect(ctx?.container),\n subscribe: true,\n });\n host.addController(this);\n }\n\n get value(): string | undefined {\n return this.aria;\n }\n\n get aria(): string | undefined {\n return this.details.aria;\n }\n\n get shortcut(): string | undefined {\n return this.details.shortcut;\n }\n\n get details(): HotkeyShortcutDetails {\n const container = this.#container.value?.container;\n if (!container) return {};\n\n return getHotkeyCoordinator(container).getShortcut(this.#action, this.#getValue?.());\n }\n\n hostConnected(): void {\n this.#connect(this.#container.value?.container);\n }\n\n hostDisconnected(): void {\n this.#disconnect();\n }\n\n #connect(container: HTMLElement | null | undefined): void {\n this.#disconnect();\n\n if (!container) return;\n\n const coordinator = getHotkeyCoordinator(container);\n const notify = () => {\n this.#host.requestUpdate();\n };\n\n this.#unsubscribe = coordinator.subscribeShortcutChanges(notify);\n notify();\n }\n\n #disconnect(): void {\n this.#unsubscribe?.();\n this.#unsubscribe = null;\n }\n}\n"],"mappings":";;;;;AAaA,IAAa,6BAAb,MAAsE;CACpE;CACA;CACA;CACA;CACA,eAAoC;;;;;;CAOpC,YAAY,MAA4B,QAAgB,UAA6C,CAAC,GAAG;EACvG,KAAKA,QAAQ;EACb,KAAKC,UAAU;EACf,KAAKC,YAAY,QAAQ;EACzB,KAAKC,aAAa,IAAI,gBAAgB,MAAM;GAC1C,SAAS;GACT,WAAW,QAAQ,KAAKC,SAAS,KAAK,SAAS;GAC/C,WAAW;EACb,CAAC;EACD,KAAK,cAAc,IAAI;CACzB;CAEA,IAAI,QAA4B;EAC9B,OAAO,KAAK;CACd;CAEA,IAAI,OAA2B;EAC7B,OAAO,KAAK,QAAQ;CACtB;CAEA,IAAI,WAA+B;EACjC,OAAO,KAAK,QAAQ;CACtB;CAEA,IAAI,UAAiC;EACnC,MAAM,YAAY,KAAKD,WAAW,OAAO;EACzC,IAAI,CAAC,WAAW,OAAO,CAAC;EAExB,OAAO,qBAAqB,SAAS,CAAC,CAAC,YAAY,KAAKF,SAAS,KAAKC,YAAY,CAAC;CACrF;CAEA,gBAAsB;EACpB,KAAKE,SAAS,KAAKD,WAAW,OAAO,SAAS;CAChD;CAEA,mBAAyB;EACvB,KAAKE,YAAY;CACnB;CAEA,SAAS,WAAiD;EACxD,KAAKA,YAAY;EAEjB,IAAI,CAAC,WAAW;EAEhB,MAAM,cAAc,qBAAqB,SAAS;EAClD,MAAM,eAAe;GACnB,KAAKL,MAAM,cAAc;EAC3B;EAEA,KAAKM,eAAe,YAAY,yBAAyB,MAAM;EAC/D,OAAO;CACT;CAEA,cAAoB;EAClB,KAAKA,eAAe;EACpB,KAAKA,eAAe;CACtB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":["#player","#container","#register","#unregister","#cleanup"],"sources":["../../../../src/ui/hotkey/element.ts"],"sourcesContent":["import type { HotkeyProps } from '@videojs/core';\nimport { createHotkey, isHotkeyToggleAction, resolveHotkeyAction } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { UIElement } from '../ui-element';\n\nexport class HotkeyElement extends UIElement {\n static readonly tagName = 'media-hotkey';\n\n static override properties: PropertyDeclarationMap = {\n keys: { type: String },\n action: { type: String },\n value: { type: Number },\n disabled: { type: Boolean },\n target: { type: String },\n };\n\n keys: HotkeyProps['keys'] = '';\n action: HotkeyProps['action'] | '' = '';\n value: HotkeyProps['value'] = undefined;\n disabled: NonNullable<HotkeyProps['disabled']> = false;\n target: NonNullable<HotkeyProps['target']> = 'player';\n\n readonly #player = new PlayerController(this, playerContext);\n readonly #container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.requestUpdate(),\n subscribe: true,\n });\n #cleanup: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.style.display = 'none';\n this.#register();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#unregister();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Re-register when attributes change.\n if (this.isConnected) {\n this.#unregister();\n this.#register();\n }\n }\n\n #register(): void {\n const store = this.#player.value;\n const container = this.#container.value?.container;\n if (!this.keys || !this.action || !store || !container) return;\n\n const resolver = resolveHotkeyAction(this.action);\n if (!resolver) return;\n\n const { value, action } = this;\n\n this.#cleanup = createHotkey(container, {\n keys: this.keys,\n action,\n value,\n target: this.target,\n disabled: this.disabled,\n repeatable: !isHotkeyToggleAction(action),\n onActivate: (_event, key) => {\n resolver({ store, key, value });\n },\n });\n }\n\n #unregister(): void {\n this.#cleanup?.();\n this.#cleanup = null;\n }\n}\n"],"mappings":";;;;;;AASA,IAAa,gBAAb,cAAmC,UAAU;;;EAWf,KAAA,OAAA;EACS,KAAA,SAAA;EACP,KAAA,QAAA,KAAA;EACmB,KAAA,WAAA;EACJ,KAAA,SAAA;EAE1B,KAAA,UAAA,IAAI,iBAAiB,MAAM,aAAa;EACrC,KAAA,aAAA,IAAI,gBAAgB,MAAM;GAC9C,SAAS;GACT,gBAAgB,KAAK,cAAc;GACnC,WAAW;EACb,CAAC;EAC+B,KAAA,WAAA;;;EAtBN,KAAA,UAAA;;;EAE2B,KAAA,aAAA;GACnD,MAAM,EAAE,MAAM,OAAO;GACrB,QAAQ,EAAE,MAAM,OAAO;GACvB,OAAO,EAAE,MAAM,OAAO;GACtB,UAAU,EAAE,MAAM,QAAQ;GAC1B,QAAQ,EAAE,MAAM,OAAO;EACzB;;CAQA;CACA;CAKA;CAEA,oBAAmC;EACjC,MAAM,kBAAkB;EACxB,KAAK,MAAM,UAAU;EACrB,KAAKE,UAAU;CACjB;CAEA,uBAAsC;EACpC,MAAM,qBAAqB;EAC3B,KAAKC,YAAY;CACnB;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAGpB,IAAI,KAAK,aAAa;GACpB,KAAKA,YAAY;GACjB,KAAKD,UAAU;EACjB;CACF;CAEA,YAAkB;EAChB,MAAM,QAAQ,KAAKF,QAAQ;EAC3B,MAAM,YAAY,KAAKC,WAAW,OAAO;EACzC,IAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,UAAU,CAAC,SAAS,CAAC,WAAW;EAExD,MAAM,WAAW,oBAAoB,KAAK,MAAM;EAChD,IAAI,CAAC,UAAU;EAEf,MAAM,EAAE,OAAO,WAAW;EAE1B,KAAKG,WAAW,aAAa,WAAW;GACtC,MAAM,KAAK;GACX;GACA;GACA,QAAQ,KAAK;GACb,UAAU,KAAK;GACf,YAAY,CAAC,qBAAqB,MAAM;GACxC,aAAa,QAAQ,QAAQ;IAC3B,SAAS;KAAE;KAAO;KAAK;IAAM,CAAC;GAChC;EACF,CAAC;CACH;CAEA,cAAoB;EAClB,KAAKA,WAAW;EAChB,KAAKA,WAAW;CAClB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":["#reconnect","#visibilityHandle","#snapshot","#disconnect","#inputActionUnsubscribe","#visibilityUnsubscribe","#syncTransition","#payloadSnapshot","#lastGeneration","#getVisibilityHandle"],"sources":["../../../../src/ui/input-indicator/element.ts"],"sourcesContent":["import {\n getRenderedIndicatorState,\n type IndicatorLifecycleState,\n type IndicatorVisibilityHandle,\n type InputActionEvent,\n isIndicatorPresent,\n type MediaSnapshot,\n} from '@videojs/core';\nimport {\n getIndicatorVisibilityCoordinator,\n getMediaSnapshot,\n subscribeToInputActions,\n type TransitionApi,\n} from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport type { State as StoreState } from '@videojs/store';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { UIElement } from '../ui-element';\nimport type { LiveIndicator } from './live-indicator';\n\n/** Shared imperative API for status / volume / seek indicator cores. */\nexport interface InputIndicatorCoreApi<IndicatorState extends IndicatorLifecycleState> {\n readonly state: StoreState<IndicatorState>;\n destroy(): void;\n close(): void;\n processEvent(event: InputActionEvent, snapshot: MediaSnapshot): boolean;\n}\n\nexport interface InputIndicatorOptions {\n replayOnUpdate?: boolean | undefined;\n}\n\nexport abstract class InputIndicatorElement<IndicatorState extends IndicatorLifecycleState> extends UIElement {\n protected abstract get core(): InputIndicatorCoreApi<IndicatorState>;\n protected abstract get transition(): TransitionApi;\n protected abstract get liveIndicator(): LiveIndicator<IndicatorState>;\n protected get options(): InputIndicatorOptions {\n return {};\n }\n\n protected abstract syncCoreProps(): void;\n\n protected readonly player = new PlayerController(this, playerContext);\n protected readonly container = new ContextConsumer(this, {\n context: containerContext,\n callback: () => this.#reconnect(),\n subscribe: true,\n });\n\n #disconnect: AbortController | null = null;\n #inputActionUnsubscribe: (() => void) | null = null;\n #visibilityUnsubscribe: (() => void) | null = null;\n #visibilityHandle: IndicatorVisibilityHandle | null = null;\n #lastGeneration = 0;\n #snapshot: IndicatorState | null = null;\n\n #getVisibilityHandle(): IndicatorVisibilityHandle {\n return (this.#visibilityHandle ??= { close: () => this.core.close() });\n }\n\n #payloadSnapshot(): IndicatorState {\n return this.#snapshot ?? this.core.state.current;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.#snapshot = this.core.state.current;\n\n this.#disconnect = new AbortController();\n this.core.state.subscribe(() => this.requestUpdate(), { signal: this.#disconnect.signal });\n this.transition.state.subscribe(() => this.requestUpdate(), { signal: this.#disconnect.signal });\n this.hidden = true;\n this.#reconnect();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#inputActionUnsubscribe?.();\n this.#visibilityUnsubscribe?.();\n this.#inputActionUnsubscribe = null;\n this.#visibilityUnsubscribe = null;\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#inputActionUnsubscribe?.();\n this.#visibilityUnsubscribe?.();\n this.core.destroy();\n this.transition.destroy();\n this.liveIndicator.remove();\n super.destroyCallback();\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.syncCoreProps();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n this.#syncTransition();\n\n const currentState = this.core.state.current;\n const transitionState = this.transition.state.current;\n const present = isIndicatorPresent(currentState, transitionState);\n\n if (!present) {\n this.liveIndicator.remove();\n return;\n }\n\n const state = getRenderedIndicatorState(currentState, this.#payloadSnapshot(), transitionState);\n\n this.liveIndicator.render(state);\n }\n\n #syncTransition(): void {\n const currentState = this.core.state.current;\n\n if (currentState.open) {\n this.#snapshot = currentState;\n\n if (this.#lastGeneration !== currentState.generation) {\n this.#lastGeneration = currentState.generation;\n const transitionState = this.transition.state.current;\n\n if (!transitionState.active || this.options.replayOnUpdate !== false) {\n void this.transition.open(this.liveIndicator.element);\n } else if (transitionState.status === 'ending') {\n this.transition.cancel();\n }\n }\n\n return;\n }\n\n const { active, status } = this.transition.state.current;\n\n if (active && status !== 'ending') {\n void this.transition.close(this.liveIndicator.element);\n }\n }\n\n #reconnect(): void {\n // Context can resolve before this field assignment completes.\n if (!this.container) return;\n\n this.#inputActionUnsubscribe?.();\n this.#visibilityUnsubscribe?.();\n this.#inputActionUnsubscribe = null;\n this.#visibilityUnsubscribe = null;\n\n const container = this.container.value?.container;\n if (!container) return;\n\n const visibility = getIndicatorVisibilityCoordinator(container);\n const visibilityHandle = this.#getVisibilityHandle();\n\n this.#visibilityUnsubscribe = visibility.register(visibilityHandle);\n\n this.#inputActionUnsubscribe = subscribeToInputActions(container, (event) => {\n if (this.core.processEvent(event, getMediaSnapshot(this.player.value))) {\n visibility.show(visibilityHandle);\n }\n });\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"live-indicator.js","names":["#host","#dataAttrs","#render"],"sources":["../../../../src/ui/input-indicator/live-indicator.ts"],"sourcesContent":["import type { StateAttrMap } from '@videojs/core';\nimport { applyStateDataAttrs } from '@videojs/core/dom';\n\nexport interface LiveIndicatorOptions<State extends object> {\n host: HTMLElement;\n dataAttrs: StateAttrMap<State>;\n render: (element: HTMLElement, state: State) => void;\n}\n\nexport class LiveIndicator<State extends object> {\n readonly #host: HTMLElement;\n readonly #dataAttrs: StateAttrMap<State>;\n readonly #render: (element: HTMLElement, state: State) => void;\n\n constructor(options: LiveIndicatorOptions<State>) {\n this.#host = options.host;\n this.#dataAttrs = options.dataAttrs;\n this.#render = options.render;\n }\n\n get element(): HTMLElement {\n return this.#host;\n }\n\n render(state: State): HTMLElement {\n this.#host.hidden = false;\n applyStateDataAttrs(this.#host, state, this.#dataAttrs);\n this.#render(this.#host, state);\n\n return this.#host;\n }\n\n remove(): void {\n this.#host.hidden = true;\n\n for (const key in this.#dataAttrs) {\n const name = this.#dataAttrs[key];\n\n if (name) this.#host.removeAttribute(name);\n }\n }\n}\n"],"mappings":";;AASA,IAAa,gBAAb,MAAiD;CAC/C;CACA;CACA;CAEA,YAAY,SAAsC;EAChD,KAAKA,QAAQ,QAAQ;EACrB,KAAKC,aAAa,QAAQ;EAC1B,KAAKC,UAAU,QAAQ;CACzB;CAEA,IAAI,UAAuB;EACzB,OAAO,KAAKF;CACd;CAEA,OAAO,OAA2B;EAChC,KAAKA,MAAM,SAAS;EACpB,oBAAoB,KAAKA,OAAO,OAAO,KAAKC,UAAU;EACtD,KAAKC,QAAQ,KAAKF,OAAO,KAAK;EAE9B,OAAO,KAAKA;CACd;CAEA,SAAe;EACb,KAAKA,MAAM,SAAS;EAEpB,KAAK,MAAM,OAAO,KAAKC,YAAY;GACjC,MAAM,OAAO,KAAKA,WAAW;GAE7B,IAAI,MAAM,KAAKD,MAAM,gBAAgB,IAAI;EAC3C;CACF;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":["#i18n","#defaultContent","#disconnect","#getMedia"],"sources":["../../../../src/ui/live-button/element.ts"],"sourcesContent":["import { LiveButtonCore, LiveButtonDataAttrs, type LiveButtonMediaState } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createButton,\n logMissingFeature,\n selectBuffer,\n selectLive,\n selectTime,\n} from '@videojs/core/dom';\nimport { resolveText, type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { State } from '@videojs/store';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { UIElement } from '../ui-element';\n\n/**\n * `<media-live-button>` — selects from `live`, `time`, and `buffer` features and composes them into the\n * `LiveButtonMediaState` consumed by `LiveButtonCore`.\n *\n * Doesn't extend `MediaButtonElement` because that base couples a button to a single feature selector; the LiveButton\n * needs three.\n */\nexport class LiveButtonElement extends UIElement {\n static readonly tagName = 'media-live-button';\n\n static override properties: PropertyDeclarationMap = {\n label: { type: String },\n disabled: { type: Boolean },\n };\n\n disabled = false;\n label: Text | string = '';\n\n protected readonly core = new LiveButtonCore();\n\n protected readonly live = new PlayerController(this, playerContext, selectLive);\n protected readonly time = new PlayerController(this, playerContext, selectTime);\n protected readonly buffer = new PlayerController(this, playerContext, selectBuffer);\n readonly #i18n = new I18nController(this, i18nContext);\n\n get $state(): State<LiveButtonCore.State> {\n return this.core.state;\n }\n\n #defaultContent = false;\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.#defaultContent ||= !this.textContent?.trim();\n\n if (this.#defaultContent) {\n this.textContent = translateText(LiveButtonCore.defaultText, this.#i18n.value);\n }\n\n this.#disconnect = new AbortController();\n\n const buttonProps = createButton({\n onActivate: () => {\n const media = this.#getMedia();\n\n if (media) this.core.seekToLive(media);\n },\n isDisabled: () => this.disabled || !this.#getMedia(),\n });\n\n applyElementProps(this, buttonProps, { signal: this.#disconnect.signal });\n\n if (__DEV__ && !this.#getMedia()) {\n logMissingFeature(this.localName, this.live.displayName ?? 'live');\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n /** Returns the button's current label derived from media state. */\n getLabel(): string | undefined {\n return this.core.state.current.label ? resolveText(this.core.state.current.label) : undefined;\n }\n\n /** Resolved label for tooltips and other display surfaces. */\n getResolvedLabel(): string | undefined {\n const media = this.#getMedia();\n if (!media) return undefined;\n\n const state = this.core.getState();\n\n return translateText(this.core.getLabel(state), this.#i18n.value);\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.core.setProps(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n if (this.#defaultContent) {\n this.textContent = translateText(LiveButtonCore.defaultText, this.#i18n.value);\n }\n\n const media = this.#getMedia();\n if (!media) return;\n\n this.core.setMedia(media);\n const state = this.core.getState();\n const attrs = this.core.getAttrs(state);\n\n applyElementProps(this, {\n ...attrs,\n 'aria-label': translateText(attrs['aria-label'], this.#i18n.value),\n });\n applyStateDataAttrs(this, state, LiveButtonDataAttrs);\n }\n\n /**\n * Compose the LiveButton media state from the three feature slices. Returns `null` when any are missing so the button\n * stays disabled until all three features are registered on the player.\n */\n #getMedia(): LiveButtonMediaState | null {\n const live = this.live.value;\n const time = this.time.value;\n const buffer = this.buffer.value;\n if (!live || !time || !buffer) return null;\n\n return {\n currentTime: time.currentTime,\n seek: time.seek,\n seekable: buffer.seekable,\n liveEdgeStart: live.liveEdgeStart,\n targetLiveWindow: live.targetLiveWindow,\n };\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AA2BA,IAAa,oBAAb,cAAuC,UAAU;;;EAQpC,KAAA,WAAA;EACY,KAAA,QAAA;EAEG,KAAA,OAAA,IAAI,eAAe;EAEnB,KAAA,OAAA,IAAI,iBAAiB,MAAM,eAAe,UAAU;EACpD,KAAA,OAAA,IAAI,iBAAiB,MAAM,eAAe,UAAU;EAClD,KAAA,SAAA,IAAI,iBAAiB,MAAM,eAAe,YAAY;EACjE,KAAA,QAAA,IAAI,eAAe,MAAM,WAAW;EAMnC,KAAA,kBAAA;EACoB,KAAA,cAAA;;;EAtBZ,KAAA,UAAA;;;EAE2B,KAAA,aAAA;GACnD,OAAO,EAAE,MAAM,OAAO;GACtB,UAAU,EAAE,MAAM,QAAQ;EAC5B;;CAUA;CAEA,IAAI,SAAsC;EACxC,OAAO,KAAK,KAAK;CACnB;CAEA;CACA;CAEA,oBAAmC;EACjC,MAAM,kBAAkB;EAExB,IAAI,KAAK,WAAW;EAEpB,KAAKC,oBAAoB,CAAC,KAAK,aAAa,KAAK;EAEjD,IAAI,KAAKA,iBACP,KAAK,cAAc,cAAc,eAAe,aAAa,KAAKD,MAAM,KAAK;EAG/E,KAAKE,cAAc,IAAI,gBAAgB;EAEvC,MAAM,cAAc,aAAa;GAC/B,kBAAkB;IAChB,MAAM,QAAQ,KAAKC,UAAU;IAE7B,IAAI,OAAO,KAAK,KAAK,WAAW,KAAK;GACvC;GACA,kBAAkB,KAAK,YAAY,CAAC,KAAKA,UAAU;EACrD,CAAC;EAED,kBAAkB,MAAM,aAAa,EAAE,QAAQ,KAAKD,YAAY,OAAO,CAAC;CAK1E;CAEA,uBAAsC;EACpC,MAAM,qBAAqB;EAC3B,KAAKA,aAAa,MAAM;EACxB,KAAKA,cAAc;CACrB;;CAGA,WAA+B;EAC7B,OAAO,KAAK,KAAK,MAAM,QAAQ,QAAQ,YAAY,KAAK,KAAK,MAAM,QAAQ,KAAK,IAAI,KAAA;CACtF;;CAGA,mBAAuC;EAErC,IAAI,CADU,KAAKC,UACV,GAAG,OAAO,KAAA;EAEnB,MAAM,QAAQ,KAAK,KAAK,SAAS;EAEjC,OAAO,cAAc,KAAK,KAAK,SAAS,KAAK,GAAG,KAAKH,MAAM,KAAK;CAClE;CAEA,WAA8B,SAA+B;EAC3D,MAAM,WAAW,OAAO;EACxB,KAAK,KAAK,SAAS,IAAI;CACzB;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAEpB,IAAI,KAAKC,iBACP,KAAK,cAAc,cAAc,eAAe,aAAa,KAAKD,MAAM,KAAK;EAG/E,MAAM,QAAQ,KAAKG,UAAU;EAC7B,IAAI,CAAC,OAAO;EAEZ,KAAK,KAAK,SAAS,KAAK;EACxB,MAAM,QAAQ,KAAK,KAAK,SAAS;EACjC,MAAM,QAAQ,KAAK,KAAK,SAAS,KAAK;EAEtC,kBAAkB,MAAM;GACtB,GAAG;GACH,cAAc,cAAc,MAAM,eAAe,KAAKH,MAAM,KAAK;EACnE,CAAC;EACD,oBAAoB,MAAM,OAAO,mBAAmB;CACtD;;;;;CAMA,YAAyC;EACvC,MAAM,OAAO,KAAK,KAAK;EACvB,MAAM,OAAO,KAAK,KAAK;EACvB,MAAM,SAAS,KAAK,OAAO;EAC3B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,OAAO;EAEtC,OAAO;GACL,aAAa,KAAK;GAClB,MAAM,KAAK;GACX,UAAU,OAAO;GACjB,eAAe,KAAK;GACpB,kBAAkB,KAAK;EACzB;CACF;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"media-button-element.js","names":["#i18n","#hotkeyRegistry","#disconnect","#syncHotkeyShortcut","#lastHotkeyShortcut"],"sources":["../../../src/ui/media-button-element.ts"],"sourcesContent":["import type {\n ButtonState,\n InferComponentState,\n InferMediaState,\n MediaButtonComponent,\n StateAttrMap,\n} from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n type ButtonActivationSource,\n createButton,\n HOTKEY_SHORTCUT_CHANGE_EVENT,\n logMissingFeature,\n type UIEvent,\n} from '@videojs/core/dom';\nimport { isText, resolveText, type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { State } from '@videojs/store';\nimport { isBoolean, isObject } from '@videojs/utils/predicate';\n\nimport { i18nContext } from '../i18n/context';\nimport { I18nController } from '../i18n/controller';\nimport type { PlayerController } from '../player/controller';\nimport { AriaKeyShortcutsController } from './hotkey/aria-key-shortcuts-controller';\nimport { UIElement } from './ui-element';\n\ntype LabelParams = Record<string, string | number>;\ntype LabelParamsCore<Core extends MediaButtonComponent> = Core & {\n getLabelParams?: (state: InferComponentState<Core>) => LabelParams | undefined;\n};\n\nfunction getLabelParams<Core extends MediaButtonComponent>(\n core: Core,\n state: InferComponentState<Core>\n): LabelParams | undefined {\n return (core as LabelParamsCore<Core>).getLabelParams?.(state);\n}\n\n/** Abstract base for HTML custom elements that render a media-control button. */\nexport abstract class MediaButtonElement<Core extends MediaButtonComponent> extends UIElement {\n static override properties: PropertyDeclarationMap = {\n label: { type: String },\n disabled: { type: Boolean },\n };\n\n disabled = false;\n label: Text | string = '';\n\n protected abstract readonly core: Core;\n protected abstract readonly stateAttrMap: StateAttrMap<InferComponentState<Core>>;\n protected abstract readonly mediaState: PlayerController<any, InferMediaState<Core> | undefined>;\n\n protected abstract activate(\n state: InferMediaState<Core>,\n event: UIEvent,\n source: ButtonActivationSource\n ): void | Promise<void>;\n\n protected getIsButtonDisabled(): boolean {\n return this.disabled || !this.mediaState.value;\n }\n\n protected handleActivate(event: UIEvent, source: ButtonActivationSource): void {\n // `createButton` invokes `onActivate` synchronously from click/keyup\n // handlers, so any rejection here would be unhandled. Log in dev for\n // visibility but absorb the failure at this UI boundary.\n Promise.resolve(this.activate(this.mediaState.value!, event, source)).catch((error) => {\n if (__DEV__) console.error(`[${this.localName}]`, error);\n });\n }\n\n /** Override to set the hotkey action name for `aria-keyshortcuts`. */\n protected readonly hotkeyAction: string | undefined = undefined;\n\n /** Override to match hotkeys that use action values, such as seek steps. */\n protected get hotkeyValue(): number | undefined {\n return undefined;\n }\n\n get $state(): State<ButtonState> {\n return this.core.state;\n }\n\n #disconnect: AbortController | null = null;\n #hotkeyRegistry: AriaKeyShortcutsController | null = null;\n #lastHotkeyShortcut: string | undefined;\n readonly #i18n = new I18nController(this, i18nContext);\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n if (this.hotkeyAction && !this.#hotkeyRegistry) {\n this.#hotkeyRegistry = new AriaKeyShortcutsController(this, this.hotkeyAction, {\n value: () => this.hotkeyValue,\n });\n }\n\n this.#disconnect = new AbortController();\n\n const buttonProps = createButton({\n onActivate: (event, source) => this.handleActivate(event, source),\n isDisabled: () => this.getIsButtonDisabled(),\n });\n\n applyElementProps(this, buttonProps, { signal: this.#disconnect.signal });\n\n if (__DEV__ && !this.mediaState.value && this.mediaState.displayName) {\n logMissingFeature(this.localName, this.mediaState.displayName);\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n /** Returns the button's current label derived from media state. */\n getLabel(): string | undefined {\n return this.core.state.current.label ? resolveText(this.core.state.current.label) : undefined;\n }\n\n getShortcut(): string | undefined {\n return this.#hotkeyRegistry?.shortcut;\n }\n\n /** Resolved label for tooltips and other display surfaces. */\n getResolvedLabel(): string | undefined {\n const media = this.mediaState.value;\n if (!media) return undefined;\n\n this.core.setMedia(media);\n const state = this.core.getState() as InferComponentState<Core>;\n\n return translateText(this.core.getLabel(state), this.#i18n.value, getLabelParams(this.core, state));\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.core.setProps?.(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.mediaState.value;\n\n this.#syncHotkeyShortcut();\n\n if (!media) return;\n\n this.core.setMedia(media);\n const state = this.core.getState() as InferComponentState<Core>;\n const attrs = (this.core.getAttrs?.(state) ?? {}) as Record<string, unknown>;\n\n if (isText(attrs['aria-label'])) {\n attrs['aria-label'] = translateText(attrs['aria-label'], this.#i18n.value, getLabelParams(this.core, state));\n }\n\n applyElementProps(this, {\n ...attrs,\n 'aria-keyshortcuts': this.#hotkeyRegistry?.aria,\n // A button whose core reports itself hidden takes the real attribute, not\n // just the data one: `data-hidden` is a styling hook a skin may or may not\n // act on, where `hidden` removes the control the way the React components\n // do by rendering nothing.\n ...(isHideable(state) && { hidden: state.hidden ? '' : undefined }),\n });\n applyStateDataAttrs(this, state, this.stateAttrMap);\n }\n\n #syncHotkeyShortcut(): void {\n const shortcut = this.getShortcut();\n if (shortcut === this.#lastHotkeyShortcut) return;\n\n this.#lastHotkeyShortcut = shortcut;\n this.dispatchEvent(new CustomEvent(HOTKEY_SHORTCUT_CHANGE_EVENT));\n }\n}\n\n/** Whether a button's core reports whether it should be shown at all. */\nfunction isHideable(state: unknown): state is { hidden: boolean } {\n return isObject(state) && isBoolean((state as { hidden?: unknown }).hidden);\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"media-ui-element.js","names":["#i18n"],"sources":["../../../src/ui/media-ui-element.ts"],"sourcesContent":["import type { InferComponentState, InferMediaState, MediaUIComponent, StateAttrMap } from '@videojs/core';\nimport { applyElementProps, applyStateDataAttrs, logMissingFeature } from '@videojs/core/dom';\nimport { isText, translateText } from '@videojs/core/i18n';\nimport type { PropertyValues } from '@videojs/element';\nimport { isFunction } from '@videojs/utils/predicate';\n\nimport { i18nContext } from '../i18n/context';\nimport { I18nController } from '../i18n/controller';\nimport type { PlayerController } from '../player/controller';\nimport { UIElement } from './ui-element';\n\n/** Abstract base for HTML custom elements that display media state with data attributes. */\nexport abstract class MediaUIElement<Core extends MediaUIComponent> extends UIElement {\n readonly #i18n = new I18nController(this, i18nContext);\n\n protected abstract readonly core: Core;\n protected abstract readonly stateAttrMap: StateAttrMap<InferComponentState<Core>>;\n protected abstract readonly mediaState: PlayerController<any, InferMediaState<Core> | undefined>;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (__DEV__ && !this.mediaState.value && this.mediaState.displayName) {\n logMissingFeature(this.localName, this.mediaState.displayName);\n }\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.mediaState.value;\n if (!media) return;\n\n this.core.setMedia(media);\n const state = this.core.getState();\n\n if (isFunction(this.core.getAttrs)) {\n const attrs = this.core.getAttrs(state) as Record<string, unknown>;\n\n if (isText(attrs['aria-label'])) {\n attrs['aria-label'] = translateText(attrs['aria-label'], this.#i18n.value);\n }\n\n applyElementProps(this, attrs);\n }\n\n applyStateDataAttrs(this, state, this.stateAttrMap);\n }\n}\n"],"mappings":";;;;;;;;AAYA,IAAsB,iBAAtB,cAA4E,UAAU;CACpF,QAAiB,IAAI,eAAe,MAAM,WAAW;CAMrD,oBAAmC;EACjC,MAAM,kBAAkB;CAK1B;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAEpB,MAAM,QAAQ,KAAK,WAAW;EAC9B,IAAI,CAAC,OAAO;EAEZ,KAAK,KAAK,SAAS,KAAK;EACxB,MAAM,QAAQ,KAAK,KAAK,SAAS;EAEjC,IAAI,WAAW,KAAK,KAAK,QAAQ,GAAG;GAClC,MAAM,QAAQ,KAAK,KAAK,SAAS,KAAK;GAEtC,IAAI,OAAO,MAAM,aAAa,GAC5B,MAAM,gBAAgB,cAAc,MAAM,eAAe,KAAKA,MAAM,KAAK;GAG3E,kBAAkB,MAAM,KAAK;EAC/B;EAEA,oBAAoB,MAAM,OAAO,KAAK,YAAY;CACpD;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox-item.js","names":["#ctx","#disconnect","#registered","#cleanupRegistration"],"sources":["../../../../src/ui/menu/checkbox-item.ts"],"sourcesContent":["import { applyElementProps } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { UIElement } from '../ui-element';\nimport { menuContext } from './context';\n\n/** @fires checked-change - Fired when the checked state changes. */\nexport class MenuCheckboxItemElement extends UIElement {\n static readonly tagName = 'media-menu-checkbox-item';\n\n static override properties = {\n checked: { type: Boolean },\n disabled: { type: Boolean },\n } satisfies PropertyDeclarationMap<'checked' | 'disabled'>;\n\n checked = false;\n disabled = false;\n\n readonly #ctx = new ContextConsumer(this, { context: menuContext, subscribe: true });\n\n #disconnect: AbortController | null = null;\n #registered = false;\n #cleanupRegistration: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.#disconnect = new AbortController();\n this.#registered = false;\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#cleanupRegistration?.();\n this.#cleanupRegistration = null;\n this.#disconnect?.abort();\n this.#disconnect = null;\n this.#registered = false;\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n const ctx = this.#ctx.value;\n if (!ctx || !this.#disconnect) return;\n\n if (!this.#registered) {\n this.#registered = true;\n\n this.#cleanupRegistration = ctx.menu.registerItem(this);\n\n applyElementProps(\n this,\n {\n onClick: () => {\n const currentCtx = this.#ctx.value;\n if (!currentCtx || this.disabled) return;\n\n this.checked = !this.checked;\n this.dispatchEvent(new CustomEvent('checked-change', { detail: { checked: this.checked }, bubbles: true }));\n },\n onPointerenter: () => {\n const currentCtx = this.#ctx.value;\n\n if (!this.disabled) currentCtx?.menu.highlight(this, { focus: false, pointer: true });\n },\n },\n { signal: this.#disconnect.signal }\n );\n }\n\n applyElementProps(this, {\n role: 'menuitemcheckbox',\n 'aria-checked': String(this.checked),\n 'aria-disabled': this.disabled ? 'true' : undefined,\n });\n }\n}\n"],"mappings":";;;;;;AAQA,IAAa,0BAAb,cAA6C,UAAU;;;EAQ3C,KAAA,UAAA;EACC,KAAA,WAAA;EAEK,KAAA,OAAA,IAAI,gBAAgB,MAAM;GAAE,SAAS;GAAa,WAAW;EAAK,CAAC;EAE7C,KAAA,cAAA;EACxB,KAAA,cAAA;EAC8B,KAAA,uBAAA;;;EAdlB,KAAA,UAAA;;;EAEG,KAAA,aAAA;GAC3B,SAAS,EAAE,MAAM,QAAQ;GACzB,UAAU,EAAE,MAAM,QAAQ;EAC5B;;CAKA;CAEA;CACA;CACA;CAEA,oBAAmC;EACjC,MAAM,kBAAkB;EACxB,KAAKC,cAAc,IAAI,gBAAgB;EACvC,KAAKC,cAAc;CACrB;CAEA,uBAAsC;EACpC,MAAM,qBAAqB;EAC3B,KAAKC,uBAAuB;EAC5B,KAAKA,uBAAuB;EAC5B,KAAKF,aAAa,MAAM;EACxB,KAAKA,cAAc;EACnB,KAAKC,cAAc;CACrB;CAEA,OAA0B,UAAgC;EACxD,MAAM,OAAO,QAAQ;EAErB,MAAM,MAAM,KAAKF,KAAK;EACtB,IAAI,CAAC,OAAO,CAAC,KAAKC,aAAa;EAE/B,IAAI,CAAC,KAAKC,aAAa;GACrB,KAAKA,cAAc;GAEnB,KAAKC,uBAAuB,IAAI,KAAK,aAAa,IAAI;GAEtD,kBACE,MACA;IACE,eAAe;KAEb,IAAI,CADe,KAAKH,KAAK,SACV,KAAK,UAAU;KAElC,KAAK,UAAU,CAAC,KAAK;KACrB,KAAK,cAAc,IAAI,YAAY,kBAAkB;MAAE,QAAQ,EAAE,SAAS,KAAK,QAAQ;MAAG,SAAS;KAAK,CAAC,CAAC;IAC5G;IACA,sBAAsB;KACpB,MAAM,aAAa,KAAKA,KAAK;KAE7B,IAAI,CAAC,KAAK,UAAU,YAAY,KAAK,UAAU,MAAM;MAAE,OAAO;MAAO,SAAS;KAAK,CAAC;IACtF;GACF,GACA,EAAE,QAAQ,KAAKC,YAAY,OAAO,CACpC;EACF;EAEA,kBAAkB,MAAM;GACtB,MAAM;GACN,gBAAgB,OAAO,KAAK,OAAO;GACnC,iBAAiB,KAAK,WAAW,SAAS,KAAA;EAC5C,CAAC;CACH;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"content.js","names":["#menu","#parentMenu","#optionStates","#optionState","#syncOptionState","#findTrigger","#optionParent","#optionSource","#root","#provider","#core","#generatedId","#context","#normalizing","#disconnect","#handleKeyDown","#handleFocusOut","#cleanupMenu","#ownsMenu","#rootMenu","#setupMenu","#setOptionParent","#wasActive","#setOptionState","#normalize","#cleanupParentRegistration","#cleanupRegistration","#clearOptionState","#stateTrigger","#triggerWasDisabled","#triggerWasHidden"],"sources":["../../../../src/ui/menu/content.ts"],"sourcesContent":["import { MenuContentDataAttrs, MenuCore, type MenuOptionState, resolveMenuOptionState } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createMenu,\n createTransition,\n isMenuNavigationKey,\n type MenuApi,\n type MenuChangeDetails,\n type MenuOpenChangeReason,\n type UIKeyboardEvent,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer, ContextProvider } from '@videojs/element/context';\n\nimport { UIElement } from '../ui-element';\nimport { type MenuContextValue, menuContext } from './context';\nlet idCounter = 0;\n\n/** One accessible menu page. Root and nested pages are sibling children of `<media-menu>`. */\nexport class MenuContentElement extends UIElement {\n static readonly tagName = 'media-menu-content';\n\n static override properties = {\n open: { type: Boolean },\n defaultOpen: { type: Boolean, attribute: 'default-open' },\n } satisfies PropertyDeclarationMap<'open' | 'defaultOpen'>;\n\n open = false;\n defaultOpen = false;\n\n readonly #root = new ContextConsumer(this, { context: menuContext, subscribe: true });\n readonly #provider = new ContextProvider(this, { context: menuContext });\n readonly #core = new MenuCore();\n readonly #generatedId = `vjs-menu-content-${idCounter++}`;\n #context: MenuContextValue | null = null;\n #menu: MenuApi | null = null;\n #parentMenu: MenuApi | null = null;\n #rootMenu: MenuApi | null = null;\n #ownsMenu = false;\n #disconnect: AbortController | null = null;\n #cleanupRegistration: (() => void) | null = null;\n #cleanupParentRegistration: (() => void) | null = null;\n readonly #optionStates = new Map<symbol, MenuOptionState>();\n readonly #optionSource = Symbol('menu');\n #optionState: MenuOptionState | null = null;\n #optionParent: MenuContextValue | null = null;\n #stateTrigger: HTMLElement | null = null;\n #triggerWasDisabled = false;\n #triggerWasHidden = false;\n #wasActive = false;\n #normalizing = false;\n\n get context(): MenuContextValue | null {\n return this.#context;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.#normalizing) return;\n\n this.#disconnect = new AbortController();\n applyElementProps(\n this,\n { onKeyDown: this.#handleKeyDown, onFocusOut: this.#handleFocusOut },\n { signal: this.#disconnect.signal }\n );\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n\n if (this.#normalizing) return;\n\n this.#cleanupMenu();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n openMenu(reason: MenuOpenChangeReason = 'imperative-action'): void {\n this.#menu?.open(reason);\n }\n\n close(reason: MenuOpenChangeReason = 'imperative-action'): void {\n this.#menu?.close(reason);\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n\n if (!this.hasUpdated && this.defaultOpen && !this.open) this.open = true;\n\n if (this.#ownsMenu && this.#menu && changed.has('open')) this.#menu.syncOpen(this.open);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n const root = this.#root.value ?? null;\n if (!root) return;\n\n if (!this.id) this.id = this.#generatedId;\n\n const trigger = this.#findTrigger();\n const parentContent = trigger?.closest<MenuContentElement>(MenuContentElement.tagName) ?? null;\n\n if (parentContent && !parentContent.context) {\n this.hidden = true;\n requestAnimationFrame(() => this.requestUpdate());\n return;\n }\n\n const parentMenu = parentContent?.context?.menu ?? null;\n const isSubmenu = parentMenu !== null;\n\n if (root.menu !== this.#rootMenu || parentMenu !== this.#parentMenu) {\n this.#cleanupMenu();\n this.#rootMenu = root.menu;\n this.#parentMenu = parentMenu;\n this.#setupMenu(root, parentMenu);\n }\n\n this.#setOptionParent(parentContent?.context ?? root);\n\n const menu = this.#menu;\n if (!menu) return;\n\n const input = menu.input.current;\n\n this.#core.setInput({ ...input, isSubmenu });\n const state = this.#core.getState();\n const active = !isSubmenu || state.open || state.status === 'ending';\n\n applyElementProps(this, {\n ...this.#core.getContentAttrs(),\n hidden: !active,\n });\n applyStateDataAttrs(this, state, MenuContentDataAttrs);\n\n if (trigger) {\n menu.setTriggerElement(trigger);\n applyElementProps(trigger, this.#core.getTriggerAttrs(state, active ? this.id : undefined));\n this.#syncOptionState(trigger);\n }\n\n if (isSubmenu && active && !this.#wasActive) menu.highlightFirstItem({ preventScroll: true });\n\n this.#wasActive = active;\n\n this.#context = {\n core: this.#core,\n menu,\n popup: root.popup,\n state,\n setOptionState: this.#setOptionState,\n };\n this.#provider.setValue(this.#context);\n root.popup.sync();\n this.#normalize();\n }\n\n #setupMenu(root: MenuContextValue, parentMenu: MenuApi | null): void {\n const isSubmenu = parentMenu !== null;\n\n if (isSubmenu) {\n this.#ownsMenu = true;\n this.#menu = createMenu({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean, details: MenuChangeDetails) => {\n const accepted = this.dispatchEvent(\n new CustomEvent('open-change', {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: { open: nextOpen, ...details },\n })\n );\n\n if (accepted) this.open = nextOpen;\n },\n closeOnEscape: () => true,\n closeOnOutsideClick: () => false,\n });\n this.#menu.setPopupElement(this);\n this.#cleanupParentRegistration = parentMenu.registerSubmenu(this.#menu);\n const signal = this.#disconnect?.signal;\n\n if (signal) this.#menu.input.subscribe(() => this.requestUpdate(), { signal });\n\n this.#menu.syncOpen(this.open);\n } else {\n this.#ownsMenu = false;\n this.#menu = root.menu;\n }\n\n this.#cleanupRegistration = root.popup.registerContent({\n menu: this.#menu,\n parent: parentMenu,\n element: this,\n });\n }\n\n #cleanupMenu(): void {\n this.#cleanupRegistration?.();\n this.#cleanupRegistration = null;\n this.#cleanupParentRegistration?.();\n this.#cleanupParentRegistration = null;\n this.#setOptionParent(null);\n this.#clearOptionState();\n this.#optionStates.clear();\n this.#optionState = null;\n\n if (this.#ownsMenu) this.#menu?.destroy();\n\n this.#menu = null;\n this.#context = null;\n this.#rootMenu = null;\n this.#parentMenu = null;\n this.#ownsMenu = false;\n this.#wasActive = false;\n }\n\n #findTrigger(): HTMLElement | null {\n if (!this.id) return null;\n\n const root = this.getRootNode() as Document | ShadowRoot;\n\n return (\n [...root.querySelectorAll<HTMLElement>('[commandfor], media-menu-item')].find(\n (element) =>\n element.getAttribute('commandfor') === this.id ||\n (element as HTMLElement & { commandfor?: string }).commandfor === this.id\n ) ?? null\n );\n }\n\n /** Keep every page as a direct popup child, including authored nested pages. */\n #normalize(): void {\n const popup = this.closest('media-menu');\n if (!popup || this.parentElement === popup) return;\n\n this.#normalizing = true;\n popup.append(this);\n this.#normalizing = false;\n }\n\n #handleKeyDown = (event: UIKeyboardEvent): void => {\n const isNavigationKey = isMenuNavigationKey(event);\n const defaultPrevented = event.defaultPrevented;\n\n this.#menu?.contentProps.onKeyDown(event);\n\n if (this.#parentMenu && (event.key === 'ArrowLeft' || event.key === 'Escape') && !defaultPrevented) {\n event.preventDefault();\n this.#menu?.close('escape');\n }\n\n if (event.key !== 'Escape' && isNavigationKey) event.stopPropagation();\n };\n\n #handleFocusOut = (event: FocusEvent): void => {\n this.#menu?.contentProps.onFocusOut(event);\n };\n\n #setOptionState = (source: symbol, optionState: MenuOptionState | null): void => {\n const previous = this.#optionStates.get(source);\n if (optionState && isSameOptionState(previous, optionState)) return;\n\n if (!optionState && !previous) return;\n\n if (optionState) this.#optionStates.set(source, optionState);\n else this.#optionStates.delete(source);\n\n this.#optionState = resolveMenuOptionState(this.#optionStates.values());\n\n if ((this.#optionState?.disabled || this.#optionState?.hidden) && this.open && this.#parentMenu) {\n this.close('imperative-action');\n }\n\n this.#syncOptionState(this.#findTrigger());\n this.#optionParent?.setOptionState(this.#optionSource, this.#optionState);\n };\n\n #setOptionParent(parent: MenuContextValue | null): void {\n if (parent?.menu === this.#optionParent?.menu) {\n this.#optionParent = parent;\n return;\n }\n\n this.#optionParent?.setOptionState(this.#optionSource, null);\n this.#optionParent = parent;\n this.#optionParent?.setOptionState(this.#optionSource, this.#optionState);\n }\n\n #syncOptionState(trigger: HTMLElement | null): void {\n if (trigger !== this.#stateTrigger) {\n this.#clearOptionState();\n this.#stateTrigger = trigger;\n this.#triggerWasDisabled = trigger ? isTriggerExplicitlyDisabled(trigger) : false;\n this.#triggerWasHidden = trigger?.hidden === true;\n }\n\n if (!trigger) return;\n\n const disabled = this.#optionState?.disabled || this.#triggerWasDisabled;\n\n applyElementProps(trigger, {\n disabled: disabled || undefined,\n 'aria-disabled': disabled ? 'true' : undefined,\n 'data-availability': this.#optionState?.availability,\n hidden: this.#triggerWasHidden || this.#optionState?.hidden || undefined,\n });\n const value = trigger.querySelector<HTMLElement>('[data-part~=\"value\"], [data-part~=\"hint\"]');\n\n if (value && value.textContent !== this.#optionState?.value) value.textContent = this.#optionState?.value ?? '';\n }\n\n #clearOptionState(): void {\n const trigger = this.#stateTrigger;\n if (!trigger) return;\n\n applyElementProps(trigger, {\n disabled: this.#triggerWasDisabled || undefined,\n 'aria-disabled': this.#triggerWasDisabled ? 'true' : undefined,\n 'data-availability': undefined,\n hidden: this.#triggerWasHidden || undefined,\n });\n const value = trigger.querySelector<HTMLElement>('[data-part~=\"value\"], [data-part~=\"hint\"]');\n\n if (value?.textContent) value.textContent = '';\n\n this.#stateTrigger = null;\n this.#triggerWasDisabled = false;\n this.#triggerWasHidden = false;\n }\n}\n\nfunction isSameOptionState(a: MenuOptionState | undefined, b: MenuOptionState): boolean {\n return (\n a?.value === b.value && a.disabled === b.disabled && a.hidden === b.hidden && a.availability === b.availability\n );\n}\n\nfunction isTriggerExplicitlyDisabled(trigger: HTMLElement): boolean {\n return (\n trigger.hasAttribute('disabled') ||\n ('disabled' in trigger && (trigger as HTMLElement & { disabled?: boolean }).disabled === true)\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../../src/ui/menu/context.ts"],"sourcesContent":["import type { MenuCore, MenuOptionState, MenuState } from '@videojs/core';\nimport type { MenuApi, MenuPopupApi } from '@videojs/core/dom';\nimport { createContext } from '@videojs/element/context';\n\nexport interface MenuContextValue {\n core: MenuCore;\n menu: MenuApi;\n popup: MenuPopupApi;\n state: MenuState;\n /** Publish option state to this menu and its parent trigger. */\n setOptionState: (source: symbol, state: MenuOptionState | null) => void;\n}\n\nexport interface MenuGroupContextValue {\n registerLabel: (id: string) => () => void;\n}\n\nconst MENU_CONTEXT_KEY = Symbol('@videojs/menu');\nconst MENU_GROUP_CONTEXT_KEY = Symbol('@videojs/menu-group');\n\nexport const menuContext = createContext<MenuContextValue>(MENU_CONTEXT_KEY);\nexport const menuGroupContext = createContext<MenuGroupContextValue>(MENU_GROUP_CONTEXT_KEY);\n\nexport {\n type RadioGroupContextValue as MenuRadioGroupContextValue,\n radioGroupContext as menuRadioGroupContext,\n} from '../radio-group/context';\n"],"mappings":";;;AAiBA,MAAM,mBAAmB,OAAO,eAAe;AAC/C,MAAM,yBAAyB,OAAO,qBAAqB;AAE3D,MAAa,cAAc,cAAgC,gBAAgB;AAC3E,MAAa,mBAAmB,cAAqC,sBAAsB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":["#menu","#optionStates","#optionState","#syncOptionState","#currentTrigger","#core","#provider","#position","#controlsState","#containerCtx","#popupGroupCtx","#popup","#disconnect","#handleFocusOut","#snapshot","#releaseControlsVisibilityLock","#cleanupTrigger","#releaseControlsLock","#syncTrigger","#setOptionState","#triggerWasDisabled","#triggerWasHidden","#triggerAbort"],"sources":["../../../../src/ui/menu/element.ts"],"sourcesContent":["import {\n MenuCore,\n type MenuInput,\n type MenuOptionState,\n MenuPopupDataAttrs,\n POPUP_HOST_ATTR,\n resolveMenuOptionState,\n} from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createMenu,\n createMenuPopup,\n createTransition,\n getRootPositionOptions,\n type MenuApi,\n type MenuChangeDetails,\n type MenuOpenChangeReason,\n type MenuPopupApi,\n MenuPositioningCSSVars,\n type PositioningBoundary,\n selectControls,\n type UIFocusEvent,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer, ContextProvider } from '@videojs/element/context';\nimport { SnapshotController } from '@videojs/store/html';\nimport { tryHidePopover, tryShowPopover } from '@videojs/utils/dom';\n\nimport { containerContext, playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { popupGroupContext } from '../../player/popup-group-context';\nimport { PositionController } from '../position-controller';\nimport { UIElement } from '../ui-element';\nimport { menuContext } from './context';\n\n/**\n * Root menu state and positioned popup. Content pages are direct children.\n *\n * @fires open-change - Fired before the menu's open state changes. Cancel the event to prevent the change.\n */\nexport class MenuElement extends UIElement {\n static readonly tagName: string = 'media-menu';\n\n static override properties = {\n open: { type: Boolean },\n defaultOpen: { type: Boolean, attribute: 'default-open' },\n side: { type: String },\n align: { type: String },\n closeOnEscape: { type: Boolean, attribute: 'close-on-escape' },\n closeOnOutsideClick: { type: Boolean, attribute: 'close-on-outside-click' },\n boundary: { type: String },\n } satisfies PropertyDeclarationMap<\n 'open' | 'defaultOpen' | 'side' | 'align' | 'closeOnEscape' | 'closeOnOutsideClick' | 'boundary'\n >;\n\n open = MenuCore.defaultProps.open;\n defaultOpen = MenuCore.defaultProps.defaultOpen;\n side = MenuCore.defaultProps.side;\n align = MenuCore.defaultProps.align;\n closeOnEscape = MenuCore.defaultProps.closeOnEscape;\n closeOnOutsideClick = MenuCore.defaultProps.closeOnOutsideClick;\n boundary: PositioningBoundary = 'container';\n\n readonly #core = new MenuCore();\n readonly #provider = new ContextProvider(this, { context: menuContext });\n readonly #position = new PositionController(this);\n readonly #controlsState = new PlayerController(this, playerContext, selectControls);\n readonly #containerCtx = new ContextConsumer(this, { context: containerContext, subscribe: true });\n readonly #popupGroupCtx = new ContextConsumer(this, { context: popupGroupContext });\n #menu: MenuApi | null = null;\n #popup: MenuPopupApi | null = null;\n #snapshot: SnapshotController<MenuInput> | null = null;\n #disconnect: AbortController | null = null;\n #triggerAbort: AbortController | null = null;\n #currentTrigger: HTMLElement | null = null;\n #triggerWasDisabled = false;\n #triggerWasHidden = false;\n #releaseControlsLock: (() => void) | null = null;\n readonly #optionStates = new Map<symbol, MenuOptionState>();\n #optionState: MenuOptionState | null = null;\n\n get menu(): MenuApi | null {\n return this.#menu;\n }\n\n get popup(): MenuPopupApi | null {\n return this.#popup;\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.setAttribute(POPUP_HOST_ATTR, '');\n this.#disconnect = new AbortController();\n this.#popup = createMenuPopup();\n this.#popup.setElement(this);\n this.#menu = createMenu({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean, details: MenuChangeDetails) => {\n const accepted = this.dispatchEvent(\n new CustomEvent('open-change', {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: { open: nextOpen, ...details },\n })\n );\n\n if (accepted) this.open = nextOpen;\n },\n closeOnEscape: () => this.closeOnEscape,\n closeOnOutsideClick: () => this.closeOnOutsideClick,\n group: () => this.#popupGroupCtx.value,\n });\n this.#menu.setPopupElement(this);\n\n applyElementProps(this, { onFocusOut: this.#handleFocusOut }, { signal: this.#disconnect.signal });\n\n if (this.#snapshot) this.#snapshot.track(this.#menu.input);\n else this.#snapshot = new SnapshotController(this, this.#menu.input);\n }\n\n override disconnectedCallback(): void {\n this.#releaseControlsVisibilityLock();\n super.disconnectedCallback();\n this.#position.cleanup();\n this.#cleanupTrigger();\n this.#popup?.destroy();\n this.#popup = null;\n this.#menu?.destroy();\n this.#menu = null;\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n close(reason: MenuOpenChangeReason = 'imperative-action'): void {\n this.#menu?.close(reason);\n }\n\n openMenu(reason: MenuOpenChangeReason = 'imperative-action'): void {\n this.#menu?.open(reason);\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n\n if (!this.hasUpdated && this.defaultOpen && !this.open) this.open = true;\n\n this.#core.setProps({\n open: this.open,\n defaultOpen: this.defaultOpen,\n side: this.side,\n align: this.align,\n closeOnEscape: this.closeOnEscape,\n closeOnOutsideClick: this.closeOnOutsideClick,\n });\n\n if (this.#menu && changed.has('open')) this.#menu.syncOpen(this.open);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n if (!this.#menu || !this.#popup) return;\n\n const input = this.#menu.input.current;\n\n this.#core.setInput({ ...input, isSubmenu: false });\n const state = this.#core.getState();\n\n if (state.open) this.#releaseControlsLock ??= this.#controlsState.value?.requestControlsLock() ?? null;\n else this.#releaseControlsVisibilityLock();\n\n const triggerElement = this.#position.findTrigger();\n\n this.#syncTrigger(triggerElement);\n applyElementProps(this, this.#core.getPopupAttrs());\n applyStateDataAttrs(this, state, MenuPopupDataAttrs);\n\n if (state.open) tryShowPopover(this);\n else tryHidePopover(this);\n\n if (this.#currentTrigger) {\n applyElementProps(this.#currentTrigger, this.#core.getTriggerAttrs(state, this.#menu.contentElement?.id));\n this.#syncOptionState(this.#currentTrigger);\n }\n\n if (!state.open) {\n this.#position.cleanup();\n } else {\n this.#popup.sync();\n const positionOptions = getRootPositionOptions(state.side, state.align);\n\n if (positionOptions && this.#currentTrigger) {\n this.#position.sync({\n anchorName: this.id,\n position: positionOptions,\n trigger: this.#currentTrigger,\n boundary: this.boundary,\n container: this.#containerCtx.value?.container ?? null,\n cssVars: MenuPositioningCSSVars,\n trackResize: false,\n onSideChange: (side) => this.setAttribute(MenuPopupDataAttrs.side, side),\n });\n }\n }\n\n this.#provider.setValue({\n core: this.#core,\n menu: this.#menu,\n popup: this.#popup,\n state,\n setOptionState: this.#setOptionState,\n });\n }\n\n #releaseControlsVisibilityLock(): void {\n this.#releaseControlsLock?.();\n this.#releaseControlsLock = null;\n }\n\n #handleFocusOut = (event: UIFocusEvent): void => {\n this.#menu?.contentProps.onFocusOut(event);\n };\n\n #syncTrigger(triggerElement: HTMLElement | null): void {\n if (triggerElement === this.#currentTrigger) return;\n\n this.#position.cleanup();\n this.#cleanupTrigger();\n this.#currentTrigger = triggerElement;\n this.#triggerWasDisabled = triggerElement ? isTriggerExplicitlyDisabled(triggerElement) : false;\n this.#triggerWasHidden = triggerElement?.hidden === true;\n this.#menu?.setTriggerElement(triggerElement);\n\n if (triggerElement && this.#menu) {\n this.#triggerAbort = new AbortController();\n applyElementProps(triggerElement, this.#menu.triggerProps, { signal: this.#triggerAbort.signal });\n this.#syncOptionState(triggerElement);\n }\n }\n\n #setOptionState = (source: symbol, optionState: MenuOptionState | null): void => {\n const previous = this.#optionStates.get(source);\n if (optionState && isSameOptionState(previous, optionState)) return;\n\n if (!optionState && !previous) return;\n\n if (optionState) this.#optionStates.set(source, optionState);\n else this.#optionStates.delete(source);\n\n this.#optionState = resolveMenuOptionState(this.#optionStates.values());\n\n if ((this.#optionState?.disabled || this.#optionState?.hidden) && this.open) this.close('imperative-action');\n\n this.#syncOptionState(this.#currentTrigger);\n };\n\n #syncOptionState(trigger: HTMLElement | null): void {\n if (!trigger) return;\n\n applyElementProps(trigger, {\n disabled: this.#triggerWasDisabled || this.#optionState?.disabled || undefined,\n 'aria-disabled': this.#triggerWasDisabled || this.#optionState?.disabled ? 'true' : undefined,\n 'data-availability': this.#optionState?.availability,\n hidden: this.#triggerWasHidden || this.#optionState?.hidden || undefined,\n });\n const value = trigger.querySelector<HTMLElement>('[data-part~=\"value\"], [data-part~=\"hint\"]');\n\n if (value && value.textContent !== this.#optionState?.value) value.textContent = this.#optionState?.value ?? '';\n }\n\n #cleanupTrigger(): void {\n if (this.#currentTrigger) {\n applyElementProps(this.#currentTrigger, {\n 'aria-expanded': undefined,\n 'aria-haspopup': undefined,\n 'aria-controls': undefined,\n disabled: this.#triggerWasDisabled || undefined,\n 'aria-disabled': this.#triggerWasDisabled ? 'true' : undefined,\n 'data-availability': undefined,\n hidden: this.#triggerWasHidden || undefined,\n });\n const value = this.#currentTrigger.querySelector<HTMLElement>('[data-part~=\"value\"], [data-part~=\"hint\"]');\n\n if (value?.textContent) value.textContent = '';\n }\n\n this.#triggerAbort?.abort();\n this.#triggerAbort = null;\n this.#currentTrigger = null;\n this.#triggerWasDisabled = false;\n this.#triggerWasHidden = false;\n }\n}\n\nfunction isSameOptionState(a: MenuOptionState | undefined, b: MenuOptionState): boolean {\n return (\n a?.value === b.value && a.disabled === b.disabled && a.hidden === b.hidden && a.availability === b.availability\n );\n}\n\nfunction isTriggerExplicitlyDisabled(trigger: HTMLElement): boolean {\n return (\n trigger.hasAttribute('disabled') ||\n ('disabled' in trigger && (trigger as HTMLElement & { disabled?: boolean }).disabled === true)\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"group-controller.js","names":["#host","#provider","#contextValue","#registerLabel","#appliedLabelId","#labelId"],"sources":["../../../../src/ui/menu/group-controller.ts"],"sourcesContent":["import { applyElementProps } from '@videojs/core/dom';\nimport { ContextProvider } from '@videojs/element/context';\n\nimport type { UIElement } from '../ui-element';\nimport { menuGroupContext } from './context';\n\ninterface MenuGroupHost extends UIElement {\n requestUpdate(): void;\n}\n\nexport class MenuGroupController {\n readonly #host: MenuGroupHost;\n readonly #provider: ContextProvider<typeof menuGroupContext, MenuGroupHost>;\n readonly #contextValue = {\n registerLabel: (id: string) => this.#registerLabel(id),\n };\n\n #labelId: string | undefined;\n #appliedLabelId: string | undefined;\n\n constructor(host: MenuGroupHost) {\n this.#host = host;\n this.#provider = new ContextProvider(host, {\n context: menuGroupContext,\n initialValue: this.#contextValue,\n });\n }\n\n applyProps(): void {\n const currentLabelledBy = this.#host.getAttribute('aria-labelledby') ?? undefined;\n const hasExplicitLabelledBy = currentLabelledBy !== undefined && currentLabelledBy !== this.#appliedLabelId;\n const hasExplicitLabel = this.#host.hasAttribute('aria-label') || hasExplicitLabelledBy;\n\n if (hasExplicitLabel) {\n if (this.#appliedLabelId && currentLabelledBy === this.#appliedLabelId) {\n this.#host.removeAttribute('aria-labelledby');\n }\n\n this.#appliedLabelId = undefined;\n applyElementProps(this.#host, { role: 'group' });\n return;\n }\n\n this.#appliedLabelId = this.#labelId;\n applyElementProps(this.#host, {\n role: 'group',\n 'aria-labelledby': this.#labelId,\n });\n }\n\n #registerLabel(id: string): () => void {\n this.#labelId = id;\n this.#provider.setValue(this.#contextValue);\n this.#host.requestUpdate();\n\n return () => {\n if (this.#labelId !== id) return;\n\n this.#labelId = undefined;\n this.#host.requestUpdate();\n };\n }\n}\n"],"mappings":";;;;AAUA,IAAa,sBAAb,MAAiC;CAC/B;CACA;CACA,gBAAyB,EACvB,gBAAgB,OAAe,KAAKG,eAAe,EAAE,EACvD;CAEA;CACA;CAEA,YAAY,MAAqB;EAC/B,KAAKH,QAAQ;EACb,KAAKC,YAAY,IAAI,gBAAgB,MAAM;GACzC,SAAS;GACT,cAAc,KAAKC;EACrB,CAAC;CACH;CAEA,aAAmB;EACjB,MAAM,oBAAoB,KAAKF,MAAM,aAAa,iBAAiB,KAAK,KAAA;EACxE,MAAM,wBAAwB,sBAAsB,KAAA,KAAa,sBAAsB,KAAKI;EAG5F,IAFyB,KAAKJ,MAAM,aAAa,YAAY,KAAK,uBAE5C;GACpB,IAAI,KAAKI,mBAAmB,sBAAsB,KAAKA,iBACrD,KAAKJ,MAAM,gBAAgB,iBAAiB;GAG9C,KAAKI,kBAAkB,KAAA;GACvB,kBAAkB,KAAKJ,OAAO,EAAE,MAAM,QAAQ,CAAC;GAC/C;EACF;EAEA,KAAKI,kBAAkB,KAAKC;EAC5B,kBAAkB,KAAKL,OAAO;GAC5B,MAAM;GACN,mBAAmB,KAAKK;EAC1B,CAAC;CACH;CAEA,eAAe,IAAwB;EACrC,KAAKA,WAAW;EAChB,KAAKJ,UAAU,SAAS,KAAKC,aAAa;EAC1C,KAAKF,MAAM,cAAc;EAEzB,aAAa;GACX,IAAI,KAAKK,aAAa,IAAI;GAE1B,KAAKA,WAAW,KAAA;GAChB,KAAKL,MAAM,cAAc;EAC3B;CACF;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"group-label.js","names":["#groupCtx","#generatedId","#cleanupRegistration","#registeredId","#registerLabel"],"sources":["../../../../src/ui/menu/group-label.ts"],"sourcesContent":["import type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { UIElement } from '../ui-element';\nimport { menuGroupContext } from './context';\n\nlet idCounter = 0;\n\nexport class MenuGroupLabelElement extends UIElement {\n static readonly tagName = 'media-menu-group-label';\n\n readonly #groupCtx = new ContextConsumer(this, { context: menuGroupContext, subscribe: true });\n readonly #generatedId = `vjs-menu-group-label-${idCounter++}`;\n\n #cleanupRegistration: (() => void) | null = null;\n #registeredId: string | null = null;\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#cleanupRegistration?.();\n this.#cleanupRegistration = null;\n this.#registeredId = null;\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n if (!this.id) {\n this.id = this.#generatedId;\n }\n\n this.#registerLabel();\n }\n\n #registerLabel(): void {\n const groupCtx = this.#groupCtx.value;\n\n if (!groupCtx) {\n this.#cleanupRegistration?.();\n this.#cleanupRegistration = null;\n this.#registeredId = null;\n return;\n }\n\n if (this.#registeredId === this.id) return;\n\n this.#cleanupRegistration?.();\n this.#registeredId = this.id;\n this.#cleanupRegistration = groupCtx.registerLabel(this.id);\n }\n}\n"],"mappings":";;;;AAMA,IAAI,YAAY;AAEhB,IAAa,wBAAb,cAA2C,UAAU;;EACzB,KAAA,UAAA;;CAE1B,YAAqB,IAAI,gBAAgB,MAAM;EAAE,SAAS;EAAkB,WAAW;CAAK,CAAC;CAC7F,eAAwB,wBAAwB;CAEhD,uBAA4C;CAC5C,gBAA+B;CAE/B,uBAAsC;EACpC,MAAM,qBAAqB;EAC3B,KAAKE,uBAAuB;EAC5B,KAAKA,uBAAuB;EAC5B,KAAKC,gBAAgB;CACvB;CAEA,OAA0B,UAAgC;EACxD,MAAM,OAAO,QAAQ;EAErB,IAAI,CAAC,KAAK,IACR,KAAK,KAAK,KAAKF;EAGjB,KAAKG,eAAe;CACtB;CAEA,iBAAuB;EACrB,MAAM,WAAW,KAAKJ,UAAU;EAEhC,IAAI,CAAC,UAAU;GACb,KAAKE,uBAAuB;GAC5B,KAAKA,uBAAuB;GAC5B,KAAKC,gBAAgB;GACrB;EACF;EAEA,IAAI,KAAKA,kBAAkB,KAAK,IAAI;EAEpC,KAAKD,uBAAuB;EAC5B,KAAKC,gBAAgB,KAAK;EAC1B,KAAKD,uBAAuB,SAAS,cAAc,KAAK,EAAE;CAC5D;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"group.js","names":["#group"],"sources":["../../../../src/ui/menu/group.ts"],"sourcesContent":["import type { PropertyValues } from '@videojs/element';\n\nimport { UIElement } from '../ui-element';\nimport { MenuGroupController } from './group-controller';\n\nexport class MenuGroupElement extends UIElement {\n static readonly tagName = 'media-menu-group';\n\n readonly #group = new MenuGroupController(this);\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n this.#group.applyProps();\n }\n}\n"],"mappings":";;;AAKA,IAAa,mBAAb,cAAsC,UAAU;;EACpB,KAAA,UAAA;;CAE1B,SAAkB,IAAI,oBAAoB,IAAI;CAE9C,OAA0B,UAAgC;EACxD,MAAM,OAAO,QAAQ;EAErB,KAAKA,OAAO,WAAW;CACzB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"item-indicator.js","names":[],"sources":["../../../../src/ui/menu/item-indicator.ts"],"sourcesContent":["import { applyElementProps } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { UIElement } from '../ui-element';\n\nexport class MenuItemIndicatorElement extends UIElement {\n static readonly tagName = 'media-menu-item-indicator';\n\n static override properties = {\n checked: { type: Boolean },\n forceMount: { type: Boolean, attribute: 'force-mount' },\n } satisfies PropertyDeclarationMap<'checked' | 'forceMount'>;\n\n checked = false;\n forceMount = false;\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n const hidden = !this.checked && !this.forceMount;\n\n applyElementProps(this, {\n 'aria-hidden': 'true',\n hidden: hidden,\n });\n }\n}\n"],"mappings":";;;AAKA,IAAa,2BAAb,cAA8C,UAAU;;;EAQ5C,KAAA,UAAA;EACG,KAAA,aAAA;;;EARa,KAAA,UAAA;;;EAEG,KAAA,aAAA;GAC3B,SAAS,EAAE,MAAM,QAAQ;GACzB,YAAY;IAAE,MAAM;IAAS,WAAW;GAAc;EACxD;;CAKA,OAA0B,UAAgC;EACxD,MAAM,OAAO,QAAQ;EAErB,MAAM,SAAS,CAAC,KAAK,WAAW,CAAC,KAAK;EAEtC,kBAAkB,MAAM;GACtB,eAAe;GACP;EACV,CAAC;CACH;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"item.js","names":["#ctx","#disconnect","#cleanupRegistration","#registeredMenu","#isDisabled","#openSubmenu"],"sources":["../../../../src/ui/menu/item.ts"],"sourcesContent":["import { applyElementProps, completeMenuItemSelection } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { UIElement } from '../ui-element';\nimport { type MenuContextValue, menuContext } from './context';\n\nexport class MenuItemElement extends UIElement {\n static readonly tagName = 'media-menu-item';\n\n static override properties = {\n disabled: { type: Boolean },\n commandfor: { type: String },\n } satisfies PropertyDeclarationMap<'disabled' | 'commandfor'>;\n\n disabled = false;\n /** ID of a nested `<media-menu-content>` page to open when activated. */\n commandfor: string | undefined = undefined;\n readonly #ctx = new ContextConsumer(this, { context: menuContext, subscribe: true });\n\n #disconnect: AbortController | null = null;\n #registeredMenu: MenuContextValue['menu'] | null = null;\n #cleanupRegistration: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.#disconnect = new AbortController();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#cleanupRegistration?.();\n this.#cleanupRegistration = null;\n this.#registeredMenu = null;\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n const ctx = this.#ctx.value;\n if (!ctx || !this.#disconnect) return;\n\n if (this.#registeredMenu !== ctx.menu) {\n this.#cleanupRegistration?.();\n this.#registeredMenu = ctx.menu;\n this.#cleanupRegistration = ctx.menu.registerItem(this);\n\n applyElementProps(\n this,\n {\n onClick: (event: MouseEvent) => {\n const currentCtx = this.#ctx.value;\n if (!currentCtx || this.#isDisabled()) return;\n\n const target = this.commandfor;\n\n if (target) {\n this.#openSubmenu(target);\n } else {\n const select = new CustomEvent('select', { bubbles: true, cancelable: true });\n\n if (!this.dispatchEvent(select)) {\n event.preventDefault();\n return;\n }\n\n completeMenuItemSelection(currentCtx.menu);\n }\n\n event.preventDefault();\n },\n onKeyDown: (event: KeyboardEvent) => {\n const currentCtx = this.#ctx.value;\n if (!currentCtx || this.#isDisabled() || event.key !== 'ArrowRight') return;\n\n const target = this.commandfor;\n if (!target) return;\n\n this.#openSubmenu(target);\n event.preventDefault();\n },\n onPointerenter: () => {\n const currentCtx = this.#ctx.value;\n\n if (!this.#isDisabled()) currentCtx?.menu.highlight(this, { focus: false, pointer: true });\n },\n },\n { signal: this.#disconnect.signal }\n );\n }\n\n const hasSubmenu = Boolean(this.commandfor);\n\n applyElementProps(this, {\n role: 'menuitem',\n 'aria-disabled': this.#isDisabled() ? 'true' : undefined,\n ...(hasSubmenu && {\n 'aria-haspopup': 'menu',\n 'aria-expanded': 'false',\n 'data-has-submenu': '',\n }),\n });\n }\n\n #openSubmenu(id: string): void {\n const root = this.getRootNode() as Document | ShadowRoot;\n const submenu = root.querySelector<HTMLElement>(`#${CSS.escape(id)}`) as HTMLElement & {\n openMenu?: (reason?: 'click') => void;\n };\n\n submenu?.openMenu?.('click');\n }\n\n #isDisabled(): boolean {\n return this.disabled || this.getAttribute('aria-disabled') === 'true';\n }\n}\n"],"mappings":";;;;;AAOA,IAAa,kBAAb,cAAqC,UAAU;;;EAQlC,KAAA,WAAA;EAEsB,KAAA,aAAA,KAAA;EACjB,KAAA,OAAA,IAAI,gBAAgB,MAAM;GAAE,SAAS;GAAa,WAAW;EAAK,CAAC;EAE7C,KAAA,cAAA;EACa,KAAA,kBAAA;EACP,KAAA,uBAAA;;;EAdlB,KAAA,UAAA;;;EAEG,KAAA,aAAA;GAC3B,UAAU,EAAE,MAAM,QAAQ;GAC1B,YAAY,EAAE,MAAM,OAAO;EAC7B;;CAKA;CAEA;CACA;CACA;CAEA,oBAAmC;EACjC,MAAM,kBAAkB;EACxB,KAAKC,cAAc,IAAI,gBAAgB;CACzC;CAEA,uBAAsC;EACpC,MAAM,qBAAqB;EAC3B,KAAKC,uBAAuB;EAC5B,KAAKA,uBAAuB;EAC5B,KAAKC,kBAAkB;EACvB,KAAKF,aAAa,MAAM;EACxB,KAAKA,cAAc;CACrB;CAEA,OAA0B,UAAgC;EACxD,MAAM,OAAO,QAAQ;EAErB,MAAM,MAAM,KAAKD,KAAK;EACtB,IAAI,CAAC,OAAO,CAAC,KAAKC,aAAa;EAE/B,IAAI,KAAKE,oBAAoB,IAAI,MAAM;GACrC,KAAKD,uBAAuB;GAC5B,KAAKC,kBAAkB,IAAI;GAC3B,KAAKD,uBAAuB,IAAI,KAAK,aAAa,IAAI;GAEtD,kBACE,MACA;IACE,UAAU,UAAsB;KAC9B,MAAM,aAAa,KAAKF,KAAK;KAC7B,IAAI,CAAC,cAAc,KAAKI,YAAY,GAAG;KAEvC,MAAM,SAAS,KAAK;KAEpB,IAAI,QACF,KAAKC,aAAa,MAAM;UACnB;MACL,MAAM,SAAS,IAAI,YAAY,UAAU;OAAE,SAAS;OAAM,YAAY;MAAK,CAAC;MAE5E,IAAI,CAAC,KAAK,cAAc,MAAM,GAAG;OAC/B,MAAM,eAAe;OACrB;MACF;MAEA,0BAA0B,WAAW,IAAI;KAC3C;KAEA,MAAM,eAAe;IACvB;IACA,YAAY,UAAyB;KAEnC,IAAI,CADe,KAAKL,KAAK,SACV,KAAKI,YAAY,KAAK,MAAM,QAAQ,cAAc;KAErE,MAAM,SAAS,KAAK;KACpB,IAAI,CAAC,QAAQ;KAEb,KAAKC,aAAa,MAAM;KACxB,MAAM,eAAe;IACvB;IACA,sBAAsB;KACpB,MAAM,aAAa,KAAKL,KAAK;KAE7B,IAAI,CAAC,KAAKI,YAAY,GAAG,YAAY,KAAK,UAAU,MAAM;MAAE,OAAO;MAAO,SAAS;KAAK,CAAC;IAC3F;GACF,GACA,EAAE,QAAQ,KAAKH,YAAY,OAAO,CACpC;EACF;EAEA,MAAM,aAAa,QAAQ,KAAK,UAAU;EAE1C,kBAAkB,MAAM;GACtB,MAAM;GACN,iBAAiB,KAAKG,YAAY,IAAI,SAAS,KAAA;GAC/C,GAAI,cAAc;IAChB,iBAAiB;IACjB,iBAAiB;IACjB,oBAAoB;GACtB;EACF,CAAC;CACH;CAEA,aAAa,IAAkB;EAM7B,KALkB,YACC,CAAC,CAAC,cAA2B,IAAI,IAAI,OAAO,EAAE,GAI3D,CAAC,EAAE,WAAW,OAAO;CAC7B;CAEA,cAAuB;EACrB,OAAO,KAAK,YAAY,KAAK,aAAa,eAAe,MAAM;CACjE;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"radio-group.js","names":["#group","#menu","#optionSource","#clearMenuOptionState","#ariaLabel","#optionMenu","#setOptionState"],"sources":["../../../../src/ui/menu/radio-group.ts"],"sourcesContent":["import type { MenuOptionState } from '@videojs/core';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport { findElementChild } from '@videojs/utils/dom';\n\nimport { RadioGroupElement } from '../radio-group/element';\nimport { type MenuContextValue, menuContext } from './context';\nimport { MenuGroupController } from './group-controller';\nimport { MenuRadioItemElement } from './radio-item';\n\nexport class MenuRadioGroupElement extends RadioGroupElement {\n static readonly tagName: string = 'media-menu-radio-group';\n\n readonly #group = new MenuGroupController(this);\n readonly #menu = new ContextConsumer(this, { context: menuContext, subscribe: true });\n readonly #optionSource = Symbol('menu-option');\n #ariaLabel: string | null = null;\n #optionMenu: MenuContextValue['menu'] | null = null;\n #setOptionState: MenuContextValue['setOptionState'] | null = null;\n\n override disconnectedCallback(): void {\n this.#clearMenuOptionState();\n super.disconnectedCallback();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n this.#group.applyProps();\n }\n\n protected setItemLabel(item: MenuRadioItemElement, label: string): void {\n const labelPart = item.querySelector<HTMLElement>('[data-part~=\"label\"]');\n\n if (labelPart) {\n labelPart.textContent = label;\n } else {\n item.textContent = label;\n }\n }\n\n /** Applies a generated fallback without replacing an author-provided accessible name. */\n protected applyDefaultAriaLabel(label: string): void {\n if (this.hasAttribute('aria-labelledby')) return;\n\n const current = this.getAttribute('aria-label');\n if (current !== null && current !== this.#ariaLabel) return;\n\n this.#ariaLabel = label;\n this.setAttribute('aria-label', label);\n }\n\n protected publishMenuOptionState(\n disabled: boolean,\n hidden: boolean,\n availability: MenuOptionState['availability']\n ): void {\n const context = this.#menu.value ?? null;\n\n if (context?.menu !== this.#optionMenu) {\n this.#clearMenuOptionState();\n this.#optionMenu = context?.menu ?? null;\n this.#setOptionState = context?.setOptionState ?? null;\n }\n\n if (!this.#setOptionState) return;\n\n const selectedItem = findElementChild(\n this,\n (item): item is MenuRadioItemElement => item instanceof MenuRadioItemElement && item.value === this.value\n );\n const label = selectedItem?.querySelector<HTMLElement>('[data-part~=\"label\"]')?.textContent;\n const value = label ?? selectedItem?.textContent?.trim() ?? '';\n\n this.#setOptionState(this.#optionSource, { value, disabled, hidden, availability });\n }\n\n #clearMenuOptionState(): void {\n this.#setOptionState?.(this.#optionSource, null);\n this.#optionMenu = null;\n this.#setOptionState = null;\n }\n}\n"],"mappings":";;;;;;;AAUA,IAAa,wBAAb,cAA2C,kBAAkB;;EACzB,KAAA,UAAA;;CAElC,SAAkB,IAAI,oBAAoB,IAAI;CAC9C,QAAiB,IAAI,gBAAgB,MAAM;EAAE,SAAS;EAAa,WAAW;CAAK,CAAC;CACpF,gBAAyB,OAAO,aAAa;CAC7C,aAA4B;CAC5B,cAA+C;CAC/C,kBAA6D;CAE7D,uBAAsC;EACpC,KAAKG,sBAAsB;EAC3B,MAAM,qBAAqB;CAC7B;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAEpB,KAAKH,OAAO,WAAW;CACzB;CAEA,aAAuB,MAA4B,OAAqB;EACtE,MAAM,YAAY,KAAK,cAA2B,wBAAsB;EAExE,IAAI,WACF,UAAU,cAAc;OAExB,KAAK,cAAc;CAEvB;;CAGA,sBAAgC,OAAqB;EACnD,IAAI,KAAK,aAAa,iBAAiB,GAAG;EAE1C,MAAM,UAAU,KAAK,aAAa,YAAY;EAC9C,IAAI,YAAY,QAAQ,YAAY,KAAKI,YAAY;EAErD,KAAKA,aAAa;EAClB,KAAK,aAAa,cAAc,KAAK;CACvC;CAEA,uBACE,UACA,QACA,cACM;EACN,MAAM,UAAU,KAAKH,MAAM,SAAS;EAEpC,IAAI,SAAS,SAAS,KAAKI,aAAa;GACtC,KAAKF,sBAAsB;GAC3B,KAAKE,cAAc,SAAS,QAAQ;GACpC,KAAKC,kBAAkB,SAAS,kBAAkB;EACpD;EAEA,IAAI,CAAC,KAAKA,iBAAiB;EAE3B,MAAM,eAAe,iBACnB,OACC,SAAuC,gBAAgB,wBAAwB,KAAK,UAAU,KAAK,KACtG;EAEA,MAAM,QADQ,cAAc,cAA2B,wBAAsB,CAAC,EAAE,eACzD,cAAc,aAAa,KAAK,KAAK;EAE5D,KAAKA,gBAAgB,KAAKJ,eAAe;GAAE;GAAO;GAAU;GAAQ;EAAa,CAAC;CACpF;CAEA,wBAA8B;EAC5B,KAAKI,kBAAkB,KAAKJ,eAAe,IAAI;EAC/C,KAAKG,cAAc;EACnB,KAAKC,kBAAkB;CACzB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"radio-item.js","names":["menuRadioGroupContext","#menuCtx","#groupCtx","#disconnect","#registered","#cleanupRegistration"],"sources":["../../../../src/ui/menu/radio-item.ts"],"sourcesContent":["import { applyElementProps, completeMenuItemSelection } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { UIElement } from '../ui-element';\nimport { menuContext, menuRadioGroupContext } from './context';\n\nexport class MenuRadioItemElement extends UIElement {\n static readonly tagName = 'media-menu-radio-item';\n\n static override properties = {\n value: { type: String },\n disabled: { type: Boolean },\n } satisfies PropertyDeclarationMap<'value' | 'disabled'>;\n\n value = '';\n disabled = false;\n\n readonly #menuCtx = new ContextConsumer(this, { context: menuContext, subscribe: true });\n readonly #groupCtx = new ContextConsumer(this, { context: menuRadioGroupContext, subscribe: true });\n\n #disconnect: AbortController | null = null;\n #registered = false;\n #cleanupRegistration: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.#disconnect = new AbortController();\n this.#registered = false;\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#cleanupRegistration?.();\n this.#cleanupRegistration = null;\n this.#disconnect?.abort();\n this.#disconnect = null;\n this.#registered = false;\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n const menuCtx = this.#menuCtx.value;\n const groupCtx = this.#groupCtx.value;\n if (!menuCtx || !groupCtx || !this.#disconnect) return;\n\n if (!this.#registered) {\n this.#registered = true;\n\n this.#cleanupRegistration = menuCtx.menu.registerItem(this);\n\n applyElementProps(\n this,\n {\n onClick: () => {\n const currentMenuCtx = this.#menuCtx.value;\n const currentGroupCtx = this.#groupCtx.value;\n if (!currentMenuCtx || !currentGroupCtx || this.disabled) return;\n\n currentGroupCtx.onValueChange(this.value);\n completeMenuItemSelection(currentMenuCtx.menu);\n },\n onPointerenter: () => {\n const currentMenuCtx = this.#menuCtx.value;\n\n if (!this.disabled) currentMenuCtx?.menu.highlight(this, { focus: false, pointer: true });\n },\n },\n { signal: this.#disconnect.signal }\n );\n }\n\n const checked = groupCtx.value === this.value;\n\n applyElementProps(this, {\n role: 'menuitemradio',\n 'aria-checked': String(checked),\n 'aria-disabled': this.disabled ? 'true' : undefined,\n });\n }\n}\n"],"mappings":";;;;;;AAOA,IAAa,uBAAb,cAA0C,UAAU;;;EAQ1C,KAAA,QAAA;EACG,KAAA,WAAA;EAES,KAAA,WAAA,IAAI,gBAAgB,MAAM;GAAE,SAAS;GAAa,WAAW;EAAK,CAAC;EAClE,KAAA,YAAA,IAAI,gBAAgB,MAAM;GAAE,SAASA;GAAuB,WAAW;EAAK,CAAC;EAE5D,KAAA,cAAA;EACxB,KAAA,cAAA;EAC8B,KAAA,uBAAA;;;EAflB,KAAA,UAAA;;;EAEG,KAAA,aAAA;GAC3B,OAAO,EAAE,MAAM,OAAO;GACtB,UAAU,EAAE,MAAM,QAAQ;EAC5B;;CAKA;CACA;CAEA;CACA;CACA;CAEA,oBAAmC;EACjC,MAAM,kBAAkB;EACxB,KAAKG,cAAc,IAAI,gBAAgB;EACvC,KAAKC,cAAc;CACrB;CAEA,uBAAsC;EACpC,MAAM,qBAAqB;EAC3B,KAAKC,uBAAuB;EAC5B,KAAKA,uBAAuB;EAC5B,KAAKF,aAAa,MAAM;EACxB,KAAKA,cAAc;EACnB,KAAKC,cAAc;CACrB;CAEA,OAA0B,UAAgC;EACxD,MAAM,OAAO,QAAQ;EAErB,MAAM,UAAU,KAAKH,SAAS;EAC9B,MAAM,WAAW,KAAKC,UAAU;EAChC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,KAAKC,aAAa;EAEhD,IAAI,CAAC,KAAKC,aAAa;GACrB,KAAKA,cAAc;GAEnB,KAAKC,uBAAuB,QAAQ,KAAK,aAAa,IAAI;GAE1D,kBACE,MACA;IACE,eAAe;KACb,MAAM,iBAAiB,KAAKJ,SAAS;KACrC,MAAM,kBAAkB,KAAKC,UAAU;KACvC,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,KAAK,UAAU;KAE1D,gBAAgB,cAAc,KAAK,KAAK;KACxC,0BAA0B,eAAe,IAAI;IAC/C;IACA,sBAAsB;KACpB,MAAM,iBAAiB,KAAKD,SAAS;KAErC,IAAI,CAAC,KAAK,UAAU,gBAAgB,KAAK,UAAU,MAAM;MAAE,OAAO;MAAO,SAAS;KAAK,CAAC;IAC1F;GACF,GACA,EAAE,QAAQ,KAAKE,YAAY,OAAO,CACpC;EACF;EAEA,MAAM,UAAU,SAAS,UAAU,KAAK;EAExC,kBAAkB,MAAM;GACtB,MAAM;GACN,gBAAgB,OAAO,OAAO;GAC9B,iBAAiB,KAAK,WAAW,SAAS,KAAA;EAC5C,CAAC;CACH;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"separator.js","names":[],"sources":["../../../../src/ui/menu/separator.ts"],"sourcesContent":["import { applyElementProps } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\n\nimport { UIElement } from '../ui-element';\n\nexport class MenuSeparatorElement extends UIElement {\n static readonly tagName = 'media-menu-separator';\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n applyElementProps(this, { role: 'separator' });\n }\n}\n"],"mappings":";;;AAKA,IAAa,uBAAb,cAA0C,UAAU;;EACxB,KAAA,UAAA;;CAE1B,OAA0B,UAAgC;EACxD,MAAM,OAAO,QAAQ;EAErB,kBAAkB,MAAM,EAAE,MAAM,YAAY,CAAC;CAC/C;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":[],"sources":["../../../../src/ui/mute-button/element.ts"],"sourcesContent":["import { MuteButtonCore, MuteButtonDataAttrs } from '@videojs/core';\nimport { selectVolume } from '@videojs/core/dom';\nimport type { MediaVolumeState } from '@videojs/media';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class MuteButtonElement extends MediaButtonElement<MuteButtonCore> {\n static readonly tagName = 'media-mute-button';\n\n protected readonly core = new MuteButtonCore();\n protected readonly stateAttrMap = MuteButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectVolume);\n protected override readonly hotkeyAction = 'toggleMuted';\n\n protected activate(state: MediaVolumeState): void {\n this.core.toggle(state);\n }\n}\n"],"mappings":";;;;;;AAQA,IAAa,oBAAb,cAAuC,mBAAmC;;;EAG9C,KAAA,OAAA,IAAI,eAAe;EACX,KAAA,eAAA;EACF,KAAA,aAAA,IAAI,iBAAiB,MAAM,eAAe,YAAY;EAC3C,KAAA,eAAA;;;EALjB,KAAA,UAAA;;CAO1B,SAAmB,OAA+B;EAChD,KAAK,KAAK,OAAO,KAAK;CACxB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":[],"sources":["../../../../src/ui/pip-button/element.ts"],"sourcesContent":["import { PiPButtonCore, PiPButtonDataAttrs } from '@videojs/core';\nimport { selectPiP } from '@videojs/core/dom';\nimport type { MediaPictureInPictureState } from '@videojs/media';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class PiPButtonElement extends MediaButtonElement<PiPButtonCore> {\n static readonly tagName = 'media-pip-button';\n\n protected readonly core = new PiPButtonCore();\n protected readonly stateAttrMap = PiPButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectPiP);\n protected override readonly hotkeyAction = 'togglePictureInPicture';\n\n protected activate(state: MediaPictureInPictureState): Promise<void> {\n return this.core.toggle(state);\n }\n}\n"],"mappings":";;;;;;AAQA,IAAa,mBAAb,cAAsC,mBAAkC;;;EAG5C,KAAA,OAAA,IAAI,cAAc;EACV,KAAA,eAAA;EACF,KAAA,aAAA,IAAI,iBAAiB,MAAM,eAAe,SAAS;EACxC,KAAA,eAAA;;;EALjB,KAAA,UAAA;;CAO1B,SAAmB,OAAkD;EACnE,OAAO,KAAK,KAAK,OAAO,KAAK;CAC/B;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":[],"sources":["../../../../src/ui/play-button/element.ts"],"sourcesContent":["import { PlayButtonCore, PlayButtonDataAttrs } from '@videojs/core';\nimport { selectPlayback } from '@videojs/core/dom';\nimport type { MediaPlaybackState } from '@videojs/media';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class PlayButtonElement extends MediaButtonElement<PlayButtonCore> {\n static readonly tagName = 'media-play-button';\n\n protected readonly core = new PlayButtonCore();\n protected readonly stateAttrMap = PlayButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectPlayback);\n protected override readonly hotkeyAction = 'togglePaused';\n\n protected activate(state: MediaPlaybackState): void {\n this.core.toggle(state);\n }\n}\n"],"mappings":";;;;;;AAQA,IAAa,oBAAb,cAAuC,mBAAmC;;;EAG9C,KAAA,OAAA,IAAI,eAAe;EACX,KAAA,eAAA;EACF,KAAA,aAAA,IAAI,iBAAiB,MAAM,eAAe,cAAc;EAC7C,KAAA,eAAA;;;EALjB,KAAA,UAAA;;CAO1B,SAAmB,OAAiC;EAClD,KAAK,KAAK,OAAO,KAAK;CACxB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":[],"sources":["../../../../src/ui/playback-rate-button/element.ts"],"sourcesContent":["import { PlaybackRateButtonCore, PlaybackRateButtonDataAttrs } from '@videojs/core';\nimport { applyElementProps, selectPlaybackRate, type UIEvent } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport type { MediaPlaybackRateState } from '@videojs/media';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class PlaybackRateButtonElement extends MediaButtonElement<PlaybackRateButtonCore> {\n static readonly tagName = 'media-playback-rate-button';\n\n static override properties = {\n label: { type: String },\n disabled: { type: Boolean },\n commandfor: { type: String },\n } satisfies PropertyDeclarationMap<'label' | 'disabled' | 'commandfor'>;\n\n commandfor: string | undefined = undefined;\n\n protected readonly core = new PlaybackRateButtonCore();\n protected readonly stateAttrMap = PlaybackRateButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectPlaybackRate);\n protected override readonly hotkeyAction = 'speedUp';\n\n protected activate(state: MediaPlaybackRateState, event?: UIEvent): void {\n if (this.commandfor) {\n if (event instanceof KeyboardEvent) {\n // Custom elements do not synthesize a click from keyboard activation.\n // Dispatch one so the linked menu follows its normal open lifecycle.\n this.click();\n }\n\n return;\n }\n\n this.core.cycle(state);\n }\n\n protected override getIsButtonDisabled(): boolean {\n const media = this.mediaState.value;\n\n if (super.getIsButtonDisabled()) return true;\n\n if (this.commandfor && media && media.playbackRates.length === 0) return true;\n\n return false;\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n\n if (changed.has('commandfor')) {\n if (this.commandfor) {\n this.setAttribute('commandfor', this.commandfor);\n } else {\n this.removeAttribute('commandfor');\n }\n }\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.mediaState.value;\n if (!media || !this.commandfor) return;\n\n applyElementProps(this, {\n 'aria-disabled': this.getIsButtonDisabled() ? 'true' : undefined,\n });\n }\n}\n\nexport namespace PlaybackRateButtonElement {\n export type State = PlaybackRateButtonCore.State;\n}\n"],"mappings":";;;;;;AASA,IAAa,4BAAb,cAA+C,mBAA2C;;;EASvD,KAAA,aAAA,KAAA;EAEP,KAAA,OAAA,IAAI,uBAAuB;EACnB,KAAA,eAAA;EACF,KAAA,aAAA,IAAI,iBAAiB,MAAM,eAAe,kBAAkB;EACjD,KAAA,eAAA;;;EAbjB,KAAA,UAAA;;;EAEG,KAAA,aAAA;GAC3B,OAAO,EAAE,MAAM,OAAO;GACtB,UAAU,EAAE,MAAM,QAAQ;GAC1B,YAAY,EAAE,MAAM,OAAO;EAC7B;;CASA,SAAmB,OAA+B,OAAuB;EACvE,IAAI,KAAK,YAAY;GACnB,IAAI,iBAAiB,eAGnB,KAAK,MAAM;GAGb;EACF;EAEA,KAAK,KAAK,MAAM,KAAK;CACvB;CAEA,sBAAkD;EAChD,MAAM,QAAQ,KAAK,WAAW;EAE9B,IAAI,MAAM,oBAAoB,GAAG,OAAO;EAExC,IAAI,KAAK,cAAc,SAAS,MAAM,cAAc,WAAW,GAAG,OAAO;EAEzE,OAAO;CACT;CAEA,WAA8B,SAA+B;EAC3D,MAAM,WAAW,OAAO;EAExB,IAAI,QAAQ,IAAI,YAAY,GAC1B,IAAI,KAAK,YACP,KAAK,aAAa,cAAc,KAAK,UAAU;OAE/C,KAAK,gBAAgB,YAAY;CAGvC;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAGpB,IAAI,CADU,KAAK,WAAW,SAChB,CAAC,KAAK,YAAY;EAEhC,kBAAkB,MAAM,EACtB,iBAAiB,KAAK,oBAAoB,IAAI,SAAS,KAAA,EACzD,CAAC;CACH;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":["#mediaState","#core","#i18n","#options"],"sources":["../../../../src/ui/playback-rate-radio-group/element.ts"],"sourcesContent":["import {\n PlaybackRateRadioGroupCore,\n PlaybackRateRadioGroupDataAttrs,\n type PlaybackRateRadioGroupOption,\n} from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectPlaybackRate } from '@videojs/core/dom';\nimport { translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { MenuRadioGroupElement } from '../menu/radio-group';\nimport { RadioOptionsController } from '../radio-options/controller';\n\nexport class PlaybackRateRadioGroupElement extends MenuRadioGroupElement {\n static override readonly tagName = 'media-playback-rate-radio-group';\n\n static override properties = {\n ...MenuRadioGroupElement.properties,\n disabled: { type: Boolean },\n } satisfies PropertyDeclarationMap<'value' | 'disabled'>;\n\n disabled = false;\n formatRate = PlaybackRateRadioGroupCore.defaultProps.formatRate;\n\n readonly #core = new PlaybackRateRadioGroupCore();\n readonly #i18n = new I18nController(this, i18nContext);\n readonly #mediaState = new PlayerController(this, playerContext, selectPlaybackRate);\n readonly #options = new RadioOptionsController<PlaybackRateRadioGroupOption>(this, {\n setItemAttributes: (item, option) => item.setAttribute('data-rate', option.value),\n onValueChange: (value) => {\n const media = this.#mediaState.value;\n\n if (media) this.#core.selectValue(media, value);\n },\n });\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n if (__DEV__ && !this.#mediaState.value && this.#mediaState.displayName) {\n logMissingFeature(this.localName, this.#mediaState.displayName);\n }\n }\n\n protected override update(changed: PropertyValues): void {\n const media = this.#mediaState.value;\n let state: PlaybackRateRadioGroupCore.State | null = null;\n\n if (media) {\n this.#core.setProps({ formatRate: this.formatRate, disabled: this.disabled });\n this.#core.setMedia(media);\n state = this.#core.getState();\n\n this.applyDefaultAriaLabel(\n translateText(this.#core.getLabel(state), this.#i18n.value, this.#core.getLabelParams(state))\n );\n this.#options.sync(state, this.#i18n.value, this.#i18n.locale);\n this.publishMenuOptionState(state.disabled, state.hidden, state.availability);\n } else {\n this.publishMenuOptionState(true, true, 'unsupported');\n }\n\n super.update(changed);\n\n if (state) applyStateDataAttrs(this, state, PlaybackRateRadioGroupDataAttrs);\n }\n}\n\nexport namespace PlaybackRateRadioGroupElement {\n export type State = PlaybackRateRadioGroupCore.State;\n}\n"],"mappings":";;;;;;;;;;AAgBA,IAAa,gCAAb,cAAmD,sBAAsB;;;EAQ5D,KAAA,WAAA;EACE,KAAA,aAAA,2BAA2B,aAAa;EAEpC,KAAA,QAAA,IAAI,2BAA2B;EAC/B,KAAA,QAAA,IAAI,eAAe,MAAM,WAAW;EAC9B,KAAA,cAAA,IAAI,iBAAiB,MAAM,eAAe,kBAAkB;EAC/D,KAAA,WAAA,IAAI,uBAAqD,MAAM;GACjF,oBAAoB,MAAM,WAAW,KAAK,aAAa,aAAa,OAAO,KAAK;GAChF,gBAAgB,UAAU;IACxB,MAAM,QAAQ,KAAKA,YAAY;IAE/B,IAAI,OAAO,KAAKC,MAAM,YAAY,OAAO,KAAK;GAChD;EACF,CAAC;;;EApBkC,KAAA,UAAA;;;EAEN,KAAA,aAAA;GAC3B,GAAG,sBAAsB;GACzB,UAAU,EAAE,MAAM,QAAQ;EAC5B;;CAKA;CACA;CACA;CACA;CASA,oBAAmC;EACjC,MAAM,kBAAkB;EAExB,IAAI,KAAK,WAAW;CAKtB;CAEA,OAA0B,SAA+B;EACvD,MAAM,QAAQ,KAAKD,YAAY;EAC/B,IAAI,QAAiD;EAErD,IAAI,OAAO;GACT,KAAKC,MAAM,SAAS;IAAE,YAAY,KAAK;IAAY,UAAU,KAAK;GAAS,CAAC;GAC5E,KAAKA,MAAM,SAAS,KAAK;GACzB,QAAQ,KAAKA,MAAM,SAAS;GAE5B,KAAK,sBACH,cAAc,KAAKA,MAAM,SAAS,KAAK,GAAG,KAAKC,MAAM,OAAO,KAAKD,MAAM,eAAe,KAAK,CAAC,CAC9F;GACA,KAAKE,SAAS,KAAK,OAAO,KAAKD,MAAM,OAAO,KAAKA,MAAM,MAAM;GAC7D,KAAK,uBAAuB,MAAM,UAAU,MAAM,QAAQ,MAAM,YAAY;EAC9E,OACE,KAAK,uBAAuB,MAAM,MAAM,aAAa;EAGvD,MAAM,OAAO,OAAO;EAEpB,IAAI,OAAO,oBAAoB,MAAM,OAAO,+BAA+B;CAC7E;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":["#core","#containerCtx","#popupGroupCtx","#position","#disconnect","#popover","#snapshot","#cleanupTrigger","#currentTrigger","#syncTrigger","#triggerAbort"],"sources":["../../../../src/ui/popover/element.ts"],"sourcesContent":["import { POPUP_HOST_ATTR, PopoverCore, PopoverDataAttrs, type PopoverInput, type PopoverProps } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createPopover,\n createTransition,\n type PopoverApi,\n type PopoverChangeDetails,\n type PopoverOpenChangeReason,\n type PositioningBoundary,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport { SnapshotController } from '@videojs/store/html';\nimport { tryHidePopover, tryShowPopover } from '@videojs/utils/dom';\n\nimport { containerContext } from '../../player/context';\nimport { popupGroupContext } from '../../player/popup-group-context';\nimport { PositionController } from '../position-controller';\nimport { UIElement } from '../ui-element';\n\n/** @fires open-change - Fired when the popover's open state changes. */\nexport class PopoverElement extends UIElement {\n static readonly tagName: string = 'media-popover';\n\n static override properties = {\n open: { type: Boolean },\n defaultOpen: { type: Boolean, attribute: 'default-open' },\n side: { type: String },\n align: { type: String },\n modal: { type: Boolean },\n closeOnEscape: { type: Boolean, attribute: 'close-on-escape' },\n closeOnOutsideClick: { type: Boolean, attribute: 'close-on-outside-click' },\n openOnHover: { type: Boolean, attribute: 'open-on-hover' },\n delay: { type: Number },\n closeDelay: { type: Number, attribute: 'close-delay' },\n boundary: { type: String },\n } satisfies PropertyDeclarationMap<keyof PopoverCore.Props | 'boundary'>;\n\n open = PopoverCore.defaultProps.open;\n defaultOpen = PopoverCore.defaultProps.defaultOpen;\n side = PopoverCore.defaultProps.side;\n align = PopoverCore.defaultProps.align;\n modal: PopoverProps['modal'] = PopoverCore.defaultProps.modal;\n closeOnEscape = PopoverCore.defaultProps.closeOnEscape;\n closeOnOutsideClick = PopoverCore.defaultProps.closeOnOutsideClick;\n openOnHover = PopoverCore.defaultProps.openOnHover;\n delay = PopoverCore.defaultProps.delay;\n closeDelay = PopoverCore.defaultProps.closeDelay;\n boundary: PositioningBoundary = 'container';\n\n readonly #core = new PopoverCore();\n readonly #containerCtx = new ContextConsumer(this, { context: containerContext, subscribe: true });\n readonly #popupGroupCtx = new ContextConsumer(this, { context: popupGroupContext });\n readonly #position = new PositionController(this);\n #popover: PopoverApi | null = null;\n #snapshot: SnapshotController<PopoverInput> | null = null;\n\n // Cleanup controllers\n #disconnect: AbortController | null = null;\n #triggerAbort: AbortController | null = null;\n #currentTrigger: HTMLElement | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.setAttribute(POPUP_HOST_ATTR, '');\n\n this.#disconnect = new AbortController();\n\n this.#popover = createPopover({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean, details: PopoverChangeDetails) => {\n this.open = nextOpen;\n this.dispatchEvent(new CustomEvent('open-change', { detail: { open: nextOpen, ...details } }));\n },\n closeOnEscape: () => this.closeOnEscape,\n closeOnOutsideClick: () => this.closeOnOutsideClick,\n openOnHover: () => this.openOnHover,\n delay: () => this.delay,\n closeDelay: () => this.closeDelay,\n group: () => this.#popupGroupCtx.value,\n });\n\n // Register self as the popup element — the element IS the popup.\n this.#popover.setPopupElement(this);\n\n // Apply popup event handlers (pointerenter/leave, focusout) to self.\n applyElementProps(this, this.#popover.popupProps, { signal: this.#disconnect.signal });\n\n // Subscribe to interaction state for reactive updates.\n // Reuse the controller across connect/disconnect cycles to avoid\n // leaking stale controllers in the host's controller set.\n if (this.#snapshot) {\n this.#snapshot.track(this.#popover.input);\n } else {\n this.#snapshot = new SnapshotController(this, this.#popover.input);\n }\n }\n\n protected override firstUpdated(changed: PropertyValues): void {\n super.firstUpdated(changed);\n\n // Uncontrolled mode: open if `defaultOpen` is set. Controlled `open`\n // is already synced by `willUpdate` on the first render cycle.\n if (this.defaultOpen && !this.open) {\n this.#popover?.open();\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#cleanupTrigger();\n this.#popover?.destroy();\n super.destroyCallback();\n }\n\n close(reason: PopoverOpenChangeReason = 'imperative-action'): void {\n this.#popover?.close(reason);\n }\n\n protected get triggerElement(): HTMLElement | null {\n return this.#currentTrigger;\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.#core.setProps(this);\n\n // Sync controlled open state\n if (this.#popover && changed.has('open')) {\n const { active: interactionOpen } = this.#popover.input.current;\n\n if (this.open !== interactionOpen) {\n if (this.open) {\n this.#popover.open();\n } else {\n this.#popover.close();\n }\n }\n }\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n if (!this.#popover) return;\n\n // Discover trigger via commandfor linkage.\n const triggerEl = this.#position.findTrigger();\n\n this.#syncTrigger(triggerEl);\n\n // Derive state from core + input.\n const input = this.#popover.input.current;\n\n this.#core.setInput(input);\n const state = this.#core.getState();\n\n // Apply popup ARIA and data attributes to self.\n applyElementProps(this, this.#core.getPopupAttrs(state));\n applyStateDataAttrs(this, state, PopoverDataAttrs);\n\n // Show/hide via Popover API AFTER data attributes are applied so\n // `data-starting-style` is present before the first visible frame.\n if (state.open) {\n tryShowPopover(this);\n } else {\n tryHidePopover(this);\n }\n\n // Apply trigger ARIA to the discovered trigger.\n if (this.#currentTrigger) {\n applyElementProps(this.#currentTrigger, this.#core.getTriggerAttrs(state, this.id));\n }\n\n // Skip positioning when closed — no rects to measure.\n if (!state.open) {\n this.#position.cleanup();\n return;\n }\n\n this.#position.sync({\n anchorName: this.id,\n position: { side: state.side, align: state.align },\n trigger: this.#currentTrigger,\n boundary: this.boundary,\n container: this.#containerCtx.value?.container ?? null,\n onSideChange: (side) => this.setAttribute(PopoverDataAttrs.side, side),\n });\n }\n\n // --- Trigger management ---\n\n #syncTrigger(triggerEl: HTMLElement | null): void {\n if (triggerEl === this.#currentTrigger) return;\n\n this.#position.cleanup();\n this.#cleanupTrigger();\n this.#currentTrigger = triggerEl;\n this.#popover?.setTriggerElement(triggerEl);\n\n if (triggerEl && this.#popover) {\n this.#triggerAbort = new AbortController();\n applyElementProps(triggerEl, this.#popover.triggerProps, { signal: this.#triggerAbort.signal });\n }\n }\n\n #cleanupTrigger(): void {\n if (this.#currentTrigger) {\n applyElementProps(this.#currentTrigger, {\n 'aria-expanded': undefined,\n 'aria-haspopup': undefined,\n 'aria-controls': undefined,\n });\n }\n\n this.#triggerAbort?.abort();\n this.#triggerAbort = null;\n this.#currentTrigger = null;\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"position-controller.js","names":["#host","#positioner","#releaseImplicitBinding","#implicitBinding"],"sources":["../../../src/ui/position-controller.ts"],"sourcesContent":["import { PopupPositioner, type PopupPositionerOptions } from '@videojs/core/dom';\nimport type { ReactiveController, ReactiveControllerHost } from '@videojs/element';\n\nexport type PositionControllerHost = ReactiveControllerHost & HTMLElement;\n\nexport type PositionControllerOptions = Omit<PopupPositionerOptions, 'popup'>;\n\nlet popupId = 0;\n\ninterface ImplicitTriggerBinding {\n id: string;\n trigger: HTMLElement;\n}\n\n/** Connects a popup element to the shared positioning lifecycle. */\nexport class PositionController implements ReactiveController {\n readonly #host: PositionControllerHost;\n readonly #positioner = new PopupPositioner();\n #implicitBinding: ImplicitTriggerBinding | null = null;\n\n constructor(host: PositionControllerHost) {\n this.#host = host;\n host.addController(this);\n }\n\n /** Discover an explicit trigger by ID or one linked via `commandfor`. */\n findTrigger(trigger?: string): HTMLElement | null {\n const root = this.#host.getRootNode();\n\n if (root.nodeType !== Node.DOCUMENT_NODE && root.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n this.#releaseImplicitBinding();\n return null;\n }\n\n const scopedRoot = root as Document | DocumentFragment;\n\n if (trigger) {\n this.#releaseImplicitBinding();\n return scopedRoot.getElementById(trigger);\n }\n\n if (this.#implicitBinding) {\n const { id, trigger: boundTrigger } = this.#implicitBinding;\n\n if (\n this.#host.id === id &&\n boundTrigger.getAttribute('commandfor') === id &&\n this.#host.previousElementSibling === boundTrigger\n ) {\n return boundTrigger;\n }\n\n this.#releaseImplicitBinding();\n }\n\n if (this.#host.id) {\n return scopedRoot.querySelector<HTMLElement>(`[commandfor=\"${this.#host.id}\"]`);\n }\n\n const adjacent = this.#host.previousElementSibling;\n\n if (!(adjacent instanceof HTMLElement)) {\n if (__DEV__) {\n console.warn(\n `[${this.#host.localName}] No trigger was found. Place the popup immediately after its trigger or link them explicitly.`\n );\n }\n\n return null;\n }\n\n const claimedTarget = adjacent.getAttribute('commandfor');\n\n if (claimedTarget) {\n if (__DEV__) {\n console.warn(\n `[${this.#host.localName}] The adjacent trigger already targets \\`${claimedTarget}\\`; link this popup explicitly.`\n );\n }\n\n return null;\n }\n\n const id = nextPopupId(scopedRoot);\n\n this.#host.id = id;\n adjacent.setAttribute('commandfor', id);\n this.#implicitBinding = { id, trigger: adjacent };\n return adjacent;\n }\n\n sync(options: PositionControllerOptions): void {\n this.#positioner.sync({ ...options, popup: this.#host });\n }\n\n cleanup(): void {\n this.#positioner.cleanup();\n }\n\n hostDisconnected(): void {\n this.cleanup();\n this.#releaseImplicitBinding();\n }\n\n hostDestroyed(): void {\n this.cleanup();\n this.#releaseImplicitBinding();\n }\n\n #releaseImplicitBinding(): void {\n const binding = this.#implicitBinding;\n if (!binding) return;\n\n if (binding.trigger.getAttribute('commandfor') === binding.id) {\n binding.trigger.removeAttribute('commandfor');\n }\n\n if (this.#host.id === binding.id) {\n this.#host.removeAttribute('id');\n }\n\n this.#implicitBinding = null;\n }\n}\n\nfunction nextPopupId(root: Document | DocumentFragment): string {\n let id: string;\n\n do id = `vjs-popup-${++popupId}`;\n while (root.getElementById(id));\n\n return id;\n}\n"],"mappings":";;AAOA,IAAI,UAAU;;AAQd,IAAa,qBAAb,MAA8D;CAC5D;CACA,cAAuB,IAAI,gBAAgB;CAC3C,mBAAkD;CAElD,YAAY,MAA8B;EACxC,KAAKA,QAAQ;EACb,KAAK,cAAc,IAAI;CACzB;;CAGA,YAAY,SAAsC;EAChD,MAAM,OAAO,KAAKA,MAAM,YAAY;EAEpC,IAAI,KAAK,aAAa,KAAK,iBAAiB,KAAK,aAAa,KAAK,wBAAwB;GACzF,KAAKE,wBAAwB;GAC7B,OAAO;EACT;EAEA,MAAM,aAAa;EAEnB,IAAI,SAAS;GACX,KAAKA,wBAAwB;GAC7B,OAAO,WAAW,eAAe,OAAO;EAC1C;EAEA,IAAI,KAAKC,kBAAkB;GACzB,MAAM,EAAE,IAAI,SAAS,iBAAiB,KAAKA;GAE3C,IACE,KAAKH,MAAM,OAAO,MAClB,aAAa,aAAa,YAAY,MAAM,MAC5C,KAAKA,MAAM,2BAA2B,cAEtC,OAAO;GAGT,KAAKE,wBAAwB;EAC/B;EAEA,IAAI,KAAKF,MAAM,IACb,OAAO,WAAW,cAA2B,gBAAgB,KAAKA,MAAM,GAAG,GAAG;EAGhF,MAAM,WAAW,KAAKA,MAAM;EAE5B,IAAI,EAAE,oBAAoB,cAOxB,OAAO;EAKT,IAFsB,SAAS,aAAa,YAE5B,GAOd,OAAO;EAGT,MAAM,KAAK,YAAY,UAAU;EAEjC,KAAKA,MAAM,KAAK;EAChB,SAAS,aAAa,cAAc,EAAE;EACtC,KAAKG,mBAAmB;GAAE;GAAI,SAAS;EAAS;EAChD,OAAO;CACT;CAEA,KAAK,SAA0C;EAC7C,KAAKF,YAAY,KAAK;GAAE,GAAG;GAAS,OAAO,KAAKD;EAAM,CAAC;CACzD;CAEA,UAAgB;EACd,KAAKC,YAAY,QAAQ;CAC3B;CAEA,mBAAyB;EACvB,KAAK,QAAQ;EACb,KAAKC,wBAAwB;CAC/B;CAEA,gBAAsB;EACpB,KAAK,QAAQ;EACb,KAAKA,wBAAwB;CAC/B;CAEA,0BAAgC;EAC9B,MAAM,UAAU,KAAKC;EACrB,IAAI,CAAC,SAAS;EAEd,IAAI,QAAQ,QAAQ,aAAa,YAAY,MAAM,QAAQ,IACzD,QAAQ,QAAQ,gBAAgB,YAAY;EAG9C,IAAI,KAAKH,MAAM,OAAO,QAAQ,IAC5B,KAAKA,MAAM,gBAAgB,IAAI;EAGjC,KAAKG,mBAAmB;CAC1B;AACF;AAEA,SAAS,YAAY,MAA2C;CAC9D,IAAI;CAEJ;EAAG,KAAK,aAAa,EAAE;QAChB,KAAK,eAAe,EAAE;CAE7B,OAAO;AACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":["#core","#shadow","#fallback","#children","#playback","#metadata","#disconnect","#adopt","#loadState","#image","#imageLoadState","#applySource","#owned","#imageEvents"],"sources":["../../../../src/ui/poster/element.ts"],"sourcesContent":["import { PosterCore, PosterDataAttrs, type PosterImageLoadState } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectMetadata, selectPlayback } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\nimport { findComposedElement, isHTMLImageElement } from '@videojs/utils/dom';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { UIElement } from '../ui-element';\n\nconst SHADOW_CSS = `\\\n:host {\n display: block;\n}\nimg {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: var(--media-object-fit, contain);\n object-position: var(--media-object-position, center);\n}\nimg:not([src]) {\n visibility: hidden;\n}`;\n\n/**\n * Whether anything already points this image somewhere, which answers both whether the author owns the source and\n * whether there is a download to wait for. A `<source>` counts: inside a `<picture>` it can win over the `src`.\n */\nfunction hasSource(img: HTMLImageElement): boolean {\n if (img.hasAttribute('src') || img.hasAttribute('srcset')) return true;\n\n const parent = img.parentElement;\n\n return parent?.localName === 'picture' && parent.querySelector('source') !== null;\n}\n\n/**\n * Whether `complete` on this image describes a request. It is also true for one that omits both `src` and `srcset`,\n * whatever a parent `<picture>` is fetching on its behalf, so only an image sourced from its own attributes can be\n * read.\n */\nfunction hasOwnSource(img: HTMLImageElement): boolean {\n return !!img.getAttribute('src') || img.hasAttribute('srcset');\n}\n\n/**\n * The image the element draws when none is supplied, reachable from outside as `::part(image)`. Decorative by default,\n * like the one each skin carries: a resolved URL says nothing about what it depicts.\n */\nfunction createFallbackImage(): HTMLImageElement {\n const img = document.createElement('img');\n\n img.alt = '';\n img.setAttribute('part', 'image');\n img.setAttribute('decoding', 'async');\n\n return img;\n}\n\n/** How the current source is faring. */\ntype ImageLoadState = 'pending' | 'loaded' | 'error';\n\n/**\n * `<media-poster>` — sets `src` on a poster image it does not own.\n *\n * The image is a child, as in `<picture>`, but sourcing runs the other way around: `<picture>` treats the `src` on its\n * `<img>` as the fallback, while here an image with no source of its own is the one this element fills in. Give the\n * child a `src`, a `srcset`, or `<source>` candidates and it is yours, left alone.\n *\n * Left empty, the element draws an image of its own in its shadow root. Supply one as a child to describe it or wrap\n * it: `<media-poster><img alt=\"Keynote speaker\"></media-poster>`. Inside a skin, an `<img slot=\"poster\">` of yours\n * replaces the one the skin carries.\n */\nexport class PosterElement extends UIElement {\n static readonly tagName = 'media-poster';\n\n readonly #core = new PosterCore();\n readonly #shadow = this.attachShadow({ mode: 'open' });\n readonly #fallback = createFallbackImage();\n readonly #children = new MutationObserver(() => this.requestUpdate());\n\n readonly #playback = new PlayerController(this, playerContext, selectPlayback);\n readonly #metadata = new PlayerController(this, playerContext, selectMetadata);\n\n #image: HTMLImageElement | null = null;\n /** Whether `#image` had no source of its own when it became active. */\n #owned = false;\n #imageLoadState: ImageLoadState = 'pending';\n\n #imageEvents: AbortController | null = null;\n #disconnect: AbortController | null = null;\n\n constructor() {\n super();\n\n const style = document.createElement('style');\n\n style.textContent = SHADOW_CSS;\n this.#shadow.append(style, document.createElement('slot'), this.#fallback);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.#disconnect = new AbortController();\n const { signal } = this.#disconnect;\n\n // Two ways the image can change: a skin's forwarding slot fills or empties,\n // which bubbles here, or a child is added or removed, which announces nothing.\n this.addEventListener('slotchange', () => this.requestUpdate(), { signal });\n this.#children.observe(this, { childList: true, subtree: true });\n\n if (__DEV__ && !this.#playback.value) {\n logMissingFeature(this.localName, this.#playback.displayName ?? 'playback');\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this.#adopt(null);\n this.#children.disconnect();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n get #loadState(): PosterImageLoadState {\n if (!this.#image || !hasSource(this.#image)) return 'none';\n\n return this.#imageLoadState === 'pending' ? 'loading' : this.#imageLoadState;\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const playback = this.#playback.value;\n if (!playback) return;\n\n // `metadata` is optional: without it nothing resolves a URL, and this stays\n // a visibility wrapper around whatever the author supplied.\n this.#core.setMedia({\n started: playback.started,\n poster: this.#metadata.value?.poster ?? '',\n });\n\n const { src } = this.#core.getState();\n\n // A skin forwards its own `<slot name=\"poster\">` in, so the image may sit a slot or two down inside a `<picture>`.\n this.#adopt(findComposedElement(this, isHTMLImageElement) ?? this.#fallback);\n this.#applySource(src);\n\n this.#core.setImageLoadState(this.#loadState);\n applyStateDataAttrs(this, this.#core.getState(), PosterDataAttrs);\n }\n\n /**\n * Ownership is settled once, when an image becomes active: after the first fill the `src` we set would itself look\n * authored. Re-slot an image with a source to hand it back, the way React decides a field is controlled at mount.\n */\n #adopt(next: HTMLImageElement | null): void {\n if (next === this.#image) return;\n\n // An image that steps aside keeps downloading whatever we pointed it at.\n if (this.#owned) this.#image?.removeAttribute('src');\n\n this.#imageEvents?.abort();\n this.#imageEvents = null;\n\n this.#image = next;\n this.#owned = next !== null && !hasSource(next);\n this.#imageLoadState = 'pending';\n\n // The fallback only occupies the shadow root while it is the active image,\n // so a supplied image never sits beside a hidden one.\n if (next === this.#fallback) this.#shadow.append(this.#fallback);\n else if (next) this.#fallback.remove();\n\n if (!next) return;\n\n // An image that finished before we started listening never fires again, so\n // its load state has to be read off it. Decoded pixels stand on their own;\n // the absence of them only means failure once `complete` can be trusted.\n if (next.naturalWidth > 0) this.#imageLoadState = 'loaded';\n else if (next.complete && hasOwnSource(next)) this.#imageLoadState = 'error';\n\n this.#imageEvents = new AbortController();\n const { signal } = this.#imageEvents;\n const settle = (loadState: ImageLoadState) => () => {\n this.#imageLoadState = loadState;\n this.requestUpdate();\n };\n\n next.addEventListener('load', settle('loaded'), { signal });\n next.addEventListener('error', settle('error'), { signal });\n }\n\n #applySource(src: string): void {\n const img = this.#image;\n if (!img || !this.#owned) return;\n\n if (!src) {\n this.#imageLoadState = 'pending';\n img.removeAttribute('src');\n } else if (img.getAttribute('src') !== src) {\n // Reset before the write, not after: how the last source fared says\n // nothing about this one, and the write itself can settle it.\n this.#imageLoadState = 'pending';\n img.setAttribute('src', src);\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":["#setContent","#mediaState","#core","#i18n","#options"],"sources":["../../../../src/ui/quality-radio-group/element.ts"],"sourcesContent":["import { QualityRadioGroupCore, QualityRadioGroupDataAttrs, type QualityRadioGroupOption } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectQuality } from '@videojs/core/dom';\nimport { type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { MenuRadioGroupElement } from '../menu/radio-group';\nimport type { MenuRadioItemElement } from '../menu/radio-item';\nimport { RadioOptionsController } from '../radio-options/controller';\n\nexport class QualityRadioGroupElement extends MenuRadioGroupElement {\n static override readonly tagName = 'media-quality-radio-group';\n\n static override properties = {\n ...MenuRadioGroupElement.properties,\n disabled: { type: Boolean },\n label: { type: String },\n } satisfies PropertyDeclarationMap<'value' | 'label' | 'disabled'>;\n\n disabled = false;\n label: Text | string = '';\n formatRendition = QualityRadioGroupCore.defaultProps.formatRendition;\n\n readonly #core = new QualityRadioGroupCore();\n readonly #i18n = new I18nController(this, i18nContext);\n readonly #mediaState = new PlayerController(this, playerContext, selectQuality);\n readonly #options = new RadioOptionsController<QualityRadioGroupOption>(this, {\n renderItem: (item, label, option) => this.#setContent(item, label, option.tier, option.badge),\n setItemAttributes: (item, option) => item.setAttribute('data-rendition', option.value),\n getOptionCacheKey: (option) => `${option.tier ?? ''}:${option.badge ?? ''}`,\n onValueChange: (value) => {\n const media = this.#mediaState.value;\n\n if (media) this.#core.selectValue(media, value);\n },\n });\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n if (__DEV__ && !this.#mediaState.value && this.#mediaState.displayName) {\n logMissingFeature(this.localName, this.#mediaState.displayName);\n }\n }\n\n protected override update(changed: PropertyValues): void {\n const media = this.#mediaState.value;\n let state: QualityRadioGroupCore.State | null = null;\n\n if (media) {\n this.#core.setProps({ formatRendition: this.formatRendition, disabled: this.disabled, label: this.label });\n this.#core.setMedia(media);\n state = this.#core.getState();\n\n this.applyDefaultAriaLabel(translateText(this.#core.getLabel(state), this.#i18n.value));\n this.#options.sync(state, this.#i18n.value, this.#i18n.locale);\n this.publishMenuOptionState(state.disabled, state.hidden, state.availability);\n } else {\n this.publishMenuOptionState(true, true, 'unsupported');\n }\n\n super.update(changed);\n\n if (state) applyStateDataAttrs(this, state, QualityRadioGroupDataAttrs);\n }\n\n #setContent(item: MenuRadioItemElement, label: string, tier: string | undefined, badge: string | undefined): void {\n const labelPart = item.querySelector<HTMLElement>('[data-part~=\"label\"]');\n const tierPart = item.querySelector<HTMLElement>('[data-part~=\"tier\"]');\n const badgePart = item.querySelector<HTMLElement>('[data-part~=\"badge\"]');\n\n if (labelPart) {\n labelPart.textContent = label;\n }\n\n if (tierPart) {\n tierPart.textContent = tier ?? '';\n tierPart.hidden = !tier;\n }\n\n if (badgePart) {\n badgePart.textContent = badge ?? '';\n badgePart.hidden = !badge;\n }\n\n if (!labelPart && !tierPart && !badgePart) {\n item.textContent = [label, tier, badge].filter(Boolean).join(' ');\n }\n }\n}\n\nexport namespace QualityRadioGroupElement {\n export type State = QualityRadioGroupCore.State;\n}\n"],"mappings":";;;;;;;;;;AAaA,IAAa,2BAAb,cAA8C,sBAAsB;;;EASvD,KAAA,WAAA;EACY,KAAA,QAAA;EACL,KAAA,kBAAA,sBAAsB,aAAa;EAEpC,KAAA,QAAA,IAAI,sBAAsB;EAC1B,KAAA,QAAA,IAAI,eAAe,MAAM,WAAW;EAC9B,KAAA,cAAA,IAAI,iBAAiB,MAAM,eAAe,aAAa;EAC1D,KAAA,WAAA,IAAI,uBAAgD,MAAM;GAC5E,aAAa,MAAM,OAAO,WAAW,KAAKA,YAAY,MAAM,OAAO,OAAO,MAAM,OAAO,KAAK;GAC5F,oBAAoB,MAAM,WAAW,KAAK,aAAa,kBAAkB,OAAO,KAAK;GACrF,oBAAoB,WAAW,GAAG,OAAO,QAAQ,GAAG,GAAG,OAAO,SAAS;GACvE,gBAAgB,UAAU;IACxB,MAAM,QAAQ,KAAKC,YAAY;IAE/B,IAAI,OAAO,KAAKC,MAAM,YAAY,OAAO,KAAK;GAChD;EACF,CAAC;;;EAxBkC,KAAA,UAAA;;;EAEN,KAAA,aAAA;GAC3B,GAAG,sBAAsB;GACzB,UAAU,EAAE,MAAM,QAAQ;GAC1B,OAAO,EAAE,MAAM,OAAO;EACxB;;CAMA;CACA;CACA;CACA;CAWA,oBAAmC;EACjC,MAAM,kBAAkB;EAExB,IAAI,KAAK,WAAW;CAKtB;CAEA,OAA0B,SAA+B;EACvD,MAAM,QAAQ,KAAKD,YAAY;EAC/B,IAAI,QAA4C;EAEhD,IAAI,OAAO;GACT,KAAKC,MAAM,SAAS;IAAE,iBAAiB,KAAK;IAAiB,UAAU,KAAK;IAAU,OAAO,KAAK;GAAM,CAAC;GACzG,KAAKA,MAAM,SAAS,KAAK;GACzB,QAAQ,KAAKA,MAAM,SAAS;GAE5B,KAAK,sBAAsB,cAAc,KAAKA,MAAM,SAAS,KAAK,GAAG,KAAKC,MAAM,KAAK,CAAC;GACtF,KAAKC,SAAS,KAAK,OAAO,KAAKD,MAAM,OAAO,KAAKA,MAAM,MAAM;GAC7D,KAAK,uBAAuB,MAAM,UAAU,MAAM,QAAQ,MAAM,YAAY;EAC9E,OACE,KAAK,uBAAuB,MAAM,MAAM,aAAa;EAGvD,MAAM,OAAO,OAAO;EAEpB,IAAI,OAAO,oBAAoB,MAAM,OAAO,0BAA0B;CACxE;CAEA,YAAY,MAA4B,OAAe,MAA0B,OAAiC;EAChH,MAAM,YAAY,KAAK,cAA2B,wBAAsB;EACxE,MAAM,WAAW,KAAK,cAA2B,uBAAqB;EACtE,MAAM,YAAY,KAAK,cAA2B,wBAAsB;EAExE,IAAI,WACF,UAAU,cAAc;EAG1B,IAAI,UAAU;GACZ,SAAS,cAAc,QAAQ;GAC/B,SAAS,SAAS,CAAC;EACrB;EAEA,IAAI,WAAW;GACb,UAAU,cAAc,SAAS;GACjC,UAAU,SAAS,CAAC;EACtB;EAEA,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,WAC9B,KAAK,cAAc;GAAC;GAAO;GAAM;EAAK,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;CAEpE;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../../src/ui/radio-group/context.ts"],"sourcesContent":["import { createContext } from '@videojs/element/context';\n\nexport interface RadioGroupContextValue {\n value: string;\n onValueChange: (value: string) => void;\n}\n\nconst RADIO_GROUP_CONTEXT_KEY = Symbol('@videojs/radio-group');\n\nexport const radioGroupContext = createContext<RadioGroupContextValue>(RADIO_GROUP_CONTEXT_KEY);\n"],"mappings":";AASA,MAAa,oBAAoB,cAFD,OAAO,sBAEgC,CAAuB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":["#provider"],"sources":["../../../../src/ui/radio-group/element.ts"],"sourcesContent":["import type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\n\nimport { UIElement } from '../ui-element';\nimport { radioGroupContext } from './context';\n\n/** @fires value-change - Fired when the selected value changes. */\nexport class RadioGroupElement extends UIElement {\n static override properties = {\n value: { type: String },\n } satisfies PropertyDeclarationMap<'value'>;\n\n value = '';\n\n readonly #provider = new ContextProvider(this, { context: radioGroupContext });\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n this.#provider.setValue({\n value: this.value,\n onValueChange: (next: string) => {\n this.value = next;\n this.dispatchEvent(new CustomEvent('value-change', { detail: { value: next }, bubbles: true }));\n },\n });\n }\n}\n"],"mappings":";;;;;AAOA,IAAa,oBAAb,cAAuC,UAAU;;;EAKvC,KAAA,QAAA;EAEa,KAAA,YAAA,IAAI,gBAAgB,MAAM,EAAE,SAAS,kBAAkB,CAAC;;;EANhD,KAAA,aAAA,EAC3B,OAAO,EAAE,MAAM,OAAO,EACxB;;CAIA;CAEA,OAA0B,SAA+B;EACvD,MAAM,OAAO,OAAO;EAEpB,KAAKA,UAAU,SAAS;GACtB,OAAO,KAAK;GACZ,gBAAgB,SAAiB;IAC/B,KAAK,QAAQ;IACb,KAAK,cAAc,IAAI,YAAY,gBAAgB;KAAE,QAAQ,EAAE,OAAO,KAAK;KAAG,SAAS;IAAK,CAAC,CAAC;GAChG;EACF,CAAC;CACH;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"controller.js","names":["#host","#config","#disconnect","#handleValueChange","#contentKey","#translator","#setItemLabel"],"sources":["../../../../src/ui/radio-options/controller.ts"],"sourcesContent":["import type { RadioOption, RadioOptionsState } from '@videojs/core';\nimport { applyElementProps } from '@videojs/core/dom';\nimport { type Translator, translateText } from '@videojs/core/i18n';\nimport type { ReactiveController, ReactiveControllerHost } from '@videojs/element';\nimport { cloneTemplateRoot, getTemplateElement, getTemplateRoot } from '@videojs/utils/dom';\n\nimport { cacheKey } from '../../i18n/cache-key';\nimport { MenuItemIndicatorElement } from '../menu/item-indicator';\nimport { MenuRadioItemElement } from '../menu/radio-item';\n\nexport type RadioOptionsControllerHost = ReactiveControllerHost &\n HTMLElement & {\n value: string;\n };\n\nexport interface RadioOptionsControllerConfig<Option extends RadioOption> {\n renderItem?: ((item: MenuRadioItemElement, label: string, option: Option) => void) | undefined;\n setItemAttributes?: ((item: MenuRadioItemElement, option: Option) => void) | undefined;\n getOptionCacheKey?: ((option: Option) => string) | undefined;\n onValueChange: (value: string) => void;\n}\n\n/** Renders normalized options into menu radio items and manages their interaction lifecycle. */\nexport class RadioOptionsController<Option extends RadioOption> implements ReactiveController {\n readonly #host: RadioOptionsControllerHost;\n readonly #config: RadioOptionsControllerConfig<Option>;\n\n #contentKey = '';\n #translator: Translator | null = null;\n #disconnect: AbortController | null = null;\n\n constructor(host: RadioOptionsControllerHost, config: RadioOptionsControllerConfig<Option>) {\n this.#host = host;\n this.#config = config;\n host.addController(this);\n }\n\n hostConnected(): void {\n this.#disconnect = new AbortController();\n this.#host.addEventListener('value-change', this.#handleValueChange, { signal: this.#disconnect.signal });\n }\n\n hostDisconnected(): void {\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n hostDestroyed(): void {\n this.hostDisconnected();\n }\n\n sync(state: RadioOptionsState<Option>, translator: Translator, locale: string): void {\n this.#host.value = state.value;\n applyElementProps(this.#host, {\n 'aria-disabled': state.disabled ? 'true' : undefined,\n hidden: state.hidden ? '' : undefined,\n });\n\n const template = getTemplateElement(this.#host);\n const templateRoot = template ? getTemplateRoot(template) : null;\n const itemRoot = templateRoot?.localName === MenuRadioItemElement.tagName ? templateRoot : null;\n\n const contentKey = `${state.options\n .map(\n (option) =>\n `${option.value}:${cacheKey(option.label, option.labelParams)}:${this.#config.getOptionCacheKey?.(option) ?? ''}`\n )\n .join('|')}::${locale}::${template?.innerHTML ?? ''}`;\n\n if (contentKey !== this.#contentKey || translator !== this.#translator) {\n this.#contentKey = contentKey;\n this.#translator = translator;\n\n for (const child of [...this.#host.children]) {\n if (child === template) continue;\n\n child.remove();\n }\n\n const items = state.options.map((option) => {\n const item = itemRoot\n ? (cloneTemplateRoot(itemRoot, this.#host.ownerDocument) as MenuRadioItemElement)\n : (this.#host.ownerDocument.createElement(MenuRadioItemElement.tagName) as MenuRadioItemElement);\n\n item.value = option.value;\n this.#config.setItemAttributes?.(item, option);\n const label = translateText(option.label, translator, option.labelParams);\n\n if (this.#config.renderItem) this.#config.renderItem(item, label, option);\n else this.#setItemLabel(item, label);\n\n return item;\n });\n\n this.#host.append(...items);\n }\n\n const optionsByValue = new Map(state.options.map((option) => [option.value, option]));\n\n for (const item of this.#host.querySelectorAll<MenuRadioItemElement>(MenuRadioItemElement.tagName)) {\n const checked = item.value === state.value;\n const option = optionsByValue.get(item.value);\n\n item.disabled = state.disabled || option?.disabled === true;\n\n for (const indicator of item.querySelectorAll<MenuItemIndicatorElement>(MenuItemIndicatorElement.tagName)) {\n indicator.checked = checked;\n }\n }\n }\n\n #handleValueChange = (event: Event): void => {\n if (event.target !== this.#host) return;\n\n const { value } = (event as CustomEvent<{ value: string }>).detail;\n\n this.#config.onValueChange(value);\n };\n\n #setItemLabel(item: MenuRadioItemElement, label: string): void {\n const labelPart = item.querySelector<HTMLElement>('[data-part~=\"label\"]');\n\n if (labelPart) labelPart.textContent = label;\n else item.textContent = label;\n }\n}\n"],"mappings":";;;;;;;;AAuBA,IAAa,yBAAb,MAA8F;CAC5F;CACA;CAEA,cAAc;CACd,cAAiC;CACjC,cAAsC;CAEtC,YAAY,MAAkC,QAA8C;EAC1F,KAAKA,QAAQ;EACb,KAAKC,UAAU;EACf,KAAK,cAAc,IAAI;CACzB;CAEA,gBAAsB;EACpB,KAAKC,cAAc,IAAI,gBAAgB;EACvC,KAAKF,MAAM,iBAAiB,gBAAgB,KAAKG,oBAAoB,EAAE,QAAQ,KAAKD,YAAY,OAAO,CAAC;CAC1G;CAEA,mBAAyB;EACvB,KAAKA,aAAa,MAAM;EACxB,KAAKA,cAAc;CACrB;CAEA,gBAAsB;EACpB,KAAK,iBAAiB;CACxB;CAEA,KAAK,OAAkC,YAAwB,QAAsB;EACnF,KAAKF,MAAM,QAAQ,MAAM;EACzB,kBAAkB,KAAKA,OAAO;GAC5B,iBAAiB,MAAM,WAAW,SAAS,KAAA;GAC3C,QAAQ,MAAM,SAAS,KAAK,KAAA;EAC9B,CAAC;EAED,MAAM,WAAW,mBAAmB,KAAKA,KAAK;EAC9C,MAAM,eAAe,WAAW,gBAAgB,QAAQ,IAAI;EAC5D,MAAM,WAAW,cAAc,cAAc,qBAAqB,UAAU,eAAe;EAE3F,MAAM,aAAa,GAAG,MAAM,QACzB,KACE,WACC,GAAG,OAAO,MAAM,GAAG,SAAS,OAAO,OAAO,OAAO,WAAW,EAAE,GAAG,KAAKC,QAAQ,oBAAoB,MAAM,KAAK,IACjH,CAAC,CACA,KAAK,GAAG,EAAE,IAAI,OAAO,IAAI,UAAU,aAAa;EAEnD,IAAI,eAAe,KAAKG,eAAe,eAAe,KAAKC,aAAa;GACtE,KAAKD,cAAc;GACnB,KAAKC,cAAc;GAEnB,KAAK,MAAM,SAAS,CAAC,GAAG,KAAKL,MAAM,QAAQ,GAAG;IAC5C,IAAI,UAAU,UAAU;IAExB,MAAM,OAAO;GACf;GAEA,MAAM,QAAQ,MAAM,QAAQ,KAAK,WAAW;IAC1C,MAAM,OAAO,WACR,kBAAkB,UAAU,KAAKA,MAAM,aAAa,IACpD,KAAKA,MAAM,cAAc,cAAc,qBAAqB,OAAO;IAExE,KAAK,QAAQ,OAAO;IACpB,KAAKC,QAAQ,oBAAoB,MAAM,MAAM;IAC7C,MAAM,QAAQ,cAAc,OAAO,OAAO,YAAY,OAAO,WAAW;IAExE,IAAI,KAAKA,QAAQ,YAAY,KAAKA,QAAQ,WAAW,MAAM,OAAO,MAAM;SACnE,KAAKK,cAAc,MAAM,KAAK;IAEnC,OAAO;GACT,CAAC;GAED,KAAKN,MAAM,OAAO,GAAG,KAAK;EAC5B;EAEA,MAAM,iBAAiB,IAAI,IAAI,MAAM,QAAQ,KAAK,WAAW,CAAC,OAAO,OAAO,MAAM,CAAC,CAAC;EAEpF,KAAK,MAAM,QAAQ,KAAKA,MAAM,iBAAuC,qBAAqB,OAAO,GAAG;GAClG,MAAM,UAAU,KAAK,UAAU,MAAM;GACrC,MAAM,SAAS,eAAe,IAAI,KAAK,KAAK;GAE5C,KAAK,WAAW,MAAM,YAAY,QAAQ,aAAa;GAEvD,KAAK,MAAM,aAAa,KAAK,iBAA2C,yBAAyB,OAAO,GACtG,UAAU,UAAU;EAExB;CACF;CAEA,sBAAsB,UAAuB;EAC3C,IAAI,MAAM,WAAW,KAAKA,OAAO;EAEjC,MAAM,EAAE,UAAW,MAAyC;EAE5D,KAAKC,QAAQ,cAAc,KAAK;CAClC;CAEA,cAAc,MAA4B,OAAqB;EAC7D,MAAM,YAAY,KAAK,cAA2B,wBAAsB;EAExE,IAAI,WAAW,UAAU,cAAc;OAClC,KAAK,cAAc;CAC1B;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":[],"sources":["../../../../src/ui/seek-button/element.ts"],"sourcesContent":["import { SeekButtonCore, SeekButtonDataAttrs } from '@videojs/core';\nimport { selectTime } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap } from '@videojs/element';\nimport type { MediaTimeState } from '@videojs/media';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class SeekButtonElement extends MediaButtonElement<SeekButtonCore> {\n static readonly tagName = 'media-seek-button';\n\n static override properties: PropertyDeclarationMap = {\n ...MediaButtonElement.properties,\n seconds: { type: Number },\n };\n\n seconds = SeekButtonCore.defaultProps.seconds;\n\n protected readonly core = new SeekButtonCore();\n protected readonly stateAttrMap = SeekButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectTime);\n protected override readonly hotkeyAction = 'seekStep';\n\n protected override get hotkeyValue(): number | undefined {\n return this.seconds;\n }\n\n protected activate(state: MediaTimeState): void {\n this.core.seek(state);\n }\n}\n"],"mappings":";;;;;;AASA,IAAa,oBAAb,cAAuC,mBAAmC;;;EAQ9D,KAAA,UAAA,eAAe,aAAa;EAEZ,KAAA,OAAA,IAAI,eAAe;EACX,KAAA,eAAA;EACF,KAAA,aAAA,IAAI,iBAAiB,MAAM,eAAe,UAAU;EACzC,KAAA,eAAA;;;EAZjB,KAAA,UAAA;;;EAE2B,KAAA,aAAA;GACnD,GAAG,mBAAmB;GACtB,SAAS,EAAE,MAAM,OAAO;EAC1B;;CASA,IAAuB,cAAkC;EACvD,OAAO,KAAK;CACd;CAEA,SAAmB,OAA6B;EAC9C,KAAK,KAAK,KAAK,KAAK;CACtB;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"element.js","names":["#core","#transition","#liveIndicator"],"sources":["../../../../src/ui/seek-indicator/element.ts"],"sourcesContent":["import { getSeekIndicatorDisplayValue, SeekIndicatorCore, SeekIndicatorDataAttrs } from '@videojs/core';\nimport { createTransition } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap } from '@videojs/element';\n\nimport { InputIndicatorElement } from '../input-indicator/element';\nimport { LiveIndicator } from '../input-indicator/live-indicator';\n\nexport class SeekIndicatorElement extends InputIndicatorElement<SeekIndicatorCore.State> {\n static readonly tagName = 'media-seek-indicator';\n\n static override properties = {\n closeDelay: { type: Number, attribute: 'close-delay' },\n } satisfies PropertyDeclarationMap<'closeDelay'>;\n\n closeDelay: number | undefined;\n\n readonly #core = new SeekIndicatorCore();\n readonly #transition = createTransition();\n readonly #liveIndicator = new LiveIndicator({\n host: this,\n dataAttrs: SeekIndicatorDataAttrs,\n render: renderSeekIndicator,\n });\n\n protected get core() {\n return this.#core;\n }\n\n protected get transition() {\n return this.#transition;\n }\n\n protected get liveIndicator() {\n return this.#liveIndicator;\n }\n\n protected override syncCoreProps(): void {\n this.#core.setProps({ closeDelay: this.closeDelay });\n }\n}\n\nfunction renderSeekIndicator(element: HTMLElement, state: SeekIndicatorCore.State): void {\n const value = element.querySelector('media-seek-indicator-value');\n if (!value) return;\n\n value.textContent = getSeekIndicatorDisplayValue(state);\n}\n"],"mappings":";;;;;AAOA,IAAa,uBAAb,cAA0C,sBAA+C;;EAC7D,KAAA,UAAA;;;EAEG,KAAA,aAAA,EAC3B,YAAY;GAAE,MAAM;GAAQ,WAAW;EAAc,EACvD;;CAIA,QAAiB,IAAI,kBAAkB;CACvC,cAAuB,iBAAiB;CACxC,iBAA0B,IAAI,cAAc;EAC1C,MAAM;EACN,WAAW;EACX,QAAQ;CACV,CAAC;CAED,IAAc,OAAO;EACnB,OAAO,KAAKA;CACd;CAEA,IAAc,aAAa;EACzB,OAAO,KAAKC;CACd;CAEA,IAAc,gBAAgB;EAC5B,OAAO,KAAKC;CACd;CAEA,gBAAyC;EACvC,KAAKF,MAAM,SAAS,EAAE,YAAY,KAAK,WAAW,CAAC;CACrD;AACF;AAEA,SAAS,oBAAoB,SAAsB,OAAsC;CACvF,MAAM,QAAQ,QAAQ,cAAc,4BAA4B;CAChE,IAAI,CAAC,OAAO;CAEZ,MAAM,cAAc,6BAA6B,KAAK;AACxD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"value.js","names":[],"sources":["../../../../src/ui/seek-indicator/value.ts"],"sourcesContent":["import { UIElement } from '../ui-element';\n\nexport class SeekIndicatorValueElement extends UIElement {\n static readonly tagName = 'media-seek-indicator-value';\n}\n"],"mappings":";;AAEA,IAAa,4BAAb,cAA+C,UAAU;;EAC7B,KAAA,UAAA;;AAC5B"}
|