var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; 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 __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_chrome_button_exports = {}; __export(media_chrome_button_exports, { MediaChromeButton: () => MediaChromeButton, default: () => media_chrome_button_default }); module.exports = __toCommonJS(media_chrome_button_exports); var import_constants = require("./constants.js"); var import_element_utils = require("./utils/element-utils.js"); var import_server_safe_globals = require("./utils/server-safe-globals.js"); var _mediaController, _clickListener, _positionTooltip, _keyupListener, _keydownListener, _setupTooltip, setupTooltip_fn; const Attributes = { TOOLTIP_PLACEMENT: "tooltipplacement" }; const template = import_server_safe_globals.document.createElement("template"); template.innerHTML = /*html*/ ` `; class MediaChromeButton extends import_server_safe_globals.globalThis.HTMLElement { constructor(options = {}) { var _a; super(); // Called when we know the tooltip is ready / defined __privateAdd(this, _setupTooltip); __privateAdd(this, _mediaController, void 0); this.preventClick = false; this.tooltipEl = null; this.tooltipContent = ""; __privateAdd(this, _clickListener, (e) => { if (!this.preventClick) { this.handleClick(e); } setTimeout(__privateGet(this, _positionTooltip), 0); }); __privateAdd(this, _positionTooltip, () => { var _a, _b; (_b = (_a = this.tooltipEl) == null ? void 0 : _a.updateXOffset) == null ? void 0 : _b.call(_a); }); // NOTE: There are definitely some "false positive" cases with multi-key pressing, // but this should be good enough for most use cases. __privateAdd(this, _keyupListener, (e) => { const { key } = e; if (!this.keysUsed.includes(key)) { this.removeEventListener("keyup", __privateGet(this, _keyupListener)); return; } if (!this.preventClick) { this.handleClick(e); } }); __privateAdd(this, _keydownListener, (e) => { const { metaKey, altKey, key } = e; if (metaKey || altKey || !this.keysUsed.includes(key)) { this.removeEventListener("keyup", __privateGet(this, _keyupListener)); return; } this.addEventListener("keyup", __privateGet(this, _keyupListener), { once: true }); }); if (!this.shadowRoot) { this.attachShadow({ mode: "open" }); const buttonHTML = template.content.cloneNode(true); this.nativeEl = buttonHTML; let slotTemplate = options.slotTemplate; if (!slotTemplate) { slotTemplate = import_server_safe_globals.document.createElement("template"); slotTemplate.innerHTML = `${options.defaultContent || ""}`; } if (options.tooltipContent) { buttonHTML.querySelector('slot[name="tooltip-content"]').innerHTML = (_a = options.tooltipContent) != null ? _a : ""; this.tooltipContent = options.tooltipContent; } this.nativeEl.appendChild(slotTemplate.content.cloneNode(true)); this.shadowRoot.appendChild(buttonHTML); } this.tooltipEl = this.shadowRoot.querySelector("media-tooltip"); } static get observedAttributes() { return [ "disabled", Attributes.TOOLTIP_PLACEMENT, import_constants.MediaStateReceiverAttributes.MEDIA_CONTROLLER ]; } enable() { this.addEventListener("click", __privateGet(this, _clickListener)); this.addEventListener("keydown", __privateGet(this, _keydownListener)); this.tabIndex = 0; } disable() { this.removeEventListener("click", __privateGet(this, _clickListener)); this.removeEventListener("keydown", __privateGet(this, _keydownListener)); this.removeEventListener("keyup", __privateGet(this, _keyupListener)); this.tabIndex = -1; } attributeChangedCallback(attrName, oldValue, newValue) { var _a, _b, _c, _d, _e; if (attrName === import_constants.MediaStateReceiverAttributes.MEDIA_CONTROLLER) { if (oldValue) { (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this); __privateSet(this, _mediaController, null); } if (newValue && this.isConnected) { __privateSet(this, _mediaController, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue)); (_e = (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e.call(_d, this); } } else if (attrName === "disabled" && newValue !== oldValue) { if (newValue == null) { this.enable(); } else { this.disable(); } } else if (attrName === Attributes.TOOLTIP_PLACEMENT && this.tooltipEl && newValue !== oldValue) { this.tooltipEl.placement = newValue; } __privateGet(this, _positionTooltip).call(this); } connectedCallback() { var _a, _b, _c; const { style } = (0, import_element_utils.getOrInsertCSSRule)(this.shadowRoot, ":host"); style.setProperty( "display", `var(--media-control-display, var(--${this.localName}-display, inline-flex))` ); if (!this.hasAttribute("disabled")) { this.enable(); } this.setAttribute("role", "button"); const mediaControllerId = this.getAttribute( import_constants.MediaStateReceiverAttributes.MEDIA_CONTROLLER ); if (mediaControllerId) { __privateSet( this, _mediaController, // @ts-ignore (_a = this.getRootNode()) == null ? void 0 : _a.getElementById(mediaControllerId) ); (_c = (_b = __privateGet(this, _mediaController)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this); } import_server_safe_globals.globalThis.customElements.whenDefined("media-tooltip").then(() => __privateMethod(this, _setupTooltip, setupTooltip_fn).call(this)); } disconnectedCallback() { var _a, _b; this.disable(); (_b = (_a = __privateGet(this, _mediaController)) == null ? void 0 : _a.unassociateElement) == null ? void 0 : _b.call(_a, this); __privateSet(this, _mediaController, null); this.removeEventListener("mouseenter", __privateGet(this, _positionTooltip)); this.removeEventListener("focus", __privateGet(this, _positionTooltip)); this.removeEventListener("click", __privateGet(this, _clickListener)); } get keysUsed() { return ["Enter", " "]; } /** * Get or set tooltip placement */ get tooltipPlacement() { return (0, import_element_utils.getStringAttr)(this, Attributes.TOOLTIP_PLACEMENT); } set tooltipPlacement(value) { (0, import_element_utils.setStringAttr)(this, Attributes.TOOLTIP_PLACEMENT, value); } /** * @abstract * @argument {Event} e */ handleClick(e) { } // eslint-disable-line } _mediaController = new WeakMap(); _clickListener = new WeakMap(); _positionTooltip = new WeakMap(); _keyupListener = new WeakMap(); _keydownListener = new WeakMap(); _setupTooltip = new WeakSet(); setupTooltip_fn = function() { this.addEventListener("mouseenter", __privateGet(this, _positionTooltip)); this.addEventListener("focus", __privateGet(this, _positionTooltip)); this.addEventListener("click", __privateGet(this, _clickListener)); const initialPlacement = this.tooltipPlacement; if (initialPlacement && this.tooltipEl) { this.tooltipEl.placement = initialPlacement; } }; if (!import_server_safe_globals.globalThis.customElements.get("media-chrome-button")) { import_server_safe_globals.globalThis.customElements.define("media-chrome-button", MediaChromeButton); } var media_chrome_button_default = MediaChromeButton;