cloudinary-video-player 3.14.1 → 3.14.2-edge.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/README.md +3 -13
  2. package/dist/149.min.js +6 -0
  3. package/dist/309.min.js +3 -3
  4. package/dist/689.min.js +2 -2
  5. package/dist/801.min.js +6 -0
  6. package/dist/adaptive-streaming.js +2 -2
  7. package/dist/adaptive-streaming.min.js +2 -2
  8. package/dist/chapters.js +2 -2
  9. package/dist/chapters.min.js +2 -2
  10. package/dist/cld-player-core.js +3119 -11
  11. package/dist/cld-player-core.min.js +3 -3
  12. package/dist/cld-poster-url.js +2 -2
  13. package/dist/cld-poster-url.min.js +2 -2
  14. package/dist/cld-video-player.css +5 -5
  15. package/dist/cld-video-player.js +43 -42
  16. package/dist/cld-video-player.light.js +43 -42
  17. package/dist/cld-video-player.light.min.js +3 -5
  18. package/dist/cld-video-player.min.css +2 -2
  19. package/dist/cld-video-player.min.js +3 -5
  20. package/dist/colors.js +2 -2
  21. package/dist/colors.min.js +2 -2
  22. package/dist/dash.js +2 -2
  23. package/dist/dash.min.js +2 -2
  24. package/dist/debug.js +2 -2
  25. package/dist/debug.min.js +2 -2
  26. package/dist/ima.js +2 -2
  27. package/dist/ima.min.js +2 -2
  28. package/dist/interaction-areas.js +7 -7
  29. package/dist/interaction-areas.min.js +3 -3
  30. package/dist/node_modules_lodash_throttle_js.js +2 -2
  31. package/dist/{video-player_js.js → player-full.js} +1398 -29
  32. package/dist/player-full.min.js +6 -0
  33. package/dist/player.css +3128 -0
  34. package/dist/{cld-video-player-lazy.js → player.js} +69 -101
  35. package/dist/player.min.css +5 -0
  36. package/dist/player.min.js +6 -0
  37. package/dist/playlist.js +2 -2
  38. package/dist/playlist.min.js +2 -2
  39. package/dist/recommendations-overlay.js +2 -2
  40. package/dist/recommendations-overlay.min.js +2 -2
  41. package/dist/share.js +2 -2
  42. package/dist/share.min.js +2 -2
  43. package/dist/shoppable.js +23 -23
  44. package/dist/shoppable.min.js +3 -3
  45. package/dist/utils_fetch-config_js.js +101 -2
  46. package/dist/utils_schedule_js.js +2 -2
  47. package/dist/visual-search.js +2 -2
  48. package/dist/visual-search.min.js +2 -2
  49. package/lib/all.js +3 -4
  50. package/lib/chapters.js +2 -3
  51. package/lib/cld-video-player.min.css +2 -2
  52. package/lib/cloudinary-config-from-options.js +21 -2775
  53. package/lib/colors.js +3 -2
  54. package/lib/debug.js +2 -2
  55. package/lib/fetch-config.js +0 -2
  56. package/lib/index.full.js +57 -0
  57. package/lib/index.js +128 -11
  58. package/lib/index2.js +10331 -0
  59. package/lib/{interaction-areas.service.js → interaction-areas.js} +4 -3
  60. package/lib/player-api.js +7 -2
  61. package/lib/player.min.css +5 -0
  62. package/lib/playlist-panel.js +1 -1
  63. package/lib/playlist.js +4 -3
  64. package/lib/recommendations-overlay.js +2 -3
  65. package/lib/share.js +2 -3
  66. package/lib/shoppable-post-widget.js +1 -1
  67. package/lib/{shoppable-widget.js → shoppable.js} +1 -2
  68. package/lib/throttle.js +1 -1
  69. package/lib/toNumber.js +2 -2
  70. package/lib/validators-functions.js +2 -47
  71. package/lib/video-player.const.js +47 -5
  72. package/lib/video-player.js +401 -7997
  73. package/package.json +22 -23
  74. package/dist/350.min.js +0 -6
  75. package/dist/933.min.js +0 -8
  76. package/dist/cld-video-player-lazy.min.js +0 -6
  77. package/dist/plugins_cloudinary_url-helpers_js-utils_cloudinary-config-from-options_js-utils_querystring_j-adfe37.js +0 -996
  78. package/lib/lazy.js +0 -19
  79. package/lib/player.js +0 -9
  80. package/lib/videoPlayer.js +0 -9
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * Cloudinary Video Player v3.14.1
3
- * Built on 2026-04-26T10:01:58.309Z
2
+ * Cloudinary Video Player v3.14.2-edge.1
3
+ * Built on 2026-04-29T09:18:27.638Z
4
4
  * https://github.com/cloudinary/cloudinary-video-player
5
5
  */
6
6
  /*
@@ -151,7 +151,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
151
151
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
152
152
 
153
153
  "use strict";
154
- 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 _utils_utf8Base64__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/utf8Base64 */ \"./utils/utf8Base64.js\");\n/* harmony import */ var _plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ~/plugins/cloudinary/common */ \"./plugins/cloudinary/common.js\");\n/* harmony import */ var _utils_querystring__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/querystring */ \"./utils/querystring.js\");\n\n\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_4__.getCloudinaryUrlPrefix)(config);\n const deliveryType = source.getInitOptions().type || 'upload';\n const metadataUrl = (0,_utils_querystring__WEBPACK_IMPORTED_MODULE_5__.appendQueryParams)(`${urlPrefix}/_applet_/video_service/video_metadata/${deliveryType}/${(0,_utils_utf8Base64__WEBPACK_IMPORTED_MODULE_3__.utf8ToBase64)(publicId)}.json`, source.queryParams());\n fetch(metadataUrl, {\n headers: {\n 'X-Cld-Video-Player-Version': \"3.14.1\"\n }\n }).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:///./components/title-bar/title-bar.js?\n}");
154
+ 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 _utils_utf8Base64__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/utf8Base64 */ \"./utils/utf8Base64.js\");\n/* harmony import */ var _plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ~/plugins/cloudinary/common */ \"./plugins/cloudinary/common.js\");\n/* harmony import */ var _utils_querystring__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/querystring */ \"./utils/querystring.js\");\n\n\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_4__.getCloudinaryUrlPrefix)(config);\n const deliveryType = source.getInitOptions().type || 'upload';\n const metadataUrl = (0,_utils_querystring__WEBPACK_IMPORTED_MODULE_5__.appendQueryParams)(`${urlPrefix}/_applet_/video_service/video_metadata/${deliveryType}/${(0,_utils_utf8Base64__WEBPACK_IMPORTED_MODULE_3__.utf8ToBase64)(publicId)}.json`, source.queryParams());\n fetch(metadataUrl, {\n headers: {\n 'X-Cld-Video-Player-Version': \"3.14.2-edge.1\"\n }\n }).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:///./components/title-bar/title-bar.js?\n}");
155
155
 
156
156
  /***/ },
157
157
 
@@ -177,14 +177,14 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
177
177
 
178
178
  /***/ },
179
179
 
180
- /***/ "./index.umd.js"
181
- /*!**********************!*\
182
- !*** ./index.umd.js ***!
183
- \**********************/
180
+ /***/ "./index.full.js"
181
+ /*!***********************!*\
182
+ !*** ./index.full.js ***!
183
+ \***********************/
184
184
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
185
185
 
186
186
  "use strict";
187
- 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 _video_player__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./video-player */ \"./video-player.js\");\n/* harmony import */ var _utils_player_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/player-api */ \"./utils/player-api.js\");\n/**\n * UMD entry: full player bundle for backwards-compatible sync videoPlayer().\n * player() is async with profile and schedule support.\n */\n\n\n\nconst videoPlayer = function (id) {\n let playerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let ready = arguments.length > 2 ? arguments[2] : undefined;\n return (0,_video_player__WEBPACK_IMPORTED_MODULE_1__.createVideoPlayer)(id, playerOptions, ready);\n};\nconst videoPlayers = (selector, playerOptions, ready) => (0,_utils_player_api__WEBPACK_IMPORTED_MODULE_2__.createMultipleSync)(selector, playerOptions, ready, videoPlayer);\nconst player = function (id) {\n let playerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let ready = arguments.length > 2 ? arguments[2] : undefined;\n return (0,_utils_player_api__WEBPACK_IMPORTED_MODULE_2__.createAsyncPlayer)(id, playerOptions, ready, _video_player__WEBPACK_IMPORTED_MODULE_1__.createPlayerWithConfig);\n};\nconst players = (selector, playerOptions, ready) => (0,_utils_player_api__WEBPACK_IMPORTED_MODULE_2__.createMultiplePlayers)(selector, playerOptions, ready, player);\nconst cloudinaryVideoPlayerLegacyConfig = function () {\n let instanceConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n console.warn('Cloudinary.new() is deprecated and will be removed. Please use cloudinary.videoPlayer() instead.');\n const mergeOpts = function () {\n let callOpts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return Object.assign({}, instanceConfig, callOpts);\n };\n return {\n videoPlayer: function (id) {\n let playerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let ready = arguments.length > 2 ? arguments[2] : undefined;\n return (0,_video_player__WEBPACK_IMPORTED_MODULE_1__.createVideoPlayer)(id, mergeOpts(playerOptions), ready);\n },\n videoPlayers: function (selector) {\n let playerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let ready = arguments.length > 2 ? arguments[2] : undefined;\n return (0,_utils_player_api__WEBPACK_IMPORTED_MODULE_2__.createMultipleSync)(selector, mergeOpts(playerOptions), ready, videoPlayer);\n }\n };\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils_player_api__WEBPACK_IMPORTED_MODULE_2__.setupCloudinaryGlobal)({\n videoPlayer,\n videoPlayers,\n player,\n players,\n Cloudinary: {\n new: cloudinaryVideoPlayerLegacyConfig\n }\n}));\n\n//# sourceURL=webpack:///./index.umd.js?\n}");
187
+ 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 _video_player__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./video-player */ \"./video-player.js\");\n/* harmony import */ var _utils_player_api__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/player-api */ \"./utils/player-api.js\");\n/**\n * UMD entry: full player bundle for backwards-compatible sync videoPlayer().\n * player() is async with profile and schedule support.\n */\n\n\n\nconst videoPlayer = function (id) {\n let playerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let ready = arguments.length > 2 ? arguments[2] : undefined;\n return (0,_video_player__WEBPACK_IMPORTED_MODULE_1__.createVideoPlayer)(id, playerOptions, ready);\n};\nconst videoPlayers = (selector, playerOptions, ready) => (0,_utils_player_api__WEBPACK_IMPORTED_MODULE_2__.createMultipleSync)(selector, playerOptions, ready, videoPlayer);\nconst player = function (id) {\n let playerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let ready = arguments.length > 2 ? arguments[2] : undefined;\n return (0,_utils_player_api__WEBPACK_IMPORTED_MODULE_2__.createAsyncPlayer)(id, playerOptions, ready, _video_player__WEBPACK_IMPORTED_MODULE_1__.createPlayerWithConfig);\n};\nconst players = (selector, playerOptions, ready) => (0,_utils_player_api__WEBPACK_IMPORTED_MODULE_2__.createMultiplePlayers)(selector, playerOptions, ready, player);\nconst cloudinaryVideoPlayerLegacyConfig = function () {\n let instanceConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n console.warn('Cloudinary.new() is deprecated and will be removed. Please use cloudinary.videoPlayer() instead.');\n const mergeOpts = function () {\n let callOpts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return Object.assign({}, instanceConfig, callOpts);\n };\n return {\n videoPlayer: function (id) {\n let playerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let ready = arguments.length > 2 ? arguments[2] : undefined;\n return (0,_video_player__WEBPACK_IMPORTED_MODULE_1__.createVideoPlayer)(id, mergeOpts(playerOptions), ready);\n },\n videoPlayers: function (selector) {\n let playerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let ready = arguments.length > 2 ? arguments[2] : undefined;\n return (0,_utils_player_api__WEBPACK_IMPORTED_MODULE_2__.createMultipleSync)(selector, mergeOpts(playerOptions), ready, videoPlayer);\n }\n };\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ((0,_utils_player_api__WEBPACK_IMPORTED_MODULE_2__.setupCloudinaryGlobal)({\n videoPlayer,\n videoPlayers,\n player,\n players,\n Cloudinary: {\n new: cloudinaryVideoPlayerLegacyConfig\n }\n}));\n\n//# sourceURL=webpack:///./index.full.js?\n}");
188
188
 
189
189
  /***/ },
190
190
 
@@ -250,7 +250,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
250
250
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
251
251
 
252
252
  "use strict";
253
- 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 lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/isPlainObject */ \"../node_modules/lodash/isPlainObject.js\");\n/* harmony import */ var lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var cloudinary_video_analytics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! cloudinary-video-analytics */ \"../node_modules/cloudinary-video-analytics/dist/main.js\");\n/* harmony import */ var cloudinary_video_analytics__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(cloudinary_video_analytics__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/consts */ \"./utils/consts.js\");\n\n\n\nclass CloudinaryAnalytics {\n constructor(player, options) {\n this.player = player;\n this.cloudinaryAnalytics = (0,cloudinary_video_analytics__WEBPACK_IMPORTED_MODULE_1__.connectCloudinaryAnalytics)(this.player.videoElement, {\n playerAdapter: this.getCloudinaryVideoPlayerAdapter()\n });\n this.currentVideoMetadata = {\n cloudName: null,\n publicId: null\n };\n this.analyticsOptions = options;\n }\n getMetadata = () => ({\n cloudName: this.player.cloudinary.cloudinaryConfig().cloud_name,\n publicId: this.player.cloudinary.currentPublicId()\n });\n sourceChanged = (e, _ref) => {\n let {\n source\n } = _ref;\n const metadata = this.getMetadata();\n if (metadata.cloudName && metadata.publicId) {\n const isLiveStream = source?.resourceConfig().type === 'live';\n this.currentVideoMetadata = metadata;\n this.cloudinaryAnalytics.startManualTracking({\n ...metadata,\n ...(isLiveStream ? {\n type: 'live'\n } : {})\n }, {\n ...(lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_0___default()(this.analyticsOptions) ? this.analyticsOptions : {}),\n videoPlayerType: 'cloudinary video player',\n videoPlayerVersion: \"3.14.1\"\n });\n } else if (this.currentVideoMetadata.cloudName !== metadata.cloudName || this.currentVideoMetadata.publicId !== metadata.publicId) {\n this.cloudinaryAnalytics.stopManualTracking();\n }\n };\n getCloudinaryVideoPlayerAdapter = () => {\n const createCldVPEventListener = (eventName, callback) => {\n this.player.on(eventName, callback);\n return () => {\n this.player.off(eventName, callback);\n };\n };\n return {\n onCanPlay: callback => createCldVPEventListener('canplay', callback),\n onCanPlayThrough: callback => createCldVPEventListener('canplaythrough', callback),\n onComplete: callback => createCldVPEventListener('complete', callback),\n onDurationChange: callback => createCldVPEventListener('durationchange', callback),\n onEmptied: callback => createCldVPEventListener('emptied', callback),\n onEnded: callback => createCldVPEventListener('ended', callback),\n onError: callback => createCldVPEventListener('error', callback),\n onLoadedData: callback => createCldVPEventListener('loadeddata', callback),\n onLoadedMetadata: callback => createCldVPEventListener('loadedmetadata', callback),\n onLoadStart: callback => createCldVPEventListener('loadstart', callback),\n onPause: callback => createCldVPEventListener('pause', callback),\n onPlay: callback => createCldVPEventListener('play', callback),\n onPlaying: callback => createCldVPEventListener('playing', callback),\n onProgress: callback => createCldVPEventListener('progress', callback),\n onRateChange: callback => createCldVPEventListener('ratechange', callback),\n onSeeked: callback => createCldVPEventListener('seeked', callback),\n onSeeking: callback => createCldVPEventListener('seeking', callback),\n onStalled: callback => createCldVPEventListener('stalled', callback),\n onSuspend: callback => createCldVPEventListener('suspend', callback),\n onTimeUpdate: callback => createCldVPEventListener('timeupdate', callback),\n onVolumeChange: callback => createCldVPEventListener('volumechange', callback),\n onWaiting: callback => createCldVPEventListener('waiting', callback),\n getCurrentSrc: () => this.player.videoElement.currentSrc,\n getCurrentTime: () => this.player.currentTime(),\n getReadyState: () => this.player.videoElement.readyState,\n getDuration: () => this.player.duration()\n };\n };\n init() {\n this.player.on(_utils_consts__WEBPACK_IMPORTED_MODULE_2__.PLAYER_EVENT.CLD_SOURCE_CHANGED, this.sourceChanged);\n }\n}\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n new CloudinaryAnalytics(this, opts).init();\n}\n\n//# sourceURL=webpack:///./plugins/cloudinary-analytics/index.js?\n}");
253
+ 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 lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/isPlainObject */ \"../node_modules/lodash/isPlainObject.js\");\n/* harmony import */ var lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var cloudinary_video_analytics__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! cloudinary-video-analytics */ \"../node_modules/cloudinary-video-analytics/dist/main.js\");\n/* harmony import */ var cloudinary_video_analytics__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(cloudinary_video_analytics__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils_consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/consts */ \"./utils/consts.js\");\n\n\n\nclass CloudinaryAnalytics {\n constructor(player, options) {\n this.player = player;\n this.cloudinaryAnalytics = (0,cloudinary_video_analytics__WEBPACK_IMPORTED_MODULE_1__.connectCloudinaryAnalytics)(this.player.videoElement, {\n playerAdapter: this.getCloudinaryVideoPlayerAdapter()\n });\n this.currentVideoMetadata = {\n cloudName: null,\n publicId: null\n };\n this.analyticsOptions = options;\n }\n getMetadata = () => ({\n cloudName: this.player.cloudinary.cloudinaryConfig().cloud_name,\n publicId: this.player.cloudinary.currentPublicId()\n });\n sourceChanged = (e, _ref) => {\n let {\n source\n } = _ref;\n const metadata = this.getMetadata();\n if (metadata.cloudName && metadata.publicId) {\n const isLiveStream = source?.resourceConfig().type === 'live';\n this.currentVideoMetadata = metadata;\n this.cloudinaryAnalytics.startManualTracking({\n ...metadata,\n ...(isLiveStream ? {\n type: 'live'\n } : {})\n }, {\n ...(lodash_isPlainObject__WEBPACK_IMPORTED_MODULE_0___default()(this.analyticsOptions) ? this.analyticsOptions : {}),\n videoPlayerType: 'cloudinary video player',\n videoPlayerVersion: \"3.14.2-edge.1\"\n });\n } else if (this.currentVideoMetadata.cloudName !== metadata.cloudName || this.currentVideoMetadata.publicId !== metadata.publicId) {\n this.cloudinaryAnalytics.stopManualTracking();\n }\n };\n getCloudinaryVideoPlayerAdapter = () => {\n const createCldVPEventListener = (eventName, callback) => {\n this.player.on(eventName, callback);\n return () => {\n this.player.off(eventName, callback);\n };\n };\n return {\n onCanPlay: callback => createCldVPEventListener('canplay', callback),\n onCanPlayThrough: callback => createCldVPEventListener('canplaythrough', callback),\n onComplete: callback => createCldVPEventListener('complete', callback),\n onDurationChange: callback => createCldVPEventListener('durationchange', callback),\n onEmptied: callback => createCldVPEventListener('emptied', callback),\n onEnded: callback => createCldVPEventListener('ended', callback),\n onError: callback => createCldVPEventListener('error', callback),\n onLoadedData: callback => createCldVPEventListener('loadeddata', callback),\n onLoadedMetadata: callback => createCldVPEventListener('loadedmetadata', callback),\n onLoadStart: callback => createCldVPEventListener('loadstart', callback),\n onPause: callback => createCldVPEventListener('pause', callback),\n onPlay: callback => createCldVPEventListener('play', callback),\n onPlaying: callback => createCldVPEventListener('playing', callback),\n onProgress: callback => createCldVPEventListener('progress', callback),\n onRateChange: callback => createCldVPEventListener('ratechange', callback),\n onSeeked: callback => createCldVPEventListener('seeked', callback),\n onSeeking: callback => createCldVPEventListener('seeking', callback),\n onStalled: callback => createCldVPEventListener('stalled', callback),\n onSuspend: callback => createCldVPEventListener('suspend', callback),\n onTimeUpdate: callback => createCldVPEventListener('timeupdate', callback),\n onVolumeChange: callback => createCldVPEventListener('volumechange', callback),\n onWaiting: callback => createCldVPEventListener('waiting', callback),\n getCurrentSrc: () => this.player.videoElement.currentSrc,\n getCurrentTime: () => this.player.currentTime(),\n getReadyState: () => this.player.videoElement.readyState,\n getDuration: () => this.player.duration()\n };\n };\n init() {\n this.player.on(_utils_consts__WEBPACK_IMPORTED_MODULE_2__.PLAYER_EVENT.CLD_SOURCE_CHANGED, this.sourceChanged);\n }\n}\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n new CloudinaryAnalytics(this, opts).init();\n}\n\n//# sourceURL=webpack:///./plugins/cloudinary-analytics/index.js?\n}");
254
254
 
