@7sage/vidstack
Version:
UI component library for building high-quality, accessible video and audio experiences on the web.
160 lines (154 loc) • 6.56 kB
JavaScript
import { DOMEvent, isString, EventsController, useState } from './chunks/vidstack-BGSTndAW.js';
export { appendTriggerEvent, findTriggerEvent, hasTriggerEvent, isKeyboardClick, isKeyboardEvent, isPointerEvent, walkTriggerEventChain } from './chunks/vidstack-BGSTndAW.js';
export { AudioProviderLoader, AudioTrackList, DASHProviderLoader, FullscreenController, HLSProviderLoader, List, LocalMediaStorage, MEDIA_KEY_SHORTCUTS, MediaControls, MediaPlayer, MediaProvider, MediaRemoteControl, ScreenOrientationController, TextRenderers, TextTrackList, VideoProviderLoader, VideoQualityList, VimeoProviderLoader, YouTubeProviderLoader, boundTime, canFullscreen, isAudioProvider, isDASHProvider, isGoogleCastProvider, isHLSProvider, isHTMLAudioElement, isHTMLIFrameElement, isHTMLMediaElement, isHTMLVideoElement, isVideoProvider, isVideoQualitySrc, isVimeoProvider, isYouTubeProvider, mediaState, softResetMediaState } from './chunks/vidstack-BUfZMlAO.js';
export { mediaContext } from './chunks/vidstack-DJDnh4xT.js';
import { TextTrackSymbol } from './chunks/vidstack-Ci54COQW.js';
export { TextTrack, isTrackCaptionKind, parseJSONCaptionsFile } from './chunks/vidstack-Ci54COQW.js';
export { findActiveCue, isCueActive, watchActiveTextTrack, watchCueTextChange } from './chunks/vidstack-DYbwIVLq.js';
export { sortVideoQualities } from './chunks/vidstack-BTM4ERc7.js';
import { Thumbnail, Slider } from './chunks/vidstack-B5rN6wRF.js';
export { ARIAKeyShortcuts, AirPlayButton, AudioRadioGroup, CaptionButton, CaptionsRadioGroup, DEFAULT_PLAYBACK_RATES, FullscreenButton, LiveButton, Menu, MenuButton, MenuItem, MenuItems, MenuPortal, MuteButton, PIPButton, PlayButton, QualityRadioGroup, Radio, SeekButton, SliderController, SliderPreview, SliderValue, SpeedRadioGroup, ThumbnailsLoader, Time, TimeSlider, VolumeSlider, formatSpokenTime, formatTime, menuPortalContext, sliderContext, sliderState, updateSliderPreviewPlacement } from './chunks/vidstack-B5rN6wRF.js';
export { TimeRange, getTimeRangesEnd, getTimeRangesStart, normalizeTimeIntervals, updateTimeIntervals } from './chunks/vidstack-ChQTHmIQ.js';
export { AudioGainRadioGroup, AudioGainSlider, Captions, ChaptersRadioGroup, Controls, ControlsGroup, DEFAULT_AUDIO_GAINS, Gesture, GoogleCastButton, MediaAnnouncer, QualitySlider, RadioGroup, SliderChapters, SliderVideo, SpeedSlider, ToggleButton, Tooltip, TooltipContent, TooltipTrigger } from './chunks/vidstack-0dMjVFPr.js';
export { Poster } from './chunks/vidstack-BiyXcJ_M.js';
export { usePlyrLayoutClasses } from './chunks/vidstack-BCNJm_N2.js';
export { getDownloadFile } from './chunks/vidstack-CTojmhKq.js';
export { AUDIO_EXTENSIONS, AUDIO_TYPES, DASH_VIDEO_EXTENSIONS, DASH_VIDEO_TYPES, HLS_VIDEO_EXTENSIONS, HLS_VIDEO_TYPES, VIDEO_EXTENSIONS, VIDEO_TYPES, canChangeVolume, canGoogleCastSrc, canOrientScreen, canPlayHLSNatively, canRotateScreen, canUsePictureInPicture, canUseVideoPresentation, isAudioSrc, isDASHSrc, isHLSSrc, isMediaStream, isVideoSrc } from './chunks/vidstack-xMS8dnYq.js';
import './chunks/vidstack-D5EzK014.js';
import './chunks/vidstack-B01xzxC4.js';
import './chunks/vidstack-C9vIqaYT.js';
import './chunks/vidstack-C2US-gSO.js';
import '@floating-ui/dom';
import './chunks/vidstack-Dihypf8P.js';
import './chunks/vidstack-DsPOyKtl.js';
const GROUPED_LOG = Symbol(0);
class GroupedLog {
constructor(logger, level, title, root, parent) {
this.logger = logger;
this.level = level;
this.title = title;
this.root = root;
this.parent = parent;
}
[GROUPED_LOG] = true;
logs = [];
log(...data) {
this.logs.push({ data });
return this;
}
labelledLog(label, ...data) {
this.logs.push({ label, data });
return this;
}
groupStart(title) {
return new GroupedLog(this.logger, this.level, title, this.root ?? this, this);
}
groupEnd() {
this.parent?.logs.push(this);
return this.parent ?? this;
}
dispatch() {
return this.logger.dispatch(this.level, this.root ?? this);
}
}
class Logger {
#target = null;
error(...data) {
return this.dispatch("error", ...data);
}
warn(...data) {
return this.dispatch("warn", ...data);
}
info(...data) {
return this.dispatch("info", ...data);
}
debug(...data) {
return this.dispatch("debug", ...data);
}
errorGroup(title) {
return new GroupedLog(this, "error", title);
}
warnGroup(title) {
return new GroupedLog(this, "warn", title);
}
infoGroup(title) {
return new GroupedLog(this, "info", title);
}
debugGroup(title) {
return new GroupedLog(this, "debug", title);
}
setTarget(newTarget) {
this.#target = newTarget;
}
dispatch(level, ...data) {
return this.#target?.dispatchEvent(
new DOMEvent("vds-log", {
bubbles: true,
composed: true,
detail: { level, data }
})
) || false;
}
}
class LibASSTextRenderer {
constructor(loader, config) {
this.loader = loader;
this.config = config;
}
priority = 1;
#instance = null;
#track = null;
#typeRE = /(ssa|ass)$/;
canRender(track, video) {
return !!video && !!track.src && (isString(track.type) && this.#typeRE.test(track.type) || this.#typeRE.test(track.src));
}
attach(video) {
if (!video) return;
this.loader().then(async (mod) => {
this.#instance = new mod.default({
...this.config,
video,
subUrl: this.#track?.src || ""
});
new EventsController(this.#instance).add("ready", () => {
const canvas = this.#instance?._canvas;
if (canvas) canvas.style.pointerEvents = "none";
}).add("error", (event) => {
if (!this.#track) return;
this.#track[TextTrackSymbol.readyState] = 3;
this.#track.dispatchEvent(
new DOMEvent("error", {
trigger: event,
detail: event.error
})
);
});
});
}
changeTrack(track) {
if (!track || track.readyState === 3) {
this.#freeTrack();
} else if (this.#track !== track) {
this.#instance?.setTrackByUrl(track.src);
this.#track = track;
}
}
detach() {
this.#freeTrack();
}
#freeTrack() {
this.#instance?.freeTrack();
this.#track = null;
}
}
class SliderThumbnail extends Thumbnail {
#slider;
onAttach(el) {
this.#slider = useState(Slider.state);
}
getTime() {
const { duration, clipStartTime } = this.media.$state;
return clipStartTime() + this.#slider.pointerRate() * duration();
}
}
export { LibASSTextRenderer, Logger, Slider, SliderThumbnail, Thumbnail };