Files
pole-book/server/node_modules/media-chrome/dist/cjs/media-controller.js

686 lines
27 KiB
JavaScript

var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var __accessCheck = (obj, member, msg) => {
if (!member.has(obj))
throw TypeError("Cannot " + msg);
};
var __privateGet = (obj, member, getter) => {
__accessCheck(obj, member, "read from private field");
return getter ? getter.call(obj) : member.get(obj);
};
var __privateAdd = (obj, member, value) => {
if (member.has(obj))
throw TypeError("Cannot add the same private member more than once");
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
};
var __privateSet = (obj, member, value, setter) => {
__accessCheck(obj, member, "write to private field");
setter ? setter.call(obj, value) : member.set(obj, value);
return value;
};
var __privateMethod = (obj, member, method) => {
__accessCheck(obj, member, "access private method");
return method;
};
var media_controller_exports = {};
__export(media_controller_exports, {
Attributes: () => Attributes,
MediaController: () => MediaController,
default: () => media_controller_default
});
module.exports = __toCommonJS(media_controller_exports);
var import_media_container = require("./media-container.js");
var import_server_safe_globals = require("./utils/server-safe-globals.js");
var import_attribute_token_list = require("./utils/attribute-token-list.js");
var import_utils = require("./utils/utils.js");
var import_captions = require("./utils/captions.js");
var import_constants = require("./constants.js");
var import_element_utils = require("./utils/element-utils.js");
var import_media_store = __toESM(require("./media-store/media-store.js"), 1);
var _hotKeys, _fullscreenElement, _mediaStore, _mediaStateCallback, _mediaStoreUnsubscribe, _mediaStateEventHandler, _setupDefaultStore, setupDefaultStore_fn, _keyUpHandler, keyUpHandler_fn, _keyDownHandler, keyDownHandler_fn;
const ButtonPressedKeys = [
"ArrowLeft",
"ArrowRight",
"Enter",
" ",
"f",
"m",
"k",
"c"
];
const DEFAULT_SEEK_OFFSET = 10;
const Attributes = {
DEFAULT_SUBTITLES: "defaultsubtitles",
DEFAULT_STREAM_TYPE: "defaultstreamtype",
DEFAULT_DURATION: "defaultduration",
FULLSCREEN_ELEMENT: "fullscreenelement",
HOTKEYS: "hotkeys",
KEYS_USED: "keysused",
LIVE_EDGE_OFFSET: "liveedgeoffset",
NO_AUTO_SEEK_TO_LIVE: "noautoseektolive",
NO_HOTKEYS: "nohotkeys",
NO_VOLUME_PREF: "novolumepref",
NO_SUBTITLES_LANG_PREF: "nosubtitleslangpref",
NO_DEFAULT_STORE: "nodefaultstore",
KEYBOARD_FORWARD_SEEK_OFFSET: "keyboardforwardseekoffset",
KEYBOARD_BACKWARD_SEEK_OFFSET: "keyboardbackwardseekoffset"
};
class MediaController extends import_media_container.MediaContainer {
constructor() {
super();
__privateAdd(this, _setupDefaultStore);
__privateAdd(this, _keyUpHandler);
__privateAdd(this, _keyDownHandler);
this.mediaStateReceivers = [];
this.associatedElementSubscriptions = /* @__PURE__ */ new Map();
__privateAdd(this, _hotKeys, new import_attribute_token_list.AttributeTokenList(this, Attributes.HOTKEYS));
__privateAdd(this, _fullscreenElement, void 0);
__privateAdd(this, _mediaStore, void 0);
__privateAdd(this, _mediaStateCallback, void 0);
__privateAdd(this, _mediaStoreUnsubscribe, void 0);
__privateAdd(this, _mediaStateEventHandler, (event) => {
var _a;
(_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch(event);
});
this.associateElement(this);
let prevState = {};
__privateSet(this, _mediaStateCallback, (nextState) => {
Object.entries(nextState).forEach(([stateName, stateValue]) => {
if (stateName in prevState && prevState[stateName] === stateValue)
return;
this.propagateMediaState(stateName, stateValue);
const attrName = stateName.toLowerCase();
const evt = new import_server_safe_globals.globalThis.CustomEvent(
import_constants.AttributeToStateChangeEventMap[attrName],
{ composed: true, detail: stateValue }
);
this.dispatchEvent(evt);
});
prevState = nextState;
});
this.enableHotkeys();
}
static get observedAttributes() {
return super.observedAttributes.concat(
Attributes.NO_HOTKEYS,
Attributes.HOTKEYS,
Attributes.DEFAULT_STREAM_TYPE,
Attributes.DEFAULT_SUBTITLES,
Attributes.DEFAULT_DURATION
);
}
get mediaStore() {
return __privateGet(this, _mediaStore);
}
set mediaStore(value) {
var _a, _b;
if (__privateGet(this, _mediaStore)) {
(_a = __privateGet(this, _mediaStoreUnsubscribe)) == null ? void 0 : _a.call(this);
__privateSet(this, _mediaStoreUnsubscribe, void 0);
}
__privateSet(this, _mediaStore, value);
if (!__privateGet(this, _mediaStore) && !this.hasAttribute(Attributes.NO_DEFAULT_STORE)) {
__privateMethod(this, _setupDefaultStore, setupDefaultStore_fn).call(this);
return;
}
__privateSet(this, _mediaStoreUnsubscribe, (_b = __privateGet(this, _mediaStore)) == null ? void 0 : _b.subscribe(
__privateGet(this, _mediaStateCallback)
));
}
get fullscreenElement() {
var _a;
return (_a = __privateGet(this, _fullscreenElement)) != null ? _a : this;
}
set fullscreenElement(element) {
var _a;
if (this.hasAttribute(Attributes.FULLSCREEN_ELEMENT)) {
this.removeAttribute(Attributes.FULLSCREEN_ELEMENT);
}
__privateSet(this, _fullscreenElement, element);
(_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch({
type: "fullscreenelementchangerequest",
detail: this.fullscreenElement
});
}
attributeChangedCallback(attrName, oldValue, newValue) {
var _a, _b, _c, _d, _e, _f;
super.attributeChangedCallback(attrName, oldValue, newValue);
if (attrName === Attributes.NO_HOTKEYS) {
if (newValue !== oldValue && newValue === "") {
if (this.hasAttribute(Attributes.HOTKEYS)) {
console.warn(
"Media Chrome: Both `hotkeys` and `nohotkeys` have been set. All hotkeys will be disabled."
);
}
this.disableHotkeys();
} else if (newValue !== oldValue && newValue === null) {
this.enableHotkeys();
}
} else if (attrName === Attributes.HOTKEYS) {
__privateGet(this, _hotKeys).value = newValue;
} else if (attrName === Attributes.DEFAULT_SUBTITLES && newValue !== oldValue) {
(_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch({
type: "optionschangerequest",
detail: {
defaultSubtitles: this.hasAttribute(Attributes.DEFAULT_SUBTITLES)
}
});
} else if (attrName === Attributes.DEFAULT_STREAM_TYPE) {
(_c = __privateGet(this, _mediaStore)) == null ? void 0 : _c.dispatch({
type: "optionschangerequest",
detail: {
defaultStreamType: (_b = this.getAttribute(Attributes.DEFAULT_STREAM_TYPE)) != null ? _b : void 0
}
});
} else if (attrName === Attributes.LIVE_EDGE_OFFSET) {
(_d = __privateGet(this, _mediaStore)) == null ? void 0 : _d.dispatch({
type: "optionschangerequest",
detail: {
liveEdgeOffset: this.hasAttribute(Attributes.LIVE_EDGE_OFFSET) ? +this.getAttribute(Attributes.LIVE_EDGE_OFFSET) : void 0
}
});
} else if (attrName === Attributes.FULLSCREEN_ELEMENT) {
const el = newValue ? (_e = this.getRootNode()) == null ? void 0 : _e.getElementById(newValue) : void 0;
__privateSet(this, _fullscreenElement, el);
(_f = __privateGet(this, _mediaStore)) == null ? void 0 : _f.dispatch({
type: "fullscreenelementchangerequest",
detail: this.fullscreenElement
});
}
}
connectedCallback() {
var _a, _b;
if (!__privateGet(this, _mediaStore) && !this.hasAttribute(Attributes.NO_DEFAULT_STORE)) {
__privateMethod(this, _setupDefaultStore, setupDefaultStore_fn).call(this);
}
(_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch({
type: "documentelementchangerequest",
detail: import_server_safe_globals.document
});
super.connectedCallback();
if (__privateGet(this, _mediaStore) && !__privateGet(this, _mediaStoreUnsubscribe)) {
__privateSet(this, _mediaStoreUnsubscribe, (_b = __privateGet(this, _mediaStore)) == null ? void 0 : _b.subscribe(
__privateGet(this, _mediaStateCallback)
));
}
this.enableHotkeys();
}
disconnectedCallback() {
var _a, _b, _c, _d;
(_a = super.disconnectedCallback) == null ? void 0 : _a.call(this);
if (__privateGet(this, _mediaStore)) {
(_b = __privateGet(this, _mediaStore)) == null ? void 0 : _b.dispatch({
type: "documentelementchangerequest",
detail: void 0
});
(_c = __privateGet(this, _mediaStore)) == null ? void 0 : _c.dispatch({
type: import_constants.MediaUIEvents.MEDIA_TOGGLE_SUBTITLES_REQUEST,
detail: false
});
}
if (__privateGet(this, _mediaStoreUnsubscribe)) {
(_d = __privateGet(this, _mediaStoreUnsubscribe)) == null ? void 0 : _d.call(this);
__privateSet(this, _mediaStoreUnsubscribe, void 0);
}
}
/**
* @override
* @param {HTMLMediaElement} media
*/
mediaSetCallback(media) {
var _a;
super.mediaSetCallback(media);
(_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch({
type: "mediaelementchangerequest",
detail: media
});
if (!media.hasAttribute("tabindex")) {
media.tabIndex = -1;
}
}
/**
* @override
* @param {HTMLMediaElement} media
*/
mediaUnsetCallback(media) {
var _a;
super.mediaUnsetCallback(media);
(_a = __privateGet(this, _mediaStore)) == null ? void 0 : _a.dispatch({
type: "mediaelementchangerequest",
detail: void 0
});
}
propagateMediaState(stateName, state) {
propagateMediaState(this.mediaStateReceivers, stateName, state);
}
associateElement(element) {
if (!element)
return;
const { associatedElementSubscriptions } = this;
if (associatedElementSubscriptions.has(element))
return;
const registerMediaStateReceiver = this.registerMediaStateReceiver.bind(this);
const unregisterMediaStateReceiver = this.unregisterMediaStateReceiver.bind(this);
const unsubscribe = monitorForMediaStateReceivers(
element,
registerMediaStateReceiver,
unregisterMediaStateReceiver
);
Object.values(import_constants.MediaUIEvents).forEach((eventName) => {
element.addEventListener(eventName, __privateGet(this, _mediaStateEventHandler));
});
associatedElementSubscriptions.set(element, unsubscribe);
}
unassociateElement(element) {
if (!element)
return;
const { associatedElementSubscriptions } = this;
if (!associatedElementSubscriptions.has(element))
return;
const unsubscribe = associatedElementSubscriptions.get(element);
unsubscribe();
associatedElementSubscriptions.delete(element);
Object.values(import_constants.MediaUIEvents).forEach((eventName) => {
element.removeEventListener(eventName, __privateGet(this, _mediaStateEventHandler));
});
}
registerMediaStateReceiver(el) {
if (!el)
return;
const els = this.mediaStateReceivers;
const index = els.indexOf(el);
if (index > -1)
return;
els.push(el);
if (__privateGet(this, _mediaStore)) {
Object.entries(__privateGet(this, _mediaStore).getState()).forEach(
([stateName, stateValue]) => {
propagateMediaState([el], stateName, stateValue);
}
);
}
}
unregisterMediaStateReceiver(el) {
const els = this.mediaStateReceivers;
const index = els.indexOf(el);
if (index < 0)
return;
els.splice(index, 1);
}
enableHotkeys() {
this.addEventListener("keydown", __privateMethod(this, _keyDownHandler, keyDownHandler_fn));
}
disableHotkeys() {
this.removeEventListener("keydown", __privateMethod(this, _keyDownHandler, keyDownHandler_fn));
this.removeEventListener("keyup", __privateMethod(this, _keyUpHandler, keyUpHandler_fn));
}
get hotkeys() {
return __privateGet(this, _hotKeys);
}
keyboardShortcutHandler(e) {
var _a, _b, _c, _d, _e;
const target = e.target;
const keysUsed = ((_c = (_b = (_a = target.getAttribute(Attributes.KEYS_USED)) == null ? void 0 : _a.split(" ")) != null ? _b : target == null ? void 0 : target.keysUsed) != null ? _c : []).map((key) => key === "Space" ? " " : key).filter(Boolean);
if (keysUsed.includes(e.key)) {
return;
}
let eventName, detail, evt;
if (__privateGet(this, _hotKeys).contains(`no${e.key.toLowerCase()}`))
return;
if (e.key === " " && __privateGet(this, _hotKeys).contains(`nospace`))
return;
switch (e.key) {
case " ":
case "k":
eventName = __privateGet(this, _mediaStore).getState().mediaPaused ? import_constants.MediaUIEvents.MEDIA_PLAY_REQUEST : import_constants.MediaUIEvents.MEDIA_PAUSE_REQUEST;
this.dispatchEvent(
new import_server_safe_globals.globalThis.CustomEvent(eventName, {
composed: true,
bubbles: true
})
);
break;
case "m":
eventName = this.mediaStore.getState().mediaVolumeLevel === "off" ? import_constants.MediaUIEvents.MEDIA_UNMUTE_REQUEST : import_constants.MediaUIEvents.MEDIA_MUTE_REQUEST;
this.dispatchEvent(
new import_server_safe_globals.globalThis.CustomEvent(eventName, {
composed: true,
bubbles: true
})
);
break;
case "f":
eventName = this.mediaStore.getState().mediaIsFullscreen ? import_constants.MediaUIEvents.MEDIA_EXIT_FULLSCREEN_REQUEST : import_constants.MediaUIEvents.MEDIA_ENTER_FULLSCREEN_REQUEST;
this.dispatchEvent(
new import_server_safe_globals.globalThis.CustomEvent(eventName, {
composed: true,
bubbles: true
})
);
break;
case "c":
this.dispatchEvent(
new import_server_safe_globals.globalThis.CustomEvent(
import_constants.MediaUIEvents.MEDIA_TOGGLE_SUBTITLES_REQUEST,
{ composed: true, bubbles: true }
)
);
break;
case "ArrowLeft": {
const offsetValue = this.hasAttribute(
Attributes.KEYBOARD_BACKWARD_SEEK_OFFSET
) ? +this.getAttribute(Attributes.KEYBOARD_BACKWARD_SEEK_OFFSET) : DEFAULT_SEEK_OFFSET;
detail = Math.max(
((_d = this.mediaStore.getState().mediaCurrentTime) != null ? _d : 0) - offsetValue,
0
);
evt = new import_server_safe_globals.globalThis.CustomEvent(import_constants.MediaUIEvents.MEDIA_SEEK_REQUEST, {
composed: true,
bubbles: true,
detail
});
this.dispatchEvent(evt);
break;
}
case "ArrowRight": {
const offsetValue = this.hasAttribute(
Attributes.KEYBOARD_FORWARD_SEEK_OFFSET
) ? +this.getAttribute(Attributes.KEYBOARD_FORWARD_SEEK_OFFSET) : DEFAULT_SEEK_OFFSET;
detail = Math.max(
((_e = this.mediaStore.getState().mediaCurrentTime) != null ? _e : 0) + offsetValue,
0
);
evt = new import_server_safe_globals.globalThis.CustomEvent(import_constants.MediaUIEvents.MEDIA_SEEK_REQUEST, {
composed: true,
bubbles: true,
detail
});
this.dispatchEvent(evt);
break;
}
default:
break;
}
}
}
_hotKeys = new WeakMap();
_fullscreenElement = new WeakMap();
_mediaStore = new WeakMap();
_mediaStateCallback = new WeakMap();
_mediaStoreUnsubscribe = new WeakMap();
_mediaStateEventHandler = new WeakMap();
_setupDefaultStore = new WeakSet();
setupDefaultStore_fn = function() {
var _a;
this.mediaStore = (0, import_media_store.default)({
media: this.media,
fullscreenElement: this.fullscreenElement,
options: {
defaultSubtitles: this.hasAttribute(Attributes.DEFAULT_SUBTITLES),
defaultDuration: this.hasAttribute(Attributes.DEFAULT_DURATION) ? +this.getAttribute(Attributes.DEFAULT_DURATION) : void 0,
defaultStreamType: (
/** @type {import('./media-store/state-mediator.js').StreamTypeValue} */
(_a = this.getAttribute(
Attributes.DEFAULT_STREAM_TYPE
)) != null ? _a : void 0
),
liveEdgeOffset: this.hasAttribute(Attributes.LIVE_EDGE_OFFSET) ? +this.getAttribute(Attributes.LIVE_EDGE_OFFSET) : void 0,
// NOTE: This wasn't updated if it was changed later. Should it be? (CJP)
noVolumePref: this.hasAttribute(Attributes.NO_VOLUME_PREF),
noSubtitlesLangPref: this.hasAttribute(
Attributes.NO_SUBTITLES_LANG_PREF
)
}
});
};
_keyUpHandler = new WeakSet();
keyUpHandler_fn = function(e) {
const { key } = e;
if (!ButtonPressedKeys.includes(key)) {
this.removeEventListener("keyup", __privateMethod(this, _keyUpHandler, keyUpHandler_fn));
return;
}
this.keyboardShortcutHandler(e);
};
_keyDownHandler = new WeakSet();
keyDownHandler_fn = function(e) {
const { metaKey, altKey, key } = e;
if (metaKey || altKey || !ButtonPressedKeys.includes(key)) {
this.removeEventListener("keyup", __privateMethod(this, _keyUpHandler, keyUpHandler_fn));
return;
}
if ([" ", "ArrowLeft", "ArrowRight"].includes(key) && !(__privateGet(this, _hotKeys).contains(`no${key.toLowerCase()}`) || key === " " && __privateGet(this, _hotKeys).contains("nospace"))) {
e.preventDefault();
}
this.addEventListener("keyup", __privateMethod(this, _keyUpHandler, keyUpHandler_fn), { once: true });
};
const MEDIA_UI_ATTRIBUTE_NAMES = Object.values(import_constants.MediaUIAttributes);
const MEDIA_UI_PROP_NAMES = Object.values(import_constants.MediaUIProps);
const getMediaUIAttributesFrom = (child) => {
var _a, _b, _c, _d;
let { observedAttributes } = child.constructor;
if (!observedAttributes && ((_a = child.nodeName) == null ? void 0 : _a.includes("-"))) {
import_server_safe_globals.globalThis.customElements.upgrade(child);
({ observedAttributes } = child.constructor);
}
const mediaChromeAttributesList = (_d = (_c = (_b = child == null ? void 0 : child.getAttribute) == null ? void 0 : _b.call(child, import_constants.MediaStateReceiverAttributes.MEDIA_CHROME_ATTRIBUTES)) == null ? void 0 : _c.split) == null ? void 0 : _d.call(_c, /\s+/);
if (!Array.isArray(observedAttributes || mediaChromeAttributesList))
return [];
return (observedAttributes || mediaChromeAttributesList).filter(
(attrName) => MEDIA_UI_ATTRIBUTE_NAMES.includes(attrName)
);
};
const hasMediaUIProps = (mediaStateReceiverCandidate) => {
var _a, _b;
if (((_a = mediaStateReceiverCandidate.nodeName) == null ? void 0 : _a.includes("-")) && !!import_server_safe_globals.globalThis.customElements.get(
(_b = mediaStateReceiverCandidate.nodeName) == null ? void 0 : _b.toLowerCase()
) && !(mediaStateReceiverCandidate instanceof import_server_safe_globals.globalThis.customElements.get(
mediaStateReceiverCandidate.nodeName.toLowerCase()
))) {
import_server_safe_globals.globalThis.customElements.upgrade(mediaStateReceiverCandidate);
}
return MEDIA_UI_PROP_NAMES.some(
(propName) => propName in mediaStateReceiverCandidate
);
};
const isMediaStateReceiver = (child) => {
return hasMediaUIProps(child) || !!getMediaUIAttributesFrom(child).length;
};
const serializeTuple = (tuple) => {
var _a;
return (_a = tuple == null ? void 0 : tuple.join) == null ? void 0 : _a.call(tuple, ":");
};
const CustomAttrSerializer = {
[import_constants.MediaUIAttributes.MEDIA_SUBTITLES_LIST]: import_captions.stringifyTextTrackList,
[import_constants.MediaUIAttributes.MEDIA_SUBTITLES_SHOWING]: import_captions.stringifyTextTrackList,
[import_constants.MediaUIAttributes.MEDIA_SEEKABLE]: serializeTuple,
[import_constants.MediaUIAttributes.MEDIA_BUFFERED]: (tuples) => tuples == null ? void 0 : tuples.map(serializeTuple).join(" "),
[import_constants.MediaUIAttributes.MEDIA_PREVIEW_COORDS]: (coords) => coords == null ? void 0 : coords.join(" "),
[import_constants.MediaUIAttributes.MEDIA_RENDITION_LIST]: import_utils.stringifyRenditionList,
[import_constants.MediaUIAttributes.MEDIA_AUDIO_TRACK_LIST]: import_utils.stringifyAudioTrackList
};
const setAttr = async (child, attrName, attrValue) => {
var _a, _b;
if (!child.isConnected) {
await (0, import_utils.delay)(0);
}
if (typeof attrValue === "boolean" || attrValue == null) {
return (0, import_element_utils.setBooleanAttr)(child, attrName, attrValue);
}
if (typeof attrValue === "number") {
return (0, import_element_utils.setNumericAttr)(child, attrName, attrValue);
}
if (typeof attrValue === "string") {
return (0, import_element_utils.setStringAttr)(child, attrName, attrValue);
}
if (Array.isArray(attrValue) && !attrValue.length) {
return child.removeAttribute(attrName);
}
const val = (_b = (_a = CustomAttrSerializer[attrName]) == null ? void 0 : _a.call(CustomAttrSerializer, attrValue)) != null ? _b : attrValue;
return child.setAttribute(attrName, val);
};
const isMediaSlotElementDescendant = (el) => {
var _a;
return !!((_a = el.closest) == null ? void 0 : _a.call(el, '*[slot="media"]'));
};
const traverseForMediaStateReceivers = (rootNode, mediaStateReceiverCallback) => {
if (isMediaSlotElementDescendant(rootNode)) {
return;
}
const traverseForMediaStateReceiversSync = (rootNode2, mediaStateReceiverCallback2) => {
var _a, _b;
if (isMediaStateReceiver(rootNode2)) {
mediaStateReceiverCallback2(rootNode2);
}
const { children = [] } = rootNode2 != null ? rootNode2 : {};
const shadowChildren = (_b = (_a = rootNode2 == null ? void 0 : rootNode2.shadowRoot) == null ? void 0 : _a.children) != null ? _b : [];
const allChildren = [...children, ...shadowChildren];
allChildren.forEach(
(child) => traverseForMediaStateReceivers(
child,
mediaStateReceiverCallback2
)
);
};
const name = rootNode == null ? void 0 : rootNode.nodeName.toLowerCase();
if (name.includes("-") && !isMediaStateReceiver(rootNode)) {
import_server_safe_globals.globalThis.customElements.whenDefined(name).then(() => {
traverseForMediaStateReceiversSync(rootNode, mediaStateReceiverCallback);
});
return;
}
traverseForMediaStateReceiversSync(rootNode, mediaStateReceiverCallback);
};
const propagateMediaState = (els, stateName, val) => {
els.forEach((el) => {
if (stateName in el) {
el[stateName] = val;
return;
}
const relevantAttrs = getMediaUIAttributesFrom(el);
const attrName = stateName.toLowerCase();
if (!relevantAttrs.includes(attrName))
return;
setAttr(el, attrName, val);
});
};
const monitorForMediaStateReceivers = (rootNode, registerMediaStateReceiver, unregisterMediaStateReceiver) => {
traverseForMediaStateReceivers(rootNode, registerMediaStateReceiver);
const registerMediaStateReceiverHandler = (evt) => {
var _a;
const el = (_a = evt == null ? void 0 : evt.composedPath()[0]) != null ? _a : evt.target;
registerMediaStateReceiver(el);
};
const unregisterMediaStateReceiverHandler = (evt) => {
var _a;
const el = (_a = evt == null ? void 0 : evt.composedPath()[0]) != null ? _a : evt.target;
unregisterMediaStateReceiver(el);
};
rootNode.addEventListener(
import_constants.MediaUIEvents.REGISTER_MEDIA_STATE_RECEIVER,
registerMediaStateReceiverHandler
);
rootNode.addEventListener(
import_constants.MediaUIEvents.UNREGISTER_MEDIA_STATE_RECEIVER,
unregisterMediaStateReceiverHandler
);
const mutationCallback = (mutationsList) => {
mutationsList.forEach((mutationRecord) => {
const {
addedNodes = [],
removedNodes = [],
type,
target,
attributeName
} = mutationRecord;
if (type === "childList") {
Array.prototype.forEach.call(
addedNodes,
(node) => traverseForMediaStateReceivers(
node,
registerMediaStateReceiver
)
);
Array.prototype.forEach.call(
removedNodes,
(node) => traverseForMediaStateReceivers(
node,
unregisterMediaStateReceiver
)
);
} else if (type === "attributes" && attributeName === import_constants.MediaStateReceiverAttributes.MEDIA_CHROME_ATTRIBUTES) {
if (isMediaStateReceiver(target)) {
registerMediaStateReceiver(target);
} else {
unregisterMediaStateReceiver(target);
}
}
});
};
let prevSlotted = [];
const slotChangeHandler = (event) => {
const slotEl = event.target;
if (slotEl.name === "media")
return;
prevSlotted.forEach(
(node) => traverseForMediaStateReceivers(node, unregisterMediaStateReceiver)
);
prevSlotted = [
...slotEl.assignedElements({ flatten: true })
];
prevSlotted.forEach(
(node) => traverseForMediaStateReceivers(node, registerMediaStateReceiver)
);
};
rootNode.addEventListener("slotchange", slotChangeHandler);
const observer = new MutationObserver(mutationCallback);
observer.observe(rootNode, {
childList: true,
attributes: true,
subtree: true
});
const unsubscribe = () => {
traverseForMediaStateReceivers(rootNode, unregisterMediaStateReceiver);
rootNode.removeEventListener("slotchange", slotChangeHandler);
observer.disconnect();
rootNode.removeEventListener(
import_constants.MediaUIEvents.REGISTER_MEDIA_STATE_RECEIVER,
registerMediaStateReceiverHandler
);
rootNode.removeEventListener(
import_constants.MediaUIEvents.UNREGISTER_MEDIA_STATE_RECEIVER,
unregisterMediaStateReceiverHandler
);
};
return unsubscribe;
};
if (!import_server_safe_globals.globalThis.customElements.get("media-controller")) {
import_server_safe_globals.globalThis.customElements.define("media-controller", MediaController);
}
var media_controller_default = MediaController;