255
255
  /***/ },
256
256
 
@@ -338,7 +338,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
338
338
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
339
339
 
340
340
  "use strict";
341
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ADAPTIVE_SOURCETYPES: () => (/* binding */ ADAPTIVE_SOURCETYPES),\n/* harmony export */ CONTAINER_MIME_TYPES: () => (/* binding */ CONTAINER_MIME_TYPES),\n/* harmony export */ DEFAULT_DPR: () => (/* binding */ DEFAULT_DPR),\n/* harmony export */ DEFAULT_POSTER_PARAMS: () => (/* binding */ DEFAULT_POSTER_PARAMS),\n/* harmony export */ DEFAULT_VIDEO_PARAMS: () => (/* binding */ DEFAULT_VIDEO_PARAMS),\n/* harmony export */ FORMAT_MAPPINGS: () => (/* binding */ FORMAT_MAPPINGS),\n/* harmony export */ RENDITIONS: () => (/* binding */ RENDITIONS),\n/* harmony export */ URL_PATTERN: () => (/* binding */ URL_PATTERN),\n/* harmony export */ VIDEO_SUFFIX_REMOVAL_PATTERN: () => (/* binding */ VIDEO_SUFFIX_REMOVAL_PATTERN)\n/* harmony export */ });\nconst DEFAULT_POSTER_PARAMS = {\n format: 'jpg',\n resource_type: 'video'\n};\nconst DEFAULT_VIDEO_PARAMS = {\n resource_type: 'video',\n type: 'upload',\n hdr: false,\n transformation: [],\n sourceTransformation: {},\n sourceTypes: ['auto'],\n recommendations: null,\n info: {},\n interactionAreas: {},\n chapters: {}\n};\nconst COMMON_VIDEO_EXTENSIONS = ['3g2', '3gp', 'avi', 'flv', 'm3u8', 'ts', 'm2ts', 'mts', 'mov', 'mkv', 'mp4', 'mpeg', 'mpd', 'mxf', 'ogv', 'webm', 'wmv']; // https://cloudinary.com/documentation/video_manipulation_and_delivery#supported_video_formats\n\nconst VIDEO_SUFFIX_REMOVAL_PATTERN = RegExp(`\\\\.(${COMMON_VIDEO_EXTENSIONS.join('|')})$$`);\n\n// eslint-disable-next-line no-control-regex\nconst URL_PATTERN = RegExp('https?:\\\\/\\\\/(www\\\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\\\.[a-zA-Z0-9()]{1,6}\\\\b([-a-zA-Z0-9()@:%_\\+.~#?&/=]*)');\nconst CONTAINER_MIME_TYPES = {\n hls: 'application/x-mpegURL',\n dash: 'application/dash+xml',\n // See: https://docs.videojs.com/utils_mimetypes.js.html\n opus: 'video/ogg',\n ogv: 'video/ogg',\n mp4: 'video/mp4',\n mov: 'video/mp4',\n m4v: 'video/mp4',\n mkv: 'video/x-matroska',\n m4a: 'audio/mp4',\n mp3: 'audio/mpeg',\n aac: 'audio/aac',\n caf: 'audio/x-caf',\n flac: 'audio/flac',\n oga: 'audio/ogg',\n wav: 'audio/wav',\n m3u8: 'application/x-mpegURL',\n mpd: 'application/dash+xml',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n png: 'image/png',\n svg: 'image/svg+xml',\n webp: 'image/webp'\n};\nconst ADAPTIVE_SOURCETYPES = ['hls', 'dash', 'mpd', 'm3u8'];\nconst FORMAT_MAPPINGS = {\n hls: 'm3u8',\n dash: 'mpd'\n};\n\n// Breakpoints constants\nconst DEFAULT_DPR = 2.0;\nconst RENDITIONS = [640, 848, 1280, 1920, 2560, 3840];\n\n//# sourceURL=webpack:///./plugins/cloudinary/models/video-source/video-source.const.js?\n}");
341
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ADAPTIVE_SOURCETYPES: () => (/* binding */ ADAPTIVE_SOURCETYPES),\n/* harmony export */ CONTAINER_MIME_TYPES: () => (/* binding */ CONTAINER_MIME_TYPES),\n/* harmony export */ DEFAULT_DPR: () => (/* binding */ DEFAULT_DPR),\n/* harmony export */ DEFAULT_POSTER_PARAMS: () => (/* binding */ DEFAULT_POSTER_PARAMS),\n/* harmony export */ DEFAULT_VIDEO_PARAMS: () => (/* binding */ DEFAULT_VIDEO_PARAMS),\n/* harmony export */ FORMAT_MAPPINGS: () => (/* binding */ FORMAT_MAPPINGS),\n/* harmony export */ RENDITIONS: () => (/* binding */ RENDITIONS),\n/* harmony export */ URL_PATTERN: () => (/* reexport safe */ _profile_url_pattern__WEBPACK_IMPORTED_MODULE_0__.URL_PATTERN),\n/* harmony export */ VIDEO_SUFFIX_REMOVAL_PATTERN: () => (/* binding */ VIDEO_SUFFIX_REMOVAL_PATTERN)\n/* harmony export */ });\n/* harmony import */ var _profile_url_pattern__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../profile-url-pattern */ \"./plugins/cloudinary/profile-url-pattern.js\");\nconst DEFAULT_POSTER_PARAMS = {\n format: 'jpg',\n resource_type: 'video'\n};\nconst DEFAULT_VIDEO_PARAMS = {\n resource_type: 'video',\n type: 'upload',\n hdr: false,\n transformation: [],\n sourceTransformation: {},\n sourceTypes: ['auto'],\n recommendations: null,\n info: {},\n interactionAreas: {},\n chapters: {}\n};\nconst COMMON_VIDEO_EXTENSIONS = ['3g2', '3gp', 'avi', 'flv', 'm3u8', 'ts', 'm2ts', 'mts', 'mov', 'mkv', 'mp4', 'mpeg', 'mpd', 'mxf', 'ogv', 'webm', 'wmv']; // https://cloudinary.com/documentation/video_manipulation_and_delivery#supported_video_formats\n\nconst VIDEO_SUFFIX_REMOVAL_PATTERN = RegExp(`\\\\.(${COMMON_VIDEO_EXTENSIONS.join('|')})$$`);\n\nconst CONTAINER_MIME_TYPES = {\n hls: 'application/x-mpegURL',\n dash: 'application/dash+xml',\n // See: https://docs.videojs.com/utils_mimetypes.js.html\n opus: 'video/ogg',\n ogv: 'video/ogg',\n mp4: 'video/mp4',\n mov: 'video/mp4',\n m4v: 'video/mp4',\n mkv: 'video/x-matroska',\n m4a: 'audio/mp4',\n mp3: 'audio/mpeg',\n aac: 'audio/aac',\n caf: 'audio/x-caf',\n flac: 'audio/flac',\n oga: 'audio/ogg',\n wav: 'audio/wav',\n m3u8: 'application/x-mpegURL',\n mpd: 'application/dash+xml',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n png: 'image/png',\n svg: 'image/svg+xml',\n webp: 'image/webp'\n};\nconst ADAPTIVE_SOURCETYPES = ['hls', 'dash', 'mpd', 'm3u8'];\nconst FORMAT_MAPPINGS = {\n hls: 'm3u8',\n dash: 'mpd'\n};\n\n// Breakpoints constants\nconst DEFAULT_DPR = 2.0;\nconst RENDITIONS = [640, 848, 1280, 1920, 2560, 3840];\n\n//# sourceURL=webpack:///./plugins/cloudinary/models/video-source/video-source.const.js?\n}");
342
342
 
343
343
  /***/ },
344
344
 
@@ -364,6 +364,17 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
364
364
 
365
365
  /***/ },
366
366
 
367
+ /***/ "./plugins/cloudinary/profile-url-pattern.js"
368
+ /*!***************************************************!*\
369
+ !*** ./plugins/cloudinary/profile-url-pattern.js ***!
370
+ \***************************************************/
371
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
372
+
373
+ "use strict";
374
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ URL_PATTERN: () => (/* binding */ URL_PATTERN)\n/* harmony export */ });\n/**\n * Detects http(s) profile/config URLs. Split from `video-source.const` so fetch-config\n * does not pull MIME maps and related defaults into the async chunk.\n */\n// eslint-disable-next-line no-control-regex\nconst URL_PATTERN = RegExp('https?:\\\\/\\\\/(www\\\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\\\.[a-zA-Z0-9()]{1,6}\\\\b([-a-zA-Z0-9()@:%_+.~#?&/=]*)');\n\n//# sourceURL=webpack:///./plugins/cloudinary/profile-url-pattern.js?\n}");
375
+
376
+ /***/ },
377
+
367
378
  /***/ "./plugins/cloudinary/url-helpers.js"
368
379
  /*!*******************************************!*\
369
380
  !*** ./plugins/cloudinary/url-helpers.js ***!
@@ -371,7 +382,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
371
382
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
372
383
 
373
384
  "use strict";
374
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getCloudinaryUrlPrefix: () => (/* reexport safe */ _utils_cloudinary_url_prefix__WEBPACK_IMPORTED_MODULE_1__.getCloudinaryUrlPrefix),\n/* harmony export */ isRawUrl: () => (/* binding */ isRawUrl)\n/* harmony export */ });\n/* harmony import */ var _models_video_source_video_source_const__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./models/video-source/video-source.const */ \"./plugins/cloudinary/models/video-source/video-source.const.js\");\n/* harmony import */ var _utils_cloudinary_url_prefix__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/cloudinary-url-prefix */ \"./utils/cloudinary-url-prefix.js\");\n\n\nconst isRawUrl = publicId => _models_video_source_video_source_const__WEBPACK_IMPORTED_MODULE_0__.URL_PATTERN.test(publicId);\n\n//# sourceURL=webpack:///./plugins/cloudinary/url-helpers.js?\n}");
385
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getCloudinaryUrlPrefix: () => (/* reexport safe */ _utils_cloudinary_url_prefix__WEBPACK_IMPORTED_MODULE_1__.getCloudinaryUrlPrefix),\n/* harmony export */ isRawUrl: () => (/* binding */ isRawUrl)\n/* harmony export */ });\n/* harmony import */ var _profile_url_pattern__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./profile-url-pattern */ \"./plugins/cloudinary/profile-url-pattern.js\");\n/* harmony import */ var _utils_cloudinary_url_prefix__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/cloudinary-url-prefix */ \"./utils/cloudinary-url-prefix.js\");\n\n\nconst isRawUrl = publicId => _profile_url_pattern__WEBPACK_IMPORTED_MODULE_0__.URL_PATTERN.test(publicId);\n\n//# sourceURL=webpack:///./plugins/cloudinary/url-helpers.js?\n}");
375
386
 
376
387
  /***/ },
377
388
 
@@ -415,7 +426,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
415
426
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
416
427
 
417
428
  "use strict";
