{"version":3,"file":"index.es.min.js","sources":["../../../packages/helpers/src/swipeEvents.ts","../../../packages/helpers/src/props.helpers.js","../../../packages/helpers/src/assets/js/scopedKeyboardNav.js","../../../packages/components/src/constants.mjs","../../../packages/helpers/src/assets/js/eventDispatch.js","../../../packages/components/src/popin/components/overlay.js","../../../packages/helpers/src/viewport.helpers.ts","../../../packages/components/src/popin/popin.js"],"sourcesContent":["/*!\n * swiped-events.js - v@version@\n * Pure JavaScript swipe events\n * https://github.com/john-doherty/swiped-events\n * @inspiration https://stackoverflow.com/questions/16348031/disable-scrolling-when-touch-moving-certain-element\n * @author John Doherty <www.johndoherty.info>\n * @license MIT\n */\n\n// scrollElement has been added as an optional parameter in order to avoid scrolling to fire a swipe\nconst swipeEvents = (window: Window & typeof globalThis, document: Document, stopEl?: HTMLElement) => {\n    if (window.nwcSwipeEvents) {\n        return\n    }\n    window.nwcSwipeEvents = true\n\n    // patch CustomEvent to allow constructor creation (IE/Chrome)\n    // if (typeof window.CustomEvent !== 'function') {\n    //     window.CustomEvent = function(event, params) {\n    //         params = params || {bubbles: false, cancelable: false, detail: undefined}\n    //\n    //         let evt = document.createEvent('CustomEvent')\n    //         evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail)\n    //         return evt\n    //     }\n    //\n    //     window.CustomEvent.prototype = window.Event.prototype\n    // }\n\n    document.addEventListener('touchstart', handleTouchStart, false)\n    document.addEventListener('touchmove', handleTouchMove, false)\n    document.addEventListener('touchend', handleTouchEnd, false)\n\n    let xDown: null | number = null\n    let yDown: null | number = null\n    let xDiff: null | number = null\n    let yDiff: null | number = null\n    let timeDown: null | number = null\n    let startEl: HTMLElement | null = null\n\n    // Variables added for checkScrollConditions\n    let scrollTopArray: number[] = []\n    let scrollLeftArray: number[] = []\n\n    /**\n     * Avoid swipe up or down events to fire by checking the scrollTop position of the optional param scrollEl (scrollable zone)\n     * @param {string} direction - 'up' ,'down', 'left', 'right'\n     * @returns {boolean}\n     */\n    function checkScrollCondition(direction: \"up\" |\"down\" | \"left\" | \"right\", e: TouchEvent) {\n        if (stopEl === undefined) {\n            return true\n        }\n\n        let el = e.target as HTMLElement\n        let result = true\n        let i = 0\n        while (el !== stopEl && result) {\n            if (isScrollable(el)) {\n                switch (direction) {\n                    case 'up':\n                        result = scrollTopArray[i] === el.scrollHeight - el.clientHeight\n                        break\n                    case 'down':\n                        result = scrollTopArray[i] === 0\n                        break\n                    case 'left':\n                        result = scrollLeftArray[i] === el.scrollWidth - el.clientWidth\n                        break\n                    case 'right':\n                        result = scrollLeftArray[i] === 0\n                        break\n                    default:\n                        result = true\n                }\n            }\n            el = el.parentNode as HTMLElement\n            i++\n        }\n        return result\n    }\n\n    function memorizeStartElScrollPositions(el: HTMLElement) {\n        if (stopEl === undefined || !stopEl.contains(el)) {\n            return\n        }\n        scrollTopArray = []\n        scrollLeftArray = []\n        while (el !== stopEl) {\n            scrollTopArray.push(el.scrollTop)\n            scrollLeftArray.push(el.scrollLeft)\n            el = el.parentNode as HTMLElement\n        }\n    }\n\n    function isScrollable(el: HTMLElement) {\n        return el.scrollHeight > el.clientHeight || el.scrollWidth > el.clientWidth\n    }\n\n    /**\n     * Fires swiped event if swipe detected on touchend\n     * @param {object} e - browser event object\n     * @returns {void}\n     */\n    function handleTouchEnd(e: TouchEvent) {\n        // if the user released on a different target, cancel!\n        if (startEl !== e.target) {\n            return\n        }\n\n        // Calculate the data-swipe-threshold to be a percentage of the viewport\n        const defaultVertical = window.innerHeight * 0.25 // 25% of the viewport\n        const defaultHorizontal = window.innerWidth * 0.5 // 50% of the viewport\n\n        let swipeThresholdVertical =\n            getNearestAttribute(startEl!, 'data-swipe-threshold', defaultVertical)\n\n        let swipeThresholdHorizontal =\n            getNearestAttribute(startEl!, 'data-swipe-threshold', defaultHorizontal)\n\n        let swipeTimeout = getNearestAttribute(startEl!, 'data-swipe-timeout', 500) // default 500ms\n        let timeDiff = Date.now() - timeDown!\n        let eventType = ''\n        let changedTouches = e.changedTouches || e.touches || []\n\n        if (Math.abs(xDiff!) > Math.abs(yDiff!)) {\n            // most significant\n            if (Math.abs(xDiff!) > swipeThresholdHorizontal && timeDiff < swipeTimeout) {\n                if (xDiff! > 0) {\n                    if (checkScrollCondition('left', e)) {\n                        eventType = 'swiped-left'\n                    }\n                } else {\n                    if (checkScrollCondition('right', e)) {\n                        eventType = 'swiped-right'\n                    }\n                }\n            }\n        } else if (Math.abs(yDiff!) > swipeThresholdVertical && timeDiff < swipeTimeout) {\n            if (yDiff! > 0) {\n                if (checkScrollCondition('up', e)) {\n                    eventType = 'swiped-up'\n                }\n            } else {\n                if (checkScrollCondition('down', e)) {\n                    eventType = 'swiped-down'\n                }\n            }\n        }\n\n        if (eventType !== '') {\n            let eventData = {\n                dir: eventType.replace(/swiped-/, ''),\n                touchType: (changedTouches[0] as Touch & { touchType: string })?.touchType ?? 'direct', // This is a non standard feature used only by safari\n                xStart: xDown!,\n                xEnd: (changedTouches[0] || {}).clientX || -1,\n                yStart: yDown!,\n                yEnd: (changedTouches[0] || {}).clientY || -1\n            }\n\n            // fire `swiped` event event on the element that started the swipe\n            startEl!.dispatchEvent(\n                new CustomEvent('swiped', { bubbles: true, cancelable: true, detail: eventData })\n            )\n\n            // fire `swiped-dir` event on the element that started the swipe\n            startEl!.dispatchEvent(\n                new CustomEvent(eventType, { bubbles: true, cancelable: true, detail: eventData })\n            )\n        }\n\n        // reset values\n        xDown = null\n        yDown = null\n        timeDown = null\n    }\n\n    /**\n     * Records current location on touchstart event\n     * @param {object} e - browser event object\n     * @returns {void}\n     */\n    function handleTouchStart(e: TouchEvent) {\n        const target = e.target as HTMLElement\n        // if the element has data-swipe-ignore=\"true\" we stop listening for swipe events\n        if (target.getAttribute('data-swipe-ignore') === 'true') {\n            return\n        }\n\n        startEl = target\n        memorizeStartElScrollPositions(startEl)\n\n        timeDown = Date.now()\n        xDown = e.touches[0].clientX\n        yDown = e.touches[0].clientY\n        xDiff = 0\n        yDiff = 0\n    }\n\n    /**\n     * Records location diff in px on touchmove event\n     * @param {object} e - browser event object\n     * @returns {void}\n     */\n    function handleTouchMove(e: TouchEvent) {\n        if (!xDown || !yDown) {\n            return\n        }\n\n        let xUp = e.touches[0].clientX\n        let yUp = e.touches[0].clientY\n\n        xDiff = xDown - xUp\n        yDiff = yDown - yUp\n    }\n\n    /**\n     * Gets attribute off HTML element or nearest parent\n     * @param {object} el - HTML element to retrieve attribute from\n     * @param {string} attributeName - name of the attribute\n     * @param {any} defaultValue - default value to return if no match found\n     * @returns {any} attribute value or defaultValue\n     */\n    function getNearestAttribute(el: HTMLElement, attributeName: string | number, defaultValue: number) {\n        // walk up the dom tree looking for attributeName\n        while (el && el !== document.documentElement) {\n            let attributeValue = el.getAttribute(String(attributeName))\n\n            if (attributeValue) {\n                return parseInt(attributeValue, 10)\n            }\n\n            el = el.parentNode as HTMLElement\n        }\n\n        return defaultValue\n    }\n}\n\nexport default swipeEvents\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","export function recursiveSwitchAriaHidden(elem, componentOpenState) {\n    const parent = elem.parentNode\n    const body = document.getElementsByTagName('body')[0]\n\n    if (parent === body) {\n        return\n    }\n\n    const brothers = parent.children\n    for (const brother of brothers) {\n        if (brother !== elem) {\n            componentOpenState\n                ? brother.setAttribute('aria-hidden', componentOpenState)\n                : brother.removeAttribute('aria-hidden')\n        }\n    }\n    recursiveSwitchAriaHidden(parent, componentOpenState)\n}\n\nexport function focusin(e, el, loop) {\n    if (!el.contains(e.target)) {\n        if (el.lastFocused === el.firstFocusable) {\n            loop ? el.lastFocusable.focus() : el.firstFocusable.focus()\n        } else {\n            loop ? el.firstFocusable.focus() : el.lastFocusable.focus()\n        }\n    } else {\n        el.lastFocused = e.target\n    }\n}\n\nexport function setFirstAndLastFocusable(el) {\n    const focusable = el.querySelectorAll('button, [href], input, select, textarea, [tabindex=\"0\"]')\n    el.firstFocusable = focusable[0]\n    el.lastFocusable = focusable[focusable.length - 1]\n    el.lastFocused = el.firstFocusable\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","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","import './overlay.scss'\nimport { dispatchEvent } from '@kissui/helpers/src/assets/js/eventDispatch'\nimport { EVENT_POPIN_CLOSE, TIME_INSTANT, TIME_SLOW } from '@kissui/components'\n\nconst open = popin_id => {\n    const overlay = document.createElement('DIV')\n    overlay.classList.add('nb-overlay')\n    overlay.addEventListener('click', () => {\n        dispatchEvent({ eventName: EVENT_POPIN_CLOSE, args: { id: popin_id } })\n    })\n    document.body.appendChild(overlay)\n    setTimeout(() => {\n        overlay.classList.add('fadein')\n    }, TIME_INSTANT)\n}\n\nconst close = () => {\n    if (!document.getElementsByClassName('nb-overlay').length) {\n        return\n    }\n    const overlay = document.getElementsByClassName('nb-overlay')[0]\n    overlay.classList.remove('fadein')\n    setTimeout(() => {\n        overlay.remove()\n    }, TIME_SLOW)\n}\n\nexport default { open, close }\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","import swipeEvents from '@kissui/helpers/src/swipeEvents'\nimport createProps, { parseBool } from '@kissui/helpers/src/props.helpers'\nimport {\n    recursiveSwitchAriaHidden,\n    setFirstAndLastFocusable,\n    focusin\n} from '@kissui/helpers/src/assets/js/scopedKeyboardNav'\nimport {\n    TIME_FAST,\n    EVENT_POPIN_OPENED,\n    EVENT_POPIN_CLOSED,\n    EVENT_VIDEO_TOGGLE,\n    EVENT_POPIN_OPEN,\n    EVENT_POPIN_CLOSE,\n    EVENT_POPIN_KEY_DOWN,\n    EVENT_SWIPED_DOWN\n} from '@kissui/components'\nimport Overlay from './components/overlay'\nimport viewportHelper from '@kissui/helpers/src/viewport.helpers'\nimport { dispatchEvent, readEvent } from '@kissui/helpers/src/assets/js/eventDispatch'\n\nconst STATE_OPEN = 'isOpen'\nconst SCROLL_LOCK = 'scroll-lock'\n\nclass Popin extends HTMLElement {\n    constructor() {\n        super()\n        this.props = {}\n        this.ariaModal = null\n        this.isVideo = null\n\n        this.boundOpen = this.open.bind(this)\n        this.boundClose = this.close.bind(this)\n        this.boundEscapeClose = this.escapeClose.bind(this)\n        this.boundFocus = this.focus.bind(this)\n        this.boundFocusin = this.focusin.bind(this)\n    }\n\n    connectedCallback() {\n        this.style.display = 'none'\n        this.props = createProps(this.attributes)\n\n        if (!this.id) {\n            this.id = this.props.id\n        }\n\n        if (!this.content && !this.slot) {\n            this.slot = this.innerHTML\n        }\n\n        this.ariaModal = false\n        this.isVideo = false\n        this.render()\n    }\n\n    attributeChangedCallback(name, oldValue, newValue) {\n        this.props = createProps(this.attributes)\n\n        if (name === 'content') {\n            this.props.content = newValue\n        }\n    }\n\n    static get observedAttributes() {\n        return ['content']\n    }\n\n    disconnectedCallback() {\n        if (!this.hasEvent) {\n            return\n        }\n        this.unbindEvent()\n    }\n\n    render() {\n        if (this.hasEvent) {\n            this.unbindEvent()\n        }\n        const {\n            heading = '',\n            subheading = '',\n            bgcolor = 'highlight',\n            size = 'M',\n            label_close = 'Close',\n            image = '',\n            image_alt = '',\n            variation = 'before',\n            content = '',\n            heading_class = viewportHelper.is.mobile ? 't-sm-700-sl' : 'h-lg-700',\n            heading_id = 'popin-heading'\n        } = this.props\n        const slot = content || this.slot\n\n        if (slot === '') {\n            this.bindEvent()\n            this.classList.remove(STATE_OPEN)\n            this.isOpen = false\n            return false\n        }\n        this.checkIsVideo(slot)\n        this.setAttribute('size', this.isVideo ? 'L' : size)\n\n        // FYI : The role is dialog, not alertdialog (only used for alerts / warnings ...)\n        this.setAttribute('role', 'dialog')\n        this.setAttribute('aria-hidden', 'true')\n        this.setAttribute('bgcolor', bgcolor)\n        this.setAttribute('variation', variation)\n\n        // Be careful to not remove the title div, even if empty, because it holds on purpose the top gradient for scroll effect\n        this.innerHTML = `\n            <nb-cta\n                variation=\"navigation\"\n                ${bgcolor === 'white' ? `contrast=\"highlight\"` : `contrast=\"light\"`}\n                icon_right=\"24/symbol/close\"\n                label=\"${label_close}\"></nb-cta>\n            <div class=\"wrapper\">\n                ${\n                    heading &&\n                    `<div class=\"title\" >\n                        ${\n                            heading &&\n                            `<h2 id=\"${heading_id}\" class=\"${heading_class}\">${heading}</h2>`\n                        }\n                    </div>`\n                }\n                ${\n                    subheading &&\n                    `<div class=\"subtitle\">\n                            ${subheading && `<p class=\"t-sm-500\">${subheading}</p>`}\n                    </div>`\n                }\n\n                <div class=\"content t-sm-400\" tabindex=\"-1\">\n                    ${\n                        image &&\n                        `<div class=\"popin-header-img\"><img loading=\"lazy\" src=\"${image}\" alt=\"${image_alt}\" title=\"${image_alt}\" width=\"300\" height=\"225\" /></div>`\n                    }\n                    ${slot}\n                </div>\n                ${this.renderFooter()}\n            </div>\n            ${this.isVideo && viewportHelper.is.mobile ? '<div class=\"swipeOverlay\"></div>' : ''}\n        `\n\n        // Expected css to be downloaded\n        setTimeout(() => {\n            this.style.display = 'inherit'\n        }, 100)\n\n        // Set the first and last focusable elements\n        setFirstAndLastFocusable(this)\n\n        this.buttonElement = this.querySelector('button')\n        this.bindEvent()\n    }\n\n    renderFooter() {\n        const { footer } = this.props\n        return parseBool(footer) ? '<footer></footer>' : ''\n    }\n\n    checkIsVideo(slot) {\n        const tempEl = document.createElement('div')\n        tempEl.innerHTML = slot\n        if (tempEl.children.length === 1 && tempEl.children[0].tagName === 'NB-VIDEO') {\n            this.isVideo = true\n            this.setAttribute('video', 'true')\n        }\n    }\n\n    addLock() {\n        document.getElementsByTagName('html')[0].classList.add(SCROLL_LOCK)\n        Overlay.open(this.id)\n    }\n\n    removeLock() {\n        // In case we have popin inside a popin we shouldn't remove the scroll_lock\n        const parentPopin = this.parentNode.closest('nb-popin')\n        if (!parentPopin) {\n            document.getElementsByTagName('html')[0].classList.remove(SCROLL_LOCK)\n        }\n        Overlay.close()\n    }\n\n    switchAriaModal() {\n        this.ariaModal = !this.ariaModal\n        // This is the future way to scope the SR focus to a modal, but it's not supported yet by all SR\n        this.setAttribute('aria-modal', this.ariaModal)\n        // So we need to set aria-hidden=false to all ancestors of parent until body\n        recursiveSwitchAriaHidden(this, this.ariaModal)\n    }\n\n    async open(e) {\n        const event = readEvent(e)\n        if (event.id !== this.id) {\n            return\n        }\n        // Transitionend listener is fired multiple times (fore each css property)\n        // so we need to instantiate it only when we open or close and then we remove it on focusin\n        this.addEventListener('transitionend', this.boundFocus)\n        document.addEventListener('focusin', this.boundFocusin)\n        this.openingSource = document.activeElement\n\n        this.addLock()\n        this.switchAriaModal()\n        this.setAttribute('aria-hidden', 'false')\n        this.isOpen = !this.isOpen\n\n        // event variable already contains ID and other args sent along with dispatch event\n        dispatchEvent({\n            eventName: EVENT_POPIN_OPENED,\n            args: event\n        })\n\n        await new Promise(resolve => {\n            setTimeout(() => {\n                this.classList.add(STATE_OPEN)\n                resolve()\n            }, TIME_FAST)\n        })\n    }\n\n    close(event) {\n        event.cancelBubble = true\n        if (event.stopPropagation) {\n            event.stopPropagation()\n        }\n        // Transitionend listener is fired multiple times (fore each css property)\n        // so we need to instantiate it only when we open or close, and then we remove it on focusin\n        this.addEventListener('transitionend', this.boundFocus)\n        document.removeEventListener('focusin', this.boundFocusin)\n        this.removeLock()\n        if (this.isVideo) {\n            const openVideoPopin = this.closest('.has-open-video')\n            if (openVideoPopin) {\n                openVideoPopin.classList.remove('has-open-video')\n            }\n        }\n        this.switchAriaModal()\n        this.setAttribute('aria-hidden', 'true')\n        this.isOpen = !this.isOpen\n        this.classList.remove(STATE_OPEN)\n\n        dispatchEvent({\n            eventName: EVENT_POPIN_CLOSED,\n            args: { id: this.id }\n        })\n    }\n\n    focus() {\n        this.removeEventListener('transitionend', this.boundFocus)\n        if (this.isOpen) {\n            this.buttonElement.focus()\n        } else {\n            this.openingSource.focus()\n        }\n    }\n\n    focusin(e) {\n        focusin(e, this, true)\n    }\n\n    escapeClose(e) {\n        if (e.key === 'Escape' && this.isOpen) {\n            this.close(e)\n        }\n    }\n\n    swipeDown(e) {\n        if (this.isOpen) {\n            this.close(e)\n        }\n    }\n\n    swipeOverlayTogglePlayPause() {\n        dispatchEvent({\n            eventName: EVENT_VIDEO_TOGGLE,\n            args: { id: this.id }\n        })\n    }\n\n    bindEvent() {\n        this.hasEvent = true\n        this.buttonElement != null && this.buttonElement.addEventListener('click', this.boundClose)\n        window.addEventListener(EVENT_POPIN_OPEN, this.boundOpen)\n        window.addEventListener(EVENT_POPIN_CLOSE, this.boundClose)\n        document.addEventListener(EVENT_POPIN_KEY_DOWN, this.boundEscapeClose)\n\n        if (viewportHelper.is.mobile) {\n            swipeEvents(window, document, this)\n            this.boundSwipeDown = this.swipeDown.bind(this)\n            document.addEventListener(EVENT_SWIPED_DOWN, this.boundSwipeDown)\n            if (this.isVideo) {\n                this.swipeOverlay = this.querySelector('.swipeOverlay')\n                this.boundSwipeOverlayTogglePlayPause = this.swipeOverlayTogglePlayPause.bind(this)\n                this.swipeOverlay.addEventListener('click', this.boundSwipeOverlayTogglePlayPause)\n            }\n        }\n    }\n\n    unbindEvent() {\n        this.hasEvent = false\n        this.buttonElement != null &&\n            this.buttonElement.removeEventListener('click', this.boundClose)\n        window.removeEventListener(EVENT_POPIN_OPEN, this.boundOpen)\n        window.removeEventListener(EVENT_POPIN_CLOSE, this.boundClose)\n        document.removeEventListener(EVENT_POPIN_KEY_DOWN, this.boundEscapeClose)\n        if (this.boundSwipeDown) {\n            document.removeEventListener(EVENT_SWIPED_DOWN, this.boundSwipeDown)\n            this.boundSwipeDown = null\n        }\n        if (this.boundSwipeOverlayTogglePlayPause) {\n            this.swipeOverlay.removeEventListener('click', this.boundSwipeOverlayTogglePlayPause)\n            this.boundSwipeOverlayTogglePlayPause = null\n        }\n    }\n}\n\ncustomElements.get('nb-popin') || customElements.define('nb-popin', Popin)\n\nexport default Popin\n"],"names":["swipeEvents","window","document","stopEl","nwcSwipeEvents","addEventListener","e","target","getAttribute","el","undefined","contains","scrollTopArray","scrollLeftArray","push","scrollTop","scrollLeft","parentNode","memorizeStartElScrollPositions","startEl","timeDown","Date","now","touches","clientX","clientY","xDiff","yDiff","xDown","yDown","xUp","yUp","defaultVertical","innerHeight","defaultHorizontal","innerWidth","swipeThresholdVertical","getNearestAttribute","swipeThresholdHorizontal","swipeTimeout","timeDiff","eventType","changedTouches","Math","abs","checkScrollCondition","eventData","dir","replace","touchType","xStart","xEnd","yStart","yEnd","dispatchEvent","CustomEvent","bubbles","cancelable","detail","direction","result","i","isScrollable","scrollHeight","clientHeight","scrollWidth","clientWidth","attributeName","defaultValue","documentElement","attributeValue","String","parseInt","createProps","attributes","data","find","attribute","nodeName","getData","props","filter","reduce","all","attr","nodeValue","isNil","JSON","parse","error","console","log","obj","recursiveSwitchAriaHidden","elem","componentOpenState","parent","getElementsByTagName","brothers","children","brother","setAttribute","removeAttribute","BREAKPOINT_TABLET","EVENT_POPIN_OPEN","EVENT_POPIN_CLOSE","EVENT_POPIN_KEY_DOWN","EVENT_SWIPED_DOWN","eventName","args","element","Error","event","Event","createEvent","initEvent","Overlay","popin_id","overlay","createElement","classList","add","id","body","appendChild","setTimeout","close","getElementsByClassName","length","remove","helper","is","vw","devicePixelRatio","mobile","mobile_tablet","tablet","desktop","retina","lt","ref","STATE_OPEN","SCROLL_LOCK","Popin","HTMLElement","constructor","this","ariaModal","isVideo","boundOpen","open","bind","boundClose","boundEscapeClose","escapeClose","boundFocus","focus","boundFocusin","focusin","connectedCallback","style","display","content","slot","innerHTML","render","attributeChangedCallback","name","oldValue","newValue","observedAttributes","disconnectedCallback","hasEvent","unbindEvent","heading","subheading","bgcolor","size","label_close","image","image_alt","variation","heading_class","viewportHelper","heading_id","bindEvent","isOpen","checkIsVideo","renderFooter","focusable","querySelectorAll","firstFocusable","lastFocusable","lastFocused","setFirstAndLastFocusable","buttonElement","querySelector","footer","parseBool","value","tempEl","tagName","addLock","removeLock","closest","switchAriaModal","readEvent","openingSource","activeElement","Promise","resolve","cancelBubble","stopPropagation","removeEventListener","openVideoPopin","loop","key","swipeDown","swipeOverlayTogglePlayPause","boundSwipeDown","swipeOverlay","boundSwipeOverlayTogglePlayPause","customElements","get","define"],"mappings":"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"}