cloudinary-video-player 3.13.1 → 3.13.2-edge.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/134.min.js +4 -4
  2. package/dist/309.min.js +3 -3
  3. package/dist/350.min.js +6 -0
  4. package/dist/689.min.js +6 -0
  5. package/dist/adaptive-streaming.js +2 -2
  6. package/dist/adaptive-streaming.min.js +2 -2
  7. package/dist/chapters.js +2 -2
  8. package/dist/chapters.min.js +2 -2
  9. package/dist/cld-player-core.js +2 -2
  10. package/dist/cld-player-core.min.js +2 -2
  11. package/dist/cld-poster-url.js +57 -0
  12. package/dist/cld-poster-url.min.js +6 -0
  13. package/dist/cld-video-player-lazy.js +10 -66
  14. package/dist/cld-video-player-lazy.min.js +3 -3
  15. package/dist/cld-video-player.css +6 -2
  16. package/dist/cld-video-player.js +33 -43
  17. package/dist/cld-video-player.light.js +33 -43
  18. package/dist/cld-video-player.light.min.js +4 -4
  19. package/dist/cld-video-player.min.css +3 -3
  20. package/dist/cld-video-player.min.js +4 -4
  21. package/dist/colors.js +2 -2
  22. package/dist/colors.min.js +2 -2
  23. package/dist/dash.js +2 -2
  24. package/dist/dash.min.js +2 -2
  25. package/dist/debug.js +3 -3
  26. package/dist/debug.min.js +3 -3
  27. package/dist/ima.js +2 -2
  28. package/dist/ima.min.js +2 -2
  29. package/dist/interaction-areas.js +2 -2
  30. package/dist/interaction-areas.min.js +2 -2
  31. package/dist/node_modules_lodash_throttle_js.js +2 -2
  32. package/dist/playlist.js +2 -2
  33. package/dist/playlist.min.js +2 -2
  34. package/dist/{plugins_cloudinary_url-helpers_js-utils_object_js-utils_querystring_js-utils_utf8Base64_js-vi-555007.js → plugins_cloudinary_url-helpers_js-utils_cloudinary-config-from-options_js-utils_querystring_j-adfe37.js} +48 -4
  35. package/dist/recommendations-overlay.js +2 -2
  36. package/dist/recommendations-overlay.min.js +2 -2
  37. package/dist/schema.json +16 -0
  38. package/dist/share.js +2 -2
  39. package/dist/share.min.js +2 -2
  40. package/dist/shoppable.js +2 -2
  41. package/dist/shoppable.min.js +2 -2
  42. package/dist/utils_fetch-config_js.js +3 -3
  43. package/dist/utils_schedule_js.js +27 -0
  44. package/dist/video-player_js.js +9 -9
  45. package/dist/visual-search.js +2 -2
  46. package/dist/visual-search.min.js +2 -2
  47. package/lib/all.js +3 -2
  48. package/lib/chapters.js +2 -2
  49. package/lib/cld-video-player.min.css +3 -3
  50. package/lib/{object.js → cloudinary-config-from-options.js} +10 -2
  51. package/lib/cloudinary-url-prefix.js +91 -0
  52. package/lib/colors.js +2 -2
  53. package/lib/config/configSchema.json +16 -0
  54. package/lib/debug.js +1 -0
  55. package/lib/fetch-config.js +4 -11
  56. package/lib/index.js +3 -2
  57. package/lib/interaction-areas.service.js +2 -2
  58. package/lib/lazy.js +0 -1
  59. package/lib/player-api.js +171 -413
  60. package/lib/player.js +2 -1
  61. package/lib/playlist.js +2 -2
  62. package/lib/poster-url.js +46 -0
  63. package/lib/recommendations-overlay.js +2 -2
  64. package/lib/schedule.js +153 -0
  65. package/lib/share.js +2 -2
  66. package/lib/shoppable-widget.js +2 -2
  67. package/lib/toNumber.js +1 -1
  68. package/lib/video-player.const.js +1 -1
  69. package/lib/video-player.js +17 -9
  70. package/lib/videoPlayer.js +2 -1
  71. package/package.json +1 -1
  72. package/types/cld-video-player.d.ts +6 -0
  73. package/dist/19.min.js +0 -6
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * Cloudinary Video Player v3.13.1
3
- * Built on 2026-04-02T13:46:44.754Z
2
+ * Cloudinary Video Player v3.13.2-edge.0
3
+ * Built on 2026-04-07T06:05:12.546Z
4
4
  * https://github.com/cloudinary/cloudinary-video-player
5
5
  */
6
6
  /*
@@ -140,7 +140,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
140
140
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
141
141
 
142
142
  "use strict";
143
- 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.13.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}");
143
+ 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.13.2-edge.0\"\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}");
144
144
 
145
145
  /***/ },
146
146
 
@@ -228,7 +228,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
228
228
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
229
229
 
230
230
  "use strict";
231
- 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.13.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}");
231
+ 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.13.2-edge.0\"\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}");
232
232
 
233
233
  /***/ },
234
234
 
@@ -261,7 +261,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
261
261
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
262
262
 
263
263
  "use strict";