418
- 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 contextMenuContent = player => {\n const isLooping = player.loop();\n const isPaused = player.paused();\n const isMuted = player.muted();\n const isFullscreen = player.isFullscreen();\n const aboutMenuItem = {\n class: 'player-version',\n label: 'Cloudinary Player v' + \"3.14.1\"\n };\n if (!player.controls()) {\n return [aboutMenuItem];\n }\n return [{\n label: isLooping ? 'Unloop' : 'Loop',\n listener: () => {\n player.loop(!isLooping);\n }\n }, {\n label: isPaused ? 'Play' : 'Pause',\n listener: () => {\n if (isPaused) {\n player.play();\n } else {\n player.pause();\n }\n }\n }, {\n label: isMuted ? 'Unmute' : 'Mute',\n listener: () => {\n player.muted(!isMuted);\n }\n }, {\n label: isFullscreen ? 'Exit Fullscreen' : 'Fullscreen',\n listener: () => {\n if (isFullscreen) {\n player.exitFullscreen();\n } else {\n player.requestFullscreen();\n }\n }\n }, aboutMenuItem];\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (contextMenuContent);\n\n//# sourceURL=webpack:///./plugins/context-menu/contextMenuContent.js?\n}");
429
+ 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 contextMenuContent = player => {\n const isLooping = player.loop();\n const isPaused = player.paused();\n const isMuted = player.muted();\n const isFullscreen = player.isFullscreen();\n const aboutMenuItem = {\n class: 'player-version',\n label: 'Cloudinary Player v' + \"3.14.2-edge.1\"\n };\n if (!player.controls()) {\n return [aboutMenuItem];\n }\n return [{\n label: isLooping ? 'Unloop' : 'Loop',\n listener: () => {\n player.loop(!isLooping);\n }\n }, {\n label: isPaused ? 'Play' : 'Pause',\n listener: () => {\n if (isPaused) {\n player.play();\n } else {\n player.pause();\n }\n }\n }, {\n label: isMuted ? 'Unmute' : 'Mute',\n listener: () => {\n player.muted(!isMuted);\n }\n }, {\n label: isFullscreen ? 'Exit Fullscreen' : 'Fullscreen',\n listener: () => {\n if (isFullscreen) {\n player.exitFullscreen();\n } else {\n player.requestFullscreen();\n }\n }\n }, aboutMenuItem];\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (contextMenuContent);\n\n//# sourceURL=webpack:///./plugins/context-menu/contextMenuContent.js?\n}");
419
430
 
420
431
  /***/ },
421
432
 
@@ -481,7 +492,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
481
492
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
482
493
 
483
494
  "use strict";
484
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ lazyInteractionAreasPlugin)\n/* harmony export */ });\nasync function lazyInteractionAreasPlugin(player, playerOptions, videojsOptions) {\n try {\n const {\n interactionAreasService\n } = await Promise.all(/*! import() | interaction-areas */[__webpack_require__.e(\"styles\"), __webpack_require__.e(\"node_modules_lodash_throttle_js\"), __webpack_require__.e(\"interaction-areas\")]).then(__webpack_require__.bind(__webpack_require__, /*! ./interaction-areas.service */ \"./plugins/interaction-areas/interaction-areas.service.js\"));\n interactionAreasService(player, playerOptions, videojsOptions);\n } catch (error) {\n console.error('Failed to load plugin:', error);\n }\n}\n\n//# sourceURL=webpack:///./plugins/interaction-areas/index.js?\n}");
495
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ lazyInteractionAreasPlugin)\n/* harmony export */ });\nasync function lazyInteractionAreasPlugin(player, playerOptions, videojsOptions) {\n try {\n const {\n interactionAreasService\n } = await Promise.all(/*! import() | interaction-areas */[__webpack_require__.e(\"styles\"), __webpack_require__.e(\"node_modules_lodash_throttle_js\"), __webpack_require__.e(\"interaction-areas\")]).then(__webpack_require__.bind(__webpack_require__, /*! ./interaction-areas */ \"./plugins/interaction-areas/interaction-areas.js\"));\n interactionAreasService(player, playerOptions, videojsOptions);\n } catch (error) {\n console.error('Failed to load plugin:', error);\n }\n}\n\n//# sourceURL=webpack:///./plugins/interaction-areas/index.js?\n}");
485
496
 
486
497
  /***/ },
487
498
 
@@ -514,7 +525,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
514
525
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
515
526
 
516
527
  "use strict";
517
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ lazyShoppablePlugin)\n/* harmony export */ });\nasync function lazyShoppablePlugin(player, options) {\n const {\n default: ShoppableWidget\n } = await Promise.all(/*! import() | shoppable */[__webpack_require__.e(\"styles\"), __webpack_require__.e(\"node_modules_lodash_throttle_js\"), __webpack_require__.e(\"shoppable\")]).then(__webpack_require__.bind(__webpack_require__, /*! ../../components/shoppable-bar/shoppable-widget */ \"./components/shoppable-bar/shoppable-widget.js\"));\n new ShoppableWidget(player, options.shoppable).init();\n}\n\n//# sourceURL=webpack:///./plugins/shoppable-plugin/index.js?\n}");
528
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ lazyShoppablePlugin)\n/* harmony export */ });\nasync function lazyShoppablePlugin(player, options) {\n const {\n default: ShoppableWidget\n } = await Promise.all(/*! import() | shoppable */[__webpack_require__.e(\"styles\"), __webpack_require__.e(\"node_modules_lodash_throttle_js\"), __webpack_require__.e(\"shoppable\")]).then(__webpack_require__.bind(__webpack_require__, /*! ../../components/shoppable-bar/shoppable */ \"./components/shoppable-bar/shoppable.js\"));\n new ShoppableWidget(player, options.shoppable).init();\n}\n\n//# sourceURL=webpack:///./plugins/shoppable-plugin/index.js?\n}");
518
529
 
519
530
  /***/ },
520
531
 
@@ -646,7 +657,18 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
646
657
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
647
658
 
648
659
  "use strict";
649
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getCloudinaryConfigFromOptions: () => (/* binding */ getCloudinaryConfigFromOptions)\n/* harmony export */ });\n/* harmony import */ var lodash_pick__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/pick */ \"../node_modules/lodash/pick.js\");\n/* harmony import */ var lodash_pick__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_pick__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _video_player_const__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../video-player.const */ \"./video-player.const.js\");\n/* harmony import */ var _object__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./object */ \"./utils/object.js\");\n\n\n\nconst getCloudinaryConfigFromOptions = options => {\n if (options.cloudinaryConfig) {\n return options.cloudinaryConfig;\n }\n const snakeCaseCloudinaryConfig = lodash_pick__WEBPACK_IMPORTED_MODULE_0___default()((0,_object__WEBPACK_IMPORTED_MODULE_2__.convertKeysToSnakeCase)(options), _video_player_const__WEBPACK_IMPORTED_MODULE_1__.CLOUDINARY_CONFIG_PARAM);\n return Object.assign({}, snakeCaseCloudinaryConfig);\n};\n\n//# sourceURL=webpack:///./utils/cloudinary-config-from-options.js?\n}");
660
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getCloudinaryConfigFromOptions: () => (/* binding */ getCloudinaryConfigFromOptions)\n/* harmony export */ });\n/* harmony import */ var _cloudinary_config_param__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./cloudinary-config-param */ \"./utils/cloudinary-config-param.js\");\n\nconst CLOUDINARY_CONFIG_KEYS = new Set(_cloudinary_config_param__WEBPACK_IMPORTED_MODULE_0__.CLOUDINARY_CONFIG_PARAM);\n\n/**\n * Matches lodash `snakeCase` (avoids heavy lodash in lazy-player).\n */\nconst toSnakeCase = key => key.replace(/([a-z0-9])([A-Z])/g, '$1_$2').replace(/[-\\s]+/g, '_').toLowerCase();\nconst pickCloudinaryKeysFromOptions = options => {\n const out = {};\n for (const key of Object.keys(options)) {\n const snake = toSnakeCase(key);\n if (CLOUDINARY_CONFIG_KEYS.has(snake)) {\n out[snake] = options[key];\n }\n }\n return out;\n};\nconst getCloudinaryConfigFromOptions = options => {\n if (options.cloudinaryConfig) {\n return options.cloudinaryConfig;\n }\n return Object.assign({}, pickCloudinaryKeysFromOptions(options));\n};\n\n//# sourceURL=webpack:///./utils/cloudinary-config-from-options.js?\n}");
661
+
662
+ /***/ },
663
+
664
+ /***/ "./utils/cloudinary-config-param.js"
665
+ /*!******************************************!*\
666
+ !*** ./utils/cloudinary-config-param.js ***!
667
+ \******************************************/
668
+ (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
669
+
670
+ "use strict";
671
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CLOUDINARY_CONFIG_PARAM: () => (/* binding */ CLOUDINARY_CONFIG_PARAM)\n/* harmony export */ });\n/**\n * Cloudinary SDK config keys (snake_case). Duplicated from `video-player.const` so\n * modules that only need this list do not import the full player constants table.\n */\nconst CLOUDINARY_CONFIG_PARAM = ['api_secret', 'auth_token', 'cdn_subdomain', 'cloud_name', 'cname', 'private_cdn', 'secure', 'secure_cdn_subdomain', 'secure_distribution', 'shorten', 'sign_url', 'url_suffix', 'use_root_path'];\n\n//# sourceURL=webpack:///./utils/cloudinary-config-param.js?\n}");
650
672
 
651
673
  /***/ },
652
674
 
@@ -756,7 +778,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
756
778
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
757
779
 
758
780
  "use strict";
759
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getVideoElement: () => (/* binding */ getVideoElement),\n/* harmony export */ lazyBootstrap: () => (/* binding */ lazyBootstrap),\n/* harmony export */ loadPlayer: () => (/* binding */ loadPlayer),\n/* harmony export */ preparePlayerPlaceholder: () => (/* binding */ preparePlayerPlaceholder),\n/* harmony export */ shouldLoadOnScroll: () => (/* binding */ shouldLoadOnScroll),\n/* harmony export */ shouldUseLazyBootstrap: () => (/* binding */ shouldUseLazyBootstrap)\n/* harmony export */ });\nconst FLUID_CLASS = 'cld-fluid';\n\n/** Same condition as `getPosterUrl` in `poster-url.js` (explicit string `poster`); skips the `cld-poster-url` async chunk. */\nconst hasExplicitPoster = options => typeof options?.poster === 'string' && options.poster.length > 0;\nconst getVideoElement = elem => {\n if (typeof elem === 'string') {\n let id = elem;\n if (id.indexOf('#') === 0) id = id.slice(1);\n try {\n elem = document.querySelector(`#${CSS.escape(id)}`);\n } catch {\n elem = null;\n }\n if (!elem) throw new Error(`Could not find element with id ${id}`);\n }\n if (!elem?.tagName) throw new Error('Must specify either an element or an element id.');\n if (elem.tagName !== 'VIDEO') throw new Error('Element is not a video tag.');\n return elem;\n};\nconst preparePlayerPlaceholder = function (videoElement, posterUrl) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const hadControls = videoElement.hasAttribute('controls');\n videoElement.poster = posterUrl;\n videoElement.preload = 'none';\n videoElement.controls = false;\n videoElement.removeAttribute('controls');\n const fluid = options.fluid !== false;\n if (fluid) {\n videoElement.classList.add(FLUID_CLASS);\n }\n if (options.width) videoElement.setAttribute('width', String(options.width));\n if (options.height) videoElement.setAttribute('height', String(options.height));\n const ar = options?.sourceOptions?.aspectRatio || options?.aspectRatio;\n if (typeof ar === 'string' && ar.includes(':')) {\n const parts = ar.split(':').map(x => parseInt(x.trim(), 10));\n if (parts.length === 2 && parts[0] > 0 && parts[1] > 0) {\n videoElement.style.aspectRatio = `${parts[0]} / ${parts[1]}`;\n }\n }\n return {\n videoElement,\n hadControls\n };\n};\nconst loadPlayer = _ref => {\n let {\n overlayRoot,\n videoElement,\n options,\n ready\n } = _ref;\n if (overlayRoot?.parentNode) {\n overlayRoot.replaceWith(videoElement);\n }\n return Promise.all(/*! import() */[__webpack_require__.e(\"styles\"), __webpack_require__.e(\"plugins_cloudinary_url-helpers_js-utils_cloudinary-config-from-options_js-utils_querystring_j-adfe37\"), __webpack_require__.e(\"video-player_js\")]).then(__webpack_require__.bind(__webpack_require__, /*! ../video-player.js */ \"./video-player.js\")).then(m => m.createVideoPlayer(videoElement, options, ready));\n};\nconst LAZY_PLAYER_CLASS = 'cld-lazy-player';\nconst isLightSkin = (videoElement, options) => {\n const cls = videoElement.className || '';\n return cls.indexOf('cld-video-player-skin-light') > -1 || options?.skin === 'light';\n};\n\n/** Matches Video.js BigPlayButton DOM structure. */\nconst createBigPlayButton = () => {\n const playBtn = document.createElement('button');\n playBtn.type = 'button';\n playBtn.className = 'vjs-big-play-button';\n playBtn.setAttribute('aria-disabled', 'false');\n playBtn.title = 'Play Video';\n playBtn.setAttribute('aria-label', 'Play Video');\n const icon = document.createElement('span');\n icon.className = 'vjs-icon-placeholder';\n icon.setAttribute('aria-hidden', 'true');\n playBtn.appendChild(icon);\n return playBtn;\n};\nconst shouldUseLazyBootstrap = options => !!options?.lazy;\nconst shouldLoadOnScroll = lazy => lazy && typeof lazy === 'object' && lazy.loadOnScroll === true;\n\n/**\n * Renders the lazy placeholder (poster, big-play) before the main player chunk loads.\n *\n * @param {string|HTMLVideoElement} elem\n * @param {object} options\n * @param {function} [ready] - Passed through when the full player loads.\n * @returns {Promise<{ source: function, loadPlayer: function }>}\n */\nconst lazyBootstrap = async (elem, options, ready) => {\n const videoElement = getVideoElement(elem);\n const posterUrl = hasExplicitPoster(options) ? options.poster : (await __webpack_require__.e(/*! import() | cld-poster-url */ \"cld-poster-url\").then(__webpack_require__.bind(__webpack_require__, /*! ./poster-url */ \"./utils/poster-url.js\"))).getPosterUrl(options);\n const loadOnScroll = shouldLoadOnScroll(options.lazy);\n const {\n hadControls\n } = preparePlayerPlaceholder(videoElement, posterUrl, {\n fluid: options?.fluid !== false,\n width: options?.width,\n height: options?.height,\n sourceOptions: options?.sourceOptions,\n aspectRatio: options?.aspectRatio\n });\n const light = isLightSkin(videoElement, options);\n const overlayRoot = document.createElement('div');\n overlayRoot.classList.add('cld-video-player', 'video-js', LAZY_PLAYER_CLASS);\n overlayRoot.classList.add(light ? 'cld-video-player-skin-light' : 'cld-video-player-skin-dark');\n const colors = options?.colors;\n if (colors) {\n if (colors.base) overlayRoot.style.setProperty('--color-base', colors.base);\n if (colors.accent) overlayRoot.style.setProperty('--color-accent', colors.accent);\n if (colors.text) overlayRoot.style.setProperty('--color-text', colors.text);\n }\n videoElement.parentNode.insertBefore(overlayRoot, videoElement);\n overlayRoot.appendChild(videoElement);\n const playBtn = createBigPlayButton();\n overlayRoot.appendChild(playBtn);\n let loadPromise = null;\n let observer = null;\n const teardownActivation = () => {\n playBtn.removeEventListener('click', onPlayClick);\n videoElement.removeEventListener('click', onVideoClick);\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n };\n const activatePlayer = function () {\n let activationOpts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (loadPromise) {\n return loadPromise;\n }\n teardownActivation();\n const autoplayFromUserGesture = activationOpts.autoplayFromUserGesture === true;\n if (hadControls) videoElement.setAttribute('controls', '');\n const wrappedReady = autoplayFromUserGesture ? p => {\n p.play();\n if (ready) ready(p);\n } : ready;\n const playerOptions = Object.assign({}, options);\n delete playerOptions.lazy;\n loadPromise = loadPlayer({\n overlayRoot,\n videoElement,\n options: playerOptions,\n ready: wrappedReady\n });\n return loadPromise;\n };\n function onPlayClick(e) {\n e.stopPropagation();\n activatePlayer({\n autoplayFromUserGesture: true\n });\n }\n function onVideoClick() {\n activatePlayer({\n autoplayFromUserGesture: true\n });\n }\n playBtn.addEventListener('click', onPlayClick);\n videoElement.addEventListener('click', onVideoClick);\n if (loadOnScroll && typeof IntersectionObserver !== 'undefined') {\n observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n activatePlayer({});\n }\n });\n }, {\n rootMargin: '0px',\n threshold: 0.25\n });\n observer.observe(videoElement);\n }\n const stub = {\n source: () => stub,\n loadPlayer: () => activatePlayer({\n autoplayFromUserGesture: true\n })\n };\n return stub;\n};\n\n//# sourceURL=webpack:///./utils/lazy-player.js?\n}");
781
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getVideoElement: () => (/* binding */ getVideoElement),\n/* harmony export */ lazyBootstrap: () => (/* binding */ lazyBootstrap),\n/* harmony export */ loadPlayer: () => (/* binding */ loadPlayer),\n/* harmony export */ preparePlayerPlaceholder: () => (/* binding */ preparePlayerPlaceholder),\n/* harmony export */ shouldLoadOnScroll: () => (/* binding */ shouldLoadOnScroll),\n/* harmony export */ shouldUseLazyBootstrap: () => (/* binding */ shouldUseLazyBootstrap)\n/* harmony export */ });\nconst FLUID_CLASS = 'cld-fluid';\n\n/** Same condition as `getPosterUrl` in `poster-url.js` (explicit string `poster`); skips the `cld-poster-url` async chunk. */\nconst hasExplicitPoster = options => typeof options?.poster === 'string' && options.poster.length > 0;\nconst getVideoElement = elem => {\n if (typeof elem === 'string') {\n let id = elem;\n if (id.indexOf('#') === 0) id = id.slice(1);\n try {\n elem = document.querySelector(`#${CSS.escape(id)}`);\n } catch {\n elem = null;\n }\n if (!elem) throw new Error(`Could not find element with id ${id}`);\n }\n if (!elem?.tagName) throw new Error('Must specify either an element or an element id.');\n if (elem.tagName !== 'VIDEO') throw new Error('Element is not a video tag.');\n return elem;\n};\nconst preparePlayerPlaceholder = function (videoElement, posterUrl) {\n let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n const hadControls = videoElement.hasAttribute('controls');\n videoElement.poster = posterUrl;\n videoElement.preload = 'none';\n videoElement.controls = false;\n videoElement.removeAttribute('controls');\n const fluid = options.fluid !== false;\n if (fluid) {\n videoElement.classList.add(FLUID_CLASS);\n }\n if (options.width) videoElement.setAttribute('width', String(options.width));\n if (options.height) videoElement.setAttribute('height', String(options.height));\n const ar = options?.sourceOptions?.aspectRatio || options?.aspectRatio;\n if (typeof ar === 'string' && ar.includes(':')) {\n const parts = ar.split(':').map(x => parseInt(x.trim(), 10));\n if (parts.length === 2 && parts[0] > 0 && parts[1] > 0) {\n videoElement.style.aspectRatio = `${parts[0]} / ${parts[1]}`;\n }\n }\n return {\n videoElement,\n hadControls\n };\n};\nconst loadPlayer = _ref => {\n let {\n overlayRoot,\n videoElement,\n options,\n ready\n } = _ref;\n if (overlayRoot?.parentNode) {\n overlayRoot.replaceWith(videoElement);\n }\n return Promise.all(/*! import() */[__webpack_require__.e(\"styles\"), __webpack_require__.e(\"cld-player-core\")]).then(__webpack_require__.bind(__webpack_require__, /*! ../video-player.js */ \"./video-player.js\")).then(m => m.createVideoPlayer(videoElement, options, ready));\n};\nconst LAZY_PLAYER_CLASS = 'cld-lazy-player';\nconst isLightSkin = (videoElement, options) => {\n const cls = videoElement.className || '';\n return cls.indexOf('cld-video-player-skin-light') > -1 || options?.skin === 'light';\n};\n\n/** Matches Video.js BigPlayButton DOM structure. */\nconst createBigPlayButton = () => {\n const playBtn = document.createElement('button');\n playBtn.type = 'button';\n playBtn.className = 'vjs-big-play-button';\n playBtn.setAttribute('aria-disabled', 'false');\n playBtn.title = 'Play Video';\n playBtn.setAttribute('aria-label', 'Play Video');\n const icon = document.createElement('span');\n icon.className = 'vjs-icon-placeholder';\n icon.setAttribute('aria-hidden', 'true');\n playBtn.appendChild(icon);\n return playBtn;\n};\nconst shouldUseLazyBootstrap = options => !!options?.lazy;\nconst shouldLoadOnScroll = lazy => lazy && typeof lazy === 'object' && lazy.loadOnScroll === true;\n\n/**\n * Renders the lazy placeholder (poster, big-play) before the main player chunk loads.\n *\n * @param {string|HTMLVideoElement} elem\n * @param {object} options\n * @param {function} [ready] - Passed through when the full player loads.\n * @returns {Promise<{ source: function, loadPlayer: function }>}\n */\nconst lazyBootstrap = async (elem, options, ready) => {\n const videoElement = getVideoElement(elem);\n const posterUrl = hasExplicitPoster(options) ? options.poster : (await __webpack_require__.e(/*! import() | cld-poster-url */ \"cld-poster-url\").then(__webpack_require__.bind(__webpack_require__, /*! ./poster-url */ \"./utils/poster-url.js\"))).getPosterUrl(options);\n const loadOnScroll = shouldLoadOnScroll(options.lazy);\n const fluidEnabled = options?.fluid !== false;\n const {\n hadControls\n } = preparePlayerPlaceholder(videoElement, posterUrl, {\n fluid: fluidEnabled,\n width: options?.width,\n height: options?.height,\n sourceOptions: options?.sourceOptions,\n aspectRatio: options?.aspectRatio\n });\n const light = isLightSkin(videoElement, options);\n const overlayRoot = document.createElement('div');\n overlayRoot.classList.add('cld-video-player', 'video-js', LAZY_PLAYER_CLASS);\n // Fluid rules are `.cld-video-player.cld-fluid`; placeholder `<video>` alone cannot satisfy that selector.\n if (fluidEnabled) {\n overlayRoot.classList.add(FLUID_CLASS);\n }\n overlayRoot.classList.add(light ? 'cld-video-player-skin-light' : 'cld-video-player-skin-dark');\n const colors = options?.colors;\n if (colors) {\n if (colors.base) overlayRoot.style.setProperty('--color-base', colors.base);\n if (colors.accent) overlayRoot.style.setProperty('--color-accent', colors.accent);\n if (colors.text) overlayRoot.style.setProperty('--color-text', colors.text);\n }\n videoElement.parentNode.insertBefore(overlayRoot, videoElement);\n overlayRoot.appendChild(videoElement);\n const playBtn = createBigPlayButton();\n overlayRoot.appendChild(playBtn);\n let loadPromise = null;\n let observer = null;\n const teardownActivation = () => {\n playBtn.removeEventListener('click', onPlayClick);\n videoElement.removeEventListener('click', onVideoClick);\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n };\n const activatePlayer = function () {\n let activationOpts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (loadPromise) {\n return loadPromise;\n }\n teardownActivation();\n const autoplayFromUserGesture = activationOpts.autoplayFromUserGesture === true;\n if (hadControls) videoElement.setAttribute('controls', '');\n const wrappedReady = autoplayFromUserGesture ? p => {\n p.play();\n if (ready) ready(p);\n } : ready;\n const playerOptions = Object.assign({}, options);\n delete playerOptions.lazy;\n loadPromise = loadPlayer({\n overlayRoot,\n videoElement,\n options: playerOptions,\n ready: wrappedReady\n });\n return loadPromise;\n };\n function onPlayClick(e) {\n e.stopPropagation();\n activatePlayer({\n autoplayFromUserGesture: true\n });\n }\n function onVideoClick() {\n activatePlayer({\n autoplayFromUserGesture: true\n });\n }\n playBtn.addEventListener('click', onPlayClick);\n videoElement.addEventListener('click', onVideoClick);\n if (loadOnScroll && typeof IntersectionObserver !== 'undefined') {\n observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n activatePlayer({});\n }\n });\n }, {\n rootMargin: '0px',\n threshold: 0.25\n });\n observer.observe(videoElement);\n }\n const stub = {\n source: () => stub,\n loadPlayer: () => activatePlayer({\n autoplayFromUserGesture: true\n })\n };\n return stub;\n};\n\n//# sourceURL=webpack:///./utils/lazy-player.js?\n}");
760
782
 
761
783
  /***/ },
762
784
 
@@ -771,17 +793,6 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
771
793
 
772
794
  /***/ },
773
795
 
774
- /***/ "./utils/object.js"
775
- /*!*************************!*\
776
- !*** ./utils/object.js ***!
777
- \*************************/
778
- (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
779
-
780
- "use strict";
781
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ convertKeysToSnakeCase: () => (/* binding */ convertKeysToSnakeCase)\n/* harmony export */ });\n/* harmony import */ var lodash_snakeCase__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/snakeCase */ \"../node_modules/lodash/snakeCase.js\");\n/* harmony import */ var lodash_snakeCase__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_snakeCase__WEBPACK_IMPORTED_MODULE_0__);\n\nconst convertKeysToSnakeCase = obj => {\n let snakeCaseObj = {};\n for (const key of Object.keys(obj)) {\n const snakeCaseKey = lodash_snakeCase__WEBPACK_IMPORTED_MODULE_0___default()(key);\n snakeCaseObj[snakeCaseKey] = obj[key];\n }\n return snakeCaseObj;\n};\n\n//# sourceURL=webpack:///./utils/object.js?\n}");
782
-
783
- /***/ },
784
-
785
796
  /***/ "./utils/player-api.js"
