@theoplayer/web-ui 2.0.0 → 2.1.0
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/CHANGELOG.md +6 -0
- package/README.md +1 -1
- package/dist/THEOplayerUI.d.ts +3 -7
- package/dist/THEOplayerUI.es5.js +1 -1
- package/dist/THEOplayerUI.es5.mjs +1 -1
- package/dist/THEOplayerUI.js +2 -2
- package/dist/THEOplayerUI.js.map +1 -1
- package/dist/THEOplayerUI.mjs +1 -1
- package/dist/THEOplayerUI.mjs.map +1 -1
- package/dist/THEOplayerUI.node.mjs +1 -1
- package/dist/THEOplayerUI.node.mjs.map +1 -1
- package/dist/THEOplayerUI.polyfills.js +1 -1
- package/package.json +23 -23
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"THEOplayerUI.mjs","sources":["../node_modules/@swc/helpers/esm/_apply_decs_2203_r.js","../node_modules/@swc/helpers/esm/_identity.js","../src/util/Attribute.ts","../src/util/KeyCode.ts","../src/extensions/ExtensionSlot.ts","../src/components/ControlBar.ts","../src/components/Button.ts","../src/components/LinkButton.ts","../src/components/SlotContainer.ts","../src/components/PlayButton.ts","../src/components/MuteButton.ts","../src/components/SeekButton.ts","../src/components/TimeDisplay.ts","../src/components/DurationDisplay.ts","../src/components/RadioButton.ts","../src/components/RadioGroup.ts","../src/components/Menu.ts","../src/components/MenuGroup.ts","../src/components/MenuButton.ts","../src/components/CloseMenuButton.ts","../src/components/MediaTrackRadioButton.ts","../src/components/TrackRadioGroup.ts","../src/components/TextTrackRadioButton.ts","../src/components/TextTrackOffRadioButton.ts","../src/components/TextTrackStyleDisplay.ts","../src/components/TextTrackStyleRadioGroup.ts","../src/components/TextTrackStyleMenu.ts","../src/components/LanguageMenu.ts","../src/components/LanguageMenuButton.ts","../src/components/PlaybackRateRadioGroup.ts","../src/components/PlaybackRateMenuButton.ts","../src/components/PlaybackRateMenu.ts","../src/components/PlaybackRateDisplay.ts","../src/components/ActiveQualityDisplay.ts","../src/components/QualityRadioButton.ts","../src/components/QualityRadioGroup.ts","../src/components/TextTrackStyleResetButton.ts","../src/components/SettingsMenu.ts","../src/components/SettingsMenuButton.ts","../src/components/FullscreenButton.ts","../src/components/Range.ts","../src/components/PreviewThumbnail.ts","../src/components/PreviewTimeDisplay.ts","../src/components/TimeRange.ts","../src/components/VolumeRange.ts","../src/components/ErrorDisplay.ts","../src/components/ChromecastButton.ts","../src/components/ChromecastDisplay.ts","../src/components/AirPlayButton.ts","../src/components/LoadingIndicator.ts","../src/components/GestureReceiver.ts","../src/components/LiveButton.ts","../src/components/ads/AdDisplay.ts","../src/components/ads/AdCountdown.ts","../src/components/ads/AdClickThroughButton.ts","../src/components/ads/AdSkipButton.ts","../src/UIContainer.ts","../src/DefaultUI.ts","../src/components/theolive/quality/BadNetworkModeButton.ts","../src/components/theolive/quality/AbstractQualitySelector.ts","../src/components/theolive/quality/AutomaticQualitySelector.ts","../src/components/theolive/quality/BadNetworkModeSelector.ts","../src/components/theolive/quality/BadNetworkModeMenu.ts","../src/THEOliveDefaultUI.ts","../node_modules/@swc/helpers/esm/_class_private_field_loose_base.js","../node_modules/@swc/helpers/esm/_class_private_field_loose_key.js","../src/util/CommonUtils.ts","../src/components/StateReceiverMixin.ts","../src/util/TimeUtils.ts","../src/util/EventUtils.ts","../src/util/GeometryUtils.ts","../src/util/KeyboardNavigation.ts","../src/events/CloseMenuEvent.ts","../src/events/MenuChangeEvent.ts","../src/events/ToggleMenuEvent.ts","../src/util/TrackUtils.ts","../src/util/ColorUtils.ts","../src/util/TextTrackStylePresets.ts","../src/events/EnterFullscreenEvent.ts","../src/events/ExitFullscreenEvent.ts","../node_modules/@webcomponents/shadycss/src/interface.js","../src/util/ColorStops.ts","../src/events/PreviewTimeChangeEvent.ts","../src/util/AdUtils.ts","../src/components/CastButton.ts","../src/components/ChromecastButton.html.ts","../src/components/AirPlayButton.html.ts","../src/components/LoadingIndicator.html.ts","../src/extensions/ExtensionRegistry.ts","../src/util/FullscreenUtils.ts","../src/util/Environment.ts","../src/events/UserIdleChangeEvent.ts","../src/events/ReadyEvent.ts","../src/Global.ts","../src/events/StreamTypeChangeEvent.ts","../src/util/Constants.ts","../src/version.ts"],"sourcesContent":["/* @minVersion 7.20.0 */\n\n/**\n Enums are used in this file, but not assigned to vars to avoid non-hoistable values\n\n CONSTRUCTOR = 0;\n PUBLIC = 1;\n PRIVATE = 2;\n\n FIELD = 0;\n ACCESSOR = 1;\n METHOD = 2;\n GETTER = 3;\n SETTER = 4;\n\n STATIC = 5;\n\n CLASS = 10; // only used in assertValidReturnValue\n*/\n\nfunction _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {\n function createAddInitializerMethod(initializers, decoratorFinishedRef) {\n return function addInitializer(initializer) {\n assertNotFinished(decoratorFinishedRef, \"addInitializer\");\n assertCallable(initializer, \"An initializer\");\n initializers.push(initializer);\n };\n }\n\n function memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value) {\n var kindStr;\n\n switch (kind) {\n case 1 /* ACCESSOR */:\n kindStr = \"accessor\";\n break;\n case 2 /* METHOD */:\n kindStr = \"method\";\n break;\n case 3 /* GETTER */:\n kindStr = \"getter\";\n break;\n case 4 /* SETTER */:\n kindStr = \"setter\";\n break;\n default:\n kindStr = \"field\";\n }\n\n var ctx = { kind: kindStr, name: isPrivate ? \"#\" + name : name, static: isStatic, private: isPrivate, metadata: metadata };\n\n var decoratorFinishedRef = { v: false };\n\n ctx.addInitializer = createAddInitializerMethod(initializers, decoratorFinishedRef);\n\n var get, set;\n if (kind === 0 /* FIELD */) {\n if (isPrivate) {\n get = desc.get;\n set = desc.set;\n } else {\n get = function() {\n return this[name];\n };\n set = function(v) {\n this[name] = v;\n };\n }\n } else if (kind === 2 /* METHOD */) {\n get = function() {\n return desc.value;\n };\n } else {\n // replace with values that will go through the final getter and setter\n if (kind === 1 /* ACCESSOR */ || kind === 3 /* GETTER */) {\n get = function() {\n return desc.get.call(this);\n };\n }\n\n if (kind === 1 /* ACCESSOR */ || kind === 4 /* SETTER */) {\n set = function(v) {\n desc.set.call(this, v);\n };\n }\n }\n ctx.access = get && set ? { get: get, set: set } : get ? { get: get } : { set: set };\n\n try {\n return dec(value, ctx);\n } finally {\n decoratorFinishedRef.v = true;\n }\n }\n\n function assertNotFinished(decoratorFinishedRef, fnName) {\n if (decoratorFinishedRef.v) {\n throw new Error(\"attempted to call \" + fnName + \" after decoration was finished\");\n }\n }\n\n function assertCallable(fn, hint) {\n if (typeof fn !== \"function\") {\n throw new TypeError(hint + \" must be a function\");\n }\n }\n\n function assertValidReturnValue(kind, value) {\n var type = typeof value;\n\n if (kind === 1 /* ACCESSOR */) {\n if (type !== \"object\" || value === null) {\n throw new TypeError(\"accessor decorators must return an object with get, set, or init properties or void 0\");\n }\n if (value.get !== undefined) {\n assertCallable(value.get, \"accessor.get\");\n }\n if (value.set !== undefined) {\n assertCallable(value.set, \"accessor.set\");\n }\n if (value.init !== undefined) {\n assertCallable(value.init, \"accessor.init\");\n }\n } else if (type !== \"function\") {\n var hint;\n if (kind === 0 /* FIELD */) {\n hint = \"field\";\n } else if (kind === 10 /* CLASS */) {\n hint = \"class\";\n } else {\n hint = \"method\";\n }\n throw new TypeError(hint + \" decorators must return a function or void 0\");\n }\n }\n\n function applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata) {\n var decs = decInfo[0];\n\n var desc, init, value;\n\n if (isPrivate) {\n if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) {\n desc = { get: decInfo[3], set: decInfo[4] };\n } else if (kind === 3 /* GETTER */) {\n desc = { get: decInfo[3] };\n } else if (kind === 4 /* SETTER */) {\n desc = { set: decInfo[3] };\n } else {\n desc = { value: decInfo[3] };\n }\n } else if (kind !== 0 /* FIELD */) {\n desc = Object.getOwnPropertyDescriptor(base, name);\n }\n\n if (kind === 1 /* ACCESSOR */) {\n value = { get: desc.get, set: desc.set };\n } else if (kind === 2 /* METHOD */) {\n value = desc.value;\n } else if (kind === 3 /* GETTER */) {\n value = desc.get;\n } else if (kind === 4 /* SETTER */) {\n value = desc.set;\n }\n\n var newValue, get, set;\n\n if (typeof decs === \"function\") {\n newValue = memberDec(decs, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);\n\n if (newValue !== void 0) {\n assertValidReturnValue(kind, newValue);\n\n if (kind === 0 /* FIELD */) {\n init = newValue;\n } else if (kind === 1 /* ACCESSOR */) {\n init = newValue.init;\n get = newValue.get || value.get;\n set = newValue.set || value.set;\n\n value = { get: get, set: set };\n } else {\n value = newValue;\n }\n }\n } else {\n for (var i = decs.length - 1; i >= 0; i--) {\n var dec = decs[i];\n\n newValue = memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);\n\n if (newValue !== void 0) {\n assertValidReturnValue(kind, newValue);\n var newInit;\n\n if (kind === 0 /* FIELD */) {\n newInit = newValue;\n } else if (kind === 1 /* ACCESSOR */) {\n newInit = newValue.init;\n get = newValue.get || value.get;\n set = newValue.set || value.set;\n\n value = { get: get, set: set };\n } else {\n value = newValue;\n }\n\n if (newInit !== void 0) {\n if (init === void 0) {\n init = newInit;\n } else if (typeof init === \"function\") {\n init = [init, newInit];\n } else {\n init.push(newInit);\n }\n }\n }\n }\n }\n\n if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) {\n if (init === void 0) {\n // If the initializer was void 0, sub in a dummy initializer\n init = function(instance, init) {\n return init;\n };\n } else if (typeof init !== \"function\") {\n var ownInitializers = init;\n\n init = function(instance, init) {\n var value = init;\n\n for (var i = 0; i < ownInitializers.length; i++) value = ownInitializers[i].call(instance, value);\n\n return value;\n };\n } else {\n var originalInitializer = init;\n\n init = function(instance, init) {\n return originalInitializer.call(instance, init);\n };\n }\n\n ret.push(init);\n }\n\n if (kind !== 0 /* FIELD */) {\n if (kind === 1 /* ACCESSOR */) {\n desc.get = value.get;\n desc.set = value.set;\n } else if (kind === 2 /* METHOD */) {\n desc.value = value;\n } else if (kind === 3 /* GETTER */) {\n desc.get = value;\n } else if (kind === 4 /* SETTER */) {\n desc.set = value;\n }\n\n if (isPrivate) {\n if (kind === 1 /* ACCESSOR */) {\n ret.push(function(instance, args) {\n return value.get.call(instance, args);\n });\n ret.push(function(instance, args) {\n return value.set.call(instance, args);\n });\n } else if (kind === 2 /* METHOD */) {\n ret.push(value);\n } else {\n ret.push(function(instance, args) {\n return value.call(instance, args);\n });\n }\n } else {\n Object.defineProperty(base, name, desc);\n }\n }\n }\n\n function applyMemberDecs(Class, decInfos, metadata) {\n var ret = [];\n var protoInitializers;\n var staticInitializers;\n\n var existingProtoNonFields = new Map();\n var existingStaticNonFields = new Map();\n\n for (var i = 0; i < decInfos.length; i++) {\n var decInfo = decInfos[i];\n\n // skip computed property names\n if (!Array.isArray(decInfo)) continue;\n\n var kind = decInfo[1];\n var name = decInfo[2];\n var isPrivate = decInfo.length > 3;\n\n var isStatic = kind >= 5; /* STATIC */\n var base;\n var initializers;\n\n if (isStatic) {\n base = Class;\n kind = kind - 5 /* STATIC */;\n // initialize staticInitializers when we see a non-field static member\n staticInitializers = staticInitializers || [];\n initializers = staticInitializers;\n } else {\n base = Class.prototype;\n // initialize protoInitializers when we see a non-field member\n protoInitializers = protoInitializers || [];\n initializers = protoInitializers;\n }\n\n if (kind !== 0 /* FIELD */ && !isPrivate) {\n var existingNonFields = isStatic ? existingStaticNonFields : existingProtoNonFields;\n\n var existingKind = existingNonFields.get(name) || 0;\n\n if (existingKind === true || (existingKind === 3 /* GETTER */ && kind !== 4) /* SETTER */ || (existingKind === 4 /* SETTER */ && kind !== 3) /* GETTER */) {\n throw new Error(\n \"Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: \"\n + name\n );\n } else if (!existingKind && kind > 2 /* METHOD */) {\n existingNonFields.set(name, kind);\n } else {\n existingNonFields.set(name, true);\n }\n }\n\n applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata);\n }\n\n pushInitializers(ret, protoInitializers);\n pushInitializers(ret, staticInitializers);\n return ret;\n }\n\n function pushInitializers(ret, initializers) {\n if (initializers) {\n ret.push(function(instance) {\n for (var i = 0; i < initializers.length; i++) initializers[i].call(instance);\n return instance;\n });\n }\n }\n\n function applyClassDecs(targetClass, classDecs, metadata) {\n if (classDecs.length > 0) {\n var initializers = [];\n var newClass = targetClass;\n var name = targetClass.name;\n\n for (var i = classDecs.length - 1; i >= 0; i--) {\n var decoratorFinishedRef = { v: false };\n\n try {\n var nextNewClass = classDecs[i](newClass, { kind: \"class\", name: name, addInitializer: createAddInitializerMethod(initializers, decoratorFinishedRef), metadata });\n } finally {\n decoratorFinishedRef.v = true;\n }\n\n if (nextNewClass !== undefined) {\n assertValidReturnValue(10, /* CLASS */ nextNewClass);\n newClass = nextNewClass;\n }\n }\n\n return [defineMetadata(newClass, metadata), function() {\n for (var i = 0; i < initializers.length; i++) initializers[i].call(newClass);\n }];\n }\n // The transformer will not emit assignment when there are no class decorators,\n // so we don't have to return an empty array here.\n }\n\n function defineMetadata(Class, metadata) {\n return Object.defineProperty(Class, Symbol.metadata || Symbol.for(\"Symbol.metadata\"), { configurable: true, enumerable: true, value: metadata });\n }\n\n /**\n Basic usage:\n\n applyDecs(\n Class,\n [\n // member decorators\n [\n dec, // dec or array of decs\n 0, // kind of value being decorated\n 'prop', // name of public prop on class containing the value being decorated,\n '#p', // the name of the private property (if is private, void 0 otherwise),\n ]\n ],\n [\n // class decorators\n dec1, dec2\n ]\n )\n ```\n\n Fully transpiled example:\n\n ```js\n @dec\n class Class {\n @dec\n a = 123;\n\n @dec\n #a = 123;\n\n @dec\n @dec2\n accessor b = 123;\n\n @dec\n accessor #b = 123;\n\n @dec\n c() { console.log('c'); }\n\n @dec\n #c() { console.log('privC'); }\n\n @dec\n get d() { console.log('d'); }\n\n @dec\n get #d() { console.log('privD'); }\n\n @dec\n set e(v) { console.log('e'); }\n\n @dec\n set #e(v) { console.log('privE'); }\n }\n\n\n // becomes\n let initializeInstance;\n let initializeClass;\n\n let initA;\n let initPrivA;\n\n let initB;\n let initPrivB, getPrivB, setPrivB;\n\n let privC;\n let privD;\n let privE;\n\n let Class;\n class _Class {\n static {\n let ret = applyDecs(\n this,\n [\n [dec, 0, 'a'],\n [dec, 0, 'a', (i) => i.#a, (i, v) => i.#a = v],\n [[dec, dec2], 1, 'b'],\n [dec, 1, 'b', (i) => i.#privBData, (i, v) => i.#privBData = v],\n [dec, 2, 'c'],\n [dec, 2, 'c', () => console.log('privC')],\n [dec, 3, 'd'],\n [dec, 3, 'd', () => console.log('privD')],\n [dec, 4, 'e'],\n [dec, 4, 'e', () => console.log('privE')],\n ],\n [\n dec\n ]\n )\n\n initA = ret[0];\n\n initPrivA = ret[1];\n\n initB = ret[2];\n\n initPrivB = ret[3];\n getPrivB = ret[4];\n setPrivB = ret[5];\n\n privC = ret[6];\n\n privD = ret[7];\n\n privE = ret[8];\n\n initializeInstance = ret[9];\n\n Class = ret[10]\n\n initializeClass = ret[11];\n }\n\n a = (initializeInstance(this), initA(this, 123));\n\n #a = initPrivA(this, 123);\n\n #bData = initB(this, 123);\n get b() { return this.#bData }\n set b(v) { this.#bData = v }\n\n #privBData = initPrivB(this, 123);\n get #b() { return getPrivB(this); }\n set #b(v) { setPrivB(this, v); }\n\n c() { console.log('c'); }\n\n #c(...args) { return privC(this, ...args) }\n\n get d() { console.log('d'); }\n\n get #d() { return privD(this); }\n\n set e(v) { console.log('e'); }\n\n set #e(v) { privE(this, v); }\n }\n\n initializeClass(Class);\n */\n\n _apply_decs_2203_r = function(targetClass, memberDecs, classDecs, parentClass) {\n if (parentClass !== void 0) {\n var parentMetadata = parentClass[Symbol.metadata || Symbol.for(\"Symbol.metadata\")];\n }\n var metadata = Object.create(parentMetadata === void 0 ? null : parentMetadata);\n var e = applyMemberDecs(targetClass, memberDecs, metadata);\n if (!classDecs.length) defineMetadata(targetClass, metadata);\n return {\n e: e,\n // Lazily apply class decorations so that member init locals can be properly bound.\n get c() {\n return applyClassDecs(targetClass, classDecs, metadata);\n }\n };\n };\n\n return _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass);\n}\n\nexport { _apply_decs_2203_r as _ };\n","function _identity(x) {\n return x;\n}\n\nexport { _identity as _ };\n","export enum Attribute {\n CONFIGURATION = 'configuration',\n SOURCE = 'source',\n AUTOPLAY = 'autoplay',\n MUTED = 'muted',\n FULLSCREEN = 'fullscreen',\n FULLWINDOW = 'fullwindow',\n FLUID = 'fluid',\n DEVICE_TYPE = 'device-type',\n MOBILE = 'mobile',\n TV = 'tv',\n TV_FOCUS = 'tv-focus',\n MOBILE_ONLY = 'mobile-only',\n MOBILE_HIDDEN = 'mobile-hidden',\n TV_ONLY = 'tv-only',\n TV_HIDDEN = 'tv-hidden',\n USER_IDLE = 'user-idle',\n USER_IDLE_TIMEOUT = 'user-idle-timeout',\n NO_AUTO_HIDE = 'no-auto-hide',\n DISABLED = 'disabled',\n INERT = 'inert',\n HIDDEN = 'hidden',\n PAUSED = 'paused',\n ENDED = 'ended',\n VOLUME_LEVEL = 'volume-level',\n CASTING = 'casting',\n LOADING = 'loading',\n STREAM_TYPE = 'stream-type',\n LIVE = 'live',\n LIVE_ONLY = 'live-only',\n LIVE_HIDDEN = 'live-hidden',\n LIVE_THRESHOLD = 'live-threshold',\n DVR_THRESHOLD = 'dvr-threshold',\n REMAINING = 'remaining',\n REMAINING_WHEN_LIVE = 'remaining-when-live',\n SHOW_DURATION = 'show-duration',\n SEEK_OFFSET = 'seek-offset',\n MENU = 'menu',\n MENU_OPENED = 'menu-opened',\n MENU_CLOSE_ON_INPUT = 'menu-close-on-input',\n ARIA_LABEL = 'aria-label',\n ARIA_LIVE = 'aria-live',\n ARIA_CHECKED = 'aria-checked',\n HAS_AUDIO = 'has-audio',\n HAS_SUBTITLES = 'has-subtitles',\n HAS_ERROR = 'has-error',\n HAS_FIRST_PLAY = 'has-first-play',\n CAST_STATE = 'cast-state',\n TRACK_TYPE = 'track-type',\n SHOW_OFF = 'show-off',\n PLAYING_AD = 'playing-ad',\n SHOW_AD_MARKERS = 'show-ad-markers',\n CLICKTHROUGH = 'clickthrough',\n PROPERTY = 'property',\n VALUE = 'value'\n}\n","export enum KeyCode {\n ENTER = 13,\n ESCAPE = 27,\n SPACE = 32,\n END = 35,\n HOME = 36,\n LEFT = 37,\n UP = 38,\n RIGHT = 39,\n DOWN = 40,\n // Multiple back key configurations depending on the platform\n // https://suite.st/docs/faq/tv-specific-keys-in-browser/\n BACK_SAMSUNG = 88,\n BACK_WEBOS = 461,\n BACK_TIZEN = 10009\n}\n\nexport type ArrowKeyCode = KeyCode.LEFT | KeyCode.UP | KeyCode.RIGHT | KeyCode.DOWN;\nexport type BackKeyCode = KeyCode.BACK_TIZEN | KeyCode.ESCAPE | KeyCode.BACK_SAMSUNG | KeyCode.BACK_WEBOS;\nexport type ActivationKeyCode = KeyCode.ENTER | KeyCode.SPACE;\n\nexport function isArrowKey(keyCode: number): keyCode is ArrowKeyCode {\n return KeyCode.LEFT <= keyCode && keyCode <= KeyCode.DOWN;\n}\n\nexport function isBackKey(keyCode: number): keyCode is BackKeyCode {\n return keyCode === KeyCode.BACK_TIZEN || keyCode === KeyCode.ESCAPE || keyCode === KeyCode.BACK_SAMSUNG || keyCode === KeyCode.BACK_WEBOS;\n}\n\nexport function isActivationKey(keyCode: number): keyCode is ActivationKeyCode {\n return keyCode === KeyCode.ENTER || keyCode === KeyCode.SPACE;\n}\n","export enum ExtensionSlot {\n TopControlBar = 'top-control-bar',\n BottomControlBar = 'bottom-control-bar',\n Menu = 'menu'\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport controlBarCss from './ControlBar.css';\n\n/**\n * A horizontal control bar that can contain other controls.\n */\n@customElement('theoplayer-control-bar')\nexport class ControlBar extends LitElement {\n static override styles = [controlBarCss];\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-control-bar': ControlBar;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { templateContent } from 'lit/directives/template-content.js';\nimport buttonCss from './Button.css';\nimport { Attribute } from '../util/Attribute';\nimport { isActivationKey } from '../util/KeyCode';\n\n/** @deprecated */\nexport interface ButtonOptions {\n /**\n * @deprecated Override {@link Button.render} instead.\n */\n template?: HTMLTemplateElement;\n}\n\n/**\n * @deprecated Override {@link Button.render} instead.\n */\nexport function buttonTemplate(button: string, extraCss: string = ''): string {\n return `<style>${extraCss}</style>${button}`;\n}\n\n/**\n * A basic button.\n *\n * @attribute `disabled` - Whether the button is disabled. When disabled, the button cannot be clicked.\n */\n// Based on howto-toggle-button\n// https://github.com/GoogleChromeLabs/howto-components/blob/079d0fa34ff9038b26ea8883b1db5dd6b677d7ba/elements/howto-toggle-button/howto-toggle-button.js\n@customElement('theoplayer-button')\nexport class Button extends LitElement {\n static styles = [buttonCss];\n\n private readonly _template: HTMLTemplateElement | undefined;\n private _disabled: boolean = false;\n\n /**\n * Creates a basic button.\n *\n * By default, the button renders the contents of its direct children (i.e. it has a single unnamed `<slot>`).\n * Subclasses can override this by overriding {@link render}.\n */\n constructor(options?: ButtonOptions) {\n super();\n this._template = options?.template;\n if (this._template) {\n // Render immediately to populate the shadow DOM.\n this.performUpdate();\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'button');\n }\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0');\n }\n if (!this.hasAttribute(Attribute.ARIA_LIVE)) {\n // Let the screen reader user know that the text of the button may change\n this.setAttribute(Attribute.ARIA_LIVE, 'polite');\n }\n if (!this._disabled) {\n this._enable();\n }\n }\n\n disconnectedCallback(): void {\n this.removeEventListener('click', this._onClick);\n this.removeEventListener('keydown', this._onKeyDown);\n this.removeEventListener('keyup', this._onKeyUp);\n }\n\n /**\n * Whether the button is disabled.\n *\n * When disabled, the button cannot be clicked.\n */\n get disabled(): boolean {\n return this._disabled;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.DISABLED })\n set disabled(value: boolean) {\n this._disabled = value;\n if (value) {\n this._disable();\n } else {\n this._enable();\n }\n }\n\n private _enable(): void {\n this.removeEventListener('click', this._onClick);\n this.removeEventListener('keydown', this._onKeyDown);\n this.removeEventListener('keyup', this._onKeyUp);\n this.addEventListener('click', this._onClick);\n this.addEventListener('keydown', this._onKeyDown);\n\n this.setAttribute('aria-disabled', 'false');\n this.setAttribute('tabindex', '0');\n }\n\n private _disable(): void {\n this.removeEventListener('click', this._onClick);\n this.removeEventListener('keydown', this._onKeyDown);\n this.removeEventListener('keyup', this._onKeyUp);\n\n this.setAttribute('aria-disabled', 'true');\n\n // The `tabindex` attribute does not provide a way to fully remove focusability from an element.\n // Elements with `tabindex=-1` can still be focused with a mouse or by calling `focus()`.\n // To make sure an element is disabled and not focusable, remove the `tabindex` attribute.\n this.removeAttribute('tabindex');\n\n // If the focus is currently on this element, unfocus it by calling the `HTMLElement.blur()` method.\n this.blur();\n }\n\n private readonly _onClick = () => {\n this.handleClick();\n };\n\n protected readonly _onKeyDown = (e: KeyboardEvent) => {\n if (isActivationKey(e.keyCode) && !e.metaKey && !e.altKey) {\n this.addEventListener('keyup', this._onKeyUp);\n } else {\n this.removeEventListener('keyup', this._onKeyUp);\n }\n };\n\n protected readonly _onKeyUp = (e: KeyboardEvent) => {\n this.removeEventListener('keyup', this._onKeyUp);\n if (isActivationKey(e.keyCode)) {\n this.handleClick();\n }\n };\n\n protected render(): HTMLTemplateResult {\n if (this._template) {\n return html`${templateContent(this._template)}`;\n }\n return html`<slot></slot>`;\n }\n\n /**\n * Handle a button click.\n *\n * By default, this does nothing. Subclasses can override this method to add behavior to the button.\n */\n protected handleClick(): void {}\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-button': Button;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { templateContent } from 'lit/directives/template-content.js';\nimport linkButtonCss from './LinkButton.css';\nimport { Attribute } from '../util/Attribute';\nimport { KeyCode } from '../util/KeyCode';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport { type ButtonOptions, buttonTemplate } from './Button';\n\n/**\n * @deprecated Override {@link LinkButton.render} instead.\n */\nexport function linkButtonTemplate(button: string, extraCss: string = ''): string {\n return buttonTemplate(`<a>${button}</a>`, extraCss);\n}\n\n/**\n * A {@link Button | button} that opens a hyperlink.\n *\n * @attribute `disabled` - Whether the button is disabled. When disabled, the button cannot be clicked.\n */\n@customElement('theoplayer-link-button')\nexport class LinkButton extends LitElement {\n static styles = [linkButtonCss];\n\n private readonly _template: HTMLTemplateElement | undefined;\n private _disabled: boolean = false;\n\n private readonly _linkRef: Ref<HTMLAnchorElement> = createRef<HTMLAnchorElement>();\n\n constructor(options?: ButtonOptions) {\n super();\n this._template = options?.template;\n if (this._template) {\n // Render immediately to populate the shadow DOM.\n this.performUpdate();\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'button');\n }\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0');\n }\n if (!this.hasAttribute(Attribute.ARIA_LIVE)) {\n // Let the screen reader user know that the text of the button may change\n this.setAttribute(Attribute.ARIA_LIVE, 'polite');\n }\n if (!this.hasAttribute(Attribute.DISABLED)) {\n this._enable();\n }\n }\n\n /**\n * Whether the button is disabled.\n *\n * When disabled, the button cannot be clicked.\n */\n get disabled(): boolean {\n return this._disabled;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.DISABLED })\n set disabled(value: boolean) {\n this._disabled = value;\n if (value) {\n this._disable();\n } else {\n this._enable();\n }\n }\n\n @state()\n protected accessor href: string = '';\n\n @state()\n protected accessor target: string = '';\n\n private _enable(): void {\n this.setAttribute('aria-disabled', 'false');\n this.setAttribute('tabindex', '0');\n }\n\n private _disable(): void {\n this.setAttribute('aria-disabled', 'true');\n\n // The `tabindex` attribute does not provide a way to fully remove focusability from an element.\n // Elements with `tabindex=-1` can still be focused with a mouse or by calling `focus()`.\n // To make sure an element is disabled and not focusable, remove the `tabindex` attribute.\n this.removeAttribute('tabindex');\n\n // If the focus is currently on this element, unfocus it by calling the `HTMLElement.blur()` method.\n this.blur();\n }\n\n private readonly _onKeyDown = (event: KeyboardEvent) => {\n // Don't handle modifier shortcuts typically used by assistive technology.\n if (event.metaKey || event.altKey) return;\n\n switch (event.keyCode) {\n // Enter is already handled by the browser.\n // case KeyCode.ENTER:\n case KeyCode.SPACE:\n event.preventDefault();\n this._linkRef.value?.click();\n break;\n // Any other key press is ignored and passed back to the browser.\n default:\n return;\n }\n };\n\n private readonly _onClick = () => {\n if (this.disabled) {\n return;\n }\n this.handleClick();\n };\n\n protected override render(): HTMLTemplateResult {\n if (this._template) {\n return html`${templateContent(this._template)}`;\n }\n return html`<a ${ref(this._linkRef)} href=${this.href} target=${this.target} @keydown=${this._onKeyDown} @click=${this._onClick}\n >${this.renderLinkContent()}</a\n >`;\n }\n\n protected renderLinkContent(): HTMLTemplateResult {\n return html`<slot></slot>`;\n }\n\n protected handleClick(): void {}\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-link-button': LinkButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport slotContainerCss from './SlotContainer.css';\n\n/**\n * A container that can be assigned to a slot,\n * and behaves as if all its children are directly assigned to that slot.\n *\n * This behaves approximately like a regular `<div>` with style `display: contents`,\n * but receives some special treatment from e.g. {@link MenuGroup | `<theoplayer-menu-group>`}\n * which normally expects its {@link Menu | menu}s to be slotted in as direct children.\n * Those menus can also be children of a `<theoplayer-slot-container>` instead.\n *\n * This is an internal component, used mainly by Open Video UI for React.\n * You shouldn't need this under normal circumstances.\n * @internal\n */\n@customElement('theoplayer-slot-container')\nexport class SlotContainer extends LitElement {\n static override styles = [slotContainerCss];\n\n protected override render(): HTMLTemplateResult {\n return html`<slot></slot>`;\n }\n}\n\nexport function isSlotContainer(element: Element): element is SlotContainer {\n return element.nodeName.toLowerCase() === 'theoplayer-slot-container';\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-slot-container': SlotContainer;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { Button } from './Button';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport playButtonCss from './PlayButton.css';\nimport playIcon from '../icons/play.svg';\nimport pauseIcon from '../icons/pause.svg';\nimport replayIcon from '../icons/replay.svg';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { Attribute } from '../util/Attribute';\n\nconst PLAYER_EVENTS = ['seeking', 'seeked', 'ended', 'emptied', 'sourcechange'] as const;\n\n/**\n * A button that toggles whether the player is playing or paused.\n *\n * @attribute `paused` (readonly) - Whether the player is paused. Reflects `ui.player.paused`.\n * @attribute `ended` (readonly) - Whether the player is ended. Reflects `ui.player.ended`.\n */\n@customElement('theoplayer-play-button')\n@stateReceiver(['player'])\nexport class PlayButton extends Button {\n static styles = [...Button.styles, playButtonCss];\n\n private _player: ChromelessPlayer | undefined;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._updateFromPlayer();\n this._updateAriaLabel();\n }\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.PAUSED })\n accessor paused: boolean = false;\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.ENDED })\n accessor ended: boolean = false;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener('play', this._onPlay);\n this._player.removeEventListener('pause', this._onPause);\n this._player.removeEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n this._player = player;\n this._updateFromPlayer();\n if (this._player !== undefined) {\n this._player.addEventListener('play', this._onPlay);\n this._player.addEventListener('pause', this._onPause);\n this._player.addEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n }\n\n private readonly _onPlay = (): void => {\n this.paused = false;\n this._updateEnded();\n };\n\n private readonly _onPause = (): void => {\n this.paused = true;\n this._updateEnded();\n };\n\n private readonly _updateFromPlayer = (): void => {\n this.paused = this._player?.paused ?? true;\n this._updateEnded();\n this._updateDisabled();\n };\n\n private _updateEnded(): void {\n this.ended = this._player?.ended ?? false;\n }\n\n private readonly _updateDisabled = () => {\n this.disabled = this._player?.source === undefined;\n };\n\n protected override handleClick() {\n if (this._player !== undefined) {\n if (this._player.source === undefined) {\n // Do nothing if the player has no source.\n return;\n }\n if (this._player.paused) {\n this._player.play();\n } else {\n this._player.pause();\n }\n }\n }\n\n override attributeChangedCallback(attrName: string, oldValue: any, newValue: any) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (PlayButton.observedAttributes.indexOf(attrName as Attribute) >= 0) {\n this._updateAriaLabel();\n }\n }\n\n private _updateAriaLabel(): void {\n const label = this.ended ? 'replay' : this.paused ? 'play' : 'pause';\n this.setAttribute(Attribute.ARIA_LABEL, label);\n }\n\n protected override render(): HTMLTemplateResult {\n return html`\n <span part=\"play-icon\"><slot name=\"play-icon\">${unsafeSVG(playIcon)}</slot></span>\n <span part=\"pause-icon\"><slot name=\"pause-icon\">${unsafeSVG(pauseIcon)}</slot></span>\n <span part=\"replay-icon\"><slot name=\"replay-icon\">${unsafeSVG(replayIcon)}</slot></span>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-play-button': PlayButton;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { Button } from './Button';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport muteButtonCss from './MuteButton.css';\nimport offIcon from '../icons/volume-off.svg';\nimport lowIcon from '../icons/volume-low.svg';\nimport highIcon from '../icons/volume-high.svg';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { Attribute } from '../util/Attribute';\n\nexport type VolumeLevel = 'off' | 'low' | 'high';\n\nconst PLAYER_EVENTS = ['volumechange'] as const;\n\n/**\n * A button that toggles whether audio is muted or not.\n *\n * @attribute `volume-level` (readonly) - The volume level of the player.\n * Can be \"off\" (muted), \"low\" (volume < 50%) or \"high\" (volume >= 50%).\n */\n@customElement('theoplayer-mute-button')\n@stateReceiver(['player'])\nexport class MuteButton extends Button {\n static styles = [...Button.styles, muteButtonCss];\n\n private _player: ChromelessPlayer | undefined;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._updateFromPlayer();\n this._updateAriaLabel();\n }\n\n /**\n * The volume level of the player.\n */\n @property({ reflect: true, state: true, type: String, attribute: Attribute.VOLUME_LEVEL })\n accessor volumeLevel: VolumeLevel = 'off';\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n this._player = player;\n this._updateFromPlayer();\n if (this._player !== undefined) {\n this._player.addEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n }\n\n private readonly _updateFromPlayer = () => {\n if (this._player !== undefined) {\n const volume = this._player.volume;\n const muted = this._player.muted;\n if (muted) {\n this.volumeLevel = 'off';\n } else if (volume < 0.5) {\n this.volumeLevel = 'low';\n } else {\n this.volumeLevel = 'high';\n }\n } else {\n this.volumeLevel = 'off';\n }\n };\n\n protected override handleClick() {\n if (this._player !== undefined) {\n this._player.muted = !this._player.muted;\n this._updateFromPlayer();\n }\n }\n\n override attributeChangedCallback(attrName: string, oldValue: any, newValue: any) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (MuteButton.observedAttributes.indexOf(attrName as Attribute) >= 0) {\n this._updateAriaLabel();\n }\n }\n\n private _updateAriaLabel(): void {\n const label = this.volumeLevel === 'off' ? 'unmute' : 'mute';\n this.setAttribute(Attribute.ARIA_LABEL, label);\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<span part=\"off-icon\"><slot name=\"off-icon\">${unsafeSVG(offIcon)}</slot></span\n ><span part=\"low-icon\"><slot name=\"low-icon\">${unsafeSVG(lowIcon)}</slot></span\n ><span part=\"high-icon\"><slot name=\"high-icon\">${unsafeSVG(highIcon)}</slot></span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-mute-button': MuteButton;\n }\n}\n","import { html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { Button } from './Button';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport seekButtonCss from './SeekButton.css';\nimport seekForwardIcon from '../icons/seek-forward.svg';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { Attribute } from '../util/Attribute';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\n\nconst DEFAULT_SEEK_OFFSET = 10;\n\n/**\n * A button that seeks forward or backward by a fixed offset.\n *\n * @attribute `seek-offset` - The offset (in seconds) by which to seek forward (if positive) or backward (if negative).\n */\n@customElement('theoplayer-seek-button')\n@stateReceiver(['player'])\nexport class SeekButton extends Button {\n static styles = [...Button.styles, seekButtonCss];\n\n private _player: ChromelessPlayer | undefined;\n\n override connectedCallback() {\n super.connectedCallback();\n this._updateAriaLabel();\n }\n\n /**\n * The offset (in seconds) by which to seek forward (if positive) or backward (if negative).\n */\n @property({ reflect: true, type: Number, attribute: Attribute.SEEK_OFFSET })\n accessor seekOffset: number = DEFAULT_SEEK_OFFSET;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n this._player = player;\n }\n\n protected override handleClick() {\n if (this._player === undefined) {\n return;\n }\n const duration = this._player.duration;\n if (isNaN(duration)) {\n return;\n }\n this._player.currentTime = Math.max(0, Math.min(duration, this._player.currentTime + this.seekOffset));\n }\n\n override attributeChangedCallback(attrName: string, oldValue: any, newValue: any) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (SeekButton.observedAttributes.indexOf(attrName as Attribute) >= 0) {\n this._updateAriaLabel();\n }\n }\n\n private _updateAriaLabel(): void {\n const seekOffset = this.seekOffset;\n const label = seekOffset >= 0 ? `seek forward by ${seekOffset} seconds` : `seek backward by ${-seekOffset} seconds`;\n this.setAttribute(Attribute.ARIA_LABEL, label);\n }\n\n protected override render() {\n return html`<span part=\"icon\"><slot name=\"icon\">${unsafeSVG(seekForwardIcon)}</slot></span\n ><span part=\"offset\">${String(Math.abs(this.seekOffset))}</span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-seek-button': SeekButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport textDisplayCss from './TextDisplay.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport { formatAsTimePhrase, formatTime } from '../util/TimeUtils';\nimport { Attribute } from '../util/Attribute';\nimport type { StreamType } from '../util/StreamType';\n\nconst PLAYER_EVENTS = ['timeupdate', 'seeking', 'seeked', 'durationchange'] as const;\n\nconst DEFAULT_MISSING_TIME_PHRASE = 'video not loaded, unknown time';\n\n/**\n * A control that displays the current time of the stream.\n *\n * @attribute `show-duration` - If set, also shows the duration of the stream.\n * @attribute `remaining` - If set, shows the remaining time of the stream. Not compatible with `show-duration`.\n * @attribute `remaining-when-live` - If set, and the stream is a livestream, shows the remaining time\n * (until the live point) of the stream.\n */\n@customElement('theoplayer-time-display')\n@stateReceiver(['player', 'streamType'])\nexport class TimeDisplay extends LitElement {\n static override styles = [textDisplayCss];\n\n private _player: ChromelessPlayer | undefined;\n\n connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'progressbar');\n }\n if (!this.hasAttribute(Attribute.ARIA_LABEL)) {\n this.setAttribute(Attribute.ARIA_LABEL, 'playback time');\n }\n if (!this.hasAttribute(Attribute.ARIA_LIVE)) {\n // Tell screen readers not to automatically read the time as it changes\n this.setAttribute(Attribute.ARIA_LIVE, 'off');\n }\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n this._player = player;\n this._updateFromPlayer();\n if (this._player !== undefined) {\n this._player.addEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n }\n @property({ reflect: true, type: Boolean, attribute: Attribute.REMAINING })\n accessor remaining: boolean = false;\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.REMAINING_WHEN_LIVE })\n accessor remainingWhenLive: boolean = false;\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.SHOW_DURATION })\n accessor showDuration: boolean = false;\n\n @property({ reflect: true, type: String, attribute: Attribute.STREAM_TYPE })\n accessor streamType: StreamType = 'vod';\n\n @state()\n private accessor _currentTime: number = 0;\n\n @state()\n private accessor _duration: number = NaN;\n\n @state()\n private accessor _endTime: number = 0;\n\n private readonly _updateFromPlayer = () => {\n const currentTime = this._player ? this._player.currentTime : 0;\n const duration = this._player ? this._player.duration : NaN;\n const seekable = this._player?.seekable;\n const endTime = isFinite(duration) ? duration : seekable && seekable.length > 0 ? seekable.end(0) : NaN;\n this._currentTime = currentTime;\n this._duration = duration;\n this._endTime = endTime;\n };\n\n protected override render(): HTMLTemplateResult {\n const remaining = this.remaining || (this.remainingWhenLive && this.streamType !== 'vod');\n let time = this._currentTime;\n const endTime = this._endTime;\n if (remaining) {\n time = -((this._endTime || 0) - time);\n }\n let text: string;\n if (this.showDuration && !remaining) {\n text = `${formatTime(time, endTime, remaining)} / ${formatTime(endTime)}`;\n } else {\n text = formatTime(time, endTime, remaining);\n }\n\n let ariaValueText: string;\n if (isNaN(this._duration)) {\n ariaValueText = DEFAULT_MISSING_TIME_PHRASE;\n } else if (this.showDuration) {\n ariaValueText = `${formatAsTimePhrase(time, remaining)} of ${formatAsTimePhrase(endTime)}`;\n } else {\n ariaValueText = formatAsTimePhrase(time, remaining);\n }\n this.setAttribute('aria-valuetext', ariaValueText);\n\n return html`<span>${text}</span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-time-display': TimeDisplay;\n }\n}\n","import { html, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport textDisplayCss from './TextDisplay.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport { formatTime } from '../util/TimeUtils';\nimport { Attribute } from '../util/Attribute';\n\nconst PLAYER_EVENTS = ['durationchange'] as const;\n\n/**\n * A control that displays the duration of the stream.\n */\n@customElement('theoplayer-duration-display')\n@stateReceiver(['player'])\nexport class DurationDisplay extends LitElement {\n static override styles = [textDisplayCss];\n\n private _player: ChromelessPlayer | undefined;\n\n connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.hasAttribute(Attribute.ARIA_LIVE)) {\n // Tell screen readers not to automatically read the duration as it changes\n this.setAttribute(Attribute.ARIA_LIVE, 'off');\n }\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n this._player = player;\n this._updateFromPlayer();\n if (this._player !== undefined) {\n this._player.addEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n }\n\n /**\n * The current duration.\n */\n @state()\n accessor duration: number = NaN;\n\n private readonly _updateFromPlayer = () => {\n this.duration = this._player ? this._player.duration : NaN;\n };\n\n protected override render() {\n return html`<span>${formatTime(this.duration)}</span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-duration-display': DurationDisplay;\n }\n}\n","import { customElement, property } from 'lit/decorators.js';\nimport { Button } from './Button';\nimport { Attribute } from '../util/Attribute';\nimport { createEvent } from '../util/EventUtils';\nimport type { RadioGroup } from './RadioGroup';\n\n/**\n * A button that can be checked.\n *\n * When part of a {@link RadioGroup}, at most one button in the group can be checked.\n */\n@customElement('theoplayer-radio-button')\nexport class RadioButton extends Button {\n private _checked: boolean = false;\n\n override connectedCallback() {\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'radio');\n }\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '-1');\n }\n\n super.connectedCallback();\n }\n\n /**\n * Whether this radio button is checked.\n */\n get checked(): boolean {\n return this._checked;\n }\n\n @property({\n reflect: true,\n type: Boolean,\n attribute: Attribute.ARIA_CHECKED,\n converter: {\n fromAttribute: (value: string | null) => value != null && value !== 'false',\n toAttribute: (value: boolean) => String(value)\n }\n })\n set checked(checked: boolean) {\n if (this._checked !== checked) {\n this._checked = checked;\n this.handleChange();\n this.dispatchEvent(createEvent('change', { bubbles: true }));\n }\n }\n\n /**\n * The value associated with this radio button.\n */\n @property({ attribute: Attribute.VALUE })\n accessor value: any = undefined;\n\n protected handleClick(): void {\n this.checked = true;\n this.dispatchEvent(createEvent('input', { bubbles: true, composed: true }));\n }\n\n protected handleChange(): void {}\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-radio-button': RadioButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport { isArrowKey, KeyCode } from '../util/KeyCode';\nimport { RadioButton } from './RadioButton';\nimport { createEvent } from '../util/EventUtils';\nimport { arrayFind, getSlottedElements, noOp, upgradeCustomElementIfNeeded } from '../util/CommonUtils';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { Attribute } from '../util/Attribute';\nimport type { DeviceType } from '../util/DeviceType';\nimport { navigateByArrowKey } from '../util/KeyboardNavigation';\n\n/**\n * A group of {@link RadioButton}s. At most one button in the group can be checked.\n *\n * ## Behavior\n * This radio group implements the [roving tabindex](https://www.w3.org/WAI/ARIA/apg/example-index/radio/radio.html) pattern.\n * - `Tab` moves focus in or out of the radio group.\n * - `Up`/`Left` arrow moves focus to the previous radio button.\n * - `Down`/`Right` arrow moves focus to the next radio button.\n * - `Home` moves focus to the first radio button.\n * - `End` moves focus to the last radio button.\n */\n// Based on howto-radio-group\n// https://github.com/GoogleChromeLabs/howto-components/blob/079d0fa34ff9038b26ea8883b1db5dd6b677d7ba/elements/howto-radio-group/howto-radio-group.js\n@customElement('theoplayer-radio-group')\n@stateReceiver(['deviceType'])\nexport class RadioGroup extends LitElement {\n private readonly _slotRef: Ref<HTMLSlotElement> = createRef<HTMLSlotElement>();\n private _radioButtons: RadioButton[] = [];\n private _value: any = undefined;\n\n constructor() {\n super();\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'radiogroup');\n }\n\n this.addEventListener('keydown', this._onKeyDown);\n this._onSlotChange();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('keydown', this._onKeyDown);\n }\n\n protected override firstUpdated(): void {\n this._onSlotChange();\n }\n\n protected override createRenderRoot(): HTMLElement | DocumentFragment {\n const root = super.createRenderRoot();\n root.addEventListener('change', this._onButtonChange);\n return root;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.DEVICE_TYPE })\n accessor deviceType: DeviceType = 'desktop';\n\n /**\n * The selected value.\n */\n get value(): any {\n return this._value;\n }\n\n @property({ attribute: Attribute.VALUE })\n set value(value: any) {\n if (this._value === value) {\n return;\n }\n this._value = value;\n this.updateCheckedButton();\n this.dispatchEvent(createEvent('change', { bubbles: true }));\n }\n\n private readonly _onSlotChange = () => {\n const slot = this._slotRef.value;\n if (!slot) return;\n const children = getSlottedElements(slot);\n const upgradePromises: Array<Promise<unknown>> = [];\n for (const child of children) {\n if (!isRadioButton(child)) {\n const promise = upgradeCustomElementIfNeeded(child);\n if (promise) {\n upgradePromises.push(promise);\n }\n }\n }\n if (upgradePromises.length > 0) {\n Promise.all(upgradePromises).then(this._onSlotChange, noOp);\n }\n\n this._radioButtons = children.filter(isRadioButton);\n\n let firstFocusedButton = this.focusedRadioButton;\n if (!firstFocusedButton) {\n this.firstRadioButton?.setAttribute('tabindex', '0');\n }\n\n this.updateCheckedButton();\n };\n\n private readonly _onKeyDown = (event: KeyboardEvent) => {\n if (this.deviceType === 'tv' && isArrowKey(event.keyCode)) {\n if (navigateByArrowKey(this, this._radioButtons, event.keyCode)) {\n event.preventDefault();\n event.stopPropagation();\n }\n return;\n }\n switch (event.keyCode) {\n case KeyCode.UP:\n case KeyCode.LEFT: {\n if (this._focusPrevButton()) {\n event.preventDefault();\n }\n break;\n }\n case KeyCode.DOWN:\n case KeyCode.RIGHT: {\n if (this._focusNextButton()) {\n event.preventDefault();\n }\n break;\n }\n case KeyCode.HOME: {\n event.preventDefault();\n this.setFocusedRadioButton(this.firstRadioButton);\n break;\n }\n case KeyCode.END: {\n event.preventDefault();\n this.setFocusedRadioButton(this.lastRadioButton);\n break;\n }\n default: {\n break;\n }\n }\n };\n\n get focusedRadioButton(): RadioButton | null {\n return arrayFind(this._radioButtons, (button) => button.tabIndex === 0) ?? null;\n }\n\n get checkedRadioButton(): RadioButton | null {\n return arrayFind(this._radioButtons, (button) => button.checked) ?? null;\n }\n\n get firstRadioButton(): RadioButton | null {\n return this._radioButtons[0] ?? null;\n }\n\n get lastRadioButton(): RadioButton | null {\n const radioButtons = this._radioButtons;\n return radioButtons.length > 0 ? radioButtons[radioButtons.length - 1] : null;\n }\n\n allRadioButtons(): readonly RadioButton[] {\n return this._radioButtons;\n }\n\n private _prevRadioButton(node: RadioButton): RadioButton | null {\n const index = this._radioButtons.indexOf(node);\n if (index > 0) {\n return this._radioButtons[index - 1];\n }\n return null;\n }\n\n private _nextRadioButton(node: RadioButton): RadioButton | null {\n const index = this._radioButtons.indexOf(node);\n if (index >= 0 && index < this._radioButtons.length - 1) {\n return this._radioButtons[index + 1];\n }\n return null;\n }\n\n private _focusPrevButton(): boolean {\n let focusedButton = this.focusedRadioButton || this.firstRadioButton;\n if (!focusedButton) {\n return false;\n }\n if (focusedButton === this.firstRadioButton) {\n this.setFocusedRadioButton(this.lastRadioButton);\n } else {\n this.setFocusedRadioButton(this._prevRadioButton(focusedButton));\n }\n return true;\n }\n\n private _focusNextButton(): boolean {\n let focusedButton = this.focusedRadioButton || this.firstRadioButton;\n if (!focusedButton) {\n return false;\n }\n if (focusedButton === this.lastRadioButton) {\n this.setFocusedRadioButton(this.firstRadioButton);\n } else {\n this.setFocusedRadioButton(this._nextRadioButton(focusedButton));\n }\n return true;\n }\n\n private setFocusedRadioButton(button: RadioButton | null): void {\n this._unfocusAll();\n if (button) {\n button.tabIndex = 0;\n button.focus();\n }\n }\n\n private _unfocusAll(): void {\n for (const button of this.allRadioButtons()) {\n button.tabIndex = -1;\n }\n }\n\n private setCheckedRadioButton(checkedButton: RadioButton | null): void {\n for (const button of this.allRadioButtons()) {\n button.checked = button === checkedButton;\n }\n }\n\n private updateCheckedButton(): void {\n const button = this.allRadioButtons().find((button) => {\n // Allow '1' == 1\n return button.value == this.value;\n });\n this.setCheckedRadioButton(button ?? null);\n }\n\n private readonly _onButtonChange = (event: Event) => {\n const button = event.target as RadioButton | null;\n if (button !== null && button.checked) {\n this.value = button.value;\n }\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<slot ${ref(this._slotRef)} @slotchange=${this._onSlotChange}></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-radio-group': RadioGroup;\n }\n}\n\nfunction isRadioButton(node: Node): node is RadioButton {\n return node instanceof RadioButton;\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport menuCss from './Menu.css';\nimport { CLOSE_MENU_EVENT, type CloseMenuEvent } from '../events/CloseMenuEvent';\nimport { MENU_CHANGE_EVENT, type MenuChangeEvent } from '../events/MenuChangeEvent';\nimport { createCustomEvent } from '../util/EventUtils';\nimport { Attribute } from '../util/Attribute';\nimport { toggleAttribute } from '../util/CommonUtils';\nimport { templateContent } from 'lit/directives/template-content.js';\n\n/** @deprecated */\nexport interface MenuOptions {\n /**\n * @deprecated Override {@link Menu.render} instead.\n */\n template?: HTMLTemplateElement;\n}\n\n/**\n * @deprecated Override {@link Menu.render} instead.\n */\nexport function menuTemplate(heading: string, content: string, extraCss: string = ''): string {\n return (\n `<style>${extraCss}</style>` +\n `<div part=\"heading\"><theoplayer-menu-close-button></theoplayer-menu-close-button>${heading}</div>` +\n `<div part=\"content\">${content}</div>`\n );\n}\n\n/**\n * A menu that can be opened on top of the player.\n *\n * The menu has a heading at the top, with a {@link CloseMenuButton | close button} and a heading text.\n *\n * @attribute `menu-close-on-input` - Whether to automatically close the menu whenever one of its controls\n * receives an input (e.g. when a radio button is clicked).\n * @attribute `menu-opened` (readonly) - Whether the menu is currently open.\n *\n * @slot `heading` - A slot for the menu's heading.\n */\n@customElement('theoplayer-menu')\nexport class Menu extends LitElement {\n static override styles = [menuCss];\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true\n };\n\n private readonly _template: HTMLTemplateElement | undefined;\n private _menuOpened: boolean = false;\n\n /**\n * Creates a menu.\n *\n * By default, the button has an unnamed `<slot>` for its contents, and a named `\"heading\"` `<slot>` for its heading text.\n * Subclasses can override this by overriding {@link renderMenuHeading} and/or {@link renderMenuContent}.\n */\n constructor(options?: MenuOptions) {\n super();\n this._template = options?.template;\n if (this._template) {\n // Render immediately to populate the shadow DOM.\n this.performUpdate();\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.menuOpened_) {\n this.setAttribute(Attribute.HIDDEN, '');\n }\n }\n\n /**\n * Whether to automatically close the menu whenever one of its controls\n * receives an input (e.g. when a radio button is clicked).\n */\n @property({ reflect: true, type: Boolean, attribute: Attribute.MENU_CLOSE_ON_INPUT })\n accessor closeOnInput: boolean = false;\n\n private get menuOpened_(): boolean {\n return this._menuOpened;\n }\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.MENU_OPENED })\n private set menuOpened_(menuOpened: boolean) {\n if (this._menuOpened === menuOpened) return;\n this._menuOpened = menuOpened;\n toggleAttribute(this, Attribute.HIDDEN, !menuOpened);\n const changeEvent: MenuChangeEvent = createCustomEvent(MENU_CHANGE_EVENT, { bubbles: true });\n this.dispatchEvent(changeEvent);\n }\n\n /**\n * Open the menu.\n */\n openMenu(): void {\n this.menuOpened_ = true;\n }\n\n /**\n * Close the menu.\n */\n closeMenu(): void {\n this.menuOpened_ = false;\n }\n\n private readonly _onContentInput = (): void => {\n // Close menu when clicking any button\n if (this.closeOnInput) {\n const event: CloseMenuEvent = createCustomEvent(CLOSE_MENU_EVENT, {\n bubbles: true,\n composed: true\n });\n this.dispatchEvent(event);\n }\n };\n\n protected override render(): HTMLTemplateResult {\n if (this._template) {\n return html`${templateContent(this._template)}`;\n }\n return html`<div part=\"heading\">\n <theoplayer-menu-close-button></theoplayer-menu-close-button>\n ${this.renderMenuHeading()}\n </div>\n <div part=\"content\" @input=${this._onContentInput}>${this.renderMenuContent()}</div>`;\n }\n\n protected renderMenuHeading(): HTMLTemplateResult {\n return html`<slot name=\"heading\"></slot>`;\n }\n\n protected renderMenuContent(): HTMLTemplateResult {\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-menu': Menu;\n }\n}\n","import { html, LitElement, type TemplateResult } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport menuGroupCss from './MenuGroup.css';\nimport { Attribute } from '../util/Attribute';\nimport {\n arrayFind,\n arrayFindIndex,\n fromArrayLike,\n getSlottedElements,\n isHTMLElement,\n noOp,\n toggleAttribute,\n upgradeCustomElementIfNeeded\n} from '../util/CommonUtils';\nimport { CLOSE_MENU_EVENT, type CloseMenuEvent } from '../events/CloseMenuEvent';\nimport { TOGGLE_MENU_EVENT, type ToggleMenuEvent } from '../events/ToggleMenuEvent';\nimport { isBackKey } from '../util/KeyCode';\nimport { createCustomEvent } from '../util/EventUtils';\nimport type { MenuChangeEvent } from '../events/MenuChangeEvent';\nimport { MENU_CHANGE_EVENT } from '../events/MenuChangeEvent';\nimport { Menu } from './Menu';\nimport { templateContent } from 'lit/directives/template-content.js';\n\n/** @deprecated */\nexport interface MenuGroupOptions {\n /**\n * @deprecated Override {@link MenuGroup.render} instead.\n */\n template?: HTMLTemplateElement;\n}\n\n/**\n * @deprecated Override {@link MenuGroup.render} instead.\n */\nexport function menuGroupTemplate(content: string, extraCss: string = ''): string {\n return `<style>${extraCss}</style>${content}`;\n}\n\ninterface OpenMenuEntry {\n menu: Menu | MenuGroup;\n opener: HTMLElement | undefined;\n}\n\n/**\n * A group of {@link Menu}s.\n *\n * This can contain multiple other menus, which can be opened with {@link openMenu}.\n * When a {@link MenuButton} in one menu opens another menu in this group, it is opened as a \"submenu\".\n * When a submenu is closed, the menu that originally opened it is shown again.\n *\n * @attribute `menu-opened` (readonly) - Whether any menu in the group is currently open.\n */\n@customElement('theoplayer-menu-group')\nexport class MenuGroup extends LitElement {\n static styles = [menuGroupCss];\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true\n };\n\n private readonly _template: HTMLTemplateElement | undefined;\n\n constructor(options?: MenuGroupOptions) {\n super();\n this._template = options?.template;\n if (this._template) {\n // Render immediately to populate the shadow DOM.\n this.performUpdate();\n }\n }\n\n private _menuOpened: boolean = false;\n\n private get menuOpened_(): boolean {\n return this._menuOpened;\n }\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.MENU_OPENED })\n private set menuOpened_(menuOpened: boolean) {\n if (this._menuOpened === menuOpened) return;\n this._menuOpened = menuOpened;\n toggleAttribute(this, Attribute.MENU_OPENED, menuOpened);\n if (menuOpened) {\n this.removeAttribute(Attribute.HIDDEN);\n this.removeEventListener('keydown', this._onKeyDown);\n this.addEventListener('keydown', this._onKeyDown);\n } else {\n this.setAttribute(Attribute.HIDDEN, '');\n this.removeEventListener('keydown', this._onKeyDown);\n }\n const changeEvent: MenuChangeEvent = createCustomEvent(MENU_CHANGE_EVENT, { bubbles: true });\n this.dispatchEvent(changeEvent);\n }\n\n @query('slot')\n private accessor _menuSlot: HTMLSlotElement | null = null;\n private _menus: Array<Menu | MenuGroup> = [];\n private readonly _openMenuStack: OpenMenuEntry[] = [];\n\n connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.menuOpened_) {\n this.setAttribute(Attribute.HIDDEN, '');\n }\n }\n\n protected createRenderRoot() {\n const root = super.createRenderRoot();\n root.addEventListener(TOGGLE_MENU_EVENT, this._onToggleMenu);\n root.addEventListener(CLOSE_MENU_EVENT, this._onCloseMenu);\n root.addEventListener(MENU_CHANGE_EVENT, this._onMenuChange);\n return root;\n }\n\n protected render(): TemplateResult {\n if (this._template) {\n return html`${templateContent(this._template)}`;\n }\n return html`<slot @slotchange=${this._onMenuListChange}></slot>`;\n }\n\n protected override firstUpdated(): void {\n this._onMenuListChange();\n }\n\n /**\n * Get the menu with the given ID.\n *\n * @param [menuId] - The ID of the menu. If unset, returns this menu group.\n */\n getMenuById(menuId?: string): Menu | MenuGroup | undefined {\n if (!menuId || menuId === this.id) {\n return this;\n }\n return arrayFind(this._menus, (menu) => menu.id === menuId);\n }\n\n /**\n * Open the menu with the given ID.\n *\n * If no ID is given, the first menu in the group is opened.\n *\n * If there's already an open menu, then the new menu is opened as a \"submenu\".\n * When it closed, the previous menu is opened.\n *\n * @param [menuId] - The ID of the menu to open.\n * @param [opener] - The control that opened the menu. When the menu is closed, focus is moved back to this control.\n * @returns True if the given menu was found.\n */\n openMenu(menuId?: string, opener?: HTMLElement): boolean {\n let menuToOpen = this.getMenuById(menuId);\n if (menuToOpen === this) {\n menuToOpen = this._menus[0];\n }\n if (!menuToOpen) {\n return false;\n }\n\n const previousEntry = this.getCurrentMenu_();\n const index = arrayFindIndex(this._openMenuStack, (entry) => entry.menu === menuToOpen);\n if (index >= 0) {\n // Already open.\n // Close subsequent menus to move menu back to top of the stack.\n this.closeMenusFromIndex_(index + 1);\n } else {\n // Not yet open, add to top of the stack.\n this._openMenuStack.push({ menu: menuToOpen, opener });\n }\n\n if (previousEntry) {\n previousEntry.menu.closeMenu();\n }\n menuToOpen.openMenu();\n this.menuOpened_ = true;\n\n menuToOpen.focus();\n return true;\n }\n\n /**\n * Closes the menu with the given ID.\n *\n * If no ID is given, then the entire menu group is closed.\n *\n * If the given menu has opened one or more submenus, then those are also closed.\n * If the last open menu is closed, then the menu group also becomes closed.\n *\n * @param [menuId] - The ID of the menu to close.\n * @returns True if the given menu was found and closed.\n */\n closeMenu(menuId?: string): boolean {\n let menuToClose = this.getMenuById(menuId);\n if (menuToClose === this) {\n menuToClose = this._openMenuStack[0]?.menu;\n }\n if (!menuToClose) {\n return false;\n }\n const index = arrayFindIndex(this._openMenuStack, (entry) => entry.menu === menuToClose);\n if (index < 0) {\n return false;\n }\n\n const oldEntry = this._openMenuStack[index];\n // Close this menu and all subsequent menus\n this.closeMenusFromIndex_(index);\n\n const nextEntry = this.getCurrentMenu_();\n if (nextEntry !== undefined) {\n nextEntry.menu.openMenu();\n this.menuOpened_ = true;\n if (oldEntry.opener && nextEntry.menu.contains(oldEntry.opener)) {\n oldEntry.opener.focus();\n } else {\n nextEntry.menu.focus();\n }\n return true;\n }\n\n this.menuOpened_ = false;\n oldEntry.opener?.focus();\n return true;\n }\n\n private closeMenusFromIndex_(index: number): void {\n const menusToClose = this._openMenuStack.length - index;\n for (let i = this._openMenuStack.length - 1; i >= index; i--) {\n this._openMenuStack[i].menu.closeMenu();\n }\n this._openMenuStack.splice(index, menusToClose);\n }\n\n /**\n * Whether this menu group has a currently open menu.\n */\n hasCurrentMenu(): boolean {\n return this._openMenuStack.length > 0;\n }\n\n private getCurrentMenu_(): OpenMenuEntry | undefined {\n return this._openMenuStack.length > 0 ? this._openMenuStack[this._openMenuStack.length - 1] : undefined;\n }\n\n /**\n * Close the current menu.\n */\n closeCurrentMenu(): boolean {\n const currentMenu = this.getCurrentMenu_();\n if (currentMenu !== undefined) {\n this.closeMenu(currentMenu.menu.id);\n return true;\n }\n return false;\n }\n\n /**\n * Whether the menu with the given ID is currently open.\n *\n * @param [menuId] - The ID of the menu.\n */\n isMenuOpen(menuId?: string): boolean {\n const menu = this.getMenuById(menuId);\n if (!menu) {\n return false;\n }\n return this._openMenuStack.some((entry) => entry.menu === menu);\n }\n\n /**\n * Update the list of menus whenever the `<slot>` contents change.\n * Note: the `slotchange` event bubbles up, so we don't have to manually attach\n * this listener to each nested `<slot>`.\n */\n private readonly _onMenuListChange = () => {\n const children: Element[] = [...fromArrayLike(this.shadowRoot!.children), ...(this._menuSlot ? getSlottedElements(this._menuSlot) : [])];\n const upgradePromises: Array<Promise<unknown>> = [];\n for (const child of children) {\n if (!isMenuElement(child)) {\n const promise = upgradeCustomElementIfNeeded(child);\n if (promise) {\n upgradePromises.push(promise);\n }\n }\n }\n if (upgradePromises.length > 0) {\n Promise.all(upgradePromises).then(this._onMenuListChange, noOp);\n }\n const newMenus = children.filter(isMenuElement);\n // Close all removed menus\n for (const oldMenu of this._menus) {\n if (newMenus.indexOf(oldMenu) < 0) {\n this.closeMenu(oldMenu.id);\n }\n }\n // Ensure newly added menus start as closed\n for (const newMenu of newMenus) {\n if (this._menus.indexOf(newMenu) < 0) {\n newMenu.closeMenu();\n }\n }\n this._menus = newMenus;\n };\n\n private readonly _onToggleMenu = (rawEvent: Event): void => {\n const event = rawEvent as ToggleMenuEvent;\n const menuId = event.detail.menu;\n if (!this.getMenuById(menuId)) {\n // Not our menu, allow event to bubble further up.\n return;\n }\n event.stopPropagation();\n const opener = isHTMLElement(event.target) ? event.target : undefined;\n if (this.isMenuOpen(menuId)) {\n this.closeMenu(menuId);\n } else {\n this.openMenu(menuId, opener);\n }\n };\n\n private readonly _onCloseMenu = (rawEvent: Event): void => {\n const event = rawEvent as CloseMenuEvent;\n if (this.closeCurrentMenu()) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n private readonly _onMenuChange = (rawEvent: Event): void => {\n const event = rawEvent as MenuChangeEvent;\n const currentMenu = this.getCurrentMenu_();\n // If the current menu is another menu container which no longer has an open menu, close it\n if (currentMenu && currentMenu.menu === event.target && currentMenu.menu instanceof MenuGroup && !currentMenu.menu.hasCurrentMenu()) {\n this.closeCurrentMenu();\n }\n };\n\n private readonly _onKeyDown = (event: KeyboardEvent) => {\n // Don't handle modifier shortcuts typically used by assistive technology.\n if (event.altKey) return;\n\n if (isBackKey(event.keyCode)) {\n if (this.closeCurrentMenu()) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n };\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-menu-group': MenuGroup;\n }\n}\n\nfunction isMenuElement(element: Node): element is Menu | MenuGroup {\n if (!isHTMLElement(element)) {\n return false;\n }\n return element instanceof Menu || element instanceof MenuGroup;\n}\n","import { Button } from './Button';\nimport { createCustomEvent } from '../util/EventUtils';\nimport { TOGGLE_MENU_EVENT, type ToggleMenuEvent } from '../events/ToggleMenuEvent';\nimport { Attribute } from '../util/Attribute';\nimport { customElement, property } from 'lit/decorators.js';\n\n/**\n * A menu button that opens a {@link Menu}.\n *\n * @attribute `menu` - The ID of the menu to open.\n */\n@customElement('theoplayer-menu-button')\nexport class MenuButton extends Button {\n private _menuId: string | null = null;\n\n override connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute('aria-haspopup')) {\n this.setAttribute('aria-haspopup', 'true');\n }\n }\n\n /**\n * The ID of the menu to open.\n */\n get menu(): string | null {\n return this._menuId;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.MENU })\n set menu(menuId: string | null) {\n if (menuId) {\n if (this._ariaControls == null || this._ariaControls === this._menuId) {\n this._ariaControls = menuId;\n }\n } else {\n if (this._ariaControls === this._menuId) {\n this._ariaControls = null;\n }\n }\n this._menuId = menuId;\n }\n\n @property({ reflect: true, state: true, type: String, attribute: 'aria-controls' })\n private accessor _ariaControls: string | null = null;\n\n protected override handleClick() {\n const menu = this.menu;\n if (menu) {\n const event: ToggleMenuEvent = createCustomEvent(TOGGLE_MENU_EVENT, {\n bubbles: true,\n composed: true,\n detail: { menu }\n });\n this.dispatchEvent(event);\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-menu-button': MenuButton;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { Button } from './Button';\nimport backIcon from '../icons/back.svg';\nimport { createCustomEvent } from '../util/EventUtils';\nimport { CLOSE_MENU_EVENT, type CloseMenuEvent } from '../events/CloseMenuEvent';\nimport { Attribute } from '../util/Attribute';\n\n/**\n * A button that closes its parent menu.\n *\n * This button must be placed inside a {@link Menu | `<theoplayer-menu>`}.\n */\n@customElement('theoplayer-menu-close-button')\nexport class CloseMenuButton extends Button {\n override connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(Attribute.ARIA_LABEL)) {\n this.setAttribute(Attribute.ARIA_LABEL, 'close menu');\n }\n }\n\n protected override handleClick() {\n const event: CloseMenuEvent = createCustomEvent(CLOSE_MENU_EVENT, {\n bubbles: true,\n composed: true\n });\n this.dispatchEvent(event);\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<span part=\"icon\"><slot>${unsafeSVG(backIcon)}</slot></span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-menu-close-button': CloseMenuButton;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { RadioButton } from './RadioButton';\nimport type { MediaTrack } from 'theoplayer/chromeless';\nimport { localizeLanguageName } from '../util/CommonUtils';\n\nconst TRACK_EVENTS = ['change', 'update'] as const;\n\n/**\n * A radio button that shows the label of a given media track,\n * and switches to that track when clicked.\n */\n@customElement('theoplayer-media-track-radio-button')\nexport class MediaTrackRadioButton extends RadioButton {\n private _track: MediaTrack | undefined = undefined;\n\n @state()\n private accessor _trackLabel = '';\n\n /**\n * The media track that is controlled by this radio button.\n */\n get track(): MediaTrack | undefined {\n return this._track;\n }\n\n @property({ reflect: false, attribute: false })\n set track(track: MediaTrack | undefined) {\n if (this._track === track) {\n return;\n }\n if (this._track) {\n this._track.removeEventListener(TRACK_EVENTS, this._onTrackChange);\n }\n this._track = track;\n this._updateFromTrack();\n if (track) {\n track.addEventListener(TRACK_EVENTS, this._onTrackChange);\n }\n }\n\n private _updateFromTrack(): void {\n this._trackLabel = this._track ? getTrackLabel(this._track) : '';\n this.checked = this._track ? this._track.enabled : false;\n }\n\n private _updateTrack(): void {\n if (this._track) {\n this._track.enabled = this.checked;\n }\n }\n\n private readonly _onTrackChange = () => {\n this._updateFromTrack();\n };\n\n protected override handleChange(): void {\n this._updateTrack();\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<slot>${this._trackLabel}</slot>`;\n }\n}\n\nfunction getTrackLabel(track: MediaTrack): string {\n let label = track.label;\n let languageCode = track.language;\n if (label) {\n if (label === languageCode) {\n // Ignore default label with just the language code.\n } else {\n return label;\n }\n }\n let localizedLanguageName = languageCode && localizeLanguageName(languageCode);\n if (localizedLanguageName) {\n return localizedLanguageName;\n }\n return languageCode || label || '';\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-media-track-radio-button': MediaTrackRadioButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport verticalRadioGroupCss from './VerticalRadioGroup.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer, MediaTrack, MediaTrackList, TextTrack, TextTracksList } from 'theoplayer/chromeless';\nimport { Attribute } from '../util/Attribute';\nimport { isNonForcedSubtitleTrack } from '../util/TrackUtils';\nimport { createEvent } from '../util/EventUtils';\nimport { repeat } from 'lit/directives/repeat.js';\n\nconst TRACK_EVENTS = ['addtrack', 'removetrack'] as const;\n\nexport type TrackType = 'audio' | 'video' | 'subtitles';\n\n/**\n * A radio group that shows a list of media or text tracks,\n * from which the user can choose an active track.\n *\n * @attribute `track-type` - The track type of the available tracks. Can be \"audio\", \"video\" or \"subtitles\".\n * @attribute `show-off` - If set, shows an \"off\" button to disable all tracks.\n * Can only be used with the \"subtitles\" track type.\n */\n@customElement('theoplayer-track-radio-group')\n@stateReceiver(['player'])\nexport class TrackRadioGroup extends LitElement {\n static override styles = [verticalRadioGroupCss];\n\n private _player: ChromelessPlayer | undefined;\n private _trackType: TrackType = 'audio';\n\n @state()\n private accessor _tracksList: MediaTrackList | TextTracksList | undefined;\n\n /**\n * The track type of the available tracks.\n */\n get trackType(): TrackType {\n return this._trackType;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.TRACK_TYPE })\n set trackType(trackType: TrackType) {\n this._trackType = trackType;\n this._updateTracksList();\n }\n\n /**\n * If set, shows an \"off\" button to disable all tracks.\n *\n * Can only be used with the `\"subtitles\"` track type.\n */\n @property({ reflect: true, type: Boolean, attribute: Attribute.SHOW_OFF })\n accessor showOffButton: boolean = false;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._player = player;\n this._updateTracksList();\n this._updateTracks();\n }\n\n private _getTracksList(): MediaTrackList | TextTracksList | undefined {\n if (this._player === undefined) {\n return undefined;\n }\n const trackType = this.trackType;\n if (trackType === 'audio') {\n return this._player.audioTracks;\n } else if (trackType === 'video') {\n return this._player.videoTracks;\n } else if (trackType === 'subtitles') {\n return this._player.textTracks;\n } else {\n return undefined;\n }\n }\n\n private _updateTracksList(): void {\n const oldList = this._tracksList;\n const newList = this._getTracksList();\n if (oldList !== newList) {\n oldList?.removeEventListener(TRACK_EVENTS, this._updateTracks);\n newList?.addEventListener(TRACK_EVENTS, this._updateTracks);\n this._tracksList = newList;\n }\n }\n\n private _getTracks(): readonly (MediaTrack | TextTrack)[] {\n if (this._player === undefined) {\n return [];\n }\n const trackType = this.trackType;\n if (trackType === 'audio') {\n return this._player.audioTracks;\n } else if (trackType === 'video') {\n return this._player.videoTracks;\n } else if (trackType === 'subtitles') {\n return this._player.textTracks.filter(isNonForcedSubtitleTrack);\n } else {\n return [];\n }\n }\n\n private readonly _updateTracks = (): void => this.requestUpdate();\n\n private readonly _onChange = () => {\n this.dispatchEvent(createEvent('change', { bubbles: true }));\n };\n\n protected override render(): HTMLTemplateResult {\n const tracks = this._getTracks();\n const isSubtitles = this.trackType === 'subtitles';\n return html`<theoplayer-radio-group @change=${this._onChange}>\n ${\n /* \"Off\" button */\n this.showOffButton && isSubtitles\n ? html`<theoplayer-text-track-off-radio-button .trackList=${this._tracksList}></theoplayer-text-track-off-radio-button>`\n : undefined\n }\n ${\n /* Track buttons */\n repeat(\n tracks as ReadonlyArray<MediaTrack | TextTrack>,\n (track) => track.uid,\n (track) =>\n isSubtitles\n ? html`<theoplayer-text-track-radio-button .track=${track}></theoplayer-text-track-radio-button>`\n : html`<theoplayer-media-track-radio-button .track=${track}></theoplayer-media-track-radio-button>`\n )\n }\n </theoplayer-radio-group>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-track-radio-group': TrackRadioGroup;\n }\n}\n","import { RadioButton } from './RadioButton';\nimport type { TextTrack } from 'theoplayer/chromeless';\nimport { localizeLanguageName } from '../util/CommonUtils';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { html, type HTMLTemplateResult } from 'lit';\n\ndeclare module 'theoplayer/chromeless' {\n interface TextTrack {\n // TODO Remove after updating to THEOplayer 10.14.0.\n captionChannel?: number;\n }\n}\n\nconst TRACK_EVENTS = ['change', 'update'] as const;\n\n/**\n * `<theoplayer-text-track-radio-button>` -A radio button that shows the label of a given text track, and switches to that track when clicked.\n */\n@customElement('theoplayer-text-track-radio-button')\nexport class TextTrackRadioButton extends RadioButton {\n private _track: TextTrack | undefined = undefined;\n\n @state()\n private accessor _trackLabel = '';\n\n /**\n * The text track that is controlled by this radio button.\n */\n get track(): TextTrack | undefined {\n return this._track;\n }\n\n @property({ reflect: false, attribute: false })\n set track(track: TextTrack | undefined) {\n if (this._track === track) {\n return;\n }\n if (this._track) {\n this._track.removeEventListener(TRACK_EVENTS, this._onTrackChange);\n }\n this._track = track;\n this._updateFromTrack();\n if (track) {\n track.addEventListener(TRACK_EVENTS, this._onTrackChange);\n }\n }\n\n private _updateFromTrack(): void {\n this._trackLabel = this._track ? getTrackLabel(this._track) : '';\n this.checked = this._track ? this._track.mode === 'showing' : false;\n }\n\n private _updateTrack(): void {\n if (this._track) {\n this._track.mode = this.checked ? 'showing' : 'disabled';\n }\n }\n\n private readonly _onTrackChange = () => {\n this._updateFromTrack();\n };\n\n protected override handleChange(): void {\n this._updateTrack();\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<slot>${this._trackLabel}</slot>`;\n }\n}\n\nfunction getTrackLabel(track: TextTrack): string {\n let label = track.label;\n let languageCode = track.language;\n if (label) {\n if (label === languageCode) {\n // Ignore default label with just the language code.\n } else if (track.type === 'cea608' && /^CC\\d+$/.test(track.label)) {\n // Ignore default label with just the caption channel.\n } else {\n return label;\n }\n }\n let localizedLanguageName = languageCode && localizeLanguageName(languageCode);\n if (localizedLanguageName) {\n return localizedLanguageName;\n }\n if (track.type === 'cea608' && typeof track.captionChannel === 'number') {\n return `CC${track.captionChannel}`;\n }\n return languageCode || label || '';\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-text-track-radio-button': TextTrackRadioButton;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { RadioButton } from './RadioButton';\nimport type { TextTracksList } from 'theoplayer/chromeless';\nimport { isNonForcedSubtitleTrack, isSubtitleTrack } from '../util/TrackUtils';\n\nconst TRACK_EVENTS = ['change'] as const;\n\n/**\n * A radio button that disables the active subtitle track when clicked.\n */\n@customElement('theoplayer-text-track-off-radio-button')\nexport class TextTrackOffRadioButton extends RadioButton {\n private _trackList: TextTracksList | undefined = undefined;\n\n get trackList(): TextTracksList | undefined {\n return this._trackList;\n }\n\n @property({ reflect: false, attribute: false })\n set trackList(trackList: TextTracksList | undefined) {\n if (this._trackList) {\n this._trackList.removeEventListener(TRACK_EVENTS, this._onTrackChange);\n }\n this._trackList = trackList;\n this._updateFromTrackList();\n if (trackList) {\n trackList.addEventListener(TRACK_EVENTS, this._onTrackChange);\n }\n }\n\n private _updateFromTrackList(): void {\n this.checked = this._trackList ? !hasShowingSubtitleTrack(this._trackList) : true;\n }\n\n private _updateTrackList(): void {\n if (this._trackList && this.checked) {\n disableSubtitleTracks(this._trackList);\n }\n }\n\n private readonly _onTrackChange = () => {\n this._updateFromTrackList();\n };\n\n protected override handleChange() {\n this._updateTrackList();\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<slot>Off</slot>`;\n }\n}\n\nfunction hasShowingSubtitleTrack(trackList: TextTracksList): boolean {\n return trackList.some((track) => isNonForcedSubtitleTrack(track) && track.mode === 'showing');\n}\n\nfunction disableSubtitleTracks(trackList: TextTracksList): void {\n for (const track of trackList) {\n if (isSubtitleTrack(track) && track.mode === 'showing') {\n track.mode = 'disabled';\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-text-track-off-radio-button': TextTrackOffRadioButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer, EdgeStyle, TextTrackStyle } from 'theoplayer/chromeless';\nimport { Attribute } from '../util/Attribute';\nimport { parseColor, toRgb } from '../util/ColorUtils';\nimport type { TextTrackStyleOption } from './TextTrackStyleRadioGroup';\nimport { arrayFind } from '../util/CommonUtils';\nimport { knownColors, knownEdgeStyles, knownFontFamilies } from '../util/TextTrackStylePresets';\n\n/**\n * A control that displays the value of a single text track style option\n * in a human-readable format.\n *\n * @attribute `property` - The property name of the text track style option. One of {@link TextTrackStyleOption}.\n */\n@customElement('theoplayer-text-track-style-display')\n@stateReceiver(['player'])\nexport class TextTrackStyleDisplay extends LitElement {\n private _player: ChromelessPlayer | undefined;\n private _property: TextTrackStyleOption = 'fontColor';\n private _textTrackStyle: TextTrackStyle | undefined;\n\n /**\n * The property name of the text track style option.\n */\n get property(): TextTrackStyleOption {\n return this._property;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.PROPERTY })\n set property(property: TextTrackStyleOption) {\n this._property = property;\n this._updateFromPlayer();\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._textTrackStyle?.removeEventListener('change', this._updateFromPlayer);\n this._player = player;\n this._textTrackStyle = player?.textTrackStyle;\n this._updateFromPlayer();\n this._textTrackStyle?.addEventListener('change', this._updateFromPlayer);\n }\n\n private readonly _updateFromPlayer = () => this.requestUpdate();\n\n protected override render(): HTMLTemplateResult {\n return html`<span>${this.renderValue()}</span>`;\n }\n\n private renderValue(): string {\n if (this._player === undefined) {\n return '';\n }\n const property = this.property;\n switch (property) {\n case 'fontFamily': {\n return getFontFamilyLabel(this._player.textTrackStyle.fontFamily);\n }\n case 'fontColor':\n case 'backgroundColor':\n case 'windowColor': {\n return getColorLabel(this._player.textTrackStyle[property]);\n }\n case 'fontOpacity': {\n return getOpacityLabel(this._player.textTrackStyle.fontColor);\n }\n case 'backgroundOpacity': {\n return getOpacityLabel(this._player.textTrackStyle.backgroundColor);\n }\n case 'windowOpacity': {\n return getOpacityLabel(this._player.textTrackStyle.windowColor);\n }\n case 'edgeStyle': {\n return getEdgeStyleLabel(this._player.textTrackStyle.edgeStyle);\n }\n default: {\n const value = this._player.textTrackStyle[property];\n return value ? value : 'Default';\n }\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-text-track-style-display': TextTrackStyleDisplay;\n }\n}\n\nfunction getFontFamilyLabel(fontFamily: string | null | undefined): string {\n if (!fontFamily) {\n return 'Default';\n }\n const knownFontFamily = arrayFind(knownFontFamilies, ([_, value]) => value === fontFamily);\n if (knownFontFamily) {\n return knownFontFamily[0];\n }\n return 'Custom';\n}\n\nfunction getColorLabel(color: string | null | undefined): string {\n if (!color) {\n return 'Default';\n }\n const parsedColor = parseColor(color);\n if (parsedColor) {\n const colorRgb = toRgb(parsedColor);\n const knownColor = arrayFind(knownColors, ([_, value]) => value === colorRgb);\n if (knownColor) {\n return knownColor[0];\n }\n }\n return 'Custom';\n}\n\nfunction getOpacityLabel(color: string | null | undefined): string {\n if (!color) {\n return 'Default';\n }\n const parsedColor = parseColor(color);\n if (parsedColor) {\n return `${parsedColor.a_ * 100}%`;\n }\n return 'Custom';\n}\n\nfunction getEdgeStyleLabel(edgeStyle: EdgeStyle | null | undefined): string {\n if (!edgeStyle) {\n return 'Default';\n }\n const knownEdgeStyle = arrayFind(knownEdgeStyles, ([_, value]) => value === edgeStyle);\n if (knownEdgeStyle) {\n return knownEdgeStyle[0];\n }\n return 'Custom';\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport { RadioGroup } from './RadioGroup';\nimport verticalRadioGroupCss from './VerticalRadioGroup.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer, EdgeStyle, TextTrackStyle } from 'theoplayer/chromeless';\nimport type { RadioButton } from './RadioButton';\nimport { createEvent } from '../util/EventUtils';\nimport { Attribute } from '../util/Attribute';\nimport { COLOR_BLACK, COLOR_WHITE, colorWithAlpha, parseColor, type RgbaColor, rgbEquals, toRgb, toRgba } from '../util/ColorUtils';\n\nexport interface TextTrackStyleMap {\n fontFamily: string | undefined;\n fontColor: string | undefined;\n fontOpacity: number | undefined;\n fontSize: string | undefined;\n backgroundColor: string | undefined;\n backgroundOpacity: number | undefined;\n windowColor: string | undefined;\n windowOpacity: number | undefined;\n edgeStyle: EdgeStyle | undefined;\n}\n\nexport type TextTrackStyleOption = keyof TextTrackStyleMap;\n\n/**\n * A radio group that shows a list of values for a text track style option,\n * from which the user can choose a desired value.\n *\n * @attribute `property` - The property name of the text track style option. One of {@link TextTrackStyleOption}.\n * @slot {@link RadioButton} - The possible options for the text track style option.\n * For example: `<theoplayer-radio-button value=\"#ff0000\">Red</theoplayer-radio-button>`\n */\n@customElement('theoplayer-text-track-style-radio-group')\n@stateReceiver(['player'])\nexport class TextTrackStyleRadioGroup extends LitElement {\n static override styles = [verticalRadioGroupCss];\n\n private readonly _radioGroupRef: Ref<RadioGroup> = createRef<RadioGroup>();\n private _player: ChromelessPlayer | undefined;\n private _textTrackStyle: TextTrackStyle | undefined;\n private _property: TextTrackStyleOption = 'fontColor';\n private _value: any;\n\n protected override firstUpdated(): void {\n const radioGroup = this._radioGroupRef.value!;\n if (!(radioGroup instanceof RadioGroup)) {\n customElements.upgrade(radioGroup);\n }\n radioGroup.value = this.value;\n }\n\n /**\n * The property name of the text track style option.\n */\n get property(): TextTrackStyleOption {\n return this._property;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.PROPERTY })\n set property(property: TextTrackStyleOption) {\n if (this._property === property) return;\n this._property = property;\n this._updateFromPlayer();\n }\n\n /**\n * The currently chosen value for the text track style option.\n */\n get value(): string {\n return this._value;\n }\n\n @property({ reflect: false, attribute: false })\n set value(value: string) {\n if (this._value === value) {\n return;\n }\n this._value = value;\n this._updateToPlayer();\n const radioGroup = this._radioGroupRef.value;\n if (radioGroup) {\n radioGroup.value = value;\n }\n this.dispatchEvent(createEvent('change', { bubbles: true }));\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._textTrackStyle?.removeEventListener('change', this._updateFromPlayer);\n this._player = player;\n this._textTrackStyle = player?.textTrackStyle;\n this._updateFromPlayer();\n this._textTrackStyle?.addEventListener('change', this._updateFromPlayer);\n }\n\n private readonly _onChange = (): void => {\n const radioGroup = this._radioGroupRef.value;\n if (!radioGroup) return;\n this.value = radioGroup.value;\n };\n\n private readonly _updateFromPlayer = (): void => {\n if (this._player === undefined) {\n return;\n }\n switch (this.property) {\n case 'fontColor': {\n const color = this._player.textTrackStyle.fontColor;\n this.value = color ? toRgb(parseColor(color) ?? COLOR_WHITE) : '';\n break;\n }\n case 'backgroundColor': {\n const color = this._player.textTrackStyle.backgroundColor;\n this.value = color ? toRgb(parseColor(color) ?? COLOR_BLACK) : '';\n break;\n }\n case 'windowColor': {\n const color = this._player.textTrackStyle.windowColor;\n this.value = color ? toRgb(parseColor(color) ?? COLOR_BLACK) : '';\n break;\n }\n case 'fontOpacity': {\n const color = this._player.textTrackStyle.fontColor;\n this.value = color ? String((parseColor(color)?.a_ ?? 1) * 100) : '';\n break;\n }\n case 'backgroundOpacity': {\n const color = this._player.textTrackStyle.backgroundColor;\n this.value = color ? String((parseColor(color)?.a_ ?? 1) * 100) : '';\n break;\n }\n case 'windowOpacity': {\n const color = this._player.textTrackStyle.windowColor;\n this.value = color ? String((parseColor(color)?.a_ ?? 1) * 100) : '';\n break;\n }\n default: {\n this.value = this._player.textTrackStyle[this.property] ?? '';\n break;\n }\n }\n };\n\n private _updateToPlayer(): void {\n if (this._player === undefined) {\n return;\n }\n switch (this.property) {\n case 'fontColor': {\n this._player.textTrackStyle.fontColor = updateColor(this.value, this._player.textTrackStyle.fontColor, COLOR_WHITE);\n break;\n }\n case 'backgroundColor': {\n this._player.textTrackStyle.backgroundColor = updateColor(this.value, this._player.textTrackStyle.backgroundColor, COLOR_BLACK);\n break;\n }\n case 'windowColor': {\n this._player.textTrackStyle.windowColor = updateColor(this.value, this._player.textTrackStyle.windowColor, COLOR_BLACK);\n break;\n }\n case 'fontOpacity': {\n this._player.textTrackStyle.fontColor = updateOpacity(this.value, this._player.textTrackStyle.fontColor, COLOR_WHITE);\n break;\n }\n case 'backgroundOpacity': {\n this._player.textTrackStyle.backgroundColor = updateOpacity(this.value, this._player.textTrackStyle.backgroundColor, COLOR_BLACK);\n break;\n }\n case 'windowOpacity': {\n this._player.textTrackStyle.windowColor = updateOpacity(this.value, this._player.textTrackStyle.windowColor, COLOR_BLACK);\n break;\n }\n default: {\n this._player.textTrackStyle[this.property] = this.value == '' ? undefined : (this.value as any);\n break;\n }\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<theoplayer-radio-group ${ref(this._radioGroupRef)} @change=${this._onChange}><slot></slot></theoplayer-radio-group>`;\n }\n}\n\nfunction updateColor(colorValue: string, previousColor: string | undefined, defaultColor: RgbaColor): string | undefined {\n const alpha = parseColor(previousColor)?.a_ ?? 1;\n if (colorValue === '' && alpha === 1) {\n return undefined;\n } else {\n const color = parseColor(colorValue) ?? defaultColor;\n return toRgba(colorWithAlpha(color, alpha));\n }\n}\n\nfunction updateOpacity(opacityValue: string, colorValue: string | undefined, defaultColor: RgbaColor): string | undefined {\n const color = parseColor(colorValue) ?? defaultColor;\n if (opacityValue === '' && rgbEquals(color, defaultColor)) {\n return undefined;\n } else {\n const alpha = opacityValue == '' ? 1 : Number(opacityValue) / 100;\n return toRgba(colorWithAlpha(color, alpha));\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-text-track-style-radio-group': TextTrackStyleRadioGroup;\n }\n}\n","import { html, type TemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { MenuGroup } from './MenuGroup';\nimport textTrackStyleMenuCss from './TextTrackStyleMenu.css';\nimport menuTableCss from './MenuTable.css';\nimport type { EdgeStyle } from 'theoplayer/chromeless';\n\n// Load components used in template\nimport './TextTrackStyleDisplay';\nimport './TextTrackStyleRadioGroup';\n\nconst colorOptions: ReadonlyArray<{ label: string; value: `rgb(${number},${number},${number})` | '' }> = [\n { label: 'Default', value: '' },\n { label: 'White', value: 'rgb(255,255,255)' },\n { label: 'Yellow', value: 'rgb(255,255,0)' },\n { label: 'Green', value: 'rgb(0,255,0)' },\n { label: 'Cyan', value: 'rgb(0,255,255)' },\n { label: 'Blue', value: 'rgb(0,0,255)' },\n { label: 'Magenta', value: 'rgb(255,0,255)' },\n { label: 'Red', value: 'rgb(255,0,0)' },\n { label: 'Black', value: 'rgb(0,0,0)' }\n];\nconst fontFamilyOptions: ReadonlyArray<{ label: string; value: string }> = [\n { label: 'Default', value: '' },\n { label: 'Monospace Serif', value: '\"Courier New\", Courier, \"Nimbus Mono L\", \"Cutive Mono\", monospace' },\n { label: 'Proportional Serif', value: '\"Times New Roman\", Times, Georgia, Cambria, \"PT Serif Caption\", serif' },\n { label: 'Monospace Sans', value: '\"Deja Vu Sans Mono\", \"Lucida Console\", Monaco, Consolas, \"PT Mono\", monospace' },\n { label: 'Proportional Sans', value: 'Arial, Helvetica, Verdana, \"PT Sans Caption\", sans-serif' }\n];\nconst sizeOptions: ReadonlyArray<{ label: string; value: `${number}%` | '' }> = [\n { label: 'Default', value: '' },\n { label: '50%', value: '50%' },\n { label: '75%', value: '75%' },\n { label: '100%', value: '100%' },\n { label: '150%', value: '150%' },\n { label: '200%', value: '200%' }\n];\nconst opacityOptions: ReadonlyArray<{ label: string; value: `${number}` | '' }> = [\n { label: 'Default', value: '' },\n { label: '25%', value: '25' },\n { label: '50%', value: '50' },\n { label: '75%', value: '75' },\n { label: '100%', value: '100' }\n];\nconst edgeStyleOptions: ReadonlyArray<{ label: string; value: EdgeStyle | '' }> = [\n { label: 'Default', value: '' },\n { label: 'None', value: 'none' },\n { label: 'Drop shadow', value: 'dropshadow' },\n { label: 'Raised', value: 'raised' },\n { label: 'Depressed', value: 'depressed' },\n { label: 'Uniform', value: 'uniform' }\n];\n\n/**\n * A menu to change the {@link theoplayer!TextTrackStyle | text track style} of the player.\n *\n * @slot `heading` - A slot for the menu's heading.\n */\n@customElement('theoplayer-text-track-style-menu')\nexport class TextTrackStyleMenu extends MenuGroup {\n static styles = [...MenuGroup.styles, menuTableCss, textTrackStyleMenuCss];\n\n protected override render(): TemplateResult {\n return html`\n <theoplayer-menu class=\"theoplayer-text-track-style-menu\">\n <span class=\"theoplayer-menu-heading\" slot=\"heading\"><slot name=\"heading\">Subtitle options</slot></span>\n <theoplayer-text-track-style-reset-button\n class=\"theoplayer-menu-heading-button\"\n slot=\"heading\"\n ></theoplayer-text-track-style-reset-button>\n <table>\n <tr>\n <td><span>Font family</span></td>\n <td>\n <theoplayer-menu-button menu=\"font-family-menu\">\n <theoplayer-text-track-style-display property=\"fontFamily\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Font color</span></td>\n <td>\n <theoplayer-menu-button menu=\"font-color-menu\">\n <theoplayer-text-track-style-display property=\"fontColor\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Font opacity</span></td>\n <td>\n <theoplayer-menu-button menu=\"font-opacity-menu\">\n <theoplayer-text-track-style-display property=\"fontOpacity\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Font size</span></td>\n <td>\n <theoplayer-menu-button menu=\"font-size-menu\">\n <theoplayer-text-track-style-display property=\"fontSize\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Background color</span></td>\n <td>\n <theoplayer-menu-button menu=\"background-color-menu\">\n <theoplayer-text-track-style-display property=\"backgroundColor\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Background opacity</span></td>\n <td>\n <theoplayer-menu-button menu=\"background-opacity-menu\">\n <theoplayer-text-track-style-display property=\"backgroundOpacity\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Window color</span></td>\n <td>\n <theoplayer-menu-button menu=\"window-color-menu\">\n <theoplayer-text-track-style-display property=\"windowColor\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Window opacity</span></td>\n <td>\n <theoplayer-menu-button menu=\"window-opacity-menu\">\n <theoplayer-text-track-style-display property=\"windowOpacity\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Character edge style</span></td>\n <td>\n <theoplayer-menu-button menu=\"edge-style-menu\">\n <theoplayer-text-track-style-display property=\"edgeStyle\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n </table>\n </theoplayer-menu>\n <theoplayer-menu id=\"font-family-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Font family</span>\n <theoplayer-text-track-style-radio-group property=\"fontFamily\">\n ${fontFamilyOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n <theoplayer-menu id=\"font-color-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Font color</span>\n <theoplayer-text-track-style-radio-group property=\"fontColor\">\n ${colorOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n <theoplayer-menu id=\"font-opacity-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Font opacity</span>\n <theoplayer-text-track-style-radio-group property=\"fontOpacity\">\n ${opacityOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n <theoplayer-menu id=\"font-size-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Font size</span>\n <theoplayer-text-track-style-radio-group property=\"fontSize\">\n ${sizeOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n <theoplayer-menu id=\"background-color-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Background color</span>\n <theoplayer-text-track-style-radio-group property=\"backgroundColor\">\n ${colorOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n <theoplayer-menu id=\"background-opacity-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Background opacity</span>\n <theoplayer-text-track-style-radio-group property=\"backgroundOpacity\">\n ${opacityOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n <theoplayer-menu id=\"window-color-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Window color</span>\n <theoplayer-text-track-style-radio-group property=\"windowColor\">\n ${colorOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n <theoplayer-menu id=\"window-opacity-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Window opacity</span>\n <theoplayer-text-track-style-radio-group property=\"windowOpacity\">\n ${opacityOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n <theoplayer-menu id=\"edge-style-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Character edge style</span>\n <theoplayer-text-track-style-radio-group property=\"edgeStyle\">\n ${edgeStyleOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-text-track-style-menu': TextTrackStyleMenu;\n }\n}\n","import { html, type TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { MenuGroup } from './MenuGroup';\nimport languageMenuCss from './LanguageMenu.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer, MediaTrack, MediaTrackList, TextTrack, TextTracksList } from 'theoplayer/chromeless';\nimport { isNonForcedSubtitleTrack } from '../util/TrackUtils';\nimport { Attribute } from '../util/Attribute';\n\n// Load components used in template\nimport './TrackRadioGroup';\nimport './TextTrackStyleMenu';\n\nconst TRACK_EVENTS = ['addtrack', 'removetrack'] as const;\n\n/**\n * A menu to change the spoken language and subtitles of the stream.\n *\n * @slot `heading` - A slot for the menu's heading.\n */\n@customElement('theoplayer-language-menu')\n@stateReceiver(['player'])\nexport class LanguageMenu extends MenuGroup {\n static styles = [...MenuGroup.styles, languageMenuCss];\n\n private _player: ChromelessPlayer | undefined;\n private _audioTrackList: MediaTrackList | undefined;\n private _textTrackList: TextTracksList | undefined;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ state: true })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._audioTrackList?.removeEventListener(TRACK_EVENTS, this._updateAudioTracks);\n this._textTrackList?.removeEventListener(TRACK_EVENTS, this._updateTextTracks);\n this._player = player;\n this._audioTrackList = player?.audioTracks;\n this._textTrackList = player?.textTracks;\n this._updateAudioTracks();\n this._updateTextTracks();\n this._audioTrackList?.addEventListener(TRACK_EVENTS, this._updateAudioTracks);\n this._textTrackList?.addEventListener(TRACK_EVENTS, this._updateTextTracks);\n }\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.HAS_AUDIO })\n private accessor _hasAudioTracks: boolean = false;\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.HAS_SUBTITLES })\n private accessor _hasSubtitles: boolean = false;\n\n private readonly _updateAudioTracks = (): void => {\n const newAudioTracks: readonly MediaTrack[] = this._player?.audioTracks ?? [];\n // Hide audio track selection if there's only one track.\n this._hasAudioTracks = newAudioTracks.length > 1;\n };\n\n private readonly _updateTextTracks = (): void => {\n const newSubtitleTracks: readonly TextTrack[] = this._player?.textTracks.filter(isNonForcedSubtitleTrack) ?? [];\n // Hide subtitle track selection if there are no tracks. If there's one, we still show an \"off\" option.\n this._hasSubtitles = newSubtitleTracks.length > 0;\n };\n\n protected override render(): TemplateResult {\n return html`\n <theoplayer-menu>\n <span class=\"theoplayer-menu-heading\" slot=\"heading\"><slot name=\"heading\">Language</slot></span>\n <theoplayer-settings-menu-button\n class=\"theoplayer-menu-heading-button\"\n menu=\"subtitle-options-menu\"\n slot=\"heading\"\n ></theoplayer-settings-menu-button>\n <div part=\"content\">\n <div part=\"audio\">\n <h2>Audio</h2>\n <theoplayer-track-radio-group track-type=\"audio\"></theoplayer-track-radio-group>\n </div>\n <div part=\"subtitles\">\n <h2>Subtitles</h2>\n <theoplayer-track-radio-group track-type=\"subtitles\" show-off></theoplayer-track-radio-group>\n </div>\n </div>\n </theoplayer-menu>\n <theoplayer-text-track-style-menu id=\"subtitle-options-menu\"></theoplayer-text-track-style-menu>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-language-menu': LanguageMenu;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { MenuButton } from './MenuButton';\nimport languageIcon from '../icons/language.svg';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer, MediaTrackList, TextTracksList } from 'theoplayer/chromeless';\nimport { isNonForcedSubtitleTrack } from '../util/TrackUtils';\nimport { Attribute } from '../util/Attribute';\nimport { toggleAttribute } from '../util/CommonUtils';\n\nconst TRACK_EVENTS = ['addtrack', 'removetrack'] as const;\n\n/**\n * A menu button that opens a {@link LanguageMenu}.\n *\n * When there are no alternative audio languages or subtitles, this button automatically hides itself.\n *\n * @attribute `menu` - The ID of the language menu.\n */\n@customElement('theoplayer-language-menu-button')\n@stateReceiver(['player'])\nexport class LanguageMenuButton extends MenuButton {\n private _player: ChromelessPlayer | undefined;\n private _audioTrackList: MediaTrackList | undefined;\n private _textTrackList: TextTracksList | undefined;\n\n override connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(Attribute.ARIA_LABEL)) {\n this.setAttribute(Attribute.ARIA_LABEL, 'open language menu');\n }\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._audioTrackList?.removeEventListener(TRACK_EVENTS, this._updateTracks);\n this._textTrackList?.removeEventListener(TRACK_EVENTS, this._updateTracks);\n this._player = player;\n this._audioTrackList = player?.audioTracks;\n this._textTrackList = player?.textTracks;\n this._updateTracks();\n this._audioTrackList?.addEventListener(TRACK_EVENTS, this._updateTracks);\n this._textTrackList?.addEventListener(TRACK_EVENTS, this._updateTracks);\n }\n\n private readonly _updateTracks = (): void => {\n const hasTracks =\n this._player !== undefined && (this._player.audioTracks.length >= 2 || this._player.textTracks.some(isNonForcedSubtitleTrack));\n toggleAttribute(this, Attribute.HIDDEN, !hasTracks);\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<span part=\"icon\"><slot>${unsafeSVG(languageIcon)}</slot></span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-language-menu-button': LanguageMenuButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, state } from 'lit/decorators.js';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport { RadioGroup } from './RadioGroup';\nimport verticalRadioGroupCss from './VerticalRadioGroup.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport type { RadioButton } from './RadioButton';\nimport { createEvent } from '../util/EventUtils';\n\n/**\n * A radio group that shows a list of playback rates,\n * from which the user can choose a desired playback rate.\n *\n * @slot {@link RadioButton} - The possible options for the playback rate.\n * The value of each radio button must be a valid number.\n * For example: `<theoplayer-radio-button value=\"2\">2x</theoplayer-radio-button>`\n */\n@customElement('theoplayer-playback-rate-radio-group')\n@stateReceiver(['player'])\nexport class PlaybackRateRadioGroup extends LitElement {\n static override styles = [verticalRadioGroupCss];\n\n private readonly _radioGroupRef: Ref<RadioGroup> = createRef<RadioGroup>();\n private _player: ChromelessPlayer | undefined;\n private _value: number = 1;\n\n protected override firstUpdated(): void {\n const radioGroup = this._radioGroupRef.value!;\n if (!(radioGroup instanceof RadioGroup)) {\n customElements.upgrade(radioGroup);\n }\n radioGroup.value = String(this.value);\n }\n\n /**\n * The currently chosen playback rate.\n */\n get value(): number {\n return this._value;\n }\n\n @state()\n set value(value: number) {\n value = Number(value);\n if (this._value === value) {\n return;\n }\n this._value = value;\n if (this._player !== undefined) {\n this._player.playbackRate = value;\n }\n const radioGroup = this._radioGroupRef.value;\n if (radioGroup) {\n radioGroup.value = String(value);\n }\n this.dispatchEvent(createEvent('change', { bubbles: true }));\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @state()\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener('ratechange', this._updateFromPlayer);\n }\n this._player = player;\n this._updateFromPlayer();\n if (this._player !== undefined) {\n this._player.addEventListener('ratechange', this._updateFromPlayer);\n }\n }\n\n private readonly _onChange = (): void => {\n const radioGroup = this._radioGroupRef.value;\n if (!radioGroup) return;\n this.value = Number(radioGroup.value);\n };\n\n private readonly _updateFromPlayer = (): void => {\n if (this._player !== undefined) {\n this.value = this._player.playbackRate;\n }\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<theoplayer-radio-group ${ref(this._radioGroupRef)} @change=${this._onChange}><slot></slot></theoplayer-radio-group>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-playback-rate-radio-group': PlaybackRateRadioGroup;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { MenuButton } from './MenuButton';\nimport speedIcon from '../icons/speed.svg';\nimport { Attribute } from '../util/Attribute';\n\n/**\n * A menu button that opens a [playback rate menu]{@link PlaybackRateMenu}.\n *\n * @attribute menu - The ID of the playback rate menu.\n */\n@customElement('theoplayer-playback-rate-menu-button')\nexport class PlaybackRateMenuButton extends MenuButton {\n override connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(Attribute.ARIA_LABEL)) {\n this.setAttribute(Attribute.ARIA_LABEL, 'open playback speed menu');\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<span part=\"icon\"><slot>${unsafeSVG(speedIcon)}</slot></span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-playback-rate-menu-button': PlaybackRateMenuButton;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { Menu } from './Menu';\n\n// Load components used in template\nimport './PlaybackRateRadioGroup';\n\nconst PLAYBACK_RATES = [0.25, 0.5, 1, 1.25, 1.5, 2];\n\n/**\n * A menu to change the playback rate of the player.\n *\n * @slot `heading` - A slot for the menu's heading.\n */\n@customElement('theoplayer-playback-rate-menu')\nexport class PlaybackRateMenu extends Menu {\n protected override renderMenuHeading(): HTMLTemplateResult {\n return html`<span slot=\"heading\"><slot name=\"heading\">Playback speed</slot></span>`;\n }\n\n protected override renderMenuContent(): HTMLTemplateResult {\n return html`<theoplayer-playback-rate-radio-group>\n ${PLAYBACK_RATES.map(\n (rate) => html`<theoplayer-radio-button value=${rate}>${rate === 1 ? 'Normal' : `${rate}x`}</theoplayer-radio-button>`\n )}\n </theoplayer-playback-rate-radio-group>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-playback-rate-menu': PlaybackRateMenu;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { customElement, state } from 'lit/decorators.js';\n\n/**\n * A control that displays the current playback rate of the player.\n */\n@customElement('theoplayer-playback-rate-display')\n@stateReceiver(['playbackRate'])\nexport class PlaybackRateDisplay extends LitElement {\n /**\n * The current playback rate.\n */\n @state()\n accessor playbackRate: number = 1;\n\n protected override render(): HTMLTemplateResult {\n return html`<span>${this.playbackRate === 1 ? 'Normal' : `${this.playbackRate}x`}</span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-playback-rate-display': PlaybackRateDisplay;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { VideoQuality } from 'theoplayer/chromeless';\nimport { formatQualityLabel } from '../util/TrackUtils';\n\n/**\n * A control that displays the name of the active video quality.\n */\n@customElement('theoplayer-active-quality-display')\n@stateReceiver(['activeVideoQuality', 'targetVideoQualities'])\nexport class ActiveQualityDisplay extends LitElement {\n @property({ reflect: false, attribute: false })\n accessor activeVideoQuality: VideoQuality | undefined = undefined;\n\n @property({ reflect: false, attribute: false })\n accessor targetVideoQualities: VideoQuality[] | undefined = undefined;\n\n protected override render(): HTMLTemplateResult {\n // If no target quality is selected, or more than one target quality is selected,\n // treat as \"automatic\" quality selection.\n const hasSingleTargetQuality = this.targetVideoQualities !== undefined && this.targetVideoQualities.length === 1;\n const targetQuality = hasSingleTargetQuality ? this.targetVideoQualities![0] : undefined;\n // Always show the target quality immediately, even if it's not the active quality yet.\n const selectedQuality = targetQuality ?? this.activeVideoQuality;\n const qualityLabel = formatQualityLabel(selectedQuality);\n let label: string;\n if (hasSingleTargetQuality) {\n // Manual quality selection: \"720p\" or \"Unknown\"\n label = qualityLabel ?? `Unknown`;\n } else {\n // Automatic quality selection: \"Automatic\" or \"Automatic (720p)\"\n label = `Automatic${qualityLabel ? ` (${qualityLabel})` : ''}`;\n }\n return html`<span>${label}</span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-active-quality-display': ActiveQualityDisplay;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { RadioButton } from './RadioButton';\nimport type { MediaTrack, VideoQuality } from 'theoplayer/chromeless';\nimport { formatQualityLabel } from '../util/TrackUtils';\n\nconst TRACK_EVENTS = ['activequalitychanged', 'targetqualitychanged'] as const;\nconst QUALITY_EVENTS = ['update'] as const;\n\n/**\n * A radio button that shows the label of a given video quality,\n * and switches the video track's {@link theoplayer!MediaTrack.targetQuality | target quality} to that quality when clicked.\n */\n@customElement('theoplayer-quality-radio-button')\nexport class QualityRadioButton extends RadioButton {\n private _track: MediaTrack | undefined = undefined;\n private _quality: VideoQuality | undefined = undefined;\n\n @state()\n private accessor _qualityLabel = '';\n\n /**\n * The video track containing the quality being controlled.\n */\n get track(): MediaTrack | undefined {\n return this._track;\n }\n\n @property({ reflect: false, attribute: false })\n set track(track: MediaTrack | undefined) {\n if (this._track === track) {\n return;\n }\n if (this._track) {\n this._track.removeEventListener(TRACK_EVENTS, this._updateFromTrack);\n }\n this._track = track;\n this._updateFromTrack();\n if (track) {\n track.addEventListener(TRACK_EVENTS, this._updateFromTrack);\n }\n }\n\n /**\n * The video quality being controlled.\n */\n get quality(): VideoQuality | undefined {\n return this._quality;\n }\n\n @property({ reflect: false, attribute: false })\n set quality(quality: VideoQuality | undefined) {\n if (this._quality === quality) {\n return;\n }\n if (this._quality) {\n this._quality.removeEventListener(QUALITY_EVENTS, this._updateFromQuality);\n }\n this._quality = quality;\n this._updateFromTrack();\n if (quality) {\n quality.addEventListener(QUALITY_EVENTS, this._updateFromQuality);\n }\n }\n\n private readonly _updateFromTrack = () => {\n if (this._track !== undefined) {\n let targetQualities = this._track.targetQuality;\n if (Array.isArray(targetQualities)) {\n if (targetQualities.length === 1) {\n targetQualities = targetQualities[0];\n } else {\n targetQualities = undefined;\n }\n }\n if (this._quality === undefined) {\n this.checked = targetQualities === undefined;\n } else {\n this.checked = targetQualities === this._quality;\n }\n }\n this._updateFromQuality();\n };\n\n private readonly _updateFromQuality = () => {\n this._qualityLabel = formatQualityLabel(this._quality) ?? 'Automatic';\n };\n\n protected override handleChange(): void {\n this._updateTargetQuality();\n }\n\n private _updateTargetQuality(): void {\n if (this._track && this.checked) {\n this._track.targetQuality = this._quality;\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<slot>${this._qualityLabel}</slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-quality-radio-button': QualityRadioButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, state } from 'lit/decorators.js';\nimport verticalRadioGroupCss from './VerticalRadioGroup.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer, MediaTrack, MediaTrackList, Quality, VideoQuality } from 'theoplayer/chromeless';\nimport { arrayFind } from '../util/CommonUtils';\nimport { createEvent } from '../util/EventUtils';\nimport { repeat } from 'lit/directives/repeat.js';\n\nconst TRACK_EVENTS = ['addtrack', 'removetrack', 'change'] as const;\n\n/**\n * A radio group that shows a list of available video qualities,\n * from which the user can choose a desired target quality.\n */\n@customElement('theoplayer-quality-radio-group')\n@stateReceiver(['player'])\nexport class QualityRadioGroup extends LitElement {\n static override styles = [verticalRadioGroupCss];\n\n private _player: ChromelessPlayer | undefined;\n private _videoTracks: MediaTrackList | undefined;\n\n @state()\n private accessor _track: MediaTrack | undefined;\n\n protected override firstUpdated(): void {\n this._updateTrack();\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @state()\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._videoTracks?.removeEventListener(TRACK_EVENTS, this._updateTrack);\n this._player = player;\n this._videoTracks = player?.videoTracks;\n this._updateTrack();\n this._videoTracks?.addEventListener(TRACK_EVENTS, this._updateTrack);\n }\n\n private readonly _onChange = () => {\n this.dispatchEvent(createEvent('change', { bubbles: true }));\n };\n\n private readonly _updateTrack = (): void => {\n const track = this._player ? arrayFind(this._player.videoTracks, (track) => track.enabled) : undefined;\n if (this._track === track) {\n return;\n }\n this._track?.removeEventListener('update', this._update);\n this._track = track;\n this._track?.addEventListener('update', this._update);\n this._update();\n };\n\n private _update = () => this.requestUpdate();\n\n protected override render(): HTMLTemplateResult {\n const qualities: VideoQuality[] = this._track ? (this._track.qualities as Quality[] as VideoQuality[]) : [];\n return html`\n <theoplayer-radio-group @change=${this._onChange}>\n <theoplayer-quality-radio-button .track=${this._track} .quality=${undefined}></theoplayer-quality-radio-button>\n ${\n /* If there is only one available quality, *only* show the \"Automatic\" option (without the single quality). */\n qualities.length !== 1 &&\n repeat(\n qualities,\n (quality) => quality.uid,\n (quality) =>\n html`<theoplayer-quality-radio-button .track=${this._track} .quality=${quality}></theoplayer-quality-radio-button>`\n )\n }\n </theoplayer-radio-group>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-quality-radio-group': QualityRadioGroup;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { Button } from './Button';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\n\n/**\n * A button that resets the text track style.\n */\n@customElement('theoplayer-text-track-style-reset-button')\n@stateReceiver(['player'])\nexport class TextTrackStyleResetButton extends Button {\n private _player: ChromelessPlayer | undefined;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n set player(player: ChromelessPlayer | undefined) {\n this._player = player;\n }\n\n protected override handleClick() {\n if (this._player === undefined) {\n return;\n }\n const { textTrackStyle } = this._player;\n textTrackStyle.fontFamily = undefined;\n textTrackStyle.fontColor = undefined;\n textTrackStyle.fontSize = undefined;\n textTrackStyle.backgroundColor = undefined;\n textTrackStyle.windowColor = undefined;\n textTrackStyle.edgeStyle = undefined;\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<slot>Reset</slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-text-track-style-reset-button': TextTrackStyleResetButton;\n }\n}\n","import { html, type TemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { MenuGroup } from './MenuGroup';\nimport menuTableCss from './MenuTable.css';\n\n// Load components used in template\nimport './ActiveQualityDisplay';\nimport './PlaybackRateDisplay';\nimport './PlaybackRateMenu';\n\n/**\n * A menu to change the settings of the player,\n * such as the active video quality and the playback speed.\n *\n * @slot `heading` - A slot for the menu's heading.\n */\n@customElement('theoplayer-settings-menu')\nexport class SettingsMenu extends MenuGroup {\n static styles = [...MenuGroup.styles, menuTableCss];\n\n protected override render(): TemplateResult {\n return html`\n <theoplayer-menu>\n <span slot=\"heading\"><slot name=\"heading\">Settings</slot></span>\n <table>\n <tr>\n <td><span>Quality</span></td>\n <td>\n <theoplayer-menu-button menu=\"quality-menu\">\n <theoplayer-active-quality-display></theoplayer-active-quality-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Playback speed</span></td>\n <td>\n <theoplayer-menu-button menu=\"playback-rate-menu\">\n <theoplayer-playback-rate-display></theoplayer-playback-rate-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n </table>\n </theoplayer-menu>\n <theoplayer-menu id=\"quality-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Quality</span>\n <theoplayer-quality-radio-group></theoplayer-quality-radio-group>\n </theoplayer-menu>\n <theoplayer-playback-rate-menu id=\"playback-rate-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Playback speed</span>\n </theoplayer-playback-rate-menu>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-settings-menu': SettingsMenu;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { MenuButton } from './MenuButton';\nimport settingsIcon from '../icons/settings.svg';\nimport { Attribute } from '../util/Attribute';\n\n/**\n * A menu button that opens a {@link SettingsMenu}.\n *\n * @attribute `menu` - The ID of the settings menu.\n */\n@customElement('theoplayer-settings-menu-button')\nexport class SettingsMenuButton extends MenuButton {\n override connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(Attribute.ARIA_LABEL)) {\n this.setAttribute(Attribute.ARIA_LABEL, 'open settings menu');\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<span part=\"icon\"><slot>${unsafeSVG(settingsIcon)}</slot></span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-settings-menu-button': SettingsMenuButton;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { Button } from './Button';\nimport fullscreenButtonCss from './FullscreenButton.css';\nimport enterIcon from '../icons/fullscreen-enter.svg';\nimport exitIcon from '../icons/fullscreen-exit.svg';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { createCustomEvent } from '../util/EventUtils';\nimport { ENTER_FULLSCREEN_EVENT, type EnterFullscreenEvent } from '../events/EnterFullscreenEvent';\nimport { EXIT_FULLSCREEN_EVENT, type ExitFullscreenEvent } from '../events/ExitFullscreenEvent';\nimport { Attribute } from '../util/Attribute';\n\n/**\n * A button that toggles fullscreen.\n */\n@customElement('theoplayer-fullscreen-button')\n@stateReceiver(['fullscreen'])\nexport class FullscreenButton extends Button {\n static styles = [...Button.styles, fullscreenButtonCss];\n\n override connectedCallback() {\n super.connectedCallback();\n this._updateAriaLabel();\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.FULLSCREEN })\n accessor fullscreen: boolean = false;\n\n protected override handleClick(): void {\n if (!this.fullscreen) {\n const event: EnterFullscreenEvent = createCustomEvent(ENTER_FULLSCREEN_EVENT, {\n bubbles: true,\n composed: true\n });\n this.dispatchEvent(event);\n } else {\n const event: ExitFullscreenEvent = createCustomEvent(EXIT_FULLSCREEN_EVENT, {\n bubbles: true,\n composed: true\n });\n this.dispatchEvent(event);\n }\n }\n\n override attributeChangedCallback(attrName: string, oldValue: any, newValue: any) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (FullscreenButton.observedAttributes.indexOf(attrName as Attribute) >= 0) {\n this._updateAriaLabel();\n }\n }\n\n private _updateAriaLabel(): void {\n const label = this.fullscreen ? 'exit fullscreen' : 'enter fullscreen';\n this.setAttribute(Attribute.ARIA_LABEL, label);\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<span part=\"enter-icon\"><slot name=\"enter-icon\">${unsafeSVG(enterIcon)}</slot></span>\n <span part=\"exit-icon\"><slot name=\"exit-icon\">${unsafeSVG(exitIcon)}</slot></span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-fullscreen-button': FullscreenButton;\n }\n}\n","import * as shadyCss from '@webcomponents/shadycss';\nimport rangeCss from './Range.css';\nimport { Attribute } from '../util/Attribute';\nimport { ColorStops } from '../util/ColorStops';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { DeviceType } from '../util/DeviceType';\nimport { isArrowKey, KeyCode } from '../util/KeyCode';\nimport { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport { property, state } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\n\n/**\n * A slider to select a value from a range.\n *\n * @attribute `disabled` - Whether the range is disabled.\n * When disabled, the slider value cannot be changed, and the slider thumb is hidden.\n * @attribute `inert` - Whether the range is inert.\n * When inert, the slider value cannot be changed, but the slider thumb is still visible.\n *\n * @group Components\n */\n@stateReceiver(['deviceType'])\nexport abstract class Range extends LitElement {\n static override styles = [rangeCss];\n\n protected readonly _rangeRef: Ref<HTMLInputElement> = createRef<HTMLInputElement>();\n\n private _min: number = 0;\n private _max: number = 100;\n private _value: number = 0;\n private _disabled: boolean = false;\n private _hidden: boolean = false;\n private _inert: boolean = false;\n\n private _rangeWidth: number = 0;\n private _thumbWidth: number = 10;\n\n @state()\n private accessor _pointerWidth: number = 0;\n\n connectedCallback(): void {\n super.connectedCallback();\n\n this._updateRange();\n this.addEventListener('pointermove', this._updatePointerBar);\n }\n\n disconnectedCallback(): void {\n this.removeEventListener('pointermove', this._updatePointerBar);\n }\n\n /**\n * Whether the range is disabled.\n *\n * When disabled, the slider value cannot be changed, and the slider thumb is hidden.\n */\n get disabled(): boolean {\n return this._disabled;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.DISABLED })\n set disabled(disabled: boolean) {\n if (this._disabled === disabled) return;\n this._disabled = disabled;\n this.setAttribute('aria-disabled', this._disabled ? 'true' : 'false');\n }\n\n /**\n * Whether the range is hidden.\n */\n get hidden(): boolean {\n return this._hidden;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.HIDDEN })\n set hidden(hidden: boolean) {\n if (this._hidden === hidden) return;\n this._hidden = hidden;\n this._updateRange();\n }\n\n /**\n * Whether the range is inert.\n *\n * When inert, the slider value cannot be changed, but the slider thumb is still visible.\n */\n get inert() {\n return this._inert;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.INERT })\n set inert(inert: boolean) {\n this._inert = inert;\n }\n\n /**\n * The current value.\n */\n get value(): number {\n return this._value;\n }\n\n @property({ reflect: false, attribute: false })\n set value(value: number) {\n let newValue = value;\n if (!isNaN(this.min)) {\n newValue = Math.max(this.min, newValue);\n }\n if (!isNaN(this.max)) {\n newValue = Math.min(this.max, newValue);\n }\n if (this._value === newValue) return;\n this._value = newValue;\n this.handleInput();\n }\n\n /**\n * The minimum allowed value.\n */\n get min(): number {\n return this._min;\n }\n\n @property({ reflect: true, type: Number, attribute: 'min' })\n set min(min: number) {\n this._min = min;\n this._updateRange();\n }\n\n /**\n * The maximum allowed value.\n */\n get max(): number {\n return this._max;\n }\n\n @property({ reflect: true, type: Number, attribute: 'max' })\n set max(max: number) {\n this._max = max;\n this._updateRange();\n }\n\n /**\n * The granularity at which the value can change.\n *\n * If set to `\"any\"`, the value can change with arbitrary precision.\n */\n @property({\n reflect: true,\n attribute: 'step',\n converter: {\n fromAttribute: (value): number | 'any' => (value == null || value === 'any' ? 'any' : Number(value))\n }\n })\n accessor step: number | 'any' = 'any';\n\n @property({ reflect: true, type: String, attribute: Attribute.DEVICE_TYPE })\n accessor deviceType: DeviceType = 'desktop';\n\n @property({ reflect: true, type: String, attribute: 'aria-live' })\n accessor ariaLive: string | null = null;\n\n private readonly _onInput = (event: Event) => {\n this.value = (event.target as HTMLInputElement).valueAsNumber;\n };\n\n protected handleInput(): void {\n this._updateRange();\n }\n\n protected _updateRange(useCachedWidth?: boolean): void {\n if (this.hidden) {\n return;\n }\n if (!useCachedWidth) {\n this.updateCachedWidths_();\n }\n this.updateBar_();\n }\n\n /**\n * The value for the `aria-label` attribute of the `<input type=\"range\">` element.\n */\n protected abstract getAriaLabel(): string;\n\n /**\n * The value for the `aria-valuetext` attribute of the `<input type=\"range\">` element.\n */\n protected abstract getAriaValueText(): string;\n\n /**\n * Native ranges have a single color for the whole track, which is different\n * from most video players that have a colored \"bar\" to the left of the handle\n * showing playback progress or volume level. Here we're building that bar\n * by using a background gradient that moves with the range value.\n */\n private updateBar_() {\n const gradientStops = this.getBarColors().toGradientStops();\n shadyCss.styleSubtree(this, {\n '--theoplayer-range-track-progress-internal': `linear-gradient(to right, ${gradientStops})`\n });\n }\n\n /**\n * Build the color gradient for the range bar.\n * Creating an array so progress-bar can insert the buffered bar.\n */\n protected getBarColors(): ColorStops {\n const { value, min, max } = this;\n const relativeValue = value - min;\n const relativeMax = max - min;\n let rangePercent = (relativeValue / relativeMax) * 100;\n if (isNaN(rangePercent)) {\n rangePercent = 0;\n }\n\n let thumbPercent = 0;\n // If the range thumb is at min or max don't correct the time range.\n // Ideally the thumb center would go all the way to min and max values\n // but input[type=range] doesn't play like that.\n if (min < value && value < max) {\n const thumbOffset = this._thumbWidth * (0.5 - rangePercent / 100);\n thumbPercent = (thumbOffset / this._rangeWidth) * 100;\n }\n\n const stops = new ColorStops();\n stops.add('var(--theoplayer-range-bar-color, #fff)', 0, rangePercent + thumbPercent);\n return stops;\n }\n\n private updateCachedWidths_(): void {\n // Use the last non-zero range width, in case the range is temporarily hidden.\n const rangeWidth = this._rangeRef.value?.offsetWidth ?? 0;\n if (rangeWidth > 0) {\n this._rangeWidth = rangeWidth;\n }\n const thumbWidth = parseInt(getComputedStyle(this).getPropertyValue('--theoplayer-range-thumb-width') || '10px');\n if (thumbWidth > 0) {\n this._thumbWidth = thumbWidth;\n }\n }\n\n protected getMinimumStepForVisibleChange_(): number {\n // The smallest visible change is 1 pixel.\n // Compute how much the value needs to change for that.\n const { min, max } = this;\n const relativeMax = max - min;\n if (relativeMax <= 0) {\n return NaN;\n }\n return relativeMax / this._rangeWidth;\n }\n\n private readonly _updatePointerBar = (e: PointerEvent): void => {\n const rangeEl = this._rangeRef.value;\n if (this.disabled || this.inert || !rangeEl) {\n return;\n }\n // Get mouse position percent\n const rangeRect = rangeEl.getBoundingClientRect();\n let mousePercent = (e.clientX - rangeRect.left) / rangeRect.width;\n // Lock between 0 and 1\n mousePercent = Math.max(0, Math.min(1, mousePercent));\n this.updatePointer_(mousePercent, rangeRect);\n };\n\n protected updatePointer_(mousePercent: number, rangeRect: DOMRectReadOnly): void {\n this._pointerWidth = mousePercent * rangeRect.width;\n }\n\n private readonly _onKeyDown = (e: KeyboardEvent): void => {\n this.handleKeyDown_(e);\n };\n\n protected handleKeyDown_(e: KeyboardEvent) {\n if (this.deviceType === 'tv' && isArrowKey(e.keyCode)) {\n // On TV devices, only allow left/right arrow keys to move the slider.\n if (e.keyCode === KeyCode.LEFT || e.keyCode === KeyCode.RIGHT) {\n // Stop propagation, to prevent <theoplayer-ui> from navigating to a different control\n // while we're moving the slider.\n e.stopPropagation();\n } else if (e.keyCode === KeyCode.UP || e.keyCode === KeyCode.DOWN) {\n // Prevent default, to stop the browser from moving the slider.\n e.preventDefault();\n }\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<div part=\"container\">\n <div part=\"background\"></div>\n <div part=\"pointer\" style=${styleMap({ width: `${this._pointerWidth}px` })}></div>\n <input\n type=\"range\"\n ${ref(this._rangeRef)}\n .min=${this.min}\n .max=${this.max}\n .step=${this.step}\n .value=${this.value}\n .disabled=${this.disabled || this.inert}\n aria-label=\"${this.getAriaLabel()}\"\n aria-valuetext=${this.getAriaValueText()}\n aria-live=${this.ariaLive}\n @input=${this._onInput}\n @change=${\n /* Internet Explorer does not fire 'input' events for <input> elements... use 'change' instead. */\n this._onInput\n }\n @keydown=${this._onKeyDown}\n />\n ${this.renderRangeExtras()}\n </div>`;\n }\n\n protected renderRangeExtras(): HTMLTemplateResult {\n return html``;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport previewThumbnailCss from './PreviewThumbnail.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer, TextTrack, TextTrackCue, TextTrackCueList, TextTracksList } from 'theoplayer/chromeless';\nimport { arrayFind, noOp } from '../util/CommonUtils';\n\nconst TRACK_EVENTS = ['addtrack', 'removetrack'] as const;\n\n/**\n * A display that shows the thumbnail image at the current preview time\n * of a {@link TimeRange | `<theoplayer-time-range>`}.\n *\n * The first `metadata` text track whose label equals `\"thumbnails\"` is used as source for the thumbnails.\n * This track is expected to contain cues whose content is the URL for the thumbnail image.\n * If the thumbnail image URL ends with a [spatial fragment](https://www.w3.org/TR/media-frags/#naming-space)\n * (e.g. `#xywh=180,80,60,40`), then the thumbnail is clipped to the rectangle defined by that fragment.\n *\n * If the stream does not contain thumbnails, then this display shows nothing.\n */\n@customElement('theoplayer-preview-thumbnail')\n@stateReceiver(['player', 'previewTime'])\nexport class PreviewThumbnail extends LitElement {\n static override styles = [previewThumbnailCss];\n\n private readonly _canvasRef: Ref<HTMLCanvasElement> = createRef<HTMLCanvasElement>();\n private _canvasContext: CanvasRenderingContext2D | undefined;\n private readonly _thumbnailImageSource: HTMLImageElement;\n\n private _player: ChromelessPlayer | undefined;\n private _textTrackList: TextTracksList | undefined;\n private _previewTime: number = NaN;\n private _thumbnailTextTrack: TextTrack | undefined;\n private _lastLoadedThumbnailUrl: string | undefined;\n\n @state()\n private accessor _thumbnailVisible: boolean = false;\n\n constructor() {\n super();\n\n this._thumbnailImageSource = document.createElement('img');\n this._thumbnailImageSource.decoding = 'async';\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._textTrackList?.removeEventListener(TRACK_EVENTS, this._updateThumbnailTextTrack);\n this._player = player;\n this._textTrackList = player?.textTracks;\n this._updateThumbnailTextTrack();\n this._textTrackList?.addEventListener(TRACK_EVENTS, this._updateThumbnailTextTrack);\n }\n\n get previewTime(): number {\n return this._previewTime;\n }\n\n @state()\n set previewTime(previewTime: number) {\n this._previewTime = previewTime;\n this.updateThumbnail_();\n }\n\n private readonly _updateThumbnailTextTrack = (): void => {\n const oldTrack = this._thumbnailTextTrack;\n const newTrack = this._player ? arrayFind(this._player.textTracks, isThumbnailTextTrack) : undefined;\n if (oldTrack === newTrack) {\n return;\n }\n this._thumbnailTextTrack = newTrack;\n this.updateThumbnail_();\n };\n\n private updateThumbnail_(): void {\n const track = this._thumbnailTextTrack;\n if (track === undefined) {\n this.hideThumbnail_();\n return;\n }\n if (track.mode === 'disabled') {\n track.mode = 'hidden';\n }\n const cue = getCueAtTime(track.cues!, this._previewTime);\n if (cue === undefined) {\n this.hideThumbnail_();\n return;\n }\n const content = (cue.content as string).trim();\n const sprite = parseSpriteUrl(content);\n // Resolve relative URLs against track's URL (or page URL)\n let thumbnailUrl = sprite ? sprite.url : content;\n thumbnailUrl = new URL(thumbnailUrl, track.src || location.href).href;\n // Load thumbnail image, if not yet loaded\n if (this._lastLoadedThumbnailUrl !== thumbnailUrl) {\n this.loadThumbnailImage_(thumbnailUrl);\n return;\n }\n this.showThumbnail_(sprite);\n }\n\n private loadThumbnailImage_(url: string): void {\n if (this._thumbnailImageSource.src === url) {\n // Already loading this URL, wait for the current load to complete.\n return;\n }\n const onLoad = () => {\n this._lastLoadedThumbnailUrl = url;\n this.updateThumbnail_();\n };\n if (typeof this._thumbnailImageSource.decode === 'function') {\n // Load and decode in parallel\n this._thumbnailImageSource.src = url;\n this._thumbnailImageSource.decode().then(onLoad, noOp);\n } else {\n // Load in parallel, decode synchronously\n this._thumbnailImageSource.onload = onLoad;\n // Reset `src` to ensure `onload` will be triggered.\n this._thumbnailImageSource.src = '';\n this._thumbnailImageSource.src = url;\n }\n }\n\n private showThumbnail_(sprite: Sprite | undefined): void {\n const canvas = this._canvasRef.value;\n if (!canvas) return;\n this._canvasContext ??= canvas.getContext('2d') ?? undefined;\n if (!this._canvasContext) return;\n if (sprite) {\n // Draw part of image\n canvas.width = sprite.w;\n canvas.height = sprite.h;\n this._canvasContext.drawImage(this._thumbnailImageSource, sprite.x, sprite.y, sprite.w, sprite.h, 0, 0, sprite.w, sprite.h);\n } else {\n // Draw entire image\n canvas.width = this._thumbnailImageSource.naturalWidth;\n canvas.height = this._thumbnailImageSource.naturalHeight;\n this._canvasContext.drawImage(this._thumbnailImageSource, 0, 0);\n }\n this._thumbnailVisible = true;\n }\n\n private hideThumbnail_(): void {\n this._thumbnailVisible = false;\n }\n\n protected override render(): HTMLTemplateResult {\n const canvasStyle = { display: this._thumbnailVisible ? 'block' : 'none' };\n return html`<canvas ${ref(this._canvasRef)} style=${styleMap(canvasStyle)}></canvas>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-preview-thumbnail': PreviewThumbnail;\n }\n}\n\nfunction isThumbnailTextTrack(track: TextTrack): boolean {\n return track.kind === 'metadata' && track.label === 'thumbnails';\n}\n\nfunction getCueAtTime(cues: TextTrackCueList, time: number): TextTrackCue | undefined {\n if (cues.length === 0) {\n return undefined;\n }\n let result = cues[0];\n for (let cue of cues) {\n if (cue.startTime <= time) {\n result = cue;\n } else if (time >= cue.endTime) {\n return result;\n }\n }\n return result;\n}\n\ninterface Sprite {\n url: string;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nfunction parseSpriteUrl(spriteUrl: string): Sprite | undefined {\n const match = spriteUrl.match(/^(.+)#xywh=(\\d+),(\\d+),(\\d+),(\\d+)$/);\n if (!match) {\n return undefined;\n }\n const [, url, x, y, w, h] = match;\n return {\n url,\n x: +x,\n y: +y,\n w: +w,\n h: +h\n };\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport textDisplayCss from './TextDisplay.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { formatTime } from '../util/TimeUtils';\nimport { Attribute } from '../util/Attribute';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport type { StreamType } from '../util/StreamType';\n\nconst PLAYER_EVENTS = ['timeupdate', 'seeking', 'seeked', 'durationchange'] as const;\n\n/**\n * A display that shows the current preview time of a {@link TimeRange | `<theoplayer-time-range>`}.\n *\n * @attribute `remaining` - If set, shows the remaining time of the stream.\n * @attribute `remaining-when-live` - If set, and the stream is a livestream, shows the remaining time\n * (until the live point) of the stream.\n */\n@customElement('theoplayer-preview-time-display')\n@stateReceiver(['player', 'previewTime', 'streamType'])\nexport class PreviewTimeDisplay extends LitElement {\n static override styles = [textDisplayCss];\n\n private _player: ChromelessPlayer | undefined;\n\n connectedCallback(): void {\n super.connectedCallback();\n this._updateFromPlayer();\n }\n\n @state()\n accessor previewTime: number = NaN;\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.REMAINING })\n accessor remaining: boolean = false;\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.REMAINING_WHEN_LIVE })\n accessor remainingWhenLive: boolean = false;\n\n @property({ reflect: true, type: String, attribute: Attribute.STREAM_TYPE })\n accessor streamType: StreamType = 'vod';\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n this._player = player;\n this._updateFromPlayer();\n if (this._player !== undefined) {\n this._player.addEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n }\n\n @state()\n private accessor _endTime: number = 0;\n\n private readonly _updateFromPlayer = (): void => {\n const duration = this._player ? this._player.duration : NaN;\n const seekable = this._player?.seekable;\n this._endTime = isFinite(duration) ? duration : seekable && seekable.length > 0 ? seekable.end(0) : NaN;\n };\n\n protected override render(): HTMLTemplateResult {\n let previewTime = this.previewTime;\n const endTime = this._endTime;\n const remaining = this.remaining || (this.remainingWhenLive && this.streamType !== 'vod');\n if (remaining) {\n previewTime = -((endTime || 0) - previewTime);\n }\n return html`<span>${formatTime(previewTime, endTime, remaining)}</span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-preview-time-display': PreviewTimeDisplay;\n }\n}\n","import { html, type HTMLTemplateResult, type PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { createRef, type Ref, ref } from 'lit/directives/ref.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { Range } from './Range';\nimport timeRangeCss from './TimeRange.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { Ads, ChromelessPlayer, TimeRanges } from 'theoplayer/chromeless';\nimport { formatAsTimePhrase } from '../util/TimeUtils';\nimport { createCustomEvent } from '../util/EventUtils';\nimport type { PreviewTimeChangeEvent } from '../events/PreviewTimeChangeEvent';\nimport { PREVIEW_TIME_CHANGE_EVENT } from '../events/PreviewTimeChangeEvent';\nimport { Attribute } from '../util/Attribute';\nimport type { StreamType } from '../util/StreamType';\nimport { isLinearAd } from '../util/AdUtils';\nimport type { ColorStops } from '../util/ColorStops';\nimport { KeyCode } from '../util/KeyCode';\n\n// Load components used in template\nimport './PreviewThumbnail';\nimport './PreviewTimeDisplay';\n\nconst UPDATE_EVENTS = ['timeupdate', 'durationchange', 'ratechange', 'seeking', 'seeked'] as const;\nconst AUTO_ADVANCE_EVENTS = ['play', 'pause', 'ended', 'durationchange', 'readystatechange', 'error'] as const;\nconst AD_EVENTS = ['adbreakbegin', 'adbreakend', 'adbreakchange', 'updateadbreak', 'adbegin', 'adend', 'adskip', 'addad', 'updatead'] as const;\nconst DEFAULT_MISSING_TIME_PHRASE = 'video not loaded, unknown time';\n\n/**\n * Width of an ad marker on the progress bar, in percent of the total bar width.\n */\nconst AD_MARKER_WIDTH = 1;\n\n/**\n * A seek bar, showing the current time of the player,\n * and which seeks the player when clicked or dragged.\n *\n * @slot `preview` - A slot holding a preview of the seek time, shown while hovering the seek bar.\n * By default, this shows the {@link PreviewTimeDisplay | preview time} and\n * the {@link PreviewThumbnail | preview thumbnail}.\n */\n@customElement('theoplayer-time-range')\n@stateReceiver(['player', 'streamType', 'deviceType'])\nexport class TimeRange extends Range {\n static override styles = [...Range.styles, timeRangeCss];\n\n private readonly _previewBoxEl: Ref<HTMLElement> = createRef<HTMLElement>();\n\n private _player: ChromelessPlayer | undefined;\n private _streamType: StreamType = 'vod';\n private _showAdMarkers: boolean = false;\n private _ads: Ads | undefined;\n private _pausedWhileScrubbing: boolean = false;\n\n private _autoAdvanceId: number = 0;\n private _lastUpdateTime: number = 0;\n private _lastCurrentTime: number = 0;\n private _lastPlaybackRate: number = 0;\n\n constructor() {\n super();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.hasAttribute('min')) {\n this.min = 0;\n }\n if (!this.hasAttribute('max')) {\n this.max = 1000;\n }\n if (!this.hasAttribute(Attribute.ARIA_LIVE)) {\n this.ariaLive = 'off';\n }\n\n this._toggleAutoAdvance();\n }\n\n protected override firstUpdated(_changedProperties: PropertyValues) {\n this._rangeRef.value?.addEventListener('mousedown', this._pauseOnScrubStart);\n this._rangeRef.value?.addEventListener('pointerdown', this._pauseOnScrubStart);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this._rangeRef.value?.removeEventListener('mousedown', this._pauseOnScrubStart);\n this._rangeRef.value?.removeEventListener('pointerdown', this._pauseOnScrubStart);\n\n this._toggleAutoAdvance();\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener(UPDATE_EVENTS, this._updateFromPlayer);\n this._player.removeEventListener(AUTO_ADVANCE_EVENTS, this._toggleAutoAdvance);\n }\n this._ads?.removeEventListener(AD_EVENTS, this._onAdChange);\n this._player = player;\n this._ads = player?.ads;\n this._updateFromPlayer();\n this._toggleAutoAdvance();\n if (this._player !== undefined) {\n this._player.addEventListener(UPDATE_EVENTS, this._updateFromPlayer);\n this._player.addEventListener(AUTO_ADVANCE_EVENTS, this._toggleAutoAdvance);\n }\n this._ads?.addEventListener(AD_EVENTS, this._onAdChange);\n }\n\n get streamType(): StreamType {\n return this._streamType;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.STREAM_TYPE })\n set streamType(streamType: StreamType) {\n this._streamType = streamType;\n this.updateDisabled_();\n }\n\n get showAdMarkers(): boolean {\n return this._showAdMarkers;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.SHOW_AD_MARKERS })\n set showAdMarkers(showAdMarkers: boolean) {\n this._showAdMarkers = showAdMarkers;\n this._updateRange();\n }\n\n private readonly _updateFromPlayer = () => {\n if (this._player === undefined) {\n return;\n }\n this._lastUpdateTime = performance.now();\n this._lastCurrentTime = this._player.currentTime;\n this._lastPlaybackRate = this._player.playbackRate;\n const seekable = this._player.seekable;\n let min: number;\n let max: number;\n let value: number = this._lastCurrentTime;\n if (seekable.length !== 0) {\n min = seekable.start(0);\n max = seekable.end(0);\n } else {\n min = 0;\n max = this._player.duration;\n }\n if (!isFinite(this._lastCurrentTime)) {\n const isLive = this._player.duration === Infinity;\n value = isLive ? max : min;\n }\n this.min = min;\n this.max = max;\n this.value = value;\n this.updateDisabled_(seekable);\n };\n\n private updateDisabled_(seekable: TimeRanges | undefined = this._player?.seekable) {\n let disabled = this.streamType === 'live';\n if (seekable !== undefined) {\n disabled ||= seekable.length === 0;\n }\n this.disabled = disabled;\n }\n\n protected override getAriaLabel(): string {\n return 'seek';\n }\n\n protected override getAriaValueText(): string {\n const currentTimePhrase = formatAsTimePhrase(this.value);\n const totalTimePhrase = formatAsTimePhrase(this.max);\n if (currentTimePhrase && totalTimePhrase) {\n return `${currentTimePhrase} of ${totalTimePhrase}`;\n }\n return DEFAULT_MISSING_TIME_PHRASE;\n }\n\n protected override handleInput(): void {\n if (this._player !== undefined && this._player.currentTime !== this.value) {\n this._player.currentTime = this.value;\n }\n super.handleInput();\n }\n\n private readonly _pauseOnScrubStart = () => {\n if (this._pausedWhileScrubbing) {\n // Already scrubbing.\n return;\n }\n if (this.disabled || this.inert) {\n return;\n }\n if (this._player === undefined || this._player.paused) {\n // Player is already paused.\n return;\n }\n this._pausedWhileScrubbing = true;\n this._player.pause();\n document.addEventListener('mouseup', this._playOnScrubEnd);\n document.addEventListener('pointerup', this._playOnScrubEnd);\n document.addEventListener('pointercancel', this._playOnScrubEnd);\n };\n\n private readonly _playOnScrubEnd = () => {\n if (!this._pausedWhileScrubbing) {\n return;\n }\n this._pausedWhileScrubbing = false;\n document.removeEventListener('mouseup', this._playOnScrubEnd);\n document.removeEventListener('pointerup', this._playOnScrubEnd);\n document.removeEventListener('pointercancel', this._playOnScrubEnd);\n if (this._player !== undefined && this._player.paused) {\n this._player.play();\n }\n };\n\n private shouldAutoAdvance_(): boolean {\n return (\n this.isConnected &&\n this._player !== undefined &&\n !this._player.paused &&\n !this._player.ended &&\n !this._player.errorObject &&\n this._player.readyState >= 3 &&\n isFinite(this._lastCurrentTime) &&\n this.needToUpdateEveryFrame_()\n );\n }\n\n private needToUpdateEveryFrame_(): boolean {\n // The player fires at least one timeupdate event every 250ms.\n // If it takes more than 250ms to advance the playhead by 1 pixel,\n // then we definitely don't need to update every frame.\n const minimumStep = this.getMinimumStepForVisibleChange_();\n const timeUpdateStep = 0.25 * this._lastPlaybackRate;\n return minimumStep < timeUpdateStep;\n }\n\n private readonly _toggleAutoAdvance = () => {\n if (this.shouldAutoAdvance_()) {\n if (this._autoAdvanceId === 0) {\n this._updateFromPlayer();\n this._autoAdvanceId = requestAnimationFrame(this._autoAdvanceWhilePlaying);\n }\n } else {\n if (this._autoAdvanceId !== 0) {\n this._updateFromPlayer();\n cancelAnimationFrame(this._autoAdvanceId);\n this._autoAdvanceId = 0;\n }\n }\n };\n\n private readonly _autoAdvanceWhilePlaying = () => {\n if (!this.shouldAutoAdvance_()) {\n this._autoAdvanceId = 0;\n return;\n }\n\n const delta = (performance.now() - this._lastUpdateTime) / 1000;\n const newValue = this._lastCurrentTime + delta * this._lastPlaybackRate;\n if (Math.abs(newValue - this.value) >= this.getMinimumStepForVisibleChange_()) {\n this.value = newValue;\n\n // Use cached width to avoid synchronous layout\n this._updateRange(/* useCachedWidth = */ true);\n }\n\n this._autoAdvanceId = requestAnimationFrame(this._autoAdvanceWhilePlaying);\n };\n\n @state()\n private accessor _previewRailTransform: string = '';\n\n protected override updatePointer_(mousePercent: number, rangeRect: DOMRectReadOnly): void {\n super.updatePointer_(mousePercent, rangeRect);\n\n // Update preview rail, keeping the preview box within bounds\n let previewPos = rangeRect.left + mousePercent * rangeRect.width;\n const previewBoxEl = this._previewBoxEl.value;\n if (previewBoxEl) {\n const previewBoxRect = previewBoxEl.getBoundingClientRect();\n const minPreviewPos = rangeRect.left + previewBoxRect.width / 2;\n const maxPreviewPos = rangeRect.right - previewBoxRect.width / 2;\n previewPos = Math.max(minPreviewPos, Math.min(maxPreviewPos, previewPos));\n const previewPosFraction = (previewPos - rangeRect.left) / rangeRect.width;\n this._previewRailTransform = `translateX(${(previewPosFraction * 100 * 100).toFixed(6)}%)`;\n }\n\n // Propagate preview time to parent\n if (this._player === undefined) {\n return;\n }\n const { min, max } = this;\n const previewTime = min + mousePercent * (max - min);\n const previewTimeChangeEvent: PreviewTimeChangeEvent = createCustomEvent(PREVIEW_TIME_CHANGE_EVENT, {\n bubbles: true,\n composed: true,\n detail: { previewTime }\n });\n this.dispatchEvent(previewTimeChangeEvent);\n }\n\n protected override getBarColors(): ColorStops {\n const colorStops = super.getBarColors();\n if (!this.showAdMarkers || !this._player || !this._player.ads) {\n return colorStops;\n }\n if (this._player.ads.playing) {\n // Currently playing a linear ad\n return colorStops;\n }\n const { min, max } = this;\n for (const adBreak of this._player.ads.scheduledAdBreaks) {\n if (adBreak.ads !== undefined && adBreak.ads.length > 0 && !adBreak.ads.some(isLinearAd)) {\n // Ad break definitely does not contain any linear ads\n continue;\n }\n let adBreakTime = adBreak.timeOffset;\n if (adBreakTime < 0) {\n // Post-rolls have timeOffset == -1\n adBreakTime = this._player.duration;\n }\n if (min <= adBreakTime && adBreakTime <= max) {\n const adBreakPercent = ((adBreakTime - min) / (max - min)) * 100;\n let adBreakFrom: number;\n let adBreakTo: number;\n if (adBreakPercent + AD_MARKER_WIDTH < 100) {\n adBreakFrom = adBreakPercent;\n adBreakTo = adBreakPercent + AD_MARKER_WIDTH;\n } else {\n adBreakFrom = 100 - AD_MARKER_WIDTH;\n adBreakTo = 100;\n }\n colorStops.add('var(--theoplayer-time-range-ad-marker-color, #ffc50f)', adBreakFrom, adBreakTo);\n }\n }\n return colorStops;\n }\n\n private readonly _onAdChange = () => {\n this._updateRange();\n };\n\n protected override handleKeyDown_(e: KeyboardEvent) {\n super.handleKeyDown_(e);\n if (this.deviceType === 'tv' && e.keyCode === KeyCode.ENTER) {\n if (this._player !== undefined) {\n if (this._player.paused) {\n this._player.play();\n } else {\n this._player.pause();\n }\n }\n }\n }\n\n protected override renderRangeExtras(): HTMLTemplateResult {\n return html`\n <div class=\"theoplayer-time-range-preview-rail\" style=${styleMap({ transform: this._previewRailTransform })}>\n <div part=\"box preview-box\" ${ref(this._previewBoxEl)}>\n <slot name=\"preview\">\n <theoplayer-preview-thumbnail></theoplayer-preview-thumbnail>\n <theoplayer-preview-time-display remaining-when-live></theoplayer-preview-time-display>\n </slot>\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-time-range': TimeRange;\n }\n}\n","import { Range } from './Range';\nimport { customElement, property } from 'lit/decorators.js';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\n\nfunction formatAsPercentString(value: number, max: number) {\n return `${Math.round((value / max) * 100)}%`;\n}\n\n/**\n * A volume slider, showing the current audio volume of the player,\n * and which changes the volume when clicked or dragged.\n */\n@customElement('theoplayer-volume-range')\n@stateReceiver(['player', 'deviceType'])\nexport class VolumeRange extends Range {\n private _player: ChromelessPlayer | undefined;\n\n constructor() {\n super();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.hasAttribute('min')) {\n this.min = 0;\n }\n if (!this.hasAttribute('max')) {\n this.max = 1;\n }\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener('volumechange', this._updateFromPlayer);\n }\n this._player = player;\n this._updateFromPlayer();\n if (this._player !== undefined) {\n this._player.addEventListener('volumechange', this._updateFromPlayer);\n }\n }\n\n private readonly _updateFromPlayer = () => {\n if (this._player !== undefined) {\n this.value = this._player.volume;\n }\n };\n\n protected override getAriaLabel(): string {\n return 'volume';\n }\n\n protected override getAriaValueText(): string {\n return formatAsPercentString(this.value, this.max);\n }\n\n protected override handleInput(): void {\n if (this._player !== undefined && this._player.volume !== this.value) {\n this._player.volume = this.value;\n }\n super.handleInput();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-volume-range': VolumeRange;\n }\n}\n","import { html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport errorDisplayCss from './ErrorDisplay.css';\nimport errorIcon from '../icons/error.svg';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { THEOplayerError } from 'theoplayer/chromeless';\nimport { Attribute } from '../util/Attribute';\n\n/**\n * A screen that shows the details of a fatal player error.\n */\n@customElement('theoplayer-error-display')\n@stateReceiver(['error', 'fullscreen'])\nexport class ErrorDisplay extends LitElement {\n static override styles = [errorDisplayCss];\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true\n };\n\n /**\n * The error.\n */\n @property({ reflect: false, attribute: false })\n accessor error: THEOplayerError | undefined;\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.FULLSCREEN })\n accessor fullscreen: boolean = false;\n\n protected override render() {\n return html`<div part=\"icon\"><slot name=\"icon\">${unsafeSVG(errorIcon)}</slot></div>\n <div part=\"text\">\n <h1 part=\"heading\"><slot name=\"heading\">An error occurred</slot></h1>\n <p part=\"message\"><slot name=\"message\">${this.error?.message ?? ''}</slot></p>\n </div>\n <div part=\"fullscreen-controls\">\n <slot name=\"fullscreen-controls\"><theoplayer-fullscreen-button></theoplayer-fullscreen-button></slot>\n </div>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-error-display': ErrorDisplay;\n }\n}\n","import type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { CastButton } from './CastButton';\nimport chromecastButtonHtml from './ChromecastButton.html';\nimport chromecastButtonCss from './ChromecastButton.css';\nimport { Attribute } from '../util/Attribute';\nimport { customElement } from 'lit/decorators.js';\n\nlet chromecastButtonId = 0;\n\n/**\n * A button to start and stop casting using Chromecast.\n */\n@customElement('theoplayer-chromecast-button')\n@stateReceiver(['player'])\nexport class ChromecastButton extends CastButton {\n static styles = [...CastButton.styles, chromecastButtonCss];\n\n private _player: ChromelessPlayer | undefined;\n private readonly _buttonId = ++chromecastButtonId;\n\n constructor() {\n super();\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this._updateAriaLabel();\n }\n\n get player() {\n return this._player;\n }\n\n set player(player: ChromelessPlayer | undefined) {\n this._player = player;\n this.castApi = player?.cast?.chromecast;\n }\n\n override attributeChangedCallback(attrName: string, oldValue: any, newValue: any) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (ChromecastButton.observedAttributes.indexOf(attrName as Attribute) >= 0) {\n this._updateAriaLabel();\n }\n }\n\n private _updateAriaLabel(): void {\n const label =\n this.castState === 'connecting' || this.castState === 'connected' ? 'stop casting to Chromecast' : 'start casting to Chromecast';\n this.setAttribute(Attribute.ARIA_LABEL, label);\n }\n\n protected override render() {\n return chromecastButtonHtml(this._buttonId);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-chromecast-button': ChromecastButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, state } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport chromecastDisplayCss from './ChromecastDisplay.css';\nimport chromecastIcon from '../icons/chromecast-48px.svg';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { Chromecast, ChromelessPlayer } from 'theoplayer/chromeless';\nimport { Attribute } from '../util/Attribute';\n\nconst CAST_EVENTS = ['statechange'] as const;\n\n/**\n * A control that displays the casting status while using Chromecast.\n */\n@customElement('theoplayer-chromecast-display')\n@stateReceiver(['player'])\nexport class ChromecastDisplay extends LitElement {\n static styles = [chromecastDisplayCss];\n\n private _player: ChromelessPlayer | undefined;\n private _castApi: Chromecast | undefined;\n\n @state()\n private accessor _receiverName: string = 'Chromecast';\n\n connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute(Attribute.HIDDEN)) {\n this.setAttribute(Attribute.HIDDEN, '');\n }\n this._updateFromPlayer();\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._castApi !== undefined) {\n this._castApi.removeEventListener(CAST_EVENTS, this._updateFromPlayer);\n }\n this._player = player;\n this._castApi = player?.cast?.chromecast;\n this._updateFromPlayer();\n if (this._castApi !== undefined) {\n this._castApi.addEventListener(CAST_EVENTS, this._updateFromPlayer);\n }\n }\n\n private readonly _updateFromPlayer = () => {\n const chromecast = this._player?.cast?.chromecast;\n if (chromecast === undefined || chromecast.state !== 'connected') {\n this.setAttribute(Attribute.HIDDEN, '');\n } else {\n this._receiverName = chromecast.receiverName || 'Chromecast';\n this.removeAttribute(Attribute.HIDDEN);\n }\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<div part=\"icon\"><slot name=\"icon\">${unsafeSVG(chromecastIcon)}</slot></div>\n <div part=\"text\">\n <p part=\"heading\"><slot name=\"heading\">Playing on</slot></p>\n <p part=\"receiver\">${this._receiverName}</p>\n </div>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-chromecast-display': ChromecastDisplay;\n }\n}\n","import { customElement } from 'lit/decorators.js';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { CastButton } from './CastButton';\nimport airPlayButtonHtml from './AirPlayButton.html';\nimport airPlayButtonCss from './AirPlayButton.css';\nimport { Attribute } from '../util/Attribute';\n\n/**\n * A button to start and stop casting using AirPlay.\n */\n@customElement('theoplayer-airplay-button')\n@stateReceiver(['player'])\nexport class AirPlayButton extends CastButton {\n static styles = [...CastButton.styles, airPlayButtonCss];\n\n private _player: ChromelessPlayer | undefined;\n\n override connectedCallback() {\n super.connectedCallback();\n this._updateAriaLabel();\n }\n\n get player() {\n return this._player;\n }\n\n set player(player: ChromelessPlayer | undefined) {\n this._player = player;\n this.castApi = player?.cast?.airplay;\n }\n\n override attributeChangedCallback(attrName: string, oldValue: any, newValue: any) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (AirPlayButton.observedAttributes.indexOf(attrName as Attribute) >= 0) {\n this._updateAriaLabel();\n }\n }\n\n private _updateAriaLabel(): void {\n const label = this.castState === 'connecting' || this.castState === 'connected' ? 'stop playing on AirPlay' : 'start playing on AirPlay';\n this.setAttribute(Attribute.ARIA_LABEL, label);\n }\n\n protected override render() {\n return airPlayButtonHtml;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-airplay-button': AirPlayButton;\n }\n}\n","import loadingIndicatorCss from './LoadingIndicator.css';\nimport loadingIndicatorHtml from './LoadingIndicator.html';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport { Attribute } from '../util/Attribute';\nimport { customElement, property } from 'lit/decorators.js';\nimport { type HTMLTemplateResult, LitElement } from 'lit';\n\nconst PLAYER_EVENTS = ['readystatechange', 'play', 'pause', 'playing', 'seeking', 'seeked'] as const;\n\n/**\n * An indicator that shows whether the player is currently waiting for more data to resume playback.\n *\n * @attribute `loading` (readonly) - Whether the player is waiting for more data. If set, the indicator is shown.\n */\n@customElement('theoplayer-loading-indicator')\n@stateReceiver(['player'])\nexport class LoadingIndicator extends LitElement {\n static override styles = [loadingIndicatorCss];\n\n private _player: ChromelessPlayer | undefined;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n this._player = player;\n this._updateFromPlayer();\n if (this._player !== undefined) {\n this._player.addEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.LOADING })\n accessor loading: boolean = false;\n\n private readonly _updateFromPlayer = () => {\n this.loading = this._player !== undefined && !this._player.paused && (this._player.seeking || this._player.readyState < 3);\n };\n\n protected override render(): HTMLTemplateResult {\n return loadingIndicatorHtml;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-loading-indicator': LoadingIndicator;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport gestureReceiverCss from './GestureReceiver.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport type { DeviceType } from '../util/DeviceType';\n\n/**\n * An overlay that receives and handles gestures on the player.\n *\n * On desktop devices, this plays or pauses the player whenever it is clicked.\n * On mobile devices, this currently does nothing.\n */\n@customElement('theoplayer-gesture-receiver')\n@stateReceiver(['player', 'deviceType'])\nexport class GestureReceiver extends LitElement {\n static override styles = [gestureReceiverCss];\n\n private _player: ChromelessPlayer | undefined;\n private _playerElement: HTMLElement | undefined;\n private _pointerType: string = '';\n\n connectedCallback(): void {\n super.connectedCallback();\n\n this.setAttribute('tabindex', '-1');\n this.setAttribute('aria-hidden', 'true');\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._playerElement !== undefined) {\n this._playerElement.removeEventListener('pointerdown', this._onPointerDown);\n this._playerElement.removeEventListener('click', this._onClick);\n }\n this._player = player;\n this._playerElement = player?.element;\n if (this._playerElement !== undefined) {\n this._playerElement.addEventListener('pointerdown', this._onPointerDown);\n this._playerElement.addEventListener('click', this._onClick);\n }\n }\n\n @property({ reflect: false, attribute: false })\n accessor deviceType: DeviceType = 'desktop';\n\n private readonly _onPointerDown = (event: PointerEvent) => {\n this._pointerType = event.pointerType;\n };\n\n private readonly _onClick = (event: MouseEvent) => {\n // If the browser doesn't yet support `pointerType` on `click` events,\n // we use the type from the previous `pointerdown` event.\n const pointerType = (event as PointerEvent).pointerType ?? this._pointerType;\n if (pointerType === 'touch') {\n this.handleTap(event);\n } else if (pointerType === 'mouse') {\n this.handleMouseClick(event);\n }\n };\n\n handleTap(_event: MouseEvent): void {\n // Do nothing.\n }\n\n handleMouseClick(_event: MouseEvent): void {\n if (this.deviceType !== 'desktop') return;\n // Toggle play/pause.\n if (this._player !== undefined) {\n if (this._player.source === undefined) {\n // Do nothing if the player has no source.\n return;\n }\n if (this._player.ads?.playing) {\n // Clicking during a linear ad should open the ad's clickthrough URL instead.\n return;\n }\n if (this._player.paused) {\n this._player.play();\n } else {\n this._player.pause();\n }\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html``;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-gesture-receiver': GestureReceiver;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { Button } from './Button';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport liveButtonCss from './LiveButton.css';\nimport liveIcon from '../icons/live.svg';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { Attribute } from '../util/Attribute';\nimport type { StreamType } from '../util/StreamType';\n\nconst PAUSED_EVENTS = ['play', 'pause', 'playing', 'emptied'] as const;\nconst LIVE_EVENTS = ['seeking', 'seeked', 'timeupdate', 'durationchange', 'emptied'] as const;\n\nconst DEFAULT_LIVE_THRESHOLD = 10;\n\n/**\n * A button that shows whether the player is currently playing at the live point,\n * and seeks to the live point when clicked.\n *\n * @attribute `live-threshold` - The maximum distance (in seconds) from the live point that the player's current time\n * can be for it to still be considered \"at the live point\". If unset, defaults to 10 seconds.\n * @attribute `live` (readonly) - Whether the player is considered to be playing at the live point.\n */\n@customElement('theoplayer-live-button')\n@stateReceiver(['player', 'streamType'])\nexport class LiveButton extends Button {\n static styles = [...Button.styles, liveButtonCss];\n\n private _player: ChromelessPlayer | undefined;\n private _liveThreshold: number = DEFAULT_LIVE_THRESHOLD;\n\n connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(Attribute.ARIA_LABEL)) {\n this.setAttribute(Attribute.ARIA_LABEL, 'seek to live');\n }\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.PAUSED })\n accessor paused: boolean = false;\n\n @property({ reflect: true, type: String, attribute: Attribute.STREAM_TYPE })\n accessor streamType: StreamType = 'vod';\n\n get liveThreshold(): number {\n return this._liveThreshold;\n }\n\n @property({ reflect: true, type: Number, attribute: Attribute.LIVE_THRESHOLD, useDefault: true })\n set liveThreshold(value: number) {\n this._liveThreshold = isNaN(value) ? 0 : value;\n this._updateLive();\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.LIVE })\n accessor live: boolean = false;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener(PAUSED_EVENTS, this._updatePaused);\n this._player.removeEventListener(LIVE_EVENTS, this._updateLive);\n }\n this._player = player;\n this._updatePaused();\n this._updateLive();\n if (this._player !== undefined) {\n this._player.addEventListener(PAUSED_EVENTS, this._updatePaused);\n this._player.addEventListener(LIVE_EVENTS, this._updateLive);\n }\n }\n\n private readonly _updatePaused = () => {\n this.paused = this._player !== undefined ? this._player.paused : true;\n };\n\n private readonly _updateLive = () => {\n this.live = this._player !== undefined ? isLive(this._player, this.liveThreshold) : false;\n };\n\n protected override handleClick() {\n if (this._player === undefined) {\n return;\n }\n if (this._player.hesp && this._player.hesp.manifest !== undefined) {\n this._player.hesp.goLive();\n } else {\n this._player.currentTime = Infinity;\n this._player.play();\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<span part=\"icon\"><slot name=\"icon\">${unsafeSVG(liveIcon)}</slot></span\n ><slot name=\"spacer\"> </slot><span part=\"text\"><slot name=\"text\">LIVE</slot></span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-live-button': LiveButton;\n }\n}\n\nfunction isLive(player: ChromelessPlayer, threshold: number): boolean {\n if (player.duration === Infinity) {\n const seekable = player.seekable;\n if (seekable.length > 0) {\n return seekable.end(seekable.length - 1) - player.currentTime <= threshold;\n } else {\n return true;\n }\n }\n return false;\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport textDisplayCss from '../TextDisplay.css';\nimport adDisplayCss from './AdDisplay.css';\nimport { stateReceiver } from '../StateReceiverMixin';\nimport type { Ads, ChromelessPlayer } from 'theoplayer/chromeless';\nimport { arrayFind } from '../../util/CommonUtils';\nimport { isLinearAd } from '../../util/AdUtils';\n\nconst AD_EVENTS = ['adbreakbegin', 'adbreakend', 'adbreakchange', 'updateadbreak', 'adbegin', 'adend', 'adskip', 'addad', 'updatead'] as const;\n\n/**\n * A control that shows when an advertisement is playing,\n * and the number of the current ad in the ad break (if the break has multiple ads).\n */\n@customElement('theoplayer-ad-display')\n@stateReceiver(['player'])\nexport class AdDisplay extends LitElement {\n static styles = [textDisplayCss, adDisplayCss];\n\n private _player: ChromelessPlayer | undefined;\n private _ads: Ads | undefined;\n\n @state()\n private accessor _text: string = '';\n\n connectedCallback(): void {\n super.connectedCallback();\n this._updateFromPlayer();\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._ads?.removeEventListener(AD_EVENTS, this._updateFromPlayer);\n this._player = player;\n this._ads = player?.ads;\n this._updateFromPlayer();\n this._ads?.addEventListener(AD_EVENTS, this._updateFromPlayer);\n }\n\n private readonly _updateFromPlayer = () => {\n const ads = this._player?.ads;\n const linearAds = (ads?.currentAdBreak?.ads ?? []).filter(isLinearAd);\n if (ads === undefined || !ads.playing || linearAds.length === 0) {\n this._text = '';\n this.style.display = 'none';\n return;\n }\n if (linearAds.length > 1) {\n const currentAds = this._player!.ads!.currentAds || [];\n const currentLinearAd = arrayFind(currentAds, isLinearAd);\n if (currentLinearAd) {\n const currentAdIndex = linearAds.indexOf(currentLinearAd);\n if (currentAdIndex >= 0) {\n this._text = `Ad ${currentAdIndex + 1} of ${linearAds.length}`;\n this.style.display = '';\n return;\n }\n }\n }\n this._text = 'Ad';\n this.style.display = '';\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<span>${this._text}</span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-ad-display': AdDisplay;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport textDisplayCss from '../TextDisplay.css';\nimport adCountdownCss from './AdCountdown.css';\nimport { stateReceiver } from '../StateReceiverMixin';\nimport type { Ads, ChromelessPlayer } from 'theoplayer/chromeless';\n\nconst AD_EVENTS = ['adbreakbegin', 'adbreakend', 'adbreakchange', 'updateadbreak'] as const;\n\n/**\n * A control that displays the remaining time of the current ad break.\n */\n@customElement('theoplayer-ad-countdown')\n@stateReceiver(['player'])\nexport class AdCountdown extends LitElement {\n static override styles = [textDisplayCss, adCountdownCss];\n\n private _player: ChromelessPlayer | undefined;\n private _ads: Ads | undefined;\n\n @state()\n private accessor _maxRemainingDuration: number = 0;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._player?.removeEventListener('timeupdate', this._update);\n this._ads?.removeEventListener(AD_EVENTS, this._onAdChange);\n this._player = player;\n this._ads = player?.ads;\n this._onAdChange();\n this._ads?.addEventListener(AD_EVENTS, this._onAdChange);\n }\n\n private readonly _onAdChange = () => {\n if (this._player?.ads?.playing) {\n this._player.removeEventListener('timeupdate', this._update);\n this._player.addEventListener('timeupdate', this._update);\n } else {\n this._player?.removeEventListener('timeupdate', this._update);\n }\n this._update();\n };\n\n private readonly _update = (): void => {\n const ads = this._player?.ads;\n let maxRemainingDuration = ads?.currentAdBreak?.maxRemainingDuration;\n if (ads === undefined || !ads.playing || maxRemainingDuration === undefined || maxRemainingDuration < 0) {\n this._maxRemainingDuration = 0;\n this.style.display = 'none';\n } else {\n this._maxRemainingDuration = Math.ceil(maxRemainingDuration);\n this.style.display = '';\n }\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<span>Content will resume in ${this._maxRemainingDuration}s</span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-ad-countdown': AdCountdown;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { LinkButton } from '../LinkButton';\nimport { stateReceiver } from '../StateReceiverMixin';\nimport { Attribute } from '../../util/Attribute';\nimport type { Ads, ChromelessPlayer } from 'theoplayer/chromeless';\nimport { arrayFind } from '../../util/CommonUtils';\nimport { isLinearAd } from '../../util/AdUtils';\n\nconst AD_EVENTS = ['adbegin', 'adend', 'adloaded', 'updatead', 'adskip'] as const;\n\n/**\n * A button to open the advertisement's click-through webpage.\n */\n@customElement('theoplayer-ad-clickthrough-button')\n@stateReceiver(['player'])\nexport class AdClickThroughButton extends LinkButton {\n private _player: ChromelessPlayer | undefined;\n private _ads: Ads | undefined;\n private _clickThrough: string | null = null;\n\n constructor() {\n super();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._updateFromPlayer();\n\n if (this.clickThrough == null) {\n this.disabled = true;\n this.style.display = 'none';\n }\n }\n\n get clickThrough(): string | null {\n return this._clickThrough;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.CLICKTHROUGH })\n set clickThrough(clickThrough: string | null) {\n if (this._clickThrough === clickThrough) {\n return;\n }\n this._clickThrough = clickThrough;\n this.href = clickThrough ? String(clickThrough).trim() : '#';\n this.target = '_blank';\n this.disabled = clickThrough == null;\n this.style.display = clickThrough != null ? '' : 'none';\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._ads?.removeEventListener(AD_EVENTS, this._updateFromPlayer);\n this._player = player;\n this._ads = player?.ads;\n this._updateFromPlayer();\n this._ads?.addEventListener(AD_EVENTS, this._updateFromPlayer);\n }\n\n private readonly _updateFromPlayer = () => {\n const ads = this._player?.ads;\n if (!ads || !ads.playing) {\n // No ads playing.\n this.clickThrough = null;\n return;\n }\n const linearAd = arrayFind(ads.currentAds ?? [], isLinearAd);\n if (linearAd === undefined) {\n // No linear ad\n this.clickThrough = null;\n return;\n }\n if (linearAd.integration === 'google-ima') {\n // Google IMA always shows their own clickthrough button.\n this.clickThrough = null;\n return;\n }\n const clickThrough = linearAd.clickThrough;\n if (!clickThrough) {\n // Linear ad has no clickthrough URL.\n this.clickThrough = null;\n return;\n }\n this.clickThrough = clickThrough;\n };\n\n protected override handleClick(): void {\n this._player?.pause();\n }\n\n protected override renderLinkContent(): HTMLTemplateResult {\n return html`<slot>Visit Advertiser</slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-ad-clickthrough-button': AdClickThroughButton;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { Button } from '../Button';\nimport adSkipButtonCss from './AdSkipButton.css';\nimport skipNextIcon from '../../icons/skip-next.svg';\nimport { stateReceiver } from '../StateReceiverMixin';\nimport { Attribute } from '../../util/Attribute';\nimport type { Ads, ChromelessPlayer } from 'theoplayer/chromeless';\nimport { arrayFind } from '../../util/CommonUtils';\nimport { isLinearAd } from '../../util/AdUtils';\n\nconst AD_EVENTS = ['adbegin', 'adend', 'adloaded', 'updatead', 'adskip'] as const;\n\n/**\n * A button that skips the current advertisement (if skippable).\n * If the ad cannot be skipped yet, it shows the remaining time until it can be skipped.\n */\n@customElement('theoplayer-ad-skip-button')\n@stateReceiver(['player'])\nexport class AdSkipButton extends Button {\n static styles = [...Button.styles, adSkipButtonCss];\n\n private _player: ChromelessPlayer | undefined;\n private _ads: Ads | undefined;\n\n @state()\n private accessor _showCountdown: boolean = false;\n\n @state()\n private accessor _timeToSkip: number = 0;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._update();\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._player?.removeEventListener('timeupdate', this._update);\n this._ads?.removeEventListener(AD_EVENTS, this._onAdChange);\n this._player = player;\n this._ads = player?.ads;\n this._onAdChange();\n this._ads?.addEventListener(AD_EVENTS, this._onAdChange);\n }\n\n protected override handleClick(): void {\n this._player?.ads?.skip();\n }\n\n private readonly _onAdChange = () => {\n if (this._player?.ads?.playing) {\n this._player.removeEventListener('timeupdate', this._update);\n this._player.addEventListener('timeupdate', this._update);\n } else {\n this._player?.removeEventListener('timeupdate', this._update);\n }\n this._update();\n };\n\n private readonly _update = (): void => {\n const ads = this._player?.ads;\n if (!ads || !ads.playing) {\n // No ads playing.\n this.style.display = 'none';\n return;\n }\n const linearAd = arrayFind(ads.currentAds ?? [], isLinearAd);\n if (linearAd === undefined) {\n // No linear ad.\n this.style.display = 'none';\n return;\n }\n if (linearAd.integration === 'google-ima') {\n // Google IMA always shows their own skip button.\n this.style.display = 'none';\n return;\n }\n const skipOffset = linearAd.skipOffset;\n if (skipOffset === undefined || skipOffset < 0 || (linearAd.duration !== undefined && skipOffset >= linearAd.duration)) {\n // Linear ad is not skippable.\n this.style.display = 'none';\n return;\n }\n const currentTime = this._player!.currentTime;\n if (currentTime < skipOffset) {\n // Show countdown.\n this._showCountdown = true;\n this._timeToSkip = Math.ceil(skipOffset - currentTime);\n this.style.display = '';\n this.setAttribute(Attribute.DISABLED, '');\n this.setAttribute(Attribute.ARIA_LIVE, 'off');\n } else {\n // Show skip button.\n this._showCountdown = false;\n this.style.display = '';\n this.removeAttribute(Attribute.DISABLED);\n this.setAttribute(Attribute.ARIA_LIVE, 'polite');\n }\n };\n\n protected override render(): HTMLTemplateResult {\n const countdownStyles = {\n visibility: this._showCountdown ? 'visible' : 'hidden'\n };\n const skipStyles = {\n visibility: this._showCountdown ? 'hidden' : 'visible',\n pointerEvents: this._showCountdown ? 'none' : ''\n };\n return html`<span part=\"countdown\" style=${styleMap(countdownStyles)}>Skip in ${this._timeToSkip} seconds</span>\n <span part=\"skip\" style=${styleMap(skipStyles)}>\n <span part=\"skip-text\"><slot name=\"skip-text\">Skip Ad</slot></span>\n <span part=\"skip-icon\"><slot name=\"skip-icon\">${unsafeSVG(skipNextIcon)}</slot></span>\n </span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-ad-skip-button': AdSkipButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport * as shadyCss from '@webcomponents/shadycss';\nimport { ChromelessPlayer, type MediaTrack, type SourceDescription, type UIPlayerConfiguration, type VideoQuality } from 'theoplayer/chromeless';\nimport elementCss from './UIContainer.css';\nimport {\n arrayFind,\n arrayRemove,\n containsComposedNode,\n getFocusableChildren,\n getSlottedElements,\n getTvFocusChildren,\n isElement,\n isHTMLElement,\n noOp,\n toggleAttribute\n} from './util/CommonUtils';\nimport { forEachStateReceiverElement, type StateReceiverElement, StateReceiverProps } from './components/StateReceiverMixin';\nimport { TOGGLE_MENU_EVENT, type ToggleMenuEvent } from './events/ToggleMenuEvent';\nimport { ENTER_FULLSCREEN_EVENT, type EnterFullscreenEvent } from './events/EnterFullscreenEvent';\nimport { EXIT_FULLSCREEN_EVENT, type ExitFullscreenEvent } from './events/ExitFullscreenEvent';\nimport { fullscreenAPI } from './util/FullscreenUtils';\nimport { Attribute } from './util/Attribute';\nimport { isMobile, isTv } from './util/Environment';\nimport { Rectangle } from './util/GeometryUtils';\nimport { PREVIEW_TIME_CHANGE_EVENT, type PreviewTimeChangeEvent } from './events/PreviewTimeChangeEvent';\nimport type { StreamType } from './util/StreamType';\nimport type { StreamTypeChangeEvent } from './events/StreamTypeChangeEvent';\nimport { STREAM_TYPE_CHANGE_EVENT } from './events/StreamTypeChangeEvent';\nimport { USER_IDLE_CHANGE_EVENT } from './events/UserIdleChangeEvent';\nimport { createCustomEvent } from './util/EventUtils';\nimport { getTargetQualities } from './util/TrackUtils';\nimport { MenuGroup } from './components/MenuGroup';\nimport type { DeviceType } from './util/DeviceType';\nimport { getFocusedChild, navigateByArrowKey } from './util/KeyboardNavigation';\nimport { isArrowKey, isBackKey, KeyCode } from './util/KeyCode';\nimport { READY_EVENT } from './events/ReadyEvent';\nimport { addGlobalStyles } from './Global';\nimport { ACCIDENTAL_CLICK_DELAY } from './util/Constants';\n\n// Load components used in template\nimport './components/GestureReceiver';\n\nexport const DEFAULT_USER_IDLE_TIMEOUT = 2;\nexport const DEFAULT_TV_USER_IDLE_TIMEOUT = 5;\nexport const DEFAULT_DVR_THRESHOLD = 60;\nexport const FULL_WINDOW_ROOT_CLASS = 'theoplayer-ui-full-window';\n\n/**\n * The container element for a THEOplayer UI.\n *\n * This element provides a basic layout structure for a general player UI, and handles the creation and management\n * of a {@link theoplayer!ChromelessPlayer | THEOplayer player instance} for this UI.\n *\n * ## Usage\n *\n * 1. Create a `<theoplayer-ui>` element.\n * 2. Place your UI elements as children of the `<theoplayer-ui>`.\n * Set their `slot` attribute to one of the defined slots (see below) to place them in the layout.\n * 3. Set its `configuration` attribute or property to a valid player configuration.\n * 4. Set its `source` attribute or property to a valid stream source.\n *\n * ## Customization\n *\n * This element does not provide any UI elements by default, you need to add all elements as children of\n * the `<theoplayer-ui>` element. If you're looking for a simple out-of-the-box player experience instead,\n * see {@link DefaultUI | `<theoplayer-default-ui>`}.\n *\n * The styling can be controlled using CSS custom properties (see below).\n *\n * @attribute `configuration` - The THEOplayer {@link theoplayer!UIPlayerConfiguration | UIPlayerConfiguration}, as a JSON string.\n * @attribute `source` - The THEOplayer {@link theoplayer!SourceDescription | SourceDescription}, as a JSON string.\n * @attribute `fluid` - If set, the player automatically adjusts its height to fit the video's aspect ratio.\n * @attribute `muted` - If set, the player starts out as muted. Reflects `ui.player.muted`.\n * @attribute `autoplay` - If set, the player attempts to automatically start playing (if allowed).\n * @attribute `device-type` - The device type, either \"desktop\", \"mobile\" or \"tv\".\n * Can be used in CSS to show/hide certain device-specific UI controls.\n * @attribute `mobile` - Whether the user is on a mobile device. Equivalent to `device-type == \"mobile\"`.\n * @attribute `tv` - Whether the user is on a TV device. Equivalent to `device-type == \"tv\"`.\n * @attribute `stream-type` - The stream type, either \"vod\", \"live\" or \"dvr\".\n * Can be used to show/hide certain UI controls specific for livestreams, such as\n * a {@link LiveButton | `<theoplayer-live-button>`}.\n * If you know in advance that the source will be a livestream, you can set this attribute to avoid a screen flicker\n * when the player switches between its VOD-specific and live-only controls.\n * @attribute `user-idle` (readonly) - Whether the user is considered to be \"idle\".\n * When the user is idle and the video is playing, all slotted UI elements will be hidden\n * (unless they have the `no-auto-hide` attribute).\n * @attribute `user-idle-timeout` - The timeout (in seconds) between when the user stops interacting with the UI,\n * and when the user is considered to be \"idle\".\n * @attribute `dvr-threshold` - The minimum length (in seconds) of a livestream's sliding window for the stream to be DVR\n * and its stream type to be set to \"dvr\".\n * @attribute `paused` (readonly) - Whether the player is paused. Reflects `ui.player.paused`.\n * @attribute `ended` (readonly) - Whether the player is ended. Reflects `ui.player.ended`.\n * @attribute `casting` (readonly) - Whether the player is casting. Reflects `ui.player.cast.casting`.\n * @attribute `playing-ad` (readonly) - Whether the player is playing a linear ad. Reflects `ui.player.ads.playing`.\n * @attribute `has-error` (readonly) - Whether the player has encountered a fatal error.\n * @attribute `has-first-play` (readonly) - Whether the player has (previously) started playback for this stream.\n * Can be used in CSS to show/hide certain initial controls, such as a poster image or a centered play button.\n *\n * @slot `(no` name, default slot) - A slot for controls at the bottom of the player.\n * Can be used for controls such as a play button ({@link PlayButton | `<theoplayer-play-button>`}) or a seek bar\n * ({@link TimeRange | `<theoplayer-time-range>`}).\n * @slot `top-chrome` - A slot for controls at the top of the player.\n * Can be used to display the stream's title, or for a cast button ({@link ChromecastButton | `<theoplayer-chromecast-button>`}).\n * @slot `middle-chrome` - A slot for controls in the middle of the player (between the top and bottom chrome).\n * @slot `centered-chrome` - A slot for controls in the center of the player, layered on top of other controls.\n * @slot `centered-loading` - A slot for a loading indicator in the center of the player, layered on top of other controls\n * but behind the centered chrome.\n * @slot `menu` - A slot for extra menus (see {@link Menu | `<theoplayer-menu>`}).\n * @slot `error` - A slot for an error display, to show when the player encounters a fatal error\n * (see {@link ErrorDisplay | `<theoplayer-error-display>`}).\n */\n@customElement('theoplayer-ui')\nexport class UIContainer extends LitElement {\n static override styles = [elementCss];\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true\n };\n\n /**\n * Fired when the backing player is created, and the {@link UIContainer.player} property is set.\n *\n * @group Events\n */\n static READY_EVENT: typeof READY_EVENT = READY_EVENT;\n\n private _configuration: UIPlayerConfiguration = {};\n private readonly _playerRef: Ref<HTMLElement> = createRef<HTMLElement>();\n private readonly _menuRef: Ref<HTMLElement> = createRef<HTMLElement>();\n private readonly _menuGroupRef: Ref<MenuGroup> = createRef<MenuGroup>();\n private _menuOpened: boolean = false;\n private _menuOpener: HTMLElement | undefined;\n private readonly _topChromeRef: Ref<HTMLElement> = createRef<HTMLElement>();\n private readonly _topChromeSlotRef: Ref<HTMLSlotElement> = createRef<HTMLSlotElement>();\n private readonly _bottomChromeRef: Ref<HTMLElement> = createRef<HTMLElement>();\n private readonly _bottomChromeSlotRef: Ref<HTMLSlotElement> = createRef<HTMLSlotElement>();\n\n private _pointerType: string = '';\n private _lastPointerUpTime: number = 0;\n private readonly _mutationObserver: MutationObserver;\n private readonly _resizeObserver: ResizeObserver | undefined;\n private readonly _stateReceivers: StateReceiverElement[] = [];\n private _player: ChromelessPlayer | undefined = undefined;\n private _source: SourceDescription | undefined = undefined;\n private _muted: boolean = false;\n private _autoplay: boolean = false;\n private _fullscreen: boolean = false;\n private _deviceType: DeviceType = 'desktop';\n private _streamType: StreamType = 'vod';\n private _fluid: boolean = false;\n private _userIdle: boolean = false;\n private _userIdleTimeout: number | undefined = undefined;\n private _isUserActive: boolean = false;\n private _userIdleTimer: number = 0;\n private _paused: boolean = false;\n private _ended: boolean = false;\n private _casting: boolean = false;\n private _dvrThreshold: number = DEFAULT_DVR_THRESHOLD;\n private _previewTime: number = NaN;\n private _activeVideoTrack: MediaTrack | undefined = undefined;\n\n /**\n * Creates a new THEOplayer UI container element.\n *\n * @param configuration - The player configuration.\n * Will be passed to the {@link theoplayer!ChromelessPlayer | ChromelessPlayer} constructor to create\n * the underlying THEOplayer instance.\n * Can also be set later on through the {@link UIContainer.configuration} property.\n */\n constructor(configuration: UIPlayerConfiguration = {}) {\n super();\n this._configuration = configuration;\n\n this._mutationObserver = new MutationObserver(this._onMutation);\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(this._updateTextTrackMargins);\n }\n\n this.tryInitializePlayer_();\n }\n\n /**\n * The underlying THEOplayer player instance.\n *\n * This is constructed automatically as soon as a valid {@link configuration} is set.\n */\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n /**\n * The player configuration.\n *\n * Used to create the underlying THEOplayer instance.\n */\n get configuration(): UIPlayerConfiguration {\n return this._configuration;\n }\n\n @property({\n reflect: false,\n attribute: Attribute.CONFIGURATION,\n converter: {\n fromAttribute: (value: string | null) => (value ? (JSON.parse(value) as UIPlayerConfiguration) : {})\n }\n })\n set configuration(playerConfiguration: UIPlayerConfiguration) {\n this._setConfiguration(playerConfiguration);\n }\n\n private _setConfiguration(playerConfiguration: UIPlayerConfiguration): void {\n this._configuration = playerConfiguration ?? {};\n this.tryInitializePlayer_();\n }\n\n /**\n * The player's current source.\n */\n get source(): SourceDescription | undefined {\n return this._player ? this._player.source : this._source;\n }\n\n @property({\n reflect: false,\n attribute: Attribute.SOURCE,\n converter: {\n fromAttribute: (value: string | null) => (value ? (JSON.parse(value) as SourceDescription) : undefined)\n }\n })\n set source(value: SourceDescription | undefined) {\n this._setSource(value);\n }\n\n private _setSource(value: SourceDescription | undefined): void {\n if (this._player) {\n this._player.source = value;\n } else {\n this._source = value;\n }\n }\n\n /**\n * Whether to automatically adjusts the player's height to fit the video's aspect ratio.\n */\n get fluid(): boolean {\n return this._fluid;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.FLUID })\n set fluid(value: boolean) {\n this._fluid = value;\n this._updateAspectRatio();\n }\n\n /**\n * Whether the player's audio is muted.\n */\n get muted(): boolean {\n return this._muted;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.MUTED })\n set muted(value: boolean) {\n this._muted = value;\n if (this._player) {\n this._player.muted = value;\n }\n }\n\n /**\n * Whether the player should attempt to automatically start playback.\n */\n get autoplay(): boolean {\n return this._autoplay;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.AUTOPLAY })\n set autoplay(value: boolean) {\n this._autoplay = value;\n if (this._player) {\n this._player.autoplay = value;\n }\n }\n\n /**\n * Whether the UI is in fullscreen mode.\n */\n get fullscreen(): boolean {\n return this._fullscreen;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.FULLSCREEN })\n private set fullscreen(value: boolean) {\n if (this._fullscreen === value) return;\n this._fullscreen = value;\n for (const receiver of this._stateReceivers) {\n if (receiver[StateReceiverProps].indexOf('fullscreen') >= 0) {\n receiver.fullscreen = value;\n }\n }\n }\n\n /**\n * Whether the player is paused.\n */\n get paused(): boolean {\n return this._paused;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.PAUSED })\n private set paused(value: boolean) {\n this._paused = value;\n this._updateTextTrackMargins();\n this.updateUserIdle_();\n }\n\n /**\n * Whether the player is ended.\n */\n get ended(): boolean {\n return this._ended;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.ENDED })\n private set ended(value: boolean) {\n this._ended = value;\n }\n\n /**\n * Whether the player is casting to a remote receiver.\n */\n get casting(): boolean {\n return this._casting;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.CASTING })\n private set casting(value: boolean) {\n this._casting = value;\n this._updateTextTrackMargins();\n this.updateUserIdle_();\n }\n\n /**\n * Whether the user has stopped interacting with the UI and is considered to be \"idle\".\n */\n get userIdle(): boolean {\n return this._userIdle;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.USER_IDLE })\n private set userIdle(value: boolean) {\n if (this._userIdle === value) return;\n this._userIdle = value;\n this._updateTextTrackMargins();\n this.dispatchEvent(createCustomEvent(USER_IDLE_CHANGE_EVENT));\n }\n\n /**\n * The timeout (in seconds) between when the user stops interacting with the UI,\n * and when the user is considered to be \"idle\".\n */\n get userIdleTimeout(): number {\n return this._userIdleTimeout ?? (this.deviceType === 'tv' ? DEFAULT_TV_USER_IDLE_TIMEOUT : DEFAULT_USER_IDLE_TIMEOUT);\n }\n\n @property({ reflect: true, type: Number, attribute: Attribute.USER_IDLE_TIMEOUT, useDefault: true })\n set userIdleTimeout(value: number | undefined) {\n this._userIdleTimeout = value === undefined || isNaN(value) ? undefined : value;\n }\n\n /**\n * The device type, either \"desktop\", \"mobile\" or \"tv\".\n */\n get deviceType(): DeviceType {\n return this._deviceType;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.DEVICE_TYPE })\n set deviceType(value: DeviceType) {\n if (this._deviceType === value) return;\n this._deviceType = value;\n\n toggleAttribute(this, Attribute.MOBILE, value === 'mobile');\n toggleAttribute(this, Attribute.TV, value === 'tv');\n\n window.removeEventListener('keydown', this._onTvKeyDown);\n if (value === 'tv') {\n window.addEventListener('keydown', this._onTvKeyDown);\n }\n\n for (const receiver of this._stateReceivers) {\n if (receiver[StateReceiverProps].indexOf('deviceType') >= 0) {\n receiver.deviceType = value;\n }\n }\n }\n\n /**\n * The stream type, either \"vod\", \"live\" or \"dvr\".\n *\n * If you know in advance that the source will be a livestream, you can set this property to avoid a screen flicker\n * when the player switches between its VOD-specific and live-only controls.\n */\n get streamType(): StreamType {\n return this._streamType;\n }\n\n /**\n * @deprecated use {@link SourceDescription.streamType} instead.\n */\n @property({ reflect: true, type: String, attribute: Attribute.STREAM_TYPE })\n set streamType(streamType: StreamType) {\n if (this._streamType === streamType) return;\n this._streamType = streamType;\n for (const receiver of this._stateReceivers) {\n if (receiver[StateReceiverProps].indexOf('streamType') >= 0) {\n receiver.streamType = streamType;\n }\n }\n const streamTypeChangeEvent: StreamTypeChangeEvent = createCustomEvent(STREAM_TYPE_CHANGE_EVENT, {\n bubbles: true,\n composed: true,\n detail: { streamType: streamType }\n });\n this.dispatchEvent(streamTypeChangeEvent);\n }\n\n /**\n * The minimum length (in seconds) of a livestream's sliding window for the stream to be DVR\n * and its stream type to be set to \"dvr\".\n */\n get dvrThreshold(): number {\n return this._dvrThreshold;\n }\n\n @property({ reflect: true, type: Number, attribute: Attribute.DVR_THRESHOLD, useDefault: true })\n set dvrThreshold(value: number) {\n this._dvrThreshold = isNaN(value) ? 0 : value;\n this._updateStreamType();\n }\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.HAS_FIRST_PLAY })\n private accessor _hasFirstPlay: boolean = false;\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.PLAYING_AD })\n private accessor _isPlayingAd: boolean = false;\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.HAS_ERROR })\n private accessor _hasError: boolean = false;\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.FULLWINDOW })\n private accessor _isFullWindow: boolean = false;\n\n connectedCallback(): void {\n super.connectedCallback();\n addGlobalStyles();\n\n if (!this.hasAttribute(Attribute.DEVICE_TYPE)) {\n this.deviceType = isMobile() ? 'mobile' : isTv() ? 'tv' : 'desktop';\n }\n if (!this.hasAttribute(Attribute.PAUSED)) {\n this.paused = true;\n }\n\n this.tryInitializePlayer_();\n\n for (const receiver of this._stateReceivers) {\n this.propagateStateToReceiver_(receiver);\n }\n this._mutationObserver.observe(this, { childList: true, subtree: true });\n this.shadowRoot!.addEventListener('slotchange', this._onSlotChange);\n\n this._resizeObserver?.observe(this);\n this._updateTextTrackMargins();\n\n if (fullscreenAPI !== undefined) {\n document.addEventListener(fullscreenAPI.fullscreenchange_, this._onFullscreenChange);\n document.addEventListener(fullscreenAPI.fullscreenerror_, this._onFullscreenChange);\n this._onFullscreenChange();\n }\n\n this.setUserIdle_();\n if (this.deviceType === 'tv') {\n window.addEventListener('keydown', this._onTvKeyDown);\n }\n if (this._isFullWindow) {\n window.addEventListener('keydown', this._exitFullscreenOnEsc);\n }\n this.addEventListener('keyup', this._onKeyUp);\n this.addEventListener('pointerup', this._onPointerUp);\n this.addEventListener('pointermove', this._onPointerMove);\n this.addEventListener('mouseleave', this._onMouseLeave);\n }\n\n private tryInitializePlayer_(): void {\n if (this._player !== undefined) {\n return;\n }\n if (this._playerRef.value === undefined) {\n return;\n }\n if (this._configuration.license === undefined && this._configuration.licenseUrl === undefined) {\n return;\n }\n\n this._player = new ChromelessPlayer(this._playerRef.value, this._configuration);\n if (this._source) {\n this._player.source = this._source;\n this._source = undefined;\n }\n this._player.muted = this.muted;\n this._player.autoplay = this.autoplay;\n\n this._updateAspectRatio();\n this._updateError();\n this._updatePausedAndEnded();\n this._updateCasting();\n this.addPlayerListeners_(this._player);\n this.propagatePlayerToAllReceivers_();\n\n this.dispatchEvent(createCustomEvent(READY_EVENT));\n }\n\n protected override createRenderRoot(): HTMLElement | DocumentFragment {\n const root = super.createRenderRoot();\n root.addEventListener(TOGGLE_MENU_EVENT, this._onToggleMenu);\n root.addEventListener(ENTER_FULLSCREEN_EVENT, this._onEnterFullscreen);\n root.addEventListener(EXIT_FULLSCREEN_EVENT, this._onExitFullscreen);\n root.addEventListener(PREVIEW_TIME_CHANGE_EVENT, this._onPreviewTimeChange);\n return root;\n }\n\n protected override firstUpdated() {\n if (this._menuGroupRef.value && !(this._menuGroupRef instanceof MenuGroup)) {\n customElements.upgrade(this._menuGroupRef.value);\n }\n\n this.tryInitializePlayer_();\n\n if (this._playerRef.value) {\n void forEachStateReceiverElement(this, this._playerRef.value, this.registerStateReceiver_);\n }\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this._resizeObserver?.disconnect();\n this._mutationObserver.disconnect();\n this.shadowRoot!.removeEventListener('slotchange', this._onSlotChange);\n\n if (fullscreenAPI !== undefined) {\n document.removeEventListener(fullscreenAPI.fullscreenchange_, this._onFullscreenChange);\n document.removeEventListener(fullscreenAPI.fullscreenerror_, this._onFullscreenChange);\n }\n\n window.removeEventListener('keydown', this._onTvKeyDown);\n window.removeEventListener('keydown', this._exitFullscreenOnEsc);\n this.removeEventListener('keyup', this._onKeyUp);\n this.removeEventListener('pointerup', this._onPointerUp);\n this.removeEventListener('click', this._onClickAfterPointerUp, true);\n this.removeEventListener('pointermove', this._onPointerMove);\n this.removeEventListener('mouseleave', this._onMouseLeave);\n\n if (this._player) {\n this.removePlayerListeners_(this._player);\n this._player.destroy();\n this._player = undefined;\n this.propagatePlayerToAllReceivers_();\n }\n\n this._stateReceivers.length = 0;\n }\n\n private readonly _onMutation = (mutations: MutationRecord[]): void => {\n const playerElement = this._playerRef.value;\n if (!playerElement) return;\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n const { addedNodes, removedNodes } = mutation;\n for (let i = 0; i < addedNodes.length; i++) {\n const node = addedNodes[i];\n if (isElement(node)) {\n void forEachStateReceiverElement(node, playerElement, this.registerStateReceiver_);\n }\n }\n for (let i = 0; i < removedNodes.length; i++) {\n const node = removedNodes[i];\n if (isElement(node)) {\n void forEachStateReceiverElement(node, playerElement, this.unregisterStateReceiver_);\n }\n }\n }\n }\n };\n\n private readonly _onSlotChange = (): void => {\n if (this._playerRef.value) {\n void forEachStateReceiverElement(this, this._playerRef.value, this.registerStateReceiver_);\n }\n this._updateTextTrackMargins();\n };\n\n private readonly registerStateReceiver_ = (receiver: StateReceiverElement): void => {\n if (this._stateReceivers.indexOf(receiver) >= 0) {\n return;\n }\n this._stateReceivers.push(receiver);\n this.propagateStateToReceiver_(receiver);\n };\n\n private readonly unregisterStateReceiver_ = (receiver: StateReceiverElement): void => {\n if (!arrayRemove(this._stateReceivers, receiver)) {\n return;\n }\n this.removeStateFromReceiver_(receiver);\n };\n\n private propagateStateToReceiver_(receiver: StateReceiverElement): void {\n const receiverProps = receiver[StateReceiverProps];\n if (receiverProps.indexOf('player') >= 0) {\n receiver.player = this._player;\n }\n if (receiverProps.indexOf('fullscreen') >= 0) {\n receiver.fullscreen = this.fullscreen;\n }\n if (receiverProps.indexOf('deviceType') >= 0) {\n receiver.deviceType = this.deviceType;\n }\n if (receiverProps.indexOf('streamType') >= 0) {\n receiver.streamType = this.streamType;\n }\n if (this._player !== undefined) {\n if (receiverProps.indexOf('playbackRate') >= 0) {\n receiver.playbackRate = this._player.playbackRate;\n }\n if (receiverProps.indexOf('error') >= 0) {\n receiver.error = this._player.errorObject;\n }\n if (receiverProps.indexOf('activeVideoQuality') >= 0) {\n receiver.activeVideoQuality = this._activeVideoTrack?.activeQuality as VideoQuality | undefined;\n }\n if (receiverProps.indexOf('targetVideoQualities') >= 0) {\n receiver.targetVideoQualities = getTargetQualities(this._activeVideoTrack) as VideoQuality[] | undefined;\n }\n }\n if (receiverProps.indexOf('previewTime') >= 0) {\n receiver.previewTime = this._previewTime;\n }\n }\n\n private propagatePlayerToAllReceivers_(): void {\n for (const receiver of this._stateReceivers) {\n const receiverProps = receiver[StateReceiverProps];\n if (receiverProps.indexOf('player') >= 0) {\n receiver.player = this._player;\n }\n }\n }\n\n private removeStateFromReceiver_(receiver: StateReceiverElement): void {\n const receiverProps = receiver[StateReceiverProps];\n if (receiverProps.indexOf('player') >= 0) {\n receiver.player = undefined;\n }\n }\n\n private get menuOpened_(): boolean {\n return this._menuOpened;\n }\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.MENU_OPENED })\n private set menuOpened_(menuOpened: boolean) {\n if (this._menuOpened === menuOpened) return;\n this._menuOpened = menuOpened;\n // Toggle manually, so the menu layer immediately becomes visible and can receive focus.\n toggleAttribute(this, Attribute.MENU_OPENED, menuOpened);\n }\n\n private openMenu_(menuToOpen: string, opener: HTMLElement | undefined): void {\n const topChromeRect = Rectangle.fromRect(this._topChromeRef.value!.getBoundingClientRect());\n const bottomChromeRect = Rectangle.fromRect(this._bottomChromeRef.value!.getBoundingClientRect());\n\n // Open menu in same quadrant as its opener\n // If there's no opener, open in bottom right corner by default\n let alignBottom: boolean = true;\n let alignRight: boolean = true;\n if (opener !== undefined) {\n const playerRect = Rectangle.fromRect(this.getBoundingClientRect());\n const openerRect = Rectangle.fromRect(opener.getBoundingClientRect());\n if (playerRect.width > 0 && playerRect.height > 0) {\n alignBottom = openerRect.top >= playerRect.top + playerRect.height / 2;\n alignRight = openerRect.left >= playerRect.left + playerRect.width / 2;\n }\n }\n\n this._menuGroupRef.value!.openMenu(menuToOpen, opener);\n this._menuOpener = opener;\n\n const props = {\n '--theoplayer-menu-offset-top': `${Math.round(topChromeRect.height)}px`,\n '--theoplayer-menu-offset-bottom': `${Math.round(bottomChromeRect.height)}px`,\n '--theoplayer-menu-margin-top': alignBottom ? 'auto' : '0',\n '--theoplayer-menu-margin-bottom': alignBottom ? '0' : 'auto',\n '--theoplayer-menu-margin-left': alignRight ? 'auto' : '0',\n '--theoplayer-menu-margin-right': alignRight ? '0' : 'auto'\n };\n shadyCss.styleSubtree(this, props);\n }\n\n private closeMenu_(): void {\n // Menu group might not be upgraded yet\n this._menuGroupRef.value?.closeMenu?.();\n this._menuOpener?.focus();\n this._menuOpener = undefined;\n }\n\n private readonly _onToggleMenu = (rawEvent: Event): void => {\n const event = rawEvent as ToggleMenuEvent;\n event.stopPropagation();\n const menuId = event.detail.menu;\n const menuGroup = this._menuGroupRef.value;\n if (!menuGroup) return;\n if (!menuGroup.getMenuById(menuId)) {\n console.error(`<theoplayer-ui>: cannot find menu with ID \"${menuId}\"`);\n return;\n }\n const opener = isHTMLElement(event.target) ? event.target : undefined;\n if (menuGroup.isMenuOpen(menuId)) {\n this.closeMenu_();\n } else {\n // Always close the previous menu first\n this.closeMenu_();\n this.openMenu_(menuId, opener);\n }\n };\n\n private readonly _onCloseMenu = (event: Event): void => {\n event.stopPropagation();\n this.closeMenu_();\n };\n\n private readonly _onMenuChange = (): void => {\n const menuEl = this._menuRef.value!;\n menuEl.removeEventListener('pointerdown', this._onMenuPointerDown);\n menuEl.removeEventListener('click', this._onMenuClick);\n if (this._menuGroupRef.value!.hasCurrentMenu()) {\n menuEl.addEventListener('pointerdown', this._onMenuPointerDown);\n menuEl.addEventListener('click', this._onMenuClick);\n this.menuOpened_ = true;\n } else {\n this.menuOpened_ = false;\n }\n this.updateUserIdle_();\n };\n\n private readonly _onMenuPointerDown = (event: PointerEvent) => {\n this._pointerType = event.pointerType;\n };\n\n private readonly _onMenuClick = (event: MouseEvent) => {\n // If the browser doesn't support yet `pointerType` on `click` events,\n // we use the type from the previous `pointerdown` event.\n const pointerType = (event as PointerEvent).pointerType ?? this._pointerType;\n if (event.target === this._menuRef.value && pointerType === 'mouse') {\n // Close menu when clicking (with mouse) on menu backdrop\n if (this._menuGroupRef.value!.closeCurrentMenu()) {\n event.preventDefault();\n }\n }\n };\n\n private readonly _onEnterFullscreen = (rawEvent: Event): void => {\n const event = rawEvent as EnterFullscreenEvent;\n event.stopPropagation();\n if (fullscreenAPI && document[fullscreenAPI.fullscreenEnabled_] && this[fullscreenAPI.requestFullscreen_]) {\n const promise = this[fullscreenAPI.requestFullscreen_]({\n navigationUI: 'hide',\n ...this._configuration?.ui?.fullscreenOptions\n });\n if (promise && promise.then) {\n promise.then(noOp, noOp);\n }\n } else if (this._player && this._player.presentation.supportsMode('fullscreen')) {\n this._player.presentation.requestMode('fullscreen');\n } else if (!this._isFullWindow) {\n this._isFullWindow = true;\n document.documentElement.classList.add(FULL_WINDOW_ROOT_CLASS);\n window.addEventListener('keydown', this._exitFullscreenOnEsc);\n this._onFullscreenChange();\n }\n };\n\n private readonly _onExitFullscreen = (rawEvent: Event): void => {\n const event = rawEvent as ExitFullscreenEvent;\n event.stopPropagation();\n if (fullscreenAPI) {\n const promise = document[fullscreenAPI.exitFullscreen_]();\n if (promise && promise.then) {\n promise.then(noOp, noOp);\n }\n }\n if (this._player && this._player.presentation.currentMode === 'fullscreen') {\n this._player.presentation.requestMode('inline');\n }\n if (this._isFullWindow) {\n this._isFullWindow = false;\n document.documentElement.classList.remove(FULL_WINDOW_ROOT_CLASS);\n window.removeEventListener('keydown', this._exitFullscreenOnEsc);\n this._onFullscreenChange();\n }\n };\n\n private readonly _onFullscreenChange = (): void => {\n let isFullscreen: boolean = false;\n if (fullscreenAPI !== undefined) {\n const fullscreenElement = document[fullscreenAPI.fullscreenElement_];\n if (fullscreenElement) {\n // If <theoplayer-ui> is nested within another custom element,\n // then document.fullscreenElement will equal that other custom element.\n // Look for the nearest shadow host that is contained in the fullscreen element.\n isFullscreen = containsComposedNode(fullscreenElement, this);\n }\n }\n if (!isFullscreen && this._player !== undefined && this._player.presentation.currentMode === 'fullscreen') {\n isFullscreen = true;\n }\n if (this._isFullWindow) {\n isFullscreen = true;\n }\n this.fullscreen = isFullscreen;\n };\n\n private readonly _exitFullscreenOnEsc = (event: KeyboardEvent): void => {\n if (event.keyCode == KeyCode.ESCAPE) {\n this._onExitFullscreen(event);\n }\n };\n\n private readonly _updateAspectRatio = (): void => {\n if (this._player === undefined) {\n return;\n }\n const { videoWidth, videoHeight } = this._player;\n if (videoWidth > 0 && videoHeight > 0) {\n shadyCss.styleSubtree(this, {\n '--theoplayer-video-width': `${videoWidth}`,\n '--theoplayer-video-height': `${videoHeight}`\n });\n } else {\n shadyCss.styleSubtree(this, {\n '--theoplayer-video-width': '',\n '--theoplayer-video-height': ''\n });\n }\n };\n\n private readonly _updateError = (): void => {\n const error = this._player?.errorObject;\n this._hasError = error !== undefined;\n for (const receiver of this._stateReceivers) {\n if (receiver[StateReceiverProps].indexOf('error') >= 0) {\n receiver.error = error;\n }\n }\n };\n\n private readonly _onPlay = (): void => {\n this._hasFirstPlay = true;\n this.paused = false;\n this._updateEnded();\n };\n\n private readonly _onPause = (): void => {\n this.paused = true;\n this._updateEnded();\n };\n\n private readonly _updatePausedAndEnded = (): void => {\n this.paused = this._player ? this._player.paused : true;\n this._updateEnded();\n };\n\n private readonly _updateEnded = (): void => {\n this.ended = this._player ? this._player.ended : false;\n };\n\n private readonly _updateStreamType = (): void => {\n if (this._player === undefined) {\n return;\n }\n this.streamType = this.computeStreamType_();\n };\n\n private computeStreamType_(): StreamType {\n const source = this.source;\n const streamType = source?.streamType ?? (this.getAttribute(Attribute.STREAM_TYPE) as StreamType | null);\n const duration = this._player?.duration;\n if (duration === undefined || isNaN(duration)) {\n // No duration yet...\n // Use hinted stream type if available.\n if (streamType) {\n return streamType;\n }\n if (source?.dvr) {\n return 'dvr';\n }\n // Assume VOD.\n return 'vod';\n } else if (duration === Infinity) {\n // It's a live stream.\n if (streamType === 'live' || streamType === 'dvr') {\n // Follow the hinted stream type.\n return streamType;\n } else {\n const dvrThreshold = this.dvrThreshold;\n if (dvrThreshold <= 0) {\n return 'dvr';\n }\n const seekable = this._player?.seekable;\n if (seekable && seekable.length > 0) {\n // Check if the DVR window is large enough.\n const dvrWindow = seekable.end(seekable.length - 1) - seekable.start(0);\n if (dvrWindow >= dvrThreshold) {\n return 'dvr';\n }\n }\n }\n // Otherwise, it's a regular live stream.\n return 'live';\n } else {\n // It's a VOD.\n return 'vod';\n }\n }\n\n private readonly _updatePlaybackRate = (): void => {\n if (this._player === undefined) {\n return;\n }\n const playbackRate = this._player.playbackRate;\n for (const receiver of this._stateReceivers) {\n if (receiver[StateReceiverProps].indexOf('playbackRate') >= 0) {\n receiver.playbackRate = playbackRate;\n }\n }\n };\n\n private readonly _updateMuted = (): void => {\n if (this._player === undefined) {\n return;\n }\n this.muted = this._player.muted;\n };\n\n private readonly _updateActiveVideoTrack = (): void => {\n if (this._player === undefined) {\n return;\n }\n const activeVideoTrack = arrayFind(this._player.videoTracks, (track) => track.enabled);\n if (this._activeVideoTrack !== activeVideoTrack) {\n this._activeVideoTrack?.removeEventListener('activequalitychanged', this._updateActiveVideoQuality);\n this._activeVideoTrack?.removeEventListener('targetqualitychanged', this._updateTargetVideoQualities);\n this._activeVideoTrack = activeVideoTrack;\n this._updateActiveVideoQuality();\n this._updateTargetVideoQualities();\n this._activeVideoTrack?.addEventListener('activequalitychanged', this._updateActiveVideoQuality);\n this._activeVideoTrack?.addEventListener('targetqualitychanged', this._updateTargetVideoQualities);\n }\n };\n\n private readonly _updateActiveVideoQuality = (): void => {\n const activeVideoQuality = this._activeVideoTrack?.activeQuality as VideoQuality | undefined;\n for (const receiver of this._stateReceivers) {\n if (receiver[StateReceiverProps].indexOf('activeVideoQuality') >= 0) {\n receiver.activeVideoQuality = activeVideoQuality;\n }\n }\n };\n\n private readonly _updateTargetVideoQualities = (): void => {\n const targetVideoQualities = getTargetQualities(this._activeVideoTrack) as VideoQuality[] | undefined;\n for (const receiver of this._stateReceivers) {\n if (receiver[StateReceiverProps].indexOf('targetVideoQualities') >= 0) {\n receiver.targetVideoQualities = targetVideoQualities;\n }\n }\n };\n\n private readonly _updateCasting = (): void => {\n this.casting = this._player?.cast?.casting ?? false;\n };\n\n private readonly _updatePlayingAd = (): void => {\n this._isPlayingAd = this._player?.ads?.playing ?? false;\n };\n\n private readonly _onSourceChange = (): void => {\n this.closeMenu_();\n this._hasFirstPlay = this._player !== undefined && !this._player.paused;\n };\n\n private isUserIdle_(): boolean {\n return (\n !this._isUserActive && !this.paused && !this.casting && (this._menuGroupRef.value ? !this._menuGroupRef.value.hasCurrentMenu() : false)\n );\n }\n\n private setUserActive_(): void {\n clearTimeout(this._userIdleTimer);\n this._isUserActive = true;\n this.updateUserIdle_();\n }\n\n private readonly setUserIdle_ = (): void => {\n clearTimeout(this._userIdleTimer);\n this._userIdleTimer = 0;\n\n if (this.userIdleTimeout < 0) {\n return;\n }\n this._isUserActive = false;\n this.updateUserIdle_();\n\n if (this.deviceType == 'tv' && this.isUserIdle_()) {\n // Blur active element so that first key press on TV doesn't result in an action.\n const focusedChild = getFocusedChild();\n if (focusedChild !== null) {\n focusedChild.blur();\n }\n }\n };\n\n private readonly scheduleUserIdle_ = (): void => {\n this.setUserActive_();\n\n clearTimeout(this._userIdleTimer);\n\n // Setting the timeout to -1 turns off idle detection.\n if (this.userIdleTimeout < 0) {\n this._userIdleTimer = 0;\n return;\n }\n\n this._userIdleTimer = setTimeout(this.setUserIdle_, this.userIdleTimeout * 1000);\n };\n\n private updateUserIdle_(): void {\n this.userIdle = this.isUserIdle_();\n }\n\n private isPlayerOrMedia_(node: Node): boolean {\n return node === this || this._playerRef.value!.contains(node);\n }\n\n private readonly _onTvKeyDown = (event: KeyboardEvent): void => {\n if (isBackKey(event.keyCode)) {\n this.setUserIdle_();\n return;\n }\n const tvFocusChildren = getTvFocusChildren(this);\n const focusableChildren = getFocusableChildren(this);\n let focusedChild = getFocusedChild();\n if (!focusedChild) {\n const children = tvFocusChildren ?? focusableChildren;\n if (children.length > 0) {\n children[0].focus();\n focusedChild = children[0];\n }\n }\n\n if (this.isUserIdle_()) {\n // First button press should only make the UI visible\n return;\n }\n if (event.keyCode === KeyCode.ENTER) {\n if (focusedChild !== null) {\n event.preventDefault();\n focusedChild.click();\n }\n } else if (isArrowKey(event.keyCode) && navigateByArrowKey(this, focusableChildren, event.keyCode)) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n private readonly _onKeyUp = (event: KeyboardEvent): void => {\n // Show the controls while navigating with the keyboard.\n if (!isBackKey(event.keyCode)) {\n this.scheduleUserIdle_();\n }\n };\n\n private readonly _onPointerUp = (event: PointerEvent): void => {\n if (event.pointerType === 'mouse') {\n this.scheduleUserIdle_();\n } else if (event.pointerType === 'touch') {\n // On mobile, when you tap the media while the controls are showing, immediately hide the controls.\n // Otherwise, show the controls (and schedule a timer to hide them again later on).\n if (this.isPlayerOrMedia_(event.target! as Node) && this._isUserActive) {\n this.setUserIdle_();\n } else {\n if (this.isUserIdle_()) {\n // Ignore the next \"click\" event, to prevent accidental button clicks\n // when the user only intended to show the controls.\n this._lastPointerUpTime = performance.now();\n this.addEventListener('click', this._onClickAfterPointerUp, true);\n }\n this.scheduleUserIdle_();\n }\n }\n };\n\n private readonly _onClickAfterPointerUp = (event: MouseEvent): void => {\n this.removeEventListener('click', this._onClickAfterPointerUp, true);\n if (performance.now() - this._lastPointerUpTime < ACCIDENTAL_CLICK_DELAY) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n private readonly _onPointerMove = (event: PointerEvent): void => {\n // \"pointermove\" doesn't happen with touch on taps on iOS, but does on Android. Therefore, only run for mouse.\n if (event.pointerType !== 'mouse') return;\n\n this.setUserActive_();\n\n // If hovering a control, keep the user active even when they stop moving.\n // Otherwise, when hovering the media, we can consider the user to be idle.\n if (this.isPlayerOrMedia_(event.target! as Node)) {\n this.scheduleUserIdle_();\n }\n };\n\n private readonly _onMouseLeave = (): void => {\n // Immediately hide the controls when mouse leaves the player.\n this.setUserIdle_();\n };\n\n private readonly _onChromeSlotTransition = (event: TransitionEvent): void => {\n // When the control bars become visible, move the text tracks out of the way.\n // When they become invisible, move the text tracks back.\n if (event.propertyName === 'opacity') {\n this._updateTextTrackMargins();\n }\n };\n\n private readonly _updateTextTrackMargins = (): void => {\n const player = this._player;\n if (player === undefined) {\n return;\n }\n const topChromeRect = this._topChromeSlotRef.value && getVisibleRect(this._topChromeSlotRef.value);\n const bottomChromeRect = this._bottomChromeSlotRef.value && getVisibleRect(this._bottomChromeSlotRef.value);\n player.textTrackStyle.marginTop = topChromeRect?.height;\n player.textTrackStyle.marginBottom = bottomChromeRect?.height;\n };\n\n private readonly _onPreviewTimeChange = (rawEvent: Event): void => {\n const event = rawEvent as PreviewTimeChangeEvent;\n this._previewTime = event.detail.previewTime;\n\n for (const receiver of this._stateReceivers) {\n if (receiver[StateReceiverProps].indexOf('previewTime') >= 0) {\n receiver.previewTime = this._previewTime;\n }\n }\n };\n\n private addPlayerListeners_(player: ChromelessPlayer): void {\n player.addEventListener('destroy', this._onDestroy);\n player.addEventListener('resize', this._updateAspectRatio);\n player.addEventListener(['error', 'sourcechange', 'emptied'], this._updateError);\n player.addEventListener('volumechange', this._updateMuted);\n player.addEventListener('play', this._onPlay);\n player.addEventListener('pause', this._onPause);\n player.addEventListener(['ended', 'emptied'], this._updatePausedAndEnded);\n player.addEventListener(['durationchange', 'sourcechange', 'emptied'], this._updateStreamType);\n player.addEventListener('ratechange', this._updatePlaybackRate);\n player.addEventListener('sourcechange', this._onSourceChange);\n player.addEventListener(['durationchange', 'sourcechange', 'emptied'], this._updatePlayingAd);\n\n player.theoLive?.addEventListener(['distributionloadstart', 'publicationloadstart' as never], this._onSourceChange);\n player.videoTracks.addEventListener(['addtrack', 'removetrack', 'change'], this._updateActiveVideoTrack);\n player.cast?.addEventListener('castingchange', this._updateCasting);\n player.ads?.addEventListener(['adbreakbegin', 'adbreakend', 'adbegin', 'adend', 'adskip'], this._updatePlayingAd);\n }\n\n private removePlayerListeners_(player: ChromelessPlayer): void {\n player.removeEventListener('destroy', this._onDestroy);\n player.removeEventListener('resize', this._updateAspectRatio);\n player.removeEventListener(['error', 'sourcechange', 'emptied'], this._updateError);\n player.removeEventListener('volumechange', this._updateMuted);\n player.removeEventListener('play', this._onPlay);\n player.removeEventListener('pause', this._onPause);\n player.removeEventListener(['ended', 'emptied'], this._updatePausedAndEnded);\n player.removeEventListener(['durationchange', 'sourcechange', 'emptied'], this._updateStreamType);\n player.removeEventListener('ratechange', this._updatePlaybackRate);\n player.removeEventListener('sourcechange', this._onSourceChange);\n player.removeEventListener(['durationchange', 'sourcechange', 'emptied'], this._updatePlayingAd);\n\n try {\n player.theoLive?.removeEventListener(['distributionloadstart', 'publicationloadstart' as never], this._onSourceChange);\n player.videoTracks.removeEventListener(['addtrack', 'removetrack', 'change'], this._updateActiveVideoTrack);\n player.cast?.removeEventListener('castingchange', this._updateCasting);\n player.ads?.removeEventListener(['adbreakbegin', 'adbreakend', 'adbegin', 'adend', 'adskip'], this._updatePlayingAd);\n } catch {\n // Ignore errors from accessing player.ads when the player is already destroyed.\n }\n }\n\n private readonly _onDestroy = (): void => {\n if (this._player) {\n this.removePlayerListeners_(this._player);\n this._player = undefined;\n this.propagatePlayerToAllReceivers_();\n }\n };\n\n protected override render(): HTMLTemplateResult {\n return html`\n <div part=\"layer media-layer\" ${ref(this._playerRef)}></div>\n <div part=\"layer gesture-layer\">\n <theoplayer-gesture-receiver></theoplayer-gesture-receiver>\n </div>\n <div part=\"layer vertical-layer\">\n <div part=\"top chrome\" ${ref(this._topChromeRef)}>\n <slot\n name=\"top-chrome\"\n ${ref(this._topChromeSlotRef)}\n @transitionstart=${this._onChromeSlotTransition}\n @transitionend=${this._onChromeSlotTransition}\n ></slot>\n </div>\n <div part=\"middle chrome\">\n <slot name=\"middle-chrome\"></slot>\n </div>\n <div part=\"layer centered-layer centered loading\">\n <slot name=\"centered-loading\"></slot>\n </div>\n <div part=\"layer centered-layer centered chrome\">\n <slot name=\"centered-chrome\"></slot>\n </div>\n <div part=\"bottom chrome\" ${ref(this._bottomChromeRef)}>\n <slot\n ${ref(this._bottomChromeSlotRef)}\n @transitionstart=${this._onChromeSlotTransition}\n @transitionend=${this._onChromeSlotTransition}\n ><!-- default, effectively \"bottom-chrome\" --></slot\n >\n </div>\n </div>\n <div part=\"layer menu-layer\" ${ref(this._menuRef)}>\n <theoplayer-menu-group\n ${ref(this._menuGroupRef)}\n part=\"menu\"\n @theoplayermenuclose=${this._onCloseMenu}\n @theoplayermenuchange=${this._onMenuChange}\n >\n <slot name=\"menu\"></slot>\n </theoplayer-menu-group>\n </div>\n <div part=\"layer error-layer\">\n <slot name=\"error\"></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-ui': UIContainer;\n }\n}\n\nfunction getVisibleRect(slot: HTMLSlotElement): Rectangle | undefined {\n let result: Rectangle | undefined;\n const children = getSlottedElements(slot).filter(isHTMLElement);\n for (const child of children) {\n if (getComputedStyle(child).opacity !== '0') {\n const childRect = Rectangle.fromRect(child.getBoundingClientRect());\n if (childRect.width > 0 && childRect.height > 0) {\n result = result ? result.union(childRect) : childRect;\n }\n }\n }\n return result;\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, queryAssignedNodes, state } from 'lit/decorators.js';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport type { ChromelessPlayer, SourceDescription, UIPlayerConfiguration } from 'theoplayer/chromeless';\nimport { DEFAULT_DVR_THRESHOLD, DEFAULT_TV_USER_IDLE_TIMEOUT, DEFAULT_USER_IDLE_TIMEOUT, type UIContainer } from './UIContainer';\nimport defaultUiCss from './DefaultUI.css';\nimport { Attribute } from './util/Attribute';\nimport { applyExtensions } from './extensions/ExtensionRegistry';\nimport { isMobile, isTv } from './util/Environment';\nimport type { DeviceType } from './util/DeviceType';\nimport type { StreamType } from './util/StreamType';\nimport { USER_IDLE_CHANGE_EVENT } from './events/UserIdleChangeEvent';\nimport { READY_EVENT } from './events/ReadyEvent';\nimport { ACCIDENTAL_CLICK_DELAY } from './util/Constants';\nimport { toggleAttribute } from './util/CommonUtils';\nimport { createCustomEvent } from './util/EventUtils';\n\n/**\n * A default UI for THEOplayer.\n *\n * This default UI provides a great player experience out-of-the-box, that works well on all types of devices\n * and for all types of streams. It provides all the common playback controls for playing, seeking,\n * changing languages and qualities. It also supports advertisements and casting.\n *\n * ## Usage\n *\n * 1. Create a `<theoplayer-default-ui>` element.\n * 2. Set its `configuration` attribute or property to a valid player configuration.\n * 3. Set its `source` attribute or property to a valid stream source.\n * 4. Optionally, customize the player using CSS custom properties and/or extra controls.\n *\n * ## Customization\n *\n * The styling can be controlled using CSS custom properties (see {@link UIContainer | `<theoplayer-ui>`}).\n * Additional controls can be added to the `top-control-bar` and `bottom-control-bar` slots.\n * For more extensive customizations, we recommend defining your own custom UI using\n * a {@link UIContainer | `<theoplayer-ui>`}.\n *\n * @attribute `configuration` - The THEOplayer {@link theoplayer!UIPlayerConfiguration | UIPlayerConfiguration}, as a JSON string.\n * @attribute `source` - The THEOplayer {@link theoplayer!SourceDescription | SourceDescription}, as a JSON string.\n * @attribute `fluid` - If set, the player automatically adjusts its height to fit the video's aspect ratio.\n * @attribute `muted` - If set, the player starts out as muted. Reflects `ui.player.muted`.\n * @attribute `autoplay` - If set, the player attempts to automatically start playing (if allowed).\n * @attribute `device-type` - The device type, either \"desktop\", \"mobile\" or \"tv\".\n * Can be used in CSS to show/hide certain device-specific UI controls.\n * @attribute `mobile` - Whether the user is on a mobile device. Equivalent to `device-type == \"mobile\"`.\n * @attribute `tv` - Whether the user is on a TV device. Equivalent to `device-type == \"tv\"`.\n * @attribute `stream-type` - The stream type, either \"vod\", \"live\" or \"dvr\".\n * Can be used to show/hide certain UI controls specific for livestreams, such as\n * a {@link LiveButton | `<theoplayer-live-button>`}.\n * If you know in advance that the source will be a livestream, you can set this attribute to avoid a screen flicker\n * when the player switches between its VOD-specific and live-only controls.\n * @attribute `user-idle-timeout` - The timeout (in seconds) between when the user stops interacting with the UI,\n * and when the user is considered to be \"idle\".\n * @attribute `dvr-threshold` - The minimum length (in seconds) of a livestream's sliding window for the stream to be DVR\n * and its stream type to be set to \"dvr\".\n *\n * @slot `title` - A slot for the stream's title in the top control bar.\n * @slot `top-control-bar` - A slot for extra UI controls in the top control bar.\n * @slot `centered-chrome` - A slot to replace the controls in the center of the player,\n * layered on top of other controls.\n * @slot `bottom-control-bar` - A slot for extra UI controls in the bottom control bar.\n * @slot `menu` - A slot for extra menus (see {@link Menu | `<theoplayer-menu>`}).\n * @slot `error` - A slot for an error display, to show when the player encounters a fatal error.\n * By default, this shows an {@link ErrorDisplay | `<theoplayer-error-display>`}.\n */\n@customElement('theoplayer-default-ui')\nexport class DefaultUI extends LitElement {\n static override styles = [defaultUiCss];\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true\n };\n\n /**\n * Fired when the backing player is created, and the {@link DefaultUI.player} property is set.\n *\n * @group Events\n */\n static READY_EVENT: typeof READY_EVENT = READY_EVENT;\n\n protected readonly _uiRef: Ref<UIContainer> = createRef<UIContainer>();\n @state()\n private accessor _timeRangeInert: boolean = false;\n private _timeRangeInertTimeout: number = 0;\n private _appliedExtensions: boolean = false;\n\n private _configuration: UIPlayerConfiguration = {};\n private _source: SourceDescription | undefined = undefined;\n private _userIdleTimeout: number | undefined = undefined;\n private _deviceType: DeviceType = 'desktop';\n private _dvrThreshold: number = DEFAULT_DVR_THRESHOLD;\n\n @queryAssignedNodes({ slot: 'title', flatten: true })\n private accessor titleSlotNodes!: Array<Node>;\n\n /**\n * Creates a new THEOplayer default UI.\n *\n * @param configuration - The player configuration.\n * Will be passed to the {@link theoplayer!ChromelessPlayer | ChromelessPlayer} constructor to create\n * the underlying THEOplayer instance.\n * Can also be set later on through the {@link DefaultUI.configuration} property.\n */\n constructor(configuration: UIPlayerConfiguration = {}) {\n super();\n this.configuration = configuration;\n }\n\n /**\n * The underlying THEOplayer player instance.\n *\n * This is constructed automatically as soon as a valid {@link configuration} is set.\n */\n get player(): ChromelessPlayer | undefined {\n return this._uiRef.value?.player;\n }\n\n /**\n * The player configuration.\n *\n * Used to create the underlying THEOplayer instance.\n */\n get configuration(): UIPlayerConfiguration {\n return this._configuration;\n }\n\n @property({\n reflect: false,\n attribute: Attribute.CONFIGURATION,\n converter: {\n fromAttribute: (value: string | null) => (value ? (JSON.parse(value) as UIPlayerConfiguration) : {})\n }\n })\n set configuration(configuration: UIPlayerConfiguration) {\n this._configuration = {\n ...configuration,\n ads: {\n ...(configuration.ads ?? {}),\n // Always disable Google IMA's own ad countdown,\n // since we show our own countdown in the default UI.\n showCountdown: false\n }\n };\n }\n\n /**\n * The player's current source.\n */\n get source() {\n return this._uiRef.value ? this._uiRef.value.source : this._source;\n }\n\n @property({\n reflect: false,\n attribute: Attribute.SOURCE,\n converter: {\n fromAttribute: (value: string | null) => (value ? (JSON.parse(value) as SourceDescription) : undefined)\n }\n })\n set source(source: SourceDescription | undefined) {\n if (this._uiRef.value) {\n this._source = undefined;\n this._uiRef.value.source = source;\n } else {\n this._source = source;\n }\n }\n\n /**\n * Whether to automatically adjust the player's height to fit the video's aspect ratio.\n */\n @property({ reflect: true, type: Boolean, attribute: Attribute.FLUID })\n accessor fluid: boolean = false;\n\n /**\n * Whether the player's audio is muted.\n */\n @property({ reflect: true, type: Boolean, attribute: Attribute.MUTED })\n accessor muted: boolean = false;\n\n /**\n * Whether the player should attempt to automatically start playback.\n */\n @property({ reflect: true, type: Boolean, attribute: Attribute.AUTOPLAY })\n accessor autoplay: boolean = false;\n\n /**\n * The stream type, either \"vod\", \"live\" or \"dvr\".\n *\n * If you know in advance that the source will be a livestream, you can set this property to avoid a screen flicker\n * when the player switches between its VOD-specific and live-only controls.\n */\n @property({ reflect: true, type: String, attribute: Attribute.STREAM_TYPE })\n accessor streamType: StreamType = 'vod';\n\n /**\n * Whether the user has stopped interacting with the UI and is considered to be \"idle\".\n */\n get userIdle(): boolean {\n return this._uiRef.value ? this._uiRef.value.userIdle : false;\n }\n\n /**\n * The timeout (in seconds) between when the user stops interacting with the UI,\n * and when the user is considered to be \"idle\".\n */\n get userIdleTimeout(): number {\n return this._userIdleTimeout ?? (this.deviceType === 'tv' ? DEFAULT_TV_USER_IDLE_TIMEOUT : DEFAULT_USER_IDLE_TIMEOUT);\n }\n\n @property({ reflect: true, type: Number, attribute: Attribute.USER_IDLE_TIMEOUT, useDefault: true })\n set userIdleTimeout(value: number | undefined) {\n this._userIdleTimeout = value === undefined || isNaN(value) ? undefined : value;\n }\n\n /**\n * The device type, either \"desktop\", \"mobile\" or \"tv\".\n */\n get deviceType(): DeviceType {\n return this._deviceType;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.DEVICE_TYPE })\n set deviceType(value: DeviceType) {\n if (this._deviceType === value) return;\n this._deviceType = value;\n toggleAttribute(this, Attribute.MOBILE, value === 'mobile');\n toggleAttribute(this, Attribute.TV, value === 'tv');\n }\n\n /**\n * The minimum length (in seconds) of a livestream's sliding window for the stream to be DVR\n * and its stream type to be set to \"dvr\".\n */\n get dvrThreshold(): number {\n return this._dvrThreshold;\n }\n\n @property({ reflect: true, type: Number, attribute: Attribute.DVR_THRESHOLD, useDefault: true })\n set dvrThreshold(value: number) {\n this._dvrThreshold = isNaN(value) ? 0 : value;\n }\n\n @state()\n private accessor _hasTitle: boolean = false;\n\n connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.hasAttribute(Attribute.DEVICE_TYPE)) {\n this.deviceType = isMobile() ? 'mobile' : isTv() ? 'tv' : 'desktop';\n }\n\n if (!this._appliedExtensions) {\n this._appliedExtensions = true;\n applyExtensions(this);\n }\n\n this._onTitleSlotChange();\n }\n\n disconnectedCallback(): void {\n clearTimeout(this._timeRangeInertTimeout);\n }\n\n protected override firstUpdated() {\n if (this._source) {\n this._uiRef.value!.source = this._source;\n this._source = undefined;\n }\n }\n\n protected _onUiReady(): void {\n this.dispatchEvent(createCustomEvent(READY_EVENT));\n }\n\n private readonly _updateStreamType = () => {\n if (this._uiRef.value) {\n this.streamType = this._uiRef.value.streamType;\n }\n };\n\n private readonly _updateUserIdle = () => {\n clearTimeout(this._timeRangeInertTimeout);\n if (this.userIdle) {\n // Disable seekbar when user is idle\n this._timeRangeInert = true;\n } else {\n // Re-enable seekbar when user is active,\n // but wait a little bit to prevent accidentally clicking the seekbar.\n this._timeRangeInertTimeout = setTimeout(() => {\n this._timeRangeInert = false;\n }, ACCIDENTAL_CLICK_DELAY);\n }\n this.dispatchEvent(createCustomEvent(USER_IDLE_CHANGE_EVENT));\n };\n\n private readonly _onTitleSlotChange = () => {\n this._hasTitle = this.titleSlotNodes.length > 0;\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<theoplayer-ui\n ${ref(this._uiRef)}\n .configuration=${this.configuration}\n .fluid=${this.fluid}\n .muted=${this.muted}\n .autoplay=${this.autoplay}\n .deviceType=${this.deviceType}\n .streamType=${this.streamType}\n .userIdleTimeout=${this.userIdleTimeout}\n .dvrThreshold=${this.dvrThreshold}\n @theoplayerready=${this._onUiReady}\n @theoplayeruseridlechange=${this._updateUserIdle}\n @theoplayerstreamtypechange=${this._updateStreamType}\n >${this.renderUiContent()}\n </theoplayer-ui>`;\n }\n\n protected renderUiContent(): HTMLTemplateResult {\n return html`\n <theoplayer-control-bar slot=\"top-chrome\" part=\"top-chrome\">\n <div part=\"title\" ad-hidden style=${styleMap({ display: this._hasTitle ? '' : 'none' })}>\n <slot name=\"title\" @slotchange=${this._onTitleSlotChange}></slot>\n </div>\n <span class=\"theoplayer-spacer\"></span>\n <theoplayer-language-menu-button menu=\"language-menu\" mobile-only ad-hidden></theoplayer-language-menu-button>\n <theoplayer-airplay-button mobile-only ad-hidden></theoplayer-airplay-button>\n <theoplayer-chromecast-button mobile-only ad-hidden></theoplayer-chromecast-button>\n <slot name=\"top-control-bar\"></slot>\n <theoplayer-settings-menu-button menu=\"settings-menu\" mobile-only ad-hidden></theoplayer-settings-menu-button>\n <theoplayer-ad-clickthrough-button ad-only></theoplayer-ad-clickthrough-button>\n </theoplayer-control-bar>\n <theoplayer-loading-indicator slot=\"centered-loading\" no-auto-hide></theoplayer-loading-indicator>\n <div slot=\"centered-chrome\" part=\"centered-chrome\">\n <slot name=\"centered-chrome\">\n <theoplayer-seek-button\n part=\"seek-back-button seek-button center-button\"\n seek-offset=\"-10\"\n mobile-only\n ad-hidden\n ></theoplayer-seek-button>\n <theoplayer-play-button part=\"center-play-button play-button center-button\"></theoplayer-play-button>\n <theoplayer-seek-button\n part=\"seek-forward-button seek-button center-button\"\n seek-offset=\"10\"\n mobile-only\n ad-hidden\n ></theoplayer-seek-button>\n </slot>\n </div>\n <div slot=\"middle-chrome\" part=\"middle-chrome\">\n <theoplayer-chromecast-display></theoplayer-chromecast-display>\n </div>\n <div part=\"bottom-chrome\">\n <theoplayer-control-bar part=\"ad-chrome\" ad-only>\n <theoplayer-ad-display></theoplayer-ad-display>\n <theoplayer-ad-countdown></theoplayer-ad-countdown>\n <span class=\"theoplayer-spacer\"></span>\n <theoplayer-ad-skip-button></theoplayer-ad-skip-button>\n </theoplayer-control-bar>\n <theoplayer-control-bar>\n <theoplayer-play-button part=\"play-button\" mobile-hidden ad-only class=\"theoplayer-ad-control\"></theoplayer-play-button>\n <theoplayer-mute-button part=\"mute-button\" ad-only class=\"theoplayer-ad-control\"></theoplayer-mute-button>\n <theoplayer-time-range\n part=\"time-range\"\n show-ad-markers\n tv-focus\n .inert=${this._timeRangeInert}\n class=\"theoplayer-ad-control\"\n style=${styleMap({\n // Hide seekbar when stream is live with no DVR\n display: this.streamType === 'live' ? 'none' : ''\n })}\n ></theoplayer-time-range>\n <theoplayer-chromecast-button tv-hidden ad-only class=\"theoplayer-ad-control\"></theoplayer-chromecast-button>\n <theoplayer-fullscreen-button ad-only class=\"theoplayer-ad-control\"></theoplayer-fullscreen-button>\n </theoplayer-control-bar>\n <theoplayer-control-bar ad-hidden>\n <theoplayer-play-button part=\"play-button\" mobile-hidden></theoplayer-play-button>\n <theoplayer-mute-button part=\"mute-button\" tv-hidden></theoplayer-mute-button>\n <theoplayer-volume-range part=\"volume-range\" mobile-hidden tv-hidden></theoplayer-volume-range>\n <theoplayer-live-button part=\"live-button\" live-only ad-hidden></theoplayer-live-button>\n <theoplayer-time-display show-duration remaining-when-live></theoplayer-time-display>\n <span class=\"theoplayer-spacer\" style=\"pointer-events: auto\"></span>\n <theoplayer-language-menu-button menu=\"language-menu\" mobile-hidden ad-hidden></theoplayer-language-menu-button>\n <theoplayer-airplay-button tv-hidden mobile-hidden ad-hidden></theoplayer-airplay-button>\n <theoplayer-chromecast-button tv-hidden mobile-hidden ad-hidden></theoplayer-chromecast-button>\n <slot name=\"bottom-control-bar\"></slot>\n <theoplayer-settings-menu-button menu=\"settings-menu\" mobile-hidden ad-hidden></theoplayer-settings-menu-button>\n <theoplayer-fullscreen-button part=\"fullscreen-button\" tv-hidden></theoplayer-fullscreen-button>\n </theoplayer-control-bar>\n </div>\n <theoplayer-language-menu id=\"language-menu\" slot=\"menu\" hidden></theoplayer-language-menu>\n <theoplayer-settings-menu id=\"settings-menu\" slot=\"menu\" hidden></theoplayer-settings-menu>\n <slot name=\"error\" slot=\"error\"><theoplayer-error-display></theoplayer-error-display></slot>\n <slot name=\"menu\" slot=\"menu\"></slot>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-default-ui': DefaultUI;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { ChromelessPlayer as TheoPlayer, type TheoLiveApi } from 'theoplayer/chromeless';\nimport badNetworkModeButtonCss from './BadNetworkModeButton.css';\nimport settingsIcon from '../../../icons/settings.svg';\nimport warningIcon from '../../../icons/warning.svg';\nimport { stateReceiver } from '../../StateReceiverMixin';\nimport { MenuButton } from '../../MenuButton';\nimport { Attribute } from '../../../util/Attribute';\n\n/**\n * A menu button that opens a settings menu.\n *\n * @attribute `menu` - The ID of the settings menu.\n */\n@customElement('theolive-bad-network-button')\n@stateReceiver(['player'])\nexport class BadNetworkModeButton extends MenuButton {\n static styles = [...MenuButton.styles, badNetworkModeButtonCss];\n\n private _player: TheoPlayer | undefined;\n private _theoLive: TheoLiveApi | undefined;\n\n @state()\n private accessor _inBadNetworkMode = false;\n\n override connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(Attribute.ARIA_LABEL)) {\n this.setAttribute(Attribute.ARIA_LABEL, 'open settings menu');\n }\n }\n\n private readonly handleEnterBadNetworkMode_ = () => {\n this._inBadNetworkMode = true;\n };\n\n private readonly handleExitBadNetworkMode_ = () => {\n this._inBadNetworkMode = false;\n };\n\n get player(): TheoPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: TheoPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._theoLive) {\n this._theoLive.removeEventListener('enterbadnetworkmode', this.handleEnterBadNetworkMode_);\n this._theoLive.removeEventListener('exitbadnetworkmode', this.handleExitBadNetworkMode_);\n }\n this._player = player;\n this._theoLive = player?.theoLive;\n if (this._theoLive) {\n this._theoLive.addEventListener('enterbadnetworkmode', this.handleEnterBadNetworkMode_);\n this._theoLive.addEventListener('exitbadnetworkmode', this.handleExitBadNetworkMode_);\n }\n }\n\n protected override render(): HTMLTemplateResult {\n const warningStyles = {\n display: this._inBadNetworkMode ? '' : 'none'\n };\n return html`<span part=\"icon\"\n >${unsafeSVG(settingsIcon)}<span part=\"warning-icon\" style=${styleMap(warningStyles)}>${unsafeSVG(warningIcon)}</span></span\n >`;\n }\n}\n","import type { ChromelessPlayer, TheoLiveApi } from 'theoplayer/chromeless';\nimport { stateReceiver } from '../../StateReceiverMixin';\nimport { RadioButton } from '../../RadioButton';\n\n/**\n * A radio button that shows the label of a given video quality, and switches the video track's\n * {@link theoplayer!MediaTrack.targetQuality | target quality} to that quality when clicked.\n */\n@stateReceiver(['player'])\nexport abstract class AbstractQualitySelector extends RadioButton {\n private _player: ChromelessPlayer | undefined;\n private _theoLive: TheoLiveApi | undefined;\n protected _badNetworkMode: boolean = false;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._theoLive) {\n this._theoLive.removeEventListener('enterbadnetworkmode', this.handleEnterBadNetworkMode_);\n this._theoLive.removeEventListener('exitbadnetworkmode', this.handleExitBadNetworkMode_);\n }\n this._player = player;\n this._theoLive = player?.theoLive;\n this._badNetworkMode = this._theoLive?.badNetworkMode ?? false;\n if (this._theoLive) {\n this._theoLive.addEventListener('enterbadnetworkmode', this.handleEnterBadNetworkMode_);\n this._theoLive.addEventListener('exitbadnetworkmode', this.handleExitBadNetworkMode_);\n }\n this.handlePlayer();\n }\n\n private readonly handleEnterBadNetworkMode_ = () => {\n this._badNetworkMode = true;\n this.handleEnterBadNetworkMode();\n };\n\n private readonly handleExitBadNetworkMode_ = () => {\n this._badNetworkMode = false;\n this.handleExitBadNetworkMode();\n };\n\n handleEnterBadNetworkMode(): void {\n // do nothing\n }\n\n handleExitBadNetworkMode(): void {\n // do nothing\n }\n\n protected abstract handlePlayer(): void;\n}\n","import { AbstractQualitySelector } from './AbstractQualitySelector';\nimport { html, type HTMLTemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\n@customElement('theolive-automatic-quality-selector')\nexport class AutomaticQualitySelector extends AbstractQualitySelector {\n handleEnterBadNetworkMode() {\n this.update_();\n }\n\n handleExitBadNetworkMode() {\n this.update_();\n }\n\n protected handlePlayer() {\n this.update_();\n }\n\n private update_() {\n const newChecked = this.player?.theoLive?.badNetworkMode !== true;\n if (this.checked !== newChecked) {\n this.checked = newChecked;\n }\n }\n\n protected handleChange() {\n if (this.checked && this.player && this.player.theoLive) {\n this.player.theoLive.badNetworkMode = false;\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<slot>High Quality</slot>`;\n }\n}\n","import { AbstractQualitySelector } from './AbstractQualitySelector';\nimport { html, type HTMLTemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\n@customElement('theolive-bad-network-quality-selector')\nexport class BadNetworkModeSelector extends AbstractQualitySelector {\n handleEnterBadNetworkMode() {\n this.update_();\n }\n\n handleExitBadNetworkMode() {\n this.update_();\n }\n\n protected handlePlayer() {\n this.update_();\n }\n\n private update_() {\n const newChecked = this.player?.theoLive?.badNetworkMode === true;\n if (this.checked !== newChecked) {\n this.checked = newChecked;\n }\n }\n\n protected handleChange(): void {\n if (this.checked && this.player && this.player.theoLive) {\n this.player.theoLive.badNetworkMode = true;\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<slot>Low Quality</slot>`;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport verticalRadioGroupCss from '../../VerticalRadioGroup.css';\nimport './AutomaticQualitySelector';\nimport './BadNetworkModeSelector';\nimport { RadioGroup } from '../../RadioGroup';\n\n@customElement('theolive-bad-network-menu')\nexport class BadNetworkModeMenu extends LitElement {\n static styles = [verticalRadioGroupCss];\n\n private readonly _radioGroupRef: Ref<RadioGroup> = createRef<RadioGroup>();\n\n protected firstUpdated() {\n if (this._radioGroupRef.value && !(this._radioGroupRef.value instanceof RadioGroup)) {\n customElements.upgrade(this._radioGroupRef.value);\n }\n }\n\n private readonly _onChange = () => {\n this.dispatchEvent(new Event('change', { bubbles: true }));\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<theoplayer-radio-group ${ref(this._radioGroupRef)} @change=${this._onChange}>\n <theolive-automatic-quality-selector></theolive-automatic-quality-selector>\n <theolive-bad-network-quality-selector></theolive-bad-network-quality-selector>\n </theoplayer-radio-group>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theolive-bad-network-menu': BadNetworkModeMenu;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, state } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport './components/theolive/quality/BadNetworkModeButton';\nimport './components/theolive/quality/BadNetworkModeMenu';\nimport css from './THEOliveDefaultUI.css';\nimport type { ErrorEvent, UIPlayerConfiguration } from 'theoplayer/chromeless';\nimport { DefaultUI } from './DefaultUI';\nimport { Attribute } from './util/Attribute';\n\n/**\n * `<theolive-default-ui>` - A default UI for THEOlive.\n */\n@customElement('theolive-default-ui')\nexport class THEOliveDefaultUI extends DefaultUI {\n static override styles = [css];\n\n @state()\n private accessor _announcementType: 'loading' | 'offline' | 'announcement' | '' = '';\n @state()\n private accessor _announcementMessage: string = '';\n @state()\n private accessor _hidePlayButton: boolean = false;\n @state()\n private accessor _hideErrorDisplay: boolean = false;\n\n constructor(configuration: UIPlayerConfiguration = {}) {\n super(configuration);\n }\n\n protected override _onUiReady() {\n super._onUiReady();\n const player = this.player;\n if (player) {\n player.theoLive?.addEventListener(['distributionloadstart', 'publicationloadstart' as never], this.onLoadChannelStart);\n player.theoLive?.addEventListener(['distributionoffline', 'publicationoffline' as never], this.onChannelOffline);\n player.theoLive?.addEventListener(['endpointloaded', 'publicationloaded' as never], this.onChannelLoaded);\n player.addEventListener('error', this.onError);\n }\n }\n\n private onLoadChannelStart = () => {\n this.showMessage_('loading', undefined);\n };\n\n private onChannelOffline = () => {\n this.showMessage_('offline', undefined);\n };\n\n private onChannelLoaded = () => {\n this.hidePlayerError();\n this.hideMessage_();\n };\n\n private onError = (e: ErrorEvent) => {\n const errorCode = e.errorObject.code;\n if (errorCode < 13_000 || errorCode >= 14_000) {\n this.showMessage_('offline', undefined);\n return;\n }\n this.stopHidingPlayerError();\n this.hideMessage_();\n };\n\n private hidePlayerError(): void {\n this._uiRef.value?.removeAttribute(Attribute.HAS_ERROR);\n this._hideErrorDisplay = true;\n }\n\n private stopHidingPlayerError(): void {\n this._uiRef.value?.setAttribute(Attribute.HAS_ERROR, '');\n this._hideErrorDisplay = false;\n }\n\n private showMessage_(type: 'offline' | 'loading' | 'announcement', text: string | undefined): void {\n this.hidePlayerError();\n this._announcementType = type;\n this._announcementMessage = text ?? '';\n this._hidePlayButton = true;\n }\n\n private hideMessage_(): void {\n this._announcementType = '';\n this._announcementMessage = '';\n this._hidePlayButton = false;\n }\n\n protected override renderUiContent(): HTMLTemplateResult {\n const loadingStyles = { display: this._announcementType === 'loading' ? '' : 'none' };\n const offlineStyles = { display: this._announcementType === 'offline' ? '' : 'none' };\n const announcementStyles = { display: this._announcementType === 'announcement' ? '' : 'none' };\n const playButtonStyles = { display: this._hidePlayButton ? 'none' : '' };\n const errorDisplayStyles = { display: this._hideErrorDisplay ? 'none' : '' };\n return html`\n <p id=\"loading-announcement\" no-auto-hide slot=\"centered-chrome\" style=${styleMap(loadingStyles)}>\n <slot name=\"loading-announcement\">Loading...</slot>\n </p>\n <p id=\"offline-announcement\" no-auto-hide slot=\"centered-chrome\" style=${styleMap(offlineStyles)}>\n <slot name=\"offline-announcement\">The live stream hasn't started yet</slot>\n </p>\n <p id=\"announcement\" no-auto-hide slot=\"centered-chrome\" style=${styleMap(announcementStyles)}>${this._announcementMessage}</p>\n <theoplayer-loading-indicator slot=\"centered-loading\" no-auto-hide part=\"loading-indicator\"></theoplayer-loading-indicator>\n <div slot=\"centered-chrome\" part=\"centered-chrome\">\n <theoplayer-play-button\n part=\"center-play-button play-button center-button\"\n style=${styleMap(playButtonStyles)}\n ></theoplayer-play-button>\n </div>\n <div part=\"bottom-chrome\">\n <theoplayer-control-bar>\n <theoplayer-play-button mobile-hidden part=\"play-button\" style=${styleMap(playButtonStyles)}></theoplayer-play-button>\n <theoplayer-mute-button part=\"mute-button\"></theoplayer-mute-button>\n <theoplayer-volume-range mobile-hidden part=\"volume-range\"></theoplayer-volume-range>\n <theoplayer-live-button ad-hidden live-only part=\"live-button\"></theoplayer-live-button>\n <span class=\"theoplayer-spacer\"></span>\n <theoplayer-settings-menu-button ad-hidden menu=\"all-quality-menu\" part=\"quality-button\"></theoplayer-settings-menu-button>\n <theolive-bad-network-button ad-hidden menu=\"quality-menu\" part=\"theolive-bad-network-button\"></theolive-bad-network-button>\n <theoplayer-fullscreen-button part=\"fullscreen-button\"></theoplayer-fullscreen-button>\n </theoplayer-control-bar>\n </div>\n <theoplayer-menu id=\"quality-menu\" slot=\"menu\" menu-close-on-input hidden>\n <theolive-bad-network-menu></theolive-bad-network-menu>\n </theoplayer-menu>\n <theoplayer-menu id=\"all-quality-menu\" slot=\"menu\" menu-close-on-input hidden>\n <theoplayer-quality-radio-group></theoplayer-quality-radio-group>\n </theoplayer-menu>\n <theoplayer-error-display slot=\"error\" part=\"error-display\" style=${styleMap(errorDisplayStyles)}></theoplayer-error-display>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theolive-default-ui': THEOliveDefaultUI;\n }\n}\n","function _class_private_field_loose_base(receiver, privateKey) {\n if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n throw new TypeError(\"attempted to use private field on non-instance\");\n }\n\n return receiver;\n}\nexport { _class_private_field_loose_base as _ };\n","var id = 0;\n\nfunction _class_private_field_loose_key(name) {\n return \"__private_\" + id++ + \"_\" + name;\n}\nexport { _class_private_field_loose_key as _ };\n","import { Attribute } from './Attribute';\nimport { isSlotContainer } from '../components/SlotContainer';\n\nexport type Constructor<T> = abstract new (...args: any[]) => T;\n\nexport function noOp(): void {\n return;\n}\n\nexport function isElement(node: Node): node is Element {\n return node.nodeType === Node.ELEMENT_NODE;\n}\n\nexport function isHTMLElement(node: unknown): node is HTMLElement {\n return node instanceof HTMLElement;\n}\n\nexport function isHTMLSlotElement(element: Element): element is HTMLSlotElement {\n return element.localName.toLowerCase() === 'slot';\n}\n\nexport const isArray: (arg: unknown) => arg is any[] =\n typeof Array.isArray === 'function'\n ? Array.isArray\n : (arg): arg is any[] => {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n\nexport const fromArrayLike: <T>(arrayLike: ArrayLike<T>) => T[] =\n typeof Array.from === 'function'\n ? (arrayLike) => {\n return Array.from(arrayLike);\n }\n : (arrayLike) => {\n return Array.prototype.slice.call(arrayLike);\n };\n\nexport const arrayFind: <T>(array: readonly T[], predicate: (element: T, index: number, array: readonly T[]) => boolean) => T | undefined =\n typeof Array.prototype.find === 'function'\n ? (array, predicate) => array.find(predicate)\n : (array, predicate) => {\n for (let i = 0; i < array.length; i++) {\n if (predicate(array[i], i, array)) {\n return array[i];\n }\n }\n return undefined;\n };\n\nexport const arrayFindIndex: <T>(array: readonly T[], predicate: (element: T, index: number, array: readonly T[]) => boolean) => number =\n typeof Array.prototype.findIndex === 'function'\n ? (array, predicate) => array.findIndex(predicate)\n : (array, predicate) => {\n for (let i = 0; i < array.length; i++) {\n if (predicate(array[i], i, array)) {\n return i;\n }\n }\n return -1;\n };\n\nexport function arrayRemove<T>(array: T[], element: T): boolean {\n const index = array.indexOf(element);\n if (index < 0) {\n return false;\n }\n arrayRemoveAt(array, index);\n return true;\n}\n\nexport function arrayRemoveAt<T>(array: T[], index: number): void {\n array.splice(index, 1);\n}\n\nexport type Comparator<T, U = T> = (a: T, b: U) => number;\n\nexport function arrayMinByKey<T>(array: ReadonlyArray<T>, keySelector: (element: T) => number): T | undefined {\n return arrayMinBy(array, (first, second) => keySelector(first) - keySelector(second));\n}\n\nexport function arrayMaxByKey<T>(array: ReadonlyArray<T>, keySelector: (element: T) => number): T | undefined {\n return arrayMaxBy(array, (first, second) => keySelector(first) - keySelector(second));\n}\n\nexport function arrayMinBy<T>(array: ReadonlyArray<T>, comparator: Comparator<T>): T | undefined {\n if (array.length === 0) {\n return undefined;\n }\n return array.reduce((first, second) => (comparator(first, second) <= 0 ? first : second));\n}\n\nexport function arrayMaxBy<T>(array: ReadonlyArray<T>, comparator: Comparator<T>): T | undefined {\n const minComparator = (a: T, b: T) => comparator(b, a);\n return arrayMinBy(array, minComparator);\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\nexport const stringStartsWith: (string: string, search: string) => boolean =\n typeof String.prototype.startsWith === 'function'\n ? (string, search) => string.startsWith(search)\n : (string, search) => string.substring(0, search.length) === search;\n\nexport const localizeLanguageName: (languageCode: string) => string | undefined =\n typeof Intl !== 'undefined' && Intl.DisplayNames\n ? (languageCode) => {\n const displayNames = new Intl.DisplayNames([languageCode, 'en'], { type: 'language', fallback: 'none' });\n const localName = displayNames.of(languageCode);\n if (localName) {\n const locale = displayNames.resolvedOptions().locale;\n const [first] = localName;\n return first.toLocaleUpperCase(locale) + localName.slice(first.length);\n }\n }\n : (_languageCode) => undefined;\n\nexport function setTextContent(el: HTMLElement, text: string): void {\n if (typeof el.textContent === 'undefined') {\n el.innerText = text;\n } else {\n el.textContent = text;\n }\n}\n\nexport function containsComposedNode(rootNode: Node, childNode: Node): boolean {\n if (!rootNode || !childNode) {\n return false;\n }\n if (rootNode.contains(childNode)) {\n return true;\n }\n const childRoot = childNode.getRootNode();\n if ((childRoot as ShadowRoot).host) {\n return containsComposedNode(rootNode, (childRoot as ShadowRoot).host);\n }\n return false;\n}\n\nexport function toggleAttribute(element: Element, attribute: string, enabled: boolean): void {\n if (enabled) {\n element.setAttribute(attribute, '');\n } else {\n element.removeAttribute(attribute);\n }\n}\n\nexport function getChildren(element: Element): ArrayLike<Element> {\n if (element.shadowRoot) {\n return element.shadowRoot.children;\n }\n if (isHTMLSlotElement(element)) {\n const assignedNodes = element.assignedNodes();\n if (assignedNodes.length > 0) {\n return assignedNodes.filter(isElement);\n }\n }\n if (isHTMLElement(element)) {\n // Element.children does not exist for SVG elements in Internet Explorer.\n // Assume those won't contain any state receivers.\n return element.children;\n }\n return [];\n}\n\nexport function getSlottedElements(slot: HTMLSlotElement): Element[] {\n const elements: Element[] = [];\n for (const node of slot.assignedNodes({ flatten: true })) {\n if (isElement(node)) {\n elements.push(node);\n if (isSlotContainer(node)) {\n elements.push(...fromArrayLike(node.children));\n }\n }\n }\n return elements;\n}\n\nexport function getTvFocusChildren(element: Element): HTMLElement[] | undefined {\n if (!isHTMLElement(element)) {\n return;\n }\n if (getComputedStyle(element).display === 'none') {\n return;\n }\n if (element.getAttribute(Attribute.TV_FOCUS) !== null) {\n return getFocusableChildren(element);\n }\n\n const children = getChildren(element);\n for (let i = 0; i < children.length; i++) {\n const result = getTvFocusChildren(children[i]);\n if (result) {\n return result;\n }\n }\n}\n\nexport function getFocusableChildren(element: HTMLElement): HTMLElement[] {\n const result: HTMLElement[] = [];\n collectFocusableChildren(element, result);\n return result;\n}\n\nfunction collectFocusableChildren(element: Element, result: HTMLElement[]) {\n if (!isHTMLElement(element)) {\n return;\n }\n if (getComputedStyle(element).display === 'none') {\n return;\n }\n if (element.hasAttribute('tabindex') && Number(element.getAttribute('tabindex')) >= 0) {\n result.push(element);\n return;\n }\n switch (element.tagName.toLowerCase()) {\n case 'button':\n case 'input':\n case 'textarea':\n case 'select':\n case 'details': {\n result.push(element);\n break;\n }\n case 'a': {\n if ((element as HTMLAnchorElement).href) {\n result.push(element);\n }\n break;\n }\n default: {\n const children = getChildren(element);\n for (let i = 0; i < children.length; i++) {\n collectFocusableChildren(children[i], result);\n }\n break;\n }\n }\n}\n\nexport function getActiveElement(): Element | null {\n let activeElement = document.activeElement;\n if (activeElement == null) {\n return null;\n }\n let nextActiveElement: Element | null | undefined;\n while ((nextActiveElement = activeElement.shadowRoot?.activeElement) != null) {\n activeElement = nextActiveElement;\n }\n return activeElement;\n}\n\nexport function upgradeCustomElementIfNeeded(element: Element): Promise<unknown> | undefined {\n const elementName = element.nodeName.toLowerCase();\n if (elementName.indexOf('-') >= 0) {\n if (customElements.get(elementName)) {\n customElements.upgrade(element);\n } else {\n return customElements.whenDefined(elementName);\n }\n }\n return undefined;\n}\n","import { type Constructor, fromArrayLike, getChildren, isArray } from '../util/CommonUtils';\nimport type { ChromelessPlayer, THEOplayerError, VideoQuality } from 'theoplayer/chromeless';\nimport type { DeviceType } from '../util/DeviceType';\nimport type { StreamType } from '../util/StreamType';\n\n/** @internal */\nexport const StateReceiverProps = 'theoplayerUiObservedProperties' as const;\n\nexport interface StateReceiverPropertyMap {\n player: ChromelessPlayer | undefined;\n fullscreen: boolean;\n deviceType: DeviceType;\n streamType: StreamType;\n playbackRate: number;\n activeVideoQuality: VideoQuality | undefined;\n targetVideoQualities: VideoQuality[] | undefined;\n error: THEOplayerError | undefined;\n previewTime: number;\n}\n\n/**\n * A custom element that automatically receives selected state updates\n * from an ancestor {@link UIContainer | `<theoplayer-ui>`} element.\n *\n * Do not implement this interface directly, instead use {@link stateReceiver} or {@link StateReceiverMixin}.\n *\n * @see {@link stateReceiver}\n * @see {@link StateReceiverMixin}\n */\nexport interface StateReceiverElement extends Partial<StateReceiverPropertyMap>, Element {\n /**\n * The names of the properties this element will receive.\n */\n readonly [StateReceiverProps]: Array<keyof StateReceiverPropertyMap>;\n}\n\n/** @internal */\nexport function isStateReceiverElement(element: Element): element is StateReceiverElement {\n return StateReceiverProps in element && isArray((element as Partial<StateReceiverElement>)[StateReceiverProps]);\n}\n\n/**\n * Decorates a custom element class, such that it will automatically receive selected state updates\n * from an ancestor {@link UIContainer | `<theoplayer-ui>`} element.\n *\n * For each property name in `props`, the custom element *MUST* implement a corresponding property with a setter.\n * For example, if `props` equals `[\"player\", \"fullscreen\"]`, then the element must have writable `player` and `fullscreen`\n * properties.\n *\n * @param props - The names of the properties this element will receive.\n * @returns A class decorator.\n * @see {@link StateReceiverElement}\n */\nexport const stateReceiver =\n (props: Array<keyof StateReceiverPropertyMap>) =>\n (target: Constructor<Element>, _context: ClassDecoratorContext<Constructor<Element>>): void => {\n Object.defineProperty(target.prototype, StateReceiverProps, {\n value: props\n });\n };\n\n/**\n * A [mixin class](https://www.typescriptlang.org/docs/handbook/mixins.html) to apply on the superclass of a custom element,\n * such that it will automatically receive selected state updates from an ancestor {@link UIContainer | `<theoplayer-ui>`} element.\n *\n * For each property name in `props`, the custom element *MUST* implement a corresponding property with a setter.\n * For example, if `props` equals `[\"player\", \"fullscreen\"]`, then the element must have writable `player` and `fullscreen`\n * properties.\n *\n * @param base - The superclass for the new element class.\n * @param props - The names of the properties this element will receive.\n * @returns A class constructor that extends `base` and implements {@link StateReceiverElement}.\n * @see {@link StateReceiverElement}\n * @deprecated Use {@link stateReceiver} decorator instead.\n */\nexport function StateReceiverMixin<T extends Constructor<Element>>(\n base: T,\n props: Array<keyof StateReceiverPropertyMap>\n): T & Constructor<StateReceiverElement> {\n @stateReceiver(props)\n abstract class StateReceiver extends base implements StateReceiverElement {\n declare readonly [StateReceiverProps]: Array<keyof StateReceiverPropertyMap>;\n }\n\n return StateReceiver;\n}\n\n/** @internal */\nexport async function forEachStateReceiverElement(\n element: Element,\n playerElement: HTMLElement,\n callback: (receiver: StateReceiverElement) => void\n): Promise<void> {\n // Don't look inside the THEOplayer chromeless player\n if (playerElement.contains(element)) {\n return;\n }\n // Upgrade custom elements if needed\n if (element.nodeName.indexOf('-') >= 0 && !isStateReceiverElement(element)) {\n // web-components-polyfill does not correctly resolve `whenDefined()`\n // when called during an upgrade reaction such as `connectedCallback()`.\n // Workaround by waiting one microtask.\n await Promise.resolve();\n await customElements.whenDefined(element.nodeName.toLowerCase());\n customElements.upgrade(element);\n }\n // Check the element\n if (isStateReceiverElement(element)) {\n callback(element);\n }\n // Check all its children\n const children = getChildren(element);\n if (children.length > 0) {\n await Promise.all(fromArrayLike(children).map((child) => forEachStateReceiverElement(child, playerElement, callback)));\n }\n}\n","function isValidNumber(x: number): boolean {\n return !isNaN(x) && isFinite(x);\n}\n\nexport function formatTime(time: number, guide: number = 0, preferNegative?: boolean): string {\n // Handle negative values at the end\n let negative = time < 0 || (preferNegative && time === 0);\n time = Math.abs(time);\n\n const guideMinutes = Math.floor((guide / 60) % 60);\n const guideHours = Math.floor(guide / 3600);\n\n let timeParts: string[];\n if (!isValidNumber(time)) {\n timeParts = [guideHours > 0 ? '--' : '', '--', '--'];\n } else {\n const seconds = Math.floor(time % 60);\n const minutes = Math.floor((time / 60) % 60);\n const hours = Math.floor(time / 3600);\n // Check if we need to show hours.\n const showHours = hours > 0 || guideHours > 0;\n // If hours are showing, we may need to add a leading zero to minutes.\n // Always show at least one digit of minutes.\n const showMinutesLeadingZero = showHours || guideMinutes >= 0;\n timeParts = [\n showHours ? `${hours}` : '',\n showMinutesLeadingZero && minutes < 10 ? `0${minutes}` : `${minutes}`,\n seconds < 10 ? `0${seconds}` : `${seconds}`\n ];\n }\n\n const timePhrase = timeParts.filter((part) => part !== '').join(':');\n return `${negative ? '-' : ''}${timePhrase}`;\n}\n\nconst timeUnitLabels = [\n ['hour', 'hours'],\n ['minute', 'minutes'],\n ['second', 'seconds']\n] as const;\n\nexport function toTimeUnitPhrase(timeUnitValue: number, unitIndex: 0 | 1 | 2): string {\n const unitLabel = timeUnitLabels[unitIndex][timeUnitValue === 1 ? 0 : 1];\n return `${timeUnitValue} ${unitLabel}`;\n}\n\nexport function formatAsTimePhrase(time: number, preferNegative?: boolean): string {\n if (!isValidNumber(time)) return '';\n const negative = time < 0 || (preferNegative && time === 0);\n time = Math.abs(time);\n\n const seconds = Math.floor(time % 60);\n const minutes = Math.floor(time / 60) % 60;\n const hours = Math.floor(time / 3600);\n\n const timePhrase = [\n hours === 0 ? '' : toTimeUnitPhrase(hours, 0),\n minutes === 0 ? '' : toTimeUnitPhrase(minutes, 1),\n seconds === 0 && (hours > 0 || minutes > 0) ? '' : toTimeUnitPhrase(seconds, 2)\n ]\n .filter((part) => part !== '')\n .join(', ');\n\n // If the time was negative, assume it represents some remaining amount of time/\"count down\".\n const negativeSuffix = negative ? ' remaining' : '';\n\n return `${timePhrase}${negativeSuffix}`;\n}\n","// https://github.com/webmodules/custom-event/blob/master/index.js\n\n// Modern browsers\nfunction supportsNativeEvent() {\n try {\n const event = new Event('change');\n return 'change' === event.type;\n } catch (e) {}\n return false;\n}\n\nfunction supportsNativeCustomEvent() {\n try {\n const event = new CustomEvent('cat', { detail: { foo: 'bar' } });\n return 'cat' === event.type && 'bar' === event.detail.foo;\n } catch (e) {}\n return false;\n}\n\nfunction createWithNativeEvent(type: string, eventInitDict?: EventInit): Event {\n return new Event(type, eventInitDict);\n}\n\nfunction createWithNativeCustomEvent(type: string, eventInitDict?: CustomEventInit): CustomEvent {\n return new CustomEvent(type, eventInitDict);\n}\n\n// IE >= 9\nfunction createEventWithCreateEvent(type: string, eventInitDict?: EventInit): Event {\n const e = document.createEvent('Event');\n e.initEvent(type, eventInitDict?.bubbles || false, eventInitDict?.cancelable || false);\n return e;\n}\n\nfunction createCustomEventWithCreateEvent(type: string, eventInitDict?: CustomEventInit): CustomEvent {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, eventInitDict?.bubbles || false, eventInitDict?.cancelable || false, eventInitDict?.detail);\n return e;\n}\n\nexport type EventFactory = <TType extends string = string>(type: TType, eventInitDict?: EventInit) => Event & { readonly type: TType };\n\nexport type CustomEventFactory = <TType extends string = string, TDetail = any>(\n type: TType,\n eventInitDict?: CustomEventInit<TDetail>\n) => CustomEvent<TDetail> & { readonly type: TType };\n\n/**\n * Cross-browser `Event` constructor.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/Event/Event\n */\nexport const createEvent: EventFactory = (supportsNativeEvent() ? createWithNativeEvent : createEventWithCreateEvent) as EventFactory;\n\n/**\n * Cross-browser `CustomEvent` constructor.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent\n */\nexport const createCustomEvent: CustomEventFactory = (\n supportsNativeCustomEvent() ? createWithNativeCustomEvent : createCustomEventWithCreateEvent\n) as CustomEventFactory;\n","export class Rectangle implements DOMRect {\n x: number;\n y: number;\n width: number;\n height: number;\n\n constructor(x: number, y: number, width: number, height: number) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n\n get left(): number {\n return this.x;\n }\n\n set left(value: number) {\n this.x = value;\n }\n\n get right(): number {\n return this.x + this.width;\n }\n\n set right(value: number) {\n this.x = value - this.width;\n }\n\n get top(): number {\n return this.y;\n }\n\n set top(value: number) {\n this.y = value;\n }\n\n get bottom(): number {\n return this.y + this.height;\n }\n\n set bottom(value: number) {\n this.y = value - this.height;\n }\n\n static fromRect(rect: Partial<DOMRectReadOnly>): Rectangle {\n // Note: Internet Explorer doesn't support DOMRect.x and .y, only .left and .top\n return new Rectangle(rect.left ?? rect.x ?? 0, rect.top ?? rect.y ?? 0, rect.width ?? 0, rect.height ?? 0);\n }\n\n overlaps(other: DOMRectReadOnly): boolean {\n return this.x < other.right && this.right > other.x && this.y < other.bottom && this.bottom > other.y;\n }\n\n contains(other: DOMRectReadOnly): boolean {\n return this.x <= other.x && other.right <= this.right && this.y <= other.y && other.bottom <= this.bottom;\n }\n\n union(other: DOMRectReadOnly): Rectangle {\n const x = Math.min(this.x, other.x);\n const y = Math.min(this.y, other.y);\n const width = Math.max(this.right, other.right) - x;\n const height = Math.max(this.bottom, other.bottom) - y;\n return new Rectangle(x, y, width, height);\n }\n\n snapToPixels(): Rectangle {\n return new Rectangle(Math.round(this.x), Math.round(this.y), Math.round(this.width), Math.round(this.height));\n }\n\n clone(): Rectangle {\n return new Rectangle(this.x, this.y, this.width, this.height);\n }\n\n toJSON(): any {\n return {\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height,\n left: this.left,\n right: this.right,\n top: this.top,\n bottom: this.bottom\n };\n }\n}\n","import { type ArrowKeyCode, KeyCode } from './KeyCode';\nimport { arrayMinByKey, getActiveElement, isHTMLElement } from './CommonUtils';\nimport { Rectangle } from './GeometryUtils';\n\nexport function getFocusedChild(): HTMLElement | null {\n const focusedChild = getActiveElement();\n if (!focusedChild || focusedChild === document.body || !isHTMLElement(focusedChild)) {\n return null;\n }\n return focusedChild;\n}\n\nexport function navigateByArrowKey(container: HTMLElement, children: HTMLElement[], key: ArrowKeyCode): boolean {\n const focusedChild = getFocusedChild();\n if (focusedChild === null) {\n return false;\n }\n const containerRect = Rectangle.fromRect(container.getBoundingClientRect()).snapToPixels();\n const focusedRect = Rectangle.fromRect(focusedChild.getBoundingClientRect()).snapToPixels();\n const childrenWithRects = children\n .map(\n (child): ChildWithRect => ({\n child,\n rect: Rectangle.fromRect(child.getBoundingClientRect()).snapToPixels()\n })\n )\n .filter((x) => x.rect.width > 0 && x.rect.height > 0);\n // Find focusable children next to the focused child along the key's direction\n let candidates: ChildWithRect[];\n if (key === KeyCode.LEFT || key === KeyCode.RIGHT) {\n const bounds = focusedRect.clone();\n if (key === KeyCode.LEFT) {\n bounds.left = containerRect.left;\n bounds.width = focusedRect.left - containerRect.left;\n } else {\n bounds.left = focusedRect.right;\n bounds.width = containerRect.right - focusedRect.right;\n }\n candidates = childrenWithRects.filter((x) => bounds.overlaps(x.rect));\n if (candidates.length === 0) {\n bounds.top = containerRect.top;\n bounds.height = containerRect.height;\n candidates = childrenWithRects.filter((x) => bounds.overlaps(x.rect));\n }\n } else {\n const bounds = focusedRect.clone();\n if (key === KeyCode.UP) {\n bounds.top = containerRect.top;\n bounds.height = focusedRect.top - containerRect.top;\n } else {\n bounds.top = focusedRect.bottom;\n bounds.height = containerRect.bottom - focusedRect.bottom;\n }\n candidates = childrenWithRects.filter((x) => bounds.overlaps(x.rect));\n if (candidates.length === 0) {\n bounds.left = containerRect.left;\n bounds.width = containerRect.width;\n candidates = childrenWithRects.filter((x) => bounds.overlaps(x.rect));\n }\n }\n // Find the candidate closest to the currently focused child\n const closestCandidate = arrayMinByKey(candidates, (x) => manhattanDistanceBetweenRects(x.rect, focusedRect));\n if (closestCandidate === undefined) {\n return false;\n }\n // Focus it\n closestCandidate.child.focus();\n return true;\n}\n\ninterface ChildWithRect {\n child: HTMLElement;\n rect: DOMRectReadOnly;\n}\n\nfunction manhattanDistanceBetweenRects(a: DOMRectReadOnly, b: DOMRectReadOnly): number {\n let distance = 0;\n if (a.right < b.left) {\n distance += b.left - a.right;\n } else if (b.right < a.left) {\n distance += a.left - b.right;\n }\n if (a.bottom < b.top) {\n distance += b.top - a.bottom;\n } else if (b.bottom < a.top) {\n distance += a.top - b.bottom;\n }\n return distance;\n}\n","export const CLOSE_MENU_EVENT = 'theoplayermenuclose' as const;\n\nexport interface CloseMenuEvent extends CustomEvent<OpenMenuEventDetail> {\n type: typeof CLOSE_MENU_EVENT;\n}\n\nexport interface OpenMenuEventDetail {\n menu: string;\n}\n","export const MENU_CHANGE_EVENT = 'theoplayermenuchange' as const;\n\nexport interface MenuChangeEvent extends CustomEvent {\n type: typeof MENU_CHANGE_EVENT;\n}\n","export const TOGGLE_MENU_EVENT = 'theoplayermenutoggle' as const;\n\nexport interface ToggleMenuEvent extends CustomEvent<OpenMenuEventDetail> {\n type: typeof TOGGLE_MENU_EVENT;\n}\n\nexport interface OpenMenuEventDetail {\n menu: string;\n}\n","import type { MediaTrack, Quality, TextTrack, VideoQuality } from 'theoplayer/chromeless';\n\nexport function isSubtitleTrack(track: TextTrack): boolean {\n return track.kind === 'subtitles' || track.kind === 'captions';\n}\n\nexport function isNonForcedSubtitleTrack(track: TextTrack): boolean {\n return isSubtitleTrack(track) && !track.forced;\n}\n\nexport function getTargetQualities(videoTrack: MediaTrack | undefined): Quality[] | undefined {\n let targetQualities = videoTrack?.targetQuality;\n if (targetQualities !== undefined && !Array.isArray(targetQualities)) {\n targetQualities = [targetQualities];\n }\n return targetQualities;\n}\n\nexport function formatQualityLabel(quality: VideoQuality | undefined): string | undefined {\n if (!quality) {\n return undefined;\n }\n if (quality.label && quality.label !== '') {\n return quality.label;\n }\n if (quality.height) {\n return `${quality.height}p`;\n }\n if (quality.bandwidth) {\n return formatBandwidth(quality);\n }\n return undefined;\n}\n\nfunction formatBandwidth(quality: VideoQuality): string | undefined {\n if (!quality.bandwidth) {\n return undefined;\n } else if (quality.bandwidth > 1e7) {\n return `${(quality.bandwidth / 1e6).toFixed(0)}Mbps`;\n } else if (quality.bandwidth > 1e6) {\n return `${(quality.bandwidth / 1e6).toFixed(1)}Mbps`;\n } else {\n return `${(quality.bandwidth / 1e3).toFixed(0)}kbps`;\n }\n}\n","import { stringStartsWith } from './CommonUtils';\n\nexport interface RgbaColor {\n r_: number; // 0..255\n g_: number; // 0..255\n b_: number; // 0..255\n a_: number; // 0..1\n}\n\nfunction parseHexColor(hex: string): RgbaColor | null {\n const m = hex.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i);\n return m\n ? {\n r_: parseInt(m[1], 16),\n g_: parseInt(m[2], 16),\n b_: parseInt(m[3], 16),\n a_: 1\n }\n : null;\n}\n\nfunction parseRgbaColor(rgbaString: string): RgbaColor | null {\n const m = rgbaString.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([0-9.]+))?\\)$/i);\n return m\n ? {\n r_: parseInt(m[1], 10),\n g_: parseInt(m[2], 10),\n b_: parseInt(m[3], 10),\n a_: m[4] ? parseFloat(m[4]) : 1\n }\n : null;\n}\n\nexport function parseColor(colorString: string | null | undefined): RgbaColor | null {\n if (!colorString) {\n return null;\n } else if (stringStartsWith(colorString, 'rgb')) {\n return parseRgbaColor(colorString);\n } else if (stringStartsWith(colorString, '#')) {\n return parseHexColor(colorString);\n } else {\n return null;\n }\n}\n\nexport function toRgba(color: RgbaColor): string {\n return `rgba(${color.r_},${color.g_},${color.b_},${color.a_})`;\n}\n\nexport function toRgb(color: RgbaColor): string {\n return `rgb(${color.r_},${color.g_},${color.b_})`;\n}\n\nexport function colorWithAlpha(color: RgbaColor, alpha: number): RgbaColor {\n return {\n r_: color.r_,\n g_: color.g_,\n b_: color.b_,\n a_: alpha\n };\n}\n\nexport function rgbEquals(left: RgbaColor, right: RgbaColor): boolean {\n return left.r_ === right.r_ && left.g_ === right.g_ && left.b_ === right.b_;\n}\n\nexport const COLOR_WHITE: RgbaColor = parseColor('#ffffff')!;\nexport const COLOR_BLACK: RgbaColor = parseColor('#000000')!;\n","import type { EdgeStyle } from 'theoplayer/chromeless';\n\nexport const knownColors: ReadonlyArray<[string, string]> = [\n ['White', 'rgb(255,255,255)'],\n ['Yellow', 'rgb(255,255,0)'],\n ['Green', 'rgb(0,255,0)'],\n ['Cyan', 'rgb(0,255,255)'],\n ['Blue', 'rgb(0,0,255)'],\n ['Magenta', 'rgb(255,0,255)'],\n ['Red', 'rgb(255,0,0)'],\n ['Black', 'rgb(0,0,0)']\n];\n\nexport const knownFontFamilies: ReadonlyArray<[string, string]> = [\n ['Monospace Serif', '\"Courier New\", Courier, \"Nimbus Mono L\", \"Cutive Mono\", monospace'],\n ['Proportional Serif', '\"Times New Roman\", Times, Georgia, Cambria, \"PT Serif Caption\", serif'],\n ['Monospace Sans', '\"Deja Vu Sans Mono\", \"Lucida Console\", Monaco, Consolas, \"PT Mono\", monospace'],\n ['Proportional Sans', 'Arial, Helvetica, Verdana, \"PT Sans Caption\", sans-serif']\n];\n\nexport const knownEdgeStyles: ReadonlyArray<[string, EdgeStyle]> = [\n ['None', 'none'],\n ['Drop shadow', 'dropshadow'],\n ['Raised', 'raised'],\n ['Depressed', 'depressed'],\n ['Uniform', 'uniform']\n];\n","export const ENTER_FULLSCREEN_EVENT = 'theoplayerfullscreenenter' as const;\n\nexport interface EnterFullscreenEvent extends CustomEvent {\n type: typeof ENTER_FULLSCREEN_EVENT;\n}\n","export const EXIT_FULLSCREEN_EVENT = 'theoplayerfullscreenexit' as const;\n\nexport interface ExitFullscreenEvent extends CustomEvent {\n type: typeof EXIT_FULLSCREEN_EVENT;\n}\n","/**\n * @license\n * Copyright (c) 2020 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nfunction setProperties(element, properties) {\n const style = element.style;\n for (const [propertyName, value] of Object.entries(properties)) {\n style.setProperty(propertyName, value);\n }\n}\n/**\n * True if the ShadyCSS scoped style polyfill is loaded and active.\n *\n * Note that the other functions in this module are safe to call even if the\n * polyfills are not loaded.\n */\nfunction scopedStylesArePolyfilled() {\n return (window.ShadyCSS !== undefined && window.ShadyCSS.nativeShadow === false);\n}\n/**\n * True if the ShadyCSS custom properties polyfill is loaded and active.\n *\n * Note that the other functions in this module are safe to call even if the\n * polyfills are not loaded.\n */\nfunction customPropertiesArePolyfilled() {\n return window.ShadyCSS !== undefined && window.ShadyCSS.nativeCss === false;\n}\n/**\n * Prepare the given custom element template for use with the ShadyCSS style\n * scoping polyfill. You only need to do this once per template.\n *\n * If ShadyCSS is not active, then this function does nothing.\n *\n * If ShadyCSS is active, then after styleElement is called on the first\n * instance of this element, <style> tags within this template will be moved to\n * the <head> and re-written to use globally scoped rules that emulate scoped\n * behavior.\n *\n * Note that LitElement and Polymer Library users do not typically need to call\n * this function, because it is called automatically.\n */\nexport function prepareTemplate(template, customElementName) {\n if (scopedStylesArePolyfilled()) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n window.ShadyCSS.prepareTemplate(template, customElementName);\n }\n}\n/**\n * Activate scoped styles for the given element instance. This function should\n * typically be called inside connectedCallback. The template of this element\n * class must already have been registered with prepareTemplate.\n *\n * If ShadyCSS is not active, then this function does nothing.\n *\n * Note that LitElement and Polymer Library users do not typically need to call\n * this function, because it is called automatically.\n */\nexport function styleElement(element) {\n if (scopedStylesArePolyfilled()) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n window.ShadyCSS.styleElement(element);\n }\n}\n/**\n * Propagate CSS custom properties on this element to all descendant shadow\n * roots, and optionally set new ones.\n *\n * Uses ShadyCSS custom property emulation if the polyfill is active, otherwise\n * calls native style.setProperty.\n */\nexport function styleSubtree(element, properties) {\n if (customPropertiesArePolyfilled()) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n window.ShadyCSS.styleSubtree(element, properties);\n }\n else if (properties != null) {\n setProperties(element, properties);\n }\n}\n//# sourceMappingURL=interface.js.map","import { arrayFindIndex } from './CommonUtils';\n\nexport type ColorStop = [color: string, percent: number];\n\nexport class ColorStops {\n private _stops: ColorStop[] = [['transparent', 100]];\n\n constructor() {}\n\n add(color: string, from: number, to: number): void {\n from = Math.max(from, 0);\n to = Math.min(to, 100);\n if (from >= to) {\n return;\n }\n const previousIndex = arrayFindIndex(this._stops, ([, percent]) => from <= percent);\n if (previousIndex < 0) {\n return;\n }\n const [previousColor, previousPercent] = this._stops[previousIndex];\n const newStops: ColorStop[] = [];\n if (from > 0) {\n newStops.push([previousColor, from]);\n }\n newStops.push([color, to]);\n if (to < previousPercent) {\n // New stop is fully contained within previous stop\n // Split previous stop\n newStops.push([previousColor, previousPercent]);\n this._stops.splice(previousIndex, 1, ...newStops);\n } else {\n // New stop extends beyond previous stop\n // Remove overlapping stops\n let nextIndex = previousIndex + 1;\n while (nextIndex < this._stops.length) {\n if (to < this._stops[nextIndex][1]) {\n break;\n }\n nextIndex++;\n }\n this._stops.splice(previousIndex, nextIndex - previousIndex, ...newStops);\n }\n }\n\n toGradientStops(): string {\n const gradientStops: string[] = [];\n let prevPercent = 0;\n for (const [color, percent] of this._stops) {\n if (percent < prevPercent) continue;\n gradientStops.push(`${color} ${prevPercent}%`);\n gradientStops.push(`${color} ${percent}%`);\n prevPercent = percent;\n }\n return gradientStops.join(', ');\n }\n}\n","export const PREVIEW_TIME_CHANGE_EVENT = 'theoplayerpreviewtimechange' as const;\n\nexport interface PreviewTimeChangeEvent extends CustomEvent<PreviewTimeChangeEventDetail> {\n type: typeof PREVIEW_TIME_CHANGE_EVENT;\n}\n\nexport interface PreviewTimeChangeEventDetail {\n previewTime: number;\n}\n","import type { Ad } from 'theoplayer/chromeless';\n\nexport function isLinearAd(ad: Ad): boolean {\n return ad.type === 'linear';\n}\n","import { Button, type ButtonOptions } from './Button';\nimport { property, state } from 'lit/decorators.js';\nimport { Attribute } from '../util/Attribute';\nimport type { CastState, VendorCast } from 'theoplayer/chromeless';\n\n/**\n * A generic button to start and stop casting.\n *\n * For a concrete implementation, see {@link ChromecastButton} and {@link AirPlayButton}.\n * @group Components\n */\nexport class CastButton extends Button {\n private _castApi: VendorCast | undefined;\n private _castState: CastState = 'unavailable';\n\n constructor(options?: ButtonOptions) {\n super(options);\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this._updateCastState();\n }\n\n /**\n * The cast API for this cast button.\n */\n get castApi(): VendorCast | undefined {\n return this._castApi;\n }\n\n @state()\n set castApi(castApi: VendorCast | undefined) {\n if (this._castApi !== undefined) {\n this._castApi.removeEventListener('statechange', this._updateCastState);\n }\n this._castApi = castApi;\n this._updateCastState();\n if (this._castApi !== undefined) {\n this._castApi.addEventListener('statechange', this._updateCastState);\n }\n }\n\n /**\n * The current cast state.\n */\n get castState(): CastState {\n return this._castState;\n }\n\n @property({ reflect: true, state: true, type: String, attribute: Attribute.CAST_STATE })\n private set castState(castState: CastState) {\n this._castState = castState;\n }\n\n protected override handleClick(): void {\n if (this._castApi) {\n this._updateCastState();\n const state = this.castState;\n if (state === 'available') {\n this._castApi.start();\n } else if (state === 'connecting' || state === 'connected') {\n this._castApi.stop();\n }\n }\n }\n\n private readonly _updateCastState = (): void => {\n this.castState = this._castApi ? this._castApi.state : 'unavailable';\n };\n}\n","import { html } from 'lit';\n\nexport default (id: number) =>\n html`<span part=\"icon\">\n <svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\" height=\"24\" width=\"24\">\n <defs>\n <clipPath id=\"theoplayer-chromecast-rings-mask-${id}\">\n <path d=\"M0-36h44V0H0z\" />\n </clipPath>\n </defs>\n <path class=\"theoplayer-chromecast-outer\" d=\"M2 10a4 4 0 0 1 4-4h36a4 4 0 0 1 4 4v28a4 4 0 0 1-4 4H28v-4h14V10H6v6H2z\" />\n <path class=\"theoplayer-chromecast-inner\" d=\"M10 14h28v20H26.74A26 26 0 0 0 10 17.26z\" />\n <g\n class=\"theoplayer-chromecast-rings\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n transform=\"translate(2 42)\"\n clip-path=\"url(#theoplayer-chromecast-rings-mask-${id})\"\n >\n <circle stroke=\"none\" cx=\"0\" cy=\"0\" r=\"30\" />\n <circle class=\"theoplayer-chromecast-ring theoplayer-chromecast-ring1\" stroke-width=\"6\" cx=\"0\" cy=\"0\" r=\"3\" />\n <circle class=\"theoplayer-chromecast-ring theoplayer-chromecast-ring2\" cx=\"0\" cy=\"0\" r=\"12\" />\n <circle class=\"theoplayer-chromecast-ring theoplayer-chromecast-ring3\" cx=\"0\" cy=\"0\" r=\"20\" />\n <path class=\"theoplayer-chromecast-ring theoplayer-chromecast-ring4\" stroke-linecap=\"round\" d=\"M0-20A20 20 0 0 1 20 0\" />\n </g>\n </svg>\n </span>`;\n","import { html } from 'lit';\n\nexport default html`<span part=\"icon\">\n <svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\">\n <path class=\"theoplayer-airplay-inner\" d=\"M5 7h14v8H5z\" />\n <path d=\"M6 22h12l-6-6zM21 3H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h4v-2H3V5h18v12h-4v2h4c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\" />\n </svg>\n</span>`;\n","import { html } from 'lit';\n\nexport default html`<div part=\"icon\">\n <slot name=\"icon\">\n <div aria-hidden=\"true\" class=\"theoplayer-loading-progress\">\n <div class=\"theoplayer-loading-spinner\">\n <div class=\"theoplayer-loading-circle-clipper theoplayer-loading-circle-left\">\n <svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"24\" cy=\"24\" r=\"18\" fill=\"none\" stroke-dasharray=\"113.097\" stroke-dashoffset=\"56.549\" stroke-width=\"4\" />\n </svg>\n </div>\n <div class=\"theoplayer-loading-gap-patch\">\n <svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"24\" cy=\"24\" r=\"18\" fill=\"none\" stroke-dasharray=\"113.097\" stroke-dashoffset=\"56.549\" stroke-width=\"3.2\" />\n </svg>\n </div>\n <div class=\"theoplayer-loading-circle-clipper theoplayer-loading-circle-right\">\n <svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"24\" cy=\"24\" r=\"18\" fill=\"none\" stroke-dasharray=\"113.097\" stroke-dashoffset=\"56.549\" stroke-width=\"4\" />\n </svg>\n </div>\n </div>\n </div>\n </slot>\n</div>`;\n","import type { DefaultUI } from '../DefaultUI';\n\n/**\n * An extension for the default UI.\n *\n * This is called whenever a `<theoplayer-default-ui>` element is created.\n * The extension can then choose to modify this element, for example by appending extra elements\n * or attaching extra event listeners.\n *\n * @example\n * The following extension adds an extra button to the bottom control bar of every default UI:\n * ```javascript\n * THEOplayerUI.registerExtension((ui) => {\n * // Create a new button\n * const button = new THEOplayerUI.Button();\n * button.innerHTML = \"Click me!\";\n * button.addEventListener(\"click\", () => alert(\"I was clicked!\"));\n * // Place it in the bottom control bar\n * button.slot = \"bottom-control-bar\";\n * ui.appendChild(button);\n * });\n * ```\n * See the documentation of `<theoplayer-default-ui>` for more information about the available slots\n * in which you can add extra elements.\n */\nexport type Extension = (ui: DefaultUI) => void;\n\nconst extensionRegistry: Extension[] = [];\n\n/**\n * Registers an extension for the default UI.\n *\n * @param extension The extension.\n * @see {@link Extension}\n */\nexport function registerExtension(extension: Extension): void {\n extensionRegistry.push(extension);\n}\n\nexport function applyExtensions(ui: DefaultUI): void {\n for (const extension of extensionRegistry) {\n extension(ui);\n }\n}\n","export interface FullscreenAPIMap {\n requestFullscreen_: 'requestFullscreen';\n exitFullscreen_: 'exitFullscreen';\n fullscreenElement_: 'fullscreenElement';\n fullscreenEnabled_: 'fullscreenEnabled';\n fullscreenchange_: 'fullscreenchange';\n fullscreenerror_: 'fullscreenerror';\n}\n\nexport const fullscreenAPI: FullscreenAPIMap | undefined = (() => {\n if (typeof document === 'undefined') {\n return;\n }\n\n // browser API methods\n // map approach from Screenful.js - https://github.com/sindresorhus/screenfull.js\n const apiMap: string[][] = [\n // Spec: https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html\n ['requestFullscreen', 'exitFullscreen', 'fullscreenElement', 'fullscreenEnabled', 'fullscreenchange', 'fullscreenerror'],\n // WebKit\n [\n 'webkitRequestFullscreen',\n 'webkitExitFullscreen',\n 'webkitFullscreenElement',\n 'webkitFullscreenEnabled',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror'\n ],\n // Old WebKit (Safari 5.1)\n [\n 'webkitRequestFullScreen',\n 'webkitCancelFullScreen',\n 'webkitCurrentFullScreenElement',\n 'webkitCancelFullScreen',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror'\n ],\n // Mozilla\n ['mozRequestFullScreen', 'mozCancelFullScreen', 'mozFullScreenElement', 'mozFullScreenEnabled', 'mozfullscreenchange', 'mozfullscreenerror'],\n // Microsoft\n ['msRequestFullscreen', 'msExitFullscreen', 'msFullscreenElement', 'msFullscreenEnabled', 'MSFullscreenChange', 'MSFullscreenError']\n ];\n\n for (let browserMap of apiMap) {\n // check for exitFullscreen function\n if (browserMap[1] in document) {\n return {\n requestFullscreen_: browserMap[0],\n exitFullscreen_: browserMap[1],\n fullscreenElement_: browserMap[2],\n fullscreenEnabled_: browserMap[3],\n fullscreenchange_: browserMap[4],\n fullscreenerror_: browserMap[5]\n } as FullscreenAPIMap;\n }\n }\n\n return undefined;\n})();\n","/**\n * User-Agent Client Hints\n * https://wicg.github.io/ua-client-hints/\n */\ninterface NavigatorUA extends Navigator {\n readonly userAgentData: NavigatorUAData;\n}\n\ninterface NavigatorUAData {\n readonly mobile: boolean;\n}\n\nexport function isMobile(): boolean {\n if (typeof navigator !== 'object') {\n return false;\n }\n if ((navigator as NavigatorUA).userAgentData) {\n return (navigator as NavigatorUA).userAgentData.mobile;\n }\n const userAgent = navigator.userAgent;\n if (!userAgent) {\n return false;\n }\n return /Android|iPhone|iPad|iPod|Mobile Safari|Windows Phone/i.test(userAgent);\n}\n\nexport function isTv(): boolean {\n if (typeof navigator !== 'object') {\n return false;\n }\n const userAgent = navigator.userAgent;\n if (!userAgent) {\n return false;\n }\n return /\\b(tv|smart-tv|smarttv|appletv|crkey|googletv|hbbtv|pov_tv|roku|viera|nettv|philipstv)\\b/i.test(userAgent);\n}\n","export const USER_IDLE_CHANGE_EVENT = 'theoplayeruseridlechange' as const;\n\nexport interface UserIdleChangeEvent extends CustomEvent {\n type: typeof USER_IDLE_CHANGE_EVENT;\n}\n","export const READY_EVENT = 'theoplayerready' as const;\n\nexport interface ReadyEvent extends CustomEvent<undefined> {\n type: typeof READY_EVENT;\n}\n","import globalCss from './Global.css';\nimport { setTextContent } from './util/CommonUtils';\nimport { supportsAdoptingStyleSheets } from 'lit';\n\nconst GLOBAL_STYLE_ID = 'theoplayer-ui-global-styles';\n\nlet globalStylesAdded = false;\n\nexport function addGlobalStyles() {\n if (globalStylesAdded) {\n return;\n }\n if (supportsAdoptingStyleSheets) {\n document.adoptedStyleSheets.push(globalCss.styleSheet!);\n } else if (!document.getElementById(GLOBAL_STYLE_ID)) {\n const styleEl = document.createElement('style');\n styleEl.id = GLOBAL_STYLE_ID;\n // See https://lit.dev/docs/api/LitElement/#LitElement.styles\n const nonce = (window as any)['litNonce'];\n if (nonce !== undefined) {\n styleEl.setAttribute('nonce', nonce);\n }\n setTextContent(styleEl, globalCss.cssText);\n document.head.appendChild(styleEl);\n }\n globalStylesAdded = true;\n}\n","import type { StreamType } from '../util/StreamType';\n\nexport const STREAM_TYPE_CHANGE_EVENT = 'theoplayerstreamtypechange' as const;\n\nexport interface StreamTypeChangeEvent extends CustomEvent<StreamTypeChangeEventDetail> {\n type: typeof STREAM_TYPE_CHANGE_EVENT;\n}\n\nexport interface StreamTypeChangeEventDetail {\n streamType: StreamType;\n}\n","/**\n * The delay before we should start handling clicks\n * after the user becomes active again (in milliseconds).\n *\n * When the user is idle and then touches the player, that first touch\n * should not trigger any accidental clicks on UI controls. Therefore,\n * we will keep all UI controls inactive for a little bit longer\n * after that first touch, until this delay has passed.\n */\nexport const ACCIDENTAL_CLICK_DELAY = 50;\n","import { version as packageVersion } from '../package.json';\n\n/**\n * The version of Open Video UI for Web.\n */\nexport const version: string = packageVersion;\n"],"names":["_apply_decs_2203_r","targetClass","memberDecs","classDecs","parentClass","createAddInitializerMethod","initializers","decoratorFinishedRef","initializer","assertNotFinished","fnName","v","Error","assertCallable","push","memberDec","dec","name","desc","kind","isStatic","isPrivate","metadata","value","kindStr","get","set","ctx","static","private","addInitializer","call","access","fn","hint","TypeError","assertValidReturnValue","type","undefined","init","pushInitializers","ret","instance","i","length","defineMetadata","Class","Object","defineProperty","Symbol","for","configurable","enumerable","parentMetadata","create","e","applyMemberDecs","decInfos","existingProtoNonFields","Map","existingStaticNonFields","protoInitializers","staticInitializers","base","decInfo","Array","isArray","prototype","existingNonFields","existingKind","applyMemberDec","newValue","newInit","decs","getOwnPropertyDescriptor","ownInitializers","originalInitializer","args","c","applyClassDecs","newClass","nextNewClass","_identity","x","Attribute","KeyCode","ExtensionSlot","LitElement","href","_init_target","target","Button","paused","_init_ended","ended","_init_volumeLevel","volumeLevel","_init_seekOffset","seekOffset","_init_remaining","_init_remainingWhenLive","_init_showDuration","_init_streamType","_init__currentTime","_init__duration","_init__endTime","_endTime","_init_duration","duration","_init_value","_init_deviceType","deviceType","_init_closeOnInput","closeOnInput","_init__menuSlot","_menuSlot","_init__ariaControls","_ariaControls","RadioButton","_init__trackLabel","_trackLabel","_init__tracksList","_init_showOffButton","showOffButton","MenuGroup","_hasAudioTracks","_init__hasSubtitles","_hasSubtitles","MenuButton","Menu","_init_playbackRate","playbackRate","activeVideoQuality","_init_targetVideoQualities","targetVideoQualities","_init__qualityLabel","_qualityLabel","_init__track","_track","_init_fullscreen","fullscreen","_init__pointerWidth","_init_step","_init_ariaLive","ariaLive","_init__thumbnailVisible","_thumbnailVisible","previewTime","streamType","Range","_init__previewRailTransform","_previewRailTransform","error","CastButton","_init__receiverName","_receiverName","_init_loading","loading","_init_paused","_init_live","live","_init__text","_text","_init__maxRemainingDuration","_maxRemainingDuration","LinkButton","_showCountdown","_init__timeToSkip","_timeToSkip","_init__hasFirstPlay","_isPlayingAd","_hasError","_init__isFullWindow","_isFullWindow","_timeRangeInert","titleSlotNodes","_init_fluid","_init_muted","_init_autoplay","_init__hasTitle","_hasTitle","_init__inBadNetworkMode","_inBadNetworkMode","AbstractQualitySelector","DefaultUI","_init__announcementType","_announcementMessage","_hidePlayButton","_init__hideErrorDisplay","_hideErrorDisplay","customElement","ControlBar","render","html","styles","controlBarCss","shadowRootOptions","delegatesFocus","isArrowKey","keyCode","isBackKey","isActivationKey","buttonTemplate","button","extraCss","_class_private_field_loose_base","receiver","privateKey","hasOwnProperty","property","reflect","Boolean","attribute","DISABLED","connectedCallback","hasAttribute","setAttribute","ARIA_LIVE","_disabled","_enable","disconnectedCallback","removeEventListener","_onClick","_onKeyDown","_onKeyUp","disabled","_disable","addEventListener","removeAttribute","blur","_template","templateContent","handleClick","options","metaKey","altKey","template","performUpdate","buttonCss","id","_class_private_field_loose_key","linkButtonTemplate","_dec2","state","ref","_linkRef","renderLinkContent","createRef","event","SPACE","_this__linkRef_value","preventDefault","click","linkButtonCss","noOp","isElement","node","nodeType","Node","ELEMENT_NODE","isHTMLElement","HTMLElement","SlotContainer","slotContainerCss","arg","toString","fromArrayLike","from","arrayLike","slice","arrayFind","find","array","predicate","arrayFindIndex","findIndex","stringStartsWith","String","startsWith","string","search","substring","localizeLanguageName","Intl","DisplayNames","languageCode","displayNames","fallback","localName","of","locale","resolvedOptions","first","toLocaleUpperCase","_languageCode","toggleAttribute","element","enabled","getChildren","shadowRoot","children","toLowerCase","assignedNodes","filter","getSlottedElements","slot","elements","flatten","isSlotContainer","nodeName","getFocusableChildren","result","collectFocusableChildren","getComputedStyle","display","Number","getAttribute","tagName","upgradeCustomElementIfNeeded","elementName","indexOf","customElements","whenDefined","upgrade","StateReceiverProps","isStateReceiverElement","stateReceiver","props","_context","StateReceiverMixin","StateReceiver","forEachStateReceiverElement","playerElement","callback","contains","Promise","resolve","all","map","child","PLAYER_EVENTS","PAUSED","_dec3","ENDED","PlayButton","_updateFromPlayer","_updateAriaLabel","player","_player","_onPlay","_onPause","_updateEnded","_this__player","_this__player_ended","source","play","pause","attributeChangedCallback","attrName","oldValue","observedAttributes","label","ARIA_LABEL","unsafeSVG","_this__player_paused","_updateDisabled","playButtonCss","VOLUME_LEVEL","MuteButton","muted","volume","muteButtonCss","SEEK_OFFSET","SeekButton","isNaN","currentTime","Math","max","min","abs","DEFAULT_SEEK_OFFSET","seekButtonCss","isValidNumber","isFinite","formatTime","time","guide","preferNegative","timeParts","negative","guideMinutes","floor","guideHours","seconds","minutes","hours","showHours","showMinutesLeadingZero","timePhrase","part","join","timeUnitLabels","toTimeUnitPhrase","timeUnitValue","unitIndex","unitLabel","formatAsTimePhrase","negativeSuffix","REMAINING","_dec4","REMAINING_WHEN_LIVE","_dec5","SHOW_DURATION","_dec6","STREAM_TYPE","_dec7","TimeDisplay","remaining","remainingWhenLive","showDuration","_currentTime","_duration","text","ariaValueText","endTime","NaN","seekable","end","textDisplayCss","DurationDisplay","createEvent","supportsNativeEvent","Event","eventInitDict","document","initEvent","bubbles","cancelable","createCustomEvent","supportsNativeCustomEvent","CustomEvent","detail","foo","initCustomEvent","ARIA_CHECKED","converter","fromAttribute","toAttribute","VALUE","checked","_checked","handleChange","dispatchEvent","composed","Rectangle","left","right","width","top","y","bottom","height","fromRect","rect","overlaps","other","union","snapToPixels","round","clone","toJSON","getFocusedChild","focusedChild","getActiveElement","activeElement","nextActiveElement","body","navigateByArrowKey","container","key","keySelector","candidates","containerRect","getBoundingClientRect","focusedRect","childrenWithRects","LEFT","RIGHT","bounds","UP","closestCandidate","a","b","distance","arrayMinBy","comparator","reduce","second","focus","DEVICE_TYPE","RadioGroup","_onSlotChange","firstUpdated","createRenderRoot","root","_onButtonChange","_value","updateCheckedButton","focusedRadioButton","_radioButtons","tabIndex","checkedRadioButton","firstRadioButton","_this__radioButtons_","lastRadioButton","radioButtons","allRadioButtons","_prevRadioButton","index","_nextRadioButton","_focusPrevButton","focusedButton","setFocusedRadioButton","_focusNextButton","_unfocusAll","setCheckedRadioButton","checkedButton","_slotRef","upgradePromises","isRadioButton","promise","then","_this_firstRadioButton","stopPropagation","DOWN","HOME","END","CLOSE_MENU_EVENT","MENU_CHANGE_EVENT","menuTemplate","heading","content","MENU_CLOSE_ON_INPUT","MENU_OPENED","menuOpened_","HIDDEN","_menuOpened","menuOpened","changeEvent","openMenu","closeMenu","renderMenuHeading","_onContentInput","renderMenuContent","menuCss","TOGGLE_MENU_EVENT","menuGroupTemplate","isMenuElement","query","_onToggleMenu","_onCloseMenu","_onMenuChange","_onMenuListChange","getMenuById","menuId","_menus","menu","opener","menuToOpen","previousEntry","getCurrentMenu_","_openMenuStack","entry","closeMenusFromIndex_","oldEntry","_this__openMenuStack_","menuToClose","nextEntry","menusToClose","splice","hasCurrentMenu","closeCurrentMenu","currentMenu","isMenuOpen","some","newMenus","oldMenu","newMenu","rawEvent","menuGroupCss","MENU","_menuId","CloseMenuButton","TRACK_EVENTS","_dec1","MediaTrackRadioButton","track","_onTrackChange","_updateFromTrack","getTrackLabel","language","localizedLanguageName","_updateTrack","isSubtitleTrack","isNonForcedSubtitleTrack","forced","getTargetQualities","videoTrack","targetQualities","targetQuality","formatQualityLabel","quality","bandwidth","formatBandwidth","toFixed","TRACK_TYPE","SHOW_OFF","TrackRadioGroup","_tracksList","trackType","_trackType","_updateTracksList","_updateTracks","_getTracksList","audioTracks","videoTracks","textTracks","oldList","newList","_getTracks","tracks","isSubtitles","_onChange","repeat","uid","requestUpdate","verticalRadioGroupCss","TextTrackRadioButton","test","captionChannel","mode","TextTrackOffRadioButton","trackList","_trackList","_updateFromTrackList","_updateTrackList","disableSubtitleTracks","parseColor","colorString","parseRgbaColor","m","rgbaString","match","r_","parseInt","g_","b_","a_","parseFloat","parseHexColor","hex","toRgba","color","toRgb","colorWithAlpha","alpha","COLOR_WHITE","COLOR_BLACK","knownColors","knownFontFamilies","knownEdgeStyles","PROPERTY","TextTrackStyleDisplay","_property","_this__textTrackStyle","_this__textTrackStyle1","_textTrackStyle","textTrackStyle","renderValue","fontFamily","knownFontFamily","_","getColorLabel","parsedColor","colorRgb","knownColor","getOpacityLabel","fontColor","backgroundColor","windowColor","edgeStyle","knownEdgeStyle","updateColor","colorValue","previousColor","defaultColor","updateOpacity","opacityValue","TextTrackStyleRadioGroup","radioGroup","_radioGroupRef","_updateToPlayer","_this__player_textTrackStyle_this_property","colorOptions","fontFamilyOptions","sizeOptions","opacityOptions","edgeStyleOptions","TextTrackStyleMenu","menuTableCss","textTrackStyleMenuCss","HAS_AUDIO","HAS_SUBTITLES","LanguageMenu","_this__audioTrackList","_this__textTrackList","_this__audioTrackList1","_this__textTrackList1","_audioTrackList","_updateAudioTracks","_textTrackList","_updateTextTracks","_this__player_audioTracks","newAudioTracks","_this__player_textTracks_filter","newSubtitleTracks","languageMenuCss","LanguageMenuButton","hasTracks","PlaybackRateRadioGroup","PlaybackRateMenuButton","PLAYBACK_RATES","PlaybackRateMenu","rate","PlaybackRateDisplay","ActiveQualityDisplay","hasSingleTargetQuality","qualityLabel","QUALITY_EVENTS","QualityRadioButton","_quality","_updateFromQuality","_updateTargetQuality","QualityRadioGroup","_this__videoTracks","_this__videoTracks1","_videoTracks","qualities","_this__track","_this__track1","_update","TextTrackStyleResetButton","fontSize","SettingsMenu","SettingsMenuButton","settingsIcon","ENTER_FULLSCREEN_EVENT","EXIT_FULLSCREEN_EVENT","styleSubtree","properties","window","ShadyCSS","nativeCss","setProperties","style","propertyName","entries","setProperty","FULLSCREEN","FullscreenButton","fullscreenButtonCss","ColorStops","add","to","previousIndex","_stops","percent","previousPercent","newStops","nextIndex","toGradientStops","gradientStops","prevPercent","INERT","_dec8","_dec9","_dec10","_pointerWidth","step","_updateRange","_updatePointerBar","hidden","_hidden","inert","_inert","handleInput","_min","_max","useCachedWidth","updateCachedWidths_","updateBar_","getBarColors","shadyCss","rangePercent","relativeValue","thumbPercent","thumbOffset","_thumbWidth","_rangeWidth","stops","_this__rangeRef_value","_this__rangeRef_value_offsetWidth","rangeWidth","_rangeRef","offsetWidth","thumbWidth","getPropertyValue","getMinimumStepForVisibleChange_","relativeMax","updatePointer_","mousePercent","rangeRect","handleKeyDown_","styleMap","getAriaLabel","getAriaValueText","_onInput","renderRangeExtras","valueAsNumber","rangeEl","clientX","rangeCss","PREVIEW_TIME_CHANGE_EVENT","isLinearAd","ad","isThumbnailTextTrack","PreviewThumbnail","_updateThumbnailTextTrack","_previewTime","updateThumbnail_","_thumbnailTextTrack","hideThumbnail_","cue","getCueAtTime","cues","startTime","trim","sprite","parseSpriteUrl","spriteUrl","url","w","h","thumbnailUrl","URL","src","location","_lastLoadedThumbnailUrl","loadThumbnailImage_","showThumbnail_","_thumbnailImageSource","onLoad","decode","onload","canvas","_canvasRef","_canvasContext","getContext","drawImage","naturalWidth","naturalHeight","canvasStyle","oldTrack","newTrack","createElement","decoding","previewThumbnailCss","PreviewTimeDisplay","UPDATE_EVENTS","AUTO_ADVANCE_EVENTS","AD_EVENTS","SHOW_AD_MARKERS","TimeRange","_toggleAutoAdvance","_changedProperties","_this__rangeRef_value1","_pauseOnScrubStart","_this__ads","_this__ads1","_ads","_onAdChange","ads","_streamType","updateDisabled_","showAdMarkers","_showAdMarkers","currentTimePhrase","totalTimePhrase","shouldAutoAdvance_","isConnected","errorObject","readyState","_lastCurrentTime","needToUpdateEveryFrame_","minimumStep","_lastPlaybackRate","previewPos","previewBoxEl","_previewBoxEl","previewBoxRect","previewPosFraction","previewTimeChangeEvent","colorStops","playing","adBreak","scheduledAdBreaks","adBreakTime","timeOffset","adBreakFrom","adBreakTo","adBreakPercent","ENTER","transform","_pausedWhileScrubbing","_autoAdvanceId","_lastUpdateTime","performance","now","start","isLive","Infinity","_playOnScrubEnd","requestAnimationFrame","_autoAdvanceWhilePlaying","cancelAnimationFrame","delta","timeRangeCss","VolumeRange","ErrorDisplay","_this_error","_this_error_message","message","errorDisplayCss","CAST_STATE","_updateCastState","castApi","_castApi","castState","_castState","stop","chromecastButtonId","ChromecastButton","cast","chromecast","_buttonId","chromecastButtonCss","CAST_EVENTS","ChromecastDisplay","_this__player_cast","receiverName","chromecastDisplayCss","airPlayButtonHtml","AirPlayButton","airplay","airPlayButtonCss","loadingIndicatorHtml","LOADING","LoadingIndicator","seeking","loadingIndicatorCss","GestureReceiver","_playerElement","_onPointerDown","handleTap","_event","handleMouseClick","_this__player_ads","_pointerType","pointerType","_event_pointerType","gestureReceiverCss","PAUSED_EVENTS","LIVE_EVENTS","LIVE_THRESHOLD","useDefault","LIVE","LiveButton","liveThreshold","_liveThreshold","_updateLive","_updatePaused","hesp","manifest","goLive","DEFAULT_LIVE_THRESHOLD","threshold","liveButtonCss","AdDisplay","linearAds","currentAdBreak","currentLinearAd","currentAds","currentAdIndex","adDisplayCss","AdCountdown","_this__player1","maxRemainingDuration","ceil","adCountdownCss","CLICKTHROUGH","AdClickThroughButton","clickThrough","_clickThrough","linearAd","integration","AdSkipButton","skip","countdownStyles","visibility","skipStyles","pointerEvents","skipOffset","adSkipButtonCss","extensionRegistry","registerExtension","extension","fullscreenAPI","browserMap","requestFullscreen_","exitFullscreen_","fullscreenElement_","fullscreenEnabled_","fullscreenchange_","fullscreenerror_","isMobile","navigator","userAgentData","mobile","userAgent","isTv","USER_IDLE_CHANGE_EVENT","READY_EVENT","GLOBAL_STYLE_ID","globalStylesAdded","FULL_WINDOW_ROOT_CLASS","getVisibleRect","opacity","childRect","CONFIGURATION","JSON","parse","SOURCE","FLUID","MUTED","AUTOPLAY","CASTING","USER_IDLE","_dec11","USER_IDLE_TIMEOUT","_dec12","_dec13","_dec14","DVR_THRESHOLD","_dec15","HAS_FIRST_PLAY","_dec16","PLAYING_AD","_dec17","HAS_ERROR","_dec18","FULLWINDOW","_dec19","UIContainer","_hasFirstPlay","configuration","_configuration","playerConfiguration","_setConfiguration","tryInitializePlayer_","_source","_setSource","fluid","_fluid","_updateAspectRatio","_muted","autoplay","_autoplay","_fullscreen","_stateReceivers","_paused","_updateTextTrackMargins","updateUserIdle_","_ended","casting","_casting","userIdle","_userIdle","userIdleTimeout","_this__userIdleTimeout","_userIdleTimeout","_deviceType","MOBILE","TV","_onTvKeyDown","streamTypeChangeEvent","dvrThreshold","_dvrThreshold","_updateStreamType","_this__resizeObserver","supportsAdoptingStyleSheets","adoptedStyleSheets","globalCss","styleSheet","getElementById","styleEl","nonce","cssText","el","textContent","innerText","head","appendChild","propagateStateToReceiver_","_mutationObserver","observe","childList","subtree","_resizeObserver","_onFullscreenChange","setUserIdle_","_exitFullscreenOnEsc","_onPointerUp","_onPointerMove","_onMouseLeave","_playerRef","license","licenseUrl","ChromelessPlayer","_updateError","_updatePausedAndEnded","_updateCasting","addPlayerListeners_","propagatePlayerToAllReceivers_","_onEnterFullscreen","_onExitFullscreen","_onPreviewTimeChange","_menuGroupRef","registerStateReceiver_","disconnect","_onClickAfterPointerUp","removePlayerListeners_","destroy","receiverProps","_this__activeVideoTrack","_activeVideoTrack","activeQuality","removeStateFromReceiver_","openMenu_","topChromeRect","_topChromeRef","bottomChromeRect","_bottomChromeRef","alignBottom","alignRight","playerRect","openerRect","_menuOpener","closeMenu_","_this__menuGroupRef_value_closeMenu","_this__menuGroupRef_value","_this__menuOpener","computeStreamType_","dvr","dvrWindow","isUserIdle_","_isUserActive","setUserActive_","clearTimeout","_userIdleTimer","isPlayerOrMedia_","_onDestroy","_updateMuted","_updatePlaybackRate","_onSourceChange","_updatePlayingAd","theoLive","_updateActiveVideoTrack","_topChromeSlotRef","_onChromeSlotTransition","_bottomChromeSlotRef","_menuRef","_lastPointerUpTime","_onMutation","mutations","mutation","addedNodes","removedNodes","unregisterStateReceiver_","arrayRemove","menuGroup","console","menuEl","_onMenuPointerDown","_onMenuClick","_this__configuration_ui","_this__configuration","navigationUI","ui","fullscreenOptions","presentation","supportsMode","requestMode","documentElement","classList","currentMode","remove","isFullscreen","fullscreenElement","containsComposedNode","rootNode","childNode","childRoot","getRootNode","host","ESCAPE","videoWidth","videoHeight","activeVideoTrack","_this__activeVideoTrack1","_this__activeVideoTrack2","_this__activeVideoTrack3","_updateActiveVideoQuality","_updateTargetVideoQualities","_this__player_cast_casting","_this__player_ads_playing","scheduleUserIdle_","setTimeout","tvFocusChildren","getTvFocusChildren","TV_FOCUS","focusableChildren","marginTop","marginBottom","MutationObserver","ResizeObserver","elementCss","queryAssignedNodes","_this__uiRef_value","_uiRef","showCountdown","_appliedExtensions","_onTitleSlotChange","_timeRangeInertTimeout","_onUiReady","_updateUserIdle","renderUiContent","DEFAULT_DVR_THRESHOLD","defaultUiCss","BadNetworkModeButton","_theoLive","handleEnterBadNetworkMode_","handleExitBadNetworkMode_","warningStyles","badNetworkModeButtonCss","_this__theoLive","_this__theoLive_badNetworkMode","_badNetworkMode","badNetworkMode","handlePlayer","handleEnterBadNetworkMode","handleExitBadNetworkMode","AutomaticQualitySelector","update_","_this_player_theoLive","_this_player","newChecked","BadNetworkModeSelector","BadNetworkModeMenu","THEOliveDefaultUI","_announcementType","onLoadChannelStart","onChannelOffline","onChannelLoaded","onError","hidePlayerError","stopHidingPlayerError","showMessage_","hideMessage_","loadingStyles","offlineStyles","announcementStyles","playButtonStyles","errorDisplayStyles","errorCode","code","css","version"],"mappings":"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","x_google_ignoreList":[0,1,64,65,80]}
|
|
1
|
+
{"version":3,"file":"THEOplayerUI.mjs","sources":["../node_modules/@swc/helpers/esm/_apply_decs_2203_r.js","../node_modules/@swc/helpers/esm/_identity.js","../src/util/Attribute.ts","../src/util/KeyCode.ts","../src/extensions/ExtensionSlot.ts","../src/components/ControlBar.ts","../src/components/Button.ts","../src/components/LinkButton.ts","../src/components/SlotContainer.ts","../src/components/PlayButton.ts","../src/components/MuteButton.ts","../src/components/SeekButton.ts","../src/components/TimeDisplay.ts","../src/components/DurationDisplay.ts","../src/components/RadioButton.ts","../src/components/RadioGroup.ts","../src/components/Menu.ts","../src/components/MenuGroup.ts","../src/components/MenuButton.ts","../src/components/CloseMenuButton.ts","../src/components/MediaTrackRadioButton.ts","../src/components/TrackRadioGroup.ts","../src/components/TextTrackRadioButton.ts","../src/components/TextTrackOffRadioButton.ts","../src/components/TextTrackStyleDisplay.ts","../src/components/TextTrackStyleRadioGroup.ts","../src/components/TextTrackStyleMenu.ts","../src/components/LanguageMenu.ts","../src/components/LanguageMenuButton.ts","../src/components/PlaybackRateRadioGroup.ts","../src/components/PlaybackRateMenuButton.ts","../src/components/PlaybackRateMenu.ts","../src/components/PlaybackRateDisplay.ts","../src/components/ActiveQualityDisplay.ts","../src/components/QualityRadioButton.ts","../src/components/QualityRadioGroup.ts","../src/components/TextTrackStyleResetButton.ts","../src/components/SettingsMenu.ts","../src/components/SettingsMenuButton.ts","../src/components/FullscreenButton.ts","../src/components/Range.ts","../src/components/PreviewThumbnail.ts","../src/components/PreviewTimeDisplay.ts","../src/components/TimeRange.ts","../src/components/VolumeRange.ts","../src/components/ErrorDisplay.ts","../src/components/ChromecastButton.ts","../src/components/ChromecastDisplay.ts","../src/components/AirPlayButton.ts","../src/components/LoadingIndicator.ts","../src/components/GestureReceiver.ts","../src/components/LiveButton.ts","../src/components/ads/AdDisplay.ts","../src/components/ads/AdCountdown.ts","../src/components/ads/AdClickThroughButton.ts","../src/components/ads/AdSkipButton.ts","../src/UIContainer.ts","../src/DefaultUI.ts","../src/components/theolive/quality/BadNetworkModeButton.ts","../src/components/theolive/quality/AbstractQualitySelector.ts","../src/components/theolive/quality/AutomaticQualitySelector.ts","../src/components/theolive/quality/BadNetworkModeSelector.ts","../src/components/theolive/quality/BadNetworkModeMenu.ts","../src/THEOliveDefaultUI.ts","../node_modules/@swc/helpers/esm/_class_private_field_loose_base.js","../node_modules/@swc/helpers/esm/_class_private_field_loose_key.js","../src/util/CommonUtils.ts","../src/components/StateReceiverMixin.ts","../src/util/TimeUtils.ts","../src/util/EventUtils.ts","../src/util/GeometryUtils.ts","../src/util/KeyboardNavigation.ts","../src/events/CloseMenuEvent.ts","../src/events/MenuChangeEvent.ts","../src/events/ToggleMenuEvent.ts","../src/util/TrackUtils.ts","../src/util/ColorUtils.ts","../src/util/TextTrackStylePresets.ts","../src/events/EnterFullscreenEvent.ts","../src/events/ExitFullscreenEvent.ts","../node_modules/@webcomponents/shadycss/src/interface.js","../src/util/ColorStops.ts","../src/events/PreviewTimeChangeEvent.ts","../src/util/AdUtils.ts","../src/components/CastButton.ts","../src/components/ChromecastButton.html.ts","../src/components/AirPlayButton.html.ts","../src/components/LoadingIndicator.html.ts","../src/extensions/ExtensionRegistry.ts","../src/util/FullscreenUtils.ts","../src/util/Environment.ts","../src/events/UserIdleChangeEvent.ts","../src/events/ReadyEvent.ts","../src/Global.ts","../src/events/StreamTypeChangeEvent.ts","../src/util/Constants.ts","../src/version.ts"],"sourcesContent":["/* @minVersion 7.20.0 */\n\n/**\n Enums are used in this file, but not assigned to vars to avoid non-hoistable values\n\n CONSTRUCTOR = 0;\n PUBLIC = 1;\n PRIVATE = 2;\n\n FIELD = 0;\n ACCESSOR = 1;\n METHOD = 2;\n GETTER = 3;\n SETTER = 4;\n\n STATIC = 5;\n\n CLASS = 10; // only used in assertValidReturnValue\n*/\n\nfunction _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {\n function createAddInitializerMethod(initializers, decoratorFinishedRef) {\n return function addInitializer(initializer) {\n assertNotFinished(decoratorFinishedRef, \"addInitializer\");\n assertCallable(initializer, \"An initializer\");\n initializers.push(initializer);\n };\n }\n\n function memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value) {\n var kindStr;\n\n switch (kind) {\n case 1 /* ACCESSOR */:\n kindStr = \"accessor\";\n break;\n case 2 /* METHOD */:\n kindStr = \"method\";\n break;\n case 3 /* GETTER */:\n kindStr = \"getter\";\n break;\n case 4 /* SETTER */:\n kindStr = \"setter\";\n break;\n default:\n kindStr = \"field\";\n }\n\n var ctx = { kind: kindStr, name: isPrivate ? \"#\" + name : name, static: isStatic, private: isPrivate, metadata: metadata };\n\n var decoratorFinishedRef = { v: false };\n\n ctx.addInitializer = createAddInitializerMethod(initializers, decoratorFinishedRef);\n\n var get, set;\n if (kind === 0 /* FIELD */) {\n if (isPrivate) {\n get = desc.get;\n set = desc.set;\n } else {\n get = function() {\n return this[name];\n };\n set = function(v) {\n this[name] = v;\n };\n }\n } else if (kind === 2 /* METHOD */) {\n get = function() {\n return desc.value;\n };\n } else {\n // replace with values that will go through the final getter and setter\n if (kind === 1 /* ACCESSOR */ || kind === 3 /* GETTER */) {\n get = function() {\n return desc.get.call(this);\n };\n }\n\n if (kind === 1 /* ACCESSOR */ || kind === 4 /* SETTER */) {\n set = function(v) {\n desc.set.call(this, v);\n };\n }\n }\n\n if (get) {\n var originalGet = get;\n get = function(target) {\n if (arguments.length === 0) {\n target = this;\n }\n return originalGet.call(target);\n };\n }\n\n if (set) {\n var originalSet = set;\n set = function(target, value) {\n if (arguments.length === 1) {\n value = target;\n target = this;\n }\n return originalSet.call(target, value);\n };\n }\n\n if (isPrivate) {\n ctx.access = get && set ? { get: get, set: set } : get ? { get: get } : { set: set };\n } else {\n var has = function(target) {\n return name in target;\n };\n ctx.access = get && set ? { has: has, get: get, set: set } : get ? { has: has, get: get } : { has: has, set: set };\n }\n\n var newValue = dec(value, ctx);\n decoratorFinishedRef.v = true;\n return newValue;\n }\n\n function assertNotFinished(decoratorFinishedRef, fnName) {\n if (decoratorFinishedRef.v) {\n throw new Error(\"attempted to call \" + fnName + \" after decoration was finished\");\n }\n }\n\n function assertCallable(fn, hint) {\n if (typeof fn !== \"function\") {\n throw new TypeError(hint + \" must be a function\");\n }\n }\n\n function assertValidReturnValue(kind, value) {\n var type = typeof value;\n\n if (kind === 1 /* ACCESSOR */) {\n if (type !== \"object\" || value === null) {\n throw new TypeError(\"accessor decorators must return an object with get, set, or init properties or void 0\");\n }\n if (value.get !== undefined) {\n assertCallable(value.get, \"accessor.get\");\n }\n if (value.set !== undefined) {\n assertCallable(value.set, \"accessor.set\");\n }\n if (value.init !== undefined) {\n assertCallable(value.init, \"accessor.init\");\n }\n } else if (type !== \"function\") {\n var hint;\n if (kind === 0 /* FIELD */) {\n hint = \"field\";\n } else if (kind === 10 /* CLASS */) {\n hint = \"class\";\n } else {\n hint = \"method\";\n }\n throw new TypeError(hint + \" decorators must return a function or void 0\");\n }\n }\n\n function applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata) {\n var decs = decInfo[0];\n\n var desc, init, value;\n\n if (isPrivate) {\n if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) {\n desc = { get: decInfo[3], set: decInfo[4] };\n } else if (kind === 3 /* GETTER */) {\n desc = { get: decInfo[3] };\n } else if (kind === 4 /* SETTER */) {\n desc = { set: decInfo[3] };\n } else {\n desc = { value: decInfo[3] };\n }\n } else if (kind !== 0 /* FIELD */) {\n desc = Object.getOwnPropertyDescriptor(base, name);\n }\n\n if (kind === 1 /* ACCESSOR */) {\n value = { get: desc.get, set: desc.set };\n } else if (kind === 2 /* METHOD */) {\n value = desc.value;\n } else if (kind === 3 /* GETTER */) {\n value = desc.get;\n } else if (kind === 4 /* SETTER */) {\n value = desc.set;\n }\n\n var newValue, get, set;\n\n if (typeof decs === \"function\") {\n newValue = memberDec(decs, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);\n\n if (newValue !== void 0) {\n assertValidReturnValue(kind, newValue);\n\n if (kind === 0 /* FIELD */) {\n init = newValue;\n } else if (kind === 1 /* ACCESSOR */) {\n init = newValue.init;\n get = newValue.get || value.get;\n set = newValue.set || value.set;\n\n value = { get: get, set: set };\n } else {\n value = newValue;\n }\n }\n } else {\n for (var i = decs.length - 1; i >= 0; i--) {\n var dec = decs[i];\n\n newValue = memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);\n\n if (newValue !== void 0) {\n assertValidReturnValue(kind, newValue);\n var newInit;\n\n if (kind === 0 /* FIELD */) {\n newInit = newValue;\n } else if (kind === 1 /* ACCESSOR */) {\n newInit = newValue.init;\n get = newValue.get || value.get;\n set = newValue.set || value.set;\n\n value = { get: get, set: set };\n } else {\n value = newValue;\n }\n\n if (newInit !== void 0) {\n if (init === void 0) {\n init = newInit;\n } else if (typeof init === \"function\") {\n init = [init, newInit];\n } else {\n init.push(newInit);\n }\n }\n }\n }\n }\n\n if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) {\n if (init === void 0) {\n // If the initializer was void 0, sub in a dummy initializer\n init = function(instance, init) {\n return init;\n };\n } else if (typeof init !== \"function\") {\n var ownInitializers = init;\n\n init = function(instance, init) {\n var value = init;\n\n for (var i = 0; i < ownInitializers.length; i++) value = ownInitializers[i].call(instance, value);\n\n return value;\n };\n } else {\n var originalInitializer = init;\n\n init = function(instance, init) {\n return originalInitializer.call(instance, init);\n };\n }\n\n ret.push(init);\n }\n\n if (kind !== 0 /* FIELD */) {\n if (kind === 1 /* ACCESSOR */) {\n desc.get = value.get;\n desc.set = value.set;\n } else if (kind === 2 /* METHOD */) {\n desc.value = value;\n } else if (kind === 3 /* GETTER */) {\n desc.get = value;\n } else if (kind === 4 /* SETTER */) {\n desc.set = value;\n }\n\n if (isPrivate) {\n if (kind === 1 /* ACCESSOR */) {\n ret.push(function(instance, args) {\n return value.get.call(instance, args);\n });\n ret.push(function(instance, args) {\n return value.set.call(instance, args);\n });\n } else if (kind === 2 /* METHOD */) {\n ret.push(value);\n } else {\n ret.push(function(instance, args) {\n return value.call(instance, args);\n });\n }\n } else {\n Object.defineProperty(base, name, desc);\n }\n }\n }\n\n function applyMemberDecs(Class, decInfos, metadata) {\n var ret = [];\n var protoInitializers;\n var staticInitializers;\n\n var existingProtoNonFields = new Map();\n var existingStaticNonFields = new Map();\n\n for (var i = 0; i < decInfos.length; i++) {\n var decInfo = decInfos[i];\n\n // skip computed property names\n if (!Array.isArray(decInfo)) continue;\n\n var kind = decInfo[1];\n var name = decInfo[2];\n var isPrivate = decInfo.length > 3;\n\n var isStatic = kind >= 5; /* STATIC */\n var base;\n var initializers;\n\n if (isStatic) {\n base = Class;\n kind = kind - 5 /* STATIC */;\n // initialize staticInitializers when we see a non-field static member\n staticInitializers = staticInitializers || [];\n initializers = staticInitializers;\n } else {\n base = Class.prototype;\n // initialize protoInitializers when we see a non-field member\n protoInitializers = protoInitializers || [];\n initializers = protoInitializers;\n }\n\n if (kind !== 0 /* FIELD */ && !isPrivate) {\n var existingNonFields = isStatic ? existingStaticNonFields : existingProtoNonFields;\n\n var existingKind = existingNonFields.get(name) || 0;\n\n if (existingKind === true || (existingKind === 3 /* GETTER */ && kind !== 4) /* SETTER */ || (existingKind === 4 /* SETTER */ && kind !== 3) /* GETTER */) {\n throw new Error(\n \"Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: \"\n + name\n );\n } else if (!existingKind && kind > 2 /* METHOD */) {\n existingNonFields.set(name, kind);\n } else {\n existingNonFields.set(name, true);\n }\n }\n\n applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata);\n }\n\n pushInitializers(ret, protoInitializers);\n pushInitializers(ret, staticInitializers);\n return ret;\n }\n\n function pushInitializers(ret, initializers) {\n if (initializers) {\n ret.push(function(instance) {\n for (var i = 0; i < initializers.length; i++) initializers[i].call(instance);\n return instance;\n });\n }\n }\n\n function applyClassDecs(targetClass, classDecs, metadata) {\n if (classDecs.length > 0) {\n var initializers = [];\n var newClass = targetClass;\n var name = targetClass.name;\n\n for (var i = classDecs.length - 1; i >= 0; i--) {\n var decoratorFinishedRef = { v: false };\n\n var nextNewClass = classDecs[i](newClass, { kind: \"class\", name: name, addInitializer: createAddInitializerMethod(initializers, decoratorFinishedRef), metadata });\n decoratorFinishedRef.v = true;\n\n if (nextNewClass !== undefined) {\n assertValidReturnValue(10, /* CLASS */ nextNewClass);\n newClass = nextNewClass;\n }\n }\n\n return [defineMetadata(newClass, metadata), function() {\n for (var i = 0; i < initializers.length; i++) initializers[i].call(newClass);\n }];\n }\n // The transformer will not emit assignment when there are no class decorators,\n // so we don't have to return an empty array here.\n }\n\n function defineMetadata(Class, metadata) {\n return Object.defineProperty(Class, Symbol.metadata || Symbol.for(\"Symbol.metadata\"), { configurable: true, enumerable: true, value: metadata });\n }\n\n /**\n Basic usage:\n\n applyDecs(\n Class,\n [\n // member decorators\n [\n dec, // dec or array of decs\n 0, // kind of value being decorated\n 'prop', // name of public prop on class containing the value being decorated,\n '#p', // the name of the private property (if is private, void 0 otherwise),\n ]\n ],\n [\n // class decorators\n dec1, dec2\n ]\n )\n ```\n\n Fully transpiled example:\n\n ```js\n @dec\n class Class {\n @dec\n a = 123;\n\n @dec\n #a = 123;\n\n @dec\n @dec2\n accessor b = 123;\n\n @dec\n accessor #b = 123;\n\n @dec\n c() { console.log('c'); }\n\n @dec\n #c() { console.log('privC'); }\n\n @dec\n get d() { console.log('d'); }\n\n @dec\n get #d() { console.log('privD'); }\n\n @dec\n set e(v) { console.log('e'); }\n\n @dec\n set #e(v) { console.log('privE'); }\n }\n\n\n // becomes\n let initializeInstance;\n let initializeClass;\n\n let initA;\n let initPrivA;\n\n let initB;\n let initPrivB, getPrivB, setPrivB;\n\n let privC;\n let privD;\n let privE;\n\n let Class;\n class _Class {\n static {\n let ret = applyDecs(\n this,\n [\n [dec, 0, 'a'],\n [dec, 0, 'a', (i) => i.#a, (i, v) => i.#a = v],\n [[dec, dec2], 1, 'b'],\n [dec, 1, 'b', (i) => i.#privBData, (i, v) => i.#privBData = v],\n [dec, 2, 'c'],\n [dec, 2, 'c', () => console.log('privC')],\n [dec, 3, 'd'],\n [dec, 3, 'd', () => console.log('privD')],\n [dec, 4, 'e'],\n [dec, 4, 'e', () => console.log('privE')],\n ],\n [\n dec\n ]\n )\n\n initA = ret[0];\n\n initPrivA = ret[1];\n\n initB = ret[2];\n\n initPrivB = ret[3];\n getPrivB = ret[4];\n setPrivB = ret[5];\n\n privC = ret[6];\n\n privD = ret[7];\n\n privE = ret[8];\n\n initializeInstance = ret[9];\n\n Class = ret[10]\n\n initializeClass = ret[11];\n }\n\n a = (initializeInstance(this), initA(this, 123));\n\n #a = initPrivA(this, 123);\n\n #bData = initB(this, 123);\n get b() { return this.#bData }\n set b(v) { this.#bData = v }\n\n #privBData = initPrivB(this, 123);\n get #b() { return getPrivB(this); }\n set #b(v) { setPrivB(this, v); }\n\n c() { console.log('c'); }\n\n #c(...args) { return privC(this, ...args) }\n\n get d() { console.log('d'); }\n\n get #d() { return privD(this); }\n\n set e(v) { console.log('e'); }\n\n set #e(v) { privE(this, v); }\n }\n\n initializeClass(Class);\n */\n\n _apply_decs_2203_r = function(targetClass, memberDecs, classDecs, parentClass) {\n if (parentClass !== void 0) {\n var parentMetadata = parentClass[Symbol.metadata || Symbol.for(\"Symbol.metadata\")];\n }\n var metadata = Object.create(parentMetadata === void 0 ? null : parentMetadata);\n var e = applyMemberDecs(targetClass, memberDecs, metadata);\n if (!classDecs.length) defineMetadata(targetClass, metadata);\n return {\n e: e,\n // Lazily apply class decorations so that member init locals can be properly bound.\n get c() {\n return applyClassDecs(targetClass, classDecs, metadata);\n }\n };\n };\n\n return _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass);\n}\n\nexport { _apply_decs_2203_r as _ };\n","function _identity(x) {\n return x;\n}\n\nexport { _identity as _ };\n","export enum Attribute {\n CONFIGURATION = 'configuration',\n SOURCE = 'source',\n AUTOPLAY = 'autoplay',\n MUTED = 'muted',\n FULLSCREEN = 'fullscreen',\n FULLWINDOW = 'fullwindow',\n FLUID = 'fluid',\n DEVICE_TYPE = 'device-type',\n MOBILE = 'mobile',\n TV = 'tv',\n TV_FOCUS = 'tv-focus',\n MOBILE_ONLY = 'mobile-only',\n MOBILE_HIDDEN = 'mobile-hidden',\n TV_ONLY = 'tv-only',\n TV_HIDDEN = 'tv-hidden',\n USER_IDLE = 'user-idle',\n USER_IDLE_TIMEOUT = 'user-idle-timeout',\n NO_AUTO_HIDE = 'no-auto-hide',\n DISABLED = 'disabled',\n INERT = 'inert',\n HIDDEN = 'hidden',\n PAUSED = 'paused',\n ENDED = 'ended',\n VOLUME_LEVEL = 'volume-level',\n CASTING = 'casting',\n LOADING = 'loading',\n STREAM_TYPE = 'stream-type',\n LIVE = 'live',\n LIVE_ONLY = 'live-only',\n LIVE_HIDDEN = 'live-hidden',\n LIVE_THRESHOLD = 'live-threshold',\n DVR_THRESHOLD = 'dvr-threshold',\n REMAINING = 'remaining',\n REMAINING_WHEN_LIVE = 'remaining-when-live',\n SHOW_DURATION = 'show-duration',\n SEEK_OFFSET = 'seek-offset',\n MENU = 'menu',\n MENU_OPENED = 'menu-opened',\n MENU_CLOSE_ON_INPUT = 'menu-close-on-input',\n ARIA_LABEL = 'aria-label',\n ARIA_LIVE = 'aria-live',\n ARIA_CHECKED = 'aria-checked',\n HAS_AUDIO = 'has-audio',\n HAS_SUBTITLES = 'has-subtitles',\n HAS_ERROR = 'has-error',\n HAS_FIRST_PLAY = 'has-first-play',\n CAST_STATE = 'cast-state',\n TRACK_TYPE = 'track-type',\n SHOW_OFF = 'show-off',\n PLAYING_AD = 'playing-ad',\n SHOW_AD_MARKERS = 'show-ad-markers',\n CLICKTHROUGH = 'clickthrough',\n PROPERTY = 'property',\n VALUE = 'value'\n}\n","export enum KeyCode {\n ENTER = 13,\n ESCAPE = 27,\n SPACE = 32,\n END = 35,\n HOME = 36,\n LEFT = 37,\n UP = 38,\n RIGHT = 39,\n DOWN = 40,\n // Multiple back key configurations depending on the platform\n // https://suite.st/docs/faq/tv-specific-keys-in-browser/\n BACK_SAMSUNG = 88,\n BACK_WEBOS = 461,\n BACK_TIZEN = 10009\n}\n\nexport type ArrowKeyCode = KeyCode.LEFT | KeyCode.UP | KeyCode.RIGHT | KeyCode.DOWN;\nexport type BackKeyCode = KeyCode.BACK_TIZEN | KeyCode.ESCAPE | KeyCode.BACK_SAMSUNG | KeyCode.BACK_WEBOS;\nexport type ActivationKeyCode = KeyCode.ENTER | KeyCode.SPACE;\n\nexport function isArrowKey(keyCode: number): keyCode is ArrowKeyCode {\n return KeyCode.LEFT <= keyCode && keyCode <= KeyCode.DOWN;\n}\n\nexport function isBackKey(keyCode: number): keyCode is BackKeyCode {\n return keyCode === KeyCode.BACK_TIZEN || keyCode === KeyCode.ESCAPE || keyCode === KeyCode.BACK_SAMSUNG || keyCode === KeyCode.BACK_WEBOS;\n}\n\nexport function isActivationKey(keyCode: number): keyCode is ActivationKeyCode {\n return keyCode === KeyCode.ENTER || keyCode === KeyCode.SPACE;\n}\n","export enum ExtensionSlot {\n TopControlBar = 'top-control-bar',\n BottomControlBar = 'bottom-control-bar',\n Menu = 'menu'\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport controlBarCss from './ControlBar.css';\n\n/**\n * A horizontal control bar that can contain other controls.\n */\n@customElement('theoplayer-control-bar')\nexport class ControlBar extends LitElement {\n static override styles = [controlBarCss];\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-control-bar': ControlBar;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { templateContent } from 'lit/directives/template-content.js';\nimport buttonCss from './Button.css';\nimport { Attribute } from '../util/Attribute';\nimport { isActivationKey } from '../util/KeyCode';\n\n/** @deprecated */\nexport interface ButtonOptions {\n /**\n * @deprecated Override {@link Button.render} instead.\n */\n template?: HTMLTemplateElement;\n}\n\n/**\n * @deprecated Override {@link Button.render} instead.\n */\nexport function buttonTemplate(button: string, extraCss: string = ''): string {\n return `<style>${extraCss}</style>${button}`;\n}\n\n/**\n * A basic button.\n *\n * @attribute `disabled` - Whether the button is disabled. When disabled, the button cannot be clicked.\n */\n// Based on howto-toggle-button\n// https://github.com/GoogleChromeLabs/howto-components/blob/079d0fa34ff9038b26ea8883b1db5dd6b677d7ba/elements/howto-toggle-button/howto-toggle-button.js\n@customElement('theoplayer-button')\nexport class Button extends LitElement {\n static styles = [buttonCss];\n\n private readonly _template: HTMLTemplateElement | undefined;\n private _disabled: boolean = false;\n\n /**\n * Creates a basic button.\n *\n * By default, the button renders the contents of its direct children (i.e. it has a single unnamed `<slot>`).\n * Subclasses can override this by overriding {@link render}.\n */\n constructor(options?: ButtonOptions) {\n super();\n this._template = options?.template;\n if (this._template) {\n // Render immediately to populate the shadow DOM.\n this.performUpdate();\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'button');\n }\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0');\n }\n if (!this.hasAttribute(Attribute.ARIA_LIVE)) {\n // Let the screen reader user know that the text of the button may change\n this.setAttribute(Attribute.ARIA_LIVE, 'polite');\n }\n if (!this._disabled) {\n this._enable();\n }\n }\n\n disconnectedCallback(): void {\n this.removeEventListener('click', this._onClick);\n this.removeEventListener('keydown', this._onKeyDown);\n this.removeEventListener('keyup', this._onKeyUp);\n }\n\n /**\n * Whether the button is disabled.\n *\n * When disabled, the button cannot be clicked.\n */\n get disabled(): boolean {\n return this._disabled;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.DISABLED })\n set disabled(value: boolean) {\n this._disabled = value;\n if (value) {\n this._disable();\n } else {\n this._enable();\n }\n }\n\n private _enable(): void {\n this.removeEventListener('click', this._onClick);\n this.removeEventListener('keydown', this._onKeyDown);\n this.removeEventListener('keyup', this._onKeyUp);\n this.addEventListener('click', this._onClick);\n this.addEventListener('keydown', this._onKeyDown);\n\n this.setAttribute('aria-disabled', 'false');\n this.setAttribute('tabindex', '0');\n }\n\n private _disable(): void {\n this.removeEventListener('click', this._onClick);\n this.removeEventListener('keydown', this._onKeyDown);\n this.removeEventListener('keyup', this._onKeyUp);\n\n this.setAttribute('aria-disabled', 'true');\n\n // The `tabindex` attribute does not provide a way to fully remove focusability from an element.\n // Elements with `tabindex=-1` can still be focused with a mouse or by calling `focus()`.\n // To make sure an element is disabled and not focusable, remove the `tabindex` attribute.\n this.removeAttribute('tabindex');\n\n // If the focus is currently on this element, unfocus it by calling the `HTMLElement.blur()` method.\n this.blur();\n }\n\n private readonly _onClick = () => {\n this.handleClick();\n };\n\n protected readonly _onKeyDown = (e: KeyboardEvent) => {\n if (isActivationKey(e.keyCode) && !e.metaKey && !e.altKey) {\n this.addEventListener('keyup', this._onKeyUp);\n } else {\n this.removeEventListener('keyup', this._onKeyUp);\n }\n };\n\n protected readonly _onKeyUp = (e: KeyboardEvent) => {\n this.removeEventListener('keyup', this._onKeyUp);\n if (isActivationKey(e.keyCode)) {\n this.handleClick();\n }\n };\n\n protected render(): HTMLTemplateResult {\n if (this._template) {\n return html`${templateContent(this._template)}`;\n }\n return html`<slot></slot>`;\n }\n\n /**\n * Handle a button click.\n *\n * By default, this does nothing. Subclasses can override this method to add behavior to the button.\n */\n protected handleClick(): void {}\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-button': Button;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { templateContent } from 'lit/directives/template-content.js';\nimport linkButtonCss from './LinkButton.css';\nimport { Attribute } from '../util/Attribute';\nimport { KeyCode } from '../util/KeyCode';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport { type ButtonOptions, buttonTemplate } from './Button';\n\n/**\n * @deprecated Override {@link LinkButton.render} instead.\n */\nexport function linkButtonTemplate(button: string, extraCss: string = ''): string {\n return buttonTemplate(`<a>${button}</a>`, extraCss);\n}\n\n/**\n * A {@link Button | button} that opens a hyperlink.\n *\n * @attribute `disabled` - Whether the button is disabled. When disabled, the button cannot be clicked.\n */\n@customElement('theoplayer-link-button')\nexport class LinkButton extends LitElement {\n static styles = [linkButtonCss];\n\n private readonly _template: HTMLTemplateElement | undefined;\n private _disabled: boolean = false;\n\n private readonly _linkRef: Ref<HTMLAnchorElement> = createRef<HTMLAnchorElement>();\n\n constructor(options?: ButtonOptions) {\n super();\n this._template = options?.template;\n if (this._template) {\n // Render immediately to populate the shadow DOM.\n this.performUpdate();\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'button');\n }\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0');\n }\n if (!this.hasAttribute(Attribute.ARIA_LIVE)) {\n // Let the screen reader user know that the text of the button may change\n this.setAttribute(Attribute.ARIA_LIVE, 'polite');\n }\n if (!this.hasAttribute(Attribute.DISABLED)) {\n this._enable();\n }\n }\n\n /**\n * Whether the button is disabled.\n *\n * When disabled, the button cannot be clicked.\n */\n get disabled(): boolean {\n return this._disabled;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.DISABLED })\n set disabled(value: boolean) {\n this._disabled = value;\n if (value) {\n this._disable();\n } else {\n this._enable();\n }\n }\n\n @state()\n protected accessor href: string = '';\n\n @state()\n protected accessor target: string = '';\n\n private _enable(): void {\n this.setAttribute('aria-disabled', 'false');\n this.setAttribute('tabindex', '0');\n }\n\n private _disable(): void {\n this.setAttribute('aria-disabled', 'true');\n\n // The `tabindex` attribute does not provide a way to fully remove focusability from an element.\n // Elements with `tabindex=-1` can still be focused with a mouse or by calling `focus()`.\n // To make sure an element is disabled and not focusable, remove the `tabindex` attribute.\n this.removeAttribute('tabindex');\n\n // If the focus is currently on this element, unfocus it by calling the `HTMLElement.blur()` method.\n this.blur();\n }\n\n private readonly _onKeyDown = (event: KeyboardEvent) => {\n // Don't handle modifier shortcuts typically used by assistive technology.\n if (event.metaKey || event.altKey) return;\n\n switch (event.keyCode) {\n // Enter is already handled by the browser.\n // case KeyCode.ENTER:\n case KeyCode.SPACE:\n event.preventDefault();\n this._linkRef.value?.click();\n break;\n // Any other key press is ignored and passed back to the browser.\n default:\n return;\n }\n };\n\n private readonly _onClick = () => {\n if (this.disabled) {\n return;\n }\n this.handleClick();\n };\n\n protected override render(): HTMLTemplateResult {\n if (this._template) {\n return html`${templateContent(this._template)}`;\n }\n return html`<a ${ref(this._linkRef)} href=${this.href} target=${this.target} @keydown=${this._onKeyDown} @click=${this._onClick}\n >${this.renderLinkContent()}</a\n >`;\n }\n\n protected renderLinkContent(): HTMLTemplateResult {\n return html`<slot></slot>`;\n }\n\n protected handleClick(): void {}\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-link-button': LinkButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport slotContainerCss from './SlotContainer.css';\n\n/**\n * A container that can be assigned to a slot,\n * and behaves as if all its children are directly assigned to that slot.\n *\n * This behaves approximately like a regular `<div>` with style `display: contents`,\n * but receives some special treatment from e.g. {@link MenuGroup | `<theoplayer-menu-group>`}\n * which normally expects its {@link Menu | menu}s to be slotted in as direct children.\n * Those menus can also be children of a `<theoplayer-slot-container>` instead.\n *\n * This is an internal component, used mainly by Open Video UI for React.\n * You shouldn't need this under normal circumstances.\n * @internal\n */\n@customElement('theoplayer-slot-container')\nexport class SlotContainer extends LitElement {\n static override styles = [slotContainerCss];\n\n protected override render(): HTMLTemplateResult {\n return html`<slot></slot>`;\n }\n}\n\nexport function isSlotContainer(element: Element): element is SlotContainer {\n return element.nodeName.toLowerCase() === 'theoplayer-slot-container';\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-slot-container': SlotContainer;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { Button } from './Button';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport playButtonCss from './PlayButton.css';\nimport playIcon from '../icons/play.svg';\nimport pauseIcon from '../icons/pause.svg';\nimport replayIcon from '../icons/replay.svg';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { Attribute } from '../util/Attribute';\n\nconst PLAYER_EVENTS = ['seeking', 'seeked', 'ended', 'emptied', 'sourcechange'] as const;\n\n/**\n * A button that toggles whether the player is playing or paused.\n *\n * @attribute `paused` (readonly) - Whether the player is paused. Reflects `ui.player.paused`.\n * @attribute `ended` (readonly) - Whether the player is ended. Reflects `ui.player.ended`.\n */\n@customElement('theoplayer-play-button')\n@stateReceiver(['player'])\nexport class PlayButton extends Button {\n static styles = [...Button.styles, playButtonCss];\n\n private _player: ChromelessPlayer | undefined;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._updateFromPlayer();\n this._updateAriaLabel();\n }\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.PAUSED })\n accessor paused: boolean = false;\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.ENDED })\n accessor ended: boolean = false;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener('play', this._onPlay);\n this._player.removeEventListener('pause', this._onPause);\n this._player.removeEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n this._player = player;\n this._updateFromPlayer();\n if (this._player !== undefined) {\n this._player.addEventListener('play', this._onPlay);\n this._player.addEventListener('pause', this._onPause);\n this._player.addEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n }\n\n private readonly _onPlay = (): void => {\n this.paused = false;\n this._updateEnded();\n };\n\n private readonly _onPause = (): void => {\n this.paused = true;\n this._updateEnded();\n };\n\n private readonly _updateFromPlayer = (): void => {\n this.paused = this._player?.paused ?? true;\n this._updateEnded();\n this._updateDisabled();\n };\n\n private _updateEnded(): void {\n this.ended = this._player?.ended ?? false;\n }\n\n private readonly _updateDisabled = () => {\n this.disabled = this._player?.source === undefined;\n };\n\n protected override handleClick() {\n if (this._player !== undefined) {\n if (this._player.source === undefined) {\n // Do nothing if the player has no source.\n return;\n }\n if (this._player.paused) {\n this._player.play();\n } else {\n this._player.pause();\n }\n }\n }\n\n override attributeChangedCallback(attrName: string, oldValue: any, newValue: any) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (PlayButton.observedAttributes.indexOf(attrName as Attribute) >= 0) {\n this._updateAriaLabel();\n }\n }\n\n private _updateAriaLabel(): void {\n const label = this.ended ? 'replay' : this.paused ? 'play' : 'pause';\n this.setAttribute(Attribute.ARIA_LABEL, label);\n }\n\n protected override render(): HTMLTemplateResult {\n return html`\n <span part=\"play-icon\"><slot name=\"play-icon\">${unsafeSVG(playIcon)}</slot></span>\n <span part=\"pause-icon\"><slot name=\"pause-icon\">${unsafeSVG(pauseIcon)}</slot></span>\n <span part=\"replay-icon\"><slot name=\"replay-icon\">${unsafeSVG(replayIcon)}</slot></span>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-play-button': PlayButton;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { Button } from './Button';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport muteButtonCss from './MuteButton.css';\nimport offIcon from '../icons/volume-off.svg';\nimport lowIcon from '../icons/volume-low.svg';\nimport highIcon from '../icons/volume-high.svg';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { Attribute } from '../util/Attribute';\n\nexport type VolumeLevel = 'off' | 'low' | 'high';\n\nconst PLAYER_EVENTS = ['volumechange'] as const;\n\n/**\n * A button that toggles whether audio is muted or not.\n *\n * @attribute `volume-level` (readonly) - The volume level of the player.\n * Can be \"off\" (muted), \"low\" (volume < 50%) or \"high\" (volume >= 50%).\n */\n@customElement('theoplayer-mute-button')\n@stateReceiver(['player'])\nexport class MuteButton extends Button {\n static styles = [...Button.styles, muteButtonCss];\n\n private _player: ChromelessPlayer | undefined;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._updateFromPlayer();\n this._updateAriaLabel();\n }\n\n /**\n * The volume level of the player.\n */\n @property({ reflect: true, state: true, type: String, attribute: Attribute.VOLUME_LEVEL })\n accessor volumeLevel: VolumeLevel = 'off';\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n this._player = player;\n this._updateFromPlayer();\n if (this._player !== undefined) {\n this._player.addEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n }\n\n private readonly _updateFromPlayer = () => {\n if (this._player !== undefined) {\n const volume = this._player.volume;\n const muted = this._player.muted;\n if (muted) {\n this.volumeLevel = 'off';\n } else if (volume < 0.5) {\n this.volumeLevel = 'low';\n } else {\n this.volumeLevel = 'high';\n }\n } else {\n this.volumeLevel = 'off';\n }\n };\n\n protected override handleClick() {\n if (this._player !== undefined) {\n this._player.muted = !this._player.muted;\n this._updateFromPlayer();\n }\n }\n\n override attributeChangedCallback(attrName: string, oldValue: any, newValue: any) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (MuteButton.observedAttributes.indexOf(attrName as Attribute) >= 0) {\n this._updateAriaLabel();\n }\n }\n\n private _updateAriaLabel(): void {\n const label = this.volumeLevel === 'off' ? 'unmute' : 'mute';\n this.setAttribute(Attribute.ARIA_LABEL, label);\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<span part=\"off-icon\"><slot name=\"off-icon\">${unsafeSVG(offIcon)}</slot></span\n ><span part=\"low-icon\"><slot name=\"low-icon\">${unsafeSVG(lowIcon)}</slot></span\n ><span part=\"high-icon\"><slot name=\"high-icon\">${unsafeSVG(highIcon)}</slot></span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-mute-button': MuteButton;\n }\n}\n","import { html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { Button } from './Button';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport seekButtonCss from './SeekButton.css';\nimport seekForwardIcon from '../icons/seek-forward.svg';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { Attribute } from '../util/Attribute';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\n\nconst DEFAULT_SEEK_OFFSET = 10;\n\n/**\n * A button that seeks forward or backward by a fixed offset.\n *\n * @attribute `seek-offset` - The offset (in seconds) by which to seek forward (if positive) or backward (if negative).\n */\n@customElement('theoplayer-seek-button')\n@stateReceiver(['player'])\nexport class SeekButton extends Button {\n static styles = [...Button.styles, seekButtonCss];\n\n private _player: ChromelessPlayer | undefined;\n\n override connectedCallback() {\n super.connectedCallback();\n this._updateAriaLabel();\n }\n\n /**\n * The offset (in seconds) by which to seek forward (if positive) or backward (if negative).\n */\n @property({ reflect: true, type: Number, attribute: Attribute.SEEK_OFFSET })\n accessor seekOffset: number = DEFAULT_SEEK_OFFSET;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n this._player = player;\n }\n\n protected override handleClick() {\n if (this._player === undefined) {\n return;\n }\n const duration = this._player.duration;\n if (isNaN(duration)) {\n return;\n }\n this._player.currentTime = Math.max(0, Math.min(duration, this._player.currentTime + this.seekOffset));\n }\n\n override attributeChangedCallback(attrName: string, oldValue: any, newValue: any) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (SeekButton.observedAttributes.indexOf(attrName as Attribute) >= 0) {\n this._updateAriaLabel();\n }\n }\n\n private _updateAriaLabel(): void {\n const seekOffset = this.seekOffset;\n const label = seekOffset >= 0 ? `seek forward by ${seekOffset} seconds` : `seek backward by ${-seekOffset} seconds`;\n this.setAttribute(Attribute.ARIA_LABEL, label);\n }\n\n protected override render() {\n return html`<span part=\"icon\"><slot name=\"icon\">${unsafeSVG(seekForwardIcon)}</slot></span\n ><span part=\"offset\">${String(Math.abs(this.seekOffset))}</span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-seek-button': SeekButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport textDisplayCss from './TextDisplay.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport { formatAsTimePhrase, formatTime } from '../util/TimeUtils';\nimport { Attribute } from '../util/Attribute';\nimport type { StreamType } from '../util/StreamType';\n\nconst PLAYER_EVENTS = ['timeupdate', 'seeking', 'seeked', 'durationchange'] as const;\n\nconst DEFAULT_MISSING_TIME_PHRASE = 'video not loaded, unknown time';\n\n/**\n * A control that displays the current time of the stream.\n *\n * @attribute `show-duration` - If set, also shows the duration of the stream.\n * @attribute `remaining` - If set, shows the remaining time of the stream. Not compatible with `show-duration`.\n * @attribute `remaining-when-live` - If set, and the stream is a livestream, shows the remaining time\n * (until the live point) of the stream.\n */\n@customElement('theoplayer-time-display')\n@stateReceiver(['player', 'streamType'])\nexport class TimeDisplay extends LitElement {\n static override styles = [textDisplayCss];\n\n private _player: ChromelessPlayer | undefined;\n\n connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'progressbar');\n }\n if (!this.hasAttribute(Attribute.ARIA_LABEL)) {\n this.setAttribute(Attribute.ARIA_LABEL, 'playback time');\n }\n if (!this.hasAttribute(Attribute.ARIA_LIVE)) {\n // Tell screen readers not to automatically read the time as it changes\n this.setAttribute(Attribute.ARIA_LIVE, 'off');\n }\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n this._player = player;\n this._updateFromPlayer();\n if (this._player !== undefined) {\n this._player.addEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n }\n @property({ reflect: true, type: Boolean, attribute: Attribute.REMAINING })\n accessor remaining: boolean = false;\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.REMAINING_WHEN_LIVE })\n accessor remainingWhenLive: boolean = false;\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.SHOW_DURATION })\n accessor showDuration: boolean = false;\n\n @property({ reflect: true, type: String, attribute: Attribute.STREAM_TYPE })\n accessor streamType: StreamType = 'vod';\n\n @state()\n private accessor _currentTime: number = 0;\n\n @state()\n private accessor _duration: number = NaN;\n\n @state()\n private accessor _endTime: number = 0;\n\n private readonly _updateFromPlayer = () => {\n const currentTime = this._player ? this._player.currentTime : 0;\n const duration = this._player ? this._player.duration : NaN;\n const seekable = this._player?.seekable;\n const endTime = isFinite(duration) ? duration : seekable && seekable.length > 0 ? seekable.end(0) : NaN;\n this._currentTime = currentTime;\n this._duration = duration;\n this._endTime = endTime;\n };\n\n protected override render(): HTMLTemplateResult {\n const remaining = this.remaining || (this.remainingWhenLive && this.streamType !== 'vod');\n let time = this._currentTime;\n const endTime = this._endTime;\n if (remaining) {\n time = -((this._endTime || 0) - time);\n }\n let text: string;\n if (this.showDuration && !remaining) {\n text = `${formatTime(time, endTime, remaining)} / ${formatTime(endTime)}`;\n } else {\n text = formatTime(time, endTime, remaining);\n }\n\n let ariaValueText: string;\n if (isNaN(this._duration)) {\n ariaValueText = DEFAULT_MISSING_TIME_PHRASE;\n } else if (this.showDuration) {\n ariaValueText = `${formatAsTimePhrase(time, remaining)} of ${formatAsTimePhrase(endTime)}`;\n } else {\n ariaValueText = formatAsTimePhrase(time, remaining);\n }\n this.setAttribute('aria-valuetext', ariaValueText);\n\n return html`<span>${text}</span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-time-display': TimeDisplay;\n }\n}\n","import { html, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport textDisplayCss from './TextDisplay.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport { formatTime } from '../util/TimeUtils';\nimport { Attribute } from '../util/Attribute';\n\nconst PLAYER_EVENTS = ['durationchange'] as const;\n\n/**\n * A control that displays the duration of the stream.\n */\n@customElement('theoplayer-duration-display')\n@stateReceiver(['player'])\nexport class DurationDisplay extends LitElement {\n static override styles = [textDisplayCss];\n\n private _player: ChromelessPlayer | undefined;\n\n connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.hasAttribute(Attribute.ARIA_LIVE)) {\n // Tell screen readers not to automatically read the duration as it changes\n this.setAttribute(Attribute.ARIA_LIVE, 'off');\n }\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n this._player = player;\n this._updateFromPlayer();\n if (this._player !== undefined) {\n this._player.addEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n }\n\n /**\n * The current duration.\n */\n @state()\n accessor duration: number = NaN;\n\n private readonly _updateFromPlayer = () => {\n this.duration = this._player ? this._player.duration : NaN;\n };\n\n protected override render() {\n return html`<span>${formatTime(this.duration)}</span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-duration-display': DurationDisplay;\n }\n}\n","import { customElement, property } from 'lit/decorators.js';\nimport { Button } from './Button';\nimport { Attribute } from '../util/Attribute';\nimport { createEvent } from '../util/EventUtils';\nimport type { RadioGroup } from './RadioGroup';\n\n/**\n * A button that can be checked.\n *\n * When part of a {@link RadioGroup}, at most one button in the group can be checked.\n */\n@customElement('theoplayer-radio-button')\nexport class RadioButton extends Button {\n private _checked: boolean = false;\n\n override connectedCallback() {\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'radio');\n }\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '-1');\n }\n\n super.connectedCallback();\n }\n\n /**\n * Whether this radio button is checked.\n */\n get checked(): boolean {\n return this._checked;\n }\n\n @property({\n reflect: true,\n type: Boolean,\n attribute: Attribute.ARIA_CHECKED,\n converter: {\n fromAttribute: (value: string | null) => value != null && value !== 'false',\n toAttribute: (value: boolean) => String(value)\n }\n })\n set checked(checked: boolean) {\n if (this._checked !== checked) {\n this._checked = checked;\n this.handleChange();\n this.dispatchEvent(createEvent('change', { bubbles: true }));\n }\n }\n\n /**\n * The value associated with this radio button.\n */\n @property({ attribute: Attribute.VALUE })\n accessor value: any = undefined;\n\n protected handleClick(): void {\n this.checked = true;\n this.dispatchEvent(createEvent('input', { bubbles: true, composed: true }));\n }\n\n protected handleChange(): void {}\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-radio-button': RadioButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport { isArrowKey, KeyCode } from '../util/KeyCode';\nimport { RadioButton } from './RadioButton';\nimport { createEvent } from '../util/EventUtils';\nimport { arrayFind, getSlottedElements, noOp, upgradeCustomElementIfNeeded } from '../util/CommonUtils';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { Attribute } from '../util/Attribute';\nimport type { DeviceType } from '../util/DeviceType';\nimport { navigateByArrowKey } from '../util/KeyboardNavigation';\n\n/**\n * A group of {@link RadioButton}s. At most one button in the group can be checked.\n *\n * ## Behavior\n * This radio group implements the [roving tabindex](https://www.w3.org/WAI/ARIA/apg/example-index/radio/radio.html) pattern.\n * - `Tab` moves focus in or out of the radio group.\n * - `Up`/`Left` arrow moves focus to the previous radio button.\n * - `Down`/`Right` arrow moves focus to the next radio button.\n * - `Home` moves focus to the first radio button.\n * - `End` moves focus to the last radio button.\n */\n// Based on howto-radio-group\n// https://github.com/GoogleChromeLabs/howto-components/blob/079d0fa34ff9038b26ea8883b1db5dd6b677d7ba/elements/howto-radio-group/howto-radio-group.js\n@customElement('theoplayer-radio-group')\n@stateReceiver(['deviceType'])\nexport class RadioGroup extends LitElement {\n private readonly _slotRef: Ref<HTMLSlotElement> = createRef<HTMLSlotElement>();\n private _radioButtons: RadioButton[] = [];\n private _value: any = undefined;\n\n constructor() {\n super();\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'radiogroup');\n }\n\n this.addEventListener('keydown', this._onKeyDown);\n this._onSlotChange();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener('keydown', this._onKeyDown);\n }\n\n protected override firstUpdated(): void {\n this._onSlotChange();\n }\n\n protected override createRenderRoot(): HTMLElement | DocumentFragment {\n const root = super.createRenderRoot();\n root.addEventListener('change', this._onButtonChange);\n return root;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.DEVICE_TYPE })\n accessor deviceType: DeviceType = 'desktop';\n\n /**\n * The selected value.\n */\n get value(): any {\n return this._value;\n }\n\n @property({ attribute: Attribute.VALUE })\n set value(value: any) {\n if (this._value === value) {\n return;\n }\n this._value = value;\n this.updateCheckedButton();\n this.dispatchEvent(createEvent('change', { bubbles: true }));\n }\n\n private readonly _onSlotChange = () => {\n const slot = this._slotRef.value;\n if (!slot) return;\n const children = getSlottedElements(slot);\n const upgradePromises: Array<Promise<unknown>> = [];\n for (const child of children) {\n if (!isRadioButton(child)) {\n const promise = upgradeCustomElementIfNeeded(child);\n if (promise) {\n upgradePromises.push(promise);\n }\n }\n }\n if (upgradePromises.length > 0) {\n Promise.all(upgradePromises).then(this._onSlotChange, noOp);\n }\n\n this._radioButtons = children.filter(isRadioButton);\n\n let firstFocusedButton = this.focusedRadioButton;\n if (!firstFocusedButton) {\n this.firstRadioButton?.setAttribute('tabindex', '0');\n }\n\n this.updateCheckedButton();\n };\n\n private readonly _onKeyDown = (event: KeyboardEvent) => {\n if (this.deviceType === 'tv' && isArrowKey(event.keyCode)) {\n if (navigateByArrowKey(this, this._radioButtons, event.keyCode)) {\n event.preventDefault();\n event.stopPropagation();\n }\n return;\n }\n switch (event.keyCode) {\n case KeyCode.UP:\n case KeyCode.LEFT: {\n if (this._focusPrevButton()) {\n event.preventDefault();\n }\n break;\n }\n case KeyCode.DOWN:\n case KeyCode.RIGHT: {\n if (this._focusNextButton()) {\n event.preventDefault();\n }\n break;\n }\n case KeyCode.HOME: {\n event.preventDefault();\n this.setFocusedRadioButton(this.firstRadioButton);\n break;\n }\n case KeyCode.END: {\n event.preventDefault();\n this.setFocusedRadioButton(this.lastRadioButton);\n break;\n }\n default: {\n break;\n }\n }\n };\n\n get focusedRadioButton(): RadioButton | null {\n return arrayFind(this._radioButtons, (button) => button.tabIndex === 0) ?? null;\n }\n\n get checkedRadioButton(): RadioButton | null {\n return arrayFind(this._radioButtons, (button) => button.checked) ?? null;\n }\n\n get firstRadioButton(): RadioButton | null {\n return this._radioButtons[0] ?? null;\n }\n\n get lastRadioButton(): RadioButton | null {\n const radioButtons = this._radioButtons;\n return radioButtons.length > 0 ? radioButtons[radioButtons.length - 1] : null;\n }\n\n allRadioButtons(): readonly RadioButton[] {\n return this._radioButtons;\n }\n\n private _prevRadioButton(node: RadioButton): RadioButton | null {\n const index = this._radioButtons.indexOf(node);\n if (index > 0) {\n return this._radioButtons[index - 1];\n }\n return null;\n }\n\n private _nextRadioButton(node: RadioButton): RadioButton | null {\n const index = this._radioButtons.indexOf(node);\n if (index >= 0 && index < this._radioButtons.length - 1) {\n return this._radioButtons[index + 1];\n }\n return null;\n }\n\n private _focusPrevButton(): boolean {\n let focusedButton = this.focusedRadioButton || this.firstRadioButton;\n if (!focusedButton) {\n return false;\n }\n if (focusedButton === this.firstRadioButton) {\n this.setFocusedRadioButton(this.lastRadioButton);\n } else {\n this.setFocusedRadioButton(this._prevRadioButton(focusedButton));\n }\n return true;\n }\n\n private _focusNextButton(): boolean {\n let focusedButton = this.focusedRadioButton || this.firstRadioButton;\n if (!focusedButton) {\n return false;\n }\n if (focusedButton === this.lastRadioButton) {\n this.setFocusedRadioButton(this.firstRadioButton);\n } else {\n this.setFocusedRadioButton(this._nextRadioButton(focusedButton));\n }\n return true;\n }\n\n private setFocusedRadioButton(button: RadioButton | null): void {\n this._unfocusAll();\n if (button) {\n button.tabIndex = 0;\n button.focus();\n }\n }\n\n private _unfocusAll(): void {\n for (const button of this.allRadioButtons()) {\n button.tabIndex = -1;\n }\n }\n\n private setCheckedRadioButton(checkedButton: RadioButton | null): void {\n for (const button of this.allRadioButtons()) {\n button.checked = button === checkedButton;\n }\n }\n\n private updateCheckedButton(): void {\n const button = this.allRadioButtons().find((button) => {\n // Allow '1' == 1\n return button.value == this.value;\n });\n this.setCheckedRadioButton(button ?? null);\n }\n\n private readonly _onButtonChange = (event: Event) => {\n const button = event.target as RadioButton | null;\n if (button !== null && button.checked) {\n this.value = button.value;\n }\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<slot ${ref(this._slotRef)} @slotchange=${this._onSlotChange}></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-radio-group': RadioGroup;\n }\n}\n\nfunction isRadioButton(node: Node): node is RadioButton {\n return node instanceof RadioButton;\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport menuCss from './Menu.css';\nimport { CLOSE_MENU_EVENT, type CloseMenuEvent } from '../events/CloseMenuEvent';\nimport { MENU_CHANGE_EVENT, type MenuChangeEvent } from '../events/MenuChangeEvent';\nimport { createCustomEvent } from '../util/EventUtils';\nimport { Attribute } from '../util/Attribute';\nimport { toggleAttribute } from '../util/CommonUtils';\nimport { templateContent } from 'lit/directives/template-content.js';\n\n/** @deprecated */\nexport interface MenuOptions {\n /**\n * @deprecated Override {@link Menu.render} instead.\n */\n template?: HTMLTemplateElement;\n}\n\n/**\n * @deprecated Override {@link Menu.render} instead.\n */\nexport function menuTemplate(heading: string, content: string, extraCss: string = ''): string {\n return (\n `<style>${extraCss}</style>` +\n `<div part=\"heading\"><theoplayer-menu-close-button></theoplayer-menu-close-button>${heading}</div>` +\n `<div part=\"content\">${content}</div>`\n );\n}\n\n/**\n * A menu that can be opened on top of the player.\n *\n * The menu has a heading at the top, with a {@link CloseMenuButton | close button} and a heading text.\n *\n * @attribute `menu-close-on-input` - Whether to automatically close the menu whenever one of its controls\n * receives an input (e.g. when a radio button is clicked).\n * @attribute `menu-opened` (readonly) - Whether the menu is currently open.\n *\n * @slot `heading` - A slot for the menu's heading.\n */\n@customElement('theoplayer-menu')\nexport class Menu extends LitElement {\n static override styles = [menuCss];\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true\n };\n\n private readonly _template: HTMLTemplateElement | undefined;\n private _menuOpened: boolean = false;\n\n /**\n * Creates a menu.\n *\n * By default, the button has an unnamed `<slot>` for its contents, and a named `\"heading\"` `<slot>` for its heading text.\n * Subclasses can override this by overriding {@link renderMenuHeading} and/or {@link renderMenuContent}.\n */\n constructor(options?: MenuOptions) {\n super();\n this._template = options?.template;\n if (this._template) {\n // Render immediately to populate the shadow DOM.\n this.performUpdate();\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.menuOpened_) {\n this.setAttribute(Attribute.HIDDEN, '');\n }\n }\n\n /**\n * Whether to automatically close the menu whenever one of its controls\n * receives an input (e.g. when a radio button is clicked).\n */\n @property({ reflect: true, type: Boolean, attribute: Attribute.MENU_CLOSE_ON_INPUT })\n accessor closeOnInput: boolean = false;\n\n private get menuOpened_(): boolean {\n return this._menuOpened;\n }\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.MENU_OPENED })\n private set menuOpened_(menuOpened: boolean) {\n if (this._menuOpened === menuOpened) return;\n this._menuOpened = menuOpened;\n toggleAttribute(this, Attribute.HIDDEN, !menuOpened);\n const changeEvent: MenuChangeEvent = createCustomEvent(MENU_CHANGE_EVENT, { bubbles: true });\n this.dispatchEvent(changeEvent);\n }\n\n /**\n * Open the menu.\n */\n openMenu(): void {\n this.menuOpened_ = true;\n }\n\n /**\n * Close the menu.\n */\n closeMenu(): void {\n this.menuOpened_ = false;\n }\n\n private readonly _onContentInput = (): void => {\n // Close menu when clicking any button\n if (this.closeOnInput) {\n const event: CloseMenuEvent = createCustomEvent(CLOSE_MENU_EVENT, {\n bubbles: true,\n composed: true\n });\n this.dispatchEvent(event);\n }\n };\n\n protected override render(): HTMLTemplateResult {\n if (this._template) {\n return html`${templateContent(this._template)}`;\n }\n return html`<div part=\"heading\">\n <theoplayer-menu-close-button></theoplayer-menu-close-button>\n ${this.renderMenuHeading()}\n </div>\n <div part=\"content\" @input=${this._onContentInput}>${this.renderMenuContent()}</div>`;\n }\n\n protected renderMenuHeading(): HTMLTemplateResult {\n return html`<slot name=\"heading\"></slot>`;\n }\n\n protected renderMenuContent(): HTMLTemplateResult {\n return html`<slot></slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-menu': Menu;\n }\n}\n","import { html, LitElement, type TemplateResult } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport menuGroupCss from './MenuGroup.css';\nimport { Attribute } from '../util/Attribute';\nimport {\n arrayFind,\n arrayFindIndex,\n fromArrayLike,\n getSlottedElements,\n isHTMLElement,\n noOp,\n toggleAttribute,\n upgradeCustomElementIfNeeded\n} from '../util/CommonUtils';\nimport { CLOSE_MENU_EVENT, type CloseMenuEvent } from '../events/CloseMenuEvent';\nimport { TOGGLE_MENU_EVENT, type ToggleMenuEvent } from '../events/ToggleMenuEvent';\nimport { isBackKey } from '../util/KeyCode';\nimport { createCustomEvent } from '../util/EventUtils';\nimport type { MenuChangeEvent } from '../events/MenuChangeEvent';\nimport { MENU_CHANGE_EVENT } from '../events/MenuChangeEvent';\nimport { Menu } from './Menu';\nimport { templateContent } from 'lit/directives/template-content.js';\n\n/** @deprecated */\nexport interface MenuGroupOptions {\n /**\n * @deprecated Override {@link MenuGroup.render} instead.\n */\n template?: HTMLTemplateElement;\n}\n\n/**\n * @deprecated Override {@link MenuGroup.render} instead.\n */\nexport function menuGroupTemplate(content: string, extraCss: string = ''): string {\n return `<style>${extraCss}</style>${content}`;\n}\n\ninterface OpenMenuEntry {\n menu: Menu | MenuGroup;\n opener: HTMLElement | undefined;\n}\n\n/**\n * A group of {@link Menu}s.\n *\n * This can contain multiple other menus, which can be opened with {@link openMenu}.\n * When a {@link MenuButton} in one menu opens another menu in this group, it is opened as a \"submenu\".\n * When a submenu is closed, the menu that originally opened it is shown again.\n *\n * @attribute `menu-opened` (readonly) - Whether any menu in the group is currently open.\n */\n@customElement('theoplayer-menu-group')\nexport class MenuGroup extends LitElement {\n static styles = [menuGroupCss];\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true\n };\n\n private readonly _template: HTMLTemplateElement | undefined;\n\n constructor(options?: MenuGroupOptions) {\n super();\n this._template = options?.template;\n if (this._template) {\n // Render immediately to populate the shadow DOM.\n this.performUpdate();\n }\n }\n\n private _menuOpened: boolean = false;\n\n private get menuOpened_(): boolean {\n return this._menuOpened;\n }\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.MENU_OPENED })\n private set menuOpened_(menuOpened: boolean) {\n if (this._menuOpened === menuOpened) return;\n this._menuOpened = menuOpened;\n toggleAttribute(this, Attribute.MENU_OPENED, menuOpened);\n if (menuOpened) {\n this.removeAttribute(Attribute.HIDDEN);\n this.removeEventListener('keydown', this._onKeyDown);\n this.addEventListener('keydown', this._onKeyDown);\n } else {\n this.setAttribute(Attribute.HIDDEN, '');\n this.removeEventListener('keydown', this._onKeyDown);\n }\n const changeEvent: MenuChangeEvent = createCustomEvent(MENU_CHANGE_EVENT, { bubbles: true });\n this.dispatchEvent(changeEvent);\n }\n\n @query('slot')\n private accessor _menuSlot: HTMLSlotElement | null = null;\n private _menus: Array<Menu | MenuGroup> = [];\n private readonly _openMenuStack: OpenMenuEntry[] = [];\n\n connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.menuOpened_) {\n this.setAttribute(Attribute.HIDDEN, '');\n }\n }\n\n protected createRenderRoot() {\n const root = super.createRenderRoot();\n root.addEventListener(TOGGLE_MENU_EVENT, this._onToggleMenu);\n root.addEventListener(CLOSE_MENU_EVENT, this._onCloseMenu);\n root.addEventListener(MENU_CHANGE_EVENT, this._onMenuChange);\n return root;\n }\n\n protected render(): TemplateResult {\n if (this._template) {\n return html`${templateContent(this._template)}`;\n }\n return html`<slot @slotchange=${this._onMenuListChange}></slot>`;\n }\n\n protected override firstUpdated(): void {\n this._onMenuListChange();\n }\n\n /**\n * Get the menu with the given ID.\n *\n * @param [menuId] - The ID of the menu. If unset, returns this menu group.\n */\n getMenuById(menuId?: string): Menu | MenuGroup | undefined {\n if (!menuId || menuId === this.id) {\n return this;\n }\n return arrayFind(this._menus, (menu) => menu.id === menuId);\n }\n\n /**\n * Open the menu with the given ID.\n *\n * If no ID is given, the first menu in the group is opened.\n *\n * If there's already an open menu, then the new menu is opened as a \"submenu\".\n * When it closed, the previous menu is opened.\n *\n * @param [menuId] - The ID of the menu to open.\n * @param [opener] - The control that opened the menu. When the menu is closed, focus is moved back to this control.\n * @returns True if the given menu was found.\n */\n openMenu(menuId?: string, opener?: HTMLElement): boolean {\n let menuToOpen = this.getMenuById(menuId);\n if (menuToOpen === this) {\n menuToOpen = this._menus[0];\n }\n if (!menuToOpen) {\n return false;\n }\n\n const previousEntry = this.getCurrentMenu_();\n const index = arrayFindIndex(this._openMenuStack, (entry) => entry.menu === menuToOpen);\n if (index >= 0) {\n // Already open.\n // Close subsequent menus to move menu back to top of the stack.\n this.closeMenusFromIndex_(index + 1);\n } else {\n // Not yet open, add to top of the stack.\n this._openMenuStack.push({ menu: menuToOpen, opener });\n }\n\n if (previousEntry) {\n previousEntry.menu.closeMenu();\n }\n menuToOpen.openMenu();\n this.menuOpened_ = true;\n\n menuToOpen.focus();\n return true;\n }\n\n /**\n * Closes the menu with the given ID.\n *\n * If no ID is given, then the entire menu group is closed.\n *\n * If the given menu has opened one or more submenus, then those are also closed.\n * If the last open menu is closed, then the menu group also becomes closed.\n *\n * @param [menuId] - The ID of the menu to close.\n * @returns True if the given menu was found and closed.\n */\n closeMenu(menuId?: string): boolean {\n let menuToClose = this.getMenuById(menuId);\n if (menuToClose === this) {\n menuToClose = this._openMenuStack[0]?.menu;\n }\n if (!menuToClose) {\n return false;\n }\n const index = arrayFindIndex(this._openMenuStack, (entry) => entry.menu === menuToClose);\n if (index < 0) {\n return false;\n }\n\n const oldEntry = this._openMenuStack[index];\n // Close this menu and all subsequent menus\n this.closeMenusFromIndex_(index);\n\n const nextEntry = this.getCurrentMenu_();\n if (nextEntry !== undefined) {\n nextEntry.menu.openMenu();\n this.menuOpened_ = true;\n if (oldEntry.opener && nextEntry.menu.contains(oldEntry.opener)) {\n oldEntry.opener.focus();\n } else {\n nextEntry.menu.focus();\n }\n return true;\n }\n\n this.menuOpened_ = false;\n oldEntry.opener?.focus();\n return true;\n }\n\n private closeMenusFromIndex_(index: number): void {\n const menusToClose = this._openMenuStack.length - index;\n for (let i = this._openMenuStack.length - 1; i >= index; i--) {\n this._openMenuStack[i].menu.closeMenu();\n }\n this._openMenuStack.splice(index, menusToClose);\n }\n\n /**\n * Whether this menu group has a currently open menu.\n */\n hasCurrentMenu(): boolean {\n return this._openMenuStack.length > 0;\n }\n\n private getCurrentMenu_(): OpenMenuEntry | undefined {\n return this._openMenuStack.length > 0 ? this._openMenuStack[this._openMenuStack.length - 1] : undefined;\n }\n\n /**\n * Close the current menu.\n */\n closeCurrentMenu(): boolean {\n const currentMenu = this.getCurrentMenu_();\n if (currentMenu !== undefined) {\n this.closeMenu(currentMenu.menu.id);\n return true;\n }\n return false;\n }\n\n /**\n * Whether the menu with the given ID is currently open.\n *\n * @param [menuId] - The ID of the menu.\n */\n isMenuOpen(menuId?: string): boolean {\n const menu = this.getMenuById(menuId);\n if (!menu) {\n return false;\n }\n return this._openMenuStack.some((entry) => entry.menu === menu);\n }\n\n /**\n * Update the list of menus whenever the `<slot>` contents change.\n * Note: the `slotchange` event bubbles up, so we don't have to manually attach\n * this listener to each nested `<slot>`.\n */\n private readonly _onMenuListChange = () => {\n const children: Element[] = [...fromArrayLike(this.shadowRoot!.children), ...(this._menuSlot ? getSlottedElements(this._menuSlot) : [])];\n const upgradePromises: Array<Promise<unknown>> = [];\n for (const child of children) {\n if (!isMenuElement(child)) {\n const promise = upgradeCustomElementIfNeeded(child);\n if (promise) {\n upgradePromises.push(promise);\n }\n }\n }\n if (upgradePromises.length > 0) {\n Promise.all(upgradePromises).then(this._onMenuListChange, noOp);\n }\n const newMenus = children.filter(isMenuElement);\n // Close all removed menus\n for (const oldMenu of this._menus) {\n if (newMenus.indexOf(oldMenu) < 0) {\n this.closeMenu(oldMenu.id);\n }\n }\n // Ensure newly added menus start as closed\n for (const newMenu of newMenus) {\n if (this._menus.indexOf(newMenu) < 0) {\n newMenu.closeMenu();\n }\n }\n this._menus = newMenus;\n };\n\n private readonly _onToggleMenu = (rawEvent: Event): void => {\n const event = rawEvent as ToggleMenuEvent;\n const menuId = event.detail.menu;\n if (!this.getMenuById(menuId)) {\n // Not our menu, allow event to bubble further up.\n return;\n }\n event.stopPropagation();\n const opener = isHTMLElement(event.target) ? event.target : undefined;\n if (this.isMenuOpen(menuId)) {\n this.closeMenu(menuId);\n } else {\n this.openMenu(menuId, opener);\n }\n };\n\n private readonly _onCloseMenu = (rawEvent: Event): void => {\n const event = rawEvent as CloseMenuEvent;\n if (this.closeCurrentMenu()) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n private readonly _onMenuChange = (rawEvent: Event): void => {\n const event = rawEvent as MenuChangeEvent;\n const currentMenu = this.getCurrentMenu_();\n // If the current menu is another menu container which no longer has an open menu, close it\n if (currentMenu && currentMenu.menu === event.target && currentMenu.menu instanceof MenuGroup && !currentMenu.menu.hasCurrentMenu()) {\n this.closeCurrentMenu();\n }\n };\n\n private readonly _onKeyDown = (event: KeyboardEvent) => {\n // Don't handle modifier shortcuts typically used by assistive technology.\n if (event.altKey) return;\n\n if (isBackKey(event.keyCode)) {\n if (this.closeCurrentMenu()) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n };\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-menu-group': MenuGroup;\n }\n}\n\nfunction isMenuElement(element: Node): element is Menu | MenuGroup {\n if (!isHTMLElement(element)) {\n return false;\n }\n return element instanceof Menu || element instanceof MenuGroup;\n}\n","import { Button } from './Button';\nimport { createCustomEvent } from '../util/EventUtils';\nimport { TOGGLE_MENU_EVENT, type ToggleMenuEvent } from '../events/ToggleMenuEvent';\nimport { Attribute } from '../util/Attribute';\nimport { customElement, property } from 'lit/decorators.js';\n\n/**\n * A menu button that opens a {@link Menu}.\n *\n * @attribute `menu` - The ID of the menu to open.\n */\n@customElement('theoplayer-menu-button')\nexport class MenuButton extends Button {\n private _menuId: string | null = null;\n\n override connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute('aria-haspopup')) {\n this.setAttribute('aria-haspopup', 'true');\n }\n }\n\n /**\n * The ID of the menu to open.\n */\n get menu(): string | null {\n return this._menuId;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.MENU })\n set menu(menuId: string | null) {\n if (menuId) {\n if (this._ariaControls == null || this._ariaControls === this._menuId) {\n this._ariaControls = menuId;\n }\n } else {\n if (this._ariaControls === this._menuId) {\n this._ariaControls = null;\n }\n }\n this._menuId = menuId;\n }\n\n @property({ reflect: true, state: true, type: String, attribute: 'aria-controls' })\n private accessor _ariaControls: string | null = null;\n\n protected override handleClick() {\n const menu = this.menu;\n if (menu) {\n const event: ToggleMenuEvent = createCustomEvent(TOGGLE_MENU_EVENT, {\n bubbles: true,\n composed: true,\n detail: { menu }\n });\n this.dispatchEvent(event);\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-menu-button': MenuButton;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { Button } from './Button';\nimport backIcon from '../icons/back.svg';\nimport { createCustomEvent } from '../util/EventUtils';\nimport { CLOSE_MENU_EVENT, type CloseMenuEvent } from '../events/CloseMenuEvent';\nimport { Attribute } from '../util/Attribute';\n\n/**\n * A button that closes its parent menu.\n *\n * This button must be placed inside a {@link Menu | `<theoplayer-menu>`}.\n */\n@customElement('theoplayer-menu-close-button')\nexport class CloseMenuButton extends Button {\n override connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(Attribute.ARIA_LABEL)) {\n this.setAttribute(Attribute.ARIA_LABEL, 'close menu');\n }\n }\n\n protected override handleClick() {\n const event: CloseMenuEvent = createCustomEvent(CLOSE_MENU_EVENT, {\n bubbles: true,\n composed: true\n });\n this.dispatchEvent(event);\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<span part=\"icon\"><slot>${unsafeSVG(backIcon)}</slot></span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-menu-close-button': CloseMenuButton;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { RadioButton } from './RadioButton';\nimport type { MediaTrack } from 'theoplayer/chromeless';\nimport { localizeLanguageName } from '../util/CommonUtils';\n\nconst TRACK_EVENTS = ['change', 'update'] as const;\n\n/**\n * A radio button that shows the label of a given media track,\n * and switches to that track when clicked.\n */\n@customElement('theoplayer-media-track-radio-button')\nexport class MediaTrackRadioButton extends RadioButton {\n private _track: MediaTrack | undefined = undefined;\n\n @state()\n private accessor _trackLabel = '';\n\n /**\n * The media track that is controlled by this radio button.\n */\n get track(): MediaTrack | undefined {\n return this._track;\n }\n\n @property({ reflect: false, attribute: false })\n set track(track: MediaTrack | undefined) {\n if (this._track === track) {\n return;\n }\n if (this._track) {\n this._track.removeEventListener(TRACK_EVENTS, this._onTrackChange);\n }\n this._track = track;\n this._updateFromTrack();\n if (track) {\n track.addEventListener(TRACK_EVENTS, this._onTrackChange);\n }\n }\n\n private _updateFromTrack(): void {\n this._trackLabel = this._track ? getTrackLabel(this._track) : '';\n this.checked = this._track ? this._track.enabled : false;\n }\n\n private _updateTrack(): void {\n if (this._track) {\n this._track.enabled = this.checked;\n }\n }\n\n private readonly _onTrackChange = () => {\n this._updateFromTrack();\n };\n\n protected override handleChange(): void {\n this._updateTrack();\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<slot>${this._trackLabel}</slot>`;\n }\n}\n\nfunction getTrackLabel(track: MediaTrack): string {\n let label = track.label;\n let languageCode = track.language;\n if (label) {\n if (label === languageCode) {\n // Ignore default label with just the language code.\n } else {\n return label;\n }\n }\n let localizedLanguageName = languageCode && localizeLanguageName(languageCode);\n if (localizedLanguageName) {\n return localizedLanguageName;\n }\n return languageCode || label || '';\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-media-track-radio-button': MediaTrackRadioButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport verticalRadioGroupCss from './VerticalRadioGroup.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer, MediaTrack, MediaTrackList, TextTrack, TextTracksList } from 'theoplayer/chromeless';\nimport { Attribute } from '../util/Attribute';\nimport { isNonForcedSubtitleTrack } from '../util/TrackUtils';\nimport { createEvent } from '../util/EventUtils';\nimport { repeat } from 'lit/directives/repeat.js';\n\nconst TRACK_EVENTS = ['addtrack', 'removetrack'] as const;\n\nexport type TrackType = 'audio' | 'video' | 'subtitles';\n\n/**\n * A radio group that shows a list of media or text tracks,\n * from which the user can choose an active track.\n *\n * @attribute `track-type` - The track type of the available tracks. Can be \"audio\", \"video\" or \"subtitles\".\n * @attribute `show-off` - If set, shows an \"off\" button to disable all tracks.\n * Can only be used with the \"subtitles\" track type.\n */\n@customElement('theoplayer-track-radio-group')\n@stateReceiver(['player'])\nexport class TrackRadioGroup extends LitElement {\n static override styles = [verticalRadioGroupCss];\n\n private _player: ChromelessPlayer | undefined;\n private _trackType: TrackType = 'audio';\n\n @state()\n private accessor _tracksList: MediaTrackList | TextTracksList | undefined;\n\n /**\n * The track type of the available tracks.\n */\n get trackType(): TrackType {\n return this._trackType;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.TRACK_TYPE })\n set trackType(trackType: TrackType) {\n this._trackType = trackType;\n this._updateTracksList();\n }\n\n /**\n * If set, shows an \"off\" button to disable all tracks.\n *\n * Can only be used with the `\"subtitles\"` track type.\n */\n @property({ reflect: true, type: Boolean, attribute: Attribute.SHOW_OFF })\n accessor showOffButton: boolean = false;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._player = player;\n this._updateTracksList();\n this._updateTracks();\n }\n\n private _getTracksList(): MediaTrackList | TextTracksList | undefined {\n if (this._player === undefined) {\n return undefined;\n }\n const trackType = this.trackType;\n if (trackType === 'audio') {\n return this._player.audioTracks;\n } else if (trackType === 'video') {\n return this._player.videoTracks;\n } else if (trackType === 'subtitles') {\n return this._player.textTracks;\n } else {\n return undefined;\n }\n }\n\n private _updateTracksList(): void {\n const oldList = this._tracksList;\n const newList = this._getTracksList();\n if (oldList !== newList) {\n oldList?.removeEventListener(TRACK_EVENTS, this._updateTracks);\n newList?.addEventListener(TRACK_EVENTS, this._updateTracks);\n this._tracksList = newList;\n }\n }\n\n private _getTracks(): readonly (MediaTrack | TextTrack)[] {\n if (this._player === undefined) {\n return [];\n }\n const trackType = this.trackType;\n if (trackType === 'audio') {\n return this._player.audioTracks;\n } else if (trackType === 'video') {\n return this._player.videoTracks;\n } else if (trackType === 'subtitles') {\n return this._player.textTracks.filter(isNonForcedSubtitleTrack);\n } else {\n return [];\n }\n }\n\n private readonly _updateTracks = (): void => this.requestUpdate();\n\n private readonly _onChange = () => {\n this.dispatchEvent(createEvent('change', { bubbles: true }));\n };\n\n protected override render(): HTMLTemplateResult {\n const tracks = this._getTracks();\n const isSubtitles = this.trackType === 'subtitles';\n return html`<theoplayer-radio-group @change=${this._onChange}>\n ${\n /* \"Off\" button */\n this.showOffButton && isSubtitles\n ? html`<theoplayer-text-track-off-radio-button .trackList=${this._tracksList}></theoplayer-text-track-off-radio-button>`\n : undefined\n }\n ${\n /* Track buttons */\n repeat(\n tracks as ReadonlyArray<MediaTrack | TextTrack>,\n (track) => track.uid,\n (track) =>\n isSubtitles\n ? html`<theoplayer-text-track-radio-button .track=${track}></theoplayer-text-track-radio-button>`\n : html`<theoplayer-media-track-radio-button .track=${track}></theoplayer-media-track-radio-button>`\n )\n }\n </theoplayer-radio-group>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-track-radio-group': TrackRadioGroup;\n }\n}\n","import { RadioButton } from './RadioButton';\nimport type { TextTrack } from 'theoplayer/chromeless';\nimport { localizeLanguageName } from '../util/CommonUtils';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { html, type HTMLTemplateResult } from 'lit';\n\nconst TRACK_EVENTS = ['change', 'update'] as const;\n\n/**\n * `<theoplayer-text-track-radio-button>` -A radio button that shows the label of a given text track, and switches to that track when clicked.\n */\n@customElement('theoplayer-text-track-radio-button')\nexport class TextTrackRadioButton extends RadioButton {\n private _track: TextTrack | undefined = undefined;\n\n @state()\n private accessor _trackLabel = '';\n\n /**\n * The text track that is controlled by this radio button.\n */\n get track(): TextTrack | undefined {\n return this._track;\n }\n\n @property({ reflect: false, attribute: false })\n set track(track: TextTrack | undefined) {\n if (this._track === track) {\n return;\n }\n if (this._track) {\n this._track.removeEventListener(TRACK_EVENTS, this._onTrackChange);\n }\n this._track = track;\n this._updateFromTrack();\n if (track) {\n track.addEventListener(TRACK_EVENTS, this._onTrackChange);\n }\n }\n\n private _updateFromTrack(): void {\n this._trackLabel = this._track ? getTrackLabel(this._track) : '';\n this.checked = this._track ? this._track.mode === 'showing' : false;\n }\n\n private _updateTrack(): void {\n if (this._track) {\n this._track.mode = this.checked ? 'showing' : 'disabled';\n }\n }\n\n private readonly _onTrackChange = () => {\n this._updateFromTrack();\n };\n\n protected override handleChange(): void {\n this._updateTrack();\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<slot>${this._trackLabel}</slot>`;\n }\n}\n\nfunction getTrackLabel(track: TextTrack): string {\n let label = track.label;\n let languageCode = track.language;\n if (label) {\n if (label === languageCode) {\n // Ignore default label with just the language code.\n } else if (track.type === 'cea608' && /^CC\\d+$/.test(track.label)) {\n // Ignore default label with just the caption channel.\n } else {\n return label;\n }\n }\n let localizedLanguageName = languageCode && localizeLanguageName(languageCode);\n if (localizedLanguageName) {\n return localizedLanguageName;\n }\n if (track.type === 'cea608' && typeof track.captionChannel === 'number') {\n return `CC${track.captionChannel}`;\n }\n return languageCode || label || '';\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-text-track-radio-button': TextTrackRadioButton;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { RadioButton } from './RadioButton';\nimport type { TextTracksList } from 'theoplayer/chromeless';\nimport { isNonForcedSubtitleTrack, isSubtitleTrack } from '../util/TrackUtils';\n\nconst TRACK_EVENTS = ['change'] as const;\n\n/**\n * A radio button that disables the active subtitle track when clicked.\n */\n@customElement('theoplayer-text-track-off-radio-button')\nexport class TextTrackOffRadioButton extends RadioButton {\n private _trackList: TextTracksList | undefined = undefined;\n\n get trackList(): TextTracksList | undefined {\n return this._trackList;\n }\n\n @property({ reflect: false, attribute: false })\n set trackList(trackList: TextTracksList | undefined) {\n if (this._trackList) {\n this._trackList.removeEventListener(TRACK_EVENTS, this._onTrackChange);\n }\n this._trackList = trackList;\n this._updateFromTrackList();\n if (trackList) {\n trackList.addEventListener(TRACK_EVENTS, this._onTrackChange);\n }\n }\n\n private _updateFromTrackList(): void {\n this.checked = this._trackList ? !hasShowingSubtitleTrack(this._trackList) : true;\n }\n\n private _updateTrackList(): void {\n if (this._trackList && this.checked) {\n disableSubtitleTracks(this._trackList);\n }\n }\n\n private readonly _onTrackChange = () => {\n this._updateFromTrackList();\n };\n\n protected override handleChange() {\n this._updateTrackList();\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<slot>Off</slot>`;\n }\n}\n\nfunction hasShowingSubtitleTrack(trackList: TextTracksList): boolean {\n return trackList.some((track) => isNonForcedSubtitleTrack(track) && track.mode === 'showing');\n}\n\nfunction disableSubtitleTracks(trackList: TextTracksList): void {\n for (const track of trackList) {\n if (isSubtitleTrack(track) && track.mode === 'showing') {\n track.mode = 'disabled';\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-text-track-off-radio-button': TextTrackOffRadioButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer, EdgeStyle, TextTrackStyle } from 'theoplayer/chromeless';\nimport { Attribute } from '../util/Attribute';\nimport { parseColor, toRgb } from '../util/ColorUtils';\nimport type { TextTrackStyleOption } from './TextTrackStyleRadioGroup';\nimport { arrayFind } from '../util/CommonUtils';\nimport { knownColors, knownEdgeStyles, knownFontFamilies } from '../util/TextTrackStylePresets';\n\n/**\n * A control that displays the value of a single text track style option\n * in a human-readable format.\n *\n * @attribute `property` - The property name of the text track style option. One of {@link TextTrackStyleOption}.\n */\n@customElement('theoplayer-text-track-style-display')\n@stateReceiver(['player'])\nexport class TextTrackStyleDisplay extends LitElement {\n private _player: ChromelessPlayer | undefined;\n private _property: TextTrackStyleOption = 'fontColor';\n private _textTrackStyle: TextTrackStyle | undefined;\n\n /**\n * The property name of the text track style option.\n */\n get property(): TextTrackStyleOption {\n return this._property;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.PROPERTY })\n set property(property: TextTrackStyleOption) {\n this._property = property;\n this._updateFromPlayer();\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._textTrackStyle?.removeEventListener('change', this._updateFromPlayer);\n this._player = player;\n this._textTrackStyle = player?.textTrackStyle;\n this._updateFromPlayer();\n this._textTrackStyle?.addEventListener('change', this._updateFromPlayer);\n }\n\n private readonly _updateFromPlayer = () => this.requestUpdate();\n\n protected override render(): HTMLTemplateResult {\n return html`<span>${this.renderValue()}</span>`;\n }\n\n private renderValue(): string {\n if (this._player === undefined) {\n return '';\n }\n const property = this.property;\n switch (property) {\n case 'fontFamily': {\n return getFontFamilyLabel(this._player.textTrackStyle.fontFamily);\n }\n case 'fontColor':\n case 'backgroundColor':\n case 'windowColor': {\n return getColorLabel(this._player.textTrackStyle[property]);\n }\n case 'fontOpacity': {\n return getOpacityLabel(this._player.textTrackStyle.fontColor);\n }\n case 'backgroundOpacity': {\n return getOpacityLabel(this._player.textTrackStyle.backgroundColor);\n }\n case 'windowOpacity': {\n return getOpacityLabel(this._player.textTrackStyle.windowColor);\n }\n case 'edgeStyle': {\n return getEdgeStyleLabel(this._player.textTrackStyle.edgeStyle);\n }\n default: {\n const value = this._player.textTrackStyle[property];\n return value ? value : 'Default';\n }\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-text-track-style-display': TextTrackStyleDisplay;\n }\n}\n\nfunction getFontFamilyLabel(fontFamily: string | null | undefined): string {\n if (!fontFamily) {\n return 'Default';\n }\n const knownFontFamily = arrayFind(knownFontFamilies, ([_, value]) => value === fontFamily);\n if (knownFontFamily) {\n return knownFontFamily[0];\n }\n return 'Custom';\n}\n\nfunction getColorLabel(color: string | null | undefined): string {\n if (!color) {\n return 'Default';\n }\n const parsedColor = parseColor(color);\n if (parsedColor) {\n const colorRgb = toRgb(parsedColor);\n const knownColor = arrayFind(knownColors, ([_, value]) => value === colorRgb);\n if (knownColor) {\n return knownColor[0];\n }\n }\n return 'Custom';\n}\n\nfunction getOpacityLabel(color: string | null | undefined): string {\n if (!color) {\n return 'Default';\n }\n const parsedColor = parseColor(color);\n if (parsedColor) {\n return `${parsedColor.a_ * 100}%`;\n }\n return 'Custom';\n}\n\nfunction getEdgeStyleLabel(edgeStyle: EdgeStyle | null | undefined): string {\n if (!edgeStyle) {\n return 'Default';\n }\n const knownEdgeStyle = arrayFind(knownEdgeStyles, ([_, value]) => value === edgeStyle);\n if (knownEdgeStyle) {\n return knownEdgeStyle[0];\n }\n return 'Custom';\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport { RadioGroup } from './RadioGroup';\nimport verticalRadioGroupCss from './VerticalRadioGroup.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer, EdgeStyle, TextTrackStyle } from 'theoplayer/chromeless';\nimport type { RadioButton } from './RadioButton';\nimport { createEvent } from '../util/EventUtils';\nimport { Attribute } from '../util/Attribute';\nimport { COLOR_BLACK, COLOR_WHITE, colorWithAlpha, parseColor, type RgbaColor, rgbEquals, toRgb, toRgba } from '../util/ColorUtils';\n\nexport interface TextTrackStyleMap {\n fontFamily: string | undefined;\n fontColor: string | undefined;\n fontOpacity: number | undefined;\n fontSize: string | undefined;\n backgroundColor: string | undefined;\n backgroundOpacity: number | undefined;\n windowColor: string | undefined;\n windowOpacity: number | undefined;\n edgeStyle: EdgeStyle | undefined;\n}\n\nexport type TextTrackStyleOption = keyof TextTrackStyleMap;\n\n/**\n * A radio group that shows a list of values for a text track style option,\n * from which the user can choose a desired value.\n *\n * @attribute `property` - The property name of the text track style option. One of {@link TextTrackStyleOption}.\n * @slot {@link RadioButton} - The possible options for the text track style option.\n * For example: `<theoplayer-radio-button value=\"#ff0000\">Red</theoplayer-radio-button>`\n */\n@customElement('theoplayer-text-track-style-radio-group')\n@stateReceiver(['player'])\nexport class TextTrackStyleRadioGroup extends LitElement {\n static override styles = [verticalRadioGroupCss];\n\n private readonly _radioGroupRef: Ref<RadioGroup> = createRef<RadioGroup>();\n private _player: ChromelessPlayer | undefined;\n private _textTrackStyle: TextTrackStyle | undefined;\n private _property: TextTrackStyleOption = 'fontColor';\n private _value: any;\n\n protected override firstUpdated(): void {\n const radioGroup = this._radioGroupRef.value!;\n if (!(radioGroup instanceof RadioGroup)) {\n customElements.upgrade(radioGroup);\n }\n radioGroup.value = this.value;\n }\n\n /**\n * The property name of the text track style option.\n */\n get property(): TextTrackStyleOption {\n return this._property;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.PROPERTY })\n set property(property: TextTrackStyleOption) {\n if (this._property === property) return;\n this._property = property;\n this._updateFromPlayer();\n }\n\n /**\n * The currently chosen value for the text track style option.\n */\n get value(): string {\n return this._value;\n }\n\n @property({ reflect: false, attribute: false })\n set value(value: string) {\n if (this._value === value) {\n return;\n }\n this._value = value;\n this._updateToPlayer();\n const radioGroup = this._radioGroupRef.value;\n if (radioGroup) {\n radioGroup.value = value;\n }\n this.dispatchEvent(createEvent('change', { bubbles: true }));\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._textTrackStyle?.removeEventListener('change', this._updateFromPlayer);\n this._player = player;\n this._textTrackStyle = player?.textTrackStyle;\n this._updateFromPlayer();\n this._textTrackStyle?.addEventListener('change', this._updateFromPlayer);\n }\n\n private readonly _onChange = (): void => {\n const radioGroup = this._radioGroupRef.value;\n if (!radioGroup) return;\n this.value = radioGroup.value;\n };\n\n private readonly _updateFromPlayer = (): void => {\n if (this._player === undefined) {\n return;\n }\n switch (this.property) {\n case 'fontColor': {\n const color = this._player.textTrackStyle.fontColor;\n this.value = color ? toRgb(parseColor(color) ?? COLOR_WHITE) : '';\n break;\n }\n case 'backgroundColor': {\n const color = this._player.textTrackStyle.backgroundColor;\n this.value = color ? toRgb(parseColor(color) ?? COLOR_BLACK) : '';\n break;\n }\n case 'windowColor': {\n const color = this._player.textTrackStyle.windowColor;\n this.value = color ? toRgb(parseColor(color) ?? COLOR_BLACK) : '';\n break;\n }\n case 'fontOpacity': {\n const color = this._player.textTrackStyle.fontColor;\n this.value = color ? String((parseColor(color)?.a_ ?? 1) * 100) : '';\n break;\n }\n case 'backgroundOpacity': {\n const color = this._player.textTrackStyle.backgroundColor;\n this.value = color ? String((parseColor(color)?.a_ ?? 1) * 100) : '';\n break;\n }\n case 'windowOpacity': {\n const color = this._player.textTrackStyle.windowColor;\n this.value = color ? String((parseColor(color)?.a_ ?? 1) * 100) : '';\n break;\n }\n default: {\n this.value = this._player.textTrackStyle[this.property] ?? '';\n break;\n }\n }\n };\n\n private _updateToPlayer(): void {\n if (this._player === undefined) {\n return;\n }\n switch (this.property) {\n case 'fontColor': {\n this._player.textTrackStyle.fontColor = updateColor(this.value, this._player.textTrackStyle.fontColor, COLOR_WHITE);\n break;\n }\n case 'backgroundColor': {\n this._player.textTrackStyle.backgroundColor = updateColor(this.value, this._player.textTrackStyle.backgroundColor, COLOR_BLACK);\n break;\n }\n case 'windowColor': {\n this._player.textTrackStyle.windowColor = updateColor(this.value, this._player.textTrackStyle.windowColor, COLOR_BLACK);\n break;\n }\n case 'fontOpacity': {\n this._player.textTrackStyle.fontColor = updateOpacity(this.value, this._player.textTrackStyle.fontColor, COLOR_WHITE);\n break;\n }\n case 'backgroundOpacity': {\n this._player.textTrackStyle.backgroundColor = updateOpacity(this.value, this._player.textTrackStyle.backgroundColor, COLOR_BLACK);\n break;\n }\n case 'windowOpacity': {\n this._player.textTrackStyle.windowColor = updateOpacity(this.value, this._player.textTrackStyle.windowColor, COLOR_BLACK);\n break;\n }\n default: {\n this._player.textTrackStyle[this.property] = this.value == '' ? undefined : (this.value as any);\n break;\n }\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<theoplayer-radio-group ${ref(this._radioGroupRef)} @change=${this._onChange}><slot></slot></theoplayer-radio-group>`;\n }\n}\n\nfunction updateColor(colorValue: string, previousColor: string | undefined, defaultColor: RgbaColor): string | undefined {\n const alpha = parseColor(previousColor)?.a_ ?? 1;\n if (colorValue === '' && alpha === 1) {\n return undefined;\n } else {\n const color = parseColor(colorValue) ?? defaultColor;\n return toRgba(colorWithAlpha(color, alpha));\n }\n}\n\nfunction updateOpacity(opacityValue: string, colorValue: string | undefined, defaultColor: RgbaColor): string | undefined {\n const color = parseColor(colorValue) ?? defaultColor;\n if (opacityValue === '' && rgbEquals(color, defaultColor)) {\n return undefined;\n } else {\n const alpha = opacityValue == '' ? 1 : Number(opacityValue) / 100;\n return toRgba(colorWithAlpha(color, alpha));\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-text-track-style-radio-group': TextTrackStyleRadioGroup;\n }\n}\n","import { html, type TemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { MenuGroup } from './MenuGroup';\nimport textTrackStyleMenuCss from './TextTrackStyleMenu.css';\nimport menuTableCss from './MenuTable.css';\nimport type { EdgeStyle } from 'theoplayer/chromeless';\n\n// Load components used in template\nimport './TextTrackStyleDisplay';\nimport './TextTrackStyleRadioGroup';\n\nconst colorOptions: ReadonlyArray<{ label: string; value: `rgb(${number},${number},${number})` | '' }> = [\n { label: 'Default', value: '' },\n { label: 'White', value: 'rgb(255,255,255)' },\n { label: 'Yellow', value: 'rgb(255,255,0)' },\n { label: 'Green', value: 'rgb(0,255,0)' },\n { label: 'Cyan', value: 'rgb(0,255,255)' },\n { label: 'Blue', value: 'rgb(0,0,255)' },\n { label: 'Magenta', value: 'rgb(255,0,255)' },\n { label: 'Red', value: 'rgb(255,0,0)' },\n { label: 'Black', value: 'rgb(0,0,0)' }\n];\nconst fontFamilyOptions: ReadonlyArray<{ label: string; value: string }> = [\n { label: 'Default', value: '' },\n { label: 'Monospace Serif', value: '\"Courier New\", Courier, \"Nimbus Mono L\", \"Cutive Mono\", monospace' },\n { label: 'Proportional Serif', value: '\"Times New Roman\", Times, Georgia, Cambria, \"PT Serif Caption\", serif' },\n { label: 'Monospace Sans', value: '\"Deja Vu Sans Mono\", \"Lucida Console\", Monaco, Consolas, \"PT Mono\", monospace' },\n { label: 'Proportional Sans', value: 'Arial, Helvetica, Verdana, \"PT Sans Caption\", sans-serif' }\n];\nconst sizeOptions: ReadonlyArray<{ label: string; value: `${number}%` | '' }> = [\n { label: 'Default', value: '' },\n { label: '50%', value: '50%' },\n { label: '75%', value: '75%' },\n { label: '100%', value: '100%' },\n { label: '150%', value: '150%' },\n { label: '200%', value: '200%' }\n];\nconst opacityOptions: ReadonlyArray<{ label: string; value: `${number}` | '' }> = [\n { label: 'Default', value: '' },\n { label: '25%', value: '25' },\n { label: '50%', value: '50' },\n { label: '75%', value: '75' },\n { label: '100%', value: '100' }\n];\nconst edgeStyleOptions: ReadonlyArray<{ label: string; value: EdgeStyle | '' }> = [\n { label: 'Default', value: '' },\n { label: 'None', value: 'none' },\n { label: 'Drop shadow', value: 'dropshadow' },\n { label: 'Raised', value: 'raised' },\n { label: 'Depressed', value: 'depressed' },\n { label: 'Uniform', value: 'uniform' }\n];\n\n/**\n * A menu to change the {@link theoplayer!TextTrackStyle | text track style} of the player.\n *\n * @slot `heading` - A slot for the menu's heading.\n */\n@customElement('theoplayer-text-track-style-menu')\nexport class TextTrackStyleMenu extends MenuGroup {\n static styles = [...MenuGroup.styles, menuTableCss, textTrackStyleMenuCss];\n\n protected override render(): TemplateResult {\n return html`\n <theoplayer-menu class=\"theoplayer-text-track-style-menu\">\n <span class=\"theoplayer-menu-heading\" slot=\"heading\"><slot name=\"heading\">Subtitle options</slot></span>\n <theoplayer-text-track-style-reset-button\n class=\"theoplayer-menu-heading-button\"\n slot=\"heading\"\n ></theoplayer-text-track-style-reset-button>\n <table>\n <tr>\n <td><span>Font family</span></td>\n <td>\n <theoplayer-menu-button menu=\"font-family-menu\">\n <theoplayer-text-track-style-display property=\"fontFamily\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Font color</span></td>\n <td>\n <theoplayer-menu-button menu=\"font-color-menu\">\n <theoplayer-text-track-style-display property=\"fontColor\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Font opacity</span></td>\n <td>\n <theoplayer-menu-button menu=\"font-opacity-menu\">\n <theoplayer-text-track-style-display property=\"fontOpacity\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Font size</span></td>\n <td>\n <theoplayer-menu-button menu=\"font-size-menu\">\n <theoplayer-text-track-style-display property=\"fontSize\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Background color</span></td>\n <td>\n <theoplayer-menu-button menu=\"background-color-menu\">\n <theoplayer-text-track-style-display property=\"backgroundColor\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Background opacity</span></td>\n <td>\n <theoplayer-menu-button menu=\"background-opacity-menu\">\n <theoplayer-text-track-style-display property=\"backgroundOpacity\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Window color</span></td>\n <td>\n <theoplayer-menu-button menu=\"window-color-menu\">\n <theoplayer-text-track-style-display property=\"windowColor\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Window opacity</span></td>\n <td>\n <theoplayer-menu-button menu=\"window-opacity-menu\">\n <theoplayer-text-track-style-display property=\"windowOpacity\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Character edge style</span></td>\n <td>\n <theoplayer-menu-button menu=\"edge-style-menu\">\n <theoplayer-text-track-style-display property=\"edgeStyle\"></theoplayer-text-track-style-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n </table>\n </theoplayer-menu>\n <theoplayer-menu id=\"font-family-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Font family</span>\n <theoplayer-text-track-style-radio-group property=\"fontFamily\">\n ${fontFamilyOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n <theoplayer-menu id=\"font-color-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Font color</span>\n <theoplayer-text-track-style-radio-group property=\"fontColor\">\n ${colorOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n <theoplayer-menu id=\"font-opacity-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Font opacity</span>\n <theoplayer-text-track-style-radio-group property=\"fontOpacity\">\n ${opacityOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n <theoplayer-menu id=\"font-size-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Font size</span>\n <theoplayer-text-track-style-radio-group property=\"fontSize\">\n ${sizeOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n <theoplayer-menu id=\"background-color-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Background color</span>\n <theoplayer-text-track-style-radio-group property=\"backgroundColor\">\n ${colorOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n <theoplayer-menu id=\"background-opacity-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Background opacity</span>\n <theoplayer-text-track-style-radio-group property=\"backgroundOpacity\">\n ${opacityOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n <theoplayer-menu id=\"window-color-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Window color</span>\n <theoplayer-text-track-style-radio-group property=\"windowColor\">\n ${colorOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n <theoplayer-menu id=\"window-opacity-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Window opacity</span>\n <theoplayer-text-track-style-radio-group property=\"windowOpacity\">\n ${opacityOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n <theoplayer-menu id=\"edge-style-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Character edge style</span>\n <theoplayer-text-track-style-radio-group property=\"edgeStyle\">\n ${edgeStyleOptions.map(({ label, value }) => html`<theoplayer-radio-button value=${value}>${label}</theoplayer-radio-button> `)}\n </theoplayer-text-track-style-radio-group>\n </theoplayer-menu>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-text-track-style-menu': TextTrackStyleMenu;\n }\n}\n","import { html, type TemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { MenuGroup } from './MenuGroup';\nimport languageMenuCss from './LanguageMenu.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer, MediaTrack, MediaTrackList, TextTrack, TextTracksList } from 'theoplayer/chromeless';\nimport { isNonForcedSubtitleTrack } from '../util/TrackUtils';\nimport { Attribute } from '../util/Attribute';\n\n// Load components used in template\nimport './TrackRadioGroup';\nimport './TextTrackStyleMenu';\n\nconst TRACK_EVENTS = ['addtrack', 'removetrack'] as const;\n\n/**\n * A menu to change the spoken language and subtitles of the stream.\n *\n * @slot `heading` - A slot for the menu's heading.\n */\n@customElement('theoplayer-language-menu')\n@stateReceiver(['player'])\nexport class LanguageMenu extends MenuGroup {\n static styles = [...MenuGroup.styles, languageMenuCss];\n\n private _player: ChromelessPlayer | undefined;\n private _audioTrackList: MediaTrackList | undefined;\n private _textTrackList: TextTracksList | undefined;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ state: true })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._audioTrackList?.removeEventListener(TRACK_EVENTS, this._updateAudioTracks);\n this._textTrackList?.removeEventListener(TRACK_EVENTS, this._updateTextTracks);\n this._player = player;\n this._audioTrackList = player?.audioTracks;\n this._textTrackList = player?.textTracks;\n this._updateAudioTracks();\n this._updateTextTracks();\n this._audioTrackList?.addEventListener(TRACK_EVENTS, this._updateAudioTracks);\n this._textTrackList?.addEventListener(TRACK_EVENTS, this._updateTextTracks);\n }\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.HAS_AUDIO })\n private accessor _hasAudioTracks: boolean = false;\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.HAS_SUBTITLES })\n private accessor _hasSubtitles: boolean = false;\n\n private readonly _updateAudioTracks = (): void => {\n const newAudioTracks: readonly MediaTrack[] = this._player?.audioTracks ?? [];\n // Hide audio track selection if there's only one track.\n this._hasAudioTracks = newAudioTracks.length > 1;\n };\n\n private readonly _updateTextTracks = (): void => {\n const newSubtitleTracks: readonly TextTrack[] = this._player?.textTracks.filter(isNonForcedSubtitleTrack) ?? [];\n // Hide subtitle track selection if there are no tracks. If there's one, we still show an \"off\" option.\n this._hasSubtitles = newSubtitleTracks.length > 0;\n };\n\n protected override render(): TemplateResult {\n return html`\n <theoplayer-menu>\n <span class=\"theoplayer-menu-heading\" slot=\"heading\"><slot name=\"heading\">Language</slot></span>\n <theoplayer-settings-menu-button\n class=\"theoplayer-menu-heading-button\"\n menu=\"subtitle-options-menu\"\n slot=\"heading\"\n ></theoplayer-settings-menu-button>\n <div part=\"content\">\n <div part=\"audio\">\n <h2>Audio</h2>\n <theoplayer-track-radio-group track-type=\"audio\"></theoplayer-track-radio-group>\n </div>\n <div part=\"subtitles\">\n <h2>Subtitles</h2>\n <theoplayer-track-radio-group track-type=\"subtitles\" show-off></theoplayer-track-radio-group>\n </div>\n </div>\n </theoplayer-menu>\n <theoplayer-text-track-style-menu id=\"subtitle-options-menu\"></theoplayer-text-track-style-menu>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-language-menu': LanguageMenu;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { MenuButton } from './MenuButton';\nimport languageIcon from '../icons/language.svg';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer, MediaTrackList, TextTracksList } from 'theoplayer/chromeless';\nimport { isNonForcedSubtitleTrack } from '../util/TrackUtils';\nimport { Attribute } from '../util/Attribute';\nimport { toggleAttribute } from '../util/CommonUtils';\n\nconst TRACK_EVENTS = ['addtrack', 'removetrack'] as const;\n\n/**\n * A menu button that opens a {@link LanguageMenu}.\n *\n * When there are no alternative audio languages or subtitles, this button automatically hides itself.\n *\n * @attribute `menu` - The ID of the language menu.\n */\n@customElement('theoplayer-language-menu-button')\n@stateReceiver(['player'])\nexport class LanguageMenuButton extends MenuButton {\n private _player: ChromelessPlayer | undefined;\n private _audioTrackList: MediaTrackList | undefined;\n private _textTrackList: TextTracksList | undefined;\n\n override connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(Attribute.ARIA_LABEL)) {\n this.setAttribute(Attribute.ARIA_LABEL, 'open language menu');\n }\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._audioTrackList?.removeEventListener(TRACK_EVENTS, this._updateTracks);\n this._textTrackList?.removeEventListener(TRACK_EVENTS, this._updateTracks);\n this._player = player;\n this._audioTrackList = player?.audioTracks;\n this._textTrackList = player?.textTracks;\n this._updateTracks();\n this._audioTrackList?.addEventListener(TRACK_EVENTS, this._updateTracks);\n this._textTrackList?.addEventListener(TRACK_EVENTS, this._updateTracks);\n }\n\n private readonly _updateTracks = (): void => {\n const hasTracks =\n this._player !== undefined && (this._player.audioTracks.length >= 2 || this._player.textTracks.some(isNonForcedSubtitleTrack));\n toggleAttribute(this, Attribute.HIDDEN, !hasTracks);\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<span part=\"icon\"><slot>${unsafeSVG(languageIcon)}</slot></span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-language-menu-button': LanguageMenuButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, state } from 'lit/decorators.js';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport { RadioGroup } from './RadioGroup';\nimport verticalRadioGroupCss from './VerticalRadioGroup.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport type { RadioButton } from './RadioButton';\nimport { createEvent } from '../util/EventUtils';\n\n/**\n * A radio group that shows a list of playback rates,\n * from which the user can choose a desired playback rate.\n *\n * @slot {@link RadioButton} - The possible options for the playback rate.\n * The value of each radio button must be a valid number.\n * For example: `<theoplayer-radio-button value=\"2\">2x</theoplayer-radio-button>`\n */\n@customElement('theoplayer-playback-rate-radio-group')\n@stateReceiver(['player'])\nexport class PlaybackRateRadioGroup extends LitElement {\n static override styles = [verticalRadioGroupCss];\n\n private readonly _radioGroupRef: Ref<RadioGroup> = createRef<RadioGroup>();\n private _player: ChromelessPlayer | undefined;\n private _value: number = 1;\n\n protected override firstUpdated(): void {\n const radioGroup = this._radioGroupRef.value!;\n if (!(radioGroup instanceof RadioGroup)) {\n customElements.upgrade(radioGroup);\n }\n radioGroup.value = String(this.value);\n }\n\n /**\n * The currently chosen playback rate.\n */\n get value(): number {\n return this._value;\n }\n\n @state()\n set value(value: number) {\n value = Number(value);\n if (this._value === value) {\n return;\n }\n this._value = value;\n if (this._player !== undefined) {\n this._player.playbackRate = value;\n }\n const radioGroup = this._radioGroupRef.value;\n if (radioGroup) {\n radioGroup.value = String(value);\n }\n this.dispatchEvent(createEvent('change', { bubbles: true }));\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @state()\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener('ratechange', this._updateFromPlayer);\n }\n this._player = player;\n this._updateFromPlayer();\n if (this._player !== undefined) {\n this._player.addEventListener('ratechange', this._updateFromPlayer);\n }\n }\n\n private readonly _onChange = (): void => {\n const radioGroup = this._radioGroupRef.value;\n if (!radioGroup) return;\n this.value = Number(radioGroup.value);\n };\n\n private readonly _updateFromPlayer = (): void => {\n if (this._player !== undefined) {\n this.value = this._player.playbackRate;\n }\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<theoplayer-radio-group ${ref(this._radioGroupRef)} @change=${this._onChange}><slot></slot></theoplayer-radio-group>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-playback-rate-radio-group': PlaybackRateRadioGroup;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { MenuButton } from './MenuButton';\nimport speedIcon from '../icons/speed.svg';\nimport { Attribute } from '../util/Attribute';\n\n/**\n * A menu button that opens a [playback rate menu]{@link PlaybackRateMenu}.\n *\n * @attribute menu - The ID of the playback rate menu.\n */\n@customElement('theoplayer-playback-rate-menu-button')\nexport class PlaybackRateMenuButton extends MenuButton {\n override connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(Attribute.ARIA_LABEL)) {\n this.setAttribute(Attribute.ARIA_LABEL, 'open playback speed menu');\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<span part=\"icon\"><slot>${unsafeSVG(speedIcon)}</slot></span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-playback-rate-menu-button': PlaybackRateMenuButton;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { Menu } from './Menu';\n\n// Load components used in template\nimport './PlaybackRateRadioGroup';\n\nconst PLAYBACK_RATES = [0.25, 0.5, 1, 1.25, 1.5, 2];\n\n/**\n * A menu to change the playback rate of the player.\n *\n * @slot `heading` - A slot for the menu's heading.\n */\n@customElement('theoplayer-playback-rate-menu')\nexport class PlaybackRateMenu extends Menu {\n protected override renderMenuHeading(): HTMLTemplateResult {\n return html`<span slot=\"heading\"><slot name=\"heading\">Playback speed</slot></span>`;\n }\n\n protected override renderMenuContent(): HTMLTemplateResult {\n return html`<theoplayer-playback-rate-radio-group>\n ${PLAYBACK_RATES.map(\n (rate) => html`<theoplayer-radio-button value=${rate}>${rate === 1 ? 'Normal' : `${rate}x`}</theoplayer-radio-button>`\n )}\n </theoplayer-playback-rate-radio-group>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-playback-rate-menu': PlaybackRateMenu;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { customElement, state } from 'lit/decorators.js';\n\n/**\n * A control that displays the current playback rate of the player.\n */\n@customElement('theoplayer-playback-rate-display')\n@stateReceiver(['playbackRate'])\nexport class PlaybackRateDisplay extends LitElement {\n /**\n * The current playback rate.\n */\n @state()\n accessor playbackRate: number = 1;\n\n protected override render(): HTMLTemplateResult {\n return html`<span>${this.playbackRate === 1 ? 'Normal' : `${this.playbackRate}x`}</span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-playback-rate-display': PlaybackRateDisplay;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { VideoQuality } from 'theoplayer/chromeless';\nimport { formatQualityLabel } from '../util/TrackUtils';\n\n/**\n * A control that displays the name of the active video quality.\n */\n@customElement('theoplayer-active-quality-display')\n@stateReceiver(['activeVideoQuality', 'targetVideoQualities'])\nexport class ActiveQualityDisplay extends LitElement {\n @property({ reflect: false, attribute: false })\n accessor activeVideoQuality: VideoQuality | undefined = undefined;\n\n @property({ reflect: false, attribute: false })\n accessor targetVideoQualities: VideoQuality[] | undefined = undefined;\n\n protected override render(): HTMLTemplateResult {\n // If no target quality is selected, or more than one target quality is selected,\n // treat as \"automatic\" quality selection.\n const hasSingleTargetQuality = this.targetVideoQualities !== undefined && this.targetVideoQualities.length === 1;\n const targetQuality = hasSingleTargetQuality ? this.targetVideoQualities![0] : undefined;\n // Always show the target quality immediately, even if it's not the active quality yet.\n const selectedQuality = targetQuality ?? this.activeVideoQuality;\n const qualityLabel = formatQualityLabel(selectedQuality);\n let label: string;\n if (hasSingleTargetQuality) {\n // Manual quality selection: \"720p\" or \"Unknown\"\n label = qualityLabel ?? `Unknown`;\n } else {\n // Automatic quality selection: \"Automatic\" or \"Automatic (720p)\"\n label = `Automatic${qualityLabel ? ` (${qualityLabel})` : ''}`;\n }\n return html`<span>${label}</span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-active-quality-display': ActiveQualityDisplay;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { RadioButton } from './RadioButton';\nimport type { MediaTrack, VideoQuality } from 'theoplayer/chromeless';\nimport { formatQualityLabel } from '../util/TrackUtils';\n\nconst TRACK_EVENTS = ['activequalitychanged', 'targetqualitychanged'] as const;\nconst QUALITY_EVENTS = ['update'] as const;\n\n/**\n * A radio button that shows the label of a given video quality,\n * and switches the video track's {@link theoplayer!MediaTrack.targetQuality | target quality} to that quality when clicked.\n */\n@customElement('theoplayer-quality-radio-button')\nexport class QualityRadioButton extends RadioButton {\n private _track: MediaTrack | undefined = undefined;\n private _quality: VideoQuality | undefined = undefined;\n\n @state()\n private accessor _qualityLabel = '';\n\n /**\n * The video track containing the quality being controlled.\n */\n get track(): MediaTrack | undefined {\n return this._track;\n }\n\n @property({ reflect: false, attribute: false })\n set track(track: MediaTrack | undefined) {\n if (this._track === track) {\n return;\n }\n if (this._track) {\n this._track.removeEventListener(TRACK_EVENTS, this._updateFromTrack);\n }\n this._track = track;\n this._updateFromTrack();\n if (track) {\n track.addEventListener(TRACK_EVENTS, this._updateFromTrack);\n }\n }\n\n /**\n * The video quality being controlled.\n */\n get quality(): VideoQuality | undefined {\n return this._quality;\n }\n\n @property({ reflect: false, attribute: false })\n set quality(quality: VideoQuality | undefined) {\n if (this._quality === quality) {\n return;\n }\n if (this._quality) {\n this._quality.removeEventListener(QUALITY_EVENTS, this._updateFromQuality);\n }\n this._quality = quality;\n this._updateFromTrack();\n if (quality) {\n quality.addEventListener(QUALITY_EVENTS, this._updateFromQuality);\n }\n }\n\n private readonly _updateFromTrack = () => {\n if (this._track !== undefined) {\n let targetQualities = this._track.targetQuality;\n if (Array.isArray(targetQualities)) {\n if (targetQualities.length === 1) {\n targetQualities = targetQualities[0];\n } else {\n targetQualities = undefined;\n }\n }\n if (this._quality === undefined) {\n this.checked = targetQualities === undefined;\n } else {\n this.checked = targetQualities === this._quality;\n }\n }\n this._updateFromQuality();\n };\n\n private readonly _updateFromQuality = () => {\n this._qualityLabel = formatQualityLabel(this._quality) ?? 'Automatic';\n };\n\n protected override handleChange(): void {\n this._updateTargetQuality();\n }\n\n private _updateTargetQuality(): void {\n if (this._track && this.checked) {\n this._track.targetQuality = this._quality;\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<slot>${this._qualityLabel}</slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-quality-radio-button': QualityRadioButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, state } from 'lit/decorators.js';\nimport verticalRadioGroupCss from './VerticalRadioGroup.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer, MediaTrack, MediaTrackList, Quality, VideoQuality } from 'theoplayer/chromeless';\nimport { arrayFind } from '../util/CommonUtils';\nimport { createEvent } from '../util/EventUtils';\nimport { repeat } from 'lit/directives/repeat.js';\n\nconst TRACK_EVENTS = ['addtrack', 'removetrack', 'change'] as const;\n\n/**\n * A radio group that shows a list of available video qualities,\n * from which the user can choose a desired target quality.\n */\n@customElement('theoplayer-quality-radio-group')\n@stateReceiver(['player'])\nexport class QualityRadioGroup extends LitElement {\n static override styles = [verticalRadioGroupCss];\n\n private _player: ChromelessPlayer | undefined;\n private _videoTracks: MediaTrackList | undefined;\n\n @state()\n private accessor _track: MediaTrack | undefined;\n\n protected override firstUpdated(): void {\n this._updateTrack();\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @state()\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._videoTracks?.removeEventListener(TRACK_EVENTS, this._updateTrack);\n this._player = player;\n this._videoTracks = player?.videoTracks;\n this._updateTrack();\n this._videoTracks?.addEventListener(TRACK_EVENTS, this._updateTrack);\n }\n\n private readonly _onChange = () => {\n this.dispatchEvent(createEvent('change', { bubbles: true }));\n };\n\n private readonly _updateTrack = (): void => {\n const track = this._player ? arrayFind(this._player.videoTracks, (track) => track.enabled) : undefined;\n if (this._track === track) {\n return;\n }\n this._track?.removeEventListener('update', this._update);\n this._track = track;\n this._track?.addEventListener('update', this._update);\n this._update();\n };\n\n private _update = () => this.requestUpdate();\n\n protected override render(): HTMLTemplateResult {\n const qualities: VideoQuality[] = this._track ? (this._track.qualities as Quality[] as VideoQuality[]) : [];\n return html`\n <theoplayer-radio-group @change=${this._onChange}>\n <theoplayer-quality-radio-button .track=${this._track} .quality=${undefined}></theoplayer-quality-radio-button>\n ${\n /* If there is only one available quality, *only* show the \"Automatic\" option (without the single quality). */\n qualities.length !== 1 &&\n repeat(\n qualities,\n (quality) => quality.uid,\n (quality) =>\n html`<theoplayer-quality-radio-button .track=${this._track} .quality=${quality}></theoplayer-quality-radio-button>`\n )\n }\n </theoplayer-radio-group>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-quality-radio-group': QualityRadioGroup;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { Button } from './Button';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\n\n/**\n * A button that resets the text track style.\n */\n@customElement('theoplayer-text-track-style-reset-button')\n@stateReceiver(['player'])\nexport class TextTrackStyleResetButton extends Button {\n private _player: ChromelessPlayer | undefined;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n set player(player: ChromelessPlayer | undefined) {\n this._player = player;\n }\n\n protected override handleClick() {\n if (this._player === undefined) {\n return;\n }\n const { textTrackStyle } = this._player;\n textTrackStyle.fontFamily = undefined;\n textTrackStyle.fontColor = undefined;\n textTrackStyle.fontSize = undefined;\n textTrackStyle.backgroundColor = undefined;\n textTrackStyle.windowColor = undefined;\n textTrackStyle.edgeStyle = undefined;\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<slot>Reset</slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-text-track-style-reset-button': TextTrackStyleResetButton;\n }\n}\n","import { html, type TemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { MenuGroup } from './MenuGroup';\nimport menuTableCss from './MenuTable.css';\n\n// Load components used in template\nimport './ActiveQualityDisplay';\nimport './PlaybackRateDisplay';\nimport './PlaybackRateMenu';\n\n/**\n * A menu to change the settings of the player,\n * such as the active video quality and the playback speed.\n *\n * @slot `heading` - A slot for the menu's heading.\n */\n@customElement('theoplayer-settings-menu')\nexport class SettingsMenu extends MenuGroup {\n static styles = [...MenuGroup.styles, menuTableCss];\n\n protected override render(): TemplateResult {\n return html`\n <theoplayer-menu>\n <span slot=\"heading\"><slot name=\"heading\">Settings</slot></span>\n <table>\n <tr>\n <td><span>Quality</span></td>\n <td>\n <theoplayer-menu-button menu=\"quality-menu\">\n <theoplayer-active-quality-display></theoplayer-active-quality-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n <tr>\n <td><span>Playback speed</span></td>\n <td>\n <theoplayer-menu-button menu=\"playback-rate-menu\">\n <theoplayer-playback-rate-display></theoplayer-playback-rate-display>\n </theoplayer-menu-button>\n </td>\n </tr>\n </table>\n </theoplayer-menu>\n <theoplayer-menu id=\"quality-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Quality</span>\n <theoplayer-quality-radio-group></theoplayer-quality-radio-group>\n </theoplayer-menu>\n <theoplayer-playback-rate-menu id=\"playback-rate-menu\" menu-close-on-input hidden>\n <span slot=\"heading\">Playback speed</span>\n </theoplayer-playback-rate-menu>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-settings-menu': SettingsMenu;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { MenuButton } from './MenuButton';\nimport settingsIcon from '../icons/settings.svg';\nimport { Attribute } from '../util/Attribute';\n\n/**\n * A menu button that opens a {@link SettingsMenu}.\n *\n * @attribute `menu` - The ID of the settings menu.\n */\n@customElement('theoplayer-settings-menu-button')\nexport class SettingsMenuButton extends MenuButton {\n override connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(Attribute.ARIA_LABEL)) {\n this.setAttribute(Attribute.ARIA_LABEL, 'open settings menu');\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<span part=\"icon\"><slot>${unsafeSVG(settingsIcon)}</slot></span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-settings-menu-button': SettingsMenuButton;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { Button } from './Button';\nimport fullscreenButtonCss from './FullscreenButton.css';\nimport enterIcon from '../icons/fullscreen-enter.svg';\nimport exitIcon from '../icons/fullscreen-exit.svg';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { createCustomEvent } from '../util/EventUtils';\nimport { ENTER_FULLSCREEN_EVENT, type EnterFullscreenEvent } from '../events/EnterFullscreenEvent';\nimport { EXIT_FULLSCREEN_EVENT, type ExitFullscreenEvent } from '../events/ExitFullscreenEvent';\nimport { Attribute } from '../util/Attribute';\n\n/**\n * A button that toggles fullscreen.\n */\n@customElement('theoplayer-fullscreen-button')\n@stateReceiver(['fullscreen'])\nexport class FullscreenButton extends Button {\n static styles = [...Button.styles, fullscreenButtonCss];\n\n override connectedCallback() {\n super.connectedCallback();\n this._updateAriaLabel();\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.FULLSCREEN })\n accessor fullscreen: boolean = false;\n\n protected override handleClick(): void {\n if (!this.fullscreen) {\n const event: EnterFullscreenEvent = createCustomEvent(ENTER_FULLSCREEN_EVENT, {\n bubbles: true,\n composed: true\n });\n this.dispatchEvent(event);\n } else {\n const event: ExitFullscreenEvent = createCustomEvent(EXIT_FULLSCREEN_EVENT, {\n bubbles: true,\n composed: true\n });\n this.dispatchEvent(event);\n }\n }\n\n override attributeChangedCallback(attrName: string, oldValue: any, newValue: any) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (FullscreenButton.observedAttributes.indexOf(attrName as Attribute) >= 0) {\n this._updateAriaLabel();\n }\n }\n\n private _updateAriaLabel(): void {\n const label = this.fullscreen ? 'exit fullscreen' : 'enter fullscreen';\n this.setAttribute(Attribute.ARIA_LABEL, label);\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<span part=\"enter-icon\"><slot name=\"enter-icon\">${unsafeSVG(enterIcon)}</slot></span>\n <span part=\"exit-icon\"><slot name=\"exit-icon\">${unsafeSVG(exitIcon)}</slot></span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-fullscreen-button': FullscreenButton;\n }\n}\n","import * as shadyCss from '@webcomponents/shadycss';\nimport rangeCss from './Range.css';\nimport { Attribute } from '../util/Attribute';\nimport { ColorStops } from '../util/ColorStops';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { DeviceType } from '../util/DeviceType';\nimport { isArrowKey, KeyCode } from '../util/KeyCode';\nimport { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport { property, state } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\n\n/**\n * A slider to select a value from a range.\n *\n * @attribute `disabled` - Whether the range is disabled.\n * When disabled, the slider value cannot be changed, and the slider thumb is hidden.\n * @attribute `inert` - Whether the range is inert.\n * When inert, the slider value cannot be changed, but the slider thumb is still visible.\n *\n * @group Components\n */\n@stateReceiver(['deviceType'])\nexport abstract class Range extends LitElement {\n static override styles = [rangeCss];\n\n protected readonly _rangeRef: Ref<HTMLInputElement> = createRef<HTMLInputElement>();\n\n private _min: number = 0;\n private _max: number = 100;\n private _value: number = 0;\n private _disabled: boolean = false;\n private _hidden: boolean = false;\n private _inert: boolean = false;\n\n private _rangeWidth: number = 0;\n private _thumbWidth: number = 10;\n\n @state()\n private accessor _pointerWidth: number = 0;\n\n connectedCallback(): void {\n super.connectedCallback();\n\n this._updateRange();\n this.addEventListener('pointermove', this._updatePointerBar);\n }\n\n disconnectedCallback(): void {\n this.removeEventListener('pointermove', this._updatePointerBar);\n }\n\n /**\n * Whether the range is disabled.\n *\n * When disabled, the slider value cannot be changed, and the slider thumb is hidden.\n */\n get disabled(): boolean {\n return this._disabled;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.DISABLED })\n set disabled(disabled: boolean) {\n if (this._disabled === disabled) return;\n this._disabled = disabled;\n this.setAttribute('aria-disabled', this._disabled ? 'true' : 'false');\n }\n\n /**\n * Whether the range is hidden.\n */\n get hidden(): boolean {\n return this._hidden;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.HIDDEN })\n set hidden(hidden: boolean) {\n if (this._hidden === hidden) return;\n this._hidden = hidden;\n this._updateRange();\n }\n\n /**\n * Whether the range is inert.\n *\n * When inert, the slider value cannot be changed, but the slider thumb is still visible.\n */\n get inert() {\n return this._inert;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.INERT })\n set inert(inert: boolean) {\n this._inert = inert;\n }\n\n /**\n * The current value.\n */\n get value(): number {\n return this._value;\n }\n\n @property({ reflect: false, attribute: false })\n set value(value: number) {\n let newValue = value;\n if (!isNaN(this.min)) {\n newValue = Math.max(this.min, newValue);\n }\n if (!isNaN(this.max)) {\n newValue = Math.min(this.max, newValue);\n }\n if (this._value === newValue) return;\n this._value = newValue;\n this.handleInput();\n }\n\n /**\n * The minimum allowed value.\n */\n get min(): number {\n return this._min;\n }\n\n @property({ reflect: true, type: Number, attribute: 'min' })\n set min(min: number) {\n this._min = min;\n this._updateRange();\n }\n\n /**\n * The maximum allowed value.\n */\n get max(): number {\n return this._max;\n }\n\n @property({ reflect: true, type: Number, attribute: 'max' })\n set max(max: number) {\n this._max = max;\n this._updateRange();\n }\n\n /**\n * The granularity at which the value can change.\n *\n * If set to `\"any\"`, the value can change with arbitrary precision.\n */\n @property({\n reflect: true,\n attribute: 'step',\n converter: {\n fromAttribute: (value): number | 'any' => (value == null || value === 'any' ? 'any' : Number(value))\n }\n })\n accessor step: number | 'any' = 'any';\n\n @property({ reflect: true, type: String, attribute: Attribute.DEVICE_TYPE })\n accessor deviceType: DeviceType = 'desktop';\n\n @property({ reflect: true, type: String, attribute: 'aria-live' })\n accessor ariaLive: string | null = null;\n\n private readonly _onInput = (event: Event) => {\n this.value = (event.target as HTMLInputElement).valueAsNumber;\n };\n\n protected handleInput(): void {\n this._updateRange();\n }\n\n protected _updateRange(useCachedWidth?: boolean): void {\n if (this.hidden) {\n return;\n }\n if (!useCachedWidth) {\n this.updateCachedWidths_();\n }\n this.updateBar_();\n }\n\n /**\n * The value for the `aria-label` attribute of the `<input type=\"range\">` element.\n */\n protected abstract getAriaLabel(): string;\n\n /**\n * The value for the `aria-valuetext` attribute of the `<input type=\"range\">` element.\n */\n protected abstract getAriaValueText(): string;\n\n /**\n * Native ranges have a single color for the whole track, which is different\n * from most video players that have a colored \"bar\" to the left of the handle\n * showing playback progress or volume level. Here we're building that bar\n * by using a background gradient that moves with the range value.\n */\n private updateBar_() {\n const gradientStops = this.getBarColors().toGradientStops();\n shadyCss.styleSubtree(this, {\n '--theoplayer-range-track-progress-internal': `linear-gradient(to right, ${gradientStops})`\n });\n }\n\n /**\n * Build the color gradient for the range bar.\n * Creating an array so progress-bar can insert the buffered bar.\n */\n protected getBarColors(): ColorStops {\n const { value, min, max } = this;\n const relativeValue = value - min;\n const relativeMax = max - min;\n let rangePercent = (relativeValue / relativeMax) * 100;\n if (isNaN(rangePercent)) {\n rangePercent = 0;\n }\n\n let thumbPercent = 0;\n // If the range thumb is at min or max don't correct the time range.\n // Ideally the thumb center would go all the way to min and max values\n // but input[type=range] doesn't play like that.\n if (min < value && value < max) {\n const thumbOffset = this._thumbWidth * (0.5 - rangePercent / 100);\n thumbPercent = (thumbOffset / this._rangeWidth) * 100;\n }\n\n const stops = new ColorStops();\n stops.add('var(--theoplayer-range-bar-color, #fff)', 0, rangePercent + thumbPercent);\n return stops;\n }\n\n private updateCachedWidths_(): void {\n // Use the last non-zero range width, in case the range is temporarily hidden.\n const rangeWidth = this._rangeRef.value?.offsetWidth ?? 0;\n if (rangeWidth > 0) {\n this._rangeWidth = rangeWidth;\n }\n const thumbWidth = parseInt(getComputedStyle(this).getPropertyValue('--theoplayer-range-thumb-width') || '10px');\n if (thumbWidth > 0) {\n this._thumbWidth = thumbWidth;\n }\n }\n\n protected getMinimumStepForVisibleChange_(): number {\n // The smallest visible change is 1 pixel.\n // Compute how much the value needs to change for that.\n const { min, max } = this;\n const relativeMax = max - min;\n if (relativeMax <= 0) {\n return NaN;\n }\n return relativeMax / this._rangeWidth;\n }\n\n private readonly _updatePointerBar = (e: PointerEvent): void => {\n const rangeEl = this._rangeRef.value;\n if (this.disabled || this.inert || !rangeEl) {\n return;\n }\n // Get mouse position percent\n const rangeRect = rangeEl.getBoundingClientRect();\n let mousePercent = (e.clientX - rangeRect.left) / rangeRect.width;\n // Lock between 0 and 1\n mousePercent = Math.max(0, Math.min(1, mousePercent));\n this.updatePointer_(mousePercent, rangeRect);\n };\n\n protected updatePointer_(mousePercent: number, rangeRect: DOMRectReadOnly): void {\n this._pointerWidth = mousePercent * rangeRect.width;\n }\n\n private readonly _onKeyDown = (e: KeyboardEvent): void => {\n this.handleKeyDown_(e);\n };\n\n protected handleKeyDown_(e: KeyboardEvent) {\n if (this.deviceType === 'tv' && isArrowKey(e.keyCode)) {\n // On TV devices, only allow left/right arrow keys to move the slider.\n if (e.keyCode === KeyCode.LEFT || e.keyCode === KeyCode.RIGHT) {\n // Stop propagation, to prevent <theoplayer-ui> from navigating to a different control\n // while we're moving the slider.\n e.stopPropagation();\n } else if (e.keyCode === KeyCode.UP || e.keyCode === KeyCode.DOWN) {\n // Prevent default, to stop the browser from moving the slider.\n e.preventDefault();\n }\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<div part=\"container\">\n <div part=\"background\"></div>\n <div part=\"pointer\" style=${styleMap({ width: `${this._pointerWidth}px` })}></div>\n <input\n type=\"range\"\n ${ref(this._rangeRef)}\n .min=${this.min}\n .max=${this.max}\n .step=${this.step}\n .value=${this.value}\n .disabled=${this.disabled || this.inert}\n aria-label=\"${this.getAriaLabel()}\"\n aria-valuetext=${this.getAriaValueText()}\n aria-live=${this.ariaLive}\n @input=${this._onInput}\n @change=${\n /* Internet Explorer does not fire 'input' events for <input> elements... use 'change' instead. */\n this._onInput\n }\n @keydown=${this._onKeyDown}\n />\n ${this.renderRangeExtras()}\n </div>`;\n }\n\n protected renderRangeExtras(): HTMLTemplateResult {\n return html``;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport previewThumbnailCss from './PreviewThumbnail.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer, TextTrack, TextTrackCue, TextTrackCueList, TextTracksList } from 'theoplayer/chromeless';\nimport { arrayFind, noOp } from '../util/CommonUtils';\n\nconst TRACK_EVENTS = ['addtrack', 'removetrack'] as const;\n\n/**\n * A display that shows the thumbnail image at the current preview time\n * of a {@link TimeRange | `<theoplayer-time-range>`}.\n *\n * The first `metadata` text track whose label equals `\"thumbnails\"` is used as source for the thumbnails.\n * This track is expected to contain cues whose content is the URL for the thumbnail image.\n * If the thumbnail image URL ends with a [spatial fragment](https://www.w3.org/TR/media-frags/#naming-space)\n * (e.g. `#xywh=180,80,60,40`), then the thumbnail is clipped to the rectangle defined by that fragment.\n *\n * If the stream does not contain thumbnails, then this display shows nothing.\n */\n@customElement('theoplayer-preview-thumbnail')\n@stateReceiver(['player', 'previewTime'])\nexport class PreviewThumbnail extends LitElement {\n static override styles = [previewThumbnailCss];\n\n private readonly _canvasRef: Ref<HTMLCanvasElement> = createRef<HTMLCanvasElement>();\n private _canvasContext: CanvasRenderingContext2D | undefined;\n private readonly _thumbnailImageSource: HTMLImageElement;\n\n private _player: ChromelessPlayer | undefined;\n private _textTrackList: TextTracksList | undefined;\n private _previewTime: number = NaN;\n private _thumbnailTextTrack: TextTrack | undefined;\n private _lastLoadedThumbnailUrl: string | undefined;\n\n @state()\n private accessor _thumbnailVisible: boolean = false;\n\n constructor() {\n super();\n\n this._thumbnailImageSource = document.createElement('img');\n this._thumbnailImageSource.decoding = 'async';\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._textTrackList?.removeEventListener(TRACK_EVENTS, this._updateThumbnailTextTrack);\n this._player = player;\n this._textTrackList = player?.textTracks;\n this._updateThumbnailTextTrack();\n this._textTrackList?.addEventListener(TRACK_EVENTS, this._updateThumbnailTextTrack);\n }\n\n get previewTime(): number {\n return this._previewTime;\n }\n\n @state()\n set previewTime(previewTime: number) {\n this._previewTime = previewTime;\n this.updateThumbnail_();\n }\n\n private readonly _updateThumbnailTextTrack = (): void => {\n const oldTrack = this._thumbnailTextTrack;\n const newTrack = this._player ? arrayFind(this._player.textTracks, isThumbnailTextTrack) : undefined;\n if (oldTrack === newTrack) {\n return;\n }\n this._thumbnailTextTrack = newTrack;\n this.updateThumbnail_();\n };\n\n private updateThumbnail_(): void {\n const track = this._thumbnailTextTrack;\n if (track === undefined) {\n this.hideThumbnail_();\n return;\n }\n if (track.mode === 'disabled') {\n track.mode = 'hidden';\n }\n const cue = getCueAtTime(track.cues!, this._previewTime);\n if (cue === undefined) {\n this.hideThumbnail_();\n return;\n }\n const content = (cue.content as string).trim();\n const sprite = parseSpriteUrl(content);\n // Resolve relative URLs against track's URL (or page URL)\n let thumbnailUrl = sprite ? sprite.url : content;\n thumbnailUrl = new URL(thumbnailUrl, track.src || location.href).href;\n // Load thumbnail image, if not yet loaded\n if (this._lastLoadedThumbnailUrl !== thumbnailUrl) {\n this.loadThumbnailImage_(thumbnailUrl);\n return;\n }\n this.showThumbnail_(sprite);\n }\n\n private loadThumbnailImage_(url: string): void {\n if (this._thumbnailImageSource.src === url) {\n // Already loading this URL, wait for the current load to complete.\n return;\n }\n const onLoad = () => {\n this._lastLoadedThumbnailUrl = url;\n this.updateThumbnail_();\n };\n if (typeof this._thumbnailImageSource.decode === 'function') {\n // Load and decode in parallel\n this._thumbnailImageSource.src = url;\n this._thumbnailImageSource.decode().then(onLoad, noOp);\n } else {\n // Load in parallel, decode synchronously\n this._thumbnailImageSource.onload = onLoad;\n // Reset `src` to ensure `onload` will be triggered.\n this._thumbnailImageSource.src = '';\n this._thumbnailImageSource.src = url;\n }\n }\n\n private showThumbnail_(sprite: Sprite | undefined): void {\n const canvas = this._canvasRef.value;\n if (!canvas) return;\n this._canvasContext ??= canvas.getContext('2d') ?? undefined;\n if (!this._canvasContext) return;\n if (sprite) {\n // Draw part of image\n canvas.width = sprite.w;\n canvas.height = sprite.h;\n this._canvasContext.drawImage(this._thumbnailImageSource, sprite.x, sprite.y, sprite.w, sprite.h, 0, 0, sprite.w, sprite.h);\n } else {\n // Draw entire image\n canvas.width = this._thumbnailImageSource.naturalWidth;\n canvas.height = this._thumbnailImageSource.naturalHeight;\n this._canvasContext.drawImage(this._thumbnailImageSource, 0, 0);\n }\n this._thumbnailVisible = true;\n }\n\n private hideThumbnail_(): void {\n this._thumbnailVisible = false;\n }\n\n protected override render(): HTMLTemplateResult {\n const canvasStyle = { display: this._thumbnailVisible ? 'block' : 'none' };\n return html`<canvas ${ref(this._canvasRef)} style=${styleMap(canvasStyle)}></canvas>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-preview-thumbnail': PreviewThumbnail;\n }\n}\n\nfunction isThumbnailTextTrack(track: TextTrack): boolean {\n return track.kind === 'metadata' && track.label === 'thumbnails';\n}\n\nfunction getCueAtTime(cues: TextTrackCueList, time: number): TextTrackCue | undefined {\n if (cues.length === 0) {\n return undefined;\n }\n let result = cues[0];\n for (let cue of cues) {\n if (cue.startTime <= time) {\n result = cue;\n } else if (time >= cue.endTime) {\n return result;\n }\n }\n return result;\n}\n\ninterface Sprite {\n url: string;\n x: number;\n y: number;\n w: number;\n h: number;\n}\n\nfunction parseSpriteUrl(spriteUrl: string): Sprite | undefined {\n const match = spriteUrl.match(/^(.+)#xywh=(\\d+),(\\d+),(\\d+),(\\d+)$/);\n if (!match) {\n return undefined;\n }\n const [, url, x, y, w, h] = match;\n return {\n url,\n x: +x,\n y: +y,\n w: +w,\n h: +h\n };\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport textDisplayCss from './TextDisplay.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { formatTime } from '../util/TimeUtils';\nimport { Attribute } from '../util/Attribute';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport type { StreamType } from '../util/StreamType';\n\nconst PLAYER_EVENTS = ['timeupdate', 'seeking', 'seeked', 'durationchange'] as const;\n\n/**\n * A display that shows the current preview time of a {@link TimeRange | `<theoplayer-time-range>`}.\n *\n * @attribute `remaining` - If set, shows the remaining time of the stream.\n * @attribute `remaining-when-live` - If set, and the stream is a livestream, shows the remaining time\n * (until the live point) of the stream.\n */\n@customElement('theoplayer-preview-time-display')\n@stateReceiver(['player', 'previewTime', 'streamType'])\nexport class PreviewTimeDisplay extends LitElement {\n static override styles = [textDisplayCss];\n\n private _player: ChromelessPlayer | undefined;\n\n connectedCallback(): void {\n super.connectedCallback();\n this._updateFromPlayer();\n }\n\n @state()\n accessor previewTime: number = NaN;\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.REMAINING })\n accessor remaining: boolean = false;\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.REMAINING_WHEN_LIVE })\n accessor remainingWhenLive: boolean = false;\n\n @property({ reflect: true, type: String, attribute: Attribute.STREAM_TYPE })\n accessor streamType: StreamType = 'vod';\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n this._player = player;\n this._updateFromPlayer();\n if (this._player !== undefined) {\n this._player.addEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n }\n\n @state()\n private accessor _endTime: number = 0;\n\n private readonly _updateFromPlayer = (): void => {\n const duration = this._player ? this._player.duration : NaN;\n const seekable = this._player?.seekable;\n this._endTime = isFinite(duration) ? duration : seekable && seekable.length > 0 ? seekable.end(0) : NaN;\n };\n\n protected override render(): HTMLTemplateResult {\n let previewTime = this.previewTime;\n const endTime = this._endTime;\n const remaining = this.remaining || (this.remainingWhenLive && this.streamType !== 'vod');\n if (remaining) {\n previewTime = -((endTime || 0) - previewTime);\n }\n return html`<span>${formatTime(previewTime, endTime, remaining)}</span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-preview-time-display': PreviewTimeDisplay;\n }\n}\n","import { html, type HTMLTemplateResult, type PropertyValues } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { createRef, type Ref, ref } from 'lit/directives/ref.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { Range } from './Range';\nimport timeRangeCss from './TimeRange.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { Ads, ChromelessPlayer, TimeRanges } from 'theoplayer/chromeless';\nimport { formatAsTimePhrase } from '../util/TimeUtils';\nimport { createCustomEvent } from '../util/EventUtils';\nimport type { PreviewTimeChangeEvent } from '../events/PreviewTimeChangeEvent';\nimport { PREVIEW_TIME_CHANGE_EVENT } from '../events/PreviewTimeChangeEvent';\nimport { Attribute } from '../util/Attribute';\nimport type { StreamType } from '../util/StreamType';\nimport { isLinearAd } from '../util/AdUtils';\nimport type { ColorStops } from '../util/ColorStops';\nimport { KeyCode } from '../util/KeyCode';\n\n// Load components used in template\nimport './PreviewThumbnail';\nimport './PreviewTimeDisplay';\n\nconst UPDATE_EVENTS = ['timeupdate', 'durationchange', 'ratechange', 'seeking', 'seeked'] as const;\nconst AUTO_ADVANCE_EVENTS = ['play', 'pause', 'ended', 'durationchange', 'readystatechange', 'error'] as const;\nconst AD_EVENTS = ['adbreakbegin', 'adbreakend', 'adbreakchange', 'updateadbreak', 'adbegin', 'adend', 'adskip', 'addad', 'updatead'] as const;\nconst DEFAULT_MISSING_TIME_PHRASE = 'video not loaded, unknown time';\n\n/**\n * Width of an ad marker on the progress bar, in percent of the total bar width.\n */\nconst AD_MARKER_WIDTH = 1;\n\n/**\n * A seek bar, showing the current time of the player,\n * and which seeks the player when clicked or dragged.\n *\n * @slot `preview` - A slot holding a preview of the seek time, shown while hovering the seek bar.\n * By default, this shows the {@link PreviewTimeDisplay | preview time} and\n * the {@link PreviewThumbnail | preview thumbnail}.\n */\n@customElement('theoplayer-time-range')\n@stateReceiver(['player', 'streamType', 'deviceType'])\nexport class TimeRange extends Range {\n static override styles = [...Range.styles, timeRangeCss];\n\n private readonly _previewBoxEl: Ref<HTMLElement> = createRef<HTMLElement>();\n\n private _player: ChromelessPlayer | undefined;\n private _streamType: StreamType = 'vod';\n private _showAdMarkers: boolean = false;\n private _ads: Ads | undefined;\n private _pausedWhileScrubbing: boolean = false;\n\n private _autoAdvanceId: number = 0;\n private _lastUpdateTime: number = 0;\n private _lastCurrentTime: number = 0;\n private _lastPlaybackRate: number = 0;\n\n constructor() {\n super();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.hasAttribute('min')) {\n this.min = 0;\n }\n if (!this.hasAttribute('max')) {\n this.max = 1000;\n }\n if (!this.hasAttribute(Attribute.ARIA_LIVE)) {\n this.ariaLive = 'off';\n }\n\n this._toggleAutoAdvance();\n }\n\n protected override firstUpdated(_changedProperties: PropertyValues) {\n this._rangeRef.value?.addEventListener('mousedown', this._pauseOnScrubStart);\n this._rangeRef.value?.addEventListener('pointerdown', this._pauseOnScrubStart);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this._rangeRef.value?.removeEventListener('mousedown', this._pauseOnScrubStart);\n this._rangeRef.value?.removeEventListener('pointerdown', this._pauseOnScrubStart);\n\n this._toggleAutoAdvance();\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener(UPDATE_EVENTS, this._updateFromPlayer);\n this._player.removeEventListener(AUTO_ADVANCE_EVENTS, this._toggleAutoAdvance);\n }\n this._ads?.removeEventListener(AD_EVENTS, this._onAdChange);\n this._player = player;\n this._ads = player?.ads;\n this._updateFromPlayer();\n this._toggleAutoAdvance();\n if (this._player !== undefined) {\n this._player.addEventListener(UPDATE_EVENTS, this._updateFromPlayer);\n this._player.addEventListener(AUTO_ADVANCE_EVENTS, this._toggleAutoAdvance);\n }\n this._ads?.addEventListener(AD_EVENTS, this._onAdChange);\n }\n\n get streamType(): StreamType {\n return this._streamType;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.STREAM_TYPE })\n set streamType(streamType: StreamType) {\n this._streamType = streamType;\n this.updateDisabled_();\n }\n\n get showAdMarkers(): boolean {\n return this._showAdMarkers;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.SHOW_AD_MARKERS })\n set showAdMarkers(showAdMarkers: boolean) {\n this._showAdMarkers = showAdMarkers;\n this._updateRange();\n }\n\n private readonly _updateFromPlayer = () => {\n if (this._player === undefined) {\n return;\n }\n this._lastUpdateTime = performance.now();\n this._lastCurrentTime = this._player.currentTime;\n this._lastPlaybackRate = this._player.playbackRate;\n const seekable = this._player.seekable;\n let min: number;\n let max: number;\n let value: number = this._lastCurrentTime;\n if (seekable.length !== 0) {\n min = seekable.start(0);\n max = seekable.end(0);\n } else {\n min = 0;\n max = this._player.duration;\n }\n if (!isFinite(this._lastCurrentTime)) {\n const isLive = this._player.duration === Infinity;\n value = isLive ? max : min;\n }\n this.min = min;\n this.max = max;\n this.value = value;\n this.updateDisabled_(seekable);\n };\n\n private updateDisabled_(seekable: TimeRanges | undefined = this._player?.seekable) {\n let disabled = this.streamType === 'live';\n if (seekable !== undefined) {\n disabled ||= seekable.length === 0;\n }\n this.disabled = disabled;\n }\n\n protected override getAriaLabel(): string {\n return 'seek';\n }\n\n protected override getAriaValueText(): string {\n const currentTimePhrase = formatAsTimePhrase(this.value);\n const totalTimePhrase = formatAsTimePhrase(this.max);\n if (currentTimePhrase && totalTimePhrase) {\n return `${currentTimePhrase} of ${totalTimePhrase}`;\n }\n return DEFAULT_MISSING_TIME_PHRASE;\n }\n\n protected override handleInput(): void {\n if (this._player !== undefined && this._player.currentTime !== this.value) {\n this._player.currentTime = this.value;\n }\n super.handleInput();\n }\n\n private readonly _pauseOnScrubStart = () => {\n if (this._pausedWhileScrubbing) {\n // Already scrubbing.\n return;\n }\n if (this.disabled || this.inert) {\n return;\n }\n if (this._player === undefined || this._player.paused) {\n // Player is already paused.\n return;\n }\n this._pausedWhileScrubbing = true;\n this._player.pause();\n document.addEventListener('mouseup', this._playOnScrubEnd);\n document.addEventListener('pointerup', this._playOnScrubEnd);\n document.addEventListener('pointercancel', this._playOnScrubEnd);\n };\n\n private readonly _playOnScrubEnd = () => {\n if (!this._pausedWhileScrubbing) {\n return;\n }\n this._pausedWhileScrubbing = false;\n document.removeEventListener('mouseup', this._playOnScrubEnd);\n document.removeEventListener('pointerup', this._playOnScrubEnd);\n document.removeEventListener('pointercancel', this._playOnScrubEnd);\n if (this._player !== undefined && this._player.paused) {\n this._player.play();\n }\n };\n\n private shouldAutoAdvance_(): boolean {\n return (\n this.isConnected &&\n this._player !== undefined &&\n !this._player.paused &&\n !this._player.ended &&\n !this._player.errorObject &&\n this._player.readyState >= 3 &&\n isFinite(this._lastCurrentTime) &&\n this.needToUpdateEveryFrame_()\n );\n }\n\n private needToUpdateEveryFrame_(): boolean {\n // The player fires at least one timeupdate event every 250ms.\n // If it takes more than 250ms to advance the playhead by 1 pixel,\n // then we definitely don't need to update every frame.\n const minimumStep = this.getMinimumStepForVisibleChange_();\n const timeUpdateStep = 0.25 * this._lastPlaybackRate;\n return minimumStep < timeUpdateStep;\n }\n\n private readonly _toggleAutoAdvance = () => {\n if (this.shouldAutoAdvance_()) {\n if (this._autoAdvanceId === 0) {\n this._updateFromPlayer();\n this._autoAdvanceId = requestAnimationFrame(this._autoAdvanceWhilePlaying);\n }\n } else {\n if (this._autoAdvanceId !== 0) {\n this._updateFromPlayer();\n cancelAnimationFrame(this._autoAdvanceId);\n this._autoAdvanceId = 0;\n }\n }\n };\n\n private readonly _autoAdvanceWhilePlaying = () => {\n if (!this.shouldAutoAdvance_()) {\n this._autoAdvanceId = 0;\n return;\n }\n\n const delta = (performance.now() - this._lastUpdateTime) / 1000;\n const newValue = this._lastCurrentTime + delta * this._lastPlaybackRate;\n if (Math.abs(newValue - this.value) >= this.getMinimumStepForVisibleChange_()) {\n this.value = newValue;\n\n // Use cached width to avoid synchronous layout\n this._updateRange(/* useCachedWidth = */ true);\n }\n\n this._autoAdvanceId = requestAnimationFrame(this._autoAdvanceWhilePlaying);\n };\n\n @state()\n private accessor _previewRailTransform: string = '';\n\n protected override updatePointer_(mousePercent: number, rangeRect: DOMRectReadOnly): void {\n super.updatePointer_(mousePercent, rangeRect);\n\n // Update preview rail, keeping the preview box within bounds\n let previewPos = rangeRect.left + mousePercent * rangeRect.width;\n const previewBoxEl = this._previewBoxEl.value;\n if (previewBoxEl) {\n const previewBoxRect = previewBoxEl.getBoundingClientRect();\n const minPreviewPos = rangeRect.left + previewBoxRect.width / 2;\n const maxPreviewPos = rangeRect.right - previewBoxRect.width / 2;\n previewPos = Math.max(minPreviewPos, Math.min(maxPreviewPos, previewPos));\n const previewPosFraction = (previewPos - rangeRect.left) / rangeRect.width;\n this._previewRailTransform = `translateX(${(previewPosFraction * 100 * 100).toFixed(6)}%)`;\n }\n\n // Propagate preview time to parent\n if (this._player === undefined) {\n return;\n }\n const { min, max } = this;\n const previewTime = min + mousePercent * (max - min);\n const previewTimeChangeEvent: PreviewTimeChangeEvent = createCustomEvent(PREVIEW_TIME_CHANGE_EVENT, {\n bubbles: true,\n composed: true,\n detail: { previewTime }\n });\n this.dispatchEvent(previewTimeChangeEvent);\n }\n\n protected override getBarColors(): ColorStops {\n const colorStops = super.getBarColors();\n if (!this.showAdMarkers || !this._player || !this._player.ads) {\n return colorStops;\n }\n if (this._player.ads.playing) {\n // Currently playing a linear ad\n return colorStops;\n }\n const { min, max } = this;\n for (const adBreak of this._player.ads.scheduledAdBreaks) {\n if (adBreak.ads !== undefined && adBreak.ads.length > 0 && !adBreak.ads.some(isLinearAd)) {\n // Ad break definitely does not contain any linear ads\n continue;\n }\n let adBreakTime = adBreak.timeOffset;\n if (adBreakTime < 0) {\n // Post-rolls have timeOffset == -1\n adBreakTime = this._player.duration;\n }\n if (min <= adBreakTime && adBreakTime <= max) {\n const adBreakPercent = ((adBreakTime - min) / (max - min)) * 100;\n let adBreakFrom: number;\n let adBreakTo: number;\n if (adBreakPercent + AD_MARKER_WIDTH < 100) {\n adBreakFrom = adBreakPercent;\n adBreakTo = adBreakPercent + AD_MARKER_WIDTH;\n } else {\n adBreakFrom = 100 - AD_MARKER_WIDTH;\n adBreakTo = 100;\n }\n colorStops.add('var(--theoplayer-time-range-ad-marker-color, #ffc50f)', adBreakFrom, adBreakTo);\n }\n }\n return colorStops;\n }\n\n private readonly _onAdChange = () => {\n this._updateRange();\n };\n\n protected override handleKeyDown_(e: KeyboardEvent) {\n super.handleKeyDown_(e);\n if (this.deviceType === 'tv' && e.keyCode === KeyCode.ENTER) {\n if (this._player !== undefined) {\n if (this._player.paused) {\n this._player.play();\n } else {\n this._player.pause();\n }\n }\n }\n }\n\n protected override renderRangeExtras(): HTMLTemplateResult {\n return html`\n <div class=\"theoplayer-time-range-preview-rail\" style=${styleMap({ transform: this._previewRailTransform })}>\n <div part=\"box preview-box\" ${ref(this._previewBoxEl)}>\n <slot name=\"preview\">\n <theoplayer-preview-thumbnail></theoplayer-preview-thumbnail>\n <theoplayer-preview-time-display remaining-when-live></theoplayer-preview-time-display>\n </slot>\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-time-range': TimeRange;\n }\n}\n","import { Range } from './Range';\nimport { customElement, property } from 'lit/decorators.js';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\n\nfunction formatAsPercentString(value: number, max: number) {\n return `${Math.round((value / max) * 100)}%`;\n}\n\n/**\n * A volume slider, showing the current audio volume of the player,\n * and which changes the volume when clicked or dragged.\n */\n@customElement('theoplayer-volume-range')\n@stateReceiver(['player', 'deviceType'])\nexport class VolumeRange extends Range {\n private _player: ChromelessPlayer | undefined;\n\n constructor() {\n super();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.hasAttribute('min')) {\n this.min = 0;\n }\n if (!this.hasAttribute('max')) {\n this.max = 1;\n }\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener('volumechange', this._updateFromPlayer);\n }\n this._player = player;\n this._updateFromPlayer();\n if (this._player !== undefined) {\n this._player.addEventListener('volumechange', this._updateFromPlayer);\n }\n }\n\n private readonly _updateFromPlayer = () => {\n if (this._player !== undefined) {\n this.value = this._player.volume;\n }\n };\n\n protected override getAriaLabel(): string {\n return 'volume';\n }\n\n protected override getAriaValueText(): string {\n return formatAsPercentString(this.value, this.max);\n }\n\n protected override handleInput(): void {\n if (this._player !== undefined && this._player.volume !== this.value) {\n this._player.volume = this.value;\n }\n super.handleInput();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-volume-range': VolumeRange;\n }\n}\n","import { html, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport errorDisplayCss from './ErrorDisplay.css';\nimport errorIcon from '../icons/error.svg';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { THEOplayerError } from 'theoplayer/chromeless';\nimport { Attribute } from '../util/Attribute';\n\n/**\n * A screen that shows the details of a fatal player error.\n */\n@customElement('theoplayer-error-display')\n@stateReceiver(['error', 'fullscreen'])\nexport class ErrorDisplay extends LitElement {\n static override styles = [errorDisplayCss];\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true\n };\n\n /**\n * The error.\n */\n @property({ reflect: false, attribute: false })\n accessor error: THEOplayerError | undefined;\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.FULLSCREEN })\n accessor fullscreen: boolean = false;\n\n protected override render() {\n return html`<div part=\"icon\"><slot name=\"icon\">${unsafeSVG(errorIcon)}</slot></div>\n <div part=\"text\">\n <h1 part=\"heading\"><slot name=\"heading\">An error occurred</slot></h1>\n <p part=\"message\"><slot name=\"message\">${this.error?.message ?? ''}</slot></p>\n </div>\n <div part=\"fullscreen-controls\">\n <slot name=\"fullscreen-controls\"><theoplayer-fullscreen-button></theoplayer-fullscreen-button></slot>\n </div>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-error-display': ErrorDisplay;\n }\n}\n","import type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { CastButton } from './CastButton';\nimport chromecastButtonHtml from './ChromecastButton.html';\nimport chromecastButtonCss from './ChromecastButton.css';\nimport { Attribute } from '../util/Attribute';\nimport { customElement } from 'lit/decorators.js';\n\nlet chromecastButtonId = 0;\n\n/**\n * A button to start and stop casting using Chromecast.\n */\n@customElement('theoplayer-chromecast-button')\n@stateReceiver(['player'])\nexport class ChromecastButton extends CastButton {\n static styles = [...CastButton.styles, chromecastButtonCss];\n\n private _player: ChromelessPlayer | undefined;\n private readonly _buttonId = ++chromecastButtonId;\n\n constructor() {\n super();\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this._updateAriaLabel();\n }\n\n get player() {\n return this._player;\n }\n\n set player(player: ChromelessPlayer | undefined) {\n this._player = player;\n this.castApi = player?.cast?.chromecast;\n }\n\n override attributeChangedCallback(attrName: string, oldValue: any, newValue: any) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (ChromecastButton.observedAttributes.indexOf(attrName as Attribute) >= 0) {\n this._updateAriaLabel();\n }\n }\n\n private _updateAriaLabel(): void {\n const label =\n this.castState === 'connecting' || this.castState === 'connected' ? 'stop casting to Chromecast' : 'start casting to Chromecast';\n this.setAttribute(Attribute.ARIA_LABEL, label);\n }\n\n protected override render() {\n return chromecastButtonHtml(this._buttonId);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-chromecast-button': ChromecastButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, state } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport chromecastDisplayCss from './ChromecastDisplay.css';\nimport chromecastIcon from '../icons/chromecast-48px.svg';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { Chromecast, ChromelessPlayer } from 'theoplayer/chromeless';\nimport { Attribute } from '../util/Attribute';\n\nconst CAST_EVENTS = ['statechange'] as const;\n\n/**\n * A control that displays the casting status while using Chromecast.\n */\n@customElement('theoplayer-chromecast-display')\n@stateReceiver(['player'])\nexport class ChromecastDisplay extends LitElement {\n static styles = [chromecastDisplayCss];\n\n private _player: ChromelessPlayer | undefined;\n private _castApi: Chromecast | undefined;\n\n @state()\n private accessor _receiverName: string = 'Chromecast';\n\n connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute(Attribute.HIDDEN)) {\n this.setAttribute(Attribute.HIDDEN, '');\n }\n this._updateFromPlayer();\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._castApi !== undefined) {\n this._castApi.removeEventListener(CAST_EVENTS, this._updateFromPlayer);\n }\n this._player = player;\n this._castApi = player?.cast?.chromecast;\n this._updateFromPlayer();\n if (this._castApi !== undefined) {\n this._castApi.addEventListener(CAST_EVENTS, this._updateFromPlayer);\n }\n }\n\n private readonly _updateFromPlayer = () => {\n const chromecast = this._player?.cast?.chromecast;\n if (chromecast === undefined || chromecast.state !== 'connected') {\n this.setAttribute(Attribute.HIDDEN, '');\n } else {\n this._receiverName = chromecast.receiverName || 'Chromecast';\n this.removeAttribute(Attribute.HIDDEN);\n }\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<div part=\"icon\"><slot name=\"icon\">${unsafeSVG(chromecastIcon)}</slot></div>\n <div part=\"text\">\n <p part=\"heading\"><slot name=\"heading\">Playing on</slot></p>\n <p part=\"receiver\">${this._receiverName}</p>\n </div>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-chromecast-display': ChromecastDisplay;\n }\n}\n","import { customElement } from 'lit/decorators.js';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { CastButton } from './CastButton';\nimport airPlayButtonHtml from './AirPlayButton.html';\nimport airPlayButtonCss from './AirPlayButton.css';\nimport { Attribute } from '../util/Attribute';\n\n/**\n * A button to start and stop casting using AirPlay.\n */\n@customElement('theoplayer-airplay-button')\n@stateReceiver(['player'])\nexport class AirPlayButton extends CastButton {\n static styles = [...CastButton.styles, airPlayButtonCss];\n\n private _player: ChromelessPlayer | undefined;\n\n override connectedCallback() {\n super.connectedCallback();\n this._updateAriaLabel();\n }\n\n get player() {\n return this._player;\n }\n\n set player(player: ChromelessPlayer | undefined) {\n this._player = player;\n this.castApi = player?.cast?.airplay;\n }\n\n override attributeChangedCallback(attrName: string, oldValue: any, newValue: any) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n if (AirPlayButton.observedAttributes.indexOf(attrName as Attribute) >= 0) {\n this._updateAriaLabel();\n }\n }\n\n private _updateAriaLabel(): void {\n const label = this.castState === 'connecting' || this.castState === 'connected' ? 'stop playing on AirPlay' : 'start playing on AirPlay';\n this.setAttribute(Attribute.ARIA_LABEL, label);\n }\n\n protected override render() {\n return airPlayButtonHtml;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-airplay-button': AirPlayButton;\n }\n}\n","import loadingIndicatorCss from './LoadingIndicator.css';\nimport loadingIndicatorHtml from './LoadingIndicator.html';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport { Attribute } from '../util/Attribute';\nimport { customElement, property } from 'lit/decorators.js';\nimport { type HTMLTemplateResult, LitElement } from 'lit';\n\nconst PLAYER_EVENTS = ['readystatechange', 'play', 'pause', 'playing', 'seeking', 'seeked'] as const;\n\n/**\n * An indicator that shows whether the player is currently waiting for more data to resume playback.\n *\n * @attribute `loading` (readonly) - Whether the player is waiting for more data. If set, the indicator is shown.\n */\n@customElement('theoplayer-loading-indicator')\n@stateReceiver(['player'])\nexport class LoadingIndicator extends LitElement {\n static override styles = [loadingIndicatorCss];\n\n private _player: ChromelessPlayer | undefined;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n this._player = player;\n this._updateFromPlayer();\n if (this._player !== undefined) {\n this._player.addEventListener(PLAYER_EVENTS, this._updateFromPlayer);\n }\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.LOADING })\n accessor loading: boolean = false;\n\n private readonly _updateFromPlayer = () => {\n this.loading = this._player !== undefined && !this._player.paused && (this._player.seeking || this._player.readyState < 3);\n };\n\n protected override render(): HTMLTemplateResult {\n return loadingIndicatorHtml;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-loading-indicator': LoadingIndicator;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport gestureReceiverCss from './GestureReceiver.css';\nimport { stateReceiver } from './StateReceiverMixin';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport type { DeviceType } from '../util/DeviceType';\n\n/**\n * An overlay that receives and handles gestures on the player.\n *\n * On desktop devices, this plays or pauses the player whenever it is clicked.\n * On mobile devices, this currently does nothing.\n */\n@customElement('theoplayer-gesture-receiver')\n@stateReceiver(['player', 'deviceType'])\nexport class GestureReceiver extends LitElement {\n static override styles = [gestureReceiverCss];\n\n private _player: ChromelessPlayer | undefined;\n private _playerElement: HTMLElement | undefined;\n private _pointerType: string = '';\n\n connectedCallback(): void {\n super.connectedCallback();\n\n this.setAttribute('tabindex', '-1');\n this.setAttribute('aria-hidden', 'true');\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._playerElement !== undefined) {\n this._playerElement.removeEventListener('pointerdown', this._onPointerDown);\n this._playerElement.removeEventListener('click', this._onClick);\n }\n this._player = player;\n this._playerElement = player?.element;\n if (this._playerElement !== undefined) {\n this._playerElement.addEventListener('pointerdown', this._onPointerDown);\n this._playerElement.addEventListener('click', this._onClick);\n }\n }\n\n @property({ reflect: false, attribute: false })\n accessor deviceType: DeviceType = 'desktop';\n\n private readonly _onPointerDown = (event: PointerEvent) => {\n this._pointerType = event.pointerType;\n };\n\n private readonly _onClick = (event: MouseEvent) => {\n // If the browser doesn't yet support `pointerType` on `click` events,\n // we use the type from the previous `pointerdown` event.\n const pointerType = (event as PointerEvent).pointerType ?? this._pointerType;\n if (pointerType === 'touch') {\n this.handleTap(event);\n } else if (pointerType === 'mouse') {\n this.handleMouseClick(event);\n }\n };\n\n handleTap(_event: MouseEvent): void {\n // Do nothing.\n }\n\n handleMouseClick(_event: MouseEvent): void {\n if (this.deviceType !== 'desktop') return;\n // Toggle play/pause.\n if (this._player !== undefined) {\n if (this._player.source === undefined) {\n // Do nothing if the player has no source.\n return;\n }\n if (this._player.ads?.playing) {\n // Clicking during a linear ad should open the ad's clickthrough URL instead.\n return;\n }\n if (this._player.paused) {\n this._player.play();\n } else {\n this._player.pause();\n }\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html``;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-gesture-receiver': GestureReceiver;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { Button } from './Button';\nimport type { ChromelessPlayer } from 'theoplayer/chromeless';\nimport liveButtonCss from './LiveButton.css';\nimport liveIcon from '../icons/live.svg';\nimport { stateReceiver } from './StateReceiverMixin';\nimport { Attribute } from '../util/Attribute';\nimport type { StreamType } from '../util/StreamType';\n\nconst PAUSED_EVENTS = ['play', 'pause', 'playing', 'emptied'] as const;\nconst LIVE_EVENTS = ['seeking', 'seeked', 'timeupdate', 'durationchange', 'emptied'] as const;\n\nconst DEFAULT_LIVE_THRESHOLD = 10;\n\n/**\n * A button that shows whether the player is currently playing at the live point,\n * and seeks to the live point when clicked.\n *\n * @attribute `live-threshold` - The maximum distance (in seconds) from the live point that the player's current time\n * can be for it to still be considered \"at the live point\". If unset, defaults to 10 seconds.\n * @attribute `live` (readonly) - Whether the player is considered to be playing at the live point.\n */\n@customElement('theoplayer-live-button')\n@stateReceiver(['player', 'streamType'])\nexport class LiveButton extends Button {\n static styles = [...Button.styles, liveButtonCss];\n\n private _player: ChromelessPlayer | undefined;\n private _liveThreshold: number = DEFAULT_LIVE_THRESHOLD;\n\n connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(Attribute.ARIA_LABEL)) {\n this.setAttribute(Attribute.ARIA_LABEL, 'seek to live');\n }\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.PAUSED })\n accessor paused: boolean = false;\n\n @property({ reflect: true, type: String, attribute: Attribute.STREAM_TYPE })\n accessor streamType: StreamType = 'vod';\n\n get liveThreshold(): number {\n return this._liveThreshold;\n }\n\n @property({ reflect: true, type: Number, attribute: Attribute.LIVE_THRESHOLD, useDefault: true })\n set liveThreshold(value: number) {\n this._liveThreshold = isNaN(value) ? 0 : value;\n this._updateLive();\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.LIVE })\n accessor live: boolean = false;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._player !== undefined) {\n this._player.removeEventListener(PAUSED_EVENTS, this._updatePaused);\n this._player.removeEventListener(LIVE_EVENTS, this._updateLive);\n }\n this._player = player;\n this._updatePaused();\n this._updateLive();\n if (this._player !== undefined) {\n this._player.addEventListener(PAUSED_EVENTS, this._updatePaused);\n this._player.addEventListener(LIVE_EVENTS, this._updateLive);\n }\n }\n\n private readonly _updatePaused = () => {\n this.paused = this._player !== undefined ? this._player.paused : true;\n };\n\n private readonly _updateLive = () => {\n this.live = this._player !== undefined ? isLive(this._player, this.liveThreshold) : false;\n };\n\n protected override handleClick() {\n if (this._player === undefined) {\n return;\n }\n if (this._player.hesp && this._player.hesp.manifest !== undefined) {\n this._player.hesp.goLive();\n } else {\n this._player.currentTime = Infinity;\n this._player.play();\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<span part=\"icon\"><slot name=\"icon\">${unsafeSVG(liveIcon)}</slot></span\n ><slot name=\"spacer\"> </slot><span part=\"text\"><slot name=\"text\">LIVE</slot></span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-live-button': LiveButton;\n }\n}\n\nfunction isLive(player: ChromelessPlayer, threshold: number): boolean {\n if (player.duration === Infinity) {\n const seekable = player.seekable;\n if (seekable.length > 0) {\n return seekable.end(seekable.length - 1) - player.currentTime <= threshold;\n } else {\n return true;\n }\n }\n return false;\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport textDisplayCss from '../TextDisplay.css';\nimport adDisplayCss from './AdDisplay.css';\nimport { stateReceiver } from '../StateReceiverMixin';\nimport type { Ads, ChromelessPlayer } from 'theoplayer/chromeless';\nimport { arrayFind } from '../../util/CommonUtils';\nimport { isLinearAd } from '../../util/AdUtils';\n\nconst AD_EVENTS = ['adbreakbegin', 'adbreakend', 'adbreakchange', 'updateadbreak', 'adbegin', 'adend', 'adskip', 'addad', 'updatead'] as const;\n\n/**\n * A control that shows when an advertisement is playing,\n * and the number of the current ad in the ad break (if the break has multiple ads).\n */\n@customElement('theoplayer-ad-display')\n@stateReceiver(['player'])\nexport class AdDisplay extends LitElement {\n static styles = [textDisplayCss, adDisplayCss];\n\n private _player: ChromelessPlayer | undefined;\n private _ads: Ads | undefined;\n\n @state()\n private accessor _text: string = '';\n\n connectedCallback(): void {\n super.connectedCallback();\n this._updateFromPlayer();\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._ads?.removeEventListener(AD_EVENTS, this._updateFromPlayer);\n this._player = player;\n this._ads = player?.ads;\n this._updateFromPlayer();\n this._ads?.addEventListener(AD_EVENTS, this._updateFromPlayer);\n }\n\n private readonly _updateFromPlayer = () => {\n const ads = this._player?.ads;\n const linearAds = (ads?.currentAdBreak?.ads ?? []).filter(isLinearAd);\n if (ads === undefined || !ads.playing || linearAds.length === 0) {\n this._text = '';\n this.style.display = 'none';\n return;\n }\n if (linearAds.length > 1) {\n const currentAds = this._player!.ads!.currentAds || [];\n const currentLinearAd = arrayFind(currentAds, isLinearAd);\n if (currentLinearAd) {\n const currentAdIndex = linearAds.indexOf(currentLinearAd);\n if (currentAdIndex >= 0) {\n this._text = `Ad ${currentAdIndex + 1} of ${linearAds.length}`;\n this.style.display = '';\n return;\n }\n }\n }\n this._text = 'Ad';\n this.style.display = '';\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<span>${this._text}</span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-ad-display': AdDisplay;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport textDisplayCss from '../TextDisplay.css';\nimport adCountdownCss from './AdCountdown.css';\nimport { stateReceiver } from '../StateReceiverMixin';\nimport type { Ads, ChromelessPlayer } from 'theoplayer/chromeless';\n\nconst AD_EVENTS = ['adbreakbegin', 'adbreakend', 'adbreakchange', 'updateadbreak'] as const;\n\n/**\n * A control that displays the remaining time of the current ad break.\n */\n@customElement('theoplayer-ad-countdown')\n@stateReceiver(['player'])\nexport class AdCountdown extends LitElement {\n static override styles = [textDisplayCss, adCountdownCss];\n\n private _player: ChromelessPlayer | undefined;\n private _ads: Ads | undefined;\n\n @state()\n private accessor _maxRemainingDuration: number = 0;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._player?.removeEventListener('timeupdate', this._update);\n this._ads?.removeEventListener(AD_EVENTS, this._onAdChange);\n this._player = player;\n this._ads = player?.ads;\n this._onAdChange();\n this._ads?.addEventListener(AD_EVENTS, this._onAdChange);\n }\n\n private readonly _onAdChange = () => {\n if (this._player?.ads?.playing) {\n this._player.removeEventListener('timeupdate', this._update);\n this._player.addEventListener('timeupdate', this._update);\n } else {\n this._player?.removeEventListener('timeupdate', this._update);\n }\n this._update();\n };\n\n private readonly _update = (): void => {\n const ads = this._player?.ads;\n let maxRemainingDuration = ads?.currentAdBreak?.maxRemainingDuration;\n if (ads === undefined || !ads.playing || maxRemainingDuration === undefined || maxRemainingDuration < 0) {\n this._maxRemainingDuration = 0;\n this.style.display = 'none';\n } else {\n this._maxRemainingDuration = Math.ceil(maxRemainingDuration);\n this.style.display = '';\n }\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<span>Content will resume in ${this._maxRemainingDuration}s</span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-ad-countdown': AdCountdown;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { LinkButton } from '../LinkButton';\nimport { stateReceiver } from '../StateReceiverMixin';\nimport { Attribute } from '../../util/Attribute';\nimport type { Ads, ChromelessPlayer } from 'theoplayer/chromeless';\nimport { arrayFind } from '../../util/CommonUtils';\nimport { isLinearAd } from '../../util/AdUtils';\n\nconst AD_EVENTS = ['adbegin', 'adend', 'adloaded', 'updatead', 'adskip'] as const;\n\n/**\n * A button to open the advertisement's click-through webpage.\n */\n@customElement('theoplayer-ad-clickthrough-button')\n@stateReceiver(['player'])\nexport class AdClickThroughButton extends LinkButton {\n private _player: ChromelessPlayer | undefined;\n private _ads: Ads | undefined;\n private _clickThrough: string | null = null;\n\n constructor() {\n super();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._updateFromPlayer();\n\n if (this.clickThrough == null) {\n this.disabled = true;\n this.style.display = 'none';\n }\n }\n\n get clickThrough(): string | null {\n return this._clickThrough;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.CLICKTHROUGH })\n set clickThrough(clickThrough: string | null) {\n if (this._clickThrough === clickThrough) {\n return;\n }\n this._clickThrough = clickThrough;\n this.href = clickThrough ? String(clickThrough).trim() : '#';\n this.target = '_blank';\n this.disabled = clickThrough == null;\n this.style.display = clickThrough != null ? '' : 'none';\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._ads?.removeEventListener(AD_EVENTS, this._updateFromPlayer);\n this._player = player;\n this._ads = player?.ads;\n this._updateFromPlayer();\n this._ads?.addEventListener(AD_EVENTS, this._updateFromPlayer);\n }\n\n private readonly _updateFromPlayer = () => {\n const ads = this._player?.ads;\n if (!ads || !ads.playing) {\n // No ads playing.\n this.clickThrough = null;\n return;\n }\n const linearAd = arrayFind(ads.currentAds ?? [], isLinearAd);\n if (linearAd === undefined) {\n // No linear ad\n this.clickThrough = null;\n return;\n }\n if (linearAd.integration === 'google-ima') {\n // Google IMA always shows their own clickthrough button.\n this.clickThrough = null;\n return;\n }\n const clickThrough = linearAd.clickThrough;\n if (!clickThrough) {\n // Linear ad has no clickthrough URL.\n this.clickThrough = null;\n return;\n }\n this.clickThrough = clickThrough;\n };\n\n protected override handleClick(): void {\n this._player?.pause();\n }\n\n protected override renderLinkContent(): HTMLTemplateResult {\n return html`<slot>Visit Advertiser</slot>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-ad-clickthrough-button': AdClickThroughButton;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { Button } from '../Button';\nimport adSkipButtonCss from './AdSkipButton.css';\nimport skipNextIcon from '../../icons/skip-next.svg';\nimport { stateReceiver } from '../StateReceiverMixin';\nimport { Attribute } from '../../util/Attribute';\nimport type { Ads, ChromelessPlayer } from 'theoplayer/chromeless';\nimport { arrayFind } from '../../util/CommonUtils';\nimport { isLinearAd } from '../../util/AdUtils';\n\nconst AD_EVENTS = ['adbegin', 'adend', 'adloaded', 'updatead', 'adskip'] as const;\n\n/**\n * A button that skips the current advertisement (if skippable).\n * If the ad cannot be skipped yet, it shows the remaining time until it can be skipped.\n */\n@customElement('theoplayer-ad-skip-button')\n@stateReceiver(['player'])\nexport class AdSkipButton extends Button {\n static styles = [...Button.styles, adSkipButtonCss];\n\n private _player: ChromelessPlayer | undefined;\n private _ads: Ads | undefined;\n\n @state()\n private accessor _showCountdown: boolean = false;\n\n @state()\n private accessor _timeToSkip: number = 0;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this._update();\n }\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n this._player?.removeEventListener('timeupdate', this._update);\n this._ads?.removeEventListener(AD_EVENTS, this._onAdChange);\n this._player = player;\n this._ads = player?.ads;\n this._onAdChange();\n this._ads?.addEventListener(AD_EVENTS, this._onAdChange);\n }\n\n protected override handleClick(): void {\n this._player?.ads?.skip();\n }\n\n private readonly _onAdChange = () => {\n if (this._player?.ads?.playing) {\n this._player.removeEventListener('timeupdate', this._update);\n this._player.addEventListener('timeupdate', this._update);\n } else {\n this._player?.removeEventListener('timeupdate', this._update);\n }\n this._update();\n };\n\n private readonly _update = (): void => {\n const ads = this._player?.ads;\n if (!ads || !ads.playing) {\n // No ads playing.\n this.style.display = 'none';\n return;\n }\n const linearAd = arrayFind(ads.currentAds ?? [], isLinearAd);\n if (linearAd === undefined) {\n // No linear ad.\n this.style.display = 'none';\n return;\n }\n if (linearAd.integration === 'google-ima') {\n // Google IMA always shows their own skip button.\n this.style.display = 'none';\n return;\n }\n const skipOffset = linearAd.skipOffset;\n if (skipOffset === undefined || skipOffset < 0 || (linearAd.duration !== undefined && skipOffset >= linearAd.duration)) {\n // Linear ad is not skippable.\n this.style.display = 'none';\n return;\n }\n const currentTime = this._player!.currentTime;\n if (currentTime < skipOffset) {\n // Show countdown.\n this._showCountdown = true;\n this._timeToSkip = Math.ceil(skipOffset - currentTime);\n this.style.display = '';\n this.setAttribute(Attribute.DISABLED, '');\n this.setAttribute(Attribute.ARIA_LIVE, 'off');\n } else {\n // Show skip button.\n this._showCountdown = false;\n this.style.display = '';\n this.removeAttribute(Attribute.DISABLED);\n this.setAttribute(Attribute.ARIA_LIVE, 'polite');\n }\n };\n\n protected override render(): HTMLTemplateResult {\n const countdownStyles = {\n visibility: this._showCountdown ? 'visible' : 'hidden'\n };\n const skipStyles = {\n visibility: this._showCountdown ? 'hidden' : 'visible',\n pointerEvents: this._showCountdown ? 'none' : ''\n };\n return html`<span part=\"countdown\" style=${styleMap(countdownStyles)}>Skip in ${this._timeToSkip} seconds</span>\n <span part=\"skip\" style=${styleMap(skipStyles)}>\n <span part=\"skip-text\"><slot name=\"skip-text\">Skip Ad</slot></span>\n <span part=\"skip-icon\"><slot name=\"skip-icon\">${unsafeSVG(skipNextIcon)}</slot></span>\n </span>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-ad-skip-button': AdSkipButton;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport * as shadyCss from '@webcomponents/shadycss';\nimport { ChromelessPlayer, type MediaTrack, type SourceDescription, type UIPlayerConfiguration, type VideoQuality } from 'theoplayer/chromeless';\nimport elementCss from './UIContainer.css';\nimport {\n arrayFind,\n arrayRemove,\n containsComposedNode,\n getFocusableChildren,\n getSlottedElements,\n getTvFocusChildren,\n isElement,\n isHTMLElement,\n noOp,\n toggleAttribute\n} from './util/CommonUtils';\nimport { forEachStateReceiverElement, type StateReceiverElement, StateReceiverProps } from './components/StateReceiverMixin';\nimport { TOGGLE_MENU_EVENT, type ToggleMenuEvent } from './events/ToggleMenuEvent';\nimport { ENTER_FULLSCREEN_EVENT, type EnterFullscreenEvent } from './events/EnterFullscreenEvent';\nimport { EXIT_FULLSCREEN_EVENT, type ExitFullscreenEvent } from './events/ExitFullscreenEvent';\nimport { fullscreenAPI } from './util/FullscreenUtils';\nimport { Attribute } from './util/Attribute';\nimport { isMobile, isTv } from './util/Environment';\nimport { Rectangle } from './util/GeometryUtils';\nimport { PREVIEW_TIME_CHANGE_EVENT, type PreviewTimeChangeEvent } from './events/PreviewTimeChangeEvent';\nimport type { StreamType } from './util/StreamType';\nimport type { StreamTypeChangeEvent } from './events/StreamTypeChangeEvent';\nimport { STREAM_TYPE_CHANGE_EVENT } from './events/StreamTypeChangeEvent';\nimport { USER_IDLE_CHANGE_EVENT } from './events/UserIdleChangeEvent';\nimport { createCustomEvent } from './util/EventUtils';\nimport { getTargetQualities } from './util/TrackUtils';\nimport { MenuGroup } from './components/MenuGroup';\nimport type { DeviceType } from './util/DeviceType';\nimport { getFocusedChild, navigateByArrowKey } from './util/KeyboardNavigation';\nimport { isArrowKey, isBackKey, KeyCode } from './util/KeyCode';\nimport { READY_EVENT } from './events/ReadyEvent';\nimport { addGlobalStyles } from './Global';\nimport { ACCIDENTAL_CLICK_DELAY } from './util/Constants';\n\n// Load components used in template\nimport './components/GestureReceiver';\n\nexport const DEFAULT_USER_IDLE_TIMEOUT = 2;\nexport const DEFAULT_TV_USER_IDLE_TIMEOUT = 5;\nexport const DEFAULT_DVR_THRESHOLD = 60;\nexport const FULL_WINDOW_ROOT_CLASS = 'theoplayer-ui-full-window';\n\n/**\n * The container element for a THEOplayer UI.\n *\n * This element provides a basic layout structure for a general player UI, and handles the creation and management\n * of a {@link theoplayer!ChromelessPlayer | THEOplayer player instance} for this UI.\n *\n * ## Usage\n *\n * 1. Create a `<theoplayer-ui>` element.\n * 2. Place your UI elements as children of the `<theoplayer-ui>`.\n * Set their `slot` attribute to one of the defined slots (see below) to place them in the layout.\n * 3. Set its `configuration` attribute or property to a valid player configuration.\n * 4. Set its `source` attribute or property to a valid stream source.\n *\n * ## Customization\n *\n * This element does not provide any UI elements by default, you need to add all elements as children of\n * the `<theoplayer-ui>` element. If you're looking for a simple out-of-the-box player experience instead,\n * see {@link DefaultUI | `<theoplayer-default-ui>`}.\n *\n * The styling can be controlled using CSS custom properties (see below).\n *\n * @attribute `configuration` - The THEOplayer {@link theoplayer!UIPlayerConfiguration | UIPlayerConfiguration}, as a JSON string.\n * @attribute `source` - The THEOplayer {@link theoplayer!SourceDescription | SourceDescription}, as a JSON string.\n * @attribute `fluid` - If set, the player automatically adjusts its height to fit the video's aspect ratio.\n * @attribute `muted` - If set, the player starts out as muted. Reflects `ui.player.muted`.\n * @attribute `autoplay` - If set, the player attempts to automatically start playing (if allowed).\n * @attribute `device-type` - The device type, either \"desktop\", \"mobile\" or \"tv\".\n * Can be used in CSS to show/hide certain device-specific UI controls.\n * @attribute `mobile` - Whether the user is on a mobile device. Equivalent to `device-type == \"mobile\"`.\n * @attribute `tv` - Whether the user is on a TV device. Equivalent to `device-type == \"tv\"`.\n * @attribute `stream-type` - The stream type, either \"vod\", \"live\" or \"dvr\".\n * Can be used to show/hide certain UI controls specific for livestreams, such as\n * a {@link LiveButton | `<theoplayer-live-button>`}.\n * If you know in advance that the source will be a livestream, you can set this attribute to avoid a screen flicker\n * when the player switches between its VOD-specific and live-only controls.\n * @attribute `user-idle` (readonly) - Whether the user is considered to be \"idle\".\n * When the user is idle and the video is playing, all slotted UI elements will be hidden\n * (unless they have the `no-auto-hide` attribute).\n * @attribute `user-idle-timeout` - The timeout (in seconds) between when the user stops interacting with the UI,\n * and when the user is considered to be \"idle\".\n * @attribute `dvr-threshold` - The minimum length (in seconds) of a livestream's sliding window for the stream to be DVR\n * and its stream type to be set to \"dvr\".\n * @attribute `paused` (readonly) - Whether the player is paused. Reflects `ui.player.paused`.\n * @attribute `ended` (readonly) - Whether the player is ended. Reflects `ui.player.ended`.\n * @attribute `casting` (readonly) - Whether the player is casting. Reflects `ui.player.cast.casting`.\n * @attribute `playing-ad` (readonly) - Whether the player is playing a linear ad. Reflects `ui.player.ads.playing`.\n * @attribute `has-error` (readonly) - Whether the player has encountered a fatal error.\n * @attribute `has-first-play` (readonly) - Whether the player has (previously) started playback for this stream.\n * Can be used in CSS to show/hide certain initial controls, such as a poster image or a centered play button.\n *\n * @slot `(no` name, default slot) - A slot for controls at the bottom of the player.\n * Can be used for controls such as a play button ({@link PlayButton | `<theoplayer-play-button>`}) or a seek bar\n * ({@link TimeRange | `<theoplayer-time-range>`}).\n * @slot `top-chrome` - A slot for controls at the top of the player.\n * Can be used to display the stream's title, or for a cast button ({@link ChromecastButton | `<theoplayer-chromecast-button>`}).\n * @slot `middle-chrome` - A slot for controls in the middle of the player (between the top and bottom chrome).\n * @slot `centered-chrome` - A slot for controls in the center of the player, layered on top of other controls.\n * @slot `centered-loading` - A slot for a loading indicator in the center of the player, layered on top of other controls\n * but behind the centered chrome.\n * @slot `menu` - A slot for extra menus (see {@link Menu | `<theoplayer-menu>`}).\n * @slot `error` - A slot for an error display, to show when the player encounters a fatal error\n * (see {@link ErrorDisplay | `<theoplayer-error-display>`}).\n */\n@customElement('theoplayer-ui')\nexport class UIContainer extends LitElement {\n static override styles = [elementCss];\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true\n };\n\n /**\n * Fired when the backing player is created, and the {@link UIContainer.player} property is set.\n *\n * @group Events\n */\n static READY_EVENT: typeof READY_EVENT = READY_EVENT;\n\n private _configuration: UIPlayerConfiguration = {};\n private readonly _playerRef: Ref<HTMLElement> = createRef<HTMLElement>();\n private readonly _menuRef: Ref<HTMLElement> = createRef<HTMLElement>();\n private readonly _menuGroupRef: Ref<MenuGroup> = createRef<MenuGroup>();\n private _menuOpened: boolean = false;\n private _menuOpener: HTMLElement | undefined;\n private readonly _topChromeRef: Ref<HTMLElement> = createRef<HTMLElement>();\n private readonly _topChromeSlotRef: Ref<HTMLSlotElement> = createRef<HTMLSlotElement>();\n private readonly _bottomChromeRef: Ref<HTMLElement> = createRef<HTMLElement>();\n private readonly _bottomChromeSlotRef: Ref<HTMLSlotElement> = createRef<HTMLSlotElement>();\n\n private _pointerType: string = '';\n private _lastPointerUpTime: number = 0;\n private readonly _mutationObserver: MutationObserver;\n private readonly _resizeObserver: ResizeObserver | undefined;\n private readonly _stateReceivers: StateReceiverElement[] = [];\n private _player: ChromelessPlayer | undefined = undefined;\n private _source: SourceDescription | undefined = undefined;\n private _muted: boolean = false;\n private _autoplay: boolean = false;\n private _fullscreen: boolean = false;\n private _deviceType: DeviceType = 'desktop';\n private _streamType: StreamType = 'vod';\n private _fluid: boolean = false;\n private _userIdle: boolean = false;\n private _userIdleTimeout: number | undefined = undefined;\n private _isUserActive: boolean = false;\n private _userIdleTimer: number = 0;\n private _paused: boolean = false;\n private _ended: boolean = false;\n private _casting: boolean = false;\n private _dvrThreshold: number = DEFAULT_DVR_THRESHOLD;\n private _previewTime: number = NaN;\n private _activeVideoTrack: MediaTrack | undefined = undefined;\n\n /**\n * Creates a new THEOplayer UI container element.\n *\n * @param configuration - The player configuration.\n * Will be passed to the {@link theoplayer!ChromelessPlayer | ChromelessPlayer} constructor to create\n * the underlying THEOplayer instance.\n * Can also be set later on through the {@link UIContainer.configuration} property.\n */\n constructor(configuration: UIPlayerConfiguration = {}) {\n super();\n this._configuration = configuration;\n\n this._mutationObserver = new MutationObserver(this._onMutation);\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(this._updateTextTrackMargins);\n }\n\n this.tryInitializePlayer_();\n }\n\n /**\n * The underlying THEOplayer player instance.\n *\n * This is constructed automatically as soon as a valid {@link configuration} is set.\n */\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n /**\n * The player configuration.\n *\n * Used to create the underlying THEOplayer instance.\n */\n get configuration(): UIPlayerConfiguration {\n return this._configuration;\n }\n\n @property({\n reflect: false,\n attribute: Attribute.CONFIGURATION,\n converter: {\n fromAttribute: (value: string | null) => (value ? (JSON.parse(value) as UIPlayerConfiguration) : {})\n }\n })\n set configuration(playerConfiguration: UIPlayerConfiguration) {\n this._setConfiguration(playerConfiguration);\n }\n\n private _setConfiguration(playerConfiguration: UIPlayerConfiguration): void {\n this._configuration = playerConfiguration ?? {};\n this.tryInitializePlayer_();\n }\n\n /**\n * The player's current source.\n */\n get source(): SourceDescription | undefined {\n return this._player ? this._player.source : this._source;\n }\n\n @property({\n reflect: false,\n attribute: Attribute.SOURCE,\n converter: {\n fromAttribute: (value: string | null) => (value ? (JSON.parse(value) as SourceDescription) : undefined)\n }\n })\n set source(value: SourceDescription | undefined) {\n this._setSource(value);\n }\n\n private _setSource(value: SourceDescription | undefined): void {\n if (this._player) {\n this._player.source = value;\n } else {\n this._source = value;\n }\n }\n\n /**\n * Whether to automatically adjusts the player's height to fit the video's aspect ratio.\n */\n get fluid(): boolean {\n return this._fluid;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.FLUID })\n set fluid(value: boolean) {\n this._fluid = value;\n this._updateAspectRatio();\n }\n\n /**\n * Whether the player's audio is muted.\n */\n get muted(): boolean {\n return this._muted;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.MUTED })\n set muted(value: boolean) {\n this._muted = value;\n if (this._player) {\n this._player.muted = value;\n }\n }\n\n /**\n * Whether the player should attempt to automatically start playback.\n */\n get autoplay(): boolean {\n return this._autoplay;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.AUTOPLAY })\n set autoplay(value: boolean) {\n this._autoplay = value;\n if (this._player) {\n this._player.autoplay = value;\n }\n }\n\n /**\n * Whether the UI is in fullscreen mode.\n */\n get fullscreen(): boolean {\n return this._fullscreen;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.FULLSCREEN })\n private set fullscreen(value: boolean) {\n if (this._fullscreen === value) return;\n this._fullscreen = value;\n for (const receiver of this._stateReceivers) {\n if (receiver[StateReceiverProps].indexOf('fullscreen') >= 0) {\n receiver.fullscreen = value;\n }\n }\n }\n\n /**\n * Whether the player is paused.\n */\n get paused(): boolean {\n return this._paused;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.PAUSED })\n private set paused(value: boolean) {\n this._paused = value;\n this._updateTextTrackMargins();\n this.updateUserIdle_();\n }\n\n /**\n * Whether the player is ended.\n */\n get ended(): boolean {\n return this._ended;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.ENDED })\n private set ended(value: boolean) {\n this._ended = value;\n }\n\n /**\n * Whether the player is casting to a remote receiver.\n */\n get casting(): boolean {\n return this._casting;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.CASTING })\n private set casting(value: boolean) {\n this._casting = value;\n this._updateTextTrackMargins();\n this.updateUserIdle_();\n }\n\n /**\n * Whether the user has stopped interacting with the UI and is considered to be \"idle\".\n */\n get userIdle(): boolean {\n return this._userIdle;\n }\n\n @property({ reflect: true, type: Boolean, attribute: Attribute.USER_IDLE })\n private set userIdle(value: boolean) {\n if (this._userIdle === value) return;\n this._userIdle = value;\n this._updateTextTrackMargins();\n this.dispatchEvent(createCustomEvent(USER_IDLE_CHANGE_EVENT));\n }\n\n /**\n * The timeout (in seconds) between when the user stops interacting with the UI,\n * and when the user is considered to be \"idle\".\n */\n get userIdleTimeout(): number {\n return this._userIdleTimeout ?? (this.deviceType === 'tv' ? DEFAULT_TV_USER_IDLE_TIMEOUT : DEFAULT_USER_IDLE_TIMEOUT);\n }\n\n @property({ reflect: true, type: Number, attribute: Attribute.USER_IDLE_TIMEOUT, useDefault: true })\n set userIdleTimeout(value: number | undefined) {\n this._userIdleTimeout = value === undefined || isNaN(value) ? undefined : value;\n }\n\n /**\n * The device type, either \"desktop\", \"mobile\" or \"tv\".\n */\n get deviceType(): DeviceType {\n return this._deviceType;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.DEVICE_TYPE })\n set deviceType(value: DeviceType) {\n if (this._deviceType === value) return;\n this._deviceType = value;\n\n toggleAttribute(this, Attribute.MOBILE, value === 'mobile');\n toggleAttribute(this, Attribute.TV, value === 'tv');\n\n window.removeEventListener('keydown', this._onTvKeyDown);\n if (value === 'tv') {\n window.addEventListener('keydown', this._onTvKeyDown);\n }\n\n for (const receiver of this._stateReceivers) {\n if (receiver[StateReceiverProps].indexOf('deviceType') >= 0) {\n receiver.deviceType = value;\n }\n }\n }\n\n /**\n * The stream type, either \"vod\", \"live\" or \"dvr\".\n *\n * If you know in advance that the source will be a livestream, you can set this property to avoid a screen flicker\n * when the player switches between its VOD-specific and live-only controls.\n */\n get streamType(): StreamType {\n return this._streamType;\n }\n\n /**\n * @deprecated use {@link SourceDescription.streamType} instead.\n */\n @property({ reflect: true, type: String, attribute: Attribute.STREAM_TYPE })\n set streamType(streamType: StreamType) {\n if (this._streamType === streamType) return;\n this._streamType = streamType;\n for (const receiver of this._stateReceivers) {\n if (receiver[StateReceiverProps].indexOf('streamType') >= 0) {\n receiver.streamType = streamType;\n }\n }\n const streamTypeChangeEvent: StreamTypeChangeEvent = createCustomEvent(STREAM_TYPE_CHANGE_EVENT, {\n bubbles: true,\n composed: true,\n detail: { streamType: streamType }\n });\n this.dispatchEvent(streamTypeChangeEvent);\n }\n\n /**\n * The minimum length (in seconds) of a livestream's sliding window for the stream to be DVR\n * and its stream type to be set to \"dvr\".\n */\n get dvrThreshold(): number {\n return this._dvrThreshold;\n }\n\n @property({ reflect: true, type: Number, attribute: Attribute.DVR_THRESHOLD, useDefault: true })\n set dvrThreshold(value: number) {\n this._dvrThreshold = isNaN(value) ? 0 : value;\n this._updateStreamType();\n }\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.HAS_FIRST_PLAY })\n private accessor _hasFirstPlay: boolean = false;\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.PLAYING_AD })\n private accessor _isPlayingAd: boolean = false;\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.HAS_ERROR })\n private accessor _hasError: boolean = false;\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.FULLWINDOW })\n private accessor _isFullWindow: boolean = false;\n\n connectedCallback(): void {\n super.connectedCallback();\n addGlobalStyles();\n\n if (!this.hasAttribute(Attribute.DEVICE_TYPE)) {\n this.deviceType = isMobile() ? 'mobile' : isTv() ? 'tv' : 'desktop';\n }\n if (!this.hasAttribute(Attribute.PAUSED)) {\n this.paused = true;\n }\n\n this.tryInitializePlayer_();\n\n for (const receiver of this._stateReceivers) {\n this.propagateStateToReceiver_(receiver);\n }\n this._mutationObserver.observe(this, { childList: true, subtree: true });\n this.shadowRoot!.addEventListener('slotchange', this._onSlotChange);\n\n this._resizeObserver?.observe(this);\n this._updateTextTrackMargins();\n\n if (fullscreenAPI !== undefined) {\n document.addEventListener(fullscreenAPI.fullscreenchange_, this._onFullscreenChange);\n document.addEventListener(fullscreenAPI.fullscreenerror_, this._onFullscreenChange);\n this._onFullscreenChange();\n }\n\n this.setUserIdle_();\n if (this.deviceType === 'tv') {\n window.addEventListener('keydown', this._onTvKeyDown);\n }\n if (this._isFullWindow) {\n window.addEventListener('keydown', this._exitFullscreenOnEsc);\n }\n this.addEventListener('keyup', this._onKeyUp);\n this.addEventListener('pointerup', this._onPointerUp);\n this.addEventListener('pointermove', this._onPointerMove);\n this.addEventListener('mouseleave', this._onMouseLeave);\n }\n\n private tryInitializePlayer_(): void {\n if (this._player !== undefined) {\n return;\n }\n if (this._playerRef.value === undefined) {\n return;\n }\n if (this._configuration.license === undefined && this._configuration.licenseUrl === undefined) {\n return;\n }\n\n this._player = new ChromelessPlayer(this._playerRef.value, this._configuration);\n if (this._source) {\n this._player.source = this._source;\n this._source = undefined;\n }\n this._player.muted = this.muted;\n this._player.autoplay = this.autoplay;\n\n this._updateAspectRatio();\n this._updateError();\n this._updatePausedAndEnded();\n this._updateCasting();\n this.addPlayerListeners_(this._player);\n this.propagatePlayerToAllReceivers_();\n\n this.dispatchEvent(createCustomEvent(READY_EVENT));\n }\n\n protected override createRenderRoot(): HTMLElement | DocumentFragment {\n const root = super.createRenderRoot();\n root.addEventListener(TOGGLE_MENU_EVENT, this._onToggleMenu);\n root.addEventListener(ENTER_FULLSCREEN_EVENT, this._onEnterFullscreen);\n root.addEventListener(EXIT_FULLSCREEN_EVENT, this._onExitFullscreen);\n root.addEventListener(PREVIEW_TIME_CHANGE_EVENT, this._onPreviewTimeChange);\n return root;\n }\n\n protected override firstUpdated() {\n if (this._menuGroupRef.value && !(this._menuGroupRef instanceof MenuGroup)) {\n customElements.upgrade(this._menuGroupRef.value);\n }\n\n this.tryInitializePlayer_();\n\n if (this._playerRef.value) {\n void forEachStateReceiverElement(this, this._playerRef.value, this.registerStateReceiver_);\n }\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this._resizeObserver?.disconnect();\n this._mutationObserver.disconnect();\n this.shadowRoot!.removeEventListener('slotchange', this._onSlotChange);\n\n if (fullscreenAPI !== undefined) {\n document.removeEventListener(fullscreenAPI.fullscreenchange_, this._onFullscreenChange);\n document.removeEventListener(fullscreenAPI.fullscreenerror_, this._onFullscreenChange);\n }\n\n window.removeEventListener('keydown', this._onTvKeyDown);\n window.removeEventListener('keydown', this._exitFullscreenOnEsc);\n this.removeEventListener('keyup', this._onKeyUp);\n this.removeEventListener('pointerup', this._onPointerUp);\n this.removeEventListener('click', this._onClickAfterPointerUp, true);\n this.removeEventListener('pointermove', this._onPointerMove);\n this.removeEventListener('mouseleave', this._onMouseLeave);\n\n if (this._player) {\n this.removePlayerListeners_(this._player);\n this._player.destroy();\n this._player = undefined;\n this.propagatePlayerToAllReceivers_();\n }\n\n this._stateReceivers.length = 0;\n }\n\n private readonly _onMutation = (mutations: MutationRecord[]): void => {\n const playerElement = this._playerRef.value;\n if (!playerElement) return;\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n const { addedNodes, removedNodes } = mutation;\n for (let i = 0; i < addedNodes.length; i++) {\n const node = addedNodes[i];\n if (isElement(node)) {\n void forEachStateReceiverElement(node, playerElement, this.registerStateReceiver_);\n }\n }\n for (let i = 0; i < removedNodes.length; i++) {\n const node = removedNodes[i];\n if (isElement(node)) {\n void forEachStateReceiverElement(node, playerElement, this.unregisterStateReceiver_);\n }\n }\n }\n }\n };\n\n private readonly _onSlotChange = (): void => {\n if (this._playerRef.value) {\n void forEachStateReceiverElement(this, this._playerRef.value, this.registerStateReceiver_);\n }\n this._updateTextTrackMargins();\n };\n\n private readonly registerStateReceiver_ = (receiver: StateReceiverElement): void => {\n if (this._stateReceivers.indexOf(receiver) >= 0) {\n return;\n }\n this._stateReceivers.push(receiver);\n this.propagateStateToReceiver_(receiver);\n };\n\n private readonly unregisterStateReceiver_ = (receiver: StateReceiverElement): void => {\n if (!arrayRemove(this._stateReceivers, receiver)) {\n return;\n }\n this.removeStateFromReceiver_(receiver);\n };\n\n private propagateStateToReceiver_(receiver: StateReceiverElement): void {\n const receiverProps = receiver[StateReceiverProps];\n if (receiverProps.indexOf('player') >= 0) {\n receiver.player = this._player;\n }\n if (receiverProps.indexOf('fullscreen') >= 0) {\n receiver.fullscreen = this.fullscreen;\n }\n if (receiverProps.indexOf('deviceType') >= 0) {\n receiver.deviceType = this.deviceType;\n }\n if (receiverProps.indexOf('streamType') >= 0) {\n receiver.streamType = this.streamType;\n }\n if (this._player !== undefined) {\n if (receiverProps.indexOf('playbackRate') >= 0) {\n receiver.playbackRate = this._player.playbackRate;\n }\n if (receiverProps.indexOf('error') >= 0) {\n receiver.error = this._player.errorObject;\n }\n if (receiverProps.indexOf('activeVideoQuality') >= 0) {\n receiver.activeVideoQuality = this._activeVideoTrack?.activeQuality as VideoQuality | undefined;\n }\n if (receiverProps.indexOf('targetVideoQualities') >= 0) {\n receiver.targetVideoQualities = getTargetQualities(this._activeVideoTrack) as VideoQuality[] | undefined;\n }\n }\n if (receiverProps.indexOf('previewTime') >= 0) {\n receiver.previewTime = this._previewTime;\n }\n }\n\n private propagatePlayerToAllReceivers_(): void {\n for (const receiver of this._stateReceivers) {\n const receiverProps = receiver[StateReceiverProps];\n if (receiverProps.indexOf('player') >= 0) {\n receiver.player = this._player;\n }\n }\n }\n\n private removeStateFromReceiver_(receiver: StateReceiverElement): void {\n const receiverProps = receiver[StateReceiverProps];\n if (receiverProps.indexOf('player') >= 0) {\n receiver.player = undefined;\n }\n }\n\n private get menuOpened_(): boolean {\n return this._menuOpened;\n }\n\n @property({ reflect: true, state: true, type: Boolean, attribute: Attribute.MENU_OPENED })\n private set menuOpened_(menuOpened: boolean) {\n if (this._menuOpened === menuOpened) return;\n this._menuOpened = menuOpened;\n // Toggle manually, so the menu layer immediately becomes visible and can receive focus.\n toggleAttribute(this, Attribute.MENU_OPENED, menuOpened);\n }\n\n private openMenu_(menuToOpen: string, opener: HTMLElement | undefined): void {\n const topChromeRect = Rectangle.fromRect(this._topChromeRef.value!.getBoundingClientRect());\n const bottomChromeRect = Rectangle.fromRect(this._bottomChromeRef.value!.getBoundingClientRect());\n\n // Open menu in same quadrant as its opener\n // If there's no opener, open in bottom right corner by default\n let alignBottom: boolean = true;\n let alignRight: boolean = true;\n if (opener !== undefined) {\n const playerRect = Rectangle.fromRect(this.getBoundingClientRect());\n const openerRect = Rectangle.fromRect(opener.getBoundingClientRect());\n if (playerRect.width > 0 && playerRect.height > 0) {\n alignBottom = openerRect.top >= playerRect.top + playerRect.height / 2;\n alignRight = openerRect.left >= playerRect.left + playerRect.width / 2;\n }\n }\n\n this._menuGroupRef.value!.openMenu(menuToOpen, opener);\n this._menuOpener = opener;\n\n const props = {\n '--theoplayer-menu-offset-top': `${Math.round(topChromeRect.height)}px`,\n '--theoplayer-menu-offset-bottom': `${Math.round(bottomChromeRect.height)}px`,\n '--theoplayer-menu-margin-top': alignBottom ? 'auto' : '0',\n '--theoplayer-menu-margin-bottom': alignBottom ? '0' : 'auto',\n '--theoplayer-menu-margin-left': alignRight ? 'auto' : '0',\n '--theoplayer-menu-margin-right': alignRight ? '0' : 'auto'\n };\n shadyCss.styleSubtree(this, props);\n }\n\n private closeMenu_(): void {\n // Menu group might not be upgraded yet\n this._menuGroupRef.value?.closeMenu?.();\n this._menuOpener?.focus();\n this._menuOpener = undefined;\n }\n\n private readonly _onToggleMenu = (rawEvent: Event): void => {\n const event = rawEvent as ToggleMenuEvent;\n event.stopPropagation();\n const menuId = event.detail.menu;\n const menuGroup = this._menuGroupRef.value;\n if (!menuGroup) return;\n if (!menuGroup.getMenuById(menuId)) {\n console.error(`<theoplayer-ui>: cannot find menu with ID \"${menuId}\"`);\n return;\n }\n const opener = isHTMLElement(event.target) ? event.target : undefined;\n if (menuGroup.isMenuOpen(menuId)) {\n this.closeMenu_();\n } else {\n // Always close the previous menu first\n this.closeMenu_();\n this.openMenu_(menuId, opener);\n }\n };\n\n private readonly _onCloseMenu = (event: Event): void => {\n event.stopPropagation();\n this.closeMenu_();\n };\n\n private readonly _onMenuChange = (): void => {\n const menuEl = this._menuRef.value!;\n menuEl.removeEventListener('pointerdown', this._onMenuPointerDown);\n menuEl.removeEventListener('click', this._onMenuClick);\n if (this._menuGroupRef.value!.hasCurrentMenu()) {\n menuEl.addEventListener('pointerdown', this._onMenuPointerDown);\n menuEl.addEventListener('click', this._onMenuClick);\n this.menuOpened_ = true;\n } else {\n this.menuOpened_ = false;\n }\n this.updateUserIdle_();\n };\n\n private readonly _onMenuPointerDown = (event: PointerEvent) => {\n this._pointerType = event.pointerType;\n };\n\n private readonly _onMenuClick = (event: MouseEvent) => {\n // If the browser doesn't support yet `pointerType` on `click` events,\n // we use the type from the previous `pointerdown` event.\n const pointerType = (event as PointerEvent).pointerType ?? this._pointerType;\n if (event.target === this._menuRef.value && pointerType === 'mouse') {\n // Close menu when clicking (with mouse) on menu backdrop\n if (this._menuGroupRef.value!.closeCurrentMenu()) {\n event.preventDefault();\n }\n }\n };\n\n private readonly _onEnterFullscreen = (rawEvent: Event): void => {\n const event = rawEvent as EnterFullscreenEvent;\n event.stopPropagation();\n if (fullscreenAPI && document[fullscreenAPI.fullscreenEnabled_] && this[fullscreenAPI.requestFullscreen_]) {\n const promise = this[fullscreenAPI.requestFullscreen_]({\n navigationUI: 'hide',\n ...this._configuration?.ui?.fullscreenOptions\n });\n if (promise && promise.then) {\n promise.then(noOp, noOp);\n }\n } else if (this._player && this._player.presentation.supportsMode('fullscreen')) {\n this._player.presentation.requestMode('fullscreen');\n } else if (!this._isFullWindow) {\n this._isFullWindow = true;\n document.documentElement.classList.add(FULL_WINDOW_ROOT_CLASS);\n window.addEventListener('keydown', this._exitFullscreenOnEsc);\n this._onFullscreenChange();\n }\n };\n\n private readonly _onExitFullscreen = (rawEvent: Event): void => {\n const event = rawEvent as ExitFullscreenEvent;\n event.stopPropagation();\n if (fullscreenAPI) {\n const promise = document[fullscreenAPI.exitFullscreen_]();\n if (promise && promise.then) {\n promise.then(noOp, noOp);\n }\n }\n if (this._player && this._player.presentation.currentMode === 'fullscreen') {\n this._player.presentation.requestMode('inline');\n }\n if (this._isFullWindow) {\n this._isFullWindow = false;\n document.documentElement.classList.remove(FULL_WINDOW_ROOT_CLASS);\n window.removeEventListener('keydown', this._exitFullscreenOnEsc);\n this._onFullscreenChange();\n }\n };\n\n private readonly _onFullscreenChange = (): void => {\n let isFullscreen: boolean = false;\n if (fullscreenAPI !== undefined) {\n const fullscreenElement = document[fullscreenAPI.fullscreenElement_];\n if (fullscreenElement) {\n // If <theoplayer-ui> is nested within another custom element,\n // then document.fullscreenElement will equal that other custom element.\n // Look for the nearest shadow host that is contained in the fullscreen element.\n isFullscreen = containsComposedNode(fullscreenElement, this);\n }\n }\n if (!isFullscreen && this._player !== undefined && this._player.presentation.currentMode === 'fullscreen') {\n isFullscreen = true;\n }\n if (this._isFullWindow) {\n isFullscreen = true;\n }\n this.fullscreen = isFullscreen;\n };\n\n private readonly _exitFullscreenOnEsc = (event: KeyboardEvent): void => {\n if (event.keyCode == KeyCode.ESCAPE) {\n this._onExitFullscreen(event);\n }\n };\n\n private readonly _updateAspectRatio = (): void => {\n if (this._player === undefined) {\n return;\n }\n const { videoWidth, videoHeight } = this._player;\n if (videoWidth > 0 && videoHeight > 0) {\n shadyCss.styleSubtree(this, {\n '--theoplayer-video-width': `${videoWidth}`,\n '--theoplayer-video-height': `${videoHeight}`\n });\n } else {\n shadyCss.styleSubtree(this, {\n '--theoplayer-video-width': '',\n '--theoplayer-video-height': ''\n });\n }\n };\n\n private readonly _updateError = (): void => {\n const error = this._player?.errorObject;\n this._hasError = error !== undefined;\n for (const receiver of this._stateReceivers) {\n if (receiver[StateReceiverProps].indexOf('error') >= 0) {\n receiver.error = error;\n }\n }\n };\n\n private readonly _onPlay = (): void => {\n this._hasFirstPlay = true;\n this.paused = false;\n this._updateEnded();\n };\n\n private readonly _onPause = (): void => {\n this.paused = true;\n this._updateEnded();\n };\n\n private readonly _updatePausedAndEnded = (): void => {\n this.paused = this._player ? this._player.paused : true;\n this._updateEnded();\n };\n\n private readonly _updateEnded = (): void => {\n this.ended = this._player ? this._player.ended : false;\n };\n\n private readonly _updateStreamType = (): void => {\n if (this._player === undefined) {\n return;\n }\n this.streamType = this.computeStreamType_();\n };\n\n private computeStreamType_(): StreamType {\n const source = this.source;\n const streamType = source?.streamType ?? (this.getAttribute(Attribute.STREAM_TYPE) as StreamType | null);\n const duration = this._player?.duration;\n if (duration === undefined || isNaN(duration)) {\n // No duration yet...\n // Use hinted stream type if available.\n if (streamType) {\n return streamType;\n }\n if (source?.dvr) {\n return 'dvr';\n }\n // Assume VOD.\n return 'vod';\n } else if (duration === Infinity) {\n // It's a live stream.\n if (streamType === 'live' || streamType === 'dvr') {\n // Follow the hinted stream type.\n return streamType;\n } else {\n const dvrThreshold = this.dvrThreshold;\n if (dvrThreshold <= 0) {\n return 'dvr';\n }\n const seekable = this._player?.seekable;\n if (seekable && seekable.length > 0) {\n // Check if the DVR window is large enough.\n const dvrWindow = seekable.end(seekable.length - 1) - seekable.start(0);\n if (dvrWindow >= dvrThreshold) {\n return 'dvr';\n }\n }\n }\n // Otherwise, it's a regular live stream.\n return 'live';\n } else {\n // It's a VOD.\n return 'vod';\n }\n }\n\n private readonly _updatePlaybackRate = (): void => {\n if (this._player === undefined) {\n return;\n }\n const playbackRate = this._player.playbackRate;\n for (const receiver of this._stateReceivers) {\n if (receiver[StateReceiverProps].indexOf('playbackRate') >= 0) {\n receiver.playbackRate = playbackRate;\n }\n }\n };\n\n private readonly _updateMuted = (): void => {\n if (this._player === undefined) {\n return;\n }\n this.muted = this._player.muted;\n };\n\n private readonly _updateActiveVideoTrack = (): void => {\n if (this._player === undefined) {\n return;\n }\n const activeVideoTrack = arrayFind(this._player.videoTracks, (track) => track.enabled);\n if (this._activeVideoTrack !== activeVideoTrack) {\n this._activeVideoTrack?.removeEventListener('activequalitychanged', this._updateActiveVideoQuality);\n this._activeVideoTrack?.removeEventListener('targetqualitychanged', this._updateTargetVideoQualities);\n this._activeVideoTrack = activeVideoTrack;\n this._updateActiveVideoQuality();\n this._updateTargetVideoQualities();\n this._activeVideoTrack?.addEventListener('activequalitychanged', this._updateActiveVideoQuality);\n this._activeVideoTrack?.addEventListener('targetqualitychanged', this._updateTargetVideoQualities);\n }\n };\n\n private readonly _updateActiveVideoQuality = (): void => {\n const activeVideoQuality = this._activeVideoTrack?.activeQuality as VideoQuality | undefined;\n for (const receiver of this._stateReceivers) {\n if (receiver[StateReceiverProps].indexOf('activeVideoQuality') >= 0) {\n receiver.activeVideoQuality = activeVideoQuality;\n }\n }\n };\n\n private readonly _updateTargetVideoQualities = (): void => {\n const targetVideoQualities = getTargetQualities(this._activeVideoTrack) as VideoQuality[] | undefined;\n for (const receiver of this._stateReceivers) {\n if (receiver[StateReceiverProps].indexOf('targetVideoQualities') >= 0) {\n receiver.targetVideoQualities = targetVideoQualities;\n }\n }\n };\n\n private readonly _updateCasting = (): void => {\n this.casting = this._player?.cast?.casting ?? false;\n };\n\n private readonly _updatePlayingAd = (): void => {\n this._isPlayingAd = this._player?.ads?.playing ?? false;\n };\n\n private readonly _onSourceChange = (): void => {\n this.closeMenu_();\n this._hasFirstPlay = this._player !== undefined && !this._player.paused;\n };\n\n private isUserIdle_(): boolean {\n return (\n !this._isUserActive && !this.paused && !this.casting && (this._menuGroupRef.value ? !this._menuGroupRef.value.hasCurrentMenu() : false)\n );\n }\n\n private setUserActive_(): void {\n clearTimeout(this._userIdleTimer);\n this._isUserActive = true;\n this.updateUserIdle_();\n }\n\n private readonly setUserIdle_ = (): void => {\n clearTimeout(this._userIdleTimer);\n this._userIdleTimer = 0;\n\n if (this.userIdleTimeout < 0) {\n return;\n }\n this._isUserActive = false;\n this.updateUserIdle_();\n\n if (this.deviceType == 'tv' && this.isUserIdle_()) {\n // Blur active element so that first key press on TV doesn't result in an action.\n const focusedChild = getFocusedChild();\n if (focusedChild !== null) {\n focusedChild.blur();\n }\n }\n };\n\n private readonly scheduleUserIdle_ = (): void => {\n this.setUserActive_();\n\n clearTimeout(this._userIdleTimer);\n\n // Setting the timeout to -1 turns off idle detection.\n if (this.userIdleTimeout < 0) {\n this._userIdleTimer = 0;\n return;\n }\n\n this._userIdleTimer = setTimeout(this.setUserIdle_, this.userIdleTimeout * 1000);\n };\n\n private updateUserIdle_(): void {\n this.userIdle = this.isUserIdle_();\n }\n\n private isPlayerOrMedia_(node: Node): boolean {\n return node === this || this._playerRef.value!.contains(node);\n }\n\n private readonly _onTvKeyDown = (event: KeyboardEvent): void => {\n if (isBackKey(event.keyCode)) {\n this.setUserIdle_();\n return;\n }\n const tvFocusChildren = getTvFocusChildren(this);\n const focusableChildren = getFocusableChildren(this);\n let focusedChild = getFocusedChild();\n if (!focusedChild) {\n const children = tvFocusChildren ?? focusableChildren;\n if (children.length > 0) {\n children[0].focus();\n focusedChild = children[0];\n }\n }\n\n if (this.isUserIdle_()) {\n // First button press should only make the UI visible\n return;\n }\n if (event.keyCode === KeyCode.ENTER) {\n if (focusedChild !== null) {\n event.preventDefault();\n focusedChild.click();\n }\n } else if (isArrowKey(event.keyCode) && navigateByArrowKey(this, focusableChildren, event.keyCode)) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n private readonly _onKeyUp = (event: KeyboardEvent): void => {\n // Show the controls while navigating with the keyboard.\n if (!isBackKey(event.keyCode)) {\n this.scheduleUserIdle_();\n }\n };\n\n private readonly _onPointerUp = (event: PointerEvent): void => {\n if (event.pointerType === 'mouse') {\n this.scheduleUserIdle_();\n } else if (event.pointerType === 'touch') {\n // On mobile, when you tap the media while the controls are showing, immediately hide the controls.\n // Otherwise, show the controls (and schedule a timer to hide them again later on).\n if (this.isPlayerOrMedia_(event.target! as Node) && this._isUserActive) {\n this.setUserIdle_();\n } else {\n if (this.isUserIdle_()) {\n // Ignore the next \"click\" event, to prevent accidental button clicks\n // when the user only intended to show the controls.\n this._lastPointerUpTime = performance.now();\n this.addEventListener('click', this._onClickAfterPointerUp, true);\n }\n this.scheduleUserIdle_();\n }\n }\n };\n\n private readonly _onClickAfterPointerUp = (event: MouseEvent): void => {\n this.removeEventListener('click', this._onClickAfterPointerUp, true);\n if (performance.now() - this._lastPointerUpTime < ACCIDENTAL_CLICK_DELAY) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n private readonly _onPointerMove = (event: PointerEvent): void => {\n // \"pointermove\" doesn't happen with touch on taps on iOS, but does on Android. Therefore, only run for mouse.\n if (event.pointerType !== 'mouse') return;\n\n this.setUserActive_();\n\n // If hovering a control, keep the user active even when they stop moving.\n // Otherwise, when hovering the media, we can consider the user to be idle.\n if (this.isPlayerOrMedia_(event.target! as Node)) {\n this.scheduleUserIdle_();\n }\n };\n\n private readonly _onMouseLeave = (): void => {\n // Immediately hide the controls when mouse leaves the player.\n this.setUserIdle_();\n };\n\n private readonly _onChromeSlotTransition = (event: TransitionEvent): void => {\n // When the control bars become visible, move the text tracks out of the way.\n // When they become invisible, move the text tracks back.\n if (event.propertyName === 'opacity') {\n this._updateTextTrackMargins();\n }\n };\n\n private readonly _updateTextTrackMargins = (): void => {\n const player = this._player;\n if (player === undefined) {\n return;\n }\n const topChromeRect = this._topChromeSlotRef.value && getVisibleRect(this._topChromeSlotRef.value);\n const bottomChromeRect = this._bottomChromeSlotRef.value && getVisibleRect(this._bottomChromeSlotRef.value);\n player.textTrackStyle.marginTop = topChromeRect?.height;\n player.textTrackStyle.marginBottom = bottomChromeRect?.height;\n };\n\n private readonly _onPreviewTimeChange = (rawEvent: Event): void => {\n const event = rawEvent as PreviewTimeChangeEvent;\n this._previewTime = event.detail.previewTime;\n\n for (const receiver of this._stateReceivers) {\n if (receiver[StateReceiverProps].indexOf('previewTime') >= 0) {\n receiver.previewTime = this._previewTime;\n }\n }\n };\n\n private addPlayerListeners_(player: ChromelessPlayer): void {\n player.addEventListener('destroy', this._onDestroy);\n player.addEventListener('resize', this._updateAspectRatio);\n player.addEventListener(['error', 'sourcechange', 'emptied'], this._updateError);\n player.addEventListener('volumechange', this._updateMuted);\n player.addEventListener('play', this._onPlay);\n player.addEventListener('pause', this._onPause);\n player.addEventListener(['ended', 'emptied'], this._updatePausedAndEnded);\n player.addEventListener(['durationchange', 'sourcechange', 'emptied'], this._updateStreamType);\n player.addEventListener('ratechange', this._updatePlaybackRate);\n player.addEventListener('sourcechange', this._onSourceChange);\n player.addEventListener(['durationchange', 'sourcechange', 'emptied'], this._updatePlayingAd);\n\n player.theoLive?.addEventListener(['distributionloadstart', 'publicationloadstart' as never], this._onSourceChange);\n player.videoTracks.addEventListener(['addtrack', 'removetrack', 'change'], this._updateActiveVideoTrack);\n player.cast?.addEventListener('castingchange', this._updateCasting);\n player.ads?.addEventListener(['adbreakbegin', 'adbreakend', 'adbegin', 'adend', 'adskip'], this._updatePlayingAd);\n }\n\n private removePlayerListeners_(player: ChromelessPlayer): void {\n player.removeEventListener('destroy', this._onDestroy);\n player.removeEventListener('resize', this._updateAspectRatio);\n player.removeEventListener(['error', 'sourcechange', 'emptied'], this._updateError);\n player.removeEventListener('volumechange', this._updateMuted);\n player.removeEventListener('play', this._onPlay);\n player.removeEventListener('pause', this._onPause);\n player.removeEventListener(['ended', 'emptied'], this._updatePausedAndEnded);\n player.removeEventListener(['durationchange', 'sourcechange', 'emptied'], this._updateStreamType);\n player.removeEventListener('ratechange', this._updatePlaybackRate);\n player.removeEventListener('sourcechange', this._onSourceChange);\n player.removeEventListener(['durationchange', 'sourcechange', 'emptied'], this._updatePlayingAd);\n\n try {\n player.theoLive?.removeEventListener(['distributionloadstart', 'publicationloadstart' as never], this._onSourceChange);\n player.videoTracks.removeEventListener(['addtrack', 'removetrack', 'change'], this._updateActiveVideoTrack);\n player.cast?.removeEventListener('castingchange', this._updateCasting);\n player.ads?.removeEventListener(['adbreakbegin', 'adbreakend', 'adbegin', 'adend', 'adskip'], this._updatePlayingAd);\n } catch {\n // Ignore errors from accessing player.ads when the player is already destroyed.\n }\n }\n\n private readonly _onDestroy = (): void => {\n if (this._player) {\n this.removePlayerListeners_(this._player);\n this._player = undefined;\n this.propagatePlayerToAllReceivers_();\n }\n };\n\n protected override render(): HTMLTemplateResult {\n return html`\n <div part=\"layer media-layer\" ${ref(this._playerRef)}></div>\n <div part=\"layer gesture-layer\">\n <theoplayer-gesture-receiver></theoplayer-gesture-receiver>\n </div>\n <div part=\"layer vertical-layer\">\n <div part=\"top chrome\" ${ref(this._topChromeRef)}>\n <slot\n name=\"top-chrome\"\n ${ref(this._topChromeSlotRef)}\n @transitionstart=${this._onChromeSlotTransition}\n @transitionend=${this._onChromeSlotTransition}\n ></slot>\n </div>\n <div part=\"middle chrome\">\n <slot name=\"middle-chrome\"></slot>\n </div>\n <div part=\"layer centered-layer centered loading\">\n <slot name=\"centered-loading\"></slot>\n </div>\n <div part=\"layer centered-layer centered chrome\">\n <slot name=\"centered-chrome\"></slot>\n </div>\n <div part=\"bottom chrome\" ${ref(this._bottomChromeRef)}>\n <slot\n ${ref(this._bottomChromeSlotRef)}\n @transitionstart=${this._onChromeSlotTransition}\n @transitionend=${this._onChromeSlotTransition}\n ><!-- default, effectively \"bottom-chrome\" --></slot\n >\n </div>\n </div>\n <div part=\"layer menu-layer\" ${ref(this._menuRef)}>\n <theoplayer-menu-group\n ${ref(this._menuGroupRef)}\n part=\"menu\"\n @theoplayermenuclose=${this._onCloseMenu}\n @theoplayermenuchange=${this._onMenuChange}\n >\n <slot name=\"menu\"></slot>\n </theoplayer-menu-group>\n </div>\n <div part=\"layer error-layer\">\n <slot name=\"error\"></slot>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-ui': UIContainer;\n }\n}\n\nfunction getVisibleRect(slot: HTMLSlotElement): Rectangle | undefined {\n let result: Rectangle | undefined;\n const children = getSlottedElements(slot).filter(isHTMLElement);\n for (const child of children) {\n if (getComputedStyle(child).opacity !== '0') {\n const childRect = Rectangle.fromRect(child.getBoundingClientRect());\n if (childRect.width > 0 && childRect.height > 0) {\n result = result ? result.union(childRect) : childRect;\n }\n }\n }\n return result;\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, queryAssignedNodes, state } from 'lit/decorators.js';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport type { ChromelessPlayer, SourceDescription, UIPlayerConfiguration } from 'theoplayer/chromeless';\nimport { DEFAULT_DVR_THRESHOLD, DEFAULT_TV_USER_IDLE_TIMEOUT, DEFAULT_USER_IDLE_TIMEOUT, type UIContainer } from './UIContainer';\nimport defaultUiCss from './DefaultUI.css';\nimport { Attribute } from './util/Attribute';\nimport { applyExtensions } from './extensions/ExtensionRegistry';\nimport { isMobile, isTv } from './util/Environment';\nimport type { DeviceType } from './util/DeviceType';\nimport type { StreamType } from './util/StreamType';\nimport { USER_IDLE_CHANGE_EVENT } from './events/UserIdleChangeEvent';\nimport { READY_EVENT } from './events/ReadyEvent';\nimport { ACCIDENTAL_CLICK_DELAY } from './util/Constants';\nimport { toggleAttribute } from './util/CommonUtils';\nimport { createCustomEvent } from './util/EventUtils';\n\n/**\n * A default UI for THEOplayer.\n *\n * This default UI provides a great player experience out-of-the-box, that works well on all types of devices\n * and for all types of streams. It provides all the common playback controls for playing, seeking,\n * changing languages and qualities. It also supports advertisements and casting.\n *\n * ## Usage\n *\n * 1. Create a `<theoplayer-default-ui>` element.\n * 2. Set its `configuration` attribute or property to a valid player configuration.\n * 3. Set its `source` attribute or property to a valid stream source.\n * 4. Optionally, customize the player using CSS custom properties and/or extra controls.\n *\n * ## Customization\n *\n * The styling can be controlled using CSS custom properties (see {@link UIContainer | `<theoplayer-ui>`}).\n * Additional controls can be added to the `top-control-bar` and `bottom-control-bar` slots.\n * For more extensive customizations, we recommend defining your own custom UI using\n * a {@link UIContainer | `<theoplayer-ui>`}.\n *\n * @attribute `configuration` - The THEOplayer {@link theoplayer!UIPlayerConfiguration | UIPlayerConfiguration}, as a JSON string.\n * @attribute `source` - The THEOplayer {@link theoplayer!SourceDescription | SourceDescription}, as a JSON string.\n * @attribute `fluid` - If set, the player automatically adjusts its height to fit the video's aspect ratio.\n * @attribute `muted` - If set, the player starts out as muted. Reflects `ui.player.muted`.\n * @attribute `autoplay` - If set, the player attempts to automatically start playing (if allowed).\n * @attribute `device-type` - The device type, either \"desktop\", \"mobile\" or \"tv\".\n * Can be used in CSS to show/hide certain device-specific UI controls.\n * @attribute `mobile` - Whether the user is on a mobile device. Equivalent to `device-type == \"mobile\"`.\n * @attribute `tv` - Whether the user is on a TV device. Equivalent to `device-type == \"tv\"`.\n * @attribute `stream-type` - The stream type, either \"vod\", \"live\" or \"dvr\".\n * Can be used to show/hide certain UI controls specific for livestreams, such as\n * a {@link LiveButton | `<theoplayer-live-button>`}.\n * If you know in advance that the source will be a livestream, you can set this attribute to avoid a screen flicker\n * when the player switches between its VOD-specific and live-only controls.\n * @attribute `user-idle-timeout` - The timeout (in seconds) between when the user stops interacting with the UI,\n * and when the user is considered to be \"idle\".\n * @attribute `dvr-threshold` - The minimum length (in seconds) of a livestream's sliding window for the stream to be DVR\n * and its stream type to be set to \"dvr\".\n *\n * @slot `title` - A slot for the stream's title in the top control bar.\n * @slot `top-control-bar` - A slot for extra UI controls in the top control bar.\n * @slot `centered-chrome` - A slot to replace the controls in the center of the player,\n * layered on top of other controls.\n * @slot `bottom-control-bar` - A slot for extra UI controls in the bottom control bar.\n * @slot `menu` - A slot for extra menus (see {@link Menu | `<theoplayer-menu>`}).\n * @slot `error` - A slot for an error display, to show when the player encounters a fatal error.\n * By default, this shows an {@link ErrorDisplay | `<theoplayer-error-display>`}.\n */\n@customElement('theoplayer-default-ui')\nexport class DefaultUI extends LitElement {\n static override styles = [defaultUiCss];\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true\n };\n\n /**\n * Fired when the backing player is created, and the {@link DefaultUI.player} property is set.\n *\n * @group Events\n */\n static READY_EVENT: typeof READY_EVENT = READY_EVENT;\n\n protected readonly _uiRef: Ref<UIContainer> = createRef<UIContainer>();\n @state()\n private accessor _timeRangeInert: boolean = false;\n private _timeRangeInertTimeout: number = 0;\n private _appliedExtensions: boolean = false;\n\n private _configuration: UIPlayerConfiguration = {};\n private _source: SourceDescription | undefined = undefined;\n private _userIdleTimeout: number | undefined = undefined;\n private _deviceType: DeviceType = 'desktop';\n private _dvrThreshold: number = DEFAULT_DVR_THRESHOLD;\n\n @queryAssignedNodes({ slot: 'title', flatten: true })\n private accessor titleSlotNodes!: Array<Node>;\n\n /**\n * Creates a new THEOplayer default UI.\n *\n * @param configuration - The player configuration.\n * Will be passed to the {@link theoplayer!ChromelessPlayer | ChromelessPlayer} constructor to create\n * the underlying THEOplayer instance.\n * Can also be set later on through the {@link DefaultUI.configuration} property.\n */\n constructor(configuration: UIPlayerConfiguration = {}) {\n super();\n this.configuration = configuration;\n }\n\n /**\n * The underlying THEOplayer player instance.\n *\n * This is constructed automatically as soon as a valid {@link configuration} is set.\n */\n get player(): ChromelessPlayer | undefined {\n return this._uiRef.value?.player;\n }\n\n /**\n * The player configuration.\n *\n * Used to create the underlying THEOplayer instance.\n */\n get configuration(): UIPlayerConfiguration {\n return this._configuration;\n }\n\n @property({\n reflect: false,\n attribute: Attribute.CONFIGURATION,\n converter: {\n fromAttribute: (value: string | null) => (value ? (JSON.parse(value) as UIPlayerConfiguration) : {})\n }\n })\n set configuration(configuration: UIPlayerConfiguration) {\n this._configuration = {\n ...configuration,\n ads: {\n ...(configuration.ads ?? {}),\n // Always disable Google IMA's own ad countdown,\n // since we show our own countdown in the default UI.\n showCountdown: false\n }\n };\n }\n\n /**\n * The player's current source.\n */\n get source() {\n return this._uiRef.value ? this._uiRef.value.source : this._source;\n }\n\n @property({\n reflect: false,\n attribute: Attribute.SOURCE,\n converter: {\n fromAttribute: (value: string | null) => (value ? (JSON.parse(value) as SourceDescription) : undefined)\n }\n })\n set source(source: SourceDescription | undefined) {\n if (this._uiRef.value) {\n this._source = undefined;\n this._uiRef.value.source = source;\n } else {\n this._source = source;\n }\n }\n\n /**\n * Whether to automatically adjust the player's height to fit the video's aspect ratio.\n */\n @property({ reflect: true, type: Boolean, attribute: Attribute.FLUID })\n accessor fluid: boolean = false;\n\n /**\n * Whether the player's audio is muted.\n */\n @property({ reflect: true, type: Boolean, attribute: Attribute.MUTED })\n accessor muted: boolean = false;\n\n /**\n * Whether the player should attempt to automatically start playback.\n */\n @property({ reflect: true, type: Boolean, attribute: Attribute.AUTOPLAY })\n accessor autoplay: boolean = false;\n\n /**\n * The stream type, either \"vod\", \"live\" or \"dvr\".\n *\n * If you know in advance that the source will be a livestream, you can set this property to avoid a screen flicker\n * when the player switches between its VOD-specific and live-only controls.\n */\n @property({ reflect: true, type: String, attribute: Attribute.STREAM_TYPE })\n accessor streamType: StreamType = 'vod';\n\n /**\n * Whether the user has stopped interacting with the UI and is considered to be \"idle\".\n */\n get userIdle(): boolean {\n return this._uiRef.value ? this._uiRef.value.userIdle : false;\n }\n\n /**\n * The timeout (in seconds) between when the user stops interacting with the UI,\n * and when the user is considered to be \"idle\".\n */\n get userIdleTimeout(): number {\n return this._userIdleTimeout ?? (this.deviceType === 'tv' ? DEFAULT_TV_USER_IDLE_TIMEOUT : DEFAULT_USER_IDLE_TIMEOUT);\n }\n\n @property({ reflect: true, type: Number, attribute: Attribute.USER_IDLE_TIMEOUT, useDefault: true })\n set userIdleTimeout(value: number | undefined) {\n this._userIdleTimeout = value === undefined || isNaN(value) ? undefined : value;\n }\n\n /**\n * The device type, either \"desktop\", \"mobile\" or \"tv\".\n */\n get deviceType(): DeviceType {\n return this._deviceType;\n }\n\n @property({ reflect: true, type: String, attribute: Attribute.DEVICE_TYPE })\n set deviceType(value: DeviceType) {\n if (this._deviceType === value) return;\n this._deviceType = value;\n toggleAttribute(this, Attribute.MOBILE, value === 'mobile');\n toggleAttribute(this, Attribute.TV, value === 'tv');\n }\n\n /**\n * The minimum length (in seconds) of a livestream's sliding window for the stream to be DVR\n * and its stream type to be set to \"dvr\".\n */\n get dvrThreshold(): number {\n return this._dvrThreshold;\n }\n\n @property({ reflect: true, type: Number, attribute: Attribute.DVR_THRESHOLD, useDefault: true })\n set dvrThreshold(value: number) {\n this._dvrThreshold = isNaN(value) ? 0 : value;\n }\n\n @state()\n private accessor _hasTitle: boolean = false;\n\n connectedCallback(): void {\n super.connectedCallback();\n\n if (!this.hasAttribute(Attribute.DEVICE_TYPE)) {\n this.deviceType = isMobile() ? 'mobile' : isTv() ? 'tv' : 'desktop';\n }\n\n if (!this._appliedExtensions) {\n this._appliedExtensions = true;\n applyExtensions(this);\n }\n\n this._onTitleSlotChange();\n }\n\n disconnectedCallback(): void {\n clearTimeout(this._timeRangeInertTimeout);\n }\n\n protected override firstUpdated() {\n if (this._source) {\n this._uiRef.value!.source = this._source;\n this._source = undefined;\n }\n }\n\n protected _onUiReady(): void {\n this.dispatchEvent(createCustomEvent(READY_EVENT));\n }\n\n private readonly _updateStreamType = () => {\n if (this._uiRef.value) {\n this.streamType = this._uiRef.value.streamType;\n }\n };\n\n private readonly _updateUserIdle = () => {\n clearTimeout(this._timeRangeInertTimeout);\n if (this.userIdle) {\n // Disable seekbar when user is idle\n this._timeRangeInert = true;\n } else {\n // Re-enable seekbar when user is active,\n // but wait a little bit to prevent accidentally clicking the seekbar.\n this._timeRangeInertTimeout = setTimeout(() => {\n this._timeRangeInert = false;\n }, ACCIDENTAL_CLICK_DELAY);\n }\n this.dispatchEvent(createCustomEvent(USER_IDLE_CHANGE_EVENT));\n };\n\n private readonly _onTitleSlotChange = () => {\n this._hasTitle = this.titleSlotNodes.length > 0;\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<theoplayer-ui\n ${ref(this._uiRef)}\n .configuration=${this.configuration}\n .fluid=${this.fluid}\n .muted=${this.muted}\n .autoplay=${this.autoplay}\n .deviceType=${this.deviceType}\n .streamType=${this.streamType}\n .userIdleTimeout=${this.userIdleTimeout}\n .dvrThreshold=${this.dvrThreshold}\n @theoplayerready=${this._onUiReady}\n @theoplayeruseridlechange=${this._updateUserIdle}\n @theoplayerstreamtypechange=${this._updateStreamType}\n >${this.renderUiContent()}\n </theoplayer-ui>`;\n }\n\n protected renderUiContent(): HTMLTemplateResult {\n return html`\n <theoplayer-control-bar slot=\"top-chrome\" part=\"top-chrome\">\n <div part=\"title\" ad-hidden style=${styleMap({ display: this._hasTitle ? '' : 'none' })}>\n <slot name=\"title\" @slotchange=${this._onTitleSlotChange}></slot>\n </div>\n <span class=\"theoplayer-spacer\"></span>\n <theoplayer-language-menu-button menu=\"language-menu\" mobile-only ad-hidden></theoplayer-language-menu-button>\n <theoplayer-airplay-button mobile-only ad-hidden></theoplayer-airplay-button>\n <theoplayer-chromecast-button mobile-only ad-hidden></theoplayer-chromecast-button>\n <slot name=\"top-control-bar\"></slot>\n <theoplayer-settings-menu-button menu=\"settings-menu\" mobile-only ad-hidden></theoplayer-settings-menu-button>\n <theoplayer-ad-clickthrough-button ad-only></theoplayer-ad-clickthrough-button>\n </theoplayer-control-bar>\n <theoplayer-loading-indicator slot=\"centered-loading\" no-auto-hide></theoplayer-loading-indicator>\n <div slot=\"centered-chrome\" part=\"centered-chrome\">\n <slot name=\"centered-chrome\">\n <theoplayer-seek-button\n part=\"seek-back-button seek-button center-button\"\n seek-offset=\"-10\"\n mobile-only\n ad-hidden\n ></theoplayer-seek-button>\n <theoplayer-play-button part=\"center-play-button play-button center-button\"></theoplayer-play-button>\n <theoplayer-seek-button\n part=\"seek-forward-button seek-button center-button\"\n seek-offset=\"10\"\n mobile-only\n ad-hidden\n ></theoplayer-seek-button>\n </slot>\n </div>\n <div slot=\"middle-chrome\" part=\"middle-chrome\">\n <theoplayer-chromecast-display></theoplayer-chromecast-display>\n </div>\n <div part=\"bottom-chrome\">\n <theoplayer-control-bar part=\"ad-chrome\" ad-only>\n <theoplayer-ad-display></theoplayer-ad-display>\n <theoplayer-ad-countdown></theoplayer-ad-countdown>\n <span class=\"theoplayer-spacer\"></span>\n <theoplayer-ad-skip-button></theoplayer-ad-skip-button>\n </theoplayer-control-bar>\n <theoplayer-control-bar>\n <theoplayer-play-button part=\"play-button\" mobile-hidden ad-only class=\"theoplayer-ad-control\"></theoplayer-play-button>\n <theoplayer-mute-button part=\"mute-button\" ad-only class=\"theoplayer-ad-control\"></theoplayer-mute-button>\n <theoplayer-time-range\n part=\"time-range\"\n show-ad-markers\n tv-focus\n .inert=${this._timeRangeInert}\n class=\"theoplayer-ad-control\"\n style=${styleMap({\n // Hide seekbar when stream is live with no DVR\n display: this.streamType === 'live' ? 'none' : ''\n })}\n ></theoplayer-time-range>\n <theoplayer-chromecast-button tv-hidden ad-only class=\"theoplayer-ad-control\"></theoplayer-chromecast-button>\n <theoplayer-fullscreen-button ad-only class=\"theoplayer-ad-control\"></theoplayer-fullscreen-button>\n </theoplayer-control-bar>\n <theoplayer-control-bar ad-hidden>\n <theoplayer-play-button part=\"play-button\" mobile-hidden></theoplayer-play-button>\n <theoplayer-mute-button part=\"mute-button\" tv-hidden></theoplayer-mute-button>\n <theoplayer-volume-range part=\"volume-range\" mobile-hidden tv-hidden></theoplayer-volume-range>\n <theoplayer-live-button part=\"live-button\" live-only ad-hidden></theoplayer-live-button>\n <theoplayer-time-display show-duration remaining-when-live></theoplayer-time-display>\n <span class=\"theoplayer-spacer\" style=\"pointer-events: auto\"></span>\n <theoplayer-language-menu-button menu=\"language-menu\" mobile-hidden ad-hidden></theoplayer-language-menu-button>\n <theoplayer-airplay-button tv-hidden mobile-hidden ad-hidden></theoplayer-airplay-button>\n <theoplayer-chromecast-button tv-hidden mobile-hidden ad-hidden></theoplayer-chromecast-button>\n <slot name=\"bottom-control-bar\"></slot>\n <theoplayer-settings-menu-button menu=\"settings-menu\" mobile-hidden ad-hidden></theoplayer-settings-menu-button>\n <theoplayer-fullscreen-button part=\"fullscreen-button\" tv-hidden></theoplayer-fullscreen-button>\n </theoplayer-control-bar>\n </div>\n <theoplayer-language-menu id=\"language-menu\" slot=\"menu\" hidden></theoplayer-language-menu>\n <theoplayer-settings-menu id=\"settings-menu\" slot=\"menu\" hidden></theoplayer-settings-menu>\n <slot name=\"error\" slot=\"error\"><theoplayer-error-display></theoplayer-error-display></slot>\n <slot name=\"menu\" slot=\"menu\"></slot>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theoplayer-default-ui': DefaultUI;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { ChromelessPlayer as TheoPlayer, type TheoLiveApi } from 'theoplayer/chromeless';\nimport badNetworkModeButtonCss from './BadNetworkModeButton.css';\nimport settingsIcon from '../../../icons/settings.svg';\nimport warningIcon from '../../../icons/warning.svg';\nimport { stateReceiver } from '../../StateReceiverMixin';\nimport { MenuButton } from '../../MenuButton';\nimport { Attribute } from '../../../util/Attribute';\n\n/**\n * A menu button that opens a settings menu.\n *\n * @attribute `menu` - The ID of the settings menu.\n */\n@customElement('theolive-bad-network-button')\n@stateReceiver(['player'])\nexport class BadNetworkModeButton extends MenuButton {\n static styles = [...MenuButton.styles, badNetworkModeButtonCss];\n\n private _player: TheoPlayer | undefined;\n private _theoLive: TheoLiveApi | undefined;\n\n @state()\n private accessor _inBadNetworkMode = false;\n\n override connectedCallback() {\n super.connectedCallback();\n\n if (!this.hasAttribute(Attribute.ARIA_LABEL)) {\n this.setAttribute(Attribute.ARIA_LABEL, 'open settings menu');\n }\n }\n\n private readonly handleEnterBadNetworkMode_ = () => {\n this._inBadNetworkMode = true;\n };\n\n private readonly handleExitBadNetworkMode_ = () => {\n this._inBadNetworkMode = false;\n };\n\n get player(): TheoPlayer | undefined {\n return this._player;\n }\n\n @property({ reflect: false, attribute: false })\n set player(player: TheoPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._theoLive) {\n this._theoLive.removeEventListener('enterbadnetworkmode', this.handleEnterBadNetworkMode_);\n this._theoLive.removeEventListener('exitbadnetworkmode', this.handleExitBadNetworkMode_);\n }\n this._player = player;\n this._theoLive = player?.theoLive;\n if (this._theoLive) {\n this._theoLive.addEventListener('enterbadnetworkmode', this.handleEnterBadNetworkMode_);\n this._theoLive.addEventListener('exitbadnetworkmode', this.handleExitBadNetworkMode_);\n }\n }\n\n protected override render(): HTMLTemplateResult {\n const warningStyles = {\n display: this._inBadNetworkMode ? '' : 'none'\n };\n return html`<span part=\"icon\"\n >${unsafeSVG(settingsIcon)}<span part=\"warning-icon\" style=${styleMap(warningStyles)}>${unsafeSVG(warningIcon)}</span></span\n >`;\n }\n}\n","import type { ChromelessPlayer, TheoLiveApi } from 'theoplayer/chromeless';\nimport { stateReceiver } from '../../StateReceiverMixin';\nimport { RadioButton } from '../../RadioButton';\n\n/**\n * A radio button that shows the label of a given video quality, and switches the video track's\n * {@link theoplayer!MediaTrack.targetQuality | target quality} to that quality when clicked.\n */\n@stateReceiver(['player'])\nexport abstract class AbstractQualitySelector extends RadioButton {\n private _player: ChromelessPlayer | undefined;\n private _theoLive: TheoLiveApi | undefined;\n protected _badNetworkMode: boolean = false;\n\n get player(): ChromelessPlayer | undefined {\n return this._player;\n }\n\n set player(player: ChromelessPlayer | undefined) {\n if (this._player === player) {\n return;\n }\n if (this._theoLive) {\n this._theoLive.removeEventListener('enterbadnetworkmode', this.handleEnterBadNetworkMode_);\n this._theoLive.removeEventListener('exitbadnetworkmode', this.handleExitBadNetworkMode_);\n }\n this._player = player;\n this._theoLive = player?.theoLive;\n this._badNetworkMode = this._theoLive?.badNetworkMode ?? false;\n if (this._theoLive) {\n this._theoLive.addEventListener('enterbadnetworkmode', this.handleEnterBadNetworkMode_);\n this._theoLive.addEventListener('exitbadnetworkmode', this.handleExitBadNetworkMode_);\n }\n this.handlePlayer();\n }\n\n private readonly handleEnterBadNetworkMode_ = () => {\n this._badNetworkMode = true;\n this.handleEnterBadNetworkMode();\n };\n\n private readonly handleExitBadNetworkMode_ = () => {\n this._badNetworkMode = false;\n this.handleExitBadNetworkMode();\n };\n\n handleEnterBadNetworkMode(): void {\n // do nothing\n }\n\n handleExitBadNetworkMode(): void {\n // do nothing\n }\n\n protected abstract handlePlayer(): void;\n}\n","import { AbstractQualitySelector } from './AbstractQualitySelector';\nimport { html, type HTMLTemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\n@customElement('theolive-automatic-quality-selector')\nexport class AutomaticQualitySelector extends AbstractQualitySelector {\n handleEnterBadNetworkMode() {\n this.update_();\n }\n\n handleExitBadNetworkMode() {\n this.update_();\n }\n\n protected handlePlayer() {\n this.update_();\n }\n\n private update_() {\n const newChecked = this.player?.theoLive?.badNetworkMode !== true;\n if (this.checked !== newChecked) {\n this.checked = newChecked;\n }\n }\n\n protected handleChange() {\n if (this.checked && this.player && this.player.theoLive) {\n this.player.theoLive.badNetworkMode = false;\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<slot>High Quality</slot>`;\n }\n}\n","import { AbstractQualitySelector } from './AbstractQualitySelector';\nimport { html, type HTMLTemplateResult } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\n@customElement('theolive-bad-network-quality-selector')\nexport class BadNetworkModeSelector extends AbstractQualitySelector {\n handleEnterBadNetworkMode() {\n this.update_();\n }\n\n handleExitBadNetworkMode() {\n this.update_();\n }\n\n protected handlePlayer() {\n this.update_();\n }\n\n private update_() {\n const newChecked = this.player?.theoLive?.badNetworkMode === true;\n if (this.checked !== newChecked) {\n this.checked = newChecked;\n }\n }\n\n protected handleChange(): void {\n if (this.checked && this.player && this.player.theoLive) {\n this.player.theoLive.badNetworkMode = true;\n }\n }\n\n protected override render(): HTMLTemplateResult {\n return html`<slot>Low Quality</slot>`;\n }\n}\n","import { html, type HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement } from 'lit/decorators.js';\nimport { createRef, ref, type Ref } from 'lit/directives/ref.js';\nimport verticalRadioGroupCss from '../../VerticalRadioGroup.css';\nimport './AutomaticQualitySelector';\nimport './BadNetworkModeSelector';\nimport { RadioGroup } from '../../RadioGroup';\n\n@customElement('theolive-bad-network-menu')\nexport class BadNetworkModeMenu extends LitElement {\n static styles = [verticalRadioGroupCss];\n\n private readonly _radioGroupRef: Ref<RadioGroup> = createRef<RadioGroup>();\n\n protected firstUpdated() {\n if (this._radioGroupRef.value && !(this._radioGroupRef.value instanceof RadioGroup)) {\n customElements.upgrade(this._radioGroupRef.value);\n }\n }\n\n private readonly _onChange = () => {\n this.dispatchEvent(new Event('change', { bubbles: true }));\n };\n\n protected override render(): HTMLTemplateResult {\n return html`<theoplayer-radio-group ${ref(this._radioGroupRef)} @change=${this._onChange}>\n <theolive-automatic-quality-selector></theolive-automatic-quality-selector>\n <theolive-bad-network-quality-selector></theolive-bad-network-quality-selector>\n </theoplayer-radio-group>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theolive-bad-network-menu': BadNetworkModeMenu;\n }\n}\n","import { html, type HTMLTemplateResult } from 'lit';\nimport { customElement, state } from 'lit/decorators.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport './components/theolive/quality/BadNetworkModeButton';\nimport './components/theolive/quality/BadNetworkModeMenu';\nimport css from './THEOliveDefaultUI.css';\nimport type { ErrorEvent, UIPlayerConfiguration } from 'theoplayer/chromeless';\nimport { DefaultUI } from './DefaultUI';\nimport { Attribute } from './util/Attribute';\n\n/**\n * `<theolive-default-ui>` - A default UI for THEOlive.\n */\n@customElement('theolive-default-ui')\nexport class THEOliveDefaultUI extends DefaultUI {\n static override styles = [css];\n\n @state()\n private accessor _announcementType: 'loading' | 'offline' | 'announcement' | '' = '';\n @state()\n private accessor _announcementMessage: string = '';\n @state()\n private accessor _hidePlayButton: boolean = false;\n @state()\n private accessor _hideErrorDisplay: boolean = false;\n\n constructor(configuration: UIPlayerConfiguration = {}) {\n super(configuration);\n }\n\n protected override _onUiReady() {\n super._onUiReady();\n const player = this.player;\n if (player) {\n player.theoLive?.addEventListener(['distributionloadstart', 'publicationloadstart' as never], this.onLoadChannelStart);\n player.theoLive?.addEventListener(['distributionoffline', 'publicationoffline' as never], this.onChannelOffline);\n player.theoLive?.addEventListener(['endpointloaded', 'publicationloaded' as never], this.onChannelLoaded);\n player.addEventListener('error', this.onError);\n }\n }\n\n private onLoadChannelStart = () => {\n this.showMessage_('loading', undefined);\n };\n\n private onChannelOffline = () => {\n this.showMessage_('offline', undefined);\n };\n\n private onChannelLoaded = () => {\n this.hidePlayerError();\n this.hideMessage_();\n };\n\n private onError = (e: ErrorEvent) => {\n const errorCode = e.errorObject.code;\n if (errorCode < 13_000 || errorCode >= 14_000) {\n this.showMessage_('offline', undefined);\n return;\n }\n this.stopHidingPlayerError();\n this.hideMessage_();\n };\n\n private hidePlayerError(): void {\n this._uiRef.value?.removeAttribute(Attribute.HAS_ERROR);\n this._hideErrorDisplay = true;\n }\n\n private stopHidingPlayerError(): void {\n this._uiRef.value?.setAttribute(Attribute.HAS_ERROR, '');\n this._hideErrorDisplay = false;\n }\n\n private showMessage_(type: 'offline' | 'loading' | 'announcement', text: string | undefined): void {\n this.hidePlayerError();\n this._announcementType = type;\n this._announcementMessage = text ?? '';\n this._hidePlayButton = true;\n }\n\n private hideMessage_(): void {\n this._announcementType = '';\n this._announcementMessage = '';\n this._hidePlayButton = false;\n }\n\n protected override renderUiContent(): HTMLTemplateResult {\n const loadingStyles = { display: this._announcementType === 'loading' ? '' : 'none' };\n const offlineStyles = { display: this._announcementType === 'offline' ? '' : 'none' };\n const announcementStyles = { display: this._announcementType === 'announcement' ? '' : 'none' };\n const playButtonStyles = { display: this._hidePlayButton ? 'none' : '' };\n const errorDisplayStyles = { display: this._hideErrorDisplay ? 'none' : '' };\n return html`\n <p id=\"loading-announcement\" no-auto-hide slot=\"centered-chrome\" style=${styleMap(loadingStyles)}>\n <slot name=\"loading-announcement\">Loading...</slot>\n </p>\n <p id=\"offline-announcement\" no-auto-hide slot=\"centered-chrome\" style=${styleMap(offlineStyles)}>\n <slot name=\"offline-announcement\">The live stream hasn't started yet</slot>\n </p>\n <p id=\"announcement\" no-auto-hide slot=\"centered-chrome\" style=${styleMap(announcementStyles)}>${this._announcementMessage}</p>\n <theoplayer-loading-indicator slot=\"centered-loading\" no-auto-hide part=\"loading-indicator\"></theoplayer-loading-indicator>\n <div slot=\"centered-chrome\" part=\"centered-chrome\">\n <theoplayer-play-button\n part=\"center-play-button play-button center-button\"\n style=${styleMap(playButtonStyles)}\n ></theoplayer-play-button>\n </div>\n <div part=\"bottom-chrome\">\n <theoplayer-control-bar>\n <theoplayer-play-button mobile-hidden part=\"play-button\" style=${styleMap(playButtonStyles)}></theoplayer-play-button>\n <theoplayer-mute-button part=\"mute-button\"></theoplayer-mute-button>\n <theoplayer-volume-range mobile-hidden part=\"volume-range\"></theoplayer-volume-range>\n <theoplayer-live-button ad-hidden live-only part=\"live-button\"></theoplayer-live-button>\n <span class=\"theoplayer-spacer\"></span>\n <theoplayer-settings-menu-button ad-hidden menu=\"all-quality-menu\" part=\"quality-button\"></theoplayer-settings-menu-button>\n <theolive-bad-network-button ad-hidden menu=\"quality-menu\" part=\"theolive-bad-network-button\"></theolive-bad-network-button>\n <theoplayer-fullscreen-button part=\"fullscreen-button\"></theoplayer-fullscreen-button>\n </theoplayer-control-bar>\n </div>\n <theoplayer-menu id=\"quality-menu\" slot=\"menu\" menu-close-on-input hidden>\n <theolive-bad-network-menu></theolive-bad-network-menu>\n </theoplayer-menu>\n <theoplayer-menu id=\"all-quality-menu\" slot=\"menu\" menu-close-on-input hidden>\n <theoplayer-quality-radio-group></theoplayer-quality-radio-group>\n </theoplayer-menu>\n <theoplayer-error-display slot=\"error\" part=\"error-display\" style=${styleMap(errorDisplayStyles)}></theoplayer-error-display>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'theolive-default-ui': THEOliveDefaultUI;\n }\n}\n","function _class_private_field_loose_base(receiver, privateKey) {\n if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n throw new TypeError(\"attempted to use private field on non-instance\");\n }\n\n return receiver;\n}\nexport { _class_private_field_loose_base as _ };\n","var id = 0;\n\nfunction _class_private_field_loose_key(name) {\n return \"__private_\" + id++ + \"_\" + name;\n}\nexport { _class_private_field_loose_key as _ };\n","import { Attribute } from './Attribute';\nimport { isSlotContainer } from '../components/SlotContainer';\n\nexport type Constructor<T> = abstract new (...args: any[]) => T;\n\nexport function noOp(): void {\n return;\n}\n\nexport function isElement(node: Node): node is Element {\n return node.nodeType === Node.ELEMENT_NODE;\n}\n\nexport function isHTMLElement(node: unknown): node is HTMLElement {\n return node instanceof HTMLElement;\n}\n\nexport function isHTMLSlotElement(element: Element): element is HTMLSlotElement {\n return element.localName.toLowerCase() === 'slot';\n}\n\nexport const isArray: (arg: unknown) => arg is any[] =\n typeof Array.isArray === 'function'\n ? Array.isArray\n : (arg): arg is any[] => {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n\nexport const fromArrayLike: <T>(arrayLike: ArrayLike<T>) => T[] =\n typeof Array.from === 'function'\n ? (arrayLike) => {\n return Array.from(arrayLike);\n }\n : (arrayLike) => {\n return Array.prototype.slice.call(arrayLike);\n };\n\nexport const arrayFind: <T>(array: readonly T[], predicate: (element: T, index: number, array: readonly T[]) => boolean) => T | undefined =\n typeof Array.prototype.find === 'function'\n ? (array, predicate) => array.find(predicate)\n : (array, predicate) => {\n for (let i = 0; i < array.length; i++) {\n if (predicate(array[i], i, array)) {\n return array[i];\n }\n }\n return undefined;\n };\n\nexport const arrayFindIndex: <T>(array: readonly T[], predicate: (element: T, index: number, array: readonly T[]) => boolean) => number =\n typeof Array.prototype.findIndex === 'function'\n ? (array, predicate) => array.findIndex(predicate)\n : (array, predicate) => {\n for (let i = 0; i < array.length; i++) {\n if (predicate(array[i], i, array)) {\n return i;\n }\n }\n return -1;\n };\n\nexport function arrayRemove<T>(array: T[], element: T): boolean {\n const index = array.indexOf(element);\n if (index < 0) {\n return false;\n }\n arrayRemoveAt(array, index);\n return true;\n}\n\nexport function arrayRemoveAt<T>(array: T[], index: number): void {\n array.splice(index, 1);\n}\n\nexport type Comparator<T, U = T> = (a: T, b: U) => number;\n\nexport function arrayMinByKey<T>(array: ReadonlyArray<T>, keySelector: (element: T) => number): T | undefined {\n return arrayMinBy(array, (first, second) => keySelector(first) - keySelector(second));\n}\n\nexport function arrayMaxByKey<T>(array: ReadonlyArray<T>, keySelector: (element: T) => number): T | undefined {\n return arrayMaxBy(array, (first, second) => keySelector(first) - keySelector(second));\n}\n\nexport function arrayMinBy<T>(array: ReadonlyArray<T>, comparator: Comparator<T>): T | undefined {\n if (array.length === 0) {\n return undefined;\n }\n return array.reduce((first, second) => (comparator(first, second) <= 0 ? first : second));\n}\n\nexport function arrayMaxBy<T>(array: ReadonlyArray<T>, comparator: Comparator<T>): T | undefined {\n const minComparator = (a: T, b: T) => comparator(b, a);\n return arrayMinBy(array, minComparator);\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\nexport const stringStartsWith: (string: string, search: string) => boolean =\n typeof String.prototype.startsWith === 'function'\n ? (string, search) => string.startsWith(search)\n : (string, search) => string.substring(0, search.length) === search;\n\nexport const localizeLanguageName: (languageCode: string) => string | undefined =\n typeof Intl !== 'undefined' && Intl.DisplayNames\n ? (languageCode) => {\n const displayNames = new Intl.DisplayNames([languageCode, 'en'], { type: 'language', fallback: 'none' });\n const localName = displayNames.of(languageCode);\n if (localName) {\n const locale = displayNames.resolvedOptions().locale;\n const [first] = localName;\n return first.toLocaleUpperCase(locale) + localName.slice(first.length);\n }\n }\n : (_languageCode) => undefined;\n\nexport function setTextContent(el: HTMLElement, text: string): void {\n if (typeof el.textContent === 'undefined') {\n el.innerText = text;\n } else {\n el.textContent = text;\n }\n}\n\nexport function containsComposedNode(rootNode: Node, childNode: Node): boolean {\n if (!rootNode || !childNode) {\n return false;\n }\n if (rootNode.contains(childNode)) {\n return true;\n }\n const childRoot = childNode.getRootNode();\n if ((childRoot as ShadowRoot).host) {\n return containsComposedNode(rootNode, (childRoot as ShadowRoot).host);\n }\n return false;\n}\n\nexport function toggleAttribute(element: Element, attribute: string, enabled: boolean): void {\n if (enabled) {\n element.setAttribute(attribute, '');\n } else {\n element.removeAttribute(attribute);\n }\n}\n\nexport function getChildren(element: Element): ArrayLike<Element> {\n if (element.shadowRoot) {\n return element.shadowRoot.children;\n }\n if (isHTMLSlotElement(element)) {\n const assignedNodes = element.assignedNodes();\n if (assignedNodes.length > 0) {\n return assignedNodes.filter(isElement);\n }\n }\n if (isHTMLElement(element)) {\n // Element.children does not exist for SVG elements in Internet Explorer.\n // Assume those won't contain any state receivers.\n return element.children;\n }\n return [];\n}\n\nexport function getSlottedElements(slot: HTMLSlotElement): Element[] {\n const elements: Element[] = [];\n for (const node of slot.assignedNodes({ flatten: true })) {\n if (isElement(node)) {\n elements.push(node);\n if (isSlotContainer(node)) {\n elements.push(...fromArrayLike(node.children));\n }\n }\n }\n return elements;\n}\n\nexport function getTvFocusChildren(element: Element): HTMLElement[] | undefined {\n if (!isHTMLElement(element)) {\n return;\n }\n if (getComputedStyle(element).display === 'none') {\n return;\n }\n if (element.getAttribute(Attribute.TV_FOCUS) !== null) {\n return getFocusableChildren(element);\n }\n\n const children = getChildren(element);\n for (let i = 0; i < children.length; i++) {\n const result = getTvFocusChildren(children[i]);\n if (result) {\n return result;\n }\n }\n}\n\nexport function getFocusableChildren(element: HTMLElement): HTMLElement[] {\n const result: HTMLElement[] = [];\n collectFocusableChildren(element, result);\n return result;\n}\n\nfunction collectFocusableChildren(element: Element, result: HTMLElement[]) {\n if (!isHTMLElement(element)) {\n return;\n }\n if (getComputedStyle(element).display === 'none') {\n return;\n }\n if (element.hasAttribute('tabindex') && Number(element.getAttribute('tabindex')) >= 0) {\n result.push(element);\n return;\n }\n switch (element.tagName.toLowerCase()) {\n case 'button':\n case 'input':\n case 'textarea':\n case 'select':\n case 'details': {\n result.push(element);\n break;\n }\n case 'a': {\n if ((element as HTMLAnchorElement).href) {\n result.push(element);\n }\n break;\n }\n default: {\n const children = getChildren(element);\n for (let i = 0; i < children.length; i++) {\n collectFocusableChildren(children[i], result);\n }\n break;\n }\n }\n}\n\nexport function getActiveElement(): Element | null {\n let activeElement = document.activeElement;\n if (activeElement == null) {\n return null;\n }\n let nextActiveElement: Element | null | undefined;\n while ((nextActiveElement = activeElement.shadowRoot?.activeElement) != null) {\n activeElement = nextActiveElement;\n }\n return activeElement;\n}\n\nexport function upgradeCustomElementIfNeeded(element: Element): Promise<unknown> | undefined {\n const elementName = element.nodeName.toLowerCase();\n if (elementName.indexOf('-') >= 0) {\n if (customElements.get(elementName)) {\n customElements.upgrade(element);\n } else {\n return customElements.whenDefined(elementName);\n }\n }\n return undefined;\n}\n","import { type Constructor, fromArrayLike, getChildren, isArray } from '../util/CommonUtils';\nimport type { ChromelessPlayer, THEOplayerError, VideoQuality } from 'theoplayer/chromeless';\nimport type { DeviceType } from '../util/DeviceType';\nimport type { StreamType } from '../util/StreamType';\n\n/** @internal */\nexport const StateReceiverProps = 'theoplayerUiObservedProperties' as const;\n\nexport interface StateReceiverPropertyMap {\n player: ChromelessPlayer | undefined;\n fullscreen: boolean;\n deviceType: DeviceType;\n streamType: StreamType;\n playbackRate: number;\n activeVideoQuality: VideoQuality | undefined;\n targetVideoQualities: VideoQuality[] | undefined;\n error: THEOplayerError | undefined;\n previewTime: number;\n}\n\n/**\n * A custom element that automatically receives selected state updates\n * from an ancestor {@link UIContainer | `<theoplayer-ui>`} element.\n *\n * Do not implement this interface directly, instead use {@link stateReceiver} or {@link StateReceiverMixin}.\n *\n * @see {@link stateReceiver}\n * @see {@link StateReceiverMixin}\n */\nexport interface StateReceiverElement extends Partial<StateReceiverPropertyMap>, Element {\n /**\n * The names of the properties this element will receive.\n */\n readonly [StateReceiverProps]: Array<keyof StateReceiverPropertyMap>;\n}\n\n/** @internal */\nexport function isStateReceiverElement(element: Element): element is StateReceiverElement {\n return StateReceiverProps in element && isArray((element as Partial<StateReceiverElement>)[StateReceiverProps]);\n}\n\n/**\n * Decorates a custom element class, such that it will automatically receive selected state updates\n * from an ancestor {@link UIContainer | `<theoplayer-ui>`} element.\n *\n * For each property name in `props`, the custom element *MUST* implement a corresponding property with a setter.\n * For example, if `props` equals `[\"player\", \"fullscreen\"]`, then the element must have writable `player` and `fullscreen`\n * properties.\n *\n * @param props - The names of the properties this element will receive.\n * @returns A class decorator.\n * @see {@link StateReceiverElement}\n */\nexport const stateReceiver =\n (props: Array<keyof StateReceiverPropertyMap>) =>\n (target: Constructor<Element>, _context: ClassDecoratorContext<Constructor<Element>>): void => {\n Object.defineProperty(target.prototype, StateReceiverProps, {\n value: props\n });\n };\n\n/**\n * A [mixin class](https://www.typescriptlang.org/docs/handbook/mixins.html) to apply on the superclass of a custom element,\n * such that it will automatically receive selected state updates from an ancestor {@link UIContainer | `<theoplayer-ui>`} element.\n *\n * For each property name in `props`, the custom element *MUST* implement a corresponding property with a setter.\n * For example, if `props` equals `[\"player\", \"fullscreen\"]`, then the element must have writable `player` and `fullscreen`\n * properties.\n *\n * @param base - The superclass for the new element class.\n * @param props - The names of the properties this element will receive.\n * @returns A class constructor that extends `base` and implements {@link StateReceiverElement}.\n * @see {@link StateReceiverElement}\n * @deprecated Use {@link stateReceiver} decorator instead.\n */\nexport function StateReceiverMixin<T extends Constructor<Element>>(\n base: T,\n props: Array<keyof StateReceiverPropertyMap>\n): T & Constructor<StateReceiverElement> {\n @stateReceiver(props)\n abstract class StateReceiver extends base implements StateReceiverElement {\n declare readonly [StateReceiverProps]: Array<keyof StateReceiverPropertyMap>;\n }\n\n return StateReceiver;\n}\n\n/** @internal */\nexport async function forEachStateReceiverElement(\n element: Element,\n playerElement: HTMLElement,\n callback: (receiver: StateReceiverElement) => void\n): Promise<void> {\n // Don't look inside the THEOplayer chromeless player\n if (playerElement.contains(element)) {\n return;\n }\n // Upgrade custom elements if needed\n if (element.nodeName.indexOf('-') >= 0 && !isStateReceiverElement(element)) {\n // web-components-polyfill does not correctly resolve `whenDefined()`\n // when called during an upgrade reaction such as `connectedCallback()`.\n // Workaround by waiting one microtask.\n await Promise.resolve();\n await customElements.whenDefined(element.nodeName.toLowerCase());\n customElements.upgrade(element);\n }\n // Check the element\n if (isStateReceiverElement(element)) {\n callback(element);\n }\n // Check all its children\n const children = getChildren(element);\n if (children.length > 0) {\n await Promise.all(fromArrayLike(children).map((child) => forEachStateReceiverElement(child, playerElement, callback)));\n }\n}\n","function isValidNumber(x: number): boolean {\n return !isNaN(x) && isFinite(x);\n}\n\nexport function formatTime(time: number, guide: number = 0, preferNegative?: boolean): string {\n // Handle negative values at the end\n let negative = time < 0 || (preferNegative && time === 0);\n time = Math.abs(time);\n\n const guideMinutes = Math.floor((guide / 60) % 60);\n const guideHours = Math.floor(guide / 3600);\n\n let timeParts: string[];\n if (!isValidNumber(time)) {\n timeParts = [guideHours > 0 ? '--' : '', '--', '--'];\n } else {\n const seconds = Math.floor(time % 60);\n const minutes = Math.floor((time / 60) % 60);\n const hours = Math.floor(time / 3600);\n // Check if we need to show hours.\n const showHours = hours > 0 || guideHours > 0;\n // If hours are showing, we may need to add a leading zero to minutes.\n // Always show at least one digit of minutes.\n const showMinutesLeadingZero = showHours || guideMinutes >= 0;\n timeParts = [\n showHours ? `${hours}` : '',\n showMinutesLeadingZero && minutes < 10 ? `0${minutes}` : `${minutes}`,\n seconds < 10 ? `0${seconds}` : `${seconds}`\n ];\n }\n\n const timePhrase = timeParts.filter((part) => part !== '').join(':');\n return `${negative ? '-' : ''}${timePhrase}`;\n}\n\nconst timeUnitLabels = [\n ['hour', 'hours'],\n ['minute', 'minutes'],\n ['second', 'seconds']\n] as const;\n\nexport function toTimeUnitPhrase(timeUnitValue: number, unitIndex: 0 | 1 | 2): string {\n const unitLabel = timeUnitLabels[unitIndex][timeUnitValue === 1 ? 0 : 1];\n return `${timeUnitValue} ${unitLabel}`;\n}\n\nexport function formatAsTimePhrase(time: number, preferNegative?: boolean): string {\n if (!isValidNumber(time)) return '';\n const negative = time < 0 || (preferNegative && time === 0);\n time = Math.abs(time);\n\n const seconds = Math.floor(time % 60);\n const minutes = Math.floor(time / 60) % 60;\n const hours = Math.floor(time / 3600);\n\n const timePhrase = [\n hours === 0 ? '' : toTimeUnitPhrase(hours, 0),\n minutes === 0 ? '' : toTimeUnitPhrase(minutes, 1),\n seconds === 0 && (hours > 0 || minutes > 0) ? '' : toTimeUnitPhrase(seconds, 2)\n ]\n .filter((part) => part !== '')\n .join(', ');\n\n // If the time was negative, assume it represents some remaining amount of time/\"count down\".\n const negativeSuffix = negative ? ' remaining' : '';\n\n return `${timePhrase}${negativeSuffix}`;\n}\n","// https://github.com/webmodules/custom-event/blob/master/index.js\n\n// Modern browsers\nfunction supportsNativeEvent() {\n try {\n const event = new Event('change');\n return 'change' === event.type;\n } catch (e) {}\n return false;\n}\n\nfunction supportsNativeCustomEvent() {\n try {\n const event = new CustomEvent('cat', { detail: { foo: 'bar' } });\n return 'cat' === event.type && 'bar' === event.detail.foo;\n } catch (e) {}\n return false;\n}\n\nfunction createWithNativeEvent(type: string, eventInitDict?: EventInit): Event {\n return new Event(type, eventInitDict);\n}\n\nfunction createWithNativeCustomEvent(type: string, eventInitDict?: CustomEventInit): CustomEvent {\n return new CustomEvent(type, eventInitDict);\n}\n\n// IE >= 9\nfunction createEventWithCreateEvent(type: string, eventInitDict?: EventInit): Event {\n const e = document.createEvent('Event');\n e.initEvent(type, eventInitDict?.bubbles || false, eventInitDict?.cancelable || false);\n return e;\n}\n\nfunction createCustomEventWithCreateEvent(type: string, eventInitDict?: CustomEventInit): CustomEvent {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, eventInitDict?.bubbles || false, eventInitDict?.cancelable || false, eventInitDict?.detail);\n return e;\n}\n\nexport type EventFactory = <TType extends string = string>(type: TType, eventInitDict?: EventInit) => Event & { readonly type: TType };\n\nexport type CustomEventFactory = <TType extends string = string, TDetail = any>(\n type: TType,\n eventInitDict?: CustomEventInit<TDetail>\n) => CustomEvent<TDetail> & { readonly type: TType };\n\n/**\n * Cross-browser `Event` constructor.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/Event/Event\n */\nexport const createEvent: EventFactory = (supportsNativeEvent() ? createWithNativeEvent : createEventWithCreateEvent) as EventFactory;\n\n/**\n * Cross-browser `CustomEvent` constructor.\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent\n */\nexport const createCustomEvent: CustomEventFactory = (\n supportsNativeCustomEvent() ? createWithNativeCustomEvent : createCustomEventWithCreateEvent\n) as CustomEventFactory;\n","export class Rectangle implements DOMRect {\n x: number;\n y: number;\n width: number;\n height: number;\n\n constructor(x: number, y: number, width: number, height: number) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n\n get left(): number {\n return this.x;\n }\n\n set left(value: number) {\n this.x = value;\n }\n\n get right(): number {\n return this.x + this.width;\n }\n\n set right(value: number) {\n this.x = value - this.width;\n }\n\n get top(): number {\n return this.y;\n }\n\n set top(value: number) {\n this.y = value;\n }\n\n get bottom(): number {\n return this.y + this.height;\n }\n\n set bottom(value: number) {\n this.y = value - this.height;\n }\n\n static fromRect(rect: Partial<DOMRectReadOnly>): Rectangle {\n // Note: Internet Explorer doesn't support DOMRect.x and .y, only .left and .top\n return new Rectangle(rect.left ?? rect.x ?? 0, rect.top ?? rect.y ?? 0, rect.width ?? 0, rect.height ?? 0);\n }\n\n overlaps(other: DOMRectReadOnly): boolean {\n return this.x < other.right && this.right > other.x && this.y < other.bottom && this.bottom > other.y;\n }\n\n contains(other: DOMRectReadOnly): boolean {\n return this.x <= other.x && other.right <= this.right && this.y <= other.y && other.bottom <= this.bottom;\n }\n\n union(other: DOMRectReadOnly): Rectangle {\n const x = Math.min(this.x, other.x);\n const y = Math.min(this.y, other.y);\n const width = Math.max(this.right, other.right) - x;\n const height = Math.max(this.bottom, other.bottom) - y;\n return new Rectangle(x, y, width, height);\n }\n\n snapToPixels(): Rectangle {\n return new Rectangle(Math.round(this.x), Math.round(this.y), Math.round(this.width), Math.round(this.height));\n }\n\n clone(): Rectangle {\n return new Rectangle(this.x, this.y, this.width, this.height);\n }\n\n toJSON(): any {\n return {\n x: this.x,\n y: this.y,\n width: this.width,\n height: this.height,\n left: this.left,\n right: this.right,\n top: this.top,\n bottom: this.bottom\n };\n }\n}\n","import { type ArrowKeyCode, KeyCode } from './KeyCode';\nimport { arrayMinByKey, getActiveElement, isHTMLElement } from './CommonUtils';\nimport { Rectangle } from './GeometryUtils';\n\nexport function getFocusedChild(): HTMLElement | null {\n const focusedChild = getActiveElement();\n if (!focusedChild || focusedChild === document.body || !isHTMLElement(focusedChild)) {\n return null;\n }\n return focusedChild;\n}\n\nexport function navigateByArrowKey(container: HTMLElement, children: HTMLElement[], key: ArrowKeyCode): boolean {\n const focusedChild = getFocusedChild();\n if (focusedChild === null) {\n return false;\n }\n const containerRect = Rectangle.fromRect(container.getBoundingClientRect()).snapToPixels();\n const focusedRect = Rectangle.fromRect(focusedChild.getBoundingClientRect()).snapToPixels();\n const childrenWithRects = children\n .map(\n (child): ChildWithRect => ({\n child,\n rect: Rectangle.fromRect(child.getBoundingClientRect()).snapToPixels()\n })\n )\n .filter((x) => x.rect.width > 0 && x.rect.height > 0);\n // Find focusable children next to the focused child along the key's direction\n let candidates: ChildWithRect[];\n if (key === KeyCode.LEFT || key === KeyCode.RIGHT) {\n const bounds = focusedRect.clone();\n if (key === KeyCode.LEFT) {\n bounds.left = containerRect.left;\n bounds.width = focusedRect.left - containerRect.left;\n } else {\n bounds.left = focusedRect.right;\n bounds.width = containerRect.right - focusedRect.right;\n }\n candidates = childrenWithRects.filter((x) => bounds.overlaps(x.rect));\n if (candidates.length === 0) {\n bounds.top = containerRect.top;\n bounds.height = containerRect.height;\n candidates = childrenWithRects.filter((x) => bounds.overlaps(x.rect));\n }\n } else {\n const bounds = focusedRect.clone();\n if (key === KeyCode.UP) {\n bounds.top = containerRect.top;\n bounds.height = focusedRect.top - containerRect.top;\n } else {\n bounds.top = focusedRect.bottom;\n bounds.height = containerRect.bottom - focusedRect.bottom;\n }\n candidates = childrenWithRects.filter((x) => bounds.overlaps(x.rect));\n if (candidates.length === 0) {\n bounds.left = containerRect.left;\n bounds.width = containerRect.width;\n candidates = childrenWithRects.filter((x) => bounds.overlaps(x.rect));\n }\n }\n // Find the candidate closest to the currently focused child\n const closestCandidate = arrayMinByKey(candidates, (x) => manhattanDistanceBetweenRects(x.rect, focusedRect));\n if (closestCandidate === undefined) {\n return false;\n }\n // Focus it\n closestCandidate.child.focus();\n return true;\n}\n\ninterface ChildWithRect {\n child: HTMLElement;\n rect: DOMRectReadOnly;\n}\n\nfunction manhattanDistanceBetweenRects(a: DOMRectReadOnly, b: DOMRectReadOnly): number {\n let distance = 0;\n if (a.right < b.left) {\n distance += b.left - a.right;\n } else if (b.right < a.left) {\n distance += a.left - b.right;\n }\n if (a.bottom < b.top) {\n distance += b.top - a.bottom;\n } else if (b.bottom < a.top) {\n distance += a.top - b.bottom;\n }\n return distance;\n}\n","export const CLOSE_MENU_EVENT = 'theoplayermenuclose' as const;\n\nexport interface CloseMenuEvent extends CustomEvent<OpenMenuEventDetail> {\n type: typeof CLOSE_MENU_EVENT;\n}\n\nexport interface OpenMenuEventDetail {\n menu: string;\n}\n","export const MENU_CHANGE_EVENT = 'theoplayermenuchange' as const;\n\nexport interface MenuChangeEvent extends CustomEvent {\n type: typeof MENU_CHANGE_EVENT;\n}\n","export const TOGGLE_MENU_EVENT = 'theoplayermenutoggle' as const;\n\nexport interface ToggleMenuEvent extends CustomEvent<OpenMenuEventDetail> {\n type: typeof TOGGLE_MENU_EVENT;\n}\n\nexport interface OpenMenuEventDetail {\n menu: string;\n}\n","import type { MediaTrack, Quality, TextTrack, VideoQuality } from 'theoplayer/chromeless';\n\nexport function isSubtitleTrack(track: TextTrack): boolean {\n return track.kind === 'subtitles' || track.kind === 'captions';\n}\n\nexport function isNonForcedSubtitleTrack(track: TextTrack): boolean {\n return isSubtitleTrack(track) && !track.forced;\n}\n\nexport function getTargetQualities(videoTrack: MediaTrack | undefined): Quality[] | undefined {\n let targetQualities = videoTrack?.targetQuality;\n if (targetQualities !== undefined && !Array.isArray(targetQualities)) {\n targetQualities = [targetQualities];\n }\n return targetQualities;\n}\n\nexport function formatQualityLabel(quality: VideoQuality | undefined): string | undefined {\n if (!quality) {\n return undefined;\n }\n if (quality.label && quality.label !== '') {\n return quality.label;\n }\n if (quality.height) {\n return `${quality.height}p`;\n }\n if (quality.bandwidth) {\n return formatBandwidth(quality);\n }\n return undefined;\n}\n\nfunction formatBandwidth(quality: VideoQuality): string | undefined {\n if (!quality.bandwidth) {\n return undefined;\n } else if (quality.bandwidth > 1e7) {\n return `${(quality.bandwidth / 1e6).toFixed(0)}Mbps`;\n } else if (quality.bandwidth > 1e6) {\n return `${(quality.bandwidth / 1e6).toFixed(1)}Mbps`;\n } else {\n return `${(quality.bandwidth / 1e3).toFixed(0)}kbps`;\n }\n}\n","import { stringStartsWith } from './CommonUtils';\n\nexport interface RgbaColor {\n r_: number; // 0..255\n g_: number; // 0..255\n b_: number; // 0..255\n a_: number; // 0..1\n}\n\nfunction parseHexColor(hex: string): RgbaColor | null {\n const m = hex.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i);\n return m\n ? {\n r_: parseInt(m[1], 16),\n g_: parseInt(m[2], 16),\n b_: parseInt(m[3], 16),\n a_: 1\n }\n : null;\n}\n\nfunction parseRgbaColor(rgbaString: string): RgbaColor | null {\n const m = rgbaString.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*([0-9.]+))?\\)$/i);\n return m\n ? {\n r_: parseInt(m[1], 10),\n g_: parseInt(m[2], 10),\n b_: parseInt(m[3], 10),\n a_: m[4] ? parseFloat(m[4]) : 1\n }\n : null;\n}\n\nexport function parseColor(colorString: string | null | undefined): RgbaColor | null {\n if (!colorString) {\n return null;\n } else if (stringStartsWith(colorString, 'rgb')) {\n return parseRgbaColor(colorString);\n } else if (stringStartsWith(colorString, '#')) {\n return parseHexColor(colorString);\n } else {\n return null;\n }\n}\n\nexport function toRgba(color: RgbaColor): string {\n return `rgba(${color.r_},${color.g_},${color.b_},${color.a_})`;\n}\n\nexport function toRgb(color: RgbaColor): string {\n return `rgb(${color.r_},${color.g_},${color.b_})`;\n}\n\nexport function colorWithAlpha(color: RgbaColor, alpha: number): RgbaColor {\n return {\n r_: color.r_,\n g_: color.g_,\n b_: color.b_,\n a_: alpha\n };\n}\n\nexport function rgbEquals(left: RgbaColor, right: RgbaColor): boolean {\n return left.r_ === right.r_ && left.g_ === right.g_ && left.b_ === right.b_;\n}\n\nexport const COLOR_WHITE: RgbaColor = parseColor('#ffffff')!;\nexport const COLOR_BLACK: RgbaColor = parseColor('#000000')!;\n","import type { EdgeStyle } from 'theoplayer/chromeless';\n\nexport const knownColors: ReadonlyArray<[string, string]> = [\n ['White', 'rgb(255,255,255)'],\n ['Yellow', 'rgb(255,255,0)'],\n ['Green', 'rgb(0,255,0)'],\n ['Cyan', 'rgb(0,255,255)'],\n ['Blue', 'rgb(0,0,255)'],\n ['Magenta', 'rgb(255,0,255)'],\n ['Red', 'rgb(255,0,0)'],\n ['Black', 'rgb(0,0,0)']\n];\n\nexport const knownFontFamilies: ReadonlyArray<[string, string]> = [\n ['Monospace Serif', '\"Courier New\", Courier, \"Nimbus Mono L\", \"Cutive Mono\", monospace'],\n ['Proportional Serif', '\"Times New Roman\", Times, Georgia, Cambria, \"PT Serif Caption\", serif'],\n ['Monospace Sans', '\"Deja Vu Sans Mono\", \"Lucida Console\", Monaco, Consolas, \"PT Mono\", monospace'],\n ['Proportional Sans', 'Arial, Helvetica, Verdana, \"PT Sans Caption\", sans-serif']\n];\n\nexport const knownEdgeStyles: ReadonlyArray<[string, EdgeStyle]> = [\n ['None', 'none'],\n ['Drop shadow', 'dropshadow'],\n ['Raised', 'raised'],\n ['Depressed', 'depressed'],\n ['Uniform', 'uniform']\n];\n","export const ENTER_FULLSCREEN_EVENT = 'theoplayerfullscreenenter' as const;\n\nexport interface EnterFullscreenEvent extends CustomEvent {\n type: typeof ENTER_FULLSCREEN_EVENT;\n}\n","export const EXIT_FULLSCREEN_EVENT = 'theoplayerfullscreenexit' as const;\n\nexport interface ExitFullscreenEvent extends CustomEvent {\n type: typeof EXIT_FULLSCREEN_EVENT;\n}\n","/**\n * @license\n * Copyright (c) 2020 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\nfunction setProperties(element, properties) {\n const style = element.style;\n for (const [propertyName, value] of Object.entries(properties)) {\n style.setProperty(propertyName, value);\n }\n}\n/**\n * True if the ShadyCSS scoped style polyfill is loaded and active.\n *\n * Note that the other functions in this module are safe to call even if the\n * polyfills are not loaded.\n */\nfunction scopedStylesArePolyfilled() {\n return (window.ShadyCSS !== undefined && window.ShadyCSS.nativeShadow === false);\n}\n/**\n * True if the ShadyCSS custom properties polyfill is loaded and active.\n *\n * Note that the other functions in this module are safe to call even if the\n * polyfills are not loaded.\n */\nfunction customPropertiesArePolyfilled() {\n return window.ShadyCSS !== undefined && window.ShadyCSS.nativeCss === false;\n}\n/**\n * Prepare the given custom element template for use with the ShadyCSS style\n * scoping polyfill. You only need to do this once per template.\n *\n * If ShadyCSS is not active, then this function does nothing.\n *\n * If ShadyCSS is active, then after styleElement is called on the first\n * instance of this element, <style> tags within this template will be moved to\n * the <head> and re-written to use globally scoped rules that emulate scoped\n * behavior.\n *\n * Note that LitElement and Polymer Library users do not typically need to call\n * this function, because it is called automatically.\n */\nexport function prepareTemplate(template, customElementName) {\n if (scopedStylesArePolyfilled()) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n window.ShadyCSS.prepareTemplate(template, customElementName);\n }\n}\n/**\n * Activate scoped styles for the given element instance. This function should\n * typically be called inside connectedCallback. The template of this element\n * class must already have been registered with prepareTemplate.\n *\n * If ShadyCSS is not active, then this function does nothing.\n *\n * Note that LitElement and Polymer Library users do not typically need to call\n * this function, because it is called automatically.\n */\nexport function styleElement(element) {\n if (scopedStylesArePolyfilled()) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n window.ShadyCSS.styleElement(element);\n }\n}\n/**\n * Propagate CSS custom properties on this element to all descendant shadow\n * roots, and optionally set new ones.\n *\n * Uses ShadyCSS custom property emulation if the polyfill is active, otherwise\n * calls native style.setProperty.\n */\nexport function styleSubtree(element, properties) {\n if (customPropertiesArePolyfilled()) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n window.ShadyCSS.styleSubtree(element, properties);\n }\n else if (properties != null) {\n setProperties(element, properties);\n }\n}\n//# sourceMappingURL=interface.js.map","import { arrayFindIndex } from './CommonUtils';\n\nexport type ColorStop = [color: string, percent: number];\n\nexport class ColorStops {\n private _stops: ColorStop[] = [['transparent', 100]];\n\n constructor() {}\n\n add(color: string, from: number, to: number): void {\n from = Math.max(from, 0);\n to = Math.min(to, 100);\n if (from >= to) {\n return;\n }\n const previousIndex = arrayFindIndex(this._stops, ([, percent]) => from <= percent);\n if (previousIndex < 0) {\n return;\n }\n const [previousColor, previousPercent] = this._stops[previousIndex];\n const newStops: ColorStop[] = [];\n if (from > 0) {\n newStops.push([previousColor, from]);\n }\n newStops.push([color, to]);\n if (to < previousPercent) {\n // New stop is fully contained within previous stop\n // Split previous stop\n newStops.push([previousColor, previousPercent]);\n this._stops.splice(previousIndex, 1, ...newStops);\n } else {\n // New stop extends beyond previous stop\n // Remove overlapping stops\n let nextIndex = previousIndex + 1;\n while (nextIndex < this._stops.length) {\n if (to < this._stops[nextIndex][1]) {\n break;\n }\n nextIndex++;\n }\n this._stops.splice(previousIndex, nextIndex - previousIndex, ...newStops);\n }\n }\n\n toGradientStops(): string {\n const gradientStops: string[] = [];\n let prevPercent = 0;\n for (const [color, percent] of this._stops) {\n if (percent < prevPercent) continue;\n gradientStops.push(`${color} ${prevPercent}%`);\n gradientStops.push(`${color} ${percent}%`);\n prevPercent = percent;\n }\n return gradientStops.join(', ');\n }\n}\n","export const PREVIEW_TIME_CHANGE_EVENT = 'theoplayerpreviewtimechange' as const;\n\nexport interface PreviewTimeChangeEvent extends CustomEvent<PreviewTimeChangeEventDetail> {\n type: typeof PREVIEW_TIME_CHANGE_EVENT;\n}\n\nexport interface PreviewTimeChangeEventDetail {\n previewTime: number;\n}\n","import type { Ad } from 'theoplayer/chromeless';\n\nexport function isLinearAd(ad: Ad): boolean {\n return ad.type === 'linear';\n}\n","import { Button, type ButtonOptions } from './Button';\nimport { property, state } from 'lit/decorators.js';\nimport { Attribute } from '../util/Attribute';\nimport type { CastState, VendorCast } from 'theoplayer/chromeless';\n\n/**\n * A generic button to start and stop casting.\n *\n * For a concrete implementation, see {@link ChromecastButton} and {@link AirPlayButton}.\n * @group Components\n */\nexport class CastButton extends Button {\n private _castApi: VendorCast | undefined;\n private _castState: CastState = 'unavailable';\n\n constructor(options?: ButtonOptions) {\n super(options);\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this._updateCastState();\n }\n\n /**\n * The cast API for this cast button.\n */\n get castApi(): VendorCast | undefined {\n return this._castApi;\n }\n\n @state()\n set castApi(castApi: VendorCast | undefined) {\n if (this._castApi !== undefined) {\n this._castApi.removeEventListener('statechange', this._updateCastState);\n }\n this._castApi = castApi;\n this._updateCastState();\n if (this._castApi !== undefined) {\n this._castApi.addEventListener('statechange', this._updateCastState);\n }\n }\n\n /**\n * The current cast state.\n */\n get castState(): CastState {\n return this._castState;\n }\n\n @property({ reflect: true, state: true, type: String, attribute: Attribute.CAST_STATE })\n private set castState(castState: CastState) {\n this._castState = castState;\n }\n\n protected override handleClick(): void {\n if (this._castApi) {\n this._updateCastState();\n const state = this.castState;\n if (state === 'available') {\n this._castApi.start();\n } else if (state === 'connecting' || state === 'connected') {\n this._castApi.stop();\n }\n }\n }\n\n private readonly _updateCastState = (): void => {\n this.castState = this._castApi ? this._castApi.state : 'unavailable';\n };\n}\n","import { html } from 'lit';\n\nexport default (id: number) =>\n html`<span part=\"icon\">\n <svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 48 48\" height=\"24\" width=\"24\">\n <defs>\n <clipPath id=\"theoplayer-chromecast-rings-mask-${id}\">\n <path d=\"M0-36h44V0H0z\" />\n </clipPath>\n </defs>\n <path class=\"theoplayer-chromecast-outer\" d=\"M2 10a4 4 0 0 1 4-4h36a4 4 0 0 1 4 4v28a4 4 0 0 1-4 4H28v-4h14V10H6v6H2z\" />\n <path class=\"theoplayer-chromecast-inner\" d=\"M10 14h28v20H26.74A26 26 0 0 0 10 17.26z\" />\n <g\n class=\"theoplayer-chromecast-rings\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n transform=\"translate(2 42)\"\n clip-path=\"url(#theoplayer-chromecast-rings-mask-${id})\"\n >\n <circle stroke=\"none\" cx=\"0\" cy=\"0\" r=\"30\" />\n <circle class=\"theoplayer-chromecast-ring theoplayer-chromecast-ring1\" stroke-width=\"6\" cx=\"0\" cy=\"0\" r=\"3\" />\n <circle class=\"theoplayer-chromecast-ring theoplayer-chromecast-ring2\" cx=\"0\" cy=\"0\" r=\"12\" />\n <circle class=\"theoplayer-chromecast-ring theoplayer-chromecast-ring3\" cx=\"0\" cy=\"0\" r=\"20\" />\n <path class=\"theoplayer-chromecast-ring theoplayer-chromecast-ring4\" stroke-linecap=\"round\" d=\"M0-20A20 20 0 0 1 20 0\" />\n </g>\n </svg>\n </span>`;\n","import { html } from 'lit';\n\nexport default html`<span part=\"icon\">\n <svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" height=\"24\" width=\"24\">\n <path class=\"theoplayer-airplay-inner\" d=\"M5 7h14v8H5z\" />\n <path d=\"M6 22h12l-6-6zM21 3H3c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h4v-2H3V5h18v12h-4v2h4c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\" />\n </svg>\n</span>`;\n","import { html } from 'lit';\n\nexport default html`<div part=\"icon\">\n <slot name=\"icon\">\n <div aria-hidden=\"true\" class=\"theoplayer-loading-progress\">\n <div class=\"theoplayer-loading-spinner\">\n <div class=\"theoplayer-loading-circle-clipper theoplayer-loading-circle-left\">\n <svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"24\" cy=\"24\" r=\"18\" fill=\"none\" stroke-dasharray=\"113.097\" stroke-dashoffset=\"56.549\" stroke-width=\"4\" />\n </svg>\n </div>\n <div class=\"theoplayer-loading-gap-patch\">\n <svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"24\" cy=\"24\" r=\"18\" fill=\"none\" stroke-dasharray=\"113.097\" stroke-dashoffset=\"56.549\" stroke-width=\"3.2\" />\n </svg>\n </div>\n <div class=\"theoplayer-loading-circle-clipper theoplayer-loading-circle-right\">\n <svg viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"24\" cy=\"24\" r=\"18\" fill=\"none\" stroke-dasharray=\"113.097\" stroke-dashoffset=\"56.549\" stroke-width=\"4\" />\n </svg>\n </div>\n </div>\n </div>\n </slot>\n</div>`;\n","import type { DefaultUI } from '../DefaultUI';\n\n/**\n * An extension for the default UI.\n *\n * This is called whenever a `<theoplayer-default-ui>` element is created.\n * The extension can then choose to modify this element, for example by appending extra elements\n * or attaching extra event listeners.\n *\n * @example\n * The following extension adds an extra button to the bottom control bar of every default UI:\n * ```javascript\n * THEOplayerUI.registerExtension((ui) => {\n * // Create a new button\n * const button = new THEOplayerUI.Button();\n * button.innerHTML = \"Click me!\";\n * button.addEventListener(\"click\", () => alert(\"I was clicked!\"));\n * // Place it in the bottom control bar\n * button.slot = \"bottom-control-bar\";\n * ui.appendChild(button);\n * });\n * ```\n * See the documentation of `<theoplayer-default-ui>` for more information about the available slots\n * in which you can add extra elements.\n */\nexport type Extension = (ui: DefaultUI) => void;\n\nconst extensionRegistry: Extension[] = [];\n\n/**\n * Registers an extension for the default UI.\n *\n * @param extension The extension.\n * @see {@link Extension}\n */\nexport function registerExtension(extension: Extension): void {\n extensionRegistry.push(extension);\n}\n\nexport function applyExtensions(ui: DefaultUI): void {\n for (const extension of extensionRegistry) {\n extension(ui);\n }\n}\n","export interface FullscreenAPIMap {\n requestFullscreen_: 'requestFullscreen';\n exitFullscreen_: 'exitFullscreen';\n fullscreenElement_: 'fullscreenElement';\n fullscreenEnabled_: 'fullscreenEnabled';\n fullscreenchange_: 'fullscreenchange';\n fullscreenerror_: 'fullscreenerror';\n}\n\nexport const fullscreenAPI: FullscreenAPIMap | undefined = (() => {\n if (typeof document === 'undefined') {\n return;\n }\n\n // browser API methods\n // map approach from Screenful.js - https://github.com/sindresorhus/screenfull.js\n const apiMap: string[][] = [\n // Spec: https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html\n ['requestFullscreen', 'exitFullscreen', 'fullscreenElement', 'fullscreenEnabled', 'fullscreenchange', 'fullscreenerror'],\n // WebKit\n [\n 'webkitRequestFullscreen',\n 'webkitExitFullscreen',\n 'webkitFullscreenElement',\n 'webkitFullscreenEnabled',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror'\n ],\n // Old WebKit (Safari 5.1)\n [\n 'webkitRequestFullScreen',\n 'webkitCancelFullScreen',\n 'webkitCurrentFullScreenElement',\n 'webkitCancelFullScreen',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror'\n ],\n // Mozilla\n ['mozRequestFullScreen', 'mozCancelFullScreen', 'mozFullScreenElement', 'mozFullScreenEnabled', 'mozfullscreenchange', 'mozfullscreenerror'],\n // Microsoft\n ['msRequestFullscreen', 'msExitFullscreen', 'msFullscreenElement', 'msFullscreenEnabled', 'MSFullscreenChange', 'MSFullscreenError']\n ];\n\n for (let browserMap of apiMap) {\n // check for exitFullscreen function\n if (browserMap[1] in document) {\n return {\n requestFullscreen_: browserMap[0],\n exitFullscreen_: browserMap[1],\n fullscreenElement_: browserMap[2],\n fullscreenEnabled_: browserMap[3],\n fullscreenchange_: browserMap[4],\n fullscreenerror_: browserMap[5]\n } as FullscreenAPIMap;\n }\n }\n\n return undefined;\n})();\n","/**\n * User-Agent Client Hints\n * https://wicg.github.io/ua-client-hints/\n */\ninterface NavigatorUA extends Navigator {\n readonly userAgentData: NavigatorUAData;\n}\n\ninterface NavigatorUAData {\n readonly mobile: boolean;\n}\n\nexport function isMobile(): boolean {\n if (typeof navigator !== 'object') {\n return false;\n }\n if ((navigator as NavigatorUA).userAgentData) {\n return (navigator as NavigatorUA).userAgentData.mobile;\n }\n const userAgent = navigator.userAgent;\n if (!userAgent) {\n return false;\n }\n return /Android|iPhone|iPad|iPod|Mobile Safari|Windows Phone/i.test(userAgent);\n}\n\nexport function isTv(): boolean {\n if (typeof navigator !== 'object') {\n return false;\n }\n const userAgent = navigator.userAgent;\n if (!userAgent) {\n return false;\n }\n return /\\b(tv|smart-tv|smarttv|appletv|crkey|googletv|hbbtv|pov_tv|roku|viera|nettv|philipstv)\\b/i.test(userAgent);\n}\n","export const USER_IDLE_CHANGE_EVENT = 'theoplayeruseridlechange' as const;\n\nexport interface UserIdleChangeEvent extends CustomEvent {\n type: typeof USER_IDLE_CHANGE_EVENT;\n}\n","export const READY_EVENT = 'theoplayerready' as const;\n\nexport interface ReadyEvent extends CustomEvent<undefined> {\n type: typeof READY_EVENT;\n}\n","import globalCss from './Global.css';\nimport { setTextContent } from './util/CommonUtils';\nimport { supportsAdoptingStyleSheets } from 'lit';\n\nconst GLOBAL_STYLE_ID = 'theoplayer-ui-global-styles';\n\nlet globalStylesAdded = false;\n\nexport function addGlobalStyles() {\n if (globalStylesAdded) {\n return;\n }\n if (supportsAdoptingStyleSheets) {\n document.adoptedStyleSheets.push(globalCss.styleSheet!);\n } else if (!document.getElementById(GLOBAL_STYLE_ID)) {\n const styleEl = document.createElement('style');\n styleEl.id = GLOBAL_STYLE_ID;\n // See https://lit.dev/docs/api/LitElement/#LitElement.styles\n const nonce = (window as any)['litNonce'];\n if (nonce !== undefined) {\n styleEl.setAttribute('nonce', nonce);\n }\n setTextContent(styleEl, globalCss.cssText);\n document.head.appendChild(styleEl);\n }\n globalStylesAdded = true;\n}\n","import type { StreamType } from '../util/StreamType';\n\nexport const STREAM_TYPE_CHANGE_EVENT = 'theoplayerstreamtypechange' as const;\n\nexport interface StreamTypeChangeEvent extends CustomEvent<StreamTypeChangeEventDetail> {\n type: typeof STREAM_TYPE_CHANGE_EVENT;\n}\n\nexport interface StreamTypeChangeEventDetail {\n streamType: StreamType;\n}\n","/**\n * The delay before we should start handling clicks\n * after the user becomes active again (in milliseconds).\n *\n * When the user is idle and then touches the player, that first touch\n * should not trigger any accidental clicks on UI controls. Therefore,\n * we will keep all UI controls inactive for a little bit longer\n * after that first touch, until this delay has passed.\n */\nexport const ACCIDENTAL_CLICK_DELAY = 50;\n","import { version as packageVersion } from '../package.json';\n\n/**\n * The version of Open Video UI for Web.\n */\nexport const version: string = packageVersion;\n"],"names":["_apply_decs_2203_r","targetClass","memberDecs","classDecs","parentClass","createAddInitializerMethod","initializers","decoratorFinishedRef","initializer","assertNotFinished","fnName","v","Error","assertCallable","push","memberDec","dec","name","desc","kind","isStatic","isPrivate","metadata","value","kindStr","get","set","ctx","static","private","addInitializer","call","originalGet","target","arguments","length","originalSet","access","has","newValue","fn","hint","TypeError","assertValidReturnValue","type","undefined","init","pushInitializers","ret","instance","i","defineMetadata","Class","Object","defineProperty","Symbol","for","configurable","enumerable","parentMetadata","create","e","applyMemberDecs","decInfos","existingProtoNonFields","Map","existingStaticNonFields","protoInitializers","staticInitializers","base","decInfo","Array","isArray","prototype","existingNonFields","existingKind","applyMemberDec","newInit","decs","getOwnPropertyDescriptor","ownInitializers","originalInitializer","args","c","applyClassDecs","newClass","nextNewClass","_identity","x","Attribute","KeyCode","ExtensionSlot","LitElement","href","_init_target","paused","ended","Button","_init_ended","volumeLevel","_init_volumeLevel","seekOffset","_init_seekOffset","remaining","remainingWhenLive","showDuration","streamType","_currentTime","_duration","_endTime","_init_remaining","_init_remainingWhenLive","_init_showDuration","_init_streamType","_init__currentTime","_init__duration","_init__endTime","duration","_init_duration","_init_value","_init_deviceType","deviceType","closeOnInput","_init_closeOnInput","_menuSlot","_init__menuSlot","_init__ariaControls","_ariaControls","RadioButton","_init__trackLabel","_trackLabel","_tracksList","showOffButton","_init__tracksList","_init_showOffButton","MenuGroup","_hasAudioTracks","_hasSubtitles","_init__hasSubtitles","MenuButton","Menu","_init_playbackRate","playbackRate","activeVideoQuality","_init_targetVideoQualities","targetVideoQualities","_init__qualityLabel","_qualityLabel","_track","_init__track","fullscreen","_init_fullscreen","_pointerWidth","step","ariaLive","_init__pointerWidth","_init_step","_init_ariaLive","_thumbnailVisible","_init__thumbnailVisible","previewTime","_previewRailTransform","Range","_init__previewRailTransform","error","CastButton","_receiverName","_init__receiverName","loading","_init_loading","live","_init_paused","_init_live","_text","_init__text","_maxRemainingDuration","_init__maxRemainingDuration","LinkButton","_showCountdown","_timeToSkip","_init__timeToSkip","_hasFirstPlay","_isPlayingAd","_hasError","_isFullWindow","_init__hasFirstPlay","_init__isFullWindow","_timeRangeInert","titleSlotNodes","fluid","muted","autoplay","_hasTitle","_init_fluid","_init_muted","_init_autoplay","_init__hasTitle","_inBadNetworkMode","_init__inBadNetworkMode","AbstractQualitySelector","_announcementType","_announcementMessage","_hidePlayButton","_hideErrorDisplay","DefaultUI","_init__announcementType","_init__hideErrorDisplay","customElement","ControlBar","styles","controlBarCss","shadowRootOptions","delegatesFocus","_initClass","render","html","isArrowKey","keyCode","isBackKey","isActivationKey","buttonTemplate","button","extraCss","_class_private_field_loose_base","receiver","privateKey","hasOwnProperty","property","reflect","Boolean","attribute","DISABLED","buttonCss","connectedCallback","hasAttribute","setAttribute","ARIA_LIVE","_disabled","_enable","disconnectedCallback","removeEventListener","_onClick","_onKeyDown","_onKeyUp","disabled","_disable","addEventListener","removeAttribute","blur","_template","templateContent","handleClick","options","metaKey","altKey","template","performUpdate","id","_class_private_field_loose_key","linkButtonTemplate","_dec2","state","linkButtonCss","ref","_linkRef","renderLinkContent","createRef","event","SPACE","_this__linkRef_value","preventDefault","click","noOp","isElement","node","nodeType","Node","ELEMENT_NODE","isHTMLElement","HTMLElement","SlotContainer","slotContainerCss","arg","toString","fromArrayLike","from","arrayLike","slice","arrayFind","find","array","predicate","arrayFindIndex","findIndex","stringStartsWith","String","startsWith","string","search","substring","localizeLanguageName","Intl","DisplayNames","languageCode","displayNames","fallback","localName","of","locale","resolvedOptions","first","toLocaleUpperCase","_languageCode","toggleAttribute","element","enabled","getChildren","shadowRoot","children","toLowerCase","assignedNodes","filter","getSlottedElements","slot","elements","flatten","isSlotContainer","nodeName","getFocusableChildren","result","collectFocusableChildren","getComputedStyle","display","Number","getAttribute","tagName","upgradeCustomElementIfNeeded","elementName","indexOf","customElements","whenDefined","upgrade","StateReceiverProps","isStateReceiverElement","stateReceiver","props","_context","StateReceiverMixin","StateReceiver","forEachStateReceiverElement","playerElement","callback","contains","Promise","resolve","all","map","child","PLAYER_EVENTS","PAUSED","_dec3","ENDED","PlayButton","playButtonCss","_updateFromPlayer","_updateAriaLabel","player","_player","_onPlay","_onPause","_updateEnded","_this__player","_ref","source","play","pause","attributeChangedCallback","attrName","oldValue","observedAttributes","label","ARIA_LABEL","unsafeSVG","_updateDisabled","VOLUME_LEVEL","MuteButton","muteButtonCss","volume","SEEK_OFFSET","SeekButton","seekButtonCss","isNaN","currentTime","Math","max","min","abs","DEFAULT_SEEK_OFFSET","isValidNumber","isFinite","formatTime","time","guide","preferNegative","timeParts","negative","guideMinutes","floor","guideHours","seconds","minutes","hours","showHours","showMinutesLeadingZero","timePhrase","part","join","timeUnitLabels","toTimeUnitPhrase","timeUnitValue","unitIndex","unitLabel","formatAsTimePhrase","negativeSuffix","REMAINING","_dec4","REMAINING_WHEN_LIVE","_dec5","SHOW_DURATION","_dec6","STREAM_TYPE","_dec7","TimeDisplay","textDisplayCss","text","ariaValueText","endTime","NaN","seekable","end","DurationDisplay","createEvent","supportsNativeEvent","Event","eventInitDict","document","initEvent","bubbles","cancelable","createCustomEvent","supportsNativeCustomEvent","CustomEvent","detail","foo","initCustomEvent","ARIA_CHECKED","converter","fromAttribute","toAttribute","VALUE","checked","_checked","handleChange","dispatchEvent","composed","Rectangle","left","right","width","top","y","bottom","height","fromRect","rect","overlaps","other","union","snapToPixels","round","clone","toJSON","getFocusedChild","focusedChild","getActiveElement","activeElement","nextActiveElement","body","navigateByArrowKey","container","key","keySelector","candidates","containerRect","getBoundingClientRect","focusedRect","childrenWithRects","LEFT","RIGHT","bounds","UP","closestCandidate","a","b","distance","arrayMinBy","comparator","reduce","second","focus","DEVICE_TYPE","RadioGroup","_onSlotChange","firstUpdated","createRenderRoot","root","_onButtonChange","_value","updateCheckedButton","focusedRadioButton","_radioButtons","tabIndex","checkedRadioButton","firstRadioButton","_this__radioButtons_","lastRadioButton","radioButtons","allRadioButtons","_prevRadioButton","index","_nextRadioButton","_focusPrevButton","focusedButton","setFocusedRadioButton","_focusNextButton","_unfocusAll","setCheckedRadioButton","checkedButton","_slotRef","upgradePromises","isRadioButton","promise","then","_this_firstRadioButton","stopPropagation","DOWN","HOME","END","CLOSE_MENU_EVENT","MENU_CHANGE_EVENT","menuTemplate","heading","content","MENU_CLOSE_ON_INPUT","MENU_OPENED","menuCss","menuOpened_","HIDDEN","_menuOpened","menuOpened","changeEvent","openMenu","closeMenu","renderMenuHeading","_onContentInput","renderMenuContent","TOGGLE_MENU_EVENT","menuGroupTemplate","isMenuElement","query","menuGroupCss","_onToggleMenu","_onCloseMenu","_onMenuChange","_onMenuListChange","getMenuById","menuId","_menus","menu","opener","menuToOpen","previousEntry","getCurrentMenu_","_openMenuStack","entry","closeMenusFromIndex_","oldEntry","_this__openMenuStack_","menuToClose","nextEntry","menusToClose","splice","hasCurrentMenu","closeCurrentMenu","currentMenu","isMenuOpen","some","newMenus","oldMenu","newMenu","rawEvent","MENU","_menuId","CloseMenuButton","TRACK_EVENTS","_dec1","MediaTrackRadioButton","track","_onTrackChange","_updateFromTrack","getTrackLabel","language","localizedLanguageName","_updateTrack","isSubtitleTrack","isNonForcedSubtitleTrack","forced","getTargetQualities","videoTrack","targetQualities","targetQuality","formatQualityLabel","quality","bandwidth","formatBandwidth","toFixed","TRACK_TYPE","SHOW_OFF","TrackRadioGroup","verticalRadioGroupCss","trackType","_trackType","_updateTracksList","_updateTracks","_getTracksList","audioTracks","videoTracks","textTracks","oldList","newList","_getTracks","tracks","isSubtitles","_onChange","repeat","uid","requestUpdate","TextTrackRadioButton","test","captionChannel","mode","TextTrackOffRadioButton","trackList","_trackList","_updateFromTrackList","_updateTrackList","disableSubtitleTracks","parseColor","colorString","m","rgbaString","match","r_","parseInt","g_","b_","a_","parseFloat","hex","toRgba","color","toRgb","colorWithAlpha","alpha","COLOR_WHITE","COLOR_BLACK","knownColors","knownFontFamilies","knownEdgeStyles","PROPERTY","TextTrackStyleDisplay","_property","_this__textTrackStyle","_this__textTrackStyle1","_textTrackStyle","textTrackStyle","renderValue","fontFamily","knownFontFamily","_","getColorLabel","parsedColor","colorRgb","knownColor","getOpacityLabel","fontColor","backgroundColor","windowColor","edgeStyle","knownEdgeStyle","updateColor","colorValue","previousColor","defaultColor","updateOpacity","opacityValue","TextTrackStyleRadioGroup","radioGroup","_radioGroupRef","_updateToPlayer","_this__player_textTrackStyle_this_property","_ref1","_ref2","colorOptions","fontFamilyOptions","sizeOptions","opacityOptions","edgeStyleOptions","TextTrackStyleMenu","menuTableCss","textTrackStyleMenuCss","HAS_AUDIO","HAS_SUBTITLES","LanguageMenu","languageMenuCss","_this__audioTrackList","_this__textTrackList","_this__audioTrackList1","_this__textTrackList1","_audioTrackList","_updateAudioTracks","_textTrackList","_updateTextTracks","newAudioTracks","newSubtitleTracks","LanguageMenuButton","hasTracks","PlaybackRateRadioGroup","PlaybackRateMenuButton","PLAYBACK_RATES","PlaybackRateMenu","rate","PlaybackRateDisplay","ActiveQualityDisplay","hasSingleTargetQuality","qualityLabel","QUALITY_EVENTS","QualityRadioButton","_quality","_updateFromQuality","_updateTargetQuality","QualityRadioGroup","_this__videoTracks","_this__videoTracks1","_videoTracks","qualities","_this__track","_this__track1","_update","TextTrackStyleResetButton","fontSize","SettingsMenu","SettingsMenuButton","settingsIcon","ENTER_FULLSCREEN_EVENT","EXIT_FULLSCREEN_EVENT","styleSubtree","properties","window","ShadyCSS","nativeCss","setProperties","style","propertyName","entries","setProperty","FULLSCREEN","FullscreenButton","fullscreenButtonCss","ColorStops","add","to","previousIndex","_stops","percent","previousPercent","newStops","nextIndex","toGradientStops","gradientStops","prevPercent","INERT","_dec8","_dec9","_dec10","rangeCss","_updateRange","_updatePointerBar","hidden","_hidden","inert","_inert","handleInput","_min","_max","useCachedWidth","updateCachedWidths_","updateBar_","getBarColors","shadyCss","rangePercent","relativeValue","thumbPercent","thumbOffset","_thumbWidth","_rangeWidth","stops","_this__rangeRef_value","rangeWidth","_rangeRef","offsetWidth","thumbWidth","getPropertyValue","getMinimumStepForVisibleChange_","relativeMax","updatePointer_","mousePercent","rangeRect","handleKeyDown_","styleMap","getAriaLabel","getAriaValueText","_onInput","renderRangeExtras","valueAsNumber","rangeEl","clientX","PREVIEW_TIME_CHANGE_EVENT","isLinearAd","ad","isThumbnailTextTrack","PreviewThumbnail","previewThumbnailCss","_updateThumbnailTextTrack","_previewTime","updateThumbnail_","_thumbnailTextTrack","hideThumbnail_","cue","getCueAtTime","cues","startTime","trim","sprite","parseSpriteUrl","spriteUrl","url","w","h","thumbnailUrl","URL","src","location","_lastLoadedThumbnailUrl","loadThumbnailImage_","showThumbnail_","_thumbnailImageSource","onLoad","decode","onload","canvas","_canvasRef","_canvasContext","getContext","drawImage","naturalWidth","naturalHeight","canvasStyle","oldTrack","newTrack","createElement","decoding","PreviewTimeDisplay","UPDATE_EVENTS","AUTO_ADVANCE_EVENTS","AD_EVENTS","SHOW_AD_MARKERS","TimeRange","timeRangeCss","_toggleAutoAdvance","_changedProperties","_this__rangeRef_value1","_pauseOnScrubStart","_this__ads","_this__ads1","_ads","_onAdChange","ads","_streamType","updateDisabled_","showAdMarkers","_showAdMarkers","currentTimePhrase","totalTimePhrase","shouldAutoAdvance_","isConnected","errorObject","readyState","_lastCurrentTime","needToUpdateEveryFrame_","minimumStep","_lastPlaybackRate","previewPos","previewBoxEl","_previewBoxEl","previewBoxRect","previewPosFraction","previewTimeChangeEvent","colorStops","playing","adBreak","scheduledAdBreaks","adBreakTime","timeOffset","adBreakFrom","adBreakTo","adBreakPercent","ENTER","transform","_pausedWhileScrubbing","_autoAdvanceId","_lastUpdateTime","performance","now","start","isLive","Infinity","_playOnScrubEnd","requestAnimationFrame","_autoAdvanceWhilePlaying","cancelAnimationFrame","delta","VolumeRange","ErrorDisplay","errorDisplayCss","_this_error","message","CAST_STATE","_updateCastState","castApi","_castApi","castState","_castState","stop","chromecastButtonId","ChromecastButton","chromecastButtonCss","cast","chromecast","_buttonId","CAST_EVENTS","ChromecastDisplay","chromecastDisplayCss","_this__player_cast","receiverName","airPlayButtonHtml","AirPlayButton","airPlayButtonCss","airplay","loadingIndicatorHtml","LOADING","LoadingIndicator","loadingIndicatorCss","seeking","GestureReceiver","gestureReceiverCss","_playerElement","_onPointerDown","handleTap","_event","handleMouseClick","_this__player_ads","_pointerType","pointerType","_event_pointerType","PAUSED_EVENTS","LIVE_EVENTS","LIVE_THRESHOLD","useDefault","LIVE","LiveButton","liveButtonCss","liveThreshold","_liveThreshold","_updateLive","_updatePaused","hesp","manifest","goLive","DEFAULT_LIVE_THRESHOLD","threshold","AdDisplay","adDisplayCss","linearAds","currentAdBreak","currentLinearAd","currentAds","currentAdIndex","AdCountdown","adCountdownCss","_this__player1","maxRemainingDuration","ceil","CLICKTHROUGH","AdClickThroughButton","clickThrough","_clickThrough","linearAd","integration","AdSkipButton","adSkipButtonCss","skip","countdownStyles","visibility","skipStyles","pointerEvents","skipOffset","extensionRegistry","registerExtension","extension","fullscreenAPI","browserMap","requestFullscreen_","exitFullscreen_","fullscreenElement_","fullscreenEnabled_","fullscreenchange_","fullscreenerror_","isMobile","navigator","userAgentData","mobile","userAgent","isTv","USER_IDLE_CHANGE_EVENT","READY_EVENT","GLOBAL_STYLE_ID","globalStylesAdded","FULL_WINDOW_ROOT_CLASS","getVisibleRect","opacity","childRect","CONFIGURATION","JSON","parse","SOURCE","FLUID","MUTED","AUTOPLAY","CASTING","USER_IDLE","_dec11","USER_IDLE_TIMEOUT","_dec12","_dec13","_dec14","DVR_THRESHOLD","_dec15","HAS_FIRST_PLAY","_dec16","PLAYING_AD","_dec17","HAS_ERROR","_dec18","FULLWINDOW","_dec19","UIContainer","elementCss","configuration","_configuration","playerConfiguration","_setConfiguration","tryInitializePlayer_","_source","_setSource","_fluid","_updateAspectRatio","_muted","_autoplay","_fullscreen","_stateReceivers","_paused","_updateTextTrackMargins","updateUserIdle_","_ended","casting","_casting","userIdle","_userIdle","userIdleTimeout","_this__userIdleTimeout","_userIdleTimeout","_deviceType","MOBILE","TV","_onTvKeyDown","streamTypeChangeEvent","dvrThreshold","_dvrThreshold","_updateStreamType","_this__resizeObserver","supportsAdoptingStyleSheets","adoptedStyleSheets","globalCss","styleSheet","getElementById","styleEl","nonce","cssText","el","textContent","innerText","head","appendChild","propagateStateToReceiver_","_mutationObserver","observe","childList","subtree","_resizeObserver","_onFullscreenChange","setUserIdle_","_exitFullscreenOnEsc","_onPointerUp","_onPointerMove","_onMouseLeave","_playerRef","license","licenseUrl","ChromelessPlayer","_updateError","_updatePausedAndEnded","_updateCasting","addPlayerListeners_","propagatePlayerToAllReceivers_","_onEnterFullscreen","_onExitFullscreen","_onPreviewTimeChange","_menuGroupRef","registerStateReceiver_","disconnect","_onClickAfterPointerUp","removePlayerListeners_","destroy","receiverProps","_this__activeVideoTrack","_activeVideoTrack","activeQuality","removeStateFromReceiver_","openMenu_","topChromeRect","_topChromeRef","bottomChromeRect","_bottomChromeRef","alignBottom","alignRight","playerRect","openerRect","_menuOpener","closeMenu_","_this__menuGroupRef_value_closeMenu","_this__menuGroupRef_value","_this__menuOpener","computeStreamType_","dvr","dvrWindow","isUserIdle_","_isUserActive","setUserActive_","clearTimeout","_userIdleTimer","isPlayerOrMedia_","_onDestroy","_updateMuted","_updatePlaybackRate","_onSourceChange","_updatePlayingAd","theoLive","_updateActiveVideoTrack","_topChromeSlotRef","_onChromeSlotTransition","_bottomChromeSlotRef","_menuRef","_lastPointerUpTime","_onMutation","mutations","mutation","addedNodes","removedNodes","unregisterStateReceiver_","menuGroup","console","menuEl","_onMenuPointerDown","_onMenuClick","_this__configuration_ui","_this__configuration","navigationUI","ui","fullscreenOptions","presentation","supportsMode","requestMode","documentElement","classList","currentMode","remove","isFullscreen","fullscreenElement","containsComposedNode","rootNode","childNode","childRoot","getRootNode","host","ESCAPE","videoWidth","videoHeight","activeVideoTrack","_this__activeVideoTrack1","_this__activeVideoTrack2","_this__activeVideoTrack3","_updateActiveVideoQuality","_updateTargetVideoQualities","scheduleUserIdle_","setTimeout","tvFocusChildren","getTvFocusChildren","TV_FOCUS","focusableChildren","marginTop","marginBottom","MutationObserver","ResizeObserver","queryAssignedNodes","defaultUiCss","_this__uiRef_value","_uiRef","showCountdown","_appliedExtensions","_onTitleSlotChange","_timeRangeInertTimeout","_onUiReady","_updateUserIdle","renderUiContent","DEFAULT_DVR_THRESHOLD","BadNetworkModeButton","badNetworkModeButtonCss","_theoLive","handleEnterBadNetworkMode_","handleExitBadNetworkMode_","warningStyles","_this__theoLive","_badNetworkMode","badNetworkMode","handlePlayer","handleEnterBadNetworkMode","handleExitBadNetworkMode","AutomaticQualitySelector","update_","_this_player_theoLive","_this_player","newChecked","BadNetworkModeSelector","BadNetworkModeMenu","THEOliveDefaultUI","css","onLoadChannelStart","onChannelOffline","onChannelLoaded","onError","hidePlayerError","stopHidingPlayerError","showMessage_","hideMessage_","loadingStyles","offlineStyles","announcementStyles","playButtonStyles","errorDisplayStyles","errorCode","code","version"],"mappings":"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","x_google_ignoreList":[0,1,64,65,80]}
|