264
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CONSTRUCTOR_PARAMS: () => (/* binding */ CONSTRUCTOR_PARAMS),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getEffectiveDpr: () => (/* binding */ getEffectiveDpr)\n/* harmony export */ });\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/isFunction */ \"../node_modules/lodash/isFunction.js\");\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_isFunction__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/isEmpty */ \"../node_modules/lodash/isEmpty.js\");\n/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils_apply_with_props__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ~/utils/apply-with-props */ \"./utils/apply-with-props.js\");\n/* harmony import */ var _utils_slicing__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ~/utils/slicing */ \"./utils/slicing.js\");\n/* harmony import */ var _utils_cloudinary__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ~/utils/cloudinary */ \"./utils/cloudinary.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./common */ \"./plugins/cloudinary/common.js\");\n/* harmony import */ var _video_player_const__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ~/video-player.const */ \"./video-player.const.js\");\n/* harmony import */ var _models_video_source_video_source__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./models/video-source/video-source */ \"./plugins/cloudinary/models/video-source/video-source.js\");\n/* harmony import */ var _event_handler_registry__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./event-handler-registry */ \"./plugins/cloudinary/event-handler-registry.js\");\n/* harmony import */ var _models_audio_source_audio_source__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./models/audio-source/audio-source */ \"./plugins/cloudinary/models/audio-source/audio-source.js\");\n/* harmony import */ var _models_video_source_video_source_const__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./models/video-source/video-source.const */ \"./plugins/cloudinary/models/video-source/video-source.const.js\");\n/* harmony import */ var _components_recommendations_overlay__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ~/components/recommendations-overlay */ \"./components/recommendations-overlay/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nconst getEffectiveDpr = maxDpr => {\n const deviceDpr = typeof window !== 'undefined' && window.devicePixelRatio != null ? window.devicePixelRatio : _models_video_source_video_source_const__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_DPR;\n return Math.min(maxDpr ?? _models_video_source_video_source_const__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_DPR, deviceDpr, _models_video_source_video_source_const__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_DPR);\n};\nconst DEFAULT_PARAMS = {\n transformation: {},\n sourceTypes: [],\n sourceTransformation: [],\n posterOptions: {}\n};\nconst CONSTRUCTOR_PARAMS = ['cloudinaryConfig', 'transformation', 'sourceTypes', 'sourceTransformation', 'posterOptions', 'autoShowRecommendations'];\nconst normalizeAspectCrop = options => {\n const {\n aspectRatio,\n cropMode,\n cropPadColor,\n transformation,\n breakpointTransformation,\n ...rest\n } = options;\n if (!aspectRatio && !cropMode && !breakpointTransformation) return options;\n const tx = {};\n if (aspectRatio) tx.aspect_ratio = aspectRatio;\n if (cropMode) {\n if (cropMode === _video_player_const__WEBPACK_IMPORTED_MODULE_6__.CROP_MODE.SMART) {\n tx.crop = _video_player_const__WEBPACK_IMPORTED_MODULE_6__.CROP_MODE.FILL;\n tx.gravity = 'auto';\n } else {\n tx.crop = cropMode;\n if (cropMode === _video_player_const__WEBPACK_IMPORTED_MODULE_6__.CROP_MODE.PAD && cropPadColor) tx.background = cropPadColor;\n }\n }\n const mergedTx = {\n ...(breakpointTransformation || {}),\n ...tx\n };\n return {\n ...rest,\n transformation: Array.isArray(transformation) ? [...transformation, mergedTx] : (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeTransformations)(transformation || {}, mergedTx)\n };\n};\nclass CloudinaryContext {\n constructor(player) {\n var _this = this;\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n (0,_common__WEBPACK_IMPORTED_MODULE_5__.setupCloudinaryMiddleware)();\n this.player = player;\n options = Object.assign({}, DEFAULT_PARAMS, options);\n let _source = null;\n let _sources = null;\n let _lastSource = null;\n let _lastPlaylist = null;\n let _posterOptions = null;\n let _cloudinaryConfig = null;\n let _transformation = null;\n let _sourceTypes = null;\n let _sourceTransformation = null;\n let _chainTarget = options.chainTarget;\n let _playerEvents = null;\n let _recommendations = null;\n let _autoShowRecommendations = false;\n this.source = function (source) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n options = Object.assign({}, options);\n if (!source) {\n return _source;\n }\n let src = null;\n if (source instanceof _models_video_source_video_source__WEBPACK_IMPORTED_MODULE_7__[\"default\"]) {\n src = source;\n } else {\n let {\n publicId,\n options: _options\n } = (0,_common__WEBPACK_IMPORTED_MODULE_5__.normalizeOptions)(source, options);\n src = _this.buildSource(publicId, _options);\n }\n const recommendations = src.recommendations();\n if (recommendations && recommendations.length) {\n let itemBuilder = null;\n let disableAutoShow = false;\n if (options.recommendationOptions) {\n ({\n disableAutoShow,\n itemBuilder\n } = (0,_utils_slicing__WEBPACK_IMPORTED_MODULE_3__.sliceAndUnsetProperties)(options.recommendationOptions, 'disableAutoShow', 'itemBuilder'));\n }\n (0,_components_recommendations_overlay__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(player).then(() => {\n setRecommendations(recommendations, {\n disableAutoShow,\n itemBuilder\n });\n });\n } else {\n unsetRecommendations();\n }\n _source = src;\n _transformation = src.transformation();\n const isDash = options.sourceTypes && options.sourceTypes.some(s => s.includes('dash')) || typeof source === 'string' && source.endsWith('.mpd');\n const isHls = options.sourceTypes && options.sourceTypes.some(s => s.includes('hls')) || typeof source === 'string' && source.endsWith('.m3u8');\n const isAdaptiveStreamingRequired = isDash || isHls;\n if (isAdaptiveStreamingRequired && !_this.player.adaptiveStreamingLoaded) {\n __webpack_require__.e(/*! import() | adaptive-streaming */ \"adaptive-streaming\").then(__webpack_require__.bind(__webpack_require__, /*! ../adaptive-streaming */ \"./plugins/adaptive-streaming/index.js\")).then(() => {\n _this.player.adaptiveStreaming({\n ...options.adaptiveStreaming,\n isDash,\n debug: options.debug,\n withCredentials: options.withCredentials\n }).then(() => {\n refresh();\n });\n }).catch(err => {\n console.error('Failed to load adaptive streaming plugin:', err);\n refresh();\n });\n } else if (!options.skipRefresh) {\n refresh();\n }\n _this.player.trigger('cldsourcechanged', {\n source: src,\n sourceOptions: options\n });\n return _chainTarget;\n };\n this.buildSource = function (publicId) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let builtSrc = null;\n ({\n publicId,\n options\n } = (0,_common__WEBPACK_IMPORTED_MODULE_5__.normalizeOptions)(publicId, options));\n\n // Calculate breakpoint transformation.\n // This should happen before normalizeAspectCrop so they can be merged.\n if (options.breakpoints && _this.player) {\n const playerEl = _this.player.el();\n const playerWidth = playerEl?.clientWidth;\n const dpr = getEffectiveDpr(options.maxDpr);\n const requiredWidth = playerWidth * dpr;\n const width = _models_video_source_video_source_const__WEBPACK_IMPORTED_MODULE_10__.RENDITIONS.find(rendition => rendition >= requiredWidth) || _models_video_source_video_source_const__WEBPACK_IMPORTED_MODULE_10__.RENDITIONS[_models_video_source_video_source_const__WEBPACK_IMPORTED_MODULE_10__.RENDITIONS.length - 1];\n options.breakpointTransformation = {\n width,\n ...(!(0,_utils_cloudinary__WEBPACK_IMPORTED_MODULE_4__.isKeyInTransformation)(options.transformation, 'crop') && {\n crop: 'limit'\n })\n };\n }\n options = normalizeAspectCrop(options);\n options.cloudinaryConfig = (0,_common__WEBPACK_IMPORTED_MODULE_5__.extendCloudinaryConfig)(_this.cloudinaryConfig(), options.cloudinaryConfig || {});\n options.transformation = (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeTransformations)(_this.transformation(), options.transformation || {});\n options.sourceTransformation = options.sourceTransformation || _this.sourceTransformation();\n options.sourceTypes = options.sourceTypes || _this.sourceTypes();\n const posterOptions = posterOptionsForCurrent(options);\n\n // Inherit source transformation\n const srcTx = options.transformation;\n if (srcTx && !lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default()(srcTx)) {\n const imageSafeTx = (0,_common__WEBPACK_IMPORTED_MODULE_5__.omitVideoOnlyTransformations)(srcTx);\n const merged = (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeTransformations)(posterOptions.transformation || {}, imageSafeTx);\n // Remove height when aspect_ratio is set\n if (merged.aspect_ratio) {\n delete merged.height;\n }\n posterOptions.transformation = merged;\n }\n const hasUserPosterOptions = !lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default()(options.posterOptions);\n if (options.poster === undefined) {\n if ((0,_common__WEBPACK_IMPORTED_MODULE_5__.isRawUrl)(publicId)) {\n options.poster = false;\n } else if (!hasUserPosterOptions) {\n options.poster = true;\n } else {\n options.poster = posterOptions;\n }\n }\n options.posterOptions = Object.assign({}, posterOptions, {\n hasUserPosterOptions: hasUserPosterOptions || null\n });\n options.queryParams = Object.assign(options.queryParams || {}, options.allowUsageReport ? {\n _s: `vp-${\"3.13.1\"}`\n } : {});\n if (options.sourceTypes.indexOf('audio') > -1) {\n builtSrc = new _models_audio_source_audio_source__WEBPACK_IMPORTED_MODULE_9__[\"default\"](publicId, options);\n } else {\n builtSrc = new _models_video_source_video_source__WEBPACK_IMPORTED_MODULE_7__[\"default\"](publicId, options);\n }\n return builtSrc;\n };\n this.posterOptions = options => {\n if (!options) {\n return _posterOptions;\n }\n _posterOptions = options;\n return _chainTarget;\n };\n this.disablePoster = posterColor => {\n // https://docs.videojs.com/player.js.html#line3816\n this.player.poster(' ');\n this.player.posterImage.el().style.backgroundColor = posterColor;\n };\n this.cloudinaryConfig = config => {\n if (!config) {\n return _cloudinaryConfig;\n }\n _cloudinaryConfig = config;\n return _chainTarget;\n };\n this.transformation = trans => {\n if (!trans) {\n return _transformation;\n }\n _transformation = trans;\n return _chainTarget;\n };\n this.sourceTypes = types => {\n if (!types) {\n return _sourceTypes;\n }\n _sourceTypes = types;\n return _chainTarget;\n };\n this.getCurrentSources = () => _sources;\n this.sourceTransformation = trans => {\n if (!trans) {\n return _sourceTransformation;\n }\n _sourceTransformation = trans;\n return _chainTarget;\n };\n this.on = function () {\n return _playerEvents.on(...arguments);\n };\n this.one = function () {\n return _playerEvents.one(...arguments);\n };\n this.off = function () {\n return _playerEvents.off(...arguments);\n };\n this.autoShowRecommendations = autoShow => {\n if (autoShow === undefined) {\n return _autoShowRecommendations;\n }\n _autoShowRecommendations = autoShow;\n return _chainTarget;\n };\n this.dispose = () => {\n if (this.playlist && this.playlist()) {\n this.disposePlaylist();\n }\n unsetRecommendations();\n _source = undefined;\n _playerEvents.removeAllListeners();\n };\n const setRecommendations = (recommendations, _ref) => {\n let {\n disableAutoShow = false,\n itemBuilder = null\n } = _ref;\n unsetRecommendations();\n if (!Array.isArray(recommendations) && typeof recommendations !== 'function' && !recommendations.then) {\n throw new Error('\"recommendations\" must be either an array or a function');\n }\n _recommendations = {};\n itemBuilder = itemBuilder || (source => ({\n source: source instanceof _models_video_source_video_source__WEBPACK_IMPORTED_MODULE_7__[\"default\"] ? source : this.buildSource(source),\n action: () => this.source(source)\n }));\n _recommendations.sourceChangedHandler = () => {\n const trigger = sources => {\n if (typeof sources !== 'undefined' && sources.length > 0) {\n const items = sources.map(_source => itemBuilder(_source));\n this.player.trigger('recommendationschanged', {\n items\n });\n } else {\n this.player.trigger('recommendationsnoshow');\n }\n _recommendations.sources = sources;\n };\n if (lodash_isFunction__WEBPACK_IMPORTED_MODULE_0___default()(recommendations)) {\n trigger(recommendations());\n } else if (recommendations.then) {\n recommendations.then(trigger);\n } else {\n trigger(recommendations);\n }\n };\n _recommendations.sourceChangedHandler();\n _recommendations.endedHandler = () => {\n if (!disableAutoShow && this.autoShowRecommendations()) {\n this.player.trigger('recommendationsshow');\n }\n };\n this.on('ended', _recommendations.endedHandler);\n };\n const unsetRecommendations = () => {\n if (_recommendations) {\n this.off('cldsourcechanged', _recommendations.sourceChangedHandler);\n this.off('ended', _recommendations.endedHandler);\n delete _recommendations.endedHandler;\n delete _recommendations.sourceChangedHandler;\n }\n _recommendations = null;\n };\n const refresh = () => {\n const src = this.source();\n if (!src) {\n return;\n }\n const posterOptions = Object.assign({}, this.player.cloudinary.posterOptions(), src.getInitOptions().poster);\n if (posterOptions.posterColor) {\n this.disablePoster(posterOptions.posterColor);\n } else if (src.poster()) {\n this.player.poster(src.poster().url());\n }\n _sources = src.generateSources().reduce((srcs, src) => {\n if (src.isAdaptive) {\n let codec = src.type.split('; ')[1] || null;\n if (codec && 'MediaSource' in window) {\n const parts = src.type.split('; ');\n let typeStr = `video/mp4; ${parts[1] || ''}`;\n const canPlay = testCanPlayTypeAndTypeSupported(typeStr);\n if (canPlay) {\n srcs.push(src);\n }\n } else {\n srcs.push(src);\n }\n } else {\n srcs.push(src);\n }\n return srcs;\n }, []);\n this.player.src(_sources);\n _lastSource = src;\n if (this.playlist) {\n _lastPlaylist = this.playlist();\n }\n };\n const testCanPlayTypeAndTypeSupported = codec => {\n const v = document.createElement('video');\n return v.canPlayType(codec) || 'MediaSource' in window && MediaSource.isTypeSupported(codec);\n };\n const posterOptionsForCurrent = sourceOpts => {\n const posterOpts = Object.assign({}, this.posterOptions());\n posterOpts.transformation = posterOpts.transformation || {};\n if ((posterOpts.transformation.width || posterOpts.transformation.height) && !posterOpts.transformation.crop) {\n posterOpts.transformation.crop = 'scale';\n }\n\n // Skip when source already has width (e.g. breakpoints).\n const sourceHasSizing = (0,_utils_cloudinary__WEBPACK_IMPORTED_MODULE_4__.isKeyInTransformation)(sourceOpts.transformation, 'width');\n const playerEl = this.player.el();\n if (!sourceHasSizing && playerEl?.clientWidth) {\n const roundUp100 = val => 100 * Math.ceil(val / 100);\n const dpr = getEffectiveDpr(sourceOpts.maxDpr);\n posterOpts.transformation = (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeTransformations)(posterOpts.transformation, {\n width: roundUp100(playerEl.clientWidth * dpr),\n ...(!(0,_utils_cloudinary__WEBPACK_IMPORTED_MODULE_4__.isKeyInTransformation)(posterOpts.transformation, 'crop') && {\n crop: 'limit'\n })\n });\n }\n return posterOpts;\n };\n\n // Handle external (non-cloudinary plugin) source changes (e.g. by ad plugins)\n const syncState = (_, data) => {\n let src = data.to;\n\n // When source is cloudinary's\n if (_lastSource && _lastSource.contains(src)) {\n // If plugin state doesn't have an active VideoSource\n if (!this.source()) {\n // We might have been running a playlist, reset playlist's state.\n if (this.playlist && _lastPlaylist) {\n this.playlist(_lastPlaylist);\n }\n // Rebuild last source state without calling vjs's 'src' and 'poster'\n this.source(_lastSource, {\n skipRefresh: true\n });\n }\n } else {\n // Used by cloudinary-only components\n this.player.trigger('cldsourcechanged', {});\n\n // When source isn't cloudinary's - reset the plugin's state.\n this.dispose();\n }\n };\n _playerEvents = new _event_handler_registry__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this.player);\n const constructorParams = (0,_utils_slicing__WEBPACK_IMPORTED_MODULE_3__.sliceAndUnsetProperties)(options, ...CONSTRUCTOR_PARAMS);\n (0,_utils_apply_with_props__WEBPACK_IMPORTED_MODULE_2__.applyWithProps)(this, constructorParams);\n this.on('sourcechanged', syncState);\n }\n currentSourceType() {\n return this.source().getType();\n }\n currentPublicId() {\n return this.source() && this.source().publicId();\n }\n currentPoster() {\n return this.source() && this.source().poster();\n }\n}\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n options.chainTarget = options.chainTarget || this;\n this.cloudinary = new CloudinaryContext(this, options);\n}\n\n//# sourceURL=webpack:///./plugins/cloudinary/index.js?\n}");
264
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CONSTRUCTOR_PARAMS: () => (/* binding */ CONSTRUCTOR_PARAMS),\n/* harmony export */ \"default\": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getEffectiveDpr: () => (/* binding */ getEffectiveDpr)\n/* harmony export */ });\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash/isFunction */ \"../node_modules/lodash/isFunction.js\");\n/* harmony import */ var lodash_isFunction__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lodash_isFunction__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/isEmpty */ \"../node_modules/lodash/isEmpty.js\");\n/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils_apply_with_props__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ~/utils/apply-with-props */ \"./utils/apply-with-props.js\");\n/* harmony import */ var _utils_slicing__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ~/utils/slicing */ \"./utils/slicing.js\");\n/* harmony import */ var _utils_cloudinary__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ~/utils/cloudinary */ \"./utils/cloudinary.js\");\n/* harmony import */ var _common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./common */ \"./plugins/cloudinary/common.js\");\n/* harmony import */ var _video_player_const__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ~/video-player.const */ \"./video-player.const.js\");\n/* harmony import */ var _models_video_source_video_source__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./models/video-source/video-source */ \"./plugins/cloudinary/models/video-source/video-source.js\");\n/* harmony import */ var _event_handler_registry__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./event-handler-registry */ \"./plugins/cloudinary/event-handler-registry.js\");\n/* harmony import */ var _models_audio_source_audio_source__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./models/audio-source/audio-source */ \"./plugins/cloudinary/models/audio-source/audio-source.js\");\n/* harmony import */ var _models_video_source_video_source_const__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./models/video-source/video-source.const */ \"./plugins/cloudinary/models/video-source/video-source.const.js\");\n/* harmony import */ var _components_recommendations_overlay__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ~/components/recommendations-overlay */ \"./components/recommendations-overlay/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nconst getEffectiveDpr = maxDpr => {\n const deviceDpr = typeof window !== 'undefined' && window.devicePixelRatio != null ? window.devicePixelRatio : _models_video_source_video_source_const__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_DPR;\n return Math.min(maxDpr ?? _models_video_source_video_source_const__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_DPR, deviceDpr, _models_video_source_video_source_const__WEBPACK_IMPORTED_MODULE_10__.DEFAULT_DPR);\n};\nconst DEFAULT_PARAMS = {\n transformation: {},\n sourceTypes: [],\n sourceTransformation: [],\n posterOptions: {}\n};\nconst CONSTRUCTOR_PARAMS = ['cloudinaryConfig', 'transformation', 'sourceTypes', 'sourceTransformation', 'posterOptions', 'autoShowRecommendations'];\nconst normalizeAspectCrop = options => {\n const {\n aspectRatio,\n cropMode,\n cropPadColor,\n transformation,\n breakpointTransformation,\n ...rest\n } = options;\n if (!aspectRatio && !cropMode && !breakpointTransformation) return options;\n const tx = {};\n if (aspectRatio) tx.aspect_ratio = aspectRatio;\n if (cropMode) {\n if (cropMode === _video_player_const__WEBPACK_IMPORTED_MODULE_6__.CROP_MODE.SMART) {\n tx.crop = _video_player_const__WEBPACK_IMPORTED_MODULE_6__.CROP_MODE.FILL;\n tx.gravity = 'auto';\n } else {\n tx.crop = cropMode;\n if (cropMode === _video_player_const__WEBPACK_IMPORTED_MODULE_6__.CROP_MODE.PAD && cropPadColor) tx.background = cropPadColor;\n }\n }\n const mergedTx = {\n ...(breakpointTransformation || {}),\n ...tx\n };\n return {\n ...rest,\n transformation: Array.isArray(transformation) ? [...transformation, mergedTx] : (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeTransformations)(transformation || {}, mergedTx)\n };\n};\nclass CloudinaryContext {\n constructor(player) {\n var _this = this;\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n (0,_common__WEBPACK_IMPORTED_MODULE_5__.setupCloudinaryMiddleware)();\n this.player = player;\n options = Object.assign({}, DEFAULT_PARAMS, options);\n let _source = null;\n let _sources = null;\n let _lastSource = null;\n let _lastPlaylist = null;\n let _posterOptions = null;\n let _cloudinaryConfig = null;\n let _transformation = null;\n let _sourceTypes = null;\n let _sourceTransformation = null;\n let _chainTarget = options.chainTarget;\n let _playerEvents = null;\n let _recommendations = null;\n let _autoShowRecommendations = false;\n this.source = function (source) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n options = Object.assign({}, options);\n if (!source) {\n return _source;\n }\n let src = null;\n if (source instanceof _models_video_source_video_source__WEBPACK_IMPORTED_MODULE_7__[\"default\"]) {\n src = source;\n } else {\n let {\n publicId,\n options: _options\n } = (0,_common__WEBPACK_IMPORTED_MODULE_5__.normalizeOptions)(source, options);\n src = _this.buildSource(publicId, _options);\n }\n const recommendations = src.recommendations();\n if (recommendations && recommendations.length) {\n let itemBuilder = null;\n let disableAutoShow = false;\n if (options.recommendationOptions) {\n ({\n disableAutoShow,\n itemBuilder\n } = (0,_utils_slicing__WEBPACK_IMPORTED_MODULE_3__.sliceAndUnsetProperties)(options.recommendationOptions, 'disableAutoShow', 'itemBuilder'));\n }\n (0,_components_recommendations_overlay__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(player).then(() => {\n setRecommendations(recommendations, {\n disableAutoShow,\n itemBuilder\n });\n });\n } else {\n unsetRecommendations();\n }\n _source = src;\n _transformation = src.transformation();\n const isDash = options.sourceTypes && options.sourceTypes.some(s => s.includes('dash')) || typeof source === 'string' && source.endsWith('.mpd');\n const isHls = options.sourceTypes && options.sourceTypes.some(s => s.includes('hls')) || typeof source === 'string' && source.endsWith('.m3u8');\n const isAdaptiveStreamingRequired = isDash || isHls;\n if (isAdaptiveStreamingRequired && !_this.player.adaptiveStreamingLoaded) {\n __webpack_require__.e(/*! import() | adaptive-streaming */ \"adaptive-streaming\").then(__webpack_require__.bind(__webpack_require__, /*! ../adaptive-streaming */ \"./plugins/adaptive-streaming/index.js\")).then(() => {\n _this.player.adaptiveStreaming({\n ...options.adaptiveStreaming,\n isDash,\n debug: options.debug,\n withCredentials: options.withCredentials\n }).then(() => {\n refresh();\n });\n }).catch(err => {\n console.error('Failed to load adaptive streaming plugin:', err);\n refresh();\n });\n } else if (!options.skipRefresh) {\n refresh();\n }\n _this.player.trigger('cldsourcechanged', {\n source: src,\n sourceOptions: options\n });\n return _chainTarget;\n };\n this.buildSource = function (publicId) {\n let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let builtSrc = null;\n ({\n publicId,\n options\n } = (0,_common__WEBPACK_IMPORTED_MODULE_5__.normalizeOptions)(publicId, options));\n\n // Calculate breakpoint transformation.\n // This should happen before normalizeAspectCrop so they can be merged.\n if (options.breakpoints && _this.player) {\n const playerEl = _this.player.el();\n const playerWidth = playerEl?.clientWidth;\n const dpr = getEffectiveDpr(options.maxDpr);\n const requiredWidth = playerWidth * dpr;\n const width = _models_video_source_video_source_const__WEBPACK_IMPORTED_MODULE_10__.RENDITIONS.find(rendition => rendition >= requiredWidth) || _models_video_source_video_source_const__WEBPACK_IMPORTED_MODULE_10__.RENDITIONS[_models_video_source_video_source_const__WEBPACK_IMPORTED_MODULE_10__.RENDITIONS.length - 1];\n options.breakpointTransformation = {\n width,\n ...(!(0,_utils_cloudinary__WEBPACK_IMPORTED_MODULE_4__.isKeyInTransformation)(options.transformation, 'crop') && {\n crop: 'limit'\n })\n };\n }\n options = normalizeAspectCrop(options);\n options.cloudinaryConfig = (0,_common__WEBPACK_IMPORTED_MODULE_5__.extendCloudinaryConfig)(_this.cloudinaryConfig(), options.cloudinaryConfig || {});\n options.transformation = (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeTransformations)(_this.transformation(), options.transformation || {});\n options.sourceTransformation = options.sourceTransformation || _this.sourceTransformation();\n options.sourceTypes = options.sourceTypes || _this.sourceTypes();\n const posterOptions = posterOptionsForCurrent(options);\n\n // Inherit source transformation\n const srcTx = options.transformation;\n if (srcTx && !lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default()(srcTx)) {\n const imageSafeTx = (0,_common__WEBPACK_IMPORTED_MODULE_5__.omitVideoOnlyTransformations)(srcTx);\n const merged = (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeTransformations)(posterOptions.transformation || {}, imageSafeTx);\n // Remove height when aspect_ratio is set\n if (merged.aspect_ratio) {\n delete merged.height;\n }\n posterOptions.transformation = merged;\n }\n const hasUserPosterOptions = !lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default()(options.posterOptions);\n if (options.poster === undefined) {\n if ((0,_common__WEBPACK_IMPORTED_MODULE_5__.isRawUrl)(publicId)) {\n options.poster = false;\n } else if (!hasUserPosterOptions) {\n options.poster = true;\n } else {\n options.poster = posterOptions;\n }\n }\n options.posterOptions = Object.assign({}, posterOptions, {\n hasUserPosterOptions: hasUserPosterOptions || null\n });\n options.queryParams = Object.assign(options.queryParams || {}, options.allowUsageReport ? {\n _s: `vp-${\"3.13.2-edge.0\"}`\n } : {});\n if (options.sourceTypes.indexOf('audio') > -1) {\n builtSrc = new _models_audio_source_audio_source__WEBPACK_IMPORTED_MODULE_9__[\"default\"](publicId, options);\n } else {\n builtSrc = new _models_video_source_video_source__WEBPACK_IMPORTED_MODULE_7__[\"default\"](publicId, options);\n }\n return builtSrc;\n };\n this.posterOptions = options => {\n if (!options) {\n return _posterOptions;\n }\n _posterOptions = options;\n return _chainTarget;\n };\n this.disablePoster = posterColor => {\n // https://docs.videojs.com/player.js.html#line3816\n this.player.poster(' ');\n this.player.posterImage.el().style.backgroundColor = posterColor;\n };\n this.cloudinaryConfig = config => {\n if (!config) {\n return _cloudinaryConfig;\n }\n _cloudinaryConfig = config;\n return _chainTarget;\n };\n this.transformation = trans => {\n if (!trans) {\n return _transformation;\n }\n _transformation = trans;\n return _chainTarget;\n };\n this.sourceTypes = types => {\n if (!types) {\n return _sourceTypes;\n }\n _sourceTypes = types;\n return _chainTarget;\n };\n this.getCurrentSources = () => _sources;\n this.sourceTransformation = trans => {\n if (!trans) {\n return _sourceTransformation;\n }\n _sourceTransformation = trans;\n return _chainTarget;\n };\n this.on = function () {\n return _playerEvents.on(...arguments);\n };\n this.one = function () {\n return _playerEvents.one(...arguments);\n };\n this.off = function () {\n return _playerEvents.off(...arguments);\n };\n this.autoShowRecommendations = autoShow => {\n if (autoShow === undefined) {\n return _autoShowRecommendations;\n }\n _autoShowRecommendations = autoShow;\n return _chainTarget;\n };\n this.dispose = () => {\n if (this.playlist && this.playlist()) {\n this.disposePlaylist();\n }\n unsetRecommendations();\n _source = undefined;\n _playerEvents.removeAllListeners();\n };\n const setRecommendations = (recommendations, _ref) => {\n let {\n disableAutoShow = false,\n itemBuilder = null\n } = _ref;\n unsetRecommendations();\n if (!Array.isArray(recommendations) && typeof recommendations !== 'function' && !recommendations.then) {\n throw new Error('\"recommendations\" must be either an array or a function');\n }\n _recommendations = {};\n itemBuilder = itemBuilder || (source => ({\n source: source instanceof _models_video_source_video_source__WEBPACK_IMPORTED_MODULE_7__[\"default\"] ? source : this.buildSource(source),\n action: () => this.source(source)\n }));\n _recommendations.sourceChangedHandler = () => {\n const trigger = sources => {\n if (typeof sources !== 'undefined' && sources.length > 0) {\n const items = sources.map(_source => itemBuilder(_source));\n this.player.trigger('recommendationschanged', {\n items\n });\n } else {\n this.player.trigger('recommendationsnoshow');\n }\n _recommendations.sources = sources;\n };\n if (lodash_isFunction__WEBPACK_IMPORTED_MODULE_0___default()(recommendations)) {\n trigger(recommendations());\n } else if (recommendations.then) {\n recommendations.then(trigger);\n } else {\n trigger(recommendations);\n }\n };\n _recommendations.sourceChangedHandler();\n _recommendations.endedHandler = () => {\n if (!disableAutoShow && this.autoShowRecommendations()) {\n this.player.trigger('recommendationsshow');\n }\n };\n this.on('ended', _recommendations.endedHandler);\n };\n const unsetRecommendations = () => {\n if (_recommendations) {\n this.off('cldsourcechanged', _recommendations.sourceChangedHandler);\n this.off('ended', _recommendations.endedHandler);\n delete _recommendations.endedHandler;\n delete _recommendations.sourceChangedHandler;\n }\n _recommendations = null;\n };\n const refresh = () => {\n const src = this.source();\n if (!src) {\n return;\n }\n const posterOptions = Object.assign({}, this.player.cloudinary.posterOptions(), src.getInitOptions().poster);\n if (posterOptions.posterColor) {\n this.disablePoster(posterOptions.posterColor);\n } else if (src.poster()) {\n this.player.poster(src.poster().url());\n }\n _sources = src.generateSources().reduce((srcs, src) => {\n if (src.isAdaptive) {\n let codec = src.type.split('; ')[1] || null;\n if (codec && 'MediaSource' in window) {\n const parts = src.type.split('; ');\n let typeStr = `video/mp4; ${parts[1] || ''}`;\n const canPlay = testCanPlayTypeAndTypeSupported(typeStr);\n if (canPlay) {\n srcs.push(src);\n }\n } else {\n srcs.push(src);\n }\n } else {\n srcs.push(src);\n }\n return srcs;\n }, []);\n this.player.src(_sources);\n _lastSource = src;\n if (this.playlist) {\n _lastPlaylist = this.playlist();\n }\n };\n const testCanPlayTypeAndTypeSupported = codec => {\n const v = document.createElement('video');\n return v.canPlayType(codec) || 'MediaSource' in window && MediaSource.isTypeSupported(codec);\n };\n const posterOptionsForCurrent = sourceOpts => {\n const posterOpts = Object.assign({}, this.posterOptions());\n posterOpts.transformation = posterOpts.transformation || {};\n if ((posterOpts.transformation.width || posterOpts.transformation.height) && !posterOpts.transformation.crop) {\n posterOpts.transformation.crop = 'scale';\n }\n\n // Skip when source already has width (e.g. breakpoints).\n const sourceHasSizing = (0,_utils_cloudinary__WEBPACK_IMPORTED_MODULE_4__.isKeyInTransformation)(sourceOpts.transformation, 'width');\n const playerEl = this.player.el();\n if (!sourceHasSizing && playerEl?.clientWidth) {\n const roundUp100 = val => 100 * Math.ceil(val / 100);\n const dpr = getEffectiveDpr(sourceOpts.maxDpr);\n posterOpts.transformation = (0,_common__WEBPACK_IMPORTED_MODULE_5__.mergeTransformations)(posterOpts.transformation, {\n width: roundUp100(playerEl.clientWidth * dpr),\n ...(!(0,_utils_cloudinary__WEBPACK_IMPORTED_MODULE_4__.isKeyInTransformation)(posterOpts.transformation, 'crop') && {\n crop: 'limit'\n })\n });\n }\n return posterOpts;\n };\n\n // Handle external (non-cloudinary plugin) source changes (e.g. by ad plugins)\n const syncState = (_, data) => {\n let src = data.to;\n\n // When source is cloudinary's\n if (_lastSource && _lastSource.contains(src)) {\n // If plugin state doesn't have an active VideoSource\n if (!this.source()) {\n // We might have been running a playlist, reset playlist's state.\n if (this.playlist && _lastPlaylist) {\n this.playlist(_lastPlaylist);\n }\n // Rebuild last source state without calling vjs's 'src' and 'poster'\n this.source(_lastSource, {\n skipRefresh: true\n });\n }\n } else {\n // Used by cloudinary-only components\n this.player.trigger('cldsourcechanged', {});\n\n // When source isn't cloudinary's - reset the plugin's state.\n this.dispose();\n }\n };\n _playerEvents = new _event_handler_registry__WEBPACK_IMPORTED_MODULE_8__[\"default\"](this.player);\n const constructorParams = (0,_utils_slicing__WEBPACK_IMPORTED_MODULE_3__.sliceAndUnsetProperties)(options, ...CONSTRUCTOR_PARAMS);\n (0,_utils_apply_with_props__WEBPACK_IMPORTED_MODULE_2__.applyWithProps)(this, constructorParams);\n this.on('sourcechanged', syncState);\n }\n currentSourceType() {\n return this.source().getType();\n }\n currentPublicId() {\n return this.source() && this.source().publicId();\n }\n currentPoster() {\n return this.source() && this.source().poster();\n }\n}\n/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {\n let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n options.chainTarget = options.chainTarget || this;\n this.cloudinary = new CloudinaryContext(this, options);\n}\n\n//# sourceURL=webpack:///./plugins/cloudinary/index.js?\n}");
265
265
 
