{"version":3,"sources":["webpack:///./src/project/video/VideoFullscreenOverlay.vue?221d","webpack:///./src/project/video/VideoFullscreenOverlay.vue?551b","webpack:///./src/project/video/VideoFullscreenOverlay.vue","webpack:///./src/project/video/VideoFullscreenOverlay.vue?ccd8","webpack:///./src/project/video/VideoFullscreenOverlay.vue?3a1f","webpack:///./src/project/modals/Modal.vue","webpack:///./src/project/modals/Modal.vue?4482","webpack:///./src/project/modals/Modal.vue?1301","webpack:///./src/project/video/ProductVideoRender.vue?2d0b","webpack:///./src/project/video/ProductVideoRender.vue?0b5c","webpack:///./src/project/video/ProductNativeVideo.vue?a7fa","webpack:///./src/project/video/ProductNativeVideo.vue","webpack:///./src/project/video/ProductNativeVideo.vue?7681","webpack:///./src/project/video/ProductNativeVideo.vue?ea9f","webpack:///./src/project/video/ProductVimeoVideo.vue?d455","webpack:///./src/project/video/ProductVimeoVideo.vue","webpack:///./src/project/video/ProductVimeoVideo.vue?7342","webpack:///./src/project/video/ProductVimeoVideo.vue?a1fa","webpack:///./src/project/video/ProductYoutubeVideo.vue?e721","webpack:///./src/project/video/ProductYoutubeVideo.vue","webpack:///./src/project/video/constants.ts","webpack:///./src/project/video/ProductYoutubeVideo.vue?ed6c","webpack:///./src/project/video/ProductYoutubeVideo.vue?af96","webpack:///./src/project/video/ProductVideoRender.vue","webpack:///./src/project/video/ProductVideoRender.vue?4235","webpack:///./src/project/video/ProductVideoRender.vue?69fe"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticClass","ref","staticRenderFns","Modal","video","isPlaying","loadingVideo","vimeoVideoAspectRatio","$refs","videoMount","options","id","ensureId","vimeoVideoId","autoplay","loop","muted","controls","title","byline","portrait","autopause","responsive","on","width","getVideoWidth","height","getVideoHeight","enableTextTrack","vimeoTextTracks","getTextTracks","desiredTrackLanguage","siteInfo","languageCode","trackThatMatchesLanguage","find","t","language","idOrUrl","idParts","split","length","parseInt","required","components","VideoRender","component","data","ModalState","hideModal","modal","type","Object","class","cssClasses","attrs","videoUrl","screenMode","allowControls","startVideo","iconWidth","iconHeight","_v","_e","url","String","Boolean","directives","name","rawName","value","fullscreenMode","expression","$nextTick","videoPlayMount","playOptions","posterOptions","background","mode","youtubeUrl","videoImage","youtubeRegex","match","slice","videoId","imageResolution","VideoType","supportedSizes","videoType","indexOf","Vimeo","Youtube","Native","isMobile","Error","isBreakpointActive","videoWrapper","visibleState","isScrolledIntoView","el","parent","closest","rect","getBoundingClientRect","parentRect","isVisible","top","bottom","left","right","validator","valuesToCheck","values","every","val","includes","NativeVideo","VimeoVideo","YoutubeVideo"],"mappings":"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","file":"js/chunk-6323efb6.6dcc30a4.js","sourcesContent":["import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VideoFullscreenOverlay.vue?vue&type=style&index=0&lang=less&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VideoFullscreenOverlay.vue?vue&type=style&index=0&lang=less&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-video-fullscreen-overlay\"},[_c('div',{staticClass:\"bg-white py-35 px-10 md:px-40\"},[_c('div',{staticClass:\"relative min-h-250\"},[_c('div',{ref:\"videoMount\",staticClass:\"c-video-fullscreen-overlay__video outline-none\"})])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\r\nimport Modal from '@/project/modals/Modal.vue';\r\nimport { Component, Prop } from 'vue-property-decorator';\r\nimport VideoRender from '@/project/video/ProductVideoRender.vue';\r\nimport serverContextService from '@/core/serverContext.service';\r\nimport VimeoPlayer, { Options } from '@vimeo/player';\r\n\r\n@Component({\r\n components: { VideoRender }\r\n})\r\nexport default class VideoFullscreenOverlay extends Modal {\r\n @Prop({ required: true })\r\n private vimeoVideoId!: string;\r\n\r\n @Prop({ required: false })\r\n private enableTextTrack!: boolean;\r\n\r\n private video: VimeoPlayer | null = null;\r\n private isPlaying: boolean = false;\r\n private loadingVideo: boolean = false;\r\n private vimeoVideoAspectRatio: number = 0;\r\n private async mounted() {\r\n if (!this.$refs.videoMount) return;\r\n const options = {\r\n id: ensureId(this.vimeoVideoId),\r\n autoplay: true,\r\n loop: false,\r\n muted: false,\r\n controls: true,\r\n title: false,\r\n byline: false,\r\n portrait: false,\r\n autopause: true,\r\n responsive: true\r\n } as Options;\r\n // eslint-disable-next-line no-new\r\n this.video = new VimeoPlayer(this.$refs.videoMount as HTMLElement, options) as VimeoPlayer;\r\n this.video.on('ended', () => {\r\n this.isPlaying = false;\r\n });\r\n\r\n this.video.on('loaded', () => {\r\n this.loadingVideo = false;\r\n });\r\n\r\n const width = await this.video.getVideoWidth();\r\n const height = await this.video.getVideoHeight();\r\n this.vimeoVideoAspectRatio = width / height;\r\n\r\n // Finds text tracks in video, enables the one that matches site. Defaults to english\r\n if (this.enableTextTrack) {\r\n const vimeoTextTracks = await this.video.getTextTracks();\r\n const desiredTrackLanguage = serverContextService.siteInfo.languageCode || 'en';\r\n const trackThatMatchesLanguage = vimeoTextTracks.find(t => t.language === desiredTrackLanguage);\r\n if (trackThatMatchesLanguage) {\r\n this.video.enableTextTrack(trackThatMatchesLanguage.language);\r\n }\r\n }\r\n\r\n function ensureId(idOrUrl: string): number {\r\n const idParts = idOrUrl.split(/(\\\\|\\/)/);\r\n let id = idOrUrl;\r\n if (idParts.length > 1) {\r\n id = idParts[idParts.length - 1];\r\n }\r\n return parseInt(id);\r\n }\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VideoFullscreenOverlay.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VideoFullscreenOverlay.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VideoFullscreenOverlay.vue?vue&type=template&id=106e7a4c&\"\nimport script from \"./VideoFullscreenOverlay.vue?vue&type=script&lang=ts&\"\nexport * from \"./VideoFullscreenOverlay.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./VideoFullscreenOverlay.vue?vue&type=style&index=0&lang=less&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\r\nimport { Vue, Component, Prop } from 'vue-property-decorator';\r\nimport { IModal, ModalState } from '@/core/modals/ModalState';\r\n\r\n@Component\r\nexport default class Modal extends Vue {\r\n @Prop({ type: Object, required: true })\r\n protected modal!: IModal;\r\n\r\n protected closeOverlay(data?: any) {\r\n ModalState.hideModal(this.modal.id, data);\r\n }\r\n}\r\n","var render, staticRenderFns\nimport script from \"./Modal.vue?vue&type=script&lang=ts&\"\nexport * from \"./Modal.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Modal.vue?vue&type=script&lang=ts&\"","import mod from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductVideoRender.vue?vue&type=style&index=0&id=28d563fe&lang=less&scoped=true&\"; export default mod; export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductVideoRender.vue?vue&type=style&index=0&id=28d563fe&lang=less&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"videoWrapper\",staticClass:\"video relative\",class:_vm.cssClasses},[(_vm.isVimeoVideo)?_c('vimeo-video',{staticClass:\"outline-none\",attrs:{\"url\":_vm.videoUrl,\"mode\":_vm.screenMode,\"allow-controls\":_vm.allowControls,\"start-video\":_vm.startVideo}}):(_vm.isYoutubeVideo)?_c('youtube-video',{staticClass:\"outline-none\",attrs:{\"url\":_vm.videoUrl,\"mode\":_vm.screenMode,\"allow-controls\":_vm.allowControls,\"start-video\":_vm.startVideo}}):_c('native-video',{staticClass:\"outline-none\",attrs:{\"url\":_vm.videoUrl,\"allow-controls\":_vm.allowControls,\"start-video\":_vm.startVideo}}),(_vm.screenMode !== 'fullscreen')?_c('span',{staticClass:\"play absolute inset-0 m-auto\"},[_c('CIcon',{attrs:{\"name\":\"play\",\"width\":_vm.iconWidth,\"height\":_vm.iconHeight}}),_c('span',{staticClass:\"sr-only\"},[_vm._v(\"Play\")])],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('video',{attrs:{\"src\":_vm.url,\"preload\":\"metadata\",\"controls\":_vm.allowControls,\"autoplay\":_vm.startVideo}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\r\nimport { Vue, Prop } from 'vue-property-decorator';\r\nimport Component from 'vue-class-component';\r\n\r\n@Component\r\n\r\nexport default class NativeVideo extends Vue {\r\n @Prop({ type: String, required: true })\r\n private url!: string;\r\n\r\n @Prop({\r\n required: true,\r\n type: Boolean\r\n }) startVideo!: boolean;\r\n\r\n @Prop({\r\n required: true,\r\n type: Boolean\r\n }) allowControls!: boolean;\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductNativeVideo.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductNativeVideo.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductNativeVideo.vue?vue&type=template&id=0eda7191&\"\nimport script from \"./ProductNativeVideo.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductNativeVideo.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.fullscreenMode),expression:\"!fullscreenMode\"}]},[_c('div',{ref:\"videoMount\"})]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.fullscreenMode),expression:\"fullscreenMode\"}]},[_c('div',{ref:\"videoPlayMount\",staticClass:\"absolute top-0 left-0 z-1\"})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Prop, Vue } from 'vue-property-decorator';\r\nimport Component from 'vue-class-component';\r\nimport VimeoPlayer from '@vimeo/player';\r\n\r\n@Component\r\nexport default class ProductVimeoVideo extends Vue {\r\n @Prop({ type: String, required: true })\r\n private url!: string;\r\n\r\n @Prop({\r\n required: true,\r\n type: String\r\n }) mode!: string;\r\n\r\n @Prop({\r\n required: true,\r\n type: Boolean\r\n }) startVideo!: boolean;\r\n\r\n $refs!: {\r\n videoMount?: HTMLElement,\r\n videoPlayMount?: HTMLElement,\r\n }\r\n\r\n private mounted() {\r\n // Setup the fullscreen video mount\r\n this.$nextTick(() => {\r\n if (this.fullscreenMode) {\r\n if (this.$refs.videoPlayMount) {\r\n const playOptions = {\r\n url: this.url,\r\n controls: true,\r\n autoplay: this.startVideo\r\n };\r\n\r\n // eslint-disable-next-line no-new\r\n new VimeoPlayer(this.$refs.videoPlayMount, playOptions);\r\n }\r\n } else {\r\n if (this.$refs.videoMount) {\r\n const posterOptions = {\r\n url: this.url,\r\n controls: false,\r\n background: false,\r\n width: 165\r\n };\r\n\r\n // eslint-disable-next-line no-new\r\n new VimeoPlayer(this.$refs.videoMount, posterOptions);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private get fullscreenMode(): boolean {\r\n return this.mode === 'fullscreen';\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductVimeoVideo.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductVimeoVideo.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductVimeoVideo.vue?vue&type=template&id=1c2f5789&\"\nimport script from \"./ProductVimeoVideo.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductVimeoVideo.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.allowControls)?_c('div',[_c('iframe',{attrs:{\"src\":_vm.youtubeUrl,\"frameborder\":\"0\",\"allowfullscreen\":\"\"}})]):_c('img',{attrs:{\"src\":_vm.videoImage,\"alt\":\"\"}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\r\nimport { Vue, Prop } from 'vue-property-decorator';\r\nimport Component from 'vue-class-component';\r\n\r\n@Component\r\n\r\nexport default class ProductYoutubeVideo extends Vue {\r\n @Prop({ type: String, required: true })\r\n private url!: string;\r\n\r\n @Prop({\r\n required: true,\r\n type: String\r\n }) mode!: string;\r\n\r\n @Prop({\r\n required: true,\r\n type: Boolean\r\n }) startVideo!: boolean;\r\n\r\n @Prop({\r\n required: true,\r\n type: Boolean\r\n }) allowControls!: boolean;\r\n\r\n private get videoId() {\r\n const youtubeRegex = /^.*((youtube\\/)|(youtu.be\\/)|(v\\/)|(\\/u\\/\\w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#&?]*).*/;\r\n const match = this.url.match(youtubeRegex);\r\n\r\n return (match && match[8].length >= 11) ? match[8].slice(0, 11) : 'default';\r\n }\r\n\r\n // Fixes iframe same-origin issues: https://stackoverflow.com/questions/41522652/refused-to-display-url-in-a-frame-because-it-set-x-frame-options-to-sameori/49330250#49330250\r\n private get youtubeUrl() {\r\n return `https://youtube.com/embed/${this.videoId}?autoplay=${this.startVideo ? 1 : 0}`;\r\n }\r\n\r\n private get videoImage() : string {\r\n return `https://i.ytimg.com/vi/${this.videoId}/${this.imageResolution}.jpg`;\r\n }\r\n\r\n private get imageResolution() : string {\r\n return this.mode === 'thumbnail' ? 'mqdefault' : 'maxresdefault';\r\n }\r\n}\r\n","export enum VideoType {\r\n Vimeo = 'vimeo',\r\n Youtube = 'youtu',\r\n Native = 'native'\r\n}\r\n\r\nexport const supportedSizes = ['200', '300', '700', '1400'];\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductYoutubeVideo.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductYoutubeVideo.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductYoutubeVideo.vue?vue&type=template&id=a92458e2&\"\nimport script from \"./ProductYoutubeVideo.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductYoutubeVideo.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\r\nimport { Prop, Vue } from 'vue-property-decorator';\r\nimport Component from 'vue-class-component';\r\nimport NativeVideo from './ProductNativeVideo.vue';\r\nimport VimeoVideo from './ProductVimeoVideo.vue';\r\nimport YoutubeVideo from './ProductYoutubeVideo.vue';\r\nimport { supportedSizes, VideoType } from './constants';\r\nimport breakpointState from '@/core/responsive/breakpoints/breakpointsState.observable';\r\nimport { XS } from '@/core/config/breakpointConfig';\r\n\r\n@Component({\r\n components: { NativeVideo, VimeoVideo, YoutubeVideo }\r\n})\r\n\r\nexport default class ProductVideoRender extends Vue {\r\n @Prop({ type: String, required: true })\r\n private videoUrl!: string;\r\n\r\n @Prop({\r\n required: true,\r\n type: String\r\n }) mode!: 'thumbnail' | 'pdp' | 'fullscreen';\r\n\r\n @Prop({\r\n type: [String, Object],\r\n required: true,\r\n validator: (value: string | object) => {\r\n const valuesToCheck = typeof value === 'string' ? [value] : Object.values(value);\r\n return valuesToCheck.every(val => supportedSizes.includes(val));\r\n }\r\n })\r\n private size!: string | { [breakpoint: string]: string};\r\n\r\n private get videoType(): VideoType {\r\n let videoType: VideoType;\r\n\r\n if (this.videoUrl.indexOf(VideoType.Vimeo) !== -1) {\r\n videoType = VideoType.Vimeo;\r\n } else if (this.videoUrl.indexOf(VideoType.Youtube) !== -1) {\r\n videoType = VideoType.Youtube;\r\n } else {\r\n videoType = VideoType.Native;\r\n }\r\n\r\n return videoType;\r\n }\r\n\r\n private get isYoutubeVideo() {\r\n return this.videoType === VideoType.Youtube;\r\n }\r\n\r\n private get isVimeoVideo() {\r\n return this.videoType === VideoType.Vimeo;\r\n }\r\n\r\n private get screenMode(): string {\r\n if (this.isMobile) return 'fullscreen';\r\n\r\n switch (this.mode) {\r\n case 'thumbnail':\r\n return 'thumbnail';\r\n case 'pdp':\r\n return 'pdp';\r\n case 'fullscreen':\r\n return 'fullscreen';\r\n }\r\n throw new Error('unknown screen-mode: ' + this.mode);\r\n }\r\n\r\n protected get isMobile() {\r\n return breakpointState.isBreakpointActive(XS);\r\n }\r\n\r\n private get cssClasses(): string {\r\n return `${this.screenMode} ${this.videoType}`;\r\n }\r\n\r\n private get iconWidth(): string {\r\n return this.screenMode === 'thumbnail' ? '13' : '26';\r\n }\r\n\r\n private get iconHeight(): string {\r\n return this.screenMode === 'thumbnail' ? '16' : '32';\r\n }\r\n\r\n private get allowControls() {\r\n return this.screenMode === 'fullscreen' || this.isMobile;\r\n }\r\n\r\n $refs!: Vue['$refs'] & {\r\n videoWrapper: HTMLElement\r\n }\r\n\r\n private autoplay: boolean | null = false;\r\n\r\n private mounted() {\r\n const videoWrapper = this.$refs.videoWrapper;\r\n const visibleState = this.isScrolledIntoView(videoWrapper);\r\n this.autoplay = visibleState;\r\n }\r\n\r\n private isScrolledIntoView(el: HTMLElement) {\r\n const parent = el.closest('.swiper-container');\r\n if (!parent) return false;\r\n const rect = el.getBoundingClientRect();\r\n const parentRect = parent.getBoundingClientRect();\r\n const isVisible = (rect.top >= parentRect.top) && (rect.bottom <= parentRect.bottom) && (rect.left >= parentRect.left) && (rect.right <= parentRect.right);\r\n return isVisible;\r\n }\r\n\r\n private get startVideo() {\r\n return this.screenMode === 'fullscreen' && this.autoplay;\r\n }\r\n}\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductVideoRender.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ProductVideoRender.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./ProductVideoRender.vue?vue&type=template&id=28d563fe&scoped=true&\"\nimport script from \"./ProductVideoRender.vue?vue&type=script&lang=ts&\"\nexport * from \"./ProductVideoRender.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./ProductVideoRender.vue?vue&type=style&index=0&id=28d563fe&lang=less&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"28d563fe\",\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}