cloudinary-video-player
Version:
Cloudinary Video Player
199 lines (152 loc) • 1.79 MB
JavaScript
console.warn('[Cloudinary] The "light" video-player is deprecated and will be removed in a future release. The main player is now light by default. Please use that instead.');
/*!
* Cloudinary Video Player v3.2.1
* Built on 2025-08-12T18:54:00.175Z
* https://github.com/cloudinary/cloudinary-video-player
*/
/*
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["cloudinary-video-player"] = factory();
else
root["cloudinary-video-player"] = factory();
})(self, () => {
return /******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./components/component-utils.js":
/*!***************************************!*\
!*** ./components/component-utils.js ***!
\***************************************/
/***/ ((module) => {
eval("const hide = el => {\n el.style.display = 'none';\n};\nconst show = el => {\n el.style.display = '';\n};\nconst setText = (el, text) => {\n if (!text || text.length <= 0) {\n el.innerText = '';\n hide(el);\n return;\n }\n el.innerText = text;\n show(el);\n};\nmodule.exports = {\n hide,\n show,\n setText\n};\n\n//# sourceURL=webpack://cloudinary-video-player/./components/component-utils.js?");
/***/ }),
/***/ "./components/index.js":
/*!*****************************!*\
!*** ./components/index.js ***!
\*****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ JumpBackButton: () => (/* reexport safe */ _jumpButtons_jump_10_minus__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ JumpForwardButton: () => (/* reexport safe */ _jumpButtons_jump_10_plus__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ LogoButton: () => (/* reexport safe */ _logoButton_logo_button__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ ProgressControlEventsBlocker: () => (/* reexport safe */ _progress_control_events_blocker_progress_control_events_blocker__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ TitleBar: () => (/* reexport safe */ _title_bar_title_bar__WEBPACK_IMPORTED_MODULE_4__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _jumpButtons_jump_10_plus__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jumpButtons/jump-10-plus */ \"./components/jumpButtons/jump-10-plus.js\");\n/* harmony import */ var _jumpButtons_jump_10_minus__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./jumpButtons/jump-10-minus */ \"./components/jumpButtons/jump-10-minus.js\");\n/* harmony import */ var _logoButton_logo_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./logoButton/logo-button */ \"./components/logoButton/logo-button.js\");\n/* harmony import */ var _progress_control_events_blocker_progress_control_events_blocker__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./progress-control-events-blocker/progress-control-events-blocker */ \"./components/progress-control-events-blocker/progress-control-events-blocker.js\");\n/* harmony import */ var _title_bar_title_bar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./title-bar/title-bar */ \"./components/title-bar/title-bar.js\");\n\n\n\n\n\n\n\n//# sourceURL=webpack://cloudinary-video-player/./components/index.js?");
/***/ }),
/***/ "./components/jumpButtons/jump-10-minus.js":
/*!*************************************************!*\
!*** ./components/jumpButtons/jump-10-minus.js ***!
\*************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ \"../node_modules/video.js/dist/alt/video.core-exposed.js\");\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);\n\nconst ClickableComponent = video_js__WEBPACK_IMPORTED_MODULE_0___default().getComponent('ClickableComponent');\nclass JumpBackButton extends ClickableComponent {\n handleClick(event) {\n super.handleClick(event);\n this.player().currentTime(this.player().currentTime() - 10);\n }\n createEl() {\n return video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('button', {\n className: 'vjs-control vjs-icon-skip-10-min vjs-icon-replay-10 vjs-button',\n ariaLabel: 'Jump back 10 seconds'\n });\n }\n}\nvideo_js__WEBPACK_IMPORTED_MODULE_0___default().registerComponent('JumpBackButton', JumpBackButton);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (JumpBackButton);\n\n//# sourceURL=webpack://cloudinary-video-player/./components/jumpButtons/jump-10-minus.js?");
/***/ }),
/***/ "./components/jumpButtons/jump-10-plus.js":
/*!************************************************!*\
!*** ./components/jumpButtons/jump-10-plus.js ***!
\************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ \"../node_modules/video.js/dist/alt/video.core-exposed.js\");\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);\n\nconst ClickableComponent = video_js__WEBPACK_IMPORTED_MODULE_0___default().getComponent('ClickableComponent');\nclass JumpForwardButton extends ClickableComponent {\n handleClick(event) {\n super.handleClick(event);\n this.player().currentTime(this.player().currentTime() + 10);\n }\n createEl() {\n return video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('button', {\n className: 'vjs-control vjs-icon-skip-10-plus vjs-icon-forward-10 vjs-button',\n ariaLabel: 'Jump forward 10 seconds'\n });\n }\n}\nvideo_js__WEBPACK_IMPORTED_MODULE_0___default().registerComponent('JumpForwardButton', JumpForwardButton);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (JumpForwardButton);\n\n//# sourceURL=webpack://cloudinary-video-player/./components/jumpButtons/jump-10-plus.js?");
/***/ }),
/***/ "./components/logoButton/logo-button.js":
/*!**********************************************!*\
!*** ./components/logoButton/logo-button.js ***!
\**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ \"../node_modules/video.js/dist/alt/video.core-exposed.js\");\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _logo_button_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logo-button.scss */ \"./components/logoButton/logo-button.scss\");\n\n\n\n// support VJS5 & VJS6 at the same time\nconst ClickableComponent = video_js__WEBPACK_IMPORTED_MODULE_0___default().getComponent('ClickableComponent');\nclass LogoButton extends ClickableComponent {\n createEl() {\n const opts = this.options_.playerOptions;\n const display = opts.showLogo ? 'block' : 'none';\n const bgImage = opts.logoImageUrl ? `background-image: url(${opts.logoImageUrl})` : '';\n return video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.createEl('a', {}, {\n class: 'vjs-control vjs-cloudinary-button vjs-button',\n href: opts.logoOnclickUrl,\n target: '_blank',\n style: `display: ${display}; ${bgImage}`,\n 'aria-label': 'Logo link'\n });\n }\n}\nvideo_js__WEBPACK_IMPORTED_MODULE_0___default().registerComponent('logoButton', LogoButton);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (LogoButton);\n\n//# sourceURL=webpack://cloudinary-video-player/./components/logoButton/logo-button.js?");
/***/ }),
/***/ "./components/progress-control-events-blocker/progress-control-events-blocker.js":
/*!***************************************************************************************!*\
!*** ./components/progress-control-events-blocker/progress-control-events-blocker.js ***!
\***************************************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ \"../node_modules/video.js/dist/alt/video.core-exposed.js\");\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);\n\nconst Component = video_js__WEBPACK_IMPORTED_MODULE_0___default().getComponent('Component');\nclass ProgressControlEventsBlocker extends Component {\n constructor(player) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(player, options);\n }\n createEl() {\n return super.createEl('div', {\n className: 'vjs-progress-control-events-blocker'\n });\n }\n}\nvideo_js__WEBPACK_IMPORTED_MODULE_0___default().registerComponent('progressControlEventsBlocker', ProgressControlEventsBlocker);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ProgressControlEventsBlocker);\n\n//# sourceURL=webpack://cloudinary-video-player/./components/progress-control-events-blocker/progress-control-events-blocker.js?");
/***/ }),
/***/ "./components/recommendations-overlay/index.js":
/*!*****************************************************!*\
!*** ./components/recommendations-overlay/index.js ***!
\*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ lazyRecommendationsOverlayComponent)\n/* harmony export */ });\nasync function lazyRecommendationsOverlayComponent(player) {\n try {\n if (!player.getChild('recommendationsOverlay')) {\n await Promise.all(/*! import() | recommendations-overlay */[__webpack_require__.e(\"styles\"), __webpack_require__.e(\"recommendations-overlay\")]).then(__webpack_require__.bind(__webpack_require__, /*! ./recommendations-overlay */ \"./components/recommendations-overlay/recommendations-overlay.js\"));\n player.addChild('recommendationsOverlay');\n }\n return player;\n } catch (error) {\n console.error('Failed to load plugin:', error);\n }\n}\n\n//# sourceURL=webpack://cloudinary-video-player/./components/recommendations-overlay/index.js?");
/***/ }),
/***/ "./components/title-bar/title-bar.js":
/*!*******************************************!*\
!*** ./components/title-bar/title-bar.js ***!
\*******************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ \"../node_modules/video.js/dist/alt/video.core-exposed.js\");\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var assets_styles_components_title_bar_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! assets/styles/components/title-bar.scss */ \"./assets/styles/components/title-bar.scss\");\n/* harmony import */ var _component_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../component-utils */ \"./components/component-utils.js\");\n/* harmony import */ var _component_utils__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_component_utils__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! plugins/cloudinary/common */ \"./plugins/cloudinary/common.js\");\n\n\n\n\n\n// support VJS5 & VJS6 at the same time\nconst dom = (video_js__WEBPACK_IMPORTED_MODULE_0___default().dom) || (video_js__WEBPACK_IMPORTED_MODULE_0___default());\nconst Component = video_js__WEBPACK_IMPORTED_MODULE_0___default().getComponent('Component');\nclass TitleBar extends Component {\n constructor(player) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super(player, options);\n this.on(player, 'cldsourcechanged', (_, _ref) => {\n let {\n source\n } = _ref;\n return this.setItem(source);\n });\n }\n setItem(source) {\n if (!source) {\n this.setTitle('');\n this.setDescription('');\n return;\n }\n const info = source.info();\n this.setTitle(info.title);\n this.setDescription(info.subtitle);\n\n // auto-fetch title/description if `true`\n const shouldFetchTitle = source.title && source.title() === true;\n const shouldFetchDescription = source.description && source.description() === true;\n if (shouldFetchTitle || shouldFetchDescription) {\n this.fetchAutoMetadata(source, shouldFetchTitle, shouldFetchDescription);\n }\n }\n fetchAutoMetadata(source, fetchTitle, fetchDescription) {\n if (source.isRawUrl) return;\n const config = source.cloudinaryConfig();\n const publicId = source.publicId();\n if (!config?.cloud_name || !publicId) return;\n const urlPrefix = (0,plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_3__.getCloudinaryUrlPrefix)(config);\n const deliveryType = source.getInitOptions().type || 'upload';\n const metadataUrl = `${urlPrefix}/_applet_/video_service/video_metadata/${deliveryType}/${publicId}.json`;\n fetch(metadataUrl).then(response => {\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\n return response.json();\n }).then(metadata => {\n if (fetchTitle && metadata.title) {\n this.setTitle(metadata.title);\n }\n if (fetchDescription && metadata.description) {\n this.setDescription(metadata.description);\n }\n }).catch(error => {\n console.warn(`Failed to fetch metadata for ${publicId}:`, error);\n });\n }\n setTitle(text) {\n const displayText = typeof text === 'string' ? text : '';\n _component_utils__WEBPACK_IMPORTED_MODULE_2___default().setText(this.titleEl, displayText);\n this.refresh();\n return displayText;\n }\n setDescription(text) {\n const displayText = typeof text === 'string' ? text : '';\n _component_utils__WEBPACK_IMPORTED_MODULE_2___default().setText(this.descriptionEl, displayText);\n this.refresh();\n return displayText;\n }\n refresh() {\n const titleValue = () => this.titleEl.innerText;\n const descriptionValue = () => this.descriptionEl.innerText;\n if (!titleValue() && !descriptionValue()) {\n this.hide();\n return;\n }\n this.show();\n }\n createEl() {\n this.titleEl = dom.createEl('div', {\n className: 'vjs-title-bar-title'\n });\n this.descriptionEl = dom.createEl('div', {\n className: 'vjs-title-bar-subtitle'\n });\n const el = super.createEl('div', {\n append: this.titleEl,\n className: 'vjs-title-bar'\n });\n el.appendChild(this.titleEl);\n el.appendChild(this.descriptionEl);\n return el;\n }\n}\nvideo_js__WEBPACK_IMPORTED_MODULE_0___default().registerComponent('titleBar', TitleBar);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (TitleBar);\n\n//# sourceURL=webpack://cloudinary-video-player/./components/title-bar/title-bar.js?");
/***/ }),
/***/ "./config/defaults.js":
/*!****************************!*\
!*** ./config/defaults.js ***!
\****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ \"../node_modules/video.js/dist/alt/video.core-exposed.js\");\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _plugins_context_menu_contextMenuContent__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../plugins/context-menu/contextMenuContent */ \"./plugins/context-menu/contextMenuContent.js\");\n/* harmony import */ var _video_player_const__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../video-player.const */ \"./video-player.const.js\");\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n logoOnclickUrl: 'https://cloudinary.com/',\n showLogo: true,\n showJumpControls: false,\n playsinline: (video_js__WEBPACK_IMPORTED_MODULE_0___default().browser).IS_IOS,\n skin: 'dark',\n controls: false,\n chaptersButton: false,\n pictureInPictureToggle: false,\n seekThumbnails: true,\n aiHighlightsGraph: false,\n visualSearch: false,\n download: false,\n preload: _video_player_const__WEBPACK_IMPORTED_MODULE_2__.PRELOAD.AUTO,\n textTrackSettings: false,\n loop: false,\n muted: false,\n posterOptions: {},\n sourceTypes: ['auto'],\n contextMenu: {\n content: _plugins_context_menu_contextMenuContent__WEBPACK_IMPORTED_MODULE_1__[\"default\"]\n },\n floatingWhenNotVisible: _video_player_const__WEBPACK_IMPORTED_MODULE_2__.FLOATING_TO.NONE,\n hideContextMenu: false,\n analytics: false,\n cloudinaryAnalytics: true,\n allowUsageReport: true,\n playedEventPercents: [25, 50, 75, 100],\n adaptiveStreaming: {\n strategy: 'balanced'\n },\n html5: {\n handlePartialData: false,\n nativeTextTracks: false\n },\n disableSeekWhileScrubbingOnMobile: true\n});\n\n//# sourceURL=webpack://cloudinary-video-player/./config/defaults.js?");
/***/ }),
/***/ "./extended-events.js":
/*!****************************!*\
!*** ./extended-events.js ***!
\****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ normalizeEventsParam: () => (/* binding */ normalizeEventsParam)\n/* harmony export */ });\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ \"../node_modules/video.js/dist/alt/video.core-exposed.js\");\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var events__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! events */ \"../node_modules/events/events.js\");\n/* harmony import */ var events__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(events__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var lodash_isObject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash/isObject */ \"../node_modules/lodash/isObject.js\");\n/* harmony import */ var lodash_isObject__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_isObject__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _utils_consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/consts */ \"./utils/consts.js\");\n\n\n\n\nconst EVENT_DEFAULTS = {\n percentsplayed: {\n percents: [25, 50, 75, 100]\n }\n};\nconst DEFAULT_EVENTS = [_utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.PERCENTS_PLAYED, _utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.PAUSE_NO_SEEK, _utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.SEEK, _utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.MUTE, _utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.UNMUTE, _utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.QUALITY_CHANGED];\nconst DEFAULT_OPTIONS = {\n events: DEFAULT_EVENTS\n};\n\n// Emits the following additional events:\n// percentsplayed, timeplayed, pausenoseek, seek, mute, unmute\nclass ExtendedEvents extends (events__WEBPACK_IMPORTED_MODULE_1___default()) {\n constructor(player) {\n let initOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n super();\n this.player = player;\n const options = video_js__WEBPACK_IMPORTED_MODULE_0___default().obj.merge(DEFAULT_OPTIONS, initOptions);\n let _muteData = {\n lastState: undefined\n };\n let _seekStart = 0;\n let _seekEnd = 0;\n let _seeking = false;\n let _percentsTracked = [];\n let _timesTracked = [];\n let _currentSource = null;\n let _ended = false;\n const volumechange = event => {\n if (this.player.muted() && _muteData.lastState !== 'muted') {\n _muteData.lastState = 'muted';\n this.emit(_utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.MUTE, event);\n } else if (!this.player.muted() && _muteData.lastState !== 'unmuted') {\n _muteData.lastState = 'unmuted';\n this.emit(_utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.UNMUTE, event);\n }\n };\n const timeupdate = event => {\n const currentTime = this.player.currentTime();\n const duration = this.player.duration();\n const _emit = (type, data) => {\n data.originalType = 'timeupdate';\n this.emit(type, event, data);\n };\n if (this.events.percentsplayed) {\n this.events.percentsplayed.percents.forEach(percent => {\n if (playedAtPercentage(currentTime, duration, percent) && _percentsTracked.indexOf(percent) === -1) {\n _percentsTracked.push(percent);\n _emit(_utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.PERCENTS_PLAYED, {\n percent\n });\n }\n });\n }\n if (this.events.timeplayed) {\n const timeplayed = this.events.timeplayed;\n const times = timeplayed.interval ? [Math.floor(currentTime / timeplayed.interval) * timeplayed.interval] : timeplayed.times;\n times.forEach(time => {\n if (playedAtTime(currentTime, time) && _timesTracked.indexOf(time) === -1) {\n _timesTracked.push(time);\n _emit(_utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.TIME_PLAYED, {\n time\n });\n }\n });\n }\n if (this.events.seek) {\n _seekStart = _seekEnd;\n _seekEnd = currentTime;\n if (Math.abs(_seekStart - _seekEnd) > 1) {\n _seeking = true;\n\n // should empty _timesTracked array on seek, needed for 'timeplayed' event\n resetPerVideoState();\n _emit(_utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.SEEK, {\n seekStart: _seekStart,\n seekEnd: _seekEnd\n });\n }\n }\n };\n const pause = event => {\n const currentTime = Math.round(this.player.currentTime());\n const duration = Math.round(this.player.duration());\n if (currentTime !== duration && !_seeking) {\n this.emit(_utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.PAUSE_NO_SEEK, event);\n }\n };\n const play = () => {\n _seeking = false;\n };\n const replay = () => {\n if (_ended) {\n this.player.trigger('replay');\n _ended = false;\n }\n };\n const loadedmetadata = () => {\n if (this.player.currentSource().src !== _currentSource) {\n resetPerVideoState();\n _currentSource = this.player.currentSource().src;\n }\n };\n const adaptiveEvents = event => {\n let ee = this;\n let tracks = this.player.textTracks();\n let segmentMetadataTrack = null;\n for (let i = 0; i < tracks.length; i++) {\n if (tracks[i].label === 'segment-metadata') {\n segmentMetadataTrack = tracks[i];\n }\n }\n let previousResolution = null;\n if (segmentMetadataTrack) {\n segmentMetadataTrack.on('cuechange', function () {\n let activeCue = segmentMetadataTrack.activeCues[0];\n if (activeCue) {\n let currentRes = activeCue.value.resolution;\n if (previousResolution !== currentRes) {\n let data = {\n from: previousResolution,\n to: currentRes\n };\n ee.emit(_utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.QUALITY_CHANGED, event, data);\n }\n previousResolution = currentRes;\n }\n });\n }\n };\n const resetState = () => {\n _muteData = {\n lastState: undefined\n };\n _seekStart = _seekEnd = 0;\n _seeking = false;\n resetPerVideoState();\n };\n const resetPerVideoState = () => {\n _percentsTracked = [];\n _timesTracked = [];\n };\n const ended = () => {\n _ended = true;\n };\n this.events = normalizeEventsParam(options.events, EVENT_DEFAULTS);\n resetState();\n this.player.on(_utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.PLAY, replay.bind(this));\n this.player.on(_utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.ENDED, ended.bind(this));\n if (this.events.percentsplayed || this.events.timeplayed || this.events.seek || this.events.totaltimeplayed) {\n this.player.on(_utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.TIME_UPDATE, timeupdate.bind(this));\n }\n if (this.events.mute || this.events.unmute) {\n this.player.on(_utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.VOLUME_CHANGE, volumechange.bind(this));\n }\n if (this.events.pausenoseek) {\n this.player.on(_utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.PAUSE, pause.bind(this));\n this.player.on(_utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.PLAY, play.bind(this));\n }\n this.player.on(_utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.LOADED_METADATA, loadedmetadata.bind(this));\n this.player.on(_utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.LOADED_DATA, adaptiveEvents.bind(this));\n }\n}\nconst normalizeEventsParam = (events, defaults) => {\n let normalized = events;\n if (events.constructor.name === 'Array') {\n normalized = events.reduce((agg, item) => {\n const eventDefaults = defaults[item] || {};\n if (lodash_isObject__WEBPACK_IMPORTED_MODULE_2___default()(item)) {\n agg[item.type] = Object.assign({}, eventDefaults, item);\n } else {\n agg[item] = eventDefaults;\n }\n return agg;\n }, {});\n }\n return normalized;\n};\nconst playedAtPercentage = function (currentTime, duration, percentageCheckpoint) {\n let graceRangeSeconds = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.5;\n const checkPoint = duration * percentageCheckpoint / 100;\n return playedAtTime(currentTime, checkPoint, graceRangeSeconds);\n};\nconst playedAtTime = function (currentTime, checkpoint) {\n let graceRangeSeconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.5;\n return currentTime <= checkpoint + graceRangeSeconds && currentTime >= checkpoint - graceRangeSeconds;\n};\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ExtendedEvents);\n\n//# sourceURL=webpack://cloudinary-video-player/./extended-events.js?");
/***/ }),
/***/ "./index.js":
/*!******************!*\
!*** ./index.js ***!
\******************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ player: () => (/* binding */ player),\n/* harmony export */ players: () => (/* binding */ players),\n/* harmony export */ videoPlayer: () => (/* binding */ videoPlayer),\n/* harmony export */ videoPlayers: () => (/* binding */ videoPlayers)\n/* harmony export */ });\n/* harmony import */ var assets_styles_main_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! assets/styles/main.scss */ \"./assets/styles/main.scss\");\n/* harmony import */ var lodash_pick__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/pick */ \"../node_modules/lodash/pick.js\");\n/* harmony import */ var lodash_pick__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_pick__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _video_player__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./video-player */ \"./video-player.js\");\n/* harmony import */ var _player__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./player */ \"./player.js\");\n/* harmony import */ var _utils_object__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/object */ \"./utils/object.js\");\n/* harmony import */ var _video_player_const__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./video-player.const */ \"./video-player.const.js\");\n\n\n\n\n\n\nconst getConfig = function () {\n let playerOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let cloudinaryConfig = arguments.length > 1 ? arguments[1] : undefined;\n const snakeCaseCloudinaryConfig = lodash_pick__WEBPACK_IMPORTED_MODULE_1___default()((0,_utils_object__WEBPACK_IMPORTED_MODULE_4__.convertKeysToSnakeCase)(playerOptions), _video_player_const__WEBPACK_IMPORTED_MODULE_5__.CLOUDINARY_CONFIG_PARAM);\n\n // pick cld-configurations and assign them to cloudinaryConfig\n return Object.assign(playerOptions, {\n cloudinaryConfig: cloudinaryConfig || snakeCaseCloudinaryConfig\n });\n};\nconst getVideoPlayer = config => (id, playerOptions, ready) => new _video_player__WEBPACK_IMPORTED_MODULE_2__[\"default\"](id, getConfig(playerOptions, config), ready);\nconst getVideoPlayers = config => (selector, playerOptions, ready) => _video_player__WEBPACK_IMPORTED_MODULE_2__[\"default\"].all(selector, getConfig(playerOptions, config), ready);\nconst getPlayer = config => (id, playerOptions, ready) => (0,_player__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(id, getConfig(playerOptions, config), ready);\nconst getPlayers = config => (selector, playerOptions, ready) => {\n const nodeList = document.querySelectorAll(selector);\n const playerConfig = getConfig(playerOptions, config);\n return [...nodeList].map(node => (0,_player__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(node, playerConfig, ready));\n};\nconst videoPlayer = getVideoPlayer();\nconst videoPlayers = getVideoPlayers();\nconst player = getPlayer();\nconst players = getPlayers();\nconst cloudinaryVideoPlayerLegacyConfig = config => {\n console.warn('Cloudinary.new() is deprecated and will be removed. Please use cloudinary.videoPlayer() instead.');\n return {\n videoPlayer: getVideoPlayer(config),\n videoPlayers: getVideoPlayers(config)\n };\n};\nconst cloudinary = {\n ...(window.cloudinary || {}),\n videoPlayer,\n videoPlayers,\n player,\n players,\n Cloudinary: {\n // Backwards compatibility with SDK v1\n new: cloudinaryVideoPlayerLegacyConfig\n }\n};\nwindow.cloudinary = cloudinary;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloudinary);\n\n//# sourceURL=webpack://cloudinary-video-player/./index.js?");
/***/ }),
/***/ "./mixins/eventable.js":
/*!*****************************!*\
!*** ./mixins/eventable.js ***!
\*****************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\nconst Eventable = superclass => class extends superclass {\n constructor() {\n var _this;\n super();\n _this = this;\n const eventable = {\n data: {},\n handlers: {}\n };\n this.on = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n const lastIndex = args.length - 1;\n const func = args[lastIndex];\n eventable.handlers[func] = function (event) {\n event.Player = _this;\n for (var _len2 = arguments.length, _args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n _args[_key2 - 1] = arguments[_key2];\n }\n func(event, ..._args);\n };\n args[lastIndex] = eventable.handlers[func];\n return _this.videojs.on(...args);\n };\n this.one = function () {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n const lastIndex = args.length - 1;\n const func = args[lastIndex];\n eventable.handlers[func] = function (event) {\n event.Player = _this;\n for (var _len4 = arguments.length, _args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n _args[_key4 - 1] = arguments[_key4];\n }\n func(event, ..._args);\n delete eventable.handlers[func];\n };\n args[lastIndex] = eventable.handlers[func];\n return _this.videojs.one(...args);\n };\n this.off = function () {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n const lastIndex = args.length - 1;\n const func = args[lastIndex];\n args[lastIndex] = eventable.handlers[func];\n const res = _this.videojs.off(...args);\n delete eventable.handlers[func];\n return res;\n };\n this.trigger = function () {\n _this.videojs.trigger(...arguments);\n };\n }\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Eventable);\n\n//# sourceURL=webpack://cloudinary-video-player/./mixins/eventable.js?");
/***/ }),
/***/ "./player.js":
/*!*******************!*\
!*** ./player.js ***!
\*******************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getProfile: () => (/* binding */ getProfile)\n/* harmony export */ });\n/* harmony import */ var _video_player__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./video-player */ \"./video-player.js\");\n/* harmony import */ var cloudinary_video_player_profiles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! cloudinary-video-player-profiles */ \"../node_modules/cloudinary-video-player-profiles/dist/index.js\");\n/* harmony import */ var cloudinary_video_player_profiles__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(cloudinary_video_player_profiles__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./plugins/cloudinary/common */ \"./plugins/cloudinary/common.js\");\n\n\n\nconst isDefaultProfile = profileName => !!cloudinary_video_player_profiles__WEBPACK_IMPORTED_MODULE_1__.defaultProfiles.find(_ref => {\n let {\n name\n } = _ref;\n return profileName === name;\n});\nconst getDefaultProfileConfig = profileName => {\n const profile = cloudinary_video_player_profiles__WEBPACK_IMPORTED_MODULE_1__.defaultProfiles.find(_ref2 => {\n let {\n name\n } = _ref2;\n return profileName === name;\n });\n if (!profile) {\n throw new Error(`Default profile with name ${profileName} does not exist`);\n }\n return profile.config;\n};\nconst getProfile = async (profile, initOptions) => {\n if (isDefaultProfile(profile)) {\n return getDefaultProfileConfig(profile);\n }\n const urlPrefix = (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_2__.getCloudinaryUrlPrefix)(initOptions.cloudinaryConfig);\n const profileUrl = (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_2__.isRawUrl)(profile) ? profile : `${urlPrefix}/_applet_/video_service/video_player_profiles/${profile.replaceAll(' ', '+')}.json`;\n return fetch(profileUrl, {\n method: 'GET'\n }).then(res => res.json());\n};\nconst player = async (elem, initOptions, ready) => {\n const {\n profile,\n ...otherInitOptions\n } = initOptions;\n try {\n const profileOptions = profile ? await getProfile(profile, otherInitOptions) : {};\n const options = Object.assign({}, profileOptions.playerOptions, profileOptions.sourceOptions, otherInitOptions, {\n _internalAnalyticsMetadata: {\n newPlayerMethod: true,\n profile: isDefaultProfile(profile) ? profile : !!profile\n }\n });\n const videoPlayer = new _video_player__WEBPACK_IMPORTED_MODULE_0__[\"default\"](elem, options, ready);\n const nativeVideoPlayerSourceMethod = videoPlayer.source;\n videoPlayer.source = (id, options) => {\n const extendedOptions = Object.assign({}, profileOptions.sourceOptions, options);\n return nativeVideoPlayerSourceMethod.call(videoPlayer, id, extendedOptions);\n };\n return videoPlayer;\n } catch (e) {\n const videoPlayer = new _video_player__WEBPACK_IMPORTED_MODULE_0__[\"default\"](elem, otherInitOptions);\n videoPlayer.videojs.error('Invalid profile');\n throw e;\n }\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (player);\n\n//# sourceURL=webpack://cloudinary-video-player/./player.js?");
/***/ }),
/***/ "./plugins/adaptive-streaming/index.js":
/*!*********************************************!*\
!*** ./plugins/adaptive-streaming/index.js ***!
\*********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ lazyAdaptiveStreamingPlugin)\n/* harmony export */ });\nasync function lazyAdaptiveStreamingPlugin(options) {\n const player = this;\n try {\n if (options.isDash && !window.dashjs) {\n await __webpack_require__.e(/*! import() | dash */ \"dash\").then(__webpack_require__.bind(__webpack_require__, /*! videojs-contrib-dash */ \"../node_modules/videojs-contrib-dash/dist/videojs-dash.es.js\"));\n }\n const {\n default: abrPlugin\n } = await __webpack_require__.e(/*! import() | adaptive-streaming */ \"adaptive-streaming\").then(__webpack_require__.bind(__webpack_require__, /*! ./adaptive-streaming */ \"./plugins/adaptive-streaming/adaptive-streaming.js\"));\n abrPlugin(player, options);\n } catch (error) {\n console.error('Failed to load plugin:', error);\n }\n}\n\n//# sourceURL=webpack://cloudinary-video-player/./plugins/adaptive-streaming/index.js?");
/***/ }),
/***/ "./plugins/ai-highlights-graph/index.js":
/*!**********************************************!*\
!*** ./plugins/ai-highlights-graph/index.js ***!
\**********************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ \"../node_modules/video.js/dist/alt/video.core-exposed.js\");\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _ai_highlights_graph_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ai-highlights-graph.scss */ \"./plugins/ai-highlights-graph/ai-highlights-graph.scss\");\n\n\n\n// Default options for the plugin.\nlet defaults = {};\n\n/**\n * Function to invoke when the player is ready.\n *\n * @function onPlayerReady\n * @param {Player} player\n * A Video.js player object.\n *\n * @param {Object} [options={}]\n * A plain object containing options for the plugin.\n */\nconst onPlayerReady = function onPlayerReady(player, options) {\n player.addClass('vjs-ai-highlights-graph');\n player.aiHighlightsGraph = new HighlightsGraphPlugin(player, options);\n};\n\n/**\n * A video.js plugin.\n *\n * In the plugin function, the value of `this` is a video.js `Player`\n * instance. You cannot rely on the player being in a \"ready\" state here,\n * depending on how the plugin is invoked. This may or may not be important\n * to you; if not, remove the wait for \"ready\"!\n *\n * @function aiHighlightsGraph\n * @param {Object} [options={}]\n * An object of options left to the plugin author to define.\n */\nfunction aiHighlightsGraph(options) {\n this.ready(() => {\n onPlayerReady(this, video_js__WEBPACK_IMPORTED_MODULE_0___default().obj.merge(defaults, options));\n });\n}\n\n/**\n * HighlightsGraphPlugin class.\n *\n * This class performs all functions related to displaying the AI highlights graph.\n */\nconst HighlightsGraphPlugin = function () {\n /**\n * Plugin class constructor, called by videojs on\n * ready event.\n *\n * @function constructor\n * @param {Player} player\n * A Video.js player object.\n *\n * @param {Object} [options={}]\n * A plain object containing options for the plugin.\n */\n function HighlightsGraphPlugin(player, options) {\n this.player = player;\n this.options = options;\n this.initializeHighlightsGraph();\n return this;\n }\n HighlightsGraphPlugin.prototype.src = function src(source) {\n this.resetPlugin();\n this.options.src = source;\n this.initializeHighlightsGraph();\n };\n HighlightsGraphPlugin.prototype.detach = function detach() {\n this.resetPlugin();\n };\n HighlightsGraphPlugin.prototype.resetPlugin = function resetPlugin() {\n if (this.graphHolder) {\n this.graphHolder.parentNode.removeChild(this.graphHolder);\n }\n delete this.progressBar;\n delete this.graphHolder;\n delete this.lastStyle;\n };\n\n /**\n * Bootstrap the plugin.\n */\n HighlightsGraphPlugin.prototype.initializeHighlightsGraph = function initializeHighlightsGraph() {\n if (!this.options.src) {\n return;\n }\n fetch(this.options.src, {\n credentials: this.player.cloudinary.source?.().withCredentials ? 'include' : 'omit'\n }).then(res => {\n return res.json();\n }).then(res => {\n this.setupHighlightsGraphElement();\n if (this.graphHolder) {\n this.createHighlightsGraph(res);\n }\n });\n };\n HighlightsGraphPlugin.prototype.setupHighlightsGraphElement = function setupHighlightsGraphElement() {\n this.progressBar = this.player.$('.vjs-progress-control');\n if (!this.progressBar) {\n return;\n }\n const graphHolder = this.player.$('.vjs-highlights-graph-display') || document.createElement('div');\n graphHolder.setAttribute('class', 'vjs-highlights-graph-display');\n this.progressBar.appendChild(graphHolder);\n this.graphHolder = graphHolder;\n };\n\n /**\n * Function to create the SVG path element\n */\n HighlightsGraphPlugin.prototype.createPath = function createPath(dataArray, containerWidth, containerHeight) {\n // Calculate the x and y coordinates for each point\n const stepX = containerWidth / (dataArray.length - 1);\n const points = dataArray.map((value, index) => ({\n x: index * stepX,\n y: containerHeight - value * containerHeight\n }));\n\n // Create a smooth line path\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n path.setAttribute('fill', 'lightblue');\n\n // Generate the smooth line path data\n let d = `M ${points[0].x},${points[0].y}`;\n for (let i = 0; i < points.length - 1; i++) {\n const xc = (points[i].x + points[i + 1].x) / 2;\n const yc = (points[i].y + points[i + 1].y) / 2;\n d += ` Q ${points[i].x},${points[i].y} ${xc},${yc}`;\n }\n d += ` Q ${points[points.length - 1].x},${points[points.length - 1].y} ${points[points.length - 1].x},${points[points.length - 1].y}`;\n\n // Close the path to fill the region under the line\n d += ` L ${points[points.length - 1].x},${containerHeight} L ${points[0].x},${containerHeight} Z`;\n path.setAttribute('d', d);\n return path;\n };\n HighlightsGraphPlugin.prototype.createHighlightsGraph = function createHighlightsGraph(info) {\n const data = info.data;\n const svgWidth = 600;\n const svgHeight = 20;\n const svg = this.player.$('.vjs-highlights-graph-display > svg') || document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('viewBox', `0 0 ${svgWidth} ${svgHeight}`);\n svg.setAttribute('preserveAspectRatio', 'none');\n svg.setAttribute('width', svgWidth);\n svg.setAttribute('height', svgHeight);\n svg.innerHTML = '';\n const path = this.createPath(data, svgWidth, svgHeight);\n svg.appendChild(path);\n this.graphHolder.appendChild(svg);\n };\n return HighlightsGraphPlugin;\n}();\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (aiHighlightsGraph);\n\n//# sourceURL=webpack://cloudinary-video-player/./plugins/ai-highlights-graph/index.js?");
/***/ }),
/***/ "./plugins/analytics/index.js":
/*!************************************!*\
!*** ./plugins/analytics/index.js ***!
\************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ \"../node_modules/video.js/dist/alt/video.core-exposed.js\");\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var utils_slicing__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! utils/slicing */ \"./utils/slicing.js\");\n/* harmony import */ var extended_events__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! extended-events */ \"./extended-events.js\");\n/* harmony import */ var _utils_consts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/consts */ \"./utils/consts.js\");\n\n\n\n\nconst DEFAULT_EVENTS = [_utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.PLAY, _utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.PAUSE, _utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.ENDED, _utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.VOLUME_CHANGE, _utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.RESIZE, _utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.ERROR, _utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.FULL_SCREEN_CHANGE, _utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.START, _utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.VIDEO_LOAD, _utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.PERCENTS_PLAYED, _utils_consts__WEBPACK_IMPORTED_MODULE_3__.PLAYER_EVENT.