{
  "version": 3,
  "sources": ["../src/polyfills/index.ts", "../src/index.ts", "../src/env.ts", "../../../node_modules/custom-media-element/custom-media-element.js", "../../../node_modules/castable-video/castable-utils.js", "../../../node_modules/castable-video/castable-remote-playback.js", "../../../node_modules/castable-video/castable-mixin.js", "../../../node_modules/media-tracks/dist/track-event.js", "../../../node_modules/media-tracks/dist/utils.js", "../../../node_modules/media-tracks/dist/video-track-list.js", "../../../node_modules/media-tracks/dist/rendition-event.js", "../../../node_modules/media-tracks/dist/video-rendition-list.js", "../../../node_modules/media-tracks/dist/video-rendition.js", "../../../node_modules/media-tracks/dist/video-track.js", "../../../node_modules/media-tracks/dist/audio-rendition-list.js", "../../../node_modules/media-tracks/dist/audio-rendition.js", "../../../node_modules/media-tracks/dist/audio-track-list.js", "../../../node_modules/media-tracks/dist/audio-track.js", "../../../node_modules/media-tracks/dist/mixin.js"],
  "sourcesContent": ["/* eslint @typescript-eslint/no-empty-function: \"off\", @typescript-eslint/no-unused-vars: \"off\" */\n\nclass EventTarget {\n  addEventListener() {}\n  removeEventListener() {}\n  dispatchEvent(_event: Event) {\n    return true;\n  }\n}\n\n// @github/template-parts requires DocumentFragment to be available on globalThis for SSR\nif (typeof DocumentFragment === 'undefined') {\n  class DocumentFragment extends EventTarget {}\n  // @ts-ignore\n  globalThis.DocumentFragment = DocumentFragment;\n}\n\nclass HTMLElement extends EventTarget {}\nclass HTMLVideoElement extends EventTarget {}\n\nconst customElements: CustomElementRegistry = {\n  get(_name: string) {\n    return undefined;\n  },\n  define(_name, _constructor, _options) {},\n  getName(_constructor) {\n    return null;\n  },\n  upgrade(_root) {},\n  whenDefined(_name) {\n    return Promise.resolve(HTMLElement as unknown as CustomElementConstructor);\n  },\n};\n\nclass CustomEvent {\n  #detail;\n  get detail() {\n    return this.#detail;\n  }\n  constructor(typeArg: string, eventInitDict: CustomEventInit = {}) {\n    // super(typeArg, eventInitDict);\n    this.#detail = eventInitDict?.detail;\n  }\n  initCustomEvent() {}\n}\n\nfunction createElement(_tagName: string, _options?: ElementCreationOptions): HTMLElement {\n  return new HTMLElement();\n}\n\nconst globalThisShim = {\n  document: {\n    createElement,\n  },\n  DocumentFragment,\n  customElements,\n  CustomEvent,\n  EventTarget,\n  HTMLElement,\n  HTMLVideoElement,\n};\n\n// const isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\n// const GlobalThis = isServer ? globalThisShim : globalThis;\n// const Document = isServer ? globalThisShim.document : globalThis.document;\n//\n// export { GlobalThis as globalThis, Document as document };\nconst isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\ntype GlobalThis = typeof globalThis;\nconst internalGlobalThis: GlobalThis = (isServer ? globalThisShim : globalThis) as GlobalThis;\nconst internalDocument: Document = (isServer ? globalThisShim.document : globalThis.document) as Document;\n\nexport { internalGlobalThis as globalThis, internalDocument as document };\n", "import { globalThis } from './polyfills';\nimport {\n  initialize,\n  teardown,\n  generatePlayerInitTime,\n  MuxMediaProps,\n  StreamTypes,\n  PlaybackTypes,\n  toMuxVideoURL,\n  Metadata,\n  MediaError,\n  getError,\n  CmcdTypes,\n  CmcdTypeValues,\n  addCuePoints,\n  getCuePoints,\n  getActiveCuePoint,\n  addChapters,\n  getActiveChapter,\n  getStartDate,\n  getCurrentPdt,\n  getStreamType,\n  getTargetLiveWindow,\n  getLiveEdgeStart,\n  getSeekable,\n  getEnded,\n  getChapters,\n  toPlaybackIdFromSrc,\n  toPlaybackIdParts,\n  // isMuxVideoSrc,\n} from '@mux/playback-core';\nimport type {\n  PlaybackCore,\n  PlaybackEngine,\n  Autoplay,\n  ExtensionMimeTypeMap,\n  ValueOf,\n  MaxResolutionValue,\n  MinResolutionValue,\n  RenditionOrderValue,\n  Chapter,\n  CuePoint,\n  Tokens,\n} from '@mux/playback-core';\nimport { getPlayerVersion } from './env';\n// this must be imported after playback-core for the polyfill to be included\nimport { CustomVideoElement, Events as VideoEvents } from 'custom-media-element';\nimport { CastableMediaMixin } from 'castable-video/castable-mixin.js';\nimport { MediaTracksMixin } from 'media-tracks';\nimport type { HlsConfig } from 'hls.js';\n\n// Must mutate so the added events are available in custom-media-element.\nVideoEvents.push('castchange', 'entercast', 'leavecast');\n\nexport const Attributes = {\n  BEACON_COLLECTION_DOMAIN: 'beacon-collection-domain',\n  CUSTOM_DOMAIN: 'custom-domain',\n  DEBUG: 'debug',\n  DISABLE_TRACKING: 'disable-tracking',\n  DISABLE_COOKIES: 'disable-cookies',\n  DRM_TOKEN: 'drm-token',\n  PLAYBACK_TOKEN: 'playback-token',\n  ENV_KEY: 'env-key',\n  MAX_RESOLUTION: 'max-resolution',\n  MIN_RESOLUTION: 'min-resolution',\n  RENDITION_ORDER: 'rendition-order',\n  PROGRAM_START_TIME: 'program-start-time',\n  PROGRAM_END_TIME: 'program-end-time',\n  ASSET_START_TIME: 'asset-start-time',\n  ASSET_END_TIME: 'asset-end-time',\n  METADATA_URL: 'metadata-url',\n  PLAYBACK_ID: 'playback-id',\n  PLAYER_SOFTWARE_NAME: 'player-software-name',\n  PLAYER_SOFTWARE_VERSION: 'player-software-version',\n  PREFER_CMCD: 'prefer-cmcd',\n  PREFER_PLAYBACK: 'prefer-playback',\n  START_TIME: 'start-time',\n  STREAM_TYPE: 'stream-type',\n  TARGET_LIVE_WINDOW: 'target-live-window',\n  LIVE_EDGE_OFFSET: 'live-edge-offset',\n  TYPE: 'type',\n} as const;\n\nconst AttributeNameValues = Object.values(Attributes);\n\nconst playerSoftwareVersion = getPlayerVersion();\nconst playerSoftwareName = 'mux-video';\n\nclass MuxVideoBaseElement extends CustomVideoElement implements Partial<MuxMediaProps> {\n  static get observedAttributes() {\n    return [...AttributeNameValues, ...(CustomVideoElement.observedAttributes ?? [])];\n  }\n\n  #core?: PlaybackCore;\n  #loadRequested?: Promise<void> | null;\n  #playerInitTime: number;\n  #metadata: Readonly<Metadata> = {};\n  #tokens: Tokens = {};\n  #_hlsConfig?: Partial<HlsConfig>;\n  #playerSoftwareVersion?: string;\n  #playerSoftwareName?: string;\n  #errorTranslator?: (errorEvent: any) => any;\n\n  constructor() {\n    super();\n    this.#playerInitTime = generatePlayerInitTime();\n  }\n\n  get preferCmcd() {\n    return (this.getAttribute(Attributes.PREFER_CMCD) as ValueOf<CmcdTypes>) ?? undefined;\n  }\n\n  set preferCmcd(value: ValueOf<CmcdTypes> | undefined) {\n    if (value === this.preferCmcd) return;\n    if (!value) {\n      this.removeAttribute(Attributes.PREFER_CMCD);\n    } else if (CmcdTypeValues.includes(value)) {\n      this.setAttribute(Attributes.PREFER_CMCD, value);\n    } else {\n      console.warn(`Invalid value for preferCmcd. Must be one of ${CmcdTypeValues.join()}`);\n    }\n  }\n\n  get playerInitTime() {\n    return this.#playerInitTime;\n  }\n\n  get playerSoftwareName() {\n    return this.#playerSoftwareName ?? playerSoftwareName;\n  }\n\n  set playerSoftwareName(value: string | undefined) {\n    this.#playerSoftwareName = value;\n  }\n\n  get playerSoftwareVersion() {\n    return this.#playerSoftwareVersion ?? playerSoftwareVersion;\n  }\n\n  set playerSoftwareVersion(value: string | undefined) {\n    this.#playerSoftwareVersion = value;\n  }\n\n  // Keeping this named \"_hls\" since it's exposed for unadvertised \"advanced usage\" via getter that assumes specifically hls.js (CJP)\n  get _hls(): PlaybackEngine | undefined {\n    return this.#core?.engine;\n  }\n\n  get mux(): Readonly<HTMLVideoElement['mux']> | undefined {\n    return this.nativeEl?.mux;\n  }\n\n  get error() {\n    return getError(this.nativeEl) ?? null;\n  }\n\n  get errorTranslator(): ((errorEvent: any) => any) | undefined {\n    return this.#errorTranslator;\n  }\n\n  set errorTranslator(value: ((errorEvent: any) => any) | undefined) {\n    this.#errorTranslator = value;\n  }\n\n  get src() {\n    // Use the attribute value as the source of truth.\n    // No need to store it in two places.\n    // This avoids needing a to read the attribute initially and update the src.\n    return this.getAttribute('src') as string;\n  }\n\n  set src(val: string) {\n    // If being set by attributeChangedCallback,\n    // dont' cause an infinite loop\n    if (val === this.src) return;\n\n    if (val == null) {\n      this.removeAttribute('src');\n    } else {\n      this.setAttribute('src', val);\n    }\n  }\n\n  get type(): ValueOf<ExtensionMimeTypeMap> | undefined {\n    return (this.getAttribute(Attributes.TYPE) as ValueOf<ExtensionMimeTypeMap>) ?? undefined;\n  }\n\n  set type(val: ValueOf<ExtensionMimeTypeMap> | undefined) {\n    // dont' cause an infinite loop\n    if (val === this.type) return;\n\n    if (val) {\n      this.setAttribute(Attributes.TYPE, val);\n    } else {\n      this.removeAttribute(Attributes.TYPE);\n    }\n  }\n\n  /** @ts-ignore */\n  get autoplay(): Autoplay {\n    const attr = this.getAttribute('autoplay');\n\n    if (attr === null) {\n      return false;\n    } else if (attr === '') {\n      return true;\n    } else {\n      return attr as Autoplay;\n    }\n  }\n\n  /** @ts-ignore */\n  set autoplay(val: Autoplay) {\n    const currentVal = this.autoplay;\n    if (val === currentVal) {\n      return;\n    }\n\n    if (val) {\n      this.setAttribute('autoplay', typeof val === 'string' ? val : '');\n    } else {\n      this.removeAttribute('autoplay');\n    }\n  }\n\n  get preload() {\n    const val = this.getAttribute('preload') as HTMLMediaElement['preload'];\n    if (val === '') return 'auto';\n    if (['none', 'metadata', 'auto'].includes(val)) return val;\n    return super.preload;\n  }\n\n  set preload(val) {\n    // don't cause an infinite loop\n    // check the attribute because an empty string maps to the `auto` prop\n    if (val == this.getAttribute('preload')) return;\n\n    if (['', 'none', 'metadata', 'auto'].includes(val)) {\n      this.setAttribute('preload', val);\n    } else {\n      this.removeAttribute('preload');\n    }\n  }\n\n  get debug() {\n    return this.getAttribute(Attributes.DEBUG) != null;\n  }\n\n  set debug(val) {\n    // dont' cause an infinite loop\n    if (val === this.debug) return;\n\n    if (val) {\n      this.setAttribute(Attributes.DEBUG, '');\n    } else {\n      this.removeAttribute(Attributes.DEBUG);\n    }\n  }\n\n  get disableTracking() {\n    return this.hasAttribute(Attributes.DISABLE_TRACKING);\n  }\n\n  set disableTracking(val) {\n    // dont' cause an infinite loop\n    if (val === this.disableTracking) return;\n\n    this.toggleAttribute(Attributes.DISABLE_TRACKING, !!val);\n  }\n\n  get disableCookies() {\n    return this.hasAttribute(Attributes.DISABLE_COOKIES);\n  }\n\n  set disableCookies(val) {\n    // dont' cause an infinite loop\n    if (val === this.disableCookies) return;\n\n    if (val) {\n      this.setAttribute(Attributes.DISABLE_COOKIES, '');\n    } else {\n      this.removeAttribute(Attributes.DISABLE_COOKIES);\n    }\n  }\n\n  get startTime(): number | undefined {\n    const val = this.getAttribute(Attributes.START_TIME);\n    if (val == null) return undefined;\n    const num = +val;\n    return !Number.isNaN(num) ? num : undefined;\n  }\n\n  set startTime(val: number | undefined) {\n    // dont' cause an infinite loop\n    if (val === this.startTime) return;\n\n    if (val == null) {\n      this.removeAttribute(Attributes.START_TIME);\n    } else {\n      this.setAttribute(Attributes.START_TIME, `${val}`);\n    }\n  }\n\n  // NOTE: playbackId may contain additional query params (e.g. token= for playback token) (CJP)\n  get playbackId(): string | undefined {\n    if (this.hasAttribute(Attributes.PLAYBACK_ID)) {\n      return this.getAttribute(Attributes.PLAYBACK_ID) as string;\n    }\n\n    return toPlaybackIdFromSrc(this.src) ?? undefined;\n  }\n\n  set playbackId(val: string | undefined) {\n    // dont' cause an infinite loop\n    if (val === this.playbackId) return;\n\n    if (val) {\n      this.setAttribute(Attributes.PLAYBACK_ID, val);\n    } else {\n      this.removeAttribute(Attributes.PLAYBACK_ID);\n    }\n  }\n\n  get maxResolution() {\n    return (this.getAttribute(Attributes.MAX_RESOLUTION) as MaxResolutionValue) ?? undefined;\n  }\n\n  set maxResolution(val: MaxResolutionValue | undefined) {\n    if (val === this.maxResolution) return;\n\n    if (val) {\n      this.setAttribute(Attributes.MAX_RESOLUTION, val);\n    } else {\n      this.removeAttribute(Attributes.MAX_RESOLUTION);\n    }\n  }\n\n  get minResolution() {\n    return (this.getAttribute(Attributes.MIN_RESOLUTION) as MinResolutionValue) ?? undefined;\n  }\n\n  set minResolution(val: MinResolutionValue | undefined) {\n    if (val === this.minResolution) return;\n\n    if (val) {\n      this.setAttribute(Attributes.MIN_RESOLUTION, val);\n    } else {\n      this.removeAttribute(Attributes.MIN_RESOLUTION);\n    }\n  }\n\n  get renditionOrder() {\n    return (this.getAttribute(Attributes.RENDITION_ORDER) as RenditionOrderValue) ?? undefined;\n  }\n\n  set renditionOrder(val: RenditionOrderValue | undefined) {\n    if (val === this.renditionOrder) return;\n\n    if (val) {\n      this.setAttribute(Attributes.RENDITION_ORDER, val);\n    } else {\n      this.removeAttribute(Attributes.RENDITION_ORDER);\n    }\n  }\n\n  get programStartTime() {\n    const val = this.getAttribute(Attributes.PROGRAM_START_TIME);\n    if (val == null) return undefined;\n    const num = +val;\n    return !Number.isNaN(num) ? num : undefined;\n  }\n\n  set programStartTime(val: number | undefined) {\n    if (val == undefined) {\n      this.removeAttribute(Attributes.PROGRAM_START_TIME);\n    } else {\n      this.setAttribute(Attributes.PROGRAM_START_TIME, `${val}`);\n    }\n  }\n\n  get programEndTime() {\n    const val = this.getAttribute(Attributes.PROGRAM_END_TIME);\n    if (val == null) return undefined;\n    const num = +val;\n    return !Number.isNaN(num) ? num : undefined;\n  }\n\n  set programEndTime(val: number | undefined) {\n    if (val == undefined) {\n      this.removeAttribute(Attributes.PROGRAM_END_TIME);\n    } else {\n      this.setAttribute(Attributes.PROGRAM_END_TIME, `${val}`);\n    }\n  }\n\n  get assetStartTime() {\n    const val = this.getAttribute(Attributes.ASSET_START_TIME);\n    if (val == null) return undefined;\n    const num = +val;\n    return !Number.isNaN(num) ? num : undefined;\n  }\n\n  set assetStartTime(val: number | undefined) {\n    if (val == undefined) {\n      this.removeAttribute(Attributes.ASSET_START_TIME);\n    } else {\n      this.setAttribute(Attributes.ASSET_START_TIME, `${val}`);\n    }\n  }\n\n  get assetEndTime() {\n    const val = this.getAttribute(Attributes.ASSET_END_TIME);\n    if (val == null) return undefined;\n    const num = +val;\n    return !Number.isNaN(num) ? num : undefined;\n  }\n\n  set assetEndTime(val: number | undefined) {\n    if (val == undefined) {\n      this.removeAttribute(Attributes.ASSET_END_TIME);\n    } else {\n      this.setAttribute(Attributes.ASSET_END_TIME, `${val}`);\n    }\n  }\n\n  get customDomain() {\n    return this.getAttribute(Attributes.CUSTOM_DOMAIN) ?? undefined;\n  }\n\n  set customDomain(val: string | undefined) {\n    // dont' cause an infinite loop\n    if (val === this.customDomain) return;\n\n    if (val) {\n      this.setAttribute(Attributes.CUSTOM_DOMAIN, val);\n    } else {\n      this.removeAttribute(Attributes.CUSTOM_DOMAIN);\n    }\n  }\n\n  get drmToken() {\n    return this.getAttribute(Attributes.DRM_TOKEN) ?? undefined;\n  }\n\n  set drmToken(val: string | undefined) {\n    // dont' cause an infinite loop\n    if (val === this.drmToken) return;\n\n    if (val) {\n      this.setAttribute(Attributes.DRM_TOKEN, val);\n    } else {\n      this.removeAttribute(Attributes.DRM_TOKEN);\n    }\n  }\n\n  /**\n   * Get the playback token for signing the src URL.\n   */\n  get playbackToken() {\n    if (this.hasAttribute(Attributes.PLAYBACK_TOKEN)) {\n      return this.getAttribute(Attributes.PLAYBACK_TOKEN) ?? undefined;\n    }\n    if (this.hasAttribute(Attributes.PLAYBACK_ID)) {\n      const [, queryParts] = toPlaybackIdParts(this.playbackId ?? '');\n      return new URLSearchParams(queryParts).get('token') ?? undefined;\n    }\n    if (this.src) {\n      return new URLSearchParams(this.src).get('token') ?? undefined;\n    }\n    return undefined;\n  }\n\n  /**\n   * Set the playback token for signing the src URL.\n   */\n  set playbackToken(val: string | undefined) {\n    if (val === this.playbackToken) return;\n\n    if (val) {\n      this.setAttribute(Attributes.PLAYBACK_TOKEN, val);\n    } else {\n      this.removeAttribute(Attributes.PLAYBACK_TOKEN);\n    }\n  }\n\n  get tokens() {\n    const playback = this.getAttribute(Attributes.PLAYBACK_TOKEN);\n    const drm = this.getAttribute(Attributes.DRM_TOKEN);\n    return {\n      ...this.#tokens,\n      ...(playback != null ? { playback } : {}),\n      ...(drm != null ? { drm } : {}),\n    };\n  }\n\n  set tokens(val) {\n    this.#tokens = val ?? {};\n  }\n\n  get ended() {\n    // This ensures that edge case media that doesn't properly end will\n    // still announce itself as \"ended\".\n    return getEnded(this.nativeEl, this._hls);\n  }\n\n  get envKey(): string | undefined {\n    return this.getAttribute(Attributes.ENV_KEY) ?? undefined;\n  }\n\n  set envKey(val: string | undefined) {\n    // dont' cause an infinite loop\n    if (val === this.envKey) return;\n\n    if (val) {\n      this.setAttribute(Attributes.ENV_KEY, val);\n    } else {\n      this.removeAttribute(Attributes.ENV_KEY);\n    }\n  }\n\n  get beaconCollectionDomain(): string | undefined {\n    return this.getAttribute(Attributes.BEACON_COLLECTION_DOMAIN) ?? undefined;\n  }\n\n  set beaconCollectionDomain(val: string | undefined) {\n    // don't cause an infinite loop\n    if (val === this.beaconCollectionDomain) return;\n\n    if (val) {\n      this.setAttribute(Attributes.BEACON_COLLECTION_DOMAIN, val);\n    } else {\n      this.removeAttribute(Attributes.BEACON_COLLECTION_DOMAIN);\n    }\n  }\n\n  get streamType(): ValueOf<StreamTypes> | undefined {\n    // Allow overriding inferred `streamType`\n    return (this.getAttribute(Attributes.STREAM_TYPE) as ValueOf<StreamTypes>) ?? getStreamType(this.nativeEl);\n  }\n\n  set streamType(val: ValueOf<StreamTypes> | undefined) {\n    // don't cause an infinite loop and avoid change event dispatching\n    if (val === this.streamType) return;\n\n    if (val) {\n      this.setAttribute(Attributes.STREAM_TYPE, val);\n    } else {\n      this.removeAttribute(Attributes.STREAM_TYPE);\n    }\n  }\n\n  get targetLiveWindow() {\n    // Allow overriding inferred `targetLiveWindow`\n    if (this.hasAttribute(Attributes.TARGET_LIVE_WINDOW)) {\n      return +(this.getAttribute(Attributes.TARGET_LIVE_WINDOW) as string) as number;\n    }\n    return getTargetLiveWindow(this.nativeEl);\n  }\n\n  set targetLiveWindow(val: number | undefined) {\n    // don't cause an infinite loop and avoid change event dispatching\n    if (val == this.targetLiveWindow) return;\n\n    if (val == null) {\n      this.removeAttribute(Attributes.TARGET_LIVE_WINDOW);\n    } else {\n      this.setAttribute(Attributes.TARGET_LIVE_WINDOW, `${+val}`);\n    }\n  }\n\n  get liveEdgeStart() {\n    if (this.hasAttribute(Attributes.LIVE_EDGE_OFFSET)) {\n      const { liveEdgeOffset } = this;\n      const seekableEnd = this.nativeEl.seekable.end(0) ?? 0;\n      const seekableStart = this.nativeEl.seekable.start(0) ?? 0;\n      return Math.max(seekableStart, seekableEnd - (liveEdgeOffset as number));\n    }\n    return getLiveEdgeStart(this.nativeEl);\n  }\n\n  get liveEdgeOffset() {\n    if (!this.hasAttribute(Attributes.LIVE_EDGE_OFFSET)) return undefined;\n    return +(this.getAttribute(Attributes.LIVE_EDGE_OFFSET) as string) as number;\n  }\n\n  set liveEdgeOffset(val: number | undefined) {\n    // don't cause an infinite loop and avoid change event dispatching\n    if (val == this.targetLiveWindow) return;\n\n    if (val == null) {\n      this.removeAttribute(Attributes.LIVE_EDGE_OFFSET);\n    } else {\n      this.setAttribute(Attributes.LIVE_EDGE_OFFSET, `${+val}`);\n    }\n  }\n\n  get seekable() {\n    return getSeekable(this.nativeEl);\n  }\n\n  async addCuePoints<T = any>(cuePoints: CuePoint<T>[]) {\n    return addCuePoints(this.nativeEl, cuePoints);\n  }\n\n  get activeCuePoint() {\n    return getActiveCuePoint(this.nativeEl);\n  }\n\n  get cuePoints() {\n    return getCuePoints(this.nativeEl);\n  }\n\n  async addChapters(chapters: Chapter[]) {\n    return addChapters(this.nativeEl, chapters);\n  }\n\n  get activeChapter() {\n    return getActiveChapter(this.nativeEl);\n  }\n\n  get chapters() {\n    return getChapters(this.nativeEl);\n  }\n\n  getStartDate() {\n    return getStartDate(this.nativeEl, this._hls);\n  }\n\n  get currentPdt() {\n    return getCurrentPdt(this.nativeEl, this._hls);\n  }\n\n  get preferPlayback(): ValueOf<PlaybackTypes> | undefined {\n    const val = this.getAttribute(Attributes.PREFER_PLAYBACK);\n    if (val === PlaybackTypes.MSE || val === PlaybackTypes.NATIVE) return val;\n    return undefined;\n  }\n\n  set preferPlayback(val: ValueOf<PlaybackTypes> | undefined) {\n    if (val === this.preferPlayback) return;\n\n    if (val === PlaybackTypes.MSE || val === PlaybackTypes.NATIVE) {\n      this.setAttribute(Attributes.PREFER_PLAYBACK, val);\n    } else {\n      this.removeAttribute(Attributes.PREFER_PLAYBACK);\n    }\n  }\n\n  get metadata() {\n    const inferredMetadataAttrs: { [key: string]: string } = this.getAttributeNames()\n      .filter((attrName) => {\n        return attrName.startsWith('metadata-') && !([Attributes.METADATA_URL] as string[]).includes(attrName);\n      })\n      .reduce(\n        (currAttrs, attrName) => {\n          const value = this.getAttribute(attrName);\n          if (value != null) {\n            currAttrs[attrName.replace(/^metadata-/, '').replace(/-/g, '_') as string] = value;\n          }\n          return currAttrs;\n        },\n        {} as { [key: string]: string }\n      );\n\n    return {\n      ...inferredMetadataAttrs,\n      ...this.#metadata,\n    };\n  }\n\n  set metadata(val: Readonly<Metadata> | undefined) {\n    this.#metadata = val ?? {};\n    if (!!this.mux) {\n      this.mux.emit('hb', this.#metadata);\n    }\n  }\n\n  get _hlsConfig() {\n    return this.#_hlsConfig;\n  }\n\n  set _hlsConfig(val: Readonly<Partial<HlsConfig>> | undefined) {\n    this.#_hlsConfig = val;\n  }\n\n  async #requestLoad() {\n    if (this.#loadRequested) return;\n    await (this.#loadRequested = Promise.resolve());\n    this.#loadRequested = null;\n    this.load();\n  }\n\n  load() {\n    this.#core = initialize(this as Partial<MuxMediaProps>, this.nativeEl, this.#core);\n  }\n\n  unload() {\n    teardown(this.nativeEl, this.#core);\n    this.#core = undefined;\n  }\n\n  attributeChangedCallback(attrName: string, oldValue: string | null, newValue: string | null) {\n    // Only forward the attributes to the native media element that are not handled.\n    const isNativeAttr = CustomVideoElement.observedAttributes.includes(attrName);\n    if (isNativeAttr && !['src', 'autoplay', 'preload'].includes(attrName)) {\n      super.attributeChangedCallback(attrName, oldValue, newValue);\n    }\n\n    switch (attrName) {\n      case Attributes.PLAYER_SOFTWARE_NAME:\n        this.playerSoftwareName = newValue ?? undefined;\n        break;\n      case Attributes.PLAYER_SOFTWARE_VERSION:\n        this.playerSoftwareVersion = newValue ?? undefined;\n        break;\n      case 'src': {\n        const hadSrc = !!oldValue;\n        const hasSrc = !!newValue;\n        if (!hadSrc && hasSrc) {\n          this.#requestLoad();\n        } else if (hadSrc && !hasSrc) {\n          this.unload();\n        } else if (hadSrc && hasSrc) {\n          this.unload();\n          this.#requestLoad();\n        }\n        break;\n      }\n      case 'autoplay':\n        if (newValue === oldValue) {\n          break;\n        }\n        /** In case newValue is an empty string or null, use this.autoplay which translates to booleans (WL) */\n        this.#core?.setAutoplay(this.autoplay);\n        break;\n      case 'preload':\n        if (newValue === oldValue) {\n          break;\n        }\n        this.#core?.setPreload(newValue as HTMLMediaElement['preload']);\n        break;\n      case Attributes.PLAYBACK_ID:\n        this.src = toMuxVideoURL(this) as string;\n        break;\n      case Attributes.DEBUG: {\n        const debug = this.debug;\n        if (!!this.mux) {\n          /** @TODO Link to docs for a more detailed discussion (CJP) */\n          console.info(\n            'Cannot toggle debug mode of mux data after initialization. Make sure you set all metadata to override before setting the src.'\n          );\n        }\n        if (!!this._hls) {\n          this._hls.config.debug = debug;\n        }\n        break;\n      }\n      case Attributes.METADATA_URL:\n        if (newValue) {\n          fetch(newValue)\n            .then((resp) => resp.json())\n            .then((json) => (this.metadata = json))\n            .catch(() => console.error(`Unable to load or parse metadata JSON from metadata-url ${newValue}!`));\n        }\n        break;\n      case Attributes.STREAM_TYPE:\n        // If the newValue is unset\n        if (newValue == null || newValue !== oldValue) {\n          this.dispatchEvent(new CustomEvent('streamtypechange', { composed: true, bubbles: true }));\n        }\n        break;\n      case Attributes.TARGET_LIVE_WINDOW:\n        if (newValue == null || newValue !== oldValue) {\n          this.dispatchEvent(\n            new CustomEvent('targetlivewindowchange', { composed: true, bubbles: true, detail: this.targetLiveWindow })\n          );\n        }\n        break;\n      default:\n        break;\n    }\n  }\n\n  connectedCallback(): void {\n    super.connectedCallback?.();\n    if (this.nativeEl && this.src && !this.#core) {\n      this.#requestLoad();\n    }\n  }\n\n  disconnectedCallback(): void {\n    this.unload();\n  }\n}\n\n// castable-video should be mixed in last so that it can override load().\nclass MuxVideoElement extends CastableMediaMixin(MediaTracksMixin(MuxVideoBaseElement)) {\n  // NOTE: CastableMediaMixin needs to be a subclass of whatever implements the load() method\n  // (i.e. MuxVideoBaseElement), but we're overriding castCustomData to provide mux-specific\n  // values by default, so it needs to be defined here (i.e. in the composed subclass of\n  // CastableMediaMixin). (CJP)\n  #castCustomData: Record<string, any> | undefined;\n\n  get muxCastCustomData() {\n    return {\n      mux: {\n        // Mux Video values\n        playbackId: this.playbackId,\n        minResolution: this.minResolution,\n        maxResolution: this.maxResolution,\n        renditionOrder: this.renditionOrder,\n        customDomain: this.customDomain,\n        /** @TODO Add this.tokens to MuxVideoElement (CJP) */\n        tokens: {\n          drm: this.drmToken,\n        },\n        // Mux Data values\n        envKey: this.envKey,\n        metadata: this.metadata,\n        disableCookies: this.disableCookies,\n        disableTracking: this.disableTracking,\n        beaconCollectionDomain: this.beaconCollectionDomain,\n        // Playback values\n        startTime: this.startTime,\n        // Other values\n        preferCmcd: this.preferCmcd,\n      },\n    } as const;\n  }\n\n  get castCustomData() {\n    return this.#castCustomData ?? this.muxCastCustomData;\n  }\n\n  set castCustomData(val: Record<string, any> | undefined) {\n    this.#castCustomData = val;\n  }\n}\n\ntype MuxVideoElementType = typeof MuxVideoElement;\ndeclare global {\n  var MuxVideoElement: MuxVideoElementType; // eslint-disable-line\n}\n\nif (!globalThis.customElements.get('mux-video')) {\n  globalThis.customElements.define('mux-video', MuxVideoElement);\n  globalThis.MuxVideoElement = MuxVideoElement;\n}\n\nexport { PlaybackEngine, PlaybackEngine as Hls, ExtensionMimeTypeMap as MimeTypes, MediaError, VideoEvents };\n\nexport default MuxVideoElement;\n", "export const isMaybeBrowser = () => typeof window != 'undefined';\n// @ts-ignore\nexport const isMaybeServer = () => typeof global != 'undefined';\n\nconst getEnvPlayerVersion = () => {\n  try {\n    // @ts-ignore\n    return PLAYER_VERSION as string;\n  } catch {}\n  return 'UNKNOWN';\n};\n\nconst player_version: string = getEnvPlayerVersion();\n\nexport const getPlayerVersion = () => player_version;\n", "/**\n * Custom Media Element\n * Based on https://github.com/muxinc/custom-video-element - Mux - MIT License\n *\n * The goal is to create an element that works just like the video element\n * but can be extended/sub-classed, because native elements cannot be\n * extended today across browsers.\n */\n\n// The onevent like props are weirdly set on the HTMLElement prototype with other\n// generic events making it impossible to pick these specific to HTMLMediaElement.\nexport const Events = [\n  'abort',\n  'canplay',\n  'canplaythrough',\n  'durationchange',\n  'emptied',\n  'encrypted',\n  'ended',\n  'error',\n  'loadeddata',\n  'loadedmetadata',\n  'loadstart',\n  'pause',\n  'play',\n  'playing',\n  'progress',\n  'ratechange',\n  'seeked',\n  'seeking',\n  'stalled',\n  'suspend',\n  'timeupdate',\n  'volumechange',\n  'waiting',\n  'waitingforkey',\n  'resize',\n  'enterpictureinpicture',\n  'leavepictureinpicture',\n  'webkitbeginfullscreen',\n  'webkitendfullscreen',\n  'webkitpresentationmodechanged',\n];\n\nfunction getAudioTemplateHTML(attrs) {\n  return /*html*/`\n    <style>\n      :host {\n        display: inline-flex;\n        line-height: 0;\n        flex-direction: column;\n        justify-content: end;\n      }\n\n      audio {\n        width: 100%;\n      }\n    </style>\n    <slot name=\"media\">\n      <audio${serializeAttributes(attrs)}></audio>\n    </slot>\n    <slot></slot>\n  `;\n}\n\n// If the `media` slot is used leave the styling up to the user.\n// It's a more consistent behavior pre and post custom element upgrade.\n\nfunction getVideoTemplateHTML(attrs) {\n  return /*html*/`\n    <style>\n      :host {\n        display: inline-block;\n        line-height: 0;\n      }\n\n      video {\n        max-width: 100%;\n        max-height: 100%;\n        min-width: 100%;\n        min-height: 100%;\n        object-fit: var(--media-object-fit, contain);\n        object-position: var(--media-object-position, 50% 50%);\n      }\n\n      video::-webkit-media-text-track-container {\n        transform: var(--media-webkit-text-track-transform);\n        transition: var(--media-webkit-text-track-transition);\n      }\n    </style>\n    <slot name=\"media\">\n      <video${serializeAttributes(attrs)}></video>\n    </slot>\n    <slot></slot>\n  `;\n}\n\n/**\n * @see https://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes/\n */\nexport const CustomMediaMixin = (superclass, { tag, is }) => {\n\n  // `is` makes it possible to extend a custom built-in. e.g. castable-video\n  const nativeElTest = globalThis.document?.createElement?.(tag, { is });\n  const nativeElProps = nativeElTest ? getNativeElProps(nativeElTest) : [];\n\n  return class CustomMedia extends superclass {\n    static getTemplateHTML = tag.endsWith('audio') ? getAudioTemplateHTML : getVideoTemplateHTML;\n    static shadowRootOptions = { mode: 'open' };\n    static Events = Events;\n    static #isDefined;\n\n    static get observedAttributes() {\n      CustomMedia.#define();\n\n      // Include any attributes from the custom built-in.\n      const natAttrs = nativeElTest?.constructor?.observedAttributes ?? [];\n\n      return [\n        ...natAttrs,\n        'autopictureinpicture',\n        'disablepictureinpicture',\n        'disableremoteplayback',\n        'autoplay',\n        'controls',\n        'controlslist',\n        'crossorigin',\n        'loop',\n        'muted',\n        'playsinline',\n        'poster',\n        'preload',\n        'src',\n      ];\n    }\n\n    static #define() {\n      if (this.#isDefined) return;\n      this.#isDefined = true;\n\n      const propsToAttrs = new Set(this.observedAttributes);\n      // defaultMuted maps to the muted attribute, handled manually below.\n      propsToAttrs.delete('muted');\n\n      // Passthrough native el functions from the custom el to the native el\n      for (let prop of nativeElProps) {\n        if (prop in this.prototype) continue;\n\n        const type = typeof nativeElTest[prop];\n        if (type == 'function') {\n          // Function\n          this.prototype[prop] = function (...args) {\n            this.#init();\n\n            const fn = () => {\n              if (this.call) return this.call(prop, ...args);\n              return this.nativeEl[prop].apply(this.nativeEl, args);\n            };\n\n            return fn();\n          };\n        } else {\n          // Some properties like src, preload, defaultMuted are handled manually.\n\n          // Getter\n          let config = {\n            get() {\n              this.#init();\n\n              let attr = prop.toLowerCase();\n              if (propsToAttrs.has(attr)) {\n                const val = this.getAttribute(attr);\n                return val === null ? false : val === '' ? true : val;\n              }\n\n              return this.get?.(prop) ?? this.nativeEl?.[prop];\n            },\n          };\n\n          if (prop !== prop.toUpperCase()) {\n            // Setter (not a CONSTANT)\n            config.set = function (val) {\n              this.#init();\n\n              let attr = prop.toLowerCase();\n              if (propsToAttrs.has(attr)) {\n                if (val === true || val === false || val == null) {\n                  this.toggleAttribute(attr, Boolean(val));\n                } else {\n                  this.setAttribute(attr, val);\n                }\n                return;\n              }\n\n              if (this.set) {\n                this.set(prop, val);\n                return;\n              }\n\n              this.nativeEl[prop] = val;\n            };\n          }\n\n          Object.defineProperty(this.prototype, prop, config);\n        }\n      }\n    }\n\n    #isInit;\n    #nativeEl;\n    #childMap = new Map();\n\n    constructor() {\n      super();\n\n      // If the custom element is defined before the custom element's HTML is parsed\n      // no attributes will be available in the constructor (construction process).\n      // Wait until initializing in the attributeChangedCallback or\n      // connectedCallback or accessing any properties.\n    }\n\n    get nativeEl() {\n      this.#init();\n      return this.#nativeEl\n        ?? this.shadowRoot.querySelector(tag)\n        ?? this.querySelector(':scope > [slot=media]')\n        ?? this.querySelector(tag);\n    }\n\n    set nativeEl(val) {\n      this.#nativeEl = val;\n    }\n\n    get defaultMuted() {\n      return this.hasAttribute('muted');\n    }\n\n    set defaultMuted(val) {\n      this.toggleAttribute('muted', Boolean(val));\n    }\n\n    get src() {\n      return this.getAttribute('src');\n    }\n\n    set src(val) {\n      this.setAttribute('src', `${val}`);\n    }\n\n    get preload() {\n      return this.getAttribute('preload') ?? this.nativeEl?.preload;\n    }\n\n    set preload(val) {\n      this.setAttribute('preload', `${val}`);\n    }\n\n    #init() {\n      if (this.#isInit) return;\n      this.#isInit = true;\n      this.init();\n    }\n\n    init() {\n      if (!this.shadowRoot) {\n        this.attachShadow({ mode: 'open' });\n\n        const attrs = namedNodeMapToObject(this.attributes);\n        if (is) attrs.is = is;\n        if (tag) attrs.part = tag;\n        this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n      }\n\n      // Neither Chrome or Firefox support setting the muted attribute\n      // after using document.createElement.\n      // Get around this by setting the muted property manually.\n      this.nativeEl.muted = this.hasAttribute('muted');\n\n      for (let prop of nativeElProps) {\n        this.#upgradeProperty(prop);\n      }\n\n      this.shadowRoot.addEventListener('slotchange', this);\n      this.#syncMediaChildren();\n\n      for (let type of this.constructor.Events) {\n        this.shadowRoot.addEventListener?.(type, this, true);\n      }\n    }\n\n    handleEvent(event) {\n\n      if (event.type === 'slotchange') {\n        this.#syncMediaChildren();\n        return;\n      }\n\n      if (event.target === this.nativeEl) {\n        // The video events are dispatched on the CustomMediaElement instance.\n        // This makes it possible to add event listeners before the element is upgraded.\n        this.dispatchEvent(new CustomEvent(event.type, { detail: event.detail }));\n      }\n    }\n\n    /**\n     * Keep some native child elements like track and source in sync.\n     * An unnamed <slot> will be filled with all of the custom element's\n     * top-level child nodes that do not have the slot attribute.\n     */\n    #syncMediaChildren() {\n      const removeNativeChildren = new Map(this.#childMap);\n\n      this.shadowRoot.querySelector('slot:not([name])')\n        .assignedElements({ flatten: true })\n        .filter((el) => ['track', 'source'].includes(el.localName))\n        .forEach((el) => {\n          // If the source or track is still in the assigned elements keep it.\n          removeNativeChildren.delete(el);\n          // Re-use clones if possible.\n          let clone = this.#childMap.get(el);\n          if (!clone) {\n            clone = el.cloneNode();\n            this.#childMap.set(el, clone);\n          }\n          this.nativeEl.append?.(clone);\n\n          // https://html.spec.whatwg.org/multipage/media.html#sourcing-out-of-band-text-tracks\n          // If there are any text tracks in the media element's list of text\n          // tracks whose text track kind is chapters or metadata that\n          // correspond to track elements with a default attribute set whose\n          // text track mode is set to disabled, then set the text track\n          // mode of all such tracks to hidden.\n          if (\n            clone.localName === 'track' &&\n            clone.default &&\n            (clone.kind === 'chapters' || clone.kind === 'metadata') &&\n            clone.track.mode === 'disabled'\n          ) {\n            clone.track.mode = 'hidden';\n          }\n        });\n\n      removeNativeChildren.forEach((el) => el.remove());\n    }\n\n    #upgradeProperty(prop) {\n      // Sets properties that are set before the custom element is upgraded.\n      // https://web.dev/custom-elements-best-practices/#make-properties-lazy\n      if (Object.prototype.hasOwnProperty.call(this, prop)) {\n        const value = this[prop];\n        // Delete the set property from this instance.\n        delete this[prop];\n        // Set the value again via the (prototype) setter on this class.\n        this[prop] = value;\n      }\n    }\n\n    attributeChangedCallback(attrName, oldValue, newValue) {\n      // Initialize right after construction when the attributes become available.\n      this.#init();\n      this.#forwardAttribute(attrName, oldValue, newValue);\n    }\n\n    #forwardAttribute(attrName, oldValue, newValue) {\n      // Ignore a few that don't need to be passed.\n      if (['id', 'class'].includes(attrName)) {\n        return;\n      }\n\n      // Ignore setting custom attributes from the child class.\n      // They should not have any effect on the native element, it adds noise in the DOM.\n      if (!CustomMedia.observedAttributes.includes(attrName)\n        && this.constructor.observedAttributes.includes(attrName)\n      ) {\n        return;\n      }\n\n      if (newValue === null) {\n        this.nativeEl.removeAttribute?.(attrName);\n      } else {\n        if (this.nativeEl.getAttribute?.(attrName) != newValue) {\n          this.nativeEl.setAttribute?.(attrName, newValue);\n        }\n      }\n    }\n\n    connectedCallback() {\n      this.#init();\n    }\n  };\n};\n\nfunction getNativeElProps(nativeElTest) {\n  // Map all native element properties to the custom element\n  // so that they're applied to the native element.\n  // Skipping HTMLElement because of things like \"attachShadow\"\n  // causing issues. Most of those props still need to apply to\n  // the custom element.\n  let nativeElProps = [];\n\n  // Walk the prototype chain up to HTMLElement.\n  // This will grab all super class props in between.\n  // i.e. VideoElement and MediaElement\n  for (\n    let proto = Object.getPrototypeOf(nativeElTest);\n    proto && proto !== HTMLElement.prototype;\n    proto = Object.getPrototypeOf(proto)\n  ) {\n    nativeElProps.push(...Object.getOwnPropertyNames(proto));\n  }\n\n  return nativeElProps;\n}\n\nfunction serializeAttributes(attrs) {\n  let html = '';\n  for (const key in attrs) {\n    const value = attrs[key];\n    if (value === '') html += ` ${key}`;\n    else html += ` ${key}=\"${value}\"`;\n  }\n  return html;\n}\n\nfunction namedNodeMapToObject(namedNodeMap) {\n  let obj = {};\n  for (let attr of namedNodeMap) {\n    obj[attr.name] = attr.value;\n  }\n  return obj;\n}\n\nexport const CustomVideoElement = CustomMediaMixin(globalThis.HTMLElement ?? class {}, { tag: 'video' });\n\nexport const CustomAudioElement = CustomMediaMixin(globalThis.HTMLElement ?? class {}, { tag: 'audio' });\n", "/* global WeakRef */\n\nexport const privateProps = new WeakMap();\n\nexport class InvalidStateError extends Error {}\nexport class NotSupportedError extends Error {}\nexport class NotFoundError extends Error {}\n\n// Fallback to a plain Set if WeakRef is not available.\nexport const IterableWeakSet = globalThis.WeakRef ?\n  class extends Set {\n    add(el) {\n      super.add(new WeakRef(el));\n    }\n    forEach(fn) {\n      super.forEach((ref) => {\n        const value = ref.deref();\n        if (value) fn(value);\n      });\n    }\n  } : Set;\n\nexport function onCastApiAvailable(callback) {\n  if (!globalThis.chrome?.cast?.isAvailable) {\n    globalThis.__onGCastApiAvailable = () => {\n      // The globalThis.__onGCastApiAvailable callback alone is not reliable for\n      // the added cast.framework. It's loaded in a separate JS file.\n      // https://www.gstatic.com/eureka/clank/101/cast_sender.js\n      // https://www.gstatic.com/cast/sdk/libs/sender/1.0/cast_framework.js\n      customElements\n        .whenDefined('google-cast-button')\n        .then(callback);\n    };\n  } else if (!globalThis.cast?.framework) {\n    customElements\n      .whenDefined('google-cast-button')\n      .then(callback);\n  } else {\n    callback();\n  }\n}\n\nexport function requiresCastFramework() {\n  // todo: exclude for Android>=56 which supports the Remote Playback API natively.\n  return globalThis.chrome;\n}\n\nexport function loadCastFramework() {\n  const sdkUrl = 'https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1';\n  if (globalThis.chrome?.cast || document.querySelector(`script[src=\"${sdkUrl}\"]`)) return;\n\n  const script = document.createElement('script');\n  script.src = sdkUrl;\n  document.head.append(script);\n}\n\nexport function castContext() {\n  return globalThis.cast?.framework?.CastContext.getInstance();\n}\n\nexport function currentSession() {\n  return castContext()?.getCurrentSession();\n}\n\nexport function currentMedia() {\n  return currentSession()?.getSessionObj().media[0];\n}\n\nexport function editTracksInfo(request) {\n  return new Promise((resolve, reject) => {\n    currentMedia().editTracksInfo(request, resolve, reject);\n  });\n}\n\nexport function getMediaStatus(request) {\n  return new Promise((resolve, reject) => {\n    currentMedia().getStatus(request, resolve, reject);\n  });\n}\n\nexport function setCastOptions(options) {\n  return castContext().setOptions({\n    ...getDefaultCastOptions(),\n    ...options,\n  });\n}\n\nexport function getDefaultCastOptions() {\n  return {\n    // Set the receiver application ID to your own (created in the\n    // Google Cast Developer Console), or optionally\n    // use the chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID\n    receiverApplicationId: 'CC1AD845',\n\n    // Auto join policy can be one of the following three:\n    // ORIGIN_SCOPED - Auto connect from same appId and page origin\n    // TAB_AND_ORIGIN_SCOPED - Auto connect from same appId, page origin, and tab\n    // PAGE_SCOPED - No auto connect\n    autoJoinPolicy: 'origin_scoped',\n\n    // The following flag enables Cast Connect(requires Chrome 87 or higher)\n    // https://developers.googleblog.com/2020/08/introducing-cast-connect-android-tv.html\n    androidReceiverCompatible: false,\n\n    language: 'en-US',\n    resumeSavedSession: true,\n  };\n}\n", "/* global chrome, cast */\nimport {\n  privateProps,\n  IterableWeakSet,\n  InvalidStateError,\n  NotSupportedError,\n  onCastApiAvailable,\n  castContext,\n  currentSession,\n  currentMedia,\n  editTracksInfo,\n  getMediaStatus,\n  setCastOptions\n} from './castable-utils.js';\n\nconst remoteInstances = new IterableWeakSet();\nconst castElementRef = new WeakSet();\n\nlet cf;\n\nonCastApiAvailable(() => {\n  if (!globalThis.chrome?.cast?.isAvailable) {\n    // Useful to see in verbose logs if this shows undefined or false.\n    console.debug('chrome.cast.isAvailable', globalThis.chrome?.cast?.isAvailable);\n    return;\n  }\n\n  if (!cf) {\n    cf = cast.framework;\n\n    castContext().addEventListener(cf.CastContextEventType.CAST_STATE_CHANGED, (e) => {\n      remoteInstances.forEach((r) => privateProps.get(r).onCastStateChanged?.(e));\n    });\n\n    castContext().addEventListener(cf.CastContextEventType.SESSION_STATE_CHANGED, (e) => {\n      remoteInstances.forEach((r) => privateProps.get(r).onSessionStateChanged?.(e));\n    });\n\n    remoteInstances.forEach((r) => privateProps.get(r).init?.());\n  }\n});\n\n\nlet remotePlaybackCallbackIdCount = 0;\n\n/**\n * Remote Playback shim for the Google cast SDK.\n * https://w3c.github.io/remote-playback/\n */\nexport class RemotePlayback extends EventTarget {\n  #media;\n  #isInit;\n  #remotePlayer;\n  #remoteListeners;\n  #state = 'disconnected';\n  #available = false;\n  #callbacks = new Set();\n  #callbackIds = new WeakMap();\n\n  constructor(media) {\n    super();\n\n    this.#media = media;\n\n    remoteInstances.add(this);\n    privateProps.set(this, {\n      init: () => this.#init(),\n      onCastStateChanged: () => this.#onCastStateChanged(),\n      onSessionStateChanged: () => this.#onSessionStateChanged(),\n      getCastPlayer: () => this.#castPlayer,\n    });\n\n    this.#init();\n  }\n\n  get #castPlayer() {\n    if (castElementRef.has(this.#media)) return this.#remotePlayer;\n    return undefined;\n  }\n\n  /**\n   * https://developer.mozilla.org/en-US/docs/Web/API/RemotePlayback/state\n   * @return {'disconnected'|'connecting'|'connected'}\n   */\n  get state() {\n    return this.#state;\n  }\n\n  async watchAvailability(callback) {\n    if (this.#media.disableRemotePlayback) {\n      throw new InvalidStateError('disableRemotePlayback attribute is present.');\n    }\n\n    this.#callbackIds.set(callback, ++remotePlaybackCallbackIdCount);\n    this.#callbacks.add(callback);\n\n    return remotePlaybackCallbackIdCount;\n  }\n\n  async cancelWatchAvailability(callback) {\n    if (this.#media.disableRemotePlayback) {\n      throw new InvalidStateError('disableRemotePlayback attribute is present.');\n    }\n\n    if (callback) {\n      this.#callbacks.delete(callback);\n    } else {\n      this.#callbacks.clear();\n    }\n  }\n\n  async prompt() {\n    if (this.#media.disableRemotePlayback) {\n      throw new InvalidStateError('disableRemotePlayback attribute is present.');\n    }\n\n    if (!globalThis.chrome?.cast?.isAvailable) {\n      throw new NotSupportedError('The RemotePlayback API is disabled on this platform.');\n    }\n\n    const willDisconnect = castElementRef.has(this.#media);\n    castElementRef.add(this.#media);\n\n    setCastOptions(this.#media.castOptions);\n\n    Object.entries(this.#remoteListeners).forEach(([event, listener]) => {\n      this.#remotePlayer.controller.addEventListener(event, listener);\n    });\n\n    try {\n      // Open browser cast menu.\n      await castContext().requestSession();\n    } catch (err) {\n      // Don't throw an error if disconnecting or cancelling.\n      if (err === 'cancel') {\n        // If there will be no disconnect, reset some state here.\n        if (!willDisconnect) {\n          castElementRef.delete(this.#media);\n        }\n        return;\n      }\n\n      throw new Error(err);\n    }\n\n    privateProps.get(this.#media)?.loadOnPrompt?.();\n  }\n\n  #disconnect() {\n    if (!castElementRef.has(this.#media)) return;\n\n    Object.entries(this.#remoteListeners).forEach(([event, listener]) => {\n      this.#remotePlayer.controller.removeEventListener(event, listener);\n    });\n\n    castElementRef.delete(this.#media);\n\n    // isMuted is not in savedPlayerState. should we sync this back to local?\n    this.#media.muted = this.#remotePlayer.isMuted;\n    this.#media.currentTime = this.#remotePlayer.savedPlayerState.currentTime;\n    if (this.#remotePlayer.savedPlayerState.isPaused === false) {\n      this.#media.play();\n    }\n  }\n\n  #onCastStateChanged() {\n    // Cast state: NO_DEVICES_AVAILABLE, NOT_CONNECTED, CONNECTING, CONNECTED\n    // https://developers.google.com/cast/docs/reference/web_sender/cast.framework#.CastState\n    const castState = castContext().getCastState();\n\n    if (castElementRef.has(this.#media)) {\n      if (castState === 'CONNECTING') {\n        this.#state = 'connecting';\n        this.dispatchEvent(new Event('connecting'));\n      }\n    }\n\n    if (!this.#available && castState?.includes('CONNECT')) {\n      this.#available = true;\n      for (let callback of this.#callbacks) callback(true);\n    }\n    else if (this.#available && (!castState || castState === 'NO_DEVICES_AVAILABLE')) {\n      this.#available = false;\n      for (let callback of this.#callbacks) callback(false);\n    }\n  }\n\n  async #onSessionStateChanged() {\n    // Session states: NO_SESSION, SESSION_STARTING, SESSION_STARTED, SESSION_START_FAILED,\n    //                 SESSION_ENDING, SESSION_ENDED, SESSION_RESUMED\n    // https://developers.google.com/cast/docs/reference/web_sender/cast.framework#.SessionState\n\n    const { SESSION_RESUMED } = cf.SessionState;\n    if (castContext().getSessionState() === SESSION_RESUMED) {\n      /**\n       * Figure out if this was the video that started the resumed session.\n       * @TODO make this more specific than just checking against the video src!! (WL)\n       *\n       * If this video element can get the same unique id on each browser refresh\n       * it would be possible to pass this unique id w/ `LoadRequest.customData`\n       * and verify against currentMedia().customData below.\n       */\n      if (this.#media.castSrc === currentMedia()?.media.contentId) {\n        castElementRef.add(this.#media);\n\n        Object.entries(this.#remoteListeners).forEach(([event, listener]) => {\n          this.#remotePlayer.controller.addEventListener(event, listener);\n        });\n\n        /**\n         * There is cast framework resume session bug when you refresh the page a few\n         * times the this.#remotePlayer.currentTime will not be in sync with the receiver :(\n         * The below status request syncs it back up.\n         */\n        try {\n          await getMediaStatus(new chrome.cast.media.GetStatusRequest());\n        } catch (error) {\n          console.error(error);\n        }\n\n        // Dispatch the play, playing events manually to sync remote playing state.\n        this.#remoteListeners[cf.RemotePlayerEventType.IS_PAUSED_CHANGED]();\n        this.#remoteListeners[cf.RemotePlayerEventType.PLAYER_STATE_CHANGED]();\n      }\n    }\n  }\n\n  #init() {\n    if (!cf || this.#isInit) return;\n    this.#isInit = true;\n\n    setCastOptions(this.#media.castOptions);\n\n    /**\n     * @TODO add listeners for addtrack, removetrack (WL)\n     * This only has an impact on <track> with a `src` because these have to be\n     * loaded manually in the load() method. This will require a new load() call\n     * for each added/removed track w/ src.\n     */\n    this.#media.textTracks.addEventListener('change', () => this.#updateRemoteTextTrack());\n\n    this.#onCastStateChanged();\n\n    this.#remotePlayer = new cf.RemotePlayer();\n    new cf.RemotePlayerController(this.#remotePlayer);\n\n    this.#remoteListeners = {\n      [cf.RemotePlayerEventType.IS_CONNECTED_CHANGED]: ({ value }) => {\n        if (value === true) {\n          this.#state = 'connected';\n          this.dispatchEvent(new Event('connect'));\n        } else {\n          this.#disconnect();\n          this.#state = 'disconnected';\n          this.dispatchEvent(new Event('disconnect'));\n        }\n      },\n      [cf.RemotePlayerEventType.DURATION_CHANGED]: () => {\n        this.#media.dispatchEvent(new Event('durationchange'));\n      },\n      [cf.RemotePlayerEventType.VOLUME_LEVEL_CHANGED]: () => {\n        this.#media.dispatchEvent(new Event('volumechange'));\n      },\n      [cf.RemotePlayerEventType.IS_MUTED_CHANGED]: () => {\n        this.#media.dispatchEvent(new Event('volumechange'));\n      },\n      [cf.RemotePlayerEventType.CURRENT_TIME_CHANGED]: () => {\n        if (!this.#castPlayer?.isMediaLoaded) return;\n        this.#media.dispatchEvent(new Event('timeupdate'));\n      },\n      [cf.RemotePlayerEventType.VIDEO_INFO_CHANGED]: () => {\n        this.#media.dispatchEvent(new Event('resize'));\n      },\n      [cf.RemotePlayerEventType.IS_PAUSED_CHANGED]: () => {\n        this.#media.dispatchEvent(new Event(this.paused ? 'pause' : 'play'));\n      },\n      [cf.RemotePlayerEventType.PLAYER_STATE_CHANGED]: () => {\n        // Player states: IDLE, PLAYING, PAUSED, BUFFERING\n        // https://developers.google.com/cast/docs/reference/web_sender/chrome.cast.media#.PlayerState\n\n        // pause event is handled above.\n        if (this.#castPlayer?.playerState === chrome.cast.media.PlayerState.PAUSED) {\n          return;\n        }\n\n        this.#media.dispatchEvent(\n          new Event(\n            {\n              [chrome.cast.media.PlayerState.PLAYING]: 'playing',\n              [chrome.cast.media.PlayerState.BUFFERING]: 'waiting',\n              [chrome.cast.media.PlayerState.IDLE]: 'emptied',\n            }[this.#castPlayer?.playerState]\n          )\n        );\n      },\n      [cf.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED]: async () => {\n        if (!this.#castPlayer?.isMediaLoaded) return;\n\n        // mediaInfo is not immediately available due to a bug? wait one tick\n        await Promise.resolve();\n        this.#onRemoteMediaLoaded();\n      },\n    };\n  }\n\n  #onRemoteMediaLoaded() {\n    this.#updateRemoteTextTrack();\n  }\n\n  async #updateRemoteTextTrack() {\n    if (!this.#castPlayer) return;\n\n    // Get the tracks w/ trackId's that have been loaded; manually or via a playlist like a M3U8 or MPD.\n    const remoteTracks = this.#remotePlayer.mediaInfo?.tracks ?? [];\n    const remoteSubtitles = remoteTracks.filter(\n      ({ type }) => type === chrome.cast.media.TrackType.TEXT\n    );\n\n    const localSubtitles = [...this.#media.textTracks].filter(\n      ({ kind }) => kind === 'subtitles' || kind === 'captions'\n    );\n\n    // Create a new array from the local subs w/ the trackId's from the remote subs.\n    const subtitles = remoteSubtitles\n      .map(({ language, name, trackId }) => {\n        // Find the corresponding local text track and assign the trackId.\n        const { mode } =\n          localSubtitles.find(\n            (local) => local.language === language && local.label === name\n          ) ?? {};\n        if (mode) return { mode, trackId };\n        return false;\n      })\n      .filter(Boolean);\n\n    const hiddenSubtitles = subtitles.filter(\n      ({ mode }) => mode !== 'showing'\n    );\n    const hiddenTrackIds = hiddenSubtitles.map(({ trackId }) => trackId);\n    const showingSubtitle = subtitles.find(({ mode }) => mode === 'showing');\n\n    // Note this could also include audio or video tracks, diff against local state.\n    const activeTrackIds =\n      currentSession()?.getSessionObj().media[0]\n        ?.activeTrackIds ?? [];\n    let requestTrackIds = activeTrackIds;\n\n    if (activeTrackIds.length) {\n      // Filter out all local hidden subtitle trackId's.\n      requestTrackIds = requestTrackIds.filter(\n        (id) => !hiddenTrackIds.includes(id)\n      );\n    }\n\n    if (showingSubtitle?.trackId) {\n      requestTrackIds = [...requestTrackIds, showingSubtitle.trackId];\n    }\n\n    // Remove duplicate ids.\n    requestTrackIds = [...new Set(requestTrackIds)];\n\n    const arrayEquals = (a, b) =>\n      a.length === b.length && a.every((a) => b.includes(a));\n    if (!arrayEquals(activeTrackIds, requestTrackIds)) {\n      try {\n        const request = new chrome.cast.media.EditTracksInfoRequest(\n          requestTrackIds\n        );\n        await editTracksInfo(request);\n      } catch (error) {\n        console.error(error);\n      }\n    }\n  }\n}\n", "/* global chrome */\nimport { RemotePlayback } from './castable-remote-playback.js';\nimport {\n  privateProps,\n  requiresCastFramework,\n  loadCastFramework,\n  currentSession,\n  getDefaultCastOptions\n} from './castable-utils.js';\n\n/**\n * CastableMediaMixin\n *\n * This mixin function provides a way to compose multiple classes.\n * @see https://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes/\n *\n * @param  {HTMLMediaElement} superclass - HTMLMediaElement or an extended class of it.\n * @return {CastableMedia}\n */\nexport const CastableMediaMixin = (superclass) =>\n  class CastableMedia extends superclass {\n\n    static observedAttributes = [\n      ...(superclass.observedAttributes ?? []),\n      'cast-src',\n      'cast-content-type',\n      'cast-stream-type',\n      'cast-receiver',\n    ];\n\n    #localState = { paused: false };\n    #castOptions = getDefaultCastOptions();\n    #castCustomData;\n    #remote;\n\n    get remote() {\n      if (this.#remote) return this.#remote;\n\n      if (requiresCastFramework()) {\n        loadCastFramework();\n\n        privateProps.set(this, {\n          loadOnPrompt: () => this.#loadOnPrompt()\n        });\n\n        return (this.#remote = new RemotePlayback(this));\n      }\n\n      return super.remote;\n    }\n\n    get #castPlayer() {\n      return privateProps.get(this.remote)?.getCastPlayer?.();\n    }\n\n    attributeChangedCallback(attrName, oldValue, newValue) {\n      super.attributeChangedCallback(attrName, oldValue, newValue);\n\n      if (attrName === 'cast-receiver' && newValue) {\n        this.#castOptions.receiverApplicationId = newValue;\n        return;\n      }\n\n      if (!this.#castPlayer) return;\n\n      switch (attrName) {\n        case 'cast-stream-type':\n        case 'cast-src':\n          this.load();\n          break;\n      }\n    }\n\n    async #loadOnPrompt() {\n      // Pause locally when the session is created.\n      this.#localState.paused = super.paused;\n      super.pause();\n\n      // Sync over the muted state but not volume, 100% is different on TV's :P\n      this.muted = super.muted;\n\n      try {\n        await this.load();\n      } catch (err) {\n        console.error(err);\n      }\n    }\n\n    async load() {\n      if (!this.#castPlayer) return super.load();\n\n      const mediaInfo = new chrome.cast.media.MediaInfo(this.castSrc, this.castContentType);\n      mediaInfo.customData = this.castCustomData;\n\n      // Manually add text tracks with a `src` attribute.\n      // M3U8's load text tracks in the receiver, handle these in the media loaded event.\n      const subtitles = [...this.querySelectorAll('track')].filter(\n        ({ kind, src }) => src && (kind === 'subtitles' || kind === 'captions')\n      );\n\n      const activeTrackIds = [];\n      let textTrackIdCount = 0;\n\n      if (subtitles.length) {\n        mediaInfo.tracks = subtitles.map((trackEl) => {\n          const trackId = ++textTrackIdCount;\n          // only activate 1 subtitle text track.\n          if (activeTrackIds.length === 0 && trackEl.track.mode === 'showing') {\n            activeTrackIds.push(trackId);\n          }\n\n          const track = new chrome.cast.media.Track(\n            trackId,\n            chrome.cast.media.TrackType.TEXT\n          );\n          track.trackContentId = trackEl.src;\n          track.trackContentType = 'text/vtt';\n          track.subtype =\n            trackEl.kind === 'captions'\n              ? chrome.cast.media.TextTrackType.CAPTIONS\n              : chrome.cast.media.TextTrackType.SUBTITLES;\n          track.name = trackEl.label;\n          track.language = trackEl.srclang;\n          return track;\n        });\n      }\n\n      if (this.castStreamType === 'live') {\n        mediaInfo.streamType = chrome.cast.media.StreamType.LIVE;\n      } else {\n        mediaInfo.streamType = chrome.cast.media.StreamType.BUFFERED;\n      }\n\n      mediaInfo.metadata = new chrome.cast.media.GenericMediaMetadata();\n      mediaInfo.metadata.title = this.title;\n      mediaInfo.metadata.images = [{ url: this.poster }];\n\n      const request = new chrome.cast.media.LoadRequest(mediaInfo);\n      request.currentTime = super.currentTime ?? 0;\n      request.autoplay = !this.#localState.paused;\n      request.activeTrackIds = activeTrackIds;\n\n      await currentSession()?.loadMedia(request);\n\n      this.dispatchEvent(new Event('volumechange'));\n    }\n\n    play() {\n      if (this.#castPlayer) {\n        if (this.#castPlayer.isPaused) {\n          this.#castPlayer.controller?.playOrPause();\n        }\n        return;\n      }\n      return super.play();\n    }\n\n    pause() {\n      if (this.#castPlayer) {\n        if (!this.#castPlayer.isPaused) {\n          this.#castPlayer.controller?.playOrPause();\n        }\n        return;\n      }\n      super.pause();\n    }\n\n    /**\n     * @see https://developers.google.com/cast/docs/reference/web_sender/cast.framework.CastOptions\n     * @readonly\n     *\n     * @typedef {Object} CastOptions\n     * @property {string} [receiverApplicationId='CC1AD845'] - The app id of the cast receiver.\n     * @property {string} [autoJoinPolicy='origin_scoped'] - The auto join policy.\n     * @property {string} [language='en-US'] - The language to use for the cast receiver.\n     * @property {boolean} [androidReceiverCompatible=false] - Whether to use the Cast Connect.\n     * @property {boolean} [resumeSavedSession=true] - Whether to resume the last session.\n     *\n     * @return {CastOptions}\n     */\n    get castOptions() {\n      return this.#castOptions;\n    }\n\n    get castReceiver() {\n      return this.getAttribute('cast-receiver') ?? undefined;\n    }\n\n    set castReceiver(val) {\n      if (this.castReceiver == val) return;\n      this.setAttribute('cast-receiver', `${val}`);\n    }\n\n    // Allow the cast source url to be different than <video src>, could be a blob.\n    get castSrc() {\n      // Try the first <source src> for usage with even more native markup.\n      return (\n        this.getAttribute('cast-src') ??\n        this.querySelector('source')?.src ??\n        this.currentSrc\n      );\n    }\n\n    set castSrc(val) {\n      if (this.castSrc == val) return;\n      this.setAttribute('cast-src', `${val}`);\n    }\n\n    get castContentType() {\n      return this.getAttribute('cast-content-type') ?? undefined;\n    }\n\n    set castContentType(val) {\n      this.setAttribute('cast-content-type', `${val}`);\n    }\n\n    get castStreamType() {\n      // NOTE: Per https://github.com/video-dev/media-ui-extensions/issues/3 `streamType` may yield `\"unknown\"`\n      return this.getAttribute('cast-stream-type') ?? this.streamType ?? undefined;\n    }\n\n    set castStreamType(val) {\n      this.setAttribute('cast-stream-type', `${val}`);\n    }\n\n    get castCustomData() {\n      return this.#castCustomData;\n    }\n\n    set castCustomData(val) {\n      const valType = typeof val;\n      if (!['object', 'undefined'].includes(valType)) {\n        console.error(`castCustomData must be nullish or an object but value was of type ${valType}`);\n        return;\n      }\n\n      this.#castCustomData = val;\n    }\n\n    get readyState() {\n      if (this.#castPlayer) {\n        switch (this.#castPlayer.playerState) {\n          case chrome.cast.media.PlayerState.IDLE:\n            return 0;\n          case chrome.cast.media.PlayerState.BUFFERING:\n            return 2;\n          default:\n            return 3;\n        }\n      }\n      return super.readyState;\n    }\n\n    get paused() {\n      if (this.#castPlayer) return this.#castPlayer.isPaused;\n      return super.paused;\n    }\n\n    get muted() {\n      if (this.#castPlayer) return this.#castPlayer?.isMuted;\n      return super.muted;\n    }\n\n    set muted(val) {\n      if (this.#castPlayer) {\n        if (\n          (val && !this.#castPlayer.isMuted) ||\n          (!val && this.#castPlayer.isMuted)\n        ) {\n          this.#castPlayer.controller?.muteOrUnmute();\n        }\n        return;\n      }\n      super.muted = val;\n    }\n\n    get volume() {\n      if (this.#castPlayer) return this.#castPlayer?.volumeLevel ?? 1;\n      return super.volume;\n    }\n\n    set volume(val) {\n      if (this.#castPlayer) {\n        this.#castPlayer.volumeLevel = +val;\n        this.#castPlayer.controller?.setVolumeLevel();\n        return;\n      }\n      super.volume = val;\n    }\n\n    get duration() {\n      // castPlayer duration returns `0` when no media is loaded.\n      if (this.#castPlayer && this.#castPlayer?.isMediaLoaded) {\n        return this.#castPlayer?.duration ?? NaN;\n      }\n      return super.duration;\n    }\n\n    get currentTime() {\n      if (this.#castPlayer && this.#castPlayer?.isMediaLoaded) {\n        return this.#castPlayer?.currentTime ?? 0;\n      }\n      return super.currentTime;\n    }\n\n    set currentTime(val) {\n      if (this.#castPlayer) {\n        this.#castPlayer.currentTime = val;\n        this.#castPlayer.controller?.seek();\n        return;\n      }\n      super.currentTime = val;\n    }\n  };\n\nexport const CastableVideoMixin = CastableMediaMixin;\n", "class TrackEvent extends Event {\n  track;\n  constructor(type, init) {\n    super(type);\n    this.track = init.track;\n  }\n}\nexport {\n  TrackEvent\n};\n", "const privateProps = /* @__PURE__ */ new WeakMap();\nfunction getPrivate(instance) {\n  return privateProps.get(instance) ?? setPrivate(instance, {});\n}\nfunction setPrivate(instance, props) {\n  let saved = privateProps.get(instance);\n  if (!saved) privateProps.set(instance, saved = {});\n  return Object.assign(saved, props);\n}\nexport {\n  getPrivate,\n  setPrivate\n};\n", "import { TrackEvent } from \"./track-event.js\";\nimport { getPrivate } from \"./utils.js\";\nfunction addVideoTrack(media, track) {\n  const trackList = media.videoTracks;\n  getPrivate(track).media = media;\n  if (!getPrivate(track).renditionSet) {\n    getPrivate(track).renditionSet = /* @__PURE__ */ new Set();\n  }\n  const trackSet = getPrivate(trackList).trackSet;\n  trackSet.add(track);\n  const index = trackSet.size - 1;\n  if (!(index in VideoTrackList.prototype)) {\n    Object.defineProperty(VideoTrackList.prototype, index, {\n      get() {\n        return [...getPrivate(this).trackSet][index];\n      }\n    });\n  }\n  queueMicrotask(() => {\n    trackList.dispatchEvent(new TrackEvent(\"addtrack\", { track }));\n  });\n}\nfunction removeVideoTrack(track) {\n  const trackList = getPrivate(track).media?.videoTracks;\n  if (!trackList) return;\n  const trackSet = getPrivate(trackList).trackSet;\n  trackSet.delete(track);\n  queueMicrotask(() => {\n    trackList.dispatchEvent(new TrackEvent(\"removetrack\", { track }));\n  });\n}\nfunction selectedChanged(selected) {\n  const trackList = getPrivate(selected).media.videoTracks ?? [];\n  let hasUnselected = false;\n  for (const track of trackList) {\n    if (track === selected) continue;\n    track.selected = false;\n    hasUnselected = true;\n  }\n  if (hasUnselected) {\n    if (getPrivate(trackList).changeRequested) return;\n    getPrivate(trackList).changeRequested = true;\n    queueMicrotask(() => {\n      delete getPrivate(trackList).changeRequested;\n      trackList.dispatchEvent(new Event(\"change\"));\n    });\n  }\n}\nclass VideoTrackList extends EventTarget {\n  #addTrackCallback;\n  #removeTrackCallback;\n  #changeCallback;\n  constructor() {\n    super();\n    getPrivate(this).trackSet = /* @__PURE__ */ new Set();\n  }\n  get #tracks() {\n    return getPrivate(this).trackSet;\n  }\n  [Symbol.iterator]() {\n    return this.#tracks.values();\n  }\n  get length() {\n    return this.#tracks.size;\n  }\n  getTrackById(id) {\n    return [...this.#tracks].find((track) => track.id === id) ?? null;\n  }\n  get selectedIndex() {\n    return [...this.#tracks].findIndex((track) => track.selected);\n  }\n  get onaddtrack() {\n    return this.#addTrackCallback;\n  }\n  set onaddtrack(callback) {\n    if (this.#addTrackCallback) {\n      this.removeEventListener(\"addtrack\", this.#addTrackCallback);\n      this.#addTrackCallback = void 0;\n    }\n    if (typeof callback == \"function\") {\n      this.#addTrackCallback = callback;\n      this.addEventListener(\"addtrack\", callback);\n    }\n  }\n  get onremovetrack() {\n    return this.#removeTrackCallback;\n  }\n  set onremovetrack(callback) {\n    if (this.#removeTrackCallback) {\n      this.removeEventListener(\"removetrack\", this.#removeTrackCallback);\n      this.#removeTrackCallback = void 0;\n    }\n    if (typeof callback == \"function\") {\n      this.#removeTrackCallback = callback;\n      this.addEventListener(\"removetrack\", callback);\n    }\n  }\n  get onchange() {\n    return this.#changeCallback;\n  }\n  set onchange(callback) {\n    if (this.#changeCallback) {\n      this.removeEventListener(\"change\", this.#changeCallback);\n      this.#changeCallback = void 0;\n    }\n    if (typeof callback == \"function\") {\n      this.#changeCallback = callback;\n      this.addEventListener(\"change\", callback);\n    }\n  }\n}\nexport {\n  VideoTrackList,\n  addVideoTrack,\n  removeVideoTrack,\n  selectedChanged\n};\n", "class RenditionEvent extends Event {\n  rendition;\n  constructor(type, init) {\n    super(type);\n    this.rendition = init.rendition;\n  }\n}\nexport {\n  RenditionEvent\n};\n", "import { RenditionEvent } from \"./rendition-event.js\";\nimport { getPrivate } from \"./utils.js\";\nfunction addRendition(track, rendition) {\n  const renditionList = getPrivate(track).media.videoRenditions;\n  getPrivate(rendition).media = getPrivate(track).media;\n  getPrivate(rendition).track = track;\n  const renditionSet = getPrivate(track).renditionSet;\n  renditionSet.add(rendition);\n  const index = renditionSet.size - 1;\n  if (!(index in VideoRenditionList.prototype)) {\n    Object.defineProperty(VideoRenditionList.prototype, index, {\n      get() {\n        return getCurrentRenditions(this)[index];\n      }\n    });\n  }\n  queueMicrotask(() => {\n    if (!track.selected) return;\n    renditionList.dispatchEvent(new RenditionEvent(\"addrendition\", { rendition }));\n  });\n}\nfunction removeRendition(rendition) {\n  const renditionList = getPrivate(rendition).media.videoRenditions;\n  const track = getPrivate(rendition).track;\n  const renditionSet = getPrivate(track).renditionSet;\n  renditionSet.delete(rendition);\n  queueMicrotask(() => {\n    const track2 = getPrivate(rendition).track;\n    if (!track2.selected) return;\n    renditionList.dispatchEvent(new RenditionEvent(\"removerendition\", { rendition }));\n  });\n}\nfunction selectedChanged(rendition) {\n  const renditionList = getPrivate(rendition).media.videoRenditions;\n  if (!renditionList || getPrivate(renditionList).changeRequested) return;\n  getPrivate(renditionList).changeRequested = true;\n  queueMicrotask(() => {\n    delete getPrivate(renditionList).changeRequested;\n    const track = getPrivate(rendition).track;\n    if (!track.selected) return;\n    renditionList.dispatchEvent(new Event(\"change\"));\n  });\n}\nfunction getCurrentRenditions(renditionList) {\n  const media = getPrivate(renditionList).media;\n  return [...media.videoTracks].filter((track) => track.selected).flatMap((track) => [...getPrivate(track).renditionSet]);\n}\nclass VideoRenditionList extends EventTarget {\n  #addRenditionCallback;\n  #removeRenditionCallback;\n  #changeCallback;\n  [Symbol.iterator]() {\n    return getCurrentRenditions(this).values();\n  }\n  get length() {\n    return getCurrentRenditions(this).length;\n  }\n  getRenditionById(id) {\n    return getCurrentRenditions(this).find((rendition) => `${rendition.id}` === `${id}`) ?? null;\n  }\n  get selectedIndex() {\n    return getCurrentRenditions(this).findIndex((rendition) => rendition.selected);\n  }\n  set selectedIndex(index) {\n    for (const [i, rendition] of getCurrentRenditions(this).entries()) {\n      rendition.selected = i === index;\n    }\n  }\n  get onaddrendition() {\n    return this.#addRenditionCallback;\n  }\n  set onaddrendition(callback) {\n    if (this.#addRenditionCallback) {\n      this.removeEventListener(\"addrendition\", this.#addRenditionCallback);\n      this.#addRenditionCallback = void 0;\n    }\n    if (typeof callback == \"function\") {\n      this.#addRenditionCallback = callback;\n      this.addEventListener(\"addrendition\", callback);\n    }\n  }\n  get onremoverendition() {\n    return this.#removeRenditionCallback;\n  }\n  set onremoverendition(callback) {\n    if (this.#removeRenditionCallback) {\n      this.removeEventListener(\"removerendition\", this.#removeRenditionCallback);\n      this.#removeRenditionCallback = void 0;\n    }\n    if (typeof callback == \"function\") {\n      this.#removeRenditionCallback = callback;\n      this.addEventListener(\"removerendition\", callback);\n    }\n  }\n  get onchange() {\n    return this.#changeCallback;\n  }\n  set onchange(callback) {\n    if (this.#changeCallback) {\n      this.removeEventListener(\"change\", this.#changeCallback);\n      this.#changeCallback = void 0;\n    }\n    if (typeof callback == \"function\") {\n      this.#changeCallback = callback;\n      this.addEventListener(\"change\", callback);\n    }\n  }\n}\nexport {\n  VideoRenditionList,\n  addRendition,\n  removeRendition,\n  selectedChanged\n};\n", "import { selectedChanged } from \"./video-rendition-list.js\";\nclass VideoRendition {\n  src;\n  id;\n  width;\n  height;\n  bitrate;\n  frameRate;\n  codec;\n  #selected = false;\n  get selected() {\n    return this.#selected;\n  }\n  set selected(val) {\n    if (this.#selected === val) return;\n    this.#selected = val;\n    selectedChanged(this);\n  }\n}\nexport {\n  VideoRendition\n};\n", "import { selectedChanged } from \"./video-track-list.js\";\nimport { VideoRendition } from \"./video-rendition.js\";\nimport { addRendition, removeRendition } from \"./video-rendition-list.js\";\nconst VideoTrackKind = {\n  alternative: \"alternative\",\n  captions: \"captions\",\n  main: \"main\",\n  sign: \"sign\",\n  subtitles: \"subtitles\",\n  commentary: \"commentary\"\n};\nclass VideoTrack {\n  id;\n  kind;\n  label = \"\";\n  language = \"\";\n  sourceBuffer;\n  #selected = false;\n  addRendition(src, width, height, codec, bitrate, frameRate) {\n    const rendition = new VideoRendition();\n    rendition.src = src;\n    rendition.width = width;\n    rendition.height = height;\n    rendition.frameRate = frameRate;\n    rendition.bitrate = bitrate;\n    rendition.codec = codec;\n    addRendition(this, rendition);\n    return rendition;\n  }\n  removeRendition(rendition) {\n    removeRendition(rendition);\n  }\n  get selected() {\n    return this.#selected;\n  }\n  set selected(val) {\n    if (this.#selected === val) return;\n    this.#selected = val;\n    if (val !== true) return;\n    selectedChanged(this);\n  }\n}\nexport {\n  VideoTrack,\n  VideoTrackKind\n};\n", "import { RenditionEvent } from \"./rendition-event.js\";\nimport { getPrivate } from \"./utils.js\";\nfunction addRendition(track, rendition) {\n  const renditionList = getPrivate(track).media.audioRenditions;\n  getPrivate(rendition).media = getPrivate(track).media;\n  getPrivate(rendition).track = track;\n  const renditionSet = getPrivate(track).renditionSet;\n  renditionSet.add(rendition);\n  const index = renditionSet.size - 1;\n  if (!(index in AudioRenditionList.prototype)) {\n    Object.defineProperty(AudioRenditionList.prototype, index, {\n      get() {\n        return getCurrentRenditions(this)[index];\n      }\n    });\n  }\n  queueMicrotask(() => {\n    if (!track.enabled) return;\n    renditionList.dispatchEvent(new RenditionEvent(\"addrendition\", { rendition }));\n  });\n}\nfunction removeRendition(rendition) {\n  const renditionList = getPrivate(rendition).media.audioRenditions;\n  const track = getPrivate(rendition).track;\n  const renditionSet = getPrivate(track).renditionSet;\n  renditionSet.delete(rendition);\n  queueMicrotask(() => {\n    const track2 = getPrivate(rendition).track;\n    if (!track2.enabled) return;\n    renditionList.dispatchEvent(new RenditionEvent(\"removerendition\", { rendition }));\n  });\n}\nfunction selectedChanged(rendition) {\n  const renditionList = getPrivate(rendition).media.audioRenditions;\n  if (!renditionList || getPrivate(renditionList).changeRequested) return;\n  getPrivate(renditionList).changeRequested = true;\n  queueMicrotask(() => {\n    delete getPrivate(renditionList).changeRequested;\n    const track = getPrivate(rendition).track;\n    if (!track.enabled) return;\n    renditionList.dispatchEvent(new Event(\"change\"));\n  });\n}\nfunction getCurrentRenditions(renditionList) {\n  const media = getPrivate(renditionList).media;\n  return [...media.audioTracks].filter((track) => track.enabled).flatMap((track) => [...getPrivate(track).renditionSet]);\n}\nclass AudioRenditionList extends EventTarget {\n  #addRenditionCallback;\n  #removeRenditionCallback;\n  #changeCallback;\n  [Symbol.iterator]() {\n    return getCurrentRenditions(this).values();\n  }\n  get length() {\n    return getCurrentRenditions(this).length;\n  }\n  getRenditionById(id) {\n    return getCurrentRenditions(this).find((rendition) => `${rendition.id}` === `${id}`) ?? null;\n  }\n  get selectedIndex() {\n    return getCurrentRenditions(this).findIndex((rendition) => rendition.selected);\n  }\n  set selectedIndex(index) {\n    for (const [i, rendition] of getCurrentRenditions(this).entries()) {\n      rendition.selected = i === index;\n    }\n  }\n  get onaddrendition() {\n    return this.#addRenditionCallback;\n  }\n  set onaddrendition(callback) {\n    if (this.#addRenditionCallback) {\n      this.removeEventListener(\"addrendition\", this.#addRenditionCallback);\n      this.#addRenditionCallback = void 0;\n    }\n    if (typeof callback == \"function\") {\n      this.#addRenditionCallback = callback;\n      this.addEventListener(\"addrendition\", callback);\n    }\n  }\n  get onremoverendition() {\n    return this.#removeRenditionCallback;\n  }\n  set onremoverendition(callback) {\n    if (this.#removeRenditionCallback) {\n      this.removeEventListener(\"removerendition\", this.#removeRenditionCallback);\n      this.#removeRenditionCallback = void 0;\n    }\n    if (typeof callback == \"function\") {\n      this.#removeRenditionCallback = callback;\n      this.addEventListener(\"removerendition\", callback);\n    }\n  }\n  get onchange() {\n    return this.#changeCallback;\n  }\n  set onchange(callback) {\n    if (this.#changeCallback) {\n      this.removeEventListener(\"change\", this.#changeCallback);\n      this.#changeCallback = void 0;\n    }\n    if (typeof callback == \"function\") {\n      this.#changeCallback = callback;\n      this.addEventListener(\"change\", callback);\n    }\n  }\n}\nexport {\n  AudioRenditionList,\n  addRendition,\n  removeRendition,\n  selectedChanged\n};\n", "import { selectedChanged } from \"./audio-rendition-list.js\";\nclass AudioRendition {\n  src;\n  id;\n  bitrate;\n  codec;\n  #selected = false;\n  get selected() {\n    return this.#selected;\n  }\n  set selected(val) {\n    if (this.#selected === val) return;\n    this.#selected = val;\n    selectedChanged(this);\n  }\n}\nexport {\n  AudioRendition\n};\n", "import { TrackEvent } from \"./track-event.js\";\nimport { getPrivate } from \"./utils.js\";\nfunction addAudioTrack(media, track) {\n  const trackList = media.audioTracks;\n  getPrivate(track).media = media;\n  if (!getPrivate(track).renditionSet) {\n    getPrivate(track).renditionSet = /* @__PURE__ */ new Set();\n  }\n  const trackSet = getPrivate(trackList).trackSet;\n  trackSet.add(track);\n  const index = trackSet.size - 1;\n  if (!(index in AudioTrackList.prototype)) {\n    Object.defineProperty(AudioTrackList.prototype, index, {\n      get() {\n        return [...getPrivate(this).trackSet][index];\n      }\n    });\n  }\n  queueMicrotask(() => {\n    trackList.dispatchEvent(new TrackEvent(\"addtrack\", { track }));\n  });\n}\nfunction removeAudioTrack(track) {\n  const trackList = getPrivate(track).media?.audioTracks;\n  if (!trackList) return;\n  const trackSet = getPrivate(trackList).trackSet;\n  trackSet.delete(track);\n  queueMicrotask(() => {\n    trackList.dispatchEvent(new TrackEvent(\"removetrack\", { track }));\n  });\n}\nfunction enabledChanged(track) {\n  const trackList = getPrivate(track).media.audioTracks;\n  if (!trackList || getPrivate(trackList).changeRequested) return;\n  getPrivate(trackList).changeRequested = true;\n  queueMicrotask(() => {\n    delete getPrivate(trackList).changeRequested;\n    trackList.dispatchEvent(new Event(\"change\"));\n  });\n}\nclass AudioTrackList extends EventTarget {\n  #addTrackCallback;\n  #removeTrackCallback;\n  #changeCallback;\n  constructor() {\n    super();\n    getPrivate(this).trackSet = /* @__PURE__ */ new Set();\n  }\n  get #tracks() {\n    return getPrivate(this).trackSet;\n  }\n  [Symbol.iterator]() {\n    return this.#tracks.values();\n  }\n  get length() {\n    return this.#tracks.size;\n  }\n  getTrackById(id) {\n    return [...this.#tracks].find((track) => track.id === id) ?? null;\n  }\n  get onaddtrack() {\n    return this.#addTrackCallback;\n  }\n  set onaddtrack(callback) {\n    if (this.#addTrackCallback) {\n      this.removeEventListener(\"addtrack\", this.#addTrackCallback);\n      this.#addTrackCallback = void 0;\n    }\n    if (typeof callback == \"function\") {\n      this.#addTrackCallback = callback;\n      this.addEventListener(\"addtrack\", callback);\n    }\n  }\n  get onremovetrack() {\n    return this.#removeTrackCallback;\n  }\n  set onremovetrack(callback) {\n    if (this.#removeTrackCallback) {\n      this.removeEventListener(\"removetrack\", this.#removeTrackCallback);\n      this.#removeTrackCallback = void 0;\n    }\n    if (typeof callback == \"function\") {\n      this.#removeTrackCallback = callback;\n      this.addEventListener(\"removetrack\", callback);\n    }\n  }\n  get onchange() {\n    return this.#changeCallback;\n  }\n  set onchange(callback) {\n    if (this.#changeCallback) {\n      this.removeEventListener(\"change\", this.#changeCallback);\n      this.#changeCallback = void 0;\n    }\n    if (typeof callback == \"function\") {\n      this.#changeCallback = callback;\n      this.addEventListener(\"change\", callback);\n    }\n  }\n}\nexport {\n  AudioTrackList,\n  addAudioTrack,\n  enabledChanged,\n  removeAudioTrack\n};\n", "import { AudioRendition } from \"./audio-rendition.js\";\nimport { enabledChanged } from \"./audio-track-list.js\";\nimport { addRendition, removeRendition } from \"./audio-rendition-list.js\";\nconst AudioTrackKind = {\n  alternative: \"alternative\",\n  descriptions: \"descriptions\",\n  main: \"main\",\n  \"main-desc\": \"main-desc\",\n  translation: \"translation\",\n  commentary: \"commentary\"\n};\nclass AudioTrack {\n  id;\n  kind;\n  label = \"\";\n  language = \"\";\n  sourceBuffer;\n  #enabled = false;\n  addRendition(src, codec, bitrate) {\n    const rendition = new AudioRendition();\n    rendition.src = src;\n    rendition.codec = codec;\n    rendition.bitrate = bitrate;\n    addRendition(this, rendition);\n    return rendition;\n  }\n  removeRendition(rendition) {\n    removeRendition(rendition);\n  }\n  get enabled() {\n    return this.#enabled;\n  }\n  set enabled(val) {\n    if (this.#enabled === val) return;\n    this.#enabled = val;\n    enabledChanged(this);\n  }\n}\nexport {\n  AudioTrack,\n  AudioTrackKind\n};\n", "import { VideoTrack } from \"./video-track.js\";\nimport { VideoTrackList, addVideoTrack, removeVideoTrack } from \"./video-track-list.js\";\nimport { AudioTrack } from \"./audio-track.js\";\nimport { AudioTrackList, addAudioTrack, removeAudioTrack } from \"./audio-track-list.js\";\nimport { VideoRenditionList } from \"./video-rendition-list.js\";\nimport { AudioRenditionList } from \"./audio-rendition-list.js\";\nimport { getPrivate } from \"./utils.js\";\nconst nativeVideoTracksFn = getBaseMediaTracksFn(globalThis.HTMLMediaElement, \"video\");\nconst nativeAudioTracksFn = getBaseMediaTracksFn(globalThis.HTMLMediaElement, \"audio\");\nfunction MediaTracksMixin(MediaElementClass) {\n  if (!MediaElementClass?.prototype) return MediaElementClass;\n  const videoTracksFn = getBaseMediaTracksFn(MediaElementClass, \"video\");\n  if (!videoTracksFn || `${videoTracksFn}`.includes(\"[native code]\")) {\n    Object.defineProperty(MediaElementClass.prototype, \"videoTracks\", {\n      get() {\n        return getVideoTracks(this);\n      }\n    });\n  }\n  const audioTracksFn = getBaseMediaTracksFn(MediaElementClass, \"audio\");\n  if (!audioTracksFn || `${audioTracksFn}`.includes(\"[native code]\")) {\n    Object.defineProperty(MediaElementClass.prototype, \"audioTracks\", {\n      get() {\n        return getAudioTracks(this);\n      }\n    });\n  }\n  if (!(\"addVideoTrack\" in MediaElementClass.prototype)) {\n    MediaElementClass.prototype.addVideoTrack = function(kind, label = \"\", language = \"\") {\n      const track = new VideoTrack();\n      track.kind = kind;\n      track.label = label;\n      track.language = language;\n      addVideoTrack(this, track);\n      return track;\n    };\n  }\n  if (!(\"removeVideoTrack\" in MediaElementClass.prototype)) {\n    MediaElementClass.prototype.removeVideoTrack = removeVideoTrack;\n  }\n  if (!(\"addAudioTrack\" in MediaElementClass.prototype)) {\n    MediaElementClass.prototype.addAudioTrack = function(kind, label = \"\", language = \"\") {\n      const track = new AudioTrack();\n      track.kind = kind;\n      track.label = label;\n      track.language = language;\n      addAudioTrack(this, track);\n      return track;\n    };\n  }\n  if (!(\"removeAudioTrack\" in MediaElementClass.prototype)) {\n    MediaElementClass.prototype.removeAudioTrack = removeAudioTrack;\n  }\n  if (!(\"videoRenditions\" in MediaElementClass.prototype)) {\n    Object.defineProperty(MediaElementClass.prototype, \"videoRenditions\", {\n      get() {\n        return initVideoRenditions(this);\n      }\n    });\n  }\n  const initVideoRenditions = (media) => {\n    let renditions = getPrivate(media).videoRenditions;\n    if (!renditions) {\n      renditions = new VideoRenditionList();\n      getPrivate(renditions).media = media;\n      getPrivate(media).videoRenditions = renditions;\n    }\n    return renditions;\n  };\n  if (!(\"audioRenditions\" in MediaElementClass.prototype)) {\n    Object.defineProperty(MediaElementClass.prototype, \"audioRenditions\", {\n      get() {\n        return initAudioRenditions(this);\n      }\n    });\n  }\n  const initAudioRenditions = (media) => {\n    let renditions = getPrivate(media).audioRenditions;\n    if (!renditions) {\n      renditions = new AudioRenditionList();\n      getPrivate(renditions).media = media;\n      getPrivate(media).audioRenditions = renditions;\n    }\n    return renditions;\n  };\n  return MediaElementClass;\n}\nfunction getBaseMediaTracksFn(MediaElementClass, type) {\n  if (MediaElementClass?.prototype) {\n    return Object.getOwnPropertyDescriptor(MediaElementClass.prototype, `${type}Tracks`)?.get;\n  }\n}\nfunction getVideoTracks(media) {\n  let tracks = getPrivate(media).videoTracks;\n  if (!tracks) {\n    tracks = new VideoTrackList();\n    getPrivate(media).videoTracks = tracks;\n    if (nativeVideoTracksFn) {\n      const nativeTracks = nativeVideoTracksFn.call(media.nativeEl ?? media);\n      for (const nativeTrack of nativeTracks) {\n        addVideoTrack(media, nativeTrack);\n      }\n      nativeTracks.addEventListener(\"change\", () => {\n        tracks.dispatchEvent(new Event(\"change\"));\n      });\n      nativeTracks.addEventListener(\"addtrack\", (event) => {\n        if ([...tracks].some((t) => t instanceof VideoTrack)) {\n          for (const nativeTrack of nativeTracks) {\n            removeVideoTrack(nativeTrack);\n          }\n          return;\n        }\n        addVideoTrack(media, event.track);\n      });\n      nativeTracks.addEventListener(\"removetrack\", (event) => {\n        removeVideoTrack(event.track);\n      });\n    }\n  }\n  return tracks;\n}\nfunction getAudioTracks(media) {\n  let tracks = getPrivate(media).audioTracks;\n  if (!tracks) {\n    tracks = new AudioTrackList();\n    getPrivate(media).audioTracks = tracks;\n    if (nativeAudioTracksFn) {\n      const nativeTracks = nativeAudioTracksFn.call(media.nativeEl ?? media);\n      for (const nativeTrack of nativeTracks) {\n        addAudioTrack(media, nativeTrack);\n      }\n      nativeTracks.addEventListener(\"change\", () => {\n        tracks.dispatchEvent(new Event(\"change\"));\n      });\n      nativeTracks.addEventListener(\"addtrack\", (event) => {\n        if ([...tracks].some((t) => t instanceof AudioTrack)) {\n          for (const nativeTrack of nativeTracks) {\n            removeAudioTrack(nativeTrack);\n          }\n          return;\n        }\n        addAudioTrack(media, event.track);\n      });\n      nativeTracks.addEventListener(\"removetrack\", (event) => {\n        removeAudioTrack(event.track);\n      });\n    }\n  }\n  return tracks;\n}\nexport {\n  MediaTracksMixin\n};\n"],
  "mappings": "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",
  "names": ["EventTarget", "_event", "DocumentFragment", "HTMLElement", "HTMLVideoElement", "customElements", "_name", "_constructor", "_options", "_root", "_detail", "CustomEvent", "typeArg", "eventInitDict", "__privateAdd", "__privateSet", "__privateGet", "createElement", "_tagName", "globalThisShim", "isServer", "internalGlobalThis", "internalDocument", "initialize", "teardown", "generatePlayerInitTime", "PlaybackTypes", "toMuxVideoURL", "MediaError", "getError", "CmcdTypeValues", "addCuePoints", "getCuePoints", "getActiveCuePoint", "addChapters", "getActiveChapter", "getStartDate", "getCurrentPdt", "getStreamType", "getTargetLiveWindow", "getLiveEdgeStart", "getSeekable", "getEnded", "getChapters", "toPlaybackIdFromSrc", "toPlaybackIdParts", "getEnvPlayerVersion", "player_version", "getPlayerVersion", "Events", "getAudioTemplateHTML", "attrs", "serializeAttributes", "getVideoTemplateHTML", "CustomMediaMixin", "superclass", "tag", "is", "_a", "_b", "_c", "_isDefined", "_define", "define_fn", "_isInit", "_nativeEl", "_childMap", "_init", "init_fn", "_syncMediaChildren", "syncMediaChildren_fn", "_upgradeProperty", "upgradeProperty_fn", "_forwardAttribute", "forwardAttribute_fn", "nativeElTest", "nativeElProps", "getNativeElProps", "__privateAdd", "__privateMethod", "__privateGet", "val", "__privateSet", "namedNodeMapToObject", "prop", "type", "event", "attrName", "oldValue", "newValue", "propsToAttrs", "args", "config", "attr", "removeNativeChildren", "el", "clone", "value", "_d", "_e", "_f", "__publicField", "proto", "html", "key", "namedNodeMap", "obj", "CustomVideoElement", "CustomAudioElement", "privateProps", "InvalidStateError", "NotSupportedError", "IterableWeakSet", "el", "fn", "ref", "value", "onCastApiAvailable", "callback", "_a", "_b", "_c", "requiresCastFramework", "loadCastFramework", "sdkUrl", "script", "castContext", "currentSession", "currentMedia", "editTracksInfo", "request", "resolve", "reject", "getMediaStatus", "setCastOptions", "options", "getDefaultCastOptions", "remoteInstances", "IterableWeakSet", "castElementRef", "cf", "onCastApiAvailable", "_a", "_b", "_c", "_d", "castContext", "e", "r", "privateProps", "remotePlaybackCallbackIdCount", "_media", "_isInit", "_remotePlayer", "_remoteListeners", "_state", "_available", "_callbacks", "_callbackIds", "_castPlayer", "castPlayer_get", "_disconnect", "disconnect_fn", "_onCastStateChanged", "onCastStateChanged_fn", "_onSessionStateChanged", "onSessionStateChanged_fn", "_init", "init_fn", "_onRemoteMediaLoaded", "onRemoteMediaLoaded_fn", "_updateRemoteTextTrack", "updateRemoteTextTrack_fn", "RemotePlayback", "media", "__privateAdd", "__privateSet", "__privateMethod", "__privateGet", "callback", "InvalidStateError", "NotSupportedError", "willDisconnect", "setCastOptions", "event", "listener", "err", "castState", "SESSION_RESUMED", "currentMedia", "getMediaStatus", "error", "value", "_e", "remoteSubtitles", "type", "localSubtitles", "kind", "subtitles", "language", "name", "trackId", "mode", "local", "hiddenTrackIds", "showingSubtitle", "activeTrackIds", "currentSession", "requestTrackIds", "id", "a", "b", "request", "editTracksInfo", "CastableMediaMixin", "superclass", "_a", "_b", "_localState", "_castOptions", "_castCustomData", "_remote", "_castPlayer", "castPlayer_get", "_loadOnPrompt", "loadOnPrompt_fn", "__privateAdd", "getDefaultCastOptions", "__privateGet", "requiresCastFramework", "loadCastFramework", "privateProps", "__privateMethod", "__privateSet", "RemotePlayback", "attrName", "oldValue", "newValue", "mediaInfo", "subtitles", "kind", "src", "activeTrackIds", "textTrackIdCount", "trackEl", "trackId", "track", "request", "currentSession", "val", "_c", "valType", "__superGet", "err", "__publicField", "TrackEvent", "type", "init", "__publicField", "privateProps", "getPrivate", "instance", "_a", "setPrivate", "props", "saved", "addVideoTrack", "media", "track", "trackList", "getPrivate", "trackSet", "index", "VideoTrackList", "TrackEvent", "removeVideoTrack", "_a", "selectedChanged", "selected", "hasUnselected", "_addTrackCallback", "_removeTrackCallback", "_changeCallback", "_tracks", "tracks_get", "__privateAdd", "__privateGet", "id", "callback", "__privateSet", "RenditionEvent", "type", "init", "__publicField", "addRendition", "track", "rendition", "renditionList", "getPrivate", "renditionSet", "index", "VideoRenditionList", "getCurrentRenditions", "RenditionEvent", "removeRendition", "selectedChanged", "_addRenditionCallback", "_removeRenditionCallback", "_changeCallback", "__privateAdd", "id", "_a", "i", "__privateGet", "callback", "__privateSet", "_selected", "VideoRendition", "__publicField", "__privateAdd", "__privateGet", "val", "__privateSet", "selectedChanged", "_selected", "VideoTrack", "__publicField", "__privateAdd", "src", "width", "height", "codec", "bitrate", "frameRate", "rendition", "VideoRendition", "addRendition", "removeRendition", "__privateGet", "val", "__privateSet", "selectedChanged", "addRendition", "track", "rendition", "renditionList", "getPrivate", "renditionSet", "index", "AudioRenditionList", "getCurrentRenditions", "RenditionEvent", "removeRendition", "selectedChanged", "_addRenditionCallback", "_removeRenditionCallback", "_changeCallback", "__privateAdd", "id", "_a", "i", "__privateGet", "callback", "__privateSet", "_selected", "AudioRendition", "__publicField", "__privateAdd", "__privateGet", "val", "__privateSet", "selectedChanged", "addAudioTrack", "media", "track", "trackList", "getPrivate", "trackSet", "index", "AudioTrackList", "TrackEvent", "removeAudioTrack", "_a", "enabledChanged", "_addTrackCallback", "_removeTrackCallback", "_changeCallback", "_tracks", "tracks_get", "__privateAdd", "__privateGet", "id", "callback", "__privateSet", "_enabled", "AudioTrack", "__publicField", "__privateAdd", "src", "codec", "bitrate", "rendition", "AudioRendition", "addRendition", "removeRendition", "__privateGet", "val", "__privateSet", "enabledChanged", "nativeVideoTracksFn", "getBaseMediaTracksFn", "nativeAudioTracksFn", "MediaTracksMixin", "MediaElementClass", "videoTracksFn", "getVideoTracks", "audioTracksFn", "getAudioTracks", "kind", "label", "language", "track", "VideoTrack", "addVideoTrack", "removeVideoTrack", "AudioTrack", "addAudioTrack", "removeAudioTrack", "initVideoRenditions", "media", "renditions", "getPrivate", "VideoRenditionList", "initAudioRenditions", "AudioRenditionList", "type", "_a", "tracks", "VideoTrackList", "nativeTracks", "nativeTrack", "event", "t", "AudioTrackList", "Events", "Attributes", "AttributeNameValues", "playerSoftwareVersion", "getPlayerVersion", "playerSoftwareName", "_core", "_loadRequested", "_playerInitTime", "_metadata", "_tokens", "__hlsConfig", "_playerSoftwareVersion", "_playerSoftwareName", "_errorTranslator", "_requestLoad", "requestLoad_fn", "MuxVideoBaseElement", "CustomVideoElement", "__privateAdd", "__privateSet", "generatePlayerInitTime", "_a", "value", "CmcdTypeValues", "__privateGet", "getError", "val", "attr", "currentVal", "num", "toPlaybackIdFromSrc", "_b", "_c", "_d", "queryParts", "toPlaybackIdParts", "playback", "drm", "getEnded", "getStreamType", "getTargetLiveWindow", "liveEdgeOffset", "seekableEnd", "seekableStart", "getLiveEdgeStart", "getSeekable", "cuePoints", "addCuePoints", "getActiveCuePoint", "getCuePoints", "chapters", "addChapters", "getActiveChapter", "getChapters", "getStartDate", "getCurrentPdt", "PlaybackTypes", "attrName", "currAttrs", "initialize", "teardown", "oldValue", "newValue", "hadSrc", "hasSrc", "__privateMethod", "toMuxVideoURL", "debug", "resp", "json", "_castCustomData", "MuxVideoElement", "CastableMediaMixin", "MediaTracksMixin", "internalGlobalThis", "src_default", "MuxVideoElement"]
}
