@hanifhan1f/vidstack 1.12.13
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/.templates/sandbox/favicon-32x32.png +0 -0
- package/.templates/sandbox/index.html +42 -0
- package/.templates/sandbox/main.ts +137 -0
- package/.templates/sandbox/styles.css +68 -0
- package/LICENSE +21 -0
- package/README.md +22 -0
- package/analyze.config.ts +133 -0
- package/build/build-styles.js +33 -0
- package/build/rollup-decorators.ts +102 -0
- package/build/rollup-minify.js +20 -0
- package/build/rollup-ts.js +57 -0
- package/npm/analyze.json.d.ts +8 -0
- package/npm/bundle.d.ts +1 -0
- package/npm/dom.d.ts +91 -0
- package/npm/empty.vtt +1 -0
- package/npm/google-cast.d.ts +1422 -0
- package/npm/player/index.d.ts +3 -0
- package/npm/player/layouts/default.d.ts +3 -0
- package/npm/player/layouts/index.d.ts +3 -0
- package/npm/player/layouts/plyr.d.ts +3 -0
- package/npm/player/ui.d.ts +3 -0
- package/npm/tailwind.cjs +101 -0
- package/npm/tailwind.d.cts +15 -0
- package/package.json +283 -0
- package/rollup.config.ts +442 -0
- package/src/components/aria/announcer.ts +181 -0
- package/src/components/layouts/default/audio-layout.ts +20 -0
- package/src/components/layouts/default/context.ts +15 -0
- package/src/components/layouts/default/default-layout.ts +67 -0
- package/src/components/layouts/default/props.ts +143 -0
- package/src/components/layouts/default/translations.ts +70 -0
- package/src/components/layouts/default/video-layout.ts +20 -0
- package/src/components/layouts/plyr/context.ts +13 -0
- package/src/components/layouts/plyr/plyr-layout.ts +90 -0
- package/src/components/layouts/plyr/props.ts +114 -0
- package/src/components/layouts/plyr/translations.ts +53 -0
- package/src/components/player.ts +758 -0
- package/src/components/provider/provider.ts +184 -0
- package/src/components/provider/source-select.ts +378 -0
- package/src/components/provider/tracks.ts +37 -0
- package/src/components/ui/buttons/airplay-button.ts +74 -0
- package/src/components/ui/buttons/caption-button.ts +68 -0
- package/src/components/ui/buttons/fullscreen-button.ts +90 -0
- package/src/components/ui/buttons/google-cast-button.ts +75 -0
- package/src/components/ui/buttons/live-button.ts +76 -0
- package/src/components/ui/buttons/mute-button.ts +69 -0
- package/src/components/ui/buttons/pip-button.ts +71 -0
- package/src/components/ui/buttons/play-button.ts +62 -0
- package/src/components/ui/buttons/seek-button.ts +92 -0
- package/src/components/ui/buttons/toggle-button-controller.ts +92 -0
- package/src/components/ui/buttons/toggle-button.ts +49 -0
- package/src/components/ui/captions/captions-renderer.ts +63 -0
- package/src/components/ui/captions/captions.ts +227 -0
- package/src/components/ui/controls-group.ts +13 -0
- package/src/components/ui/controls.ts +101 -0
- package/src/components/ui/gesture.ts +252 -0
- package/src/components/ui/menu/menu-button.ts +95 -0
- package/src/components/ui/menu/menu-context.ts +27 -0
- package/src/components/ui/menu/menu-focus-controller.ts +205 -0
- package/src/components/ui/menu/menu-item.ts +9 -0
- package/src/components/ui/menu/menu-items.ts +129 -0
- package/src/components/ui/menu/menu-portal.ts +105 -0
- package/src/components/ui/menu/menu.ts +612 -0
- package/src/components/ui/menu/radio/radio-controller.ts +18 -0
- package/src/components/ui/menu/radio/radio-group-controller.ts +81 -0
- package/src/components/ui/menu/radio/radio-group.ts +78 -0
- package/src/components/ui/menu/radio/radio.ts +151 -0
- package/src/components/ui/menu/radio-groups/audio-gain-radio-group.ts +116 -0
- package/src/components/ui/menu/radio-groups/audio-radio-group.ts +121 -0
- package/src/components/ui/menu/radio-groups/captions-radio-group.ts +153 -0
- package/src/components/ui/menu/radio-groups/chapters-radio-group.ts +211 -0
- package/src/components/ui/menu/radio-groups/quality-radio-group.ts +181 -0
- package/src/components/ui/menu/radio-groups/speed-radio-group.ts +112 -0
- package/src/components/ui/popper/popper.ts +103 -0
- package/src/components/ui/poster.ts +187 -0
- package/src/components/ui/sliders/audio-gain-slider.ts +150 -0
- package/src/components/ui/sliders/quality-slider.ts +148 -0
- package/src/components/ui/sliders/slider/api/cssvars.ts +10 -0
- package/src/components/ui/sliders/slider/api/events.ts +65 -0
- package/src/components/ui/sliders/slider/api/state.ts +101 -0
- package/src/components/ui/sliders/slider/events-controller.ts +383 -0
- package/src/components/ui/sliders/slider/format.ts +12 -0
- package/src/components/ui/sliders/slider/slider-context.ts +18 -0
- package/src/components/ui/sliders/slider/slider-controller.ts +211 -0
- package/src/components/ui/sliders/slider/slider.ts +94 -0
- package/src/components/ui/sliders/slider/types.ts +1 -0
- package/src/components/ui/sliders/slider/utils.ts +14 -0
- package/src/components/ui/sliders/slider-preview.ts +131 -0
- package/src/components/ui/sliders/slider-thumbnail.ts +28 -0
- package/src/components/ui/sliders/slider-value.ts +122 -0
- package/src/components/ui/sliders/slider-video.ts +198 -0
- package/src/components/ui/sliders/speed-slider.ts +147 -0
- package/src/components/ui/sliders/time-slider/slider-chapters.ts +444 -0
- package/src/components/ui/sliders/time-slider/time-slider.ts +319 -0
- package/src/components/ui/sliders/volume-slider.ts +145 -0
- package/src/components/ui/thumbnails/thumbnail-loader.ts +324 -0
- package/src/components/ui/thumbnails/thumbnail.ts +244 -0
- package/src/components/ui/time.ts +191 -0
- package/src/components/ui/tooltip/tooltip-content.ts +105 -0
- package/src/components/ui/tooltip/tooltip-context.ts +13 -0
- package/src/components/ui/tooltip/tooltip-trigger.ts +49 -0
- package/src/components/ui/tooltip/tooltip.ts +127 -0
- package/src/core/api/media-attrs.ts +35 -0
- package/src/core/api/media-context.ts +52 -0
- package/src/core/api/media-events.ts +601 -0
- package/src/core/api/media-request-events.ts +323 -0
- package/src/core/api/player-controller.ts +10 -0
- package/src/core/api/player-events.ts +49 -0
- package/src/core/api/player-props.ts +233 -0
- package/src/core/api/player-state.ts +940 -0
- package/src/core/api/src-types.ts +97 -0
- package/src/core/api/types.ts +69 -0
- package/src/core/controls.ts +251 -0
- package/src/core/font/font-options.ts +106 -0
- package/src/core/font/font-vars.ts +107 -0
- package/src/core/keyboard/aria-shortcuts.ts +42 -0
- package/src/core/keyboard/controller.ts +302 -0
- package/src/core/keyboard/types.ts +40 -0
- package/src/core/quality/events.ts +48 -0
- package/src/core/quality/symbols.ts +8 -0
- package/src/core/quality/utils.ts +13 -0
- package/src/core/quality/video-quality.ts +86 -0
- package/src/core/state/media-events-logger.ts +67 -0
- package/src/core/state/media-load-controller.ts +40 -0
- package/src/core/state/media-player-delegate.ts +170 -0
- package/src/core/state/media-request-manager.ts +952 -0
- package/src/core/state/media-state-manager.ts +1077 -0
- package/src/core/state/media-state-sync.ts +162 -0
- package/src/core/state/media-storage.ts +196 -0
- package/src/core/state/navigator-media-session.ts +62 -0
- package/src/core/state/remote-control.ts +584 -0
- package/src/core/state/tracked-media-events.ts +22 -0
- package/src/core/time-ranges.ts +130 -0
- package/src/core/tracks/audio/audio-tracks.ts +33 -0
- package/src/core/tracks/audio/events.ts +41 -0
- package/src/core/tracks/text/events.ts +52 -0
- package/src/core/tracks/text/render/libass-text-renderer.ts +246 -0
- package/src/core/tracks/text/render/native-text-renderer.ts +106 -0
- package/src/core/tracks/text/render/text-renderer.ts +134 -0
- package/src/core/tracks/text/symbols.ts +17 -0
- package/src/core/tracks/text/text-track.test.ts +407 -0
- package/src/core/tracks/text/text-track.ts +413 -0
- package/src/core/tracks/text/text-tracks.ts +210 -0
- package/src/core/tracks/text/utils.ts +85 -0
- package/src/elements/bundles/cdn/player.core.ts +6 -0
- package/src/elements/bundles/cdn/player.ts +8 -0
- package/src/elements/bundles/cdn/plyr.ts +6 -0
- package/src/elements/bundles/cdn-legacy/player-with-default.ts +4 -0
- package/src/elements/bundles/cdn-legacy/player-with-layouts.ts +4 -0
- package/src/elements/bundles/cdn-legacy/player-with-plyr.ts +3 -0
- package/src/elements/bundles/cdn-legacy/player.ts +3 -0
- package/src/elements/bundles/icons.ts +3 -0
- package/src/elements/bundles/player-layouts/default.ts +7 -0
- package/src/elements/bundles/player-layouts/index.ts +9 -0
- package/src/elements/bundles/player-layouts/plyr.ts +65 -0
- package/src/elements/bundles/player-ui.ts +108 -0
- package/src/elements/bundles/player.ts +7 -0
- package/src/elements/define/announcer-element.ts +20 -0
- package/src/elements/define/buttons/airplay-button-element.ts +21 -0
- package/src/elements/define/buttons/caption-button-element.ts +22 -0
- package/src/elements/define/buttons/fullscreen-button-element.ts +22 -0
- package/src/elements/define/buttons/google-cast-button-element.ts +21 -0
- package/src/elements/define/buttons/live-button-element.ts +22 -0
- package/src/elements/define/buttons/mute-button-element.ts +23 -0
- package/src/elements/define/buttons/pip-button-element.ts +22 -0
- package/src/elements/define/buttons/play-button-element.ts +23 -0
- package/src/elements/define/buttons/seek-button-element.ts +26 -0
- package/src/elements/define/buttons/toggle-button-element.ts +21 -0
- package/src/elements/define/captions-element.ts +20 -0
- package/src/elements/define/chapter-title-element.ts +54 -0
- package/src/elements/define/controls-element.ts +26 -0
- package/src/elements/define/controls-group-element.ts +26 -0
- package/src/elements/define/gesture-element.ts +24 -0
- package/src/elements/define/layouts/default/audio-layout-element.ts +137 -0
- package/src/elements/define/layouts/default/audio-layout.ts +113 -0
- package/src/elements/define/layouts/default/icons-loader.ts +17 -0
- package/src/elements/define/layouts/default/icons.ts +86 -0
- package/src/elements/define/layouts/default/slots.ts +12 -0
- package/src/elements/define/layouts/default/ui/announcer.ts +14 -0
- package/src/elements/define/layouts/default/ui/buttons.ts +291 -0
- package/src/elements/define/layouts/default/ui/captions.ts +14 -0
- package/src/elements/define/layouts/default/ui/controls.ts +5 -0
- package/src/elements/define/layouts/default/ui/keyboard-display.ts +114 -0
- package/src/elements/define/layouts/default/ui/menu/accessibility-menu.ts +79 -0
- package/src/elements/define/layouts/default/ui/menu/audio-menu.ts +135 -0
- package/src/elements/define/layouts/default/ui/menu/captions-menu.ts +114 -0
- package/src/elements/define/layouts/default/ui/menu/chapters-menu.ts +117 -0
- package/src/elements/define/layouts/default/ui/menu/episodes-menu.ts +133 -0
- package/src/elements/define/layouts/default/ui/menu/font-menu.ts +253 -0
- package/src/elements/define/layouts/default/ui/menu/items/menu-checkbox.ts +67 -0
- package/src/elements/define/layouts/default/ui/menu/items/menu-items.ts +108 -0
- package/src/elements/define/layouts/default/ui/menu/items/menu-slider.ts +59 -0
- package/src/elements/define/layouts/default/ui/menu/menu-portal.ts +56 -0
- package/src/elements/define/layouts/default/ui/menu/playback-menu.ts +183 -0
- package/src/elements/define/layouts/default/ui/menu/settings-menu.ts +98 -0
- package/src/elements/define/layouts/default/ui/slider.ts +112 -0
- package/src/elements/define/layouts/default/ui/time.ts +41 -0
- package/src/elements/define/layouts/default/ui/title.ts +25 -0
- package/src/elements/define/layouts/default/ui/utils.ts +10 -0
- package/src/elements/define/layouts/default/video-layout-element.ts +125 -0
- package/src/elements/define/layouts/default/video-layout.ts +353 -0
- package/src/elements/define/layouts/icons/icons-loader.ts +47 -0
- package/src/elements/define/layouts/icons/layout-icons-loader.ts +24 -0
- package/src/elements/define/layouts/layout-element.ts +78 -0
- package/src/elements/define/layouts/layout-name.ts +15 -0
- package/src/elements/define/layouts/plyr/icons/plyr-airplay.js +1 -0
- package/src/elements/define/layouts/plyr/icons/plyr-captions-off.js +1 -0
- package/src/elements/define/layouts/plyr/icons/plyr-captions-on.js +1 -0
- package/src/elements/define/layouts/plyr/icons/plyr-download.js +1 -0
- package/src/elements/define/layouts/plyr/icons/plyr-enter-fullscreen.js +1 -0
- package/src/elements/define/layouts/plyr/icons/plyr-exit-fullscreen.js +1 -0
- package/src/elements/define/layouts/plyr/icons/plyr-fast-forward.js +1 -0
- package/src/elements/define/layouts/plyr/icons/plyr-muted.js +1 -0
- package/src/elements/define/layouts/plyr/icons/plyr-pause.js +1 -0
- package/src/elements/define/layouts/plyr/icons/plyr-pip.js +1 -0
- package/src/elements/define/layouts/plyr/icons/plyr-play.js +1 -0
- package/src/elements/define/layouts/plyr/icons/plyr-restart.js +1 -0
- package/src/elements/define/layouts/plyr/icons/plyr-rewind.js +1 -0
- package/src/elements/define/layouts/plyr/icons/plyr-settings.js +1 -0
- package/src/elements/define/layouts/plyr/icons/plyr-volume.js +1 -0
- package/src/elements/define/layouts/plyr/icons-loader.ts +21 -0
- package/src/elements/define/layouts/plyr/icons.ts +34 -0
- package/src/elements/define/layouts/plyr/plyr-layout-element.ts +67 -0
- package/src/elements/define/layouts/plyr/ui.ts +657 -0
- package/src/elements/define/layouts/slot-manager.ts +61 -0
- package/src/elements/define/layouts/slot-observer.ts +70 -0
- package/src/elements/define/menus/_template.ts +47 -0
- package/src/elements/define/menus/audio-gain-group-element.ts +37 -0
- package/src/elements/define/menus/audio-radio-group-element.ts +37 -0
- package/src/elements/define/menus/captions-radio-group-element.ts +37 -0
- package/src/elements/define/menus/chapters-radio-group-element.ts +68 -0
- package/src/elements/define/menus/menu-button-element.ts +27 -0
- package/src/elements/define/menus/menu-element.ts +28 -0
- package/src/elements/define/menus/menu-item-element.ts +24 -0
- package/src/elements/define/menus/menu-items-element.ts +27 -0
- package/src/elements/define/menus/menu-portal-element.ts +35 -0
- package/src/elements/define/menus/quality-radio-group-element.ts +51 -0
- package/src/elements/define/menus/radio-element.ts +24 -0
- package/src/elements/define/menus/radio-group-element.ts +24 -0
- package/src/elements/define/menus/speed-radio-group-element.ts +37 -0
- package/src/elements/define/player-element.ts +33 -0
- package/src/elements/define/poster-element.ts +53 -0
- package/src/elements/define/provider-cast-display.ts +36 -0
- package/src/elements/define/provider-element.ts +158 -0
- package/src/elements/define/sliders/audio-gain-slider-element.ts +34 -0
- package/src/elements/define/sliders/quality-slider-element.ts +34 -0
- package/src/elements/define/sliders/slider-chapters-element.ts +53 -0
- package/src/elements/define/sliders/slider-element.ts +25 -0
- package/src/elements/define/sliders/slider-preview-element.ts +16 -0
- package/src/elements/define/sliders/slider-steps-element.ts +50 -0
- package/src/elements/define/sliders/slider-thumbnail-element.ts +48 -0
- package/src/elements/define/sliders/slider-value-element.ts +49 -0
- package/src/elements/define/sliders/slider-video-element.ts +59 -0
- package/src/elements/define/sliders/speed-slider-element.ts +34 -0
- package/src/elements/define/sliders/time-slider-element.ts +34 -0
- package/src/elements/define/sliders/volume-slider-element.ts +34 -0
- package/src/elements/define/spinner-element.ts +96 -0
- package/src/elements/define/thumbnail-element.ts +63 -0
- package/src/elements/define/time-element.ts +32 -0
- package/src/elements/define/title-element.ts +38 -0
- package/src/elements/define/tooltips/tooltip-content-element.ts +28 -0
- package/src/elements/define/tooltips/tooltip-element.ts +28 -0
- package/src/elements/define/tooltips/tooltip-trigger-element.ts +32 -0
- package/src/elements/icon.ts +30 -0
- package/src/elements/index.ts +71 -0
- package/src/elements/lit/directives/signal.ts +80 -0
- package/src/elements/lit/html.ts +11 -0
- package/src/elements/lit/lit-element.ts +23 -0
- package/src/elements/state-controller.ts +48 -0
- package/src/exports/components.ts +79 -0
- package/src/exports/core.ts +41 -0
- package/src/exports/events.ts +46 -0
- package/src/exports/font.ts +3 -0
- package/src/exports/foundation.ts +8 -0
- package/src/exports/maverick.ts +9 -0
- package/src/exports/providers.ts +42 -0
- package/src/exports/utils.ts +18 -0
- package/src/foundation/fullscreen/controller.ts +128 -0
- package/src/foundation/fullscreen/events.ts +26 -0
- package/src/foundation/list/list.ts +127 -0
- package/src/foundation/list/select-list.ts +86 -0
- package/src/foundation/list/symbols.ts +22 -0
- package/src/foundation/logger/colors.ts +33 -0
- package/src/foundation/logger/controller.ts +71 -0
- package/src/foundation/logger/events.ts +29 -0
- package/src/foundation/logger/grouped-log.ts +44 -0
- package/src/foundation/logger/log-level.ts +17 -0
- package/src/foundation/logger/log-printer.ts +119 -0
- package/src/foundation/logger/ms.ts +31 -0
- package/src/foundation/observers/focus-visible.ts +74 -0
- package/src/foundation/observers/intersection-observer.ts +60 -0
- package/src/foundation/observers/page-visibility.ts +105 -0
- package/src/foundation/observers/raf-loop.ts +29 -0
- package/src/foundation/orientation/controller.ts +139 -0
- package/src/foundation/orientation/events.ts +20 -0
- package/src/foundation/orientation/types.ts +96 -0
- package/src/foundation/queue/queue.ts +41 -0
- package/src/foundation/queue/request-queue.test.ts +139 -0
- package/src/foundation/queue/request-queue.ts +94 -0
- package/src/global/layouts/default.ts +28 -0
- package/src/global/layouts/loader.ts +5 -0
- package/src/global/layouts/plyr.ts +24 -0
- package/src/global/player.ts +144 -0
- package/src/global/plyr.ts +917 -0
- package/src/globals.d.ts +11 -0
- package/src/index.ts +10 -0
- package/src/plugins.ts +369 -0
- package/src/providers/audio/loader.ts +45 -0
- package/src/providers/audio/provider.ts +50 -0
- package/src/providers/dash/dash.ts +417 -0
- package/src/providers/dash/events.ts +585 -0
- package/src/providers/dash/lib-loader.ts +202 -0
- package/src/providers/dash/loader.ts +33 -0
- package/src/providers/dash/provider.ts +135 -0
- package/src/providers/dash/types.ts +21 -0
- package/src/providers/embed/EmbedProvider.ts +84 -0
- package/src/providers/google-cast/events.ts +53 -0
- package/src/providers/google-cast/loader.ts +174 -0
- package/src/providers/google-cast/media-info.ts +49 -0
- package/src/providers/google-cast/provider.ts +483 -0
- package/src/providers/google-cast/tracks.ts +170 -0
- package/src/providers/google-cast/types.ts +3 -0
- package/src/providers/google-cast/utils.ts +112 -0
- package/src/providers/hls/events.ts +472 -0
- package/src/providers/hls/hls.ts +290 -0
- package/src/providers/hls/lib-loader.ts +178 -0
- package/src/providers/hls/loader.ts +33 -0
- package/src/providers/hls/provider.ts +137 -0
- package/src/providers/hls/types.ts +10 -0
- package/src/providers/html/audio/audio-context.ts +60 -0
- package/src/providers/html/audio/audio-gain.ts +100 -0
- package/src/providers/html/html/342/200/223media-events.ts +338 -0
- package/src/providers/html/native-audio-tracks.ts +91 -0
- package/src/providers/html/provider.ts +141 -0
- package/src/providers/html/remote-playback.ts +94 -0
- package/src/providers/type-check.ts +61 -0
- package/src/providers/types.ts +95 -0
- package/src/providers/video/loader.ts +45 -0
- package/src/providers/video/native-hls-text-tracks.ts +69 -0
- package/src/providers/video/picture-in-picture.ts +54 -0
- package/src/providers/video/presentation/events.ts +12 -0
- package/src/providers/video/presentation/video-presentation.ts +110 -0
- package/src/providers/video/provider.ts +91 -0
- package/src/providers/vimeo/embed/command.ts +118 -0
- package/src/providers/vimeo/embed/event.ts +124 -0
- package/src/providers/vimeo/embed/message.ts +9 -0
- package/src/providers/vimeo/embed/misc.ts +57 -0
- package/src/providers/vimeo/embed/params.ts +168 -0
- package/src/providers/vimeo/loader.ts +61 -0
- package/src/providers/vimeo/provider.ts +730 -0
- package/src/providers/vimeo/utils.ts +53 -0
- package/src/providers/youtube/embed/command.ts +21 -0
- package/src/providers/youtube/embed/event.ts +1 -0
- package/src/providers/youtube/embed/message.ts +54 -0
- package/src/providers/youtube/embed/params.ts +238 -0
- package/src/providers/youtube/embed/quality.ts +35 -0
- package/src/providers/youtube/embed/state.ts +13 -0
- package/src/providers/youtube/loader.ts +61 -0
- package/src/providers/youtube/provider.ts +403 -0
- package/src/providers/youtube/utils.ts +45 -0
- package/src/tailwind.test.ts +413 -0
- package/src/test-utils/index.ts +22 -0
- package/src/test-utils/setup.ts +3 -0
- package/src/utils/aria.ts +14 -0
- package/src/utils/array.ts +3 -0
- package/src/utils/color.ts +5 -0
- package/src/utils/dom.ts +458 -0
- package/src/utils/error.ts +11 -0
- package/src/utils/language.ts +16 -0
- package/src/utils/manifest.ts +61 -0
- package/src/utils/mime.ts +101 -0
- package/src/utils/network.ts +118 -0
- package/src/utils/number.ts +25 -0
- package/src/utils/promise.ts +12 -0
- package/src/utils/scroll.ts +19 -0
- package/src/utils/support.ts +163 -0
- package/src/utils/time.test.ts +111 -0
- package/src/utils/time.ts +123 -0
- package/styles/player/base.css +153 -0
- package/styles/player/default/buffering.css +55 -0
- package/styles/player/default/buttons.css +175 -0
- package/styles/player/default/captions.css +181 -0
- package/styles/player/default/chapter-title.css +26 -0
- package/styles/player/default/controls.css +56 -0
- package/styles/player/default/gestures.css +19 -0
- package/styles/player/default/icons.css +6 -0
- package/styles/player/default/keyboard.css +148 -0
- package/styles/player/default/layouts/audio.css +417 -0
- package/styles/player/default/layouts/video.css +1082 -0
- package/styles/player/default/menus.css +959 -0
- package/styles/player/default/poster.css +52 -0
- package/styles/player/default/sliders.css +391 -0
- package/styles/player/default/theme.css +2461 -0
- package/styles/player/default/thumbnail.css +40 -0
- package/styles/player/default/time.css +45 -0
- package/styles/player/default/tooltips.css +141 -0
- package/styles/player/plyr/theme.css +1237 -0
- package/tsconfig.build.json +9 -0
- package/tsconfig.json +11 -0
- package/types/components/aria/announcer.d.ts +27 -0
- package/types/components/layouts/default/audio-layout.d.ts +15 -0
- package/types/components/layouts/default/context.d.ts +9 -0
- package/types/components/layouts/default/default-layout.d.ts +10 -0
- package/types/components/layouts/default/props.d.ts +125 -0
- package/types/components/layouts/default/translations.d.ts +6 -0
- package/types/components/layouts/default/video-layout.d.ts +15 -0
- package/types/components/layouts/plyr/context.d.ts +7 -0
- package/types/components/layouts/plyr/plyr-layout.d.ts +9 -0
- package/types/components/layouts/plyr/props.d.ts +68 -0
- package/types/components/layouts/plyr/translations.d.ts +6 -0
- package/types/components/player.d.ts +214 -0
- package/types/components/provider/provider.d.ts +24 -0
- package/types/components/provider/source-select.d.ts +10 -0
- package/types/components/provider/tracks.d.ts +7 -0
- package/types/components/ui/buttons/airplay-button.d.ts +23 -0
- package/types/components/ui/buttons/caption-button.d.ts +21 -0
- package/types/components/ui/buttons/fullscreen-button.d.ts +28 -0
- package/types/components/ui/buttons/google-cast-button.d.ts +23 -0
- package/types/components/ui/buttons/live-button.d.ts +30 -0
- package/types/components/ui/buttons/mute-button.d.ts +21 -0
- package/types/components/ui/buttons/pip-button.d.ts +22 -0
- package/types/components/ui/buttons/play-button.d.ts +21 -0
- package/types/components/ui/buttons/seek-button.d.ts +32 -0
- package/types/components/ui/buttons/toggle-button-controller.d.ts +20 -0
- package/types/components/ui/buttons/toggle-button.d.ts +29 -0
- package/types/components/ui/captions/captions-renderer.d.ts +12 -0
- package/types/components/ui/captions/captions.d.ts +22 -0
- package/types/components/ui/controls-group.d.ts +9 -0
- package/types/components/ui/controls.d.ts +38 -0
- package/types/components/ui/gesture.d.ts +64 -0
- package/types/components/ui/menu/menu-button.d.ts +37 -0
- package/types/components/ui/menu/menu-context.d.ts +23 -0
- package/types/components/ui/menu/menu-focus-controller.d.ts +14 -0
- package/types/components/ui/menu/menu-item.d.ts +9 -0
- package/types/components/ui/menu/menu-items.d.ts +44 -0
- package/types/components/ui/menu/menu-portal.d.ts +31 -0
- package/types/components/ui/menu/menu.d.ts +66 -0
- package/types/components/ui/menu/radio/radio-controller.d.ts +14 -0
- package/types/components/ui/menu/radio/radio-group-controller.d.ts +11 -0
- package/types/components/ui/menu/radio/radio-group.d.ts +40 -0
- package/types/components/ui/menu/radio/radio.d.ts +50 -0
- package/types/components/ui/menu/radio-groups/audio-gain-radio-group.d.ts +36 -0
- package/types/components/ui/menu/radio-groups/audio-radio-group.d.ts +37 -0
- package/types/components/ui/menu/radio-groups/captions-radio-group.d.ts +38 -0
- package/types/components/ui/menu/radio-groups/chapters-radio-group.d.ts +46 -0
- package/types/components/ui/menu/radio-groups/quality-radio-group.d.ts +48 -0
- package/types/components/ui/menu/radio-groups/speed-radio-group.d.ts +36 -0
- package/types/components/ui/popper/popper.d.ts +15 -0
- package/types/components/ui/poster.d.ts +47 -0
- package/types/components/ui/sliders/audio-gain-slider.d.ts +43 -0
- package/types/components/ui/sliders/quality-slider.d.ts +34 -0
- package/types/components/ui/sliders/slider/api/cssvars.d.ts +10 -0
- package/types/components/ui/sliders/slider/api/events.d.ts +57 -0
- package/types/components/ui/sliders/slider/api/state.d.ts +68 -0
- package/types/components/ui/sliders/slider/events-controller.d.ts +23 -0
- package/types/components/ui/sliders/slider/format.d.ts +8 -0
- package/types/components/ui/sliders/slider/slider-context.d.ts +13 -0
- package/types/components/ui/sliders/slider/slider-controller.d.ts +59 -0
- package/types/components/ui/sliders/slider/slider.d.ts +39 -0
- package/types/components/ui/sliders/slider/types.d.ts +1 -0
- package/types/components/ui/sliders/slider/utils.d.ts +2 -0
- package/types/components/ui/sliders/slider-preview.d.ts +34 -0
- package/types/components/ui/sliders/slider-thumbnail.d.ts +16 -0
- package/types/components/ui/sliders/slider-value.d.ts +59 -0
- package/types/components/ui/sliders/slider-video.d.ts +73 -0
- package/types/components/ui/sliders/speed-slider.d.ts +42 -0
- package/types/components/ui/sliders/time-slider/slider-chapters.d.ts +36 -0
- package/types/components/ui/sliders/time-slider/time-slider.d.ts +56 -0
- package/types/components/ui/sliders/volume-slider.d.ts +35 -0
- package/types/components/ui/thumbnails/thumbnail-loader.d.ts +47 -0
- package/types/components/ui/thumbnails/thumbnail.d.ts +50 -0
- package/types/components/ui/time.d.ts +62 -0
- package/types/components/ui/tooltip/tooltip-content.d.ts +39 -0
- package/types/components/ui/tooltip/tooltip-context.d.ts +11 -0
- package/types/components/ui/tooltip/tooltip-trigger.d.ts +14 -0
- package/types/components/ui/tooltip/tooltip.d.ts +23 -0
- package/types/core/api/media-attrs.d.ts +3 -0
- package/types/core/api/media-context.d.ts +37 -0
- package/types/core/api/media-events.d.ts +581 -0
- package/types/core/api/media-request-events.d.ts +319 -0
- package/types/core/api/player-controller.d.ts +6 -0
- package/types/core/api/player-events.d.ts +38 -0
- package/types/core/api/player-props.d.ts +163 -0
- package/types/core/api/player-state.d.ts +656 -0
- package/types/core/api/src-types.d.ts +50 -0
- package/types/core/api/types.d.ts +54 -0
- package/types/core/controls.d.ts +43 -0
- package/types/core/font/font-options.d.ts +42 -0
- package/types/core/font/font-vars.d.ts +1 -0
- package/types/core/keyboard/aria-shortcuts.d.ts +6 -0
- package/types/core/keyboard/controller.d.ts +9 -0
- package/types/core/keyboard/types.d.ts +33 -0
- package/types/core/quality/events.d.ts +43 -0
- package/types/core/quality/symbols.d.ts +6 -0
- package/types/core/quality/utils.d.ts +2 -0
- package/types/core/quality/video-quality.d.ts +52 -0
- package/types/core/state/media-events-logger.d.ts +7 -0
- package/types/core/state/media-load-controller.d.ts +6 -0
- package/types/core/state/media-player-delegate.d.ts +13 -0
- package/types/core/state/media-request-manager.d.ts +71 -0
- package/types/core/state/media-state-manager.d.ts +59 -0
- package/types/core/state/media-state-sync.d.ts +8 -0
- package/types/core/state/media-storage.d.ts +74 -0
- package/types/core/state/navigator-media-session.d.ts +5 -0
- package/types/core/state/remote-control.d.ts +288 -0
- package/types/core/state/tracked-media-events.d.ts +2 -0
- package/types/core/time-ranges.d.ts +12 -0
- package/types/core/tracks/audio/audio-tracks.d.ts +32 -0
- package/types/core/tracks/audio/events.d.ts +37 -0
- package/types/core/tracks/text/events.d.ts +49 -0
- package/types/core/tracks/text/render/libass-text-renderer.d.ts +181 -0
- package/types/core/tracks/text/render/native-text-renderer.d.ts +13 -0
- package/types/core/tracks/text/render/text-renderer.d.ts +17 -0
- package/types/core/tracks/text/symbols.d.ts +11 -0
- package/types/core/tracks/text/text-track.d.ts +137 -0
- package/types/core/tracks/text/text-tracks.d.ts +55 -0
- package/types/core/tracks/text/utils.d.ts +8 -0
- package/types/elements/bundles/cdn/player.core.d.ts +5 -0
- package/types/elements/bundles/cdn/player.d.ts +7 -0
- package/types/elements/bundles/cdn/plyr.d.ts +5 -0
- package/types/elements/bundles/cdn-legacy/player-with-default.d.ts +4 -0
- package/types/elements/bundles/cdn-legacy/player-with-layouts.d.ts +4 -0
- package/types/elements/bundles/cdn-legacy/player-with-plyr.d.ts +3 -0
- package/types/elements/bundles/cdn-legacy/player.d.ts +3 -0
- package/types/elements/bundles/icons.d.ts +2 -0
- package/types/elements/bundles/player-layouts/default.d.ts +1 -0
- package/types/elements/bundles/player-layouts/index.d.ts +1 -0
- package/types/elements/bundles/player-layouts/plyr.d.ts +1 -0
- package/types/elements/bundles/player-ui.d.ts +1 -0
- package/types/elements/bundles/player.d.ts +1 -0
- package/types/elements/define/announcer-element.d.ts +18 -0
- package/types/elements/define/buttons/airplay-button-element.d.ts +19 -0
- package/types/elements/define/buttons/caption-button-element.d.ts +20 -0
- package/types/elements/define/buttons/fullscreen-button-element.d.ts +20 -0
- package/types/elements/define/buttons/google-cast-button-element.d.ts +19 -0
- package/types/elements/define/buttons/live-button-element.d.ts +20 -0
- package/types/elements/define/buttons/mute-button-element.d.ts +21 -0
- package/types/elements/define/buttons/pip-button-element.d.ts +20 -0
- package/types/elements/define/buttons/play-button-element.d.ts +21 -0
- package/types/elements/define/buttons/seek-button-element.d.ts +24 -0
- package/types/elements/define/buttons/toggle-button-element.d.ts +19 -0
- package/types/elements/define/captions-element.d.ts +18 -0
- package/types/elements/define/chapter-title-element.d.ts +30 -0
- package/types/elements/define/controls-element.d.ts +24 -0
- package/types/elements/define/controls-group-element.d.ts +24 -0
- package/types/elements/define/gesture-element.d.ts +22 -0
- package/types/elements/define/layouts/default/audio-layout-element.d.ts +29 -0
- package/types/elements/define/layouts/default/audio-layout.d.ts +1 -0
- package/types/elements/define/layouts/default/icons-loader.d.ts +5 -0
- package/types/elements/define/layouts/default/icons.d.ts +52 -0
- package/types/elements/define/layouts/default/slots.d.ts +2 -0
- package/types/elements/define/layouts/default/ui/announcer.d.ts +1 -0
- package/types/elements/define/layouts/default/ui/buttons.d.ts +31 -0
- package/types/elements/define/layouts/default/ui/captions.d.ts +1 -0
- package/types/elements/define/layouts/default/ui/controls.d.ts +1 -0
- package/types/elements/define/layouts/default/ui/keyboard-display.d.ts +1 -0
- package/types/elements/define/layouts/default/ui/menu/accessibility-menu.d.ts +1 -0
- package/types/elements/define/layouts/default/ui/menu/audio-menu.d.ts +1 -0
- package/types/elements/define/layouts/default/ui/menu/captions-menu.d.ts +1 -0
- package/types/elements/define/layouts/default/ui/menu/chapters-menu.d.ts +8 -0
- package/types/elements/define/layouts/default/ui/menu/episodes-menu.d.ts +8 -0
- package/types/elements/define/layouts/default/ui/menu/font-menu.d.ts +1 -0
- package/types/elements/define/layouts/default/ui/menu/items/menu-checkbox.d.ts +8 -0
- package/types/elements/define/layouts/default/ui/menu/items/menu-items.d.ts +26 -0
- package/types/elements/define/layouts/default/ui/menu/items/menu-slider.d.ts +3 -0
- package/types/elements/define/layouts/default/ui/menu/menu-portal.d.ts +4 -0
- package/types/elements/define/layouts/default/ui/menu/playback-menu.d.ts +1 -0
- package/types/elements/define/layouts/default/ui/menu/settings-menu.d.ts +8 -0
- package/types/elements/define/layouts/default/ui/slider.d.ts +10 -0
- package/types/elements/define/layouts/default/ui/time.d.ts +3 -0
- package/types/elements/define/layouts/default/ui/title.d.ts +2 -0
- package/types/elements/define/layouts/default/ui/utils.d.ts +3 -0
- package/types/elements/define/layouts/default/video-layout-element.d.ts +29 -0
- package/types/elements/define/layouts/default/video-layout.d.ts +5 -0
- package/types/elements/define/layouts/icons/icons-loader.d.ts +11 -0
- package/types/elements/define/layouts/icons/layout-icons-loader.d.ts +4 -0
- package/types/elements/define/layouts/layout-element.d.ts +38 -0
- package/types/elements/define/layouts/layout-name.d.ts +2 -0
- package/types/elements/define/layouts/plyr/icons/plyr-airplay.d.ts +2 -0
- package/types/elements/define/layouts/plyr/icons/plyr-captions-off.d.ts +2 -0
- package/types/elements/define/layouts/plyr/icons/plyr-captions-on.d.ts +2 -0
- package/types/elements/define/layouts/plyr/icons/plyr-download.d.ts +2 -0
- package/types/elements/define/layouts/plyr/icons/plyr-enter-fullscreen.d.ts +2 -0
- package/types/elements/define/layouts/plyr/icons/plyr-exit-fullscreen.d.ts +2 -0
- package/types/elements/define/layouts/plyr/icons/plyr-fast-forward.d.ts +2 -0
- package/types/elements/define/layouts/plyr/icons/plyr-muted.d.ts +2 -0
- package/types/elements/define/layouts/plyr/icons/plyr-pause.d.ts +2 -0
- package/types/elements/define/layouts/plyr/icons/plyr-pip.d.ts +2 -0
- package/types/elements/define/layouts/plyr/icons/plyr-play.d.ts +2 -0
- package/types/elements/define/layouts/plyr/icons/plyr-restart.d.ts +2 -0
- package/types/elements/define/layouts/plyr/icons/plyr-rewind.d.ts +2 -0
- package/types/elements/define/layouts/plyr/icons/plyr-settings.d.ts +2 -0
- package/types/elements/define/layouts/plyr/icons/plyr-volume.d.ts +2 -0
- package/types/elements/define/layouts/plyr/icons-loader.d.ts +5 -0
- package/types/elements/define/layouts/plyr/icons.d.ts +18 -0
- package/types/elements/define/layouts/plyr/plyr-layout-element.d.ts +26 -0
- package/types/elements/define/layouts/plyr/ui.d.ts +3 -0
- package/types/elements/define/layouts/slot-manager.d.ts +7 -0
- package/types/elements/define/layouts/slot-observer.d.ts +12 -0
- package/types/elements/define/menus/_template.d.ts +7 -0
- package/types/elements/define/menus/audio-gain-group-element.d.ts +31 -0
- package/types/elements/define/menus/audio-radio-group-element.d.ts +31 -0
- package/types/elements/define/menus/captions-radio-group-element.d.ts +31 -0
- package/types/elements/define/menus/chapters-radio-group-element.d.ts +36 -0
- package/types/elements/define/menus/menu-button-element.d.ts +25 -0
- package/types/elements/define/menus/menu-element.d.ts +26 -0
- package/types/elements/define/menus/menu-item-element.d.ts +22 -0
- package/types/elements/define/menus/menu-items-element.d.ts +25 -0
- package/types/elements/define/menus/menu-portal-element.d.ts +25 -0
- package/types/elements/define/menus/quality-radio-group-element.d.ts +33 -0
- package/types/elements/define/menus/radio-element.d.ts +22 -0
- package/types/elements/define/menus/radio-group-element.d.ts +22 -0
- package/types/elements/define/menus/speed-radio-group-element.d.ts +31 -0
- package/types/elements/define/player-element.d.ts +24 -0
- package/types/elements/define/poster-element.d.ts +25 -0
- package/types/elements/define/provider-cast-display.d.ts +2 -0
- package/types/elements/define/provider-element.d.ts +25 -0
- package/types/elements/define/sliders/audio-gain-slider-element.d.ts +32 -0
- package/types/elements/define/sliders/quality-slider-element.d.ts +32 -0
- package/types/elements/define/sliders/slider-chapters-element.d.ts +31 -0
- package/types/elements/define/sliders/slider-element.d.ts +23 -0
- package/types/elements/define/sliders/slider-preview-element.d.ts +14 -0
- package/types/elements/define/sliders/slider-steps-element.d.ts +28 -0
- package/types/elements/define/sliders/slider-thumbnail-element.d.ts +26 -0
- package/types/elements/define/sliders/slider-value-element.d.ts +37 -0
- package/types/elements/define/sliders/slider-video-element.d.ts +25 -0
- package/types/elements/define/sliders/speed-slider-element.d.ts +32 -0
- package/types/elements/define/sliders/time-slider-element.d.ts +32 -0
- package/types/elements/define/sliders/volume-slider-element.d.ts +32 -0
- package/types/elements/define/spinner-element.d.ts +50 -0
- package/types/elements/define/thumbnail-element.d.ts +29 -0
- package/types/elements/define/time-element.d.ts +24 -0
- package/types/elements/define/title-element.d.ts +23 -0
- package/types/elements/define/tooltips/tooltip-content-element.d.ts +26 -0
- package/types/elements/define/tooltips/tooltip-element.d.ts +26 -0
- package/types/elements/define/tooltips/tooltip-trigger-element.d.ts +27 -0
- package/types/elements/icon.d.ts +10 -0
- package/types/elements/index.d.ts +56 -0
- package/types/elements/lit/directives/signal.d.ts +1 -0
- package/types/elements/lit/html.d.ts +4 -0
- package/types/elements/lit/lit-element.d.ts +8 -0
- package/types/elements/state-controller.d.ts +5 -0
- package/types/exports/components.d.ts +59 -0
- package/types/exports/core.d.ts +26 -0
- package/types/exports/events.d.ts +32 -0
- package/types/exports/font.d.ts +2 -0
- package/types/exports/foundation.d.ts +8 -0
- package/types/exports/maverick.d.ts +1 -0
- package/types/exports/providers.d.ts +22 -0
- package/types/exports/utils.d.ts +4 -0
- package/types/foundation/fullscreen/controller.d.ts +39 -0
- package/types/foundation/fullscreen/events.d.ts +25 -0
- package/types/foundation/list/list.d.ts +64 -0
- package/types/foundation/list/select-list.d.ts +30 -0
- package/types/foundation/list/symbols.d.ts +14 -0
- package/types/foundation/logger/colors.d.ts +5 -0
- package/types/foundation/logger/controller.d.ts +20 -0
- package/types/foundation/logger/events.d.ts +26 -0
- package/types/foundation/logger/grouped-log.d.ts +22 -0
- package/types/foundation/logger/log-level.d.ts +15 -0
- package/types/foundation/logger/log-printer.d.ts +11 -0
- package/types/foundation/logger/ms.d.ts +4 -0
- package/types/foundation/observers/focus-visible.d.ts +7 -0
- package/types/foundation/observers/intersection-observer.d.ts +36 -0
- package/types/foundation/observers/page-visibility.d.ts +37 -0
- package/types/foundation/observers/raf-loop.d.ts +6 -0
- package/types/foundation/orientation/controller.d.ts +62 -0
- package/types/foundation/orientation/events.d.ts +16 -0
- package/types/foundation/orientation/types.d.ts +85 -0
- package/types/foundation/queue/queue.d.ts +24 -0
- package/types/foundation/queue/request-queue.d.ts +42 -0
- package/types/global/layouts/default.d.ts +9 -0
- package/types/global/layouts/loader.d.ts +5 -0
- package/types/global/layouts/plyr.d.ts +9 -0
- package/types/global/player.d.ts +26 -0
- package/types/global/plyr.d.ts +344 -0
- package/types/index.d.ts +6 -0
- package/types/plugins.d.ts +11 -0
- package/types/providers/audio/loader.d.ts +12 -0
- package/types/providers/audio/provider.d.ts +29 -0
- package/types/providers/dash/dash.d.ts +15 -0
- package/types/providers/dash/events.d.ts +570 -0
- package/types/providers/dash/lib-loader.d.ts +6 -0
- package/types/providers/dash/loader.d.ts +10 -0
- package/types/providers/dash/provider.d.ts +62 -0
- package/types/providers/dash/types.d.ts +13 -0
- package/types/providers/embed/EmbedProvider.d.ts +18 -0
- package/types/providers/google-cast/events.d.ts +36 -0
- package/types/providers/google-cast/loader.d.ts +18 -0
- package/types/providers/google-cast/media-info.d.ts +11 -0
- package/types/providers/google-cast/provider.d.ts +48 -0
- package/types/providers/google-cast/tracks.d.ts +10 -0
- package/types/providers/google-cast/types.d.ts +3 -0
- package/types/providers/google-cast/utils.d.ts +34 -0
- package/types/providers/hls/events.d.ts +463 -0
- package/types/providers/hls/hls.d.ts +14 -0
- package/types/providers/hls/lib-loader.d.ts +6 -0
- package/types/providers/hls/loader.d.ts +10 -0
- package/types/providers/hls/provider.d.ts +64 -0
- package/types/providers/hls/types.d.ts +9 -0
- package/types/providers/html/audio/audio-context.d.ts +6 -0
- package/types/providers/html/audio/audio-gain.d.ts +10 -0
- package/types/providers/html/html/342/200/223media-events.d.ts +6 -0
- package/types/providers/html/native-audio-tracks.d.ts +6 -0
- package/types/providers/html/provider.d.ts +34 -0
- package/types/providers/html/remote-playback.d.ts +18 -0
- package/types/providers/type-check.d.ts +28 -0
- package/types/providers/types.d.ts +95 -0
- package/types/providers/video/loader.d.ts +12 -0
- package/types/providers/video/native-hls-text-tracks.d.ts +9 -0
- package/types/providers/video/picture-in-picture.d.ts +16 -0
- package/types/providers/video/presentation/events.d.ts +11 -0
- package/types/providers/video/presentation/video-presentation.d.ts +30 -0
- package/types/providers/video/provider.d.ts +34 -0
- package/types/providers/vimeo/embed/command.d.ts +81 -0
- package/types/providers/vimeo/embed/event.d.ts +58 -0
- package/types/providers/vimeo/embed/message.d.ts +8 -0
- package/types/providers/vimeo/embed/misc.d.ts +52 -0
- package/types/providers/vimeo/embed/params.d.ts +148 -0
- package/types/providers/vimeo/loader.d.ts +14 -0
- package/types/providers/vimeo/provider.d.ts +61 -0
- package/types/providers/vimeo/utils.d.ts +6 -0
- package/types/providers/youtube/embed/command.d.ts +13 -0
- package/types/providers/youtube/embed/event.d.ts +1 -0
- package/types/providers/youtube/embed/message.d.ts +50 -0
- package/types/providers/youtube/embed/params.d.ts +218 -0
- package/types/providers/youtube/embed/quality.d.ts +2 -0
- package/types/providers/youtube/embed/state.d.ts +12 -0
- package/types/providers/youtube/loader.d.ts +14 -0
- package/types/providers/youtube/provider.d.ts +61 -0
- package/types/providers/youtube/utils.d.ts +2 -0
- package/types/utils/aria.d.ts +4 -0
- package/types/utils/array.d.ts +1 -0
- package/types/utils/color.d.ts +1 -0
- package/types/utils/dom.d.ts +41 -0
- package/types/utils/error.d.ts +2 -0
- package/types/utils/language.d.ts +8 -0
- package/types/utils/manifest.d.ts +3 -0
- package/types/utils/mime.d.ts +15 -0
- package/types/utils/network.d.ts +17 -0
- package/types/utils/number.d.ts +17 -0
- package/types/utils/promise.d.ts +1 -0
- package/types/utils/scroll.d.ts +5 -0
- package/types/utils/support.d.ts +72 -0
- package/types/utils/time.d.ts +57 -0
- package/vite.config.ts +61 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { onDispose, peek, signal, ViewController } from 'maverick.js';
|
|
2
|
+
import { listenEvent } from 'maverick.js/std';
|
|
3
|
+
|
|
4
|
+
import { canOrientScreen } from '../../utils/support';
|
|
5
|
+
import type { ScreenOrientationEvents } from './events';
|
|
6
|
+
import type { ScreenOrientationLockType, ScreenOrientationType } from './types';
|
|
7
|
+
|
|
8
|
+
export class ScreenOrientationController extends ViewController<{}, {}, ScreenOrientationEvents> {
|
|
9
|
+
#type = signal(this.#getScreenOrientation());
|
|
10
|
+
#locked = signal(false);
|
|
11
|
+
#currentLock: ScreenOrientationLockType | undefined;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The current screen orientation type.
|
|
15
|
+
*
|
|
16
|
+
* @signal
|
|
17
|
+
* @see {@link https://developer.mozilla.org/en-US/docs/Web/API/ScreenOrientation}
|
|
18
|
+
* @see https://w3c.github.io/screen-orientation/#screen-orientation-types-and-locks
|
|
19
|
+
*/
|
|
20
|
+
get type(): ScreenOrientationType | undefined {
|
|
21
|
+
return this.#type();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Whether the screen orientation is currently locked.
|
|
26
|
+
*
|
|
27
|
+
* @signal
|
|
28
|
+
* @see {@link https://developer.mozilla.org/en-US/docs/Web/API/ScreenOrientation}
|
|
29
|
+
* @see https://w3c.github.io/screen-orientation/#screen-orientation-types-and-locks
|
|
30
|
+
*/
|
|
31
|
+
get locked(): boolean {
|
|
32
|
+
return this.#locked();
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Whether the viewport is in a portrait orientation.
|
|
37
|
+
*
|
|
38
|
+
* @signal
|
|
39
|
+
*/
|
|
40
|
+
get portrait() {
|
|
41
|
+
return this.#type().startsWith('portrait');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Whether the viewport is in a landscape orientation.
|
|
46
|
+
*
|
|
47
|
+
* @signal
|
|
48
|
+
*/
|
|
49
|
+
get landscape() {
|
|
50
|
+
return this.#type().startsWith('landscape');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Whether the native Screen Orientation API is available.
|
|
55
|
+
*/
|
|
56
|
+
static readonly supported = canOrientScreen();
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Whether the native Screen Orientation API is available.
|
|
60
|
+
*/
|
|
61
|
+
get supported() {
|
|
62
|
+
return ScreenOrientationController.supported;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
protected override onConnect() {
|
|
66
|
+
if (this.supported) {
|
|
67
|
+
listenEvent(screen.orientation, 'change', this.#onOrientationChange.bind(this));
|
|
68
|
+
} else {
|
|
69
|
+
const query = window.matchMedia('(orientation: landscape)');
|
|
70
|
+
query.onchange = this.#onOrientationChange.bind(this);
|
|
71
|
+
onDispose(() => (query.onchange = null));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
onDispose(this.#onDisconnect.bind(this));
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async #onDisconnect() {
|
|
78
|
+
if (this.supported && this.#locked()) await this.unlock();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
#onOrientationChange(event: Event) {
|
|
82
|
+
this.#type.set(this.#getScreenOrientation()!);
|
|
83
|
+
this.dispatch('orientation-change', {
|
|
84
|
+
detail: {
|
|
85
|
+
orientation: peek(this.#type),
|
|
86
|
+
lock: this.#currentLock,
|
|
87
|
+
},
|
|
88
|
+
trigger: event,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Locks the orientation of the screen to the desired orientation type using the
|
|
94
|
+
* Screen Orientation API.
|
|
95
|
+
*
|
|
96
|
+
* @param lockType - The screen lock orientation type.
|
|
97
|
+
* @throws Error - If screen orientation API is unavailable.
|
|
98
|
+
* @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Screen/orientation}
|
|
99
|
+
* @see {@link https://w3c.github.io/screen-orientation}
|
|
100
|
+
*/
|
|
101
|
+
async lock(lockType: ScreenOrientationLockType): Promise<void> {
|
|
102
|
+
if (peek(this.#locked) || this.#currentLock === lockType) return;
|
|
103
|
+
this.#assertScreenOrientationAPI();
|
|
104
|
+
await (screen.orientation as any).lock(lockType);
|
|
105
|
+
this.#locked.set(true);
|
|
106
|
+
this.#currentLock = lockType;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Unlocks the orientation of the screen to it's default state using the Screen Orientation
|
|
111
|
+
* API. This method will throw an error if the API is unavailable.
|
|
112
|
+
*
|
|
113
|
+
* @throws Error - If screen orientation API is unavailable.
|
|
114
|
+
* @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Screen/orientation}
|
|
115
|
+
* @see {@link https://w3c.github.io/screen-orientation}
|
|
116
|
+
*/
|
|
117
|
+
async unlock(): Promise<void> {
|
|
118
|
+
if (!peek(this.#locked)) return;
|
|
119
|
+
this.#assertScreenOrientationAPI();
|
|
120
|
+
this.#currentLock = undefined;
|
|
121
|
+
await screen.orientation.unlock();
|
|
122
|
+
this.#locked.set(false);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
#assertScreenOrientationAPI() {
|
|
126
|
+
if (this.supported) return;
|
|
127
|
+
throw Error(
|
|
128
|
+
__DEV__
|
|
129
|
+
? '[vidstack] screen orientation API is not available'
|
|
130
|
+
: '[vidstack] no orientation API',
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
#getScreenOrientation(): ScreenOrientationType {
|
|
135
|
+
if (__SERVER__) return 'portrait-primary';
|
|
136
|
+
if (this.supported) return window.screen!.orientation!.type;
|
|
137
|
+
return window.innerWidth >= window.innerHeight ? 'landscape-primary' : 'portrait-primary';
|
|
138
|
+
}
|
|
139
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { DOMEvent } from 'maverick.js/std';
|
|
2
|
+
|
|
3
|
+
import type { ScreenOrientationLockType, ScreenOrientationType } from './types';
|
|
4
|
+
|
|
5
|
+
export interface ScreenOrientationEvents {
|
|
6
|
+
'orientation-change': ScreenOrientationChangeEvent;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface ScreenOrientationChangeEventDetail {
|
|
10
|
+
orientation: ScreenOrientationType;
|
|
11
|
+
lock?: ScreenOrientationLockType;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Fired when the current screen orientation changes.
|
|
16
|
+
*
|
|
17
|
+
* @detail orientation
|
|
18
|
+
*/
|
|
19
|
+
export interface ScreenOrientationChangeEvent
|
|
20
|
+
extends DOMEvent<ScreenOrientationChangeEventDetail> {}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
export type ScreenOrientationType =
|
|
2
|
+
/**
|
|
3
|
+
* Landscape-primary is an orientation where the screen width is greater than the screen height.
|
|
4
|
+
* If the device's natural orientation is landscape, then it is in landscape-primary when held
|
|
5
|
+
* in that position. If the device's natural orientation is portrait, the user agent sets
|
|
6
|
+
* landscape-primary from the two options as shown in the screen orientation values table.
|
|
7
|
+
*/
|
|
8
|
+
| 'landscape-primary'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Landscape-secondary is an orientation where the screen width is greater than the screen
|
|
12
|
+
* height. If the device's natural orientation is landscape, it is in landscape-secondary when
|
|
13
|
+
* rotated 180º from its natural orientation. If the device's natural orientation is portrait,
|
|
14
|
+
* the user agent sets landscape-secondary from the two options as shown in the screen
|
|
15
|
+
* orientation values table.
|
|
16
|
+
*/
|
|
17
|
+
| 'landscape-secondary'
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Portrait-primary is an orientation where the screen width is less than or equal to the screen
|
|
21
|
+
* height. If the device's natural orientation is portrait, then it is in portrait-primary when
|
|
22
|
+
* held in that position. If the device's natural orientation is landscape, the user agent sets
|
|
23
|
+
* portrait-primary from the two options as shown in the screen orientation values table.
|
|
24
|
+
*/
|
|
25
|
+
| 'portrait-primary'
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Portrait-secondary is an orientation where the screen width is less than or equal to the
|
|
29
|
+
* screen height. If the device's natural orientation is portrait, then it is in
|
|
30
|
+
* portrait-secondary when rotated 180º from its natural position. If the device's natural
|
|
31
|
+
* orientation is landscape, the user agent sets portrait-secondary from the two options as
|
|
32
|
+
* shown in the screen orientation values table.
|
|
33
|
+
*/
|
|
34
|
+
| 'portrait-secondary';
|
|
35
|
+
|
|
36
|
+
export type ScreenOrientationLockType =
|
|
37
|
+
/**
|
|
38
|
+
* Any is an orientation that means the screen can be locked to any one of portrait-primary,
|
|
39
|
+
* portrait-secondary, landscape-primary and landscape-secondary.
|
|
40
|
+
*/
|
|
41
|
+
| 'any'
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Landscape is an orientation where the screen width is greater than the screen height and
|
|
45
|
+
* depending on platform convention locking the screen to landscape can represent
|
|
46
|
+
* landscape-primary, landscape-secondary or both.
|
|
47
|
+
*/
|
|
48
|
+
| 'landscape'
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Landscape-primary is an orientation where the screen width is greater than the screen height.
|
|
52
|
+
* If the device's natural orientation is landscape, then it is in landscape-primary when held
|
|
53
|
+
* in that position. If the device's natural orientation is portrait, the user agent sets
|
|
54
|
+
* landscape-primary from the two options as shown in the screen orientation values table.
|
|
55
|
+
*/
|
|
56
|
+
| 'landscape-primary'
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Landscape-secondary is an orientation where the screen width is greater than the screen
|
|
60
|
+
* height. If the device's natural orientation is landscape, it is in landscape-secondary when
|
|
61
|
+
* rotated 180º from its natural orientation. If the device's natural orientation is portrait,
|
|
62
|
+
* the user agent sets landscape-secondary from the two options as shown in the screen
|
|
63
|
+
* orientation values table.
|
|
64
|
+
*/
|
|
65
|
+
| 'landscape-secondary'
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Natural is an orientation that refers to either portrait-primary or landscape-primary
|
|
69
|
+
* depending on the device's usual orientation. This orientation is usually provided by the
|
|
70
|
+
* underlying operating system.
|
|
71
|
+
*/
|
|
72
|
+
| 'natural'
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Portrait is an orientation where the screen width is less than or equal to the screen height
|
|
76
|
+
* and depending on platform convention locking the screen to portrait can represent
|
|
77
|
+
* portrait-primary, portrait-secondary or both.
|
|
78
|
+
*/
|
|
79
|
+
| 'portrait'
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Portrait-primary is an orientation where the screen width is less than or equal to the screen
|
|
83
|
+
* height. If the device's natural orientation is portrait, then it is in portrait-primary when
|
|
84
|
+
* held in that position. If the device's natural orientation is landscape, the user agent sets
|
|
85
|
+
* portrait-primary from the two options as shown in the screen orientation values table.
|
|
86
|
+
*/
|
|
87
|
+
| 'portrait-primary'
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Portrait-secondary is an orientation where the screen width is less than or equal to the
|
|
91
|
+
* screen height. If the device's natural orientation is portrait, then it is in
|
|
92
|
+
* portrait-secondary when rotated 180º from its natural position. If the device's natural
|
|
93
|
+
* orientation is landscape, the user agent sets portrait-secondary from the two options as
|
|
94
|
+
* shown in the screen orientation values table.
|
|
95
|
+
*/
|
|
96
|
+
| 'portrait-secondary';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export class Queue<Items> {
|
|
2
|
+
#queue = new Map<keyof Items, any>();
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Queue the given `item` under the given `key` to be processed at a later time by calling
|
|
6
|
+
* `serve(key)`.
|
|
7
|
+
*/
|
|
8
|
+
enqueue<T extends keyof Items>(key: T, item: Items[T]) {
|
|
9
|
+
this.#queue.set(key, item);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Process item in queue for the given `key`.
|
|
14
|
+
*/
|
|
15
|
+
serve<T extends keyof Items>(key: T): Items[T] | undefined {
|
|
16
|
+
const value = this.peek(key);
|
|
17
|
+
this.#queue.delete(key);
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Peek at item in queue for the given `key`.
|
|
23
|
+
*/
|
|
24
|
+
peek<T extends keyof Items>(key: T): Items[T] | undefined {
|
|
25
|
+
return this.#queue.get(key);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Removes queued item under the given `key`.
|
|
30
|
+
*/
|
|
31
|
+
delete(key: keyof Items) {
|
|
32
|
+
this.#queue.delete(key);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Clear all items in the queue.
|
|
37
|
+
*/
|
|
38
|
+
clear() {
|
|
39
|
+
this.#queue.clear();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { RequestQueue } from './request-queue';
|
|
2
|
+
|
|
3
|
+
it('should return correct queue size', () => {
|
|
4
|
+
const q = new RequestQueue();
|
|
5
|
+
|
|
6
|
+
q.enqueue('a', () => {});
|
|
7
|
+
q.enqueue('b', () => {});
|
|
8
|
+
|
|
9
|
+
expect(q.size).to.equal(2);
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it('should serve items in queue', async () => {
|
|
13
|
+
const q = new RequestQueue();
|
|
14
|
+
|
|
15
|
+
const itemA = vi.fn();
|
|
16
|
+
const itemB = vi.fn();
|
|
17
|
+
|
|
18
|
+
q.enqueue('a', itemA);
|
|
19
|
+
q.enqueue('b', itemB);
|
|
20
|
+
|
|
21
|
+
expect(itemA).not.toHaveBeenCalled();
|
|
22
|
+
expect(itemB).not.toHaveBeenCalled();
|
|
23
|
+
|
|
24
|
+
await q.serve('a');
|
|
25
|
+
expect(itemA).toHaveBeenCalledOnce();
|
|
26
|
+
expect(itemB).not.toHaveBeenCalled();
|
|
27
|
+
expect(q.size).to.equal(1);
|
|
28
|
+
|
|
29
|
+
await q.serve('b');
|
|
30
|
+
expect(itemB).toHaveBeenCalledOnce();
|
|
31
|
+
expect(q.size).to.equal(0);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('should flush queue in-order', async () => {
|
|
35
|
+
const q = new RequestQueue();
|
|
36
|
+
|
|
37
|
+
let timestampA, timestampB, timestampC;
|
|
38
|
+
|
|
39
|
+
const itemA = () => {
|
|
40
|
+
timestampA = process.hrtime();
|
|
41
|
+
};
|
|
42
|
+
const itemB = () => {
|
|
43
|
+
timestampB = process.hrtime();
|
|
44
|
+
};
|
|
45
|
+
const itemC = () => {
|
|
46
|
+
timestampC = process.hrtime();
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
q.enqueue('a', itemA);
|
|
50
|
+
q.enqueue('b', itemB);
|
|
51
|
+
q.enqueue('c', itemC);
|
|
52
|
+
|
|
53
|
+
q.start();
|
|
54
|
+
|
|
55
|
+
expect(timestampA < timestampB && timestampA < timestampC).to.be.true;
|
|
56
|
+
expect(timestampB < timestampC).to.be.true;
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('should flush pending requests on start', async () => {
|
|
60
|
+
const q = new RequestQueue();
|
|
61
|
+
|
|
62
|
+
const itemA = vi.fn();
|
|
63
|
+
const itemB = vi.fn();
|
|
64
|
+
|
|
65
|
+
q.enqueue('a', itemA);
|
|
66
|
+
q.enqueue('b', itemB);
|
|
67
|
+
|
|
68
|
+
q.start();
|
|
69
|
+
|
|
70
|
+
expect(itemA).toHaveBeenCalledOnce();
|
|
71
|
+
expect(itemB).toHaveBeenCalledOnce();
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('should serve immediately once started', async () => {
|
|
75
|
+
const q = new RequestQueue();
|
|
76
|
+
|
|
77
|
+
q.start();
|
|
78
|
+
|
|
79
|
+
const itemA = vi.fn();
|
|
80
|
+
const itemB = vi.fn();
|
|
81
|
+
|
|
82
|
+
q.enqueue('a', itemA);
|
|
83
|
+
q.enqueue('b', itemB);
|
|
84
|
+
|
|
85
|
+
expect(itemA).toHaveBeenCalledOnce();
|
|
86
|
+
expect(itemB).toHaveBeenCalledOnce();
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
it('should not serve immediately once stopped', async () => {
|
|
90
|
+
const q = new RequestQueue();
|
|
91
|
+
|
|
92
|
+
q.start();
|
|
93
|
+
q.stop();
|
|
94
|
+
|
|
95
|
+
const itemA = vi.fn();
|
|
96
|
+
const itemB = vi.fn();
|
|
97
|
+
|
|
98
|
+
q.enqueue('a', itemA);
|
|
99
|
+
q.enqueue('b', itemB);
|
|
100
|
+
|
|
101
|
+
expect(itemA).not.toHaveBeenCalled();
|
|
102
|
+
expect(itemB).not.toHaveBeenCalled();
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it('should release pending flush when started', async () => {
|
|
106
|
+
const q = new RequestQueue();
|
|
107
|
+
|
|
108
|
+
setTimeout(() => {
|
|
109
|
+
q.start();
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
await q.waitForFlush();
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it('should release pending flush when destroyed', async () => {
|
|
116
|
+
const q = new RequestQueue();
|
|
117
|
+
|
|
118
|
+
setTimeout(() => {
|
|
119
|
+
q.reset();
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
await q.waitForFlush();
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it('should clear queue when destroyed', async () => {
|
|
126
|
+
const q = new RequestQueue();
|
|
127
|
+
|
|
128
|
+
const itemA = vi.fn();
|
|
129
|
+
const itemB = vi.fn();
|
|
130
|
+
|
|
131
|
+
q.enqueue('a', itemA);
|
|
132
|
+
q.enqueue('b', itemB);
|
|
133
|
+
|
|
134
|
+
await q.reset();
|
|
135
|
+
|
|
136
|
+
expect(itemA).not.toHaveBeenCalled();
|
|
137
|
+
expect(itemB).not.toHaveBeenCalled();
|
|
138
|
+
expect(q.size).to.equal(0);
|
|
139
|
+
});
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { deferredPromise } from 'maverick.js/std';
|
|
2
|
+
|
|
3
|
+
export class RequestQueue {
|
|
4
|
+
#serving = false;
|
|
5
|
+
#pending = deferredPromise();
|
|
6
|
+
#queue = new Map<string | symbol, () => void | Promise<void>>();
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The number of callbacks that are currently in queue.
|
|
10
|
+
*/
|
|
11
|
+
get size(): number {
|
|
12
|
+
return this.#queue.size;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Whether items in the queue are being served immediately, otherwise they're queued to
|
|
17
|
+
* be processed later.
|
|
18
|
+
*/
|
|
19
|
+
get isServing() {
|
|
20
|
+
return this.#serving;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Waits for the queue to be flushed (ie: start serving).
|
|
25
|
+
*/
|
|
26
|
+
async waitForFlush() {
|
|
27
|
+
if (this.#serving) return;
|
|
28
|
+
await this.#pending.promise;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Queue the given `callback` to be invoked at a later time by either calling the `serve()` or
|
|
33
|
+
* `start()` methods. If the queue has started serving (i.e., `start()` was already called),
|
|
34
|
+
* then the callback will be invoked immediately.
|
|
35
|
+
*
|
|
36
|
+
* @param key - Uniquely identifies this callback so duplicates are ignored.
|
|
37
|
+
* @param callback - The function to call when this item in the queue is being served.
|
|
38
|
+
*/
|
|
39
|
+
enqueue(key: string | symbol, callback: () => void) {
|
|
40
|
+
if (this.#serving) {
|
|
41
|
+
callback();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Delete the key so we can set it last so iteration order is correct.
|
|
46
|
+
this.#queue.delete(key);
|
|
47
|
+
this.#queue.set(key, callback);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Invokes the callback with the given `key` in the queue (if it exists).
|
|
52
|
+
*/
|
|
53
|
+
serve(key: string | symbol) {
|
|
54
|
+
this.#queue.get(key)?.();
|
|
55
|
+
this.#queue.delete(key);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Flush all queued items and start serving future requests immediately until `stop()` is called.
|
|
60
|
+
*/
|
|
61
|
+
start() {
|
|
62
|
+
this.#flush();
|
|
63
|
+
this.#serving = true;
|
|
64
|
+
if (this.#queue.size > 0) this.#flush();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Stop serving requests, they'll be queued until you begin processing again by calling `start()`.
|
|
69
|
+
*/
|
|
70
|
+
stop() {
|
|
71
|
+
this.#serving = false;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Stop serving requests, empty the request queue, and release any promises waiting for the
|
|
76
|
+
* queue to flush.
|
|
77
|
+
*/
|
|
78
|
+
reset() {
|
|
79
|
+
this.stop();
|
|
80
|
+
this.#queue.clear();
|
|
81
|
+
this.#release();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
#flush() {
|
|
85
|
+
for (const key of this.#queue.keys()) this.serve(key);
|
|
86
|
+
this.#release();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
#release() {
|
|
90
|
+
// Release anyone waiting.
|
|
91
|
+
this.#pending.resolve();
|
|
92
|
+
this.#pending = deferredPromise();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { DefaultLayoutProps } from '../../components/layouts/default/props';
|
|
2
|
+
import type { VidstackPlayerLayoutLoader } from './loader';
|
|
3
|
+
|
|
4
|
+
export class VidstackPlayerLayout implements VidstackPlayerLayoutLoader {
|
|
5
|
+
constructor(readonly props?: Partial<DefaultLayoutProps>) {}
|
|
6
|
+
|
|
7
|
+
readonly name = 'vidstack';
|
|
8
|
+
|
|
9
|
+
async load() {
|
|
10
|
+
await import('../../elements/bundles/player-layouts/default');
|
|
11
|
+
await import('../../elements/bundles/player-ui');
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
create() {
|
|
15
|
+
const layouts = [
|
|
16
|
+
document.createElement('media-audio-layout'),
|
|
17
|
+
document.createElement('media-video-layout'),
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
if (this.props) {
|
|
21
|
+
for (const [prop, value] of Object.entries(this.props)) {
|
|
22
|
+
for (const el of layouts) el[prop] = value;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return layouts;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { PlyrLayoutProps } from '../../components/layouts/plyr/props';
|
|
2
|
+
import type { VidstackPlayerLayoutLoader } from './loader';
|
|
3
|
+
|
|
4
|
+
export class PlyrLayout implements VidstackPlayerLayoutLoader {
|
|
5
|
+
constructor(readonly props?: Partial<PlyrLayoutProps>) {}
|
|
6
|
+
|
|
7
|
+
readonly name = 'plyr';
|
|
8
|
+
|
|
9
|
+
async load() {
|
|
10
|
+
await import('../../elements/bundles/player-layouts/plyr');
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
create() {
|
|
14
|
+
const layout = document.createElement('media-plyr-layout');
|
|
15
|
+
|
|
16
|
+
if (this.props) {
|
|
17
|
+
for (const [prop, value] of Object.entries(this.props)) {
|
|
18
|
+
layout[prop] = value;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
return [layout];
|
|
23
|
+
}
|
|
24
|
+
}
|