{"version":3,"file":"index.es.min.js","sources":["../../../packages/helpers/src/props.helpers.js","../../../packages/helpers/src/utils.ts","../../../packages/helpers/src/dataLayer.js","../../../packages/page-builder-sections/src/track-and-trace/config/constants.js","../../../packages/page-builder-sections/src/track-and-trace/track-and-trace.js"],"sourcesContent":["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 { 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 '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\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, '"').replace(/'/g, ''')\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","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","export const constants = {\n slugs: {\n default: 'nespresso-widget',\n B2B: {\n at: {\n de: '2dfba8646325',\n en: 'f6ef46051ad6'\n },\n au: {\n en: 'f15ad9dd869b'\n },\n ch: {\n de: '52250d2a0ecb',\n en: '3bc09e52e70d',\n fr: '728f831b1501',\n it: '40958f2c9b45'\n },\n nz: {\n en: '1f88e21f38a0'\n },\n uk: {\n en: '68947fa36919'\n }\n },\n ar: {\n en: 'cecd9be09bb4',\n es: '461691a4a63b'\n },\n at: {\n de: '76d662bdd77c',\n en: '4b1b0530ce64'\n },\n au: {\n en: '91a1259a9151'\n },\n be: {\n en: '7df5ed6cbd3b',\n fr: '1e376f64da00',\n nl: 'd76469a95da8'\n },\n br: {\n en: '8b4d3f283684',\n pt: 'a48c901ced1a'\n },\n ca: {\n en: 'dd240d331e63',\n fr: 'c5c5088bc3e5'\n },\n ch: {\n de: 'ebecb15e14af',\n en: '7ac26892876a',\n fr: '296c2eefad4d',\n it: 'c26a3f63c31e'\n },\n cl: {\n en: 'bb41f830cca6',\n es: 'adf797d30dde'\n },\n co: {\n en: '8c0793bd8e63',\n es: '454deb4452ea'\n },\n cz: {\n cs: '2ad4784b762b',\n en: '17777c1cf3ce'\n },\n dk: {\n da: '3f44704940c6',\n en: '2e5a269b8f65'\n },\n fi: {\n en: '87c149930a36',\n fi: '6ccef21ad416'\n },\n gr: {\n el: 'f828a6090cba',\n en: '8a3847031895'\n },\n hk: {\n en: '9630e1c278a4',\n zh: '1e01467ce97f'\n },\n hu: {\n en: '67c6a8a3c6b3',\n hu: '570e9037a5f9'\n },\n it: {\n en: 'ffef06a896b8',\n it: 'cb9e60344b99'\n },\n kr: {\n en: '4bacf8b8473e',\n ko: '52eb17a93dae'\n },\n lu: {\n de: 'd76469a95da8',\n en: '7df5ed6cbd3b',\n fr: '1e376f64da00'\n },\n mx: {\n en: '91859b82ccee',\n es: '61b7fc05402e'\n },\n nl: {\n en: 'cbdc8652f329',\n nl: 'e57587013285'\n },\n no: {\n en: '8759084e9cb9',\n no: 'f8e0ef1075bc'\n },\n nz: {\n en: 'e32f91079949'\n },\n pt: {\n en: 'nespresso-widget',\n pt: 'a681ae0c82d6'\n },\n se: {\n en: '6f2ec238150d',\n se: 'de43b0edbe28'\n },\n sk: {\n en: '0940d32fe85f',\n sk: '1bdefc93c95a'\n },\n th: {\n en: 'a2e74b80ccee',\n th: '74818493c225'\n },\n uk: {\n en: '588b8f537625'\n }\n }\n}\n","import createProps from '@kissui/helpers/src/props.helpers'\nimport { loadExternalScript } from '@kissui/helpers/src/utils'\nimport { getMarketCode, getLangCode, getSegmentCode } from '@kissui/helpers/src/dataLayer'\nimport { constants } from './config/constants'\n\nclass TrackAndTrace extends HTMLElement {\n // 3rd party script, dynamically loads, creates and renders inputs and labels.\n // This is a workaround that waits for the page to load, render, and then links the labels and inputs together, improving accessibility\n observeDOMChanges() {\n const observer = new MutationObserver(() => {\n this.findAndProcessInputs()\n })\n\n const widgetRoot = document.getElementById('pp-widget-root')\n if (widgetRoot) {\n observer.observe(widgetRoot, {\n childList: true,\n subtree: true\n })\n } else {\n console.warn('pp-widget-root not found.')\n }\n\n console.log('Inputs or labels not found yet')\n }\n\n findAndProcessInputs(\n widgetRoot = document.querySelector(\n '#pp-widget-root > div > div > div > div > div.sc-1n82xk-0.kxcGSn > form > div > div > div'\n )\n ) {\n if (!widgetRoot) {\n console.warn('Widget root not found.')\n return\n }\n\n const input = widgetRoot.querySelector('div:nth-child(1) > input')\n const label = widgetRoot.querySelector('label')\n const inputTwo = widgetRoot.querySelector('div:nth-child(2) > input')\n const labelTwo = widgetRoot.querySelector('div:nth-child(2) > label')\n\n if (input) {\n input.setAttribute('data-testid', 'order-id-input')\n }\n if (label) {\n label.setAttribute('data-testid', 'order-id-label')\n }\n if (inputTwo) {\n inputTwo.setAttribute('data-testid', 'order-id-inputTwo')\n }\n if (labelTwo) {\n labelTwo.setAttribute('data-testid', 'order-id-labelTwo')\n }\n\n // If the input and labels can be found on the page, then link them together\n if (input && label && inputTwo && labelTwo) {\n if (!input.id) {\n input.id = 'order_id_input'\n }\n label.setAttribute('for', input.id)\n\n if (!inputTwo.id) {\n inputTwo.id = 'order_id_input_two'\n }\n labelTwo.setAttribute('for', inputTwo.id)\n } else {\n console.log('Inputs or labels not yet found.')\n }\n }\n\n connectedCallback() {\n this.props = createProps(this.attributes)\n this.render()\n this.observeDOMChanges()\n }\n\n validateOrderId(orderId) {\n const regex = /^[a-zA-Z0-9-_]+$/\n return regex.test(orderId) ? orderId : ''\n }\n\n getOrderId() {\n const QUERY_PARAMETER_ORDER_ID = 'orderid'\n\n const urlParams = new URLSearchParams(window.location.search)\n const rawOrderId = urlParams.get(QUERY_PARAMETER_ORDER_ID) || ''\n const validatedOrderId = this.validateOrderId(rawOrderId)\n\n return validatedOrderId ? `data-order-id=\"${validatedOrderId}\"` : ''\n }\n\n getSlug() {\n const marketCode = getMarketCode()\n const langCode = getLangCode()\n const segmentCode = getSegmentCode()\n\n const segmentBasedSlug = constants.slugs[segmentCode]?.[marketCode]?.[langCode]\n const marketBasedSlug = constants.slugs[marketCode]?.[langCode]\n const defaultSlug = constants.slugs.default\n\n return segmentBasedSlug || marketBasedSlug || defaultSlug\n }\n\n render() {\n const { layout, campaign } = this.props ?? {}\n const {\n contrast = 'light',\n background_color = 'white_1000',\n padding_top = 'pt9',\n padding_bottom = 'pb9'\n } = layout ?? {}\n const { id, creative, name, position } = campaign || {}\n\n let slug = this.getSlug()\n if (!slug) {\n console.info(\n '\\n\\n%cTrack & Trace%c is not activated on your market, please activate it following this wiki.\\nhttps://dsu-confluence.nestle.biz/x/SuRLE\\n\\n',\n 'font-weight: bold;', // Bold style for 'Track & Trace'\n '' // Reset style for the rest of the message\n )\n\n slug = constants.slugs.default\n }\n\n this.innerHTML = `\n <nb-container\n campaign_id=\"${id}\"\n campaign_name=\"${name}\"\n campaign_creative=\"${creative}\"\n campaign_position=\"${position}\"\n contrast=\"${contrast}\"\n background_color=\"${background_color}\"\n classname=\"${padding_top} ${padding_bottom}\">\n <div\n id=\"pp-widget-root\"\n data-cms-slug=\"${slug}\"\n data-location-consent=false\n ${this.getOrderId()}\n ></div>\n </nb-container>\n `\n this.callExternalService()\n }\n\n callExternalService() {\n loadExternalScript({\n src: 'https://tracking.parcelperform.com/pp-widget.js',\n defer: true,\n callback: () => {\n this.observeDOMChanges()\n this.findAndProcessInputs()\n }\n })\n }\n}\n\ncustomElements.get('nb-track-and-trace') ||\n customElements.define('nb-track-and-trace', TrackAndTrace)\nexport default TrackAndTrace\n"],"names":["isNil","obj","DOMParser","getDataLayer","window","padlNamespace","dataLayer","constants","default","B2B","at","de","en","au","ch","fr","it","nz","uk","ar","es","be","nl","br","pt","ca","cl","co","cz","cs","dk","da","fi","gr","el","hk","zh","hu","kr","ko","lu","mx","no","se","sk","th","TrackAndTrace","HTMLElement","observeDOMChanges","observer","MutationObserver","this","findAndProcessInputs","widgetRoot","document","getElementById","observe","childList","subtree","console","warn","log","querySelector","input","label","inputTwo","labelTwo","setAttribute","id","connectedCallback","props","attributes","data","find","attribute","nodeName","getData","filter","reduce","all","attr","nodeValue","JSON","parse","error","createProps","render","validateOrderId","orderId","test","getOrderId","rawOrderId","URLSearchParams","location","search","get","validatedOrderId","getSlug","marketCode","getMarketCode","app","market","toLocaleLowerCase","langCode","page","pageInfo","language","segmentCode","segmentBusiness","segmentBasedSlug","marketBasedSlug","defaultSlug","layout","campaign","contrast","background_color","padding_top","padding_bottom","creative","name","position","slug","info","innerHTML","callExternalService","loadExternalScript","src","callback","async","defer","module","script","createElement","type","onload","body","appendChild","customElements","define"],"mappings":"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"}