266
266
  /***/ },
267
267
 
@@ -371,7 +371,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
371
371
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
372
372
 
373
373
  "use strict";
374
- 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.13.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}");
374
+ 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.13.2-edge.0\"\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}");
375
375
 
376
376
  /***/ },
377
377
 
@@ -668,7 +668,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
668
668
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
669
669
 
670
670
  "use strict";
671
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getAnalyticsFromPlayerOptions: () => (/* binding */ getAnalyticsFromPlayerOptions)\n/* harmony export */ });\n/* harmony import */ var _config_defaults__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ~/config/defaults */ \"./config/defaults.js\");\n/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/isEmpty */ \"../node_modules/lodash/isEmpty.js\");\n/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1__);\n\n\nconst hasConfig = obj => lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default()(obj) ? null : true;\nconst filterDefaultsAndNulls = obj => Object.entries(obj).reduce((filtered, _ref) => {\n let [key, value] = _ref;\n if (value !== _config_defaults__WEBPACK_IMPORTED_MODULE_0__[\"default\"][key] && value !== undefined && value !== null) {\n filtered[key] = value;\n }\n return filtered;\n}, {});\nconst getSourceOptions = function () {\n let sourceOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return {\n poster: (() => {\n if (sourceOptions.poster === true) return 'auto';\n if (typeof sourceOptions.poster === 'string') return 'url';\n return undefined;\n })(),\n posterOptions: sourceOptions.posterOptions?.hasUserPosterOptions,\n posterOptionsPublicId: sourceOptions.posterOptions && hasConfig(sourceOptions.posterOptions.publicId),\n autoShowRecommendations: sourceOptions.autoShowRecommendations,\n fontFace: sourceOptions.fontFace,\n sourceTypes: sourceOptions.sourceTypes,\n resourceType: sourceOptions.resourceType,\n chapters: (() => {\n if (sourceOptions.chapters === true) return 'auto';\n if (sourceOptions.chapters && sourceOptions.chapters.url) return 'url';\n if (sourceOptions.chapters) return 'inline-chapters';\n return undefined;\n })(),\n visualSearch: sourceOptions.visualSearch,\n download: hasConfig(sourceOptions.download),\n hdr: hasConfig(sourceOptions.hdr),\n recommendations: sourceOptions.recommendations && sourceOptions.recommendations.length,\n ...(hasConfig(sourceOptions.adaptiveStreaming) ? {\n abrStrategy: sourceOptions?.adaptiveStreaming?.strategy === _config_defaults__WEBPACK_IMPORTED_MODULE_0__[\"default\"].adaptiveStreaming.strategy ? undefined : sourceOptions?.adaptiveStreaming?.strategy\n } : {}),\n shoppable: hasConfig(sourceOptions.shoppable),\n shoppableProductsLength: hasConfig(sourceOptions.shoppable) && sourceOptions.shoppable.products.length,\n ...(sourceOptions.title || sourceOptions.description || sourceOptions.info ? {\n sourceInfo: hasConfig(sourceOptions.info),\n sourceTitle: typeof sourceOptions.title === 'string' ? sourceOptions.title : sourceOptions.info?.title,\n sourceDescription: typeof sourceOptions.description === 'string' ? sourceOptions.description : sourceOptions.info?.subtitle || sourceOptions.info?.description\n } : {}),\n ...(hasConfig(sourceOptions.textTracks) ? getTextTracksOptions(sourceOptions.textTracks) : {}),\n interactionAreas: hasConfig(sourceOptions.interactionAreas),\n videoSources: hasConfig(sourceOptions.videoSources),\n breakpoints: sourceOptions.breakpoints,\n maxDpr: sourceOptions.maxDpr,\n aspectRatio: sourceOptions.aspectRatio,\n cropMode: sourceOptions.cropMode,\n cropPadColor: hasConfig(sourceOptions.cropPadColor) ? sourceOptions.cropPadColor : undefined\n };\n};\nconst getTextTracksOptions = function () {\n let textTracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const tracksArr = [textTracks.captions, ...(textTracks.subtitles || [])].filter(Boolean);\n return {\n textTracks: hasConfig(textTracks),\n textTracksLength: tracksArr.length,\n textTracksOptions: hasConfig(textTracks.options) && Object.keys(textTracks.options).join(','),\n pacedTextTracks: hasConfig(textTracks) && JSON.stringify(textTracks || {}).includes('\"maxWords\":') || null,\n wordHighlight: hasConfig(textTracks) && JSON.stringify(textTracks || {}).includes('\"wordHighlight\":') || null,\n transcriptLanguages: tracksArr.filter(track => !track.url).map(track => track.language || '').join(',') || null,\n transcriptAutoLoaded: tracksArr.some(track => !track.url) || null,\n transcriptFromURl: tracksArr.some(track => track.url?.endsWith('.transcript')) || null,\n vttFromUrl: tracksArr.some(track => track.url?.endsWith('.vtt')) || null,\n srtFromUrl: tracksArr.some(track => track.url?.endsWith('.srt')) || null,\n ...(textTracks.options ? {\n styledTextTracksTheme: textTracks.options.theme,\n styledTextTracksFont: textTracks.options.fontFace,\n styledTextTracksFontSize: textTracks.options.fontSize,\n styledTextTracksGravity: textTracks.options.gravity,\n styledTextTracksBox: hasConfig(textTracks.options.box),\n styledTextTracksStyle: hasConfig(textTracks.options.style),\n styledTextTracksWordHighlightStyle: hasConfig(textTracks.options.wordHighlightStyle)\n } : {})\n };\n};\nconst getAdsOptions = function () {\n let adsOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return {\n adsAdTagUrl: adsOptions.adTagUrl,\n adsShowCountdown: adsOptions.showCountdown,\n adsAdLabel: adsOptions.adLabel,\n adsLocale: adsOptions.locale,\n adsPrerollTimeout: adsOptions.prerollTimeout,\n adsPostrollTimeout: adsOptions.postrollTimeout,\n adsAdsInPlaylist: adsOptions.adsInPlaylist\n };\n};\nconst getPlaylistOptions = function () {\n let playlistWidgetOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return {\n playlist: playlistWidgetOptions.playlist,\n playlistByTag: playlistWidgetOptions.playlistByTag,\n playlistWidgetDirection: playlistWidgetOptions.direction,\n playlistWidgetTotal: playlistWidgetOptions.total\n };\n};\nconst getAnalyticsFromPlayerOptions = playerOptions => filterDefaultsAndNulls({\n aiHighlightsGraph: playerOptions.aiHighlightsGraph,\n analytics: hasConfig(playerOptions.analytics),\n autoplay: playerOptions.autoplay,\n autoplayMode: playerOptions.autoplayMode,\n bigPlayButton: playerOptions.bigPlayButton,\n className: playerOptions.class,\n cloudinaryAnalytics: hasConfig(playerOptions.cloudinaryAnalytics),\n controls: playerOptions.controls,\n floatingWhenNotVisible: playerOptions.floatingWhenNotVisible,\n fluid: playerOptions.fluid,\n height: playerOptions.height,\n hideContextMenu: playerOptions.hideContextMenu,\n logoImageUrl: playerOptions.logoImageUrl,\n logoOnclickUrl: playerOptions.logoOnclickUrl,\n loop: playerOptions.loop,\n maxTries: playerOptions.maxTries,\n muted: playerOptions.muted,\n playbackRates: playerOptions.playbackRates,\n playedEventPercents: playerOptions.playedEventPercents,\n playedEventTimes: playerOptions.playedEventTimes,\n playsinline: playerOptions.playsinline,\n preload: playerOptions.preload,\n videoTimeout: playerOptions.videoTimeout,\n seekThumbnails: playerOptions.seekThumbnails,\n showJumpControls: playerOptions.showJumpControls,\n chaptersButton: playerOptions.chaptersButton,\n pictureInPictureToggle: playerOptions.pictureInPictureToggle,\n showLogo: playerOptions.showLogo,\n skin: playerOptions.skin,\n videoJS: hasConfig(playerOptions.videoJS),\n width: playerOptions.width,\n withCredentials: playerOptions.withCredentials,\n debug: playerOptions.debug,\n type: playerOptions.type,\n schedule: hasConfig(playerOptions.schedule?.weekly),\n colors: hasConfig(playerOptions.colors),\n controlBar: hasConfig(playerOptions.controlBar),\n ...getSourceOptions(playerOptions.sourceOptions || {}),\n ...getAdsOptions(playerOptions.ads),\n ...getPlaylistOptions(playerOptions.playlistWidget)\n});\n\n//# sourceURL=webpack:///./utils/get-analytics-player-options.js?\n}");
671
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getAnalyticsFromPlayerOptions: () => (/* binding */ getAnalyticsFromPlayerOptions)\n/* harmony export */ });\n/* harmony import */ var _config_defaults__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ~/config/defaults */ \"./config/defaults.js\");\n/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/isEmpty */ \"../node_modules/lodash/isEmpty.js\");\n/* harmony import */ var lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1__);\n\n\nconst hasConfig = obj => lodash_isEmpty__WEBPACK_IMPORTED_MODULE_1___default()(obj) ? null : true;\nconst filterDefaultsAndNulls = obj => Object.entries(obj).reduce((filtered, _ref) => {\n let [key, value] = _ref;\n if (value !== _config_defaults__WEBPACK_IMPORTED_MODULE_0__[\"default\"][key] && value !== undefined && value !== null) {\n filtered[key] = value;\n }\n return filtered;\n}, {});\nconst getSourceOptions = function () {\n let sourceOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return {\n poster: (() => {\n if (sourceOptions.poster === true) return 'auto';\n if (typeof sourceOptions.poster === 'string') return 'url';\n return undefined;\n })(),\n posterOptions: sourceOptions.posterOptions?.hasUserPosterOptions,\n posterOptionsPublicId: sourceOptions.posterOptions && hasConfig(sourceOptions.posterOptions.publicId),\n autoShowRecommendations: sourceOptions.autoShowRecommendations,\n fontFace: sourceOptions.fontFace,\n sourceTypes: sourceOptions.sourceTypes,\n resourceType: sourceOptions.resourceType,\n chapters: (() => {\n if (sourceOptions.chapters === true) return 'auto';\n if (sourceOptions.chapters && sourceOptions.chapters.url) return 'url';\n if (sourceOptions.chapters) return 'inline-chapters';\n return undefined;\n })(),\n visualSearch: sourceOptions.visualSearch,\n download: hasConfig(sourceOptions.download),\n hdr: hasConfig(sourceOptions.hdr),\n recommendations: sourceOptions.recommendations && sourceOptions.recommendations.length,\n ...(hasConfig(sourceOptions.adaptiveStreaming) ? {\n abrStrategy: sourceOptions?.adaptiveStreaming?.strategy === _config_defaults__WEBPACK_IMPORTED_MODULE_0__[\"default\"].adaptiveStreaming.strategy ? undefined : sourceOptions?.adaptiveStreaming?.strategy\n } : {}),\n shoppable: hasConfig(sourceOptions.shoppable),\n shoppableProductsLength: hasConfig(sourceOptions.shoppable) && sourceOptions.shoppable.products.length,\n ...(sourceOptions.title || sourceOptions.description || sourceOptions.info ? {\n sourceInfo: hasConfig(sourceOptions.info),\n sourceTitle: typeof sourceOptions.title === 'string' ? sourceOptions.title : sourceOptions.info?.title,\n sourceDescription: typeof sourceOptions.description === 'string' ? sourceOptions.description : sourceOptions.info?.subtitle || sourceOptions.info?.description\n } : {}),\n ...(hasConfig(sourceOptions.textTracks) ? getTextTracksOptions(sourceOptions.textTracks) : {}),\n interactionAreas: hasConfig(sourceOptions.interactionAreas),\n videoSources: hasConfig(sourceOptions.videoSources),\n breakpoints: sourceOptions.breakpoints,\n maxDpr: sourceOptions.maxDpr,\n aspectRatio: sourceOptions.aspectRatio,\n cropMode: sourceOptions.cropMode,\n cropPadColor: hasConfig(sourceOptions.cropPadColor) ? sourceOptions.cropPadColor : undefined\n };\n};\nconst getTextTracksOptions = function () {\n let textTracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const tracksArr = [textTracks.captions, ...(textTracks.subtitles || [])].filter(Boolean);\n return {\n textTracks: hasConfig(textTracks),\n textTracksLength: tracksArr.length,\n textTracksOptions: hasConfig(textTracks.options) && Object.keys(textTracks.options).join(','),\n pacedTextTracks: hasConfig(textTracks) && JSON.stringify(textTracks || {}).includes('\"maxWords\":') || null,\n wordHighlight: hasConfig(textTracks) && JSON.stringify(textTracks || {}).includes('\"wordHighlight\":') || null,\n transcriptLanguages: tracksArr.filter(track => !track.url).map(track => track.language || '').join(',') || null,\n transcriptAutoLoaded: tracksArr.some(track => !track.url) || null,\n transcriptFromURl: tracksArr.some(track => track.url?.endsWith('.transcript')) || null,\n vttFromUrl: tracksArr.some(track => track.url?.endsWith('.vtt')) || null,\n srtFromUrl: tracksArr.some(track => track.url?.endsWith('.srt')) || null,\n ...(textTracks.options ? {\n styledTextTracksTheme: textTracks.options.theme,\n styledTextTracksFont: textTracks.options.fontFace,\n styledTextTracksFontSize: textTracks.options.fontSize,\n styledTextTracksGravity: textTracks.options.gravity,\n styledTextTracksBox: hasConfig(textTracks.options.box),\n styledTextTracksStyle: hasConfig(textTracks.options.style),\n styledTextTracksWordHighlightStyle: hasConfig(textTracks.options.wordHighlightStyle)\n } : {})\n };\n};\nconst getAdsOptions = function () {\n let adsOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return {\n adsAdTagUrl: adsOptions.adTagUrl,\n adsShowCountdown: adsOptions.showCountdown,\n adsAdLabel: adsOptions.adLabel,\n adsLocale: adsOptions.locale,\n adsPrerollTimeout: adsOptions.prerollTimeout,\n adsPostrollTimeout: adsOptions.postrollTimeout,\n adsAdsInPlaylist: adsOptions.adsInPlaylist\n };\n};\nconst getPlaylistOptions = function () {\n let playlistWidgetOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return {\n playlist: playlistWidgetOptions.playlist,\n playlistByTag: playlistWidgetOptions.playlistByTag,\n playlistWidgetDirection: playlistWidgetOptions.direction,\n playlistWidgetTotal: playlistWidgetOptions.total\n };\n};\nconst getAnalyticsFromPlayerOptions = playerOptions => filterDefaultsAndNulls({\n aiHighlightsGraph: playerOptions.aiHighlightsGraph,\n analytics: hasConfig(playerOptions.analytics),\n autoplay: playerOptions.autoplay,\n autoplayMode: playerOptions.autoplayMode,\n bigPlayButton: playerOptions.bigPlayButton,\n className: playerOptions.class,\n cloudinaryAnalytics: hasConfig(playerOptions.cloudinaryAnalytics),\n controls: playerOptions.controls,\n floatingWhenNotVisible: playerOptions.floatingWhenNotVisible,\n fluid: playerOptions.fluid,\n height: playerOptions.height,\n hideContextMenu: playerOptions.hideContextMenu,\n logoImageUrl: playerOptions.logoImageUrl,\n logoOnclickUrl: playerOptions.logoOnclickUrl,\n loop: playerOptions.loop,\n maxTries: playerOptions.maxTries,\n muted: playerOptions.muted,\n playbackRates: playerOptions.playbackRates,\n playedEventPercents: playerOptions.playedEventPercents,\n playedEventTimes: playerOptions.playedEventTimes,\n playsinline: playerOptions.playsinline,\n preload: playerOptions.preload,\n videoTimeout: playerOptions.videoTimeout,\n seekThumbnails: playerOptions.seekThumbnails,\n showJumpControls: playerOptions.showJumpControls,\n chaptersButton: playerOptions.chaptersButton,\n pictureInPictureToggle: playerOptions.pictureInPictureToggle,\n showLogo: playerOptions.showLogo,\n skin: playerOptions.skin,\n videoJS: hasConfig(playerOptions.videoJS),\n width: playerOptions.width,\n withCredentials: playerOptions.withCredentials,\n debug: playerOptions.debug,\n type: playerOptions.type,\n schedule: hasConfig(playerOptions.schedule?.weekly),\n lazy: playerOptions.lazy === true || playerOptions.lazy && typeof playerOptions.lazy === 'object',\n lazyLoadOnScroll: playerOptions.lazy && typeof playerOptions.lazy === 'object' && playerOptions.lazy.loadOnScroll === true ? true : undefined,\n colors: hasConfig(playerOptions.colors),\n controlBar: hasConfig(playerOptions.controlBar),\n ...getSourceOptions(playerOptions.sourceOptions || {}),\n ...getAdsOptions(playerOptions.ads),\n ...getPlaylistOptions(playerOptions.playlistWidget)\n});\n\n//# sourceURL=webpack:///./utils/get-analytics-player-options.js?\n}");
672
672
 
