{"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 '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/'\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 '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n } as { [s: string]: string }\n\n return text.replace(/[&<>\"']/g, (m) => map[m])\n}\n\n/**\n * Because setting attributes escapes more than the characters above and then preact also\n * escapes text we need a more complete way of unescaping all html entities (not just the ones\n * above)\n */\nconst domParser = new DOMParser()\nexport const unescapeHtml = (text: string) => {\n return domParser.parseFromString(text, \"text/html\").body.textContent\n}\n\nexport const sanitizeString = (data: {}) => {\n if (!data) {\n return ''\n }\n\n return data.toString().replace(/\"/g, '"').replace(/'/g, ''')\n}\n\nexport const stripTags = (s: string) => {\n return (s || '').replace(/(<([^>]+)>)/gi, '')\n}\n\nexport const setAttributes = (element: Element, attrs: Record<string, any>) => {\n for (let key in attrs) {\n element.setAttribute(key, attrs[key])\n }\n return element\n}\n\nexport const getMetaContent = (metaName: string) => {\n const metaTag = document.querySelector(`meta[name=${metaName}]`)\n if (!metaTag) {\n return ''\n }\n return metaTag.getAttribute('content')\n}\n\nexport const isObjectEmpty = (obj: {}) => {\n return Object.keys(obj).length === 0\n}\n","/* 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]}