786
797
  /*!*****************************!*\
787
798
  !*** ./utils/player-api.js ***!
@@ -789,7 +800,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
789
800
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
790
801
 
791
802
  "use strict";
792
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createAsyncPlayer: () => (/* binding */ createAsyncPlayer),\n/* harmony export */ createMultiplePlayers: () => (/* binding */ createMultiplePlayers),\n/* harmony export */ createMultipleSync: () => (/* binding */ createMultipleSync),\n/* harmony export */ setupCloudinaryGlobal: () => (/* binding */ setupCloudinaryGlobal)\n/* harmony export */ });\n/* harmony import */ var _lazy_player__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lazy-player */ \"./utils/lazy-player.js\");\n\n\nconst createAsyncPlayer = async (id, playerOptions, ready, createFn) => {\n const mergedOptions = Object.assign({}, playerOptions);\n const videoElement = (0,_lazy_player__WEBPACK_IMPORTED_MODULE_0__.getVideoElement)(id);\n const opts = await (async () => {\n try {\n const {\n fetchAndMergeConfig\n } = await Promise.all(/*! import() */[__webpack_require__.e(\"plugins_cloudinary_url-helpers_js-utils_cloudinary-config-from-options_js-utils_querystring_j-adfe37\"), __webpack_require__.e(\"utils_fetch-config_js\")]).then(__webpack_require__.bind(__webpack_require__, /*! ./fetch-config */ \"./utils/fetch-config.js\"));\n const fetched = await fetchAndMergeConfig(mergedOptions);\n return Object.assign({}, fetched, mergedOptions);\n } catch {\n return mergedOptions;\n }\n })();\n if (opts?.schedule?.weekly) {\n const {\n shouldUseScheduleBootstrap,\n scheduleBootstrap\n } = await __webpack_require__.e(/*! import() */ \"utils_schedule_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./schedule */ \"./utils/schedule.js\"));\n if (shouldUseScheduleBootstrap(opts)) {\n return scheduleBootstrap(id, opts, ready);\n }\n }\n if ((0,_lazy_player__WEBPACK_IMPORTED_MODULE_0__.shouldUseLazyBootstrap)(opts)) {\n return (0,_lazy_player__WEBPACK_IMPORTED_MODULE_0__.lazyBootstrap)(id, opts, ready);\n }\n return createFn(videoElement, opts, ready);\n};\nconst createMultiplePlayers = async (selector, playerOptions, ready, playerFn) => {\n const nodeList = document.querySelectorAll(selector);\n return Promise.all([...nodeList].map(node => playerFn(node, playerOptions, ready)));\n};\nconst createMultipleSync = (selector, playerOptions, ready, playerFn) => {\n const nodeList = document.querySelectorAll(selector);\n return [...nodeList].map(node => playerFn(node, playerOptions, ready));\n};\nconst setupCloudinaryGlobal = methods => {\n const cloudinary = {\n ...(window.cloudinary || {}),\n ...methods\n };\n window.cloudinary = cloudinary;\n return cloudinary;\n};\n\n//# sourceURL=webpack:///./utils/player-api.js?\n}");
803
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createAsyncPlayer: () => (/* binding */ createAsyncPlayer),\n/* harmony export */ createMultiplePlayers: () => (/* binding */ createMultiplePlayers),\n/* harmony export */ createMultipleSync: () => (/* binding */ createMultipleSync),\n/* harmony export */ setupCloudinaryGlobal: () => (/* binding */ setupCloudinaryGlobal)\n/* harmony export */ });\n/* harmony import */ var _lazy_player__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lazy-player */ \"./utils/lazy-player.js\");\n\n\nconst createAsyncPlayer = async (id, playerOptions, ready, createFn) => {\n const mergedOptions = Object.assign({}, playerOptions);\n const videoElement = (0,_lazy_player__WEBPACK_IMPORTED_MODULE_0__.getVideoElement)(id);\n const opts = await (async () => {\n try {\n const {\n fetchAndMergeConfig\n } = await __webpack_require__.e(/*! import() */ \"utils_fetch-config_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./fetch-config */ \"./utils/fetch-config.js\"));\n const fetched = await fetchAndMergeConfig(mergedOptions);\n return Object.assign({}, fetched, mergedOptions);\n } catch {\n return mergedOptions;\n }\n })();\n if (opts?.schedule?.weekly) {\n const {\n shouldUseScheduleBootstrap,\n scheduleBootstrap\n } = await __webpack_require__.e(/*! import() */ \"utils_schedule_js\").then(__webpack_require__.bind(__webpack_require__, /*! ./schedule */ \"./utils/schedule.js\"));\n if (shouldUseScheduleBootstrap(opts)) {\n return scheduleBootstrap(id, opts, ready);\n }\n }\n if ((0,_lazy_player__WEBPACK_IMPORTED_MODULE_0__.shouldUseLazyBootstrap)(opts)) {\n return (0,_lazy_player__WEBPACK_IMPORTED_MODULE_0__.lazyBootstrap)(id, opts, ready);\n }\n return createFn(videoElement, opts, ready);\n};\nconst createMultiplePlayers = async (selector, playerOptions, ready, playerFn) => {\n const nodeList = document.querySelectorAll(selector);\n return Promise.all([...nodeList].map(node => playerFn(node, playerOptions, ready)));\n};\nconst createMultipleSync = (selector, playerOptions, ready, playerFn) => {\n const nodeList = document.querySelectorAll(selector);\n return [...nodeList].map(node => playerFn(node, playerOptions, ready));\n};\nconst setupCloudinaryGlobal = methods => {\n const cloudinary = {\n ...(window.cloudinary || {}),\n ...methods\n };\n window.cloudinary = cloudinary;\n return cloudinary;\n};\n\n//# sourceURL=webpack:///./utils/player-api.js?\n}");
793
804
 
794
805
  /***/ },
795
806
 
@@ -877,7 +888,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
877
888
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
878
889
 
879
890
  "use strict";
880
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ADS_IN_PLAYLIST: () => (/* binding */ ADS_IN_PLAYLIST),\n/* harmony export */ AUTO_PLAY_MODE: () => (/* binding */ AUTO_PLAY_MODE),\n/* harmony export */ CLOUDINARY_CONFIG_PARAM: () => (/* binding */ CLOUDINARY_CONFIG_PARAM),\n/* harmony export */ CROP_MODE: () => (/* binding */ CROP_MODE),\n/* harmony export */ FLOATING_TO: () => (/* binding */ FLOATING_TO),\n/* harmony export */ FLUID_CLASS_NAME: () => (/* binding */ FLUID_CLASS_NAME),\n/* harmony export */ PLAYER_PARAMS: () => (/* binding */ PLAYER_PARAMS),\n/* harmony export */ PRELOAD: () => (/* binding */ PRELOAD),\n/* harmony export */ SOURCE_PARAMS: () => (/* binding */ SOURCE_PARAMS)\n/* harmony export */ });\n// Parameters that can be passed to source configuration (inherited by source method)\nconst SOURCE_PARAMS = ['adaptiveStreaming', 'allowUsageReport', 'aspectRatio', 'autoShowRecommendations', 'breakpoints', 'chapters', 'cropMode', 'cropPadColor', 'cloudinaryConfig', 'description', 'download', 'hdr', 'info', 'interactionAreas', 'maxDpr', 'poster', 'posterOptions', 'publicId', 'rawTransformation', 'recommendations', 'resourceType', 'shoppable', 'source', 'sourceTransformation', 'sourceTypes', 'textTracks', 'title', 'transformation', 'type', 'visualSearch', 'withCredentials', 'videoSources'];\n\n// All parameters that can be passed to player constructor\nconst PLAYER_PARAMS = SOURCE_PARAMS.concat(['_internalAnalyticsMetadata', 'ads', 'aiHighlightsGraph', 'analytics', 'autoplayMode', 'chaptersButton', 'cloudinaryAnalytics', 'colors', 'debug', 'fetchErrorUsingGet', 'floatingWhenNotVisible', 'fluid', 'fontFace', 'hideContextMenu', 'ima', 'pictureInPictureToggle', 'playedEventPercents', 'playedEventTimes', 'playlistWidget', 'profile', 'qualitySelector', 'queryParams', 'seekThumbnails', 'showJumpControls', 'videoConfig', 'schedule', 'lazy']);\n\n// We support both camelCase and snake_case for cloudinary SDK params\nconst CLOUDINARY_CONFIG_PARAM = ['api_secret', 'auth_token', 'cdn_subdomain', 'cloud_name', 'cname', 'private_cdn', 'secure', 'secure_cdn_subdomain', 'secure_distribution', 'shorten', 'sign_url', 'url_suffix', 'use_root_path'];\nconst FLUID_CLASS_NAME = 'cld-fluid';\nconst AUTO_PLAY_MODE = {\n ALWAYS: 'always',\n ON_SCROLL: 'on-scroll',\n NEVER: 'never'\n};\nconst FLOATING_TO = {\n LEFT: 'left',\n RIGHT: 'right',\n NONE: 'none'\n};\nconst ADS_IN_PLAYLIST = {\n FIRST_VIDEO: 'first-video',\n EVERY_VIDEO: 'every-video'\n};\nconst PRELOAD = {\n AUTO: 'auto',\n METADATA: 'metadata',\n NONE: 'none'\n};\nconst CROP_MODE = {\n FILL: 'fill',\n PAD: 'pad',\n SMART: 'smart'\n};\n\n//# sourceURL=webpack:///./video-player.const.js?\n}");
891
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ADS_IN_PLAYLIST: () => (/* binding */ ADS_IN_PLAYLIST),\n/* harmony export */ AUTO_PLAY_MODE: () => (/* binding */ AUTO_PLAY_MODE),\n/* harmony export */ CLOUDINARY_CONFIG_PARAM: () => (/* reexport safe */ _utils_cloudinary_config_param__WEBPACK_IMPORTED_MODULE_0__.CLOUDINARY_CONFIG_PARAM),\n/* harmony export */ CROP_MODE: () => (/* binding */ CROP_MODE),\n/* harmony export */ FLOATING_TO: () => (/* binding */ FLOATING_TO),\n/* harmony export */ FLUID_CLASS_NAME: () => (/* binding */ FLUID_CLASS_NAME),\n/* harmony export */ PLAYER_PARAMS: () => (/* binding */ PLAYER_PARAMS),\n/* harmony export */ PRELOAD: () => (/* binding */ PRELOAD),\n/* harmony export */ SOURCE_PARAMS: () => (/* binding */ SOURCE_PARAMS)\n/* harmony export */ });\n/* harmony import */ var _utils_cloudinary_config_param__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/cloudinary-config-param */ \"./utils/cloudinary-config-param.js\");\n// Parameters that can be passed to source configuration (inherited by source method)\nconst SOURCE_PARAMS = ['adaptiveStreaming', 'allowUsageReport', 'aspectRatio', 'autoShowRecommendations', 'breakpoints', 'chapters', 'cropMode', 'cropPadColor', 'cloudinaryConfig', 'description', 'download', 'hdr', 'info', 'interactionAreas', 'maxDpr', 'poster', 'posterOptions', 'publicId', 'rawTransformation', 'recommendations', 'resourceType', 'shoppable', 'source', 'sourceTransformation', 'sourceTypes', 'textTracks', 'title', 'transformation', 'type', 'visualSearch', 'withCredentials', 'videoSources'];\n\n// All parameters that can be passed to player constructor\nconst PLAYER_PARAMS = SOURCE_PARAMS.concat(['_internalAnalyticsMetadata', 'ads', 'aiHighlightsGraph', 'analytics', 'autoplayMode', 'chaptersButton', 'cloudinaryAnalytics', 'colors', 'debug', 'fetchErrorUsingGet', 'floatingWhenNotVisible', 'fluid', 'fontFace', 'hideContextMenu', 'ima', 'pictureInPictureToggle', 'playedEventPercents', 'playedEventTimes', 'playlistWidget', 'profile', 'qualitySelector', 'queryParams', 'seekThumbnails', 'showJumpControls', 'videoConfig', 'schedule', 'lazy']);\n\n// We support both camelCase and snake_case for cloudinary SDK params\n\nconst FLUID_CLASS_NAME = 'cld-fluid';\nconst AUTO_PLAY_MODE = {\n ALWAYS: 'always',\n ON_SCROLL: 'on-scroll',\n NEVER: 'never'\n};\nconst FLOATING_TO = {\n LEFT: 'left',\n RIGHT: 'right',\n NONE: 'none'\n};\nconst ADS_IN_PLAYLIST = {\n FIRST_VIDEO: 'first-video',\n EVERY_VIDEO: 'every-video'\n};\nconst PRELOAD = {\n AUTO: 'auto',\n METADATA: 'metadata',\n NONE: 'none'\n};\nconst CROP_MODE = {\n FILL: 'fill',\n PAD: 'pad',\n SMART: 'smart'\n};\n\n//# sourceURL=webpack:///./video-player.const.js?\n}");
881
892
 