673
673
  /***/ },
674
674
 
@@ -756,7 +756,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
756
756
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
757
757
 
758
758
  "use strict";
759
- 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/esm-browser/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.13.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}");
759
+ 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/esm-browser/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.13.2-edge.0\",\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}");
760
760
 
761
761
  /***/ },
762
762
 
@@ -767,7 +767,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
767
767
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
768
768
 
769
769
  "use strict";
770
- eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ addMetadataTrack: () => (/* binding */ addMetadataTrack),\n/* harmony export */ extractOptions: () => (/* binding */ extractOptions),\n/* harmony export */ getResolveVideoElement: () => (/* binding */ getResolveVideoElement),\n/* harmony export */ isLight: () => (/* binding */ isLight),\n/* harmony export */ normalizeAutoplay: () => (/* binding */ normalizeAutoplay),\n/* harmony export */ overrideDefaultVideojsComponents: () => (/* binding */ overrideDefaultVideojsComponents),\n/* harmony export */ splitOptions: () => (/* binding */ splitOptions)\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 lodash_pick__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash/pick */ \"../node_modules/lodash/pick.js\");\n/* harmony import */ var lodash_pick__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash_pick__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils */ \"./utils/index.js\");\n/* harmony import */ var _video_player_const__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./video-player.const */ \"./video-player.const.js\");\n/* harmony import */ var lodash_isString__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lodash/isString */ \"../node_modules/lodash/isString.js\");\n/* harmony import */ var lodash_isString__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(lodash_isString__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _utils_object__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/object */ \"./utils/object.js\");\n/* harmony import */ var css_escape__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! css.escape */ \"../node_modules/css.escape/css.escape.js\");\n/* harmony import */ var css_escape__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(css_escape__WEBPACK_IMPORTED_MODULE_6__);\n\n\n\n\n\n\n\n/*\n* Used to escape element identifiers that begin with certain\n* characters such as digits.\n* https://www.w3.org/International/questions/qa-escapes#css_identifiers\n*/\n\nconst addMetadataTrack = (videoJs, vttSource) => {\n return videoJs.addRemoteTextTrack({\n kind: 'metadata',\n srclang: 'en',\n src: vttSource,\n default: true\n }, true).track;\n};\nconst isLight = opts => {\n return opts.class.indexOf('cld-video-player-skin-light') > -1 || opts.skin === 'light';\n};\nconst getResolveVideoElement = elem => {\n if (lodash_isString__WEBPACK_IMPORTED_MODULE_4___default()(elem)) {\n let id = elem;\n\n // Adjust for jQuery ID syntax\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n try {\n elem = document.querySelector(`#${css_escape__WEBPACK_IMPORTED_MODULE_6___default()(id)}`) || video_js__WEBPACK_IMPORTED_MODULE_0___default().getPlayer(id);\n } catch (err) {\n // eslint-disable-line no-unused-vars\n elem = null;\n }\n if (!elem) {\n throw new Error(`Could not find element with id ${id}`);\n }\n }\n if (!elem.tagName) {\n throw new Error('Must specify either an element or an element id.');\n } else if (elem.tagName !== 'VIDEO') {\n throw new Error('Element is not a video tag.');\n }\n return elem;\n};\nconst normalizeAutoplay = options => {\n const autoplayMode = options.autoplayMode;\n if (autoplayMode) {\n switch (autoplayMode) {\n case _video_player_const__WEBPACK_IMPORTED_MODULE_3__.AUTO_PLAY_MODE.ALWAYS:\n options.autoplay = true;\n break;\n case _video_player_const__WEBPACK_IMPORTED_MODULE_3__.AUTO_PLAY_MODE.ON_SCROLL:\n case _video_player_const__WEBPACK_IMPORTED_MODULE_3__.AUTO_PLAY_MODE.NEVER:\n default:\n options.autoplay = false;\n }\n }\n};\nconst extractOptions = (elem, options) => {\n const elemOptions = _utils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].normalizeAttributes(elem);\n if (video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.hasClass(elem, _video_player_const__WEBPACK_IMPORTED_MODULE_3__.FLUID_CLASS_NAME) || video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.hasClass(elem, 'vjs-fluid')) {\n options.fluid = true;\n }\n\n // Extract cloudinaryConfig from playerOptions if not explicitly provided\n if (!options.cloudinaryConfig) {\n const snakeCaseCloudinaryConfig = lodash_pick__WEBPACK_IMPORTED_MODULE_1___default()((0,_utils_object__WEBPACK_IMPORTED_MODULE_5__.convertKeysToSnakeCase)(options), _video_player_const__WEBPACK_IMPORTED_MODULE_3__.CLOUDINARY_CONFIG_PARAM);\n if (Object.keys(snakeCaseCloudinaryConfig).length > 0) {\n options.cloudinaryConfig = snakeCaseCloudinaryConfig;\n }\n }\n return video_js__WEBPACK_IMPORTED_MODULE_0___default().obj.merge({}, elemOptions, options);\n};\nconst splitOptions = flatOptions => {\n const options = Object.assign({}, flatOptions);\n\n // In case of 'autoplay on scroll', we need to make sure normal HTML5 autoplay is off\n normalizeAutoplay(options);\n\n // VideoPlayer specific options\n const playerOptions = _utils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].sliceAndUnsetProperties(options, ..._video_player_const__WEBPACK_IMPORTED_MODULE_3__.PLAYER_PARAMS);\n\n // Cloudinary SDK config (cloud_name, secure, etc.)\n playerOptions.cloudinary = _utils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].sliceAndUnsetProperties(playerOptions, ..._video_player_const__WEBPACK_IMPORTED_MODULE_3__.CLOUDINARY_CONFIG_PARAM);\n\n // Merge with cloudinaryConfig from src/index.js (e.g., secureDistribution -> secure_distribution)\n if (playerOptions.cloudinaryConfig) {\n Object.assign(playerOptions.cloudinary, playerOptions.cloudinaryConfig);\n delete playerOptions.cloudinaryConfig;\n }\n\n // Source-level config (visualSearch, chapters, etc.)\n playerOptions.sourceOptions = _utils__WEBPACK_IMPORTED_MODULE_2__[\"default\"].sliceAndUnsetProperties(playerOptions, ..._video_player_const__WEBPACK_IMPORTED_MODULE_3__.SOURCE_PARAMS);\n\n // Allow explicitly passing options to videojs using the `videojs` namespace, in order\n // to avoid param name conflicts:\n // VideoPlayer.new({ controls: true, videojs: { controls: false })\n if (options.videojs) {\n Object.assign(options, options.videojs);\n delete options.videojs;\n }\n // Pass aspectRatio to videojs so it keeps applying aspect-ratio CSS to the video element\n if (playerOptions.sourceOptions?.aspectRatio) {\n options.aspectRatio = playerOptions.sourceOptions.aspectRatio;\n }\n return {\n playerOptions,\n videojsOptions: options\n };\n};\nconst overrideDefaultVideojsComponents = () => {\n const Player = video_js__WEBPACK_IMPORTED_MODULE_0___default().getComponent('Player');\n let children = Player.prototype.options_.children;\n if (children.indexOf('titleBar') === -1) {\n children.push('titleBar');\n }\n const ControlBar = video_js__WEBPACK_IMPORTED_MODULE_0___default().getComponent('ControlBar');\n if (ControlBar) {\n children = ControlBar.prototype.options_.children;\n\n // Add space instead of the progress control (which we detached from the controlBar, and absolutely positioned it above it)\n // Also add a blank div underneath the progress control to stop bubbling up pointer events.\n children.splice(children.indexOf('progressControl'), 0, 'spacer', 'progressControlEventsBlocker');\n\n // Add skip buttons around the 'play-toggle'\n children.splice(children.indexOf('playToggle'), 1, 'playToggle', 'JumpBackButton', 'JumpForwardButton');\n children.splice(children.indexOf('chaptersButton'), 1, 'sourceSwitcherButton', 'chaptersButton');\n\n // Position the 'logo-button' button last\n children.push('logoButton');\n\n // Remove these button\n children.splice(children.indexOf('skipForward'), 1);\n children.splice(children.indexOf('skipBackward'), 1);\n }\n};\n\n//# sourceURL=webpack:///./video-player.utils.js?\n}");
770
+ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ addMetadataTrack: () => (/* binding */ addMetadataTrack),\n/* harmony export */ extractOptions: () => (/* binding */ extractOptions),\n/* harmony export */ getResolveVideoElement: () => (/* binding */ getResolveVideoElement),\n/* harmony export */ isLight: () => (/* binding */ isLight),\n/* harmony export */ normalizeAutoplay: () => (/* binding */ normalizeAutoplay),\n/* harmony export */ overrideDefaultVideojsComponents: () => (/* binding */ overrideDefaultVideojsComponents),\n/* harmony export */ splitOptions: () => (/* binding */ splitOptions)\n/* harmony export */ });\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! video.js */ \"../node_modules/video.js/dist/alt/video.core-exposed.js\");\n/* harmony import */ var video_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(video_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"./utils/index.js\");\n/* harmony import */ var _video_player_const__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./video-player.const */ \"./video-player.const.js\");\n/* harmony import */ var lodash_isString__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash/isString */ \"../node_modules/lodash/isString.js\");\n/* harmony import */ var lodash_isString__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash_isString__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _utils_cloudinary_config_from_options__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/cloudinary-config-from-options */ \"./utils/cloudinary-config-from-options.js\");\n\n\n\n\n\n\n/*\n* Used to escape element identifiers that begin with certain\n* characters such as digits.\n* https://www.w3.org/International/questions/qa-escapes#css_identifiers\n*/\n\nconst addMetadataTrack = (videoJs, vttSource) => {\n return videoJs.addRemoteTextTrack({\n kind: 'metadata',\n srclang: 'en',\n src: vttSource,\n default: true\n }, true).track;\n};\nconst isLight = opts => {\n return opts.class.indexOf('cld-video-player-skin-light') > -1 || opts.skin === 'light';\n};\nconst getResolveVideoElement = elem => {\n if (lodash_isString__WEBPACK_IMPORTED_MODULE_3___default()(elem)) {\n let id = elem;\n\n // Adjust for jQuery ID syntax\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n try {\n elem = document.querySelector(`#${CSS.escape(id)}`) || video_js__WEBPACK_IMPORTED_MODULE_0___default().getPlayer(id);\n } catch (err) {\n // eslint-disable-line no-unused-vars\n elem = null;\n }\n if (!elem) {\n throw new Error(`Could not find element with id ${id}`);\n }\n }\n if (!elem.tagName) {\n throw new Error('Must specify either an element or an element id.');\n } else if (elem.tagName !== 'VIDEO') {\n throw new Error('Element is not a video tag.');\n }\n return elem;\n};\nconst normalizeAutoplay = options => {\n const autoplayMode = options.autoplayMode;\n if (autoplayMode) {\n switch (autoplayMode) {\n case _video_player_const__WEBPACK_IMPORTED_MODULE_2__.AUTO_PLAY_MODE.ALWAYS:\n options.autoplay = true;\n break;\n case _video_player_const__WEBPACK_IMPORTED_MODULE_2__.AUTO_PLAY_MODE.ON_SCROLL:\n case _video_player_const__WEBPACK_IMPORTED_MODULE_2__.AUTO_PLAY_MODE.NEVER:\n default:\n options.autoplay = false;\n }\n }\n};\nconst extractOptions = (elem, options) => {\n const elemOptions = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].normalizeAttributes(elem);\n if (video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.hasClass(elem, _video_player_const__WEBPACK_IMPORTED_MODULE_2__.FLUID_CLASS_NAME) || video_js__WEBPACK_IMPORTED_MODULE_0___default().dom.hasClass(elem, 'vjs-fluid')) {\n options.fluid = true;\n }\n\n // Extract cloudinaryConfig from playerOptions if not explicitly provided\n if (!options.cloudinaryConfig) {\n const snakeCaseCloudinaryConfig = (0,_utils_cloudinary_config_from_options__WEBPACK_IMPORTED_MODULE_4__.getCloudinaryConfigFromOptions)(options);\n if (Object.keys(snakeCaseCloudinaryConfig).length > 0) {\n options.cloudinaryConfig = snakeCaseCloudinaryConfig;\n }\n }\n return video_js__WEBPACK_IMPORTED_MODULE_0___default().obj.merge({}, elemOptions, options);\n};\nconst splitOptions = flatOptions => {\n const options = Object.assign({}, flatOptions);\n\n // In case of 'autoplay on scroll', we need to make sure normal HTML5 autoplay is off\n normalizeAutoplay(options);\n\n // VideoPlayer specific options\n const playerOptions = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].sliceAndUnsetProperties(options, ..._video_player_const__WEBPACK_IMPORTED_MODULE_2__.PLAYER_PARAMS);\n\n // Cloudinary SDK config (cloud_name, secure, etc.)\n playerOptions.cloudinary = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].sliceAndUnsetProperties(playerOptions, ..._video_player_const__WEBPACK_IMPORTED_MODULE_2__.CLOUDINARY_CONFIG_PARAM);\n\n // Merge with cloudinaryConfig from src/index.js (e.g., secureDistribution -> secure_distribution)\n if (playerOptions.cloudinaryConfig) {\n Object.assign(playerOptions.cloudinary, playerOptions.cloudinaryConfig);\n delete playerOptions.cloudinaryConfig;\n }\n\n // Source-level config (visualSearch, chapters, etc.)\n playerOptions.sourceOptions = _utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"].sliceAndUnsetProperties(playerOptions, ..._video_player_const__WEBPACK_IMPORTED_MODULE_2__.SOURCE_PARAMS);\n\n // Allow explicitly passing options to videojs using the `videojs` namespace, in order\n // to avoid param name conflicts:\n // VideoPlayer.new({ controls: true, videojs: { controls: false })\n if (options.videojs) {\n Object.assign(options, options.videojs);\n delete options.videojs;\n }\n // Pass aspectRatio to videojs so it keeps applying aspect-ratio CSS to the video element\n if (playerOptions.sourceOptions?.aspectRatio) {\n options.aspectRatio = playerOptions.sourceOptions.aspectRatio;\n }\n return {\n playerOptions,\n videojsOptions: options\n };\n};\nconst overrideDefaultVideojsComponents = () => {\n const Player = video_js__WEBPACK_IMPORTED_MODULE_0___default().getComponent('Player');\n let children = Player.prototype.options_.children;\n if (children.indexOf('titleBar') === -1) {\n children.push('titleBar');\n }\n const ControlBar = video_js__WEBPACK_IMPORTED_MODULE_0___default().getComponent('ControlBar');\n if (ControlBar) {\n children = ControlBar.prototype.options_.children;\n\n // Add space instead of the progress control (which we detached from the controlBar, and absolutely positioned it above it)\n // Also add a blank div underneath the progress control to stop bubbling up pointer events.\n children.splice(children.indexOf('progressControl'), 0, 'spacer', 'progressControlEventsBlocker');\n\n // Add skip buttons around the 'play-toggle'\n children.splice(children.indexOf('playToggle'), 1, 'playToggle', 'JumpBackButton', 'JumpForwardButton');\n children.splice(children.indexOf('chaptersButton'), 1, 'sourceSwitcherButton', 'chaptersButton');\n\n // Position the 'logo-button' button last\n children.push('logoButton');\n\n // Remove these button\n children.splice(children.indexOf('skipForward'), 1);\n children.splice(children.indexOf('skipBackward'), 1);\n }\n};\n\n//# sourceURL=webpack:///./video-player.utils.js?\n}");
771
771
 
