{"version":3,"file":"index.es.min.js","sources":["../../../packages/components/src/video/constants.mjs","../../../packages/helpers/src/getScript.js","../../../packages/helpers/src/deferred.js","../../../packages/helpers/src/dataLayer.js","../../../packages/helpers/src/playerYoutube.js","../../../packages/helpers/src/htmlElement.js","../../../packages/helpers/src/playerYouku.js","../../../packages/helpers/src/props.helpers.js","../../../packages/components/src/video/components/youtube-overlay.js","../../../packages/helpers/src/assets/js/eventDispatch.js","../../../packages/components/src/constants.mjs","../../../packages/helpers/src/viewport.helpers.ts","../../../packages/helpers/src/utils.ts","../../../packages/components/src/video/video.js"],"sourcesContent":["export const VIDEO_SERVICE_YOUTUBE = 'youtube'\nexport const VIDEO_SERVICE_YOUKU = 'youku'\nexport const VIDEO_SERVICE_LOCAL = 'local'\n","export default function getScript(source, asyncLoad = true, defer = false) {\n    return new Promise((resolve, reject) => {\n        if (document.querySelector(`script[src=\"${source}\"]`)) {\n            return resolve() // Script already loaded\n        }\n\n        const script = document.createElement('script')\n        const prior = document.getElementsByTagName('script')[0]\n        script.async = asyncLoad\n        script.defer = defer\n        script.addEventListener('load', () => resolve())\n        script.addEventListener('error', () => reject(new Error('Loading script')))\n        script.src = source\n        prior.parentNode.insertBefore(script, prior)\n    })\n}\n","export default class Deferred {\n    constructor() {\n        this.promise = new Promise((resolve, reject) => {\n            this.reject = reject\n            this.resolve = resolve\n        })\n    }\n}\n","export const getDataLayer = () => {\n    return window[window?.padlNamespace]?.dataLayer\n}\n\nexport const getMarketCode = () => {\n    const dataLayer = getDataLayer()\n    if (!dataLayer) {\n        return 'ch'\n    }\n\n    return dataLayer.app.app.market.toLocaleLowerCase()\n}\n\nexport const getLangCode = () => {\n    const dataLayer = getDataLayer()\n    if (!dataLayer) {\n        return 'en'\n    }\n\n    return getDataLayer().page.page.pageInfo.language.toLocaleLowerCase()\n}\n\nexport const getSegmentCode = () => {\n    const dataLayer = getDataLayer()\n    if (!dataLayer) {\n        return 'B2C'\n    }\n\n    return getDataLayer().page.page.pageInfo.segmentBusiness\n}\n\nexport const isLoggedIn = () => {\n    const dataLayer = getDataLayer()\n    if (!dataLayer || !dataLayer.user) {\n        return false\n    }\n\n    return dataLayer.user.isLoggedIn\n}\n\nexport const interpolateMarketLang = (string, market, lang) => {\n    return string.replace('{market}', market).replace('{lang}', lang)\n}\n","import getScript from './getScript'\nimport Deferred from './deferred'\nimport { getMarketCode } from './dataLayer'\n\nfunction initYouTubeIframeAPI() {\n    const deferred = new Deferred()\n\n    if (window.YT?.Player || getMarketCode() === 'cn') {\n        deferred.resolve()\n    }\n\n    // YouTube API will call this function automatically when player API is ready\n    // https://developers.google.com/youtube/iframe_api_reference\n    window.onYouTubeIframeAPIReady = function () {\n        deferred.resolve()\n    }\n\n    getScript('https://www.youtube.com/iframe_api', false).then(() => {\n        window.YT?.ready(() => deferred.resolve())\n    })\n\n    return deferred.promise\n}\n\nclass PlayerYoutube {\n    constructor() {\n        this.iframeApi = initYouTubeIframeAPI()\n    }\n\n    attach(iframeContainer, videoId, isBackgroundVideoPlaying, isAutoPlay = 1, moreParams = {}) {\n        let params = {}\n\n        if (isBackgroundVideoPlaying) {\n            params = { playlist: videoId, controls: 0, loop: 1 }\n        }\n\n        return new Promise(resolve => {\n            this.iframeApi.then(() => {\n                const player = new window.YT.Player(iframeContainer, {\n                    videoId,\n                    host: 'https://www.youtube-nocookie.com',\n                    playerVars: {\n                        // disablekb: 1,\n                        // showinfo: 0,\n                        // modestbranding: 1,\n                        enablejsapi: 1,\n                        rel: 0,\n                        fs: 0,\n                        autoplay: isAutoPlay,\n                        ...params,\n                        ...moreParams\n                    },\n                    events: {\n                        onReady: () => {\n                            if (isBackgroundVideoPlaying) {\n                                player.mute()\n                            }\n                            resolve(player)\n                        },\n                        onStateChange: () => ({}),\n                        onError: () => ({})\n                    }\n                })\n            })\n        })\n    }\n}\n\nexport default PlayerYoutube\n","/**\n * Return real width for a DOM Node\n * @param {HTMLElement} el\n * @returns {number}\n */\nexport const outerWidth = el => {\n    const style = getComputedStyle(el)\n    const width = style.getPropertyValue('width') || 0\n    const marginLeft = style.getPropertyValue('margin-left') || 0\n    const marginRight = style.getPropertyValue('margin-right') || 0\n\n    return parseInt(width) + parseInt(marginLeft) + parseInt(marginRight)\n}\n\n/**\n * Return real height for a DOM Node\n * @param {DOM Node} el\n * @returns {number}\n */\nexport const outerHeight = el => {\n    const style = getComputedStyle(el)\n    const height = style.getPropertyValue('height') || 0\n    const marginTop = style.getPropertyValue('margin-top') || 0\n    const marginBottom = style.getPropertyValue('margin-bottom') || 0\n\n    return parseInt(height) + parseInt(marginTop) + parseInt(marginBottom)\n}\n\nexport const appendSchema = content => {\n    const el = window.document.createElement('script')\n    el.setAttribute('type', 'application/ld+json')\n    el.innerHTML = JSON.stringify(content)\n    window.document.head.appendChild(el)\n}\n","import getScript from './getScript'\nimport { outerWidth, outerHeight } from './htmlElement'\n\nclass PlayerYouku {\n    constructor() {\n        this.iframeApi = new Promise(resolve => {\n            getScript('https://player.youku.com/jsapi').then(() => resolve())\n        })\n    }\n\n    attach(iframeContainerId, videoId, isBackgroundVideoPlaying, isAutoPlay = 1, moreParams = {}) {\n        let params = {}\n        if (isBackgroundVideoPlaying) {\n            const container = document.getElementById(iframeContainerId)\n\n            params = {\n                playlist: videoId,\n                controls: 0,\n                loop: 1,\n                autoplay: 1,\n                width: outerWidth(container),\n                height: outerHeight(container)\n            }\n        }\n        return new Promise(resolve => {\n            this.iframeApi.then(() => {\n                const player = new window.YKU.Player(iframeContainerId, {\n                    styleid: '0',\n                    client_id: 'a3660779c8b57c32',\n                    vid: videoId,\n                    newPlayer: true,\n                    autoplay: isAutoPlay,\n                    show_related: false,\n                    width: 640,\n                    height: 360,\n                    ...params,\n                    ...moreParams,\n                    events: {\n                        onPlayerReady: () => resolve(player),\n                        onPlayStart: () => ({}),\n                        onPlay: () => ({}),\n                        onPlayEnd: () => ({}),\n                        onPause: () => ({}),\n                        onWaiting: () => ({}),\n                        onFullScreen: () => ({}),\n                        onPlayError: () => ({})\n                    }\n                })\n            })\n        })\n    }\n}\n\nexport default PlayerYouku\n","const getData = attributes => attributes.find(attribute => attribute.nodeName === 'data')\n\nconst createProps = attributes => {\n    const data = getData([...attributes])\n    const props = [...attributes]\n        .filter(attribute => attribute.nodeName !== 'data')\n        .reduce((all, attr) => {\n            return { ...all, [attr.nodeName]: attr.nodeValue }\n        }, {})\n\n    if (isNil(data)) {\n        return props\n    }\n\n    try {\n        return { ...props, ...JSON.parse(data.nodeValue) }\n    } catch (error) {\n        console.log('ERROR: No data', error, data?.nodeValue)\n    }\n}\n\nconst isNil = obj => obj === undefined || obj === null\n\nexport const parseBool = value => (!value || value === 'false' ? false : true)\n\nexport default createProps\n","import createProps from '@kissui/helpers/src/props.helpers'\n\nclass YoutubeOverlay extends HTMLElement {\n    connectedCallback() {\n        const { video_id = '' } = createProps(this.attributes)\n\n        if (video_id) {\n            this.render(video_id)\n        }\n    }\n\n    render(videoId) {\n        this.setAttribute('role', 'button')\n        this.style.backgroundImage = `url(https://img.youtube.com/vi/${videoId}/sddefault.jpg)`\n        this.innerHTML = `\n            <div>\n                <svg\n                    xmlns=\"http://www.w3.org/2000/svg\"\n                    width=\"90\"\n                    height=\"60\"\n                    viewBox=\"0 0 90 60\"\n                >\n                    <rect width=\"90\" height=\"60\" rx=\"12\" fill=\"#FF0000\" />\n                    <polygon points=\"36,15 36,45 60,30\" fill=\"#FFFFFF\" />\n                </svg>\n            </div>\n        `\n    }\n}\n\ncustomElements.get('nb-youtube-overlay') ||\n    customElements.define('nb-youtube-overlay', YoutubeOverlay)\n\nexport default YoutubeOverlay\n","export const dispatchEvent = ({ eventName, args, element }) => {\n    // Use the provided element or fallback to window if available\n    if (!element) {\n        if (typeof window !== 'undefined') {\n            element = window\n        } else {\n            throw new Error(\n                '`element` is not provided and `window` is unavailable. Provide a valid element to dispatch the event.'\n            )\n        }\n    }\n\n    let event\n    if (args) {\n        event = new CustomEvent(eventName, { detail: args, bubbles: true })\n    } else {\n        if (typeof Event === 'function') {\n            event = new Event(eventName)\n        } else {\n            event = document.createEvent('Event')\n            event.initEvent(eventName, true, true)\n        }\n    }\n    element.dispatchEvent(event)\n}\n\nexport const readEvent = e => {\n    if (!e.detail) {\n        return\n    }\n    return e.detail\n}\n","export const MAX_WIDTH_CONTAINER = 1160\n\nexport const BREAKPOINT_XL = 1920\nexport const BREAKPOINT_TABLET = 1024\nexport const BREAKPOINT_L = 996\nexport const BREAKPOINT_M = 768\nexport const BREAKPOINT_S = 750\nexport const BREAKPOINT_XS = 375\n\nexport const CTA_PRIMARY = 'primary'\nexport const CTA_PRIMARY_TRANSPARENT = 'primary_transparent'\nexport const CTA_SUBTLE = 'subtle'\nexport const CTA_LINK = 'link'\nexport const CTA_LINK_UNDERLINE = 'link-underline'\nexport const CTA_LINK_GOLD = 'link-gold'\nexport const CTA_LINK_ADD_TO_CART_SMALL = 'AddToCart_small'\nexport const CTA_LINK_ADD_TO_CART_LARGE = 'AddToCart_large'\n\nexport const EVENT_TAB_CHANGE = 'EVENT_TAB_CHANGE'\n\nexport const EVENT_VIDEO = 'WEB_COMPONENT_VIDEO'\nexport const EVENT_POPIN_OPEN = 'WEB_COMPONENT_POPIN_OPEN'\nexport const EVENT_POPIN_OPENED = 'WEB_COMPONENT_POPIN_OPENED'\nexport const EVENT_POPIN_CLOSE = 'WEB_COMPONENT_POPIN_CLOSE'\nexport const EVENT_POPIN_CLOSED = 'WEB_COMPONENT_POPIN_CLOSED'\nexport const EVENT_POPIN_CLOSE_CLICK = 'WEB_COMPONENT_POPIN_CLOSE_CLICK'\nexport const EVENT_POPIN_KEY_DOWN = 'keydown'\nexport const EVENT_POPIN_FORM_TOGGLE_TITLE = 'WEB_COMPONENT_POPIN_FORM_TOGGLE_TITLE'\nexport const EVENT_CTA_CLICK = 'WEB_COMPONENT_CTA_CLICK'\nexport const EVENT_HERO_REORDER_OPEN = 'WEB_COMPONENT_HERO_REORDER_OPEN'\nexport const EVENT_HERO_REORDER_CLOSE = 'WEB_COMPONENT_HERO_REORDER_CLOSE'\nexport const EVENT_QUICKVIEW_OPEN = 'WEB_COMPONENT_QUICKVIEW_OPEN'\nexport const EVENT_QS_OPEN = 'WEB_COMPONENT_QS_OPEN'\nexport const EVENT_QS_OPENED = 'WEB_COMPONENT_QS_OPENED'\nexport const EVENT_QS_CLOSE = 'WEB_COMPONENT_QS_CLOSE'\nexport const EVENT_QS_CLOSED = 'WEB_COMPONENT_QS_CLOSED'\nexport const EVENT_QS_CLOSE_CLICK = 'WEB_COMPONENT_QS_CLOSE_CLICK'\nexport const EVENT_QS_KEY_DOWN = 'keydown'\nexport const EVENT_ADD_TO_CART = 'WEB_COMPONENT_ADD_TO_CART'\nexport const EVENT_CART_UPDATED = 'WEB_COMPONENT_CART_UPDATED'\nexport const EVENT_VIDEO_TOGGLE = 'WEB_COMPONENT_VIDEO_TOGGLE'\nexport const VIDEO_ON_HOVER = 'VIDEO_ON_HOVER'\nexport const VIDEO_ON_OUT = 'VIDEO_ON_OUT'\nexport const EVENT_DETAIL_OPEN = 'WEB_COMPONENT_DETAIL_OPEN'\nexport const EVENT_SLIDER_READY = 'WEB_COMPONENT_SLIDER_READY'\nexport const EVENT_SLIDE_CHANGE = 'WEB_COMPONENT_SLIDE_CHANGE'\nexport const EVENT_OVERLAY_OPEN = 'WEB_COMPONENT_OVERLAY_OPEN'\nexport const EVENT_OVERLAY_CLOSE = 'WEB_COMPONENT_OVERLAY_CLOSE'\nexport const EVENT_OVERLAY_CLICKED = 'WEB_COMPONENT_OVERLAY_CLICKED'\nexport const EVENT_OPEN_PRODUCT_AR_CLICKED = 'OPEN_PRODUCT_AR_CLICKED'\nexport const EVENT_SORT_BY_CHANGE = 'WEB_COMPONENT_SORT_BY_CHANGE'\n\nexport const EVENT_BUBBLE_SELECTED = 'EVENT_BUBBLE_SELECTED'\nexport const EVENT_RECO_TOOL_OPTION_CLICKED = 'EVENT_RECO_TOOL_OPTION_CLICKED'\nexport const WEB_COMPONENT_PROJECTS_LOADED = 'WEB_COMPONENT_PROJECTS_LOADED'\nexport const WEB_COMPONENT_ANCHOR_LOADED = 'WEB_COMPONENT_ANCHOR_LOADED'\n\nexport const EVENT_SWIPED_UP = 'swiped-up'\nexport const EVENT_SWIPED_DOWN = 'swiped-down'\nexport const EVENT_SWIPED_LEFT = 'swiped-left'\nexport const EVENT_SWIPED_RIGHT = 'swiped-right'\n\nexport const EVENT_HEADER_POSITION_CHANGED = 'EVENT_HEADER_POSITION_CHANGED'\n\nexport const keys = { ESC: 'Escape' }\n\nexport const ADD_TO_CART_MODIFIER_MINI = 'mini'\nexport const ADD_TO_CART_MODIFIER_DEFAULT = ADD_TO_CART_MODIFIER_MINI\n\nexport const COFFEE_ORIGINAL = 'original'\nexport const COFFEE_VERTUO = 'vertuo'\nexport const COFFEE_PRO = 'pro'\nexport const COFFEE_OL = 'OL'\nexport const COFFEE_VL = 'VL'\nexport const INTENSITY_MAX_OL = 14\nexport const INTENSITY_MAX_VL = 12\nexport const DEFAULT_BUBBLE_ICON = ''\n\nexport const NUMBER_PRODUCTS_SLIDER = 8\nexport const NUMBER_FEATURES_PDP = 8\n\nexport const ALIGNMENT = ['center', 'left', 'right']\nexport const POSITION = ['top', 'right', 'bottom', 'left']\nexport const TRANSLATION_ADD_TO_CART = 'Add to cart'\nexport const TRANSLATION_UPDATE_BASKET = 'Update basket'\n\nexport const TIME_INSTANT = 1\nexport const TIME_FAST = 300\nexport const TIME_MEDIUM = 600\nexport const TIME_SLOW = 1200\n\nexport const APP_APPLE_LINK = {\n    default: 'https://apps.apple.com/us/app/nespresso/id342879434',\n    us: 'https://apps.apple.com/us/app/nespresso-new/id1609639566',\n    uk: 'https://apps.apple.com/gb/app/nespresso-new/id1609639566',\n    kr: 'https://apps.apple.com/kr/app/%EB%84%A4%EC%8A%A4%ED%94%84%EB%A0%88%EC%86%8C-%EB%B6%80%ED%8B%B0%ED%81%AC/id1609639566'\n}\nexport const APP_ANDROID_LINK =\n    'https://play.google.com/store/apps/details?id=com.nespresso.activities'\nexport const APP_HUAWEI_LINK = 'https://appgallery.huawei.com/app/C102571517'\n\nexport const SRC_PAGE_PLP = 'plp'\nexport const SRC_PAGE_PDP = 'pdp'\n\nexport const PLP_TYPE_COFFEE = 'coffee'\nexport const PLP_TYPE_MACHINE = 'machine'\nexport const PLP_TYPE_ACCESSORY = 'accessory'\nexport const CALLEO_API_DOMAIN = 'https://www.contact.nespresso.com/'\n\n// SCSS RELATED\n// Todo : should be shared by JS and SCSS\nexport const BROWSER_CONTEXT = 16 // 1rem = 16px\nexport const COLOR_WHITE_1000 = '#FFFFFF' // Do not change for #FFF shortcut, it will break slider-natural gradients !\n\nexport const CONTRAST_DARK = 'dark'\nexport const CONTRAST_LIGHT = 'light'\n\nexport const B2B_CONTACT_FORM_POPIN_ID = 'b2b-contact-form-popin-id'\nexport const B2B_CONTACT_FORM_POPIN_SRC_SEARCH = 'coveo-search'\n\nexport const B2B_CONTACT_FORM_POPIN_SRC_SKU_MAIN_INFO = 'sku-main-info'\n\nexport const B2B_CONTACT_FORM_POPIN_SRC_SKU_MAIN_INFO_AUTO = 'sku-main-info-auto'\n\nexport const ASPECT_RATIO_16_9 = '16/9'\nexport const ASPECT_RATIO_1_1 = '1/1'\n\nexport const NESPRESSO_PRODUCTION_DOMAIN = 'https://www.nespresso.com'\nexport const NESPRESSO_ROLLOUT_DOMAIN = 'https://nc2-env-rollout.nespresso.com'\n\nexport const EVENT_QUIZ_ON_GO_BACK = 'WEB_COMPONENT_EVENT_QUIZ_ON_GO_BACK'\nexport const EVENT_QUIZ_SUBMIT = 'WEB_COMPONENT_EVENT_QUIZ_SUBMIT'\n","import { BREAKPOINT_M, BREAKPOINT_TABLET } from '@kissui/components'\n\nconst viewport = () => {\n    const lt = (ref: number) => {\n        return window.innerWidth < ref\n    }\n\n    return {\n        get is() {\n            const { innerWidth: vw, devicePixelRatio } = window\n            return {\n                mobile: vw < BREAKPOINT_M,\n                mobile_tablet: vw < BREAKPOINT_TABLET,\n                tablet: vw >= BREAKPOINT_M && vw < BREAKPOINT_TABLET,\n                desktop: vw >= BREAKPOINT_TABLET && devicePixelRatio <= 1,\n                retina: vw >= BREAKPOINT_TABLET && devicePixelRatio > 1\n            }\n        },\n        lt\n    }\n}\n\nconst helper = viewport()\n\nexport default helper\n","export { waitForSelector } from './waitForSelector'\n\nexport const constants = {\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40,\n    ESC: 27,\n    SPACE: 32,\n    ENTER: 13,\n    TAB: 9\n}\n\nexport function capitalize(s = '') {\n    return s[0].toUpperCase() + s.slice(1)\n}\n\nexport const convertToCamelCase = (str: string): string => {\n    const arr = str.match(/[a-z]+|\\d+/gi)\n    if (!arr) { return str }\n    return arr.map((m, i) => {\n        let low = m.toLowerCase()\n        if (i !== 0) {\n            low = low.split('').map((s, k) => (k === 0 ? s.toUpperCase() : s)).join(\"\")\n        }\n        return low\n    }).join(\"\")\n}\n\nexport function slug(s = '') {\n    return s\n        .toLowerCase()\n        .trim()\n        .replace(/\\s+/g, '-') // Replace spaces with -\n        .replace(/[^\\w-]+/g, '') // Remove all non-word chars\n        .replace(/--+/g, '-') // Replace multiple - with single -\n}\n\nexport function pxToEm(target: number, stripedInnerFontSize = 1) {\n    return target / 14 / stripedInnerFontSize + 'em'\n}\n\nexport function percent(target: number) {\n    return target + '%'\n}\n\nexport function parseHTML(str: string) {\n    const tmp = document.implementation.createHTMLDocument('')\n    tmp.body.innerHTML = str\n    return tmp.body.childNodes\n}\n\nexport function stripHTML(str: string) {\n    const tmp = document.implementation.createHTMLDocument('')\n    tmp.body.innerHTML = str\n    return (tmp.body.textContent ?? \"\").replace(RegExp('[\\\\s|\\'|\"]', 'g'), '')\n}\n\nexport function makeId(length: number) {\n    var result = ''\n    var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n    var charactersLength = characters.length\n    for (var i = 0; i < length; i++) {\n        result += characters.charAt(Math.floor(Math.random() * charactersLength))\n    }\n    return result\n}\n\nexport function removeEmptyValues(obj: { [key: string]: any }): { [key: string]: any } {\n    const findText = [\n        'Default campaign ID (tracking missing in Page Builder export)',\n        'Default campaign name (tracking missing in Page Builder export)',\n        'promoname', \n        'promoid', \n        'promocreative', \n        'undefined'\n    ];\n    \n    for (let key in obj) {\n        const value = obj[key];\n        \n        if (value === null || value === undefined || value === '') {\n            delete obj[key];\n            continue;\n        }\n        \n        if (typeof value === 'string') {\n            for (const text of findText) {\n                if (value.includes(text)) {\n                    delete obj[key];\n                    break;\n                }\n            }\n        }\n    }\n    \n    return obj;\n}\n\nexport function makeHash(str: string) {\n    var hash = 0,\n        i,\n        chr\n    if (!str) {\n        return hash\n    }\n    for (i = 0; i < str.length; i++) {\n        chr = str.charCodeAt(i)\n        hash = (hash << 5) - hash + chr\n        hash |= 0 // Convert to 32bit integer\n    }\n    return 'id-' + hash\n}\n\nexport function getHashLink(link: string) {\n    let linkHash = link\n    let linkNoHash = link\n    if (link.indexOf('#') !== -1) {\n        linkNoHash = link.replace('#', '')\n    } else {\n        linkHash = '#' + link\n    }\n\n    return { linkNoHash, linkHash }\n}\n\nexport function lazyLoad(node: Element, attribute: string, value: any, url: string) {\n    const CLASSNAME_OUT_OF_SCREEN = 'lazy-load'\n    const CLASSNAME_IN_SCREEN = 'lazy-loaded'\n    const CLASSNAME_ON_ERROR = 'lazy-loaded-error'\n\n    const isOldIOS = () => {\n        var agent = window.navigator.userAgent,\n            start = agent.indexOf('OS ')\n        if ((agent.indexOf('iPhone') > -1 || agent.indexOf('iPad') > -1) && start > -1) {\n            return window.Number(agent.substr(start + 3, 3).replace('_', '.')) < 14\n        }\n        return false\n    }\n\n    const inViewPort = (attribute: string, value: any) => {\n        node.setAttribute(attribute, value)\n\n        const cb = () => node.classList.add(CLASSNAME_IN_SCREEN)\n\n        if (url) {\n            const img = new Image()\n            img.src = url\n            img.onload = cb\n            img.onerror = () => {\n                cb()\n                node.classList.add(CLASSNAME_ON_ERROR)\n                throw new Error(`Image ${url} cannot be loaded`)\n            }\n\n            return\n        }\n\n        cb()\n    }\n\n    if (/Trident\\/|MSIE/.test(window.navigator.userAgent) || isOldIOS()) {\n        inViewPort(attribute, value)\n    } else {\n        if ('IntersectionObserver' in window) {\n            node.classList.add(CLASSNAME_OUT_OF_SCREEN)\n            let lazyBackgroundObserver = new IntersectionObserver(function (entries) {\n                entries.forEach(function (entry) {\n                    if (entry.isIntersecting) {\n                        inViewPort(attribute, value)\n                        lazyBackgroundObserver.unobserve(entry.target)\n                    }\n                })\n            })\n            lazyBackgroundObserver.observe(node)\n        } else {\n            inViewPort(attribute, value)\n        }\n    }\n}\n\nexport function lazyLoadCallback(node: Element, cb: () => void) {\n    const isOldIOS = () => {\n        var agent = window.navigator.userAgent,\n            start = agent.indexOf('OS ')\n        if ((agent.indexOf('iPhone') > -1 || agent.indexOf('iPad') > -1) && start > -1) {\n            return window.Number(agent.substr(start + 3, 3).replace('_', '.')) < 14\n        }\n        return false\n    }\n\n    if (/Trident\\/|MSIE/.test(window.navigator.userAgent) || isOldIOS()) {\n        cb()\n    } else {\n        if ('IntersectionObserver' in window) {\n            let lazyBackgroundObserver = new IntersectionObserver(\n                function (entries) {\n                    entries.forEach(function (entry) {\n                        if (entry.isIntersecting) {\n                            cb()\n                            lazyBackgroundObserver.unobserve(entry.target)\n                        }\n                    })\n                },\n                { rootMargin: '150% 0px' }\n            )\n            lazyBackgroundObserver.observe(node)\n        }\n    }\n}\n\n// Debounce\nexport function debounce<T>(func: (v: T) => void, time = 100) {\n    let timer: number\n    return function (event: T) {\n        if (timer) {\n            window.clearTimeout(timer)\n        }\n        timer = window.setTimeout(func, time, event)\n    }\n}\n\n// isIE - to check for internet explorer\nexport function isIE() {\n    let ua = window.navigator.userAgent,\n        isIE = /MSIE|Trident/.test(ua)\n\n    return isIE\n}\n\n// Load external script\nexport const loadExternalScript = ({\n    src,\n    callback = null,\n    async = false,\n    defer = false,\n    module = false,\n    id = ''\n}: {\n    src: string;\n    callback: null | GlobalEventHandlers[\"onload\"]\n    module: boolean,\n    defer: boolean,\n    async: boolean,\n    id: string\n}) => {\n    const script = document.createElement('script')\n    script.type = module ? 'module' : 'text/javascript'\n    script.src = src\n    id ? (script.id = id) : false // add id attribute only if passed\n    if (typeof callback === 'function') {\n        script.onload = callback\n    }\n    script.async = async\n    script.defer = defer\n    document.body.appendChild(script)\n}\n\n// Load external css\nexport const loadExternalCss = ({ src }: { src: string }) => {\n    const script = document.createElement('link')\n    script.rel = 'stylesheet'\n    script.href = src\n    document.body.appendChild(script)\n}\n// Lazy load vendor script\nexport const lazyLoadVendorScript = (handler, el) => {\n    const observer = new IntersectionObserver(handler)\n    observer.observe(el)\n}\n\n/**\n * Replaces variable inside a given string\n * Each variable have to be enclosed between stChr and enChr\n * The values have to be contained in the vars object, they key must match\n * example :\n * txt : 'See {resultsLength} Results'\n * vars : {resultsLength:'30'}\n * stChr : '{'\n * enChr : '}'\n *\n * will return : 'See 30 Results'\n *\n * @param {string} txt\n * @param {object} vars\n * @param {string} stChr\n * @param {string} enChr\n */\nexport function interpolate(txt: string, vars: Record<string, null | undefined | string>, stChr: string, enChr: string) {\n    let curIdx = 0\n\n    while (txt) {\n        const stIdx = txt.indexOf(stChr, curIdx)\n        if (stIdx === -1) {\n            break\n        }\n        const enIdx = txt.indexOf(enChr, stIdx + 1)\n        if (enIdx === -1) {\n            break\n        }\n        const hashId = txt.substring(stIdx + stChr.length, enIdx)\n        if (vars[hashId] != null) {\n            txt = txt.substr(0, stIdx) + vars[hashId] + txt.substr(enIdx + enChr.length)\n            curIdx = stIdx\n        } else {\n            curIdx = enIdx\n        }\n    }\n    return txt\n}\n\n/**\n * Find in container element, add height to equal size of element\n * @param container css path where my element is contain e.g. `.c-container`\n * @param el css path of elements to equalized\n */\nexport const equalHeight = (containerSelector: string, el: string, elementScope: HTMLElement) => {\n    const container = elementScope.querySelector<HTMLElement>(containerSelector)\n    if (!container) {\n        return\n    }\n\n    const items = container.querySelectorAll<HTMLElement>(el)\n    let max = -1\n\n    for (let i = 0; i < [...items].length; i++) {\n        const item = [...items][i]\n        let h = item.offsetHeight\n        max = h > max ? h : max\n    }\n\n    if (max <= 0) {\n        return\n    }\n\n    for (let i = 0; i < [...items].length; i++) {\n        const item = [...items][i]\n        item.style.height = `${max}px`\n    }\n}\n\nexport const stringifyCurlyQuote = (data: {}) => JSON.stringify(data).replace(\"'\", '’')\n\nexport const stringifyForAttribute = (data = {}) => {\n    return escapeHtml(JSON.stringify(data))\n}\n\n/**\n * This function is included instead of sanitizeString because for\n * inserting HTML into innerHTML we need to make sure all HTML\n * entities are escaped.\n */\nexport const escapeHtml = (text: string) => {\n    const map = {\n        '&': '&amp;',\n        '<': '&lt;',\n        '>': '&gt;',\n        '\"': '&quot;',\n        \"'\": '&#039;'\n    } as { [s: string]: string }\n\n    return text.replace(/[&<>\"']/g, (m) => map[m])\n}\n\n/**\n * Because setting attributes escapes more than the characters above and then preact also\n * escapes text we need a more complete way of unescaping all html entities (not just the ones\n * above)\n */\nconst domParser = new DOMParser()\nexport const unescapeHtml = (text: string) => {\n    return domParser.parseFromString(text, \"text/html\").body.textContent\n}\n\nexport const sanitizeString = (data: {}) => {\n    if (!data) {\n        return ''\n    }\n\n    return data.toString().replace(/\"/g, '&quot;').replace(/'/g, '&apos;')\n}\n\nexport const stripTags = (s: string) => {\n    return (s || '').replace(/(<([^>]+)>)/gi, '')\n}\n\nexport const setAttributes = (element: Element, attrs: Record<string, any>) => {\n    for (let key in attrs) {\n        element.setAttribute(key, attrs[key])\n    }\n    return element\n}\n\nexport const getMetaContent = (metaName: string) => {\n    const metaTag = document.querySelector(`meta[name=${metaName}]`)\n    if (!metaTag) {\n        return ''\n    }\n    return metaTag.getAttribute('content')\n}\n\nexport const isObjectEmpty = (obj: {}) => {\n    return Object.keys(obj).length === 0\n}\n","import { VIDEO_SERVICE_YOUKU, VIDEO_SERVICE_YOUTUBE, VIDEO_SERVICE_LOCAL } from './constants.mjs'\nimport PlayerYoutube from '@kissui/helpers/src/playerYoutube'\nimport PlayerYouku from '@kissui/helpers/src/playerYouku'\nimport './components/youtube-overlay'\n\nimport { readEvent } from '@kissui/helpers/src/assets/js/eventDispatch'\nimport {\n    EVENT_VIDEO,\n    EVENT_POPIN_CLOSED,\n    EVENT_POPIN_OPENED,\n    EVENT_VIDEO_TOGGLE,\n    VIDEO_ON_HOVER,\n    VIDEO_ON_OUT\n} from '@kissui/components'\nimport viewportHelper from '@kissui/helpers/src/viewport.helpers'\nimport createProps from '@kissui/helpers/src/props.helpers'\nimport { setAttributes } from '@kissui/helpers/src/utils'\n\nclass Video extends HTMLElement {\n    #percentThresholds = [25, 50, 75, 90]\n    #lastTrackedThreshold = 0\n    #progressInterval\n    #eventCategory = 'User Engagement'\n\n    constructor() {\n        super()\n\n        this.videoId = null\n        this.videoMobile = null\n        this.currentVideo = null\n        this.videoService = ''\n        this.containerId = ''\n        this.ccPolicyLanguage = null\n        this.ccPolicyCountry = null\n        this.ccLoadPolicy = null\n        this.displayControls = 0 // not display by default\n        this.disabledKeyboard = 1 // disabled by default\n        this.isBackground = false\n        this.autoPlay = 0\n        this.loop = 0\n        this.mute = 'false'\n        this.playOnHover = 'false'\n        this.allowPopinAutoplay = false\n\n        this.isPlaying = false\n\n        this.play = null\n        this.pause = null\n        this.stop = null\n        this.moveTo = null\n\n        this.loadInterupted = null\n        this.controlsReady = null\n        this.overlayElement = null\n\n        this._externalControl = this._externalControl.bind(this)\n    }\n\n    connectedCallback() {\n        const { video_id, video_mobile, container_id, video_service, auto_play } = createProps(\n            this.attributes\n        )\n        this.videoId = video_id || this.videoId\n        this.videoMobile = video_mobile || this.videoMobile\n        this.containerId = container_id || this.containerId\n        this.videoService = video_service || this.videoService\n        this.currentVideo =\n            viewportHelper.is.mobile && this.videoMobile !== '' && this.videoMobile !== null\n                ? this.videoMobile\n                : this.videoId\n\n        this.getAttributes(auto_play)\n        this.init()\n    }\n\n    getAttributes(auto_play) {\n        this.popinId = this.getAttribute('popin_id') || this.popinId\n        this.ccPolicyLanguage = this.getAttribute('ccPolicy_language') || this.ccPolicyLanguage\n        this.ccPolicyCountry = this.getAttribute('ccPolicy_country') || this.ccPolicyCountry\n        this.ccLoadPolicy = this.getAttribute('cc_load_policy') || this.ccLoadPolicy\n        this.displayControls =\n            parseInt(this.getAttribute('display_controls')) || this.displayControls\n        this.isBackground = this.getAttribute('is_background') === 'true' || this.isBackground\n        this.autoPlay = this.getAttribute('auto_play') === 'true' || auto_play ? 1 : this.autoPlay\n        this.loop = this.getAttribute('loop') === 'true' ? 1 : this.loop\n        this.mute = this.getAttribute('mute') || this.mute\n        this.playOnHover = this.getAttribute('play_on_hover') || this.playOnHover\n        this.allowPopinAutoplay =\n            this.getAttribute('allow_popin_autoplay') === 'true' || this.allowPopinAutoplay\n    }\n\n    init() {\n        this.unbindEvent()\n\n        if (this.popinId !== '') {\n            this.setPopinEvents()\n        }\n\n        if (this.playOnHover === 'true') {\n            this.setHoverEvents()\n        }\n\n        if (this.currentVideo) {\n            this.render()\n\n            if (this.videoService === VIDEO_SERVICE_LOCAL) {\n                this.initLocal()\n            } else {\n                this.initServiceVideo()\n            }\n\n            this.boundExternalControl = this._externalControl.bind(this)\n            window.addEventListener(EVENT_VIDEO + this.containerId, this.boundExternalControl)\n        }\n    }\n\n    initServiceVideo() {\n        if (!this.controlsReady) {\n            if (this.videoService === VIDEO_SERVICE_YOUKU) {\n                this.initYouku()\n            } else {\n                this.initYoutubeOverlay()\n            }\n        }\n    }\n\n    setPopinEvents() {\n        this.boundOnPopinClosed = this.onPopinClosed.bind(this)\n        window.addEventListener(EVENT_POPIN_CLOSED, this.boundOnPopinClosed)\n        this.boundOnPopinOpened = this.onPopinOpened.bind(this)\n        window.addEventListener(EVENT_POPIN_OPENED, this.boundOnPopinOpened)\n        this.boundOnTogglePlayback = this.onTogglePlayback.bind(this)\n        window.addEventListener(EVENT_VIDEO_TOGGLE, this.boundOnTogglePlayback)\n    }\n\n    setHoverEvents() {\n        this.boundOnHover = this.onHover.bind(this)\n        window.addEventListener(VIDEO_ON_HOVER, this.boundOnHover)\n        this.boundOnOut = this.onOut.bind(this)\n        window.addEventListener(VIDEO_ON_OUT, this.boundOnOut)\n    }\n\n    popinValid(id) {\n        return this.popinId !== undefined && this.popinId !== '' && id === this.popinId\n    }\n\n    async onPopinOpened(e) {\n        if (!this.allowPopinAutoplay || !this.popinValid(e.detail.id)) {\n            return\n        }\n\n        // YouTube: hide lazy-overlay and init video on popin open\n        // YouTube: prevent recreating player when popin closed & reopened\n        if (this.videoService === VIDEO_SERVICE_YOUTUBE && !this.controlsReady) {\n            this.initYoutube()\n            return\n        }\n\n        await this.controlsReady\n        this.play()\n    }\n\n    async onPopinClosed(e) {\n        if (this.popinValid(e.detail.id)) {\n            await this.controlsReady\n\n            this.videoService === VIDEO_SERVICE_YOUTUBE ? this.stop() : this.pause()\n        }\n    }\n    async onHover(e) {\n        if (e.detail.id === this.containerId) {\n            await this.controlsReady\n            this.mute()\n            this.play()\n            this.loop = 1\n        }\n    }\n    async onOut(e) {\n        if (e.detail.id === this.containerId) {\n            await this.controlsReady\n            this.stop()\n        }\n    }\n\n    async onTogglePlayback(e) {\n        if (this.popinValid(e.detail.id)) {\n            await this.controlsReady\n            if (this.isPlaying) {\n                this.pause()\n            } else {\n                this.play()\n            }\n        }\n    }\n\n    initYouku() {\n        // Todo : Youku is not playing on mobile\n        // Todo : to CSS display is not good\n        const self = this\n        const _YkPlayer = new PlayerYouku()\n\n        this.controlsReady = new Promise((resolve, reject) => {\n            this.loadInterupted = reject\n            _YkPlayer\n                .attach(this.containerId, this.currentVideo, this.isBackground, this.autoPlay)\n                .then(player => {\n                    self.play = () => {\n                        player.playVideo()\n                    }\n                    self.pause = () => player.pauseVideo()\n                    self.stop = () => {\n                        player.pauseVideo()\n                    }\n\n                    window.addEventListener(\n                        'message',\n                        function (e) {\n                            const { msg, stateParam } = e.data\n\n                            if (msg == 'state') {\n                                if (stateParam === 'play') {\n                                    self.isPlaying = true\n                                } else if (stateParam === 'pause' || stateParam === 'stop') {\n                                    self.isPlaying = false\n                                }\n                            }\n                        },\n                        false\n                    )\n                })\n                .finally(() => resolve())\n        })\n    }\n\n    initYoutubeOverlay() {\n        if (this.autoPlay) {\n            this.initYoutube()\n            return\n        }\n\n        this.overlayElement = document.createElement('nb-youtube-overlay')\n        setAttributes(this.overlayElement, { video_id: this.currentVideo })\n        this.appendChild(this.overlayElement)\n        this.overlayElement.addEventListener('click', () => this.initYoutube())\n    }\n\n    initYoutube() {\n        const _YtPlayer = new PlayerYoutube()\n\n        const additionalParams = {\n            color: '#8F7247',\n            controls: this.displayControls,\n            disablekb: this.disabledKeyboard,\n            fs: 1\n        }\n\n        if (this.loop) {\n            additionalParams.loop = this.loop\n            additionalParams.controls = 0\n            additionalParams.playlist = this.currentVideo\n        }\n\n        if (this.ccPolicyLanguage !== null) {\n            Object.assign(additionalParams, {\n                cc_load_policy: this.ccLoadPolicy || 1,\n                cc_lang_pref: this.ccPolicyLanguage\n            })\n        }\n\n        this.controlsReady = new Promise((resolve, reject) => {\n            this.loadInterupted = reject\n            _YtPlayer\n                .attach(\n                    this.containerId,\n                    this.currentVideo,\n                    this.isBackground,\n                    this.autoPlay,\n                    additionalParams\n                )\n                .then(player => {\n                    this.play = () => player.playVideo()\n                    this.pause = () => player.pauseVideo()\n                    this.mute = () => player.mute()\n                    this.unMute = () => player.unMute()\n                    this.stop = () => player.stopVideo()\n                    this.moveTo = (time = 0) => player.seekTo(time, true)\n\n                    player.addEventListener('onStateChange', event =>\n                        this.onYoutubePlayerStateChange(player, event)\n                    )\n\n                    this.play()\n\n                    if (this.overlayElement) {\n                        this.overlayElement.removeEventListener('click', () => this.initYoutube())\n                        this.overlayElement.remove()\n                    }\n                })\n                .finally(() => resolve())\n        })\n    }\n\n    onYoutubePlayerStateChange(player, event) {\n        if (!player || !event || !window.YT) {\n            return\n        }\n\n        const { PlayerState } = window.YT\n        const { videoTitle } = player\n        // -1 – unstarted\n        // 0 – ended\n        // 1 – playing\n        // 2 – paused\n        // 3 – buffering\n        // 5 – video cued\n        const state = event.data\n        window.gtmDataObject = window.gtmDataObject || []\n\n        if (state === PlayerState.PLAYING) {\n            this.isPlaying = true\n\n            window.gtmDataObject.push({\n                event: 'video_playing',\n                eventCategory: this.#eventCategory,\n                eventAction: 'YouTube Video - Play',\n                eventLabel: videoTitle,\n                videoTitle\n            })\n\n            // Track video progress every second\n            this.#progressInterval = setInterval(() => {\n                this.trackVideoProgress(player, event)\n            }, 1000)\n        } else if (state === PlayerState.PAUSED) {\n            this.isPlaying = false\n\n            window.gtmDataObject.push({\n                event: 'video_paused',\n                eventCategory: this.#eventCategory,\n                eventAction: 'YouTube Video - Pause',\n                eventLabel: videoTitle,\n                videoTitle\n            })\n        } else if (state === PlayerState.ENDED) {\n            window.gtmDataObject.push({\n                event: 'video_ended',\n                eventCategory: this.#eventCategory,\n                eventAction: 'YouTube Video - Complete',\n                eventLabel: `Video - Complete - ${videoTitle}`,\n                videoTitle\n            })\n            clearInterval(this.#progressInterval)\n        }\n    }\n\n    trackVideoProgress(player, event) {\n        const { PlayerState } = window.YT\n        const { videoTitle, playerInfo } = player\n        const state = event.data\n\n        if (playerInfo?.duration && playerInfo?.currentTime) {\n            const percentWatched = (playerInfo.currentTime / playerInfo.duration) * 100\n\n            for (let threshold of this.#percentThresholds) {\n                if (\n                    state === PlayerState.PLAYING &&\n                    percentWatched >= threshold &&\n                    this.#lastTrackedThreshold < threshold\n                ) {\n                    window.gtmDataObject.push({\n                        event: 'video_progress',\n                        eventCategory: this.#eventCategory,\n                        eventAction: 'YouTube Video - Progress',\n                        eventLabel: `Video - Watched ${threshold}% - ${videoTitle}`,\n                        percentWatched: threshold,\n                        videoTitle\n                    })\n                    this.#lastTrackedThreshold = threshold\n                }\n            }\n        }\n    }\n\n    initLocal() {\n        const video = document.getElementById(this.containerId)\n        this.play = () => video.play()\n        this.pause = () => video.pause()\n    }\n\n    renderVideo() {\n        if (this.videoService === VIDEO_SERVICE_LOCAL) {\n            const autoPlay = this.autoPlay === 1 ? 'true' : 'false'\n            const loop = this.loop === 1 ? 'true' : 'false'\n\n            return `\n                <video autoplay=\"${autoPlay}\" muted=\"${this.mute}\" loop=\"${loop}\" id=\"${\n                this.containerId\n            }\" ${this.displayControls === 1 ? `controls=\"true\"` : ''}>\n                    <source src=\"${this.currentVideo}\" type=\"video/mp4\">\n                </video>\n            `\n        }\n\n        return `<div id=\"${this.containerId}\"></div>`\n    }\n\n    render() {\n        this.innerHTML = `${this.renderVideo()}`\n    }\n\n    _externalControl(e) {\n        const event = readEvent(e)\n        const { action, time = null } = event\n\n        switch (action) {\n            case 'play':\n                this.play()\n                break\n            case 'pause':\n                this.pause()\n                break\n            case 'mute':\n                this.mute()\n                break\n            case 'unmute':\n                this.unMute()\n                break\n            case 'stop':\n                this.stop()\n                break\n            case 'moveTo':\n                this.moveTo(time)\n                break\n            default:\n        }\n    }\n\n    unbindEvent() {\n        if (this.popinId !== '') {\n            window.removeEventListener(EVENT_POPIN_CLOSED, this.boundOnPopinClosed)\n            window.removeEventListener(EVENT_POPIN_OPENED, this.boundOnPopinOpened)\n            window.removeEventListener(EVENT_VIDEO_TOGGLE, this.boundOnTogglePlayback)\n        }\n\n        if (this.playOnHover === 'true') {\n            window.removeEventListener(VIDEO_ON_HOVER, this.boundOnHover)\n            window.removeEventListener(VIDEO_ON_OUT, this.boundOnOut)\n        }\n\n        if (this.currentVideo !== '') {\n            window.removeEventListener(EVENT_VIDEO + this.containerId, this.boundExternalControl)\n        }\n\n        if (this.loadInterupted) {\n            this.loadInterupted()\n            this.loadInterupted = null\n        }\n\n        if (this.overlayElement) {\n            this.overlayElement.removeEventListener('click', () => this.initYoutube())\n        }\n    }\n\n    disconnectedCallback() {\n        this.unbindEvent()\n    }\n}\n\ncustomElements.get('nb-video') || customElements.define('nb-video', Video)\n\nexport default Video\n"],"names":["VIDEO_SERVICE_YOUTUBE","VIDEO_SERVICE_LOCAL","getScript","source","asyncLoad","defer","Promise","resolve","reject","document","querySelector","script","createElement","prior","getElementsByTagName","async","addEventListener","Error","src","parentNode","insertBefore","Deferred","constructor","this","promise","getMarketCode","dataLayer","window","padlNamespace","app","market","toLocaleLowerCase","PlayerYoutube","iframeApi","deferred","YT","Player","onYouTubeIframeAPIReady","then","ready","initYouTubeIframeAPI","attach","iframeContainer","videoId","isBackgroundVideoPlaying","isAutoPlay","moreParams","params","playlist","controls","loop","player","host","playerVars","enablejsapi","rel","fs","autoplay","events","onReady","mute","onStateChange","onError","outerWidth","el","style","getComputedStyle","width","getPropertyValue","marginLeft","marginRight","parseInt","outerHeight","height","marginTop","marginBottom","PlayerYouku","iframeContainerId","container","getElementById","YKU","styleid","client_id","vid","newPlayer","show_related","onPlayerReady","onPlayStart","onPlay","onPlayEnd","onPause","onWaiting","onFullScreen","onPlayError","createProps","attributes","data","find","attribute","nodeName","getData","props","filter","reduce","all","attr","nodeValue","isNil","JSON","parse","error","console","log","obj","YoutubeOverlay","HTMLElement","connectedCallback","video_id","render","setAttribute","backgroundImage","innerHTML","customElements","get","define","BREAKPOINT_TABLET","EVENT_VIDEO","EVENT_POPIN_OPENED","EVENT_POPIN_CLOSED","EVENT_VIDEO_TOGGLE","VIDEO_ON_HOVER","VIDEO_ON_OUT","helper","is","innerWidth","vw","devicePixelRatio","mobile","mobile_tablet","tablet","desktop","retina","lt","ref","DOMParser","Video","__privateAdd","_percentThresholds","_lastTrackedThreshold","_progressInterval","_eventCategory","videoMobile","currentVideo","videoService","containerId","ccPolicyLanguage","ccPolicyCountry","ccLoadPolicy","displayControls","disabledKeyboard","isBackground","autoPlay","playOnHover","allowPopinAutoplay","isPlaying","play","pause","stop","moveTo","loadInterupted","controlsReady","overlayElement","_externalControl","bind","video_mobile","container_id","video_service","auto_play","viewportHelper","getAttributes","init","popinId","getAttribute","unbindEvent","setPopinEvents","setHoverEvents","initLocal","initServiceVideo","boundExternalControl","initYouku","initYoutubeOverlay","boundOnPopinClosed","onPopinClosed","boundOnPopinOpened","onPopinOpened","boundOnTogglePlayback","onTogglePlayback","boundOnHover","onHover","boundOnOut","onOut","popinValid","id","undefined","e","detail","initYoutube","self","_YkPlayer","playVideo","pauseVideo","msg","stateParam","finally","setAttributes","element","attrs","key","appendChild","_YtPlayer","additionalParams","color","disablekb","Object","assign","cc_load_policy","cc_lang_pref","unMute","stopVideo","time","seekTo","event","onYoutubePlayerStateChange","removeEventListener","remove","PlayerState","videoTitle","state","gtmDataObject","PLAYING","push","eventCategory","__privateGet","eventAction","eventLabel","__privateSet","setInterval","trackVideoProgress","PAUSED","ENDED","clearInterval","playerInfo","duration","currentTime","percentWatched","threshold","video","renderVideo","readEvent","action","disconnectedCallback","WeakMap"],"mappings":"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"}