882
893
  /***/ },
883
894
 
@@ -888,7 +899,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
888
899
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
889
900
 
890
901
  "use strict";
891
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createPlayerWithConfig: () => (/* binding */ createPlayerWithConfig),\n/* harmony export */ createVideoPlayer: () => (/* binding */ createVideoPlayer),\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 uuid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! uuid */ \"../node_modules/uuid/dist/v4.js\");\n/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash/isEmpty */ \"../node_modules/lodash/isEmpty.js\");\n/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_isEmpty__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash/get */ \"../node_modules/lodash/get.js\");\n/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var lodash_pick__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash/pick */ \"../node_modules/lodash/pick.js\");\n/* harmony import */ var lodash_pick__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash_pick__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash/isFunction */ \"../node_modules/lodash/isFunction.js\");\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash_isFunction__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var lodash_isObject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lodash/isObject */ \"../node_modules/lodash/isObject.js\");\n/* harmony import */ var lodash_isObject__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(lodash_isObject__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var lodash_isString__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lodash/isString */ \"../node_modules/lodash/isString.js\");\n/* harmony import */ var lodash_isString__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(lodash_isString__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components */ \"./components/index.js\");\n/* harmony import */ var _plugins__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./plugins */ \"./plugins/index.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils */ \"./utils/index.js\");\n/* harmony import */ var _config_defaults__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./config/defaults */ \"./config/defaults.js\");\n/* harmony import */ var _utils_setup_event_methods__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils/setup-event-methods */ \"./utils/setup-event-methods.js\");\n/* harmony import */ var _extended_events__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./extended-events */ \"./extended-events.js\");\n/* harmony import */ var _plugins_cloudinary_models_video_source_video_source__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./plugins/cloudinary/models/video-source/video-source */ \"./plugins/cloudinary/models/video-source/video-source.js\");\n/* harmony import */ var _video_player_utils__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./video-player.utils */ \"./video-player.utils.js\");\n/* harmony import */ var _video_player_const__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./video-player.const */ \"./video-player.const.js\");\n/* harmony import */ var _validators_validators_functions__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./validators/validators-functions */ \"./validators/validators-functions.js\");\n/* harmony import */ var _utils_consts__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./utils/consts */ \"./utils/consts.js\");\n/* harmony import */ var _utils_get_analytics_player_options__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./utils/get-analytics-player-options */ \"./utils/get-analytics-player-options.js\");\n/* harmony import */ var _plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./plugins/cloudinary/common */ \"./plugins/cloudinary/common.js\");\n/* harmony import */ var _utils_video_retry__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./utils/video-retry */ \"./utils/video-retry.js\");\n/* harmony import */ var _utils_querystring__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./utils/querystring */ \"./utils/querystring.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst INTERNAL_ANALYTICS_URL = 'https://analytics-api-s.cloudinary.com';\nconst RETRY_DEFAULT_TIMEOUT = 5 * 1000;\n\n// Register all plugins\nObject.keys(_plugins__WEBPACK_IMPORTED_MODULE_9__[\"default\"]).forEach(key => {\n video_js__WEBPACK_IMPORTED_MODULE_0___default().registerPlugin(key, _plugins__WEBPACK_IMPORTED_MODULE_9__[\"default\"][key]);\n});\n(0,_video_player_utils__WEBPACK_IMPORTED_MODULE_15__.overrideDefaultVideojsComponents)();\nclass VideoPlayer {\n static all(selector) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n const nodeList = document.querySelectorAll(selector);\n return [...nodeList].map(node => new VideoPlayer(node, ...args));\n }\n get playerOptions() {\n return this.options.playerOptions;\n }\n constructor(elem, options, ready) {\n this.videoElement = elem;\n this.options = (0,_video_player_utils__WEBPACK_IMPORTED_MODULE_15__.splitOptions)(options);\n this._videojsOptions = this.options.videojsOptions;\n\n // Make sure to add 'video-js' class before creating videojs instance\n this.videoElement.classList.add('video-js');\n\n // Handle WebFont loading\n _utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].fontFace(this.videoElement, this.playerOptions.fontFace);\n\n // Handle play button options\n if (this._videojsOptions.bigPlayButton === 'init') {\n this.videoElement.classList.add('vjs-big-play-button-init-only');\n this._videojsOptions.bigPlayButton = true;\n }\n this.videojs = video_js__WEBPACK_IMPORTED_MODULE_0___default()(this.videoElement, this._videojsOptions);\n\n // Setup event methods (on, one, off, trigger)\n (0,_utils_setup_event_methods__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(this, this.videojs);\n this._isPlayerConfigValid = true;\n if (this.playerOptions.debug) {\n (0,_validators_validators_functions__WEBPACK_IMPORTED_MODULE_17__.isValidPlayerConfig)(this.options).then(valid => {\n if (!valid) {\n this._isPlayerConfigValid = false;\n this.videojs.error('invalid player configuration');\n return;\n }\n });\n }\n if (this._videojsOptions.muted) {\n this.videojs.volume(0.4);\n }\n if (this.playerOptions.fluid) {\n this.fluid(this.playerOptions.fluid);\n }\n this._setCssClasses();\n this._initPlugins();\n this._initJumpButtons();\n this._initPictureInPicture();\n this._initBigPauseButton();\n this._setVideoJsListeners(ready);\n }\n getVPInstanceId() {\n if (!this.vpInstanceId) {\n this.vpInstanceId = (0,uuid__WEBPACK_IMPORTED_MODULE_1__[\"default\"])();\n }\n return this.vpInstanceId;\n }\n _sendInternalAnalytics() {\n let additionalOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const options = Object.assign({}, this.playerOptions, this.options.videojsOptions, additionalOptions);\n if (!options.sourceOptions?.allowUsageReport) {\n return;\n }\n try {\n const internalAnalyticsMetadata = options._internalAnalyticsMetadata ?? {};\n const analyticsData = (0,_utils_get_analytics_player_options__WEBPACK_IMPORTED_MODULE_19__.getAnalyticsFromPlayerOptions)(options);\n const analyticsParams = new URLSearchParams(analyticsData).toString();\n const baseParams = new URLSearchParams({\n vpVersion: \"3.14.1\",\n vpInstanceId: this.getVPInstanceId(),\n cloudName: options.cloudinary.cloud_name,\n ...internalAnalyticsMetadata\n }).toString();\n fetch(`${INTERNAL_ANALYTICS_URL}/video_player_source?${analyticsParams}&${baseParams}`);\n } catch (err) {\n console.warn(err);\n }\n }\n _resetReTryVideoState = () => {\n this.reTryVideoStateRetriesCount = 0;\n this.videojs.clearTimeout(this.reTryVideoStateTimeoutId);\n };\n _handleRefresh = () => {\n this.videojs.error(null);\n const src = this.currentPublicId() || this.currentSourceUrl();\n if (src) {\n this.source(src, this.playerOptions.sourceOptions || {});\n }\n };\n _setVideoJsListeners(ready) {\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.ERROR, () => {\n const error = this.videojs.error();\n if (error) {\n const type = this._isPlayerConfigValid && this.videojs.cloudinary.currentSourceType();\n\n /*\n error codes :\n 3 - media playback was aborted due to a corruption problem\n 4 - media error, media source not supported\n */\n const isCorrupted = error.code === 3 && (video_js__WEBPACK_IMPORTED_MODULE_0___default().browser).IS_SAFARI;\n if ([isCorrupted, error.code === 4].includes(true) && [_utils_consts__WEBPACK_IMPORTED_MODULE_18__.SOURCE_TYPE.AUDIO, _utils_consts__WEBPACK_IMPORTED_MODULE_18__.SOURCE_TYPE.VIDEO].includes(type)) {\n if (this.isLiveStream) {\n this.videojs.error({\n code: _plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_20__.ERROR_CODE.CUSTOM,\n message: 'Live Stream not started'\n });\n this.reloadVideoUntilAvailable();\n } else {\n this.videojs.error(null);\n _utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].handleCldError(this, this.playerOptions);\n }\n } else {\n this._resetReTryVideoState();\n }\n }\n });\n this.videojs.tech_.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.RETRY_PLAYLIST, () => {\n const mediaRequestsErrored = lodash_get__WEBPACK_IMPORTED_MODULE_3___default()(this.videojs, 'hls.stats.mediaRequestsErrored', 0);\n if (mediaRequestsErrored > 0) {\n this._resetReTryVideoState();\n _utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].handleCldError(this, this.playerOptions);\n }\n });\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.PLAY, this._resetReTryVideoState);\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CAN_PLAY_THROUGH, this._resetReTryVideoState);\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CLD_SOURCE_CHANGED, this._onSourceChange.bind(this));\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.REFRESH, this._handleRefresh.bind(this));\n this.videojs.ready(() => {\n this._onReady();\n this._applyVolumeBarAriaLiveFix();\n if (ready) {\n ready(this);\n }\n });\n }\n _initPlugins() {\n this._initIma();\n this._initAutoplay();\n this._initContextMenu();\n this._initPerSrcBehaviors();\n this._initCloudinary();\n this._initAnalytics();\n this._initCloudinaryAnalytics();\n this._initFloatingPlayer();\n this._initVisualSearch();\n this._initShare();\n this._initColors();\n this._initTextTracks();\n this._initHighlightsGraph();\n this._initSeekThumbs();\n this._initChapters();\n this._initInteractionAreas();\n this._initSourceSwitcher();\n }\n _isFullScreen() {\n return this.videojs.player().isFullscreen();\n }\n _initIma() {\n if (this.playerOptions.ads && Object.keys(this.playerOptions.ads).length !== 0) {\n _plugins__WEBPACK_IMPORTED_MODULE_9__[\"default\"].imaPlugin(this.videojs, this.playerOptions);\n }\n }\n setTextTracks(conf) {\n this.textTracksManager.removeAllTextTracks();\n if (conf) {\n const kinds = Object.keys(conf);\n const allTracks = [];\n for (const kind of kinds) {\n if (kind !== 'options') {\n const tracks = Array.isArray(conf[kind]) ? conf[kind] : [conf[kind]];\n for (const track of tracks) {\n allTracks.push({\n ...track,\n kind: kind,\n label: track.label,\n srclang: track.language,\n default: !!track.default,\n src: track.url\n });\n }\n }\n }\n this.textTracksManager.addTextTracks(allTracks);\n if (conf.options && this.videojs.styledTextTracks) {\n this.videojs.styledTextTracks(conf.options);\n }\n }\n }\n _initSeekThumbs() {\n if (this.playerOptions.seekThumbnails) {\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref) => {\n let {\n source\n } = _ref;\n if (!source || source.getType() === _utils_consts__WEBPACK_IMPORTED_MODULE_18__.SOURCE_TYPE.AUDIO ||\n // Is Audio\n source.resourceConfig().type === 'live' ||\n // Is live stream\n (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_20__.isRawUrl)(source.publicId()) ||\n // Is a raw url\n this.videojs.activePlugins_ && this.videojs.activePlugins_.vr // It's a VR (i.e. 360)\n ) {\n return;\n }\n const publicId = source.publicId();\n const transformation = (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_20__.omitVideoOnlyTransformations)(Object.assign({}, source.transformation()));\n\n // fl_sprite must be in a separate URL component when transformation has params\n const spriteTx = [...(Array.isArray(transformation) ? transformation : [transformation]), {\n flags: ['sprite']\n }];\n const vttUrl = source.config().url(`${publicId}.vtt`, {\n transformation: spriteTx\n }).replace(/\\.json$/, ''); // Handle playlist by tag\n const vttSrc = (0,_utils_querystring__WEBPACK_IMPORTED_MODULE_22__.appendQueryParams)(vttUrl, source.queryParams());\n\n // vttThumbnails must be called differently on init and on source update.\n lodash_isFunction__WEBPACK_IMPORTED_MODULE_5___default()(this.videojs.vttThumbnails) ? this.videojs.vttThumbnails({\n src: vttSrc\n }) : this.videojs.vttThumbnails.src(vttSrc);\n });\n }\n }\n _initHighlightsGraph() {\n if (this.playerOptions.aiHighlightsGraph) {\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref2) => {\n let {\n source\n } = _ref2;\n if (!source || source.getType() === _utils_consts__WEBPACK_IMPORTED_MODULE_18__.SOURCE_TYPE.AUDIO ||\n // Is Audio\n (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_20__.isRawUrl)(source.publicId()) // Is a raw url\n ) {\n return;\n }\n const publicId = source.publicId();\n\n // Keep video-length related transformations and remove the rest\n const inputTransformations = lodash_pick__WEBPACK_IMPORTED_MODULE_4___default()(source.transformation(), ['start_offset', 'end_offset', 'duration']);\n const transformation = Object.assign({}, inputTransformations);\n transformation.effect = 'preview';\n transformation.flags = transformation.flags || [];\n transformation.flags.push('getinfo');\n const aiHighlightsGraphUrl = source.config().url(`${publicId}`, {\n transformation\n }).replace(/\\.json$/, ''); // Handle playlist by tag\n const aiHighlightsGraphSrc = (0,_utils_querystring__WEBPACK_IMPORTED_MODULE_22__.appendQueryParams)(aiHighlightsGraphUrl, source.queryParams());\n\n // Plugin is called differently on init and on source update.\n lodash_isFunction__WEBPACK_IMPORTED_MODULE_5___default()(this.videojs.aiHighlightsGraph) ? this.videojs.aiHighlightsGraph({\n src: aiHighlightsGraphSrc\n }) : this.videojs.aiHighlightsGraph.src(aiHighlightsGraphSrc);\n });\n }\n }\n _initChapters() {\n if (!this.playerOptions.chaptersButton && this.videojs.controlBar) {\n this.videojs.controlBar.removeChild('chaptersButton');\n }\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref3) => {\n let {\n source\n } = _ref3;\n if ((!lodash_isEmpty__WEBPACK_IMPORTED_MODULE_2___default()(source?._chapters) || source?._chapters === true) && this.videojs.chapters) {\n lodash_isFunction__WEBPACK_IMPORTED_MODULE_5___default()(this.videojs.chapters) ? this.videojs.chapters(source._chapters) : this.videojs.chapters.src(source._chapters);\n } else if (this.videojs.chapters?.resetPlugin) {\n this.videojs.chapters.resetPlugin();\n }\n });\n }\n _initInteractionAreas() {\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.READY, async () => {\n if (this.options.videojsOptions.interactionDisplay && this.videojs.interactionAreas) {\n this.videojs.interactionAreas(this, this.playerOptions, this._videojsOptions);\n }\n });\n }\n _initVisualSearch() {\n // Listen for source changes to apply visual search based on source config\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref4) => {\n let {\n source\n } = _ref4;\n if (source?._visualSearch && this.videojs.visualSearch) {\n lodash_isFunction__WEBPACK_IMPORTED_MODULE_5___default()(this.videojs.visualSearch) ? this.videojs.visualSearch(source._visualSearch) : this.videojs.visualSearch.createSearchUI(source._visualSearch);\n } else if (!source?._visualSearch && this.videojs.visualSearch?.clearUI) {\n this.videojs.visualSearch.clearUI();\n }\n });\n }\n _initShare() {\n // Listen for source changes to apply Share plugin based on source config\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref5) => {\n let {\n source\n } = _ref5;\n if (!this.videojs.share) {\n return;\n }\n\n // First time: initialise plugin if necessary\n if (source?._download && lodash_isFunction__WEBPACK_IMPORTED_MODULE_5___default()(this.videojs.share)) {\n this.videojs.share({\n download: true\n });\n }\n if (!lodash_isFunction__WEBPACK_IMPORTED_MODULE_5___default()(this.videojs.share)) {\n // Plugin already initialised – update UI accordingly\n if (source?._download) {\n this.videojs.share.addDownloadButton?.();\n } else {\n this.videojs.share.removeDownloadButton?.();\n }\n }\n });\n }\n _initColors() {\n if (this.playerOptions.colors) {\n this.videojs.colors({\n colors: this.playerOptions.colors\n });\n }\n }\n _initTextTracks() {\n this.textTracksManager = this.videojs.textTracksManager();\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref6) => {\n let {\n source\n } = _ref6;\n if (source?._textTracks) {\n this.setTextTracks(source._textTracks);\n }\n });\n }\n _initPerSrcBehaviors() {\n if (this.videojs.perSourceBehaviors) {\n this.videojs.perSourceBehaviors();\n }\n }\n _initJumpButtons() {\n if (!this.playerOptions.showJumpControls && this.videojs.controlBar) {\n this.videojs.controlBar.removeChild('JumpForwardButton');\n this.videojs.controlBar.removeChild('JumpBackButton');\n }\n }\n _initPictureInPicture() {\n if (!this.playerOptions.pictureInPictureToggle && this.videojs.controlBar) {\n this.videojs.controlBar.removeChild('pictureInPictureToggle');\n }\n }\n _initBigPauseButton() {\n if ((video_js__WEBPACK_IMPORTED_MODULE_0___default().browser).IS_IOS || (video_js__WEBPACK_IMPORTED_MODULE_0___default().browser).IS_ANDROID) {\n this.videojs.addChild('BigPauseButton');\n }\n }\n _initCloudinary() {\n const cloudinaryConfig = this.playerOptions.cloudinary;\n cloudinaryConfig.chainTarget = this;\n if (cloudinaryConfig.secure !== false) {\n (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_20__.extendCloudinaryConfig)(cloudinaryConfig, {\n secure: true\n });\n }\n\n // Merge cloudinary config with source config for the plugin\n const cloudinaryOptions = {\n cloudinaryConfig,\n ...this.playerOptions.sourceOptions\n };\n this.videojs.cloudinary(cloudinaryOptions);\n }\n _initAnalytics() {\n const analyticsOpts = this.playerOptions.analytics;\n if (!window.gtag && analyticsOpts) {\n console.error('Google Analytics script (gtag) is missing.');\n return;\n }\n if (analyticsOpts) {\n const opts = typeof analyticsOpts === 'object' ? analyticsOpts : {};\n this.videojs.analytics(opts);\n }\n }\n _initCloudinaryAnalytics() {\n const cloudinaryAnalyticsOptionEnabled = !!this.playerOptions.cloudinaryAnalytics;\n if (cloudinaryAnalyticsOptionEnabled) {\n this.videojs.videoElement = this.videoElement;\n const options = lodash_isObject__WEBPACK_IMPORTED_MODULE_6___default()(this.playerOptions.cloudinaryAnalytics) ? this.playerOptions.cloudinaryAnalytics : {};\n this.videojs.cloudinaryAnalytics(options);\n }\n }\n _initSourceSwitcher() {\n this.sourceSwitcher = this.videojs.sourceSwitcher();\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref7) => {\n let {\n source\n } = _ref7;\n const videoSources = source.videoSources?.();\n const isSourcesListAvailable = Array.isArray(videoSources) ? !!videoSources.length : false;\n if (this.videojs.controlBar) {\n const method = isSourcesListAvailable ? 'show' : 'hide';\n const element = this.videojs.controlBar.getChild('sourceSwitcherButton');\n if (element && typeof element?.[method] === 'function') {\n element[method]();\n }\n }\n if (isSourcesListAvailable) {\n const selectedIndex = videoSources.findIndex(_ref8 => {\n let {\n publicId\n } = _ref8;\n return publicId === source.publicId();\n });\n this.sourceSwitcher.reInit({\n sources: videoSources,\n selectedIndex: selectedIndex === -1 ? 0 : selectedIndex,\n onSourceChange: _ref9 => {\n let {\n publicId,\n ...newSourceOptions\n } = _ref9;\n return this.source(publicId, {\n ...newSourceOptions,\n videoSources\n });\n }\n });\n }\n });\n if (Array.isArray(this.playerOptions.sourceOptions?.videoSources) && this.playerOptions.sourceOptions?.videoSources.length) {\n // eslint-disable-next-line no-unused-vars\n const {\n publicId,\n label,\n ...videoSourceData\n } = this.playerOptions.sourceOptions.videoSources[0];\n this.source(publicId, {\n ...videoSourceData,\n videoSources: this.playerOptions.sourceOptions.videoSources\n });\n }\n }\n reTryVideoStateUntilAvailable() {\n let maxNumberOfCalls = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.POSITIVE_INFINITY;\n let timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : RETRY_DEFAULT_TIMEOUT;\n if (typeof this.reTryVideoStateRetriesCount !== 'number') {\n this.reTryVideoStateRetriesCount = 0;\n }\n if (!(0,_utils_video_retry__WEBPACK_IMPORTED_MODULE_21__.isVideoInReadyState)(this.videojs.readyState())) {\n if (this.reTryVideoStateRetriesCount < maxNumberOfCalls) {\n this.reTryVideoStateRetriesCount++;\n this.reTryVideoStateTimeoutId = this.videojs.setTimeout(() => this.reTryVideoStateUntilAvailable(maxNumberOfCalls, timeout), timeout);\n } else {\n let e = new Error('Video is not ready please try later');\n this.videojs.trigger('error', e);\n }\n } else {\n this.reTryVideoStateRetriesCount = 0;\n }\n }\n _resetReloadVideo = () => {\n this.reloadVideoRetriesCount = 0;\n this.videojs.clearTimeout(this.reloadVideoTimeoutId);\n };\n reloadVideoUntilAvailable() {\n let maxNumberOfCalls = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.POSITIVE_INFINITY;\n let timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : RETRY_DEFAULT_TIMEOUT;\n if (typeof this.reloadVideoRetriesCount !== 'number') {\n this.reloadVideoRetriesCount = 0;\n }\n if (this.reloadVideoRetriesCount < maxNumberOfCalls) {\n this.reloadVideoRetriesCount++;\n this.reloadVideoTimeoutId = this.videojs.setTimeout(() => {\n const videoUrl = this.currentSourceUrl();\n (0,_utils_video_retry__WEBPACK_IMPORTED_MODULE_21__.checkIfVideoIsAvailable)(videoUrl, this.isLiveStream ? 'live' : 'default').then(() => this.source(videoUrl)).catch(() => this.reloadVideoUntilAvailable(maxNumberOfCalls, timeout));\n }, timeout);\n } else {\n this.videojs.trigger('error', new Error('Sorry, we could not load your video'));\n }\n }\n _initAutoplay() {\n const autoplayMode = this.playerOptions.autoplayMode;\n if (autoplayMode === 'on-scroll') {\n this.videojs.autoplayOnScroll();\n }\n }\n _initContextMenu() {\n if (!this.playerOptions.hideContextMenu) {\n this.videojs.contextMenu(_config_defaults__WEBPACK_IMPORTED_MODULE_11__[\"default\"].contextMenu);\n }\n }\n _initFloatingPlayer() {\n if (this.playerOptions.floatingWhenNotVisible !== _video_player_const__WEBPACK_IMPORTED_MODULE_16__.FLOATING_TO.NONE) {\n this.videojs.floatingPlayer({\n floatTo: this.playerOptions.floatingWhenNotVisible\n });\n }\n }\n _setCssClasses() {\n this.videojs.addClass(_utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].CLASS_PREFIX);\n this.videojs.addClass(_utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].playerClassPrefix(this.videojs));\n _utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].setSkinClassPrefix(this.videojs, _utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].skinClassPrefix(this.videojs));\n }\n _onReady() {\n this._setExtendedEvents();\n\n // Load first video (mainly to support video tag 'source' and 'public-id' attributes)\n // Source parameters are set to playerOptions.sourceOptions\n const source = this.playerOptions.sourceOptions.source || this.playerOptions.sourceOptions.publicId;\n if (source) {\n const sourceOptions = Object.assign({}, this.playerOptions.sourceOptions);\n this.source(source, sourceOptions);\n }\n }\n\n /**\n * Temporary fix: remove aria-live from VolumeBar to avoid NVDA repeated announcements.\n * TODO: Remove when Video.js includes the upstream fix (nvaccess/nvda#7996).\n */\n _applyVolumeBarAriaLiveFix() {\n const volumeBar = this.videojs.$('.vjs-volume-bar');\n if (volumeBar) {\n volumeBar.removeAttribute('aria-live');\n }\n }\n _onSourceChange(e, _ref0) {\n let {\n source,\n sourceOptions\n } = _ref0;\n this._sendInternalAnalytics({\n ...(sourceOptions && {\n sourceOptions\n })\n });\n this.isLiveStream = source?.resourceConfig()?.type === 'live';\n }\n _setExtendedEvents() {\n const events = [];\n\n // Add user-configured events; ExtendedEvents will merge with defaults\n if (this.playerOptions.playedEventPercents) {\n events.push({\n type: _utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.PERCENTS_PLAYED,\n percents: this.playerOptions.playedEventPercents\n });\n }\n if (this.playerOptions.playedEventTimes) {\n events.push({\n type: _utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.TIME_PLAYED,\n times: this.playerOptions.playedEventTimes\n });\n }\n const extendedEvents = new _extended_events__WEBPACK_IMPORTED_MODULE_13__[\"default\"](this.videojs, {\n events\n });\n\n // Forward all extended events to the main player for developer access\n Object.keys(extendedEvents.events).forEach(_event => {\n extendedEvents.on(_event, (event, data) => {\n this.videojs.trigger({\n type: _event,\n eventData: data\n });\n });\n });\n }\n cloudinaryConfig(config) {\n return this.videojs.cloudinary.cloudinaryConfig(config);\n }\n currentPublicId() {\n return this.videojs.cloudinary.currentPublicId();\n }\n currentSourceUrl() {\n return this.videojs.currentSource().src;\n }\n currentPoster() {\n return this.videojs.cloudinary.currentPoster();\n }\n source(publicId) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n ({\n publicId,\n options\n } = (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_20__.normalizeOptions)(publicId, options));\n if (!this._isPlayerConfigValid) {\n return;\n }\n if (this.playerOptions.debug) {\n options.debug = true;\n (0,_validators_validators_functions__WEBPACK_IMPORTED_MODULE_17__.isValidSourceConfig)(options).then(valid => {\n if (!valid) {\n this.videojs.error('invalid source configuration');\n }\n });\n }\n if (publicId instanceof _plugins_cloudinary_models_video_source_video_source__WEBPACK_IMPORTED_MODULE_14__[\"default\"]) {\n return this.videojs.cloudinary.source(publicId, options);\n }\n\n // Inherit source parameters from player options (source options take precedence)\n const inherited = this.playerOptions.sourceOptions || {};\n options = {\n ...inherited,\n ...options\n };\n if (options.shoppable && this.videojs.shoppable) {\n this.videojs.shoppable(this.videojs, options);\n }\n this._resetReloadVideo();\n this._resetReTryVideoState();\n const maxTries = this.videojs.options_.maxTries || 3;\n const videoReadyTimeout = this.videojs.options_.videoTimeout || 55000;\n this.reTryVideoStateUntilAvailable(maxTries, videoReadyTimeout);\n return this.videojs.cloudinary.source(publicId, options);\n }\n posterOptions(options) {\n return this.videojs.cloudinary.posterOptions(options);\n }\n skin(name) {\n if (name !== undefined && lodash_isString__WEBPACK_IMPORTED_MODULE_7___default()(name)) {\n _utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].setSkinClassPrefix(this.videojs, name);\n }\n return _utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].skinClassPrefix(this.videojs);\n }\n playlist(sources) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.playerOptions.playlistWidget = {\n ...(this.playerOptions.playlistWidget || {\n show: false\n }),\n playlist: true\n };\n options = Object.assign({}, options, {\n playlistWidget: this.playerOptions.playlistWidget\n });\n this.videojs.one(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.READY, async () => {\n const playlistPlugin = await this.videojs.playlist(options);\n playlistPlugin(sources, options);\n });\n return this.videojs.cloudinary.playlist ? this.videojs.cloudinary.playlist(sources, options) : this;\n }\n playlistByTag(tag) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.playerOptions.playlistWidget = {\n ...(this.playerOptions.playlistWidget || {\n show: false\n }),\n playlistByTag: true\n };\n options = Object.assign({}, options, {\n playlistWidget: this.playerOptions.playlistWidget\n });\n return new Promise(resolve => {\n this.videojs.one(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.READY, async () => {\n const playlistPlugin = await this.videojs.playlist(options);\n playlistPlugin(await this.sourcesByTag(tag, options), options);\n resolve(this);\n });\n });\n }\n sourcesByTag(tag) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return this.videojs.cloudinary.sourcesByTag(tag, options);\n }\n fluid(bool) {\n if (bool === undefined) {\n return this.videojs.fluid();\n }\n if (bool) {\n this.videojs.addClass(_video_player_const__WEBPACK_IMPORTED_MODULE_16__.FLUID_CLASS_NAME);\n } else {\n this.videojs.removeClass(_video_player_const__WEBPACK_IMPORTED_MODULE_16__.FLUID_CLASS_NAME);\n }\n this.videojs.fluid(bool);\n this.videojs.trigger(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.FLUID, bool);\n return this;\n }\n play() {\n this.playWasCalled = true;\n this.videojs.play();\n return this;\n }\n stop() {\n this.pause();\n this.currentTime(0);\n return this;\n }\n playPrevious() {\n this.playlist().playPrevious();\n return this;\n }\n playNext() {\n this.playlist().playNext();\n return this;\n }\n transformation(trans) {\n return this.videojs.cloudinary.transformation(trans);\n }\n sourceTypes(types) {\n return this.videojs.cloudinary.sourceTypes(types);\n }\n sourceTransformation(trans) {\n return this.videojs.cloudinary.sourceTransformation(trans);\n }\n autoShowRecommendations(autoShow) {\n return this.videojs.cloudinary.autoShowRecommendations(autoShow);\n }\n duration() {\n return this.videojs.duration();\n }\n height(dimension) {\n if (!dimension) {\n return this.videojs.height();\n }\n this.videojs.height(dimension);\n return this;\n }\n width(dimension) {\n if (!dimension) {\n return this.videojs.width();\n }\n this.videojs.width(dimension);\n return this;\n }\n volume(volume) {\n if (!volume) {\n return this.videojs.volume();\n }\n this.videojs.volume(volume);\n return this;\n }\n mute() {\n if (!this.isMuted()) {\n this.videojs.muted(true);\n }\n return this;\n }\n unmute() {\n if (this.isMuted()) {\n this.videojs.muted(false);\n }\n return this;\n }\n isMuted() {\n return this.videojs.muted();\n }\n pause() {\n this.videojs.pause();\n return this;\n }\n currentTime(offsetSeconds) {\n if (!offsetSeconds && offsetSeconds !== 0) {\n return this.videojs.currentTime();\n }\n this.videojs.currentTime(offsetSeconds);\n return this;\n }\n maximize() {\n if (!this.isMaximized()) {\n this.videojs.requestFullscreen();\n }\n return this;\n }\n exitMaximize() {\n if (this.isMaximized()) {\n this.videojs.exitFullscreen();\n }\n return this;\n }\n isMaximized() {\n return this.videojs.isFullscreen();\n }\n dispose() {\n this.videojs.dispose();\n }\n controls(bool) {\n if (bool === undefined) {\n return this.videojs.controls();\n }\n this.videojs.controls(bool);\n return this;\n }\n ima() {\n return {\n playAd: this.videojs.ima.playAd\n };\n }\n loop(bool) {\n if (bool === undefined) {\n return this.videojs.loop();\n }\n this.videojs.loop(bool);\n return this;\n }\n el() {\n return this.videojs.el();\n }\n}\nconst mergeDefaults = options => video_js__WEBPACK_IMPORTED_MODULE_0___default().obj.merge({}, _config_defaults__WEBPACK_IMPORTED_MODULE_11__[\"default\"], options);\nconst getConfig = function (elem) {\n let playerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const videoElement = (0,_video_player_utils__WEBPACK_IMPORTED_MODULE_15__.getResolveVideoElement)(elem);\n const options = (0,_video_player_utils__WEBPACK_IMPORTED_MODULE_15__.extractOptions)(videoElement, playerOptions);\n return {\n videoElement,\n options\n };\n};\nconst createVideoPlayer = function (elem) {\n let playerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let ready = arguments.length > 2 ? arguments[2] : undefined;\n const {\n videoElement,\n options\n } = getConfig(elem, playerOptions);\n if (options.profile) {\n console.warn('Profile option requires async initialization. Use cloudinary.player() instead of cloudinary.videoPlayer()');\n }\n return new VideoPlayer(videoElement, mergeDefaults(options), ready);\n};\n\n/**\n * Create player with pre-merged config (skips fetch).\n * Used by player() when config was already fetched for schedule check.\n */\nconst createPlayerWithConfig = (elem, mergedOptions, ready) => {\n const {\n videoElement,\n options\n } = getConfig(elem, mergedOptions);\n return new VideoPlayer(videoElement, mergeDefaults(options), ready);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (VideoPlayer);\n\n//# sourceURL=webpack:///./video-player.js?\n}");
902
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createPlayerWithConfig: () => (/* binding */ createPlayerWithConfig),\n/* harmony export */ createVideoPlayer: () => (/* binding */ createVideoPlayer),\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 uuid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! uuid */ \"../node_modules/uuid/dist/v4.js\");\n/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash/isEmpty */ \"../node_modules/lodash/isEmpty.js\");\n/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_isEmpty__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash/get */ \"../node_modules/lodash/get.js\");\n/* harmony import */ var lodash_get__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_get__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var lodash_pick__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash/pick */ \"../node_modules/lodash/pick.js\");\n/* harmony import */ var lodash_pick__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash_pick__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lodash/isFunction */ \"../node_modules/lodash/isFunction.js\");\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(lodash_isFunction__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var lodash_isObject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lodash/isObject */ \"../node_modules/lodash/isObject.js\");\n/* harmony import */ var lodash_isObject__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(lodash_isObject__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var lodash_isString__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lodash/isString */ \"../node_modules/lodash/isString.js\");\n/* harmony import */ var lodash_isString__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(lodash_isString__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components */ \"./components/index.js\");\n/* harmony import */ var _plugins__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./plugins */ \"./plugins/index.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils */ \"./utils/index.js\");\n/* harmony import */ var _config_defaults__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./config/defaults */ \"./config/defaults.js\");\n/* harmony import */ var _utils_setup_event_methods__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils/setup-event-methods */ \"./utils/setup-event-methods.js\");\n/* harmony import */ var _extended_events__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./extended-events */ \"./extended-events.js\");\n/* harmony import */ var _plugins_cloudinary_models_video_source_video_source__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./plugins/cloudinary/models/video-source/video-source */ \"./plugins/cloudinary/models/video-source/video-source.js\");\n/* harmony import */ var _video_player_utils__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./video-player.utils */ \"./video-player.utils.js\");\n/* harmony import */ var _video_player_const__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./video-player.const */ \"./video-player.const.js\");\n/* harmony import */ var _validators_validators_functions__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./validators/validators-functions */ \"./validators/validators-functions.js\");\n/* harmony import */ var _utils_consts__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./utils/consts */ \"./utils/consts.js\");\n/* harmony import */ var _utils_get_analytics_player_options__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./utils/get-analytics-player-options */ \"./utils/get-analytics-player-options.js\");\n/* harmony import */ var _plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./plugins/cloudinary/common */ \"./plugins/cloudinary/common.js\");\n/* harmony import */ var _utils_video_retry__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./utils/video-retry */ \"./utils/video-retry.js\");\n/* harmony import */ var _utils_querystring__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./utils/querystring */ \"./utils/querystring.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst INTERNAL_ANALYTICS_URL = 'https://analytics-api-s.cloudinary.com';\nconst RETRY_DEFAULT_TIMEOUT = 5 * 1000;\n\n// Register all plugins\nObject.keys(_plugins__WEBPACK_IMPORTED_MODULE_9__[\"default\"]).forEach(key => {\n video_js__WEBPACK_IMPORTED_MODULE_0___default().registerPlugin(key, _plugins__WEBPACK_IMPORTED_MODULE_9__[\"default\"][key]);\n});\n(0,_video_player_utils__WEBPACK_IMPORTED_MODULE_15__.overrideDefaultVideojsComponents)();\nclass VideoPlayer {\n static all(selector) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n const nodeList = document.querySelectorAll(selector);\n return [...nodeList].map(node => new VideoPlayer(node, ...args));\n }\n get playerOptions() {\n return this.options.playerOptions;\n }\n constructor(elem, options, ready) {\n this.videoElement = elem;\n this.options = (0,_video_player_utils__WEBPACK_IMPORTED_MODULE_15__.splitOptions)(options);\n this._videojsOptions = this.options.videojsOptions;\n\n // Make sure to add 'video-js' class before creating videojs instance\n this.videoElement.classList.add('video-js');\n\n // Handle WebFont loading\n _utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].fontFace(this.videoElement, this.playerOptions.fontFace);\n\n // Handle play button options\n if (this._videojsOptions.bigPlayButton === 'init') {\n this.videoElement.classList.add('vjs-big-play-button-init-only');\n this._videojsOptions.bigPlayButton = true;\n }\n this.videojs = video_js__WEBPACK_IMPORTED_MODULE_0___default()(this.videoElement, this._videojsOptions);\n\n // Setup event methods (on, one, off, trigger)\n (0,_utils_setup_event_methods__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(this, this.videojs);\n this._isPlayerConfigValid = true;\n if (this.playerOptions.debug) {\n (0,_validators_validators_functions__WEBPACK_IMPORTED_MODULE_17__.isValidPlayerConfig)(this.options).then(valid => {\n if (!valid) {\n this._isPlayerConfigValid = false;\n this.videojs.error('invalid player configuration');\n return;\n }\n });\n }\n if (this._videojsOptions.muted) {\n this.videojs.volume(0.4);\n }\n if (this.playerOptions.fluid) {\n this.fluid(this.playerOptions.fluid);\n }\n this._setCssClasses();\n this._initPlugins();\n this._initJumpButtons();\n this._initPictureInPicture();\n this._initBigPauseButton();\n this._setVideoJsListeners(ready);\n }\n getVPInstanceId() {\n if (!this.vpInstanceId) {\n this.vpInstanceId = (0,uuid__WEBPACK_IMPORTED_MODULE_1__[\"default\"])();\n }\n return this.vpInstanceId;\n }\n _sendInternalAnalytics() {\n let additionalOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const options = Object.assign({}, this.playerOptions, this.options.videojsOptions, additionalOptions);\n if (!options.sourceOptions?.allowUsageReport) {\n return;\n }\n try {\n const internalAnalyticsMetadata = options._internalAnalyticsMetadata ?? {};\n const analyticsData = (0,_utils_get_analytics_player_options__WEBPACK_IMPORTED_MODULE_19__.getAnalyticsFromPlayerOptions)(options);\n const analyticsParams = new URLSearchParams(analyticsData).toString();\n const baseParams = new URLSearchParams({\n vpVersion: \"3.14.2-edge.1\",\n vpInstanceId: this.getVPInstanceId(),\n cloudName: options.cloudinary.cloud_name,\n ...internalAnalyticsMetadata\n }).toString();\n fetch(`${INTERNAL_ANALYTICS_URL}/video_player_source?${analyticsParams}&${baseParams}`);\n } catch (err) {\n console.warn(err);\n }\n }\n _resetReTryVideoState = () => {\n this.reTryVideoStateRetriesCount = 0;\n this.videojs.clearTimeout(this.reTryVideoStateTimeoutId);\n };\n _handleRefresh = () => {\n this.videojs.error(null);\n const src = this.currentPublicId() || this.currentSourceUrl();\n if (src) {\n this.source(src, this.playerOptions.sourceOptions || {});\n }\n };\n _setVideoJsListeners(ready) {\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.ERROR, () => {\n const error = this.videojs.error();\n if (error) {\n const type = this._isPlayerConfigValid && this.videojs.cloudinary.currentSourceType();\n\n /*\n error codes :\n 3 - media playback was aborted due to a corruption problem\n 4 - media error, media source not supported\n */\n const isCorrupted = error.code === 3 && (video_js__WEBPACK_IMPORTED_MODULE_0___default().browser).IS_SAFARI;\n if ([isCorrupted, error.code === 4].includes(true) && [_utils_consts__WEBPACK_IMPORTED_MODULE_18__.SOURCE_TYPE.AUDIO, _utils_consts__WEBPACK_IMPORTED_MODULE_18__.SOURCE_TYPE.VIDEO].includes(type)) {\n if (this.isLiveStream) {\n this.videojs.error({\n code: _plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_20__.ERROR_CODE.CUSTOM,\n message: 'Live Stream not started'\n });\n this.reloadVideoUntilAvailable();\n } else {\n this.videojs.error(null);\n _utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].handleCldError(this, this.playerOptions);\n }\n } else {\n this._resetReTryVideoState();\n }\n }\n });\n this.videojs.tech_.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.RETRY_PLAYLIST, () => {\n const mediaRequestsErrored = lodash_get__WEBPACK_IMPORTED_MODULE_3___default()(this.videojs, 'hls.stats.mediaRequestsErrored', 0);\n if (mediaRequestsErrored > 0) {\n this._resetReTryVideoState();\n _utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].handleCldError(this, this.playerOptions);\n }\n });\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.PLAY, this._resetReTryVideoState);\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CAN_PLAY_THROUGH, this._resetReTryVideoState);\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CLD_SOURCE_CHANGED, this._onSourceChange.bind(this));\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.REFRESH, this._handleRefresh.bind(this));\n this.videojs.ready(() => {\n this._onReady();\n this._applyVolumeBarAriaLiveFix();\n if (ready) {\n ready(this);\n }\n });\n }\n _initPlugins() {\n this._initIma();\n this._initAutoplay();\n this._initContextMenu();\n this._initPerSrcBehaviors();\n this._initCloudinary();\n this._initAnalytics();\n this._initCloudinaryAnalytics();\n this._initFloatingPlayer();\n this._initVisualSearch();\n this._initShare();\n this._initColors();\n this._initTextTracks();\n this._initHighlightsGraph();\n this._initSeekThumbs();\n this._initChapters();\n this._initInteractionAreas();\n this._initSourceSwitcher();\n }\n _isFullScreen() {\n return this.videojs.player().isFullscreen();\n }\n _initIma() {\n if (this.playerOptions.ads && Object.keys(this.playerOptions.ads).length !== 0) {\n _plugins__WEBPACK_IMPORTED_MODULE_9__[\"default\"].imaPlugin(this.videojs, this.playerOptions);\n }\n }\n setTextTracks(conf) {\n this.textTracksManager.removeAllTextTracks();\n if (conf) {\n const kinds = Object.keys(conf);\n const allTracks = [];\n for (const kind of kinds) {\n if (kind !== 'options') {\n const tracks = Array.isArray(conf[kind]) ? conf[kind] : [conf[kind]];\n for (const track of tracks) {\n allTracks.push({\n ...track,\n kind: kind,\n label: track.label,\n srclang: track.language,\n default: !!track.default,\n src: track.url\n });\n }\n }\n }\n this.textTracksManager.addTextTracks(allTracks);\n if (conf.options && this.videojs.styledTextTracks) {\n this.videojs.styledTextTracks(conf.options);\n }\n }\n }\n _initSeekThumbs() {\n if (this.playerOptions.seekThumbnails) {\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref) => {\n let {\n source\n } = _ref;\n if (!source || source.getType() === _utils_consts__WEBPACK_IMPORTED_MODULE_18__.SOURCE_TYPE.AUDIO ||\n // Is Audio\n source.resourceConfig().type === 'live' ||\n // Is live stream\n (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_20__.isRawUrl)(source.publicId()) ||\n // Is a raw url\n this.videojs.activePlugins_ && this.videojs.activePlugins_.vr // It's a VR (i.e. 360)\n ) {\n return;\n }\n const publicId = source.publicId();\n const transformation = (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_20__.omitVideoOnlyTransformations)(Object.assign({}, source.transformation()));\n\n // fl_sprite must be in a separate URL component when transformation has params\n const spriteTx = [...(Array.isArray(transformation) ? transformation : [transformation]), {\n flags: ['sprite']\n }];\n const vttUrl = source.config().url(`${publicId}.vtt`, {\n transformation: spriteTx\n }).replace(/\\.json$/, ''); // Handle playlist by tag\n const vttSrc = (0,_utils_querystring__WEBPACK_IMPORTED_MODULE_22__.appendQueryParams)(vttUrl, source.queryParams());\n\n // vttThumbnails must be called differently on init and on source update.\n lodash_isFunction__WEBPACK_IMPORTED_MODULE_5___default()(this.videojs.vttThumbnails) ? this.videojs.vttThumbnails({\n src: vttSrc\n }) : this.videojs.vttThumbnails.src(vttSrc);\n });\n }\n }\n _initHighlightsGraph() {\n if (this.playerOptions.aiHighlightsGraph) {\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref2) => {\n let {\n source\n } = _ref2;\n if (!source || source.getType() === _utils_consts__WEBPACK_IMPORTED_MODULE_18__.SOURCE_TYPE.AUDIO ||\n // Is Audio\n (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_20__.isRawUrl)(source.publicId()) // Is a raw url\n ) {\n return;\n }\n const publicId = source.publicId();\n\n // Keep video-length related transformations and remove the rest\n const inputTransformations = lodash_pick__WEBPACK_IMPORTED_MODULE_4___default()(source.transformation(), ['start_offset', 'end_offset', 'duration']);\n const transformation = Object.assign({}, inputTransformations);\n transformation.effect = 'preview';\n transformation.flags = transformation.flags || [];\n transformation.flags.push('getinfo');\n const aiHighlightsGraphUrl = source.config().url(`${publicId}`, {\n transformation\n }).replace(/\\.json$/, ''); // Handle playlist by tag\n const aiHighlightsGraphSrc = (0,_utils_querystring__WEBPACK_IMPORTED_MODULE_22__.appendQueryParams)(aiHighlightsGraphUrl, source.queryParams());\n\n // Plugin is called differently on init and on source update.\n lodash_isFunction__WEBPACK_IMPORTED_MODULE_5___default()(this.videojs.aiHighlightsGraph) ? this.videojs.aiHighlightsGraph({\n src: aiHighlightsGraphSrc\n }) : this.videojs.aiHighlightsGraph.src(aiHighlightsGraphSrc);\n });\n }\n }\n _initChapters() {\n if (!this.playerOptions.chaptersButton && this.videojs.controlBar) {\n this.videojs.controlBar.removeChild('chaptersButton');\n }\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref3) => {\n let {\n source\n } = _ref3;\n if ((!lodash_isEmpty__WEBPACK_IMPORTED_MODULE_2___default()(source?._chapters) || source?._chapters === true) && this.videojs.chapters) {\n lodash_isFunction__WEBPACK_IMPORTED_MODULE_5___default()(this.videojs.chapters) ? this.videojs.chapters(source._chapters) : this.videojs.chapters.src(source._chapters);\n } else if (this.videojs.chapters?.resetPlugin) {\n this.videojs.chapters.resetPlugin();\n }\n });\n }\n _initInteractionAreas() {\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.READY, async () => {\n if (this.options.videojsOptions.interactionDisplay && this.videojs.interactionAreas) {\n this.videojs.interactionAreas(this, this.playerOptions, this._videojsOptions);\n }\n });\n }\n _initVisualSearch() {\n // Listen for source changes to apply visual search based on source config\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref4) => {\n let {\n source\n } = _ref4;\n if (source?._visualSearch && this.videojs.visualSearch) {\n lodash_isFunction__WEBPACK_IMPORTED_MODULE_5___default()(this.videojs.visualSearch) ? this.videojs.visualSearch(source._visualSearch) : this.videojs.visualSearch.createSearchUI(source._visualSearch);\n } else if (!source?._visualSearch && this.videojs.visualSearch?.clearUI) {\n this.videojs.visualSearch.clearUI();\n }\n });\n }\n _initShare() {\n // Listen for source changes to apply Share plugin based on source config\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref5) => {\n let {\n source\n } = _ref5;\n if (!this.videojs.share) {\n return;\n }\n\n // First time: initialise plugin if necessary\n if (source?._download && lodash_isFunction__WEBPACK_IMPORTED_MODULE_5___default()(this.videojs.share)) {\n this.videojs.share({\n download: true\n });\n }\n if (!lodash_isFunction__WEBPACK_IMPORTED_MODULE_5___default()(this.videojs.share)) {\n // Plugin already initialised – update UI accordingly\n if (source?._download) {\n this.videojs.share.addDownloadButton?.();\n } else {\n this.videojs.share.removeDownloadButton?.();\n }\n }\n });\n }\n _initColors() {\n if (this.playerOptions.colors) {\n this.videojs.colors({\n colors: this.playerOptions.colors\n });\n }\n }\n _initTextTracks() {\n this.textTracksManager = this.videojs.textTracksManager();\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref6) => {\n let {\n source\n } = _ref6;\n if (source?._textTracks) {\n this.setTextTracks(source._textTracks);\n }\n });\n }\n _initPerSrcBehaviors() {\n if (this.videojs.perSourceBehaviors) {\n this.videojs.perSourceBehaviors();\n }\n }\n _initJumpButtons() {\n if (!this.playerOptions.showJumpControls && this.videojs.controlBar) {\n this.videojs.controlBar.removeChild('JumpForwardButton');\n this.videojs.controlBar.removeChild('JumpBackButton');\n }\n }\n _initPictureInPicture() {\n if (!this.playerOptions.pictureInPictureToggle && this.videojs.controlBar) {\n this.videojs.controlBar.removeChild('pictureInPictureToggle');\n }\n }\n _initBigPauseButton() {\n if ((video_js__WEBPACK_IMPORTED_MODULE_0___default().browser).IS_IOS || (video_js__WEBPACK_IMPORTED_MODULE_0___default().browser).IS_ANDROID) {\n this.videojs.addChild('BigPauseButton');\n }\n }\n _initCloudinary() {\n const cloudinaryConfig = this.playerOptions.cloudinary;\n cloudinaryConfig.chainTarget = this;\n if (cloudinaryConfig.secure !== false) {\n (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_20__.extendCloudinaryConfig)(cloudinaryConfig, {\n secure: true\n });\n }\n\n // Merge cloudinary config with source config for the plugin\n const cloudinaryOptions = {\n cloudinaryConfig,\n ...this.playerOptions.sourceOptions\n };\n this.videojs.cloudinary(cloudinaryOptions);\n }\n _initAnalytics() {\n const analyticsOpts = this.playerOptions.analytics;\n if (!window.gtag && analyticsOpts) {\n console.error('Google Analytics script (gtag) is missing.');\n return;\n }\n if (analyticsOpts) {\n const opts = typeof analyticsOpts === 'object' ? analyticsOpts : {};\n this.videojs.analytics(opts);\n }\n }\n _initCloudinaryAnalytics() {\n const cloudinaryAnalyticsOptionEnabled = !!this.playerOptions.cloudinaryAnalytics;\n if (cloudinaryAnalyticsOptionEnabled) {\n this.videojs.videoElement = this.videoElement;\n const options = lodash_isObject__WEBPACK_IMPORTED_MODULE_6___default()(this.playerOptions.cloudinaryAnalytics) ? this.playerOptions.cloudinaryAnalytics : {};\n this.videojs.cloudinaryAnalytics(options);\n }\n }\n _initSourceSwitcher() {\n this.sourceSwitcher = this.videojs.sourceSwitcher();\n this.videojs.on(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.CLD_SOURCE_CHANGED, (e, _ref7) => {\n let {\n source\n } = _ref7;\n const videoSources = source.videoSources?.();\n const isSourcesListAvailable = Array.isArray(videoSources) ? !!videoSources.length : false;\n if (this.videojs.controlBar) {\n const method = isSourcesListAvailable ? 'show' : 'hide';\n const element = this.videojs.controlBar.getChild('sourceSwitcherButton');\n if (element && typeof element?.[method] === 'function') {\n element[method]();\n }\n }\n if (isSourcesListAvailable) {\n const selectedIndex = videoSources.findIndex(_ref8 => {\n let {\n publicId\n } = _ref8;\n return publicId === source.publicId();\n });\n this.sourceSwitcher.reInit({\n sources: videoSources,\n selectedIndex: selectedIndex === -1 ? 0 : selectedIndex,\n onSourceChange: _ref9 => {\n let {\n publicId,\n ...newSourceOptions\n } = _ref9;\n return this.source(publicId, {\n ...newSourceOptions,\n videoSources\n });\n }\n });\n }\n });\n if (Array.isArray(this.playerOptions.sourceOptions?.videoSources) && this.playerOptions.sourceOptions?.videoSources.length) {\n // eslint-disable-next-line no-unused-vars\n const {\n publicId,\n label,\n ...videoSourceData\n } = this.playerOptions.sourceOptions.videoSources[0];\n this.source(publicId, {\n ...videoSourceData,\n videoSources: this.playerOptions.sourceOptions.videoSources\n });\n }\n }\n reTryVideoStateUntilAvailable() {\n let maxNumberOfCalls = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.POSITIVE_INFINITY;\n let timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : RETRY_DEFAULT_TIMEOUT;\n if (typeof this.reTryVideoStateRetriesCount !== 'number') {\n this.reTryVideoStateRetriesCount = 0;\n }\n if (!(0,_utils_video_retry__WEBPACK_IMPORTED_MODULE_21__.isVideoInReadyState)(this.videojs.readyState())) {\n if (this.reTryVideoStateRetriesCount < maxNumberOfCalls) {\n this.reTryVideoStateRetriesCount++;\n this.reTryVideoStateTimeoutId = this.videojs.setTimeout(() => this.reTryVideoStateUntilAvailable(maxNumberOfCalls, timeout), timeout);\n } else {\n let e = new Error('Video is not ready please try later');\n this.videojs.trigger('error', e);\n }\n } else {\n this.reTryVideoStateRetriesCount = 0;\n }\n }\n _resetReloadVideo = () => {\n this.reloadVideoRetriesCount = 0;\n this.videojs.clearTimeout(this.reloadVideoTimeoutId);\n };\n reloadVideoUntilAvailable() {\n let maxNumberOfCalls = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.POSITIVE_INFINITY;\n let timeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : RETRY_DEFAULT_TIMEOUT;\n if (typeof this.reloadVideoRetriesCount !== 'number') {\n this.reloadVideoRetriesCount = 0;\n }\n if (this.reloadVideoRetriesCount < maxNumberOfCalls) {\n this.reloadVideoRetriesCount++;\n this.reloadVideoTimeoutId = this.videojs.setTimeout(() => {\n const videoUrl = this.currentSourceUrl();\n (0,_utils_video_retry__WEBPACK_IMPORTED_MODULE_21__.checkIfVideoIsAvailable)(videoUrl, this.isLiveStream ? 'live' : 'default').then(() => this.source(videoUrl)).catch(() => this.reloadVideoUntilAvailable(maxNumberOfCalls, timeout));\n }, timeout);\n } else {\n this.videojs.trigger('error', new Error('Sorry, we could not load your video'));\n }\n }\n _initAutoplay() {\n const autoplayMode = this.playerOptions.autoplayMode;\n if (autoplayMode === 'on-scroll') {\n this.videojs.autoplayOnScroll();\n }\n }\n _initContextMenu() {\n if (!this.playerOptions.hideContextMenu) {\n this.videojs.contextMenu(_config_defaults__WEBPACK_IMPORTED_MODULE_11__[\"default\"].contextMenu);\n }\n }\n _initFloatingPlayer() {\n if (this.playerOptions.floatingWhenNotVisible !== _video_player_const__WEBPACK_IMPORTED_MODULE_16__.FLOATING_TO.NONE) {\n this.videojs.floatingPlayer({\n floatTo: this.playerOptions.floatingWhenNotVisible\n });\n }\n }\n _setCssClasses() {\n this.videojs.addClass(_utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].CLASS_PREFIX);\n this.videojs.addClass(_utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].playerClassPrefix(this.videojs));\n _utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].setSkinClassPrefix(this.videojs, _utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].skinClassPrefix(this.videojs));\n }\n _onReady() {\n this._setExtendedEvents();\n\n // Load first video (mainly to support video tag 'source' and 'public-id' attributes)\n // Source parameters are set to playerOptions.sourceOptions\n const source = this.playerOptions.sourceOptions.source || this.playerOptions.sourceOptions.publicId;\n if (source) {\n const sourceOptions = Object.assign({}, this.playerOptions.sourceOptions);\n this.source(source, sourceOptions);\n }\n }\n\n /**\n * Temporary fix: remove aria-live from VolumeBar to avoid NVDA repeated announcements.\n * TODO: Remove when Video.js includes the upstream fix (nvaccess/nvda#7996).\n */\n _applyVolumeBarAriaLiveFix() {\n const volumeBar = this.videojs.$('.vjs-volume-bar');\n if (volumeBar) {\n volumeBar.removeAttribute('aria-live');\n }\n }\n _onSourceChange(e, _ref0) {\n let {\n source,\n sourceOptions\n } = _ref0;\n this._sendInternalAnalytics({\n ...(sourceOptions && {\n sourceOptions\n })\n });\n this.isLiveStream = source?.resourceConfig()?.type === 'live';\n }\n _setExtendedEvents() {\n const events = [];\n\n // Add user-configured events; ExtendedEvents will merge with defaults\n if (this.playerOptions.playedEventPercents) {\n events.push({\n type: _utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.PERCENTS_PLAYED,\n percents: this.playerOptions.playedEventPercents\n });\n }\n if (this.playerOptions.playedEventTimes) {\n events.push({\n type: _utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.TIME_PLAYED,\n times: this.playerOptions.playedEventTimes\n });\n }\n const extendedEvents = new _extended_events__WEBPACK_IMPORTED_MODULE_13__[\"default\"](this.videojs, {\n events\n });\n\n // Forward all extended events to the main player for developer access\n Object.keys(extendedEvents.events).forEach(_event => {\n extendedEvents.on(_event, (event, data) => {\n this.videojs.trigger({\n type: _event,\n eventData: data\n });\n });\n });\n }\n cloudinaryConfig(config) {\n return this.videojs.cloudinary.cloudinaryConfig(config);\n }\n currentPublicId() {\n return this.videojs.cloudinary.currentPublicId();\n }\n currentSourceUrl() {\n return this.videojs.currentSource().src;\n }\n currentPoster() {\n return this.videojs.cloudinary.currentPoster();\n }\n source(publicId) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n ({\n publicId,\n options\n } = (0,_plugins_cloudinary_common__WEBPACK_IMPORTED_MODULE_20__.normalizeOptions)(publicId, options));\n if (!this._isPlayerConfigValid) {\n return;\n }\n if (this.playerOptions.debug) {\n options.debug = true;\n (0,_validators_validators_functions__WEBPACK_IMPORTED_MODULE_17__.isValidSourceConfig)(options).then(valid => {\n if (!valid) {\n this.videojs.error('invalid source configuration');\n }\n });\n }\n if (publicId instanceof _plugins_cloudinary_models_video_source_video_source__WEBPACK_IMPORTED_MODULE_14__[\"default\"]) {\n return this.videojs.cloudinary.source(publicId, options);\n }\n\n // Inherit source parameters from player options (source options take precedence)\n const inherited = this.playerOptions.sourceOptions || {};\n options = {\n ...inherited,\n ...options\n };\n if (options.shoppable && this.videojs.shoppable) {\n this.videojs.shoppable(this.videojs, options);\n }\n this._resetReloadVideo();\n this._resetReTryVideoState();\n const maxTries = this.videojs.options_.maxTries || 3;\n const videoReadyTimeout = this.videojs.options_.videoTimeout || 55000;\n this.reTryVideoStateUntilAvailable(maxTries, videoReadyTimeout);\n return this.videojs.cloudinary.source(publicId, options);\n }\n posterOptions(options) {\n return this.videojs.cloudinary.posterOptions(options);\n }\n skin(name) {\n if (name !== undefined && lodash_isString__WEBPACK_IMPORTED_MODULE_7___default()(name)) {\n _utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].setSkinClassPrefix(this.videojs, name);\n }\n return _utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"].skinClassPrefix(this.videojs);\n }\n playlist(sources) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.playerOptions.playlistWidget = {\n ...(this.playerOptions.playlistWidget || {\n show: false\n }),\n playlist: true\n };\n options = Object.assign({}, options, {\n playlistWidget: this.playerOptions.playlistWidget\n });\n this.videojs.one(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.READY, async () => {\n const playlistPlugin = await this.videojs.playlist(options);\n playlistPlugin(sources, options);\n });\n return this.videojs.cloudinary.playlist ? this.videojs.cloudinary.playlist(sources, options) : this;\n }\n playlistByTag(tag) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.playerOptions.playlistWidget = {\n ...(this.playerOptions.playlistWidget || {\n show: false\n }),\n playlistByTag: true\n };\n options = Object.assign({}, options, {\n playlistWidget: this.playerOptions.playlistWidget\n });\n return new Promise(resolve => {\n this.videojs.one(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.READY, async () => {\n const playlistPlugin = await this.videojs.playlist(options);\n playlistPlugin(await this.sourcesByTag(tag, options), options);\n resolve(this);\n });\n });\n }\n sourcesByTag(tag) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return this.videojs.cloudinary.sourcesByTag(tag, options);\n }\n fluid(bool) {\n if (bool === undefined) {\n return this.videojs.fluid();\n }\n if (bool) {\n this.videojs.addClass(_video_player_const__WEBPACK_IMPORTED_MODULE_16__.FLUID_CLASS_NAME);\n } else {\n this.videojs.removeClass(_video_player_const__WEBPACK_IMPORTED_MODULE_16__.FLUID_CLASS_NAME);\n }\n this.videojs.fluid(bool);\n this.videojs.trigger(_utils_consts__WEBPACK_IMPORTED_MODULE_18__.PLAYER_EVENT.FLUID, bool);\n return this;\n }\n play() {\n this.playWasCalled = true;\n this.videojs.play();\n return this;\n }\n stop() {\n this.pause();\n this.currentTime(0);\n return this;\n }\n playPrevious() {\n this.playlist().playPrevious();\n return this;\n }\n playNext() {\n this.playlist().playNext();\n return this;\n }\n transformation(trans) {\n return this.videojs.cloudinary.transformation(trans);\n }\n sourceTypes(types) {\n return this.videojs.cloudinary.sourceTypes(types);\n }\n sourceTransformation(trans) {\n return this.videojs.cloudinary.sourceTransformation(trans);\n }\n autoShowRecommendations(autoShow) {\n return this.videojs.cloudinary.autoShowRecommendations(autoShow);\n }\n duration() {\n return this.videojs.duration();\n }\n height(dimension) {\n if (!dimension) {\n return this.videojs.height();\n }\n this.videojs.height(dimension);\n return this;\n }\n width(dimension) {\n if (!dimension) {\n return this.videojs.width();\n }\n this.videojs.width(dimension);\n return this;\n }\n volume(volume) {\n if (!volume) {\n return this.videojs.volume();\n }\n this.videojs.volume(volume);\n return this;\n }\n mute() {\n if (!this.isMuted()) {\n this.videojs.muted(true);\n }\n return this;\n }\n unmute() {\n if (this.isMuted()) {\n this.videojs.muted(false);\n }\n return this;\n }\n isMuted() {\n return this.videojs.muted();\n }\n pause() {\n this.videojs.pause();\n return this;\n }\n currentTime(offsetSeconds) {\n if (!offsetSeconds && offsetSeconds !== 0) {\n return this.videojs.currentTime();\n }\n this.videojs.currentTime(offsetSeconds);\n return this;\n }\n maximize() {\n if (!this.isMaximized()) {\n this.videojs.requestFullscreen();\n }\n return this;\n }\n exitMaximize() {\n if (this.isMaximized()) {\n this.videojs.exitFullscreen();\n }\n return this;\n }\n isMaximized() {\n return this.videojs.isFullscreen();\n }\n dispose() {\n this.videojs.dispose();\n }\n controls(bool) {\n if (bool === undefined) {\n return this.videojs.controls();\n }\n this.videojs.controls(bool);\n return this;\n }\n ima() {\n return {\n playAd: this.videojs.ima.playAd\n };\n }\n loop(bool) {\n if (bool === undefined) {\n return this.videojs.loop();\n }\n this.videojs.loop(bool);\n return this;\n }\n el() {\n return this.videojs.el();\n }\n}\nconst mergeDefaults = options => video_js__WEBPACK_IMPORTED_MODULE_0___default().obj.merge({}, _config_defaults__WEBPACK_IMPORTED_MODULE_11__[\"default\"], options);\nconst getConfig = function (elem) {\n let playerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n const videoElement = (0,_video_player_utils__WEBPACK_IMPORTED_MODULE_15__.getResolveVideoElement)(elem);\n const options = (0,_video_player_utils__WEBPACK_IMPORTED_MODULE_15__.extractOptions)(videoElement, playerOptions);\n return {\n videoElement,\n options\n };\n};\nconst createVideoPlayer = function (elem) {\n let playerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let ready = arguments.length > 2 ? arguments[2] : undefined;\n const {\n videoElement,\n options\n } = getConfig(elem, playerOptions);\n if (options.profile) {\n console.warn('Profile option requires async initialization. Use cloudinary.player() instead of cloudinary.videoPlayer()');\n }\n return new VideoPlayer(videoElement, mergeDefaults(options), ready);\n};\n\n/**\n * Create player with pre-merged config (skips fetch).\n * Used by player() when config was already fetched for schedule check.\n */\nconst createPlayerWithConfig = (elem, mergedOptions, ready) => {\n const {\n videoElement,\n options\n } = getConfig(elem, mergedOptions);\n return new VideoPlayer(videoElement, mergeDefaults(options), ready);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (VideoPlayer);\n\n//# sourceURL=webpack:///./video-player.js?\n}");
892
903
 
893
904
  /***/ },