772
772
  /***/ },
773
773
 
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * Cloudinary Video Player v3.13.1
3
- * Built on 2026-04-02T13:46:44.754Z
2
+ * Cloudinary Video Player v3.13.2-edge.0
3
+ * Built on 2026-04-07T06:05:12.546Z
4
4
  * https://github.com/cloudinary/cloudinary-video-player
5
5
  */
6
6
  "use strict";
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * Cloudinary Video Player v3.13.1
3
- * Built on 2026-04-02T13:46:27.754Z
2
+ * Cloudinary Video Player v3.13.2-edge.0
3
+ * Built on 2026-04-07T06:04:56.115Z
4
4
  * https://github.com/cloudinary/cloudinary-video-player
5
5
  */
6
6
  "use strict";(self.cloudinaryVideoPlayerChunkLoading=self.cloudinaryVideoPlayerChunkLoading||[]).push([[728],{9148(e,a,s){s.d(a,{default:()=>l});var t=s(6673),r=s.n(t);const l=(e,a)=>{a.addClass("vjs-visual-search");let s=!1;const t=(e=>{const a=()=>{e.$$(".vjs-visual-search-marker").forEach(e=>e.remove()),e.$$(".vjs-visual-search-results-wrapper").forEach(e=>e.remove()),e.removeClass("vjs-visual-search-results-active")};return{displayResults:s=>{a();const t=e.duration(),l=e.controlBar.progressControl.seekBar,n=r().dom.createEl("div",{className:"vjs-visual-search-results-wrapper",role:"presentation"});s.forEach(a=>{const{start_time:s,end_time:l}=a,c=s/t*100,o=(l-s)/t*100,i=`${Math.floor(s/60)}:${Math.floor(s%60).toString().padStart(2,"0")}`,d=r().dom.createEl("div",{className:"vjs-control vjs-visual-search-marker",style:`left: ${c}%; width: ${o}%`,tabIndex:0,role:"button",title:`Search result at ${i}`,ariaLabel:`Search result at ${i}`});n.appendChild(d),d.addEventListener("click",()=>{e.currentTime(s)}),d.addEventListener("keydown",a=>{"Enter"!==a.key&&" "!==a.key||(a.preventDefault(),e.currentTime(s))})}),l.el().appendChild(n),s.length>0&&e.addClass("vjs-visual-search-results-active")},clearMarkers:a}})(a),l=async e=>{const s=a.$(".vjs-visual-search-button");s.classList.add("vjs-waiting");try{const s=a.cloudinary.source(),r=s.publicId(),l=Object.assign({},s.transformation());l.flags=l.flags||[],l.flags.push(`getinfo:search_b64_${btoa(e)}`);const n=s.config().url(`${r}`,{transformation:l}),c=await fetch(n,{method:"GET",headers:{"Content-Type":"application/json"}});if(!c.ok)throw new Error(`Search request failed with status: ${c.status}`);const o=await c.json();t.displayResults(o.timestamps),o&&!a.hasStarted()&&a.play().then(()=>a.pause())}catch(e){console.error("Error performing visual search:",e)}finally{s.classList.remove("vjs-waiting")}},n=()=>{s=!1,t.clearMarkers(),a.$(".vjs-visual-search-wrapper")?.remove()},c=()=>{n();const e=a.$(".vjs-title-bar");e&&e.classList.remove("vjs-hidden");const c=r().dom.createEl("div",{className:"vjs-visual-search-wrapper"}),o=()=>{s&&(s=!1,c.classList.remove("vjs-visual-search-active"),d.input.value="",d.input.tabIndex=-1,d.closeButton.tabIndex=-1,t.clearMarkers())},i=(e=>{const a=r().dom.createEl("button",{className:"vjs-control vjs-button vjs-visual-search-button",title:"Search video content",ariaLabel:"Search video content"}),s=r().dom.createEl("span",{className:"vjs-icon-search"});a.appendChild(s);const t=r().dom.createEl("span",{className:"vjs-loading-spinner"});return a.appendChild(t),a.addEventListener("click",e),a})(()=>{if(s){const e=d.input.value.trim();e&&l(e)}else s=!0,c.classList.add("vjs-visual-search-active"),d.input.tabIndex=0,d.closeButton.tabIndex=0,d.input.focus()}),d=((e,a)=>{const s=r().dom.createEl("form",{className:"vjs-visual-search-form"}),t=r().dom.createEl("input",{className:"vjs-visual-search-input",type:"text",ariaLabel:"Search input",tabIndex:-1}),l=r().dom.createEl("button",{className:"vjs-control vjs-button vjs-visual-search-close",type:"button",title:"Close search",ariaLabel:"Close search",tabIndex:-1}),n=r().dom.createEl("span",{className:"vjs-icon-close"});return l.appendChild(n),s.appendChild(t),s.appendChild(l),s.addEventListener("submit",a=>{a.preventDefault();const s=t.value.trim();s&&e(s)}),l.addEventListener("click",e=>{e.preventDefault(),a&&a()}),{element:s,input:t,closeButton:l}})(l,o);c.appendChild(i),c.appendChild(d.element),e.prepend(c),a.on("keydown",e=>{"Escape"===e.key&&s&&o()})};c(),a.visualSearch={createSearchUI:c,clearUI:n}}}}]);
