{"version":3,"names":["swpChatbotBannerCss","SwpChatbotBannerStyle0","SwpChatbotBanner","render","h","key","class","this","bannerClassName","swpChatbotBannerCardCss","SwpChatbotBannerCardStyle0","defaultImg","SwpChatbotBannerCard","ctaButtonOnClick","buttonText","document","querySelector","textContent","window","dispatchEvent","CustomEvent","detail","analyticsName","name","src","onClick","bind","PingHandler","data","webchat","console","debug","sendMessage","pong","querySelectorAllShadows","selector","el","body","childShadows","Array","from","querySelectorAll","map","shadowRoot","filter","Boolean","childResults","child","result","concat","flat","PlatformService","isAndroidEnvironment","isAndroidObject","Android","isAndroidWebView","navigator","userAgent","isIosEnvironment","isIosObject","_a","webkit","messageHandlers","isIosWebView","isMobileAppEnvironment","pnlUserMenuExists","length","test","async","GetAccessTokenHandler","_","platformService","forwardAccessTokenFromUserMenu","forwardAccessTokenFromAndroid","forwardAccessTokenFromIos","error","success","registerAuthenticationResponse","requestAccessToken","_b","postMessage","eventName","source","processAppResponse","event","clearTimeout","timeout","accessToken","access_token","authenticated","setTimeout","addEventListener","once","GetCookieValueHandler","warn","cookieValue","getCookieByName","decodeURIComponent","cookie","split","find","row","startsWith","GetCurrentPageHandler","url","location","href","ChatWindowState","InputState","HeaderState","NameSpaceSuffix","ChatSessionService","constructor","endpoint","prefix","namespace","activeSessionId","ActiveSessionId","windowState","WindowState","inputState","loginTriggered","LoginTriggered","isNewSession","IsNewSession","headerState","retrieveEntireSession","encodeURIComponent","JSON","stringify","sessionStorage","createNewSessionId","sessionId","crypto","randomUUID","setItem","updateHeaderState","getSessionId","getItem","undefined","popIsNewSession","removeItem","reset","setWindowState","state","getWindowState","Closed","setInputState","inputField","style","display","Hidden","getInputState","pushLoginTriggered","popLoginTriggered","getHeaderState","Shown","restoreSessionFromApp","getFromAndroid","getSavedChatbotUserSession","getFromIos","_c","getSavedSession","savedSession","sessionObject","parse","clear","endsWith","HideInputHandler","chatSession","hideInput","AnalyticsService","sessionIdProvider","dispatchFrontEndAnalytics","intel","in_page","category","dispatchAnalytics","payload","Object","assign","PostnlDataLayerEvent","analyticsService","client","socketOptions","TriggerLoginHandler","chatSessionService","triggerLogin","pingConfig","eventId","handler","getAccessTokenConfig","getCookieValueConfig","getCurrentPageConfig","hideInputConfig","postnlDataLayerEventConfig","triggerLoginConfig","DefaultEventHandlerConfigs","ContentStackConfigurationService","GetEndpointConfig","environment","variables","environmentAccessTokens","Error","response","fetch","method","headers","query","configQuery","ok","status","statusText","responseBody","json","config","endpointUrl","_d","all_chatbot_endpoints","items","cognigy_config_url","chatbotEndpointName","dev","fat","pat","prod","ContentStackConfigService","IsValidStringValue","str","trim","withGlobalFunctions","getChatbotUserSession","swpChatbotWindowCss","SwpChatbotWindowStyle0","SwpChatbotWindow","configurationService","eventHandlerConfigs","deviceMinWidthToFocusInput","updateSettings","cognigyConfigUrl","options","featureFlow","hideBubbleWhenClosed","close","reinitialize","open","Open","startConversation","changeBubbleVisibility","componentDidLoad","webchatScript","createElement","onload","onWebchatScriptLoad","head","appendChild","cleanUpWebchat","forEach","div","parentElement","remove","initWebchat","updateOptions","loadWebchat","setOptionDefaults","setFeatureFlow","_e","settings","_f","widgetSettings","_g","disableInputAutofocus","_h","embeddingConfiguration","useSessionStorage","startBehavior","getStartedText","getStartedData","getChatbotEndpointUrlFromConfiguration","encodeURI","onWebchatLoaded","getAttribute","onWebchatRootAdded","showBubble","changeHeaderVisibility","addToggleBehavior","registerDefaultEventHandlers","registerAnalyticsService","handleEvent","afterLoad","chatbotHeader","getElementsByClassName","bubble","Minimized","_config","push","isCustomEvent","handleCustomEvent","type","onWebchatOpen","handleOpenEvent","handleCloseEvent","isAutoFocusInputDisabled","focusInputOnLargeDevice","disableBackgroundScrolling","addButtonBehavior","addMinimizeBahaviour","addCloseBehaviour","minimizeButton","closeButton","enableBackgroundScrolling","classList","add","hasOwnProperty","screen","width","input","focus","isVisible","chatBubble","userId","callback","onMutation","mutationRecord","addedNodes","contains","getElementById","mutationsFilter","observerCallback","mutationRecords","targetMutation","observer","disconnect","MutationObserver","observe","childList","subtree"],"sources":["src/components/swp-chatbot-banner/swp-chatbot-banner.scss?tag=swp-chatbot-banner","src/components/swp-chatbot-banner/swp-chatbot-banner.tsx","src/components/swp-chatbot-banner-card/swp-chatbot-banner-card.scss?tag=swp-chatbot-banner-card","src/components/swp-chatbot-banner-card/swp-chatbot-banner-card.tsx","src/components/swp-chatbot-window/event-handlers/ping-handler.ts","src/utility.ts","src/services/platform.service.ts","src/components/swp-chatbot-window/event-handlers/get-access-token-handler.ts","src/components/swp-chatbot-window/event-handlers/get-cookie-value-handler.ts","src/components/swp-chatbot-window/event-handlers/get-current-page-handler.ts","src/services/chat-session.service.ts","src/components/swp-chatbot-window/event-handlers/hide-input-handler.ts","src/services/analytics-service.ts","src/components/swp-chatbot-window/event-handlers/postnl-data-layer-event-handler.ts","src/components/swp-chatbot-window/event-handlers/trigger-login-handler.ts","src/components/swp-chatbot-window/webchat-event-handlers.ts","src/services/content-stack-configuration-service.ts","src/components/swp-chatbot-window/property-helper.ts","src/components/swp-chatbot-window/decorators/with-global-functions.ts","src/components/swp-chatbot-window/swp-chatbot-window.scss?tag=swp-chatbot-window","src/components/swp-chatbot-window/swp-chatbot-window.tsx"],"sourcesContent":[".swp-chatbot-banner {\n display: flex;\n justify-content: center;\n\n &.primary {\n background: var(--stamp-color-background-brand, #F56900);\n }\n \n &.secondary {\n background: var(--stamp-color-background-variant, #F1F1F2);\n\n .swp-chatbot-banner-card h3 {\n color: var(--stamp-color-background-brand, #F56900);\n }\n }\n\n \n &.tertiary { \n background: var(--stamp-color-background-surface, #FFF);\n }\n}\n\n@media (width <= 880px) {\n .swp-chatbot-banner {\n flex-direction: column;\n padding: 0 var(--stamp-spacing-inner-s, 8px);\n }\n}","import { Component, h, Prop } from '@stencil/core';\n\nexport type SwpChatbotBannerClassName = \"primary\" | \"secondary\" | \"tertiary\";\n\n@Component({\n tag: 'swp-chatbot-banner',\n styleUrl: 'swp-chatbot-banner.scss',\n shadow: false,\n})\nexport class SwpChatbotBanner {\n /**\n * For styling the banner in either \"primary\" | \"secondary\" | \"tertiary\"\n */\n @Prop() bannerClassName: SwpChatbotBannerClassName = \"secondary\";\n\n render() {\n return <div class={\"swp-chatbot-banner \" + this.bannerClassName}>\n <slot></slot>\n </div>\n }\n}\n","@import '../../global/global.scss';\n\n.swp-chatbot-banner-card {\n border-radius: var(--stamp-spacing-inner-s, 8px);\n background: var(--stamp-color-background-surface, #FFF);\n display: flex;\n gap: var(--stamp-spacing-inner-l, 16px);\n box-shadow: 0px 2px 6px 0px rgba(31, 30, 47, 0.15);\n padding: var(--stamp-spacing-inner-3-xl, 40px) var(--stamp-spacing-inner-xxl, 32px) var(--stamp-spacing-inner-3-xl, 40px) var(--stamp-spacing-inner-xl, 24px); \n color: var(--stamp-color-heading-subtle, #1F1E2F);\n font-family: \"Hanken Grotesk\";\n position: relative;\n top: var(--stamp-spacing-inner-3-xl, 40px);\n\n h3 {\n font-size: 21px;\n font-style: normal;\n font-weight: 700;\n line-height: 105%;\n margin: 0 0 var(--stamp-spacing-inner-s, 8px) 0;\n }\n\n .swp-chatbot-banner-card-content-text {\n width: 316px;\n font-feature-settings: 'ss01' on, 'ss03' on;\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 160%;\n margin-bottom: var(--stamp-spacing-inner-xxl, 32px);\n }\n\n .swp-chatbot-banner-card-cta {\n @include primary-button;\n text-align: center;\n font-feature-settings: 'ss01' on, 'ss03' on;\n font-size: 16px;\n font-style: normal;\n font-weight: 700;\n line-height: 140%;\n margin-right: auto;\n } \n}\n\n.swp-chatbot-banner-card-img-container {\n display: flex;\n padding: 15px 7px 12px 10px;\n\n img {\n width: 128px;\n height: 117px;\n flex-shrink: 0;\n }\n}\n\n.swp-chatbot-banner-card-content-container {\n display: flex;\n flex-direction: column;\n\n}\n\n@media (width <= 880px) {\n .swp-chatbot-banner-card {\n flex-direction: column;\n padding-top: 0;\n align-items: stretch;\n \n .swp-chatbot-banner-card-cta {\n margin-right: unset;\n }\n }\n\n .swp-chatbot-banner-card-img-container {\n padding-bottom: 0;\n top:-25px;\n position: relative;\n\n img {\n flex-shrink: 1;\n margin-left:auto;\n margin-right: auto;\n position: relative;\n }\n }\n\n .swp-chatbot-banner-card-content-container {\n top:-25px;\n position: relative;\n }\n}\n","import { Component, h } from '@stencil/core';\n\nconst defaultImg = 'data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"37\" height=\"33\" viewBox=\"0 0 37 33\" fill=\"none\"><g id=\"Illustration/Daan/chat\"><g id=\"Group 2\"><g id=\"Basis\"><g id=\"Group\"><path id=\"Path\" d=\"M19.255 31.0069C24.8857 31.6819 35.2299 18.6698 34.5122 14.6853C33.7944 10.7009 26.2442 8.99222 26.2442 8.99222C26.2442 8.99222 14.82 5.83556 12.1293 9.98467C9.43867 14.1338 15.1707 30.5182 19.255 31.0069Z\" fill=\"%23FF8D00\"/><path id=\"Path_2\" d=\"M28.729 25.1938C32.1936 21.4016 34.8959 16.783 34.5167 14.6804C33.7982 10.7016 26.2487 8.98723 26.2487 8.98723C26.2487 8.98723 14.8246 5.83058 12.1339 9.97968L28.729 25.1938Z\" fill=\"%23F56900\"/><g id=\"Oval\" style=\"mix-blend-mode:multiply\" opacity=\"0.7\"><path d=\"M21.315 23.6749C24.2961 24.0939 27.0524 22.0168 27.4714 19.0357C27.8904 16.0545 25.8133 13.2982 22.8322 12.8792C19.851 12.4602 17.0947 14.5373 16.6757 17.5184C16.2568 20.4996 18.3338 23.2559 21.315 23.6749Z\" fill=\"%23EBECEF\"/></g><path id=\"Path (Stroke)\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M19.7077 12.3233C19.7079 12.3233 19.7081 12.3232 19.5598 11.8005C19.4116 11.2777 19.4118 11.2777 19.4121 11.2776L19.4126 11.2775L19.4139 11.2771L19.4174 11.2761C19.42 11.2754 19.4235 11.2745 19.4276 11.2733C19.436 11.2711 19.4473 11.2681 19.4615 11.2645C19.4898 11.2573 19.5298 11.2476 19.5807 11.2363C19.6824 11.2136 19.8281 11.1845 20.0128 11.1559C20.382 11.0988 20.9082 11.0439 21.5514 11.0486C22.8383 11.058 24.5976 11.3063 26.5007 12.2557L26.0156 13.2281C24.2879 12.3662 22.698 12.1438 21.5434 12.1353C20.966 12.1311 20.4984 12.1804 20.1789 12.2298C20.0193 12.2545 19.897 12.2792 19.8168 12.297C19.7767 12.3059 19.7472 12.3132 19.7289 12.3178C19.7197 12.3201 19.7134 12.3218 19.7099 12.3228L19.7069 12.3236L19.7074 12.3234L19.7077 12.3233ZM19.7068 12.3236L19.7069 12.3236C19.7067 12.3236 19.7066 12.3236 19.7068 12.3236Z\" fill=\"%23FDD732\"/><path id=\"Path_3\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M23.6818 25.8791C22.6576 26.2683 20.3192 26.5944 18.3891 24.7527C18.503 26.14 19.1955 27.0346 20.4665 27.4365C21.7375 27.8384 22.8092 27.3193 23.6818 25.8791Z\" fill=\"%23001A73\"/><path id=\"Path (Stroke)_2\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M18.1691 24.2918C18.3604 24.2005 18.5883 24.2369 18.7417 24.3832C20.4784 26.0405 22.5835 25.7502 23.5003 25.4017C23.7041 25.3243 23.9346 25.3847 24.0742 25.5522C24.2137 25.7197 24.2316 25.9573 24.1186 26.1438C23.6515 26.9148 23.1004 27.4914 22.4462 27.8082C21.7785 28.1317 21.0564 28.1587 20.3125 27.9235C19.5961 27.6969 19.0106 27.3201 18.59 26.7768C18.1707 26.235 17.9433 25.5639 17.8801 24.7945C17.8627 24.5832 17.9777 24.3832 18.1691 24.2918ZM19.3313 26.0605C19.3527 26.0917 19.3749 26.122 19.3978 26.1516C19.6697 26.5028 20.066 26.7742 20.6205 26.9496C21.1477 27.1163 21.5969 27.0847 22.0009 26.889C22.1153 26.8336 22.2298 26.7632 22.3443 26.6764C21.4566 26.7396 20.3854 26.6163 19.3313 26.0605Z\" fill=\"%23001A73\"/><g id=\"Path_4\" style=\"mix-blend-mode:multiply\"><path d=\"M21.3979 9.17984C21.4485 9.01246 21.7272 8.69876 22.6728 8.84133C23.3762 8.9402 23.7449 9.39336 23.767 9.56709L21.3979 9.17984Z\" fill=\"%23F7F7F8\"/></g><path id=\"Path (Stroke)_3\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M23.9822 6.70842C23.895 6.11241 23.7467 5.52694 23.5398 4.96125L22.9267 5.18554C23.1186 5.70994 23.2559 6.2527 23.3366 6.80524L23.337 6.80777L23.3374 6.81029C23.4817 7.70081 23.3453 8.74643 23.2213 9.47716L23.865 9.58634C23.9895 8.85195 24.1446 7.71403 23.9822 6.70842Z\" fill=\"%23303DB9\"/><path id=\"Oval_2\" d=\"M23.39 6.63505C24.4684 6.78661 25.4655 6.03525 25.617 4.95683C25.7686 3.87841 25.0172 2.88131 23.9388 2.72975C22.8604 2.57819 21.8633 3.32955 21.7117 4.40797C21.5602 5.48639 22.3115 6.48349 23.39 6.63505Z\" fill=\"%23F56900\"/><path id=\"Oval_3\" d=\"M21.3955 23.1026C24.0605 23.4771 26.5246 21.6203 26.8992 18.9552C27.2737 16.2902 25.4169 13.8261 22.7518 13.4515C20.0868 13.0769 17.6227 14.9338 17.2481 17.5989C16.8735 20.2639 18.7304 22.728 21.3955 23.1026Z\" fill=\"white\"/><path id=\"Oval_4\" d=\"M20.2252 19.8476C21.605 20.0416 22.8808 19.0802 23.0747 17.7004C23.2686 16.3207 22.3073 15.0449 20.9275 14.851C19.5477 14.6571 18.272 15.6184 18.078 16.9982C17.8841 18.378 18.8455 19.6537 20.2252 19.8476Z\" fill=\"%23001A73\"/></g></g><g id=\"Chat bubble\"><path id=\"Fill 1\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M19.0655 5.99755C19.4829 8.96756 18.02 11.578 14.6762 13.0363L14.6817 13.1368C14.7387 14.0857 14.9131 14.8891 15.6798 15.3809C13.9487 15.6367 12.9083 14.676 12.3952 13.8734L12.155 13.9261C11.7721 14.0092 11.1832 14.1331 10.9272 14.1691C5.89767 14.876 1.38705 12.3636 0.852103 8.55728C0.317201 4.75126 3.96056 1.09271 8.99027 0.385826C14.0202 -0.321083 18.5306 2.19131 19.0655 5.99755Z\" fill=\"%23303DB9\"/><path id=\"Shape\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.71095 6.88698C6.37342 6.88698 6.91046 7.42401 6.91046 8.08648C6.91046 8.74895 6.37342 9.28599 5.71095 9.28599C5.04848 9.28599 4.51144 8.74895 4.51144 8.08648C4.51144 7.42401 5.04848 6.88698 5.71095 6.88698ZM9.93778 6.20155C10.6002 6.20155 11.1373 6.73858 11.1373 7.40105C11.1373 8.06352 10.6002 8.60056 9.93778 8.60056C9.27531 8.60056 8.73828 8.06352 8.73828 7.40105C8.73828 6.73858 9.27531 6.20155 9.93778 6.20155ZM14.1646 5.51611C14.8271 5.51611 15.3641 6.05315 15.3641 6.71562C15.3641 7.37809 14.8271 7.91513 14.1646 7.91513C13.5021 7.91513 12.9651 7.37809 12.9651 6.71562C12.9651 6.05315 13.5021 5.51611 14.1646 5.51611Z\" fill=\"white\"/></g></g></g></svg>';\n\n@Component({\n tag: 'swp-chatbot-banner-card',\n styleUrl: 'swp-chatbot-banner-card.scss',\n shadow: false,\n})\nexport class SwpChatbotBannerCard {\n ctaButtonOnClick() {\n const buttonText = document.querySelector('slot-fb[name=\"buttonText\"]').textContent;\n window.dispatchEvent(new CustomEvent('postnl:webchat:open', {\n detail: {\n analyticsName: buttonText\n }}\n ));\n }\n\n render() {\n return <div class=\"swp-chatbot-banner-card\">\n <div class=\"swp-chatbot-banner-card-img-container\">\n <slot name=\"image\">\n <img src={ defaultImg }></img>\n </slot>\n </div>\n <div class=\"swp-chatbot-banner-card-content-container\">\n <h3>\n <slot name=\"header\">Heb je een vraag?</slot>\n </h3>\n <div class=\"swp-chatbot-banner-card-content-text\">\n <slot name=\"content\">Dan ben je bij mij aan het juiste adres! Ik ben chatbot Daan en kan al veel vragen zelf beantwoorden. Komen we er samen niet uit of wil je een echte collega spreken? Dan verbind ik je door.</slot>\n </div>\n <button class=\"swp-chatbot-banner-card-cta\" onClick={this.ctaButtonOnClick.bind(this)} data-id=\"chatButtonTrigger\">\n <slot name=\"buttonText\">Start de chat</slot>\n </button>\n </div>\n </div>\n }\n}\n","export function PingHandler(data: object, webchat: any) {\n console.debug('Received Ping event', data);\n webchat.sendMessage('', {\n pong: 'pong'\n });\n}\n","// https://stackoverflow.com/questions/38701803/how-to-get-element-in-user-agent-shadow-root-with-javascript#answer-71692555\n\nexport function querySelectorAllShadows(selector, el : HTMLElement | ShadowRoot = document.body) : any[] {\n // recurse on childShadows\n const childShadows = Array.from(el.querySelectorAll('*')).\n map(el => el.shadowRoot).filter(Boolean);\n \n const childResults = childShadows.map(child => querySelectorAllShadows(selector, child));\n \n // fuse all results into singular, flat array\n const result = Array.from(el.querySelectorAll(selector));\n return result.concat(childResults).flat();\n }","import { querySelectorAllShadows } from \"../utility\";\n\nexport class PlatformService {\n isAndroidEnvironment(): boolean {\n const isAndroidObject = !!(window as any).Android;\n const isAndroidWebView = this.isAndroidWebView(navigator?.userAgent || '');\n\n return isAndroidObject && isAndroidWebView;\n }\n\n isIosEnvironment(): boolean {\n const isIosObject = !!(window as any).webkit?.messageHandlers;\n const isIosWebView = this.isIosWebView(navigator?.userAgent || '');\n\n return isIosObject && isIosWebView;\n }\n\n isMobileAppEnvironment(): boolean {\n const isAndroidEnvironment = this.isAndroidEnvironment();\n const isIosEnvironment = this.isIosEnvironment()\n\n return isAndroidEnvironment || isIosEnvironment;\n }\n\n pnlUserMenuExists(): boolean {\n return querySelectorAllShadows('pnl-user-menu').length > 0;\n }\n\n private isAndroidWebView(userAgent: string): boolean {\n return userAgent && /Android.*(wv|WebView).*PostNL/i.test(userAgent);\n }\n\n private isIosWebView(userAgent: string): boolean {\n return userAgent && /AppleWebKit.*PostNL/i.test(userAgent);\n }\n}\n","import { PlatformService } from \"../../../services/platform.service\";\n\nexport async function GetAccessTokenHandler(_: never, webchat: any) {\n const platformService = new PlatformService();\n\n switch (true) {\n case platformService.pnlUserMenuExists():\n console.debug('pnl-user-menu found. Retrieving authentication state from user-menu and sending it back to chatbot');\n if (forwardAccessTokenFromUserMenu(webchat)) {\n return;\n }\n break;\n case platformService.isAndroidEnvironment():\n console.debug('Android JavaScript interface present. Retrieve authentication state from App and sending it back to chatbot');\n if (forwardAccessTokenFromAndroid(webchat)) {\n return;\n }\n break;\n case platformService.isIosEnvironment(): {\n console.debug('iOS JavaScript interface present. Retrieve authentication state from App and sending it back to chatbot');\n if (await forwardAccessTokenFromIos(webchat)) {\n return;\n }\n break;\n }\n }\n\n console.error('Access token was not obtained from any platform');\n\n webchat.sendMessage('', {\n success: false\n });\n}\n\nexport function forwardAccessTokenFromUserMenu(webchat: any) {\n registerAuthenticationResponse('onAuthenticationChange', 'web', webchat)\n window.dispatchEvent(new CustomEvent(`postnl:peekauthenticationstate`));\n return true;\n}\n\nfunction forwardAccessTokenFromAndroid(webchat: any) {\n const requestAccessToken = (window as any).Android?.requestAccessToken;\n\n if (!requestAccessToken || typeof requestAccessToken !== \"function\") {\n return false;\n }\n\n registerAuthenticationResponse('postnl:webchat:app-response', 'android', webchat);\n requestAccessToken.bind((window as any).Android)();\n\n return true;\n}\n\nasync function forwardAccessTokenFromIos(webchat: any) {\n const requestAccessToken = (window as any).webkit?.messageHandlers?.requestAccessToken;\n\n if (!requestAccessToken || typeof requestAccessToken?.postMessage !== 'function') {\n return false;\n }\n\n registerAuthenticationResponse('postnl:webchat:app-response', 'ios', webchat);\n await requestAccessToken.postMessage.bind(requestAccessToken)('');\n\n return true;\n}\n\nfunction registerAuthenticationResponse(eventName: string, source: string, webchat: any) {\n const processAppResponse = (event: any) => {\n clearTimeout(timeout);\n\n webchat.sendMessage('', {\n source,\n success: true,\n accessToken: event?.detail?.access_token,\n authenticated: event?.detail?.authenticated,\n });\n };\n\n const timeout = setTimeout(() => {\n // Triggers a failure response after a specific amount of time, in case no response is received from the app.\n window.dispatchEvent(new CustomEvent<any>(eventName, { detail: { source, success: false } }));\n }, 3000);\n\n window.addEventListener(eventName, processAppResponse, {once: true});\n}\n","export interface GetCookieValueData {\n name: string;\n}\n\nexport function GetCookieValueHandler(data: GetCookieValueData, webchat: any) {\n if (data?.name == null) {\n console.warn('Trying to retrieve cookie without name being specified');\n webchat.sendMessage('', { success: false });\n return;\n }\n\n const cookieValue = getCookieByName(data.name);\n if (cookieValue == null) {\n console.warn(`Trying to retrieve cookie with name \"${data.name}\", but none was found`);\n webchat.sendMessage('', { success: false });\n return;\n }\n webchat.sendMessage('', { success: true, cookieValue });\n}\n\n// As per https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie#example_2_get_a_sample_cookie_named_test2\nfunction getCookieByName(name: string) {\n return decodeURIComponent(document.cookie\n .split('; ')\n .find((row) => row.startsWith(`${name}=`))\n ?.split('=')[1]);\n}\n","export function GetCurrentPageHandler(_: never, webchat: any) {\n webchat.sendMessage('', { success: true, url: window.location.href });\n}\n","import { PlatformService } from \"./platform.service\";\n\nexport enum ChatWindowState {\n Open = 'open',\n Minimized = 'minimized',\n Closed = 'closed'\n}\n\nexport enum InputState {\n Shown = 'shown',\n Hidden = 'hidden'\n}\n\nexport enum HeaderState {\n Shown = 'shown',\n Hidden = 'hidden'\n}\n\nenum NameSpaceSuffix {\n ActiveSessionId = 'activeSessionId',\n WindowState = 'windowState',\n InputState = 'inputState',\n LoginTriggered = 'loginTriggered',\n IsNewSession = 'isNewSession',\n HeaderState = 'headerState',\n}\n\nexport class ChatSessionService {\n private readonly prefix = 'swp-chatbot';\n\n private namespace: string;\n private activeSessionId: string;\n private windowState: string;\n private inputState: string;\n private loginTriggered: string;\n private isNewSession: string;\n private headerState: string;\n private platformService: PlatformService;\n\n constructor(endpoint: string) {\n this.namespace = `${this.prefix}:${endpoint}`;\n\n this.activeSessionId = `${this.namespace}:${NameSpaceSuffix.ActiveSessionId}`;\n this.windowState = `${this.namespace}:${NameSpaceSuffix.WindowState}`;\n this.inputState = `${this.namespace}:${NameSpaceSuffix.InputState}`;\n this.loginTriggered = `${this.namespace}:${NameSpaceSuffix.LoginTriggered}`;\n this.isNewSession = `${this.namespace}:${NameSpaceSuffix.IsNewSession}`;\n this.headerState = `${this.namespace}:${NameSpaceSuffix.HeaderState}`;\n\n this.platformService = new PlatformService();\n }\n\n static retrieveEntireSession(): string {\n return encodeURIComponent(JSON.stringify(sessionStorage));\n }\n\n createNewSessionId(): string {\n const sessionId = `session-${crypto.randomUUID()}`;\n sessionStorage.setItem(this.activeSessionId, sessionId);\n sessionStorage.setItem(this.isNewSession, 'true');\n\n this.updateHeaderState();\n\n return sessionId;\n }\n\n getSessionId(): string | undefined {\n return sessionStorage.getItem(this.activeSessionId) || undefined;\n }\n\n popIsNewSession(): boolean {\n const isNewSession = sessionStorage.getItem(this.isNewSession);\n sessionStorage.removeItem(this.isNewSession);\n\n return isNewSession === 'true' || false;\n }\n\n reset(): void {\n sessionStorage.removeItem(this.activeSessionId);\n sessionStorage.removeItem(this.windowState);\n sessionStorage.removeItem(this.inputState);\n sessionStorage.removeItem(this.isNewSession);\n sessionStorage.removeItem(this.headerState);\n }\n\n setWindowState(state: ChatWindowState): void {\n sessionStorage.setItem(this.windowState, state);\n }\n\n getWindowState(): ChatWindowState {\n const windowState = sessionStorage.getItem(this.windowState) as ChatWindowState;\n return windowState ?? ChatWindowState.Closed;\n }\n\n setInputState(state: InputState): void {\n sessionStorage.setItem(this.inputState, state);\n\n const inputField = document.querySelector(\"[data-cognigy-webchat-root] [data-cognigy-webchat].webchat .webchat-input :first-child\") as HTMLElement;\n inputField.style.display = state === InputState.Hidden ? 'none' : 'initial';\n }\n\n getInputState(): InputState | null {\n return sessionStorage.getItem(this.inputState) as InputState | null;\n }\n\n pushLoginTriggered() {\n sessionStorage.setItem(this.loginTriggered, 'true');\n }\n\n popLoginTriggered() {\n const loginTriggered = sessionStorage.getItem(this.loginTriggered);\n sessionStorage.removeItem(this.loginTriggered);\n return loginTriggered === 'true' || false;\n }\n\n getHeaderState(): HeaderState {\n // by default the header is always shown\n return sessionStorage.getItem(this.headerState) as HeaderState || HeaderState.Shown;\n }\n\n updateHeaderState() {\n const state = this.platformService.isMobileAppEnvironment() ? HeaderState.Hidden : HeaderState.Shown;\n sessionStorage.setItem(this.headerState, state);\n }\n\n async restoreSessionFromApp(): Promise<string | undefined> {\n const getFromAndroid = (window as any).Android?.getSavedChatbotUserSession;\n const getFromIos = (window as any).webkit?.messageHandlers?.getSavedChatbotUserSession;\n\n if (!(getFromAndroid && typeof getFromAndroid === 'function') && !(getFromIos && typeof getFromIos?.postMessage === 'function')) {\n console.debug('There is no function to restore saved user session');\n return;\n }\n\n const getSavedSession = async (): Promise<string> => {\n if (getFromAndroid) {\n // important notes for Android:\n // - context of the latest function must be bound to its parent;\n return getFromAndroid.bind((window as any).Android)();\n }\n\n if (getFromIos) {\n // important notes for iOS:\n // - it must be resolved since it returns a promise instead of final value;\n // - calling with an argument is critically important!;\n // - context of the latest function must be bound to its parent\n return getFromIos.postMessage.bind(getFromIos)('');\n }\n\n return '';\n }\n\n try {\n console.debug('Retrieve saved user session from App and setting it to chatbot');\n const savedSession = await getSavedSession();\n\n if (!savedSession || typeof savedSession !== 'string') {\n console.debug('There is no saved user session');\n return;\n }\n\n const sessionObject = JSON.parse(decodeURIComponent(savedSession));\n let sessionId: string;\n sessionStorage.clear(); // remove any previous data dut to potential irrelevance to restored session\n\n for (const key in sessionObject) {\n sessionStorage.setItem(key, sessionObject[key]);\n\n if (key.endsWith(`:${NameSpaceSuffix.ActiveSessionId}`)) {\n sessionId = sessionObject[key];\n }\n }\n\n console.debug('User session restored successfully. Session ID:', sessionId);\n return sessionId;\n } catch (error: any) {\n sessionStorage.clear(); // don't keep anything if something went wrong during session restoring\n console.debug('User session was not restored. Error is below');\n console.error(error);\n }\n }\n}\n","import { ChatSessionService, InputState } from \"../../../services/chat-session.service\";\n\nexport interface HideInputData {\n hideInput: boolean;\n}\n\nexport function HideInputHandler(data: HideInputData, webchat: any, chatSession: ChatSessionService) {\n if (data?.hideInput == null) {\n console.warn('Trying change input visibility but no property \"hideInput\" was sent');\n return;\n }\n\n webchat.hideInput = data.hideInput;\n chatSession.setInputState(data.hideInput ? InputState.Hidden : InputState.Shown)\n}\n","import { AnalyticsIntelPayload, SessionIdProvider } from \"./analytics-service.model\";\n\nexport class AnalyticsService {\n private sessionIdProvider: SessionIdProvider;\n\n constructor(sessionIdProvider: SessionIdProvider) {\n this.sessionIdProvider = sessionIdProvider;\n }\n\n // Dispatch an analytics event for events generated by front-end activity.\n dispatchFrontEndAnalytics(name: string): void {\n const intel: AnalyticsIntelPayload = {\n name: 'in_page_interaction',\n in_page: {\n name,\n category: 'link_button_click',\n location: 'chatbot'\n },\n };\n this.dispatchAnalytics(intel);\n }\n\n dispatchAnalytics(intel: AnalyticsIntelPayload): void {\n const payload = {\n detail: {\n sessionId: this.sessionIdProvider(),\n ...intel\n }\n }\n\n document.body.dispatchEvent(new CustomEvent<object>('postnl-datalayer-event', payload));\n };\n}\n","import { AnalyticsService } from \"../../../services/analytics-service\";\n\nexport function PostnlDataLayerEvent(data: any, webchat: any) {\n if (!data?.intel) {\n console.error(`PostNL data layer event dispatch attempted but data.intel was \"${data?.intel}\"`);\n return;\n }\n\n const analyticsService = new AnalyticsService(() => webchat.client.socketOptions.sessionId);\n analyticsService.dispatchAnalytics(data.intel);\n}\n","import { ChatSessionService } from \"../../../services/chat-session.service\";\nimport { querySelectorAllShadows } from \"../../../utility\";\n\nexport function TriggerLoginHandler(_: never, webchat: any, chatSessionService: ChatSessionService) {\n if (pnlUserMenuExists()) {\n console.debug('pnl-user-menu found. Triggering login');\n triggerLogin(chatSessionService);\n }\n else {\n console.debug('No pnl-user-menu found.');\n webchat.sendMessage('', { success: false });\n }\n}\n\nfunction triggerLogin(chatSessionService: ChatSessionService) {\n chatSessionService.pushLoginTriggered();\n window.dispatchEvent(new CustomEvent('postnl:identity:login'));\n}\n\nfunction pnlUserMenuExists() {\n return querySelectorAllShadows('pnl-user-menu').length > 0;\n}\n","import { EventHandlerConfig } from \"./webchat-options.model\";\nimport { PingHandler } from \"./event-handlers/ping-handler\";\nimport { GetAccessTokenHandler } from \"./event-handlers/get-access-token-handler\";\nimport { GetCookieValueHandler } from \"./event-handlers/get-cookie-value-handler\";\nimport { GetCurrentPageHandler } from \"./event-handlers/get-current-page-handler\";\nimport { HideInputHandler } from \"./event-handlers/hide-input-handler\"; \nimport { PostnlDataLayerEvent } from \"./event-handlers/postnl-data-layer-event-handler\";\nimport { TriggerLoginHandler } from \"./event-handlers/trigger-login-handler\";\n\nconst pingConfig: EventHandlerConfig = { eventId: 'ping', handler: PingHandler };\nconst getAccessTokenConfig: EventHandlerConfig = { eventId: 'get-access-token', handler: GetAccessTokenHandler };\nconst getCookieValueConfig: EventHandlerConfig = { eventId: 'get-cookie-value', handler: GetCookieValueHandler };\nconst getCurrentPageConfig: EventHandlerConfig = { eventId: 'get-current-page', handler: GetCurrentPageHandler };\nconst hideInputConfig: EventHandlerConfig = { eventId: 'hide-input', handler: HideInputHandler };\nconst postnlDataLayerEventConfig: EventHandlerConfig = { eventId: 'postnl-data-layer-event', handler: PostnlDataLayerEvent };\nconst triggerLoginConfig: EventHandlerConfig = { eventId: 'trigger-login', handler: TriggerLoginHandler };\n\nexport const DefaultEventHandlerConfigs: EventHandlerConfig[] = [\n pingConfig,\n getAccessTokenConfig,\n getCookieValueConfig,\n getCurrentPageConfig,\n hideInputConfig,\n postnlDataLayerEventConfig,\n triggerLoginConfig\n];","import { Environments, IConfigurationService, IWebchatConfiguration } from \"./configuration-service.model\";\n\nclass ContentStackConfigurationService implements IConfigurationService {\n private static configQuery = `\n query ($chatbotEndpointName: String!){\n all_chatbot_endpoints(where: { name: $chatbotEndpointName }) {\n items {\n cognigy_config_url\n }\n }\n }`;\n private static environmentAccessTokens: {[Key in Environments]: string} = {\n dev: 'cs63653d89d7e19fadc3d39f7e',\n fat: 'cs101fb2de6b11a8ff626ff846',\n pat: 'cse4256741d62e7966f086d350',\n prod: 'csed32ddc7308affbec19c44ec'\n } as const;\n\n async GetEndpointConfig(environment: Environments = \"prod\", variables: { chatbotEndpointName: string }): Promise<IWebchatConfiguration> {\n console.debug(`Downloading chatbot endpoints from ContentStack ${environment} environment`, variables);\n\n const accessToken = ContentStackConfigurationService.environmentAccessTokens[environment];\n if (!accessToken) {\n throw new Error(`Unknown environment ${environment} specified.`);\n }\n\n const response = await fetch(`https://eu-graphql.contentstack.com/stacks/blt2905d53358d59df0?environment=${environment}`, {\n method: 'POST',\n headers: {\n 'access_token': ContentStackConfigurationService.environmentAccessTokens[environment],\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ query: ContentStackConfigurationService.configQuery, variables })\n });\n\n if (!response.ok) {\n throw new Error(`Error: ${response.status} ${response.statusText}`);\n }\n\n const responseBody = await response.json();\n const config = { endpointUrl: responseBody.data?.all_chatbot_endpoints?.items?.[0]?.cognigy_config_url };\n\n if (!config.endpointUrl) {\n throw new Error(`Endpoint configuration ${variables.chatbotEndpointName} was not found.`);\n }\n\n console.debug('Using endpoint configuration', config);\n return config;\n }\n}\n\nexport const ContentStackConfigService = new ContentStackConfigurationService();\n","export function IsValidStringValue(str: string) : boolean {\n return typeof str === 'string' && str.trim() !== '';\n}","import { ChatSessionService } from \"../../../services/chat-session.service\";\n\nexport const withGlobalFunctions = () => {\n Object.assign(window, {\n getChatbotUserSession: ChatSessionService.retrieveEntireSession,\n });\n}\n","@import '../../global/global.scss';\n\n@mixin message-border {\n border-radius: var(--stamp-radius-s, 6px);\n border: none;\n}\n\n#webchatWindow {\n bottom: calc(var(--position-bottom-offset, 14px) + var(--size-toggle-button, 48px) + var(--stamp-spacing-inner-l, 16px));\n}\n\n// Toggle button\n[data-cognigy-webchat-root] button[data-cognigy-webchat-toggle].webchat-toggle-button {\n display: none; // Initialy hidden, ultimately determined on load\n width: var(--size-toggle-button, 48px);\n height: var(--size-toggle-button, 48px);\n border: 1px solid var(--stamp-color-border-button-secondary-default, #6161FF);\n background: var(--stamp-color-background-switchButton-active-disabled, #F1F1F2);\n box-shadow: 0px 2px 6px 0px rgba(31, 30, 47, 0.15);\n bottom: var(--position-bottom-offset, 14px);\n\n &:focus {\n box-shadow: 0px 2px 6px 0px rgba(31, 30, 47, 0.15);\n }\n\n // Hide default icon\n svg {\n display: none;\n }\n\n &::after {\n content: '';\n background-image: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"37\" height=\"33\" viewBox=\"0 0 37 33\" fill=\"none\"><g id=\"Illustration/Daan/chat\"><g id=\"Group 2\"><g id=\"Basis\"><g id=\"Group\"><path id=\"Path\" d=\"M19.255 31.0069C24.8857 31.6819 35.2299 18.6698 34.5122 14.6853C33.7944 10.7009 26.2442 8.99222 26.2442 8.99222C26.2442 8.99222 14.82 5.83556 12.1293 9.98467C9.43867 14.1338 15.1707 30.5182 19.255 31.0069Z\" fill=\"%23FF8D00\"/><path id=\"Path_2\" d=\"M28.729 25.1938C32.1936 21.4016 34.8959 16.783 34.5167 14.6804C33.7982 10.7016 26.2487 8.98723 26.2487 8.98723C26.2487 8.98723 14.8246 5.83058 12.1339 9.97968L28.729 25.1938Z\" fill=\"%23F56900\"/><g id=\"Oval\" style=\"mix-blend-mode:multiply\" opacity=\"0.7\"><path d=\"M21.315 23.6749C24.2961 24.0939 27.0524 22.0168 27.4714 19.0357C27.8904 16.0545 25.8133 13.2982 22.8322 12.8792C19.851 12.4602 17.0947 14.5373 16.6757 17.5184C16.2568 20.4996 18.3338 23.2559 21.315 23.6749Z\" fill=\"%23EBECEF\"/></g><path id=\"Path (Stroke)\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M19.7077 12.3233C19.7079 12.3233 19.7081 12.3232 19.5598 11.8005C19.4116 11.2777 19.4118 11.2777 19.4121 11.2776L19.4126 11.2775L19.4139 11.2771L19.4174 11.2761C19.42 11.2754 19.4235 11.2745 19.4276 11.2733C19.436 11.2711 19.4473 11.2681 19.4615 11.2645C19.4898 11.2573 19.5298 11.2476 19.5807 11.2363C19.6824 11.2136 19.8281 11.1845 20.0128 11.1559C20.382 11.0988 20.9082 11.0439 21.5514 11.0486C22.8383 11.058 24.5976 11.3063 26.5007 12.2557L26.0156 13.2281C24.2879 12.3662 22.698 12.1438 21.5434 12.1353C20.966 12.1311 20.4984 12.1804 20.1789 12.2298C20.0193 12.2545 19.897 12.2792 19.8168 12.297C19.7767 12.3059 19.7472 12.3132 19.7289 12.3178C19.7197 12.3201 19.7134 12.3218 19.7099 12.3228L19.7069 12.3236L19.7074 12.3234L19.7077 12.3233ZM19.7068 12.3236L19.7069 12.3236C19.7067 12.3236 19.7066 12.3236 19.7068 12.3236Z\" fill=\"%23FDD732\"/><path id=\"Path_3\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M23.6818 25.8791C22.6576 26.2683 20.3192 26.5944 18.3891 24.7527C18.503 26.14 19.1955 27.0346 20.4665 27.4365C21.7375 27.8384 22.8092 27.3193 23.6818 25.8791Z\" fill=\"%23001A73\"/><path id=\"Path (Stroke)_2\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M18.1691 24.2918C18.3604 24.2005 18.5883 24.2369 18.7417 24.3832C20.4784 26.0405 22.5835 25.7502 23.5003 25.4017C23.7041 25.3243 23.9346 25.3847 24.0742 25.5522C24.2137 25.7197 24.2316 25.9573 24.1186 26.1438C23.6515 26.9148 23.1004 27.4914 22.4462 27.8082C21.7785 28.1317 21.0564 28.1587 20.3125 27.9235C19.5961 27.6969 19.0106 27.3201 18.59 26.7768C18.1707 26.235 17.9433 25.5639 17.8801 24.7945C17.8627 24.5832 17.9777 24.3832 18.1691 24.2918ZM19.3313 26.0605C19.3527 26.0917 19.3749 26.122 19.3978 26.1516C19.6697 26.5028 20.066 26.7742 20.6205 26.9496C21.1477 27.1163 21.5969 27.0847 22.0009 26.889C22.1153 26.8336 22.2298 26.7632 22.3443 26.6764C21.4566 26.7396 20.3854 26.6163 19.3313 26.0605Z\" fill=\"%23001A73\"/><g id=\"Path_4\" style=\"mix-blend-mode:multiply\"><path d=\"M21.3979 9.17984C21.4485 9.01246 21.7272 8.69876 22.6728 8.84133C23.3762 8.9402 23.7449 9.39336 23.767 9.56709L21.3979 9.17984Z\" fill=\"%23F7F7F8\"/></g><path id=\"Path (Stroke)_3\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M23.9822 6.70842C23.895 6.11241 23.7467 5.52694 23.5398 4.96125L22.9267 5.18554C23.1186 5.70994 23.2559 6.2527 23.3366 6.80524L23.337 6.80777L23.3374 6.81029C23.4817 7.70081 23.3453 8.74643 23.2213 9.47716L23.865 9.58634C23.9895 8.85195 24.1446 7.71403 23.9822 6.70842Z\" fill=\"%23303DB9\"/><path id=\"Oval_2\" d=\"M23.39 6.63505C24.4684 6.78661 25.4655 6.03525 25.617 4.95683C25.7686 3.87841 25.0172 2.88131 23.9388 2.72975C22.8604 2.57819 21.8633 3.32955 21.7117 4.40797C21.5602 5.48639 22.3115 6.48349 23.39 6.63505Z\" fill=\"%23F56900\"/><path id=\"Oval_3\" d=\"M21.3955 23.1026C24.0605 23.4771 26.5246 21.6203 26.8992 18.9552C27.2737 16.2902 25.4169 13.8261 22.7518 13.4515C20.0868 13.0769 17.6227 14.9338 17.2481 17.5989C16.8735 20.2639 18.7304 22.728 21.3955 23.1026Z\" fill=\"white\"/><path id=\"Oval_4\" d=\"M20.2252 19.8476C21.605 20.0416 22.8808 19.0802 23.0747 17.7004C23.2686 16.3207 22.3073 15.0449 20.9275 14.851C19.5477 14.6571 18.272 15.6184 18.078 16.9982C17.8841 18.378 18.8455 19.6537 20.2252 19.8476Z\" fill=\"%23001A73\"/></g></g><g id=\"Chat bubble\"><path id=\"Fill 1\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M19.0655 5.99755C19.4829 8.96756 18.02 11.578 14.6762 13.0363L14.6817 13.1368C14.7387 14.0857 14.9131 14.8891 15.6798 15.3809C13.9487 15.6367 12.9083 14.676 12.3952 13.8734L12.155 13.9261C11.7721 14.0092 11.1832 14.1331 10.9272 14.1691C5.89767 14.876 1.38705 12.3636 0.852103 8.55728C0.317201 4.75126 3.96056 1.09271 8.99027 0.385826C14.0202 -0.321083 18.5306 2.19131 19.0655 5.99755Z\" fill=\"%23303DB9\"/><path id=\"Shape\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.71095 6.88698C6.37342 6.88698 6.91046 7.42401 6.91046 8.08648C6.91046 8.74895 6.37342 9.28599 5.71095 9.28599C5.04848 9.28599 4.51144 8.74895 4.51144 8.08648C4.51144 7.42401 5.04848 6.88698 5.71095 6.88698ZM9.93778 6.20155C10.6002 6.20155 11.1373 6.73858 11.1373 7.40105C11.1373 8.06352 10.6002 8.60056 9.93778 8.60056C9.27531 8.60056 8.73828 8.06352 8.73828 7.40105C8.73828 6.73858 9.27531 6.20155 9.93778 6.20155ZM14.1646 5.51611C14.8271 5.51611 15.3641 6.05315 15.3641 6.71562C15.3641 7.37809 14.8271 7.91513 14.1646 7.91513C13.5021 7.91513 12.9651 7.37809 12.9651 6.71562C12.9651 6.05315 13.5021 5.51611 14.1646 5.51611Z\" fill=\"white\"/></g></g></g></svg>');\n background-repeat: no-repeat;\n background-position: center;\n background-size: 90%;\n position: absolute;\n top: 0;\n right: 0;\n left: 5px; // Small offset cause Daan is symmetrically challenged\n bottom: 0;\n }\n\n .webchat-unread-message-badge {\n background-color: var(--stamp-color-background-notification, red);\n width: 25px;\n height: 25px;\n top: -7px;\n right: -7px;\n font-size: 1rem;\n font-weight: 400;\n }\n}\n\n// Toggle button - Overrides when chat is open\n[data-cognigy-webchat-root]:has(#webchatWindow) {\n\n button.webchat-toggle-button::after {\n background-image: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"32\" viewBox=\"0 0 28 32\" fill=\"none\"><g id=\"Neutraal\"><path id=\"Path\" d=\"M12.716 31.7899C20.8227 31.7899 28.2702 16.479 26.8622 12.1995C25.4542 7.92005 16.8696 7.20752 16.8696 7.20752C16.8696 7.20752 3.79444 5.50299 1.46484 10.4865C-0.864758 15.4699 4.75017 31.7899 12.716 31.7899Z\" fill=\"%23FF8D00\"/><path id=\"Path_2\" d=\"M22.4376 24.8971C26.0643 19.8902 27.6088 14.4545 26.8664 12.1953C25.4605 7.9158 16.876 7.20326 16.876 7.20326C16.876 7.20326 3.79867 5.4966 1.4776 10.4822\" fill=\"%23F56900\"/><g id=\"Path_3\" style=\"mix-blend-mode:multiply\"><path d=\"M11.562 8.17406C11.5919 7.98206 11.85 7.5938 12.9124 7.60446C13.7039 7.60446 14.1796 8.0482 14.2308 8.24446L11.562 8.17406Z\" fill=\"%23F7F7F8\"/></g><path id=\"Path (Stroke)\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M14.0252 5.04387C13.8352 4.401 13.5811 3.77885 13.2667 3.18677L12.626 3.52694C12.918 4.07676 13.1539 4.65455 13.3303 5.25158L13.3309 5.25386L13.3316 5.25612C13.6281 6.21362 13.6398 7.38731 13.6164 8.21055L14.3414 8.23116C14.3649 7.40378 14.3595 6.12535 14.0252 5.04387Z\" fill=\"%23303DB9\"/><path id=\"Oval\" d=\"M13.3602 5.05288C14.5714 5.05288 15.5533 4.07101 15.5533 2.85981C15.5533 1.64862 14.5714 0.666748 13.3602 0.666748C12.149 0.666748 11.1672 1.64862 11.1672 2.85981C11.1672 4.07101 12.149 5.05288 13.3602 5.05288Z\" fill=\"%23F56900\"/><g id=\"Oval_2\" style=\"mix-blend-mode:multiply\"><path d=\"M13.469 24.4789C16.8375 24.4789 19.5682 21.7482 19.5682 18.3797C19.5682 15.0112 16.8375 12.2805 13.469 12.2805C10.1005 12.2805 7.36981 15.0112 7.36981 18.3797C7.36981 21.7482 10.1005 24.4789 13.469 24.4789Z\" fill=\"%23EBECEF\"/></g><path id=\"Oval_3\" d=\"M13.5117 23.6875C16.443 23.6875 18.8194 21.3111 18.8194 18.3798C18.8194 15.4484 16.443 13.072 13.5117 13.072C10.5803 13.072 8.20392 15.4484 8.20392 18.3798C8.20392 21.3111 10.5803 23.6875 13.5117 23.6875Z\" fill=\"white\"/><path id=\"Oval_4\" d=\"M13.5096 21.1189C15.0236 21.1189 16.2509 19.8916 16.2509 18.3776C16.2509 16.8636 15.0236 15.6362 13.5096 15.6362C11.9956 15.6362 10.7682 16.8636 10.7682 18.3776C10.7682 19.8916 11.9956 21.1189 13.5096 21.1189Z\" fill=\"%23001A73\"/><path id=\"Path (Stroke)_2\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.1541 12.1522C10.1542 12.1522 10.1544 12.1521 9.93833 11.5872C9.72225 11.0223 9.72245 11.0223 9.72267 11.0222L9.72317 11.022L9.72444 11.0215L9.72798 11.0202L9.73909 11.016C9.74827 11.0126 9.76099 11.008 9.77714 11.0022C9.80944 10.9907 9.85548 10.9746 9.91439 10.9552C10.0322 10.9162 10.2016 10.8634 10.4158 10.8053C10.8437 10.689 11.4526 10.5506 12.1861 10.4584C13.6489 10.2744 15.6346 10.2709 17.6732 11.0195L17.2562 12.155C15.4548 11.4934 13.6773 11.4899 12.337 11.6585C11.6689 11.7425 11.1161 11.8685 10.7329 11.9726C10.5414 12.0246 10.3929 12.071 10.2941 12.1036C10.2447 12.12 10.2078 12.1328 10.1842 12.1413C10.1724 12.1455 10.164 12.1486 10.159 12.1504L10.1541 12.1522ZM10.1538 12.1523L10.1541 12.1522C10.1538 12.1523 10.1537 12.1524 10.1536 12.1524L10.1538 12.1523ZM10.1536 12.1524C10.1536 12.1524 10.1536 12.1524 10.1536 12.1524L10.1536 12.1524Z\" fill=\"%23FDD732\"/><path id=\"Path (Stroke)_3\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M9.19225 25.14C9.37749 24.9035 9.71941 24.8619 9.95596 25.0471C11.6128 26.3445 13.2061 26.3568 14.3978 26.0552C15.0011 25.9025 15.5036 25.6678 15.8552 25.4707C16.0304 25.3725 16.1664 25.2846 16.2566 25.2228C16.3017 25.1919 16.3352 25.1676 16.3564 25.1519C16.367 25.1441 16.3745 25.1384 16.3787 25.1351L16.3825 25.1322L16.3822 25.1324M16.3822 25.1324C16.3821 25.1325 16.382 25.1326 16.3818 25.1327L16.7203 25.5586C16.3818 25.1327 16.382 25.1326 16.3822 25.1324ZM16.3828 25.1319C16.618 24.9459 16.9595 24.9853 17.1462 25.2202C17.3331 25.4554 17.294 25.7976 17.0588 25.9845L16.7227 25.5617C17.0588 25.9845 17.0585 25.9847 17.0583 25.9849L17.0578 25.9853L17.0564 25.9864L17.0528 25.9892C17.05 25.9914 17.0463 25.9943 17.0417 25.9978C17.0326 26.0048 17.0202 26.0142 17.0045 26.0259C16.973 26.0492 16.9284 26.0814 16.8715 26.1204C16.7578 26.1983 16.5942 26.3038 16.3873 26.4197C15.9747 26.651 15.3827 26.9283 14.6647 27.11C13.2137 27.4772 11.2571 27.4479 9.28517 25.9037C9.04862 25.7185 9.00702 25.3766 9.19225 25.14\" fill=\"%23001A73\"/></g></svg>');\n background-size: 65%;\n left: 2px;\n bottom: 2px;\n }\n\n // Override - Chatting to CS\n &:has(.webchat-avatar.agent) {\n button.webchat-toggle-button {\n background-color: var(--stamp-color-illustration-yellow, #FDD732);\n\n &::after {\n background-image: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"34\" height=\"40\" viewBox=\"0 0 34 40\" fill=\"none\"><g id=\"Helpdesk vrouw\"><g id=\"Group\"><path id=\"Vector\" d=\"M33.0533 39.2346C33.0533 34.0986 25.7613 29.9359 16.7653 29.9359C7.76934 29.9359 0.477341 34.0986 0.477341 39.2346C0.477341 39.2359 0.477341 39.2386 0.477341 39.2399H0.466675V49.4972H33.0413V39.5852C33.0493 39.4692 33.0547 39.3519 33.0547 39.2346H33.0533Z\" fill=\"%236161FF\"/><g id=\"Group_2\"><path id=\"Vector_2\" d=\"M22.5307 9.62396C25.5565 9.62396 28.0093 7.17108 28.0093 4.14529C28.0093 1.11951 25.5565 -1.33337 22.5307 -1.33337C19.5049 -1.33337 17.052 1.11951 17.052 4.14529C17.052 7.17108 19.5049 9.62396 22.5307 9.62396Z\" fill=\"%230E0F1B\"/><g id=\"Group_3\"><g id=\"Group_4\"><path id=\"Vector_3\" d=\"M21.8713 32.1466C21.9182 30.4852 19.8034 29.0775 17.1476 29.0024C14.4918 28.9273 12.3008 30.2132 12.2538 31.8746C12.2068 33.5359 14.3216 34.9436 16.9774 35.0187C19.6332 35.0938 21.8243 33.8079 21.8713 32.1466Z\" fill=\"%238F4E25\"/><path id=\"Vector_4\" d=\"M21.068 25.0479L21.8707 31.9159L12.264 31.7465L13.2507 24.0305L21.068 25.0479Z\" fill=\"%238F4E25\"/></g><g id=\"Group_5\"><path id=\"Vector_5\" d=\"M25.2328 17.5649C25.3911 11.9684 21.9809 7.33151 17.6159 7.20806C13.2509 7.08461 9.58407 11.5214 9.42579 17.1178C9.26752 22.7143 12.6777 27.3512 17.0427 27.4746C21.4077 27.5981 25.0745 23.1613 25.2328 17.5649Z\" fill=\"%23A86231\"/><path id=\"Vector_6\" d=\"M20.144 18.1946C20.535 18.1946 20.852 17.8776 20.852 17.4866C20.852 17.0955 20.535 16.7786 20.144 16.7786C19.753 16.7786 19.436 17.0955 19.436 17.4866C19.436 17.8776 19.753 18.1946 20.144 18.1946Z\" fill=\"%230E0F1B\"/><path id=\"Vector_7\" d=\"M14.1053 18.1946C14.4964 18.1946 14.8133 17.8776 14.8133 17.4866C14.8133 17.0955 14.4964 16.7786 14.1053 16.7786C13.7143 16.7786 13.3973 17.0955 13.3973 17.4866C13.3973 17.8776 13.7143 18.1946 14.1053 18.1946Z\" fill=\"%230E0F1B\"/><path id=\"Vector_8\" d=\"M25.2413 16.1052C25.2413 16.1052 19.9933 11.6692 12.7973 10.2079C12.7053 10.1892 10.94 11.2719 10.2547 13.2919C8.92934 17.1986 9.55067 18.3239 9.55067 18.3239C9.55067 18.3239 7.66534 14.6492 7.71067 12.6972C7.87334 5.71724 17.0173 2.4719 21.724 5.35724C22.62 5.90657 27.0987 7.88257 26.16 13.8332C25.868 15.6826 25.24 16.1052 25.24 16.1052H25.2413Z\" fill=\"%230E0F1B\"/></g></g></g><g id=\"Group_6\"><path id=\"Vector (Stroke)\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M6.91867 20.5319V26.2865C6.91867 26.5749 7.15697 26.8132 7.44534 26.8132H15.344V27.4879H7.44534C6.78437 27.4879 6.244 26.9475 6.244 26.2865V20.5319H6.91867Z\" fill=\"%23E75204\"/><path id=\"Vector (Stroke)_2\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.4171 9.13394C8.7229 10.3459 7.66133 12.2357 7.66133 14.9986V16.4546H6.98666V14.9986C6.98666 12.0361 8.1391 9.93396 10.0246 8.58522C11.8929 7.24872 14.4446 6.67725 17.2147 6.67725C19.9847 6.67725 22.5364 7.24872 24.4048 8.58522C26.2902 9.93396 27.4427 12.0361 27.4427 14.9986V16.3759H26.768V14.9986C26.768 12.2357 25.7064 10.3459 24.0122 9.13394C22.3009 7.90977 19.9073 7.35191 17.2147 7.35191C14.5221 7.35191 12.1284 7.90977 10.4171 9.13394Z\" fill=\"%23E75204\"/><g id=\"Group_7\"><path id=\"Vector_9\" d=\"M25.7907 14.6532H25.676C24.863 14.6532 24.204 15.3122 24.204 16.1252V21.2092C24.204 22.0222 24.863 22.6812 25.676 22.6812H25.7907C26.6036 22.6812 27.2627 22.0222 27.2627 21.2092V16.1252C27.2627 15.3122 26.6036 14.6532 25.7907 14.6532Z\" fill=\"%23303DB9\"/><path id=\"Vector_10\" d=\"M26.9173 15.2318C28.8147 15.2318 30.352 16.7691 30.352 18.6665C30.352 20.5638 28.8147 22.1011 26.9173 22.1011\" fill=\"%236161FF\"/></g><g id=\"Group_8\"><path id=\"Vector_11\" d=\"M8.70934 22.6812H8.82401C9.63697 22.6812 10.296 22.0221 10.296 21.2092V16.1252C10.296 15.3122 9.63697 14.6532 8.82401 14.6532H8.70934C7.89638 14.6532 7.23734 15.3122 7.23734 16.1252L7.23734 21.2092C7.23734 22.0221 7.89638 22.6812 8.70934 22.6812Z\" fill=\"%23303DB9\"/><path id=\"Vector_12\" d=\"M7.58401 15.2318C5.68667 15.2318 4.14934 16.7691 4.14934 18.6665C4.14934 20.5638 5.68667 22.1011 7.58401 22.1011\" fill=\"%236161FF\"/></g><path id=\"Vector_13\" d=\"M15.3893 28.9986C16.3923 28.9986 17.2053 28.1855 17.2053 27.1826C17.2053 26.1796 16.3923 25.3666 15.3893 25.3666C14.3864 25.3666 13.5733 26.1796 13.5733 27.1826C13.5733 28.1855 14.3864 28.9986 15.3893 28.9986Z\" fill=\"%230E0F1B\"/></g></g><path id=\"Vector_14\" d=\"M14.636 22.9012C15.66 23.3066 17.5533 23.6519 19.112 23.0026L14.636 22.9012Z\" fill=\"white\"/></g></svg>');\n background-size: contain;\n left: 0;\n bottom: 0;\n border-radius: 100%;\n border: var(--stamp-radius-xs, 4px) solid var(--stamp-color-background-switchButton-active-disabled, #F1F1F2);\n }\n }\n }\n}\n\n[data-cognigy-webchat-root] [data-cognigy-webchat] {\n width: 460px;\n height: 780px;\n\n // Hide default Cognigy branding\n #cognigyBrandingLink,\n .webchat-header-cognigy-logo {\n display: none;\n }\n\n &.webchat {\n border-radius: var(--stamp-radius-s, 6px);\n background: var(--stamp-color-background-variant, #F1F1F2);\n box-shadow: 0px 2px 6px 0px rgba(31, 30, 47, 0.15);\n\n // Reset\n * {\n border-radius: 0;\n }\n\n button {\n @include primary-button;\n }\n }\n\n // Chat container\n .webchat-chat-history {\n outline: none;\n background: var(--stamp-color-background-variant, #F1F1F2);\n\n * {\n font-family: var(--text-font-family, --text-font-family-fallback);\n font-size: var(--text-default-font-size, 16px);\n }\n\n #webchatChatHistoryWrapperLiveLogPanel > :nth-child(2) {\n // Sssttt! Don't show second div, which mentioned user is talking to an AI agent. Daan doesn't know...\n display: none;\n }\n\n article:last-of-type {\n margin-bottom: 8px;\n }\n }\n\n .webchat-typing-indicator {\n border: none;\n background: none;\n\n [class^=\"_dot\"] {\n width: 6px;\n height: 6px;\n border-radius: 100%;\n background-color: var(--stamp-color-icon-brand, #E75204);\n }\n }\n\n // Top bar\n .webchat-header-bar {\n display: flex;\n width: 100%;\n min-height: 56px;\n padding: var(--stamp-spacing-inner-m, 12px) var(--stamp-spacing-inner-xl, 24px);\n justify-content: center;\n align-items: center;\n gap: 93px;\n border-radius: var(--stamp-radius-s, 6px) var(--stamp-radius-s, 6px) 0px 0px;\n border: 0px solid var(--stamp-color-border-default, #BEC0CB);\n background: var(--stamp-color-background-subtle, #DDDEE3);\n\n .logoNameContainer {\n overflow: hidden;\n color: var(--stamp-color-heading-subtle, #1F1E2F);\n text-align: center;\n text-overflow: ellipsis;\n font-family: var(--stamp-text-body-s-default-font-family, --text-font-family-fallback);\n font-size: 18px;\n font-style: normal;\n font-weight: 700;\n line-height: 105%;\n position: absolute;\n\n // Container of minimize and close buttons\n + div:has(.webchat-header-close-button) {\n margin-left: auto;\n\n .webchat-header-minimize-button {\n background-color: unset;\n padding: 0;\n height: auto;\n }\n\n .webchat-header-close-button {\n background-color: unset;\n padding: 0;\n height: auto;\n }\n }\n }\n\n svg {\n fill: var(--stamp-color-icon-button-tertiary-default, black);\n }\n\n button:active svg{\n fill: var(--stamp-color-icon-button-tertiary-pressed, black);\n }\n }\n\n // Message rows\n .webchat-message-row {\n margin-top: 0;\n margin-left: 16px;\n margin-right: 16px;\n\n .chat-bubble {\n @include message-border;\n padding: var(--stamp-spacing-inner-m, 12px);\n margin-bottom: var(--stamp-spacing-inner-s, 8px);\n }\n\n // Bot and CS Agent Messages\n &.bot, &.agent {\n\n // First chat bubble of consecutive (grouped) messages\n &:not([class*=\"_collated\"]) {\n .chat-bubble, .webchat-list-template-root {\n border-top-left-radius: 0;\n }\n }\n\n .message-header {\n column-gap: 8px;\n margin-bottom: var(--stamp-spacing-inner-s, 8px);\n\n // Hide time indication and seperator\n [class^=\"_avatar-name\"] ~ * {\n display: none;\n }\n }\n }\n\n &.bot {\n &:has(+ .bot) {\n margin-bottom: var(--stamp-spacing-inner-s, 8px);\n }\n }\n\n &.agent {\n &:has(+ .agent) {\n margin-bottom: var(--stamp-spacing-inner-s, 8px);\n }\n }\n\n // User Messages\n &.user {\n\n &:has(+ .user) {\n margin-bottom: var(--stamp-spacing-inner-s, 8px);\n }\n // The last of consecutive (grouped) bubbles\n &[class*=\"_collated\"]:not(:has(+ .user)) .chat-bubble,\n &:not([class*=\"_collated\"]):not(:has(+ .user)) .chat-bubble {\n border-bottom-right-radius: 0;\n }\n\n .message-header {\n display: none;\n }\n\n .chat-bubble {\n background: var(--stamp-color-background-subtle, #DDDEE3);\n }\n }\n }\n\n .webchat-quick-reply-template-replies-container {\n margin: var(--stamp-spacing-inner-xl, 24px) 0 0 auto;\n justify-content: end;\n gap: var(--stamp-spacing-inner-s, 8px);\n max-width: 100%;\n padding-left: var(--stamp-spacing-inner-l, 16px);\n\n .webchat-quick-reply-template-button {\n @include seconday-button;\n\n &:disabled {\n display: none;\n }\n }\n }\n\n // Cognigy List\n .webchat-list-template-root {\n @include message-border;\n overflow: auto;\n padding-top: var(--stamp-spacing-inner-m, 12px);\n\n .webchat-list-template-element-title {\n color: var(--stamp-color-heading-default, #001A73);\n font-family: var(--text-font-family, --text-font-family-fallback);\n font-size: 16px;\n font-style: normal;\n font-weight: 700;\n line-height: 120%;\n margin-bottom: 0;\n }\n\n .webchat-list-template-element-subtitle {\n color: black;\n font-family: var(--text-font-family, --text-font-family-fallback);\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: 140%;\n }\n\n .webchat-list-template-element-content, [class^=\"_buttons\"] {\n padding: 0 var(--stamp-spacing-inner-m, 12px);\n }\n\n button.webchat-list-template-element-button {\n @include seconday-button;\n }\n\n [class^=\"_divider\"]:not(:has(+ [class*=\"_mainButtonWrapper\"])) {\n display: none;\n }\n\n [role=\"listitem\"]:has(> [class^=\"_button\"]) {\n margin-bottom: var(--stamp-spacing-inner-xl, 24px);\n\n .webchat-list-template-element-content {\n margin-bottom: var(--stamp-spacing-inner-l, 16px);\n }\n }\n\n [role=\"listitem\"] {\n margin-bottom: var(--stamp-spacing-inner-l, 16px);\n }\n\n :nth-last-child(-n + 1 of div[role=\"listitem\"]) {\n margin-bottom: var(--stamp-spacing-inner-m, 12px);\n }\n\n [class*=\"_mainButtonWrapper\"] {\n margin: var(--stamp-spacing-inner-m, 12px) 0;\n\n button {\n @include tertiary-button;\n }\n }\n }\n\n // In-chat avatars\n .webchat-avatar {\n z-index: 9;\n position: relative;\n width: 0;\n height: 0;\n border-radius: 0;\n padding: 32px 32px 0 0;\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n background-color: unset;\n\n &.bot {\n background-image:url('data:image/svg+xml,<svg width=\"27\" height=\"32\" viewBox=\"0 0 27 32\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"Basis\"><path id=\"Path\" d=\"M11.7947 31.8932C18.0944 31.7652 27.464 15.8484 26.0581 11.5754C24.6523 7.30231 16.0805 6.58978 16.0805 6.58978C16.0805 6.58978 3.0224 4.88311 0.703471 9.86445C-1.61546 14.8458 7.22507 31.9871 11.7947 31.8932Z\" fill=\"%23FF8D00\"/><path id=\"Path_2\" d=\"M21.32 24.032C24.5456 19.3237 26.8048 13.824 26.0624 11.569C24.6565 7.30237 16.0848 6.58343 16.0848 6.58343C16.0848 6.58343 3.02667 4.87677 0.707733 9.8581L21.32 24.032Z\" fill=\"%23FF5100\"/><g id=\"Oval\" style=\"mix-blend-mode:multiply\" opacity=\"0.7\"><path d=\"M12.9275 23.5071C16.2724 23.5071 18.984 20.7955 18.984 17.4506C18.984 14.1056 16.2724 11.394 12.9275 11.394C9.58254 11.394 6.87094 14.1056 6.87094 17.4506C6.87094 20.7955 9.58254 23.5071 12.9275 23.5071Z\" fill=\"%23D3DAE4\"/></g><path id=\"Path_3\" d=\"M9.16 10.7136C9.16 10.7136 12.4005 9.28213 16.6757 10.7136\" stroke=\"%23FFD800\" stroke-width=\"1.20747\"/><path id=\"Path_4\" d=\"M15.6795 25.4207C14.6128 26.0074 12.2832 26.8735 9.87469 25.1455\" stroke=\"%23000C35\" stroke-width=\"1.13493\" stroke-linecap=\"round\"/><g id=\"Path_5\" style=\"mix-blend-mode:multiply\"><path d=\"M10.7771 7.54565C10.807 7.35365 11.0651 6.96538 12.1275 6.97605C12.9168 6.97605 13.3926 7.41765 13.4438 7.60538L10.7771 7.54565Z\" fill=\"%23E2E1E9\"/></g><path id=\"Path_6\" d=\"M13.1921 7.60101C13.2155 6.77541 13.207 5.55087 12.8913 4.53114C12.7101 3.91177 12.4656 3.3127 12.1617 2.74341\" stroke=\"%231D304C\" stroke-width=\"0.725333\"/><path id=\"Oval_2\" d=\"M12.5755 4.43729C13.7855 4.43729 14.7664 3.45637 14.7664 2.24635C14.7664 1.03633 13.7855 0.0554199 12.5755 0.0554199C11.3654 0.0554199 10.3845 1.03633 10.3845 2.24635C10.3845 3.45637 11.3654 4.43729 12.5755 4.43729Z\" fill=\"%23FF5100\"/><path id=\"Oval_3\" d=\"M12.9275 22.8649C15.9178 22.8649 18.3419 20.4408 18.3419 17.4505C18.3419 14.4602 15.9178 12.0361 12.9275 12.0361C9.93717 12.0361 7.51306 14.4602 7.51306 17.4505C7.51306 20.4408 9.93717 22.8649 12.9275 22.8649Z\" fill=\"white\"/><path id=\"Oval_4\" d=\"M14.1349 19.4646C15.6831 19.4646 16.9381 18.2095 16.9381 16.6614C16.9381 15.1132 15.6831 13.8582 14.1349 13.8582C12.5868 13.8582 11.3317 15.1132 11.3317 16.6614C11.3317 18.2095 12.5868 19.4646 14.1349 19.4646Z\" fill=\"%23000C35\"/></g></svg>');\n }\n\n &.agent {\n background-color: var(--stamp-color-illustration-yellow, #FDD732);\n border-radius: 100%;\n background-image: url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"34\" height=\"40\" viewBox=\"0 0 34 40\" fill=\"none\"><g id=\"Helpdesk vrouw\"><g id=\"Group\"><path id=\"Vector\" d=\"M33.0533 39.2346C33.0533 34.0986 25.7613 29.9359 16.7653 29.9359C7.76934 29.9359 0.477341 34.0986 0.477341 39.2346C0.477341 39.2359 0.477341 39.2386 0.477341 39.2399H0.466675V49.4972H33.0413V39.5852C33.0493 39.4692 33.0547 39.3519 33.0547 39.2346H33.0533Z\" fill=\"%236161FF\"/><g id=\"Group_2\"><path id=\"Vector_2\" d=\"M22.5307 9.62396C25.5565 9.62396 28.0093 7.17108 28.0093 4.14529C28.0093 1.11951 25.5565 -1.33337 22.5307 -1.33337C19.5049 -1.33337 17.052 1.11951 17.052 4.14529C17.052 7.17108 19.5049 9.62396 22.5307 9.62396Z\" fill=\"%230E0F1B\"/><g id=\"Group_3\"><g id=\"Group_4\"><path id=\"Vector_3\" d=\"M21.8713 32.1466C21.9182 30.4852 19.8034 29.0775 17.1476 29.0024C14.4918 28.9273 12.3008 30.2132 12.2538 31.8746C12.2068 33.5359 14.3216 34.9436 16.9774 35.0187C19.6332 35.0938 21.8243 33.8079 21.8713 32.1466Z\" fill=\"%238F4E25\"/><path id=\"Vector_4\" d=\"M21.068 25.0479L21.8707 31.9159L12.264 31.7465L13.2507 24.0305L21.068 25.0479Z\" fill=\"%238F4E25\"/></g><g id=\"Group_5\"><path id=\"Vector_5\" d=\"M25.2328 17.5649C25.3911 11.9684 21.9809 7.33151 17.6159 7.20806C13.2509 7.08461 9.58407 11.5214 9.42579 17.1178C9.26752 22.7143 12.6777 27.3512 17.0427 27.4746C21.4077 27.5981 25.0745 23.1613 25.2328 17.5649Z\" fill=\"%23A86231\"/><path id=\"Vector_6\" d=\"M20.144 18.1946C20.535 18.1946 20.852 17.8776 20.852 17.4866C20.852 17.0955 20.535 16.7786 20.144 16.7786C19.753 16.7786 19.436 17.0955 19.436 17.4866C19.436 17.8776 19.753 18.1946 20.144 18.1946Z\" fill=\"%230E0F1B\"/><path id=\"Vector_7\" d=\"M14.1053 18.1946C14.4964 18.1946 14.8133 17.8776 14.8133 17.4866C14.8133 17.0955 14.4964 16.7786 14.1053 16.7786C13.7143 16.7786 13.3973 17.0955 13.3973 17.4866C13.3973 17.8776 13.7143 18.1946 14.1053 18.1946Z\" fill=\"%230E0F1B\"/><path id=\"Vector_8\" d=\"M25.2413 16.1052C25.2413 16.1052 19.9933 11.6692 12.7973 10.2079C12.7053 10.1892 10.94 11.2719 10.2547 13.2919C8.92934 17.1986 9.55067 18.3239 9.55067 18.3239C9.55067 18.3239 7.66534 14.6492 7.71067 12.6972C7.87334 5.71724 17.0173 2.4719 21.724 5.35724C22.62 5.90657 27.0987 7.88257 26.16 13.8332C25.868 15.6826 25.24 16.1052 25.24 16.1052H25.2413Z\" fill=\"%230E0F1B\"/></g></g></g><g id=\"Group_6\"><path id=\"Vector (Stroke)\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M6.91867 20.5319V26.2865C6.91867 26.5749 7.15697 26.8132 7.44534 26.8132H15.344V27.4879H7.44534C6.78437 27.4879 6.244 26.9475 6.244 26.2865V20.5319H6.91867Z\" fill=\"%23E75204\"/><path id=\"Vector (Stroke)_2\" fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.4171 9.13394C8.7229 10.3459 7.66133 12.2357 7.66133 14.9986V16.4546H6.98666V14.9986C6.98666 12.0361 8.1391 9.93396 10.0246 8.58522C11.8929 7.24872 14.4446 6.67725 17.2147 6.67725C19.9847 6.67725 22.5364 7.24872 24.4048 8.58522C26.2902 9.93396 27.4427 12.0361 27.4427 14.9986V16.3759H26.768V14.9986C26.768 12.2357 25.7064 10.3459 24.0122 9.13394C22.3009 7.90977 19.9073 7.35191 17.2147 7.35191C14.5221 7.35191 12.1284 7.90977 10.4171 9.13394Z\" fill=\"%23E75204\"/><g id=\"Group_7\"><path id=\"Vector_9\" d=\"M25.7907 14.6532H25.676C24.863 14.6532 24.204 15.3122 24.204 16.1252V21.2092C24.204 22.0222 24.863 22.6812 25.676 22.6812H25.7907C26.6036 22.6812 27.2627 22.0222 27.2627 21.2092V16.1252C27.2627 15.3122 26.6036 14.6532 25.7907 14.6532Z\" fill=\"%23303DB9\"/><path id=\"Vector_10\" d=\"M26.9173 15.2318C28.8147 15.2318 30.352 16.7691 30.352 18.6665C30.352 20.5638 28.8147 22.1011 26.9173 22.1011\" fill=\"%236161FF\"/></g><g id=\"Group_8\"><path id=\"Vector_11\" d=\"M8.70934 22.6812H8.82401C9.63697 22.6812 10.296 22.0221 10.296 21.2092V16.1252C10.296 15.3122 9.63697 14.6532 8.82401 14.6532H8.70934C7.89638 14.6532 7.23734 15.3122 7.23734 16.1252L7.23734 21.2092C7.23734 22.0221 7.89638 22.6812 8.70934 22.6812Z\" fill=\"%23303DB9\"/><path id=\"Vector_12\" d=\"M7.58401 15.2318C5.68667 15.2318 4.14934 16.7691 4.14934 18.6665C4.14934 20.5638 5.68667 22.1011 7.58401 22.1011\" fill=\"%236161FF\"/></g><path id=\"Vector_13\" d=\"M15.3893 28.9986C16.3923 28.9986 17.2053 28.1855 17.2053 27.1826C17.2053 26.1796 16.3923 25.3666 15.3893 25.3666C14.3864 25.3666 13.5733 26.1796 13.5733 27.1826C13.5733 28.1855 14.3864 28.9986 15.3893 28.9986Z\" fill=\"%230E0F1B\"/></g></g><path id=\"Vector_14\" d=\"M14.636 22.9012C15.66 23.3066 17.5533 23.6519 19.112 23.0026L14.636 22.9012Z\" fill=\"white\"/></g></svg>');\n background-size: contain;\n }\n\n // Name container\n & + div {\n color: var(--stamp-color-heading-subtle, #1F1E2F);\n font-feature-settings: 'ss01' on, 'ss03' on;\n font-size: 14px;\n font-style: normal;\n font-weight: 400;\n line-height: 160%;\n }\n }\n\n // Container user input\n .webchat-input {\n border-top: 1px solid var(--stamp-color-border-default, #BEC0CB);\n border-bottom: none;\n background: var(--stamp-color-background-variant, #F1F1F2);\n padding: var(--stamp-spacing-inner-xL, 24px);\n gap: 10px;\n\n // Input field\n textarea {\n --line-height: 1.4em;\n --border-width: 1px;\n display: flex;\n padding: var(--stamp-spacing-inner-s, 8px);\n max-height: calc(4 * var(--line-height, 1.4em) + 2 * var(--stamp-spacing-inner-s, 8px) + 2 * var(--border-width, 1px));\n justify-content: center;\n align-items: center;\n flex: 1 0 0;\n align-self: stretch;\n border-radius: 4px;\n border: var(--border-width, 1px) solid var(--stamp-color-border-default, #BEC0CB);\n background: var(--stamp-color-background-surface, #FFF);\n\n &:hover {\n border: var(--border-width, 1px) solid var(--stamp-color-border-hover, #6161FF);\n }\n\n &:focus {\n @include button-focus;\n }\n\n &:disabled {\n background-color: var(--stamp-color-background-disabled, #F1F1F2);\n border: var(--border-width, 1px) solid var(--stamp-color-border-default, #BEC0CB);\n cursor: not-allowed;\n }\n }\n\n // Send button\n button {\n display: flex;\n position: relative;\n width: 40px;\n padding: var(--stamp-spacing-inner-s, 8px);\n background-color: var(--stamp-color-background-button-primary-default, #6161FF);\n text-decoration: none;\n\n // Hide default\n svg {\n display: none;\n }\n\n // Icon\n &::after {\n content: '';\n mask-image: url(https://cdn.postnl.nl/images/icons/svg/paper-plane.svg);\n mask-position: center;\n mask-repeat: no-repeat;\n mask-size: 60%;\n background-color: white;\n position: absolute;\n top: 0;\n right: 0;\n left: 0;\n bottom: 0;\n }\n }\n\n form {\n align-items: stretch;\n\n > * {\n min-height: 64px;\n }\n }\n }\n}\n\n@media (width <= 880px) {\n [data-cognigy-webchat-root] [data-cognigy-webchat] {\n &.webchat {\n border-radius: 0;\n box-shadow: none;\n width: 100vw;\n height: 100vh;\n width: 100svw;\n height: 100svh;\n position: fixed;\n top: 0;\n left: 0;\n }\n }\n}\n\n\n@media (width <= 327px) {\n .webchat-message-row .chat-bubble {\n width: fit-content;\n }\n}\n\n// 576px is the breakpoint WebChat uses to go full-screen\n@media (width <= 576px) {\n // Disable scrolling on the body, set its height to just the display port.\n body.webchat-open {\n height: 100dvh;\n overflow: hidden;\n }\n}\n\n@import \"./styles\";\n","import { Component, Listen, Prop } from \"@stencil/core\";\nimport { SwpChatbotWindowSettings, WebchatOptions, WebChatReadyEvent } from \"./webchat-options.model\";\nimport { DefaultEventHandlerConfigs } from \"./webchat-event-handlers\";\nimport { ContentStackConfigService } from \"../../services/content-stack-configuration-service\";\nimport { Environments, IConfigurationService } from \"../../services/configuration-service.model\"\nimport { IsValidStringValue } from \"./property-helper\";\nimport { ChatSessionService, ChatWindowState, HeaderState, InputState } from \"../../services/chat-session.service\";\nimport { AnalyticsService } from \"../../services/analytics-service\";\nimport { forwardAccessTokenFromUserMenu } from \"./event-handlers/get-access-token-handler\";\nimport { withGlobalFunctions } from \"./decorators/with-global-functions\";\n\n@Component({\n tag: 'swp-chatbot-window',\n styleUrl: 'swp-chatbot-window.scss',\n shadow: false,\n})\nexport class SwpChatbotWindow {\n /**\n * Cognigy endpoint url. Mandatory if property chatbotEndpointName is unspecified. Takes precedence over chatbotEndpointName + environment.\n */\n @Prop({ mutable: true, reflect: true }) cognigyConfigUrl: string;\n\n /**\n * The chatbot endpoint name refers to the Cognigy endpoints configuration in ContentStack you want to use. This points to a Cognigy endpoint url.\n * Mandatory if property cognigyConfigUrl is unspecified. Takes precedence over the data-chatbot-endpoint-name attribute on the script tag.\n *\n * You can also specify this value in the data-chatbot-endpoint-name attribute that loads this script tag.\n * E.g. `<script src=\"..\" data-chatbot-endpoint-name=\"daan-prod\">`.\n */\n @Prop({ mutable: true, reflect: true }) chatbotEndpointName: string;\n\n /**\n * Specifies what ContentStack environment the configuration will load.\n * Defaults to 'prod'. Only use for testing and development purposes!\n */\n @Prop({ mutable: true, reflect: true }) environment: Environments = 'prod';\n\n /**\n * Options object to pass along to Cognigy WebChat.\n * See https://github.com/Cognigy/WebchatWidget/blob/v3/docs/embedding.md#client-side-configuration\n */\n @Prop({ mutable: true }) options: WebchatOptions = { eventHandlerConfigs: [], deviceMinWidthToFocusInput: 880 };\n\n /**\n * Start a specific feature flow. Do not specify if you want the main flow to start.\n */\n @Prop({ mutable: true, reflect: true }) featureFlow: string | undefined;\n\n /**\n * Hides that chat bubble if set to true.\n */\n @Prop({ mutable: true, reflect: true }) hideBubbleWhenClosed: boolean = false;\n\n private webchat: any;\n\n private configurationService: IConfigurationService = ContentStackConfigService;\n private chatSessionService: ChatSessionService;\n private analyticsService: AnalyticsService;\n\n @Listen('postnl:webchat:settings:update', { target: 'window' })\n async updateSettings(event: CustomEvent<SwpChatbotWindowSettings>): Promise<void> {\n this.cognigyConfigUrl = event.detail.cognigyConfigUrl;\n this.chatbotEndpointName = event.detail.chatbotEndpointName;\n this.environment = IsValidStringValue(event.detail.environment) ? event.detail.environment : \"prod\";\n this.options = Object.assign(this.options ?? {}, event.detail.options);\n this.featureFlow = event.detail.featureFlow;\n this.hideBubbleWhenClosed = event.detail.hideBubbleWhenClosed;\n\n this.webchat.close();\n await this.reinitialize();\n }\n\n @Listen('postnl:webchat:open', { target: 'window' })\n async open(event: CustomEvent<{ analyticsName: any }>) {\n if (this.chatSessionService.getWindowState() === ChatWindowState.Open) return;\n\n let analyticsName = event.detail?.analyticsName || 'Start de chat via javascript';\n if (!this.chatSessionService.popIsNewSession()) {\n analyticsName = `Verder met gesprek (${analyticsName})`;\n }\n this.analyticsService.dispatchFrontEndAnalytics(analyticsName);\n\n this.webchat.open();\n this.webchat.startConversation();\n\n this.changeBubbleVisibility(true);\n }\n\n @Listen('postnl:webchat:close', { target: 'window' })\n async close() {\n this.webchat.close();\n }\n\n componentDidLoad() {\n const webchatScript = document.createElement('script');\n webchatScript.src = 'https://github.com/Cognigy/Webchat/releases/download/v3.6.0/webchat.js';\n webchatScript.async = true;\n webchatScript.onload = this.onWebchatScriptLoad.bind(this);\n\n document.head.appendChild(webchatScript);\n }\n\n private async reinitialize(): Promise<void> {\n this.cleanUpWebchat();\n this.chatSessionService.reset();\n // Load it again\n return this.onWebchatScriptLoad();\n }\n\n private cleanUpWebchat() {\n // Remove any divs that contain the chat bubble\n document\n .querySelectorAll('div[data-cognigy-webchat-root]')\n .forEach(div => div.parentElement.remove());\n }\n\n private async onWebchatScriptLoad(): Promise<void> {\n if (typeof window.initWebchat !== 'function') {\n console.error('Cognigy WebchatWidget scripts loaded but initWebchat() is not a function');\n return;\n }\n\n this.updateOptions();\n return this.loadWebchat();\n }\n\n private updateOptions() {\n this.setOptionDefaults();\n this.setFeatureFlow();\n }\n\n private setOptionDefaults() {\n this.options.settings ??= {};\n this.options.settings.widgetSettings ??= {};\n this.options.settings.widgetSettings.disableInputAutofocus ??= true; // Disable autofocus input field for mobile users\n\n // The default local storage seems to be an infinitly growing collection...\n // Use session storage instead. We don't support continueing conversations after browser close anyway.\n this.options.settings.embeddingConfiguration ??= {};\n this.options.settings.embeddingConfiguration.useSessionStorage = true;\n }\n\n private setFeatureFlow() {\n this.options.settings.startBehavior = {};\n if (IsValidStringValue(this.featureFlow)) {\n this.options.settings.startBehavior.startBehavior = \"injection\";\n this.options.settings.startBehavior.getStartedText = \"\";\n this.options.settings.startBehavior.getStartedData = { featureFlow: this.featureFlow }\n }\n }\n\n private async loadWebchat(): Promise<void> {\n const endpoint = IsValidStringValue(this.cognigyConfigUrl)\n ? this.cognigyConfigUrl\n : await this.getChatbotEndpointUrlFromConfiguration();\n\n if (!IsValidStringValue(endpoint)) {\n console.error('Either chatbot-endpoint-name or cognigy-config-url is required');\n return;\n }\n\n const key = encodeURI(endpoint);\n this.chatSessionService = new ChatSessionService(key);\n this.chatSessionService.updateHeaderState();\n\n const sessionId = await this.chatSessionService.restoreSessionFromApp() ||\n this.chatSessionService.getSessionId() ||\n this.chatSessionService.createNewSessionId();\n\n this.analyticsService = new AnalyticsService(() => sessionId);\n\n const options = {\n ...this.options,\n sessionId\n };\n\n const webchat = await window.initWebchat(endpoint, options);\n this.onWebchatLoaded(webchat);\n }\n\n private async getChatbotEndpointUrlFromConfiguration() {\n const chatbotEndpointName = this.chatbotEndpointName ?? document.querySelector('script[data-chatbot-endpoint-name]')?.getAttribute('data-chatbot-endpoint-name');\n if (!chatbotEndpointName) {\n return undefined;\n }\n\n const config = await this.configurationService.GetEndpointConfig(this.environment, { chatbotEndpointName });\n return config.endpointUrl;\n }\n\n private onWebchatLoaded(webchat: any): void {\n this.webchat = webchat;\n\n this.onWebchatRootAdded(() => {\n const showBubble = this.chatSessionService.getWindowState() === ChatWindowState.Closed ? !this.hideBubbleWhenClosed : true;\n this.changeBubbleVisibility(showBubble);\n this.changeHeaderVisibility();\n this.addToggleBehavior();\n });\n\n this.registerDefaultEventHandlers();\n webchat.registerAnalyticsService(event => this.handleEvent(event));\n\n const state = this.chatSessionService.getWindowState();\n if (state === ChatWindowState.Open) {\n webchat.open();\n webchat.startConversation();\n }\n\n this.afterLoad(webchat);\n }\n\n private changeHeaderVisibility(): void {\n const headerState = this.chatSessionService.getHeaderState();\n const chatbotHeader = document.getElementsByClassName('webchat-header-bar')?.[0] as HTMLElement;\n\n if (chatbotHeader) {\n chatbotHeader.style.display = headerState === HeaderState.Hidden ? 'none': 'flex';\n }\n }\n\n private addToggleBehavior() {\n const bubble = document.querySelector('button[data-cognigy-webchat-toggle]');\n bubble.addEventListener('click', () => {\n if (this.chatSessionService.getWindowState() === ChatWindowState.Open) {\n // When clicking on the bubble while window is open, it acts as minimize\n this.chatSessionService.setWindowState(ChatWindowState.Minimized);\n this.analyticsService.dispatchFrontEndAnalytics('Gesprek verbergen (bubble)');\n } else if (this.chatSessionService.popIsNewSession()) {\n // Starting a new session via the bubble\n this.analyticsService.dispatchFrontEndAnalytics('Start de chat (bubble)');\n } else {\n // Continue existing session via the bubble\n this.analyticsService.dispatchFrontEndAnalytics('Verder met gesprek (bubble)');\n }\n });\n }\n\n private registerDefaultEventHandlers() {\n if (this.options.eventHandlerConfigs == null) {\n this.options.eventHandlerConfigs = [];\n }\n for (const config of DefaultEventHandlerConfigs) {\n if (this.options.eventHandlerConfigs.find(_config => _config.eventId === config.eventId)) {\n continue;\n }\n this.options.eventHandlerConfigs.push(config);\n }\n }\n\n private handleEvent(event: any) {\n if (this.isCustomEvent(event)) {\n this.handleCustomEvent(event);\n }\n else if (event.type === 'webchat/open') { // webchat/open does not actually fire when it has opened but when it's about to\n this.onWebchatOpen(this.handleOpenEvent.bind(this));\n this.changeHeaderVisibility();\n }\n else if (event.type === 'webchat/close') {\n this.handleCloseEvent();\n }\n }\n\n private handleOpenEvent() {\n if (this.isAutoFocusInputDisabled()) {\n this.focusInputOnLargeDevice(); // We focus the input field since auto focus should only be disabled for mobile.\n }\n\n this.disableBackgroundScrolling();\n this.changeHeaderVisibility();\n\n // Webchat will be readded back to the DOM so we need to add the button behavior again\n // This check also prevents double binding of said behavior.\n this.addButtonBehavior();\n\n this.chatSessionService.setWindowState(ChatWindowState.Open);\n // Restore the input field state\n const inputState = this.chatSessionService.getInputState() ?? InputState.Shown;\n this.chatSessionService.setInputState(inputState);\n }\n\n private addButtonBehavior() {\n this.addMinimizeBahaviour();\n this.addCloseBehaviour();\n }\n\n private addMinimizeBahaviour() {\n // You can't see the difference between minimizing and closing during the webchat/close event,\n // so the window state is set on button click events.\n // This can be used to define closing behavior (e.g. reset the persistent session).\n const minimizeButton = document.querySelector('button[data-header-minimize-button]');\n minimizeButton.addEventListener('click', () => {\n this.chatSessionService.setWindowState(ChatWindowState.Minimized);\n this.analyticsService.dispatchFrontEndAnalytics('Gesprek verbergen (minimize)');\n });\n }\n\n private addCloseBehaviour() {\n const closeButton = document.querySelector('button[data-header-close-button]');\n closeButton.addEventListener('click', () => {\n this.analyticsService.dispatchFrontEndAnalytics('Gesprek afsluiten (kruisje)');\n this.reinitialize();\n });\n }\n\n private handleCloseEvent(): void {\n if (this.chatSessionService.getWindowState() === ChatWindowState.Closed) {\n this.changeBubbleVisibility(!this.hideBubbleWhenClosed);\n }\n\n this.enableBackgroundScrolling();\n }\n\n private disableBackgroundScrolling() {\n document.body.classList.add('webchat-open');\n }\n\n private enableBackgroundScrolling() {\n document.body.classList.remove('webchat-open');\n }\n\n private isCustomEvent(event: any) {\n return event.type === 'webchat/incoming-message' &&\n event.payload?.data?.hasOwnProperty('eventId');\n }\n\n private isAutoFocusInputDisabled() {\n return this.options.settings.widgetSettings.disableInputAutofocus;\n }\n\n private focusInputOnLargeDevice() {\n if (screen.width > (this.options.deviceMinWidthToFocusInput ?? 880)) {\n const input = document.getElementsByClassName(\"webchat-input-message-input\")[0] as HTMLElement;\n input?.focus();\n }\n }\n\n private handleCustomEvent(event: any) {\n const handler = this.options.eventHandlerConfigs\n ?.find(config => config.eventId === event.payload.data.eventId)?.handler;\n if (handler == null) {\n console.warn(`No eventHandler for event with eventId: ${event.payload.data.eventId}`);\n return;\n }\n handler(event.payload.data, this.webchat, this.chatSessionService);\n }\n\n private changeBubbleVisibility(isVisible: boolean) {\n const chatBubble = document.getElementsByClassName('webchat-toggle-button')[0] as HTMLElement;\n\n if (!chatBubble) return;\n\n if (isVisible) {\n chatBubble.style.display = \"initial\";\n }\n else {\n chatBubble.style.display = \"none\";\n }\n }\n\n private afterLoad(webchat: any) {\n if (this.chatSessionService.popLoginTriggered()) {\n forwardAccessTokenFromUserMenu(webchat);\n }\n\n const detail: WebChatReadyEvent = {\n sessionId: webchat.client.socketOptions.sessionId,\n userId: webchat.client.socketOptions.userId\n };\n\n withGlobalFunctions();\n\n window.dispatchEvent(new CustomEvent<WebChatReadyEvent>('postnl:webchat:ready', { detail } ));\n }\n\n private onWebchatOpen(callback: Function) {\n this.onMutation(mutationRecord => (mutationRecord.addedNodes?.[0] as HTMLElement)?.classList.contains(\"webchat-root\")\n || document.getElementById('webchatWindow'), callback, true);\n }\n\n private onWebchatRootAdded(callback: Function) {\n this.onMutation(mutationRecord => (mutationRecord.addedNodes?.[0] as HTMLElement)?.classList.contains(\"webchat-root\"), callback, true);\n }\n\n private onMutation(mutationsFilter: Function, callback: Function, once: boolean) {\n const observerCallback = mutationRecords => {\n const targetMutation = mutationRecords.filter(mutationsFilter)[0];\n if (targetMutation) {\n callback();\n if (once) {\n observer.disconnect();\n }\n }\n };\n const observer = new MutationObserver(observerCallback);\n observer.observe(document.body, { childList: true, subtree: true });\n }\n}\n"],"mappings":"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","ignoreList":[]}