{"version":3,"file":"pillarbox-core.cjs","sources":["../src/components/player.js","../src/components/audio-track-menu-item.js","../src/components/picture-in-picture-toggle.js","../src/components/drm-support.js","../src/pillarbox.js"],"sourcesContent":["import videojs from 'video.js';\nimport 'videojs-contrib-eme';\n\n/** @import VJSPlayer from 'video.js/dist/types/player' */\n/** @import AudioTrack from 'video.js/dist/types/tracks/audio-track' */\n/** @import TextTrack from 'video.js/dist/types/tracks/text-track' */\n/** @import {TrackSelector} from './typedef' */\n\n/**\n * @ignore\n * @type {typeof VJSPlayer}\n */\nconst vjsPlayer = videojs.getComponent('player');\n\n/**\n * This class extends the video.js Player.\n *\n * @class Player\n * @see https://docs.videojs.com/player\n */\nclass Player extends vjsPlayer {\n  constructor(tag, options, ready) {\n    /**\n     * Configuration for plugins.\n     *\n     * @see [Video.js Plugins Option]{@link https://videojs.com/guides/options/#plugins}\n     * @type {Object}\n     * @property {boolean} eme - Enable the EME (Encrypted Media Extensions) plugin.\n     */\n    options = videojs.obj.merge(options, { plugins: { eme: true }});\n    super(tag, options, ready);\n  }\n\n  /**\n   * A getter/setter for the media's audio track.\n   * Activates the audio track according to the language and kind properties.\n   * Falls back on the first audio track found if the kind property is not satisfied.\n   *\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack/kind\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack/language\n   *\n   * @param {TrackSelector} [trackSelector]\n   *\n   * @example\n   * // Get the current audio track\n   * player.audioTrack();\n   *\n   * @example\n   * // Activate an audio track based on language and kind properties\n   * player.audioTrack({language:'en', kind:'description'});\n   *\n   * @example\n   * // Activate first audio track found corresponding to language\n   * player.audioTrack({language:'fr'});\n   *\n   * @return {AudioTrack | undefined} The\n   *         currently enabled audio track. See {@link https://docs.videojs.com/audiotrack}.\n   */\n  audioTrack(trackSelector) {\n    const audioTracks = Array.from(this.player().audioTracks());\n\n    if (!trackSelector) {\n      return audioTracks.find((audioTrack) => audioTrack.enabled);\n    }\n\n    const { kind, language } = trackSelector;\n    const audioTrack =\n      audioTracks.find(\n        (audioTrack) =>\n          audioTrack.language === language && audioTrack.kind === kind\n      ) || audioTracks.find((audioTrack) => audioTrack.language === language);\n\n    if (audioTrack) {\n      audioTrack.enabled = true;\n    }\n\n    return audioTrack;\n  }\n\n  /**\n   * Calculates an array of ranges based on the `buffered()` data.\n   *\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered\n   *\n   * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of buffered ranges.\n   */\n  bufferedRanges() {\n    const ranges = [];\n\n    for (let i = 0; i < this.buffered().length; i++) {\n      const start = this.buffered().start(i);\n      const end = this.buffered().end(i);\n\n      ranges.push({ start, end });\n    }\n\n    return ranges;\n  }\n\n  /**\n   * Create a floating video window always on top of other windows so that users may\n   * continue consuming media while they interact with other content sites, or\n   * applications on their device.\n   *\n   * This can use document picture-in-picture or element picture in picture\n   *\n   * Set `enableDocumentPictureInPicture` to `true` to use docPiP on a supported browser\n   * Else set `disablePictureInPicture` to `false` to disable elPiP on a supported browser\n   *\n   *\n   * @see [Spec]{@link https://w3c.github.io/picture-in-picture/}\n   * @see [Spec]{@link https://wicg.github.io/document-picture-in-picture/}\n   *\n   * @fires Player#enterpictureinpicture\n   *\n   * @return {Promise}\n   *         A promise with a Picture-in-Picture window.\n   */\n  /* eslint-disable */\n  requestPictureInPicture() {\n    if (this.options_.enableDocumentPictureInPicture && window.documentPictureInPicture) {\n      const pipContainer = document.createElement(this.el().tagName);\n\n      pipContainer.classList = this.el().classList;\n      pipContainer.classList.add('vjs-pip-container');\n      if (this.posterImage) {\n        pipContainer.appendChild(this.posterImage.el().cloneNode(true));\n      }\n      if (this.titleBar) {\n        pipContainer.appendChild(this.titleBar.el().cloneNode(true));\n      }\n      pipContainer.appendChild(videojs.dom.createEl('p', { className: 'vjs-pip-text' }, {}, this.localize('Playing in picture-in-picture')));\n\n      return window.documentPictureInPicture.requestWindow({\n        // The aspect ratio won't be correct, Chrome bug https://crbug.com/1407629\n        width: this.videoWidth(),\n        height: this.videoHeight()\n      }).then(pipWindow => {\n        videojs.dom.copyStyleSheetsToWindow(pipWindow);\n        this.el_.parentNode.insertBefore(pipContainer, this.el_);\n\n        pipWindow.document.body.appendChild(this.el_);\n        pipWindow.document.body.classList.add('vjs-pip-window');\n\n        this.player_.isInPictureInPicture(true);\n        this.player_.trigger({ type: 'enterpictureinpicture', pipWindow });\n\n        // Listen for the PiP closing event to move the video back.\n        pipWindow.addEventListener('pagehide', (event) => {\n          console.log(event.target);\n          const pipVideo = event.target.querySelector('.vjs-v8');\n\n          pipContainer.parentNode.replaceChild(pipVideo, pipContainer);\n          this.player_.isInPictureInPicture(false);\n          this.player_.trigger('leavepictureinpicture');\n        });\n\n        return pipWindow;\n      });\n    }\n    if ('pictureInPictureEnabled' in document && this.disablePictureInPicture() === false) {\n      /**\n       * This event fires when the player enters picture in picture mode\n       *\n       * @event Player#enterpictureinpicture\n       * @type {Event}\n       */\n      return this.techGet_('requestPictureInPicture');\n    }\n\n    return Promise.reject('No PiP mode is available');\n  }\n  /* eslint-enable */\n\n  /**\n   * Get the percent (as a decimal) of the media that's been played.\n   * This method is not a part of the native HTML video API.\n   *\n   * Live streams with DVR are not currently supported.\n   *\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#htmlmediaelement.played\n   *\n   * @return {number}\n   *         A decimal between 0 and 1 representing the percent\n   *         that is played 0 being 0% and 1 being 100%\n   */\n  playedPercent() {\n    if (!Number.isFinite(this.duration())) return NaN;\n\n    let timePlayed = 0;\n\n    for (let i = 0; i != this.played().length; i++) {\n      timePlayed += this.played().end(i) - this.played().start(i);\n    }\n\n    const percentPlayed = timePlayed / this.duration();\n\n    return percentPlayed;\n  }\n\n  /**\n   * Get an array of ranges based on the `played` data.\n   *\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement#htmlmediaelement.played\n   *\n   * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of played ranges.\n   */\n  playedRanges() {\n    const ranges = [];\n\n    for (let i = 0; i < this.played().length; i++) {\n      const start = this.played().start(i);\n      const end = this.played().end(i);\n\n      ranges.push({ start, end });\n    }\n\n    return ranges;\n  }\n\n  /**\n   * Calculates an array of ranges based on the `seekable()` data.\n   *\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/seekable\n   *\n   * @returns {Array<{start: number, end: number}>} An array of objects representing start and end points of seekable ranges.\n   */\n  seekableRanges() {\n    const ranges = [];\n\n    for (let i = 0; i < this.seekable().length; i++) {\n      const start = this.seekable().start(i);\n      const end = this.seekable().end(i);\n\n      ranges.push({ start, end });\n    }\n\n    return ranges;\n  }\n\n  /**\n   * A getter/setter for the media's text track.\n   * Activates the text track according to the language and kind properties.\n   * Falls back on the first text track found if the kind property is not satisfied.\n   * Disables all subtitle tracks that are `showing` if the `trackSelector` is truthy but does not satisfy any condition.\n   *\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/TextTrack/kind\n   * @see https://developer.mozilla.org/en-US/docs/Web/API/textTrack/language\n   *\n   * @param {TrackSelector} [trackSelector]\n   *\n   * @example\n   * // Get the current text track\n   * player.textTrack();\n   *\n   * @example\n   * // Disable all text tracks has a side effect\n   * player.textTrack('off');\n   * player.textTrack({});\n   *\n   * @example\n   * // Activate an text track based on language and kind properties\n   * player.textTrack({language:'en', kind:'captions'});\n   *\n   * @example\n   * // Activate first text track found corresponding to language\n   * player.textTrack({language:'fr'});\n   *\n   * @return {TextTrack | undefined} The\n   *         currently enabled text track. See {@link https://docs.videojs.com/texttrack}.\n   */\n  textTrack(trackSelector) {\n    const textTracks = Array.from(this.player().textTracks()).filter(\n      (textTrack) => !['chapters', 'metadata'].includes(textTrack.kind)\n    );\n\n    if (!trackSelector) {\n      return textTracks.find((textTrack) => textTrack.mode === 'showing');\n    }\n\n    textTracks.forEach((textTrack) => (textTrack.mode = 'disabled'));\n\n    const { kind, language } = trackSelector;\n    const textTrack =\n      textTracks.find((textTrack) => {\n        if (textTrack.language === language && textTrack.kind === kind) {\n          textTrack.mode = 'showing';\n        }\n\n        return textTrack.mode === 'showing';\n      }) ||\n      textTracks.find((textTrack) => {\n        if (textTrack.language === language) {\n          textTrack.mode = 'showing';\n        }\n\n        return textTrack.mode === 'showing';\n      });\n\n    return textTrack;\n  }\n}\n\nvideojs.registerComponent('player', Player);\n\nexport default Player;\n","import videojs from 'video.js';\n\n/** @import MenuItem from 'video.js/dist/types/menu/menu-item' */\n\n/**\n * @ignore\n */\nconst VJSAudioTrackButton = videojs.getComponent('AudioTrackButton');\n\n/**\n * @ignore\n * @type {typeof MenuItem}\n */\nconst MenuItem = videojs.getComponent('MenuItem');\n\n/**\n * An {@link AudioTrack} {@link MenuItem}\n *\n * This is a temporary workaround.\n *\n * @extends MenuItem\n */\nclass AudioTrackMenuItem extends MenuItem {\n\n  /**\n   * Creates an instance of this class.\n   *\n   * @param {Player} player\n   *        The `Player` that this class should be attached to.\n   *\n   * @param {Object} [options]\n   *        The key/value store of player options.\n   */\n  constructor(player, options) {\n    const track = options.track;\n    const tracks = player.audioTracks();\n\n    // Modify options for parent MenuItem class's init.\n    options.label = track.label || track.language || 'Unknown';\n    options.selected = track.enabled;\n\n    super(player, options);\n\n    this.track = track;\n\n    this.addClass(`vjs-${track.kind}-menu-item`);\n\n    const changeHandler = (...args) => {\n      this.handleTracksChange.apply(this, args);\n    };\n\n    tracks.addEventListener('change', changeHandler);\n    this.on('dispose', () => {\n      tracks.removeEventListener('change', changeHandler);\n    });\n  }\n\n  createEl(type, props, attrs) {\n    const el = super.createEl(type, props, attrs);\n    const parentSpan = el.querySelector('.vjs-menu-item-text');\n\n    if (['main-desc', 'descriptions', 'description'].indexOf(this.options_.track.kind) >= 0) {\n      parentSpan.appendChild(videojs.dom.createEl('span', {\n        className: 'vjs-icon-placeholder'\n      }, {\n        'aria-hidden': true\n      }));\n      parentSpan.appendChild(videojs.dom.createEl('span', {\n        className: 'vjs-control-text',\n        textContent: ' ' + this.localize('Descriptions')\n      }));\n    }\n\n    return el;\n  }\n\n  /**\n   * This gets called when an `AudioTrackMenuItem is \"clicked\". See {@link ClickableComponent}\n   * for more detailed information on what a click can be.\n   *\n   * @param {Event} [event]\n   *        The `keydown`, `tap`, or `click` event that caused this function to be\n   *        called.\n   *\n   * @listens tap\n   * @listens click\n   */\n  handleClick(event) {\n    super.handleClick(event);\n\n    // the audio track list will automatically toggle other tracks\n    // off for us.\n    this.track.enabled = true;\n\n    if (!this.player_.tech_.featuresNativeAudioTracks) return;\n\n    // when native audio tracks are used, we want to make sure that other tracks are turned off\n    const tracks = this.player_.audioTracks();\n\n    for (let i = 0; i < tracks.length; i++) {\n      const track = tracks[i];\n\n      // skip the current track since we enabled it above\n      if (track === this.track) {\n        continue;\n      }\n\n      track.enabled = track === this.track;\n    }\n\n  }\n\n  /**\n   * Handle any {@link AudioTrack} change.\n   *\n   * @param {Event} [event]\n   *        The {@link AudioTrackList#change} event that caused this to run.\n   *\n   * @listens AudioTrackList#change\n   */\n  handleTracksChange() {\n    this.selected(this.track.enabled);\n  }\n}\n\n/**\n * The base class for buttons that toggle specific {@link AudioTrack} types.\n *\n * @extends VJSAudioTrackButton\n */\nclass AudioTrackButton extends VJSAudioTrackButton {\n\n\n  /**\n   * Create a menu item for each audio track\n   *\n   * @param {AudioTrackMenuItem[]} [items=[]]\n   *        An array of existing menu items to use.\n   *\n   * @return {AudioTrackMenuItem[]}\n   *         An array of menu items\n   */\n  createItems(items = []) {\n    // if there's only one audio track, there no point in showing it\n    this.hideThreshold_ = 1;\n\n    const tracks = this.player_.audioTracks();\n\n    for (let i = 0; i < tracks.length; i++) {\n      const track = tracks[i];\n\n      items.push(new AudioTrackMenuItem(this.player_, {\n        track,\n        // MenuItem is selectable\n        selectable: true,\n        // MenuItem is NOT multiSelectable (i.e. only one can be marked \"selected\" at a time)\n        multiSelectable: false\n      }));\n    }\n\n    return items;\n  }\n}\n\nvideojs.registerComponent('AudioTrackMenuItem', AudioTrackMenuItem);\nvideojs.registerComponent('AudioTrackButton', AudioTrackButton);\n","import videojs from 'video.js';\n\n/**\n * @ignore\n */\nconst VJSPictureInPictureToggle = videojs.getComponent('PictureInPictureToggle');\n\nclass PictureInPictureToggle extends VJSPictureInPictureToggle {\n  /**\n   * Displays or hides the button depending on the audio mode detection.\n   * Exits picture-in-picture if it is enabled when switching to audio mode.\n   */\n  /* eslint-disable */\n  handlePictureInPictureAudioModeChange() {\n    // This audio detection will not detect HLS or DASH audio-only streams because there was no reliable way to detect them at the time\n    const isSourceAudio = this.player_.currentType().substring(0, 5) === 'audio';\n    const isAudioMode =\n      isSourceAudio || this.player_.audioPosterMode() || this.player_.audioOnlyMode();\n\n    if (!isAudioMode || (this.player_.options_.enableDocumentPictureInPicture && 'documentPictureInPicture' in window)) {\n      this.show();\n\n      return;\n    }\n\n    if (this.player_.isInPictureInPicture()) {\n      this.player_.exitPictureInPicture();\n    }\n\n    this.hide();\n  }\n  /* eslint-enable */\n\n  /**\n * Show the `Component`s element if it is hidden by removing the\n * 'vjs-hidden' class name from it only in browsers that support the Picture-in-Picture API.\n */\n  show() {\n    // Does not allow to display the pictureInPictureToggle in browsers that do not support the Picture-in-Picture or DocumentPictureInPicture API.\n    if (\n      typeof document.exitPictureInPicture !== 'function' &&\n      !(this.player_.options_.enableDocumentPictureInPicture && 'documentPictureInPicture' in window)\n    ) {\n      return;\n    }\n\n    this.removeClass('vjs-hidden');\n  }\n}\n\nvideojs.registerComponent('PictureInPictureToggle', PictureInPictureToggle);\nexport default PictureInPictureToggle;\n","import videojs from 'video.js';\n\n/** @import Component from 'video.js/dist/types/component' */\n/** @import Player from 'video.js/dist/types/player' */\n\n/**\n * @ignore\n * @type {typeof Component}\n */\nconst Component = videojs.getComponent('Component');\n\n/**\n * A component that provides DRM support detection.\n *\n * @class DrmSupport\n *\n * @extends {Component}\n */\nclass DrmSupport extends Component {\n  /**\n   * Creates an instance of DrmSupport.\n   *\n   * @param {Player} player the player instance\n   * @param {Object} [options={}] the component options\n   */\n  constructor(player, options = {}) {\n    const opts = videojs.obj.merge(options, { createEl: false });\n\n    super(player, opts);\n  }\n\n  /**\n   * Checks DRM and HDCP capabilities.\n   *\n   * @param {Object} [options={}] configuration options\n   * @param {string} [options.contentType='video/mp4; codecs=\"avc1.42E01E\"'] video content type to test\n   * @param {string[]} [options.initDataTypes=['cenc']] initialization data types\n   *\n   * @returns {Promise<Object>} object containing supported levels and HDCP per vendor\n   *\n   * @example\n   * player.drmSupport.check().then((results) => {\n   *   console.log('DRM Support Results:', results);\n   *   // Example output:\n   *   // {\n   *   //   widevine: { level: 'L1', hdcp: '2.2' },\n   *   //   playReady: null,\n   *   //   fairPlay: null,\n   *   //   clearKey: { level: 'Supported', hdcp: null }\n   *   // }\n   * });\n   *\n   * @example\n   * player.drmSupport().check({\n   *   contentType: 'video/mp4; codecs=\"avc1.4d401e\"',\n   *   initDataTypes: ['cenc', 'keyids']\n   * }).then((results) => {\n   *   console.log('DRM Support Results:', results)\n   * });\n   */\n  async check({\n    contentType = 'video/mp4; codecs=\"avc1.42E01E\"',\n    initDataTypes = ['cenc']\n  } = {}) {\n    const results = {};\n    const promises = Object.entries(DrmSupport.DRM_CONFIG).map(\n      async ([key, { vendor, levels }]) => {\n        results[key] =\n          await this.checkVendor(vendor, levels, initDataTypes, contentType);\n      }\n    );\n\n    await Promise.all(promises);\n\n    return results;\n  }\n\n  /**\n   * Tests robustness levels and HDCP for specific DRM vendor.\n   *\n   * @param {string} vendor key system identifier\n   * @param {Array<{robustness: string, label: string}>} levels array of robustness levels to test\n   * @param {string[]} initDataTypes initialization data types\n   * @param {string} contentType video content type\n   *\n   * @returns {Promise<{level: string, hdcp: string|null}|null>} supported level and HDCP or null\n   */\n  async checkVendor(vendor, levels, initDataTypes, contentType) {\n    for (const { robustness, label } of levels) {\n      try {\n        const config = [{\n          initDataTypes,\n          videoCapabilities: [{ contentType, robustness }]\n        }];\n\n        const access =\n          await navigator.requestMediaKeySystemAccess(vendor, config);\n        const mediaKeys = await access.createMediaKeys();\n        const hdcp = await this.findMaxHdcp(mediaKeys);\n\n        return { level: label, hdcp };\n      } catch (e) {\n        videojs.log.debug(\n          'DrmSupport',\n          `checkVendor failed (vendor=${vendor}, level=${label}, contentType=${contentType}, robustness=${robustness})`,\n          e\n        );\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Iterates through HDCP versions to find maximum supported version.\n   *\n   * @param {MediaKeys} mediaKeys instantiated MediaKeys object\n   *\n   * @returns {Promise<string|null>} maximum usable HDCP version or null\n   */\n  async findMaxHdcp(mediaKeys) {\n    if (!mediaKeys.getStatusForPolicy) {\n      return null;\n    }\n\n    const versions = ['2.3', '2.2', '2.1', '2.0', '1.4', '1.3', '1.2', '1.1', '1.0'];\n\n    for (const version of versions) {\n      const status = await mediaKeys\n        .getStatusForPolicy({ minHdcpVersion: version })\n        .catch(() => null);\n\n      if (status === 'usable') {\n        return version;\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Returns static DRM configuration matrix.\n   *\n   * @returns {Object} DRM configuration\n   */\n  static get DRM_CONFIG() {\n    return {\n      widevine: {\n        vendor: 'com.widevine.alpha',\n        levels: [\n          { robustness: 'HW_SECURE_ALL', label: 'L1' },\n          { robustness: 'SW_SECURE_CRYPTO', label: 'L3' }\n        ]\n      },\n      playReady: {\n        vendor: 'com.microsoft.playready',\n        levels: [\n          { robustness: '3000', label: 'SL3000' },\n          { robustness: '2000', label: 'SL2000' }\n        ]\n      },\n      fairPlay: {\n        vendor: 'com.apple.fps',\n        levels: [\n          { robustness: '', label: 'Supported' }\n        ]\n      },\n      clearKey: {\n        vendor: 'org.w3.clearkey',\n        levels: [\n          { robustness: '', label: 'Supported' }\n        ]\n      }\n    };\n  }\n}\n\nvideojs.registerComponent('DrmSupport', DrmSupport);\n\nexport default DrmSupport;\n","import { version } from '../package.json';\nimport videojs from 'video.js';\nimport './components/player.js';\nimport './components/audio-track-menu-item.js';\nimport './components/picture-in-picture-toggle.js';\nimport './components/drm-support.js';\n\n/**\n * Pillarbox is an alias for the video.js namespace with additional options.\n *\n * @namespace\n * @see https://docs.videojs.com/module-videojs-videojs\n * @type {videojs}\n */\nconst pillarbox = videojs;\n\npillarbox.VERSION = {\n  pillarbox: version,\n  videojs: videojs.VERSION,\n  [videojs.VhsSourceHandler.name]: videojs.VhsSourceHandler.VERSION,\n  eme: videojs.getPlugin('eme').VERSION,\n};\n\n/**\n * Enable DrmSupport component by default.\n *\n * A component that provides DRM support detection.\n *\n * @type {boolean}\n * @default true\n */\npillarbox.options.drmSupport = true;\n/**\n * Enable smooth seeking for Pillarbox.\n *\n * @see [Video.js enableSmoothSeeking Option]{@link https://videojs.com/guides/options/#enablesmoothseeking}\n * @type {boolean}\n * @default true\n */\npillarbox.options.enableSmoothSeeking = true;\n/**\n * Enable fill mode for the video player, allowing it to expand to fill the container.\n *\n * @see [Video.js Fill Option]{@link https://videojs.com/guides/layout/#fill-mode}\n * @type {boolean}\n * @default true\n */\npillarbox.options.fill = true;\n/**\n * Configuration options for HTML5 settings in Pillarbox.\n *\n * @see [VHS useForcedSubtitles Option]{@link https://github.com/videojs/http-streaming/blob/main/README.md#useforcedsubtitles}\n * @see [VHS overrideNative Option]{@link https://github.com/videojs/http-streaming#overridenative}\n * @type {Object}\n * @property {Object} vhs - Configuration for the Video.js HTTP Streaming.\n * @property {boolean} useForcedSubtitles - Enables the player to display forced subtitles by default.\n * Forced subtitles are pieces of information intended for display when no other text representation\n * is selected. They are used to clarify dialogue, provide alternate languages, display texted graphics,\n * or present location/person IDs that are not otherwise covered in the dubbed/localized audio.\n * @property {boolean} overrideNative - Try to use videojs-http-streaming even on platforms that\n * provide some level of HLS support natively\n */\npillarbox.options.html5 = {\n  vhs: {\n    useForcedSubtitles: true,\n    overrideNative: !pillarbox.browser.IS_SAFARI\n  }\n};\n/**\n * Configuration for the live tracker.\n *\n * @see [Video.js liveTracker Option]{@link https://videojs.com/guides/options/#livetrackertrackingthreshold}\n * @type {Object}\n * @property {number} trackingThreshold - A threshold that controls when the liveui should be shown.\n * @property {number} liveTolerance - An option that controls how far from the seekable end should be considered live playback.\n */\npillarbox.options.liveTracker = {\n  trackingThreshold: 120,\n  liveTolerance: 15,\n};\n/**\n * Allows the player to use the live ui that includes:\n *\n * - A progress bar for seeking within the live window\n * - A button that can be clicked to seek to the live edge with a circle indicating if you are at the live edge or not.\n *\n * @see [Video.js liveui Option]{@link https://videojs.com/guides/options/#liveui}\n * @type {boolean}\n */\npillarbox.options.liveui = true;\n/**\n * Indicates that the video is to be played \"inline\", that is within the element's playback area.\n *\n * @see [Video element playsinline attribute]{@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#playsinline}\n * @type {boolean}\n */\npillarbox.options.playsinline = true;\n/**\n * Enable responsive mode, this will cause the player to customize itself based on responsive breakpoints.\n *\n * @see [Video.js Responsive Option]{@link https://videojs.com/guides/options/#responsive}\n * @type {boolean}\n */\npillarbox.options.responsive = true;\n/**\n * A placeholder for accessing trackers directly from the player.\n *\n * @type {Object}\n */\npillarbox.options.trackers = {};\n\nexport default pillarbox;\n"],"names":["vjsPlayer","videojs","getComponent","Player","constructor","tag","options","ready","obj","merge","plugins","eme","audioTrack","trackSelector","audioTracks","Array","from","player","find","enabled","kind","language","bufferedRanges","ranges","i","buffered","length","start","end","push","requestPictureInPicture","options_","enableDocumentPictureInPicture","window","documentPictureInPicture","pipContainer","document","createElement","el","tagName","classList","add","posterImage","appendChild","cloneNode","titleBar","dom","createEl","className","localize","requestWindow","width","videoWidth","height","videoHeight","then","pipWindow","copyStyleSheetsToWindow","el_","parentNode","insertBefore","body","player_","isInPictureInPicture","trigger","type","addEventListener","event","console","log","target","pipVideo","querySelector","replaceChild","disablePictureInPicture","techGet_","Promise","reject","playedPercent","Number","isFinite","duration","NaN","timePlayed","played","percentPlayed","playedRanges","seekableRanges","seekable","textTrack","textTracks","filter","includes","mode","forEach","registerComponent","VJSAudioTrackButton","MenuItem","AudioTrackMenuItem","track","tracks","label","selected","addClass","changeHandler","args","handleTracksChange","apply","on","removeEventListener","props","attrs","parentSpan","indexOf","textContent","handleClick","tech_","featuresNativeAudioTracks","AudioTrackButton","createItems","items","hideThreshold_","selectable","multiSelectable","VJSPictureInPictureToggle","PictureInPictureToggle","handlePictureInPictureAudioModeChange","isSourceAudio","currentType","substring","isAudioMode","audioPosterMode","audioOnlyMode","show","exitPictureInPicture","hide","removeClass","Component","DrmSupport","opts","check","_this","_asyncToGenerator","contentType","initDataTypes","results","promises","Object","entries","DRM_CONFIG","map","_ref","key","vendor","levels","checkVendor","_x","arguments","all","_this2","robustness","config","videoCapabilities","access","navigator","requestMediaKeySystemAccess","mediaKeys","createMediaKeys","hdcp","findMaxHdcp","level","e","debug","getStatusForPolicy","versions","version","status","minHdcpVersion","catch","widevine","playReady","fairPlay","clearKey","pillarbox","VERSION","VhsSourceHandler","name","getPlugin","drmSupport","enableSmoothSeeking","fill","html5","vhs","useForcedSubtitles","overrideNative","browser","IS_SAFARI","liveTracker","trackingThreshold","liveTolerance","liveui","playsinline","responsive","trackers"],"mappings":"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AgB,CAACD,OAAO;AACjE7K,EAAAA,GAAG,EAAEV,OAAO,CAAC0L,SAAS,CAAC,KAAK,CAAC,CAACH;AAChC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAD,SAAS,CAACjL,OAAO,CAACsL,UAAU,GAAG,IAAI;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACAL,SAAS,CAACjL,OAAO,CAACuL,mBAAmB,GAAG,IAAI;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACAN,SAAS,CAACjL,OAAO,CAACwL,IAAI,GAAG,IAAI;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAP,SAAS,CAACjL,OAAO,CAACyL,KAAK,GAAG;AACxBC,EAAAA,GAAG,EAAE;AACHC,IAAAA,kBAAkB,EAAE,IAAI;AACxBC,IAAAA,cAAc,EAAE,CAACX,SAAS,CAACY,OAAO,CAACC;AACrC;AACF,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAb,SAAS,CAACjL,OAAO,CAAC+L,WAAW,GAAG;AAC9BC,EAAAA,iBAAiB,EAAE,GAAG;AACtBC,EAAAA,aAAa,EAAE;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAhB,SAAS,CAACjL,OAAO,CAACkM,MAAM,GAAG,IAAI;AAC/B;AACA;AACA;AACA;AACA;AACA;AACAjB,SAAS,CAACjL,OAAO,CAACmM,WAAW,GAAG,IAAI;AACpC;AACA;AACA;AACA;AACA;AACA;AACAlB,SAAS,CAACjL,OAAO,CAACoM,UAAU,GAAG,IAAI;AACnC;AACA;AACA;AACA;AACA;AACAnB,SAAS,CAACjL,OAAO,CAACqM,QAAQ,GAAG,EAAE;;;;"}