package/lib/all.js CHANGED
@@ -4,10 +4,9 @@ import './videojs-contrib-hlsjs.js';
4
4
  export { _ as videojs } from './_videojs-proxy.js';
5
5
  import './abr-strategies.js';
6
6
  import './chapters.js';
7
- import './object.js';
8
7
  import './video-player.js';
9
8
  import './validators-functions.js';
10
- import './player-api.js';
9
+ import './cloudinary-config-from-options.js';
11
10
  import './ima.js';
12
11
  import './playlist-panel.js';
13
12
  import './throttle.js';
@@ -16,7 +15,9 @@ import './interaction-areas.const.js';
16
15
  import './download-button.js';
17
16
  import './shoppable-post-widget.js';
18
17
  import './recommendations-overlay.js';
18
+ import './player-api.js';
19
19
  import './_commonjsHelpers.js';
20
+ import './cloudinary-url-prefix.js';
20
21
  import './video-player.const.js';
21
22
  import './document.js';
22
23
  import './toNumber.js';
package/lib/chapters.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { _ as _vjs } from './_videojs-proxy.js';
2
2
  import './video-player.js';
3
3
  import './validators-functions.js';
4
- import { g as getCloudinaryUrlPrefix } from './player-api.js';
5
- import { u as utf8ToBase64, a as appendQueryParams } from './object.js';
4
+ import { g as getCloudinaryUrlPrefix } from './cloudinary-url-prefix.js';
5
+ import { u as utf8ToBase64, a as appendQueryParams } from './cloudinary-config-from-options.js';
6
6
  import './_commonjsHelpers.js';
7
7
  import './video-player.const.js';
8
8