{"version":3,"file":"custom-element.es.min.js","sources":["../../../packages/coveo-search/src/experimental/ui/shared/icons.tsx","../../../packages/coveo-search/src/experimental/shared/escape-for-faqs.ts","../../../packages/coveo-search/src/experimental/ui/bar/context.tsx","../../../packages/coveo-search/src/experimental/engine/results/search/analytics/impressions.ts","../../../packages/coveo-search/src/experimental/engine/results/search/raw-item-parsers/faq.ts","../../../packages/coveo-search/src/experimental/shared/decode-pdf-title.ts","../../../packages/coveo-search/src/experimental/engine/results/search/raw-item-parsers/article.ts","../../../packages/coveo-search/src/experimental/engine/results/search/raw-item-parsers/product.ts","../../../packages/coveo-search/src/experimental/shared/random-uuid.ts","../../../packages/coveo-search/src/experimental/engine/shared/coveo-api-commons.ts","../../../packages/coveo-search/src/experimental/shared/log-aggregate-error.ts","../../../packages/coveo-search/src/experimental/shared/async-query.ts","../../../packages/coveo-search/src/experimental/engine/shared/types.ts","../../../packages/coveo-search/src/experimental/engine/results/search/product-facets.ts","../../../packages/coveo-search/src/experimental/engine/results/search/analytics/search.ts","../../../packages/coveo-search/src/experimental/engine/results/suggestion/suggestion-results.ts","../../../packages/coveo-search/src/experimental/engine/bar.ts","../../../packages/coveo-search/src/experimental/engine/results/search/auto-tab-switch.ts","../../../packages/coveo-search/src/experimental/shared/async-value.ts","../../../packages/coveo-search/src/experimental/engine/results/search/apply-auto-correction.ts","../../../packages/coveo-search/src/experimental/engine/results/search/related-recommendation.ts","../../../packages/coveo-search/src/experimental/engine/results/search/popular-recommendation.ts","../../../packages/coveo-search/src/experimental/engine/results/search/store-coveo-metadata.ts","../../../packages/coveo-search/src/experimental/engine/results/search/search-tracking.ts","../../../packages/coveo-search/src/experimental/engine/results/search/search-results.ts","../../../packages/coveo-search/src/experimental/engine/page.ts","../../../packages/coveo-search/src/experimental/engine/url-store/build-url-store.ts","../../../packages/coveo-search/src/experimental/engine/url-store/shared.ts","../../../packages/coveo-search/src/experimental/engine/url-store/app-store.ts","../../../packages/coveo-search/src/experimental/engine/url-store/standalone-bar-store.ts","../../../packages/coveo-search/node_modules/i18next/dist/esm/i18next.js","../../../packages/coveo-search/src/experimental/engine/results/search/analytics/click.ts","../../../packages/coveo-search/src/experimental/engine/core.ts","../../../packages/helpers/src/createImPolicyQuery.ts","../../../packages/coveo-search/src/experimental/ui/bar/instant-result.tsx","../../../packages/coveo-search/src/experimental/shared/use-on-outside-click.ts","../../../packages/coveo-search/src/experimental/shared/breakpoints.ts","../../../packages/helpers/src/utils.ts","../../../packages/coveo-search/src/experimental/ui/bar/searchbox.tsx","../../../packages/coveo-search/src/experimental/ui/bar/us-backdoor.ts","../../../packages/coveo-search/src/experimental/ui/bar/search-bar.tsx","../../../packages/coveo-search/src/experimental/shared/visitor-id.ts","../../../packages/coveo-search/src/experimental/page-builder-host/search-bar/props.ts","../../../packages/coveo-search/src/experimental/ui/page/context.tsx","../../../packages/coveo-search/src/experimental/page-builder-host/search-bar/custom-element.tsx"],"sourcesContent":["import type { JSXInternal } from \"preact/src/jsx\"\n\nexport const RecentIcon = (props: JSXInternal.SVGAttributes<SVGSVGElement>) => {\n    return <svg viewBox=\"0 0 16 16\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"currentColor\" fill=\"none\" {...props} xmlns=\"http://www.w3.org/2000/svg\">\n        <circle r=\"7.5\" cy=\"8\" cx=\"8\"></circle><path d=\"m8.5 4.5v4\"></path><path d=\"m10.3066 10.1387-1.80932-1.5768\"></path>\n    </svg>\n}\n\nexport const SearchIcon = (props: JSXInternal.SVGAttributes<SVGSVGElement>) => {\n    return <svg viewBox=\"0 0 16 16\" stroke=\"white\" stroke-width=\"1.2\" {...props} xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"m6.4 0c3.5 0 6.4 2.9 6.4 6.4 0 1.4-.4 2.7-1.2 3.7l4 4c.4.4.4 1 .1 1.5l-.1.1c-.2.2-.5.3-.8.3s-.6-.1-.8-.3l-4-4c-1 .7-2.3 1.2-3.7 1.2-3.4-.1-6.3-3-6.3-6.5s2.9-6.4 6.4-6.4zm0 2.1c-2.3 0-4.3 1.9-4.3 4.3s1.9 4.3 4.3 4.3 4.3-1.9 4.3-4.3-1.9-4.3-4.3-4.3z\"></path>\n    </svg>\n}\n\nexport const CloseIcon = (props: JSXInternal.SVGAttributes<SVGSVGElement>) => {\n    return <svg viewBox=\"0 0 18 18\" {...props} xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"m18 2-1.8-2-7.1 7.1-7.1-7.1-2 2 7.1 7.1-7.1 7.1 2 1.8 7.1-6.9 7.1 6.9 1.8-1.8-6.9-7.1z\"></path>\n    </svg>\n}\n\nexport const CloseSearchboxIcon = (props: JSXInternal.SVGAttributes<SVGSVGElement>) => {\n    return <svg viewBox=\"0 0 24 25\" {...props} xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M18 7.54986L17.2753 6.83789L12 12.0203L6.72473 6.83789L6 7.54986L11.2753 12.7323L6 17.9147L6.72473 18.6266L12 13.4442L17.2753 18.6266L18 17.9147L12.7247 12.7323L18 7.54986Z\"></path>\n    </svg>\n}\n\nexport const ClearSearchboxIcon = (props: JSXInternal.SVGAttributes<SVGSVGElement>) => {\n    return <svg viewBox=\"0 0 24 24\" {...props} xmlns=\"http://www.w3.org/2000/svg\">\n        <rect width=\"24\" height=\"24\" rx=\"12\" fill=\"#FAF9F8\"/>\n        <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M11.2691 12L7.5 8.23089L8.23089 7.5L12 11.2691L15.7691 7.5L16.5 8.23089L12.7309 12L16.5 15.7691L15.7691 16.5L12 12.7309L8.23089 16.5L7.5 15.7691L11.2691 12Z\" fill=\"#17171A\"/>\n    </svg>\n\n}\n\nexport const FAQIcon = (props: JSXInternal.SVGAttributes<SVGSVGElement>) => {\n    return <svg viewBox=\"0 0 22 20\" fill=\"none\" {...props} xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M22 8C22 2.69141 18.2988 0 11 0C3.70117 0 0.000488281 2.69141 0.000488281 8C0.000488281 13.3086 3.70117 16 11 16C12.3369 16 13.5752 15.9072 14.6846 15.7246L19.9242 19.2172L20.8859 18.576L19.3301 13.9092C21.1025 12.5654 22 10.5801 22 8ZM19.5644 17.7754L14.9072 14.6709L14.7099 14.7061C13.6074 14.9014 12.3594 15 11 15C4.27148 15 1.00049 12.71 1.00049 8C1.00049 3.28955 4.27149 1 11 1C17.7285 1 21 3.28955 21 8C21 10.4082 20.1689 12.1436 18.458 13.3037L18.1455 13.5166L19.5644 17.7754Z\" fill=\"#17171A\"></path><path d=\"M10.4932 12.75C10.9074 12.75 11.2432 12.4142 11.2432 12C11.2432 11.5858 10.9074 11.25 10.4932 11.25C10.0789 11.25 9.74316 11.5858 9.74316 12C9.74316 12.4142 10.0789 12.75 10.4932 12.75Z\" fill=\"#17171A\"></path><path d=\"M11 3C9.15674 3 8.5 4.2915 8.5 5.5V6H9.5V5.5C9.5 4.81592 9.76025 4 11 4C12.2402 4 12.5 4.81592 12.5 5.5C12.5 6.22363 12.0957 6.58301 11.4355 7.11035C10.7949 7.62256 9.99756 8.25928 9.99317 9.5V10.5H10.9932V9.50244C10.995 8.96088 11.2225 8.62286 11.613 8.26623C11.7443 8.14636 11.8937 8.02429 12.0596 7.8916C12.7012 7.37891 13.5 6.74121 13.5 5.5C13.5 4.2915 12.8428 3 11 3Z\" fill=\"#17171A\"></path>\n    </svg>\n}\n\nexport const ChevronDownIcon = (props: JSXInternal.SVGAttributes<SVGSVGElement>) => {\n    return <svg viewBox=\"0 0 16 10\" fill=\"none\" {...props} xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M8 8.03491L0 0.0349121V1.44897L8 9.44897L16 1.44897V0.0349121L8 8.03491Z\" fill=\"#17171A\"></path>\n    </svg>\n}\n\nexport const ChevronUpIcon = (props: JSXInternal.SVGAttributes<SVGSVGElement>) => {\n    return <svg viewBox=\"0 0 16 10\" fill=\"none\" {...props} xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M8 0.0349121L0 8.03491V9.44897L8 1.44897L16 9.44897V8.03491L8 0.0349121Z\" fill=\"#17171A\"></path>\n    </svg>\n}\n\nexport const LeftArrowIcon = (props: JSXInternal.SVGAttributes<SVGSVGElement>) => {\n    return <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" {...props} xmlns=\"http://www.w3.org/2000/svg\">\n        <g clip-path=\"url(#a)\"><path d=\"M8.3 19h1.4l-5.93-6H22v-1H3.64l6.07-6H8.28L1.8 12.43 8.3 19Z\" /></g><defs><clipPath id=\"a\"><path d=\"M0 0h24v24H0z\" /></clipPath></defs>\n    </svg>\n}\n\nexport const RightArrowIcon = (props: JSXInternal.SVGAttributes<SVGSVGElement>) => {\n    return <svg viewBox=\"0 0 24 24\" fill=\"currentColor\" {...props} xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M15.7 5h-1.4l5.93 6H2v1h18.36l-6.07 6h1.43l6.49-6.43L15.7 5Z\" />\n    </svg>\n}\n\nexport const CheckIcon = (props: JSXInternal.SVGAttributes<SVGSVGElement>) => {\n    return <svg fill=\"none\" viewBox=\"0 0 12 9\" {...props} xmlns=\"http://www.w3.org/2000/svg\" >\n        <path stroke-linejoin=\"round\" stroke-linecap=\"round\" stroke-width=\"2\" d=\"M1.5 5L4.6 7.99999L11 1\"></path>\n    </svg>\n}\n\nexport const FilterIcon = (props: JSXInternal.SVGAttributes<SVGSVGElement>) => {\n    return <svg viewBox=\"0 0 18 18\" fill=\"none\" {...props} xmlns=\"http://www.w3.org/2000/svg\">\n        <path d=\"M15.9638 2.74194C15.7923 1.44946 14.9356 0.741943 13.5 0.741943C12.0644 0.741943 11.2077 1.44946 11.0363 2.74194H0V3.74194H11.0363C11.2077 5.03442 12.0644 5.74194 13.5 5.74194C14.9356 5.74194 15.7923 5.03442 15.9638 3.74194H18V2.74194H15.9638ZM13.5 4.74194C12.4482 4.74194 12 4.29321 12 3.24194C12 2.19067 12.4482 1.74194 13.5 1.74194C14.5518 1.74194 15 2.19067 15 3.24194C15 4.29321 14.5518 4.74194 13.5 4.74194Z\"></path>\n        <path d=\"M4.5 6.74194C3.0661 6.74194 2.20947 7.44763 2.03656 8.73706H0V9.73706H2.03589C2.20593 11.0324 3.06268 11.7419 4.5 11.7419C5.93732 11.7419 6.79407 11.0324 6.96411 9.73706H18V8.73706H6.96344C6.79053 7.44763 5.9339 6.74194 4.5 6.74194ZM4.5 10.7419C3.44873 10.7419 3 10.2937 3 9.24194C3 8.19067 3.44873 7.74194 4.5 7.74194C5.55127 7.74194 6 8.19067 6 9.24194C6 10.2937 5.55127 10.7419 4.5 10.7419Z\"></path>\n        <path d=\"M13.5 12.7419C12.0644 12.7419 11.2077 13.4495 11.0363 14.7419H0V15.7419H11.0363C11.2077 17.0344 12.0644 17.7419 13.5 17.7419C14.9356 17.7419 15.7923 17.0344 15.9638 15.7419H18V14.7419H15.9638C15.7923 13.4495 14.9356 12.7419 13.5 12.7419ZM13.5 16.7419C12.4482 16.7419 12 16.2937 12 15.2419C12 14.1902 12.4482 13.7419 13.5 13.7419C14.5518 13.7419 15 14.1902 15 15.2419C15 16.2937 14.5518 16.7419 13.5 16.7419Z\"></path>\n    </svg>\n}\nexport const ArticleThumbnailIcon = (props: JSXInternal.SVGAttributes<SVGSVGElement>) => {\n    return <svg\n\n        viewBox=\"0 0 80 81\"\n        fill=\"none\"\n        {...props}\n        xmlns=\"http://www.w3.org/2000/svg\"\n    >\n        <path\n            d=\"M20 10.7419V50.7419H3.33331V54.0753C3.33331 61.2302 4.37011 70.7419 13.3333 70.7419H66.6666C75.6315 70.7419 76.6666 61.2302 76.6666 54.0753V10.7419H20ZM13.3333 67.4086C11.1686 67.4086 6.66665 67.4086 6.66665 54.0753H20C20 67.4086 15.498 67.4086 13.3333 67.4086ZM73.3333 54.0753C73.3333 67.4086 68.8313 67.4086 66.6666 67.4086H20.3912C22.9205 63.9963 23.3333 58.5719 23.3333 54.0753V14.0753H73.3333V54.0753Z\"\n            fill=\"#17171A\"\n        />\n        <path\n            d=\"M66.6666 20.7419H30V24.0753H66.6666V20.7419Z\"\n            fill=\"#17171A\"\n        />\n        <path\n            d=\"M66.6666 30.7419H30V34.0753H66.6666V30.7419Z\"\n            fill=\"#17171A\"\n        />\n        <path\n            d=\"M46.6666 40.7419H30V60.7419H46.6666V40.7419ZM43.3333 57.4086H33.3333V44.0753H43.3333V57.4086Z\"\n            fill=\"#17171A\"\n        />\n        <path\n            d=\"M66.6666 40.7419H53.3333V44.0753H66.6666V40.7419Z\"\n            fill=\"#17171A\"\n        />\n        <path\n            d=\"M66.6666 50.7419H53.3333V54.0753H66.6666V50.7419Z\"\n            fill=\"#17171A\"\n        />\n    </svg>\n}","import createMicroMarkup from \"../../tools/micro-markup\";\n\nexport const escapeForFaq = createMicroMarkup({\n    a: [\"href\", \"target\", \"rel\"],\n    div: [],\n    span: [],\n    img: [({ name, value }) => name === \"src\" && new URL(value, new URL(window.location.toString())).hostname.endsWith(\"nespresso.com\")],\n    p: [],\n    strong: [],\n    em: [],\n    li: [],\n    ol: [],\n    ul: [],\n    br: [],\n    u: [],\n    b: [],\n    sup: []\n  });\n  ","import { ComponentChildren, createContext } from \"preact\";\nimport { type JSXInternal } from \"preact/src/jsx\";\nimport { useContext } from \"preact/hooks\";\nimport { type BarEngine, type BarState } from \"../../engine\";\n\nconst PreactContext = createContext<BarEngine>(undefined as any as BarEngine);\n\nexport const BarContextProvider = PreactContext.Provider as <S extends BarState>(props: { value: BarEngine<S>; children: ComponentChildren; }) => JSXInternal.Element\nexport const BarContextConsumer = PreactContext.Consumer;\nexport const useBarContext = () => useContext(PreactContext)","import { getCurrency } from \"@kissui/helpers/src/getCurrency\";\nimport { useEffect, useRef } from \"preact/hooks\";\nimport { ProductResult } from \"../raw-item-parsers/product\";\n\ntype Impression = {\n    list: string;\n    position: number;\n    name: string;\n    id: string;\n    price: number;\n    dimension44: string;\n    dimension53: string;\n    dimension54: string;\n    dimension55: string;\n    dimension56: string;\n    dimension57: string;\n    dimension192: string;\n    category: \"capsule\" | \"machine\" | \"accessory\";\n    brand: string;\n}\n\nconst flushableBuffer = function () {\n    const buffer = [] as Impression[];\n    const sent = new Set<string>();\n    let timer = undefined as undefined | number;\n    const flush = () => {\n        timer = undefined;\n        if (buffer.length === 0) { return }\n        const currency = getCurrency()\n        window.gtmDataObject.push({\n            'event': 'impression',\n            'eventAction': 'Product Impression',\n            'currencyCode': currency,\n            'eventRaisedBy': 'Page Builder',\n            'ecommerce': {\n                'impressions': buffer.splice(0)\n            }\n        })\n    }\n    \n    const push = (impression: Impression) =>  {\n        if (sent.has(impression.id)) { return }\n        if (timer === undefined) {\n            timer = window.setTimeout(flush, 300);\n        }\n        sent.add(impression.id)\n        buffer.push(impression)\n    }\n    return ({ push, flush })\n}\n\nconst impressionBuffer = {\n    \"Search Floating\": flushableBuffer(),\n    \"Search Page - Search Results\": flushableBuffer(),\n    \"Search Page - Related Items\": flushableBuffer(),\n    \"Search Page - Popular Items\": flushableBuffer()\n};\nexport type ProductListNames = keyof typeof impressionBuffer;\n\nconst threshold = 0.75\n/**\n* @see https://dsu-confluence.nestle.biz/display/DIANA/HQ+PB+Tracking+-+Product+Impression+and+Click\n*/\nexport const useProductImpressionTracking = <T extends HTMLElement = HTMLElement>({ sku, position, trackingMetadata: { listName } }: Pick<ProductResult, \"sku\" | \"position\"> & { trackingMetadata: Pick<ProductResult[\"trackingMetadata\"], \"listName\"> }) => {\n    const host = useRef<T>(null)\n    useEffect(() => {\n\n        const ecapiProductPrm = window.napi.catalog().getProduct(sku);\n        const pushTracking = async () => {\n            const ecapiProduct = await ecapiProductPrm;\n\n            impressionBuffer[listName].push({\n                list: listName,\n                position: position + 1,\n                name: ecapiProduct!.internationalName,\n                id: ecapiProduct!.internationalId,\n                price: ecapiProduct!.unitPrice,\n                dimension44: ecapiProduct!.category.includes(\"Discovery\").toString(),\n                dimension53: ecapiProduct!.legacyId,\n                dimension54: ecapiProduct!.name,\n                dimension55: ecapiProduct!.category,\n                dimension56: ecapiProduct!.technologies.map(encodedTech => /machineTechno\\/(.*)$/.exec(encodedTech)![1]).join(\", \"),\n                dimension57: ecapiProduct!.bundled ? \"bundle\" : \"single\",\n                dimension192: ecapiProduct!.inStock ? \"in stock\" : \"out of stock\",\n                category: ecapiProduct!.type,\n                brand: 'Nespresso'\n            })\n        };\n\n        const intersectionObserver: IntersectionObserver = new IntersectionObserver(async (entry) => {\n            const isVisible = entry?.[0].intersectionRatio > threshold;\n            if (!isVisible) { return }\n            pushTracking();\n            intersectionObserver.disconnect();\n        }, { threshold: [threshold] });\n\n        intersectionObserver.observe(host.current!);\n        return () => intersectionObserver.disconnect()\n    }, [sku])\n\n    return host\n}\n","import { ResultItemCoveoMetadata, RawForMetadata } from \"./coveo-metadata\";\n\nexport type RawFaqResult = {\n    title: string;\n    raw: {\n        commontab: \"FAQs\";\n        faq_answer: string;\n        faq_question: string;\n    }\n} & RawForMetadata\n\nexport type FAQResult = {\n    position: number;\n    faqAnswer: string;\n    faqQuestion: string;\n    /**\n     * @internal\n     */\n    trackingMetadata: ResultItemCoveoMetadata\n}\n\nexport const parseRawFAQResult = (ctx: unknown) => (result: RawFaqResult, position: number): FAQResult | Error => {\n    try {\n        return {\n            position,\n            faqAnswer: result.raw.faq_answer,\n            faqQuestion: result.raw.faq_question,\n            trackingMetadata: {\n                rankingModifier: result.rankingModifier,\n                uri: result.uri,\n                permanentid: result.raw.permanentid,\n                source: result.raw.source,\n                urihash: result.raw.urihash,\n            },\n        }\n    } catch (error) {\n        if(error instanceof Error) {return error}\n        return new Error(JSON.stringify(error))\n    }\n}\n","export const decodeTitle = (title: string) => {\n    return decodeURI(title)\n        .replaceAll(\"_\", \" \")\n        .replaceAll(/([a-z])([A-Z0-9])/g,  (_, tail, head) => `${tail}\\u200B${head}`)\n        .replace(/\\.pdf$/, \"\")\n}","import { decodeTitle } from \"../../../../shared/decode-pdf-title\";\nimport { ResultItemCoveoMetadata, RawForMetadata } from \"./coveo-metadata\";\n\nexport type RawArticleResult = {\n    title: string;\n    clickUri: string;\n    raw: {\n        commontab: \"Articles\";\n        filetype: string;\n        nes_article_category?: \"Recipes\" | \"Machine Assistance\";\n        nes_prd_image_url?: string;\n    }\n} & RawForMetadata\n\nexport type ArticleResult = {\n    categoryId?: \"Recipes\" | \"Machine Assistance\";\n    category?: string;\n    title: string;\n    url: string;\n    imageUrl?: string;\n    position: number;\n     /**\n     * @internal\n     */\n     trackingMetadata: ResultItemCoveoMetadata\n}\n\nexport const parseRawArticlesResults = (ctx: {\n    copywriting: {\n        articleCategories: Record<Exclude<RawArticleResult[\"raw\"][\"nes_article_category\"], undefined>, string>\n    }\n}) => (result: RawArticleResult, position: number): ArticleResult| Error => {\n    try {\n        const title = result.raw.filetype === \"pdf\" ? decodeTitle(result.title) : result.title\n        return ({\n            position,\n            categoryId: result.raw.nes_article_category,\n            category: result.raw.nes_article_category && ctx.copywriting.articleCategories[result.raw.nes_article_category],\n            title,\n            url: result.clickUri,\n            imageUrl: result.raw.nes_prd_image_url,\n            trackingMetadata: {\n                rankingModifier: result.rankingModifier,\n                uri: result.uri,\n                permanentid: result.raw.permanentid,\n                source: result.raw.source,\n                urihash: result.raw.urihash,\n            },\n        })\n    } catch (error) {\n        if(error instanceof Error) {return error}\n        return new Error(JSON.stringify(error))\n    }\n}\n\n\n","import { BarProps, PageProps, ProductCategory, ProductTechnology, anomalousUSMikDevices } from \"../../..\";\nimport { ProductListNames } from \"../analytics/impressions\";\nimport { ResultItemCoveoMetadata, RawForMetadata } from \"./coveo-metadata\";\n\nexport type RawProductCommons = {\n    title: string,\n    clickUri: string,\n    raw: {\n        commontab: \"Products\",\n        nes_prd_categories: ProductCategory,\n        nes_prd_image_url: string,\n        nes_prd_price: number,\n        nes_prd_sku: string,\n        nes_prd_quantities: string,\n        nes_prd_sales_multiple: number,\n        nes_prd_technology: ProductTechnology[] | undefined,\n        nes_prd_strikethrough_price?: number,\n        nes_prd_price_display: \"ALL\" | \"ONLY_AUTHENTICATED\"\n    }\n} & RawForMetadata\n\nexport type RawMachineProductResult = RawProductCommons & {\n    childResults: Omit<RawMachineProductResult, \"childResults\">[]\n    raw: {\n        nes_prd_categories: \"Machine\",\n        nes_prd_color: string,\n        nes_prd_color_css: string,\n    }\n}\n\nexport type RawCapsuleCommons = {\n    raw: {\n        nes_prd_bundled: \"false\" | \"true\",\n        nes_prd_categories: \"Capsule\",\n        nes_prd_unit_quantity: number,\n        nes_prd_sleeve_main_price?: \"false\" | \"true\",\n    }\n}\n\nexport type RawSleeveCapsule = RawProductCommons & RawCapsuleCommons & {\n    raw: {\n        nes_prd_bundled: \"false\",\n        nes_prd_cup_size: string[],\n    }\n}\n\nexport type RawBundleCapsule = RawProductCommons & RawCapsuleCommons & {\n    raw: {\n        nes_prd_bundled: \"true\",\n    }\n}\n\nexport type RawCapsuleProductResult = RawSleeveCapsule | RawBundleCapsule\n\nexport type RawAccessoryProductResult = RawProductCommons & {\n    raw: {\n        nes_prd_categories: \"Accessory\"\n    };\n}\n\nexport type RawProductResult = RawAccessoryProductResult | RawCapsuleProductResult | RawMachineProductResult\n\nexport type ProductCommons = {\n    position: number;\n    sku: string;\n    imageUrl: string;\n    title: string;\n    url: string;\n    quantities: number[];\n    price: number;\n    previousPrice: number | undefined;\n    prdTechnologies: ProductTechnology[];\n    salesMultiple: number;\n    priceDisplay: \"ALL\" | \"ONLY_AUTHENTICATED\";\n    /**\n     * @internal\n     */\n    trackingMetadata: ResultItemCoveoMetadata & { listName: ProductListNames }\n}\n\nexport type CapsuleCommons = {\n    categoryId: \"Capsule\";\n    category: string;\n    capsuleNetWeightG: number | undefined;\n    sleeveMainPrice: boolean;\n    capsules: number;\n}\n\nexport type BundledCapsule = ProductCommons & CapsuleCommons & {\n    bundled: true\n}\n\nexport type SleevedCapsule = ProductCommons & CapsuleCommons & {\n    bundled: false\n    cupSizes: {\n        label: string;\n        volume: string | undefined;\n    }[]\n}\n\nexport type CapsuleProduct = BundledCapsule | SleevedCapsule\n\nexport type MachineProduct = ProductCommons & {\n    machineGroup: Omit<MachineProduct, \"machineGroup\">[],\n    color: string;\n    colorCss: string;\n    categoryId: \"Machine\";\n    category: string;\n    sku: string;\n    imageUrl: string;\n    title: string;\n    url: string;\n    quantities: number[];\n    price: number;\n    previousPrice: number | undefined;\n    salesMultiple: number;\n}\n\nexport type AccessoryProduct = ProductCommons & {\n    categoryId: \"Accessory\";\n    category: string;\n}\n\nexport type ProductResult = MachineProduct | AccessoryProduct | CapsuleProduct\n\ntype UsedCtx =\n    Pick<PageProps & BarProps, \"skuToNewPrice\" | \"skuToStrikethroughPrice\" | \"skuToCapsuleNetWeightG\" | \"cupSizesVolumes\" | \"copywriting\">\n\nexport const parseRawProductResult = (ctx: UsedCtx, listName: ProductListNames) => (res: RawProductResult, position: number): ProductResult | Error => {\n    try {\n        const rawQuantities = res.raw.nes_prd_quantities.split(\";\").filter(s => s).map(Number)\n\n        const sizeBracket = Math.floor(rawQuantities.length / 5) * 5;\n        const truncatedSize = Math.min(15, Math.max(5, sizeBracket));\n        const quantities = rawQuantities.slice(0, truncatedSize);\n\n        const getCommons = (res: RawProductCommons): ProductCommons => {\n            return {\n                position,\n                trackingMetadata: {\n                    rankingModifier: res.rankingModifier,\n                    uri: res.uri,\n                    permanentid: res.raw.permanentid,\n                    source: res.raw.source,\n                    urihash: res.raw.urihash,\n                    listName,\n                },\n                sku: res.raw.nes_prd_sku,\n                imageUrl: res.raw.nes_prd_image_url,\n                title: res.title,\n                url: res.clickUri,\n                quantities,\n                price: ctx.skuToNewPrice[res.raw.nes_prd_sku] || res.raw.nes_prd_price,\n                previousPrice: ctx.skuToStrikethroughPrice[res.raw.nes_prd_sku] || res.raw.nes_prd_strikethrough_price,\n                prdTechnologies: res.raw.nes_prd_technology ?? [],\n                salesMultiple: res.raw.nes_prd_sales_multiple,\n                priceDisplay: res.raw.nes_prd_price_display\n            }\n        }\n\n        if (res.raw.nes_prd_categories === \"Capsule\") {\n            const capsuleCommons: CapsuleCommons = {\n                categoryId: res.raw.nes_prd_categories,\n                category: ctx.copywriting.productCategories[res.raw.nes_prd_categories],\n                capsuleNetWeightG: ctx.skuToCapsuleNetWeightG[res.raw.nes_prd_sku],\n                sleeveMainPrice: res.raw.nes_prd_sleeve_main_price === \"true\",\n                capsules: res.raw.nes_prd_unit_quantity,\n            }\n            if (res.raw.nes_prd_bundled === \"true\") {\n                return ({ ...getCommons(res), ...capsuleCommons, bundled: true as const }) satisfies BundledCapsule\n            }\n            return ({\n                ...getCommons(res),\n                ...capsuleCommons,\n                bundled: false as const,\n                cupSizes: res.raw.nes_prd_cup_size\n                    .map(label => ({\n                        label,\n                        volume: ctx.cupSizesVolumes.find(({ cupSize }) => cupSize === label)?.volume\n                    })),\n            }) satisfies SleevedCapsule\n        }\n\n        if (res.raw.nes_prd_categories === \"Machine\") {\n            const machineRes = res as RawMachineProductResult\n            const parseMachine = (machineRes: RawMachineProductResult) => ({\n                ...getCommons(machineRes),\n                color: machineRes.raw.nes_prd_color,\n                colorCss: machineRes.raw.nes_prd_color_css,\n                categoryId: machineRes.raw.nes_prd_categories,\n                category: ctx.copywriting.productCategories[machineRes.raw.nes_prd_categories],\n            })\n            return ({\n                ...parseMachine(machineRes),\n                machineGroup: [machineRes, ...(machineRes.childResults as RawMachineProductResult[])].map(parseMachine),\n            }) satisfies MachineProduct\n        }\n\n        return ({\n            ...getCommons(res),\n            categoryId: res.raw.nes_prd_categories,\n            category: ctx.copywriting.productCategories[res.raw.nes_prd_categories],\n        }) satisfies AccessoryProduct\n    } catch (error) {\n        if (error instanceof Error) { return error }\n        return new Error(JSON.stringify(error))\n    }\n}\n","const rnd16 = () => Math.floor(Math.random() * (2 ** 16)).toString(16).padStart(4, \"0\");\n\nexport const randomUUID = () => {\n    // TODO REVIEW This might not be needed, since localhost is typically considered secure context\n    if (!self.isSecureContext) {\n        return `${rnd16()}${rnd16()}-${rnd16()}-${rnd16()}-${rnd16()}-${rnd16()}${rnd16()}` as const\n    }\n    return self.crypto.randomUUID()\n}","\nimport { SharedProps } from \"./types\"\n\nexport const fieldsToInclude = [\n    \"author\",\n    \"language\",\n    \"urihash\",\n    \"objecttype\",\n    \"collection\",\n    \"source\",\n    \"permanentid\",\n    \"date\",\n    \"parents\",\n    \"commontab\",\n    \"filetype\",\n    \"nes_prd_sku\",\n    \"nes_prd_image_url\",\n    \"nes_prd_categories\",\n    \"nes_prd_sleeve_main_price\",\n    \"nes_prd_name\",\n    \"nes_prd_price\",\n    \"nes_prd_technology\",\n    \"faq_question\",\n    \"faq_answer\",\n    \"nes_prd_cup_size_oz\",\n    \"nes_prd_sales_multiple\",\n    \"nes_prd_cup_size\",\n    \"nes_prd_unit_quantity\",\n    \"nes_article_category\",\n    \"nes_prd_color\",\n    \"nes_prd_color_css\",\n    \"nes_prd_usage\",\n    \"nes_prd_intensity\",\n    \"nes_prd_quantities\",\n    \"nes_prd_bundled\",\n    \"nes_prd_strikethrough_price\",\n]\n\nexport const fieldsToIncludeB2B = [...fieldsToInclude,\n    \"nes_prd_price_display\",\n    \"nes_prd_sku\"\n]\n\nexport const getCoveoAnalytics = ({ visitorId }: { visitorId: string }) => {\n    return ({\n        clientId: visitorId,\n        \"clientTimestamp\": new Date().toISOString(),\n        \"documentReferrer\": \"default\",\n        \"originContext\": \"Search\",\n        \"documentLocation\": window.location.href\n    })\n}\n\nexport const getCoveoContext = (ctx: Pick<SharedProps, \"website\" | \"sitename\" | \"contextWebsite\" | \"contextSitename\" | \"lang\" | \"locale\" | \"country\">) => {\n    return ({\n        \"website\": ctx.website,\n        \"sitename\": ctx.sitename,\n        \"context_website\": ctx.contextWebsite,\n        \"context_sitename\": ctx.contextSitename,\n        \"language\": ctx.lang,\n        \"locale\": ctx.locale,\n        \"country\": ctx.country\n    })\n}\n\nexport const getCoveoGroupBy = (q: string) => {\n    return [\n        {\n            \"field\": \"@commontab\",\n            \"queryOverride\": q,\n            \"constantQueryOverride\": \"@uri\",\n            \"advancedQueryOverride\": \"@uri\"\n        }\n    ]\n}\n\n","export const logAggregateError = (error: Error) => {\n    if (!(error instanceof AggregateError)) {\n        return console.error(error.message)\n    }\n\n    if (error.message) {\n        console.error(error.message)\n        console.groupCollapsed(\"Error details\")\n    } \n    for (const subError of error.errors) { logAggregateError(subError) }\n    if (error.message) { console.groupEnd() }\n\n}","import { Signal, effect, signal, useComputed } from \"@preact/signals\"\nimport { useEffect, useMemo } from \"preact/hooks\";\nimport { AsyncValue } from \"./async-value\";\nimport { logAggregateError } from \"./log-aggregate-error\";\n\nexport const asyncQuery = <T, P>(fetchHandler: (params: P, abortSignal: AbortSignal) => Promise<T>, pSignal: Signal<P>) => {\n    const resultsSignal = signal<AsyncValue<T, P>>({ status: \"pending\", params: pSignal.peek() })\n\n    const cleanup = effect(() => {\n        const params = pSignal.value\n        const abortController = new AbortController();\n        resultsSignal.value = { status: \"pending\", params }\n\n        fetchHandler(params, abortController.signal)\n            .then((result) => {\n                resultsSignal.value = { status: \"fulfilled\", value: result }\n            }, (error) => {\n                if (abortController.signal.aborted) {\n                    return\n                } else {\n                    logAggregateError(error);\n                    resultsSignal.value = { status: \"rejected\", reason: error }\n                }\n            })\n\n        return () => {\n            abortController.abort(\"Another query was made\")\n        }\n    })\n    return [resultsSignal, cleanup] as const\n}\n\n\nexport const useUnwrap = <T, P, R>(signal: Signal<AsyncValue<T, P, R>>, fallback: T) => {\n    return useComputed(() => {\n        const sigVal = signal.value;\n        if (sigVal.status !== \"fulfilled\") { return fallback }\n        return sigVal.value\n    })\n\n}\n","export const tabs = [\"Products\", \"Articles\", \"FAQs\"] as const\nexport type Tab = \"Products\" | \"Articles\" | \"FAQs\";\nexport const isTab = (val: unknown): val is Tab => {\n    return tabs.includes(val as Tab)\n}\n\nexport const ProductCategories = [\"Capsule\", \"Machine\", \"Accessory\"] as const\nexport type ProductCategory = typeof ProductCategories[number]\nexport const isProductCategory = (val: unknown): val is ProductCategory => {\n    return ProductCategories.includes(val as ProductCategory)\n}\n\n/**\n * @deprecated\n * This exists because US uses the lengow field instead of the ecapi one, this will break after the push api migration is completed\n */\nexport const anomalousUSMikDevices = \"Milk Devices\" as const\n\nexport const ProductTechnologies = [\"Vertuo\", \"Original\",\"Pro\", anomalousUSMikDevices] as const\nexport type ProductTechnology = typeof ProductTechnologies[number]\nexport const isProductTechnology = (val: unknown): val is ProductTechnology => {\n    return ProductTechnologies.includes(val as ProductTechnology)\n}\n\nexport const ActionCauses = [\n    \"load\",\n    \"tabChange\",\n    \"queryAutoCorrection\",\n    \"autoTabChange\",\n    \"recentQueriesClick\",\n    \"recentQueriesClickStandalone\",\n    \"querySuggestionClick\",\n    \"querySuggestionClickStandalone\",\n    \"searchboxSubmit\",\n    \"searchboxSubmitStandalone\",\n    \"facetDeselectAll\",\n    \"facetSelect\",\n    \"facetDeselect\",\n    \"facetBreadcrumbDeselect\",\n    \"facetBreadcrumbsDeselectAll\",\n\n    \"pageChange\",\n] as const\nexport type ActionCause = typeof ActionCauses[number]\nexport const isActionCause = (val: unknown): val is ActionCause => {\n    return ActionCauses.includes(val as ActionCause)\n}\n\nexport type PriceRange = `${number}:${number}`\n\nexport const isNotUndefined = <T>(v: T): v is Exclude<T, undefined> => {\n    return v !== undefined\n}\n\nexport const isObject = (obj: unknown): obj is object => typeof obj === \"object\" && obj !== null;\nexport const isSingleton = (arr: unknown[]): arr is [unknown] => arr.length === 1\n\nexport const isURL = (maybeUrl: unknown): maybeUrl is string => {\n    if (typeof maybeUrl !== \"string\") { return false }\n    try {\n        new URL(maybeUrl, window.location.toString())\n        return true\n    } catch (error) {\n        return false\n    }\n}\n\nexport const isError = (e: unknown): e is Error => e instanceof Error\nexport const isNotError = <T>(e: T| Error): e is T => !(e instanceof Error)\n\nexport const isUnknownArray = (e: unknown): e is unknown[] => {\n    return Array.isArray(e)\n}\nexport const isStringArray = (val: unknown): val is string[] => {\n    if (!Array.isArray(val)) { return false }\n    return val.every((v) => typeof v === \"string\")\n}\n\nexport type PriceFormatter = { short: (amount: number) => string; }\n\nexport type SharedProps = {\n    searchPageUrl: string;\n    lang: string;\n    country: string;\n    locale: string;\n    currency: any;\n    website: string;\n    sitename: string;\n    contextWebsite: string;\n    contextSitename: string;\n    searchHub: string;\n    visitorId: string;\n    coveoCopywriting: Record<string, string>;\n    skuToCapsuleNetWeightG: Record<string, number | undefined>;\n    skuToStrikethroughPrice: Record<string, number | undefined>;\n    skuToNewPrice: Record<string, number | undefined>;\n}\n\nexport type PageProps = SharedProps & {\n    shadeToColors: Record<string, string[]>;\n    displayRecommendations: boolean;\n    displaySleevePrice: boolean;\n    sleeveMainPrice: boolean;\n    addToCartShape: \"square\" | \"round\";\n    cupSizesVolumes: Readonly<{ cupSize: string; volume: string }[]>;\n    priceRangeFilterOptions: Readonly<{\n        range: `${number}:${number}`;\n        label: string;\n    }[]>,\n    copywriting: {\n        tabTitles: {\n            products: string;\n            articles: string;\n            faqs: string;\n        };\n        recommendationLabel: string;\n        articleCategories: {\n            Recipes: string;\n            \"Machine Assistance\": string;\n        };\n        productCategories: {\n            Capsule: string;\n            Machine: string;\n            Accessory: string;\n        };\n        productTechnologies: {\n            Vertuo: string;\n            Original: string;\n            Pro: string,\n            [anomalousUSMikDevices]: string;\n        };\n        productRoasting: Partial<Record<string, string>>;\n        productFiltersTitles: {\n            prdCategories: string;\n            prdTechnologies: string;\n            prdPrice: string;\n            prdMachineColors: string;\n            prdCupSizes: string,\n            prdIntensity: string,\n            /**\n             * @warning\n             * Potentially undefined since it was added later, some markets might not have updated it\n             */\n            prdRoasting?: string,\n            prdTastingNotes: string,\n            prdUsages: string\n        };\n    }\n}\n","\nimport { PageProps, ProductCategories, ProductCategory, ProductTechnologies, ProductTechnology, isNotUndefined } from \"../../shared/types\";\nimport { AppURLState } from \"../../url-store/app-store\";\n\n\nexport type RawFacet<F extends string, V> = {\n    field: F;\n    values: {\n        value: V;\n        state: \"selected\" | \"idle\";\n        numberOfResults: number;\n    }[];\n}\n\nexport type RawFacets = Array<\n    RawFacet<\"nes_prd_categories\", ProductCategory> |\n    RawFacet<\"nes_prd_technology\", ProductTechnology> |\n    RawFacet<\"nes_prd_color\", string> |\n    RawPriceFacet\n>\n\ntype CoveoMetadata = {\n    title: string;\n    field: string;\n    id: string;\n    facetPosition: number;\n    valuePosition: number;\n    value: string;\n    displayValue: string;\n} & ({\n    facetType: \"numericalRange\";\n    start: number;\n    end: number;\n    endInclusive: boolean;\n} | { facetType: \"specific\" })\n\n\nconst parseCommon = <const H extends RawFacetOrdering[number]>(rawField: H, title: string) => {\n    return <F extends string, V extends string>(e: RawFacet<F, V>[\"values\"][number], i: number) => {\n        return ({\n            value: e.value,\n            selected: e.state === \"selected\",\n            results: e.numberOfResults,\n            /**\n             * @internal\n             */\n            trackingMetadata: {\n                \"title\": title,\n                \"field\": rawField as H,\n                \"id\": rawField as H,\n                \"facetPosition\": rawFacetOrdering.indexOf(rawField) + 1,\n                \"valuePosition\": i + 1,\n                \"facetType\": \"specific\" as const,\n                \"displayValue\": e.value,\n                value: e.value,\n            } satisfies CoveoMetadata\n        })\n    }\n}\nexport const getFacetByField = <F extends string>(field: F) => <E extends { field: string }>(val: E): val is E & { field: F } => val.field === field\n\nconst pluckColor = <V extends { value: string }>(\n    values: V[],\n    color: string\n) => {\n    const i = values.findIndex(({ value }) => value === color);\n    if (i < 0) { return; }\n    return values.splice(i, 1)[0];\n};\n\nconst unpackShadesIntoColors = (\n    values: { value: string; state: \"selected\" | \"idle\" }[],\n    ctx: { shadeToColors: Record<string, string[]> },\n) => {\n    for (const shade in ctx.shadeToColors) {\n        const shadeValue = pluckColor(values, shade);\n\n        if (!shadeValue) { continue; }\n\n        for (const color of ctx.shadeToColors[shade]) {\n            values.unshift({ value: color, state: shadeValue.state });\n        }\n    }\n};\n\nconst packColorsIntoShades = (\n    values: { value: string; state: \"selected\" | \"idle\"; numberOfResults: number; }[],\n    ctx: { shadeToColors: Record<string, string[]> },\n) => {\n\n    for (const shade in ctx.shadeToColors) {\n        const shadeValue = pluckColor(values, shade) ?? {\n            value: shade,\n            numberOfResults: 0,\n            state: \"idle\"\n        };\n\n        for (const targetColor of ctx.shadeToColors[shade]) {\n            const color = pluckColor(values, targetColor);\n\n            if (!color) { continue; }\n            const selected = shadeValue.state === \"selected\" || color.state === \"selected\"\n            shadeValue.state = selected ? \"selected\" : \"idle\";\n            shadeValue.numberOfResults += color.numberOfResults;\n        }\n\n        if (shadeValue.numberOfResults > 0) {\n            values.unshift(shadeValue);\n        }\n    }\n};\n\nexport const machineColorsFacet = {\n    inbound: (\n        rawFacet: RawFacet<\"nes_prd_color\", string>,\n        ctx: Pick<PageProps, \"shadeToColors\" | \"copywriting\">\n    ) => {\n        packColorsIntoShades(rawFacet.values, ctx)\n        return rawFacet.values.map(parseCommon(\"nes_prd_color\", ctx.copywriting.productFiltersTitles.prdMachineColors))\n    },\n    outbound: (prdMachineColors: string[], ctx: {\n        shadeToColors: Record<string, string[]>\n    }) => {\n        const currentValues = prdMachineColors\n            .map((value) => ({ value, state: \"selected\" as const }))\n\n        unpackShadesIntoColors(currentValues, ctx)\n\n        return ({\n            \"injectionDepth\": 1000,\n            \"numberOfValues\": 1000,\n            \"sortCriteria\": \"automatic\",\n            \"resultsMustMatch\": \"atLeastOneValue\",\n            \"type\": \"specific\",\n            currentValues,\n            \"facetId\": \"nes_prd_color\",\n            \"field\": \"nes_prd_color\"\n        })\n    }\n}\n\nexport type RawPriceFacet = {\n    field: \"nes_prd_price\";\n    values: {\n        start: number;\n        end: number;\n        state: \"selected\" | \"idle\";\n        numberOfResults: number;\n    }[];\n}\n\n\nexport const priceFacet = {\n    inbound: (\n        rawFacet: RawPriceFacet,\n        ctx: Pick<PageProps, \"priceRangeFilterOptions\" | \"copywriting\">\n    ) => {\n        return ctx.priceRangeFilterOptions\n            .map(({ range }) => rawFacet.values.find((e) => `${e.start}:${e.end}` === range))\n            .filter(isNotUndefined)\n            .map(({ start, end, numberOfResults, state }, i) => ({\n                value: `${start}:${end}` as const,\n                selected: state === \"selected\",\n                results: numberOfResults,\n                /**\n                * @internal\n                */\n                trackingMetadata: {\n                    \"title\": ctx.copywriting.productFiltersTitles.prdPrice,\n                    \"field\": \"nes_prd_price\" as const,\n                    \"id\": \"nes_prd_price\" as const,\n                    \"facetPosition\": rawFacetOrdering.indexOf(\"nes_prd_price\") + 1,\n                    \"valuePosition\": i + 1,\n                    \"facetType\": \"numericalRange\" as const,\n                    start,\n                    end,\n                    \"value\": `${start}..${end}`,\n                    \"endInclusive\": true,\n                    \"displayValue\": ctx.priceRangeFilterOptions.find(({ range }) => range === `${start}:${end}`)!.label\n                } satisfies CoveoMetadata\n            }))\n    },\n    outbound: (\n        prdPriceRanges: string[],\n        ctx: Pick<PageProps, \"priceRangeFilterOptions\">\n    ) => {\n        return ({\n            \"injectionDepth\": 1000,\n            \"numberOfValues\": ctx.priceRangeFilterOptions.length,\n            \"sortCriteria\": \"ascending\",\n            \"rangeAlgorithm\": \"equiprobable\",\n            \"resultsMustMatch\": \"atLeastOneValue\",\n            \"currentValues\": ctx.priceRangeFilterOptions.map(({ range }) => {\n                const [start, end] = range.split(\":\").map(Number)\n                return ({ \"endInclusive\": true, \"state\": prdPriceRanges.includes(range) ? \"selected\" : \"idle\", start, end })\n            }),\n            \"preventAutoSelect\": false,\n            \"type\": \"numericalRange\",\n            \"facetId\": \"nes_prd_price\",\n            \"field\": \"nes_prd_price\",\n            \"generateAutomaticRanges\": false\n        })\n\n    }\n}\n\nexport const categoryFacet = {\n    inbound: (\n        rawFacet: RawFacet<\"nes_prd_categories\", ProductCategory>,\n        ctx: Pick<PageProps, \"copywriting\">,\n    ) => {\n        return ProductCategories\n            .map(cat => rawFacet.values.find((e) => e.value === cat))\n            .filter(isNotUndefined)\n            .map((e, i) => ({\n                value: e.value,\n                selected: e.state === \"selected\",\n                results: e.numberOfResults,\n                /**\n                 * @internal\n                 */\n                trackingMetadata: {\n                    \"title\": ctx.copywriting.productFiltersTitles.prdCategories,\n                    \"field\": \"nes_prd_categories\" as const,\n                    \"id\": \"nes_prd_categories\" as const,\n                    \"facetPosition\": rawFacetOrdering.indexOf(\"nes_prd_categories\") + 1,\n                    \"valuePosition\": i + 1,\n                    \"facetType\": \"specific\" as const,\n                    \"displayValue\": ctx.copywriting.productCategories[e.value],\n                    value: e.value,\n                } satisfies CoveoMetadata\n            }))\n    },\n    outbound: (prdCategories: ProductCategory[]) => {\n        const currentValues = ProductCategories.map((value) => ({\n            value, state: prdCategories.includes(value) ? \"selected\" : \"idle\"\n        }))\n        return ({\n            \"injectionDepth\": 1000,\n            \"numberOfValues\": 3,\n            \"sortCriteria\": \"automatic\",\n            \"resultsMustMatch\": \"atLeastOneValue\",\n            \"type\": \"specific\",\n            currentValues,\n            \"facetId\": \"nes_prd_categories\",\n            \"field\": \"nes_prd_categories\"\n        })\n\n    }\n}\n\nexport const technologyFacet = {\n    inbound: (\n        rawFacet: RawFacet<\"nes_prd_technology\", ProductTechnology>,\n        ctx: Pick<PageProps, \"copywriting\">,\n    ) => {\n\n        return ProductTechnologies\n            .map(tech => rawFacet.values.find((e) => e.value === tech))\n            .filter(isNotUndefined)\n            .map((e, i) => ({\n                value: e.value,\n                selected: e.state === \"selected\",\n                results: e.numberOfResults,\n                /**\n                 * @internal\n                 */\n                trackingMetadata: {\n                    \"title\": ctx.copywriting.productFiltersTitles.prdTechnologies,\n                    \"field\": \"nes_prd_technology\" as const,\n                    \"id\": \"nes_prd_technology\" as const,\n                    \"facetPosition\": rawFacetOrdering.indexOf(\"nes_prd_technology\") + 1,\n                    \"valuePosition\": i + 1,\n                    \"facetType\": \"specific\" as const,\n                    \"displayValue\": ctx.copywriting.productTechnologies[e.value],\n                    value: e.value,\n                } satisfies CoveoMetadata\n            }))\n    },\n    outbound: (prdTechnologies: ProductTechnology[]) => {\n        const currentValues = ProductTechnologies.map((value) => ({\n            value, state: prdTechnologies.includes(value) ? \"selected\" : \"idle\"\n        }))\n        return ({\n            \"injectionDepth\": 1000,\n            \"numberOfValues\": 3,\n            \"sortCriteria\": \"automatic\",\n            \"resultsMustMatch\": \"atLeastOneValue\",\n            \"type\": \"specific\",\n            currentValues,\n            \"facetId\": \"nes_prd_technology\",\n            \"field\": \"nes_prd_technology\"\n        })\n    }\n}\n\nexport const cupSizeFacet = {\n    inbound: (\n        rawFacet: RawFacet<\"nes_prd_cup_size\", string>,\n        ctx: Pick<PageProps, \"copywriting\">,\n    ) => {\n        return rawFacet.values.map(parseCommon(\"nes_prd_cup_size\", ctx.copywriting.productFiltersTitles.prdCupSizes))\n    },\n    outbound: (prdCupSizes: string[]) => {\n        const currentValues = prdCupSizes.map((value) => ({ value, state: \"selected\" as const }))\n\n        return ({\n            \"injectionDepth\": 1000,\n            \"numberOfValues\": 1000,\n            \"sortCriteria\": \"automatic\",\n            \"resultsMustMatch\": \"atLeastOneValue\",\n            \"type\": \"specific\",\n            currentValues,\n            \"facetId\": \"nes_prd_cup_size\",\n            \"field\": \"nes_prd_cup_size\"\n        })\n\n    }\n}\n\n\nexport const intensityFacet = {\n    inbound: (\n        rawFacet: RawFacet<\"nes_prd_intensity\", `${number}`>,\n        ctx: Pick<PageProps, \"copywriting\">\n    ) => {\n        return rawFacet.values.map(parseCommon(\"nes_prd_intensity\", ctx.copywriting.productFiltersTitles.prdIntensity))\n    },\n    outbound: (prdIntensities: `${number}`[]) => {\n        const currentValues = prdIntensities\n            .map((value) => ({ value, state: \"selected\" as const }))\n\n        return {\n            \"injectionDepth\": 1000,\n            \"numberOfValues\": 13,\n            \"sortCriteria\": \"alphanumeric\",\n            \"resultsMustMatch\": \"atLeastOneValue\",\n            \"type\": \"specific\",\n            currentValues,\n            \"facetId\": \"nes_prd_intensity\",\n            \"field\": \"nes_prd_intensity\"\n        }\n\n    }\n}\n\nexport const roastingFacet = {\n    inbound: (\n        rawFacet: RawFacet<\"nes_prd_roast\", string>,\n        ctx: Pick<PageProps, \"copywriting\">\n    ) => {\n        if (!ctx.copywriting.productFiltersTitles.prdRoasting) { return [] }\n        return rawFacet.values.map(parseCommon(\"nes_prd_roast\", ctx.copywriting.productFiltersTitles.prdRoasting))\n    },\n    outbound: (prdRoasting: string[]) => {\n        const currentValues = prdRoasting\n            .map((value) => ({ value, state: \"selected\" as const }))\n\n        return {\n            \"injectionDepth\": 1000,\n            \"numberOfValues\": 100,\n            \"sortCriteria\": \"automatic\",\n            \"resultsMustMatch\": \"atLeastOneValue\",\n            \"type\": \"specific\",\n            currentValues,\n            \"facetId\": \"nes_prd_roast\",\n            \"field\": \"nes_prd_roast\"\n        }\n\n    }\n}\n\nexport const tastingNotesFacet = {\n    inbound: (\n        rawFacet: RawFacet<\"nes_prd_tasting_notes\", string>,\n        ctx: Pick<PageProps, \"copywriting\">\n    ) => {\n        return rawFacet.values.map(parseCommon(\"nes_prd_tasting_notes\", ctx.copywriting.productFiltersTitles.prdTastingNotes))\n    },\n    outbound: (prdTastingNotes: string[]) => {\n        const currentValues = prdTastingNotes\n            .map((value) => ({ value, state: \"selected\" as const }))\n\n        return {\n            \"injectionDepth\": 1000,\n            \"numberOfValues\": 100,\n            \"sortCriteria\": \"automatic\",\n            \"resultsMustMatch\": \"atLeastOneValue\",\n            \"type\": \"specific\",\n            currentValues,\n            \"facetId\": \"nes_prd_tasting_notes\",\n            \"field\": \"nes_prd_tasting_notes\"\n        }\n\n    }\n}\nexport const usageFacet = {\n    inbound: (\n        rawFacet: RawFacet<\"nes_prd_usage\", string>,\n        ctx: Pick<PageProps, \"copywriting\">\n    ) => {\n        return rawFacet.values.map(parseCommon(\"nes_prd_usage\", ctx.copywriting.productFiltersTitles.prdUsages))\n    },\n    outbound: (prdUsages: string[]) => {\n        const currentValues = prdUsages\n            .map((value) => ({ value, state: \"selected\" as const }))\n\n        return {\n            \"injectionDepth\": 1000,\n            \"numberOfValues\": 100,\n            \"sortCriteria\": \"automatic\",\n            \"resultsMustMatch\": \"atLeastOneValue\",\n            \"type\": \"specific\",\n            currentValues,\n            \"facetId\": \"nes_prd_usage\",\n            \"field\": \"nes_prd_usage\"\n        }\n\n    }\n}\n\nconst facetMapping = [\n    [\"prdCategories\", \"nes_prd_categories\"],\n    [\"prdTechnologies\", \"nes_prd_technology\"],\n    [\"prdPriceRanges\", \"nes_prd_price\"],\n    [\"prdMachineColors\", \"nes_prd_color\"],\n    [\"prdCupSizes\", \"nes_prd_cup_size\"],\n    [\"prdIntensities\", \"nes_prd_intensity\"],\n    [\"prdRoasting\", \"nes_prd_roast\"],\n    [\"prdTastingNotes\", \"nes_prd_tasting_notes\"],\n    [\"prdUsages\", \"nes_prd_usage\"]\n] as const\n\ntype GetFacetOrder<D> = { [K in keyof D]: D[K] extends readonly [any, any] ? D[K][0] : \"no\" }\ntype GetRawFacetOrder<D> = { [K in keyof D]: D[K] extends readonly [any, any] ? D[K][1] : \"no\" }\ntype RawFacetOrdering = GetRawFacetOrder<typeof facetMapping>\nexport type FacetOrdering = GetFacetOrder<typeof facetMapping>\n\nconst rawFacetOrdering = facetMapping.map(([, raw]) => raw) as any as RawFacetOrdering\nexport const facetOrdering = facetMapping.map(([facet]) => facet) as any as FacetOrdering\n\n\nexport const parseInboundFacets = (rawFacets: RawFacets, ctx: Pick<PageProps, \"copywriting\" | \"priceRangeFilterOptions\" | \"shadeToColors\">) => {\n    return {\n        prdCategories: categoryFacet.inbound(rawFacets.find(getFacetByField(\"nes_prd_categories\"))!, ctx),\n        prdTechnologies: technologyFacet.inbound(rawFacets.find(getFacetByField(\"nes_prd_technology\"))!, ctx),\n        prdPriceRanges: priceFacet.inbound(rawFacets.find(getFacetByField(\"nes_prd_price\"))!, ctx),\n        prdMachineColors: machineColorsFacet.inbound(rawFacets.find(getFacetByField(\"nes_prd_color\"))!, ctx),\n        prdCupSizes: cupSizeFacet.inbound(rawFacets.find(getFacetByField(\"nes_prd_cup_size\"))!, ctx),\n        prdIntensities: intensityFacet.inbound(rawFacets.find(getFacetByField(\"nes_prd_intensity\"))!, ctx),\n        prdRoasting: roastingFacet.inbound(rawFacets.find(getFacetByField(\"nes_prd_roast\"))!, ctx),\n        prdTastingNotes: tastingNotesFacet.inbound(rawFacets.find(getFacetByField(\"nes_prd_tasting_notes\"))!, ctx),\n        prdUsages: usageFacet.inbound(rawFacets.find(getFacetByField(\"nes_prd_usage\"))!, ctx)\n    } satisfies { [k in FacetOrdering[number]]: { value: string; selected: boolean; results: number; }[] }\n}\n\n\nexport const parseOutboundFacets = (\n    state: Pick<AppURLState, FacetOrdering[number] | \"tab\">,\n    ctx: Pick<PageProps, \"copywriting\" | \"priceRangeFilterOptions\" | \"shadeToColors\">\n) => {\n\n    if (state.tab !== \"Products\") {\n        return {}\n    }\n    return ({\n        facetOptions: { freezeFacetOrder: true },\n        facets: [\n            technologyFacet.outbound(state.prdTechnologies),\n            categoryFacet.outbound(state.prdCategories),\n            priceFacet.outbound(state.prdPriceRanges, ctx),\n            machineColorsFacet.outbound(state.prdMachineColors, ctx),\n            cupSizeFacet.outbound(state.prdCupSizes),\n            intensityFacet.outbound(state.prdIntensities),\n            roastingFacet.outbound(state.prdRoasting),\n            tastingNotesFacet.outbound(state.prdTastingNotes),\n            usageFacet.outbound(state.prdUsages)\n        ]\n    })\n}\n","import { getCoveoContext } from \"../../../shared/coveo-api-commons\";\nimport { ActionCause, PageProps, Tab } from \"../../../shared/types\";\nimport { QMeta, Query } from \"../../../url-store/shared\";\nimport { facetOrdering } from \"../product-facets\";\nimport { ResultItemCoveoMetadata } from \"../raw-item-parsers/coveo-metadata\";\nimport { Filters } from \"../search-results\";\nimport { getCoveoAccessToken } from \"../../../../../config\";\n\nconst ToCoveoActionCause = {\n    \"load\": \"interfaceLoad\",\n    \"facetSelect\": \"facetSelect\",\n    \"facetDeselect\": \"facetDeselect\",\n    \"facetBreadcrumbDeselect\": \"breadcrumbFacet\",\n    \"facetBreadcrumbsDeselectAll\": \"breadcrumbResetAll\",\n    \"facetDeselectAll\": \"facetClearAll\",\n    \"querySuggestionClick\": \"omniboxAnalytics\",\n    \"querySuggestionClickStandalone\": \"omniboxFromLink\",\n    \"recentQueriesClick\": \"recentQueriesClick\",\n    \"recentQueriesClickStandalone\": \"searchFromLink\",\n    \"searchboxSubmit\": \"searchboxSubmit\",\n    \"searchboxSubmitStandalone\": \"searchFromLink\",\n    \"tabChange\": \"interfaceChange\",\n    \"autoTabChange\": \"interfaceChange\",\n    \"queryAutoCorrection\": \"didyoumeanAutomatic\"\n} as const\n\ntype UsedCtx = & Parameters<typeof getCoveoContext>[0]\n    & {\n        filters?: Filters,\n        prevFilters?: Filters,\n        q: Query;\n        qMeta?: QMeta | undefined\n        tab: Tab;\n        page: number,\n        firstPageQueryUuid: string;\n        searchHub: string;\n        visitorId: string;\n        searchUid: string;\n        pipeline: string;\n        responseTime: number;\n        count: number;\n        countPerPage: number;\n        currentPage: number;\n        tabGroup: Record<Tab, number>;\n        results: { trackingMetadata: ResultItemCoveoMetadata }[];\n        actionCause: ActionCause;\n    }\n\nconst getFacetState = (filters: Filters | undefined) => {\n    if (!filters) { return [] }\n\n    return facetOrdering\n        .flatMap((key) => filters[key] as (typeof filters[typeof key][number])[])\n        .filter(({ selected }) => selected)\n        .map(({ trackingMetadata }) => ({ ...trackingMetadata, state: \"selected\" as const }))\n}\n\n\nconst coveoCommons = (ctx: Omit<UsedCtx, \"actionCause\" | \"firstPageQueryUuid\" | \"page\" | \"tabGroup\">) => {\n    const commonCoveoBody = {\n        \"language\": ctx.lang,\n        \"userAgent\": navigator.userAgent,\n        \"originContext\": \"Search\",\n        \"clientId\": ctx.visitorId,\n        \"queryText\": ctx.q.query,\n        \"anonymous\": false,\n        \"facetState\": getFacetState(ctx.filters),\n        \"originLevel1\": ctx.searchHub,\n        \"originLevel2\": ctx.tab,\n        \"originLevel3\": Object.assign(new URL(window.location.toString()), { search: \"\", hash: \"\" }).toString(),\n        \"queryPipeline\": ctx.pipeline,\n        \"searchQueryUid\": ctx.searchUid,\n        \"responseTime\": ctx.responseTime,\n        \"numberOfResults\": ctx.count,\n        \"customData\": getCoveoContext(ctx),\n        \"results\": ctx.results\n            .map(({ trackingMetadata: m }) => ({ documentUri: m.uri, documentUriHash: m.urihash }))\n    }\n\n    const toCoveo = (endpoint: \"search\" | \"custom\", extendBody: (baseBody: typeof commonCoveoBody) => {}) => {\n        const endpointUrl = new URL(`https://analytics-eu.cloud.coveo.com/rest/ua/v15/analytics/${endpoint}`)\n        endpointUrl.searchParams.set(\"visitor\", ctx.visitorId)\n        fetch(endpointUrl, {\n            \"method\": \"POST\",\n            \"headers\": {\n                \"Content-Type\": \"application/json\",\n                \"Authorization\": `Bearer ${getCoveoAccessToken()}`\n            },\n            \"body\": JSON.stringify(extendBody(commonCoveoBody))\n        }).then(d => d.json())\n    }\n    return toCoveo\n}\n\n\nexport const trackInstantResults = (ctx: Omit<Parameters<typeof coveoCommons>[0], | \"tab\">) => {\n    coveoCommons({ ...ctx, tab: \"Products\" })(\"search\", (commonBody) => ({ ...commonBody, actionCause: \"searchboxAsYouType\" }))\n}\n\nconst handleCoveoTracking = async (ctx: UsedCtx) => {\n    const toCoveo = coveoCommons(ctx)\n    /**\n     * @remarks\n     * This is not intended to be used with large datasets\n     * @returns items present in a that are not present in b\n     */\n    const getDifferences = <T>(aArr: T[], bArr: T[], compareFn: (a: T, b: T) => boolean) => {\n        return aArr.filter((a) => !bArr.find(b => compareFn(a, b)))\n    }\n\n    const getFacetSelectCustomData = (aFilters: Filters | undefined, bFilters: Filters | undefined) => {\n        const aFacets = getFacetState(aFilters)\n        const bFacets = getFacetState(bFilters)\n        const [facet] = getDifferences(aFacets, bFacets, (a, b) => b.field === a.field && b.value === a.value)\n        return ({\n            \"facetId\": facet.id,\n            \"facetField\": facet.field,\n            \"facetTitle\": facet.title,\n            \"facetValue\": facet.value,\n        })\n    }\n\n    if (\n        ctx.actionCause === \"load\" ||\n        ctx.actionCause === \"recentQueriesClick\" ||\n        ctx.actionCause === \"facetBreadcrumbsDeselectAll\" ||\n        ctx.actionCause === \"searchboxSubmit\" ||\n        ctx.actionCause === \"searchboxSubmitStandalone\" ||\n        ctx.actionCause === \"queryAutoCorrection\" ||\n        ctx.actionCause === \"recentQueriesClickStandalone\"\n    ) {\n        const actionCause = ToCoveoActionCause[ctx.actionCause]\n        return toCoveo(\"search\", (commonBody) => ({ ...commonBody, actionCause }))\n    } if (ctx.actionCause === \"facetSelect\") {\n        const actionCause = ToCoveoActionCause[ctx.actionCause]\n        return toCoveo(\"search\", (commonBody) => ({\n            ...commonBody,\n            actionCause,\n            customData: {\n                ...commonBody.customData,\n                ...getFacetSelectCustomData(ctx.filters, ctx.prevFilters),\n            },\n        }))\n    } if (\n        ctx.actionCause === \"facetDeselect\" ||\n        ctx.actionCause === \"facetBreadcrumbDeselect\"\n    ) {\n        const actionCause = ToCoveoActionCause[ctx.actionCause]\n        return toCoveo(\"search\", (commonBody) => ({\n            ...commonBody,\n            actionCause,\n            customData: {\n                ...commonBody.customData,\n                ...getFacetSelectCustomData(ctx.prevFilters, ctx.filters),\n            },\n        }))\n    } if (ctx.actionCause === \"facetDeselectAll\") {\n        const actionCause = ToCoveoActionCause[ctx.actionCause]\n        return toCoveo(\"search\", (commonBody) => ({\n            ...commonBody,\n            actionCause,\n            customData: {\n                ...commonBody.customData,\n                ...getFacetSelectCustomData(ctx.prevFilters, ctx.filters),\n                facetValue: undefined,\n            },\n        }))\n    } if (\n        ctx.actionCause === \"querySuggestionClick\" ||\n        ctx.actionCause === \"querySuggestionClickStandalone\"\n    ) {\n        const qMeta = ctx.qMeta as QMeta & { type: \"related\" }\n        if (!qMeta) { return console.error(\"missingMeta\") }\n\n        const actionCause = ToCoveoActionCause[ctx.actionCause]\n        return toCoveo(\"search\", (commonBody) => ({\n            ...commonBody,\n            actionCause,\n            customData: {\n                ...commonBody.customData,\n                \"partialQuery\": qMeta.partialQuery,\n                \"partialQueries\": qMeta.partialQueries,\n                \"suggestions\": qMeta.suggestions,\n                \"querySuggestResponseId\": qMeta.suggestions,\n            },\n        }))\n    } if (\n        ctx.actionCause === \"tabChange\" ||\n        ctx.actionCause === \"autoTabChange\"\n    ) {\n        const actionCause = ToCoveoActionCause[ctx.actionCause]\n        return toCoveo(\"search\", (commonBody) => ({\n            ...commonBody,\n            actionCause,\n            customData: {\n                ...commonBody.customData,\n                interfaceChangeTo: ctx.tab\n            },\n        }))\n    }\n    if (ctx.actionCause === \"pageChange\") {\n        return toCoveo(\"custom\", (commonBody) => ({\n            ...commonBody,\n            eventType: \"getMoreResults\",\n            eventValue: \"pagerNumber\",\n            searchQueryUid: undefined,\n            lastSearchQueryUid: ctx.firstPageQueryUuid,\n            customData: {\n                ...commonBody.customData,\n                pagerNumber: ctx.page,\n            },\n        }))\n    } else {\n        ctx.actionCause satisfies never\n    }\n}\n\nconst handleGATracking = (ctx: UsedCtx) => {\n    const toGA = (payload: {\n        search_type: string;\n        search_term: string;\n        selected_term?: string;\n        search_display_term?: string\n    }) => {\n\n        window.gtmDataObject.push({\n            event: \"view_search_results\",\n            search_product_results: ctx.tabGroup[\"Products\"],\n            search_articles_results: ctx.tabGroup[\"Articles\"],\n            search_faq_results: ctx.tabGroup[\"FAQs\"],\n            search_category: ctx.tab,\n            ...payload\n        });\n    }\n\n    if (\n        ctx.actionCause === \"load\" ||\n        ctx.actionCause === \"searchboxSubmit\" ||\n        ctx.actionCause === \"searchboxSubmitStandalone\" ||\n        ctx.actionCause === \"queryAutoCorrection\"\n    ) {\n        return toGA({\n            search_type: \"free text\",\n            search_term: ctx.q.query,\n            search_display_term: ctx.q.query,\n        });\n    } else if (\n        ctx.actionCause === \"recentQueriesClick\" ||\n        ctx.actionCause === \"recentQueriesClickStandalone\"\n    ) {\n        const qMeta = ctx.qMeta as QMeta & { type: \"recent\" }\n        if (!qMeta) { return console.error(\"missingMeta\") }\n\n        return toGA({ search_type: \"history\", search_term: qMeta.partialQuery, selected_term: ctx.q.query });\n    }\n    else if (\n        ctx.actionCause === \"querySuggestionClick\" ||\n        ctx.actionCause === \"querySuggestionClickStandalone\"\n    ) {\n        const qMeta = ctx.qMeta as QMeta & { type: \"related\" }\n        if (!qMeta) { return console.error(\"missingMeta\") }\n        return toGA({ search_type: \"suggested\", search_term: qMeta.partialQuery, selected_term: ctx.q.query });\n    }\n}\n\nexport const handleSearch = (ctx: UsedCtx) => {\n    handleCoveoTracking(ctx)\n    handleGATracking(ctx)\n}\n","import { Signal, computed, effect, signal } from \"@preact/signals\";\nimport {\n    COVEO_ORGANIZATION_ID, COVEO_SEARCH_TERM_MIN_LENGTH\n} from \"../../../../search-bar/constants\"\nimport { randomUUID } from \"../../../shared/random-uuid\";\nimport {\n    fieldsToInclude,\n    fieldsToIncludeB2B,\n    getCoveoAnalytics,\n    getCoveoContext\n} from \"../../shared/coveo-api-commons\";\nimport { SharedProps, Tab } from \"../../shared/types\";\nimport { decodeTitle } from \"../../../shared/decode-pdf-title\";\nimport { asyncQuery } from \"../../../shared/async-query\";\n\nimport { AsyncValue } from \"../../../shared/async-value\";\nimport { Query } from \"../../url-store/shared\";\nimport { RawFaqResult, parseRawFAQResult } from \"../search/raw-item-parsers/faq\";\nimport { RawProductResult, parseRawProductResult } from \"../search/raw-item-parsers/product\";\nimport { RawArticleResult } from \"../search/raw-item-parsers/article\";\nimport { trackInstantResults } from \"../search/analytics/search\";\nimport {\n    getCoveoAccessToken,\n    getSearchedQuery,\n    isB2B,\n    setSearchedQuery\n} from \"../../../../config\";\n\n\ntype CoveoRawSuggestionResponse = {\n    completions: {\n        expression: string;\n        score: number;\n        highlighted: string;\n        executableConfidence: number;\n        objectId: string;\n    }[];\n    responseId: string;\n}\n\ntype CoveoRawInstantResultResponse = {\n    groupByResults: [\n        {\n            \"field\": \"commontab\",\n            \"values\": {\n                \"value\": Tab,\n                \"numberOfResults\": number,\n            }[]\n        }\n    ],\n    totalCountFiltered: number,\n    pipeline: string,\n    searchUid: string,\n    duration: number,\n    results: (RawProductResult | RawArticleResult | RawFaqResult)[],\n}\n\nexport type RelatedSuggestion = {\n    type: \"related\";\n    query: string;\n    highlighted: string;\n    id: string;\n    trackingMetadata: {\n        partialQuery: string,\n        partialQueries: string,\n        querySuggestResponseId: string;\n        ranking: number;\n        suggestions: string;\n    }\n}\n\nexport const buildRelatedSuggestionQuery = (ctx: SharedProps & { queryText: Signal<string>, q: Signal<Query>, focusedSuggestion: Signal<undefined | string> }) => {\n    let partialQueries: string[];\n\n    const fetchHandler = async (q: string, abortSignal: AbortSignal) => {\n        const url = new URL(\"https://platform-eu.cloud.coveo.com/rest/search/v2/querySuggest\") // TODO see platformURL\n        url.searchParams.append(\"organizationId\", COVEO_ORGANIZATION_ID)\n        const visitorId = ctx.visitorId\n\n        if(q.length < COVEO_SEARCH_TERM_MIN_LENGTH) return [] // check if the search term is too short\n\n        const response = await fetch(url, {\n            signal: abortSignal,\n            \"method\": \"POST\",\n            \"headers\": {\n                \"Content-Type\": \"application/json\",\n                \"Authorization\": `Bearer ${getCoveoAccessToken()}`\n            },\n            \"body\": JSON.stringify({\n                \"locale\": ctx.lang,\n                \"timezone\": Intl.DateTimeFormat().resolvedOptions().timeZone,\n                visitorId,\n                \"fieldsToInclude\": [],\n                \"q\": q,\n                \"searchHub\": ctx.searchHub,\n                \"analytics\": getCoveoAnalytics(ctx),\n                \"context\": getCoveoContext(ctx),\n            })\n        });\n        const suggestions = await response.json() as CoveoRawSuggestionResponse\n        const metaSuggestions = suggestions.completions.map(c => c.expression).join(\";\")\n\n        if (suggestions.completions.length > 0) {\n            partialQueries = [...partialQueries, q]\n        }\n        return suggestions.completions.map((completion, i) => ({\n            type: \"related\" as const,\n            query: completion.expression,\n            highlighted: completion.highlighted,\n            id: `related-${completion.objectId}`,\n            trackingMetadata: {\n                partialQueries: partialQueries.join(\";\"),\n                partialQuery: q,\n                querySuggestResponseId: suggestions.responseId,\n                ranking: i,\n                suggestions: metaSuggestions,\n            }\n        })) satisfies RelatedSuggestion[]\n    }\n    const [relatedSuggestions, cleanupQuery] = asyncQuery(fetchHandler, ctx.queryText);\n\n    const cleanUpAutoClear = ctx.q.subscribe(() => {\n        partialQueries = []\n    })\n\n    const cleanup = () => {\n        partialQueries = []\n        cleanUpAutoClear()\n        cleanupQuery()\n    }\n    return [relatedSuggestions, cleanup] as const\n}\n\nexport const buildInstantResultsQuery = (ctx: SharedProps & { queryText: Signal<string>, focusedSuggestion: Signal<undefined | string> }) => {\n    const fetchHandler = async ({ queryText, suggestion }: { queryText: string, suggestion: string | undefined }, abortSignal: AbortSignal) => {\n        const url = new URL(\"https://platform-eu.cloud.coveo.com/rest/search/v2\") // TODO see platformURL\n        url.searchParams.append(\"organizationId\", COVEO_ORGANIZATION_ID)\n        const visitorId = ctx.visitorId\n        const outboundQ = suggestion ?? queryText\n\n        if(outboundQ.length < COVEO_SEARCH_TERM_MIN_LENGTH) return [] //Check if search term is too short\n\n        if(getSearchedQuery() === outboundQ){\n            return []\n        }\n        const response = await fetch(url, {\n            signal: abortSignal,\n            \"method\": \"POST\",\n            \"headers\": {\n                \"Content-Type\": \"application/json\",\n                \"Authorization\": `Bearer ${getCoveoAccessToken()}`\n            },\n            \"body\": JSON.stringify({\n                \"locale\": ctx.lang,\n                \"timezone\": Intl.DateTimeFormat().resolvedOptions().timeZone,\n                visitorId,\n                fieldsToInclude: isB2B() ? fieldsToIncludeB2B : fieldsToInclude,\n                \"q\": outboundQ,\n                \"searchHub\": ctx.searchHub,\n                \"analytics\": getCoveoAnalytics(ctx),\n                \"context\": getCoveoContext(ctx),\n                \"groupBy\": [\n                    {\n                        \"field\": \"@commontab\",\n                        \"queryOverride\": outboundQ,\n                        \"constantQueryOverride\": \"@uri\",\n                        \"advancedQueryOverride\": \"@uri\"\n                    }\n                ]\n            })\n        });\n        const instantResults = await response.json() as CoveoRawInstantResultResponse\n        setSearchedQuery(outboundQ)\n        const tabGroup = instantResults.groupByResults[0].values\n            .reduce((acc, e) => ({ ...acc, [e.value]: e.numberOfResults }), { \"Products\": 0, \"Articles\": 0, \"FAQs\": 0 })\n\n        const processedResults = {\n            trackingMetadata: { pipeline: instantResults.pipeline, searchUid: instantResults.searchUid },\n            results: instantResults.results.slice(0, 3).map((result, position) => {\n                const title = result.title\n                const id = `instant-result-${randomUUID()}`\n\n                const trackingMetadata = {\n                    rankingModifier: result.rankingModifier,\n                    uri: result.uri,\n                    permanentid: result.raw.permanentid,\n                    source: result.raw.source,\n                    urihash: result.raw.urihash,\n                    listName: \"Search Floating\" as const,\n                }\n                if (result.raw.commontab === \"FAQs\") {\n                    return ({\n                        trackingMetadata,\n                        position,\n                        tab: result.raw.commontab,\n                        faqAnswer: result.raw.faq_answer,\n                        faqQuestion: result.raw.faq_question,\n                        title,\n                        id\n                    })\n                }\n\n                const clickUri = new URL((result as RawProductResult | RawArticleResult).clickUri);\n                clickUri.searchParams.set(\"q\", queryText);\n                clickUri.searchParams.set(\"search_category\", result.raw.commontab);\n                if (suggestion) { clickUri.searchParams.set(\"selected_term\", suggestion); }\n                clickUri.searchParams.set(\"searchProductResults\", String(tabGroup[\"Products\"]))\n                clickUri.searchParams.set(\"searchArticlesResults\", String(tabGroup[\"Articles\"]))\n                clickUri.searchParams.set(\"searchFaqResults\", String(tabGroup[\"FAQs\"]))\n\n                if (result.raw.commontab === \"Products\") {\n                    return ({\n                        trackingMetadata,\n                        position,\n                        tab: result.raw.commontab,\n                        title,\n                        sku: result.raw.nes_prd_sku,\n                        imageUrl: result.raw.nes_prd_image_url,\n                        technologies: result.raw.nes_prd_technology ?? [],\n                        url: clickUri.toString(),\n                        id\n                    });\n                }\n\n                return ({\n                    trackingMetadata,\n                    position,\n                    tab: result.raw.commontab,\n                    title: result.raw.filetype === \"pdf\" ? decodeTitle(title) : title,\n                    imageUrl: result.raw.nes_prd_image_url,\n                    url: clickUri.toString(),\n                    id\n                });\n\n            })\n        }\n        trackInstantResults({\n                    ...ctx,\n                    pipeline: instantResults.pipeline,\n                    searchUid: instantResults.searchUid,\n                    responseTime: instantResults.duration,\n                    count: instantResults.totalCountFiltered,\n                    results: processedResults.results,\n                    q: { query: outboundQ },\n                    countPerPage: 10,\n                    currentPage: 1\n                })\n        return processedResults;\n    }\n    return asyncQuery(fetchHandler, computed(() => ({ suggestion: ctx.focusedSuggestion.value, queryText: ctx.queryText.value })));\n}\n\nexport type InstantResult = ReturnType<typeof buildInstantResultsQuery>[0] extends Signal<AsyncValue<{ results: Array<infer Q> }>> ? Q : never\n\nexport const buildRecentStorage = () => {\n    const recentStorageKey = \"coveo-nespresso-recent-search\"\n\n    const get = (): { \"timestamp\": number, \"value\": string }[] => {\n        const current = localStorage.getItem(recentStorageKey)\n        if (!current) { return [] }\n        return JSON.parse(current)\n    }\n\n    const storeSignal = signal(get())\n\n    const cleanup = storeSignal.subscribe(entries => {\n        localStorage.setItem(\"coveo-nespresso-recent-search\", JSON.stringify(entries))\n    })\n\n    return [storeSignal, cleanup] as const\n}\n\nexport const buildRecentSuggestionQuery = (ctx: { recentStorage: RecentStorageSignal, queryText: Signal<string>, }) => {\n    const fetchHandler = async (queryText: string, abortSignal: AbortSignal): Promise<RecentSuggestion[]> => {\n        return ctx.recentStorage.value\n            .filter((entry) => queryText.length === 0 || entry.value.includes(queryText))\n            .map((entry) => ({\n                type: \"recent\" as const,\n                query: entry.value,\n                highlighted: entry.value.replaceAll(queryText, (match) => `{${match}}`),\n                id: `recent-${randomUUID()}`,\n                trackingMetadata: {\n                    partialQuery: queryText,\n                }\n            }) satisfies RecentSuggestion)\n    }\n    return asyncQuery(fetchHandler, ctx.queryText);\n}\n\nexport type RecentSuggestion = {\n    type: \"recent\";\n    query: string;\n    highlighted: string;\n    id: string;\n    trackingMetadata: {\n        partialQuery: string;\n    }\n}\n\nexport type RecentStorageSignal = ReturnType<typeof buildRecentStorage>[0]\n\nexport type Suggestion = RecentSuggestion | RelatedSuggestion\n","import { buildInstantResultsQuery, buildRelatedSuggestionQuery, buildRecentStorage, buildRecentSuggestionQuery, Suggestion } from \"./results/suggestion/suggestion-results\";\nimport {  SharedProps } from \"./shared/types\";\nimport { effect, signal } from \"@preact/signals\";\nimport { getSharedEngineProps } from \"./core\";\nimport { BarURLState } from \"./url-store/standalone-bar-store\";\nimport { StateUpdater } from \"./url-store/build-url-store\";\n\nexport const initBarEngine = async <S extends BarURLState>(shared: Awaited<ReturnType<typeof getSharedEngineProps<SharedProps, S>>>) => {\n    const { updateStore, queryText } = shared\n\n    const focusedSuggestion = signal<undefined | string>(undefined);\n\n    const [recentStorage, cleanupRecentStorage] = buildRecentStorage()\n\n    const [relatedSuggestions, cleanupRelatedSuggestions] = buildRelatedSuggestionQuery({ ...shared, q: shared.store.q, focusedSuggestion });\n\n    const [recentSuggestions, cleanupRecentSuggestions] = buildRecentSuggestionQuery({ recentStorage, queryText: shared.queryText });\n\n    const [instantResults, cleanupInstantResults] = buildInstantResultsQuery({ ...shared, focusedSuggestion });\n\n    const cleanupAutoRecent = shared.store.q.subscribe((q) => {\n        const expression = q.query\n        if (expression === \"\") { return }\n        recentStorage.value = [\n            { timestamp: new Date().getTime(), value: expression },\n            ...recentStorage.value.filter((entry) => entry.value !== expression)\n        ]\n    })\n\n    const clearRecentSearches = () => { recentStorage.value = [] };\n\n    effect(() => { shared.queryText.value = shared.store.q.value?.query })\n\n    const useSuggestionLink = (suggestion: Suggestion): ReturnType<typeof shared.useInternalLink> => {\n        const updater: StateUpdater<BarURLState> = ((_, blankState) => ({\n            ...blankState,\n            action: suggestion.type === \"recent\" ? \"recentQueriesClick\" : \"querySuggestionClick\",\n            q: { query: suggestion.query },\n            qMeta: suggestion.type === \"recent\" ? { type: suggestion.type, ...suggestion.trackingMetadata } : { type: suggestion.type, ...suggestion.trackingMetadata },\n        }))\n\n        return shared.useInternalLink(updater as StateUpdater<any> as StateUpdater<S>)\n    }\n\n    const submit = (query: string) => {\n        shared.updateStore((_, blankState) => ({ ...blankState, q: { query }, action: \"searchboxSubmit\" }))\n    }\n\n    const ctx = {\n        ...shared,\n        focusedSuggestion,\n        queryText,\n        submit,\n        useSuggestionLink,\n        relatedSuggestions,\n        recentSuggestions,\n        instantResults,\n        clearRecentSearches,\n    } as const\n\n    const cleanup = () => {\n        cleanupRelatedSuggestions();\n        cleanupRecentSuggestions();\n        cleanupRecentStorage();\n        shared.cleanupUrlStore();\n        cleanupInstantResults();\n        cleanupAutoRecent();\n    }\n    return [ctx, cleanup] as const\n\n}\n\nexport type BarEngine<S extends BarURLState = BarURLState> = Awaited<ReturnType<typeof initBarEngine<S>>>[0]\n","import { ReadonlySignal, computed, effect } from \"@preact/signals\"\nimport { AsyncValue } from \"../../../shared/async-value\"\nimport { Tab } from \"../../shared/types\"\nimport { PageEngine } from \"../../page\"\n\nexport const autoTabChange = <T extends { tab: Tab, tabGroup: Record<Tab, number> }>(\n    resultSignal: ReadonlySignal<AsyncValue<T>>,\n    ctx: Pick<PageEngine, \"store\" | \"updateStore\">\n) => {\n    const cleanAuto =effect(()=> {\n        ctx.store.q.value;\n        const cancelAutoTabSwitch =  effect(()=> {\n            const results = resultSignal.value;\n            if (results.status !== \"fulfilled\") { return }\n            cancelAutoTabSwitch()\n            const { tab, tabGroup } = results.value\n            let nextTab: Tab | undefined\n            if (tab === \"Products\" && tabGroup.Products === 0) {\n                if (tabGroup.Articles > 0) {\n                    nextTab = \"Articles\"\n                } else if (tabGroup.FAQs > 0) {\n                    nextTab = \"FAQs\"\n                }\n            } else if (tab === \"Articles\" && tabGroup.Articles === 0) {\n                if (tabGroup.Products > 0) {\n                    nextTab = \"Products\"\n                } else if (tabGroup.FAQs > 0) {\n                    nextTab = \"FAQs\"\n                }\n            } else if (tab === \"FAQs\" && tabGroup.FAQs === 0) {\n                if (tabGroup.Products > 0) {\n                    nextTab = \"Products\"\n                } else if (tabGroup.Articles > 0) {\n                    nextTab = \"Articles\"\n                }\n            }\n            if (!nextTab) { return }\n            ctx.updateStore((state) => ({ ...state, tab: nextTab, action: \"autoTabChange\" }))\n        })\n        return cancelAutoTabSwitch\n    })\n\n    return () => { cleanAuto(); }\n}","import { useState } from \"preact/hooks\";\n\nexport type Fulfilled<T> = { status: \"fulfilled\"; value: T; }\nexport const fulfilled = <T>(value: T): Fulfilled<T> => ({ status: \"fulfilled\", value })\nexport type Fulfills<T> = T extends Fulfilled<infer P> ? P : never\n\nexport type Pending<P = unknown> = { status: \"pending\"; params: P }\nexport const pending = <P>(params: P): Pending<P> => ({ status: \"pending\", params })\n\nexport type Rejected<R = unknown> = { status: \"rejected\"; reason: R; }\nexport const rejected = <R>(reason: R): Rejected<R> => ({ status: \"rejected\", reason })\n\nexport type AsyncValue<T, P = unknown, R = unknown> = Pending<P> | Fulfilled<T> | Rejected<R>\n\nexport type MaybeValue<T, R = unknown> = Fulfilled<T> | Rejected<R>\n\nexport const derive = <T, N, R = unknown>(source: AsyncValue<T, unknown, R>, transform: (value: T) => N) => {\n    if (source.status !== \"fulfilled\") {\n        return source\n    }\n    return fulfilled(transform(source.value))\n}","import { ReadonlySignal, computed, effect } from \"@preact/signals\"\nimport { AsyncValue, fulfilled, pending } from \"../../../shared/async-value\"\n\nimport { PageEngineParams } from \"../../page\"\n\n\nexport const applyAutoCorrection = <T extends { correctedQuery: string | undefined, searchExpression: string | null }, P>(\n    resultSignal: ReadonlySignal<AsyncValue<T, P>>,\n    ctx: Pick<PageEngineParams, \"updateStore\">\n) => {\n\n    let prevResult = undefined as undefined | T\n    let prevParams = undefined as undefined | P\n    effect(() => {\n        if (resultSignal.value.status === \"rejected\") { return }\n\n        if (resultSignal.value.status === \"pending\") {\n            const current = resultSignal.value.params\n            return () => { prevParams = current }\n        }\n\n        const current = resultSignal.value.value\n        return () => { prevResult = current }\n    })\n\n    const cleanAutoCorrect = effect(() => {\n        const pageResults = resultSignal.value\n        if (pageResults.status !== \"fulfilled\") { return }\n        const { correctedQuery } = pageResults.value\n        if (!correctedQuery) { return }\n\n        ctx.updateStore((state) => ({ ...state, action: \"queryAutoCorrection\", q: { query: correctedQuery } }))\n    })\n\n    type DistributedOmit<T, K extends keyof any> = T extends any ? Omit<T, K> : never\n\n    const withAutoCorrection = computed(() => {\n        const results = resultSignal.value;\n        if (results.status !== \"fulfilled\") { return results }\n\n        const { correctedQuery, ...baseRest } = results.value\n        const rest = baseRest as DistributedOmit<T, \"correctedQuery\">\n        if (correctedQuery) { return pending(prevParams as P) }\n        if (!prevResult?.correctedQuery) { return fulfilled({ ...rest, queryCorrectedFrom: undefined }) }\n\n        return fulfilled({ ...rest, queryCorrectedFrom: prevResult?.searchExpression ?? undefined })\n    })\n\n    const cleanup = () => {\n        cleanAutoCorrect();\n        prevResult = undefined;\n        prevParams = undefined;\n    }\n    return [withAutoCorrection, cleanup] as const\n}\n","\nimport { COVEO_API_KEY_CART_RECS, COVEO_API_KEY_RECS, COVEO_ORGANIZATION_ID, COVEO_PLATFORM_URL } from \"../../../../search-bar/constants\";\nimport {\n    fieldsToInclude,\n    fieldsToIncludeB2B,\n    getCoveoAnalytics,\n    getCoveoContext\n} from \"../../shared/coveo-api-commons\";\nimport { PageProps } from \"../../shared/types\";\nimport { RawProductResult, parseRawProductResult } from \"./raw-item-parsers/product\";\nimport {getTaxSystemTariff, isB2B} from \"../../../../config\";\n\ntype UsedCtx =\n    { itemIds: string[] }\n    & Pick<PageProps, \"copywriting\" | \"searchHub\" | \"lang\" | \"visitorId\">\n    & Omit<Parameters<typeof parseRawProductResult>[0], \"searchUid\" | \"pipeline\">\n    & Parameters<typeof getCoveoAnalytics>[0]\n    & Parameters<typeof getCoveoContext>[0]\n\nexport const fetchRelatedRecommendation = async (ctx: UsedCtx, abortSignal: AbortSignal) => {\n    const timeStart = performance.now()\n    const url = new URL(`${COVEO_PLATFORM_URL}/rest/search/v2`)\n    url.searchParams.append(\"organizationId\", COVEO_ORGANIZATION_ID);\n    const checkIfB2B = isB2B();\n    const taxSystemTariff = checkIfB2B ? await getTaxSystemTariff() : ''\n    const { searchUid, pipeline, results } = await (await fetch(url, {\n        signal: abortSignal,\n        \"method\": \"POST\",\n        \"headers\": {\n            \"Content-Type\": \"application/json\",\n            \"Authorization\": `Bearer ${COVEO_API_KEY_CART_RECS}`\n        },\n        \"body\": JSON.stringify({\n            \"locale\": ctx.lang,\n            \"timezone\": Intl.DateTimeFormat().resolvedOptions().timeZone,\n            visitorId: ctx.visitorId,\n            fieldsToInclude: checkIfB2B ? fieldsToIncludeB2B : fieldsToInclude,\n            recommendation: \"Recommendation\",\n            mlParameters: { itemIds: ctx.itemIds },\n            numberOfResults: 3,\n            \"searchHub\": ctx.searchHub,\n            \"analytics\": getCoveoAnalytics(ctx),\n            \"context\": getCoveoContext(ctx),\n            ...( checkIfB2B && {\"dictionaryFieldContext\":{\n                    \"nes_prd_price\":taxSystemTariff\n                }})\n        })\n    })).json() as { results: RawProductResult[], pipeline: string, searchUid: string }\n\n    return {\n        results: results.map(parseRawProductResult(ctx, \"Search Page - Related Items\")),\n        trackingMetadata: {\n            searchUid,\n            pipeline,\n            responseTime: Math.floor(performance.now() - timeStart)\n        }\n    }\n}\n","\nimport { COVEO_API_KEY_RECS, COVEO_ORGANIZATION_ID, COVEO_PLATFORM_URL } from \"../../../../search-bar/constants\";\nimport {\n    fieldsToInclude,\n    fieldsToIncludeB2B,\n    getCoveoAnalytics,\n    getCoveoContext\n} from \"../../shared/coveo-api-commons\";\nimport { PageProps } from \"../../shared/types\";\nimport { RawProductResult, parseRawProductResult } from \"./raw-item-parsers/product\";\nimport {getTaxSystemTariff, isB2B} from \"../../../../config\";\n\ntype UsedCtx =\n    & Pick<PageProps, \"copywriting\" | \"searchHub\" | \"lang\" | \"visitorId\">\n    & Omit<Parameters<typeof parseRawProductResult>[0], \"searchUid\" | \"pipeline\">\n    & Parameters<typeof getCoveoAnalytics>[0]\n    & Parameters<typeof getCoveoContext>[0]\n\nexport const fetchPopularRecommendation = async (ctx: UsedCtx, abortSignal: AbortSignal) => {\n    const timeStart = performance.now()\n    const url = new URL(`${COVEO_PLATFORM_URL}/rest/search/v2`)\n    url.searchParams.append(\"organizationId\", COVEO_ORGANIZATION_ID);\n    const checkIfB2B = isB2B();\n    const taxSystemTariff = checkIfB2B ? await getTaxSystemTariff() : ''\n    const { results, searchUid, pipeline } = await (await fetch(url, {\n        signal: abortSignal,\n        \"method\": \"POST\",\n        \"headers\": {\n            \"Content-Type\": \"application/json\",\n            \"Authorization\": `Bearer ${COVEO_API_KEY_RECS}`\n        },\n        \"body\": JSON.stringify({\n            \"locale\": ctx.lang,\n            \"timezone\": Intl.DateTimeFormat().resolvedOptions().timeZone,\n            visitorId: ctx.visitorId,\n            fieldsToInclude: checkIfB2B ? fieldsToIncludeB2B : fieldsToInclude,\n            recommendation: \"Recommendation\",\n            numberOfResults: 3,\n            \"searchHub\": ctx.searchHub,\n            \"analytics\": getCoveoAnalytics(ctx),\n            \"context\": getCoveoContext(ctx),\n            firstResult: 0,\n            referrer: \"default\",\n            ...( checkIfB2B && {\"dictionaryFieldContext\":{\n                    \"nes_prd_price\": taxSystemTariff\n                }})\n        })\n    })).json() as { results: RawProductResult[], pipeline: string, searchUid: string }\n\n    return {\n        results: results.map(parseRawProductResult(ctx, \"Search Page - Popular Items\")),\n        trackingMetadata: {\n            searchUid,\n            pipeline,\n            responseTime: Math.floor(performance.now() - timeStart)\n        }\n    }\n}\n","import { BasicSearchResults } from \"./search-results\"\nimport { isNotError } from \"../../shared/types\"\nimport { selfCleaningLocalStorage } from \"../../../../tools/self-cleaning-local-storage\"\n\nconst nukeCoveoMetadata = () => Array\n    .from(localStorage, (_, i) => localStorage.key(i))\n    .forEach((key) => {\n        if (!key || !key.startsWith(\"sku_coveo_metadata\")) { return }\n        localStorage.removeItem(key)\n    })\n\ntype UsedCTX = {\n    searchHub: string;\n}\n\nexport const storeCoveoMetadata = (res: BasicSearchResults & { tab: \"Products\" }, ctx: UsedCTX) => {\n    try {\n        const filteredResults = res.results.filter(isNotError)\n        filteredResults.forEach((result) => {\n            const key = `sku_coveo_metadata:${result.sku}`;\n            const payload = {\n                searchUid: res.trackingMetadata.searchUid,\n                documentPosition: result.position,\n                rankingModifier: result.trackingMetadata.rankingModifier,\n                documentUriHash: result.trackingMetadata.urihash,\n                documentUrl: result.trackingMetadata.uri,\n                documentTitle: result.title,\n                sourcename: result.trackingMetadata.source,\n                originlevel1: ctx.searchHub\n            }\n            const sevenDaysMs = 1000 * 60 * 60 * 24 * 7\n            selfCleaningLocalStorage.setItem(key, payload, new Date().getTime() + sevenDaysMs)\n        })\n    }\n    catch (error) {\n        if (error instanceof DOMException) {\n            nukeCoveoMetadata()\n        }\n        throw error\n    }\n}\n\n","import { ReadonlySignal, effect } from \"@preact/signals\"\nimport { AsyncValue } from \"../../../shared/async-value\"\nimport { BasicSearchResults, Filters, SearchResults } from \"./search-results\"\nimport { handleSearch } from \"./analytics/search\"\nimport { AppURLStore } from \"../../url-store/app-store\"\nimport { isNotError } from \"../../shared/types\"\nimport { storeCoveoMetadata } from \"./store-coveo-metadata\"\n\n\ntype UsedCTX = {\n    store: AppURLStore;\n    website: string;\n    sitename: string;\n    contextWebsite: string;\n    contextSitename: string;\n    lang: string;\n    locale: string;\n    country: string;\n    searchHub: string;\n    visitorId: string;\n}\nexport const searchTracking = (\n    resultSignal: ReadonlySignal<AsyncValue<BasicSearchResults>>,\n    ctx: UsedCTX\n) => {\n\n    let prevFilters = undefined as undefined | Filters\n\n    effect(() => {\n        if (resultSignal.value.status !== \"fulfilled\" || resultSignal.value.value.tab !== \"Products\") {\n            return\n        }\n        const current = resultSignal.value.value.filters\n        return () => { prevFilters = current }\n    })\n\n    let firstPageQueryUuid = undefined as undefined | string;\n    let firstRun = true\n    const cleanupFirstPageClean = effect(() => {\n        for (const key in ctx.store) {\n            if (key !== \"page\" && key !== \"action\") {\n                ctx.store[key as keyof typeof ctx.store].value\n            }\n        }\n        if (firstRun) { firstRun = false; return; }\n\n        firstPageQueryUuid = undefined;\n        return\n    })\n\n    const cleanAuto = effect(() => {\n        if (resultSignal.value.status !== \"fulfilled\") {\n            return\n        }\n\n        const res = resultSignal.value.value\n        if (!firstPageQueryUuid) {\n            firstPageQueryUuid = res.trackingMetadata.searchUid\n        }\n\n        handleSearch({\n            ...ctx,\n            firstPageQueryUuid,\n            q: ctx.store.q.peek(),\n            tab: ctx.store.tab.peek(),\n            page: ctx.store.page.peek(),\n            qMeta: ctx.store.qMeta.peek(),\n            searchUid: res.trackingMetadata.searchUid,\n            pipeline: res.trackingMetadata.pipeline,\n            responseTime: res.trackingMetadata.responseTime,\n            tabGroup: res.tabGroup,\n            count: res.count,\n            filters: res.tab === \"Products\" ? res.filters : undefined,\n            prevFilters,\n            results: res.results.filter(isNotError),\n            countPerPage: res.results.length || 0,\n            currentPage: res.currentPage || 1,\n            actionCause: ctx.store.action.peek()\n        })\n        if (res.tab === \"Products\") {\n            storeCoveoMetadata(res, ctx)\n        }\n    })\n\n    return () => {\n        cleanAuto()\n        cleanupFirstPageClean();\n        firstPageQueryUuid = undefined\n        prevFilters = undefined\n    }\n}\n","import { ReadonlySignal, Signal, computed, effect, } from \"@preact/signals\";\nimport {\n    COVEO_ORGANIZATION_ID,\n    COVEO_PLATFORM_URL\n} from \"../../../../search-bar/constants\"\n\nimport { asyncQuery } from \"../../../shared/async-query\";\nimport { Fulfilled } from \"../../../shared/async-value\";\nimport { RawArticleResult, parseRawArticlesResults } from \"./raw-item-parsers/article\";\nimport { RawFaqResult, parseRawFAQResult } from \"./raw-item-parsers/faq\";\nimport { RawProductResult, parseRawProductResult } from \"./raw-item-parsers/product\";\nimport {\n    fieldsToInclude,\n    fieldsToIncludeB2B,\n    getCoveoAnalytics,\n    getCoveoContext,\n    getCoveoGroupBy\n} from \"../../shared/coveo-api-commons\";\nimport { PageProps, ProductCategory, ProductTechnology, Tab, isNotError } from \"../../shared/types\";\nimport { RawFacets, parseInboundFacets, parseOutboundFacets } from \"./product-facets\";\nimport { BarProps } from \"../..\";\nimport { autoTabChange } from \"./auto-tab-switch\";\nimport { applyAutoCorrection } from \"./apply-auto-correction\";\nimport { fetchRelatedRecommendation } from \"./related-recommendation\";\nimport { fetchPopularRecommendation } from \"./popular-recommendation\";\n\nimport { searchTracking } from \"./search-tracking\";\nimport { PageEngineParams } from \"../../page\";\nimport {getCoveoAccessToken, getTaxSystemTariff, isB2B} from \"../../../../config\";\n\ntype RawResult = RawProductResult | RawArticleResult | RawFaqResult\nexport type CoveoRawResponse = {\n    totalCount: number,\n    totalCountFiltered: number,\n    basicExpression: string | null,\n    queryCorrections: [{\n        correctedQuery: string;\n    }] | [];\n    groupByResults: [\n        {\n            \"field\": \"commontab\",\n            \"values\": {\n                \"value\": Tab,\n                \"numberOfResults\": number,\n            }[]\n        }\n    ],\n    pipeline: string,\n    searchUid: string,\n    facets: RawFacets,\n    duration: number,\n    results: RawResult[]\n    triggers: {\n        type: \"notify\";\n        content: string;\n    }[]\n}\ntype UsedPageContext =\n    & Pick<PageEngineParams, \"updateStore\" | \"store\">\n    & Pick<PageProps & BarProps, \"skuToNewPrice\" | \"skuToStrikethroughPrice\" | \"skuToCapsuleNetWeightG\" | \"cupSizesVolumes\" | \"copywriting\" | \"searchHub\" | \"lang\" | \"visitorId\" | \"priceRangeFilterOptions\" | \"shadeToColors\" | \"displayRecommendations\">\n    & Parameters<typeof getCoveoAnalytics>[0]\n    & Parameters<typeof getCoveoContext>[0]\n\nconst resultsPerPage = 15\n\ntype SearchQueryProps = {\n    tab: Tab;\n    q: string;\n    page: number;\n    prdCategories: ProductCategory[];\n    prdTechnologies: ProductTechnology[];\n    prdIntensities: `${number}`[];\n    prdPriceRanges: `${number}:${number}`[];\n    prdMachineColors: string[];\n    prdCupSizes: string[];\n    prdRoasting: string[];\n    prdTastingNotes: string[];\n    prdUsages: string[];\n}\n\nexport const buildBaseSearchResultQuery = (ctx: UsedPageContext) => {\n    const fetchHandler = async (state: SearchQueryProps, abortSignal: AbortSignal) => {\n        const checkIfB2B = isB2B();\n        const taxSystemTariff = checkIfB2B ? await getTaxSystemTariff() : ''\n        const fetchResults = () => {\n            const url = new URL(`${COVEO_PLATFORM_URL}/rest/search/v2`)\n            url.searchParams.append(\"organizationId\", COVEO_ORGANIZATION_ID)\n            return fetch(url, {\n                signal: abortSignal,\n                \"method\": \"POST\",\n                \"headers\": {\n                    \"Content-Type\": \"application/json\",\n                    \"Authorization\": `Bearer ${getCoveoAccessToken()}`\n                },\n                \"body\": JSON.stringify({\n                    \"locale\": ctx.lang,\n                    \"timezone\": Intl.DateTimeFormat().resolvedOptions().timeZone,\n                    visitorId: ctx.visitorId,\n                    aq: `@commontab==${JSON.stringify(state.tab)}`,\n                    enableDidYouMean: true,\n                    fieldsToInclude: checkIfB2B ? fieldsToIncludeB2B : fieldsToInclude,\n                    \"q\": state.q,\n                    numberOfResults: resultsPerPage,\n                    firstResult: (state.page - 1) * resultsPerPage,\n                    ...parseOutboundFacets(state, ctx),\n                    \"searchHub\": ctx.searchHub,\n                    \"analytics\": getCoveoAnalytics(ctx),\n                    \"context\": getCoveoContext(ctx),\n                    \"groupBy\": getCoveoGroupBy(state.q),\n                    ...( checkIfB2B && {\"dictionaryFieldContext\":{\n                        \"nes_prd_price\": taxSystemTariff\n                    }})\n                })\n            }).then(r => r.json() as Promise<CoveoRawResponse>)\n        }\n        const response = await fetchResults()\n\n        const tabGroup = response.groupByResults[0].values\n            .reduce((acc, e) => ({ ...acc, [e.value]: e.numberOfResults }), { \"Products\": 0, \"Articles\": 0, \"FAQs\": 0 })\n\n        const responseCommons = {\n            rawRecommendationResponse: undefined,\n            tabGroup,\n            searchExpression: response.basicExpression,\n            totalCount: Object.values(tabGroup).reduce((a, b) => a + b, 0),\n            count: response.totalCountFiltered,\n            countPerPage: response.results.length || 0,\n            currentPage: state.page || 1,\n            totalPages: Math.ceil(response.totalCountFiltered / resultsPerPage),\n            correctedQuery: response.queryCorrections[0]?.correctedQuery as string | undefined,\n            notifications: response.triggers.filter(({ type }) => type === \"notify\").map(({ content }) => content),\n            trackingMetadata: {\n                responseTime: response.duration,\n                searchUid: response.searchUid,\n                pipeline: response.pipeline\n            }\n        }\n\n\n        if (state.tab === \"Products\") {\n            const rawResults = response.results as RawProductResult[]\n            const baseResults = rawResults.map(parseRawProductResult(ctx, \"Search Page - Search Results\"))\n            const validResults = baseResults.filter(isNotError)\n            let recommendation: undefined | Awaited<ReturnType<typeof fetchPopularRecommendation>>;\n\n            if (ctx.displayRecommendations && validResults.length === 0) {\n                recommendation = await fetchPopularRecommendation(ctx, abortSignal)\n            } else if (ctx.displayRecommendations && validResults.length < 4) {\n                recommendation = await fetchRelatedRecommendation({\n                    ...ctx,\n                    itemIds: validResults.map(({ sku }) => sku)\n                }, abortSignal)\n            }\n\n            return {\n                tab: \"Products\" as const,\n                filters: parseInboundFacets(response.facets, ctx),\n                results: baseResults,\n                recommendation,\n                ...responseCommons,\n            }\n        } else if (state.tab === \"Articles\") {\n            return {\n                ...responseCommons,\n                tab: \"Articles\" as const,\n                results: (response.results as RawArticleResult[]).map(parseRawArticlesResults(ctx))\n            }\n        }\n        return {\n            ...responseCommons,\n            tab: \"FAQs\" as const,\n            results: (response.results as RawFaqResult[]).map(parseRawFAQResult(ctx))\n        }\n    }\n    const qTextSignal = computed(() => ctx.store.q.value.query)\n\n    const paramSignal = computed(() => {\n        return ({\n            q: qTextSignal.value,\n            tab: ctx.store.tab.value,\n            page: ctx.store.page.value,\n            prdCategories: ctx.store.prdCategories.value,\n            prdTechnologies: ctx.store.prdTechnologies.value,\n            prdIntensities: ctx.store.prdIntensities.value,\n            prdPriceRanges: ctx.store.prdPriceRanges.value,\n            prdMachineColors: ctx.store.prdMachineColors.value,\n            prdCupSizes: ctx.store.prdCupSizes.value,\n            prdRoasting: ctx.store.prdRoasting.value,\n            prdTastingNotes: ctx.store.prdTastingNotes.value,\n            prdUsages: ctx.store.prdUsages.value,\n        }) satisfies SearchQueryProps\n    })\n\n    return asyncQuery(fetchHandler, paramSignal)\n}\nexport type BasicSearchResults = ReturnType<typeof buildBaseSearchResultQuery>[0] extends ReadonlySignal<infer V> ? (V extends Fulfilled<infer P> ? P : never) : never\n\nexport const buildSearchResultQuery = (ctx: UsedPageContext) => {\n    const [searchResults, searchPageCleanup] = buildBaseSearchResultQuery(ctx)\n    const [withAutoCorrection, cleanAutoCorrect] = applyAutoCorrection(searchResults, ctx);\n    const cleanupAutoTabSwitch = autoTabChange(withAutoCorrection, ctx);\n    const cleanUpTracking = searchTracking(searchResults, ctx);\n\n    const cleanup = () => { searchPageCleanup(); cleanAutoCorrect(); cleanupAutoTabSwitch(); cleanUpTracking() }\n    return [withAutoCorrection, cleanup] as const\n}\n\nexport type SearchResults = ReturnType<typeof buildSearchResultQuery>[0] extends ReadonlySignal<infer V> ? (V extends Fulfilled<infer P> ? P : never) : never\n\nexport type Filters = ReturnType<typeof parseInboundFacets>\n","import { buildSearchResultQuery } from \"./results/search/search-results\";\nimport { PageProps } from \"./shared/types\";\nimport { getSharedEngineProps } from \"./core\";\nimport { AppURLState } from \"./url-store/app-store\";\n\nexport type PageEngineParams = Awaited<ReturnType<typeof getSharedEngineProps<PageProps, AppURLState>>>\n\nconst noop = () => { }\nexport const initPageEngine = async (shared: PageEngineParams) => {\n    const { ...restShared } = shared\n\n    const [searchResults, searchPageCleanup] = buildSearchResultQuery({ ...shared });\n\n    const ctx = {\n        ...restShared,\n        searchResults,\n    } as const\n\n    const cleanup = () => {\n        searchPageCleanup();\n        shared.cleanupUrlStore();\n    }\n    return [ctx, cleanup] as const\n}\n\nexport type PageEngine = Awaited<ReturnType<typeof initPageEngine>>[0]","import { ReadonlySignal, Signal, batch, computed, effect, signal, useComputed } from \"@preact/signals\";\nimport { JSXInternal } from \"preact/src/jsx\";\n\ntype URLMappedEntry<T, K extends keyof any> = {\n    readFromUrl: (this: { key: K }, searchParams: URLSearchParams) => T | undefined;\n    writeToUrl: (this: { key: K }, searchParams: URLSearchParams, value: T) => void;\n    key: K,\n    defaultValue: T;\n}\n\nexport type URLMappedEntryBuilder<T, K extends keyof any> = (key: K) => URLMappedEntry<T, K>\nexport type StateUpdater<S extends { [k: keyof any]: any }> = (state: S, defaultState: S) => S;\n\nconst buildUrlState = <State extends { [k: keyof any]: any }>(\n    storeRecord: { [K in keyof State]: URLMappedEntry<State[K], string> },\n    options: { searchPageUrl: string, withVirtualUrl: boolean }\n): [URLStore<State>, () => void] => {\n    const initialURL = new URL(window.location.toString())\n\n    const stateEntries = Object.entries(storeRecord).map(([key, entry]) => {\n        const { defaultValue } = (entry as URLMappedEntry<State[keyof State], keyof State>);\n        const fieldSignal = signal(entry.readFromUrl(initialURL.searchParams) ?? defaultValue)\n\n        const fieldState = {\n            signal: fieldSignal,\n            key: key as keyof State,\n            defaultValue: defaultValue as State[keyof State],\n            readFromUrl: entry.readFromUrl.bind(entry),\n            writeToUrl: entry.writeToUrl.bind(entry),\n        }\n        return fieldState\n    })\n\n    const store = Object.fromEntries(\n        stateEntries.map((state) => [state.key, state.signal] as const)\n    ) as { [K in keyof State]: Signal<State[K]> }\n\n    const defaultState = {} as State\n    for (let i = 0; i < stateEntries.length; i++) {\n        const fieldState = stateEntries[i];\n        defaultState[fieldState.key] = fieldState.defaultValue\n    }\n\n    const state = computed(() => {\n        const state = {} as State\n        for (let i = 0; i < stateEntries.length; i++) {\n            const fieldState = stateEntries[i];\n            state[fieldState.key] = fieldState.signal.value\n        }\n        return state\n    })\n\n    const writeState = (nextState: State) => {\n        batch(() => {\n            for (let i = 0; i < stateEntries.length; i++) {\n                const fieldState = stateEntries[i];\n                store[fieldState.key].value = nextState[fieldState.key]\n            }\n        })\n    }\n\n    const stateToUrl = (nextState: State) => {\n        const nextUrl = new URL(window.location.toString());\n        nextUrl.pathname = options.searchPageUrl\n\n        for (let i = 0; i < stateEntries.length; i++) {\n            const fieldState = stateEntries[i];\n            fieldState.writeToUrl(nextUrl.searchParams, nextState[fieldState.key])\n        }\n        return nextUrl.toString()\n    }\n\n    const urlToState = (url: string) => {\n        const nextUrl = new URL(url);\n        const nextState = {} as State\n        for (let i = 0; i < stateEntries.length; i++) {\n            const fieldState = stateEntries[i];\n            nextState[fieldState.key] = fieldState.readFromUrl(nextUrl.searchParams) ?? fieldState.defaultValue;\n        }\n        return nextState\n    }\n\n    const cleanUpVirtualUrl = options.withVirtualUrl ? effect(() => {\n        const nextUrl = stateToUrl(state.value)\n        const popStateHandler = () => writeState(urlToState(window.location.toString()))\n        window.addEventListener(\"popstate\", popStateHandler)\n        window.history.pushState(null, \"\", nextUrl)\n        return () => { window.removeEventListener(\"popstate\", popStateHandler) }\n    }) : () => { }\n\n    const useInternalLink = (getNextState: StateUpdater<State>) => {\n        return useComputed(() => {\n            const nextState = getNextState(state.value, defaultState)\n            const url = stateToUrl(nextState)\n            const handleClick = (evt: JSXInternal.TargetedMouseEvent<HTMLAnchorElement>) => {\n                if (!options.withVirtualUrl) { return }\n                evt.preventDefault();\n                writeState(nextState)\n            }\n            return { url, handleClick } as const\n        })\n    }\n\n    const update = (getNextState: StateUpdater<State>) => {\n        const nextState = getNextState(state.value, defaultState)\n        if (!options.withVirtualUrl) {\n            window.open(stateToUrl(nextState), \"_self\")\n            return\n        }\n        writeState(nextState)\n    }\n\n    const cleanup = () => { cleanUpVirtualUrl() }\n    return [{ store, useInternalLink, update, state }, cleanup] as const\n}\n\nexport type URLStore<State extends {\n    [k: string]: any;\n}> = {\n    store: { [K in keyof State]: Signal<State[K]>; };\n    state: ReadonlySignal<State>\n    update: (getNextState: StateUpdater<State>) => void;\n    useInternalLink: (getNextState: StateUpdater<State>) => ReadonlySignal<{\n        url: string,\n        handleClick: (evt: JSXInternal.TargetedMouseEvent<HTMLAnchorElement>) => void;\n    }>;\n}\n\nexport default buildUrlState","import { RecentSuggestion, RelatedSuggestion } from \"../results/suggestion/suggestion-results\"\n\nexport const singleReadParam = (key: string) => {\n    const nextUrl = new URL(window.location.toString())\n    const result = nextUrl.searchParams.get(key)\n    nextUrl.searchParams.delete(key)\n    history.replaceState(null, \"\", nextUrl)\n    return result\n}\n\nconst encodeBase64URL = (str: string) => {\n    return btoa(str).replaceAll(\"=\", \"\").replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\")\n}\nconst decodeBase64URL = (str: string) => {\n    return atob(str.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\"))\n}\n\ntype CompressedMeta = Readonly<[\n    type: 0,\n    partialQuery: string\n]> | Readonly<[\n    type: 1,\n    partialQuery: string,\n    partialQueries: string,\n    querySuggestResponseId: string,\n    ranking: number,\n    suggestions: string\n]>\n\nexport const encodeQMeta = (qMeta: QMeta) => {\n    const compressed = qMeta.type === \"related\" ? [\n        1,\n        qMeta.partialQuery,\n        qMeta.partialQueries,\n        qMeta.querySuggestResponseId,\n        qMeta.ranking,\n        qMeta.suggestions\n    ] as const : [0, qMeta.partialQuery] as const\n\n    compressed satisfies CompressedMeta\n    return encodeBase64URL(JSON.stringify(compressed))\n}\n\nexport const decodeQMeta = (str: string | null): QMeta | undefined => {\n    if (str === null) { return }\n    try {\n        const compressed = JSON.parse(decodeBase64URL(str)) as CompressedMeta\n        if (compressed[0] === 0) {\n            const [_, partialQuery] = compressed;\n            return { type: \"recent\", partialQuery }\n        }\n        const [_, partialQuery, partialQueries, querySuggestResponseId, ranking, suggestions] = compressed;\n        return { type: \"related\", partialQuery, partialQueries, querySuggestResponseId, ranking, suggestions }\n    } catch (error) {\n        return\n    }\n}\n\nexport type Query = { query: string }\nexport type QMeta = ({ type: \"related\" } & RelatedSuggestion[\"trackingMetadata\"]) | ({ type: \"recent\" } & RecentSuggestion[\"trackingMetadata\"]);","import buildUrlState, { URLStore } from \"./build-url-store\"\nimport {\n    Tab,\n    isTab,\n    ProductCategory,\n    isProductCategory,\n    ProductTechnology,\n    isProductTechnology,\n    PageProps,\n    ActionCause,\n    isActionCause\n} from \"../shared/types\";\nimport { QMeta, Query, decodeQMeta, singleReadParam } from \"./shared\";\n\nconst buildPrdPriceRanges = (priceRanges: PageProps[\"priceRangeFilterOptions\"]) => ({\n    readFromUrl(searchParams: URLSearchParams) {\n        return searchParams.getAll(this.key).filter((val): val is `${number}:${number}` => {\n            if (!/^\\d+\\.\\.\\d+$/g.test(val)) { return false }\n            return priceRanges.some(({ range }) => range.replace(\":\", \"..\") === val)\n        })\n    },\n    writeToUrl(searchParams: URLSearchParams, values: (`${number}:${number}`)[]) {\n        searchParams.delete(this.key);\n        values.forEach(range => searchParams.append(this.key, range.replace(\":\", \"..\")))\n    },\n    defaultValue: [],\n    key: \"prd_facet_price_ranges\" as const\n})\n\nconst buildStringField = <const K extends string>(key: K) => ({\n    readFromUrl(searchParams: URLSearchParams) {\n        return searchParams.getAll(this.key).filter((v): v is string => v !== null && v !== \"\")\n    },\n    writeToUrl(searchParams: URLSearchParams, values: string[]) {\n        searchParams.delete(this.key);\n        values.forEach(d => searchParams.append(this.key, d))\n    },\n    defaultValue: [],\n    key\n})\n\nconst prdIntensities = ({\n    readFromUrl(searchParams: URLSearchParams) {\n        return searchParams.getAll(this.key).filter((v): v is `${number}` => v !== null && /^\\d+$/g.test(v))\n    },\n    writeToUrl(searchParams: URLSearchParams, values: `${number}`[]) {\n        searchParams.delete(this.key);\n        values.forEach(d => searchParams.append(this.key, d))\n    },\n    defaultValue: [],\n    key: \"prd_facet_intensities\" as const\n})\n\nconst prdTechnologies = ({\n    readFromUrl(searchParams: URLSearchParams) {\n        return searchParams.getAll(this.key).filter(isProductTechnology)\n    },\n    writeToUrl(searchParams: URLSearchParams, values: ProductTechnology[]) {\n        searchParams.delete(this.key);\n        values.forEach(d => searchParams.append(this.key, d))\n    },\n    defaultValue: [],\n    key: \"prd_facet_technologies\" as const\n})\n\nconst prdCategories = ({\n    readFromUrl(searchParams: URLSearchParams) {\n        return searchParams.getAll(this.key).filter(isProductCategory)\n    },\n    writeToUrl(searchParams: URLSearchParams, values: ProductCategory[]) {\n        searchParams.delete(this.key);\n        values.forEach(d => searchParams.append(this.key, d))\n    },\n    defaultValue: [],\n    key: \"prd_facet_categories\" as const\n})\n\nconst page = ({\n    readFromUrl(searchParams: URLSearchParams) {\n        const page = Number(searchParams.get(this.key) ?? \"\")\n        if (!Number.isInteger(page) || page <= 0) { return }\n        return page\n    },\n    writeToUrl(searchParams: URLSearchParams, value: number) {\n        searchParams.set(this.key, String(value))\n    },\n    defaultValue: 1,\n    key: \"p\" as const\n})\n\nexport const q = ({\n    readFromUrl(searchParams: URLSearchParams) {\n        const query = searchParams.get(this.key) ?? \"\"\n        return ({ query: query })\n    },\n    writeToUrl(searchParams: URLSearchParams, { query }: Query) {\n        searchParams.set(this.key, query)\n    },\n    defaultValue: { query: \"\" } as Query,\n    key: \"q\" as const\n})\n\nconst qMeta = ({\n    readFromUrl(searchParams: URLSearchParams): undefined | QMeta {\n        return decodeQMeta(singleReadParam(this.key))\n    },\n    writeToUrl(searchParams: URLSearchParams, _: QMeta | undefined) {},\n    defaultValue: undefined as QMeta | undefined,\n    key: \"q_meta\" as const\n})\n\nconst tab = ({\n    readFromUrl(searchParams: URLSearchParams) {\n        const tab = searchParams.get(this.key) ?? \"\"\n        if (!isTab(tab)) { return }\n        return tab\n    },\n    writeToUrl(searchParams: URLSearchParams, value: Tab) {\n        searchParams.set(this.key, value)\n    },\n    defaultValue: \"Products\" as const,\n    key: \"tab\" as const\n})\n\nconst action = ({\n    readFromUrl(searchParams: URLSearchParams) {\n        const action = singleReadParam(this.key) ?? \"\"\n        if (!isActionCause(action)) { return }\n        return action\n    },\n    writeToUrl(searchParams: URLSearchParams, value: ActionCause) { },\n    defaultValue: \"load\" as ActionCause,\n    key: \"action\" as const\n})\ntype UsedProps = Omit<Parameters<typeof buildUrlState>[1], \"withVirtualUrl\"> & Pick<PageProps, \"priceRangeFilterOptions\">\n\nexport const buildAppURLStore = (props: UsedProps) => {\n    return buildUrlState({\n        tab,\n        q,\n        qMeta,\n        action,\n        page,\n        prdCategories,\n        prdTechnologies,\n        prdIntensities,\n        prdPriceRanges: buildPrdPriceRanges(props.priceRangeFilterOptions),\n        prdMachineColors: buildStringField(\"prd_facet_machine_colors\"),\n        prdCupSizes: buildStringField(\"prd_facet_cup_sizes\"),\n        prdRoasting: buildStringField(\"prd_facet_roasting_levels\"),\n        prdTastingNotes: buildStringField(\"prd_facet_tasting_notes\"),\n        prdUsages: buildStringField(\"prd_facet_usages\"),\n    }, { searchPageUrl: props.searchPageUrl, withVirtualUrl: true })\n}\n\nexport type AppURLState = ReturnType<typeof buildAppURLStore>[0] extends URLStore<infer Q> ? Q : never\nexport type AppURLStore = ReturnType<typeof buildAppURLStore>[0][\"store\"]\n\n","import buildUrlState, { URLStore } from \"./build-url-store\";\nimport { ActionCause } from \"../shared/types\";\nimport { q } from \"./app-store\";\nimport { QMeta, encodeQMeta } from \"./shared\";\n\n\nconst qMeta = ({\n    readFromUrl(searchParams: URLSearchParams): QMeta | undefined {\n        return\n    },\n    writeToUrl(searchParams: URLSearchParams, qMeta: QMeta | undefined) {\n        if (!qMeta) { return }\n        searchParams.set(this.key, encodeQMeta(qMeta));\n\n    },\n    defaultValue: undefined as QMeta | undefined,\n    key: \"q_meta\" as const\n})\n\nconst standaloneActionOverrides = {\n    \"recentQueriesClick\": \"recentQueriesClickStandalone\",\n    \"querySuggestionClick\": \"querySuggestionClickStandalone\",\n    \"searchboxSubmit\": \"searchboxSubmitStandalone\",\n} as const\n\nconst action = ({\n    readFromUrl(searchParams: URLSearchParams): ActionCause | undefined {\n        return\n    },\n    writeToUrl(searchParams: URLSearchParams, value: ActionCause) {\n        if (value in standaloneActionOverrides) {\n            value = standaloneActionOverrides[value as keyof typeof standaloneActionOverrides]\n        }\n        searchParams.set(this.key, value);\n    },\n    defaultValue: \"load\" as ActionCause,\n    key: \"action\" as const\n})\n\n/**\n * @remarks\n * this is used only when outside the search page, since real redirection will be needed\n */\nexport const buildStandaloneBarStore = (props: { searchPageUrl: string }) => {\n    return buildUrlState({\n        action,\n        qMeta,\n        q,\n    }, { searchPageUrl: props.searchPageUrl, withVirtualUrl: false }) as [URLStore<{ [k: string]: unknown, q: { query: string }, qMeta: undefined | QMeta, action: ActionCause }>, any]\n}\n\nexport type BarURLState = ReturnType<typeof buildStandaloneBarStore>[0] extends URLStore<infer Q> ? Q : never\nexport type BarURLStore = ReturnType<typeof buildStandaloneBarStore>[0][\"store\"]\n","const consoleLogger = {\n  type: 'logger',\n  log(args) {\n    this.output('log', args);\n  },\n  warn(args) {\n    this.output('warn', args);\n  },\n  error(args) {\n    this.output('error', args);\n  },\n  output(type, args) {\n    if (console && console[type]) console[type].apply(console, args);\n  }\n};\nclass Logger {\n  constructor(concreteLogger) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.init(concreteLogger, options);\n  }\n  init(concreteLogger) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.prefix = options.prefix || 'i18next:';\n    this.logger = concreteLogger || consoleLogger;\n    this.options = options;\n    this.debug = options.debug;\n  }\n  log() {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return this.forward(args, 'log', '', true);\n  }\n  warn() {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    return this.forward(args, 'warn', '', true);\n  }\n  error() {\n    for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n    return this.forward(args, 'error', '');\n  }\n  deprecate() {\n    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n    return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n  }\n  forward(args, lvl, prefix, debugOnly) {\n    if (debugOnly && !this.debug) return null;\n    if (typeof args[0] === 'string') args[0] = `${prefix}${this.prefix} ${args[0]}`;\n    return this.logger[lvl](args);\n  }\n  create(moduleName) {\n    return new Logger(this.logger, {\n      ...{\n        prefix: `${this.prefix}:${moduleName}:`\n      },\n      ...this.options\n    });\n  }\n  clone(options) {\n    options = options || this.options;\n    options.prefix = options.prefix || this.prefix;\n    return new Logger(this.logger, options);\n  }\n}\nvar baseLogger = new Logger();\n\nclass EventEmitter {\n  constructor() {\n    this.observers = {};\n  }\n  on(events, listener) {\n    events.split(' ').forEach(event => {\n      this.observers[event] = this.observers[event] || [];\n      this.observers[event].push(listener);\n    });\n    return this;\n  }\n  off(event, listener) {\n    if (!this.observers[event]) return;\n    if (!listener) {\n      delete this.observers[event];\n      return;\n    }\n    this.observers[event] = this.observers[event].filter(l => l !== listener);\n  }\n  emit(event) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n    if (this.observers[event]) {\n      const cloned = [].concat(this.observers[event]);\n      cloned.forEach(observer => {\n        observer(...args);\n      });\n    }\n    if (this.observers['*']) {\n      const cloned = [].concat(this.observers['*']);\n      cloned.forEach(observer => {\n        observer.apply(observer, [event, ...args]);\n      });\n    }\n  }\n}\n\nfunction defer() {\n  let res;\n  let rej;\n  const promise = new Promise((resolve, reject) => {\n    res = resolve;\n    rej = reject;\n  });\n  promise.resolve = res;\n  promise.reject = rej;\n  return promise;\n}\nfunction makeString(object) {\n  if (object == null) return '';\n  return '' + object;\n}\nfunction copy(a, s, t) {\n  a.forEach(m => {\n    if (s[m]) t[m] = s[m];\n  });\n}\nfunction getLastOfPath(object, path, Empty) {\n  function cleanKey(key) {\n    return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;\n  }\n  function canNotTraverseDeeper() {\n    return !object || typeof object === 'string';\n  }\n  const stack = typeof path !== 'string' ? [].concat(path) : path.split('.');\n  while (stack.length > 1) {\n    if (canNotTraverseDeeper()) return {};\n    const key = cleanKey(stack.shift());\n    if (!object[key] && Empty) object[key] = new Empty();\n    if (Object.prototype.hasOwnProperty.call(object, key)) {\n      object = object[key];\n    } else {\n      object = {};\n    }\n  }\n  if (canNotTraverseDeeper()) return {};\n  return {\n    obj: object,\n    k: cleanKey(stack.shift())\n  };\n}\nfunction setPath(object, path, newValue) {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path, Object);\n  obj[k] = newValue;\n}\nfunction pushPath(object, path, newValue, concat) {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path, Object);\n  obj[k] = obj[k] || [];\n  if (concat) obj[k] = obj[k].concat(newValue);\n  if (!concat) obj[k].push(newValue);\n}\nfunction getPath(object, path) {\n  const {\n    obj,\n    k\n  } = getLastOfPath(object, path);\n  if (!obj) return undefined;\n  return obj[k];\n}\nfunction getPathWithDefaults(data, defaultData, key) {\n  const value = getPath(data, key);\n  if (value !== undefined) {\n    return value;\n  }\n  return getPath(defaultData, key);\n}\nfunction deepExtend(target, source, overwrite) {\n  for (const prop in source) {\n    if (prop !== '__proto__' && prop !== 'constructor') {\n      if (prop in target) {\n        if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {\n          if (overwrite) target[prop] = source[prop];\n        } else {\n          deepExtend(target[prop], source[prop], overwrite);\n        }\n      } else {\n        target[prop] = source[prop];\n      }\n    }\n  }\n  return target;\n}\nfunction regexEscape(str) {\n  return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n}\nvar _entityMap = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;',\n  '/': '&#x2F;'\n};\nfunction escape(data) {\n  if (typeof data === 'string') {\n    return data.replace(/[&<>\"'\\/]/g, s => _entityMap[s]);\n  }\n  return data;\n}\nconst chars = [' ', ',', '?', '!', ';'];\nfunction looksLikeObjectPath(key, nsSeparator, keySeparator) {\n  nsSeparator = nsSeparator || '';\n  keySeparator = keySeparator || '';\n  const possibleChars = chars.filter(c => nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0);\n  if (possibleChars.length === 0) return true;\n  const r = new RegExp(`(${possibleChars.map(c => c === '?' ? '\\\\?' : c).join('|')})`);\n  let matched = !r.test(key);\n  if (!matched) {\n    const ki = key.indexOf(keySeparator);\n    if (ki > 0 && !r.test(key.substring(0, ki))) {\n      matched = true;\n    }\n  }\n  return matched;\n}\nfunction deepFind(obj, path) {\n  let keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '.';\n  if (!obj) return undefined;\n  if (obj[path]) return obj[path];\n  const paths = path.split(keySeparator);\n  let current = obj;\n  for (let i = 0; i < paths.length; ++i) {\n    if (!current) return undefined;\n    if (typeof current[paths[i]] === 'string' && i + 1 < paths.length) {\n      return undefined;\n    }\n    if (current[paths[i]] === undefined) {\n      let j = 2;\n      let p = paths.slice(i, i + j).join(keySeparator);\n      let mix = current[p];\n      while (mix === undefined && paths.length > i + j) {\n        j++;\n        p = paths.slice(i, i + j).join(keySeparator);\n        mix = current[p];\n      }\n      if (mix === undefined) return undefined;\n      if (mix === null) return null;\n      if (path.endsWith(p)) {\n        if (typeof mix === 'string') return mix;\n        if (p && typeof mix[p] === 'string') return mix[p];\n      }\n      const joinedPath = paths.slice(i + j).join(keySeparator);\n      if (joinedPath) return deepFind(mix, joinedPath, keySeparator);\n      return undefined;\n    }\n    current = current[paths[i]];\n  }\n  return current;\n}\nfunction getCleanedCode(code) {\n  if (code && code.indexOf('_') > 0) return code.replace('_', '-');\n  return code;\n}\n\nclass ResourceStore extends EventEmitter {\n  constructor(data) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      ns: ['translation'],\n      defaultNS: 'translation'\n    };\n    super();\n    this.data = data || {};\n    this.options = options;\n    if (this.options.keySeparator === undefined) {\n      this.options.keySeparator = '.';\n    }\n    if (this.options.ignoreJSONStructure === undefined) {\n      this.options.ignoreJSONStructure = true;\n    }\n  }\n  addNamespaces(ns) {\n    if (this.options.ns.indexOf(ns) < 0) {\n      this.options.ns.push(ns);\n    }\n  }\n  removeNamespaces(ns) {\n    const index = this.options.ns.indexOf(ns);\n    if (index > -1) {\n      this.options.ns.splice(index, 1);\n    }\n  }\n  getResource(lng, ns, key) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n    let path = [lng, ns];\n    if (key && typeof key !== 'string') path = path.concat(key);\n    if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key);\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n    }\n    const result = getPath(this.data, path);\n    if (result || !ignoreJSONStructure || typeof key !== 'string') return result;\n    return deepFind(this.data && this.data[lng] && this.data[lng][ns], key, keySeparator);\n  }\n  addResource(lng, ns, key, value) {\n    let options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n      silent: false\n    };\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    let path = [lng, ns];\n    if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n      value = ns;\n      ns = path[1];\n    }\n    this.addNamespaces(ns);\n    setPath(this.data, path, value);\n    if (!options.silent) this.emit('added', lng, ns, key, value);\n  }\n  addResources(lng, ns, resources) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n      silent: false\n    };\n    for (const m in resources) {\n      if (typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]') this.addResource(lng, ns, m, resources[m], {\n        silent: true\n      });\n    }\n    if (!options.silent) this.emit('added', lng, ns, resources);\n  }\n  addResourceBundle(lng, ns, resources, deep, overwrite) {\n    let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n      silent: false\n    };\n    let path = [lng, ns];\n    if (lng.indexOf('.') > -1) {\n      path = lng.split('.');\n      deep = resources;\n      resources = ns;\n      ns = path[1];\n    }\n    this.addNamespaces(ns);\n    let pack = getPath(this.data, path) || {};\n    if (deep) {\n      deepExtend(pack, resources, overwrite);\n    } else {\n      pack = {\n        ...pack,\n        ...resources\n      };\n    }\n    setPath(this.data, path, pack);\n    if (!options.silent) this.emit('added', lng, ns, resources);\n  }\n  removeResourceBundle(lng, ns) {\n    if (this.hasResourceBundle(lng, ns)) {\n      delete this.data[lng][ns];\n    }\n    this.removeNamespaces(ns);\n    this.emit('removed', lng, ns);\n  }\n  hasResourceBundle(lng, ns) {\n    return this.getResource(lng, ns) !== undefined;\n  }\n  getResourceBundle(lng, ns) {\n    if (!ns) ns = this.options.defaultNS;\n    if (this.options.compatibilityAPI === 'v1') return {\n      ...{},\n      ...this.getResource(lng, ns)\n    };\n    return this.getResource(lng, ns);\n  }\n  getDataByLanguage(lng) {\n    return this.data[lng];\n  }\n  hasLanguageSomeTranslations(lng) {\n    const data = this.getDataByLanguage(lng);\n    const n = data && Object.keys(data) || [];\n    return !!n.find(v => data[v] && Object.keys(data[v]).length > 0);\n  }\n  toJSON() {\n    return this.data;\n  }\n}\n\nvar postProcessor = {\n  processors: {},\n  addPostProcessor(module) {\n    this.processors[module.name] = module;\n  },\n  handle(processors, value, key, options, translator) {\n    processors.forEach(processor => {\n      if (this.processors[processor]) value = this.processors[processor].process(value, key, options, translator);\n    });\n    return value;\n  }\n};\n\nconst checkedLoadedFor = {};\nclass Translator extends EventEmitter {\n  constructor(services) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    super();\n    copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this);\n    this.options = options;\n    if (this.options.keySeparator === undefined) {\n      this.options.keySeparator = '.';\n    }\n    this.logger = baseLogger.create('translator');\n  }\n  changeLanguage(lng) {\n    if (lng) this.language = lng;\n  }\n  exists(key) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      interpolation: {}\n    };\n    if (key === undefined || key === null) {\n      return false;\n    }\n    const resolved = this.resolve(key, options);\n    return resolved && resolved.res !== undefined;\n  }\n  extractFromKey(key, options) {\n    let nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n    if (nsSeparator === undefined) nsSeparator = ':';\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    let namespaces = options.ns || this.options.defaultNS || [];\n    const wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;\n    const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n    if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n      const m = key.match(this.interpolator.nestingRegexp);\n      if (m && m.length > 0) {\n        return {\n          key,\n          namespaces\n        };\n      }\n      const parts = key.split(nsSeparator);\n      if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n      key = parts.join(keySeparator);\n    }\n    if (typeof namespaces === 'string') namespaces = [namespaces];\n    return {\n      key,\n      namespaces\n    };\n  }\n  translate(keys, options, lastKey) {\n    if (typeof options !== 'object' && this.options.overloadTranslationOptionHandler) {\n      options = this.options.overloadTranslationOptionHandler(arguments);\n    }\n    if (typeof options === 'object') options = {\n      ...options\n    };\n    if (!options) options = {};\n    if (keys === undefined || keys === null) return '';\n    if (!Array.isArray(keys)) keys = [String(keys)];\n    const returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails;\n    const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n    const {\n      key,\n      namespaces\n    } = this.extractFromKey(keys[keys.length - 1], options);\n    const namespace = namespaces[namespaces.length - 1];\n    const lng = options.lng || this.language;\n    const appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n    if (lng && lng.toLowerCase() === 'cimode') {\n      if (appendNamespaceToCIMode) {\n        const nsSeparator = options.nsSeparator || this.options.nsSeparator;\n        if (returnDetails) {\n          return {\n            res: `${namespace}${nsSeparator}${key}`,\n            usedKey: key,\n            exactUsedKey: key,\n            usedLng: lng,\n            usedNS: namespace\n          };\n        }\n        return `${namespace}${nsSeparator}${key}`;\n      }\n      if (returnDetails) {\n        return {\n          res: key,\n          usedKey: key,\n          exactUsedKey: key,\n          usedLng: lng,\n          usedNS: namespace\n        };\n      }\n      return key;\n    }\n    const resolved = this.resolve(keys, options);\n    let res = resolved && resolved.res;\n    const resUsedKey = resolved && resolved.usedKey || key;\n    const resExactUsedKey = resolved && resolved.exactUsedKey || key;\n    const resType = Object.prototype.toString.apply(res);\n    const noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n    const joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n    const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n    const handleAsObject = typeof res !== 'string' && typeof res !== 'boolean' && typeof res !== 'number';\n    if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === 'string' && resType === '[object Array]')) {\n      if (!options.returnObjects && !this.options.returnObjects) {\n        if (!this.options.returnedObjectHandler) {\n          this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n        }\n        const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, {\n          ...options,\n          ns: namespaces\n        }) : `key '${key} (${this.language})' returned an object instead of string.`;\n        if (returnDetails) {\n          resolved.res = r;\n          return resolved;\n        }\n        return r;\n      }\n      if (keySeparator) {\n        const resTypeIsArray = resType === '[object Array]';\n        const copy = resTypeIsArray ? [] : {};\n        const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n        for (const m in res) {\n          if (Object.prototype.hasOwnProperty.call(res, m)) {\n            const deepKey = `${newKeyToUse}${keySeparator}${m}`;\n            copy[m] = this.translate(deepKey, {\n              ...options,\n              ...{\n                joinArrays: false,\n                ns: namespaces\n              }\n            });\n            if (copy[m] === deepKey) copy[m] = res[m];\n          }\n        }\n        res = copy;\n      }\n    } else if (handleAsObjectInI18nFormat && typeof joinArrays === 'string' && resType === '[object Array]') {\n      res = res.join(joinArrays);\n      if (res) res = this.extendTranslation(res, keys, options, lastKey);\n    } else {\n      let usedDefault = false;\n      let usedKey = false;\n      const needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n      const hasDefaultValue = Translator.hasDefaultValue(options);\n      const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : '';\n      const defaultValueSuffixOrdinalFallback = options.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, {\n        ordinal: false\n      }) : '';\n      const defaultValue = options[`defaultValue${defaultValueSuffix}`] || options[`defaultValue${defaultValueSuffixOrdinalFallback}`] || options.defaultValue;\n      if (!this.isValidLookup(res) && hasDefaultValue) {\n        usedDefault = true;\n        res = defaultValue;\n      }\n      if (!this.isValidLookup(res)) {\n        usedKey = true;\n        res = key;\n      }\n      const missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n      const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n      const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n      if (usedKey || usedDefault || updateMissing) {\n        this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n        if (keySeparator) {\n          const fk = this.resolve(key, {\n            ...options,\n            keySeparator: false\n          });\n          if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n        }\n        let lngs = [];\n        const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n        if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n          for (let i = 0; i < fallbackLngs.length; i++) {\n            lngs.push(fallbackLngs[i]);\n          }\n        } else if (this.options.saveMissingTo === 'all') {\n          lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n        } else {\n          lngs.push(options.lng || this.language);\n        }\n        const send = (l, k, specificDefaultValue) => {\n          const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n          if (this.options.missingKeyHandler) {\n            this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, options);\n          } else if (this.backendConnector && this.backendConnector.saveMissing) {\n            this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, options);\n          }\n          this.emit('missingKey', l, namespace, k, res);\n        };\n        if (this.options.saveMissing) {\n          if (this.options.saveMissingPlurals && needsPluralHandling) {\n            lngs.forEach(language => {\n              this.pluralResolver.getSuffixes(language, options).forEach(suffix => {\n                send([language], key + suffix, options[`defaultValue${suffix}`] || defaultValue);\n              });\n            });\n          } else {\n            send(lngs, key, defaultValue);\n          }\n        }\n      }\n      res = this.extendTranslation(res, keys, options, resolved, lastKey);\n      if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = `${namespace}:${key}`;\n      if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n        if (this.options.compatibilityAPI !== 'v1') {\n          res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${namespace}:${key}` : key, usedDefault ? res : undefined);\n        } else {\n          res = this.options.parseMissingKeyHandler(res);\n        }\n      }\n    }\n    if (returnDetails) {\n      resolved.res = res;\n      return resolved;\n    }\n    return res;\n  }\n  extendTranslation(res, key, options, resolved, lastKey) {\n    var _this = this;\n    if (this.i18nFormat && this.i18nFormat.parse) {\n      res = this.i18nFormat.parse(res, {\n        ...this.options.interpolation.defaultVariables,\n        ...options\n      }, options.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n        resolved\n      });\n    } else if (!options.skipInterpolation) {\n      if (options.interpolation) this.interpolator.init({\n        ...options,\n        ...{\n          interpolation: {\n            ...this.options.interpolation,\n            ...options.interpolation\n          }\n        }\n      });\n      const skipOnVariables = typeof res === 'string' && (options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n      let nestBef;\n      if (skipOnVariables) {\n        const nb = res.match(this.interpolator.nestingRegexp);\n        nestBef = nb && nb.length;\n      }\n      let data = options.replace && typeof options.replace !== 'string' ? options.replace : options;\n      if (this.options.interpolation.defaultVariables) data = {\n        ...this.options.interpolation.defaultVariables,\n        ...data\n      };\n      res = this.interpolator.interpolate(res, data, options.lng || this.language, options);\n      if (skipOnVariables) {\n        const na = res.match(this.interpolator.nestingRegexp);\n        const nestAft = na && na.length;\n        if (nestBef < nestAft) options.nest = false;\n      }\n      if (!options.lng && this.options.compatibilityAPI !== 'v1' && resolved && resolved.res) options.lng = resolved.usedLng;\n      if (options.nest !== false) res = this.interpolator.nest(res, function () {\n        for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n          args[_key] = arguments[_key];\n        }\n        if (lastKey && lastKey[0] === args[0] && !options.context) {\n          _this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`);\n          return null;\n        }\n        return _this.translate(...args, key);\n      }, options);\n      if (options.interpolation) this.interpolator.reset();\n    }\n    const postProcess = options.postProcess || this.options.postProcess;\n    const postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;\n    if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n      res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {\n        i18nResolved: resolved,\n        ...options\n      } : options, this);\n    }\n    return res;\n  }\n  resolve(keys) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let found;\n    let usedKey;\n    let exactUsedKey;\n    let usedLng;\n    let usedNS;\n    if (typeof keys === 'string') keys = [keys];\n    keys.forEach(k => {\n      if (this.isValidLookup(found)) return;\n      const extracted = this.extractFromKey(k, options);\n      const key = extracted.key;\n      usedKey = key;\n      let namespaces = extracted.namespaces;\n      if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS);\n      const needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';\n      const needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && this.pluralResolver.shouldUseIntlApi();\n      const needsContextHandling = options.context !== undefined && (typeof options.context === 'string' || typeof options.context === 'number') && options.context !== '';\n      const codes = options.lngs ? options.lngs : this.languageUtils.toResolveHierarchy(options.lng || this.language, options.fallbackLng);\n      namespaces.forEach(ns => {\n        if (this.isValidLookup(found)) return;\n        usedNS = ns;\n        if (!checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils && this.utils.hasLoadedNamespace && !this.utils.hasLoadedNamespace(usedNS)) {\n          checkedLoadedFor[`${codes[0]}-${ns}`] = true;\n          this.logger.warn(`key \"${usedKey}\" for languages \"${codes.join(', ')}\" won't get resolved as namespace \"${usedNS}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n        }\n        codes.forEach(code => {\n          if (this.isValidLookup(found)) return;\n          usedLng = code;\n          const finalKeys = [key];\n          if (this.i18nFormat && this.i18nFormat.addLookupKeys) {\n            this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n          } else {\n            let pluralSuffix;\n            if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, options.count, options);\n            const zeroSuffix = `${this.options.pluralSeparator}zero`;\n            const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;\n            if (needsPluralHandling) {\n              finalKeys.push(key + pluralSuffix);\n              if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n                finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n              }\n              if (needsZeroSuffixLookup) {\n                finalKeys.push(key + zeroSuffix);\n              }\n            }\n            if (needsContextHandling) {\n              const contextKey = `${key}${this.options.contextSeparator}${options.context}`;\n              finalKeys.push(contextKey);\n              if (needsPluralHandling) {\n                finalKeys.push(contextKey + pluralSuffix);\n                if (options.ordinal && pluralSuffix.indexOf(ordinalPrefix) === 0) {\n                  finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n                }\n                if (needsZeroSuffixLookup) {\n                  finalKeys.push(contextKey + zeroSuffix);\n                }\n              }\n            }\n          }\n          let possibleKey;\n          while (possibleKey = finalKeys.pop()) {\n            if (!this.isValidLookup(found)) {\n              exactUsedKey = possibleKey;\n              found = this.getResource(code, ns, possibleKey, options);\n            }\n          }\n        });\n      });\n    });\n    return {\n      res: found,\n      usedKey,\n      exactUsedKey,\n      usedLng,\n      usedNS\n    };\n  }\n  isValidLookup(res) {\n    return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n  }\n  getResource(code, ns, key) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n    return this.resourceStore.getResource(code, ns, key, options);\n  }\n  static hasDefaultValue(options) {\n    const prefix = 'defaultValue';\n    for (const option in options) {\n      if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n        return true;\n      }\n    }\n    return false;\n  }\n}\n\nfunction capitalize(string) {\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}\nclass LanguageUtil {\n  constructor(options) {\n    this.options = options;\n    this.supportedLngs = this.options.supportedLngs || false;\n    this.logger = baseLogger.create('languageUtils');\n  }\n  getScriptPartFromCode(code) {\n    code = getCleanedCode(code);\n    if (!code || code.indexOf('-') < 0) return null;\n    const p = code.split('-');\n    if (p.length === 2) return null;\n    p.pop();\n    if (p[p.length - 1].toLowerCase() === 'x') return null;\n    return this.formatLanguageCode(p.join('-'));\n  }\n  getLanguagePartFromCode(code) {\n    code = getCleanedCode(code);\n    if (!code || code.indexOf('-') < 0) return code;\n    const p = code.split('-');\n    return this.formatLanguageCode(p[0]);\n  }\n  formatLanguageCode(code) {\n    if (typeof code === 'string' && code.indexOf('-') > -1) {\n      const specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];\n      let p = code.split('-');\n      if (this.options.lowerCaseLng) {\n        p = p.map(part => part.toLowerCase());\n      } else if (p.length === 2) {\n        p[0] = p[0].toLowerCase();\n        p[1] = p[1].toUpperCase();\n        if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n      } else if (p.length === 3) {\n        p[0] = p[0].toLowerCase();\n        if (p[1].length === 2) p[1] = p[1].toUpperCase();\n        if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();\n        if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n        if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n      }\n      return p.join('-');\n    }\n    return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n  }\n  isSupportedCode(code) {\n    if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n      code = this.getLanguagePartFromCode(code);\n    }\n    return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n  }\n  getBestMatchFromCodes(codes) {\n    if (!codes) return null;\n    let found;\n    codes.forEach(code => {\n      if (found) return;\n      const cleanedLng = this.formatLanguageCode(code);\n      if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng;\n    });\n    if (!found && this.options.supportedLngs) {\n      codes.forEach(code => {\n        if (found) return;\n        const lngOnly = this.getLanguagePartFromCode(code);\n        if (this.isSupportedCode(lngOnly)) return found = lngOnly;\n        found = this.options.supportedLngs.find(supportedLng => {\n          if (supportedLng === lngOnly) return supportedLng;\n          if (supportedLng.indexOf('-') < 0 && lngOnly.indexOf('-') < 0) return;\n          if (supportedLng.indexOf(lngOnly) === 0) return supportedLng;\n        });\n      });\n    }\n    if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n    return found;\n  }\n  getFallbackCodes(fallbacks, code) {\n    if (!fallbacks) return [];\n    if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n    if (typeof fallbacks === 'string') fallbacks = [fallbacks];\n    if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;\n    if (!code) return fallbacks.default || [];\n    let found = fallbacks[code];\n    if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n    if (!found) found = fallbacks[this.formatLanguageCode(code)];\n    if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n    if (!found) found = fallbacks.default;\n    return found || [];\n  }\n  toResolveHierarchy(code, fallbackCode) {\n    const fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n    const codes = [];\n    const addCode = c => {\n      if (!c) return;\n      if (this.isSupportedCode(c)) {\n        codes.push(c);\n      } else {\n        this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`);\n      }\n    };\n    if (typeof code === 'string' && (code.indexOf('-') > -1 || code.indexOf('_') > -1)) {\n      if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n      if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n      if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n    } else if (typeof code === 'string') {\n      addCode(this.formatLanguageCode(code));\n    }\n    fallbackCodes.forEach(fc => {\n      if (codes.indexOf(fc) < 0) addCode(this.formatLanguageCode(fc));\n    });\n    return codes;\n  }\n}\n\nlet sets = [{\n  lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'pt', 'pt-BR', 'tg', 'tl', 'ti', 'tr', 'uz', 'wa'],\n  nr: [1, 2],\n  fc: 1\n}, {\n  lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'hi', 'hu', 'hy', 'ia', 'it', 'kk', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt-PT', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'],\n  nr: [1, 2],\n  fc: 2\n}, {\n  lngs: ['ay', 'bo', 'cgg', 'fa', 'ht', 'id', 'ja', 'jbo', 'ka', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'],\n  nr: [1],\n  fc: 3\n}, {\n  lngs: ['be', 'bs', 'cnr', 'dz', 'hr', 'ru', 'sr', 'uk'],\n  nr: [1, 2, 5],\n  fc: 4\n}, {\n  lngs: ['ar'],\n  nr: [0, 1, 2, 3, 11, 100],\n  fc: 5\n}, {\n  lngs: ['cs', 'sk'],\n  nr: [1, 2, 5],\n  fc: 6\n}, {\n  lngs: ['csb', 'pl'],\n  nr: [1, 2, 5],\n  fc: 7\n}, {\n  lngs: ['cy'],\n  nr: [1, 2, 3, 8],\n  fc: 8\n}, {\n  lngs: ['fr'],\n  nr: [1, 2],\n  fc: 9\n}, {\n  lngs: ['ga'],\n  nr: [1, 2, 3, 7, 11],\n  fc: 10\n}, {\n  lngs: ['gd'],\n  nr: [1, 2, 3, 20],\n  fc: 11\n}, {\n  lngs: ['is'],\n  nr: [1, 2],\n  fc: 12\n}, {\n  lngs: ['jv'],\n  nr: [0, 1],\n  fc: 13\n}, {\n  lngs: ['kw'],\n  nr: [1, 2, 3, 4],\n  fc: 14\n}, {\n  lngs: ['lt'],\n  nr: [1, 2, 10],\n  fc: 15\n}, {\n  lngs: ['lv'],\n  nr: [1, 2, 0],\n  fc: 16\n}, {\n  lngs: ['mk'],\n  nr: [1, 2],\n  fc: 17\n}, {\n  lngs: ['mnk'],\n  nr: [0, 1, 2],\n  fc: 18\n}, {\n  lngs: ['mt'],\n  nr: [1, 2, 11, 20],\n  fc: 19\n}, {\n  lngs: ['or'],\n  nr: [2, 1],\n  fc: 2\n}, {\n  lngs: ['ro'],\n  nr: [1, 2, 20],\n  fc: 20\n}, {\n  lngs: ['sl'],\n  nr: [5, 1, 2, 3],\n  fc: 21\n}, {\n  lngs: ['he', 'iw'],\n  nr: [1, 2, 20, 21],\n  fc: 22\n}];\nlet _rulesPluralsTypes = {\n  1: function (n) {\n    return Number(n > 1);\n  },\n  2: function (n) {\n    return Number(n != 1);\n  },\n  3: function (n) {\n    return 0;\n  },\n  4: function (n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  5: function (n) {\n    return Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n  },\n  6: function (n) {\n    return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n  },\n  7: function (n) {\n    return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  8: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n  },\n  9: function (n) {\n    return Number(n >= 2);\n  },\n  10: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n  },\n  11: function (n) {\n    return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n  },\n  12: function (n) {\n    return Number(n % 10 != 1 || n % 100 == 11);\n  },\n  13: function (n) {\n    return Number(n !== 0);\n  },\n  14: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n  },\n  15: function (n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n  },\n  16: function (n) {\n    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n  },\n  17: function (n) {\n    return Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1);\n  },\n  18: function (n) {\n    return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n  },\n  19: function (n) {\n    return Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n  },\n  20: function (n) {\n    return Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n  },\n  21: function (n) {\n    return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n  },\n  22: function (n) {\n    return Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n  }\n};\nconst nonIntlVersions = ['v1', 'v2', 'v3'];\nconst intlVersions = ['v4'];\nconst suffixesOrder = {\n  zero: 0,\n  one: 1,\n  two: 2,\n  few: 3,\n  many: 4,\n  other: 5\n};\nfunction createRules() {\n  const rules = {};\n  sets.forEach(set => {\n    set.lngs.forEach(l => {\n      rules[l] = {\n        numbers: set.nr,\n        plurals: _rulesPluralsTypes[set.fc]\n      };\n    });\n  });\n  return rules;\n}\nclass PluralResolver {\n  constructor(languageUtils) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    this.languageUtils = languageUtils;\n    this.options = options;\n    this.logger = baseLogger.create('pluralResolver');\n    if ((!this.options.compatibilityJSON || intlVersions.includes(this.options.compatibilityJSON)) && (typeof Intl === 'undefined' || !Intl.PluralRules)) {\n      this.options.compatibilityJSON = 'v3';\n      this.logger.error('Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.');\n    }\n    this.rules = createRules();\n  }\n  addRule(lng, obj) {\n    this.rules[lng] = obj;\n  }\n  getRule(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    if (this.shouldUseIntlApi()) {\n      try {\n        return new Intl.PluralRules(getCleanedCode(code), {\n          type: options.ordinal ? 'ordinal' : 'cardinal'\n        });\n      } catch {\n        return;\n      }\n    }\n    return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n  }\n  needsPlural(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const rule = this.getRule(code, options);\n    if (this.shouldUseIntlApi()) {\n      return rule && rule.resolvedOptions().pluralCategories.length > 1;\n    }\n    return rule && rule.numbers.length > 1;\n  }\n  getPluralFormsOfKey(code, key) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    return this.getSuffixes(code, options).map(suffix => `${key}${suffix}`);\n  }\n  getSuffixes(code) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    const rule = this.getRule(code, options);\n    if (!rule) {\n      return [];\n    }\n    if (this.shouldUseIntlApi()) {\n      return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`);\n    }\n    return rule.numbers.map(number => this.getSuffix(code, number, options));\n  }\n  getSuffix(code, count) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    const rule = this.getRule(code, options);\n    if (rule) {\n      if (this.shouldUseIntlApi()) {\n        return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`;\n      }\n      return this.getSuffixRetroCompatible(rule, count);\n    }\n    this.logger.warn(`no plural rule found for: ${code}`);\n    return '';\n  }\n  getSuffixRetroCompatible(rule, count) {\n    const idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n    let suffix = rule.numbers[idx];\n    if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n      if (suffix === 2) {\n        suffix = 'plural';\n      } else if (suffix === 1) {\n        suffix = '';\n      }\n    }\n    const returnSuffix = () => this.options.prepend && suffix.toString() ? this.options.prepend + suffix.toString() : suffix.toString();\n    if (this.options.compatibilityJSON === 'v1') {\n      if (suffix === 1) return '';\n      if (typeof suffix === 'number') return `_plural_${suffix.toString()}`;\n      return returnSuffix();\n    } else if (this.options.compatibilityJSON === 'v2') {\n      return returnSuffix();\n    } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n      return returnSuffix();\n    }\n    return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n  }\n  shouldUseIntlApi() {\n    return !nonIntlVersions.includes(this.options.compatibilityJSON);\n  }\n}\n\nfunction deepFindWithDefaults(data, defaultData, key) {\n  let keySeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '.';\n  let ignoreJSONStructure = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n  let path = getPathWithDefaults(data, defaultData, key);\n  if (!path && ignoreJSONStructure && typeof key === 'string') {\n    path = deepFind(data, key, keySeparator);\n    if (path === undefined) path = deepFind(defaultData, key, keySeparator);\n  }\n  return path;\n}\nclass Interpolator {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    this.logger = baseLogger.create('interpolator');\n    this.options = options;\n    this.format = options.interpolation && options.interpolation.format || (value => value);\n    this.init(options);\n  }\n  init() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (!options.interpolation) options.interpolation = {\n      escapeValue: true\n    };\n    const iOpts = options.interpolation;\n    this.escape = iOpts.escape !== undefined ? iOpts.escape : escape;\n    this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n    this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n    this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';\n    this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';\n    this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n    this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';\n    this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';\n    this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape('$t(');\n    this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(')');\n    this.nestingOptionsSeparator = iOpts.nestingOptionsSeparator ? iOpts.nestingOptionsSeparator : iOpts.nestingOptionsSeparator || ',';\n    this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000;\n    this.alwaysFormat = iOpts.alwaysFormat !== undefined ? iOpts.alwaysFormat : false;\n    this.resetRegExp();\n  }\n  reset() {\n    if (this.options) this.init(this.options);\n  }\n  resetRegExp() {\n    const regexpStr = `${this.prefix}(.+?)${this.suffix}`;\n    this.regexp = new RegExp(regexpStr, 'g');\n    const regexpUnescapeStr = `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`;\n    this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g');\n    const nestingRegexpStr = `${this.nestingPrefix}(.+?)${this.nestingSuffix}`;\n    this.nestingRegexp = new RegExp(nestingRegexpStr, 'g');\n  }\n  interpolate(str, data, lng, options) {\n    let match;\n    let value;\n    let replaces;\n    const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n    function regexSafe(val) {\n      return val.replace(/\\$/g, '$$$$');\n    }\n    const handleFormat = key => {\n      if (key.indexOf(this.formatSeparator) < 0) {\n        const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);\n        return this.alwaysFormat ? this.format(path, undefined, lng, {\n          ...options,\n          ...data,\n          interpolationkey: key\n        }) : path;\n      }\n      const p = key.split(this.formatSeparator);\n      const k = p.shift().trim();\n      const f = p.join(this.formatSeparator).trim();\n      return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, {\n        ...options,\n        ...data,\n        interpolationkey: k\n      });\n    };\n    this.resetRegExp();\n    const missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n    const skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n    const todos = [{\n      regex: this.regexpUnescape,\n      safeValue: val => regexSafe(val)\n    }, {\n      regex: this.regexp,\n      safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)\n    }];\n    todos.forEach(todo => {\n      replaces = 0;\n      while (match = todo.regex.exec(str)) {\n        const matchedVar = match[1].trim();\n        value = handleFormat(matchedVar);\n        if (value === undefined) {\n          if (typeof missingInterpolationHandler === 'function') {\n            const temp = missingInterpolationHandler(str, match, options);\n            value = typeof temp === 'string' ? temp : '';\n          } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n            value = '';\n          } else if (skipOnVariables) {\n            value = match[0];\n            continue;\n          } else {\n            this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`);\n            value = '';\n          }\n        } else if (typeof value !== 'string' && !this.useRawValueToEscape) {\n          value = makeString(value);\n        }\n        const safeValue = todo.safeValue(value);\n        str = str.replace(match[0], safeValue);\n        if (skipOnVariables) {\n          todo.regex.lastIndex += value.length;\n          todo.regex.lastIndex -= match[0].length;\n        } else {\n          todo.regex.lastIndex = 0;\n        }\n        replaces++;\n        if (replaces >= this.maxReplaces) {\n          break;\n        }\n      }\n    });\n    return str;\n  }\n  nest(str, fc) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    let match;\n    let value;\n    let clonedOptions;\n    function handleHasOptions(key, inheritedOptions) {\n      const sep = this.nestingOptionsSeparator;\n      if (key.indexOf(sep) < 0) return key;\n      const c = key.split(new RegExp(`${sep}[ ]*{`));\n      let optionsString = `{${c[1]}`;\n      key = c[0];\n      optionsString = this.interpolate(optionsString, clonedOptions);\n      const matchedSingleQuotes = optionsString.match(/'/g);\n      const matchedDoubleQuotes = optionsString.match(/\"/g);\n      if (matchedSingleQuotes && matchedSingleQuotes.length % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) {\n        optionsString = optionsString.replace(/'/g, '\"');\n      }\n      try {\n        clonedOptions = JSON.parse(optionsString);\n        if (inheritedOptions) clonedOptions = {\n          ...inheritedOptions,\n          ...clonedOptions\n        };\n      } catch (e) {\n        this.logger.warn(`failed parsing options string in nesting for key ${key}`, e);\n        return `${key}${sep}${optionsString}`;\n      }\n      delete clonedOptions.defaultValue;\n      return key;\n    }\n    while (match = this.nestingRegexp.exec(str)) {\n      let formatters = [];\n      clonedOptions = {\n        ...options\n      };\n      clonedOptions = clonedOptions.replace && typeof clonedOptions.replace !== 'string' ? clonedOptions.replace : clonedOptions;\n      clonedOptions.applyPostProcessor = false;\n      delete clonedOptions.defaultValue;\n      let doReduce = false;\n      if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) {\n        const r = match[1].split(this.formatSeparator).map(elem => elem.trim());\n        match[1] = r.shift();\n        formatters = r;\n        doReduce = true;\n      }\n      value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n      if (value && match[0] === str && typeof value !== 'string') return value;\n      if (typeof value !== 'string') value = makeString(value);\n      if (!value) {\n        this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`);\n        value = '';\n      }\n      if (doReduce) {\n        value = formatters.reduce((v, f) => this.format(v, f, options.lng, {\n          ...options,\n          interpolationkey: match[1].trim()\n        }), value.trim());\n      }\n      str = str.replace(match[0], value);\n      this.regexp.lastIndex = 0;\n    }\n    return str;\n  }\n}\n\nfunction parseFormatStr(formatStr) {\n  let formatName = formatStr.toLowerCase().trim();\n  const formatOptions = {};\n  if (formatStr.indexOf('(') > -1) {\n    const p = formatStr.split('(');\n    formatName = p[0].toLowerCase().trim();\n    const optStr = p[1].substring(0, p[1].length - 1);\n    if (formatName === 'currency' && optStr.indexOf(':') < 0) {\n      if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n    } else if (formatName === 'relativetime' && optStr.indexOf(':') < 0) {\n      if (!formatOptions.range) formatOptions.range = optStr.trim();\n    } else {\n      const opts = optStr.split(';');\n      opts.forEach(opt => {\n        if (!opt) return;\n        const [key, ...rest] = opt.split(':');\n        const val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n        if (!formatOptions[key.trim()]) formatOptions[key.trim()] = val;\n        if (val === 'false') formatOptions[key.trim()] = false;\n        if (val === 'true') formatOptions[key.trim()] = true;\n        if (!isNaN(val)) formatOptions[key.trim()] = parseInt(val, 10);\n      });\n    }\n  }\n  return {\n    formatName,\n    formatOptions\n  };\n}\nfunction createCachedFormatter(fn) {\n  const cache = {};\n  return function invokeFormatter(val, lng, options) {\n    const key = lng + JSON.stringify(options);\n    let formatter = cache[key];\n    if (!formatter) {\n      formatter = fn(getCleanedCode(lng), options);\n      cache[key] = formatter;\n    }\n    return formatter(val);\n  };\n}\nclass Formatter {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    this.logger = baseLogger.create('formatter');\n    this.options = options;\n    this.formats = {\n      number: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.NumberFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      }),\n      currency: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.NumberFormat(lng, {\n          ...opt,\n          style: 'currency'\n        });\n        return val => formatter.format(val);\n      }),\n      datetime: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.DateTimeFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      }),\n      relativetime: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.RelativeTimeFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val, opt.range || 'day');\n      }),\n      list: createCachedFormatter((lng, opt) => {\n        const formatter = new Intl.ListFormat(lng, {\n          ...opt\n        });\n        return val => formatter.format(val);\n      })\n    };\n    this.init(options);\n  }\n  init(services) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      interpolation: {}\n    };\n    const iOpts = options.interpolation;\n    this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || ',';\n  }\n  add(name, fc) {\n    this.formats[name.toLowerCase().trim()] = fc;\n  }\n  addCached(name, fc) {\n    this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n  }\n  format(value, format, lng) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    const formats = format.split(this.formatSeparator);\n    const result = formats.reduce((mem, f) => {\n      const {\n        formatName,\n        formatOptions\n      } = parseFormatStr(f);\n      if (this.formats[formatName]) {\n        let formatted = mem;\n        try {\n          const valOptions = options && options.formatParams && options.formatParams[options.interpolationkey] || {};\n          const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n          formatted = this.formats[formatName](mem, l, {\n            ...formatOptions,\n            ...options,\n            ...valOptions\n          });\n        } catch (error) {\n          this.logger.warn(error);\n        }\n        return formatted;\n      } else {\n        this.logger.warn(`there was no format function for ${formatName}`);\n      }\n      return mem;\n    }, value);\n    return result;\n  }\n}\n\nfunction removePending(q, name) {\n  if (q.pending[name] !== undefined) {\n    delete q.pending[name];\n    q.pendingCount--;\n  }\n}\nclass Connector extends EventEmitter {\n  constructor(backend, store, services) {\n    let options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n    super();\n    this.backend = backend;\n    this.store = store;\n    this.services = services;\n    this.languageUtils = services.languageUtils;\n    this.options = options;\n    this.logger = baseLogger.create('backendConnector');\n    this.waitingReads = [];\n    this.maxParallelReads = options.maxParallelReads || 10;\n    this.readingCalls = 0;\n    this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n    this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n    this.state = {};\n    this.queue = [];\n    if (this.backend && this.backend.init) {\n      this.backend.init(services, options.backend, options);\n    }\n  }\n  queueLoad(languages, namespaces, options, callback) {\n    const toLoad = {};\n    const pending = {};\n    const toLoadLanguages = {};\n    const toLoadNamespaces = {};\n    languages.forEach(lng => {\n      let hasAllNamespaces = true;\n      namespaces.forEach(ns => {\n        const name = `${lng}|${ns}`;\n        if (!options.reload && this.store.hasResourceBundle(lng, ns)) {\n          this.state[name] = 2;\n        } else if (this.state[name] < 0) ; else if (this.state[name] === 1) {\n          if (pending[name] === undefined) pending[name] = true;\n        } else {\n          this.state[name] = 1;\n          hasAllNamespaces = false;\n          if (pending[name] === undefined) pending[name] = true;\n          if (toLoad[name] === undefined) toLoad[name] = true;\n          if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n        }\n      });\n      if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n    });\n    if (Object.keys(toLoad).length || Object.keys(pending).length) {\n      this.queue.push({\n        pending,\n        pendingCount: Object.keys(pending).length,\n        loaded: {},\n        errors: [],\n        callback\n      });\n    }\n    return {\n      toLoad: Object.keys(toLoad),\n      pending: Object.keys(pending),\n      toLoadLanguages: Object.keys(toLoadLanguages),\n      toLoadNamespaces: Object.keys(toLoadNamespaces)\n    };\n  }\n  loaded(name, err, data) {\n    const s = name.split('|');\n    const lng = s[0];\n    const ns = s[1];\n    if (err) this.emit('failedLoading', lng, ns, err);\n    if (data) {\n      this.store.addResourceBundle(lng, ns, data);\n    }\n    this.state[name] = err ? -1 : 2;\n    const loaded = {};\n    this.queue.forEach(q => {\n      pushPath(q.loaded, [lng], ns);\n      removePending(q, name);\n      if (err) q.errors.push(err);\n      if (q.pendingCount === 0 && !q.done) {\n        Object.keys(q.loaded).forEach(l => {\n          if (!loaded[l]) loaded[l] = {};\n          const loadedKeys = q.loaded[l];\n          if (loadedKeys.length) {\n            loadedKeys.forEach(n => {\n              if (loaded[l][n] === undefined) loaded[l][n] = true;\n            });\n          }\n        });\n        q.done = true;\n        if (q.errors.length) {\n          q.callback(q.errors);\n        } else {\n          q.callback();\n        }\n      }\n    });\n    this.emit('loaded', loaded);\n    this.queue = this.queue.filter(q => !q.done);\n  }\n  read(lng, ns, fcName) {\n    let tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n    let wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.retryTimeout;\n    let callback = arguments.length > 5 ? arguments[5] : undefined;\n    if (!lng.length) return callback(null, {});\n    if (this.readingCalls >= this.maxParallelReads) {\n      this.waitingReads.push({\n        lng,\n        ns,\n        fcName,\n        tried,\n        wait,\n        callback\n      });\n      return;\n    }\n    this.readingCalls++;\n    const resolver = (err, data) => {\n      this.readingCalls--;\n      if (this.waitingReads.length > 0) {\n        const next = this.waitingReads.shift();\n        this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n      }\n      if (err && data && tried < this.maxRetries) {\n        setTimeout(() => {\n          this.read.call(this, lng, ns, fcName, tried + 1, wait * 2, callback);\n        }, wait);\n        return;\n      }\n      callback(err, data);\n    };\n    const fc = this.backend[fcName].bind(this.backend);\n    if (fc.length === 2) {\n      try {\n        const r = fc(lng, ns);\n        if (r && typeof r.then === 'function') {\n          r.then(data => resolver(null, data)).catch(resolver);\n        } else {\n          resolver(null, r);\n        }\n      } catch (err) {\n        resolver(err);\n      }\n      return;\n    }\n    return fc(lng, ns, resolver);\n  }\n  prepareLoading(languages, namespaces) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    let callback = arguments.length > 3 ? arguments[3] : undefined;\n    if (!this.backend) {\n      this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n      return callback && callback();\n    }\n    if (typeof languages === 'string') languages = this.languageUtils.toResolveHierarchy(languages);\n    if (typeof namespaces === 'string') namespaces = [namespaces];\n    const toLoad = this.queueLoad(languages, namespaces, options, callback);\n    if (!toLoad.toLoad.length) {\n      if (!toLoad.pending.length) callback();\n      return null;\n    }\n    toLoad.toLoad.forEach(name => {\n      this.loadOne(name);\n    });\n  }\n  load(languages, namespaces, callback) {\n    this.prepareLoading(languages, namespaces, {}, callback);\n  }\n  reload(languages, namespaces, callback) {\n    this.prepareLoading(languages, namespaces, {\n      reload: true\n    }, callback);\n  }\n  loadOne(name) {\n    let prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    const s = name.split('|');\n    const lng = s[0];\n    const ns = s[1];\n    this.read(lng, ns, 'read', undefined, undefined, (err, data) => {\n      if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err);\n      if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data);\n      this.loaded(name, err, data);\n    });\n  }\n  saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n    let options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n    let clb = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : () => {};\n    if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n      this.logger.warn(`did not save key \"${key}\" as the namespace \"${namespace}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n      return;\n    }\n    if (key === undefined || key === null || key === '') return;\n    if (this.backend && this.backend.create) {\n      const opts = {\n        ...options,\n        isUpdate\n      };\n      const fc = this.backend.create.bind(this.backend);\n      if (fc.length < 6) {\n        try {\n          let r;\n          if (fc.length === 5) {\n            r = fc(languages, namespace, key, fallbackValue, opts);\n          } else {\n            r = fc(languages, namespace, key, fallbackValue);\n          }\n          if (r && typeof r.then === 'function') {\n            r.then(data => clb(null, data)).catch(clb);\n          } else {\n            clb(null, r);\n          }\n        } catch (err) {\n          clb(err);\n        }\n      } else {\n        fc(languages, namespace, key, fallbackValue, clb, opts);\n      }\n    }\n    if (!languages || !languages[0]) return;\n    this.store.addResource(languages[0], namespace, key, fallbackValue);\n  }\n}\n\nfunction get() {\n  return {\n    debug: false,\n    initImmediate: true,\n    ns: ['translation'],\n    defaultNS: ['translation'],\n    fallbackLng: ['dev'],\n    fallbackNS: false,\n    supportedLngs: false,\n    nonExplicitSupportedLngs: false,\n    load: 'all',\n    preload: false,\n    simplifyPluralSuffix: true,\n    keySeparator: '.',\n    nsSeparator: ':',\n    pluralSeparator: '_',\n    contextSeparator: '_',\n    partialBundledLanguages: false,\n    saveMissing: false,\n    updateMissing: false,\n    saveMissingTo: 'fallback',\n    saveMissingPlurals: true,\n    missingKeyHandler: false,\n    missingInterpolationHandler: false,\n    postProcess: false,\n    postProcessPassResolved: false,\n    returnNull: false,\n    returnEmptyString: true,\n    returnObjects: false,\n    joinArrays: false,\n    returnedObjectHandler: false,\n    parseMissingKeyHandler: false,\n    appendNamespaceToMissingKey: false,\n    appendNamespaceToCIMode: false,\n    overloadTranslationOptionHandler: function handle(args) {\n      let ret = {};\n      if (typeof args[1] === 'object') ret = args[1];\n      if (typeof args[1] === 'string') ret.defaultValue = args[1];\n      if (typeof args[2] === 'string') ret.tDescription = args[2];\n      if (typeof args[2] === 'object' || typeof args[3] === 'object') {\n        const options = args[3] || args[2];\n        Object.keys(options).forEach(key => {\n          ret[key] = options[key];\n        });\n      }\n      return ret;\n    },\n    interpolation: {\n      escapeValue: true,\n      format: (value, format, lng, options) => value,\n      prefix: '{{',\n      suffix: '}}',\n      formatSeparator: ',',\n      unescapePrefix: '-',\n      nestingPrefix: '$t(',\n      nestingSuffix: ')',\n      nestingOptionsSeparator: ',',\n      maxReplaces: 1000,\n      skipOnVariables: true\n    }\n  };\n}\nfunction transformOptions(options) {\n  if (typeof options.ns === 'string') options.ns = [options.ns];\n  if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];\n  if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS];\n  if (options.supportedLngs && options.supportedLngs.indexOf('cimode') < 0) {\n    options.supportedLngs = options.supportedLngs.concat(['cimode']);\n  }\n  return options;\n}\n\nfunction noop() {}\nfunction bindMemberFunctions(inst) {\n  const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n  mems.forEach(mem => {\n    if (typeof inst[mem] === 'function') {\n      inst[mem] = inst[mem].bind(inst);\n    }\n  });\n}\nclass I18n extends EventEmitter {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    super();\n    this.options = transformOptions(options);\n    this.services = {};\n    this.logger = baseLogger;\n    this.modules = {\n      external: []\n    };\n    bindMemberFunctions(this);\n    if (callback && !this.isInitialized && !options.isClone) {\n      if (!this.options.initImmediate) {\n        this.init(options, callback);\n        return this;\n      }\n      setTimeout(() => {\n        this.init(options, callback);\n      }, 0);\n    }\n  }\n  init() {\n    var _this = this;\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    if (typeof options === 'function') {\n      callback = options;\n      options = {};\n    }\n    if (!options.defaultNS && options.defaultNS !== false && options.ns) {\n      if (typeof options.ns === 'string') {\n        options.defaultNS = options.ns;\n      } else if (options.ns.indexOf('translation') < 0) {\n        options.defaultNS = options.ns[0];\n      }\n    }\n    const defOpts = get();\n    this.options = {\n      ...defOpts,\n      ...this.options,\n      ...transformOptions(options)\n    };\n    if (this.options.compatibilityAPI !== 'v1') {\n      this.options.interpolation = {\n        ...defOpts.interpolation,\n        ...this.options.interpolation\n      };\n    }\n    if (options.keySeparator !== undefined) {\n      this.options.userDefinedKeySeparator = options.keySeparator;\n    }\n    if (options.nsSeparator !== undefined) {\n      this.options.userDefinedNsSeparator = options.nsSeparator;\n    }\n    function createClassOnDemand(ClassOrObject) {\n      if (!ClassOrObject) return null;\n      if (typeof ClassOrObject === 'function') return new ClassOrObject();\n      return ClassOrObject;\n    }\n    if (!this.options.isClone) {\n      if (this.modules.logger) {\n        baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n      } else {\n        baseLogger.init(null, this.options);\n      }\n      let formatter;\n      if (this.modules.formatter) {\n        formatter = this.modules.formatter;\n      } else if (typeof Intl !== 'undefined') {\n        formatter = Formatter;\n      }\n      const lu = new LanguageUtil(this.options);\n      this.store = new ResourceStore(this.options.resources, this.options);\n      const s = this.services;\n      s.logger = baseLogger;\n      s.resourceStore = this.store;\n      s.languageUtils = lu;\n      s.pluralResolver = new PluralResolver(lu, {\n        prepend: this.options.pluralSeparator,\n        compatibilityJSON: this.options.compatibilityJSON,\n        simplifyPluralSuffix: this.options.simplifyPluralSuffix\n      });\n      if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {\n        s.formatter = createClassOnDemand(formatter);\n        s.formatter.init(s, this.options);\n        this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n      }\n      s.interpolator = new Interpolator(this.options);\n      s.utils = {\n        hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n      };\n      s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n      s.backendConnector.on('*', function (event) {\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n        _this.emit(event, ...args);\n      });\n      if (this.modules.languageDetector) {\n        s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n        if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n      }\n      if (this.modules.i18nFormat) {\n        s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n        if (s.i18nFormat.init) s.i18nFormat.init(this);\n      }\n      this.translator = new Translator(this.services, this.options);\n      this.translator.on('*', function (event) {\n        for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n          args[_key2 - 1] = arguments[_key2];\n        }\n        _this.emit(event, ...args);\n      });\n      this.modules.external.forEach(m => {\n        if (m.init) m.init(this);\n      });\n    }\n    this.format = this.options.interpolation.format;\n    if (!callback) callback = noop;\n    if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n      const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n      if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n    }\n    if (!this.services.languageDetector && !this.options.lng) {\n      this.logger.warn('init: no languageDetector is used and no lng is defined');\n    }\n    const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n    storeApi.forEach(fcName => {\n      this[fcName] = function () {\n        return _this.store[fcName](...arguments);\n      };\n    });\n    const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n    storeApiChained.forEach(fcName => {\n      this[fcName] = function () {\n        _this.store[fcName](...arguments);\n        return _this;\n      };\n    });\n    const deferred = defer();\n    const load = () => {\n      const finish = (err, t) => {\n        if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!');\n        this.isInitialized = true;\n        if (!this.options.isClone) this.logger.log('initialized', this.options);\n        this.emit('initialized', this.options);\n        deferred.resolve(t);\n        callback(err, t);\n      };\n      if (this.languages && this.options.compatibilityAPI !== 'v1' && !this.isInitialized) return finish(null, this.t.bind(this));\n      this.changeLanguage(this.options.lng, finish);\n    };\n    if (this.options.resources || !this.options.initImmediate) {\n      load();\n    } else {\n      setTimeout(load, 0);\n    }\n    return deferred;\n  }\n  loadResources(language) {\n    let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n    let usedCallback = callback;\n    const usedLng = typeof language === 'string' ? language : this.language;\n    if (typeof language === 'function') usedCallback = language;\n    if (!this.options.resources || this.options.partialBundledLanguages) {\n      if (usedLng && usedLng.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback();\n      const toLoad = [];\n      const append = lng => {\n        if (!lng) return;\n        if (lng === 'cimode') return;\n        const lngs = this.services.languageUtils.toResolveHierarchy(lng);\n        lngs.forEach(l => {\n          if (l === 'cimode') return;\n          if (toLoad.indexOf(l) < 0) toLoad.push(l);\n        });\n      };\n      if (!usedLng) {\n        const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n        fallbacks.forEach(l => append(l));\n      } else {\n        append(usedLng);\n      }\n      if (this.options.preload) {\n        this.options.preload.forEach(l => append(l));\n      }\n      this.services.backendConnector.load(toLoad, this.options.ns, e => {\n        if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language);\n        usedCallback(e);\n      });\n    } else {\n      usedCallback(null);\n    }\n  }\n  reloadResources(lngs, ns, callback) {\n    const deferred = defer();\n    if (!lngs) lngs = this.languages;\n    if (!ns) ns = this.options.ns;\n    if (!callback) callback = noop;\n    this.services.backendConnector.reload(lngs, ns, err => {\n      deferred.resolve();\n      callback(err);\n    });\n    return deferred;\n  }\n  use(module) {\n    if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n    if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n    if (module.type === 'backend') {\n      this.modules.backend = module;\n    }\n    if (module.type === 'logger' || module.log && module.warn && module.error) {\n      this.modules.logger = module;\n    }\n    if (module.type === 'languageDetector') {\n      this.modules.languageDetector = module;\n    }\n    if (module.type === 'i18nFormat') {\n      this.modules.i18nFormat = module;\n    }\n    if (module.type === 'postProcessor') {\n      postProcessor.addPostProcessor(module);\n    }\n    if (module.type === 'formatter') {\n      this.modules.formatter = module;\n    }\n    if (module.type === '3rdParty') {\n      this.modules.external.push(module);\n    }\n    return this;\n  }\n  setResolvedLanguage(l) {\n    if (!l || !this.languages) return;\n    if (['cimode', 'dev'].indexOf(l) > -1) return;\n    for (let li = 0; li < this.languages.length; li++) {\n      const lngInLngs = this.languages[li];\n      if (['cimode', 'dev'].indexOf(lngInLngs) > -1) continue;\n      if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n        this.resolvedLanguage = lngInLngs;\n        break;\n      }\n    }\n  }\n  changeLanguage(lng, callback) {\n    var _this2 = this;\n    this.isLanguageChangingTo = lng;\n    const deferred = defer();\n    this.emit('languageChanging', lng);\n    const setLngProps = l => {\n      this.language = l;\n      this.languages = this.services.languageUtils.toResolveHierarchy(l);\n      this.resolvedLanguage = undefined;\n      this.setResolvedLanguage(l);\n    };\n    const done = (err, l) => {\n      if (l) {\n        setLngProps(l);\n        this.translator.changeLanguage(l);\n        this.isLanguageChangingTo = undefined;\n        this.emit('languageChanged', l);\n        this.logger.log('languageChanged', l);\n      } else {\n        this.isLanguageChangingTo = undefined;\n      }\n      deferred.resolve(function () {\n        return _this2.t(...arguments);\n      });\n      if (callback) callback(err, function () {\n        return _this2.t(...arguments);\n      });\n    };\n    const setLng = lngs => {\n      if (!lng && !lngs && this.services.languageDetector) lngs = [];\n      const l = typeof lngs === 'string' ? lngs : this.services.languageUtils.getBestMatchFromCodes(lngs);\n      if (l) {\n        if (!this.language) {\n          setLngProps(l);\n        }\n        if (!this.translator.language) this.translator.changeLanguage(l);\n        if (this.services.languageDetector && this.services.languageDetector.cacheUserLanguage) this.services.languageDetector.cacheUserLanguage(l);\n      }\n      this.loadResources(l, err => {\n        done(err, l);\n      });\n    };\n    if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n      setLng(this.services.languageDetector.detect());\n    } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n      if (this.services.languageDetector.detect.length === 0) {\n        this.services.languageDetector.detect().then(setLng);\n      } else {\n        this.services.languageDetector.detect(setLng);\n      }\n    } else {\n      setLng(lng);\n    }\n    return deferred;\n  }\n  getFixedT(lng, ns, keyPrefix) {\n    var _this3 = this;\n    const fixedT = function (key, opts) {\n      let options;\n      if (typeof opts !== 'object') {\n        for (var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n          rest[_key3 - 2] = arguments[_key3];\n        }\n        options = _this3.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n      } else {\n        options = {\n          ...opts\n        };\n      }\n      options.lng = options.lng || fixedT.lng;\n      options.lngs = options.lngs || fixedT.lngs;\n      options.ns = options.ns || fixedT.ns;\n      options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix;\n      const keySeparator = _this3.options.keySeparator || '.';\n      let resultKey;\n      if (options.keyPrefix && Array.isArray(key)) {\n        resultKey = key.map(k => `${options.keyPrefix}${keySeparator}${k}`);\n      } else {\n        resultKey = options.keyPrefix ? `${options.keyPrefix}${keySeparator}${key}` : key;\n      }\n      return _this3.t(resultKey, options);\n    };\n    if (typeof lng === 'string') {\n      fixedT.lng = lng;\n    } else {\n      fixedT.lngs = lng;\n    }\n    fixedT.ns = ns;\n    fixedT.keyPrefix = keyPrefix;\n    return fixedT;\n  }\n  t() {\n    return this.translator && this.translator.translate(...arguments);\n  }\n  exists() {\n    return this.translator && this.translator.exists(...arguments);\n  }\n  setDefaultNamespace(ns) {\n    this.options.defaultNS = ns;\n  }\n  hasLoadedNamespace(ns) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    if (!this.isInitialized) {\n      this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n      return false;\n    }\n    if (!this.languages || !this.languages.length) {\n      this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n      return false;\n    }\n    const lng = options.lng || this.resolvedLanguage || this.languages[0];\n    const fallbackLng = this.options ? this.options.fallbackLng : false;\n    const lastLng = this.languages[this.languages.length - 1];\n    if (lng.toLowerCase() === 'cimode') return true;\n    const loadNotPending = (l, n) => {\n      const loadState = this.services.backendConnector.state[`${l}|${n}`];\n      return loadState === -1 || loadState === 2;\n    };\n    if (options.precheck) {\n      const preResult = options.precheck(this, loadNotPending);\n      if (preResult !== undefined) return preResult;\n    }\n    if (this.hasResourceBundle(lng, ns)) return true;\n    if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n    if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n    return false;\n  }\n  loadNamespaces(ns, callback) {\n    const deferred = defer();\n    if (!this.options.ns) {\n      if (callback) callback();\n      return Promise.resolve();\n    }\n    if (typeof ns === 'string') ns = [ns];\n    ns.forEach(n => {\n      if (this.options.ns.indexOf(n) < 0) this.options.ns.push(n);\n    });\n    this.loadResources(err => {\n      deferred.resolve();\n      if (callback) callback(err);\n    });\n    return deferred;\n  }\n  loadLanguages(lngs, callback) {\n    const deferred = defer();\n    if (typeof lngs === 'string') lngs = [lngs];\n    const preloaded = this.options.preload || [];\n    const newLngs = lngs.filter(lng => preloaded.indexOf(lng) < 0);\n    if (!newLngs.length) {\n      if (callback) callback();\n      return Promise.resolve();\n    }\n    this.options.preload = preloaded.concat(newLngs);\n    this.loadResources(err => {\n      deferred.resolve();\n      if (callback) callback(err);\n    });\n    return deferred;\n  }\n  dir(lng) {\n    if (!lng) lng = this.resolvedLanguage || (this.languages && this.languages.length > 0 ? this.languages[0] : this.language);\n    if (!lng) return 'rtl';\n    const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n    const languageUtils = this.services && this.services.languageUtils || new LanguageUtil(get());\n    return rtlLngs.indexOf(languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n  }\n  static createInstance() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 ? arguments[1] : undefined;\n    return new I18n(options, callback);\n  }\n  cloneInstance() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n    const forkResourceStore = options.forkResourceStore;\n    if (forkResourceStore) delete options.forkResourceStore;\n    const mergedOptions = {\n      ...this.options,\n      ...options,\n      ...{\n        isClone: true\n      }\n    };\n    const clone = new I18n(mergedOptions);\n    if (options.debug !== undefined || options.prefix !== undefined) {\n      clone.logger = clone.logger.clone(options);\n    }\n    const membersToCopy = ['store', 'services', 'language'];\n    membersToCopy.forEach(m => {\n      clone[m] = this[m];\n    });\n    clone.services = {\n      ...this.services\n    };\n    clone.services.utils = {\n      hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n    };\n    if (forkResourceStore) {\n      clone.store = new ResourceStore(this.store.data, mergedOptions);\n      clone.services.resourceStore = clone.store;\n    }\n    clone.translator = new Translator(clone.services, mergedOptions);\n    clone.translator.on('*', function (event) {\n      for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n        args[_key4 - 1] = arguments[_key4];\n      }\n      clone.emit(event, ...args);\n    });\n    clone.init(mergedOptions, callback);\n    clone.translator.options = mergedOptions;\n    clone.translator.backendConnector.services.utils = {\n      hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n    };\n    return clone;\n  }\n  toJSON() {\n    return {\n      options: this.options,\n      store: this.store,\n      language: this.language,\n      languages: this.languages,\n      resolvedLanguage: this.resolvedLanguage\n    };\n  }\n}\nconst instance = I18n.createInstance();\ninstance.createInstance = I18n.createInstance;\n\nconst createInstance = instance.createInstance;\nconst dir = instance.dir;\nconst init = instance.init;\nconst loadResources = instance.loadResources;\nconst reloadResources = instance.reloadResources;\nconst use = instance.use;\nconst changeLanguage = instance.changeLanguage;\nconst getFixedT = instance.getFixedT;\nconst t = instance.t;\nconst exists = instance.exists;\nconst setDefaultNamespace = instance.setDefaultNamespace;\nconst hasLoadedNamespace = instance.hasLoadedNamespace;\nconst loadNamespaces = instance.loadNamespaces;\nconst loadLanguages = instance.loadLanguages;\n\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };\n","import { facetOrdering } from \"../product-facets\";\nimport { ArticleResult } from \"../raw-item-parsers/article\";\nimport { ResultItemCoveoMetadata } from \"../raw-item-parsers/coveo-metadata\";\nimport { ProductResult } from \"../raw-item-parsers/product\";\nimport { Filters } from \"../search-results\";\nimport { getCoveoAccessToken } from \"../../../../../config\";\n\nexport type UsedResult = {\n    coveoMetadata: ResultItemCoveoMetadata\n    position: number,\n    title: string,\n    url: string,\n}\n\nconst buildCommonsPayload = (\n    result:  Pick<ProductResult | ArticleResult, \"trackingMetadata\" | \"position\" | \"title\" | \"url\">,\n    ctx: {\n        lang: string,\n        searchHub: string,\n        clientId: string,\n        pipeline: string,\n        searchUid: string,\n        countPerPage: number,\n        currentPage: number\n    }\n) => {\n    return ({\n        \"language\": ctx.lang,\n        \"userAgent\": navigator.userAgent,\n        \"collectionName\": \"default\",\n        \"documentAuthor\": \"unknown\",\n        \"documentPosition\": result.position,\n        \"documentTitle\": result.title,\n        documentUri: result.trackingMetadata.uri,\n        documentUriHash: result.trackingMetadata.urihash,\n        documentUrl: result.url,\n        \"rankingModifier\": result.trackingMetadata.rankingModifier,\n        \"sourceName\": result.trackingMetadata.source,\n        \"queryPipeline\": ctx.pipeline,\n        \"originContext\": \"Search\",\n        \"originLevel1\": ctx.searchHub,\n        \"originLevel3\": new URL(window.location.pathname, window.location.toString()).toString(),\n        \"anonymous\": false,\n        \"facetState\": [],\n        \"clientId\": ctx.clientId,\n        \"actionCause\": \"documentOpen\",\n        \"searchQueryUid\": ctx.searchUid\n    })\n}\n\nconst sendClickBeacon = (payload: string, ctx: { clientId: string,currentPage: number, countPerPage: number }) => {\n    const data = new URLSearchParams()\n    data.append(\"clickEvent\", payload)\n\n    const blob = new Blob([data.toString()], {\n        type: \"application/x-www-form-urlencoded\"\n    });\n\n    let finalDocumentPosition= '1'\n    const pageValue = ctx.currentPage\n    const countPerPageValue = ctx.countPerPage\n    const currentPosition = (JSON.parse(payload).documentPosition + 1) as string\n    if (pageValue != null) {\n        finalDocumentPosition =  (pageValue -1 ) * countPerPageValue + currentPosition\n    }\n    const url = new URL(\"https://analytics-eu.cloud.coveo.com/rest/ua/v15/analytics/click\")\n    url.searchParams.set(\"access_token\", getCoveoAccessToken())\n    url.searchParams.set(\"visitorId\", ctx.clientId)\n    url.searchParams.set(\"discardVisitInfo\", \"true\")\n    url.searchParams.set(\"documentPosition\", finalDocumentPosition)\n    navigator.sendBeacon(url, blob)\n}\n\nconst trackCoveoClick = (...args: Parameters<typeof buildTrackProductClick>) => {\n    const [ctx, result] = args;\n    const filters = ctx.filters;\n    const payload = ({\n        ...buildCommonsPayload(result, ctx),\n        \"originLevel2\": \"Products\",\n        \"facetState\": filters ?\n            facetOrdering\n                .flatMap((key) => filters[key] as (typeof filters[typeof key][number])[])\n                .filter(({ selected }) => selected)\n                .map(({ trackingMetadata }) => ({ ...trackingMetadata, state: \"selected\" as const })) :\n            [],\n        \"customData\": {\n            \"contentIDKey\": \"permanentid\",\n            \"contentIDValue\": result.trackingMetadata.permanentid,\n        },\n    })\n\n    sendClickBeacon(JSON.stringify(payload), ctx)\n}\n\nconst trackGAClick = async (productPrm: Promise<EcapiProduct>, ...args: Parameters<typeof buildTrackProductClick>) => {\n    const [ctx, result] = args;\n\n    const ecapiProduct = await productPrm;\n\n    window.gtmDataObject.push({\n        'event': 'productClick',\n        'eventAction': 'Product Click',\n        'currencyCode': ctx.currency,\n        'eventRaisedBy': 'Page Builder',\n        'ecommerce': {\n            'click': {\n                'actionField': {\n                    list: result.trackingMetadata.listName,\n                },\n                'products': [\n                    {\n                        position: result.position + 1,\n                        name: ecapiProduct!.internationalName,\n                        id: ecapiProduct!.internationalId,\n                        price: ecapiProduct!.unitPrice,\n                        dimension44: ecapiProduct!.category.includes(\"Discovery\").toString(),\n                        dimension53: ecapiProduct!.legacyId,\n                        dimension54: ecapiProduct!.name,\n                        dimension55: ecapiProduct!.category,\n                        dimension56: ecapiProduct!.technologies.map(encodedTech => /machineTechno\\/(.*)$/.exec(encodedTech)![1]).join(\", \"),\n                        dimension57: ecapiProduct!.bundled ? \"bundle\" : \"single\",\n                        dimension192: ecapiProduct!.inStock ? \"in stock\" : \"out of stock\",\n                        category: ecapiProduct!.type,\n                        brand: 'Nespresso'\n                    }\n                ]\n            }\n        }\n    });\n}\n\nexport const buildTrackProductClick = (ctx: {\n    filters?: Filters,\n    clientId: string,\n    searchHub: string,\n    lang: string,\n    pipeline: string,\n    currency: string,\n    searchUid: string,\n    countPerPage: number,\n    currentPage: number\n}, result: Pick<ProductResult, \"sku\" | \"trackingMetadata\" | \"position\" | \"title\" | \"url\">) => {\n    const ecapiProductPrm = window.napi.catalog().getProduct(result.sku);\n    return () => {\n        trackCoveoClick(ctx, result);\n        trackGAClick(ecapiProductPrm, ctx, result);\n    }\n}\n\nexport const buildTrackArticleClick = (ctx: {\n    clientId: string,\n    pipeline: string,\n    searchUid: string,\n    searchHub: string,\n    lang: string,\n}, result:  Pick<ArticleResult, \"trackingMetadata\" | \"position\" | \"title\" | \"url\">) => () => {\n    const payload = ({\n        ...buildCommonsPayload(result, ctx),\n        \"originLevel2\": \"Articles\",\n    })\n\n    sendClickBeacon(JSON.stringify(payload), ctx)\n}\n","import { createInstance } from \"i18next\";\nimport { URLStore } from \"./url-store\";\nimport {  SharedProps } from \"./shared/types\";\nimport { buildTrackProductClick as unboundBuildTrackProductClick, buildTrackArticleClick as unboundBuildTrackArticleClick } from \"./results/search/analytics/click\";\nimport { signal } from \"@preact/signals\";\nimport { BarURLState } from \"./url-store/standalone-bar-store\";\nimport { Filters } from \"./results/search/search-results\";\nimport { ArticleResult, ProductResult } from \"./\";\nimport { useMemo } from \"preact/hooks\";\n\nconst initI18n = async (props: Pick<SharedProps, \"lang\" | \"coveoCopywriting\">) => {\n    const debouncedHandlers = {} as any\n    const debouncedPromise = new Promise((resolve, reject) => {\n        debouncedHandlers.resolve = resolve\n        debouncedHandlers.reject = reject\n    })\n    const i18nOptions = {\n        interpolation: { escapeValue: false },\n        lng: props.lang,\n        compatibilityJSON: 'v3' as const,\n        resources: { [props.lang]: { translation: props.coveoCopywriting } }\n    }\n\n    const instance = createInstance(i18nOptions, (err) => {\n        if (err) { debouncedHandlers.reject(err) }\n        else { debouncedHandlers.resolve() }\n    });\n    await debouncedPromise\n    return instance\n}\n\nexport const getSharedEngineProps = async <\n    P extends SharedProps,\n    S extends BarURLState\n>(\n    props: P,\n    urlStore: URLStore<S>,\n    cleanupUrlStore: () => void\n) => {\n    const { short } = await window.napi.priceFormat()\n    const queryText = signal(urlStore.store.q.peek()?.query ?? \"\")\n    const commons = {\n        queryText,\n        i18n: await initI18n(props),\n        priceFormatter: { short: (amount: number) => short(props.currency, amount) },\n        store: urlStore.store,\n        state: urlStore.state,\n        updateStore: urlStore.update,\n        useInternalLink: urlStore.useInternalLink,\n    }\n\n    const buildUseArticleTracking = (payload: {\n        trackingMetadata: { pipeline: string, searchUid: string }\n    }) => (article: Pick<ArticleResult, \"trackingMetadata\" | \"position\" | \"title\" | \"url\">) => {\n        return unboundBuildTrackArticleClick({\n            clientId: props.visitorId,\n            searchHub: props.searchHub,\n            lang: props.lang,\n            ...payload.trackingMetadata\n        }, article)\n    }\n\n    const buildUseProductTracking = ((payload: {\n        filters?: Filters,\n        trackingMetadata: { pipeline: string, searchUid: string },\n        countPerPage: number,\n        currentPage: number\n    }) => (product: Pick<ProductResult, \"sku\" | \"trackingMetadata\" | \"position\" | \"title\" | \"url\">) => {\n        return useMemo(() => {\n            return unboundBuildTrackProductClick({\n                clientId: props.visitorId,\n                searchHub: props.searchHub,\n                lang: props.lang,\n                currency: props.currency,\n                filters: payload.filters,\n                ...payload.trackingMetadata,\n                countPerPage: payload.countPerPage,\n                currentPage: payload.currentPage\n            }, product)\n        }, [product.sku])\n    })\n\n    return ({ ...commons, ...props, cleanupUrlStore, buildUseArticleTracking, buildUseProductTracking })\n}\n","/**\n * https://dsu-confluence.nestle.biz/display/EUXUI/06.+IM+Policy\n *\n * Code taken from nb-img web component\n *\n * IM Policy annoying behaviour:\n * IM Policy is returning in some cases more than 2x images (based in device pixel density auto detection e.g. Iphone 11 pro returns x3)\n * We don't want this behaviour so we need to force x1 by adding an extra param &imdensity=1\n */\n\ntype Profile = {\n    name: string\n    sizes: number[]\n    diff?: number\n}\n\nconst PROFILES: Profile[] = [\n    {\n        name: 'small',\n        sizes: [\n            16, 24, 32, 36, 48, 64, 72, 96, 108, 120, 128, 144, 150, 180, 192, 216, 225, 240, 288,\n            300, 360, 384, 450, 480, 600\n        ]\n    },\n    {\n        name: 'medium',\n        sizes: [\n            270, 512, 540, 675, 720, 768, 800, 900, 960, 1000, 1024, 1080, 1200, 1350, 1440, 1500,\n            1536, 1600, 1800, 2000, 2048, 2400, 3000, 3200, 4000\n        ]\n    },\n    {\n        name: 'large',\n        sizes: [640, 1280, 1920, 2160, 2560, 2880, 3072, 3840, 4096]\n    },\n    {\n        name: 'product',\n        sizes: [\n            45, 50, 58, 60, 65, 90, 100, 130, 135, 174, 195, 200, 230, 232, 260, 300, 400, 460, 690\n        ]\n    }\n]\n\nexport default function createImPolicyQuery(width: number): string {\n    const finalWidth = getRetinaWidth(width)\n\n    const impolicyProfile = getImpolicyProfile(finalWidth)\n\n    return `?impolicy=${impolicyProfile}&imwidth=${finalWidth}&imdensity=1`\n}\n\nfunction getRetinaWidth(width: number): number {\n    const { devicePixelRatio } = window\n    return devicePixelRatio > 1 ? width * 2 : width\n}\n\nfunction getImpolicyProfile(width: number): string {\n    const { exactFound, closest } = getClosest(width)\n\n    if (exactFound) {\n        return exactFound.name\n    } else {\n        let tempDiff = closest[0].diff\n        let match = closest[0]\n        closest.forEach(item => {\n            // @ts-ignore\n            if (item.diff <= tempDiff) {\n                tempDiff = item.diff\n                match = item\n            }\n        })\n        return match.name\n    }\n}\n\nfunction getClosest(width: number): {\n    exactFound?: Profile\n    closest: Profile[]\n} {\n    let exactFound = undefined\n    let closest: Profile[] = []\n    PROFILES.every(profile => {\n        const found = profile.sizes.find(el => el >= width)\n\n        if (found) {\n            if (found === width) {\n                exactFound = profile\n                return false\n            }\n\n            closest.push({ name: profile.name, sizes: profile.sizes, diff: found - width })\n        }\n\n        return true\n    })\n    return { exactFound, closest }\n}\n","import { Signal, useComputed } from '@preact/signals'\nimport type { JSXInternal } from 'preact/src/jsx'\nimport { Ref, useMemo } from 'preact/hooks'\nimport cn from 'classnames'\nimport cssModule from './shared-styles.module.css'\nimport { CloseIcon, FAQIcon } from '../shared/icons'\nimport { escapeForFaq } from '../../shared/escape-for-faqs'\nimport { BarEngine, InstantResult, ProductResult, Suggestion } from '../../engine'\nimport { useBarContext } from './context'\nimport { useProductImpressionTracking } from '../../engine'\nimport createImPolicyQuery from '@kissui/helpers/src/createImPolicyQuery'\n\ntype InstantResultProps = {\n    i18n: BarEngine['i18n']\n    locale: BarEngine['locale']\n    portalSlotSignal: Signal<JSXInternal.Element | null>\n    result: InstantResult\n    focusedSignal: Signal<string | undefined>\n}\n\ntype SubInstantProps<T extends InstantResult['tab']> = Omit<InstantResultProps, 'focusedSignal'> & {\n    onMouseEnter: JSXInternal.MouseEventHandler<HTMLElement>\n    className: JSXInternal.SignalLike<string>\n    result: { tab: T }\n}\n\ntype InstantProductProps = SubInstantProps<'Products'> & {\n    useProductTracking: (product: InstantResult & { tab: 'Products' }) => () => void\n}\nconst InstantProductResult = (props: InstantProductProps) => {\n    const { result, className, onMouseEnter, i18n, locale, useProductTracking } = props\n    const handleClickTrack = useProductTracking(result)\n    const trackedNode = useProductImpressionTracking<HTMLAnchorElement>(props.result)\n    const listFormatter = useMemo(\n        () => new Intl.ListFormat(locale, { style: 'short', type: 'conjunction' }),\n        [locale]\n    )\n    const capitalize = (s: string) => s.replace(/(.)(.*)/, (_, s, t) => `${s.toUpperCase()}${t}`)\n\n    return (\n        <a\n            ref={trackedNode}\n            href={result.url}\n            target=\"_self\"\n            className={className}\n            onClick={handleClickTrack}\n            onMouseEnter={onMouseEnter}>\n            {result.imageUrl && <ImageSection {...props} />}\n            <div class={cssModule['cv-column']}>\n                <div class={cssModule['cv-row']}>\n                    <strong>{result.title}</strong>\n                </div>\n                {result.technologies.length > 0 ? (\n                    <div class={cn(cssModule['cv-row'], cssModule['cv-in-tech'])}>\n                        {i18n.t('in_prd_tecnology', {\n                            prd_technology: listFormatter.format(\n                                result.technologies.map(capitalize)\n                            )\n                        })}\n                    </div>\n                ) : null}\n            </div>\n        </a>\n    )\n}\ntype InstantArticleProps = SubInstantProps<'Articles'> & {\n    useArticleTracking: (product: InstantResult & { tab: 'Articles' }) => () => void\n}\nconst InstantArticleResult = (props: InstantArticleProps) => {\n    const { result, className, onMouseEnter, useArticleTracking } = props\n    const handleClickTrack = useArticleTracking(result)\n    return (\n        <a\n            href={result.url}\n            target=\"_self\"\n            onClick={handleClickTrack}\n            className={className}\n            onMouseEnter={onMouseEnter}>\n           {result.imageUrl && <ImageSection {...props} />}\n            <div class={cssModule['cv-column']}>\n                <div class={cssModule['cv-row']} onClick={() => 'TODO'}>\n                    <strong>{result.title}</strong>\n                </div>\n            </div>\n        </a>\n    )\n}\n\nconst InstantFAQResult = (props: SubInstantProps<'FAQs'>) => {\n    return (\n        <button\n            className={props.className}\n            aria-label={props.result.title}\n            onMouseEnter={props.onMouseEnter}\n            onClick={() => {\n                props.portalSlotSignal.value = (\n                    <div className={cssModule['faq-panel']}>\n                        <div class={cssModule['faq-question']}>{props.result.faqQuestion}</div>\n                        <button\n                            class={cssModule['faq-close-icon']}\n                            aria-label={props.i18n.t('close')}\n                            onClick={() => {\n                                props.portalSlotSignal.value = null\n                            }}>\n                            <CloseIcon />\n                        </button>\n                        <div\n                            class={cssModule['faq-answer']}\n                            dangerouslySetInnerHTML={{\n                                __html: escapeForFaq(props.result.faqAnswer)\n                            }}\n                        />\n                    </div>\n                )\n            }}>\n            <FAQIcon class={cssModule['faq-icon']} />\n            <div class={cssModule['cv-column']}>\n                <div class={cn(cssModule['cv-row'], cssModule['faq'])}>{props.result.title}</div>\n            </div>\n        </button>\n    )\n}\n\ntype Props = {\n    result: InstantResult\n}\n\nconst ImageSection = ({ result }: Props) => {\n    const width = 112\n\n    const imageUrl = useMemo(() => {\n        const imPolicyQuery = createImPolicyQuery(Math.ceil(width))\n        return `${result.imageUrl}${imPolicyQuery}`\n    }, [width, result.imageUrl])\n\n    return (\n        <div class={cssModule['cv-column']}>\n            <img\n                key={result.imageUrl}\n                src={imageUrl}\n                alt={result.title}\n                loading={'lazy'}\n                width={width}\n            />\n        </div>\n    )\n}\n\ntype CommonProps = InstantResultProps &\n    Pick<InstantProductProps & InstantArticleProps, 'useArticleTracking' | 'useProductTracking'>\nexport const InstantResultRow = ({ result, ...props }: CommonProps) => {\n    const className = useComputed(() => {\n        return cn(\n            props.focusedSignal.value === result.id && cssModule['focused'],\n            cssModule['cv-suggestion-result']\n        )\n    })\n\n    const sharedProps = {\n        className: className,\n        onMouseEnter: () => {\n            props.focusedSignal.value = result.id\n        },\n        ...props\n    }\n\n    if (result.tab === 'Articles') {\n        return <InstantArticleResult result={result} {...sharedProps} />\n    } else if (result.tab === 'FAQs') {\n        return <InstantFAQResult result={result} {...sharedProps} />\n    }\n    return <InstantProductResult result={result} {...sharedProps} />\n}\n\nexport const InstantResults = (props: {\n    portalSlot: Signal<JSXInternal.Element | null>\n    activeDescendant: Signal<string | undefined>\n    panelRef: Ref<HTMLDivElement>\n}) => {\n    const { i18n, locale, buildUseProductTracking, buildUseArticleTracking, instantResults } =\n        useBarContext()\n\n    const isUnfulfilled = instantResults.value.status !== 'fulfilled'\n    const hasNoResults = !instantResults.value.value?.results\n\n    // render empty panel if result does not exist, needed for js event\n    if (isUnfulfilled || hasNoResults) {\n        return <div ref={props.panelRef} class={cssModule['instant-results']}></div>\n    }\n\n    const results = instantResults.value.value.results\n    const useProductTracking = buildUseProductTracking(instantResults.value.value)\n    const useArticleTracking = buildUseArticleTracking(instantResults.value.value)\n    return (\n        <div ref={props.panelRef} class={cssModule['instant-results']}>\n            {results.map(result => {\n                return (\n                    <InstantResultRow\n                        useArticleTracking={useArticleTracking}\n                        useProductTracking={useProductTracking}\n                        portalSlotSignal={props.portalSlot}\n                        key={result.id}\n                        locale={locale}\n                        i18n={i18n}\n                        result={result}\n                        focusedSignal={props.activeDescendant}\n                    />\n                )\n            })}\n        </div>\n    )\n}\n","import { useEffect, useRef } from \"preact/hooks\"\n\nexport const useOnOutsideClick = <N extends Element>(handler: (node: N) => void) => {\n    const containerRef = useRef<N>(null)\n\n    useEffect(() => {\n        const clickHandler = (ev: MouseEvent) => {\n            if (containerRef.current?.contains(ev.target as Node)) { return }\n            handler(containerRef.current!)\n        }\n        document.addEventListener(\"click\", clickHandler, true)\n\n        return () => document.removeEventListener(\"click\", clickHandler, true)\n    }, [])\n\n    return containerRef\n}","import { signal } from \"@preact/signals\"\n\nconst getBreakPoint = ()=> window.innerWidth > 996 ? \"desktop\" as const : \"mobile\" as const\n\nexport const breakpoint = signal(getBreakPoint())\n\nwindow.addEventListener(\"resize\", () => breakpoint.value = getBreakPoint())\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","/* TODO: Change module name to searchBox instead of searchbox, and all \"searchbox\" code references ##ITNP-95774## */\nimport { ReadonlySignal, Signal, useComputed, useSignal, useSignalEffect } from \"@preact/signals\";\nimport cn from \"classnames\"\nimport cssModule from \"./shared-styles.module.css\"\nimport BurgerMenuOverrideCss from \"./burger-menu-override.css\"\nimport { MutableRef, useEffect, useMemo, useRef } from \"preact/hooks\";\nimport { InstantResults } from \"./instant-result\";\nimport type { JSXInternal } from \"preact/src/jsx\";\nimport { CloseSearchboxIcon, ClearSearchboxIcon, RecentIcon, FilterIcon, SearchIcon } from \"../shared/icons\";\nimport { useOnOutsideClick } from \"../../shared/use-on-outside-click\";\nimport { useUnwrap } from \"../../shared/async-query\";\nimport { BarEngine } from \"../../engine\";\nimport { useBarContext } from \"./context\";\nimport { Suggestion } from \"../../engine\";\nimport { breakpoint } from \"../../shared/breakpoints\";\nimport { debounce } from \"@kissui/helpers/src/utils\"\nimport { deleteSearchedQuery} from \"../../../config\";\nimport { getCoveoAccessToken, getTaxSystemTariff, isB2B } from \"../../../config\";\nimport { COVEO_PLATFORM_URL, COVEO_ORGANIZATION_ID } from \"../../../search-bar/constants\";\nimport { getCoveoContext } from \"../../engine/shared/coveo-api-commons\";\n\ntype SearchInputOptions = {\n    value: string\n    isEnter: boolean\n}\n\ntype OptionTypes = \"suggestion\" | \"result\"\n\nconst domParser = new DOMParser()\n/**\n *  \"[golden] {cara}[mel](lo)\";\n * @param input\n * @returns\n */\nconst parseHighlighted = (input: string) => {\n    const res = input\n        .replaceAll(/({)[^{}]*(})/g, (match) => `<strong>${match.slice(1, -1)}</strong>`)\n        .replaceAll(/(\\[)[^\\[\\]]*(\\])/g, (match) => `${match.slice(1, -1)}`)\n        .replaceAll(/(\\()[^\\(\\)]*(\\))/g, (match) => `${match.slice(1, -1)}`)\n\n    return [...domParser.parseFromString(res, \"text/html\").body.childNodes].map((node) => {\n        if (node.nodeType === 1) {\n            return <strong>{node.textContent}</strong>\n        }\n        return node.textContent\n    })\n}\n\nconst SuggestionRow = (props: {\n    i18n: BarEngine[\"i18n\"],\n    suggestion: Suggestion\n    useLink: BarEngine[\"useSuggestionLink\"]\n    focusedSignal: Signal<string | undefined>\n    queryText: Signal<string>\n    handleTextSearch: ()=> Promise<void>\n}) => {\n\n    const className = useComputed(() => {\n        return cn(props.focusedSignal.value === props.suggestion.id && cssModule[\"suggestion-row-focused\"], cssModule[\"suggestion-row\"])\n    })\n\n    const { url, handleClick } = props.useLink(props.suggestion).value\n\n    const translationKey = props.suggestion.type === \"recent\" ? \"recent-query-suggestion-label\" : \"query-suggestion-label\"\n\n    const iconProps = { class: cssModule[\"icon\"], \"aria-hidden\": true }\n    const Icon = props.suggestion.type === \"related\" ? SearchIcon : RecentIcon\n\n    const elementRef = useRef<HTMLAnchorElement>(null);\n\n    useEffect(() => {\n        const handleMouseEnter = () => {\n            props.focusedSignal.value = props.suggestion.id\n        }\n\n        const element = elementRef.current;\n        element?.addEventListener('mouseenter', handleMouseEnter, { once: true })\n\n        return () => {\n            element?.removeEventListener('mouseenter', handleMouseEnter)\n        };\n    }, [props.suggestion.id, props.focusedSignal])\n\n    const enhancedHandleClick = (event: MouseEvent) => {\n        event.preventDefault();\n        props.queryText.value = props.suggestion.query;\n        props.handleTextSearch();\n    }\n\n    return <a\n        ref={elementRef}\n        id={props.suggestion.id}\n        href={url}\n        aria-label={props.i18n.t(translationKey, { query: props.suggestion.query })}\n        onClick={enhancedHandleClick}\n        role=\"option\"\n        class={className}\n        tabIndex={-1}\n    >\n        <Icon {...iconProps} /> <span>{parseHighlighted(props.suggestion.highlighted)}</span>\n    </a>\n}\n\nconst Searchbox = (props: { inputRef: MutableRef<HTMLInputElement | null>; mode: Signal<\"button\" | \"searchbox\"> }) => {\n    const barCtx = useBarContext()\n    const {\n        i18n,\n        store,\n        queryText,\n        clearRecentSearches,\n        submit: mainFnToHandleTextSearch,\n        useSuggestionLink,\n    } = barCtx\n\n    const t = i18n.t\n\n    const relatedSuggestions = useUnwrap(barCtx.relatedSuggestions, [])\n    const recentSuggestions = useUnwrap(barCtx.recentSuggestions, [])\n\n    const mergedSuggestions = useComputed((): Suggestion[] => {\n        if (recentSuggestions.value.length === 0) {\n            return relatedSuggestions.value.slice(0, 6)\n        }\n        return [\n            ...recentSuggestions.value,\n            ...relatedSuggestions.value.filter((related) => {\n                const isDuplicated = recentSuggestions.value.find((recent) => recent.query === related.query)\n                return !isDuplicated\n            })\n        ].slice(0, 5)\n    })\n\n    const activeDescendantSignal = useSignal<string | undefined>(undefined)\n\n    useSignalEffect(() => {\n        const activeId = activeDescendantSignal.value ||  getOption()?.activeId || getOption()?.options[0]?.id\n        const autocompletion = mergedSuggestions.value.find(({ id }) => id === activeId)\n\n        if (autocompletion) {\n            barCtx.focusedSuggestion.value = autocompletion.query;\n        } else if (activeId === undefined) {\n            barCtx.focusedSuggestion.value = undefined;\n        }\n    })\n\n   const { instantResults } = barCtx\n    const instantResultsPartial = useComputed(() => {\n        const sigVal = instantResults.value;\n        if (sigVal.status !== \"fulfilled\") { return [] }\n        return sigVal.value.results\n    })\n\n    const autoCompletionsOptions = useComputed((): { id: string }[] => {\n        if (recentSuggestions.value.length === 0) { return mergedSuggestions.value }\n        return [{ id: clearRecentButtonId }, ...mergedSuggestions.value]\n    })\n\n    const columns = useMemo(() => ([\"suggestion\" as const, \"result\" as const]), [])\n    const activeColumSignal = useSignal(columns[0])\n\n    const clearRecentButtonId = useMemo(() => Math.random().toString(16).slice(2), [])\n\n    const dialogId = useMemo(() => Math.random().toString(16).slice(2), [])\n\n    const handleTextSearch = async () => {\n        const query = queryText.peek();\n        const checkIfB2B = isB2B();\n        const taxSystemTariff = checkIfB2B ? await getTaxSystemTariff() : ''\n        try{\n            const url = new URL(`${COVEO_PLATFORM_URL}/rest/search/v2/plan`)\n            url.searchParams.append(\"organizationId\", COVEO_ORGANIZATION_ID)\n            const fetchPlan = await fetch(url, {\n                method: 'POST',\n                headers: {\n                    'Content-Type': 'application/json',\n                    'Authorization': `Bearer ${getCoveoAccessToken()}`\n                },\n                body: JSON.stringify({\n                    \"locale\": barCtx.locale,\n                    \"timezone\": Intl.DateTimeFormat().resolvedOptions().timeZone,\n                    visitorId: barCtx.visitorId,\n                    \"q\": query,\n                    \"searchHub\": barCtx.searchHub,\n                    \"context\": getCoveoContext(barCtx),\n                    ...( checkIfB2B && {\"dictionaryFieldContext\":{\n                        \"nes_prd_price\": taxSystemTariff\n                    }})\n                })\n            });\n\n            if (!fetchPlan.ok) {\n                console.error(\"Error fetching plan:\", fetchPlan.status, await fetchPlan.text());\n                mainFnToHandleTextSearch(queryText.peek());\n                return;\n            }\n\n            const response = await fetchPlan.json() as {\n                preprocessingOutput?: {\n                    triggers?: {\n                        type: string;\n                        content: string;\n                    }[];\n                };\n            };\n\n            if (response?.preprocessingOutput?.triggers && response.preprocessingOutput.triggers.length > 0) {\n                const firstTrigger = response.preprocessingOutput.triggers[0];\n                if (firstTrigger.type === \"redirect\") {\n                    window.location.href = firstTrigger.content;\n                    return;\n                }\n            }\n\n            mainFnToHandleTextSearch(queryText.peek());\n        }\n        catch(e){\n            console.error(\"Error fetching plan:\", e);\n            mainFnToHandleTextSearch(queryText.peek());\n        }\n    }\n\n    const handleSearchInput = useMemo(() => {\n        return debounce(({ value, isEnter }: SearchInputOptions) => {\n            queryText.value = value\n\n            if (isEnter) {\n                handleTextSearch()\n            }\n            hideResultsSection.value = false\n        }, 1500) // setting debounce time to 1.5 seconds\n    }, [queryText, handleTextSearch])\n\n    const getOption = (activeColum: OptionTypes = activeColumSignal.peek()) => {\n        const options = activeColum === \"suggestion\" ? autoCompletionsOptions.peek() : instantResultsPartial.peek()\n        const activeId = activeDescendantSignal.peek()\n        const currentIndex = options.findIndex(({ id }) => id === activeId)\n        return { options, currentIndex, size: options.length, activeId }\n    }\n\n    const navigateOptions = (nextColumn: OptionTypes, increment: number) => {\n        const { options, currentIndex, size } = getOption(nextColumn)\n        const nextIndex = currentIndex === -1 ? 0 : (currentIndex + increment + size) % size\n        activeDescendantSignal.value = options[nextIndex].id\n        activeColumSignal.value = nextColumn\n    }\n\n    const handleSearchTyping = (e: KeyboardEvent) => {\n        if (e.key.length === 1) return\n\n        switch (e.key) {\n            case \"ArrowRight\":\n            case \"ArrowLeft\":\n                if (instantResultsRef.current?.offsetParent !== null) {\n                    const increment = e.key === \"ArrowRight\" ? 1 : -1\n                    const nextColumnIndex = (columns.indexOf(activeColumSignal.peek()) + increment + columns.length) % columns.length\n                    navigateOptions(columns[nextColumnIndex] as OptionTypes, increment)\n                }\n                break\n            case \"ArrowDown\":\n                e.preventDefault()\n                navigateOptions(activeColumSignal.peek(), 1)\n                break\n            case \"ArrowUp\":\n                e.preventDefault()\n                navigateOptions(activeColumSignal.peek(), -1)\n                break\n            case \"Home\":\n                activeDescendantSignal.value = getOption().options[0].id\n                break\n            case \"End\":\n                const { options, size } = getOption()\n                activeDescendantSignal.value = options[size - 1].id\n                break\n            case \"Escape\":\n                activeColumSignal.value = \"suggestion\"\n                activeDescendantSignal.value = undefined\n                expanded.value = false\n                break\n            case \"Enter\":\n                e.preventDefault()\n                const { activeId } = getOption()\n                const suggestion = recentSuggestions.peek()?.find(({ id }) => id === activeId) ||\n                    relatedSuggestions.peek()?.find(({ id }) => id === activeId)\n\n                if (activeId === clearRecentButtonId) {\n                    clearRecentSearches()\n                } else if (suggestion) {\n                    const suggestionElement = containerRef.current?.querySelector(`[id=\"${dialogId}\"] a#${activeId}`) as HTMLAnchorElement;\n                    suggestionElement.click()\n                } else {\n                    handleSearchInput({ value: (e.target as HTMLInputElement).value, isEnter: true })\n                }\n        }\n    }\n\n    const expanded = useSignal(false);\n    const hideResultsSection = useSignal(false);\n\n    useEffect(() => {\n        let first = true;\n        let prevQ = store.q.peek()\n        return store.q.subscribe((currentQ) => {\n            if (first) {\n                first = false;\n                return;\n            }\n            if (currentQ !== prevQ) { props.mode.value = \"button\" }\n            expanded.value = false\n            prevQ = currentQ\n        })\n    }, [store.q]);\n\n    const clearRecentButtonClassName = useComputed(() => {\n        return cn(activeDescendantSignal.value === clearRecentButtonId && cssModule[\"suggestion-row-focused\"], cssModule[\"flex-space-between\"], cssModule[\"suggestion-row\"])\n    })\n\n    const clearSearchboxButtonClassName = useComputed(() => {\n        return cn(queryText.value.length === 0 && cssModule[\"hidden\"], cssModule[\"close-button\"], cssModule[\"searchbox-clear-button\"])\n    })\n\n    const portalSlotSignal = useSignal<JSXInternal.Element | null>(null)\n\n    useSignalEffect(() => {\n        if (portalSlotSignal.value !== null) {\n            activeDescendantSignal.value = undefined\n        }\n    })\n\n    const containerRef = useOnOutsideClick<HTMLDivElement>(() => {\n        expanded.value = false;\n        hideResultsSection.value = true;\n    });\n    const instantResultsRef = useRef<HTMLDivElement>(null)\n\n    const searchIconProps = { class: cssModule[\"search-icon\"], \"aria-hidden\": true }\n\n    expanded.value = mergedSuggestions.value.length !== 0 // Show suggestion box only if we have suggestions.\n\n    toggleResultsSection(hideResultsSection, expanded, mergedSuggestions);\n\n    return <div\n        ref={containerRef}\n        class={cssModule[\"container\"]}\n        onfocusinCapture={() => { expanded.value = false }}\n    >\n        <div class={cssModule[\"mobile-bar\"]}>\n            <h2 class={cssModule[\"mobile-title\"]}>\n                {t(\"search\")}\n            </h2>\n            <button\n                onClick={() => { props.mode.value = \"button\" }}\n                aria-label={t(\"close\")}\n                class={cn(cssModule[\"mobile-close-searchbox\"])}\n            >\n                <CloseSearchboxIcon />\n            </button>\n        </div>\n        <div class={cssModule[\"searchbox-wrapper\"]}>\n            <SearchIcon {...searchIconProps} />\n            <input\n                class={cssModule[\"searchbox\"]}\n                ref={props.inputRef}\n                title={t(\"search-box-with-suggestions-keyboardless\")}\n                aria-label={t(\"search-box-with-suggestions-keyboardless\")}\n                placeholder={t(\"search\")}\n                type=\"text\"\n                role=\"combobox\"\n                autocomplete=\"off\"\n                autocapitalize=\"off\"\n                autocorrect=\"off\"\n                aria-activedescendant={activeDescendantSignal}\n                aria-expanded={expanded}\n                aria-autocomplete=\"both\"\n                aria-haspopup=\"dialog\"\n                aria-controls={dialogId}\n                value={queryText}\n                onInput={(e) => handleSearchInput({ value: (e.target as HTMLInputElement).value, isEnter: false })}\n                onMouseEnter={() => { activeDescendantSignal.value = undefined }}\n                onFocus={() => { hideResultsSection.value = false; }}\n                onKeyDown={handleSearchTyping}\n            />\n            <button\n                onClick={() => { queryText.value = \"\"; expanded.value = false; deleteSearchedQuery() }}\n                class={clearSearchboxButtonClassName}>\n                <ClearSearchboxIcon />\n            </button>\n        </div>\n        {expanded.value && (\n            <div role=\"dialog\" class={cssModule[\"dropdown\"]} id={dialogId}>\n                <div class={cn(cssModule[\"suggestions\"])} role=\"listbox\">\n                    {(recentSuggestions.value?.length ?? 0) > 0 &&\n                        <button\n                            id={clearRecentButtonId}\n                            class={clearRecentButtonClassName}\n                            onClick={() => clearRecentSearches()}\n                            onMouseEnter={() => { activeDescendantSignal.value = clearRecentButtonId }}\n                        >\n                            <strong class={cn(cssModule[\"searchbox-recent-title\"])}>{t(\"recent-searches\")}</strong>\n                            <span>{t(\"clear\")}</span>\n                        </button>\n                    }\n                    {mergedSuggestions.value.map((suggestion) => {\n                        return <SuggestionRow\n                            useLink={useSuggestionLink}\n                            i18n={i18n}\n                            suggestion={suggestion}\n                            focusedSignal={activeDescendantSignal}\n                            queryText={queryText}\n                            handleTextSearch={handleTextSearch}\n                        />\n                    })}\n                </div>\n                {breakpoint.value === \"desktop\" ?\n                    portalSlotSignal.value ?\n                        <div class={cssModule[\"instant-result-portal\"]}>{portalSlotSignal.value}</div> :\n                        <InstantResults portalSlot={portalSlotSignal} activeDescendant={activeDescendantSignal} panelRef={instantResultsRef} />\n                    : null}\n\n            </div>)}\n        <style dangerouslySetInnerHTML={{ __html: BurgerMenuOverrideCss }} />\n    </div >\n}\n\nfunction toggleResultsSection(hideResultsSection: Signal<boolean>, expanded: Signal<boolean>, mergedSuggestions: ReadonlySignal<Suggestion[]>) {\n    if (hideResultsSection.value) {\n        expanded.value = false;\n    } else {\n        hideResultsSection.value = false;\n        expanded.value = expanded.value = mergedSuggestions.value.length !== 0;\n    }\n}\n\nexport default Searchbox\n","import { Signal } from \"@preact/signals\"\nimport { useEffect, useRef } from \"preact/hooks\"\n\n/**\n * US Backdoor\n * `mode` is used to programmatically expand the searchbox\n * `loadingStatus` is a backwards compatible prop that is no longer needed, yet is used\n */\nexport const useUSBackdoor = (mode: Signal<\"button\" | \"searchbox\">) => {\n    const publicRef = useRef<Element>(null)\n    useEffect(() => {\n        Object.defineProperty(publicRef.current, \"mode\", {\n            set(value: \"button\" | \"searchbox\") {\n                mode.value = value\n            },\n            get() {\n                return mode.peek()\n            },\n        })\n\n        Object.defineProperty(publicRef.current, \"loadingStatus\", {\n            set: undefined,\n            get() {\n                return \"fulfilled\"\n            },\n        })\n\n        return () => {\n            Object.defineProperty(publicRef.current, \"mode\", {\n                set: undefined,\n                get: undefined,\n            })\n\n            Object.defineProperty(publicRef.current, \"loadingStatus\", {\n                set: undefined,\n                get: undefined,\n            })\n        }\n    }, [])\n    return publicRef\n}\n","import { Ref } from \"preact\";\nimport { type JSXInternal } from \"preact/src/jsx\";\nimport { useCallback, useEffect, useRef } from \"preact/hooks\";\nimport { useSignal, useSignalEffect } from \"@preact/signals\";\nimport cn from \"classnames\"\nimport Searchbox from \"./searchbox\";\nimport cssModule from \"./shared-styles.module.css\"\nimport { useUSBackdoor } from \"./us-backdoor\";\nimport { useBarContext } from \"./context\";\nimport { breakpoint } from \"../../shared/breakpoints\";\n\n\ntype SearchBarElement = JSXInternal.IntrinsicElements[\"cv-search-bar\"] extends JSXInternal.HTMLAttributes<infer P> ? P : never\n\nconst SearchBar = () => {\n  const mode = useSignal<\"button\" | \"searchbox\">(\"button\")\n  const searchCtx = useBarContext()\n  const USBackdoorRef = useUSBackdoor(mode)\n\n  const searchboxRef = useRef<HTMLInputElement>(null)\n\n  const toggleFromButton = useCallback(() => {\n    mode.value = \"searchbox\";\n  }, [])\n\n  useEffect(() => {\n    if (mode.peek() === \"searchbox\" && searchboxRef.current) {\n      searchboxRef.current.focus()\n    }\n  })\n\n  useSignalEffect(() => {\n    if (breakpoint.value !== \"mobile\") { return }\n    mode.value = \"button\"\n  })\n\n  return (\n    <cv-search-bar class={cssModule[\"search-bar\"]} ref={USBackdoorRef as Ref<SearchBarElement>}>\n      {mode.value === \"searchbox\" && <Searchbox mode={mode} inputRef={searchboxRef} />}\n      <button\n        id=\"search-bar-button\"\n        onClick={toggleFromButton}\n        class={cn(cssModule[\"search-bar-button\"], \"search-bar-button\", mode.value === \"searchbox\" && cssModule[\"cv-hidden\"])}\n      >\n        <svg\n          class={cssModule[\"cv-search-icon\"]} \n          width=\"30\"\n          height=\"29\"\n          viewBox=\"0 0 30 29\"\n          fill=\"none\"\n          xmlns=\"http://www.w3.org/2000/svg\"\n        >\n          <circle cx=\"11.8151\" cy=\"11.652\" r=\"10.8182\" fill=\"white\" />\n          <path\n            d=\"M19.9718 21.9014C19.5812 21.5109 19.5812 20.8778 19.9718 20.4872L20.6789 19.7801C21.0694 19.3896 21.7026 19.3896 22.0931 19.7801L28.1035 25.7905C28.6893 26.3763 28.6893 27.3261 28.1035 27.9119V27.9119C27.5177 28.4976 26.5679 28.4976 25.9822 27.9119L19.9718 21.9014Z\"\n            fill=\"white\"\n          />\n        </svg>\n        <span class={cn(cssModule[\"text\"], \"text\")}>{searchCtx.i18n.t(\"search\")}</span>\n      </button>\n    </cv-search-bar>\n  )\n}\n\nexport default SearchBar\n","import { randomUUID } from \"./random-uuid\"\n\nexport const initVisitorId = () => {\n    let visitorId = localStorage.getItem(\"visitorId\");\n    if (!visitorId) {\n        visitorId = randomUUID()\n        localStorage.setItem(\"visitorId\", visitorId);\n    }\n    return visitorId\n\n}","import { getLangCode, getMarketCode } from \"@kissui/helpers/src/dataLayer\";\nimport { getCurrency } from \"@kissui/helpers/src/getCurrency\";\nimport createProps from \"@kissui/helpers/src/props.helpers\";\nimport { coveo_copywriting as defaultCoveoCopywriting } from \"../../../search-bar/schema-copywriting.mjs\";\nimport componentStaticConfig from \"../../../search-bar/component.json\"\nimport { SearchBarHost } from \"./custom-element\";\nimport { initVisitorId } from \"../../shared/visitor-id\";\nimport { BarProps } from \"../../engine\";\nimport {isB2B} from \"../../../config\";\n\ntype HostProps = {\n    /**\n     JSON Record<string, string>\n     */\n    coveo_copywriting: string;\n    copywriting: {\n        /**\n         * @deprecated\n         */\n        search_box_modal_title: string;\n        search_page_url: string;\n    };\n};\n\nconst getAbsoluteSearchPageUrl = ({\n    searchPageUrl,\n    country,\n    lang\n}: {\n    searchPageUrl: string;\n    country: string;\n    lang: string;\n}) => {\n    if (new RegExp(`^/${lang}`).test(searchPageUrl)) { throw new Error(`[search_page_url] can't start with \"${lang}\"`); }\n    if (new RegExp(`^/${country}/${lang}`).test(searchPageUrl)) { throw new Error(`[search_page_url] can't start with \"${country}/${lang}\"`); }\n    if (new RegExp(`^/${country}`).test(searchPageUrl)) { throw new Error(`[search_page_url] can't start with \"${country}\"`); }\n\n    const currentUrl = window.location.pathname;\n\n    if (new RegExp(`^/${country}/${lang}`).test(currentUrl)) {\n        return `/${country}/${lang}${searchPageUrl}`;\n    }\n\n    if (new RegExp(`^/${country}`).test(currentUrl)) {\n        return `/${country}${searchPageUrl}`;\n    }\n\n    if(isB2B()){\n        if (new RegExp(`^/pro/${country}/${lang}`).test(currentUrl)) {\n            return `/pro/${country}/${lang}${searchPageUrl}`;\n        }\n        if (new RegExp(`^/pro/${country}`).test(currentUrl)) {\n            return `/pro/${country}${searchPageUrl}`;\n        }\n    }\n\n    return searchPageUrl;\n};\n\nexport const initBarProps = (barAttributes: NamedNodeMap) => {\n    const { internal_config: { individual_lang_pipeline } } = componentStaticConfig\n    const lang = getLangCode();\n    const country = getMarketCode();\n    const countryForCoveoB2B = `pro_${country}`\n    const upperCaseCountryForCoveoB2B = `${countryForCoveoB2B.toUpperCase()}`\n    const upperCaseCountry = country.toUpperCase();\n    const upperCaseLang = lang.toUpperCase();\n    const locale = `${lang}-${upperCaseCountry}`;\n    const currency = getCurrency();\n    const website = isB2B() ? `Nespresso_${upperCaseCountryForCoveoB2B}` : `Nespresso_${upperCaseCountry}`;\n    const sitename = website;\n    const contextWebsite = website;\n    const contextSitename = website;\n    const searchHub = individual_lang_pipeline.includes(country)\n        ? `Nespresso_${upperCaseCountry}_${upperCaseLang}_Search`\n        : `Nespresso_${upperCaseCountry}_Search`;\n    const searchHubB2b = `Nespresso_${upperCaseCountryForCoveoB2B}_Search`\n\n    const barProps = createProps<HostProps>(barAttributes);\n\n    const searchPageUrl = getAbsoluteSearchPageUrl({\n        searchPageUrl: barProps.copywriting.search_page_url,\n        lang,\n        country\n    })\n    const coveoCopywriting = Object.assign(\n        {},\n        defaultCoveoCopywriting,\n        JSON.parse(barProps.coveo_copywriting) as Record<string, string>\n    );\n\n    const inSearchPage = window.location.pathname === searchPageUrl;\n\n    return {\n        inSearchPage,\n        searchPageUrl,\n        lang,\n        country: isB2B() ? countryForCoveoB2B : country,\n        locale,\n        currency,\n        website,\n        sitename,\n        contextWebsite,\n        contextSitename,\n        searchHub: isB2B() ? searchHubB2b : searchHub,\n        visitorId: initVisitorId(),\n        coveoCopywriting,\n        skuToCapsuleNetWeightG: SearchBarHost.skuToCapsuleNetWeightG ?? {},\n        skuToStrikethroughPrice: SearchBarHost.skuToStrikethroughPrice ?? {},\n        skuToNewPrice: SearchBarHost.skuToNewPrice ?? {}\n    } as const satisfies BarProps & { inSearchPage: boolean }\n}\n","\nimport { createContext } from \"preact\";\nimport { useContext } from \"preact/hooks\";\nimport { type PageEngine } from \"../../engine\";\n\nconst PreactContext = createContext<PageEngine>(undefined as any as PageEngine);\n\nexport const PageContextProvider = PreactContext.Provider\nexport const PageContextConsumer = PreactContext.Consumer;\nexport const usePageContext = () => useContext(PreactContext)\n","import { ContainerNode, render, FunctionComponent } from \"preact\";\nimport { signal } from \"@preact/signals\";\nimport { waitForSelector } from \"@kissui/helpers/src/waitForSelector\";\nimport SearchBar from \"../../ui/bar/search-bar\";\nimport cssModule from \"./host.module.css\";\nimport { buildStandaloneBarStore, getSharedEngineProps, buildAppURLStore, initPageEngine, PageProps, BarProps, initBarEngine } from \"../../engine\";\nimport { initBarProps } from \"./props\";\nimport { BarContextProvider } from \"../../ui/bar\";\nimport { PageContextProvider } from \"../../ui/page\";\n\n\ntype SearchPageArgs = [FunctionComponent, ContainerNode, Omit<PageProps, keyof BarProps>]\n\nexport class SearchBarHost extends HTMLElement {\n  private static rendered = false\n  private static searchPage = signal<SearchPageArgs | null>(null)\n\n  public static skuToCapsuleNetWeightG?: Record<string, number | undefined>;\n  public static skuToStrikethroughPrice?: Record<string, number | undefined>;\n  public static skuToNewPrice?: Record<string, number | undefined>;\n\n  static renderSearchPage(...args: SearchPageArgs) {\n    SearchBarHost.searchPage.value = args;\n  }\n\n  static waitForSearchPage() {\n    let cleanup;\n    return new Promise<SearchPageArgs>((res) => {\n      cleanup = SearchBarHost.searchPage.subscribe(args => {\n        if (args === null) { return }\n        res(args)\n      })\n    }).finally(cleanup)\n  }\n\n  async connectedCallback() {\n    if (SearchBarHost.rendered) {\n      return\n    }\n    SearchBarHost.rendered = true;\n\n    const customerHeader = await waitForSelector(\n      \".Header__top-wrapper .Header__customer\",\n      document.getElementById(\"top\")!\n    );\n\n    const searchboxEl = document.createElement(\"div\");\n    searchboxEl.classList.add(\"cv-search-host\");\n    searchboxEl.classList.add(cssModule[\"host\"])\n\n    customerHeader.insertBefore(searchboxEl, customerHeader.firstChild);\n\n    const sharedProps = initBarProps(this.attributes)\n\n    if (!sharedProps.inSearchPage) {\n      const [urlStore, cleanupUrlStore] = buildStandaloneBarStore(sharedProps)\n      const sharedCtx = await getSharedEngineProps(sharedProps, urlStore, cleanupUrlStore);\n      const [barCtx] = await initBarEngine(sharedCtx)\n      return render(\n        <BarContextProvider value={barCtx}><SearchBar /></BarContextProvider>,\n        searchboxEl\n      )\n    }\n\n    const [Component, pageMountNode, exclusivePageProps] = await SearchBarHost.waitForSearchPage()\n    const [urlStore, cleanupUrlStore] = buildAppURLStore({ ...exclusivePageProps, ...sharedProps})\n    const sharedCtx = await getSharedEngineProps({ ...sharedProps, ...exclusivePageProps }, urlStore, cleanupUrlStore)\n\n    const [barCtx] = await initBarEngine(sharedCtx)\n    const [pageCtx] = await initPageEngine(sharedCtx)\n\n    render(\n      <BarContextProvider value={barCtx}><SearchBar /></BarContextProvider>,\n      searchboxEl\n    );\n    render(\n      <PageContextProvider value={pageCtx}><Component /></PageContextProvider>,\n      pageMountNode\n    );\n  }\n}\n\ncustomElements.get(\"nb-search-bar\") || customElements.define(\"nb-search-bar\", SearchBarHost)\n"],"names":["RecentIcon","props","_jsxs","viewBox","stroke","fill","xmlns","children","_jsx","r","cy","cx","d","SearchIcon","CloseIcon","CloseSearchboxIcon","ClearSearchboxIcon","width","height","rx","FAQIcon","ChevronDownIcon","ChevronUpIcon","LeftArrowIcon","id","RightArrowIcon","CheckIcon","FilterIcon","ArticleThumbnailIcon","escapeForFaq","createMicroMarkup","a","div","span","img","name","value","URL","window","location","toString","hostname","endsWith","p","strong","em","li","ol","ul","br","u","b","sup","PreactContext","createContext","undefined","BarContextProvider","Provider","Consumer","useBarContext","useContext","flushableBuffer","buffer","sent","Set","timer","flush","length","currency","getCurrency","gtmDataObject","push","splice","impression","has","setTimeout","add","impressionBuffer","threshold","useProductImpressionTracking","sku","position","trackingMetadata","listName","host","useRef","useEffect","ecapiProductPrm","napi","catalog","getProduct","pushTracking","ecapiProduct","list","internationalName","internationalId","price","unitPrice","dimension44","category","includes","dimension53","legacyId","dimension54","dimension55","dimension56","technologies","map","encodedTech","exec","join","dimension57","bundled","dimension192","inStock","type","brand","intersectionObserver","IntersectionObserver","entry","intersectionRatio","disconnect","observe","current","parseRawFAQResult","ctx","result","faqAnswer","raw","faq_answer","faqQuestion","faq_question","rankingModifier","uri","permanentid","source","urihash","error","Error","JSON","stringify","decodeTitle","title","decodeURI","replaceAll","_","tail","head","replace","parseRawArticlesResults","filetype","categoryId","nes_article_category","copywriting","articleCategories","url","clickUri","imageUrl","nes_prd_image_url","parseRawProductResult","res","rawQuantities","nes_prd_quantities","split","filter","s","Number","sizeBracket","Math","floor","truncatedSize","min","max","quantities","slice","getCommons","nes_prd_sku","skuToNewPrice","nes_prd_price","previousPrice","skuToStrikethroughPrice","nes_prd_strikethrough_price","prdTechnologies","nes_prd_technology","salesMultiple","nes_prd_sales_multiple","priceDisplay","nes_prd_price_display","nes_prd_categories","capsuleCommons","productCategories","capsuleNetWeightG","skuToCapsuleNetWeightG","sleeveMainPrice","nes_prd_sleeve_main_price","capsules","nes_prd_unit_quantity","nes_prd_bundled","cupSizes","nes_prd_cup_size","label","volume","cupSizesVolumes","find","cupSize","machineRes","parseMachine","color","nes_prd_color","colorCss","nes_prd_color_css","machineGroup","childResults","rnd16","random","padStart","randomUUID","self","isSecureContext","crypto","fieldsToInclude","fieldsToIncludeB2B","getCoveoAnalytics","visitorId","clientId","Date","toISOString","href","getCoveoContext","website","sitename","contextWebsite","contextSitename","lang","locale","country","getCoveoGroupBy","q","logAggregateError","AggregateError","console","message","groupCollapsed","subError","errors","groupEnd","asyncQuery","fetchHandler","pSignal","resultsSignal","signal","status","params","peek","cleanup","effect","abortController","AbortController","then","aborted","reason","abort","useUnwrap","fallback","useComputed","sigVal","tabs","isTab","val","ProductCategories","isProductCategory","anomalousUSMikDevices","ProductTechnologies","isProductTechnology","ActionCauses","isActionCause","isNotUndefined","v","isNotError","e","parseCommon","rawField","i","selected","state","results","numberOfResults","rawFacetOrdering","indexOf","getFacetByField","field","pluckColor","values","findIndex","unpackShadesIntoColors","shade","shadeToColors","shadeValue","unshift","packColorsIntoShades","targetColor","machineColorsFacet","inbound","rawFacet","productFiltersTitles","prdMachineColors","outbound","currentValues","priceFacet","priceRangeFilterOptions","range","start","end","prdPrice","prdPriceRanges","categoryFacet","cat","prdCategories","technologyFacet","tech","productTechnologies","cupSizeFacet","prdCupSizes","intensityFacet","prdIntensity","prdIntensities","roastingFacet","prdRoasting","tastingNotesFacet","prdTastingNotes","usageFacet","prdUsages","facetMapping","facetOrdering","facet","parseInboundFacets","rawFacets","parseOutboundFacets","tab","facetOptions","freezeFacetOrder","facets","ToCoveoActionCause","getFacetState","filters","flatMap","key","coveoCommons","commonCoveoBody","navigator","userAgent","query","searchHub","Object","assign","search","hash","pipeline","searchUid","responseTime","count","m","documentUri","documentUriHash","toCoveo","endpoint","extendBody","endpointUrl","searchParams","set","fetch","getCoveoAccessToken","json","trackInstantResults","commonBody","actionCause","handleCoveoTracking","getDifferences","aArr","bArr","compareFn","getFacetSelectCustomData","aFilters","bFilters","aFacets","bFacets","customData","prevFilters","facetValue","qMeta","partialQuery","partialQueries","suggestions","interfaceChangeTo","eventType","eventValue","searchQueryUid","lastSearchQueryUid","firstPageQueryUuid","pagerNumber","page","handleGATracking","toGA","payload","event","search_product_results","tabGroup","search_articles_results","search_faq_results","search_category","search_type","search_term","search_display_term","selected_term","handleSearch","buildRelatedSuggestionQuery","abortSignal","append","COVEO_ORGANIZATION_ID","COVEO_SEARCH_TERM_MIN_LENGTH","response","Intl","DateTimeFormat","resolvedOptions","timeZone","metaSuggestions","completions","c","expression","completion","highlighted","objectId","querySuggestResponseId","responseId","ranking","relatedSuggestions","cleanupQuery","queryText","cleanUpAutoClear","subscribe","buildInstantResultsQuery","suggestion","outboundQ","getSearchedQuery","instantResults","isB2B","setSearchedQuery","groupByResults","reduce","acc","processedResults","commontab","String","duration","totalCountFiltered","countPerPage","currentPage","computed","focusedSuggestion","buildRecentStorage","recentStorageKey","storeSignal","get","localStorage","getItem","parse","entries","setItem","buildRecentSuggestionQuery","recentStorage","match","initBarEngine","shared","updateStore","cleanupRecentStorage","cleanupRelatedSuggestions","store","recentSuggestions","cleanupRecentSuggestions","cleanupInstantResults","cleanupAutoRecent","timestamp","getTime","clearRecentSearches","submit","blankState","action","useSuggestionLink","updater","useInternalLink","cleanupUrlStore","autoTabChange","resultSignal","cleanAuto","cancelAutoTabSwitch","nextTab","Products","Articles","FAQs","fulfilled","pending","applyAutoCorrection","prevResult","prevParams","cleanAutoCorrect","pageResults","correctedQuery","baseRest","rest","queryCorrectedFrom","searchExpression","fetchRelatedRecommendation","timeStart","performance","now","COVEO_PLATFORM_URL","checkIfB2B","taxSystemTariff","getTaxSystemTariff","COVEO_API_KEY_CART_RECS","recommendation","mlParameters","itemIds","fetchPopularRecommendation","COVEO_API_KEY_RECS","firstResult","referrer","nukeCoveoMetadata","Array","from","forEach","startsWith","removeItem","storeCoveoMetadata","filteredResults","documentPosition","documentUrl","documentTitle","sourcename","originlevel1","sevenDaysMs","DOMException","searchTracking","firstRun","cleanupFirstPageClean","resultsPerPage","buildBaseSearchResultQuery","fetchResults","aq","enableDidYouMean","responseCommons","rawRecommendationResponse","basicExpression","totalCount","totalPages","ceil","queryCorrections","notifications","triggers","content","baseResults","validResults","displayRecommendations","qTextSignal","paramSignal","buildSearchResultQuery","searchResults","searchPageCleanup","withAutoCorrection","cleanupAutoTabSwitch","cleanUpTracking","initPageEngine","restShared","buildUrlState","storeRecord","options","initialURL","stateEntries","defaultValue","fieldState","readFromUrl","bind","writeToUrl","fromEntries","defaultState","writeState","nextState","batch","stateToUrl","nextUrl","pathname","searchPageUrl","urlToState","cleanUpVirtualUrl","withVirtualUrl","popStateHandler","addEventListener","history","pushState","removeEventListener","getNextState","handleClick","evt","preventDefault","update","open","singleReadParam","delete","replaceState","encodeBase64URL","str","btoa","decodeBase64URL","atob","encodeQMeta","compressed","decodeQMeta","buildPrdPriceRanges","priceRanges","getAll","test","some","buildStringField","isInteger","buildAppURLStore","standaloneActionOverrides","buildStandaloneBarStore","consoleLogger","args","Logger","concreteLogger","_len","_key","_len2","_key2","_len3","_key3","_len4","_key4","lvl","prefix","debugOnly","moduleName","baseLogger","EventEmitter","events","listener","l","observer","defer","rej","promise","resolve","reject","makeString","object","copy","t","getLastOfPath","path","Empty","cleanKey","canNotTraverseDeeper","stack","setPath","newValue","obj","k","pushPath","concat","getPath","getPathWithDefaults","data","defaultData","deepExtend","target","overwrite","prop","regexEscape","_entityMap","escape","chars","looksLikeObjectPath","nsSeparator","keySeparator","possibleChars","matched","ki","deepFind","paths","j","mix","joinedPath","getCleanedCode","code","ResourceStore","ns","index","lng","ignoreJSONStructure","resources","deep","pack","postProcessor","module","processors","translator","processor","checkedLoadedFor","Translator","services","resolved","namespaces","wouldCheckForNsInKey","seemsNaturalLanguage","parts","keys","lastKey","returnDetails","namespace","appendNamespaceToCIMode","resUsedKey","resExactUsedKey","resType","noObject","joinArrays","handleAsObjectInI18nFormat","resTypeIsArray","newKeyToUse","deepKey","usedDefault","usedKey","needsPluralHandling","hasDefaultValue","defaultValueSuffix","defaultValueSuffixOrdinalFallback","resForMissing","updateMissing","fk","lngs","fallbackLngs","send","specificDefaultValue","defaultForMissing","language","suffix","_this","skipOnVariables","nestBef","nb","na","nestAft","postProcess","postProcessorNames","found","exactUsedKey","usedLng","usedNS","extracted","needsZeroSuffixLookup","needsContextHandling","codes","finalKeys","pluralSuffix","zeroSuffix","ordinalPrefix","contextKey","possibleKey","option","capitalize","string","LanguageUtil","specialCases","part","cleanedLng","lngOnly","supportedLng","fallbacks","fallbackCode","fallbackCodes","addCode","fc","sets","_rulesPluralsTypes","n","nonIntlVersions","intlVersions","suffixesOrder","createRules","rules","PluralResolver","languageUtils","rule","pluralCategory1","pluralCategory2","pluralCategory","number","idx","returnSuffix","deepFindWithDefaults","Interpolator","iOpts","regexpStr","regexpUnescapeStr","nestingRegexpStr","replaces","regexSafe","handleFormat","f","missingInterpolationHandler","todo","matchedVar","temp","safeValue","clonedOptions","handleHasOptions","inheritedOptions","sep","optionsString","matchedSingleQuotes","matchedDoubleQuotes","formatters","doReduce","elem","parseFormatStr","formatStr","formatName","formatOptions","optStr","opt","createCachedFormatter","fn","cache","formatter","Formatter","format","mem","formatted","valOptions","removePending","Connector","backend","languages","callback","toLoad","toLoadLanguages","toLoadNamespaces","hasAllNamespaces","err","loaded","loadedKeys","fcName","tried","wait","resolver","next","fallbackValue","isUpdate","clb","opts","ret","transformOptions","noop","bindMemberFunctions","inst","I18n","defOpts","createClassOnDemand","ClassOrObject","lu","deferred","load","finish","usedCallback","lngInLngs","_this2","setLngProps","done","setLng","keyPrefix","_this3","fixedT","resultKey","fallbackLng","lastLng","loadNotPending","loadState","preResult","preloaded","newLngs","rtlLngs","forkResourceStore","mergedOptions","clone","instance","createInstance","buildCommonsPayload","sendClickBeacon","URLSearchParams","blob","Blob","finalDocumentPosition","pageValue","countPerPageValue","currentPosition","sendBeacon","trackCoveoClick","trackGAClick","productPrm","buildTrackProductClick","buildTrackArticleClick","initI18n","debouncedHandlers","debouncedPromise","Promise","i18nOptions","interpolation","escapeValue","compatibilityJSON","translation","coveoCopywriting","getSharedEngineProps","urlStore","short","priceFormat","i18n","priceFormatter","amount","buildUseArticleTracking","article","unboundBuildTrackArticleClick","buildUseProductTracking","product","useMemo","unboundBuildTrackProductClick","PROFILES","sizes","createImPolicyQuery","finalWidth","getRetinaWidth","getImpolicyProfile","devicePixelRatio","exactFound","closest","getClosest","tempDiff","diff","item","every","profile","el","InstantProductResult","className","onMouseEnter","useProductTracking","handleClickTrack","trackedNode","listFormatter","ListFormat","style","toUpperCase","ref","onClick","ImageSection","class","cssModule","cn","prd_technology","InstantArticleResult","useArticleTracking","InstantFAQResult","portalSlotSignal","dangerouslySetInnerHTML","__html","imPolicyQuery","src","alt","loading","InstantResultRow","sharedProps","focusedSignal","InstantResults","isUnfulfilled","hasNoResults","panelRef","portalSlot","activeDescendant","useOnOutsideClick","handler","containerRef","clickHandler","ev","contains","document","getBreakPoint","innerWidth","breakpoint","debounce","func","time","clearTimeout","DOMParser","domParser","parseHighlighted","input","parseFromString","body","childNodes","node","nodeType","textContent","SuggestionRow","useLink","translationKey","iconProps","Icon","elementRef","handleMouseEnter","element","once","enhancedHandleClick","handleTextSearch","role","tabIndex","Searchbox","barCtx","mainFnToHandleTextSearch","mergedSuggestions","related","recent","activeDescendantSignal","useSignal","useSignalEffect","activeId","getOption","autocompletion","instantResultsPartial","autoCompletionsOptions","clearRecentButtonId","columns","activeColumSignal","dialogId","fetchPlan","method","headers","ok","text","preprocessingOutput","firstTrigger","handleSearchInput","isEnter","hideResultsSection","activeColum","currentIndex","size","navigateOptions","nextColumn","increment","nextIndex","handleSearchTyping","instantResultsRef","offsetParent","nextColumnIndex","expanded","querySelector","click","first","prevQ","currentQ","mode","clearRecentButtonClassName","clearSearchboxButtonClassName","searchIconProps","onfocusinCapture","inputRef","placeholder","autocomplete","autocapitalize","autocorrect","onInput","onFocus","onKeyDown","deleteSearchedQuery","BurgerMenuOverrideCss","toggleResultsSection","useUSBackdoor","publicRef","defineProperty","SearchBar","searchCtx","USBackdoorRef","searchboxRef","toggleFromButton","useCallback","focus","initVisitorId","getAbsoluteSearchPageUrl","RegExp","currentUrl","initBarProps","barAttributes","internal_config","individual_lang_pipeline","componentStaticConfig","getLangCode","getMarketCode","countryForCoveoB2B","upperCaseCountryForCoveoB2B","upperCaseCountry","upperCaseLang","searchHubB2b","barProps","createProps","search_page_url","defaultCoveoCopywriting","coveo_copywriting","inSearchPage","SearchBarHost","PageContextProvider","usePageContext","HTMLElement","renderSearchPage","searchPage","waitForSearchPage","finally","connectedCallback","rendered","customerHeader","waitForSelector","getElementById","searchboxEl","createElement","classList","insertBefore","firstChild","attributes","sharedCtx","render","Component","pageMountNode","exclusivePageProps","pageCtx","_SearchBarHost","customElements","define"],"mappings":"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","x_google_ignoreList":[30]}