import { MediaUIAttributes, TextTrackKinds } from "../constants.js"; const splitTextTracksStr = (textTracksStr = "") => textTracksStr.split(/\s+/); const parseTextTrackStr = (textTrackStr = "") => { const [kind, language, encodedLabel] = textTrackStr.split(":"); const label = encodedLabel ? decodeURIComponent(encodedLabel) : void 0; return { kind: kind === "cc" ? TextTrackKinds.CAPTIONS : TextTrackKinds.SUBTITLES, language, label }; }; const parseTextTracksStr = (textTracksStr = "", textTrackLikeObj = {}) => { return splitTextTracksStr(textTracksStr).map((textTrackStr) => { const textTrackObj = parseTextTrackStr(textTrackStr); return { ...textTrackLikeObj, ...textTrackObj }; }); }; const parseTracks = (trackOrTracks) => { if (!trackOrTracks) return []; if (Array.isArray(trackOrTracks)) { return trackOrTracks.map((trackObjOrStr) => { if (typeof trackObjOrStr === "string") { return parseTextTrackStr(trackObjOrStr); } return trackObjOrStr; }); } if (typeof trackOrTracks === "string") { return parseTextTracksStr(trackOrTracks); } return [trackOrTracks]; }; const formatTextTrackObj = ({ kind, label, language } = { kind: "subtitles" }) => { if (!label) return language; return `${kind === "captions" ? "cc" : "sb"}:${language}:${encodeURIComponent( label )}`; }; const stringifyTextTrackList = (textTracks = []) => { return Array.prototype.map.call(textTracks, formatTextTrackObj).join(" "); }; const isMatchingPropOf = (key, value) => (obj) => obj[key] === value; const textTrackObjAsPred = (filterObj) => { const preds = Object.entries(filterObj).map(([key, value]) => { return isMatchingPropOf(key, value); }); return (textTrack) => preds.every((pred) => pred(textTrack)); }; const updateTracksModeTo = (mode, tracks = [], tracksToUpdate = []) => { const preds = parseTracks(tracksToUpdate).map(textTrackObjAsPred); const isTrackToUpdate = (textTrack) => { return preds.some((pred) => pred(textTrack)); }; Array.from(tracks).filter(isTrackToUpdate).forEach((textTrack) => { textTrack.mode = mode; }); }; const getTextTracksList = (media, filterPredOrObj = () => true) => { if (!(media == null ? void 0 : media.textTracks)) return []; const filterPred = typeof filterPredOrObj === "function" ? filterPredOrObj : textTrackObjAsPred(filterPredOrObj); return Array.from(media.textTracks).filter(filterPred); }; const areSubsOn = (el) => { var _a; const showingSubtitles = !!((_a = el.mediaSubtitlesShowing) == null ? void 0 : _a.length) || el.hasAttribute(MediaUIAttributes.MEDIA_SUBTITLES_SHOWING); return showingSubtitles; }; export { areSubsOn, formatTextTrackObj, getTextTracksList, isMatchingPropOf, parseTextTrackStr, parseTextTracksStr, parseTracks, splitTextTracksStr, stringifyTextTrackList, textTrackObjAsPred, updateTracksModeTo };