{"version":3,"file":"index.es.min.js","sources":["../../../node_modules/preact-custom-element/dist/preact-custom-element.esm.js","../../../node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js","../../../packages/page-builder-sections/src/breadcrumbs/components/Crumb.tsx","../../../packages/helpers/src/dataLayer.js","../../../services/crema-service/src/Store.ts","../../../services/crema-service/src/CremaService.ts","../../../packages/page-builder-sections/src/breadcrumbs/services/DataSourceService.ts","../../../packages/page-builder-sections/src/breadcrumbs/components/JsonLd.tsx","../../../packages/helpers/src/utils.ts","../../../packages/page-builder-sections/src/breadcrumbs/nb-breadcrumbs.tsx","../../../packages/helpers/src/asWebComponent.ts"],"sourcesContent":["import{h as t,hydrate as e,render as n,cloneElement as o}from\"preact\";function r(){return(r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t}).apply(this,arguments)}function i(t){this.getChildContext=function(){return t.context};var e=t.children,n=function(t,e){if(null==t)return{};var n,o,r={},i=Object.keys(t);for(o=0;o<i.length;o++)e.indexOf(n=i[o])>=0||(r[n]=t[n]);return r}(t,[\"context\",\"children\"]);return o(e,n)}function a(){var o=new CustomEvent(\"_preact\",{detail:{},bubbles:!0,cancelable:!0});this.dispatchEvent(o),this._vdom=t(i,r({},this._props,{context:o.detail.context}),function e(n,o){if(3===n.nodeType)return n.data;if(1!==n.nodeType)return null;var r=[],i={},a=0,c=n.attributes,l=n.childNodes;for(a=c.length;a--;)\"slot\"!==c[a].name&&(i[c[a].name]=c[a].value,i[s(c[a].name)]=c[a].value);for(a=l.length;a--;){var p=e(l[a],null),d=l[a].slot;d?i[d]=t(u,{name:d},p):r[a]=p}var h=o?t(u,null,r):r;return t(o||n.nodeName.toLowerCase(),i,h)}(this,this._vdomComponent)),(this.hasAttribute(\"hydrate\")?e:n)(this._vdom,this._root)}function s(t){return t.replace(/-(\\w)/g,function(t,e){return e?e.toUpperCase():\"\"})}function c(t,e,r){if(this._vdom){var i={};i[t]=r=null==r?void 0:r,i[s(t)]=r,this._vdom=o(this._vdom,i),n(this._vdom,this._root)}}function l(){n(this._vdom=null,this._root)}function u(e,n){var o=this;return t(\"slot\",r({},e,{ref:function(t){t?(o.ref=t,o._listener||(o._listener=function(t){t.stopPropagation(),t.detail.context=n},t.addEventListener(\"_preact\",o._listener))):o.ref.removeEventListener(\"_preact\",o._listener)}}))}export default function(t,e,n,o){function r(){var e=Reflect.construct(HTMLElement,[],r);return e._vdomComponent=t,e._root=o&&o.shadow?e.attachShadow({mode:\"open\"}):e,e}return(r.prototype=Object.create(HTMLElement.prototype)).constructor=r,r.prototype.connectedCallback=a,r.prototype.attributeChangedCallback=c,r.prototype.disconnectedCallback=l,n=n||t.observedAttributes||Object.keys(t.propTypes||{}),r.observedAttributes=n,n.forEach(function(t){Object.defineProperty(r.prototype,t,{get:function(){return this._vdom.props[t]},set:function(e){this._vdom?this.attributeChangedCallback(t,null,e):(this._props||(this._props={}),this._props[t]=e,this.connectedCallback());var n=typeof e;null!=e&&\"string\"!==n&&\"boolean\"!==n&&\"number\"!==n||this.setAttribute(t,e)}})}),customElements.define(e||t.tagName||t.displayName||t.name,r)}\n//# sourceMappingURL=preact-custom-element.esm.js.map\n","import{options as r}from\"preact\";export{Fragment}from\"preact\";var _=0;function o(o,e,n,t,f,l){var s,u,a={};for(u in e)\"ref\"==u?s=e[u]:a[u]=e[u];var i={type:o,props:a,key:n,ref:s,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:--_,__source:f,__self:l};if(\"function\"==typeof o&&(s=o.defaultProps))for(u in s)void 0===a[u]&&(a[u]=s[u]);return r.vnode&&r.vnode(i),i}export{o as jsx,o as jsxDEV,o as jsxs};\n//# sourceMappingURL=jsxRuntime.module.js.map\n","import { JSX } from 'preact'\n\nimport styles from './Crumb.module.scss'\n\nexport type CrumbProps = {\n    children: JSX.Element | JSX.Element[] | string | number | null\n    url?: string\n    isCurrentPage?: boolean\n    title?: string\n    mergeLevelsStatus?: boolean\n}\n\nexport default function Crumb({\n    children,\n    url,\n    isCurrentPage = false,\n    title,\n    mergeLevelsStatus\n}: CrumbProps) {\n    const renderLink = url && !isCurrentPage\n\n    return (\n        <>\n            {children ? (\n                <li\n                    className={styles.crumb}\n                    title={\n                        title ||\n                        (typeof children === 'string'\n                            ? children\n                            : typeof children === 'object' && 'props' in children\n                            ? String(children.props.children)\n                            : '')\n                    }\n                    aria-current={isCurrentPage ? 'page' : undefined}>\n                    {!mergeLevelsStatus && renderLink ? (\n                        <a href={url}>{children}</a>\n                    ) : (\n                        <span>{children}</span>\n                    )}\n                </li>\n            ) : (\n                ''\n            )}\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 { signal } from '@preact/signals'\nimport type { ModuleData } from './CremaService'\n\ntype ModuleName = 'ProductsList' | 'ProductDetails' | 'HeaderNavigation'\n\ntype PageStore = {\n    [key: string]: string | undefined\n    pageHtml?: string\n}\n\ntype SignalStore = {\n    ProductsList: ModuleData\n    ProductDetails: ModuleData\n    HeaderNavigation: ModuleData\n}\n\ntype WindowCreamService = {\n    pageStores: Map<string, PageStore>\n    signalStore: SignalStore\n}\n\ndeclare global {\n    interface Window {\n        __crema_service__: WindowCreamService\n    }\n}\n\n// Stored on window to allow sharing between page builder sections\n// Ideally this would be replaced by loading this service as a shared bundle in future\nwindow.__crema_service__ = window.__crema_service__ || {\n    pageStores: new Map<string, PageStore>(),\n    signalStore: {\n        ProductsList: signal(undefined),\n        ProductDetails: signal(undefined),\n        HeaderNavigation: signal(undefined)\n    }\n}\n\nconst pageStores = window.__crema_service__.pageStores\nconst signalStore = window.__crema_service__.signalStore\n\nexport function clear() {\n    pageStores.clear()\n    signalStore.ProductsList.value = undefined\n    signalStore.ProductDetails.value = undefined\n    signalStore.HeaderNavigation.value = undefined\n}\n\nexport function getPageHtml(url: string): string | undefined {\n    const store = getStore(url)\n    return store.pageHtml\n}\n\nexport function setPageHtml(url: string, html: string): void {\n    const store = getStore(url)\n    store.pageHtml = html\n}\n\nexport function getModuleData(moduleName: ModuleName): ModuleData {\n    return signalStore[moduleName]\n}\n\nexport function setModuleData(moduleName: ModuleName, data: object | undefined): void {\n    signalStore[moduleName].value = data\n}\n\nfunction getStore(url: string): PageStore {\n    if (!pageStores.has(url)) {\n        pageStores.set(url, {})\n    }\n\n    return pageStores.get(url) as PageStore\n}\n","import { Signal, batch } from '@preact/signals'\n\nimport * as store from './Store'\n\nconst parser = new DOMParser()\n\nexport type ModuleData<T = any> = Signal<Record<PropertyKey, T> | undefined>\n\nexport type HeaderNavigationMenuItem = {\n    title: string,\n    link: {\n        url: string\n    }\n}\n\nexport async function loadFromUrl(url: string, cacheOnly: boolean = false): Promise<void> {\n    return batch(async () => {\n        let html = store.getPageHtml(url)\n\n        if (!html) {\n            try {\n                html = await fetchHtml(url)\n                store.setPageHtml(url, html)\n            } catch (error) {\n                console.debug('Failed to load HTML', error)\n                return\n            }\n        }\n\n        if (!cacheOnly) {\n            store.setModuleData('HeaderNavigation', parseModuleData(html, 'HeaderNavigationBar'))\n            store.setModuleData('ProductsList', parseModuleData(html, 'ProductList'))\n            store.setModuleData('ProductDetails', parseModuleData(html, 'ProductDetails'))\n        }\n    })\n}\n\nexport function loadFromPage(window: Window): void {\n    batch(() => {\n        const html = window.document.documentElement.innerHTML\n\n        store.setModuleData('HeaderNavigation', parseModuleData(html, 'HeaderNavigationBar'))\n        store.setModuleData('ProductsList', parseModuleData(html, 'ProductList'))\n        store.setModuleData('ProductDetails', parseModuleData(html, 'ProductDetails'))\n\n        // Only cache if we found either the PLP data or the PDP data\n        if (\n            store.getModuleData('HeaderNavigation').value &&\n            (store.getModuleData('ProductsList').value ||\n                store.getModuleData('ProductDetails').value)\n        ) {\n            store.setPageHtml(window.location.href, html)\n        }\n    })\n}\n\nexport function getProductsList(): ModuleData {\n    return store.getModuleData('ProductsList')\n}\n\nexport function getProductDetails(): ModuleData {\n    return store.getModuleData('ProductDetails')\n}\n\nexport function getHeaderNavigation(): ModuleData {\n    return store.getModuleData('HeaderNavigation')\n}\n\nfunction parseModuleData(html: string, moduleName: string): ModuleData | undefined {\n    try {\n        const moduleScript = parseHtml(html, moduleName)\n        return parseProductScript(moduleScript) as ModuleData\n    } catch (error) {\n        // Failed to parse module, but this could be expected if the module is not present\n        return undefined\n    }\n}\n\nasync function fetchHtml(url: string): Promise<string> {\n    console.debug('Fetching HTML from', url)\n    const response = await fetch(url)\n\n    if (!response.ok) {\n        throw new Error(`Failed to fetch from \"${url}\" - ${response.status}:${response.statusText}`)\n    }\n\n    const html = await response.text()\n\n    return html\n}\n\nfunction parseHtml(html: string, moduleName: string): string {\n    const document = parser.parseFromString(html, 'text/html')\n\n    const scripts = document.querySelectorAll('script')\n    for (const script of scripts) {\n        const content = script.textContent ?? ''\n        if (content.includes(`\"module\":\"${moduleName}\"`)) return content\n    }\n\n    throw new Error(`Failed to find module \"${moduleName}\"`)\n}\n\nfunction parseProductScript(script: string): object {\n    const lines = script.split('\\n')\n    for (const line of lines) {\n        const trimmed = line.trim()\n        if (trimmed.startsWith('window.ui.push(')) {\n            const jsonString = trimmed.replace('window.ui.push(', '').slice(0, -2)\n            return JSON.parse(jsonString)\n        }\n    }\n\n    throw new Error('Failed to find UI data in script')\n}\n","import { Signal, signal, computed } from '@preact/signals'\nimport {\n    loadFromUrl,\n    loadFromPage,\n    getProductDetails,\n    getHeaderNavigation,\n    getProductsList,\n    HeaderNavigationMenuItem\n} from '@kissui/crema-service'\n\nimport { BreadcrumbLink, DataSource, PBProps } from '../types'\n\nexport function getBreadcrumbs(\n    dataSource: DataSource,\n    pbProps: PBProps,\n    window: Window\n): Signal<BreadcrumbLink[]> {\n    if (dataSource === 'Manual') {\n        return signal(pbProps.copywriting?.links ?? [])\n    } else if (dataSource === 'Crema') {\n        return getBreadcrumbsFromCrema(window)\n    }\n\n    throw new Error(`Unknown dataSource: ${dataSource}`)\n}\n\nexport function preload(dataSource: DataSource, window: Window) {\n    if (dataSource === 'Crema') loadFromPage(window)\n}\n\nexport function switchUrl(dataSource: DataSource, url: string) {\n    if (dataSource === 'Crema') loadFromUrl(url)\n}\n\nfunction getBreadcrumbsFromCrema(window: Window): Signal<BreadcrumbLink[]> {\n    const includeTechnology = true\n    const headerNavigation = getHeaderNavigation()\n    const productDetails = getProductDetails()\n    const productsList = getProductsList()\n\n    return computed(() => {\n        if (!headerNavigation.value) return []\n\n        const {\n            configuration: {\n                props: { menuItems }\n            }\n        } = headerNavigation.value as {\n            configuration: {\n                props: {\n                    menuItems: HeaderNavigationMenuItem[]\n                }\n            }\n        }\n\n        // Note: Makes an assumption on a standard URL format\n        const [root, market, locale, order, productType] = window.location.pathname.split('/')\n\n        if (!productType) return []\n\n        const productTypeLocation = [root, market, locale, order, productType].join('/')\n\n        const productTypeMenu = menuItems.find(menu => menu.link.url.includes(productTypeLocation))\n\n        if (productTypeMenu && productDetails.value) {\n            const {\n                configuration: {\n                    eCommerceData: { product, categories }\n                }\n            } = productDetails.value as any\n\n            const technologyId = getTechnologyType(product.technologies, window.location.pathname)\n            const technologyCategory = categories.find((cat: any) => cat.id === technologyId)\n\n            return [\n                {\n                    label: productTypeMenu.title,\n                    url: productTypeLocation\n                },\n                ...(includeTechnology\n                    ? [\n                          {\n                              label: technologyCategory.name,\n                              url: correctTechnologyUrl(technologyCategory.url, productTypeLocation)\n                          }\n                      ]\n                    : []),\n                {\n                    label: product.name\n                }\n            ]\n        }\n\n        if (productTypeMenu && productsList.value) {\n            const {\n                configuration: {\n                    eCommerceData: { enabledTechnologies }\n                }\n            } = productsList.value\n\n            const technologyCategory = enabledTechnologies.find(\n                (cat: any) => cat.isSelected === true\n            )\n\n            return [\n                {\n                    label: productTypeMenu.title,\n                    url: productTypeLocation\n                },\n                ...(includeTechnology\n                    ? [\n                          {\n                              label: technologyCategory.name\n                          }\n                      ]\n                    : [])\n            ]\n        }\n\n        return []\n    })\n}\n\nfunction correctTechnologyUrl(url: string, typeUrl: string): string {\n    const [tech, type] = url.split('/').reverse()\n\n    if (tech !== type) return url\n\n    // remove extra slash symbol at the end of url if presented\n    return [...typeUrl.split('/').filter((urlPart, idx) => !!urlPart || !idx), tech].join('/')\n}\n\n// in case of multiple technologies, we need to determine which one is used\nfunction getTechnologyType(technologies: string[], pathname: string): string | undefined {\n    const pathSegments = pathname.split('/')\n    const technologyType = pathSegments.includes('vertuo') ? 'vertuo' : 'original'\n\n    return technologies.find(tech => tech.includes(technologyType))\n}\n","import type { BreadcrumbLink } from '../types'\n\nexport type JsonLdProps = {\n    crumbs: BreadcrumbLink[]\n}\n\nexport default function JsonLd({ crumbs }: JsonLdProps) {\n    const meta = {\n        '@context': 'https://schema.org',\n        '@type': 'BreadcrumbList',\n        itemListElement: crumbs.map((crumb, index) => ({\n            '@type': 'ListItem',\n            position: index + 1,\n            name: crumb.label,\n            item: crumb.url // undefined gets removed by JSON.stringify\n        }))\n    }\n\n    return <script type=\"application/ld+json\">{JSON.stringify(meta)}</script>\n}\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 asWebComponent from '@kissui/helpers/src/asWebComponent'\nimport Crumb from './components/Crumb'\nimport { useEffect } from 'preact/hooks'\nimport { getMarketCode, getLangCode } from '@kissui/helpers/src/dataLayer'\nimport './nb-breadcrumbs.scss'\nimport { PBProps } from './types'\nimport { getBreadcrumbs, preload, switchUrl } from './services/DataSourceService'\nimport JsonLd from './components/JsonLd'\nimport { interpolate } from '@kissui/helpers/src/utils'\n\ntype BreadcrumbsProps = {\n    data: string\n}\n\nfunction Breadcrumbs({ data }: BreadcrumbsProps) {\n    const pbProps = getPBProps(data)\n    const { dataSource, breadcrumbOptions = {} } = pbProps\n\n    const {\n        mergeLevelsSyntax = '{prod_type} {technology}',\n        mergeLevels = false,\n        homeLabel = ''\n    } = breadcrumbOptions\n\n    const getBreadcrumbLabel = (label: string, index: number) =>\n        interpolate(\n            mergeLevelsSyntax,\n            {\n                prod_type: label,\n                technology: links.value[index + 1].label\n            },\n            '{',\n            '}'\n        )\n\n    const links = getBreadcrumbs(dataSource, pbProps, window)\n    let homeUrl = `/${getMarketCode()}/${getLangCode()}`\n    const homeData: { label: string; url: string } = {\n        label: homeLabel,\n        url: homeUrl\n    }\n\n    useEffect(() => {\n        preload(pbProps.dataSource, window)\n    }, [])\n\n    useEffect(() => {\n        switchUrl(pbProps.dataSource, window.location.href)\n    }, [window.location, window.location.href])\n\n    if (links.value.length === 0) {\n        return null\n    }\n\n    return (\n        <nav aria-label=\"Breadcrumb\" data-source={pbProps.dataSource}>\n            <ol>\n                {homeLabel !== '' && (\n                    <Crumb\n                        key={-1}\n                        url={homeData.url}\n                        isCurrentPage={false}\n                        mergeLevelsStatus={false}>\n                        {homeData.label}\n                    </Crumb>\n                )}\n                {links.value.map(({ label, url }, index) => (\n                    <Crumb\n                        key={index}\n                        url={url}\n                        isCurrentPage={index === links.value.length - 1}\n                        mergeLevelsStatus={mergeLevels}>\n                        {mergeLevels && index === 0 ? (\n                            <a href={links.value[index + 1].url}>\n                                {mergeLevelsSyntax\n                                    ? getBreadcrumbLabel(label, index)\n                                    : `${label} ${links.value[index + 1].label}`}\n                            </a>\n                        ) : mergeLevels && index === 1 ? null : (\n                            <>{label}</>\n                        )}\n                    </Crumb>\n                ))}\n            </ol>\n            <JsonLd crumbs={links.value} />\n        </nav>\n    )\n}\n\nexport default asWebComponent(Breadcrumbs, 'nb-breadcrumbs', ['data'])\n\nfunction getPBProps(data: string): PBProps {\n    try {\n        return data && JSON.parse(data)\n    } catch (error) {\n        console.error('Invalid \"data\" attribute', error)\n        return {} as PBProps\n    }\n}\n","import register from 'preact-custom-element'\nimport { useRef, useEffect, useState } from 'preact/hooks'\nimport type { Ref } from 'preact/hooks'\nimport type { FunctionComponent } from 'preact'\n\n/**\n * Turns a Preact component into a Web Component,\n * allowing the component to be used in either context\n * @param func A (P)React function component\n * @param tagName The Web Component tag name, like 'my-component'\n * @param observedAttributes Array of element attributes to observe for changes\n * @param options Additional web component options\n * @returns The custom element\n */\nexport default function asWebComponent(\n    func: FunctionComponent<any>,\n    tagName: string,\n    observedAttributes?: string[],\n    options?: { shadow: boolean }\n): CustomElementConstructor {\n    if (customElements.get(tagName)) {\n        return customElements.get(tagName) as CustomElementConstructor\n    }\n    register(func, tagName, observedAttributes, options)\n    return customElements.get(tagName) as CustomElementConstructor\n}\n\ninterface useCustomElementReturn {\n    immediateChildRef: Ref<any>\n    customElement: HTMLElement | null | undefined\n}\n\n/**\n * Allows access to the Web Component wrapper, from within the Preact Component\n */\nexport function useCustomElement(): useCustomElementReturn {\n    const ref = useRef<any>(null)\n    const [customElement, setCustomElement] = useState(undefined)\n    useEffect(() => {\n        setCustomElement(ref.current?.parentElement)\n    }, [ref])\n\n    return { immediateChildRef: ref, customElement }\n}\n"],"names":["r","Object","assign","t","e","arguments","length","n","o","prototype","hasOwnProperty","call","apply","this","i","getChildContext","context","children","keys","indexOf","a","CustomEvent","detail","bubbles","cancelable","dispatchEvent","_vdom","_props","nodeType","data","c","attributes","l","childNodes","name","value","s","p","d","slot","u","h","nodeName","toLowerCase","_vdomComponent","hasAttribute","_root","replace","toUpperCase","ref","_listener","stopPropagation","addEventListener","removeEventListener","_","f","type","props","key","__k","__","__b","__e","__d","__c","__h","constructor","__v","__source","__self","defaultProps","vnode","Crumb","url","isCurrentPage","title","mergeLevelsStatus","renderLink","_jsx","_Fragment","className","styles","crumb","String","undefined","href","getDataLayer","window","padlNamespace","dataLayer","__crema_service__","pageStores","Map","signalStore","ProductsList","signal","ProductDetails","HeaderNavigation","setPageHtml","html","getStore","pageHtml","getModuleData","moduleName","setModuleData","has","set","get","parser","DOMParser","loadFromUrl","cacheOnly","batch","async","store","debug","response","fetch","ok","Error","status","statusText","text","fetchHtml","error","parseModuleData","moduleScript","scripts","parseFromString","querySelectorAll","script","content","textContent","includes","parseHtml","lines","split","line","trimmed","trim","startsWith","jsonString","slice","JSON","parse","parseProductScript","getBreadcrumbs","dataSource","pbProps","copywriting","links","headerNavigation","productDetails","productsList","computed","configuration","menuItems","root","market","locale","order","productType","location","pathname","productTypeLocation","join","productTypeMenu","find","menu","link","eCommerceData","product","categories","technologyId","technologies","technologyType","tech","getTechnologyType","technologyCategory","cat","id","label","correctTechnologyUrl","enabledTechnologies","isSelected","getBreadcrumbsFromCrema","preload","document","documentElement","innerHTML","loadFromPage","typeUrl","reverse","filter","urlPart","idx","JsonLd","crumbs","meta","itemListElement","map","index","position","item","stringify","asWebComponent","func","getPBProps","breadcrumbOptions","mergeLevelsSyntax","mergeLevels","homeLabel","getBreadcrumbLabel","txt","vars","stChr","enChr","curIdx","stIdx","enIdx","hashId","substring","substr","interpolate","prod_type","technology","homeUrl","getMarketCode","app","toLocaleLowerCase","page","pageInfo","language","homeData","useEffect","switchUrl","_jsxs","tagName","observedAttributes","customElements","Reflect","construct","HTMLElement","shadow","attachShadow","mode","create","connectedCallback","attributeChangedCallback","disconnectedCallback","propTypes","forEach","defineProperty","setAttribute","define","displayName","options"],"mappings":"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","x_google_ignoreList":[0,1]}