894
905
 
@@ -2555,16 +2566,6 @@ eval("{var basePick = __webpack_require__(/*! ./_basePick */ \"../node_modules/l
2555
2566
 
2556
2567
  /***/ },
2557
2568
 
2558
- /***/ "../node_modules/lodash/snakeCase.js"
2559
- /*!*******************************************!*\
2560
- !*** ../node_modules/lodash/snakeCase.js ***!
2561
- \*******************************************/
2562
- (module, __unused_webpack_exports, __webpack_require__) {
2563
-
2564
- eval("{var createCompounder = __webpack_require__(/*! ./_createCompounder */ \"../node_modules/lodash/_createCompounder.js\");\n\n/**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\nvar snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n});\n\nmodule.exports = snakeCase;\n\n\n//# sourceURL=webpack:///../node_modules/lodash/snakeCase.js?\n}");
2565
-
2566
- /***/ },
2567
-
2568
2569
  /***/ "../node_modules/lodash/stubArray.js"
2569
2570
  /*!*******************************************!*\
2570
2571
  !*** ../node_modules/lodash/stubArray.js ***!
@@ -3435,7 +3436,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
3435
3436
  /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
3436
3437
  /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
3437
3438
  /******/ var installedChunks = {
3438
- /******/ "cld-video-player": 0,
3439
+ /******/ "player-full": 0,
3439
3440
  /******/ "styles": 0
3440
3441
  /******/ };
3441
3442
  /******/
@@ -3523,7 +3524,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
3523
3524
  /******/ // startup
3524
3525
  /******/ // Load entry module and return exports
3525
3526
  /******/ // This entry module depends on other loaded chunks and execution need to be delayed
3526
- /******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["styles"], () => (__webpack_require__("./index.umd.js")))
3527
+ /******/ var __webpack_exports__ = __webpack_require__.O(undefined, ["styles"], () => (__webpack_require__("./index.full.js")))
3527
3528
  /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
3528
3529
  /******/
3529
3530
  /******/ return __webpack_exports__;