1<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>Sifted: European Tech News, Startups & Venture Capital</title><meta name="robots" content="index,follow"/><meta name="description" content="Sifted covers European tech, startups and venture capital with independent news, analysis, data and insights for founders, investors and operators."/><meta name="twitter:card" content="summary_large_image"/><meta name="twitter:site" content="@siftedeu"/><meta name="twitter:creator" content="@siftedeu"/><meta property="og:title" content="Sifted: European Tech News, Startups & Venture Capital"/><meta property="og:description" content="Sifted covers European tech, startups and venture capital with independent news, analysis, data and insights for founders, investors and operators."/><meta property="og:url" content="https://sifted.eu/"/><meta property="og:image" content="https://www.datocms-assets.com/60124/1687337580-sifted-on-pink.png"/><link rel="canonical" href="https://sifted.eu/"/><link rel="icon" href="/favicon.ico"/><link rel="preload" as="image" imageSrcSet="https://images.sifted.eu/cdn-cgi/image/width=256,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 256w, https://images.sifted.eu/cdn-cgi/image/width=384,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 384w, https://images.sifted.eu/cdn-cgi/image/width=640,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 640w, https://images.sifted.eu/cdn-cgi/image/width=750,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 750w, https://images.sifted.eu/cdn-cgi/image/width=828,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 828w, https://images.sifted.eu/cdn-cgi/image/width=1080,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 1080w, https://images.sifted.eu/cdn-cgi/image/width=1200,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 1200w, https://images.sifted.eu/cdn-cgi/image/width=1920,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 1920w, https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 2048w, https://images.sifted.eu/cdn-cgi/image/width=3840,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 3840w" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw" fetchpriority="high"/><meta name="next-head-count" content="15"/>
1<script id="google-consent" data-cookieconsent="ignore"> 2 window.dataLayer = window.dataLayer || []; 3 function gtag() { 4 dataLayer.push(arguments) 5 } 6 gtag("consent", "default", { 7 ad_personalization: "denied", 8 ad_storage: "denied", 9 ad_user_data: "denied", 10 analytics_storage: "denied", 11 functionality_storage: "denied", 12 personalization_storage: "denied", 13 security_storage: "granted", 14 wait_for_update: 500 15 }); 16 gtag("set", "ads_data_redaction", true); 17 gtag("set", "url_passthrough", true); 18 </script>
18<link rel="preload" href="https://consent.cookiebot.com/uc.js" as="script" fetchPriority="high"/>
18<script id="Cookiebot" src="https://consent.cookiebot.com/uc.js" data-cbid="33e59a16-c6e6-406b-8161-7e6b9693bc2e" data-framework="TCFv2.2" data-consentmode-defaults="disabled" fetchpriority="high" async=""></script>
18<script type="text/javascript" id="hs-script-loader" async="" defer="" src="//js.hs-scripts.com/20037605.js"></script>
18<link rel="preload" href="/_next/static/media/e23c0a2a1ea52f27-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/1177edff8242c2a8-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/1b8cf5c33f2f3d79-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/de52ca2187621921-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/71b0a9d814b551eb-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/a4a78f32e6d6bdeb-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/9cf9c6e84ed13b5e-s.p.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/css/88d93b0799557a17.css" as="style"/><link rel="stylesheet" href="/_next/static/css/88d93b0799557a17.css" data-n-g=""/><link rel="preload" href="/_next/static/css/4378827cc0bb70dc.css" as="style"/><link rel="stylesheet" href="/_next/static/css/4378827cc0bb70dc.css" data-n-p=""/><noscript data-n-css=""></noscript>
18<script defer="" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script>
18<script src="/_next/static/chunks/webpack-69a0d07e6bd4283f.js" defer=""></script>
18<script src="/_next/static/chunks/framework-1d2f8200c11ea928.js" defer=""></script>
18<script src="/_next/static/chunks/main-806798a6b982af5b.js" defer=""></script>
18<script src="/_next/static/chunks/pages/_app-bb197394937c5541.js" defer=""></script>
18<script src="/_next/static/chunks/1664-bc2a9050ca5fc6b8.js" defer=""></script>
18<script src="/_next/static/chunks/601-24a914c67fedea86.js" defer=""></script>
18<script src="/_next/static/chunks/6160-dec6ac7e5ea560ed.js" defer=""></script>
18<script src="/_next/static/chunks/8826-d01234a15c07328d.js" defer=""></script>
18<script src="/_next/static/chunks/6898-91ad5e9e3f4dab51.js" defer=""></script>
18<script src="/_next/static/chunks/1779-19a61f0f046dec48.js" defer=""></script>
18<script src="/_next/static/chunks/8388-51b0fe67d37a7313.js" defer=""></script>
18<script src="/_next/static/chunks/5314-0cdfa6b4e7019e5a.js" defer=""></script>
18<script src="/_next/static/chunks/1766-c4ee50b3179d17aa.js" defer=""></script>
18<script src="/_next/static/chunks/2885-97da8b455cf6c360.js" defer=""></script>
18<script src="/_next/static/chunks/9132-a16d2b68533850bd.js" defer=""></script>
18<script src="/_next/static/chunks/pages/index-d345cfa57b38d1bc.js" defer=""></script>
18<script src="/_next/static/CxS59Unx8FuYsEbjZKcoC/_buildManifest.js" defer=""></script>
18<script src="/_next/static/CxS59Unx8FuYsEbjZKcoC/_ssgManifest.js" defer=""></script>
18<style id="__jsx-3546074860">:root{--font-recklessNeueBold:'__recklessNeueFontFamily_dda9bf', '__recklessNeueFontFamily_Fallback_dda9bf';--font-aktivGrotesk:'__aktivGroteskFontFamily_1f826b', '__aktivGroteskFontFamily_Fallback_1f826b';--font-sourceSans:'__Source_Sans_3_86b611', '__Source_Sans_3_Fallback_86b611'}</style></head><body><style></style>
18<script type="text/javascript"> 19 window.Sifted = window.Sifted || {} 20 window.Sifted.user = { 21 first_name: "", 22 last_name: "", 23 is_logged_in: false, 24 25 is_pro: false, 26 details: {} 27 } 28</script>
28 29<div id="__next">
29<script>self.__wrap_b=(t,n,e)=>{e=e||document.querySelector(`[data-br="${t}"]`);let a=e.parentElement,r=R=>e.style.maxWidth=R+"px";e.style.maxWidth="";let o=a.clientWidth,c=a.clientHeight,i=o/2-.25,l=o+.5,u;if(o){for(;i+1<l;)u=Math.round((i+l)/2),r(u),a.clientHeight===c?l=u:i=u;r(l*n+o*(1-n))}e.__wrap_o||(typeof ResizeObserver!="undefined"?(e.__wrap_o=new ResizeObserver(()=>{self.__wrap_b(0,+e.dataset.brr,e)})).observe(a):process.env.NODE_ENV==="development"&&console.warn("The browser you are using does not support the ResizeObserver API. Please consider add polyfill for this API to avoid potential layout shifts or upgrade your browser. Read more: https://github.com/shuding/react-wrap-balancer#browser-support-information"))};</script>
29<div class="font-serif"><div><div class="zephr-feature onboarding-show-onboarding-modal"></div></div><div class="hidden"><div class="fixed inset-0 z-50 bg-[#000000a2]" data-testid="complete-profile-overlay"></div><div class="pointer-events-none fixed inset-0 z-[51] flex items-center justify-center"><div id="complete-profile-dialog" data-zephr-dialog="true" class="pointer-events-auto relative max-h-[85vh] w-[94vw] max-w-[400px] overflow-y-auto rounded-2xl bg-white px-6 pb-8 pt-10 shadow-[0_10px_38px_-10px_rgba(14,18,22,0.35)] md:px-8"><button aria-label="Close" data-testid="complete-profile-close" class="absolute right-3 top-3 p-2 focus:outline-none focus-visible:ring-2 focus-visible:ring-black-rock"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" height="1.2em" width="1.2em" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="#000" stroke-width="2" d="M3,3 L21,21 M3,21 L21,3"></path></svg></button><div>
29<script type="text/javascript"> 30 if (!window.Zephr) window.Zephr = {}; 31 if (!window.Zephr.outcomes) window.Zephr.outcomes = {}; 32 window.Zephr.outcomes["complete-profile-prompt"] = { 33 featureLabel: "Complete profile prompt", 34 outcomeId: "transformation/2#1", 35 outcomeLabel: "Remove" 36 }; 37 </script>
37</div></div></div></div><div class="hidden" data-testid="login-modal-root"><div class="fixed inset-0 z-[60] bg-[#000000a2]" data-testid="login-modal-overlay"></div><div class="pointer-events-none fixed inset-0 z-[61] flex items-center justify-center"><div id="login-dialog" data-zephr-dialog="true" class="pointer-events-auto relative max-h-[92vh] w-[94vw] max-w-[400px] overflow-y-auto rounded-2xl bg-white px-4 pb-6 pt-8 shadow-[0_10px_38px_-10px_rgba(14,18,22,0.35)] md:px-6"><button aria-label="Close" data-testid="login-modal-close" class="absolute right-3 top-3 z-10 p-2 focus:outline-none focus-visible:ring-2 focus-visible:ring-black-rock"><svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 24 24" height="1.2em" width="1.2em" xmlns="http://www.w3.org/2000/svg"><path fill="none" stroke="#000" stroke-width="2" d="M3,3 L21,21 M3,21 L21,3"></path></svg></button><div data-login-form="regular" class=""><div class="LoginRegistrationForm_loginRegistrationForm__eKVrT" style="--fintech:url(https://www.datocms-assets.com/60124/1757341374-sifted_fintech.png?auto=format&fit=max&h=50&q=80);--futureproof:url(https://www.datocms-assets.com/60124/1757341374-sifted_upround.png?auto=format&fit=max&h=50&q=80);--startup-life:url(https://www.datocms-assets.com/60124/1757341374-sifted_startuplife.png?auto=format&fit=max&h=50&q=80);--deeptech:url(https://www.datocms-assets.com/60124/1757341374-sifted_ai-and-deeptech.png?auto=format&fit=max&h=50&q=80)"><div class="w-full bg-white" role="form"><div> <style>.zephr-form-progress-bar.svelte-19rlx92{width:100%;border:0;border-radius:20px;margin-top:10px}.zephr-form-progress-bar.svelte-19rlx92::-webkit-progress-bar{background-color:var(--zephr-color-background-tinted);border:0;border-radius:20px}.zephr-form-progress-bar.svelte-19rlx92::-webkit-progress-value{background-color:var(--zephr-color-text-tinted);border:0;border-radius:20px}.zephr-progress-bar-step.svelte-19rlx92{margin:auto;color:var(--zephr-color-text-tinted);font-size:var(--zf-subtext-fontSize);font-family:var(--zf-root-fontFamily);cursor:pointer}.zephr-progress-bar-step.svelte-19rlx92:first-child{margin-left:0}.zephr-progress-bar-step.svelte-19rlx92:last-child{margin-right:0}.zephr-progress-bar-step.disabled.svelte-19rlx92{cursor:default} 38.zephr-form-button-top-margin.svelte-gd8hr6{margin-top:20px}.zephr-form-button.svelte-gd8hr6{padding:0 20px;text-decoration:none;text-transform:capitalize;border-radius:calc(var(--zephr-button-borderRadius) * 1px);font-size:var(--zf-button-fontSize);font-weight:normal;cursor:pointer;border-style:solid;border-width:calc(var(--zephr-button-borderWidth) * 1px);border-color:var(--zephr-color-action-tinted);transition:backdrop-filter 0.2s, background-color 0.2s;display:flex;justify-content:center;align-items:center;width:100%;background-color:var(--zephr-color-action-main);color:var(--zf-button-color);position:relative;overflow:hidden;font-family:var(--zf-root-fontFamily)}.zephr-form-button.svelte-gd8hr6:hover{background-color:var(--zephr-color-action-tinted);border-color:var(--zephr-color-action-tinted)}.zephr-form-button.svelte-gd8hr6:disabled{background-color:var(--zephr-color-background-tinted);border-color:var(--zephr-color-background-tinted)}.zephr-form-button.svelte-gd8hr6:disabled:hover{background-color:var(--zephr-color-background-tinted);border-color:var(--zephr-color-background-tinted)}.zephr-form-button.inputHeight.svelte-gd8hr6{height:calc(var(--zephr-input-height) * 1px)}
38.zephr-form-button.svelte-gd8hr6:not(inputHeight){height:calc(var(--zephr-button-height) * 1px)}.zephr-form-button.aside.svelte-gd8hr6{width:auto;margin-left:10px} 39.payment-option-wrapper.svelte-hcxnnv>input[type="radio"].svelte-hcxnnv{display:none}.payment-option-wrapper.svelte-hcxnnv.svelte-hcxnnv{display:flex;flex:1 0 28%;width:100%}.payment-option-wrapper.svelte-hcxnnv.svelte-hcxnnv:only-child{max-width:325px}.box-container.svelte-hcxnnv.svelte-hcxnnv{display:flex;flex-direction:column;flex:1 1 0;width:0;text-align:center}.inner-box.svelte-hcxnnv.svelte-hcxnnv{border:var(--zf-payment-options-border);border-radius:var(--zf-payment-options-borderRadius);background-color:var(--zf-payment-options-bgColor);height:100%;display:flex;flex-direction:column}.box-container.highlighted.svelte-hcxnnv .inner-box.svelte-hcxnnv{border-top-left-radius:0;border-top-right-radius:0}.box-container.svelte-hcxnnv .box-content.svelte-hcxnnv{flex-grow:1;padding:30px 20px;margin:0 10px;overflow:hidden}.box-container.svelte-hcxnnv .styled-box-content.svelte-hcxnnv{color:var(--zephr-color-text-main);font-family:var(--zf-root-fontFamily)} 40 .box-container .styled-box-content h1, 41 .box-container .styled-box-content h2, 42 .box-container .styled-box-content h3, 43 .box-container .styled-box-content p, 44 .box-container .styled-box-content span 45 {color:var(--zephr-color-text-main);font-family:var(--zf-root-fontFamily)}.payment-options-container .box-container .styled-box-content button{color:#fff;background-color:var(--zephr-color-action-main);border-width:calc(var(--zephr-button-borderWidth) * 1px);border-color:var(--zephr-color-action-tinted);border-radius:calc(var(--zephr-button-borderRadius) * 1px);font-size:var(--zf-button-fontSize)}.payment-options-container .box-container .styled-box-content button:hover{background-color:var(--zephr-color-action-tinted);border-color:var(--zephr-color-action-tinted)}.payment-options-container .box-container .box-content img{max-width:210px;height:auto}.box-top.svelte-hcxnnv.svelte-hcxnnv{height:40px}.box-container.highlighted.svelte-hcxnnv .box-top.svelte-hcxnnv{color:var(--zf-payment-options-highlighted-color);background-color:var(--zf-payment-options-highlighted-bgColor);position:relative;border:var(--zf-payment-options-border);border-bottom-width:0;border-radius:var(--zf-payment-options-borderRadius);border-bottom-left-radius:0;border-bottom-right-radius:0;display:flex;justify-content:center;align-items:center}.box-container.highlighted.svelte-hcxnnv .box-top .box-top-text.svelte-hcxnnv{font-weight:bold}.box-container.svelte-hcxnnv .box-bottom.svelte-hcxnnv{min-height:60px;display:flex;flex-direction:column;align-items:center;padding:20px 0 30px;margin:0 30px}.button-sub-text.svelte-hcxnnv.svelte-hcxnnv{margin-top:10px} 46.payment-options-container.svelte-tqlhky{flex-wrap:wrap;font-size:var(--zf-payment-options-fontSize);width:100%;color:var(--zf-payment-options-color);line-height:18px;padding:31px 0 20px;display:grid;justify-content:space-evenly;justify-items:center;grid-template-columns:repeat(auto-fit, minmax(300px, 1fr));gap:13px}@media(max-width: 340px){.payment-options-container.svelte-tqlhky{grid-template-columns:repeat(auto-fit, minmax(280px, 1fr))}} 47.zephr-form-error-message-min-height.svelte-1ko2lqj{min-height:1.1em}.zephr-form-error-message.svelte-1ko2lqj{color:var(--zephr-color-warning-main);font-size:var(--zf-subtext-fontSize);margin-top:0.5em;position:relative;margin-left:1.2em;margin-right:1.2em} 48.zephr-form-input-inner-container.svelte-88cmol{position:relative}.zephr-form-input-full-width.svelte-88cmol{width:100%}.zephr-form-input.svelte-88cmol{width:100%;display:block;height:calc(var(--zephr-input-height) * 1px);padding-left:8px;font-size:var(--zf-input-fontSize);border:calc(var(--zephr-input-borderWidth) * 1px) solid 49 var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);transition:border-color 0.25s ease, box-shadow 0.25s ease;outline:0;color:var(--zephr-color-text-main);background-color:var(--zf-input-bgColor);font-family:var(--zf-root-fontFamily)}.zephr-form-input.svelte-88cmol::placeholder{color:var(--zephr-color-background-tinted);font-family:var(--zf-root-fontFamily)}.zephr-form-input-checkbox.svelte-88cmol{width:auto;height:auto;margin:8px 5px 0 0;float:left}.zephr-form-input-radio.svelte-88cmol{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.zephr-form-input-color[type="color"].svelte-88cmol{width:50px;padding:0;border-radius:50%}.zephr-form-input-color[type="color"].svelte-88cmol::-webkit-color-swatch{border:none;border-radius:50%;padding:0}.zephr-form-input-color[type="color"].svelte-88cmol::-webkit-color-swatch-wrapper{border:none;border-radius:50%;padding:0}.zephr-form-input.disabled.svelte-88cmol,.zephr-form-input.disabled.svelte-88cmol:hover{border:calc(var(--zephr-input-borderWidth) * 1px) solid 50 var(--zephr-input-borderColor);background-color:var(--zephr-color-background-tinted)}.zephr-form-input.error.svelte-88cmol{border:1px solid var(--zephr-color-warning-main)} 51.zephr-form-input-label.svelte-yaw4yg.svelte-yaw4yg{margin-top:10px;display:block;line-height:30px;font-size:var(--zf-subtext-fontSize);color:var(--zephr-color-text-tinted);font-family:var(--zf-root-fontFamily)}.zephr-form-input-label.svelte-yaw4yg.svelte-yaw4yg:first-child{margin-top:0}.zephr-form-input-label.svelte-yaw4yg span.svelte-yaw4yg{display:block} 52.svelte-fa-base{height:1em;overflow:visible;transform-origin:center;vertical-align:-0.125em}.svelte-fa-fw{text-align:center;width:1.25em}.svelte-fa-pull-left.svelte-f5ydbn{float:left}.svelte-fa-pull-right.svelte-f5ydbn{float:right}.svelte-fa-size-lg.svelte-f5ydbn{font-size:1.33333em;line-height:0.75em;vertical-align:-0.225em}.svelte-fa-size-sm.svelte-f5ydbn{font-size:0.875em}.svelte-fa-size-xs.svelte-f5ydbn{font-size:0.75em}.spin.svelte-f5ydbn{animation:svelte-f5ydbn-spin 2s 0s infinite linear}.pulse.svelte-f5ydbn{animation:svelte-f5ydbn-spin 1s infinite steps(8)}@keyframes svelte-f5ydbn-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}
53.svelte-fa-layers.svelte-ff6okk{display:inline-block;position:relative}.svelte-fa-layers.svelte-ff6okk .svelte-fa{position:absolute;bottom:0;left:0;right:0;top:0;margin:auto;text-align:center}.svelte-fa-layers.svelte-ff6okk .svelte-fa-layers-text{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.svelte-fa-layers.svelte-ff6okk .svelte-fa-layers-text span{display:inline-block}.svelte-fa-pull-left.svelte-ff6okk{float:left}.svelte-fa-pull-right.svelte-ff6okk{float:right}.svelte-fa-size-lg.svelte-ff6okk{font-size:1.33333em;line-height:0.75em;vertical-align:-0.225em}.svelte-fa-size-sm.svelte-ff6okk{font-size:0.875em}.svelte-fa-size-xs.svelte-ff6okk{font-size:0.75em} 54.container.svelte-1j4jgwv{display:inline-block;height:auto}.svelte-fa-size-lg.svelte-1j4jgwv{font-size:1.33333em;line-height:0.75em;vertical-align:-0.225em}.svelte-fa-size-sm.svelte-1j4jgwv{font-size:0.875em}.svelte-fa-size-xs.svelte-1j4jgwv{font-size:0.75em} 55.zephr-form-password-match.svelte-tsrdk3.svelte-tsrdk3{margin:20px 0;justify-content:center}.zephr-form-password-match.svelte-tsrdk3 ul.svelte-tsrdk3{padding-left:0;margin:0}.zephr-form-password-requirement.svelte-tsrdk3.svelte-tsrdk3{display:flex;align-items:center;color:var(--zephr-color-text-tinted);font-size:var(--zf-subtext-fontSize);min-height:20px;font-family:var(--zf-root-fontFamily)}.zephr-form-password-requirement-icon.svelte-tsrdk3.svelte-tsrdk3{margin-right:10px;font-size:15px} 56.zephr-form-password-progress.svelte-1bpbne4.svelte-1bpbne4{display:flex;margin-top:10px}.zephr-form-password-bar.svelte-1bpbne4.svelte-1bpbne4{width:100%;height:4px;border-radius:2px}.zephr-form-password-bar.svelte-1bpbne4.svelte-1bpbne4:not(:first-child){margin-left:8px}.zephr-form-password-requirements.svelte-1bpbne4.svelte-1bpbne4{margin:20px 0;justify-content:center}.zephr-form-password-requirements.svelte-1bpbne4 ul.svelte-1bpbne4{padding-left:0;margin:0}.zephr-form-password-requirement.svelte-1bpbne4.svelte-1bpbne4{display:flex;align-items:center;color:var(--zephr-color-text-tinted);font-size:var(--zf-subtext-fontSize);min-height:20px;font-family:var(--zf-root-fontFamily)}.zephr-form-password-requirement-icon.svelte-1bpbne4.svelte-1bpbne4{margin-right:10px;font-size:15px} 57.apple-pay-button{display:inline-block;-webkit-appearance:-apple-pay-button;-apple-pay-button-type:pay;width:440px;max-width:100%;height:45px;margin-top:20px}.apple-pay-button-black{-apple-pay-button-style:black}#google-pay-button.svelte-1drqjgk{width:440px;max-width:100%;height:45px;margin-top:20px} 58#braintree-dropin-container.svelte-w52z2j{margin-top:1em;margin-bottom:1em} 59.stripe-element.svelte-1bi6tmz{margin-top:2em;margin-bottom:1em;border:calc(var(--zephr-input-borderWidth) * 1px) solid 60 var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);padding:1em}.stripe-element.svelte-1bi6tmz iframe:focus{outline:none !important} 61#stripe-mobile-pay-button.svelte-12ehv8b{width:440px;max-width:100%;height:45px;margin-top:20px} 62.spinner-container.svelte-1c5ov4v{text-align:center;padding:2em} 63#zuora_payment.svelte-1vnsk3p{margin-top:1em;margin-bottom:1em}.zuora-disabled-iframe-container.svelte-1vnsk3p .z_hppm_iframe{pointer-events:none;opacity:0.3}.zuora-dynamic-form-disabled.svelte-1vnsk3p{pointer-events:none;opacity:0.3}.spinner-overlay.svelte-1vnsk3p{width:100%;height:100%;position:absolute;top:0;left:0;display:flex;align-items:center;justify-content:center}.form-wrapper.svelte-1vnsk3p{position:relative} 64#payment-element.svelte-1ejcgdg{margin-top:1em;margin-bottom:1em;border:calc(var(--zephr-input-borderWidth) * 1px) solid 65 var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);padding:1em} 66.zephr-form-checkbox.svelte-ud4i0a.svelte-ud4i0a.svelte-ud4i0a{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.zephr-form-checkbox-label.svelte-ud4i0a.svelte-ud4i0a.svelte-ud4i0a{display:flex;align-items:center;font-family:var(--zf-root-fontFamily)}.zephr-form-checkmark.svelte-ud4i0a.svelte-ud4i0a.svelte-ud4i0a{position:relative;box-sizing:border-box;height:23px;width:23px;background-color:#fff;border:calc(var(--zephr-input-borderWidth) * 1px) solid 67 var(--zephr-input-borderColor);border-radius:6px;margin-right:12px;cursor:pointer}.zephr-form-checkmark.checked.svelte-ud4i0a.svelte-ud4i0a.svelte-ud4i0a{border-color:var(--zephr-color-action-main)}.zephr-form-checkmark.checked.svelte-ud4i0a.svelte-ud4i0a.svelte-ud4i0a:after{content:"";position:absolute;width:6px;height:13px;border:solid var(--zephr-color-action-main);border-width:0 2px 2px 0;transform:rotate(45deg);top:3px;left:8px;box-sizing:border-box}.zephr-form-checkmark.disabled.svelte-ud4i0a.svelte-ud4i0a.svelte-ud4i0a{border:calc(var(--zephr-input-borderWidth) * 1px) solid 68 var(--zephr-color-background-tinted)}.zephr-form-checkmark.disabled.checked.svelte-ud4i0a.svelte-ud4i0a.svelte-ud4i0a:after{border:solid var(--zephr-color-background-tinted);border-width:0 2px 2px 0}.zephr-form-checkmark.error.svelte-ud4i0a.svelte-ud4i0a.svelte-ud4i0a{border:calc(var(--zephr-input-borderWidth) * 1px) solid 69 var(--zephr-color-warning-main)}.zephr-form-checkbox.svelte-ud4i0a:focus-visible+.zephr-form-checkbox-label.svelte-ud4i0a>.zephr-form-checkmark.svelte-ud4i0a{outline:2px solid var(--zephr-color-action-main);outline-color:-webkit-focus-ring-color} 70.zephr-form-payment-auto-renew-toggle.svelte-1yfwddr{margin:10px 0;font-size:var(--zf-font-size-base);font-family:var(--zf-root-fontFamily)}
71.check-image.svelte-w5z6iw{height:1.2em;vertical-align:middle;margin-right:0.5em}.zephr-form-success-message.svelte-w5z6iw{color:var(--zephr-color-text-main);display:inline-block} 72.zephr-form-verification-resend-link-container.svelte-1yj9ceh{margin-bottom:2em}.zephr-form-verification-resend-link.svelte-1yj9ceh,.zephr-form-verification-resend-text.svelte-1yj9ceh{float:right;position:absolute;padding-right:2px;padding-top:0.5em;padding-left:0.5em;font-size:var(--zf-subtext-fontSize);right:0}.zephr-form-verification-resend-link.svelte-1yj9ceh{cursor:pointer;color:var(--zf-link-color)} 73.zephr-form-custom-text.svelte-3sd7s2{margin-top:1em;margin-bottom:1em;color:var(--zephr-color-text-main)} 74.zephr-form-input-radio.svelte-1cbmaif.svelte-1cbmaif.svelte-1cbmaif{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.zephr-form-radio-label.svelte-1cbmaif.svelte-1cbmaif.svelte-1cbmaif{display:flex;align-items:center;font-family:var(--zf-root-fontFamily)}.zephr-form-radio-dot.svelte-1cbmaif.svelte-1cbmaif.svelte-1cbmaif{display:block;position:relative;box-sizing:border-box;height:23px;width:23px;background-color:#fff;border:1px solid #ebebeb;border-radius:50%;margin-right:12px;cursor:pointer}.checked.svelte-1cbmaif.svelte-1cbmaif.svelte-1cbmaif{border-color:var(--zephr-color-action-main)}.checked.svelte-1cbmaif.svelte-1cbmaif.svelte-1cbmaif:after{content:"";position:absolute;width:17px;height:17px;background:var(--zephr-color-action-main);border-radius:50%;top:2px;left:2px}.disabled.checked.svelte-1cbmaif.svelte-1cbmaif.svelte-1cbmaif:after{background:var(--zephr-color-background-tinted)}.error.svelte-1cbmaif.svelte-1cbmaif.svelte-1cbmaif{border:1px solid var(--zephr-color-warning-main)}.zephr-form-input-radio.svelte-1cbmaif:focus-visible+.zephr-form-radio-label.svelte-1cbmaif>.zephr-form-radio-dot.svelte-1cbmaif{outline:2px solid var(--zephr-color-action-main);outline-color:-webkit-focus-ring-color} 75.zephr-form-input-error-text.svelte-wlae04{color:var(--zephr-color-warning-main);font-family:var(--zf-root-fontFamily)}.zephr-form-input-select.svelte-wlae04{display:block;appearance:auto;width:100%;height:calc(var(--zephr-input-height) * 1px);font-size:var(--zf-input-fontSize);font-family:var(--zf-root-fontFamily);border:calc(var(--zephr-input-borderWidth) * 1px) solid 76 var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);transition:border-color 0.25s ease, box-shadow 0.25s ease;outline:0;color:var(--zephr-color-text-main);background-color:var(--zf-input-bgColor);padding:10px}.zephr-form-input-select.unselected.svelte-wlae04{color:var(--zephr-color-background-tinted)}.zephr-form-input-select.error.svelte-wlae04{border-color:var(--zephr-color-warning-main)}.zephr-form-input-textarea.svelte-wlae04{display:block;min-height:calc(var(--zephr-input-height) * 1px);min-width:100%;max-width:100%;background-color:var(--zf-input-bgColor);border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);transition:border-color 0.25s ease, box-shadow 0.25s ease;color:var(--zephr-color-text-main);font-size:var(--zf-input-fontSize);font-weight:300;padding:16px 8px;font-family:var(--zf-root-fontFamily);outline:0}.zephr-form-input-textarea.svelte-wlae04::placeholder{color:var(--zephr-color-background-tinted);font-family:var(--zf-root-fontFamily)}.zephr-form-input-slider-output.svelte-wlae04{margin:13px 0 0 10px} 77.zephr-form-link.svelte-14vxk2u{margin:10px 0;color:var(--zf-link-color);text-decoration:underline;cursor:pointer;font-family:var(--zf-root-fontFamily)}.zephr-form-link-disabled.svelte-14vxk2u{color:var(--zephr-color-text-main);cursor:not-allowed;text-decoration:none}.zephr-form-link-no-underline.svelte-14vxk2u{text-decoration:none} 78.zephr-form-reset-link-container.svelte-49aomy{min-height:2.5em}.zephr-form-link-message.svelte-49aomy{margin:10px 0 10px 20px;font-family:var(--zf-root-fontFamily)} 79.zephr-form-reset-link-container.svelte-49aomy{min-height:2.5em}.zephr-form-link-message.svelte-49aomy{margin:10px 0 10px 20px;font-family:var(--zf-root-fontFamily)} 80.zephr-form-google-icon.svelte-aktnoc{width:20px} 81.zephr-form-social-sign-in.svelte-1e2xtn4{align-items:center}.zephr-form-social-sign-in-button.svelte-1e2xtn4{width:100%;min-height:55px;padding:15px;color:#000;background-color:#fff;box-shadow:0 0 5px rgba(0, 0, 0, 0.3);border-radius:10px;font-size:17px;
81display:flex;align-items:center;cursor:pointer;margin-top:20px;font-family:var(--zf-root-fontFamily)}.zephr-form-social-sign-in-button.svelte-1e2xtn4:hover{background-color:#fafafa}.zephr-form-social-sign-in-icon.svelte-1e2xtn4{display:flex;justify-content:center;margin-right:30px;width:25px} 82.zephr-form-promo-input-container.svelte-xf8v79{flex:0.6}.zephr-form-promo-activate-line.svelte-xf8v79{display:flex;cursor:pointer;min-height:calc(var(--zephr-input-height) * 1px);margin:1em 1.2em;font-size:var(--zf-payment-summary-fontSize);line-height:calc(var(--zephr-input-height) * 1px);color:var(--zf-link-color)}.zephr-form-promo-line.svelte-xf8v79{display:flex;min-height:calc(var(--zephr-input-height) * 1px);margin:1em 1.2em}.zephr-form-addon-line.svelte-xf8v79{display:flex;padding-top:1em;padding-bottom:1em;margin-left:1.2em}.zephr-form-summary-prorate-disclaimer.svelte-xf8v79{padding-top:0.25em;padding-left:1em;color:var(--zephr-color-text-tinted)}.zephr-form-summary-charge-description.svelte-xf8v79{color:var(--zephr-color-text-tinted)}.zephr-form-charge-line.svelte-xf8v79{display:flex;padding-top:1em;margin-left:1.2em;padding-left:1em}.zephr-form-summary-line-right.svelte-xf8v79{margin-left:auto;margin-right:1.5em;text-align:right}.zephr-form-summary-line-left.svelte-xf8v79{margin-left:10px}.zephr-form-summary-promo-middle.svelte-xf8v79{position:relative;top:calc(var(--zephr-input-height) * 0.5px)}.zephr-form-summary.svelte-xf8v79{border:var(--zf-payment-summary-border);border-radius:var(--zf-payment-summary-borderRadius);padding-top:1em;padding-bottom:1em;font-size:var(--zf-payment-summary-fontSize);margin-top:1.5em;margin-bottom:1.5em;color:var(--zf-payment-summary-color);background-color:var(--zf-payment-summary-bgColor)}.zephr-form-summary.svelte-xf8v79:first-child{margin-top:0}.zephr-form-summary-title.svelte-xf8v79{margin-bottom:1em;margin-left:1.2em}.zephr-form-summary-price-line.svelte-xf8v79{font-weight:bold;padding-left:1em;padding-top:1em}.zephr-form-summary-line.svelte-xf8v79{display:flex}.zephr-form-summary-price-line-upper.svelte-xf8v79{border-top:var(--zf-payment-summary-border);margin-top:1em}.zephr-form-summary-line-title.svelte-xf8v79{flex:0 0 65%;margin-left:1.2em}.zephr-form-summary-line-price.svelte-xf8v79{flex:1;text-align:right;margin-right:1.5em}.zephr-form-discount-line.svelte-xf8v79{display:flex;justify-content:space-between;margin:0.5em 0;margin-left:1.2em} 83.zephr-form-divider-container.svelte-1jhhsfx{display:flex;align-items:center;justify-content:center;margin:1.5em 0}.zephr-form-divider-line.svelte-1jhhsfx{height:1px;width:50%;margin:0 5px;background-color:var(--zephr-color-text-tinted)}.zephr-form-divider-line-complete.svelte-1jhhsfx{height:1px;width:100%;margin:0 5px;background-color:var(--zephr-color-text-tinted)}.zephr-form-divider-text.svelte-1jhhsfx{margin:0 12px;color:var(--zephr-color-text-main);font-size:var(--zf-info-fontSize);font-family:var(--zf-root-fontFamily);white-space:nowrap} 84.zephr-form-login-link.svelte-1jmemom.svelte-1jmemom{margin-top:1em;margin-bottom:1em;text-align:center}.zephr-form-login-link.svelte-1jmemom>a.svelte-1jmemom{color:var(--zf-link-color);margin-left:0.25em} 85.zephr-form-account-code-container.svelte-1hhep92{margin-top:1.5em} 86.zephr-form-invitation-container.svelte-1qkv7d3{border:1px solid;margin:1.5em 0;padding:20px;color:var(--zephr-color-text-main)}.zephr-form-invitation-title.svelte-1qkv7d3{margin-bottom:20px;font-weight:bold;font-family:var(--zf-root-fontFamily)}.zephr-form-invitation-email.svelte-1qkv7d3{display:flex;align-items:center}.zephr-form-invitation-input-container.svelte-1qkv7d3{flex-grow:1}.zephr-form-invitation-success-message.svelte-1qkv7d3{margin-top:0.5em} 87.subscription-option-product-label{margin-bottom:5px;margin-top:0}.subscription-option-wrapper.svelte-1gr56ov{display:flex;flex:1 0 28%;width:100%;max-width:400px}.subscription-option-wrapper.svelte-1gr56ov:only-child{max-width:325px}.subscription-option-box{display:flex;flex-direction:column;flex:1 1 0;width:0}.info-row.svelte-1gr56ov{margin-top:7px;margin-bottom:7px}.info-label.svelte-1gr56ov{display:inline;margin-right:10px}.info.svelte-1gr56ov{display:inline}hr.svelte-1gr56ov{border-width:1px 0px 0px;margin:5px 5px;border-color:var(--zephr-color-background-tinted)}.inner-box.svelte-1gr56ov{border:var(--zf-payment-options-border);border-radius:var(--zf-payment-options-borderRadius);background-color:var(--zf-payment-options-bgColor);height:100%;display:flex;flex-direction:column;flex-grow:1;padding:20px 20px;margin:0 10px;overflow:hidden}.change-disabled-label.svelte-1gr56ov{margin-top:15px} 88.subscription-options-container.svelte-bnxnvq{flex-wrap:wrap;font-size:var(--zf-payment-options-fontSize);width:100%;color:var(--zf-payment-options-color);line-height:18px;padding:31px 0 20px;display:grid;justify-content:space-evenly;justify-items:center;grid-template-columns:repeat(auto-fit, minmax(300px, 1fr));gap:13px}@media(max-width: 340px){.subscription-options-container.svelte-bnxnvq{grid-template-columns:repeat(auto-fit, minmax(280px, 1fr))}} 89.subscription-list-item.svelte-1qhs7yc{font-family:var(--zephr-typography-body-font), var(--zephr-typography-body-fallbackFont);color:var(--zephr-color-text-main)}hr.svelte-1qhs7yc{border-width:1px 0px 0px;margin:20px 0px;border-color:var(--zephr-color-background-tinted)}.inactive.svelte-1qhs7yc{text-decoration:line-through}h3.svelte-1qhs7yc{margin:0 0 20px}.inner-box.svelte-1qhs7yc{display:flex;flex-direction:column;flex-grow:1;padding:30px 20px;margin:0 10px;overflow:hidden;min-width:300px}.gift-pill.svelte-1qhs7yc{display:inline-block;background-color:var(--zephr-color-background-tinted);color:var(--zephr-color-text-main);font-size:0.75rem;font-weight:600;padding:3px 8px;border-radius:12px;margin-left:8px;vertical-align:middle} 90.zephr-form-tablink.svelte-py0ruk{display:flex;align-items:center;cursor:pointer;justify-content:space-between;text-decoration:none;color:var(--zephr-color-text-main);font-weight:590;padding:var(--zf-list-subscriptions-section-padding);border-bottom:1px solid var(--zephr-color-background-tinted)}.zephr-form-tablink.svelte-py0ruk:hover{text-decoration:underline}.zephr-form-tablink.svelte-py0ruk:last-child{border-bottom:none 91 } 92.zephr-subscription-list-box-item.svelte-xxnasy.svelte-xxnasy{font-family:var(--zephr-typography-body-font), 93 var(--zephr-typography-body-fallbackFont);color:var(--zephr-color-text-main);max-width:var(--zf-list-subscriptions-container-maxWidth);border-radius:var(--zf-list-subscriptions-container-borderRadius);border:var(--zf-list-subscriptions-container-border);padding:var(--zf-list-subscriptions-container-padding)}.zephr-inner-box.svelte-xxnasy.svelte-xxnasy{display:flex;flex-direction:column;flex-grow:1}.zephr-box-item-information.svelte-xxnasy.svelte-xxnasy{font-size:var(--zf-list-subscriptions-info-fontSize);color:var(--zephr-color-text-tinted);margin-top:8px}.zephr-section.svelte-xxnasy.svelte-xxnasy{padding:var(--zf-list-subscriptions-section-padding);border-bottom:1px solid var(--zephr-color-background-tinted);gap:8px}.zephr-section.svelte-xxnasy.svelte-xxnasy:first-child{padding-top:0;border-bottom:none}.zephr-section.svelte-xxnasy.svelte-xxnasy:last-child{border-bottom:none}.zephr-section.svelte-xxnasy span.svelte-xxnasy{font-weight:590}.zephr-section.svelte-xxnasy h2.svelte-xxnasy{margin:0}.gift-pill.svelte-xxnasy.svelte-xxnasy{display:inline-block;background-color:var(--zephr-color-background-tinted);color:var(--zephr-color-text-main);font-size:0.75rem;font-weight:600;padding:3px 8px;border-radius:12px;margin-left:8px;vertical-align:middle}.auto-renew-toggle-container.svelte-xxnasy.svelte-xxnasy{display:flex;align-items:center;gap:8px}.updating-indicator.svelte-xxnasy.svelte-xxnasy{font-size:0.85rem;color:var(--zephr-color-text-tinted);font-style:italic}.status-message.svelte-xxnasy.svelte-xxnasy{margin-top:8px;font-size:0.85rem}.status-message.success.svelte-xxnasy.svelte-xxnasy{color:#28a745}.status-message.error.svelte-xxnasy.svelte-xxnasy{color:#dc3545} 94.subscriptions-list-container.svelte-ldb1rq{margin-top:40px;
94display:flex;flex-direction:column;gap:40px} 95.subscription-custom-fields-update.svelte-t6s0pv{max-width:600px;margin:0 auto;padding:1rem}.title.svelte-t6s0pv{font-size:1.5rem;font-weight:600;margin-bottom:0.5rem;color:var(--text-color, #333)}.description.svelte-t6s0pv{color:var(--text-secondary, #666);margin-bottom:1rem;line-height:1.5}.subscription-info.svelte-t6s0pv{background:var(--background-light, #f8f9fa);padding:0.75rem;border-radius:4px;margin-bottom:1rem;border:1px solid var(--border-color, #e0e0e0)}.custom-fields-form.svelte-t6s0pv{display:flex;flex-direction:column;gap:1.5rem}.field-group.svelte-t6s0pv{display:flex;flex-direction:column;gap:0.25rem;padding:1rem;background:var(--background-light, #f8f9fa);border-radius:4px;border:1px solid var(--border-color, #e0e0e0)}.textarea-input.svelte-t6s0pv{min-height:80px;padding:0.75rem;border:1px solid var(--border-color, #ccc);border-radius:4px;font-family:inherit;font-size:1rem;resize:vertical;transition:border-color 0.2s}.textarea-input.svelte-t6s0pv:focus{outline:none;border-color:var(--primary-color, #007bff);box-shadow:0 0 0 2px var(--primary-color-alpha, rgba(0, 123, 255, 0.25))}.textarea-input.error.svelte-t6s0pv{border-color:var(--error-color, #dc3545)}.textarea-input.svelte-t6s0pv:disabled{background-color:var(--background-disabled, #f5f5f5);
95cursor:not-allowed}.error-message.svelte-t6s0pv{margin-top:0.5rem}.success-message.svelte-t6s0pv{padding:0.75rem;background:var(--success-background, #d4edda);border:1px solid var(--success-border, #c3e6cb);border-radius:4px;margin-top:0.5rem}.success-text.svelte-t6s0pv{color:var(--success-color, #155724);margin:0}.button-group.svelte-t6s0pv{display:flex;gap:0.75rem;margin-top:1rem}.submit-button.svelte-t6s0pv,.cancel-button.svelte-t6s0pv{padding:0.75rem 1.5rem;border:none;border-radius:4px;font-size:1rem;font-weight:500;cursor:pointer;transition:all 0.2s;display:flex;align-items:center;gap:0.5rem}.submit-button.svelte-t6s0pv{background:var(--primary-color, #007bff);color:white}.submit-button.svelte-t6s0pv:hover:not(:disabled){background:var(--primary-color-hover, #0056b3)}.submit-button.svelte-t6s0pv:disabled{background:var(--background-disabled, #6c757d);cursor:not-allowed}.cancel-button.svelte-t6s0pv{background:var(--secondary-color, #6c757d);color:white}.cancel-button.svelte-t6s0pv:hover:not(:disabled){background:var(--secondary-color-hover, #545b62)}.cancel-button.svelte-t6s0pv:disabled{opacity:0.6;cursor:not-allowed} 96.past-subscriptions-link-wrapper.svelte-zpa2t{margin:10px 0} 97.event-link-wrapper{margin-top:10px}.float-right.svelte-3cxpfz{float:right;margin-top:calc(var(--zephr-input-height) * -1px + 5px)} 98.bold-label.svelte-nx4w5y label{font-weight:bold}.read-only-input.svelte-nx4w5y{border:none;background:none;color:#333;cursor:default;outline:none;flex-grow:1;margin-right:10px;margin-top:15px}.zephr-form-relative-container.svelte-nx4w5y{display:flex;align-items:center;justify-content:space-between;width:100%}.update-link{white-space:nowrap;text-decoration:none;font-size:0.75em} 99.bold-label.svelte-nx4w5y label{font-weight:bold}.read-only-input.svelte-nx4w5y{border:none;background:none;color:#333;cursor:default;outline:none;flex-grow:1;margin-right:10px;margin-top:15px}.zephr-form-relative-container.svelte-nx4w5y{display:flex;align-items:center;justify-content:space-between;width:100%}.update-link{white-space:nowrap;text-decoration:none;font-size:0.75em} 100.zephr-form-ro-attribute{display:flex;align-items:center;height:50px;justify-content:flex-start}.zephr-form-ro-attribute-label{margin-right:10px;&:after { 101 content: ": "; 102 }} 103hr.svelte-jmotet{border-width:1px 0px 0px;margin:20px 0px;border-color:var(--zephr-color-background-tinted)}.session-container.svelte-jmotet{padding:15px;display:flex;flex-direction:column}.device-title.svelte-jmotet{font-weight:bold;font-size:1.2em;margin-bottom:10px}.current-device.svelte-jmotet{color:#777;font-size:0.9em;margin-left:10px}.login-time.svelte-jmotet,.browser.svelte-jmotet,.country.svelte-jmotet{margin-bottom:10px;font-size:0.9em} 104.sign-out-all.svelte-1ogdv39{color:#0073e6;cursor:pointer;font-size:1em;margin:20px 0;text-align:center}.sign-out-all.svelte-1ogdv39:hover{text-decoration:underline} 105.table.svelte-7sscau.svelte-7sscau{display:grid;grid-template-columns:0.7fr 1.4fr 1fr 0.6fr}.table-head.svelte-7sscau.svelte-7sscau{display:contents}.table-row.svelte-7sscau.svelte-7sscau{display:contents}.table-head.svelte-7sscau>div.svelte-7sscau{font-size:13px;padding:13px 10px 10px;border-bottom:1px solid var(--zephr-color-background-tinted)}.table-row.svelte-7sscau>div.svelte-7sscau{font-size:var(--zf-info-fontSize);height:60px;padding:0 10px;border-bottom:1px solid var(--zephr-color-background-tinted);display:flex;align-items:center}.table-head.svelte-7sscau>div.svelte-7sscau:first-child,.table-row.svelte-7sscau>div.svelte-7sscau:first-child{padding-left:0}.table-head.svelte-7sscau>div.svelte-7sscau:last-child,.table-row.svelte-7sscau>div.svelte-7sscau:last-child{padding-right:0}.taxes.svelte-7sscau.svelte-7sscau{color:var(--zephr-color-background-tinted);white-space:pre;font-size:small} 106.zephr-form-button-group.svelte-5uv9ua{display:flex;flex-direction:row;gap:12px;margin-top:20px}.zephr-form-back-button.svelte-5uv9ua{padding:0 20px;border-radius:calc(var(--zephr-button-borderRadius) * 1px);border-style:solid;border-width:calc(var(--zephr-button-borderWidth) * 1px);border-color:var(--zephr-color-action-main);display:flex;justify-content:center;align-items:center;width:100%;background-color:var(--zephr-color-action-main);color:var(--zf-button-color);cursor:pointer}.zephr-form-continue-button.svelte-5uv9ua{padding:0 20px;border-radius:calc(var(--zephr-button-borderRadius) * 1px);border-style:solid;border-width:calc(var(--zephr-button-borderWidth) * 1px);border-color:var(--zephr-color-action-main);display:flex;justify-content:center;align-items:center;width:100%;background-color:var(--zf-button-color);color:var(--zephr-color-action-main);
106cursor:pointer}.zephr-form-back-button.svelte-5uv9ua:hover{background-color:var(--zephr-color-action-tinted);border-color:var(--zephr-color-action-tinted)}.zephr-form-continue-button.svelte-5uv9ua:hover{background-color:var(--zephr-color-action-tinted);border-color:var(--zephr-color-action-tinted);color:var(--zf-button-color)}.zephr-form-back-button.svelte-5uv9ua:not(inputHeight){height:calc(var(--zephr-button-height) * 1px)}.zephr-form-continue-button.svelte-5uv9ua:not(inputHeight){height:calc(var(--zephr-button-height) * 1px)} 107.zephr-form-button.svelte-1uaz0r{padding:0 20px;text-decoration:none;text-transform:capitalize;border-radius:calc(var(--zephr-button-borderRadius) * 1px);font-size:var(--zf-button-fontSize);font-weight:normal;cursor:pointer;border-style:solid;border-width:calc(var(--zephr-button-borderWidth) * 1px);border-color:var(--zephr-color-action-tinted);transition:backdrop-filter 0.2s, background-color 0.2s;display:flex;justify-content:center;align-items:center;width:100%;background-color:var(--zephr-color-action-main);color:var(--zf-button-color);position:relative;overflow:hidden;font-family:var(--zf-root-fontFamily);height:calc(var(--zephr-button-height) * 1px)}.zephr-form-button.svelte-1uaz0r:hover{background-color:var(--zephr-color-action-tinted);border-color:var(--zephr-color-action-tinted);color:var(--zf-button-color)}.zephr-form-button-top-margin.svelte-1uaz0r{margin-top:20px} 108.recipient-name-section.svelte-hvl7z2{margin-top:1rem;margin-bottom:1rem}.field.svelte-hvl7z2{margin-bottom:0.5rem}label.svelte-hvl7z2{display:block;margin-bottom:0.5rem;color:var(--zephr-color-text-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-hvl7z2{width:100%;padding:0.5rem;border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);background-color:var(--zf-input-bgColor);color:var(--zephr-color-text-main);font-family:var(--zf-root-fontFamily)}input.svelte-hvl7z2::placeholder{color:var(--zephr-color-background-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-hvl7z2:focus{outline:none;border-color:var(--zephr-color-action-main)}.error.svelte-hvl7z2{border-color:var(--zephr-color-warning-main) !important}.error-text.svelte-hvl7z2{color:var(--zephr-color-warning-main);font-size:0.875em;margin-top:0.25rem;font-family:var(--zf-root-fontFamily)} 109.recipient-email-section.svelte-1odylgp{margin-bottom:1rem}.field.svelte-1odylgp{margin-bottom:0.5rem}label.svelte-1odylgp{display:block;margin-bottom:0.5rem;color:var(--zephr-color-text-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-1odylgp{width:100%;padding:0.5rem;border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);background-color:var(--zf-input-bgColor);color:var(--zephr-color-text-main);font-family:var(--zf-root-fontFamily)}input.svelte-1odylgp::placeholder{color:var(--zephr-color-background-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-1odylgp:focus{outline:none;border-color:var(--zephr-color-action-main)}.error.svelte-1odylgp{border-color:var(--zephr-color-warning-main) !important}.error-text.svelte-1odylgp{color:var(--zephr-color-warning-main);font-size:0.875em;margin-top:0.25rem;font-family:var(--zf-root-fontFamily)} 110.zephr-form-input-error-text.svelte-dxm1g8{color:var(--zephr-color-warning-main);font-family:var(--zf-root-fontFamily);font-size:12px;margin-top:4px}.zephr-form-input-select.svelte-dxm1g8{display:block;appearance:auto;width:100%;height:calc(var(--zephr-input-height) * 1px);font-size:var(--zf-input-fontSize);font-family:var(--zf-root-fontFamily);border:calc(var(--zephr-input-borderWidth) * 1px) solid 111 var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);transition:border-color 0.25s ease, box-shadow 0.25s ease;outline:0;color:var(--zephr-color-text-main);background-color:var(--zf-input-bgColor);padding:10px}.zephr-form-input-select.unselected.svelte-dxm1g8{color:var(--zephr-color-background-tinted)}.zephr-form-input-select.error.svelte-dxm1g8{border-color:var(--zephr-color-warning-main)}.zephr-form-input-select.svelte-dxm1g8:disabled{background-color:var(--zephr-color-background-tinted);cursor:not-allowed} 112.zephr-form-input-error-text.svelte-dxm1g8{color:var(--zephr-color-warning-main);font-family:var(--zf-root-fontFamily);font-size:12px;margin-top:4px}.zephr-form-input-select.svelte-dxm1g8{display:block;appearance:auto;width:100%;height:calc(var(--zephr-input-height) * 1px);font-size:var(--zf-input-fontSize);font-family:var(--zf-root-fontFamily);border:calc(var(--zephr-input-borderWidth) * 1px) solid 113 var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);transition:border-color 0.25s ease, box-shadow 0.25s ease;outline:0;color:var(--zephr-color-text-main);background-color:var(--zf-input-bgColor);padding:10px}.zephr-form-input-select.unselected.svelte-dxm1g8{color:var(--zephr-color-background-tinted)}.zephr-form-input-select.error.svelte-dxm1g8{border-color:var(--zephr-color-warning-main)}.zephr-form-input-select.svelte-dxm1g8:disabled{background-color:var(--zephr-color-background-tinted);cursor:not-allowed} 114.recipient-address-section.svelte-1lcs5wj{margin-bottom:1rem}.address-main-label.svelte-1lcs5wj{display:block;margin-bottom:0.75rem;color:var(--zephr-color-text-tinted);font-family:var(--zf-root-fontFamily);font-weight:600}.address-fields.svelte-1lcs5wj{display:flex;flex-direction:column;gap:1rem}.field.svelte-1lcs5wj{width:100%}label.svelte-1lcs5wj{display:block;margin-bottom:0.5rem;color:var(--zephr-color-text-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-1lcs5wj{width:100%;padding:0.5rem;border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);background-color:var(--zf-input-bgColor);color:var(--zephr-color-text-main);font-family:var(--zf-root-fontFamily)}input.svelte-1lcs5wj::placeholder{color:var(--zephr-color-background-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-1lcs5wj:focus{outline:none;border-color:var(--zephr-color-action-main)}.error-text.svelte-1lcs5wj{color:var(--zephr-color-warning-main);font-size:0.875em;margin-top:0.25rem;font-family:var(--zf-root-fontFamily)} 115.recipient-message-section.svelte-h6tpk7{margin-top:1rem;margin-bottom:1rem}.field.svelte-h6tpk7{margin-bottom:0.5rem}label.svelte-h6tpk7{display:block;margin-bottom:0.5rem;color:var(--zephr-color-text-tinted);font-family:var(--zf-root-fontFamily)}textarea.svelte-h6tpk7{width:100%;min-height:100px;resize:vertical;padding:0.5rem;border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);background-color:var(--zf-input-bgColor);color:var(--zephr-color-text-main);font-family:var(--zf-root-fontFamily)}textarea.svelte-h6tpk7::placeholder{color:var(--zephr-color-background-tinted);font-family:var(--zf-root-fontFamily)}textarea.svelte-h6tpk7:focus{outline:none;border-color:var(--zephr-color-action-main)} 116.zephr-form-input-wrapper.svelte-764k6k{display:flex;flex-direction:column;margin-bottom:16px;width:100%}label.svelte-764k6k{margin-bottom:8px;font-weight:500}input.svelte-764k6k{padding:12px;border-radius:var(--input-border-radius, 4px);border:var(--input-border-width, 1px) solid var(--input-border-color, #ccc);font-size:16px;height:var(--input-height, 50px);box-sizing:border-box}input.svelte-764k6k:focus{outline:none;border-color:var(--color-action-main, #006EDB)}input.error.svelte-764k6k{border-color:var(--color-warning-main, #D90B00)}.error-message.svelte-764k6k{color:var(--color-warning-main, #D90B00);font-size:14px;margin-top:4px}.required.svelte-764k6k{color:var(--color-warning-main, #D90B00)} 117.zephr-gift-list-box-item.svelte-srvimy.svelte-srvimy{margin-bottom:1.5rem;font-family:var(--zephr-typography-body-font), var(--zephr-typography-body-fallbackFont);color:var(--zephr-color-text-main);max-width:var(--zf-list-subscriptions-container-maxWidth);border-radius:var(--zf-list-subscriptions-container-borderRadius);border:var(--zf-list-subscriptions-container-border);padding:var(--zf-list-subscriptions-container-padding);position:relative;overflow:hidden;background-color:white}.zephr-inner-box.svelte-srvimy.svelte-srvimy{display:flex;flex-direction:column;flex-grow:1;padding-top:20px}.zephr-banner-top.svelte-srvimy.svelte-srvimy{background-color:black;color:white;padding:5px 1.5rem;width:100%;font-size:0.875rem;text-align:center;position:absolute;top:0;left:0;right:0}.zephr-header-section.svelte-srvimy.svelte-srvimy{position:relative}.zephr-status-pill.svelte-srvimy.svelte-srvimy{position:absolute;top:0;right:0;display:inline-block;padding:4px 12px;border-radius:16px;font-size:0.75rem;font-weight:500;color:white;background-color:black}.zephr-section.svelte-srvimy.svelte-srvimy{padding:var(--zf-list-subscriptions-section-padding);gap:8px}.zephr-section.svelte-srvimy.svelte-srvimy:first-child{padding-top:0}.zephr-section.svelte-srvimy span.svelte-srvimy{font-weight:590;display:block;margin-bottom:0.25rem}.zephr-box-item-information.svelte-srvimy.svelte-srvimy{font-size:var(--zf-list-subscriptions-info-fontSize);color:var(--zephr-color-text-tinted);margin-top:8px} 118.subscriptions-list-container.svelte-ldb1rq{margin-top:40px;
118display:flex;flex-direction:column;gap:40px} 119.zephr-form-gift-toggle.svelte-93167f{margin:10px 0;font-size:var(--zf-font-size-base);font-family:var(--zf-root-fontFamily)} 120.zephr-form-gift-future-date-toggle.svelte-c9nudz{margin:10px 0;font-size:var(--zf-font-size-base);font-family:var(--zf-root-fontFamily)}.zephr-form-gift-future-date-toggle-description.svelte-c9nudz{margin:5px 0 0 0;font-size:var(--zf-font-size-small, 14px);color:var(--zf-color-text-secondary, #666);line-height:1.4} 121.zephr-form-gift-future-date-input.svelte-1vykgtl{margin:10px 0;font-size:var(--zf-font-size-base);font-family:var(--zf-root-fontFamily)}.zephr-form-gift-future-date-input-description.svelte-1vykgtl{margin:5px 0 0 0;font-size:var(--zf-font-size-small, 14px);color:var(--zf-color-text-secondary, #666);line-height:1.4} 122.suspend-resume-subscription-section.svelte-1hog2jr{margin-top:1rem;margin-bottom:1rem}.field.svelte-1hog2jr{margin-bottom:0.5rem}label.svelte-1hog2jr{display:block;margin-bottom:0.5rem;color:var(--zephr-color-text-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-1hog2jr{width:100%;padding:0.5rem;border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);background-color:var(--zf-input-bgColor);color:var(--zephr-color-text-main);font-family:var(--zf-root-fontFamily)}input.svelte-1hog2jr::placeholder{color:var(--zephr-color-background-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-1hog2jr:focus{outline:none;border-color:var(--zephr-color-action-main)}.error.svelte-1hog2jr{border-color:var(--zephr-color-warning-main) !important}.error-text.svelte-1hog2jr{color:var(--zephr-color-warning-main);font-size:0.875em;margin-top:0.25rem;font-family:var(--zf-root-fontFamily)} 123.subscription-custom-fields-container.svelte-uox0m2{padding:0;max-width:800px;margin:0 auto}.form-title.svelte-uox0m2{font-size:1.75rem;font-weight:700;margin:0 0 16px 0;color:var(--zephr-color-text-main)}.form-description.svelte-uox0m2{font-size:1rem;margin:0 0 32px 0;color:var(--zephr-color-text-tinted);line-height:1.5}.custom-fields-form.svelte-uox0m2{display:flex;flex-direction:column;gap:16px}.field-item.svelte-uox0m2{display:flex;flex-direction:column;gap:8px;padding:16px;background-color:var(--zephr-color-background-main);border:1px solid var(--zephr-color-background-tinted);border-radius:8px;transition:all 0.2s ease}.field-item.svelte-uox0m2:focus-within{border-color:var(--zephr-color-action-main);box-shadow:0 0 0 2px rgba(66, 153, 225, 0.1)}.field-label.svelte-uox0m2{font-weight:600;font-size:0.9rem;color:var(--zephr-color-text-main);display:flex;align-items:center;gap:8px}.field-input.svelte-uox0m2{padding:12px 16px;border:2px solid var(--zephr-color-background-tinted);border-radius:8px;font-size:1rem;transition:all 0.2s ease;background-color:var(--zephr-color-background-main)}.field-input.svelte-uox0m2:focus{outline:none;border-color:var(--zephr-color-action-main);box-shadow:0 0 0 3px rgba(66, 153, 225, 0.1)}.field-input.svelte-uox0m2:disabled{background-color:#f5f5f5;color:#666;cursor:not-allowed}.success-message.svelte-uox0m2{background-color:#d4edda;border:1px solid #c3e6cb;color:#155724;padding:12px 16px;border-radius:8px;margin:16px 0;font-weight:500;display:flex;align-items:center;gap:8px}.error-message.svelte-uox0m2{background-color:#f8d7da;border:1px solid #f5c6cb;color:#721c24;padding:12px 16px;border-radius:8px;margin:16px 0;font-weight:500;display:flex;align-items:center;gap:8px}.form-actions.svelte-uox0m2{margin-top:32px;padding-top:24px;border-top:1px solid var(--zephr-color-background-tinted);text-align:center;display:flex;justify-content:center;gap:16px}.submit-button.svelte-uox0m2{background:linear-gradient(135deg, var(--zephr-color-action-main) 0%, var(--zephr-color-action-tinted) 100%);color:white;border:none;padding:16px 32px;border-radius:8px;font-size:1rem;font-weight:600;cursor:pointer;transition:all 0.2s ease;min-width:160px}.submit-button.svelte-uox0m2:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 4px 8px rgba(0, 0, 0, 0.2)}.submit-button.svelte-uox0m2:disabled{opacity:0.6;cursor:not-allowed;transform:none}.simple-field-group.svelte-uox0m2{margin-bottom:24px;display:flex;flex-direction:column;gap:16px}.loading.svelte-uox0m2{text-align:center;padding:40px 20px;color:var(--zephr-color-text-tinted);font-size:1.1rem;background-color:var(--zephr-color-background-tinted);border-radius:8px} 124.bill-to-contact-section.svelte-z564ap{margin-top:1rem;margin-bottom:1rem}.field.svelte-z564ap{margin-bottom:0.5rem}label.svelte-z564ap{display:block;margin-bottom:0.5rem;color:var(--zephr-color-text-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-z564ap,select.svelte-z564ap{width:100%;padding:0.5rem;border:calc(var(--zephr-input-borderWidth) * 1px) solid 125 var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);background-color:var(--zf-input-bgColor);color:var(--zephr-color-text-main);font-family:var(--zf-root-fontFamily)}input.svelte-z564ap::placeholder{color:var(--zephr-color-background-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-z564ap:focus{outline:none;border-color:var(--zephr-color-action-main)}.error.svelte-z564ap{border-color:var(--zephr-color-warning-main) !important}.error-text.svelte-z564ap{color:var(--zephr-color-warning-main);font-size:0.875em;margin-top:0.25rem;font-family:var(--zf-root-fontFamily)} 126.zephr-form-max-width{max-width:var(--zf-container-maxWidth);margin:auto}.zephr-form-content.svelte-j7lu48{padding:var(--zf-container-padding);background-color:var(--zf-container-bgColor);border:var(--zf-container-border);border-radius:var(--zf-container-borderRadius)}.zephr-payment-options-content.svelte-j7lu48{background-color:transparent;border:none;border-radius:0}.close-button-container.svelte-j7lu48{text-align:right;width:100%;margin-bottom:15px}.close-button.svelte-j7lu48{cursor:pointer;display:inline;padding:7px;min-width:32px;min-height:32px;border-radius:16px;margin:1px}.loading-placeholder.svelte-j7lu48{display:flex;justify-content:center;align-items:center;min-height:200px} 127.zephr-form{--zf-root-fontSize:16px;--zf-root-fontFamily:var(--zephr-typography-body-font), var(--zephr-typography-body-fallbackFont);--zf-container-maxWidth:440px;--zf-container-padding:20px;--zf-container-margin:20px auto;--zf-container-border:none;--zf-container-borderRadius:calc(var(--zephr-input-borderRadius) * 1px);--zf-container-color:var(--zephr-color-text-main);--zf-container-bgColor:var(--zephr-color-background-main, transparent);--zf-info-fontSize:14px;--zf-subtext-fontSize:12px;--zf-link-color:#6ba5e9;--zf-input-fontSize:var(--zf-root-fontSize);--zf-input-bgColor:var(--zephr-color-background-main, transparent);--zf-button-fontSize:calc(var(--zephr-button-fontSize, 16) * 1px);--zf-button-color:#fff;--zf-password-valid-color:#7bcb7f;--zf-password-invalid-color:#c4c4c4;--zf-payment-options-fontSize:var(--zf-subtext-fontSize);--zf-payment-options-color:var(--zephr-color-text-main);--zf-payment-options-bgColor:var(--zf-container-bgColor);--zf-payment-options-border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);--zf-payment-options-borderRadius:calc(var(--zephr-input-borderRadius) * 1px);--zf-payment-options-highlighted-color:var(--zephr-color-text-main);--zf-payment-options-highlighted-bgColor:var(--zephr-color-accent-main);--zf-payment-summary-fontSize:var(--zf-subtext-fontSize);--zf-payment-summary-color:var(--zephr-color-text-main);--zf-payment-summary-bgColor:var(--zf-input-bgColor);--zf-payment-summary-border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);--zf-payment-summary-borderRadius:calc(var(--zephr-input-borderRadius) * 1px);--zf-list-subscriptions-container-maxWidth:630px;--zf-list-subscriptions-container-padding:24px;--zf-list-subscriptions-section-padding:16px 0px;--zf-list-subscriptions-container-border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);--zf-list-subscriptions-container-borderRadius:calc(var(--zephr-input-borderRadius) * 1px);--zf-list-subscriptions-info-fontSize:var(--zf-info-fontSize)}.zephr-form.svelte-789zog{color:var(--zf-container-color);margin:var(--zf-container-margin);font-size:var(--zf-root-fontSize);font-family:var(--zf-root-fontFamily)}.zephr-form *{box-sizing:border-box}:where(.zephr-form) button{text-transform:unset;overflow:visible;font-family:var(--zf-root-fontFamily, unset);font-size:var(--zf-root-fontSize, unset);line-height:unset;margin:unset;padding:unset;border:unset;background:unset;&:hover, &:focus-visible { 128 border: unset; 129 background: unset; 130 }}.zephr-form-disabled-div{pointer-events:none;opacity:0.8}.zephr-form-relative-container{position:relative}.zephr-form-flex-container{display:flex}
130.zephr-form-input-inner-button{cursor:pointer;position:absolute;top:50%;transform:translateY(-50%);right:5px;padding:10px 5px}.zephr-form-input-inner-text{color:var(--zephr-color-text-main);font-size:var(--zf-subtext-fontSize);font-weight:bold;font-family:var(--zf-root-fontFamily)} 131</style> 132
132<script data-cmp-ab="2">(function () { 133 'use strict'; 134 135 /** @returns {void} */ 136 function noop() {} 137 138 /** 139 * @template T 140 * @template S 141 * @param {T} tar 142 * @param {S} src 143 * @returns {T & S} 144 */ 145 function assign(tar, src) { 146 // @ts-ignore 147 for (const k in src) tar[k] = src[k]; 148 return /** @type {T & S} */ (tar); 149 } 150 151 function run(fn) { 152 return fn(); 153 } 154 155 function blank_object() { 156 return Object.create(null); 157 } 158 159 /** 160 * @param {Function[]} fns 161 * @returns {void} 162 */ 163 function run_all(fns) { 164 fns.forEach(run); 165 } 166 167 /** 168 * @param {any} thing 169 * @returns {thing is Function} 170 */ 171 function is_function(thing) { 172 return typeof thing === 'function'; 173 } 174 175 /** @returns {boolean} */ 176 function safe_not_equal(a, b) { 177 return a != a ? b == b : a !== b || (a && typeof a === 'object') || typeof a === 'function'; 178 } 179 180 let src_url_equal_anchor; 181 182 /** 183 * @param {string} element_src 184 * @param {string} url 185 * @returns {boolean} 186 */ 187 function src_url_equal(element_src, url) { 188 if (element_src === url) return true; 189 if (!src_url_equal_anchor) { 190 src_url_equal_anchor = document.createElement('a'); 191 } 192 // This is actually faster than doing URL(..).href 193 src_url_equal_anchor.href = url; 194 return element_src === src_url_equal_anchor.href; 195 } 196 197 /** @returns {boolean} */ 198 function is_empty(obj) { 199 return Object.keys(obj).length === 0; 200 } 201 202 function create_slot(definition, ctx, $$scope, fn) { 203 if (definition) { 204 const slot_ctx = get_slot_context(definition, ctx, $$scope, fn); 205 return definition[0](slot_ctx); 206 } 207 } 208 209 function get_slot_context(definition, ctx, $$scope, fn) { 210 return definition[1] && fn ? assign($$scope.ctx.slice(), definition[1](fn(ctx))) : $$scope.ctx; 211 } 212 213 function get_slot_changes(definition, $$scope, dirty, fn) { 214 if (definition[2] && fn) { 215 const lets = definition[2](fn(dirty)); 216 if ($$scope.dirty === undefined) { 217 return lets; 218 } 219 if (typeof lets === 'object') { 220 const merged = []; 221 const len = Math.max($$scope.dirty.length, lets.length); 222 for (let i = 0; i < len; i += 1) { 223 merged[i] = $$scope.dirty[i] | lets[i]; 224 } 225 return merged; 226 } 227 return $$scope.dirty | lets; 228 } 229 return $$scope.dirty; 230 } 231 232 /** @returns {void} */ 233 function update_slot_base( 234 slot, 235 slot_definition, 236 ctx, 237 $$scope, 238 slot_changes, 239 get_slot_context_fn 240 ) { 241 if (slot_changes) { 242 const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn); 243 slot.p(slot_context, slot_changes); 244 } 245 } 246 247 /** @returns {any[] | -1} */ 248 function get_all_dirty_from_scope($$scope) { 249 if ($$scope.ctx.length > 32) { 250 const dirty = []; 251 const length = $$scope.ctx.length / 32; 252 for (let i = 0; i < length; i++) { 253 dirty[i] = -1; 254 } 255 return dirty; 256 } 257 return -1; 258 } 259 260 function null_to_empty(value) { 261 return value == null ? '' : value; 262 } 263 264 function action_destroyer(action_result) { 265 return action_result && is_function(action_result.destroy) ? action_result.destroy : noop; 266 } 267 268 /** 269 * @param {Node} target 270 * @param {Node} node 271 * @returns {void} 272 */ 273 function append(target, node) { 274 target.appendChild(node); 275 } 276 277 /** 278 * @param {Node} target 279 * @param {Node} node 280 * @param {Node} [anchor] 281 * @returns {void} 282 */ 283 function insert(target, node, anchor) { 284 target.insertBefore(node, anchor || null); 285 } 286 287 /** 288 * @param {Node} node 289 * @returns {void} 290 */ 291 function detach(node) { 292 if (node.parentNode) { 293 node.parentNode.removeChild(node); 294 } 295 } 296 297 /** 298 * @returns {void} */ 299 function destroy_each(iterations, detaching) { 300 for (let i = 0; i < iterations.length; i += 1) { 301 if (iterations[i]) iterations[i].d(detaching); 302 } 303 } 304 305 /** 306 * @template {keyof HTMLElementTagNameMap} K 307 * @param {K} name 308 * @returns {HTMLElementTagNameMap[K]} 309 */ 310 function element(name) { 311 return document.createElement(name); 312 } 313 314 /** 315 * @template {keyof SVGElementTagNameMap} K 316 * @param {K} name 317 * @returns {SVGElement} 318 */ 319 function svg_element(name) { 320 return document.createElementNS('http://www.w3.org/2000/svg', name); 321 } 322 323 /** 324 * @param {string} data 325 * @returns {Text} 326 */ 327 function text(data) { 328 return document.createTextNode(data); 329 } 330 331 /** 332 * @returns {Text} */ 333 function space() { 334 return text(' '); 335 } 336 337 /** 338 * @returns {Text} */ 339 function empty() { 340 return text(''); 341 } 342 343 /** 344 * @param {EventTarget} node 345 * @param {string} event 346 * @param {EventListenerOrEventListenerObject} handler 347 * @param {boolean | AddEventListenerOptions | EventListenerOptions} [options] 348 * @returns {() => void} 349 */ 350 function listen(node, event, handler, options) { 351 node.addEventListener(event, handler, options); 352 return () => node.removeEventListener(event, handler, options); 353 } 354 355 /** 356 * @returns {(event: any) => any} */ 357 function prevent_default(fn) { 358 return function (event) { 359 event.preventDefault(); 360 // @ts-ignore
361 return fn.call(this, event); 362 }; 363 } 364 365 /** 366 * @returns {(event: any) => void} */ 367 function self(fn) { 368 return function (event) { 369 // @ts-ignore 370 if (event.target === this) fn.call(this, event); 371 }; 372 } 373 374 /** 375 * @param {Element} node 376 * @param {string} attribute 377 * @param {string} [value] 378 * @returns {void} 379 */ 380 function attr(node, attribute, value) { 381 if (value == null) node.removeAttribute(attribute); 382 else if (node.getAttribute(attribute) !== value) node.setAttribute(attribute, value); 383 } 384 /** 385 * List of attributes that should always be set through the attr method, 386 * because updating them through the property setter doesn't work reliably. 387 * In the example of `width`/`height`, the problem is that the setter only 388 * accepts numeric values, but the attribute can also be set to a string like `50%`. 389 * If this list becomes too big, rethink this approach. 390 */ 391 const always_set_through_set_attribute = ['width', 'height']; 392 393 /** 394 * @param {Element & ElementCSSInlineStyle} node 395 * @param {{ [x: string]: string }} attributes 396 * @returns {void} 397 */ 398 function set_attributes(node, attributes) { 399 // @ts-ignore 400 const descriptors = Object.getOwnPropertyDescriptors(node.__proto__); 401 for (const key in attributes) { 402 if (attributes[key] == null) { 403 node.removeAttribute(key); 404 } else if (key === 'style') { 405 node.style.cssText = attributes[key]; 406 } else if (key === '__value') { 407 /** @type {any} */ (node).value = node[key] = attributes[key]; 408 } else if ( 409 descriptors[key] && 410 descriptors[key].set && 411 always_set_through_set_attribute.indexOf(key) === -1 412 ) { 413 node[key] = attributes[key]; 414 } else { 415 attr(node, key, attributes[key]); 416 } 417 } 418 } 419 420 /** 421 * @param {Element} element 422 * @returns {ChildNode[]} 423 */ 424 function children(element) { 425 return Array.from(element.childNodes); 426 } 427 428 /** 429 * @param {Text} text 430 * @param {unknown} data 431 * @returns {void} 432 */ 433 function set_data(text, data) { 434 data = '' + data; 435 if (text.data === data) return; 436 text.data = /** @type {string} */ (data); 437 } 438 439 /** 440 * @returns {void} */ 441 function set_input_value(input, value) { 442 input.value = value == null ? '' : value; 443 } 444 445 /** 446 * @returns {void} */ 447 function set_style(node, key, value, important) { 448 if (value == null) { 449 node.style.removeProperty(key); 450 } else { 451 node.style.setProperty(key, value, important ? 'important' : ''); 452 } 453 } 454 455 /** 456 * @returns {void} */ 457 function select_option(select, value, mounting) { 458 for (let i = 0; i < select.options.length; i += 1) { 459 const option = select.options[i]; 460 if (option.__value === value) { 461 option.selected = true; 462 return; 463 } 464 } 465 if (!mounting || value !== undefined) { 466 select.selectedIndex = -1; // no option should be selected 467 } 468 } 469 470 /** 471 * @returns {void} */ 472 function toggle_class(element, name, toggle) { 473 // The `!!` is required because an `undefined` flag means flipping the current state. 474 element.classList.toggle(name, !!toggle); 475 } 476 477 /** 478 * @template T 479 * @param {string} type 480 * @param {T} [detail] 481 * @param {{ bubbles?: boolean, cancelable?: boolean }} [options] 482 * @returns {CustomEvent<T>} 483 */ 484 function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) { 485 return new CustomEvent(type, { detail, bubbles, cancelable }); 486 } 487 488 function construct_svelte_component(component, props) { 489 return new component(props); 490 } 491 492 /** 493 * @typedef {Node & { 494 * claim_order?: number; 495 * hydrate_init?: true; 496 * actual_end_child?: NodeEx; 497 * childNodes: NodeListOf<NodeEx>; 498 * }} NodeEx 499 */ 500 501 /** @typedef {ChildNode & NodeEx} ChildNodeEx */ 502 503 /** @typedef {NodeEx & { claim_order: number }} NodeEx2 */ 504 505 /** 506 * @typedef {ChildNodeEx[] & { 507 * claim_info?: { 508 * last_index: number; 509 * total_claimed: number; 510 * }; 511 * }} ChildNodeArray 512 */ 513 514 let current_component; 515 516 /** @returns {void} */ 517 function set_current_component(component) { 518 current_component = component; 519 } 520 521 function get_current_component() { 522 if (!current_component) throw new Error('Function called outside component initialization'); 523 return current_component; 524 } 525 526 /** 527 * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM. 528 * It must be called during the component's initialisation (but doesn't need to live *inside* the component; 529 * it can be called from an external module). 530 * 531 * If a function is returned _synchronously_ from `onMount`, it will be called when the component is unmounted. 532 * 533 * `onMount` does not run inside a [server-side component](https://svelte.dev/docs#run-time-server-side-component-api). 534 * 535 * https://svelte.dev/docs/svelte#onmount
536 * @template T 537 * @param {() => import('./private.js').NotFunction<T> | Promise<import('./private.js').NotFunction<T>> | (() => any)} fn 538 * @returns {void} 539 */ 540 function onMount(fn) { 541 get_current_component().$$.on_mount.push(fn); 542 } 543 544 /** 545 * Schedules a callback to run immediately after the component has been updated. 546 * 547 * The first time the callback runs will be after the initial `onMount` 548 * 549 * https://svelte.dev/docs/svelte#afterupdate 550 * @param {() => any} fn 551 * @returns {void} 552 */ 553 function afterUpdate(fn) { 554 get_current_component().$$.after_update.push(fn); 555 } 556 557 /** 558 * Schedules a callback to run immediately before the component is unmounted. 559 * 560 * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the 561 * only one that runs inside a server-side component. 562 * 563 * https://svelte.dev/docs/svelte#ondestroy 564 * @param {() => any} fn 565 * @returns {void} 566 */ 567 function onDestroy(fn) { 568 get_current_component().$$.on_destroy.push(fn); 569 } 570 571 /** 572 * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs#template-syntax-component-directives-on-eventname). 573 * Event dispatchers are functions that can take two arguments: `name` and `detail`. 574 * 575 * Component events created with `createEventDispatcher` create a 576 * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent). 577 * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture). 578 * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail) 579 * property and can contain any type of data. 580 * 581 * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument: 582 * ```ts 583 * const dispatch = createEventDispatcher<{ 584 * loaded: never; // does not take a detail argument 585 * change: string; // takes a detail argument of type string, which is required 586 * optional: number | null; // takes an optional detail argument of type number 587 * }>(); 588 * ``` 589 * 590 * https://svelte.dev/docs/svelte#createeventdispatcher 591 * @template {Record<string, any>} [EventMap=any] 592 * @returns {import('./public.js').EventDispatcher<EventMap>} 593 */ 594 function createEventDispatcher() { 595 const component = get_current_component(); 596 return (type, detail, { cancelable = false } = {}) => { 597 const callbacks = component.$$.callbacks[type]; 598 if (callbacks) { 599 // TODO are there situations where events could be dispatched 600 // in a server (non-DOM) environment? 601 const event = custom_event(/** @type {string} */ (type), detail, { cancelable }); 602 callbacks.slice().forEach((fn) => { 603 fn.call(component, event); 604 }); 605 return !event.defaultPrevented; 606 } 607 return true; 608 }; 609 } 610 611 const dirty_components = []; 612 const binding_callbacks = []; 613 614 let render_callbacks = []; 615 616 const flush_callbacks = []; 617 618 const resolved_promise = /* @__PURE__ */ Promise.resolve(); 619 620 let update_scheduled = false; 621 622 /** @returns {void} */ 623 function schedule_update() { 624 if (!update_scheduled) { 625 update_scheduled = true; 626 resolved_promise.then(flush); 627 } 628 } 629 630 /** @returns {void} */ 631 function add_render_callback(fn) { 632 render_callbacks.push(fn); 633 } 634 635 // flush() calls callbacks in this order: 636 // 1. All beforeUpdate callbacks, in order: parents before children 637 // 2. All bind:this callbacks, in reverse order: children before parents. 638 // 3. All afterUpdate callbacks, in order: parents before children. EXCEPT 639 // for afterUpdates called during the initial onMount, which are called in 640 // reverse order: children before parents. 641 // Since callbacks might update component values, which could trigger another 642 // call to flush(), the following steps guard against this: 643 // 1. During beforeUpdate, any updated components will be added to the 644 // dirty_components array and will cause a reentrant call to flush(). Because 645 // the flush index is kept outside the function, the reentrant call will pick 646 // up where the earlier call left off and go through all dirty components. The 647 // current_component value is saved and restored so that the reentrant call will 648 // not interfere with the "parent" flush() call. 649 // 2. bind:this callbacks cannot trigger new flush() calls. 650 // 3. During afterUpdate, any updated components will NOT have their afterUpdate 651 // callback called a second time; the seen_callbacks set, outside the flush() 652 // function, guarantees this behavior. 653 const seen_callbacks = new Set(); 654 655 let flushidx = 0; // Do *not* move this inside the flush() function 656 657 /** @returns {void} */ 658 function flush() {
vendor: 4,269 bytes, lines 659-834
659 // Do not reenter flush while dirty components are updated, as this can 660 // result in an infinite loop. Instead, let the inner flush handle it. 661 // Reentrancy is ok afterwards for bindings etc. 662 if (flushidx !== 0) { 663 return; 664 } 665 const saved_component = current_component; 666 do { 667 // first, call beforeUpdate functions 668 // and update components 669 try { 670 while (flushidx < dirty_components.length) { 671 const component = dirty_components[flushidx]; 672 flushidx++; 673 set_current_component(component); 674 update(component.$$); 675 } 676 } catch (e) { 677 // reset dirty state to not end up in a deadlocked state and then rethrow 678 dirty_components.length = 0; 679 flushidx = 0; 680 throw e; 681 } 682 set_current_component(null); 683 dirty_components.length = 0; 684 flushidx = 0; 685 while (binding_callbacks.length) binding_callbacks.pop()(); 686 // then, once components are updated, call 687 // afterUpdate functions. This may cause 688 // subsequent updates... 689 for (let i = 0; i < render_callbacks.length; i += 1) { 690 const callback = render_callbacks[i]; 691 if (!seen_callbacks.has(callback)) { 692 // ...so guard against infinite loops 693 seen_callbacks.add(callback); 694 callback(); 695 } 696 } 697 render_callbacks.length = 0; 698 } while (dirty_components.length); 699 while (flush_callbacks.length) { 700 flush_callbacks.pop()(); 701 } 702 update_scheduled = false; 703 seen_callbacks.clear(); 704 set_current_component(saved_component); 705 } 706 707 /** @returns {void} */ 708 function update($$) { 709 if ($$.fragment !== null) { 710 $$.update(); 711 run_all($$.before_update); 712 const dirty = $$.dirty; 713 $$.dirty = [-1]; 714 $$.fragment && $$.fragment.p($$.ctx, dirty); 715 $$.after_update.forEach(add_render_callback); 716 } 717 } 718 719 /** 720 * Useful for example to execute remaining `afterUpdate` callbacks before executing `destroy`. 721 * @param {Function[]} fns 722 * @returns {void} 723 */ 724 function flush_render_callbacks(fns) { 725 const filtered = []; 726 const targets = []; 727 render_callbacks.forEach((c) => (fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c))); 728 targets.forEach((c) => c()); 729 render_callbacks = filtered; 730 } 731 732 const outroing = new Set(); 733 734 /** 735 * @type {Outro} 736 */ 737 let outros; 738 739 /** 740 * @returns {void} */ 741 function group_outros() { 742 outros = { 743 r: 0, 744 c: [], 745 p: outros // parent group 746 }; 747 } 748 749 /** 750 * @returns {void} */ 751 function check_outros() { 752 if (!outros.r) { 753 run_all(outros.c); 754 } 755 outros = outros.p; 756 } 757 758 /** 759 * @param {import('./private.js').Fragment} block 760 * @param {0 | 1} [local] 761 * @returns {void} 762 */ 763 function transition_in(block, local) { 764 if (block && block.i) { 765 outroing.delete(block); 766 block.i(local); 767 } 768 } 769 770 /** 771 * @param {import('./private.js').Fragment} block 772 * @param {0 | 1} local 773 * @param {0 | 1} [detach] 774 * @param {() => void} [callback] 775 * @returns {void} 776 */ 777 function transition_out(block, local, detach, callback) { 778 if (block && block.o) { 779 if (outroing.has(block)) return; 780 outroing.add(block); 781 outros.c.push(() => { 782 outroing.delete(block); 783 if (callback) { 784 if (detach) block.d(1); 785 callback(); 786 } 787 }); 788 block.o(local); 789 } else if (callback) { 790 callback(); 791 } 792 } 793 794 /** @typedef {1} INTRO */ 795 /** @typedef {0} OUTRO */ 796 /** @typedef {{ direction: 'in' | 'out' | 'both' }} TransitionOptions */ 797 /** @typedef {(node: Element, params: any, options: TransitionOptions) => import('../transition/public.js').TransitionConfig} TransitionFn */ 798 799 /** 800 * @typedef {Object} Outro 801 * @property {number} r 802 * @property {Function[]} c 803 * @property {Object} p 804 */ 805 806 /** 807 * @typedef {Object} PendingProgram 808 * @property {number} start 809 * @property {INTRO|OUTRO} b 810 * @property {Outro} [group] 811 */ 812 813 /** 814 * @typedef {Object} Program 815 * @property {number} a 816 * @property {INTRO|OUTRO} b 817 * @property {1|-1} d 818 * @property {number} duration 819 * @property {number} start 820 * @property {number} end 821 * @property {Outro} [group] 822 */ 823 824 // general each functions: 825 826 function ensure_array_like(array_like_or_iterator) { 827 return array_like_or_iterator?.length !== undefined 828 ? array_like_or_iterator 829 : Array.from(array_like_or_iterator); 830 } 831 832 /** @returns {{}} */ 833 function get_spread_update(levels, updates) { 834 const update = {};
835 const to_null_out = {}; 836 const accounted_for = { $$scope: 1 }; 837 let i = levels.length; 838 while (i--) { 839 const o = levels[i]; 840 const n = updates[i]; 841 if (n) { 842 for (const key in o) { 843 if (!(key in n)) to_null_out[key] = 1; 844 } 845 for (const key in n) { 846 if (!accounted_for[key]) { 847 update[key] = n[key]; 848 accounted_for[key] = 1; 849 } 850 } 851 levels[i] = n; 852 } else { 853 for (const key in o) { 854 accounted_for[key] = 1; 855 } 856 } 857 } 858 for (const key in to_null_out) { 859 if (!(key in update)) update[key] = undefined; 860 } 861 return update; 862 } 863 864 function get_spread_object(spread_props) { 865 return typeof spread_props === 'object' && spread_props !== null ? spread_props : {}; 866 } 867 868 /** @returns {void} */ 869 function create_component(block) { 870 block && block.c(); 871 } 872 873 /** @returns {void} */ 874 function mount_component(component, target, anchor) { 875 const { fragment, after_update } = component.$$; 876 fragment && fragment.m(target, anchor); 877 // onMount happens before the initial afterUpdate 878 add_render_callback(() => { 879 const new_on_destroy = component.$$.on_mount.map(run).filter(is_function); 880 // if the component was destroyed immediately 881 // it will update the `$$.on_destroy` reference to `null`. 882 // the destructured on_destroy may still reference to the old array 883 if (component.$$.on_destroy) { 884 component.$$.on_destroy.push(...new_on_destroy); 885 } else { 886 // Edge case - component was destroyed immediately, 887 // most likely as a result of a binding initialising 888 run_all(new_on_destroy); 889 } 890 component.$$.on_mount = []; 891 }); 892 after_update.forEach(add_render_callback); 893 } 894 895 /** @returns {void} */ 896 function destroy_component(component, detaching) { 897 const $$ = component.$$; 898 if ($$.fragment !== null) { 899 flush_render_callbacks($$.after_update); 900 run_all($$.on_destroy); 901 $$.fragment && $$.fragment.d(detaching); 902 // TODO null out other refs, including component.$$ (but need to 903 // preserve final state?) 904 $$.on_destroy = $$.fragment = null; 905 $$.ctx = []; 906 } 907 } 908 909 /** @returns {void} */ 910 function make_dirty(component, i) { 911 if (component.$$.dirty[0] === -1) { 912 dirty_components.push(component); 913 schedule_update(); 914 component.$$.dirty.fill(0); 915 } 916 component.$$.dirty[(i / 31) | 0] |= 1 << i % 31; 917 } 918 919 // TODO: Document the other params 920 /** 921 * @param {SvelteComponent} component 922 * @param {import('./public.js').ComponentConstructorOptions} options 923 * 924 * @param {import('./utils.js')['not_equal']} not_equal Used to compare props and state values. 925 * @param {(target: Element | ShadowRoot) => void} [append_styles] Function that appends styles to the DOM when the component is first initialised. 926 * This will be the `add_css` function from the compiled component. 927 * 928 * @returns {void} 929 */ 930 function init( 931 component, 932 options, 933 instance, 934 create_fragment, 935 not_equal, 936 props, 937 append_styles = null, 938 dirty = [-1] 939 ) { 940 const parent_component = current_component; 941 set_current_component(component); 942 /** @type {import('./private.js').T$$} */ 943 const $$ = (component.$$ = { 944 fragment: null, 945 ctx: [], 946 // state 947 props, 948 update: noop, 949 not_equal, 950 bound: blank_object(), 951 // lifecycle 952 on_mount: [], 953 on_destroy: [], 954 on_disconnect: [], 955 before_update: [], 956 after_update: [], 957 context: new Map(options.context || (parent_component ? parent_component.$$.context : [])), 958 // everything else 959 callbacks: blank_object(), 960 dirty, 961 skip_bound: false, 962 root: options.target || parent_component.$$.root 963 }); 964 append_styles && append_styles($$.root); 965 let ready = false; 966 $$.ctx = instance 967 ? instance(component, options.props || {}, (i, ret, ...rest) => { 968 const value = rest.length ? rest[0] : ret; 969 if ($$.ctx && not_equal($$.ctx[i], ($$.ctx[i] = value))) { 970 if (!$$.skip_bound && $$.bound[i]) $$.bound[i](value); 971 if (ready) make_dirty(component, i); 972 } 973 return ret; 974 }) 975 : []; 976 $$.update(); 977 ready = true; 978 run_all($$.before_update); 979 // `false` as a special case of no DOM component 980 $$.fragment = create_fragment ? create_fragment($$.ctx) : false;
981 if (options.target) { 982 if (options.hydrate) { 983 // TODO: what is the correct type here? 984 // @ts-expect-error 985 const nodes = children(options.target); 986 $$.fragment && $$.fragment.l(nodes); 987 nodes.forEach(detach); 988 } else { 989 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion 990 $$.fragment && $$.fragment.c(); 991 } 992 if (options.intro) transition_in(component.$$.fragment); 993 mount_component(component, options.target, options.anchor); 994 flush(); 995 } 996 set_current_component(parent_component); 997 } 998 999 /** 1000 * Base class for Svelte components. Used when dev=false. 1001 * 1002 * @template {Record<string, any>} [Props=any] 1003 * @template {Record<string, any>} [Events=any] 1004 */ 1005 class SvelteComponent { 1006 /** 1007 * ### PRIVATE API 1008 * 1009 * Do not use, may change at any time 1010 * 1011 * @type {any} 1012 */ 1013 $$ = undefined; 1014 /** 1015 * ### PRIVATE API 1016 * 1017 * Do not use, may change at any time 1018 * 1019 * @type {any} 1020 */ 1021 $$set = undefined; 1022 1023 /** @returns {void} */ 1024 $destroy() { 1025 destroy_component(this, 1); 1026 this.$destroy = noop; 1027 } 1028 1029 /** 1030 * @template {Extract<keyof Events, string>} K 1031 * @param {K} type 1032 * @param {((e: Events[K]) => void) | null | undefined} callback 1033 * @returns {() => void} 1034 */ 1035 $on(type, callback) { 1036 if (!is_function(callback)) { 1037 return noop; 1038 } 1039 const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []); 1040 callbacks.push(callback); 1041 return () => { 1042 const index = callbacks.indexOf(callback); 1043 if (index !== -1) callbacks.splice(index, 1); 1044 }; 1045 } 1046 1047 /** 1048 * @param {Partial<Props>} props 1049 * @returns {void} 1050 */ 1051 $set(props) { 1052 if (this.$$set && !is_empty(props)) { 1053 this.$$.skip_bound = true; 1054 this.$$set(props); 1055 this.$$.skip_bound = false; 1056 } 1057 } 1058 } 1059 1060 /** 1061 * @typedef {Object} CustomElementPropDefinition 1062 * @property {string} [attribute] 1063 * @property {boolean} [reflect] 1064 * @property {'String'|'Boolean'|'Number'|'Array'|'Object'} [type] 1065 */ 1066 1067 // generated during release, do not modify 1068 1069 const PUBLIC_VERSION = '4'; 1070 1071 if (typeof window !== 'undefined') 1072 // @ts-ignore 1073 (window.__svelte || (window.__svelte = { v: new Set() })).v.add(PUBLIC_VERSION); 1074 1075 // Some height larger than whats resonable expected, 1076 // but not so large as to infulence the transition time 1077 const TRANSITION_OPEN_HEIGHT = '700px'; 1078 // Absolute max height 1079 const MAX_OPEN_HEIGHT = '10000px'; 1080 const CLOSED_HEIGHT = '0px'; 1081 const DURATION_MS = 500; 1082 function accordion(node, isOpen) { 1083 let currentState = isOpen; 1084 node.style.maxHeight = isOpen ? MAX_OPEN_HEIGHT : CLOSED_HEIGHT; 1085 node.style.overflow = isOpen ? "unset" : "hidden"; 1086 const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)'); 1087 const animationsDisabled = mediaQuery.matches; 1088 if (animationsDisabled) { 1089 node.style.display = isOpen ? 'unset' : 'none'; 1090 } 1091 return { 1092 update(isOpen) { 1093 if (animationsDisabled) { 1094 node.style.display = isOpen ? 'unset' : 'none'; 1095 return; 1096 } 1097 if (isOpen === currentState) { 1098 return; 1099 } 1100 currentState = isOpen; 1101 const toHeight = isOpen ? TRANSITION_OPEN_HEIGHT : CLOSED_HEIGHT; 1102 const fromHeight = isOpen ? CLOSED_HEIGHT : TRANSITION_OPEN_HEIGHT; 1103 node.animate([ 1104 { 1105 maxHeight: fromHeight, 1106 overflow: 'hidden' 1107 }, 1108 { 1109 maxHeight: toHeight, 1110 overflow: 'hidden' 1111 }, 1112 ], { 1113 duration: DURATION_MS, 1114 fill: 'both', 1115 }).addEventListener("finish", () => { 1116 // After the opening transition, unset the max height so if it's larger than OPEN_HEIGHT the content 1117 // will be shown, but via a quick jump 1118 if (!isOpen) { 1119 return; 1120 } 1121 node.animate([ 1122 { 1123 maxHeight: toHeight, 1124 overflow: 'hidden' 1125 }, 1126 { 1127 maxHeight: MAX_OPEN_HEIGHT, 1128 overflow: 'hidden' 1129 }, 1130 ], { 1131 duration: 100, 1132 fill: 'both', 1133 }); 1134 }); 1135 } 1136 }; 1137 } 1138 1139 const elementTypes = { 1140 PROGRESS_BAR: 'progress_bar', 1141 PAYMENT_OPTION_SELECTION: 'payment_option_selection', 1142 PASSWORD: 'password', 1143 VERIFICATION_CODE: 'otp_code', 1144 BUTTON: 'button', 1145 PAYMENT: 'payment', 1146 PAYMENT_PRE_LOADER: 'payment-pre-loader', 1147 EMAIL_ADDRESS: 'email_address', 1148 SUCCESS_MESSAGE: 'success_message', 1149 TEXT: 'text', 1150 USER_ATTRIBUTE: 'user_attribute', 1151 RESET_PASSWORD_LINK: 'link', 1152 RESEND_LOGIN_LINK: 'resend_login_link', 1153 SOCIAL_SIGNIN: 'social_sign_in', 1154 PAYMENT_SUMMARY: 'payment_summary', 1155 DIVIDER: 'divider', 1156 LOGIN_LINK: 'show_login_link', 1157 ACCOUNT_MEMBERSHIP_CODE: 'account_code', 1158 MOBILE_PAYMENT: 'mobile_payment', 1159 INVITATION: 'invitation', 1160 TEMPLATE_COMPONENT: 'template_component', 1161 SUBSCRIPTION_SELECT: 'subscription_select', 1162 EVENT_LINK: 'event_link', 1163 SUBSCRIPTIONS_LIST: 'subscriptions_list', 1164 PAST_SUBSCRIPTIONS_LINK: 'past_subscriptions_link', 1165 BILLING_HISTORY: 'billing_history', 1166 CHNAGE_PAYMENT_METHOD_BUTTON: 'change_payment_method_button', 1167 READ_ONLY_EMAIL_ADDRESS: 'read_only_email_address', 1168 READ_ONLY_PASSWORD: 'read_only_password', 1169 READ_ONLY_USER_ATTRIBUTE: 'read_only_user_attribute', 1170 CHNAGE_PAYMENT_METHOD: 'change_payment_method', 1171 DEVICES_SESSIONS_LIST: 'devices_list', 1172 SIGN_OUT_ALL_OTHER_DEVICES: 'sign_out_of_devices_button', 1173 TABLINK: 'tablink', 1174 BUTTON_GROUP: 'button_group', 1175 LINK_BUTTON: 'link_button', 1176 RECIPIENT_NAME: 'recipient_name', 1177 RECIPIENT_EMAIL: 'recipient_email', 1178 RECIPIENT_ADDRESS: 'recipient_address', 1179 RECIPIENT_MESSAGE: 'recipient_message', 1180 GIFT_CODE: 'gift_code', 1181 GIFT_SUBSCRIPTIONS_LIST: 'gift_subscriptions_list', 1182 GIFT_TOGGLE: 'gift_toggle', 1183 GIFT_FUTURE_DATE_TOGGLE: 'gift_future_date_toggle', 1184 GIFT_FUTURE_DATE_INPUT: 'gift_future_date_input', 1185 PAYMENT_AUTO_RENEW_TOGGLE: 'payment_auto_renew_toggle', 1186 SUSPEND_RESUME_SUBSCRIPTION: 'suspend_resume_subscription', 1187 SUBSCRIPTION_CUSTOM_FIELDS_UPDATE: 'subscription_custom_fields_update', 1188 SUBSCRIPTION_CUSTOM_FIELDS_LIST: 'subscription_custom_fields_list', 1189 BILL_TO_CONTACT: 'bill_to_contact', 1190 BILLING_COUNTRY: 'billing_country', 1191 BILLING_STATE: 'billing_state', 1192 }; 1193 1194 var FormEvent; 1195 (function (FormEvent) { 1196 FormEvent["FORM_START"] = "FORM_START"; 1197 FormEvent["LOGIN_REGISTRATION_COMPLETE"] = "LOGIN_REGISTRATION_COMPLETE"; 1198 FormEvent["SECTION_EMAIL_COMPLETE"] = "SECTION_EMAIL_COMPLETE"; 1199 FormEvent["SECTION_PASSWORD_RESET_COMPLETE"] = "SECTION_PASSWORD_RESET_COMPLETE"; 1200 FormEvent["SECTION_FORGOT_PASSWORD_COMPLETE"] = "SECTION_FORGOT_PASSWORD_COMPLETE"; 1201 FormEvent["PART_PLAN_SELECT_COMPLETE"] = "PART_PLAN_SELECT_COMPLETE"; 1202 FormEvent["PART_ACCOUNT_VERIFICATION_COMPLETE"] = "PART_ACCOUNT_VERIFICATION_COMPLETE"; 1203 FormEvent["PART_GIFT_RECIPIENT_COMPLETE"] = "PART_GIFT_RECIPIENT_COMPLETE"; 1204 FormEvent["PART_PAYMENT_COMPLETE"] = "PART_PAYMENT_COMPLETE"; 1205 FormEvent["PART_SUCCESS_COMPLETE"] = "PART_SUCCESS_COMPLETE"; 1206 FormEvent["PART_CONTACT_VERIFICATION_COMPLETE"] = "PART_CONTACT_VERIFICATION_COMPLETE"; 1207 FormEvent["PART_PROFILE_UPDATE_COMPLETE"] = "PART_PROFILE_UPDATE_COMPLETE"; 1208 FormEvent["PART_EMAIL_UPDATE_COMPLETE"] = "PART_EMAIL_UPDATE_COMPLETE"; 1209 FormEvent["PART_EMAIL_UPDATE_OTP_COMPLETE"] = "PART_EMAIL_UPDATE_OTP_COMPLETE"; 1210 FormEvent["PART_EMAIL_UPDATE_CONFIRMATION_COMPLETE"] = "PART_EMAIL_UPDATE_CONFIRMATION_COMPLETE"; 1211 FormEvent["PART_PASSWORD_UPDATE_COMPLETE"] = "PART_PASSWORD_UPDATE_COMPLETE"; 1212 FormEvent["PART_PASSWORD_UPDATE_OTP_COMPLETE"] = "PART_PASSWORD_UPDATE_OTP_COMPLETE"; 1213 FormEvent["PART_ATTRIBUTES_UPDATE_COMPLETE"] = "PART_ATTRIBUTES_UPDATE_COMPLETE"; 1214 FormEvent["REGISTRATION_CUSTOM_COMPLETE"] = "REGISTRATION_CUSTOM_COMPLETE"; 1215 FormEvent["SELECT_SUBSCRIPTION_COMPLETE"] = "SELECT_SUBSCRIPTION_COMPLETE"; 1216 FormEvent["UPDATE"] = "UPDATE"; 1217 FormEvent["GO_BACK"] = "GO_BACK"; 1218 FormEvent["VERIFY_EMAIL_UPDATE_OTP"] = "VERIFY_EMAIL_UPDATE_OTP"; 1219 FormEvent["VERIFY_PASSWORD_UPDATE_OTP"] = "VERIFY_PASSWORD_UPDATE_OTP"; 1220 FormEvent["PART_CHANGE_PAYMENT_COMPLETE"] = "PART_CHANGE_PAYMENT_COMPLETE"; 1221 FormEvent["LIST_DEVICES_SESSIONS"] = "LIST_DEVICES_SESSIONS";
1222 FormEvent["SIGN_OUT_ALL_DEVICES"] = "SIGN_OUT_ALL_DEVICES"; 1223 FormEvent["SIGN_OUT_SINGLE_DEVICE"] = "SIGN_OUT_SINGLE_DEVICE"; 1224 FormEvent["GIFT_REDEMPTION_COMPLETE"] = "GIFT_REDEMPTION_COMPLETE"; 1225 FormEvent["SUSPEND_RESUME_SUBSCRIPTION_COMPLETE"] = "SUSPEND_RESUME_SUBSCRIPTION_COMPLETE"; 1226 FormEvent["BILL_TO_CONTACT_COMPLETE"] = "BILL_TO_CONTACT_COMPLETE"; 1227 })(FormEvent || (FormEvent = {})); 1228 1229 const partTypes = { 1230 PLAN_SELECT: { 1231 type: 'plan-select', 1232 order: 0, 1233 completionEvent: FormEvent.PART_PLAN_SELECT_COMPLETE 1234 }, 1235 ACCOUNT_VERIFICATION: { 1236 type: 'account-verification', 1237 order: 1, 1238 completionEvent: FormEvent.PART_ACCOUNT_VERIFICATION_COMPLETE 1239 }, 1240 GIFT_RECIPIENT: { 1241 type: 'gift-recipient', 1242 order: 1, 1243 completionEvent: FormEvent.PART_GIFT_RECIPIENT_COMPLETE 1244 }, 1245 PAYMENT: { 1246 type: 'payment', 1247 order: 2, 1248 completionEvent: FormEvent.PART_PAYMENT_COMPLETE 1249 }, 1250 SUCCESS: { 1251 type: 'success', 1252 order: 3, 1253 completionEvent: FormEvent.PART_SUCCESS_COMPLETE 1254 }, 1255 CONTACT_VERIFICATION: { 1256 type: 'contact-verification', 1257 order: 1, 1258 completionEvent: FormEvent.PART_CONTACT_VERIFICATION_COMPLETE 1259 }, 1260 PROFILE_UPDATE: { 1261 type: 'profile-update', 1262 order: 0, 1263 completionEvent: FormEvent.PART_PROFILE_UPDATE_COMPLETE 1264 }, 1265 SELECT_SUBSCRIPTION: { 1266 type: 'select-subscription', 1267 order: 0, 1268 completionEvent: FormEvent.SELECT_SUBSCRIPTION_COMPLETE 1269 }, 1270 EMAIL_UPDATE: { 1271 type: 'email-update', 1272 order: 0, 1273 completionEvent: FormEvent.PART_EMAIL_UPDATE_COMPLETE 1274 }, 1275 EMAIL_UPDATE_OTP: { 1276 type: 'email-update-otp', 1277 order: 0, 1278 completionEvent: FormEvent.PART_EMAIL_UPDATE_OTP_COMPLETE 1279 }, 1280 EMAIL_UPDATE_CONFIRMATION: { 1281 type: 'email-update-confirmation', 1282 order: 0, 1283 completionEvent: FormEvent.PART_EMAIL_UPDATE_CONFIRMATION_COMPLETE 1284 }, 1285 PASSWORD_UPDATE: { 1286 type: 'password-update', 1287 order: 0, 1288 completionEvent: FormEvent.PART_PASSWORD_UPDATE_COMPLETE 1289 }, 1290 PASSWORD_UPDATE_OTP: { 1291 type: 'password-update-otp', 1292 order: 0, 1293 completionEvent: FormEvent.PART_PASSWORD_UPDATE_OTP_COMPLETE 1294 }, 1295 ATTRIBUTES_UPDATE: { 1296 type: 'attributes-update', 1297 order: 0, 1298 completionEvent: FormEvent.PART_ATTRIBUTES_UPDATE_COMPLETE 1299 }, 1300 LIST_SUBSCRIPTIONS: { 1301 type: 'list-subscriptions', 1302 order: 0, 1303 }, 1304 BILLING_HISTORY: { 1305 type: 'billing-history', 1306 order: 0, 1307 }, 1308 PAST_SUBSCRIPTIONS: { 1309 type: 'past-subscriptions', 1310 order: 0, 1311 }, 1312 CHANGE_PAYMENT: { 1313 type: 'change-payment', 1314 order: 2, 1315 completionEvent: FormEvent.PART_CHANGE_PAYMENT_COMPLETE 1316 }, 1317 DEVICES_SESSIONS: { 1318 type: 'devices-sessions', 1319 order: 0, 1320 completionEvent: FormEvent.LIST_DEVICES_SESSIONS 1321 }, 1322 CANCEL_SUCCESS: { 1323 type: 'cancel-success', 1324 order: 3, 1325 }, 1326 GIFT_REDEMPTION: { 1327 type: 'gift_redemption', 1328 order: 4 1329 }, 1330 GIFT_DETAILS: { 1331 type: 'gift-details', 1332 order: 1 1333 }, 1334 SUSPEND_RESUME_SUBSCRIPTION: { 1335 type: 'suspend-resume-subscription', 1336 order: 0, 1337 completionEvent: FormEvent.SUSPEND_RESUME_SUBSCRIPTION_COMPLETE 1338 }, 1339 SUBSCRIPTION_CUSTOM_FIELDS: { 1340 type: 'subscription-custom-fields', 1341 order: 0, 1342 }, 1343 BILL_TO_CONTACT: { 1344 type: 'bill-to-contact', 1345 order: 0, 1346 completionEvent: FormEvent.BILL_TO_CONTACT_COMPLETE 1347 } 1348 }; 1349 const partTypeFor = (type) => Object.values(partTypes).find(p => p.type == type) || (() => { throw `No part ${type} found`; })(); 1350 1351 var ServerError; 1352 (function (ServerError) { 1353 ServerError[ServerError["USER_DOES_NOT_EXIST"] = 0] = "USER_DOES_NOT_EXIST"; 1354 ServerError[ServerError["USER_ALREADY_EXISTS"] = 1] = "USER_ALREADY_EXISTS"; 1355 ServerError[ServerError["PASSWORD_NOT_STRONG_ENOUGH"] = 2] = "PASSWORD_NOT_STRONG_ENOUGH"; 1356 ServerError[ServerError["EMAIL_VERIFICATION_REQUIRED"] = 3] = "EMAIL_VERIFICATION_REQUIRED"; 1357 ServerError[ServerError["VERIFICATION_CODE_OR_PASSWORD_INCORRECT"] = 4] = "VERIFICATION_CODE_OR_PASSWORD_INCORRECT"; 1358 ServerError[ServerError["VERIFICATION_CODE_INCORRECT"] = 5] = "VERIFICATION_CODE_INCORRECT"; 1359 ServerError[ServerError["LOGIN_FAILED"] = 6] = "LOGIN_FAILED";
1360 ServerError[ServerError["UNKNOWN_LOGIN_REGISTER_ERROR"] = 7] = "UNKNOWN_LOGIN_REGISTER_ERROR"; 1361 ServerError[ServerError["NO_COOKIE_FROM_LOGIN_REGISTER_ERROR"] = 8] = "NO_COOKIE_FROM_LOGIN_REGISTER_ERROR"; 1362 ServerError[ServerError["NO_ACCOUNT_ACCESS"] = 9] = "NO_ACCOUNT_ACCESS"; 1363 ServerError[ServerError["ACCOUNT_NOT_FOUND"] = 10] = "ACCOUNT_NOT_FOUND"; 1364 ServerError[ServerError["PAYMENT_PROCESSING_ERROR"] = 11] = "PAYMENT_PROCESSING_ERROR"; 1365 ServerError[ServerError["MOBILE_PAYMENT_PROCESSING_ERROR"] = 12] = "MOBILE_PAYMENT_PROCESSING_ERROR"; 1366 ServerError[ServerError["PASSWORD_RESET_LINK_SEND_ERROR"] = 13] = "PASSWORD_RESET_LINK_SEND_ERROR"; 1367 ServerError[ServerError["PASSWORD_RESET_ERROR"] = 14] = "PASSWORD_RESET_ERROR"; 1368 ServerError[ServerError["VERIFICATION_CODE_SEND_ERROR"] = 15] = "VERIFICATION_CODE_SEND_ERROR"; 1369 ServerError[ServerError["SOCIAL_SIGNIN_REGISTRATION_LOGIN_ERROR"] = 16] = "SOCIAL_SIGNIN_REGISTRATION_LOGIN_ERROR"; 1370 ServerError[ServerError["PROMO_CODE_EXPIRED_ERROR"] = 17] = "PROMO_CODE_EXPIRED_ERROR"; 1371 ServerError[ServerError["PROMO_CODE_INVALID_ERROR"] = 18] = "PROMO_CODE_INVALID_ERROR"; 1372 ServerError[ServerError["PROMO_CODE_NOT_VALID_FOR_PLAN_ERROR"] = 19] = "PROMO_CODE_NOT_VALID_FOR_PLAN_ERROR"; 1373 ServerError[ServerError["INVITATION_FAILED_LIMIT_REACHED"] = 20] = "INVITATION_FAILED_LIMIT_REACHED"; 1374 ServerError[ServerError["INVITATION_FAILED_DUPLICATE_EMAIL"] = 21] = "INVITATION_FAILED_DUPLICATE_EMAIL"; 1375 ServerError[ServerError["INVITATION_FAILED_INVALID_EMAIL"] = 22] = "INVITATION_FAILED_INVALID_EMAIL"; 1376 ServerError[ServerError["INVITATION_FAILED_NO_PRODUCT_ACCESS"] = 23] = "INVITATION_FAILED_NO_PRODUCT_ACCESS"; 1377 ServerError[ServerError["INVITATION_FAILED_UNKNOWN"] = 24] = "INVITATION_FAILED_UNKNOWN"; 1378 ServerError[ServerError["TOO_MANY_SESSIONS"] = 25] = "TOO_MANY_SESSIONS"; 1379 ServerError[ServerError["INVALID_USER_ATTRIBUTES"] = 26] = "INVALID_USER_ATTRIBUTES"; 1380 ServerError[ServerError["CONTACT_CREATION_NOT_ENABLED"] = 27] = "CONTACT_CREATION_NOT_ENABLED"; 1381 ServerError[ServerError["NO_AUTHENTICATED_SESSION"] = 28] = "NO_AUTHENTICATED_SESSION"; 1382 ServerError[ServerError["BLOCKED_EMAIL_DOMAIN"] = 29] = "BLOCKED_EMAIL_DOMAIN"; 1383 ServerError[ServerError["UNKNOWN"] = 30] = "UNKNOWN"; 1384 ServerError[ServerError["GIFT_CODE_INVALID"] = 31] = "GIFT_CODE_INVALID"; 1385 ServerError[ServerError["GIFT_CODE_ALREADY_REDEEMED"] = 32] = "GIFT_CODE_ALREADY_REDEEMED"; 1386 ServerError[ServerError["GIFT_CODE_SERVER_ERROR"] = 33] = "GIFT_CODE_SERVER_ERROR"; 1387 })(ServerError || (ServerError = {})); 1388 const ServerErrors = { 1389 [ServerError.USER_DOES_NOT_EXIST]: { 1390 languagePackKey: 'forms.errors.user-not-found', 1391 fallbackMessage: 'User not found.', 1392 jumpToPart: partTypes.ACCOUNT_VERIFICATION.type, 1393 displayOnElements: [elementTypes.EMAIL_ADDRESS] 1394 }, 1395 [ServerError.USER_ALREADY_EXISTS]: { 1396 languagePackKey: 'forms.errors.email-taken', 1397 fallbackMessage: 'This email address is already registered. Please log in to continue.', 1398 jumpToPart: partTypes.ACCOUNT_VERIFICATION.type, 1399 displayOnElements: [elementTypes.EMAIL_ADDRESS] 1400 }, 1401 [ServerError.EMAIL_VERIFICATION_REQUIRED]: { 1402 languagePackKey: 'forms.errors.email-verification-required', 1403 fallbackMessage: 'Email verification is required', 1404 jumpToPart: partTypes.ACCOUNT_VERIFICATION.type, 1405 displayOnElements: [elementTypes.EMAIL_ADDRESS] 1406 }, 1407 [ServerError.VERIFICATION_CODE_OR_PASSWORD_INCORRECT]: { 1408 languagePackKey: 'forms.errors.otp-or-password-incorrect', 1409 fallbackMessage: 'The password or code you entered is incorrect.', 1410 displayOnElements: [elementTypes.VERIFICATION_CODE, elementTypes.PASSWORD] 1411 }, 1412 [ServerError.VERIFICATION_CODE_INCORRECT]: { 1413 languagePackKey: 'forms.errors.otp-incorrect', 1414 fallbackMessage: 'The code you entered is incorrect.', 1415 displayOnElements: [elementTypes.VERIFICATION_CODE] 1416 }, 1417 [ServerError.LOGIN_FAILED]: { 1418 languagePackKey: 'forms.errors.login-failed', 1419 fallbackMessage: 'The email address or password you entered is incorrect.', 1420 displayOnElements: [elementTypes.PASSWORD, elementTypes.VERIFICATION_CODE] 1421 }, 1422 [ServerError.PASSWORD_NOT_STRONG_ENOUGH]: { 1423 languagePackKey: 'n/a', 1424 fallbackMessage: '', 1425 useDymamicMessage: true, 1426 displayOnElements: [elementTypes.PASSWORD] 1427 },
1428 [ServerError.UNKNOWN_LOGIN_REGISTER_ERROR]: { 1429 languagePackKey: 'forms.errors.unknown-error', 1430 fallbackMessage: 'Something went wrong. Please try again later', 1431 displayOnElements: [elementTypes.PASSWORD, elementTypes.VERIFICATION_CODE] 1432 }, 1433 [ServerError.NO_COOKIE_FROM_LOGIN_REGISTER_ERROR]: { 1434 languagePackKey: 'forms.errors.unknown-error', 1435 fallbackMessage: 'Something went wrong. Please try again later', 1436 displayOnElements: [elementTypes.PASSWORD, elementTypes.VERIFICATION_CODE] 1437 }, 1438 [ServerError.NO_ACCOUNT_ACCESS]: { 1439 languagePackKey: 'forms.errors.too-many-requests', 1440 fallbackMessage: 'To gain login access, please contact your administrator.', 1441 displayOnElements: [elementTypes.PASSWORD] 1442 }, 1443 [ServerError.ACCOUNT_NOT_FOUND]: { 1444 languagePackKey: 'forms.errors.company-account-not-found', 1445 fallbackMessage: 'Account not found.', 1446 jumpToPart: partTypes.ACCOUNT_VERIFICATION.type, 1447 displayOnElements: [elementTypes.ACCOUNT_MEMBERSHIP_CODE] 1448 }, 1449 [ServerError.PAYMENT_PROCESSING_ERROR]: { 1450 languagePackKey: 'forms.errors.unknown-payment-error', 1451 fallbackMessage: 'Something went wrong when processing your payment. Please try again later.', 1452 displayOnElements: [elementTypes.PAYMENT] 1453 }, 1454 [ServerError.MOBILE_PAYMENT_PROCESSING_ERROR]: { 1455 languagePackKey: 'forms.errors.unknown-payment-error', 1456 fallbackMessage: 'Something went wrong when processing your payment. Please try again later.', 1457 displayOnElements: [elementTypes.MOBILE_PAYMENT] 1458 }, 1459 [ServerError.PASSWORD_RESET_LINK_SEND_ERROR]: { 1460 languagePackKey: 'forms.errors.password-reset-link-send-failed', 1461 fallbackMessage: 'Unable to send a password reset link. Please try again later', 1462 displayOnElements: [elementTypes.RESET_PASSWORD_LINK] 1463 }, 1464 [ServerError.VERIFICATION_CODE_SEND_ERROR]: { 1465 languagePackKey: 'forms.errors.otp-send-failed', 1466 fallbackMessage: 'Unable to send a verification code. Please try again later', 1467 displayOnElements: [elementTypes.VERIFICATION_CODE] 1468 }, 1469 [ServerError.PASSWORD_RESET_ERROR]: { 1470 languagePackKey: 'forms.errors.password-reset-failed', 1471 fallbackMessage: 'Unable to reset your password. Please try again later', 1472 displayOnElements: [elementTypes.PASSWORD] 1473 }, 1474 [ServerError.SOCIAL_SIGNIN_REGISTRATION_LOGIN_ERROR]: { 1475 languagePackKey: 'forms.errors.unknown-error', 1476 fallbackMessage: 'Something went wrong. Please try again later', 1477 displayOnElements: [elementTypes.SOCIAL_SIGNIN] 1478 }, 1479 [ServerError.PROMO_CODE_EXPIRED_ERROR]: { 1480 languagePackKey: 'forms.errors.promo-code-expired', 1481 fallbackMessage: 'Promo code expired', 1482 displayOnElements: [elementTypes.PAYMENT_SUMMARY] 1483 }, 1484 [ServerError.PROMO_CODE_INVALID_ERROR]: { 1485 languagePackKey: 'forms.errors.promo-code-invalid', 1486 fallbackMessage: 'Invalid promo code', 1487 displayOnElements: [elementTypes.PAYMENT_SUMMARY] 1488 }, 1489 [ServerError.PROMO_CODE_NOT_VALID_FOR_PLAN_ERROR]: { 1490 languagePackKey: 'forms.errors.promo-code-invalid-for-payment-option', 1491 fallbackMessage: 'Promo code cannot be applied to selected option', 1492 displayOnElements: [elementTypes.PAYMENT_SUMMARY] 1493 }, 1494 [ServerError.INVITATION_FAILED_LIMIT_REACHED]: { 1495 languagePackKey: 'forms.errors.invitation-failed-limit-reached', 1496 fallbackMessage: 'You have reached the sharing limit for this product', 1497 displayOnElements: [elementTypes.INVITATION] 1498 }, 1499 [ServerError.INVITATION_FAILED_DUPLICATE_EMAIL]: { 1500 languagePackKey: 'forms.errors.invitation-failed-duplicate-email', 1501 fallbackMessage: 'An invite has already been created for this email', 1502 displayOnElements: [elementTypes.INVITATION] 1503 }, 1504 [ServerError.INVITATION_FAILED_INVALID_EMAIL]: { 1505 languagePackKey: 'forms.errors.invitation-failed-invalid-email', 1506 fallbackMessage: 'Invalid email address', 1507 displayOnElements: [elementTypes.INVITATION] 1508 }, 1509 [ServerError.INVITATION_FAILED_NO_PRODUCT_ACCESS]: { 1510 languagePackKey: 'forms.errors.invitation-failed-no-product-access', 1511 fallbackMessage: 'You do not currently have access to this product', 1512 displayOnElements: [elementTypes.INVITATION] 1513 }, 1514 [ServerError.INVITATION_FAILED_UNKNOWN]: { 1515 languagePackKey: 'forms.errors.unknown-error', 1516 fallbackMessage: 'Something went wrong. Please try again later', 1517 displayOnElements: [elementTypes.INVITATION] 1518 }, 1519 [ServerError.TOO_MANY_SESSIONS]: { 1520 languagePackKey: 'forms.errors.session-limit-reached', 1521 fallbackMessage: 'You have reached the session limit. Please log out from another device to access this content.', 1522 displayOnElements: [elementTypes.EMAIL_ADDRESS] 1523 }, 1524 [ServerError.INVALID_USER_ATTRIBUTES]: { 1525 languagePackKey: 'forms.errors.user-attribute-invalid', 1526 fallbackMessage: 'Invalid User Attribute', 1527 displayOnElements: [elementTypes.USER_ATTRIBUTE] 1528 }, 1529 [ServerError.CONTACT_CREATION_NOT_ENABLED]: { 1530 languagePackKey: 'forms.errors.contact-creation-disabled', 1531 fallbackMessage: 'This operation is not possible at the moment, please try again later.', 1532 jumpToPart: partTypes.ACCOUNT_VERIFICATION.type, 1533 displayOnElements: [elementTypes.EMAIL_ADDRESS] 1534 }, 1535 [ServerError.NO_AUTHENTICATED_SESSION]: { 1536 languagePackKey: 'forms.errors.no-authenticated-session', 1537 fallbackMessage: 'Please login to update your profile', 1538 }, 1539 [ServerError.BLOCKED_EMAIL_DOMAIN]: { 1540 languagePackKey: 'forms.errors.email-domain-blocked', 1541 fallbackMessage: 'Please use a different email address, this domain is not supported.', 1542 jumpToPart: partTypes.ACCOUNT_VERIFICATION.type, 1543 displayOnElements: [elementTypes.EMAIL_ADDRESS] 1544 }, 1545 [ServerError.UNKNOWN]: { 1546 languagePackKey: 'forms.errors.unknown-error', 1547 fallbackMessage: 'Something went wrong. Please try again later', 1548 }, 1549 [ServerError.GIFT_CODE_INVALID]: { 1550 languagePackKey: 'forms.errors.gift-code-invalid', 1551 fallbackMessage: 'Invalid gift code', 1552 displayOnElements: [elementTypes.GIFT_CODE] 1553 }, 1554 [ServerError.GIFT_CODE_ALREADY_REDEEMED]: { 1555 languagePackKey: 'forms.errors.gift-code-already-redeemed', 1556 fallbackMessage: 'Gift code already redeemed', 1557 displayOnElements: [elementTypes.GIFT_CODE] 1558 }, 1559 [ServerError.GIFT_CODE_SERVER_ERROR]: { 1560 languagePackKey: 'forms.errors.gift-code-server-error', 1561 fallbackMessage: 'Something went wrong with the gift co
1561de. Please try again later', 1562 displayOnElements: [elementTypes.GIFT_CODE] 1563 } 1564 }; 1565 const serverErrorForElement = (elementType, formState) => formState.serverErrors.find(e => ServerErrors[e].displayOnElements?.includes(elementType)) ?? undefined; 1566 1567 const sectionTypes = { 1568 PLAN_SELECT: { 1569 type: 'plan_select', 1570 defaultLabel: 'Plan Select', 1571 fullWidth: true 1572 }, 1573 EMAIL: { 1574 type: 'email', 1575 defaultLabel: 'Account Verification', 1576 completionEvent: FormEvent.SECTION_EMAIL_COMPLETE, 1577 }, 1578 RECIPIENT_DETAILS: { 1579 type: 'recipient_details', 1580 defaultLabel: 'Recipient', 1581 }, 1582 PASSWORD_SETUP: { 1583 type: 'password_setup', 1584 defaultLabel: 'Password Setup' 1585 }, 1586 PASSWORDLESS_VIA_LOGIN_LINK: { 1587 type: 'passwordless_login_via_link', 1588 defaultLabel: 'Passwordless Login via Login Link' 1589 }, 1590 VERIFICATION_CODE_LOGIN: { 1591 type: 'verification_code_login', 1592 defaultLabel: '' 1593 }, 1594 VERIFICATION_CODE_REGISTRATION: { 1595 type: 'verification_code_registration', 1596 defaultLabel: '' 1597 }, 1598 LOGIN_PASSWORD: { 1599 type: 'login_password', 1600 defaultLabel: 'Login' 1601 }, 1602 REGISTRATION_CUSTOM: { 1603 type: 'registration_custom', 1604 defaultLabel: '', 1605 }, 1606 FORGOT_PASSWORD: { 1607 type: 'forgot_password', 1608 defaultLabel: '', 1609 completionEvent: FormEvent.SECTION_FORGOT_PASSWORD_COMPLETE, 1610 }, 1611 PASSWORD_RESET: { 1612 type: 'reset_password', 1613 defaultLabel: '', 1614 completionEvent: FormEvent.SECTION_PASSWORD_RESET_COMPLETE, 1615 }, 1616 SUCCESS: { 1617 type: 'success', 1618 defaultLabel: '' 1619 }, 1620 EMAIL_VERIFIED: { 1621 type: 'email_verified', 1622 defaultLabel: '' 1623 }, 1624 READ_ONLY_PROFILE: { 1625 type: 'read_only_profile', 1626 defaultLabel: 'Read Only Profile' 1627 }, 1628 UPDATE_EMAIL: { 1629 type: 'update_email', 1630 defaultLabel: 'Update Email' 1631 }, 1632 EMAIL_UPDATE_CONFIRMATION: { 1633 type: 'email_update_confirmation', 1634 defaultLabel: 'Email Update Confirmation' 1635 }, 1636 UPDATE_PASSWORD: { 1637 type: 'update_password', 1638 defaultLabel: 'Update Password' 1639 }, 1640 UPDATE_ATTRIBUTES: { 1641 type: 'update_attributes', 1642 defaultLabel: 'Update Attributes' 1643 }, 1644 CHANGE_PAYMENT: { 1645 type: 'change-payment', 1646 completionEvent: FormEvent.PART_CHANGE_PAYMENT_COMPLETE, 1647 defaultLabel: '' 1648 }, 1649 SELECT: { 1650 type: 'select', 1651 defaultLabel: '', 1652 fullWidth: true, 1653 }, 1654 LIST: { 1655 type: 'list', 1656 defaultLabel: '', 1657 fullWidth: true, 1658 }, 1659 PAST_SUBSCRIPTIONS: { 1660 type: 'past-subscriptions', 1661 defaultLabel: '', 1662 fullWidth: true, 1663 }, 1664 GIFT_REDEMPTION: { 1665 type: 'gift_redemption', 1666 defaultLabel: 'Gift Code Redemption', 1667 completionEvent: FormEvent.GIFT_REDEMPTION_COMPLETE 1668 }, 1669 GIFT_REDEEMED: { 1670 type: 'gift_redeemed', 1671 defaultLabel: 'Gift Redeemed' 1672 }, 1673 GIFT_DETAIL: { 1674 type: 'gift-detail', 1675 defaultLabel: 'Gift Details' 1676 }, 1677 SUSPEND_RESUME_SUBSCRIPTION: { 1678 type: 'suspend_resume_subscription', 1679 defaultLabel: 'Suspend/Resume Subscription', 1680 }, 1681 BILL_TO_CONTACT: { 1682 type: 'bill_to_contact', 1683 defaultLabel: 'Update Bill To Contact Address', 1684 }, 1685 }; 1686 const sectionTypeFor = (type) => Object.values(sectionTypes).find(s => s.type == type); 1687 1688 function logDataLayerEvent(form, eventName, customDimensions) { 1689 const event = { 1690 event: eventName, 1691 formType: form.formType, 1692 formId: form.formId, 1693 ruleId: form.ruleId, 1694 outcomeId: form.outcomeId, 1695 ...customDimensions 1696 }; 1697 window.postMessage({ 'zephr-form-datalayer-event': event }, window.origin); 1698 if (!form.organisationConfiguration.trackFormDataLayerEvents) { 1699 return; 1700 } 1701 const dataLayerName = form.organisationConfiguration.dataLayerName || 'dataLayer'; 1702 window[dataLayerName] = window[dataLayerName] || []; 1703 window[dataLayerName].push(event); 1704 } 1705 1706 const reScrollToFormTop = (formId) => { 1707 try { 1708 const formRootElement = document.getElementById(formId); 1709 if (!formRootElement) 1710 return; 1711 const { top } = formRootElement.getBoundingClientRect(); 1712 if (top < 0) { 1713 formRootElement.scrollIntoView({ 1714 block: "start", 1715 inline: "nearest", 1716 }); 1717 } 1718 } 1719 catch (err) { 1720 console.error(err); 1721 } 1722 }; 1723 1724 /** 1725 * Functions to initiate movements through the form sections. 1726 */ 1727 const findSection = (sectionType, form) => { 1728 return form.parts 1729 .flatMap(part => part.sections.map(section => ({ part, section }))) 1730 .find(partSection => partSection.section.type === sectionType); 1731 }; 1732 const findSectionByAddress = (address, form) => { 1733 const [part, section] = address.includes(':') ? address.split(':') : [null, address]; 1734 return form.parts 1735 .flatMap(part => part.sections.map(section => ({ part, section }))) 1736 .find(partSection => partSection.section.type === section && (!part || partSection.part.type === part)); 1737 }; 1738 const jumpToSection = (sectionType, form, formActions) => { 1739 const destination = findSection(sectionType, form); 1740 if (!destination) { 1741 throw `Cannot find section ${sectionType}`; 1742 } 1743 const formState = formActions.getFormState(); 1744 setSection({ 1745 form, 1746 formActions, 1747 part: destination.part, 1748 section: destination.section, 1749 previousPart: formState.currentPart, 1750 previousSection: formState.currentSection 1751 }); 1752 return Promise.resolve(); 1753 }; 1754 const jumpToPart = (partType, form, formActions) => { 1755 if (form.environment.previewMode) { 1756 return; 1757 } 1758 const part = form.parts.find(p => p.type == partType); 1759 const formState = formActions.getFormState(); 1760 setSection({ 1761 form, 1762 formActions, 1763 part, 1764 section: part.sections[0], 1765 previousPart: formState.currentPart, 1766 previousSection: formState.currentSection 1767 }); 1768 return Promise.resolve(); 1769 }; 1770 const findNextPart = (currentPart, form) => { 1771 const partType = partTypeFor(currentPart.type); 1772 if (partType) { 1773 const nextPart = form.parts.find((p) => partTypeFor(p.type).order === partType.order + 1) 1774 ?? form.parts[form.parts.indexOf(currentPart) + 1]; 1775 if (nextPart) { 1776 return { 1777 section: nextPart.sections[0], 1778 part: nextPart 1779 }; 1780 } 1781 } 1782 return null; 1783 }; 1784 const findNextSection = (currentSection, currentPart, form) => { 1785 // Next section in part ... 1786 const currentSectionIndex = currentPart.sections.findIndex((s) => s.order == currentSection.order); 1787 if (currentPart.sections.length > currentSectionIndex + 1) { 1788 return { 1789 section: currentPart.sections[currentSectionIndex + 1], 1790 part: currentPart 1791 }; 1792 } 1793 // ... or the first setion in next part 1794 return findNextPart(currentPart, form); 1795 }; 1796 const mapCustomSectionType = (sectionType) => { 1797 return sectionType?.startsWith('custom_') ? 'registration_custom' : sectionType; 1798 }; 1799 const isSectionVisible = (section, form, formState) => form.sectionFlow.sectionVisibilities.find((s) => s.type === mapCustomSectionType(section.type)) 1800 ?.isVisible(form, formState) ?? true; 1801 const isSectionDisplayedInProgressBar = (section, form, formState) => { 1802 const sectionConfig = form.sectionFlow.sectionVisibilities 1803 .find((s) => (s.type === mapCustomSectionType(section.type))); 1804 return (sectionConfig?.isDisplayedInProgressBar && isSectionVisible(section, form, formState)) ?? true; 1805 }; 1806 const moveToNextSection = (form, formState, formActions) => { 1807 if (form.environment.previewMode) { 1808 return; 1809 } 1810 // Find the next visible section 1811 let i = 0; 1812 let nextPartSection = { part: formState.currentPart, section: formState.currentSection }; 1813 do { 1814 i++; 1815 if (i > 50) { 1816 throw new Error(`Cannot move from ${formState.currentPart.type}:${formState.currentSection.type}. 1817 Exceeded max loop size after ${nextPartSection?.part?.type}:${nextPartSection?.section?.type} 1818 `); 1819 } 1820 const next = findNextSection(nextPartSection?.section, nextPartSection?.part, form); 1821 if (next?.part.type === nextPartSection?.part?.type 1822 && next?.section.type === nextPartSection?.section?.type 1823 && next?.section.order === nextPartSection?.section?.order) { 1824 throw new Error(`Cannot move from ${formState.currentPart.type}:${formState.currentSection.type}. 1825 Infinte loop found at next section ${next?.part?.type}:${next?.section?.type} 1826 `); 1827 } 1828 nextPartSection = next; 1829 } while (nextPartSection && !isSectionVisible(nextPartSection.section, form, formState)); 1830 if (!nextPartSection || nextPartSection.part !== formState.currentPart) { 1831 const part = partTypeFor(formState.currentPart.type); 1832 const action = part?.completionEvent && form.sectionFlow.eventHandlers[part.completionEvent]; 1833 if (action) { 1834 return action(form, formState, formActions); 1835 } 1836 } 1837 if (!nextPartSection) { 1838 throw "No next section"; 1839 } 1840 setSection({ 1841 form, 1842 formActions, 1843 part: nextPartSection.part, 1844 section: nextPartSection.section, 1845 previousPart: formState.currentPart, 1846 previousSection: formState.currentSection 1847 }); 1848 return Promise.resolve(); 1849 }; 1850 const completeSection = (form, formState, formActions) => { 1851 if (form.environment.previewMode) { 1852 return; 1853 } 1854 const sectionType = sectionTypeFor(formState.currentSection.type); 1855 const action = (sectionType && form.sectionFlow.eventHandlers[sectionType.completionEvent]) ?? moveToNextSection; 1856 return action(form, formState, formActions); 1857 }; 1858 const attemptCompleteSection = (form, _, formActions) => { 1859 if (formActions.getFormState().canAttemptSectionCompletion) { 1860 const updatedState = formActions.updateFormState({ 1861 showFieldErrors: false 1862 }); 1863 return completeSection(form, updatedState, formActions); 1864 } 1865 formActions.updateFormState({ 1866 showFieldErrors: true 1867 }); 1868 return Promise.resolve(); 1869 }; 1870 const setSection = ({ form, formActions, part, section, previousSection, previousPart }) => { 1871 formActions.updateFormState({ 1872 currentPart: part, 1873 currentSection: section 1874 }); 1875 logDataLayerEvent(form, 'zephr_form_section_change', { 1876 sectionId: section.type, 1877 previousSectionId: previousSection.type, 1878 partId: part.type, 1879 previousPartId: previousPart.type 1880 }); 1881 reScrollToFormTop(form.formId); 1882 }; 1883 1884 /* src/components/elements/progressBar/ProgressBar.svelte generated by Svelte v4.2.12 */ 1885 1886 function get_each_context$h(ctx, list, i) { 1887 const child_ctx = ctx.slice(); 1888 child_ctx[7] = list[i]; 1889 const constants_0 = !/*disabled*/ child_ctx[0] && !/*item*/ child_ctx[7].isDisabled && /*item*/ child_ctx[7].order < /*currentItem*/ child_ctx[2].order; 1890 child_ctx[8] = constants_0; 1891 return child_ctx; 1892 } 1893 1894 // (15:0) {#if !isNaN(value)} 1895 function create_if_block$L(ctx) { 1896 let div; 1897 let t; 1898 let progress; 1899 let each_value = ensure_array_like(/*visibleItems*/ ctx[3]); 1900 let each_blocks = []; 1901 1902 for (let i = 0; i < each_value.length; i += 1) { 1903 each_blocks[i] = create_each_block$h(get_each_context$h(ctx, each_value, i)); 1904 } 1905 1906 return { 1907 c() { 1908 div = element("div"); 1909 1910 for (let i = 0; i < each_blocks.length; i += 1) { 1911 each_blocks[i].c(); 1912 } 1913 1914 t = space(); 1915 progress = element("progress"); 1916 attr(div, "class", "zephr-form-flex-container"); 1917 toggle_class(div, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[1]); 1918 attr(progress, "class", "zephr-form-progress-bar svelte-19rlx92"); 1919 attr(progress, "id", "progress-bar"); 1920 attr(progress, "max", "100"); 1921 progress.value = /*value*/ ctx[4]; 1922 toggle_class(progress, "zephr-payment-form-progress-bar", /*isPaymentForm*/ ctx[1]); 1923 }, 1924 m(target, anchor) { 1925 insert(target, div, anchor); 1926 1927 for (let i = 0; i < each_blocks.length; i += 1) { 1928 if (each_blocks[i]) { 1929 each_blocks[i].m(div, null); 1930 } 1931 } 1932 1933 insert(target, t, anchor); 1934 insert(target, progress, anchor); 1935 }, 1936 p(ctx, dirty) {
1937 if (dirty & /*isPaymentForm, visibleItems, disabled, currentItem*/ 15) { 1938 each_value = ensure_array_like(/*visibleItems*/ ctx[3]); 1939 let i; 1940 1941 for (i = 0; i < each_value.length; i += 1) { 1942 const child_ctx = get_each_context$h(ctx, each_value, i); 1943 1944 if (each_blocks[i]) { 1945 each_blocks[i].p(child_ctx, dirty); 1946 } else { 1947 each_blocks[i] = create_each_block$h(child_ctx); 1948 each_blocks[i].c(); 1949 each_blocks[i].m(div, null); 1950 } 1951 } 1952 1953 for (; i < each_blocks.length; i += 1) { 1954 each_blocks[i].d(1); 1955 } 1956 1957 each_blocks.length = each_value.length; 1958 } 1959 1960 if (dirty & /*isPaymentForm*/ 2) { 1961 toggle_class(div, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[1]); 1962 } 1963 1964 if (dirty & /*value*/ 16) { 1965 progress.value = /*value*/ ctx[4]; 1966 } 1967 1968 if (dirty & /*isPaymentForm*/ 2) { 1969 toggle_class(progress, "zephr-payment-form-progress-bar", /*isPaymentForm*/ ctx[1]); 1970 } 1971 }, 1972 d(detaching) { 1973 if (detaching) { 1974 detach(div); 1975 detach(t); 1976 detach(progress); 1977 } 1978 1979 destroy_each(each_blocks, detaching); 1980 } 1981 }; 1982 } 1983 1984 // (33:6) {:else} 1985 function create_else_block$b(ctx) { 1986 let div; 1987 let t0_value = /*item*/ ctx[7].label + ""; 1988 let t0; 1989 let t1; 1990 1991 return { 1992 c() { 1993 div = element("div"); 1994 t0 = text(t0_value); 1995 t1 = space(); 1996 attr(div, "class", "zephr-progress-bar-step disabled svelte-19rlx92"); 1997 toggle_class(div, "zephr-payment-progress-bar-step", /*isPaymentForm*/ ctx[1]); 1998 }, 1999 m(target, anchor) { 2000 insert(target, div, anchor); 2001 append(div, t0); 2002 append(div, t1); 2003 }, 2004 p(ctx, dirty) { 2005 if (dirty & /*visibleItems*/ 8 && t0_value !== (t0_value = /*item*/ ctx[7].label + "")) set_data(t0, t0_value); 2006 2007 if (dirty & /*isPaymentForm*/ 2) { 2008 toggle_class(div, "zephr-payment-progress-bar-step", /*isPaymentForm*/ ctx[1]); 2009 } 2010 }, 2011 d(detaching) { 2012 if (detaching) { 2013 detach(div); 2014 } 2015 } 2016 }; 2017 } 2018 2019 // (24:6) {#if isClickable} 2020 function create_if_block_1$y(ctx) { 2021 let button; 2022 let t0_value = /*item*/ ctx[7].label + ""; 2023 let t0; 2024 let t1; 2025 let mounted; 2026 let dispose; 2027 2028 function click_handler() { 2029 return /*click_handler*/ ctx[6](/*item*/ ctx[7]); 2030 } 2031 2032 return { 2033 c() { 2034 button = element("button"); 2035 t0 = text(t0_value); 2036 t1 = space(); 2037 attr(button, "type", "button"); 2038 attr(button, "class", "zephr-progress-bar-step svelte-19rlx92"); 2039 toggle_class(button, "zephr-payment-progress-bar-step", /*isPaymentForm*/ ctx[1]); 2040 }, 2041 m(target, anchor) { 2042 insert(target, button, anchor); 2043 append(button, t0); 2044 append(button, t1); 2045 2046 if (!mounted) { 2047 dispose = listen(button, "click", prevent_default(click_handler)); 2048 mounted = true; 2049 } 2050 }, 2051 p(new_ctx, dirty) { 2052 ctx = new_ctx; 2053 if (dirty & /*visibleItems*/ 8 && t0_value !== (t0_value = /*item*/ ctx[7].label + "")) set_data(t0, t0_value); 2054 2055 if (dirty & /*isPaymentForm*/ 2) { 2056 toggle_class(button, "zephr-payment-progress-bar-step", /*isPaymentForm*/ ctx[1]); 2057 } 2058 }, 2059 d(detaching) { 2060 if (detaching) { 2061 detach(button); 2062 } 2063 2064 mounted = false; 2065 dispose(); 2066 } 2067 }; 2068 } 2069 2070 // (20:4) {#each visibleItems as item} 2071 function create_each_block$h(ctx) { 2072 let if_block_anchor; 2073 2074 function select_block_type(ctx, dirty) { 2075 if (/*isClickable*/ ctx[8]) return create_if_block_1$y; 2076 return create_else_block$b; 2077 } 2078 2079 let current_block_type = select_block_type(ctx); 2080 let if_block = current_block_type(ctx); 2081 2082 return { 2083 c() { 2084 if_block.c(); 2085 if_block_anchor = empty(); 2086 }, 2087 m(target, anchor) { 2088 if_block.m(target, anchor); 2089 insert(target, if_block_anchor, anchor); 2090 }, 2091 p(ctx, dirty) { 2092 if (current_block_type === (current_block_type = select_block_type(ctx)) && if_block) { 2093 if_block.p(ctx, dirty); 2094 } else { 2095 if_block.d(1); 2096 if_block = current_block_type(ctx); 2097 2098 if (if_block) { 2099 if_block.c(); 2100 if_block.m(if_block_anchor.parentNode, if_block_anchor); 2101 } 2102 } 2103 }, 2104 d(detaching) { 2105 if (detaching) { 2106 detach(if_block_anchor); 2107 } 2108 2109 if_block.d(detaching); 2110 } 2111 }; 2112 } 2113 2114 function create_fragment$1c(ctx) { 2115 let show_if = !isNaN(/*value*/ ctx[4]); 2116 let if_block_anchor; 2117 let if_block = show_if && create_if_block$L(ctx); 2118 2119 return { 2120 c() { 2121 if (if_block) if_block.c(); 2122 if_block_anchor = empty(); 2123 }, 2124 m(target, anchor) { 2125 if (if_block) if_block.m(target, anchor); 2126 insert(target, if_block_anchor, anchor); 2127 }, 2128 p(ctx, [dirty]) {
2129 if (dirty & /*value*/ 16) show_if = !isNaN(/*value*/ ctx[4]); 2130 2131 if (show_if) { 2132 if (if_block) { 2133 if_block.p(ctx, dirty); 2134 } else { 2135 if_block = create_if_block$L(ctx); 2136 if_block.c(); 2137 if_block.m(if_block_anchor.parentNode, if_block_anchor); 2138 } 2139 } else if (if_block) { 2140 if_block.d(1); 2141 if_block = null; 2142 } 2143 }, 2144 i: noop, 2145 o: noop, 2146 d(detaching) { 2147 if (detaching) { 2148 detach(if_block_anchor); 2149 } 2150 2151 if (if_block) if_block.d(detaching); 2152 } 2153 }; 2154 } 2155 2156 function instance$1a($$self, $$props, $$invalidate) { 2157 let currentItem; 2158 let visibleItems; 2159 let value; 2160 let { disabled } = $$props; 2161 let { items } = $$props; 2162 let { isPaymentForm = false } = $$props; 2163 2164 const click_handler = item => { 2165 item.onSelect(); 2166 }; 2167 2168 $$self.$$set = $$props => { 2169 if ('disabled' in $$props) $$invalidate(0, disabled = $$props.disabled); 2170 if ('items' in $$props) $$invalidate(5, items = $$props.items); 2171 if ('isPaymentForm' in $$props) $$invalidate(1, isPaymentForm = $$props.isPaymentForm); 2172 }; 2173 2174 $$self.$$.update = () => { 2175 if ($$self.$$.dirty & /*items*/ 32) { 2176 $$invalidate(2, currentItem = items.find(i => i.isCurrent)); 2177 } 2178 2179 if ($$self.$$.dirty & /*items*/ 32) { 2180 $$invalidate(3, visibleItems = items.filter(i => i.isVisible)); 2181 } 2182 2183 if ($$self.$$.dirty & /*visibleItems, currentItem*/ 12) { 2184 $$invalidate(4, value = Math.floor(100 / (visibleItems.length - 1) * (currentItem.isVisible 2185 ? currentItem.visibleOrder 2186 : Math.max.apply(Math, visibleItems.filter(i => i.order < currentItem.order).map(i => i.visibleOrder))))); 2187 } 2188 }; 2189 2190 return [ 2191 disabled, 2192 isPaymentForm, 2193 currentItem, 2194 visibleItems, 2195 value, 2196 items, 2197 click_handler 2198 ]; 2199 } 2200 2201 class ProgressBar extends SvelteComponent { 2202 constructor(options) { 2203 super(); 2204 init(this, options, instance$1a, create_fragment$1c, safe_not_equal, { disabled: 0, items: 5, isPaymentForm: 1 }); 2205 } 2206 } 2207 2208 var FormType; 2209 (function (FormType) { 2210 FormType["EMPTY"] = "EMPTY"; 2211 FormType["PAYMENT"] = "PAYMENT"; 2212 FormType["CHANGE_SUBSCRIPTION"] = "CHANGE_SUBSCRIPTION"; 2213 FormType["REGISTRATION"] = "REGISTRATION"; 2214 FormType["CONTACT"] = "CONTACT"; 2215 FormType["DATA_CAPTURE"] = "DATA_CAPTURE"; 2216 FormType["COMPLETE_REGISTRATION"] = "COMPLETE_REGISTRATION"; 2217 FormType["UPDATE_PROFILE"] = "UPDATE_PROFILE"; 2218 FormType["CANCEL_SUBSCRIPTION"] = "CANCEL_SUBSCRIPTION"; 2219 FormType["LIST_SUBSCRIPTIONS"] = "LIST_SUBSCRIPTIONS"; 2220 FormType["SUSPEND_RESUME_SUBSCRIPTION"] = "SUSPEND_RESUME_SUBSCRIPTION"; 2221 FormType["DEVICES"] = "DEVICES"; 2222 FormType["GIFT_SUBSCRIPTION"] = "GIFT_SUBSCRIPTION"; 2223 FormType["GIFT_REDEMPTION"] = "GIFT_REDEMPTION"; 2224 FormType["LIST_GIFT_SUBSCRIPTIONS_SENT"] = "LIST_GIFT_SUBSCRIPTIONS_SENT"; 2225 FormType["BILL_TO_CONTACT"] = "BILL_TO_CONTACT"; 2226 })(FormType || (FormType = {})); 2227 2228 const toProgressBarItems = (form, formState, formActions) => { 2229 let order = 0; 2230 let visibleOrder = 0; 2231 return form.parts.flatMap(part => part.sections 2232 .map(section => ({ part, section }))) 2233 .map(({ part, section }) => ({ 2234 type: section.type, 2235 isVisible: isSectionDisplayedInProgressBar(section, form, formState), 2236 label: (section.label ?? part.label) ?? sectionTypeFor(section.type)?.defaultLabel, 2237 isCurrent: formState.currentSection == section, 2238 // Do not allow users to go backwards from PAYMENT if they have just registered 2239 isDisabled: formState.loginRegistrationComplete && ![partTypes.PLAN_SELECT.type ].includes(part.type), 2240 order: order++, 2241 visibleOrder: isSectionDisplayedInProgressBar(section, form, formState) ? visibleOrder++ : null, 2242 onSelect: () => setSection({ form, formActions, part, section, previousSection: formState.currentSection, previousPart: formState.currentPart }) 2243 })); 2244 }; 2245 const factory$u = { 2246 matches: (sectionElement) => sectionElement.type === elementTypes.PROGRESS_BAR, 2247 create: (form, formState, formActions) => { 2248 return { 2249 component: ProgressBar, 2250 props: { 2251 disabled: formState.isBusy, 2252 items: toProgressBarItems(form, formState, formActions), 2253 isPaymentForm: form.formType === FormType.PAYMENT, 2254 } 2255 }; 2256 } 2257 }; 2258 2259 const formConfigAs = (form) => { 2260 return form.typeConfiguration; 2261 }; 2262 2263 /* src/components/elements/button/Button.svelte generated by Svelte v4.2.12 */ 2264 2265 function create_fragment$1b(ctx) { 2266 let button; 2267 let t; 2268 let button_style_value; 2269 let mounted; 2270 let dispose; 2271 2272 return { 2273 c() { 2274 button = element("button"); 2275 t = text(/*text*/ ctx[1]); 2276 attr(button, "class", "zephr-form-button svelte-gd8hr6"); 2277 attr(button, "type", "submit"); 2278 button.hidden = /*hidden*/ ctx[6]; 2279 attr(button, "style", button_style_value = /*hidden*/ ctx[6] ? 'dis
2279play:none' : undefined); 2280 button.disabled = /*disabled*/ ctx[0]; 2281 toggle_class(button, "zephr-payment-form-button", /*isPaymentForm*/ ctx[5]); 2282 toggle_class(button, "zephr-form-button-top-margin", !/*noMargin*/ ctx[2]); 2283 toggle_class(button, "zephr-payment-form-button-top-margin", /*isPaymentForm*/ ctx[5] && !/*noMargin*/ ctx[2]); 2284 toggle_class(button, "inputHeight", /*inputHeight*/ ctx[3]); 2285 toggle_class(button, "aside", /*aside*/ ctx[4]); 2286 }, 2287 m(target, anchor) { 2288 insert(target, button, anchor); 2289 append(button, t); 2290 2291 if (!mounted) { 2292 dispose = listen(button, "click", prevent_default(function () { 2293 if (is_function(/*onClick*/ ctx[7])) /*onClick*/ ctx[7].apply(this, arguments); 2294 })); 2295 2296 mounted = true; 2297 } 2298 }, 2299 p(new_ctx, [dirty]) { 2300 ctx = new_ctx; 2301 if (dirty & /*text*/ 2) set_data(t, /*text*/ ctx[1]); 2302 2303 if (dirty & /*hidden*/ 64) { 2304 button.hidden = /*hidden*/ ctx[6]; 2305 } 2306 2307 if (dirty & /*hidden*/ 64 && button_style_value !== (button_style_value = /*hidden*/ ctx[6] ? 'display:none' : undefined)) { 2308 attr(button, "style", button_style_value); 2309 } 2310 2311 if (dirty & /*disabled*/ 1) { 2312 button.disabled = /*disabled*/ ctx[0]; 2313 } 2314 2315 if (dirty & /*isPaymentForm*/ 32) { 2316 toggle_class(button, "zephr-payment-form-button", /*isPaymentForm*/ ctx[5]); 2317 } 2318 2319 if (dirty & /*noMargin*/ 4) { 2320 toggle_class(button, "zephr-form-button-top-margin", !/*noMargin*/ ctx[2]); 2321 } 2322 2323 if (dirty & /*isPaymentForm, noMargin*/ 36) { 2324 toggle_class(button, "zephr-payment-form-button-top-margin", /*isPaymentForm*/ ctx[5] && !/*noMargin*/ ctx[2]); 2325 } 2326 2327 if (dirty & /*inputHeight*/ 8) { 2328 toggle_class(button, "inputHeight", /*inputHeight*/ ctx[3]); 2329 } 2330 2331 if (dirty & /*aside*/ 16) { 2332 toggle_class(button, "aside", /*aside*/ ctx[4]); 2333 } 2334 }, 2335 i: noop, 2336 o: noop, 2337 d(detaching) { 2338 if (detaching) { 2339 detach(button); 2340 } 2341 2342 mounted = false; 2343 dispose(); 2344 } 2345 }; 2346 } 2347 2348 function instance$19($$self, $$props, $$invalidate) { 2349 let { disabled } = $$props; 2350 let { text } = $$props; 2351 let { noMargin = false } = $$props; 2352 let { inputHeight = false } = $$props; 2353 let { aside = false } = $$props; 2354 let { isPaymentForm = false } = $$props; 2355 let { hidden = false } = $$props; 2356 let { onClick } = $$props; 2357 2358 $$self.$$set = $$props => {
2359 if ('disabled' in $$props) $$invalidate(0, disabled = $$props.disabled); 2360 if ('text' in $$props) $$invalidate(1, text = $$props.text); 2361 if ('noMargin' in $$props) $$invalidate(2, noMargin = $$props.noMargin); 2362 if ('inputHeight' in $$props) $$invalidate(3, inputHeight = $$props.inputHeight); 2363 if ('aside' in $$props) $$invalidate(4, aside = $$props.aside); 2364 if ('isPaymentForm' in $$props) $$invalidate(5, isPaymentForm = $$props.isPaymentForm); 2365 if ('hidden' in $$props) $$invalidate(6, hidden = $$props.hidden); 2366 if ('onClick' in $$props) $$invalidate(7, onClick = $$props.onClick); 2367 }; 2368 2369 return [disabled, text, noMargin, inputHeight, aside, isPaymentForm, hidden, onClick]; 2370 } 2371 2372 class Button extends SvelteComponent { 2373 constructor(options) { 2374 super(); 2375 2376 init(this, options, instance$19, create_fragment$1b, safe_not_equal, { 2377 disabled: 0, 2378 text: 1, 2379 noMargin: 2, 2380 inputHeight: 3, 2381 aside: 4, 2382 isPaymentForm: 5, 2383 hidden: 6, 2384 onClick: 7 2385 }); 2386 } 2387 } 2388 2389 /* src/components/elements/paymentOptionSelection/PaymentOptionComponent.svelte generated by Svelte v4.2.12 */ 2390 2391 function create_if_block_1$x(ctx) { 2392 let div; 2393 let t_value = /*paymentOption*/ ctx[1].highlightedText + ""; 2394 let t; 2395 2396 return { 2397 c() { 2398 div = element("div"); 2399 t = text(t_value); 2400 attr(div, "class", "box-top-text svelte-hcxnnv"); 2401 }, 2402 m(target, anchor) { 2403 insert(target, div, anchor); 2404 append(div, t); 2405 }, 2406 p(ctx, dirty) { 2407 if (dirty & /*paymentOption*/ 2 && t_value !== (t_value = /*paymentOption*/ ctx[1].highlightedText + "")) set_data(t, t_value); 2408 }, 2409 d(detaching) { 2410 if (detaching) { 2411 detach(div); 2412 } 2413 } 2414 }; 2415 } 2416 2417 // (38:8) {#if paymentOption.disclaimerMessage} 2418 function create_if_block$K(ctx) { 2419 let span; 2420 let t_value = /*paymentOption*/ ctx[1].disclaimerMessage + ""; 2421 let t; 2422 2423 return { 2424 c() { 2425 span = element("span"); 2426 t = text(t_value); 2427 attr(span, "class", "button-sub-text svelte-hcxnnv"); 2428 }, 2429 m(target, anchor) { 2430 insert(target, span, anchor); 2431 append(span, t); 2432 }, 2433 p(ctx, dirty) { 2434 if (dirty & /*paymentOption*/ 2 && t_value !== (t_value = /*paymentOption*/ ctx[1].disclaimerMessage + "")) set_data(t, t_value); 2435 }, 2436 d(detaching) { 2437 if (detaching) { 2438 detach(span); 2439 } 2440 } 2441 }; 2442 } 2443 2444 function create_fragment$1a(ctx) { 2445 let div5; 2446 let input; 2447 let input_id_value; 2448 let input_value_value; 2449 let t0; 2450 let div4; 2451 let div0; 2452 let t1; 2453 let div3; 2454 let div1; 2455 let raw_value = (/*paymentOption*/ ctx[1].description ?? '') + ""; 2456 let t2; 2457 let div2; 2458 let button; 2459 let t3; 2460 let div3_class_value; 2461 let div4_class_value; 2462 let current; 2463 let mounted; 2464 let dispose; 2465 let if_block0 = /*paymentOption*/ ctx[1].highlightedText && create_if_block_1$x(ctx); 2466 2467 button = new Button({ 2468 props: { 2469 disabled: false, 2470 text: /*paymentOption*/ ctx[1].selectButtonText ?? 'Select Plan', 2471 onClick: /*onSelect*/ ctx[0], 2472 isPaymentForm: true 2473 } 2474 }); 2475 2476 let if_block1 = /*paymentOption*/ ctx[1].disclaimerMessage && create_if_block$K(ctx); 2477 2478 return { 2479 c() { 2480 div5 = element("div"); 2481 input = element("input"); 2482 t0 = space(); 2483 div4 = element("div"); 2484 div0 = element("div"); 2485 if (if_block0) if_block0.c(); 2486 t1 = space(); 2487 div3 = element("div"); 2488 div1 = element("div"); 2489 t2 = space(); 2490 div2 = element("div"); 2491 create_component(button.$$.fragment); 2492 t3 = space(); 2493 if (if_block1) if_block1.c(); 2494 attr(input, "type", "radio"); 2495 attr(input, "name", "boxSelect"); 2496 attr(input, "id", input_id_value = "boxSelect-" + /*paymentOption*/ ctx[1].slug + "-" + /*paymentOption*/ ctx[1].productId + "}"); 2497 input.value = input_value_value = /*paymentOption*/ ctx[1].price; 2498 attr(input, "class", "svelte-hcxnnv"); 2499 attr(div0, "class", "box-top svelte-hcxnnv"); 2500 attr(div1, "class", "box-content svelte-hcxnnv"); 2501 toggle_class(div1, "styled-box-content", /*styleDescription*/ ctx[2]); 2502 attr(div2, "class", "box-bottom svelte-hcxnnv"); 2503 attr(div3, "class", div3_class_value = "inner-box " + (/*paymentOption*/ ctx[1].highlightedText || '') + " svelte-hcxnnv"); 2504 2505 attr(div4, "class", div4_class_value = "box-container " + (/*paymentOption*/ ctx[1].highlightedText 2506 ? 'highlighted' 2507 : '') + " svelte-hcxnnv"); 2508 2509 attr(div4, "aria-hidden", "true"); 2510 set_style(div4, "cursor", "pointer"); 2511 attr(div5, "class", "payment-option-wrapper svelte-hcxnnv"); 2512 }, 2513 m(target, anchor) { 2514 insert(target, div5, anchor); 2515 append(div5, input); 2516 append(div5, t0); 2517 append(div5, div4); 2518 append(div4, div0); 2519 if (if_block0) if_block0.m(div0, null); 2520 append(div4, t1); 2521 append(div4, div3); 2522 append(div3, div1); 2523 div1.innerHTML = raw_value; 2524 append(div3, t2); 2525 append(div3, div2); 2526 mount_component(button, div2, null); 2527 append(div2, t3); 2528 if (if_block1) if_block1.m(div2, null); 2529 current = true; 2530 2531 if (!mounted) { 2532 dispose = listen(div4, "click", prevent_default(function () { 2533 if (is_function(/*onSelect*/ ctx[0])) /*onSelect*/ ctx[0].apply(this, arguments); 2534 })); 2535 2536 mounted = true; 2537 } 2538 }, 2539 p(new_ctx, [dirty]) { 2540 ctx = new_ctx; 2541 2542 if (!current || dirty & /*paymentOption*/ 2 && input_id_value !== (input_id_value = "boxSelect-" + /*paymentOption*/ ctx[1].slug + "-" + /*paymentOption*/ ctx[1].productId + "}")) { 2543 attr(input, "id", input_id_value); 2544 } 2545 2546 if (!current || dirty & /*paymentOption*/ 2 && input_value_value !== (input_value_value = /*paymentOption*/ ctx[1].price)) { 2547 input.value = input_value_value; 2548 } 2549 2550 if (/*paymentOption*/ ctx[1].highlightedText) { 2551 if (if_block0) { 2552 if_block0.p(ctx, dirty); 2553 } else { 2554 if_block0 = create_if_block_1$x(ctx); 2555 if_block0.c(); 2556 if_block0.m(div0, null); 2557 } 2558 } else if (if_block0) { 2559 if_block0.d(1); 2560 if_block0 = null; 2561 } 2562 2563 if ((!current || dirty & /*paymentOption*/ 2) && raw_value !== (raw_value = (/*paymentOption*/ ctx[1].description ?? '') + "")) div1.innerHTML = raw_value; 2564 if (!current || dirty & /*styleDescription*/ 4) { 2565 toggle_class(div1, "styled-box-content", /*styleDescription*/ ctx[2]); 2566 } 2567 2568 const button_changes = {};
2569 if (dirty & /*paymentOption*/ 2) button_changes.text = /*paymentOption*/ ctx[1].selectButtonText ?? 'Select Plan'; 2570 if (dirty & /*onSelect*/ 1) button_changes.onClick = /*onSelect*/ ctx[0]; 2571 button.$set(button_changes); 2572 2573 if (/*paymentOption*/ ctx[1].disclaimerMessage) { 2574 if (if_block1) { 2575 if_block1.p(ctx, dirty); 2576 } else { 2577 if_block1 = create_if_block$K(ctx); 2578 if_block1.c(); 2579 if_block1.m(div2, null); 2580 } 2581 } else if (if_block1) { 2582 if_block1.d(1); 2583 if_block1 = null; 2584 } 2585 2586 if (!current || dirty & /*paymentOption*/ 2 && div3_class_value !== (div3_class_value = "inner-box " + (/*paymentOption*/ ctx[1].highlightedText || '') + " svelte-hcxnnv")) { 2587 attr(div3, "class", div3_class_value); 2588 } 2589 2590 if (!current || dirty & /*paymentOption*/ 2 && div4_class_value !== (div4_class_value = "box-container " + (/*paymentOption*/ ctx[1].highlightedText 2591 ? 'highlighted' 2592 : '') + " svelte-hcxnnv")) { 2593 attr(div4, "class", div4_class_value); 2594 } 2595 }, 2596 i(local) { 2597 if (current) return; 2598 transition_in(button.$$.fragment, local); 2599 current = true; 2600 }, 2601 o(local) { 2602 transition_out(button.$$.fragment, local); 2603 current = false; 2604 }, 2605 d(detaching) { 2606 if (detaching) { 2607 detach(div5); 2608 } 2609 2610 if (if_block0) if_block0.d(); 2611 destroy_component(button); 2612 if (if_block1) if_block1.d(); 2613 mounted = false; 2614 dispose(); 2615 } 2616 }; 2617 } 2618 2619 function instance$18($$self, $$props, $$invalidate) { 2620 let { onSelect } = $$props; 2621 let { paymentOption } = $$props; 2622 let { styleDescription } = $$props; 2623 2624 $$self.$$set = $$props => {
2625 if ('onSelect' in $$props) $$invalidate(0, onSelect = $$props.onSelect); 2626 if ('paymentOption' in $$props) $$invalidate(1, paymentOption = $$props.paymentOption); 2627 if ('styleDescription' in $$props) $$invalidate(2, styleDescription = $$props.styleDescription); 2628 }; 2629 2630 return [onSelect, paymentOption, styleDescription]; 2631 } 2632 2633 class PaymentOptionComponent extends SvelteComponent { 2634 constructor(options) { 2635 super(); 2636 2637 init(this, options, instance$18, create_fragment$1a, safe_not_equal, { 2638 onSelect: 0, 2639 paymentOption: 1, 2640 styleDescription: 2 2641 }); 2642 } 2643 } 2644 2645 /* src/components/elements/paymentOptionSelection/PaymentOptionSelectionComponent.svelte generated by Svelte v4.2.12 */ 2646 2647 function get_each_context$g(ctx, list, i) { 2648 const child_ctx = ctx.slice(); 2649 child_ctx[6] = list[i]; 2650 return child_ctx; 2651 } 2652 2653 // (12:2) {#each orderedPaymentOptions as paymentOption} 2654 function create_each_block$g(ctx) { 2655 let paymentoptioncomponent; 2656 let current; 2657 2658 function func() { 2659 return /*func*/ ctx[5](/*paymentOption*/ ctx[6]); 2660 } 2661 2662 paymentoptioncomponent = new PaymentOptionComponent({ 2663 props: { 2664 paymentOption: /*paymentOption*/ ctx[6], 2665 styleDescription: /*config*/ ctx[0].styleDescription, 2666 onSelect: func 2667 } 2668 }); 2669 2670 return { 2671 c() { 2672 create_component(paymentoptioncomponent.$$.fragment); 2673 }, 2674 m(target, anchor) { 2675 mount_component(paymentoptioncomponent, target, anchor); 2676 current = true; 2677 }, 2678 p(new_ctx, dirty) { 2679 ctx = new_ctx; 2680 const paymentoptioncomponent_changes = {}; 2681 if (dirty & /*orderedPaymentOptions*/ 4) paymentoptioncomponent_changes.paymentOption = /*paymentOption*/ ctx[6]; 2682 if (dirty & /*config*/ 1) paymentoptioncomponent_changes.styleDescription = /*config*/ ctx[0].styleDescription; 2683 if (dirty & /*onSelect, orderedPaymentOptions*/ 6) paymentoptioncomponent_changes.onSelect = func; 2684 paymentoptioncomponent.$set(paymentoptioncomponent_changes); 2685 }, 2686 i(local) { 2687 if (current) return; 2688 transition_in(paymentoptioncomponent.$$.fragment, local); 2689 current = true; 2690 }, 2691 o(local) { 2692 transition_out(paymentoptioncomponent.$$.fragment, local); 2693 current = false; 2694 }, 2695 d(detaching) { 2696 destroy_component(paymentoptioncomponent, detaching); 2697 } 2698 }; 2699 } 2700 2701 function create_fragment$19(ctx) { 2702 let div; 2703 let current; 2704 let each_value = ensure_array_like(/*orderedPaymentOptions*/ ctx[2]); 2705 let each_blocks = []; 2706 2707 for (let i = 0; i < each_value.length; i += 1) { 2708 each_blocks[i] = create_each_block$g(get_each_context$g(ctx, each_value, i)); 2709 } 2710 2711 const out = i => transition_out(each_blocks[i], 1, 1, () => { 2712 each_blocks[i] = null; 2713 }); 2714 2715 return { 2716 c() { 2717 div = element("div"); 2718 2719 for (let i = 0; i < each_blocks.length; i += 1) { 2720 each_blocks[i].c(); 2721 } 2722 2723 attr(div, "class", "payment-options-container svelte-tqlhky"); 2724 }, 2725 m(target, anchor) { 2726 insert(target, div, anchor); 2727 2728 for (let i = 0; i < each_blocks.length; i += 1) { 2729 if (each_blocks[i]) { 2730 each_blocks[i].m(div, null); 2731 } 2732 } 2733 2734 current = true; 2735 }, 2736 p(ctx, [dirty]) { 2737 if (dirty & /*orderedPaymentOptions, config, onSelect*/ 7) { 2738 each_value = ensure_array_like(/*orderedPaymentOptions*/ ctx[2]); 2739 let i; 2740 2741 for (i = 0; i < each_value.length; i += 1) { 2742 const child_ctx = get_each_context$g(ctx, each_value, i); 2743 2744 if (each_blocks[i]) { 2745 each_blocks[i].p(child_ctx, dirty); 2746 transition_in(each_blocks[i], 1); 2747 } else { 2748 each_blocks[i] = create_each_block$g(child_ctx); 2749 each_blocks[i].c(); 2750 transition_in(each_blocks[i], 1); 2751 each_blocks[i].m(div, null); 2752 } 2753 } 2754 2755 group_outros(); 2756 2757 for (i = each_value.length; i < each_blocks.length; i += 1) { 2758 out(i); 2759 } 2760 2761 check_outros(); 2762 } 2763 }, 2764 i(local) { 2765 if (current) return; 2766 2767 for (let i = 0; i < each_value.length; i += 1) { 2768 transition_in(each_blocks[i]); 2769 } 2770 2771 current = true; 2772 }, 2773 o(local) {
2774 each_blocks = each_blocks.filter(Boolean); 2775 2776 for (let i = 0; i < each_blocks.length; i += 1) { 2777 transition_out(each_blocks[i]); 2778 } 2779 2780 current = false; 2781 }, 2782 d(detaching) { 2783 if (detaching) { 2784 detach(div); 2785 } 2786 2787 destroy_each(each_blocks, detaching); 2788 } 2789 }; 2790 } 2791 2792 function instance$17($$self, $$props, $$invalidate) { 2793 let orderedPaymentOptions; 2794 let { paymentOptions } = $$props; 2795 let { config } = $$props; 2796 let { onSelect } = $$props; 2797 let { logView } = $$props; 2798 logView(); 2799 const func = paymentOption => onSelect(paymentOption); 2800 2801 $$self.$$set = $$props => { 2802 if ('paymentOptions' in $$props) $$invalidate(3, paymentOptions = $$props.paymentOptions); 2803 if ('config' in $$props) $$invalidate(0, config = $$props.config); 2804 if ('onSelect' in $$props) $$invalidate(1, onSelect = $$props.onSelect); 2805 if ('logView' in $$props) $$invalidate(4, logView = $$props.logView); 2806 }; 2807 2808 $$self.$$.update = () => { 2809 if ($$self.$$.dirty & /*paymentOptions*/ 8) { 2810 $$invalidate(2, orderedPaymentOptions = paymentOptions.sort((a, b) => a.fieldOrder - b.fieldOrder)); 2811 } 2812 }; 2813 2814 return [config, onSelect, orderedPaymentOptions, paymentOptions, logView, func]; 2815 } 2816 2817 class PaymentOptionSelectionComponent extends SvelteComponent { 2818 constructor(options) { 2819 super(); 2820 2821 init(this, options, instance$17, create_fragment$19, safe_not_equal, { 2822 paymentOptions: 3, 2823 config: 0, 2824 onSelect: 1, 2825 logView: 4 2826 }); 2827 } 2828 } 2829 2830 const filterValidPaymentOptions = (form, formState) => { 2831 if (!formConfigAs(form).changeSubscriptionMode) { 2832 return formConfigAs(form).paymentOptions; 2833 } 2834 return formConfigAs(form).paymentOptions 2835 .filter(paymentOption => formState 2836 .validChangeFromPlans 2837 .some(validPlan => validPlan.productId === paymentOption.productId && validPlan.planSlug === paymentOption.slug)); 2838 }; 2839 const factory$t = { 2840 matches: (sectionElement) => sectionElement.type === elementTypes.PAYMENT_OPTION_SELECTION, 2841 create: (form, formState, formActions, elementConfig) => ({ 2842 component: PaymentOptionSelectionComponent, 2843 props: { 2844 paymentOptions: filterValidPaymentOptions(form, formState), 2845 config: elementConfig ? elementConfig : {}, 2846 onSelect: (paymentOption) => { 2847 const paymentOptionKey = `${paymentOption.productId}-${paymentOption.slug}`; 2848 const updateState = { 2849 paymentOption: { 2850 ...paymentOption, 2851 autoRenewConfig: paymentOption.autoRenewConfig, 2852 autoRenewToggleLabel: paymentOption.autoRenewToggleLabel 2853 }, 2854 serverErrors: [], 2855 billingAddress: { 2856 country: null, 2857 postalCode: null, 2858 } 2859 }; 2860 // Only initialize auto-renew state for payment options with custom_toggle config 2861 if (paymentOption.autoRenewConfig === 'custom_toggle') { 2862 updateState.paymentOptionAutoRenew = { 2863 ...formState.paymentOptionAutoRenew, 2864 [paymentOptionKey]: paymentOption.terms?.autoRenew ?? false 2865 }; 2866 } 2867 formActions.updateFormState(updateState); 2868 if (form.organisationConfiguration.trackFormDataLayerEvents) { 2869 logDataLayerEvent(form, 'zephr_form_button_press', { 2870 sectionId: formState.currentSection.type, 2871 buttonType: 'SUBMIT' 2872 }); 2873 } 2874 void formActions.completeSection(); 2875 }, 2876 logView: () => { 2877 filterValidPaymentOptions(form, formState).forEach(paymentOption => logDataLayerEvent(form, 'view_item', { 2878 ecommerce: { 2879 currency: formConfigAs(form).formCurrency ?? paymentOption?.currencyCode, 2880 value: paymentOption.price, 2881 items: [{ 2882 item_id: paymentOption.slug, 2883 item_name: paymentOption.productId, 2884 price: paymentOption.price, 2885 quantity: 1 2886 }] 2887 } 2888 })); 2889 } 2890 } 2891 }) 2892 }; 2893 2894 /* src/components/elements/ErrorMessage.svelte generated by Svelte v4.2.12 */ 2895 2896 function create_fragment$18(ctx) { 2897 let div1; 2898 let div0; 2899 let t; 2900 2901 return { 2902 c() { 2903 div1 = element("div"); 2904 div0 = element("div"); 2905 t = text(/*error*/ ctx[0]); 2906 attr(div0, "class", "zephr-form-error-message svelte-1ko2lqj"); 2907 attr(div0, "aria-live", "assertive"); 2908 toggle_class(div0, "zephr-payment-form-error-message", !/*isPaymentForm*/ ctx[1]); 2909 attr(div1, "class", "zephr-form-error-message-min-height svelte-1ko2lqj"); 2910 toggle_class(div1, "zephr-payment-form-error-message-min-height", !/*isPaymentForm*/ ctx[1]); 2911 }, 2912 m(target, anchor) { 2913 insert(target, div1, anchor); 2914 append(div1, div0); 2915 append(div0, t); 2916 }, 2917 p(ctx, [dirty]) {
2918 if (dirty & /*error*/ 1) set_data(t, /*error*/ ctx[0]); 2919 2920 if (dirty & /*isPaymentForm*/ 2) { 2921 toggle_class(div0, "zephr-payment-form-error-message", !/*isPaymentForm*/ ctx[1]); 2922 } 2923 2924 if (dirty & /*isPaymentForm*/ 2) { 2925 toggle_class(div1, "zephr-payment-form-error-message-min-height", !/*isPaymentForm*/ ctx[1]); 2926 } 2927 }, 2928 i: noop, 2929 o: noop, 2930 d(detaching) { 2931 if (detaching) { 2932 detach(div1); 2933 } 2934 } 2935 }; 2936 } 2937 2938 function instance$16($$self, $$props, $$invalidate) { 2939 let { error } = $$props; 2940 let { isPaymentForm = false } = $$props; 2941 2942 $$self.$$set = $$props => { 2943 if ('error' in $$props) $$invalidate(0, error = $$props.error); 2944 if ('isPaymentForm' in $$props) $$invalidate(1, isPaymentForm = $$props.isPaymentForm); 2945 }; 2946 2947 return [error, isPaymentForm]; 2948 } 2949 2950 class ErrorMessage extends SvelteComponent { 2951 constructor(options) { 2952 super(); 2953 init(this, options, instance$16, create_fragment$18, safe_not_equal, { error: 0, isPaymentForm: 1 }); 2954 } 2955 } 2956 2957 /* src/components/elements/Input.svelte generated by Svelte v4.2.12 */ 2958 2959 function create_if_block_1$w(ctx) { 2960 let button; 2961 let span; 2962 let t; 2963 let mounted; 2964 let dispose; 2965 2966 return { 2967 c() { 2968 button = element("button"); 2969 span = element("span"); 2970 t = text(/*innerText*/ ctx[16]); 2971 attr(span, "class", "zephr-form-input-inner-text"); 2972 toggle_class(span, "zephr-payment-form-input-inner-text", /*isPaymentForm*/ ctx[7]); 2973 attr(button, "type", "button"); 2974 attr(button, "class", "zephr-form-input-inner-button"); 2975 }, 2976 m(target, anchor) { 2977 insert(target, button, anchor); 2978 append(button, span); 2979 append(span, t); 2980 /*button_binding*/ ctx[28](button); 2981 2982 if (!mounted) { 2983 dispose = listen(button, "click", prevent_default(function () { 2984 if (is_function(/*innerTextOnClick*/ ctx[17])) /*innerTextOnClick*/ ctx[17].apply(this, arguments); 2985 })); 2986 2987 mounted = true; 2988 } 2989 }, 2990 p(new_ctx, dirty) { 2991 ctx = new_ctx; 2992 if (dirty & /*innerText*/ 65536) set_data(t, /*innerText*/ ctx[16]); 2993 2994 if (dirty & /*isPaymentForm*/ 128) { 2995 toggle_class(span, "zephr-payment-form-input-inner-text", /*isPaymentForm*/ ctx[7]); 2996 } 2997 }, 2998 d(detaching) { 2999 if (detaching) { 3000 detach(button); 3001 } 3002 3003 /*button_binding*/ ctx[28](null); 3004 mounted = false; 3005 dispose(); 3006 } 3007 }; 3008 } 3009 3010 // (89:0) {#if errorMessage} 3011 function create_if_block$J(ctx) { 3012 let errormessage; 3013 let current; 3014 3015 errormessage = new ErrorMessage({ 3016 props: { 3017 error: /*errorMessage*/ ctx[6], 3018 isPaymentForm: /*isPaymentForm*/ ctx[7] 3019 } 3020 }); 3021 3022 return { 3023 c() { 3024 create_component(errormessage.$$.fragment); 3025 }, 3026 m(target, anchor) { 3027 mount_component(errormessage, target, anchor); 3028 current = true; 3029 }, 3030 p(ctx, dirty) { 3031 const errormessage_changes = {}; 3032 if (dirty & /*errorMessage*/ 64) errormessage_changes.error = /*errorMessage*/ ctx[6]; 3033 if (dirty & /*isPaymentForm*/ 128) errormessage_changes.isPaymentForm = /*isPaymentForm*/ ctx[7]; 3034 errormessage.$set(errormessage_changes); 3035 }, 3036 i(local) { 3037 if (current) return; 3038 transition_in(errormessage.$$.fragment, local); 3039 current = true; 3040 }, 3041 o(local) { 3042 transition_out(errormessage.$$.fragment, local); 3043 current = false; 3044 }, 3045 d(detaching) { 3046 destroy_component(errormessage, detaching); 3047 } 3048 }; 3049 } 3050 3051 function create_fragment$17(ctx) { 3052 let div; 3053 let input; 3054 let input_value_value; 3055 let input_autocomplete_value; 3056 let input_checked_value; 3057 let input_placeholder_value; 3058 let input_pattern_value; 3059 let input_min_value; 3060 let input_max_value; 3061 let input_step_value; 3062 let input_class_value; 3063 let t0; 3064 let t1; 3065 let t2; 3066 let if_block1_anchor; 3067 let current; 3068 let mounted; 3069 let dispose; 3070 let if_block0 = /*innerText*/ ctx[16] && create_if_block_1$w(ctx); 3071 const default_slot_template = /*#slots*/ ctx[26].default; 3072 const default_slot = create_slot(default_slot_template, ctx, /*$$scope*/ ctx[25], null); 3073 let if_block1 = /*errorMessage*/ ctx[6] && create_if_block$J(ctx); 3074 3075 return { 3076 c() { 3077 div = element("div"); 3078 input = element("input"); 3079 t0 = space(); 3080 if (if_block0) if_block0.c(); 3081 t1 = space(); 3082 if (default_slot) default_slot.c(); 3083 t2 = space(); 3084 if (if_block1) if_block1.c(); 3085 if_block1_anchor = empty(); 3086 attr(input, "id", /*id*/ ctx[0]); 3087 attr(input, "name", /*name*/ ctx[1]); 3088 input.required = /*required*/ ctx[3]; 3089 input.disabled = /*disabled*/ ctx[4]; 3090 attr(input, "type", /*type*/ ctx[2]); 3091 input.value = input_value_value = /*value*/ ctx[8] || null; 3092 attr(input, "autocomplete", input_autocomplete_value = /*autocomplete*/ ctx[19] || null); 3093 input.checked = input_checked_value = /*checked*/ ctx[10] || null; 3094 attr(input, "placeholder", input_placeholder_value = /*placeholder*/ ctx[9] || null); 3095 attr(input, "pattern", input_pattern_value = /*pattern*/ ctx[11] || null); 3096 attr(input, "min", input_min_value = /*min*/ ctx[12] || null); 3097 attr(input, "max", input_max_value = /*max*/ ctx[13] || null); 3098 attr(input, "maxlength", /*maxlength*/ ctx[15]); 3099 attr(input, "step", input_step_value = /*step*/ ctx[14] || null); 3100 attr(input, "class", input_class_value = "" + (null_to_empty(`zephr-form-input ${/*type*/ ctx[2] && `zephr-form-input-${/*type*/ ctx[2]}`} ${/*isPaymentForm*/ ctx[7] && /*type*/ ctx[2] && `zephr-payment-form-input-${/*type*/ ctx[2]}`}`) + " svelte-88cmol")); 3101 toggle_class(input, "disabled", /*disabled*/ ctx[4]); 3102 toggle_class(input, "error", /*hasError*/ ctx[5] || /*errorMessage*/ ctx[6]); 3103 toggle_class(input, "zephr-form-input-full-width", /*fill*/ ctx[18]); 3104 toggle_class(input, "zephr-payment-form-input", /*isPaymentForm*/ ctx[7]); 3105 toggle_class(input, "zephr-payment-form-input-full-width", /*isPaymentForm*/ ctx[7] && /*fill*/ ctx[18]); 3106 attr(div, "class", "zephr-form-input-inner-container svelte-88cmol"); 3107 toggle_class(div, "zephr-payment-form-input-inner-container", /*isPaymentForm*/ ctx[7]); 3108 }, 3109 m(target, anchor) { 3110 insert(target, div, anchor); 3111 append(div, input); 3112 /*input_binding*/ ctx[27](input); 3113 append(div, t0); 3114 if (if_block0) if_block0.m(div, null); 3115 insert(target, t1, anchor); 3116 3117 if (default_slot) { 3118 default_slot.m(target, anchor); 3119 } 3120 3121 insert(target, t2, anchor); 3122 if (if_block1) if_block1.m(target, anchor); 3123 insert(target, if_block1_anchor, anchor); 3124 current = true; 3125 3126 if (!mounted) { 3127 dispose = [
3128 listen(input, "focus", function () { 3129 if (is_function(/*onFocus*/ ctx[20])) /*onFocus*/ ctx[20].apply(this, arguments); 3130 }), 3131 listen(input, "blur", function () { 3132 if (is_function(/*onBlur*/ ctx[21])) /*onBlur*/ ctx[21].apply(this, arguments); 3133 }), 3134 listen(input, "input", /*handleInputChange*/ ctx[24]), 3135 listen(input, "paste", /*handleInputChange*/ ctx[24]) 3136 ]; 3137 3138 mounted = true; 3139 } 3140 }, 3141 p(new_ctx, [dirty]) { 3142 ctx = new_ctx; 3143 3144 if (!current || dirty & /*id*/ 1) { 3145 attr(input, "id", /*id*/ ctx[0]); 3146 } 3147 3148 if (!current || dirty & /*name*/ 2) { 3149 attr(input, "name", /*name*/ ctx[1]); 3150 } 3151 3152 if (!current || dirty & /*required*/ 8) { 3153 input.required = /*required*/ ctx[3]; 3154 } 3155 3156 if (!current || dirty & /*disabled*/ 16) { 3157 input.disabled = /*disabled*/ ctx[4]; 3158 } 3159 3160 if (!current || dirty & /*type*/ 4) { 3161 attr(input, "type", /*type*/ ctx[2]); 3162 } 3163 3164 if (!current || dirty & /*value*/ 256 && input_value_value !== (input_value_value = /*value*/ ctx[8] || null) && input.value !== input_value_value) { 3165 input.value = input_value_value; 3166 } 3167 3168 if (!current || dirty & /*autocomplete*/ 524288 && input_autocomplete_value !== (input_autocomplete_value = /*autocomplete*/ ctx[19] || null)) { 3169 attr(input, "autocomplete", input_autocomplete_value); 3170 } 3171 3172 if (!current || dirty & /*checked*/ 1024 && input_checked_value !== (input_checked_value = /*checked*/ ctx[10] || null)) { 3173 input.checked = input_checked_value; 3174 } 3175 3176 if (!current || dirty & /*placeholder*/ 512 && input_placeholder_value !== (input_placeholder_value = /*placeholder*/ ctx[9] || null)) { 3177 attr(input, "placeholder", input_placeholder_value); 3178 } 3179 3180 if (!current || dirty & /*pattern*/ 2048 && input_pattern_value !== (input_pattern_value = /*pattern*/ ctx[11] || null)) { 3181 attr(input, "pattern", input_pattern_value); 3182 } 3183 3184 if (!current || dirty & /*min*/ 4096 && input_min_value !== (input_min_value = /*min*/ ctx[12] || null)) { 3185 attr(input, "min", input_min_value); 3186 } 3187 3188 if (!current || dirty & /*max*/ 8192 && input_max_value !== (input_max_value = /*max*/ ctx[13] || null)) { 3189 attr(input, "max", input_max_value); 3190 } 3191 3192 if (!current || dirty & /*maxlength*/ 32768) { 3193 attr(input, "maxlength", /*maxlength*/ ctx[15]); 3194 } 3195 3196 if (!current || dirty & /*step*/ 16384 && input_step_value !== (input_step_value = /*step*/ ctx[14] || null)) { 3197 attr(input, "step", input_step_value); 3198 } 3199 3200 if (!current || dirty & /*type, isPaymentForm*/ 132 && input_class_value !== (input_class_value = "" + (null_to_empty(`zephr-form-input ${/*type*/ ctx[2] && `zephr-form-input-${/*type*/ ctx[2]}`} ${/*isPaymentForm*/ ctx[7] && /*type*/ ctx[2] && `zephr-payment-form-input-${/*type*/ ctx[2]}`}`) + " svelte-88cmol"))) { 3201 attr(input, "class", input_class_value); 3202 } 3203 3204 if (!current || dirty & /*type, isPaymentForm, disabled*/ 148) { 3205 toggle_class(input, "disabled", /*disabled*/ ctx[4]); 3206 } 3207 3208 if (!current || dirty & /*type, isPaymentForm, hasError, errorMessage*/ 228) { 3209 toggle_class(input, "error", /*hasError*/ ctx[5] || /*errorMessage*/ ctx[6]); 3210 } 3211 3212 if (!current || dirty & /*type, isPaymentForm, fill*/ 262276) { 3213 toggle_class(input, "zephr-form-input-full-width", /*fill*/ ctx[18]); 3214 } 3215 3216 if (!current || dirty & /*type, isPaymentForm, isPaymentForm*/ 132) { 3217 toggle_class(input, "zephr-payment-form-input", /*isPaymentForm*/ ctx[7]); 3218 } 3219 3220 if (!current || dirty & /*type, isPaymentForm, isPaymentForm, fill*/ 262276) { 3221 toggle_class(input, "zephr-payment-form-input-full-width", /*isPaymentForm*/ ctx[7] && /*fill*/ ctx[18]); 3222 } 3223 3224 if (/*innerText*/ ctx[16]) { 3225 if (if_block0) { 3226 if_block0.p(ctx, dirty); 3227 } else { 3228 if_block0 = create_if_block_1$w(ctx); 3229 if_block0.c(); 3230 if_block0.m(div, null); 3231 } 3232 } else if (if_block0) { 3233 if_block0.d(1); 3234 if_block0 = null; 3235 } 3236 3237 if (!current || dirty & /*isPaymentForm*/ 128) { 3238 toggle_class(div, "zephr-payment-form-input-inner-container", /*isPaymentForm*/ ctx[7]); 3239 } 3240 3241 if (default_slot) { 3242 if (default_slot.p && (!current || dirty & /*$$scope*/ 33554432)) { 3243 update_slot_base( 3244 default_slot, 3245 default_slot_template, 3246 ctx, 3247 /*$$scope*/ ctx[25], 3248 !current 3249 ? get_all_dirty_from_scope(/*$$scope*/ ctx[25]) 3250 : get_slot_changes(default_slot_template, /*$$scope*/ ctx[25], dirty, null), 3251 null 3252 ); 3253 } 3254 } 3255 3256 if (/*errorMessage*/ ctx[6]) { 3257 if (if_block1) { 3258 if_block1.p(ctx, dirty); 3259
3260 if (dirty & /*errorMessage*/ 64) { 3261 transition_in(if_block1, 1); 3262 } 3263 } else { 3264 if_block1 = create_if_block$J(ctx); 3265 if_block1.c(); 3266 transition_in(if_block1, 1); 3267 if_block1.m(if_block1_anchor.parentNode, if_block1_anchor); 3268 } 3269 } else if (if_block1) { 3270 group_outros(); 3271 3272 transition_out(if_block1, 1, 1, () => { 3273 if_block1 = null; 3274 }); 3275 3276 check_outros(); 3277 } 3278 }, 3279 i(local) { 3280 if (current) return; 3281 transition_in(default_slot, local); 3282 transition_in(if_block1); 3283 current = true; 3284 }, 3285 o(local) { 3286 transition_out(default_slot, local); 3287 transition_out(if_block1); 3288 current = false; 3289 }, 3290 d(detaching) { 3291 if (detaching) { 3292 detach(div); 3293 detach(t1); 3294 detach(t2); 3295 detach(if_block1_anchor); 3296 } 3297 3298 /*input_binding*/ ctx[27](null); 3299 if (if_block0) if_block0.d(); 3300 if (default_slot) default_slot.d(detaching); 3301 if (if_block1) if_block1.d(detaching); 3302 mounted = false; 3303 run_all(dispose); 3304 } 3305 }; 3306 } 3307 3308 function instance$15($$self, $$props, $$invalidate) { 3309 let { $$slots: slots = {}, $$scope } = $$props; 3310 const dispatch = createEventDispatcher(); 3311 let { id } = $$props; 3312 let { name = id } = $$props; 3313 let { type = "text" } = $$props; 3314 let { required = true } = $$props; 3315 let { disabled = false } = $$props; 3316 let { hasError = false } = $$props; 3317 let { errorMessage = null } = $$props; 3318 let { isPaymentForm = false } = $$props; 3319 let { value = "" } = $$props; 3320 let { placeholder = "" } = $$props; 3321 let { checked = false } = $$props; 3322 let { pattern = "" } = $$props; 3323 let { min = 0 } = $$props; 3324 let { max = 0 } = $$props; 3325 let { step = 0 } = $$props; 3326 let { maxlength = null } = $$props; 3327 let { innerText = null } = $$props; 3328 let { innerTextOnClick = null } = $$props; 3329 let { fill = false } = $$props; 3330 let { autocomplete = "" } = $$props; 3331 let { onFocus } = $$props; 3332 let { onBlur } = $$props; 3333 let inputElement; 3334 let buttonElement; 3335 3336 const handleInputChange = e => { 3337 dispatch("change", type !== "checkbox" ? e.target.value : e.target.checked); 3338 }; 3339 3340 afterUpdate(() => { 3341 if (innerText && buttonElement && inputElement) { 3342 $$invalidate(22, inputElement.style.paddingRight = `${buttonElement.offsetWidth + 8}px`, inputElement); 3343 } 3344 }); 3345 3346 function input_binding($$value) { 3347 binding_callbacks[$$value ? 'unshift' : 'push'](() => { 3348 inputElement = $$value; 3349 $$invalidate(22, inputElement); 3350 }); 3351 } 3352 3353 function button_binding($$value) { 3354 binding_callbacks[$$value ? 'unshift' : 'push'](() => { 3355 buttonElement = $$value; 3356 $$invalidate(23, buttonElement); 3357 }); 3358 } 3359 3360 $$self.$$set = $$props => {
3361 if ('id' in $$props) $$invalidate(0, id = $$props.id); 3362 if ('name' in $$props) $$invalidate(1, name = $$props.name); 3363 if ('type' in $$props) $$invalidate(2, type = $$props.type); 3364 if ('required' in $$props) $$invalidate(3, required = $$props.required); 3365 if ('disabled' in $$props) $$invalidate(4, disabled = $$props.disabled); 3366 if ('hasError' in $$props) $$invalidate(5, hasError = $$props.hasError); 3367 if ('errorMessage' in $$props) $$invalidate(6, errorMessage = $$props.errorMessage); 3368 if ('isPaymentForm' in $$props) $$invalidate(7, isPaymentForm = $$props.isPaymentForm); 3369 if ('value' in $$props) $$invalidate(8, value = $$props.value); 3370 if ('placeholder' in $$props) $$invalidate(9, placeholder = $$props.placeholder); 3371 if ('checked' in $$props) $$invalidate(10, checked = $$props.checked); 3372 if ('pattern' in $$props) $$invalidate(11, pattern = $$props.pattern); 3373 if ('min' in $$props) $$invalidate(12, min = $$props.min); 3374 if ('max' in $$props) $$invalidate(13, max = $$props.max); 3375 if ('step' in $$props) $$invali
3375date(14, step = $$props.step); 3376 if ('maxlength' in $$props) $$invalidate(15, maxlength = $$props.maxlength); 3377 if ('innerText' in $$props) $$invalidate(16, innerText = $$props.innerText); 3378 if ('innerTextOnClick' in $$props) $$invalidate(17, innerTextOnClick = $$props.innerTextOnClick); 3379 if ('fill' in $$props) $$invalidate(18, fill = $$props.fill); 3380 if ('autocomplete' in $$props) $$invalidate(19, autocomplete = $$props.autocomplete); 3381 if ('onFocus' in $$props) $$invalidate(20, onFocus = $$props.onFocus); 3382 if ('onBlur' in $$props) $$invalidate(21, onBlur = $$props.onBlur); 3383 if ('$$scope' in $$props) $$invalidate(25, $$scope = $$props.$$scope); 3384 }; 3385 3386 return [ 3387 id, 3388 name, 3389 type, 3390 required, 3391 disabled, 3392 hasError, 3393 errorMessage, 3394 isPaymentForm, 3395 value, 3396 placeholder, 3397 checked, 3398 pattern, 3399 min, 3400 max, 3401 step, 3402 maxlength, 3403 innerText, 3404 innerTextOnClick, 3405 fill, 3406 autocomplete, 3407 onFocus, 3408 onBlur, 3409 inputElement, 3410 buttonElement, 3411 handleInputChange, 3412 $$scope, 3413 slots, 3414 input_binding, 3415 button_binding 3416 ]; 3417 } 3418 3419 class Input extends SvelteComponent { 3420 constructor(options) { 3421 super(); 3422 3423 init(this, options, instance$15, create_fragment$17, safe_not_equal, { 3424 id: 0, 3425 name: 1, 3426 type: 2, 3427 required: 3, 3428 disabled: 4, 3429 hasError: 5, 3430 errorMessage: 6, 3431 isPaymentForm: 7, 3432 value: 8, 3433 placeholder: 9, 3434 checked: 10, 3435 pattern: 11, 3436 min: 12, 3437 max: 13, 3438 step: 14, 3439 maxlength: 15, 3440 innerText: 16, 3441 innerTextOnClick: 17, 3442 fill: 18, 3443 autocomplete: 19, 3444 onFocus: 20, 3445 onBlur: 21 3446 }); 3447 } 3448 } 3449 3450 /* src/components/elements/Label.svelte generated by Svelte v4.2.12 */ 3451 3452 function create_if_block$I(ctx) { 3453 let span; 3454 let t; 3455 3456 return { 3457 c() { 3458 span = element("span"); 3459 t = text(/*sublabel*/ ctx[1]); 3460 attr(span, "class", "svelte-yaw4yg"); 3461 }, 3462 m(target, anchor) { 3463 insert(target, span, anchor); 3464 append(span, t); 3465 }, 3466 p(ctx, dirty) { 3467 if (dirty & /*sublabel*/ 2) set_data(t, /*sublabel*/ ctx[1]); 3468 }, 3469 d(detaching) { 3470 if (detaching) { 3471 detach(span); 3472 } 3473 } 3474 }; 3475 } 3476 3477 function create_fragment$16(ctx) { 3478 let label_1; 3479 let span; 3480 let t0; 3481 let t1; 3482 let t2; 3483 let current; 3484 let if_block = /*sublabel*/ ctx[1] && create_if_block$I(ctx); 3485 const default_slot_template = /*#slots*/ ctx[6].default; 3486 const default_slot = create_slot(default_slot_template, ctx, /*$$scope*/ ctx[5], null); 3487 3488 return { 3489 c() { 3490 label_1 = element("label"); 3491 span = element("span"); 3492 t0 = text(/*label*/ ctx[2]); 3493 t1 = space(); 3494 if (if_block) if_block.c(); 3495 t2 = space(); 3496 if (default_slot) default_slot.c(); 3497 attr(span, "class", "svelte-yaw4yg"); 3498 attr(label_1, "class", "zephr-form-input-label svelte-yaw4yg"); 3499 attr(label_1, "for", /*forInput*/ ctx[0]); 3500 attr(label_1, "style", /*style*/ ctx[3]); 3501 toggle_class(label_1, "zephr-payment-form-input-label", /*isPaymentForm*/ ctx[4]); 3502 }, 3503 m(target, anchor) { 3504 insert(target, label_1, anchor); 3505 append(label_1, span); 3506 append(span, t0); 3507 append(label_1, t1); 3508 if (if_block) if_block.m(label_1, null); 3509 append(label_1, t2); 3510 3511 if (default_slot) { 3512 default_slot.m(label_1, null); 3513 } 3514 3515 current = true; 3516 }, 3517 p(ctx, [dirty]) { 3518 if (!current || dirty & /*label*/ 4) set_data(t0, /*label*/ ctx[2]); 3519 3520 if (/*sublabel*/ ctx[1]) { 3521 if (if_block) { 3522 if_block.p(ctx, dirty); 3523 } else { 3524 if_block = create_if_block$I(ctx); 3525 if_block.c(); 3526 if_block.m(label_1, t2); 3527 } 3528 } else if (if_block) { 3529 if_block.d(1); 3530 if_block = null; 3531 } 3532 3533 if (default_slot) { 3534 if (default_slot.p && (!current || dirty & /*$$scope*/ 32)) { 3535 update_slot_base( 3536 default_slot, 3537 default_slot_template, 3538 ctx, 3539 /*$$scope*/ ctx[5], 3540 !current 3541 ? get_all_dirty_from_scope(/*$$scope*/ ctx[5]) 3542 : get_slot_changes(default_slot_template, /*$$scope*/ ctx[5], dirty, null), 3543 null 3544 ); 3545 } 3546 } 3547 3548 if (!current || dirty & /*forInput*/ 1) { 3549 attr(label_1, "for", /*forInput*/ ctx[0]); 3550 } 3551 3552 if (!current || dirty & /*style*/ 8) { 3553 attr(label_1, "style", /*style*/ ctx[3]); 3554 } 3555 3556 if (!current || dirty & /*isPaymentForm*/ 16) { 3557 toggle_class(label_1, "zephr-payment-form-input-label", /*isPaymentForm*/ ctx[4]); 3558 } 3559 }, 3560 i(local) { 3561 if (current) return; 3562 transition_in(default_slot, local); 3563 current = true; 3564 }, 3565 o(local) { 3566 transition_out(default_slot, local); 3567 current = false;
3568 }, 3569 d(detaching) { 3570 if (detaching) { 3571 detach(label_1); 3572 } 3573 3574 if (if_block) if_block.d(); 3575 if (default_slot) default_slot.d(detaching); 3576 } 3577 }; 3578 } 3579 3580 function instance$14($$self, $$props, $$invalidate) { 3581 let { $$slots: slots = {}, $$scope } = $$props; 3582 let { forInput } = $$props; 3583 let { sublabel = "" } = $$props; 3584 let { label = "" } = $$props; 3585 let { style = "" } = $$props; 3586 let { isPaymentForm = false } = $$props; 3587 3588 $$self.$$set = $$props => { 3589 if ('forInput' in $$props) $$invalidate(0, forInput = $$props.forInput); 3590 if ('sublabel' in $$props) $$invalidate(1, sublabel = $$props.sublabel); 3591 if ('label' in $$props) $$invalidate(2, label = $$props.label); 3592 if ('style' in $$props) $$invalidate(3, style = $$props.style); 3593 if ('isPaymentForm' in $$props) $$invalidate(4, isPaymentForm = $$props.isPaymentForm); 3594 if ('$$scope' in $$props) $$invalidate(5, $$scope = $$props.$$scope); 3595 }; 3596 3597 return [forInput, sublabel, label, style, isPaymentForm, $$scope, slots]; 3598 } 3599 3600 class Label extends SvelteComponent { 3601 constructor(options) { 3602 super(); 3603 3604 init(this, options, instance$14, create_fragment$16, safe_not_equal, { 3605 forInput: 0, 3606 sublabel: 1, 3607 label: 2, 3608 style: 3, 3609 isPaymentForm: 4 3610 }); 3611 } 3612 } 3613 3614 /* src/components/elements/password/PasswordInput.svelte generated by Svelte v4.2.12 */ 3615 3616 function create_fragment$15(ctx) { 3617 let label_1; 3618 let t; 3619 let div; 3620 let input; 3621 let current; 3622 3623 label_1 = new Label({ 3624 props: { 3625 forInput: /*inputId*/ ctx[13], 3626 label: /*label*/ ctx[1], 3627 isPaymentForm: /*isPaymentForm*/ ctx[8] 3628 } 3629 }); 3630 3631 input = new Input({ 3632 props: { 3633 disabled: /*disabled*/ ctx[0], 3634 required: true, 3635 id: /*inputId*/ ctx[13], 3636 type: /*passwordInputType*/ ctx[14], 3637 value: /*password*/ ctx[11], 3638 placeholder: /*placeholder*/ ctx[2], 3639 errorMessage: /*error*/ ctx[5], 3640 autocomplete: /*autocomplete*/ ctx[7], 3641 isPaymentForm: /*isPaymentForm*/ ctx[8], 3642 innerTextOnClick: /*func*/ ctx[16], 3643 innerText: /*showPassword*/ ctx[12] 3644 ? /*hideLabel*/ ctx[4] 3645 : /*showLabel*/ ctx[3], 3646 onFocus: /*onFocus*/ ctx[9], 3647 onBlur: /*onBlur*/ ctx[10] 3648 } 3649 }); 3650 3651 input.$on("change", /*change_handler*/ ctx[17]); 3652 3653 return { 3654 c() { 3655 create_component(label_1.$$.fragment); 3656 t = space(); 3657 div = element("div"); 3658 create_component(input.$$.fragment); 3659 attr(div, "class", "zephr-form-relative-container"); 3660 toggle_class(div, "zephr-payment-form-relative-container", /*isPaymentForm*/ ctx[8]); 3661 }, 3662 m(target, anchor) { 3663 mount_component(label_1, target, anchor); 3664 insert(target, t, anchor); 3665 insert(target, div, anchor); 3666 mount_component(input, div, null); 3667 current = true; 3668 }, 3669 p(ctx, [dirty]) { 3670 const label_1_changes = {}; 3671 if (dirty & /*inputId*/ 8192) label_1_changes.forInput = /*inputId*/ ctx[13]; 3672 if (dirty & /*label*/ 2) label_1_changes.label = /*label*/ ctx[1]; 3673 if (dirty & /*isPaymentForm*/ 256) label_1_changes.isPaymentForm = /*isPaymentForm*/ ctx[8]; 3674 label_1.$set(label_1_changes); 3675 const input_changes = {}; 3676 if (dirty & /*disabled*/ 1) input_changes.disabled = /*disabled*/ ctx[0]; 3677 if (dirty & /*inputId*/ 8192) input_changes.id = /*inputId*/ ctx[13]; 3678 if (dirty & /*passwordInputType*/ 16384) input_changes.type = /*passwordInputType*/ ctx[14]; 3679 if (dirty & /*password*/ 2048) input_changes.value = /*password*/ ctx[11]; 3680 if (dirty & /*placeholder*/ 4) input_changes.placeholder = /*placeholder*/ ctx[2]; 3681 if (dirty & /*error*/ 32) input_changes.errorMessage = /*error*/ ctx[5]; 3682 if (dirty & /*autocomplete*/ 128) input_changes.autocomplete = /*autocomplete*/ ctx[7]; 3683 if (dirty & /*isPaymentForm*/ 256) input_changes.isPaymentForm = /*isPaymentForm*/ ctx[8]; 3684 if (dirty & /*showPassword*/ 4096) input_changes.innerTextOnClick = /*func*/ ctx[16]; 3685 3686 if (dirty & /*showPassword, hideLabel, showLabel*/ 4120) input_changes.innerText = /*showPassword*/ ctx[12] 3687 ? /*hideLabel*/ ctx[4] 3688 : /*showLabel*/ ctx[3]; 3689 3690 if (dirty & /*onFocus*/ 512) input_changes.onFocus = /*onFocus*/ ctx[9];
3691 if (dirty & /*onBlur*/ 1024) input_changes.onBlur = /*onBlur*/ ctx[10]; 3692 input.$set(input_changes); 3693 3694 if (!current || dirty & /*isPaymentForm*/ 256) { 3695 toggle_class(div, "zephr-payment-form-relative-container", /*isPaymentForm*/ ctx[8]); 3696 } 3697 }, 3698 i(local) { 3699 if (current) return; 3700 transition_in(label_1.$$.fragment, local); 3701 transition_in(input.$$.fragment, local); 3702 current = true; 3703 }, 3704 o(local) { 3705 transition_out(label_1.$$.fragment, local); 3706 transition_out(input.$$.fragment, local); 3707 current = false; 3708 }, 3709 d(detaching) { 3710 if (detaching) { 3711 detach(t); 3712 detach(div); 3713 } 3714 3715 destroy_component(label_1, detaching); 3716 destroy_component(input); 3717 } 3718 }; 3719 } 3720 3721 function instance$13($$self, $$props, $$invalidate) { 3722 let passwordInputType; 3723 let inputId; 3724 let { disabled } = $$props; 3725 let { label } = $$props; 3726 let { placeholder } = $$props; 3727 let { isMainPassword } = $$props; 3728 let { showLabel } = $$props; 3729 let { hideLabel } = $$props; 3730 let { error = null } = $$props; 3731 let { onChange } = $$props; 3732 let { autocomplete } = $$props; 3733 let { isPaymentForm = false } = $$props; 3734 let { onFocus } = $$props; 3735 let { onBlur } = $$props; 3736 let { password } = $$props; 3737 let showPassword = false; 3738 const func = () =>
3738 $$invalidate(12, showPassword = !showPassword); 3739 const change_handler = ({ detail }) => onChange(detail); 3740 3741 $$self.$$set = $$props => { 3742 if ('disabled' in $$props) $$invalidate(0, disabled = $$props.disabled); 3743 if ('label' in $$props) $$invalidate(1, label = $$props.label); 3744 if ('placeholder' in $$props) $$invalidate(2, placeholder = $$props.placeholder); 3745 if ('isMainPassword' in $$props) $$invalidate(15, isMainPassword = $$props.isMainPassword); 3746 if ('showLabel' in $$props) $$invalidate(3, showLabel = $$props.showLabel); 3747 if ('hideLabel' in $$props) $$invalidate(4, hideLabel = $$props.hideLabel); 3748 if ('error' in $$props) $$invalidate(5, error = $$props.error); 3749 if ('onChange' in $$props) $$invalidate(6, onChange = $$props.onChange); 3750 if ('autocomplete' in $$props) $$invalidate(7, autocomplete = $$props.autocomplete); 3751 if ('isPaymentForm' in $$props) $$invalidate(8, isPaymentForm = $$props.isPaymentForm); 3752 if ('onFocus' in $$props) $$invalidate(9, onFocus = $$props.onFocus); 3753 if ('onBlur' in $$props) $$invali
3753date(10, onBlur = $$props.onBlur); 3754 if ('password' in $$props) $$invalidate(11, password = $$props.password); 3755 }; 3756 3757 $$self.$$.update = () => { 3758 if ($$self.$$.dirty & /*showPassword*/ 4096) { 3759 $$invalidate(14, passwordInputType = showPassword ? "text" : "password"); 3760 } 3761 3762 if ($$self.$$.dirty & /*isMainPassword*/ 32768) { 3763 $$invalidate(13, inputId = `zephr-form-${isMainPassword ? 'password' : 'confirm-password'}`); 3764 } 3765 }; 3766 3767 return [ 3768 disabled, 3769 label, 3770 placeholder, 3771 showLabel, 3772 hideLabel, 3773 error, 3774 onChange, 3775 autocomplete, 3776 isPaymentForm, 3777 onFocus, 3778 onBlur, 3779 password, 3780 showPassword, 3781 inputId, 3782 passwordInputType, 3783 isMainPassword, 3784 func, 3785 change_handler 3786 ]; 3787 } 3788 3789 class PasswordInput extends SvelteComponent { 3790 constructor(options) { 3791 super(); 3792 3793 init(this, options, instance$13, create_fragment$15, safe_not_equal, { 3794 disabled: 0, 3795 label: 1, 3796 placeholder: 2, 3797 isMainPassword: 15, 3798 showLabel: 3, 3799 hideLabel: 4, 3800 error: 5, 3801 onChange: 6, 3802 autocomplete: 7, 3803 isPaymentForm: 8, 3804 onFocus: 9, 3805 onBlur: 10, 3806 password: 11 3807 }); 3808 } 3809 } 3810 3811 function setCustomFontSize(element, size) { 3812 if (size && size !== "lg" && size !== "sm" && size !== "xs") { 3813 element.style.fontSize = size.replace("x", "em"); 3814 } 3815 else { 3816 element.style.fontSize = ""; 3817 } 3818 } 3819 function getTransform(scale, translateX, translateY, rotate, flip, translateTimes = 1, translateUnit = "", rotateUnit = "") { 3820 let flipX = 1; 3821 let flipY = 1; 3822 if (flip) { 3823 if (flip == "horizontal") { 3824 flipX = -1; 3825 } 3826 else if (flip == "vertical") { 3827 flipY = -1; 3828 } 3829 else { 3830 flipX = flipY = -1; 3831 } 3832 } 3833 if (typeof scale === "string") { 3834 scale = parseFloat(scale); 3835 } 3836 if (typeof translateX === "string") { 3837 translateX = parseFloat(translateX); 3838 } 3839 if (typeof translateY === "string") { 3840 translateY = parseFloat(translateY); 3841 } 3842 const x = `${translateX * translateTimes}${translateUnit}`; 3843 const y = `${translateY * translateTimes}${translateUnit}`; 3844 let output = `translate(${x},${y}) scale(${flipX * scale},${flipY * scale})`; 3845 if (rotate) { 3846 output += ` rotate(${rotate}${rotateUnit})`; 3847 } 3848 return output; 3849 } 3850 3851 /* node_modules/svelte-fa/dist/fa.svelte generated by Svelte v4.2.12 */ 3852 3853 function create_if_block$H(ctx) { 3854 let svg; 3855 let g1; 3856 let g0; 3857 let g1_transform_value; 3858 let g1_transform_origin_value; 3859 let svg_class_value; 3860 let svg_viewBox_value; 3861 3862 function select_block_type(ctx, dirty) { 3863 if (typeof /*i*/ ctx[16][4] == "string") return create_if_block_1$v; 3864 return create_else_block$a; 3865 } 3866 3867 let current_block_type = select_block_type(ctx); 3868 let if_block = current_block_type(ctx); 3869 3870 return { 3871 c() { 3872 svg = svg_element("svg"); 3873 g1 = svg_element("g"); 3874 g0 = svg_element("g"); 3875 if_block.c(); 3876 attr(g0, "transform", /*transform*/ ctx[15]); 3877 attr(g1, "transform", g1_transform_value = "translate(" + /*i*/ ctx[16][0] / 2 + " " + /*i*/ ctx[16][1] / 2 + ")"); 3878 attr(g1, "transform-origin", g1_transform_origin_value = "" + (/*i*/ ctx[16][0] / 4 + " 0")); 3879 attr(svg, "id", /*id*/ ctx[1]); 3880 attr(svg, "class", svg_class_value = "svelte-fa svelte-fa-base " + /*clazz*/ ctx[0] + " svelte-f5ydbn"); 3881 attr(svg, "style", /*style*/ ctx[2]); 3882 attr(svg, "viewBox", svg_viewBox_value = "0 0 " + /*i*/ ctx[16][0] + " " + /*i*/ ctx[16][1]); 3883 attr(svg, "aria-hidden", "true"); 3884 attr(svg, "role", "img"); 3885 attr(svg, "xmlns", "http://www.w3.org/2000/svg"); 3886 toggle_class(svg, "pulse", /*pulse*/ ctx[8]); 3887 toggle_class(svg, "svelte-fa-size-lg", /*size*/ ctx[3] === "lg"); 3888 toggle_class(svg, "svelte-fa-size-sm", /*size*/ ctx[3] === "sm"); 3889 toggle_class(svg, "svelte-fa-size-xs", /*size*/ ctx[3] === "xs"); 3890 toggle_class(svg, "svelte-fa-fw", /*fw*/ ctx[5]); 3891 toggle_class(svg, "svelte-fa-pull-left", /*pull*/ ctx[6] === "left"); 3892 toggle_class(svg, "svelte-fa-pull-right", /*pull*/ ctx[6] === "right"); 3893 toggle_class(svg, "spin", /*spin*/ ctx[7]); 3894 }, 3895 m(target, anchor) { 3896 insert(target, svg, anchor); 3897 append(svg, g1); 3898 append(g1, g0); 3899 if_block.m(g0, null); 3900 /*svg_binding*/ ctx[23](svg); 3901 }, 3902 p(ctx, dirty) { 3903 if (current_block_type === (current_block_type = select_block_type(ctx)) && if_block) { 3904 if_block.p(ctx, dirty); 3905 } else { 3906 if_block.d(1); 3907 if_block = current_block_type(ctx); 3908 3909 if (if_block) { 3910 if_block.c(); 3911 if_block.m(g0, null); 3912 } 3913 } 3914
3915 if (dirty & /*transform*/ 32768) { 3916 attr(g0, "transform", /*transform*/ ctx[15]); 3917 } 3918 3919 if (dirty & /*i*/ 65536 && g1_transform_value !== (g1_transform_value = "translate(" + /*i*/ ctx[16][0] / 2 + " " + /*i*/ ctx[16][1] / 2 + ")")) { 3920 attr(g1, "transform", g1_transform_value); 3921 } 3922 3923 if (dirty & /*i*/ 65536 && g1_transform_origin_value !== (g1_transform_origin_value = "" + (/*i*/ ctx[16][0] / 4 + " 0"))) { 3924 attr(g1, "transform-origin", g1_transform_origin_value); 3925 } 3926 3927 if (dirty & /*id*/ 2) { 3928 attr(svg, "id", /*id*/ ctx[1]); 3929 } 3930 3931 if (dirty & /*clazz*/ 1 && svg_class_value !== (svg_class_value = "svelte-fa svelte-fa-base " + /*clazz*/ ctx[0] + " svelte-f5ydbn")) { 3932 attr(svg, "class", svg_class_value); 3933 } 3934 3935 if (dirty & /*style*/ 4) { 3936 attr(svg, "style", /*style*/ ctx[2]); 3937 } 3938 3939 if (dirty & /*i*/ 65536 && svg_viewBox_value !== (svg_viewBox_value = "0 0 " + /*i*/ ctx[16][0] + " " + /*i*/ ctx[16][1])) { 3940 attr(svg, "viewBox", svg_viewBox_value); 3941 } 3942 3943 if (dirty & /*clazz, pulse*/ 257) { 3944 toggle_class(svg, "pulse", /*pulse*/ ctx[8]); 3945 } 3946 3947 if (dirty & /*clazz, size*/ 9) { 3948 toggle_class(svg, "svelte-fa-size-lg", /*size*/ ctx[3] === "lg"); 3949 } 3950 3951 if (dirty & /*clazz, size*/ 9) { 3952 toggle_class(svg, "svelte-fa-size-sm", /*size*/ ctx[3] === "sm"); 3953 } 3954 3955 if (dirty & /*clazz, size*/ 9) { 3956 toggle_class(svg, "svelte-fa-size-xs", /*size*/ ctx[3] === "xs"); 3957 } 3958 3959 if (dirty & /*clazz, fw*/ 33) { 3960 toggle_class(svg, "svelte-fa-fw", /*fw*/ ctx[5]); 3961 } 3962 3963 if (dirty & /*clazz, pull*/ 65) { 3964 toggle_class(svg, "svelte-fa-pull-left", /*pull*/ ctx[6] === "left"); 3965 } 3966 3967 if (dirty & /*clazz, pull*/ 65) { 3968 toggle_class(svg, "svelte-fa-pull-right", /*pull*/ ctx[6] === "right"); 3969 } 3970 3971 if (dirty & /*clazz, spin*/ 129) { 3972 toggle_class(svg, "spin", /*spin*/ ctx[7]); 3973 } 3974 }, 3975 d(detaching) { 3976 if (detaching) { 3977 detach(svg); 3978 } 3979 3980 if_block.d(); 3981 /*svg_binding*/ ctx[23](null); 3982 } 3983 }; 3984 } 3985 3986 // (61:8) {:else} 3987 function create_else_block$a(ctx) { 3988 let path0; 3989 let path0_d_value; 3990 let path0_fill_value; 3991 let path0_fill_opacity_value; 3992 let path0_transform_value; 3993 let path1; 3994 let path1_d_value; 3995 let path1_fill_value; 3996 let path1_fill_opacity_value; 3997 let path1_transform_value; 3998 3999 return { 4000 c() { 4001 path0 = svg_element("path"); 4002 path1 = svg_element("path"); 4003 attr(path0, "d", path0_d_value = /*i*/ ctx[16][4][0]); 4004 attr(path0, "fill", path0_fill_value = /*secondaryColor*/ ctx[10] || /*color*/ ctx[4] || "currentColor"); 4005 4006 attr(path0, "fill-opacity", path0_fill_opacity_value = /*swapOpacity*/ ctx[13] != false 4007 ? /*primaryOpacity*/ ctx[11] 4008 : /*secondaryOpacity*/ ctx[12]); 4009 4010 attr(path0, "transform", path0_transform_value = "translate(" + /*i*/ ctx[16][0] / -2 + " " + /*i*/ ctx[16][1] / -2 + ")"); 4011 attr(path1, "d", path1_d_value = /*i*/ ctx[16][4][1]); 4012 attr(path1, "fill", path1_fill_value = /*primaryColor*/ ctx[9] || /*color*/ ctx[4] || "currentColor"); 4013 4014 attr(path1, "fill-opacity", path1_fill_opacity_value = /*swapOpacity*/ ctx[13] != false 4015 ? /*secondaryOpacity*/ ctx[12] 4016 : /*primaryOpacity*/ ctx[11]); 4017 4018 attr(path1, "transform", path1_transform_value = "translate(" + /*i*/ ctx[16][0] / -2 + " " + /*i*/ ctx[16][1] / -2 + ")"); 4019 }, 4020 m(target, anchor) { 4021 insert(target, path0, anchor); 4022 insert(target, path1, anchor); 4023 }, 4024 p(ctx, dirty) { 4025 if (dirty & /*i*/ 65536 && path0_d_value !== (path0_d_value = /*i*/ ctx[16][4][0])) { 4026 attr(path0, "d", path0_d_value); 4027 } 4028 4029 if (dirty & /*secondaryColor, color*/ 1040 && path0_fill_value !== (path0_fill_value = /*secondaryColor*/ ctx[10] || /*color*/ ctx[4] || "currentColor")) { 4030 attr(path0, "fill", path0_fill_value); 4031 } 4032 4033 if (dirty & /*swapOpacity, primaryOpacity, secondaryOpacity*/ 14336 && path0_fill_opacity_value !== (path0_fill_opacity_value = /*swapOpacity*/ ctx[13] != false 4034 ? /*primaryOpacity*/ ctx[11] 4035 : /*secondaryOpacity*/ ctx[12])) { 4036 attr(path0, "fill-opacity", path0_fill_opacity_value); 4037 } 4038
4039 if (dirty & /*i*/ 65536 && path0_transform_value !== (path0_transform_value = "translate(" + /*i*/ ctx[16][0] / -2 + " " + /*i*/ ctx[16][1] / -2 + ")")) { 4040 attr(path0, "transform", path0_transform_value); 4041 } 4042 4043 if (dirty & /*i*/ 65536 && path1_d_value !== (path1_d_value = /*i*/ ctx[16][4][1])) { 4044 attr(path1, "d", path1_d_value); 4045 } 4046 4047 if (dirty & /*primaryColor, color*/ 528 && path1_fill_value !== (path1_fill_value = /*primaryColor*/ ctx[9] || /*color*/ ctx[4] || "currentColor")) { 4048 attr(path1, "fill", path1_fill_value); 4049 } 4050 4051 if (dirty & /*swapOpacity, secondaryOpacity, primaryOpacity*/ 14336 && path1_fill_opacity_value !== (path1_fill_opacity_value = /*swapOpacity*/ ctx[13] != false 4052 ? /*secondaryOpacity*/ ctx[12] 4053 : /*primaryOpacity*/ ctx[11])) { 4054 attr(path1, "fill-opacity", path1_fill_opacity_value); 4055 } 4056 4057 if (dirty & /*i*/ 65536 && path1_transform_value !== (path1_transform_value = "translate(" + /*i*/ ctx[16][0] / -2 + " " + /*i*/ ctx[16][1] / -2 + ")")) { 4058 attr(path1, "transform", path1_transform_value); 4059 } 4060 }, 4061 d(detaching) { 4062 if (detaching) { 4063 detach(path0); 4064 detach(path1); 4065 } 4066 } 4067 }; 4068 } 4069 4070 // (55:8) {#if typeof i[4] == "string"} 4071 function create_if_block_1$v(ctx) { 4072 let path; 4073 let path_d_value; 4074 let path_fill_value; 4075 let path_transform_value; 4076 4077 return { 4078 c() { 4079 path = svg_element("path"); 4080 attr(path, "d", path_d_value = /*i*/ ctx[16][4]); 4081 attr(path, "fill", path_fill_value = /*color*/ ctx[4] || /*primaryColor*/ ctx[9] || "currentColor"); 4082 attr(path, "transform", path_transform_value = "translate(" + /*i*/ ctx[16][0] / -2 + " " + /*i*/ ctx[16][1] / -2 + ")"); 4083 }, 4084 m(target, anchor) { 4085 insert(target, path, anchor); 4086 }, 4087 p(ctx, dirty) { 4088 if (dirty & /*i*/ 65536 && path_d_value !== (path_d_value = /*i*/ ctx[16][4])) { 4089 attr(path, "d", path_d_value); 4090 } 4091 4092 if (dirty & /*color, primaryColor*/ 528 && path_fill_value !== (path_fill_value = /*color*/ ctx[4] || /*primaryColor*/ ctx[9] || "currentColor")) { 4093 attr(path, "fill", path_fill_value); 4094 } 4095 4096 if (dirty & /*i*/ 65536 && path_transform_value !== (path_transform_value = "translate(" + /*i*/ ctx[16][0] / -2 + " " + /*i*/ ctx[16][1] / -2 + ")")) { 4097 attr(path, "transform", path_transform_value); 4098 } 4099 }, 4100 d(detaching) { 4101 if (detaching) { 4102 detach(path); 4103 } 4104 } 4105 }; 4106 } 4107 4108 function create_fragment$14(ctx) { 4109 let if_block_anchor; 4110 let if_block = /*i*/ ctx[16][4] && create_if_block$H(ctx); 4111 4112 return { 4113 c() { 4114 if (if_block) if_block.c(); 4115 if_block_anchor = empty(); 4116 }, 4117 m(target, anchor) { 4118 if (if_block) if_block.m(target, anchor); 4119 insert(target, if_block_anchor, anchor); 4120 }, 4121 p(ctx, [dirty]) { 4122 if (/*i*/ ctx[16][4]) { 4123 if (if_block) { 4124 if_block.p(ctx, dirty); 4125 } else { 4126 if_block = create_if_block$H(ctx); 4127 if_block.c(); 4128 if_block.m(if_block_anchor.parentNode, if_block_anchor); 4129 } 4130 } else if (if_block) { 4131 if_block.d(1); 4132 if_block = null; 4133 } 4134 }, 4135 i: noop, 4136 o: noop, 4137 d(detaching) { 4138 if (detaching) { 4139 detach(if_block_anchor); 4140 } 4141 4142 if (if_block) if_block.d(detaching); 4143 } 4144 }; 4145 } 4146 4147 function instance$12($$self, $$props, $$invalidate) { 4148 let i; 4149 let transform; 4150 let { class: clazz = void 0 } = $$props; 4151 let { id = void 0 } = $$props; 4152 let { style = void 0 } = $$props; 4153 let { icon } = $$props; 4154 let { size = void 0 } = $$props; 4155 let { color = void 0 } = $$props; 4156 let { fw = false } = $$props; 4157 let { pull = void 0 } = $$props; 4158 let { scale = 1 } = $$props; 4159 let { translateX = 0 } = $$props; 4160 let { translateY = 0 } = $$props; 4161 let { rotate = void 0 } = $$props; 4162 let { flip = void 0 } = $$props; 4163 let { spin = false } = $$props; 4164 let { pulse = false } = $$props; 4165 let { primaryColor = "" } = $$props; 4166 let { secondaryColor = "" } = $$props; 4167 let { primaryOpacity = 1 } = $$props; 4168 let { secondaryOpacity = 0.4 } = $$props; 4169 let { swapOpacity = false } = $$props; 4170 let svgElement; 4171 4172 function svg_binding($$value) { 4173 binding_callbacks[$$value ? 'unshift' : 'push'](() => { 4174 svgElement = $$value;
4175 $$invalidate(14, svgElement); 4176 }); 4177 } 4178 4179 $$self.$$set = $$props => { 4180 if ('class' in $$props) $$invalidate(0, clazz = $$props.class); 4181 if ('id' in $$props) $$invalidate(1, id = $$props.id); 4182 if ('style' in $$props) $$invalidate(2, style = $$props.style); 4183 if ('icon' in $$props) $$invalidate(17, icon = $$props.icon); 4184 if ('size' in $$props) $$invalidate(3, size = $$props.size); 4185 if ('color' in $$props) $$invalidate(4, color = $$props.color); 4186 if ('fw' in $$props) $$invalidate(5, fw = $$props.fw); 4187 if ('pull' in $$props) $$invalidate(6, pull = $$props.pull); 4188 if ('scale' in $$props) $$invalidate(18, scale = $$props.scale); 4189 if ('translateX' in $$props) $$invalidate(19, translateX = $$props.translateX); 4190 if ('translateY' in $$props) $$invalidate(20, translateY = $$props.translateY); 4191 if ('rotate' in $$props) $$invalidate(21, rotate = $$props.rotate); 4192 if ('flip' in $$props) $$invalidate(22, flip = $$props.flip); 4193 if ('spin' in $$props) $$invalidate(7, spin = $$props.spin); 4194 if ('pulse' in $$props) $$invali
4194date(8, pulse = $$props.pulse); 4195 if ('primaryColor' in $$props) $$invalidate(9, primaryColor = $$props.primaryColor); 4196 if ('secondaryColor' in $$props) $$invalidate(10, secondaryColor = $$props.secondaryColor); 4197 if ('primaryOpacity' in $$props) $$invalidate(11, primaryOpacity = $$props.primaryOpacity); 4198 if ('secondaryOpacity' in $$props) $$invalidate(12, secondaryOpacity = $$props.secondaryOpacity); 4199 if ('swapOpacity' in $$props) $$invalidate(13, swapOpacity = $$props.swapOpacity); 4200 }; 4201 4202 $$self.$$.update = () => { 4203 if ($$self.$$.dirty & /*svgElement, size*/ 16392) { 4204 svgElement && size && setCustomFontSize(svgElement, size); 4205 } 4206 4207 if ($$self.$$.dirty & /*icon*/ 131072) { 4208 $$invalidate(16, i = icon && icon.icon || [0, 0, "", [], ""]); 4209 } 4210 4211 if ($$self.$$.dirty & /*scale, translateX, translateY, rotate, flip*/ 8126464) { 4212 $$invalidate(15, transform = getTransform(scale, translateX, translateY, rotate, flip, 512)); 4213 } 4214 }; 4215 4216 return [ 4217 clazz, 4218 id, 4219 style, 4220 size, 4221 color, 4222 fw, 4223 pull, 4224 spin, 4225 pulse, 4226 primaryColor, 4227 secondaryColor, 4228 primaryOpacity, 4229 secondaryOpacity, 4230 swapOpacity, 4231 svgElement, 4232 transform, 4233 i, 4234 icon, 4235 scale, 4236 translateX, 4237 translateY, 4238 rotate, 4239 flip, 4240 svg_binding 4241 ]; 4242 } 4243 4244 class Fa extends SvelteComponent { 4245 constructor(options) { 4246 super(); 4247 4248 init(this, options, instance$12, create_fragment$14, safe_not_equal, { 4249 class: 0, 4250 id: 1, 4251 style: 2, 4252 icon: 17, 4253 size: 3, 4254 color: 4, 4255 fw: 5, 4256 pull: 6, 4257 scale: 18, 4258 translateX: 19, 4259 translateY: 20, 4260 rotate: 21, 4261 flip: 22, 4262 spin: 7, 4263 pulse: 8, 4264 primaryColor: 9, 4265 secondaryColor: 10, 4266 primaryOpacity: 11, 4267 secondaryOpacity: 12, 4268 swapOpacity: 13 4269 }); 4270 } 4271 } 4272 4273 var faCircleCheck = { 4274 prefix: 'fas', 4275 iconName: 'circle-check', 4276 icon: [512, 512, [61533, "check-circle"], "f058", "M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"] 4277 }; 4278 var faCheckCircle = faCircleCheck; 4279 var faSpinner = { 4280 prefix: 'fas', 4281 iconName: 'spinner', 4282 icon: [512, 512, [], "f110", "M304 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm0 416a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM48 304a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm464-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM142.9 437A48 48 0 1 0 75 369.1 48 48 0 1 0 142.9 437zm0-294.2A48 48 0 1 0 75 75a48 48 0 1 0 67.9 67.9zM369.1 437A48 48 0 1 0 437 369.1 48 48 0 1 0 369.1 437z"] 4283 }; 4284 var faCheck = { 4285 prefix: 'fas', 4286 iconName: 'check', 4287 icon: [448, 512, [10003, 10004], "f00c", "M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"] 4288 }; 4289 var faCircleXmark = { 4290 prefix: 'fas', 4291 iconName: 'circle-xmark', 4292 icon: [512, 512, [61532, "times-circle", "xmark-circle"], "f057", "M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z"] 4293 }; 4294 var faTimesCircle = faCircleXmark; 4295 4296 /* src/components/elements/password/PasswordMatchIndicator.svelte generated by Svelte v4.2.12 */ 4297 4298 function create_fragment$13(ctx) { 4299 let div1; 4300 let ul; 4301 let li; 4302 let div0; 4303 let fa; 4304 let t0; 4305 let t1; 4306 let current; 4307 4308 fa = new Fa({ 4309 props: { 4310 icon: faCheckCircle, 4311 color: /*password*/ ctx[0] && /*password*/ ctx[0] === /*confirmPassword*/ ctx[1] 4312 ? validColor$1 4313 : invalidColor$1 4314 } 4315 }); 4316 4317 return { 4318 c() { 4319 div1 = element("div"); 4320 ul = element("ul"); 4321 li = element("li"); 4322 div0 = element("div"); 4323 create_component(fa.$$.fragment); 4324 t0 = space(); 4325 t1 = text(/*passwordsMatchText*/ ctx[2]); 4326 attr(div0, "class", "zephr-form-password-requirement-icon svelte-tsrdk3"); 4327 toggle_class(div0, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[3]); 4328 attr(li, "class", "zephr-form-password-requirement svelte-tsrdk3"); 4329 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[3]); 4330 attr(ul, "class", "svelte-tsrdk3"); 4331 attr(div1, "class", "zephr-form-flex-container zephr-form-password-match svelte-tsrdk3"); 4332 toggle_class(div1, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[3]); 4333 toggle_class(div1, "zephr-payment-form-password-match", /*isPaymentForm*/ ctx[3]); 4334 }, 4335 m(target, anchor) { 4336 insert(target, div1, anchor); 4337 append(div1, ul); 4338 append(ul, li); 4339 append(li, div0); 4340 mount_component(fa, div0, null); 4341 append(li, t0); 4342 append(li, t1); 4343 current = true; 4344 }, 4345 p(ctx, [dirty]) { 4346 const fa_changes = {}; 4347
4348 if (dirty & /*password, confirmPassword*/ 3) fa_changes.color = /*password*/ ctx[0] && /*password*/ ctx[0] === /*confirmPassword*/ ctx[1] 4349 ? validColor$1 4350 : invalidColor$1; 4351 4352 fa.$set(fa_changes); 4353 4354 if (!current || dirty & /*isPaymentForm*/ 8) { 4355 toggle_class(div0, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[3]); 4356 } 4357 4358 if (!current || dirty & /*passwordsMatchText*/ 4) set_data(t1, /*passwordsMatchText*/ ctx[2]); 4359 4360 if (!current || dirty & /*isPaymentForm*/ 8) { 4361 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[3]); 4362 } 4363 4364 if (!current || dirty & /*isPaymentForm*/ 8) { 4365 toggle_class(div1, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[3]); 4366 } 4367 4368 if (!current || dirty & /*isPaymentForm*/ 8) { 4369 toggle_class(div1, "zephr-payment-form-password-match", /*isPaymentForm*/ ctx[3]); 4370 } 4371 }, 4372 i(local) { 4373 if (current) return; 4374 transition_in(fa.$$.fragment, local); 4375 current = true; 4376 }, 4377 o(local) { 4378 transition_out(fa.$$.fragment, local); 4379 current = false; 4380 }, 4381 d(detaching) { 4382 if (detaching) { 4383 detach(div1); 4384 } 4385 4386 destroy_component(fa); 4387 } 4388 }; 4389 } 4390 4391 const validColor$1 = "var(--zf-password-valid-color)"; 4392 const invalidColor$1 = "var(--zf-password-invalid-color)"; 4393 4394 function instance$11($$self, $$props, $$invalidate) { 4395 let { password } = $$props; 4396 let { confirmPassword } = $$props; 4397 let { passwordsMatchText } = $$props; 4398 let { isPaymentForm = false } = $$props; 4399 4400 $$self.$$set = $$props => {
4401 if ('password' in $$props) $$invalidate(0, password = $$props.password); 4402 if ('confirmPassword' in $$props) $$invalidate(1, confirmPassword = $$props.confirmPassword); 4403 if ('passwordsMatchText' in $$props) $$invalidate(2, passwordsMatchText = $$props.passwordsMatchText); 4404 if ('isPaymentForm' in $$props) $$invalidate(3, isPaymentForm = $$props.isPaymentForm); 4405 }; 4406 4407 return [password, confirmPassword, passwordsMatchText, isPaymentForm]; 4408 } 4409 4410 class PasswordMatchIndicator extends SvelteComponent { 4411 constructor(options) { 4412 super(); 4413 4414 init(this, options, instance$11, create_fragment$13, safe_not_equal, { 4415 password: 0, 4416 confirmPassword: 1, 4417 passwordsMatchText: 2, 4418 isPaymentForm: 3 4419 }); 4420 } 4421 } 4422 4423 /* src/components/elements/password/PasswordValidator.svelte generated by Svelte v4.2.12 */ 4424 4425 function get_each_context$f(ctx, list, i) { 4426 const child_ctx = ctx.slice(); 4427 child_ctx[12] = list[i]; 4428 child_ctx[14] = i; 4429 return child_ctx; 4430 } 4431 4432 // (43:2) {#each Array(maxScore) as _, i} 4433 function create_each_block$f(ctx) { 4434 let div; 4435 4436 return { 4437 c() { 4438 div = element("div"); 4439 attr(div, "class", "zephr-form-password-bar svelte-1bpbne4"); 4440 4441 set_style(div, "background-color", /*score*/ ctx[3] > /*i*/ ctx[14] 4442 ? validColor 4443 : invalidColor); 4444 4445 toggle_class(div, "zephr-payment-form-password-bar", /*isPaymentForm*/ ctx[2]); 4446 }, 4447 m(target, anchor) { 4448 insert(target, div, anchor); 4449 }, 4450 p(ctx, dirty) { 4451 if (dirty & /*score*/ 8) { 4452 set_style(div, "background-color", /*score*/ ctx[3] > /*i*/ ctx[14] 4453 ? validColor 4454 : invalidColor); 4455 } 4456 4457 if (dirty & /*isPaymentForm*/ 4) { 4458 toggle_class(div, "zephr-payment-form-password-bar", /*isPaymentForm*/ ctx[2]); 4459 } 4460 }, 4461 d(detaching) { 4462 if (detaching) { 4463 detach(div); 4464 } 4465 } 4466 }; 4467 } 4468 4469 // (57:4) {#if passwordRequirements.minLength} 4470 function create_if_block_3$e(ctx) { 4471 let li; 4472 let div; 4473 let fa; 4474 let t0; 4475 let t1_value = /*passwordValidationTexts*/ ctx[1].minLengthValidationText + ""; 4476 let t1; 4477 let current; 4478 4479 fa = new Fa({ 4480 props: { 4481 icon: faCheckCircle, 4482 color: /*isLong*/ ctx[4] ? validColor : invalidColor 4483 } 4484 }); 4485 4486 return { 4487 c() { 4488 li = element("li"); 4489 div = element("div"); 4490 create_component(fa.$$.fragment); 4491 t0 = space(); 4492 t1 = text(t1_value); 4493 attr(div, "class", "zephr-form-password-requirement-icon svelte-1bpbne4"); 4494 toggle_class(div, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[2]); 4495 attr(li, "class", "zephr-form-password-requirement svelte-1bpbne4"); 4496 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[2]); 4497 }, 4498 m(target, anchor) { 4499 insert(target, li, anchor); 4500 append(li, div); 4501 mount_component(fa, div, null); 4502 append(li, t0); 4503 append(li, t1); 4504 current = true; 4505 }, 4506 p(ctx, dirty) { 4507 const fa_changes = {}; 4508 if (dirty & /*isLong*/ 16) fa_changes.color = /*isLong*/ ctx[4] ? validColor : invalidColor; 4509 fa.$set(fa_changes); 4510 4511 if (!current || dirty & /*isPaymentForm*/ 4) { 4512 toggle_class(div, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[2]); 4513 } 4514 4515 if ((!current || dirty & /*passwordValidationTexts*/ 2) && t1_value !== (t1_value = /*passwordValidationTexts*/ ctx[1].minLengthValidationText + "")) set_data(t1, t1_value); 4516 4517 if (!current || dirty & /*isPaymentForm*/ 4) { 4518 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[2]); 4519 } 4520 }, 4521 i(local) { 4522 if (current) return; 4523 transition_in(fa.$$.fragment, local); 4524 current = true; 4525 }, 4526 o(local) { 4527 transition_out(fa.$$.fragment, local); 4528 current = false; 4529 }, 4530 d(detaching) { 4531 if (detaching) { 4532 detach(li); 4533 } 4534 4535 destroy_component(fa); 4536 } 4537 }; 4538 } 4539 4540 // (75:4) {#if passwordRequirements.requireUppercase} 4541 function create_if_block_2$j(ctx) { 4542 let li; 4543 let div; 4544 let fa; 4545 let t0; 4546 let t1_value = /*passwordValidationTexts*/ ctx[1].uppercaseValidationText + ""; 4547 let t1; 4548 let current; 4549 4550 fa = new Fa({ 4551 props: { 4552 icon: faCheckCircle, 4553 color: /*hasUppercaseLetter*/ ctx[7] 4554 ? validColor 4555 : invalidColor 4556 } 4557 }); 4558 4559 return { 4560 c() { 4561 li = element("li"); 4562 div = element("div"); 4563 create_component(fa.$$.fragment); 4564 t0 = space(); 4565 t1 = text(t1_value); 4566 attr(div, "class", "zephr-form-password-requirement-icon svelte-1bpbne4"); 4567 toggle_class(div, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[2]); 4568 attr(li, "class", "zephr-form-password-requirement svelte-1bpbne4"); 4569 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[2]); 4570 }, 4571 m(target, anchor) { 4572 insert(target, li, anchor); 4573 append(li, div); 4574 mount_component(fa, div, null); 4575 append(li, t0); 4576 append(li, t1); 4577 current = true; 4578 }, 4579 p(ctx, dirty) { 4580 const fa_changes = {}; 4581
4582 if (dirty & /*hasUppercaseLetter*/ 128) fa_changes.color = /*hasUppercaseLetter*/ ctx[7] 4583 ? validColor 4584 : invalidColor; 4585 4586 fa.$set(fa_changes); 4587 4588 if (!current || dirty & /*isPaymentForm*/ 4) { 4589 toggle_class(div, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[2]); 4590 } 4591 4592 if ((!current || dirty & /*passwordValidationTexts*/ 2) && t1_value !== (t1_value = /*passwordValidationTexts*/ ctx[1].uppercaseValidationText + "")) set_data(t1, t1_value); 4593 4594 if (!current || dirty & /*isPaymentForm*/ 4) { 4595 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[2]); 4596 } 4597 }, 4598 i(local) { 4599 if (current) return; 4600 transition_in(fa.$$.fragment, local); 4601 current = true; 4602 }, 4603 o(local) { 4604 transition_out(fa.$$.fragment, local); 4605 current = false; 4606 }, 4607 d(detaching) { 4608 if (detaching) { 4609 detach(li); 4610 } 4611 4612 destroy_component(fa); 4613 } 4614 }; 4615 } 4616 4617 // (93:4) {#if passwordRequirements.requireNumbers} 4618 function create_if_block_1$u(ctx) { 4619 let li; 4620 let div; 4621 let fa; 4622 let t0; 4623 let t1_value = /*passwordValidationTexts*/ ctx[1].numberValidationText + ""; 4624 let t1; 4625 let current; 4626 4627 fa = new Fa({ 4628 props: { 4629 icon: faCheckCircle, 4630 color: /*hasNumber*/ ctx[6] ? validColor : invalidColor 4631 } 4632 }); 4633 4634 return { 4635 c() { 4636 li = element("li"); 4637 div = element("div"); 4638 create_component(fa.$$.fragment); 4639 t0 = space(); 4640 t1 = text(t1_value); 4641 attr(div, "class", "zephr-form-password-requirement-icon svelte-1bpbne4"); 4642 toggle_class(div, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[2]); 4643 attr(li, "class", "zephr-form-password-requirement svelte-1bpbne4"); 4644 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[2]); 4645 }, 4646 m(target, anchor) { 4647 insert(target, li, anchor); 4648 append(li, div); 4649 mount_component(fa, div, null); 4650 append(li, t0); 4651 append(li, t1); 4652 current = true; 4653 }, 4654 p(ctx, dirty) { 4655 const fa_changes = {}; 4656 if (dirty & /*hasNumber*/ 64) fa_changes.color = /*hasNumber*/ ctx[6] ? validColor : invalidColor; 4657 fa.$set(fa_changes); 4658 4659 if (!current || dirty & /*isPaymentForm*/ 4) { 4660 toggle_class(div, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[2]); 4661 } 4662 4663 if ((!current || dirty & /*passwordValidationTexts*/ 2) && t1_value !== (t1_value = /*passwordValidationTexts*/ ctx[1].numberValidationText + "")) set_data(t1, t1_value); 4664 4665 if (!current || dirty & /*isPaymentForm*/ 4) { 4666 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[2]); 4667 } 4668 }, 4669 i(local) { 4670 if (current) return; 4671 transition_in(fa.$$.fragment, local); 4672 current = true; 4673 }, 4674 o(local) { 4675 transition_out(fa.$$.fragment, local); 4676 current = false; 4677 }, 4678 d(detaching) { 4679 if (detaching) { 4680 detach(li); 4681 } 4682 4683 destroy_component(fa); 4684 } 4685 }; 4686 } 4687 4688 // (111:4) {#if passwordRequirements.requireSpecialCharacters} 4689 function create_if_block$G(ctx) { 4690 let li; 4691 let div; 4692 let fa; 4693 let t0; 4694 let t1_value = /*passwordValidationTexts*/ ctx[1].symbolValidationText + ""; 4695 let t1; 4696 let current; 4697 4698 fa = new Fa({ 4699 props: { 4700 icon: faCheckCircle, 4701 color: /*hasSpecialCharacter*/ ctx[5] 4702 ? validColor 4703 : invalidColor 4704 } 4705 }); 4706 4707 return { 4708 c() { 4709 li = element("li"); 4710 div = element("div"); 4711 create_component(fa.$$.fragment); 4712 t0 = space(); 4713 t1 = text(t1_value); 4714 attr(div, "class", "zephr-form-password-requirement-icon svelte-1bpbne4"); 4715 toggle_class(div, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[2]); 4716 attr(li, "class", "zephr-form-password-requirement svelte-1bpbne4"); 4717 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[2]); 4718 }, 4719 m(target, anchor) { 4720 insert(target, li, anchor); 4721 append(li, div); 4722 mount_component(fa, div, null); 4723 append(li, t0); 4724 append(li, t1); 4725 current = true; 4726 }, 4727 p(ctx, dirty) { 4728 const fa_changes = {}; 4729 4730 if (dirty & /*hasSpecialCharacter*/ 32) fa_changes.color = /*hasSpecialCharacter*/ ctx[5] 4731 ? validColor 4732 : invalidColor; 4733 4734 fa.$set(fa_changes); 4735 4736 if (!current || dirty & /*isPaymentForm*/ 4) { 4737 toggle_class(div, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[2]); 4738 } 4739 4740 if ((!current || dirty & /*passwordValidationTexts*/ 2) && t1_value !== (t1_value = /*passwordValidationTexts*/ ctx[1].symbolValidationText
4740+ "")) set_data(t1, t1_value); 4741 4742 if (!current || dirty & /*isPaymentForm*/ 4) { 4743 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[2]); 4744 } 4745 }, 4746 i(local) { 4747 if (current) return; 4748 transition_in(fa.$$.fragment, local); 4749 current = true; 4750 }, 4751 o(local) { 4752 transition_out(fa.$$.fragment, local); 4753 current = false; 4754 }, 4755 d(detaching) { 4756 if (detaching) { 4757 detach(li); 4758 } 4759 4760 destroy_component(fa); 4761 } 4762 }; 4763 } 4764 4765 function create_fragment$12(ctx) { 4766 let div0; 4767 let t0; 4768 let div1; 4769 let ul; 4770 let t1; 4771 let t2; 4772 let t3; 4773 let current; 4774 let each_value = ensure_array_like(Array(/*maxScore*/ ctx[8])); 4775 let each_blocks = []; 4776 4777 for (let i = 0; i < each_value.length; i += 1) { 4778 each_blocks[i] = create_each_block$f(get_each_context$f(ctx, each_value, i)); 4779 } 4780 4781 let if_block0 = /*passwordRequirements*/ ctx[0].minLength && create_if_block_3$e(ctx); 4782 let if_block1 = /*passwordRequirements*/ ctx[0].requireUppercase && create_if_block_2$j(ctx); 4783 let if_block2 = /*passwordRequirements*/ ctx[0].requireNumbers && create_if_block_1$u(ctx); 4784 let if_block3 = /*passwordRequirements*/ ctx[0].requireSpecialCharacters && create_if_block$G(ctx); 4785 4786 return { 4787 c() { 4788 div0 = element("div"); 4789 4790 for (let i = 0; i < each_blocks.length; i += 1) { 4791 each_blocks[i].c(); 4792 } 4793 4794 t0 = space(); 4795 div1 = element("div"); 4796 ul = element("ul"); 4797 if (if_block0) if_block0.c(); 4798 t1 = space(); 4799 if (if_block1) if_block1.c(); 4800 t2 = space(); 4801 if (if_block2) if_block2.c(); 4802 t3 = space(); 4803 if (if_block3) if_block3.c(); 4804 attr(div0, "class", "zephr-form-password-progress svelte-1bpbne4"); 4805 toggle_class(div0, "zephr-payment-form-password-progress", /*isPaymentForm*/ ctx[2]); 4806 attr(ul, "class", "svelte-1bpbne4"); 4807 attr(div1, "class", "zephr-form-flex-container zephr-form-password-requirements svelte-1bpbne4"); 4808 toggle_class(div1, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[2]); 4809 toggle_class(div1, "zephr-payment-form-password-requirements", /*isPaymentForm*/ ctx[2]); 4810 }, 4811 m(target, anchor) { 4812 insert(target, div0, anchor); 4813 4814 for (let i = 0; i < each_blocks.length; i += 1) { 4815 if (each_blocks[i]) { 4816 each_blocks[i].m(div0, null); 4817 } 4818 } 4819 4820 insert(target, t0, anchor); 4821 insert(target, div1, anchor); 4822 append(div1, ul); 4823 if (if_block0) if_block0.m(ul, null); 4824 append(ul, t1); 4825 if (if_block1) if_block1.m(ul, null); 4826 append(ul, t2); 4827 if (if_block2) if_block2.m(ul, null); 4828 append(ul, t3); 4829 if (if_block3) if_block3.m(ul, null); 4830 current = true; 4831 }, 4832 p(ctx, [dirty]) { 4833 if (dirty & /*score, validColor, invalidColor, isPaymentForm*/ 12) { 4834 each_value = ensure_array_like(Array(/*maxScore*/ ctx[8])); 4835 let i; 4836 4837 for (i = 0; i < each_value.length; i += 1) { 4838 const child_ctx = get_each_context$f(ctx, each_value, i); 4839 4840 if (each_blocks[i]) { 4841 each_blocks[i].p(child_ctx, dirty); 4842 } else { 4843 each_blocks[i] = create_each_block$f(child_ctx); 4844 each_blocks[i].c(); 4845 each_blocks[i].m(div0, null); 4846 } 4847 } 4848 4849 for (; i < each_blocks.length; i += 1) { 4850 each_blocks[i].d(1); 4851 } 4852 4853 each_blocks.length = each_value.length; 4854 } 4855 4856 if (!current || dirty & /*isPaymentForm*/ 4) { 4857 toggle_class(div0, "zephr-payment-form-password-progress", /*isPaymentForm*/ ctx[2]); 4858 } 4859 4860 if (/*passwordRequirements*/ ctx[0].minLength) { 4861 if (if_block0) { 4862 if_block0.p(ctx, dirty); 4863 4864 if (dirty & /*passwordRequirements*/ 1) { 4865 transition_in(if_block0, 1); 4866 } 4867 } else { 4868 if_block0 = create_if_block_3$e(ctx); 4869 if_block0.c(); 4870 transition_in(if_block0, 1); 4871 if_block0.m(ul, t1); 4872 } 4873 } else if (if_block0) { 4874 group_outros(); 4875 4876 transition_out(if_block0, 1, 1, () => { 4877 if_block0 = null; 4878 }); 4879 4880 check_outros(); 4881 } 4882 4883 if (/*passwordRequirements*/ ctx[0].requireUppercase) { 4884 if (if_block1) { 4885 if_block1.p(ctx, dirty); 4886 4887 if (dirty & /*passwordRequirements*/ 1) { 4888 transition_in(if_block1, 1); 4889 } 4890 } else { 4891 if_block1 = create_if_block_2$j(ctx); 4892 if_block1.c(); 4893 transition_in(if_block1, 1); 4894 if_block1.m(ul, t2); 4895 } 4896 } else if (if_block1) { 4897 group_outros(); 4898 4899 transition_out(if_block1, 1, 1, () => { 4900 if_block1 = null; 4901 }); 4902 4903 check_outros(); 4904 } 4905 4906 if (/*passwordRequirements*/ ctx[0].requireNumbers) { 4907 if (if_block2) { 4908 if_block2.p(ctx, dirty); 4909
4910 if (dirty & /*passwordRequirements*/ 1) { 4911 transition_in(if_block2, 1); 4912 } 4913 } else { 4914 if_block2 = create_if_block_1$u(ctx); 4915 if_block2.c(); 4916 transition_in(if_block2, 1); 4917 if_block2.m(ul, t3); 4918 } 4919 } else if (if_block2) { 4920 group_outros(); 4921 4922 transition_out(if_block2, 1, 1, () => { 4923 if_block2 = null; 4924 }); 4925 4926 check_outros(); 4927 } 4928 4929 if (/*passwordRequirements*/ ctx[0].requireSpecialCharacters) { 4930 if (if_block3) { 4931 if_block3.p(ctx, dirty); 4932 4933 if (dirty & /*passwordRequirements*/ 1) { 4934 transition_in(if_block3, 1); 4935 } 4936 } else { 4937 if_block3 = create_if_block$G(ctx); 4938 if_block3.c(); 4939 transition_in(if_block3, 1); 4940 if_block3.m(ul, null); 4941 } 4942 } else if (if_block3) { 4943 group_outros(); 4944 4945 transition_out(if_block3, 1, 1, () => { 4946 if_block3 = null; 4947 }); 4948 4949 check_outros(); 4950 } 4951 4952 if (!current || dirty & /*isPaymentForm*/ 4) { 4953 toggle_class(div1, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[2]); 4954 } 4955 4956 if (!current || dirty & /*isPaymentForm*/ 4) { 4957 toggle_class(div1, "zephr-payment-form-password-requirements", /*isPaymentForm*/ ctx[2]); 4958 } 4959 }, 4960 i(local) { 4961 if (current) return; 4962 transition_in(if_block0); 4963 transition_in(if_block1); 4964 transition_in(if_block2); 4965 transition_in(if_block3); 4966 current = true; 4967 }, 4968 o(local) { 4969 transition_out(if_block0); 4970 transition_out(if_block1); 4971 transition_out(if_block2); 4972 transition_out(if_block3); 4973 current = false; 4974 }, 4975 d(detaching) { 4976 if (detaching) { 4977 detach(div0); 4978 detach(t0); 4979 detach(div1); 4980 } 4981 4982 destroy_each(each_blocks, detaching); 4983 if (if_block0) if_block0.d(); 4984 if (if_block1) if_block1.d(); 4985 if (if_block2) if_block2.d(); 4986 if (if_block3) if_block3.d(); 4987 } 4988 }; 4989 } 4990 4991 const validColor = "var(--zf-password-valid-color)"; 4992 const invalidColor = "var(--zf-password-invalid-color)"; 4993 4994 function instance$10($$self, $$props, $$invalidate) { 4995 let hasUppercaseLetter; 4996 let hasNumber; 4997 let hasSpecialCharacter; 4998 let isLong; 4999 let { passwordRequirements } = $$props; 5000 let { passwordValidationTexts } = $$props; 5001 let { isPaymentForm = false } = $$props; 5002 let { onChange } = $$props; 5003 let { password } = $$props; 5004 let { passwordIsValid } = $$props; 5005 let score = 0; 5006 5007 let maxScore = Object.values(passwordRequirements).reduce( 5008 (acc, curr) => { 5009 return acc += curr ? 1 : 0; 5010 }, 5011 0 5012 ); 5013 5014 $$self.$$set = $$props => {
5015 if ('passwordRequirements' in $$props) $$invalidate(0, passwordRequirements = $$props.passwordRequirements); 5016 if ('passwordValidationTexts' in $$props) $$invalidate(1, passwordValidationTexts = $$props.passwordValidationTexts); 5017 if ('isPaymentForm' in $$props) $$invalidate(2, isPaymentForm = $$props.isPaymentForm); 5018 if ('onChange' in $$props) $$invalidate(9, onChange = $$props.onChange); 5019 if ('password' in $$props) $$invalidate(10, password = $$props.password); 5020 if ('passwordIsValid' in $$props) $$invalidate(11, passwordIsValid = $$props.passwordIsValid); 5021 }; 5022 5023 $$self.$$.update = () => { 5024 if ($$self.$$.dirty & /*password*/ 1024) { 5025 $$invalidate(7, hasUppercaseLetter = (/[A-Z]+/).test(password)); 5026 } 5027 5028 if ($$self.$$.dirty & /*password*/ 1024) { 5029 $$invalidate(6, hasNumber = (/[0-9]+/).test(password)); 5030 } 5031 5032 if ($$self.$$.dirty & /*password*/ 1024) { 5033 $$invalidate(5, hasSpecialCharacter = (/[^a-z0-9A-Z]+/).test(password)); 5034 } 5035 5036 if ($$self.$$.dirty & /*password, passwordRequirements*/ 1025) { 5037 $$invalidate(4, isLong = password?.length >= passwordRequirements.minLength); 5038 } 5039 5040 if ($$self.$$.dirty & /*password, passwordRequirements, score, passwordIsValid, onChange*/ 3593) { 5041 { 5042 $$invalidate(3, score = 0); 5043 5044 if ((/[A-Z]+/).test(password) && passwordRequirements.requireUppercase) { 5045 $$invalidate(3, score += 1); 5046 } 5047 5048 if ((/[0-9]+/).test(password) && passwordRequirements.requireNumbers) { 5049 $$invalidate(3, score += 1); 5050 } 5051 5052 if ((/[^a-z0-9A-Z]+/).test(password) && passwordRequirements.requireSpecialCharacters) { 5053 $$invalidate(3, score += 1); 5054 } 5055 5056 if (password?.length >= passwordRequirements.minLength && passwordRequirements.minLength) { 5057 $$invalidate(3, score += 1); 5058 } 5059 5060 score >= maxScore !== passwordIsValid && onChange(score >= maxScore); 5061 } 5062 } 5063 }; 5064 5065 return [ 5066 passwordRequirements, 5067 passwordValidationTexts, 5068 isPaymentForm, 5069 score, 5070 isLong, 5071 hasSpecialCharacter, 5072 hasNumber, 5073 hasUppercaseLetter, 5074 maxScore, 5075 onChange, 5076 password, 5077 passwordIsValid 5078 ]; 5079 } 5080 5081 class PasswordValidator extends SvelteComponent { 5082 constructor(options) { 5083 super(); 5084 5085 init(this, options, instance$10, create_fragment$12, safe_not_equal, { 5086 passwordRequirements: 0, 5087 passwordValidationTexts: 1, 5088 isPaymentForm: 2, 5089 onChange: 9, 5090 password: 10, 5091 passwordIsValid: 11 5092 }); 5093 } 5094 } 5095 5096 /* src/components/elements/password/CreatePassword.svelte generated by Svelte v4.2.12 */ 5097 5098 function create_if_block_3$d(ctx) { 5099 let passwordvalidator; 5100 let current; 5101 5102 passwordvalidator = new PasswordValidator({ 5103 props: { 5104 password: /*password*/ ctx[12], 5105 passwordIsValid: /*passwordIsValid*/ ctx[14], 5106 passwordRequirements: /*passwordRequirements*/ ctx[1], 5107 passwordValidationTexts: /*passwordValidationTexts*/ ctx[16], 5108 isPaymentForm: /*isPaymentForm*/ ctx[3], 5109 onChange: /*onPasswordIsValidChange*/ ctx[10] 5110 } 5111 }); 5112 5113 return { 5114 c() { 5115 create_component(passwordvalidator.$$.fragment); 5116 }, 5117 m(target, anchor) { 5118 mount_component(passwordvalidator, target, anchor); 5119 current = true; 5120 }, 5121 p(ctx, dirty) { 5122 const passwordvalidator_changes = {}; 5123 if (dirty & /*password*/ 4096) passwordvalidator_changes.password = /*password*/ ctx[12]; 5124 if (dirty & /*passwordIsValid*/ 16384) passwordvalidator_changes.passwordIsValid = /*passwordIsValid*/ ctx[14]; 5125 if (dirty & /*passwordRequirements*/ 2) passwordvalidator_changes.passwordRequirements = /*passwordRequirements*/ ctx[1]; 5126 if (dirty & /*isPaymentForm*/ 8) passwordvalidator_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 5127 if (dirty & /*onPasswordIsValidChange*/ 1024) passwordvalidator_changes.onChange = /*onPasswordIsValidChange*/ ctx[10]; 5128 passwordvalidator.$set(passwordvalidator_changes); 5129 }, 5130 i(local) { 5131 if (current) return; 5132 transition_in(passwordvalidator.$$.fragment, local); 5133 current = true; 5134 }, 5135 o(local) { 5136 transition_out(passwordvalidator.$$.fragment, local); 5137 current = false; 5138 }, 5139 d(detaching) { 5140 destroy_component(passwordvalidator, detaching); 5141 } 5142 }; 5143 } 5144 5145 // (58:0) {#if !hideConfirmPassword} 5146 function create_if_block_2$i(ctx) { 5147 let passwordinput; 5148 let current; 5149 5150 passwordinput = new PasswordInput({ 5151 props: { 5152 disabled: /*disabled*/ ctx[11], 5153 password: /*confirmPassword*/ ctx[13], 5154 isMainPassword: false, 5155 label: /*config*/ ctx[0].confirm, 5156 hideLabel: /*config*/ ctx[0].hide, 5157 showLabel: /*config*/ ctx[0].show, 5158 placeholder: /*config*/ ctx[0].confirmPlaceholder, 5159 isPaymentForm: /*isPaymentForm*/ ctx[3], 5160 autocomplete: "new-password", 5161 onChange: /*onConfirmPasswordChange*/ ctx[7], 5162 onFocus: /*onConfirmPasswordFocus*/ ctx[8], 5163 onBlur: /*onConfirmPasswordBlur*/ ctx[9] 5164 } 5165 }); 5166 5167 return { 5168 c() { 5169 create_component(passwordinput.$$.fragment); 5170 }, 5171 m(target, anchor) { 5172 mount_component(passwordinput, target, anchor); 5173 current = true; 5174 }, 5175 p(ctx, dirty) { 5176 const passwordinput_changes = {};
5177 if (dirty & /*disabled*/ 2048) passwordinput_changes.disabled = /*disabled*/ ctx[11]; 5178 if (dirty & /*confirmPassword*/ 8192) passwordinput_changes.password = /*confirmPassword*/ ctx[13]; 5179 if (dirty & /*config*/ 1) passwordinput_changes.label = /*config*/ ctx[0].confirm; 5180 if (dirty & /*config*/ 1) passwordinput_changes.hideLabel = /*config*/ ctx[0].hide; 5181 if (dirty & /*config*/ 1) passwordinput_changes.showLabel = /*config*/ ctx[0].show; 5182 if (dirty & /*config*/ 1) passwordinput_changes.placeholder = /*config*/ ctx[0].confirmPlaceholder; 5183 if (dirty & /*isPaymentForm*/ 8) passwordinput_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 5184 if (dirty & /*onConfirmPasswordChange*/ 128) passwordinput_changes.onChange = /*onConfirmPasswordChange*/ ctx[7]; 5185 if (dirty & /*onConfirmPasswordFocus*/ 256) passwordinput_changes.onFocus = /*onConfirmPasswordFocus*/ ctx[8]; 5186 if (dirty & /*onConfirmPasswordBlur*/ 512) passwordinput_changes.onBlur = /*onConfirmPasswordBlur*/ ctx[9]; 5187 passwordinput.$set(passwordinput_changes); 5188 }, 5189 i(local) { 5190 if (current) return; 5191 transition_in(passwordinput.$$.fragment, local); 5192 current = true; 5193 }, 5194 o(local) { 5195 transition_out(passwordinput.$$.fragment, local); 5196 current = false; 5197 }, 5198 d(detaching) { 5199 destroy_component(passwordinput, detaching); 5200 } 5201 }; 5202 } 5203 5204 // (75:0) {#if config.passwordsMatchIndicatorEnabled} 5205 function create_if_block_1$t(ctx) { 5206 let passwordmatchindicator; 5207 let current; 5208 5209 passwordmatchindicator = new PasswordMatchIndicator({ 5210 props: { 5211 password: /*password*/ ctx[12], 5212 confirmPassword: /*confirmPassword*/ ctx[13], 5213 passwordsMatchText: /*passwordValidationTexts*/ ctx[16].passwordsMatchText, 5214 isPaymentForm: /*isPaymentForm*/ ctx[3] 5215 } 5216 }); 5217 5218 return { 5219 c() { 5220 create_component(passwordmatchindicator.$$.fragment); 5221 }, 5222 m(target, anchor) { 5223 mount_component(passwordmatchindicator, target, anchor); 5224 current = true; 5225 }, 5226 p(ctx, dirty) { 5227 const passwordmatchindicator_changes = {}; 5228 if (dirty & /*password*/ 4096) passwordmatchindicator_changes.password = /*password*/ ctx[12]; 5229 if (dirty & /*confirmPassword*/ 8192) passwordmatchindicator_changes.confirmPassword = /*confirmPassword*/ ctx[13]; 5230 if (dirty & /*isPaymentForm*/ 8) passwordmatchindicator_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 5231 passwordmatchindicator.$set(passwordmatchindicator_changes); 5232 }, 5233 i(local) { 5234 if (current) return; 5235 transition_in(passwordmatchindicator.$$.fragment, local); 5236 current = true; 5237 }, 5238 o(local) { 5239 transition_out(passwordmatchindicator.$$.fragment, local); 5240 current = false; 5241 }, 5242 d(detaching) { 5243 destroy_component(passwordmatchindicator, detaching); 5244 } 5245 }; 5246 } 5247 5248 // (84:0) {#if error} 5249 function create_if_block$F(ctx) { 5250 let errormessage; 5251 let current; 5252 5253 errormessage = new ErrorMessage({ 5254 props: { 5255 error: /*error*/ ctx[15] ?? "", 5256 isPaymentForm: /*isPaymentForm*/ ctx[3] 5257 } 5258 }); 5259 5260 return { 5261 c() { 5262 create_component(errormessage.$$.fragment); 5263 }, 5264 m(target, anchor) { 5265 mount_component(errormessage, target, anchor); 5266 current = true; 5267 }, 5268 p(ctx, dirty) { 5269 const errormessage_changes = {}; 5270 if (dirty & /*error*/ 32768) errormessage_changes.error = /*error*/ ctx[15] ?? ""; 5271 if (dirty & /*isPaymentForm*/ 8) errormessage_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 5272 errormessage.$set(errormessage_changes); 5273 }, 5274 i(local) { 5275 if (current) return; 5276 transition_in(errormessage.$$.fragment, local); 5277 current = true; 5278 }, 5279 o(local) { 5280 transition_out(errormessage.$$.fragment, local); 5281 current = false; 5282 }, 5283 d(detaching) { 5284 destroy_component(errormessage, detaching); 5285 } 5286 }; 5287 } 5288 5289 function create_fragment$11(ctx) { 5290 let passwordinput; 5291 let t0; 5292 let t1; 5293 let t2; 5294 let t3; 5295 let if_block3_anchor; 5296 let current; 5297 5298 passwordinput = new PasswordInput({ 5299 props: { 5300 disabled: /*disabled*/ ctx[11], 5301 password: /*password*/ ctx[12], 5302 isMainPassword: true, 5303 label: /*config*/ ctx[0].password, 5304 hideLabel: /*config*/ ctx[0].hide, 5305 showLabel: /*config*/ ctx[0].show, 5306 placeholder: /*config*/ ctx[0].placeholder, 5307 isPaymentForm: /*isPaymentForm*/ ctx[3], 5308 autocomplete: /*hideConfirmPassword*/ ctx[2] 5309 ? "current-password" 5310 : "new-password", 5311 onChange: /*onPasswordChange*/ ctx[4], 5312 onFocus: /*onPasswordFocus*/ ctx[5], 5313 onBlur: /*onPasswordBlur*/ ctx[6] 5314 } 5315 }); 5316 5317 let if_block0 = /*config*/ ctx[0].passValidatorEnabled && create_if_block_3$d(ctx); 5318 let if_block1 = !/*hideConfirmPassword*/ ctx[2] && create_if_block_2$i(ctx); 5319 let if_block2 = /*config*/ ctx[0].passwordsMatchIndicatorEnabled && create_if_block_1$t(ctx); 5320 let if_block3 = /*error*/ ctx[15] && create_if_block$F(ctx); 5321 5322 return { 5323 c() { 5324 create_component(passwordinput.$$.fragment); 5325 t0 = space(); 5326 if (if_block0) if_block0.c(); 5327 t1 = space(); 5328 if (if_block1) if_block1.c(); 5329 t2 = space(); 5330 if (if_block2) if_block2.c(); 5331 t3 = space(); 5332 if (if_block3) if_block3.c();
5333 if_block3_anchor = empty(); 5334 }, 5335 m(target, anchor) { 5336 mount_component(passwordinput, target, anchor); 5337 insert(target, t0, anchor); 5338 if (if_block0) if_block0.m(target, anchor); 5339 insert(target, t1, anchor); 5340 if (if_block1) if_block1.m(target, anchor); 5341 insert(target, t2, anchor); 5342 if (if_block2) if_block2.m(target, anchor); 5343 insert(target, t3, anchor); 5344 if (if_block3) if_block3.m(target, anchor); 5345 insert(target, if_block3_anchor, anchor); 5346 current = true; 5347 }, 5348 p(ctx, [dirty]) { 5349 const passwordinput_changes = {}; 5350 if (dirty & /*disabled*/ 2048) passwordinput_changes.disabled = /*disabled*/ ctx[11]; 5351 if (dirty & /*password*/ 4096) passwordinput_changes.password = /*password*/ ctx[12]; 5352 if (dirty & /*config*/ 1) passwordinput_changes.label = /*config*/ ctx[0].password; 5353 if (dirty & /*config*/ 1) passwordinput_changes.hideLabel = /*config*/ ctx[0].hide; 5354 if (dirty & /*config*/ 1) passwordinput_changes.showLabel = /*config*/ ctx[0].show; 5355 if (dirty & /*config*/ 1) passwordinput_changes.placeholder = /*config*/ ctx[0].placeholder; 5356 if (dirty & /*isPaymentForm*/ 8) passwordinput_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 5357 5358 if (dirty & /*hideConfirmPassword*/ 4) passwordinput_changes.autocomplete = /*hideConfirmPassword*/ ctx[2] 5359 ? "current-password" 5360 : "new-password"; 5361 5362 if (dirty & /*onPasswordChange*/ 16) passwordinput_changes.onChange = /*onPasswordChange*/ ctx[4]; 5363 if (dirty & /*onPasswordFocus*/ 32) passwordinput_changes.onFocus = /*onPasswordFocus*/ ctx[5]; 5364 if (dirty & /*onPasswordBlur*/ 64) passwordinput_changes.onBlur = /*onPasswordBlur*/ ctx[6]; 5365 passwordinput.$set(passwordinput_changes); 5366 5367 if (/*config*/ ctx[0].passValidatorEnabled) { 5368 if (if_block0) { 5369 if_block0.p(ctx, dirty); 5370 5371 if (dirty & /*config*/ 1) { 5372 transition_in(if_block0, 1); 5373 } 5374 } else { 5375 if_block0 = create_if_block_3$d(ctx); 5376 if_block0.c(); 5377 transition_in(if_block0, 1); 5378 if_block0.m(t1.parentNode, t1); 5379 } 5380 } else if (if_block0) { 5381 group_outros(); 5382 5383 transition_out(if_block0, 1, 1, () => { 5384 if_block0 = null; 5385 }); 5386 5387 check_outros(); 5388 } 5389 5390 if (!/*hideConfirmPassword*/ ctx[2]) { 5391 if (if_block1) { 5392 if_block1.p(ctx, dirty); 5393 5394 if (dirty & /*hideConfirmPassword*/ 4) { 5395 transition_in(if_block1, 1); 5396 } 5397 } else { 5398 if_block1 = create_if_block_2$i(ctx); 5399 if_block1.c(); 5400 transition_in(if_block1, 1); 5401 if_block1.m(t2.parentNode, t2); 5402 } 5403 } else if (if_block1) { 5404 group_outros(); 5405 5406 transition_out(if_block1, 1, 1, () => { 5407 if_block1 = null; 5408 }); 5409 5410 check_outros(); 5411 } 5412 5413 if (/*config*/ ctx[0].passwordsMatchIndicatorEnabled) { 5414 if (if_block2) { 5415 if_block2.p(ctx, dirty); 5416 5417 if (dirty & /*config*/ 1) { 5418 transition_in(if_block2, 1); 5419 } 5420 } else { 5421 if_block2 = create_if_block_1$t(ctx); 5422 if_block2.c(); 5423 transition_in(if_block2, 1); 5424 if_block2.m(t3.parentNode, t3); 5425 } 5426 } else if (if_block2) { 5427 group_outros(); 5428 5429 transition_out(if_block2, 1, 1, () => { 5430 if_block2 = null; 5431 }); 5432 5433 check_outros(); 5434 } 5435 5436 if (/*error*/ ctx[15]) { 5437 if (if_block3) { 5438 if_block3.p(ctx, dirty); 5439 5440 if (dirty & /*error*/ 32768) { 5441 transition_in(if_block3, 1); 5442 } 5443 } else { 5444 if_block3 = create_if_block$F(ctx); 5445 if_block3.c(); 5446 transition_in(if_block3, 1); 5447 if_block3.m(if_block3_anchor.parentNode, if_block3_anchor); 5448 } 5449 } else if (if_block3) { 5450 group_outros(); 5451 5452 transition_out(if_block3, 1, 1, () => { 5453 if_block3 = null; 5454 }); 5455 5456 check_outros(); 5457 } 5458 }, 5459 i(local) { 5460 if (current) return; 5461 transition_in(passwordinput.$$.fragment, local); 5462 transition_in(if_block0); 5463 transition_in(if_block1); 5464 transition_in(if_block2); 5465 transition_in(if_block3); 5466 current = true; 5467 }, 5468 o(local) { 5469 transition_out(passwordinput.$$.fragment, local); 5470 transition_out(if_block0); 5471 transition_out(if_block1); 5472 transition_out(if_block2); 5473 transition_out(if_block3); 5474 current = false;
5475 }, 5476 d(detaching) { 5477 if (detaching) { 5478 detach(t0); 5479 detach(t1); 5480 detach(t2); 5481 detach(t3); 5482 detach(if_block3_anchor); 5483 } 5484 5485 destroy_component(passwordinput, detaching); 5486 if (if_block0) if_block0.d(detaching); 5487 if (if_block1) if_block1.d(detaching); 5488 if (if_block2) if_block2.d(detaching); 5489 if (if_block3) if_block3.d(detaching); 5490 } 5491 }; 5492 } 5493 5494 function instance$$($$self, $$props, $$invalidate) { 5495 let { config } = $$props; 5496 let { passwordRequirements } = $$props; 5497 let { hideConfirmPassword } = $$props; 5498 let { isPaymentForm = false } = $$props; 5499 let { onPasswordChange } = $$props; 5500 let { onPasswordFocus } = $$props; 5501 let { onPasswordBlur } = $$props; 5502 let { onConfirmPasswordChange } = $$props; 5503 let { onConfirmPasswordFocus } = $$props; 5504 let { onConfirmPasswordBlur } = $$props; 5505 let { onPasswordIsValidChange } = $$props; 5506 let { disabled } = $$props; 5507 let { password } = $$props; 5508 let { confirmPassword } = $$props; 5509 let { passwordIsValid } = $$props; 5510 let { error = null } = $$props; 5511 5512 let passwordValidationTexts = { 5513 minLengthValidationText: config.minLengthValidation || `Must include at least ${passwordRequirements.minLength} characters`, 5514 uppercaseValidationText: config.uppercaseValidation || 'Must include an uppercase letter', 5515 numberValidationText: config.numberValidation || 'Must include a number character', 5516 symbolValidationText: config.symbolValidation || 'Must include a supported symbol', 5517 passwordsMatchText: config.passwordsMatchText || 'Passwords match' 5518 }; 5519 5520 $$self.$$set = $$props => {
5521 if ('config' in $$props) $$invalidate(0, config = $$props.config); 5522 if ('passwordRequirements' in $$props) $$invalidate(1, passwordRequirements = $$props.passwordRequirements); 5523 if ('hideConfirmPassword' in $$props) $$invalidate(2, hideConfirmPassword = $$props.hideConfirmPassword); 5524 if ('isPaymentForm' in $$props) $$invalidate(3, isPaymentForm = $$props.isPaymentForm); 5525 if ('onPasswordChange' in $$props) $$invalidate(4, onPasswordChange = $$props.onPasswordChange); 5526 if ('onPasswordFocus' in $$props) $$invalidate(5, onPasswordFocus = $$props.onPasswordFocus); 5527 if ('onPasswordBlur' in $$props) $$invalidate(6, onPasswordBlur = $$props.onPasswordBlur); 5528 if ('onConfirmPasswordChange' in $$props) $$invalidate(7, onConfirmPasswordChange = $$props.onConfirmPasswordChange); 5529 if ('onConfirmPasswordFocus' in $$props) $$invalidate(8, onConfirmPasswordFocus = $$props.onConfirmPasswordFocus); 5530 if ('onConfirmPasswordBlur' in $$props) $$invalidate(9, onConfirmPasswordBlur = $$props.onConfirmPasswordBlur);
5531 if ('onPasswordIsValidChange' in $$props) $$invalidate(10, onPasswordIsValidChange = $$props.onPasswordIsValidChange); 5532 if ('disabled' in $$props) $$invalidate(11, disabled = $$props.disabled); 5533 if ('password' in $$props) $$invalidate(12, password = $$props.password); 5534 if ('confirmPassword' in $$props) $$invalidate(13, confirmPassword = $$props.confirmPassword); 5535 if ('passwordIsValid' in $$props) $$invalidate(14, passwordIsValid = $$props.passwordIsValid); 5536 if ('error' in $$props) $$invalidate(15, error = $$props.error); 5537 }; 5538 5539 return [ 5540 config, 5541 passwordRequirements, 5542 hideConfirmPassword, 5543 isPaymentForm, 5544 onPasswordChange, 5545 onPasswordFocus, 5546 onPasswordBlur, 5547 onConfirmPasswordChange, 5548 onConfirmPasswordFocus, 5549 onConfirmPasswordBlur, 5550 onPasswordIsValidChange, 5551 disabled, 5552 password, 5553 confirmPassword, 5554 passwordIsValid, 5555 error, 5556 passwordValidationTexts 5557 ]; 5558 } 5559 5560 class CreatePassword extends SvelteComponent { 5561 constructor(options) { 5562 super(); 5563 5564 init(this, options, instance$$, create_fragment$11, safe_not_equal, { 5565 config: 0, 5566 passwordRequirements: 1, 5567 hideConfirmPassword: 2, 5568 isPaymentForm: 3, 5569 onPasswordChange: 4, 5570 onPasswordFocus: 5, 5571 onPasswordBlur: 6, 5572 onConfirmPasswordChange: 7, 5573 onConfirmPasswordFocus: 8, 5574 onConfirmPasswordBlur: 9, 5575 onPasswordIsValidChange: 10, 5576 disabled: 11, 5577 password: 12, 5578 confirmPassword: 13, 5579 passwordIsValid: 14, 5580 error: 15 5581 }); 5582 } 5583 } 5584 5585 const factory$s = { 5586 matches: (sectionElement) => sectionElement.type === elementTypes.PASSWORD && sectionElement.config?.confirm != null, 5587 create: (form, formState, formActions, elementConfig) => ({ 5588 component: CreatePassword, 5589 props: { 5590 disabled: formState.isBusy, 5591 config: elementConfig, 5592 passwordRequirements: form.organisationConfiguration.passwordStrengthRequirements, 5593 hideConfirmPassword: form.organisationConfiguration.hideConfirmPasswordOnRegForm, 5594 isPaymentForm: form.formType === FormType.PAYMENT, 5595 onPasswordChange: (value) => { 5596 formActions.updateFormState({ 5597 createPassword: value 5598 }); 5599 logDataLayerEvent(form, 'zephr_form_input_change', { 5600 inputName: 'zephr-form-password', 5601 sectionId: formState.currentSection.type, 5602 field: 'create-password' 5603 }); 5604 }, 5605 onPasswordFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 5606 inputName: 'zephr-form-password', 5607 sectionId: formState.currentSection.type, 5608 field: 'create-password' 5609 }), 5610 onPasswordBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 5611 inputName: 'zephr-form-password', 5612 sectionId: formState.currentSection.type, 5613 field: 'create-password' 5614 }), 5615 onConfirmPasswordChange: (value) => { 5616 formActions.updateFormState({ 5617 confirmCreatePassword: value 5618 }); 5619 logDataLayerEvent(form, 'zephr_form_input_change', { 5620 inputName: 'zephr-form-confirm-password', 5621 sectionId: formState.currentSection.type, 5622 field: 'confirm-password' 5623 }); 5624 }, 5625 onConfirmPasswordFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 5626 inputName: 'zephr-form-confirm-password', 5627 sectionId: formState.currentSection.type, 5628 field: 'confirm-password' 5629 }), 5630 onConfirmPasswordBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 5631 inputName: 'zephr-form-confirm-password', 5632 sectionId: formState.currentSection.type, 5633 field: 'confirm-password' 5634 }), 5635 onPasswordIsValidChange: (value) => formActions.updateFormState({ 5636 passwordIsValid: value 5637 }), 5638 password: formState.createPassword, 5639 confirmPassword: formState.confirmCreatePassword, 5640 passwordIsValid: formState.passwordIsValid 5641 }, 5642 isValid: formState.password != null 5643 && (!elementConfig.passValidatorEnabled || formState.passwordIsValid) && (form.organisationConfiguration.hideConfirmPasswordOnRegForm || 5644 formState.createPassword === formState.confirmCreatePassword), 5645 }) 5646 }; 5647 5648 // TODO 5649 const isValid = (password) => password != null && password.length > 2; 5650 const factory$r = { 5651 matches: (sectionElement) => sectionElement.type === elementTypes.PASSWORD && sectionElement.config?.confirm == null, 5652 create: (form, formState, formActions, elementConfig) => { 5653 const stateKey = elementConfig.isUpdatePasswordCurrentPassword ? 'currentPassword' : 'password'; 5654 return { 5655 component: PasswordInput, 5656 props: { 5657 disabled: formState.isBusy, 5658 label: elementConfig.password, 5659 placeholder: elementConfig.placeholder, 5660 isMainPassword: true, 5661 showLabel: elementConfig.showLabel, 5662 hideLabel: elementConfig.hideLabel, 5663 password: formState[stateKey], 5664 autocomplete: 'password', 5665 onChange: (value) => { 5666 formActions.updateFormState({ [stateKey]: value }); 5667 logDataLayerEvent(form, 'zephr_form_input_change', { 5668 inputName: 'zephr-form-password', 5669 sectionId: formState.currentSection.type, 5670 field: 'password' 5671 }); 5672 }, 5673 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 5674 inputName: 'zephr-form-password', 5675 sectionId: formState.currentSection.type, 5676 field: 'password' 5677 }), 5678 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 5679 inputName: 'zephr-form-password', 5680 sectionId: formState.currentSection.type, 5681 field: 'password' 5682 }), 5683 }, 5684 isValid: isValid(formState[stateKey]) 5685 }; 5686 } 5687 }; 5688 5689 /* src/components/elements/payment/braintree/BraintreeMobilePayment.svelte generated by Svelte v4.2.12 */ 5690 5691 function create_fragment$10(ctx) { 5692 let script0; 5693 let script0_src_value; 5694 let script1; 5695 let script1_src_value; 5696 let script2; 5697 let script2_src_value; 5698 let script3; 5699 let script3_src_value; 5700 let t0; 5701 let div0; 5702 let t1; 5703 let div1; 5704 5705 return { 5706 c() { 5707 script0 = element("script"); 5708 script0.innerHTML = ``; 5709 script1 = element("script"); 5710 script1.innerHTML = ``; 5711 script2 = element("script"); 5712 script2.innerHTML = ``; 5713 script3 = element("script"); 5714 script3.innerHTML = ``; 5715 t0 = space(); 5716 div0 = element("div"); 5717 t1 = space(); 5718 div1 = element("div"); 5719 div1.innerHTML = ``; 5720 if (!src_url_equal(script0.src, script0_src_value = "https://js.braintreegateway.com/web/3.85.3/js/google-payment.min.js")) attr(script0, "src", script0_src_value); 5721 if (!src_url_equal(script1.src, script1_src_value = "https://pay.google.com/gp/p/js/pay.js")) attr(script1, "src", script1_src_value); 5722 attr(script1, "onload", "window.googlePayLoadBraintreeCallback()"); 5723 if (!src_url_equal(script2.src, script2_src_value = "https://js.braintreegateway.com/web/3.85.3/js/client.min.js")) attr(script2, "src", script2_src_value); 5724 attr(script2, "onload", "window.braintreeLoadCallback()"); 5725 if (!src_url_equal(script3.src, script3_src_value = "https://js.braintreegateway.com/web/3.85.3/js/apple-pay.min.js")) attr(script3, "src", script3_src_value); 5726 attr(script3, "onload", "window.applePayLoadBraintreeCallback()"); 5727 attr(div0, "id", "google-pay-button"); 5728 attr(div0, "class", "svelte-1drqjgk"); 5729 toggle_class(div0, "zephr-form-disabled-div", /*isDisabled*/ ctx[0]); 5730 toggle_class(div0, "zephr-payment-form-disabled-div", /*isDisabled*/ ctx[0]); 5731 attr(div1, "id", "apple_pay_button"); 5732 }, 5733 m(target, anchor) { 5734 append(document.head, script0); 5735 append(document.head, script1); 5736 append(document.head, script2); 5737 append(document.head, script3); 5738 insert(target, t0, anchor); 5739 insert(target, div0, anchor); 5740 insert(target, t1, anchor); 5741 insert(target, div1, anchor); 5742 }, 5743 p(ctx, [dirty]) {
5744 if (dirty & /*isDisabled*/ 1) { 5745 toggle_class(div0, "zephr-form-disabled-div", /*isDisabled*/ ctx[0]); 5746 } 5747 5748 if (dirty & /*isDisabled*/ 1) { 5749 toggle_class(div0, "zephr-payment-form-disabled-div", /*isDisabled*/ ctx[0]); 5750 } 5751 }, 5752 i: noop, 5753 o: noop, 5754 d(detaching) { 5755 if (detaching) { 5756 detach(t0); 5757 detach(div0); 5758 detach(t1); 5759 detach(div1); 5760 } 5761 5762 detach(script0); 5763 detach(script1); 5764 detach(script2); 5765 detach(script3); 5766 } 5767 }; 5768 } 5769 5770 function instance$_($$self, $$props, $$invalidate) { 5771 let { onMountCallback } = $$props; 5772 let { isDisabled } = $$props; 5773 let { disableCoreDependencyHeader } = $$props; 5774 onMount(onMountCallback); 5775 5776 $$self.$$set = $$props => { 5777 if ('onMountCallback' in $$props) $$invalidate(1, onMountCallback = $$props.onMountCallback); 5778 if ('isDisabled' in $$props) $$invalidate(0, isDisabled = $$props.isDisabled); 5779 if ('disableCoreDependencyHeader' in $$props) $$invalidate(2, disableCoreDependencyHeader = $$props.disableCoreDependencyHeader); 5780 }; 5781 5782 return [isDisabled, onMountCallback, disableCoreDependencyHeader]; 5783 } 5784 5785 class BraintreeMobilePayment extends SvelteComponent { 5786 constructor(options) { 5787 super(); 5788 5789 init(this, options, instance$_, create_fragment$10, safe_not_equal, { 5790 onMountCallback: 1, 5791 isDisabled: 0, 5792 disableCoreDependencyHeader: 2 5793 }); 5794 } 5795 } 5796 5797 /* src/components/elements/payment/braintree/BraintreePayment.svelte generated by Svelte v4.2.12 */ 5798 5799 function create_fragment$$(ctx) { 5800 let script; 5801 let script_src_value; 5802 let t0; 5803 let div; 5804 let t1; 5805 let errormessage; 5806 let current; 5807 5808 errormessage = new ErrorMessage({ 5809 props: { 5810 error: /*providerError*/ ctx[0]?.message ?? /*error*/ ctx[2] ?? "", 5811 isPaymentForm: true 5812 } 5813 }); 5814 5815 return { 5816 c() { 5817 script = element("script"); 5818 script.innerHTML = ``; 5819 t0 = space(); 5820 div = element("div"); 5821 t1 = space(); 5822 create_component(errormessage.$$.fragment); 5823 if (!src_url_equal(script.src, script_src_value = "https://js.braintreegateway.com/web/dropin/1.33.2/js/dropin.min.js")) attr(script, "src", script_src_value); 5824 attr(script, "onload", "window.braintreeLoadCallback()"); 5825 attr(div, "id", "braintree-dropin-container"); 5826 attr(div, "class", "svelte-w52z2j"); 5827 toggle_class(div, "zephr-form-disabled-div", /*isDisabled*/ ctx[1]); 5828 toggle_class(div, "zephr-payment-form-disabled-div", /*isDisabled*/ ctx[1]); 5829 }, 5830 m(target, anchor) { 5831 append(document.head, script); 5832 insert(target, t0, anchor); 5833 insert(target, div, anchor); 5834 insert(target, t1, anchor); 5835 mount_component(errormessage, target, anchor); 5836 current = true; 5837 }, 5838 p(ctx, [dirty]) { 5839 if (!current || dirty & /*isDisabled*/ 2) { 5840 toggle_class(div, "zephr-form-disabled-div", /*isDisabled*/ ctx[1]); 5841 } 5842 5843 if (!current || dirty & /*isDisabled*/ 2) { 5844 toggle_class(div, "zephr-payment-form-disabled-div", /*isDisabled*/ ctx[1]); 5845 } 5846 5847 const errormessage_changes = {}; 5848 if (dirty & /*providerError, error*/ 5) errormessage_changes.error = /*providerError*/ ctx[0]?.message ?? /*error*/ ctx[2] ?? ""; 5849 errormessage.$set(errormessage_changes); 5850 }, 5851 i(local) { 5852 if (current) return; 5853 transition_in(errormessage.$$.fragment, local); 5854 current = true; 5855 }, 5856 o(local) { 5857 transition_out(errormessage.$$.fragment, local); 5858 current = false; 5859 }, 5860 d(detaching) { 5861 if (detaching) { 5862 detach(t0); 5863 detach(div); 5864 detach(t1); 5865 } 5866 5867 detach(script); 5868 destroy_component(errormessage, detaching); 5869 } 5870 }; 5871 } 5872 5873 function instance$Z($$self, $$props, $$invalidate) { 5874 let { onMountCallback } = $$props; 5875 let { providerError } = $$props; 5876 let { isDisabled } = $$props; 5877 let { isLoaded } = $$props; 5878 let { error = null } = $$props; 5879 onMount(onMountCallback); 5880 5881 $$self.$$set = $$props => {
5882 if ('onMountCallback' in $$props) $$invalidate(3, onMountCallback = $$props.onMountCallback); 5883 if ('providerError' in $$props) $$invalidate(0, providerError = $$props.providerError); 5884 if ('isDisabled' in $$props) $$invalidate(1, isDisabled = $$props.isDisabled); 5885 if ('isLoaded' in $$props) $$invalidate(4, isLoaded = $$props.isLoaded); 5886 if ('error' in $$props) $$invalidate(2, error = $$props.error); 5887 }; 5888 5889 return [providerError, isDisabled, error, onMountCallback, isLoaded]; 5890 } 5891 5892 class BraintreePayment extends SvelteComponent { 5893 constructor(options) { 5894 super(); 5895 5896 init(this, options, instance$Z, create_fragment$$, safe_not_equal, { 5897 onMountCallback: 3, 5898 providerError: 0, 5899 isDisabled: 1, 5900 isLoaded: 4, 5901 error: 2 5902 }); 5903 } 5904 } 5905 5906 /* src/components/elements/payment/stripe/StripePayment.svelte generated by Svelte v4.2.12 */ 5907 5908 function create_fragment$_(ctx) { 5909 let script; 5910 let script_src_value; 5911 let t0; 5912 let div; 5913 let t1; 5914 let errormessage; 5915 let current; 5916 5917 errormessage = new ErrorMessage({ 5918 props: { 5919 error: /*providerError*/ ctx[0]?.message ?? (/*isComplete*/ ctx[2] ? /*error*/ ctx[3] : "") ?? "", 5920 isPaymentForm: true 5921 } 5922 }); 5923 5924 return { 5925 c() { 5926 script = element("script"); 5927 script.innerHTML = ``; 5928 t0 = space(); 5929 div = element("div"); 5930 t1 = space(); 5931 create_component(errormessage.$$.fragment); 5932 if (!src_url_equal(script.src, script_src_value = "https://js.stripe.com/v3/")) attr(script, "src", script_src_value); 5933 attr(script, "onload", "window.stripeLoadCallback()"); 5934 attr(div, "id", /*id*/ ctx[4]); 5935 attr(div, "class", "stripe-element svelte-1bi6tmz"); 5936 toggle_class(div, "zephr-form-disabled-div", /*isDisabled*/ ctx[1]); 5937 toggle_class(div, "zephr-payment-form-disabled-div", /*isDisabled*/ ctx[1]); 5938 }, 5939 m(target, anchor) { 5940 append(document.head, script); 5941 insert(target, t0, anchor); 5942 insert(target, div, anchor); 5943 insert(target, t1, anchor); 5944 mount_component(errormessage, target, anchor); 5945 current = true; 5946 }, 5947 p(ctx, [dirty]) { 5948 if (!current || dirty & /*isDisabled*/ 2) { 5949 toggle_class(div, "zephr-form-disabled-div", /*isDisabled*/ ctx[1]); 5950 } 5951 5952 if (!current || dirty & /*isDisabled*/ 2) { 5953 toggle_class(div, "zephr-payment-form-disabled-div", /*isDisabled*/ ctx[1]); 5954 } 5955 5956 const errormessage_changes = {}; 5957 if (dirty & /*providerError, isComplete, error*/ 13) errormessage_changes.error = /*providerError*/ ctx[0]?.message ?? (/*isComplete*/ ctx[2] ? /*error*/ ctx[3] : "") ?? ""; 5958 errormessage.$set(errormessage_changes); 5959 }, 5960 i(local) { 5961 if (current) return; 5962 transition_in(errormessage.$$.fragment, local); 5963 current = true; 5964 }, 5965 o(local) { 5966 transition_out(errormessage.$$.fragment, local); 5967 current = false; 5968 }, 5969 d(detaching) { 5970 if (detaching) { 5971 detach(t0); 5972 detach(div); 5973 detach(t1); 5974 } 5975 5976 detach(script); 5977 destroy_component(errormessage, detaching); 5978 } 5979 }; 5980 } 5981 5982 function instance$Y($$self, $$props, $$invalidate) { 5983 let { onMountCallback } = $$props; 5984 let { providerError } = $$props; 5985 let { isDisabled } = $$props; 5986 let { isComplete } = $$props; 5987 let { isLoaded } = $$props; 5988 let { error = null } = $$props; 5989 let { formKey } = $$props; 5990 const id = `stripe-element-${formKey}`; 5991 onMount(onMountCallback); 5992 5993 $$self.$$set = $$props => {
5994 if ('onMountCallback' in $$props) $$invalidate(5, onMountCallback = $$props.onMountCallback); 5995 if ('providerError' in $$props) $$invalidate(0, providerError = $$props.providerError); 5996 if ('isDisabled' in $$props) $$invalidate(1, isDisabled = $$props.isDisabled); 5997 if ('isComplete' in $$props) $$invalidate(2, isComplete = $$props.isComplete); 5998 if ('isLoaded' in $$props) $$invalidate(6, isLoaded = $$props.isLoaded); 5999 if ('error' in $$props) $$invalidate(3, error = $$props.error); 6000 if ('formKey' in $$props) $$invalidate(7, formKey = $$props.formKey); 6001 }; 6002 6003 return [ 6004 providerError, 6005 isDisabled, 6006 isComplete, 6007 error, 6008 id, 6009 onMountCallback, 6010 isLoaded, 6011 formKey 6012 ]; 6013 } 6014 6015 class StripePayment extends SvelteComponent { 6016 constructor(options) { 6017 super(); 6018 6019 init(this, options, instance$Y, create_fragment$_, safe_not_equal, { 6020 onMountCallback: 5, 6021 providerError: 0, 6022 isDisabled: 1, 6023 isComplete: 2, 6024 isLoaded: 6, 6025 error: 3, 6026 formKey: 7 6027 }); 6028 } 6029 } 6030 6031 /* src/components/elements/payment/stripe/StripeMobilePayment.svelte generated by Svelte v4.2.12 */ 6032 6033 function create_if_block$E(ctx) { 6034 let script; 6035 let script_src_value; 6036 6037 return { 6038 c() { 6039 script = element("script"); 6040 script.innerHTML = ``; 6041 if (!src_url_equal(script.src, script_src_value = "https://js.stripe.com/v3/")) attr(script, "src", script_src_value); 6042 attr(script, "onload", "window.stripeLoadCallback()"); 6043 }, 6044 m(target, anchor) {
6045 insert(target, script, anchor); 6046 }, 6047 d(detaching) { 6048 if (detaching) { 6049 detach(script); 6050 } 6051 } 6052 }; 6053 } 6054 6055 function create_fragment$Z(ctx) { 6056 let script; 6057 let script_src_value; 6058 let if_block_anchor; 6059 let t; 6060 let div; 6061 let if_block = !/*disableCoreDependencyHeader*/ ctx[1] && create_if_block$E(); 6062 6063 return { 6064 c() { 6065 script = element("script"); 6066 script.innerHTML = ``; 6067 if (if_block) if_block.c(); 6068 if_block_anchor = empty(); 6069 t = space(); 6070 div = element("div"); 6071 if (!src_url_equal(script.src, script_src_value = "https://pay.google.com/gp/p/js/pay.js")) attr(script, "src", script_src_value); 6072 attr(script, "onload", "window.googlePayLoadStripeCallback()"); 6073 attr(div, "id", "stripe-mobile-pay-button"); 6074 attr(div, "class", "svelte-12ehv8b"); 6075 toggle_class(div, "zephr-form-disabled-div", /*isDisabled*/ ctx[0]); 6076 toggle_class(div, "zephr-payment-form-disabled-div", /*isDisabled*/ ctx[0]); 6077 }, 6078 m(target, anchor) { 6079 append(document.head, script); 6080 if (if_block) if_block.m(document.head, null); 6081 append(document.head, if_block_anchor); 6082 insert(target, t, anchor); 6083 insert(target, div, anchor); 6084 }, 6085 p(ctx, [dirty]) { 6086 if (!/*disableCoreDependencyHeader*/ ctx[1]) { 6087 if (if_block) ; else { 6088 if_block = create_if_block$E(); 6089 if_block.c(); 6090 if_block.m(if_block_anchor.parentNode, if_block_anchor); 6091 } 6092 } else if (if_block) { 6093 if_block.d(1); 6094 if_block = null; 6095 } 6096 6097 if (dirty & /*isDisabled*/ 1) { 6098 toggle_class(div, "zephr-form-disabled-div", /*isDisabled*/ ctx[0]); 6099 } 6100 6101 if (dirty & /*isDisabled*/ 1) { 6102 toggle_class(div, "zephr-payment-form-disabled-div", /*isDisabled*/ ctx[0]); 6103 } 6104 }, 6105 i: noop, 6106 o: noop, 6107 d(detaching) { 6108 if (detaching) { 6109 detach(t); 6110 detach(div); 6111 } 6112 6113 detach(script); 6114 if (if_block) if_block.d(detaching); 6115 detach(if_block_anchor); 6116 } 6117 }; 6118 } 6119 6120 function instance$X($$self, $$props, $$invalidate) { 6121 let { onMountCallback } = $$props; 6122 let { isDisabled } = $$props; 6123 let { disableCoreDependencyHeader } = $$props; 6124 onMount(onMountCallback); 6125 6126 $$self.$$set = $$props => {
6127 if ('onMountCallback' in $$props) $$invalidate(2, onMountCallback = $$props.onMountCallback); 6128 if ('isDisabled' in $$props) $$invalidate(0, isDisabled = $$props.isDisabled); 6129 if ('disableCoreDependencyHeader' in $$props) $$invalidate(1, disableCoreDependencyHeader = $$props.disableCoreDependencyHeader); 6130 }; 6131 6132 return [isDisabled, disableCoreDependencyHeader, onMountCallback]; 6133 } 6134 6135 class StripeMobilePayment extends SvelteComponent { 6136 constructor(options) { 6137 super(); 6138 6139 init(this, options, instance$X, create_fragment$Z, safe_not_equal, { 6140 onMountCallback: 2, 6141 isDisabled: 0, 6142 disableCoreDependencyHeader: 1 6143 }); 6144 } 6145 } 6146 6147 /* src/components/elements/Spinner.svelte generated by Svelte v4.2.12 */ 6148 6149 function create_fragment$Y(ctx) { 6150 let div; 6151 let fa; 6152 let current; 6153 6154 fa = new Fa({ 6155 props: { size: "2x", icon: faSpinner, spin: true } 6156 }); 6157 6158 return { 6159 c() { 6160 div = element("div"); 6161 create_component(fa.$$.fragment); 6162 attr(div, "class", "spinner-container svelte-1c5ov4v"); 6163 }, 6164 m(target, anchor) { 6165 insert(target, div, anchor); 6166 mount_component(fa, div, null); 6167 current = true; 6168 }, 6169 p: noop, 6170 i(local) { 6171 if (current) return; 6172 transition_in(fa.$$.fragment, local); 6173 current = true; 6174 }, 6175 o(local) { 6176 transition_out(fa.$$.fragment, local); 6177 current = false; 6178 }, 6179 d(detaching) { 6180 if (detaching) { 6181 detach(div); 6182 } 6183 6184 destroy_component(fa); 6185 } 6186 }; 6187 } 6188 6189 class Spinner extends SvelteComponent { 6190 constructor(options) { 6191 super(); 6192 init(this, options, null, create_fragment$Y, safe_not_equal, {}); 6193 } 6194 } 6195 6196 /* src/components/elements/payment/zuora/ZuoraPayment.svelte generated by Svelte v4.2.12 */ 6197 6198 function create_if_block_1$s(ctx) { 6199 let spinner; 6200 let current; 6201 spinner = new Spinner({}); 6202 6203 return { 6204 c() { 6205 create_component(spinner.$$.fragment); 6206 }, 6207 m(target, anchor) { 6208 mount_component(spinner, target, anchor); 6209 current = true; 6210 }, 6211 i(local) { 6212 if (current) return; 6213 transition_in(spinner.$$.fragment, local); 6214 current = true; 6215 }, 6216 o(local) { 6217 transition_out(spinner.$$.fragment, local); 6218 current = false; 6219 }, 6220 d(detaching) { 6221 destroy_component(spinner, detaching); 6222 } 6223 }; 6224 } 6225 6226 // (19:4) {#if isBusy} 6227 function create_if_block$D(ctx) { 6228 let div; 6229 let spinner; 6230 let current; 6231 spinner = new Spinner({}); 6232 6233 return { 6234 c() { 6235 div = element("div"); 6236 create_component(spinner.$$.fragment); 6237 attr(div, "class", "spinner-overlay svelte-1vnsk3p"); 6238 }, 6239 m(target, anchor) { 6240 insert(target, div, anchor); 6241 mount_component(spinner, div, null); 6242 current = true; 6243 }, 6244 i(local) { 6245 if (current) return; 6246 transition_in(spinner.$$.fragment, local); 6247 current = true; 6248 }, 6249 o(local) { 6250 transition_out(spinner.$$.fragment, local); 6251 current = false; 6252 }, 6253 d(detaching) { 6254 if (detaching) { 6255 detach(div); 6256 } 6257 6258 destroy_component(spinner); 6259 } 6260 }; 6261 } 6262 6263 function create_fragment$X(ctx) { 6264 let t0; 6265 let div1; 6266 let t1; 6267 let div0; 6268 let div0_class_value; 6269 let div1_class_value; 6270 let t2; 6271 let div2; 6272 let t3; 6273 let errormessage; 6274 let current; 6275 let if_block0 = !/*isLoaded*/ ctx[2] && create_if_block_1$s(); 6276 let if_block1 = /*isBusy*/ ctx[3] && create_if_block$D(); 6277 6278 errormessage = new ErrorMessage({ 6279 props: { 6280 error: /*providerError*/ ctx[1]?.message ?? /*error*/ ctx[4] ?? "", 6281 isPaymentForm: true 6282 } 6283 }); 6284 6285 return { 6286 c() { 6287 if (if_block0) if_block0.c(); 6288 t0 = space(); 6289 div1 = element("div"); 6290 if (if_block1) if_block1.c(); 6291 t1 = space(); 6292 div0 = element("div"); 6293 t2 = space(); 6294 div2 = element("div"); 6295 t3 = space(); 6296 create_component(errormessage.$$.fragment); 6297 attr(div0, "id", "zuora_payment"); 6298 6299 attr(div0, "class", div0_class_value = "" + (null_to_empty(/*isDisabled*/ ctx[0] 6300 ? "zuora-disabled-iframe-container zuora-dynamic-form-disabled" 6301 : "") + " svelte-1vnsk3p")); 6302 6303 attr(div1, "class", div1_class_value = "" + (null_to_empty(/*isBusy*/ ctx[3] 6304 ? "zuora-dynamic-form-disabled form-wrapper" 6305 : "form-wrapper") + " svelte-1vnsk3p")); 6306 6307 attr(div2, "id", "core-style"); 6308 }, 6309 m(target, anchor) { 6310 if (if_block0) if_block0.m(target, anchor); 6311 insert(target, t0, anchor); 6312 insert(target, div1, anchor); 6313 if (if_block1) if_block1.m(div1, null); 6314 append(div1, t1); 6315 append(div1, div0); 6316 insert(target, t2, anchor); 6317 insert(target, div2, anchor);
6318 insert(target, t3, anchor); 6319 mount_component(errormessage, target, anchor); 6320 current = true; 6321 }, 6322 p(ctx, [dirty]) { 6323 if (!/*isLoaded*/ ctx[2]) { 6324 if (if_block0) { 6325 if (dirty & /*isLoaded*/ 4) { 6326 transition_in(if_block0, 1); 6327 } 6328 } else { 6329 if_block0 = create_if_block_1$s(); 6330 if_block0.c(); 6331 transition_in(if_block0, 1); 6332 if_block0.m(t0.parentNode, t0); 6333 } 6334 } else if (if_block0) { 6335 group_outros(); 6336 6337 transition_out(if_block0, 1, 1, () => { 6338 if_block0 = null; 6339 }); 6340 6341 check_outros(); 6342 } 6343 6344 if (/*isBusy*/ ctx[3]) { 6345 if (if_block1) { 6346 if (dirty & /*isBusy*/ 8) { 6347 transition_in(if_block1, 1); 6348 } 6349 } else { 6350 if_block1 = create_if_block$D(); 6351 if_block1.c(); 6352 transition_in(if_block1, 1); 6353 if_block1.m(div1, t1); 6354 } 6355 } else if (if_block1) { 6356 group_outros(); 6357 6358 transition_out(if_block1, 1, 1, () => { 6359 if_block1 = null; 6360 }); 6361 6362 check_outros(); 6363 } 6364 6365 if (!current || dirty & /*isDisabled*/ 1 && div0_class_value !== (div0_class_value = "" + (null_to_empty(/*isDisabled*/ ctx[0] 6366 ? "zuora-disabled-iframe-container zuora-dynamic-form-disabled" 6367 : "") + " svelte-1vnsk3p"))) { 6368 attr(div0, "class", div0_class_value); 6369 } 6370 6371 if (!current || dirty & /*isBusy*/ 8 && div1_class_value !== (div1_class_value = "" + (null_to_empty(/*isBusy*/ ctx[3] 6372 ? "zuora-dynamic-form-disabled form-wrapper" 6373 : "form-wrapper") + " svelte-1vnsk3p"))) { 6374 attr(div1, "class", div1_class_value); 6375 } 6376 6377 const errormessage_changes = {}; 6378 if (dirty & /*providerError, error*/ 18) errormessage_changes.error = /*providerError*/ ctx[1]?.message ?? /*error*/ ctx[4] ?? ""; 6379 errormessage.$set(errormessage_changes); 6380 }, 6381 i(local) { 6382 if (current) return; 6383 transition_in(if_block0); 6384 transition_in(if_block1); 6385 transition_in(errormessage.$$.fragment, local); 6386 current = true; 6387 }, 6388 o(local) { 6389 transition_out(if_block0); 6390 transition_out(if_block1); 6391 transition_out(errormessage.$$.fragment, local); 6392 current = false; 6393 }, 6394 d(detaching) { 6395 if (detaching) { 6396 detach(t0); 6397 detach(div1); 6398 detach(t2); 6399 detach(div2); 6400 detach(t3); 6401 } 6402 6403 if (if_block0) if_block0.d(detaching); 6404 if (if_block1) if_block1.d(); 6405 destroy_component(errormessage, detaching); 6406 } 6407 }; 6408 } 6409 6410 function instance$W($$self, $$props, $$invalidate) { 6411 let { onMountCallback } = $$props; 6412 let { isDisabled } = $$props; 6413 let { providerError } = $$props; 6414 let { isLoaded } = $$props; 6415 let { isBusy } = $$props; 6416 let { error = null } = $$props; 6417 onMount(onMountCallback); 6418 6419 $$self.$$set = $$props => {
6420 if ('onMountCallback' in $$props) $$invalidate(5, onMountCallback = $$props.onMountCallback); 6421 if ('isDisabled' in $$props) $$invalidate(0, isDisabled = $$props.isDisabled); 6422 if ('providerError' in $$props) $$invalidate(1, providerError = $$props.providerError); 6423 if ('isLoaded' in $$props) $$invalidate(2, isLoaded = $$props.isLoaded); 6424 if ('isBusy' in $$props) $$invalidate(3, isBusy = $$props.isBusy); 6425 if ('error' in $$props) $$invalidate(4, error = $$props.error); 6426 }; 6427 6428 return [isDisabled, providerError, isLoaded, isBusy, error, onMountCallback]; 6429 } 6430 6431 class ZuoraPayment extends SvelteComponent { 6432 constructor(options) { 6433 super(); 6434 6435 init(this, options, instance$W, create_fragment$X, safe_not_equal, { 6436 onMountCallback: 5, 6437 isDisabled: 0, 6438 providerError: 1, 6439 isLoaded: 2, 6440 isBusy: 3, 6441 error: 4 6442 }); 6443 } 6444 } 6445 6446 /* src/components/elements/payment/zuora/ZuoraPreLoader.svelte generated by Svelte v4.2.12 */ 6447 6448 function create_fragment$W(ctx) { 6449 let script; 6450 let script_src_value; 6451 6452 return { 6453 c() { 6454 script = element("script"); 6455 script.innerHTML = ``; 6456 attr(script, "type", "text/javascript"); 6457 if (!src_url_equal(script.src, script_src_value = "https://static.zuora.com/Resources/libs/hosted/1.3.1/zuora-min.js")) attr(script, "src", script_src_value); 6458 attr(script, "onload", "window.zuoraLoadCallback()"); 6459 }, 6460 m(target, anchor) { 6461 append(document.head, script); 6462 }, 6463 p: noop, 6464 i: noop, 6465 o: noop, 6466 d(detaching) { 6467 detach(script); 6468 } 6469 }; 6470 } 6471 6472 function instance$V($$self, $$props, $$invalidate) { 6473 let { onMountCallback } = $$props; 6474 onMount(onMountCallback); 6475 6476 $$self.$$set = $$props => {
6477 if ('onMountCallback' in $$props) $$invalidate(0, onMountCallback = $$props.onMountCallback); 6478 }; 6479 6480 return [onMountCallback]; 6481 } 6482 6483 class ZuoraPreLoader extends SvelteComponent { 6484 constructor(options) { 6485 super(); 6486 init(this, options, instance$V, create_fragment$W, safe_not_equal, { onMountCallback: 0 }); 6487 } 6488 } 6489 6490 const paymentProviders = { 6491 BRAINTREE: 'braintree', 6492 STRIPE: 'stripe', 6493 ZUORA: 'zuora-billing', 6494 }; 6495 6496 const defaultHeaders = new Headers(); 6497 defaultHeaders.append("Content-Type", "application/json"); 6498 defaultHeaders.append("Accept", "application/json"); 6499 const request = async (url, options, formActions, busyKey = null, clearFormErrors = false) => { 6500 if (!clearFormErrors) { 6501 formActions.updateFormState({ 6502 serverErrors: [] 6503 }); 6504 } 6505 formActions.incrementRequestCount(busyKey); 6506 try { 6507 return await fetch(`${formActions.apiUrlBase}/${url}`, { 6508 method: options.method, 6509 body: options.bodyObject == null ? undefined : JSON.stringify(options.bodyObject), 6510 headers: defaultHeaders, 6511 credentials: "include" 6512 }); 6513 } 6514 finally { 6515 formActions.decrementRequestCount(busyKey); 6516 } 6517 }; 6518 6519 const isOneOffPurchase = (paymentOption) => paymentOption.type === 'ONE_OFF'; 6520 const getChangeSubscriptionPaymentConfiguration = (form, formState) => { 6521 const paymentConfig = formConfigAs(form); 6522 const environmentKey = formState.paymentOption?.virtualEnvironment || 'live'; 6523 if (formState.requiresPaymentMethodSetup && paymentConfig.paymentMethodSetupFormConfig) { 6524 const setupConfig = paymentConfig.paymentMethodSetupFormConfig[environmentKey]; 6525 if (setupConfig) { 6526 return setupConfig; 6527 } 6528 } 6529 // Virtual environments for change subscription 6530 if (paymentConfig.virtualEnvironmentsPaymentProviderFormConfig && 6531 formState.paymentOption?.virtualEnvironment) { 6532 const envConfig = paymentConfig.virtualEnvironmentsPaymentProviderFormConfig[environmentKey]; 6533 if (envConfig) { 6534 return envConfig; 6535 } 6536 } 6537 // 3. Fallback to regular config 6538 return paymentConfig.paymentProviderFormConfig; 6539 }; 6540 const mapToPayRequest = (form, formState, paymentProvider, vendorFields) => { 6541 if (formState.paymentOption.pricePointId) { 6542 return { 6543 url: `blaize/payment/${paymentProvider}/buy`, 6544 body: { 6545 product_id: formState.paymentOption.productId, 6546 price_point_id: formState.paymentOption.slug, 6547 discount_code: formState.promoCodeValid ? formState.promoCode : undefined, 6548 ...vendorFields 6549 } 6550 }; 6551 } 6552 let endpoint; 6553 let method; 6554 let changeSubscriptionBodyParams = {}; 6555 if (formConfigAs(form).changeSubscriptionMode || formState.convertCancelSubscriptionToAcceptOffer) { 6556 let subscriptionExternalId; 6557 if (formState.convertCancelSubscriptionToAcceptOffer) { 6558 // For cancel save offers, use the selected subscription 6559 subscriptionExternalId = formState.selectedSubscription.externalId; 6560 } 6561 else { 6562 // For regular change subscription, find from validChangeFromPlans 6563 const changingFromSubscription = formState 6564 .validChangeFromPlans 6565 .find(plan => formState.paymentOption.slug === plan.planSlug && formState.paymentOption.productId === plan.productId) 6566 .changesFromSubscription; 6567 subscriptionExternalId = changingFromSubscription.externalId; 6568 } 6569 endpoint = `subscriptions/${subscriptionExternalId}`; 6570 method = 'PATCH'; 6571 changeSubscriptionBodyParams = { 6572 navigated_from: `ChangeForm ${window.location.href}` 6573 }; 6574 } 6575 else if (isOneOffPurchase(formState.paymentOption)) { 6576 endpoint = 'payment/buy'; 6577 method = 'POST'; 6578 } 6579 else { 6580 endpoint = 'subscribe'; 6581 method = 'POST'; 6582 } 6583 return { 6584 url: `zephr/${endpoint}`, 6585 method, 6586 body: { 6587 product_id: formState.paymentOption.productId, 6588 plan_id: formState.paymentOption.slug, 6589 discount_code: formState.promoCodeValid ? formState.promoCode : undefined, 6590 ...changeSubscriptionBodyParams, 6591 vendor_fields: vendorFields ?? {} 6592 } 6593 }; 6594 }; 6595 6596 const tokenPath = 'blaize/payment/braintree/token'; 6597 let braintreeInstance; 6598 const loadBraintree = new Promise(function (resolve) { 6599 window.braintreeLoadCallback = resolve; 6600 }); 6601 // https://braintree.github.io/braintree-web-drop-in/docs/current/module-braintree-web-drop-in.html#~paypalCreateOptions 6602 const paypalConfiguration = (formState) => ({ 6603 flow: formState.paymentOption.type === 'ONE_OFF' ? 'checkout' : 'vault', 6604 singleUse: true, 6605 buttonStyle: { 6606 shape: 'rect', 6607 size: 'medium' 6608 }, 6609 // Show 'continue' button rather than 'pay now' on the PayPal modal 6610 commit: false, 6611 currency: formState.paymentOption.currencyCode.toLowerCase(), 6612 amount: formState.paymentOptionPrices.totalPrice, 6613 }); 6614 const getBraintreeToken = (formState, formActions) => request(tokenPath, { 6615 method: "GET" 6616 }, formActions, null, true) 6617 .then(response => response.json()) 6618 .then(json => json.token); 6619 const loadBraintreeUi = (form, formState, formActions) => { 6620 const paypalEnabled = formConfigAs(form).paymentProviderFormConfig?.enablePaypal; 6621 formActions.incrementRequestCount(); 6622 void loadBraintree 6623 .then(() => getBraintreeToken(formState, formActions)) 6624 .then((braintreeToken) => {
6625 window.braintree.dropin.create({ 6626 authorization: braintreeToken, 6627 container: '#braintree-dropin-container', 6628 ...(paypalEnabled ? { 6629 paypal: paypalConfiguration(formState) 6630 } : {}) 6631 }, (createErr, instance) => { 6632 formActions.decrementRequestCount(); 6633 braintreeInstance = instance; 6634 formActions.updateFormState({ 6635 paymentProviderFormLoaded: true, 6636 }); 6637 if (createErr) { 6638 throw createErr; 6639 } 6640 // If this is an existing user, they may already have a payment option and paymentMethodRequestable won't be fired 6641 if (braintreeInstance.isPaymentMethodRequestable()) { 6642 formActions.updateFormState({ 6643 paymentFormComplete: true 6644 }); 6645 } 6646 braintreeInstance.on('paymentMethodRequestable', () => { 6647 formActions.updateFormState({ 6648 paymentFormComplete: true 6649 }); 6650 }); 6651 braintreeInstance.on('noPaymentMethodRequestable', () => { 6652 formActions.updateFormState({ 6653 paymentFormComplete: false 6654 }); 6655 }); 6656 }); 6657 }).catch(err => { 6658 console.error(err); 6659 formActions.decrementRequestCount(); 6660 }); 6661 }; 6662 const braintreePay = async (form, formState, formActions) => { 6663 formActions.incrementRequestCount(); 6664 let resolveHandle, rejectHandle; 6665 const promise = new Promise((resolve, reject) => { resolveHandle = resolve, rejectHandle = reject; }); 6666 const success = () => { 6667 formActions.decrementRequestCount(); 6668 resolveHandle(); 6669 }; 6670 const errored = (err) => { 6671 console.error(err); 6672 formActions.decrementRequestCount(); 6673 rejectHandle(); 6674 }; 6675 braintreeInstance.requestPaymentMethod((err, payload) => { 6676 if (err || !payload) { 6677 errored(`Error requesting payment method ${JSON.stringify(err)}`); 6678 } 6679 const { url, body, method } = mapToPayRequest(form, formState, paymentProviders.BRAINTREE, { 6680 payment_nonce: payload.nonce, 6681 ...(payload.type === 'PayPalAccount' ? { paypal: true } : {}) 6682 }); 6683 return request(url, { 6684 method, 6685 bodyObject: body 6686 }, formActions) 6687 .then(response => { 6688 if (response?.ok) { 6689 success(); 6690 return; 6691 } 6692 errored(response); 6693 }).catch((err) => { 6694 errored(err); 6695 }); 6696 }); 6697 return promise; 6698 }; 6699 const braintreeChangePayment = async (form, formState, formActions) => { 6700 let resolveHandle, rejectHandle; 6701 const promise = new Promise((resolve, reject) => { resolveHandle = resolve, rejectHandle = reject; }); 6702 braintreeInstance.requestPaymentMethod((err, payload) => { 6703 if (err || !payload) { 6704 console.error(`Error requesting payment method ${JSON.stringify(err)}`); 6705 } 6706 return request(`blaize/payment/braintree/subscriptions/${formState.selectedSubscription?.externalId}`, { 6707 method: 'PATCH', 6708 bodyObject: { 6709 payment_method_nonce: payload?.nonce, 6710 } 6711 }, formActions) 6712 .then(response => { 6713 console.log(response); 6714 if (response?.ok) { 6715 resolveHandle(); 6716 return; 6717 } 6718 rejectHandle(response); 6719 }).catch((err) => { 6720 rejectHandle(err); 6721 }); 6722 }); 6723 return promise; 6724 }; 6725 6726 /** 6727 * Mobile (Social) payment services 6728 * 6729 * note: Using a string-backed enum here for better debug logging. 6730 */ 6731 var MobilePaymentService; 6732 (function (MobilePaymentService) { 6733 MobilePaymentService["GOOGLE_PAY"] = "GOOGLE_PAY"; 6734 MobilePaymentService["APPLE_PAY"] = "APPLE_PAY"; 6735 })(MobilePaymentService || (MobilePaymentService = {})); 6736 6737 const loadGooglePay$1 = new Promise(function (resolve) { 6738 window.googlePayLoadBraintreeCallback = resolve; 6739 }); 6740 const loadBraintreeApplePay = new Promise(function (resolve) { 6741 window.applePayLoadBraintreeCallback = resolve; 6742 }); 6743 const braintreePayWithMobile = (form, formState, formActions) => { 6744 const { url, body, method } = mapToPayRequest(form, formState, paymentProviders.BRAINTREE, { 6745 payment_nonce: formState.mobilePaymentMethodId, 6746 vault_payment_method: true 6747 }); 6748 return request(url, { 6749 method, 6750 bodyObject: body 6751 }, formActions) 6752 .then(response => { 6753 if (!response?.ok) { 6754 throw JSON.stringify(response); 6755 } 6756 }); 6757 }; 6758 const configureBraintreeMobilePayments = async (form, formState, formActions) => { 6759 await configureBraintreeGooglePay(form, formState, formActions); 6760 await configureBraintreeApplePay(form, formState, formActions); 6761 }; 6762 const configureBraintreeGooglePay = (form, formState, formActions) => { 6763 const braintreeMobilePaymentConfig = JSON.parse(form.organisationConfiguration?.braintreeMobilePaymentConfig ?? "{}"); 6764 let googlePaymentsClient; 6765 return loadGooglePay$1 6766 .then(() => { 6767 const container = document.getElementById('google-pay-button'); 6768 // Empty the container 6769 while (container.firstChild) { 6770 container.removeChild(container.lastChild); 6771 } 6772 // No need to show the user any errors here just hide the button 6773 if (!braintreeMobilePaymentConfig?.google) { 6774 container.style.display = 'none'; 6775 console.error("Braintree Mobile payments are not configured in the console"); 6776 return; 6777 } 6778 formState = formActions.getFormState(); 6779 googlePaymentsClient = new window.google.payments.api.PaymentsClient({ 6780 environment: form.organisationConfiguration.braintreeSandboxEnv ? 'TEST' : 'PRODUCTION' 6781 }); 6782 void loadBraintree 6783 .then(() => getBraintreeToken(formState, formActions)) 6784 .then((braintreeToken) => { 6785 window.braintree.client.create({ 6786 authorization: braintreeToken 6787 }, (createErr, clientInstance) => { 6788 // Empty the container 6789 while (container.firstChild) { 6790 container.removeChild(container.lastChild); 6791 } 6792 if (createErr) { 6793 // No need to show the user any errors here just hide the button 6794 console.error("Error creating braintree client", createErr); 6795 container.style.display = 'none'; 6796 return; 6797 } 6798 window.braintree.googlePayment.create({ 6799 client: clientInstance, 6800 googlePayVersion: 2, 6801 googleMerchantId: braintreeMobilePaymentConfig.google.googleMerchantId 6802 }, (googlePaymentErr, googlePaymentInstance) => { 6803 if (googlePaymentErr) { 6804 // No need to show the user any errors here just hide the button 6805 console.error("Error creating braintree client", googlePaymentErr); 6806 container.style.display = 'none'; 6807 return; 6808 } 6809 googlePaymentsClient.isReadyToPay({ 6810 apiVersion: 2, 6811 apiVersionMinor: 0, 6812 allowedPaymentMethods: googlePaymentInstance.createPaymentDataRequest().allowedPaymentMethods, 6813 existingPaymentMethodRequired: true, 6814 }).then((response) => { 6815 if (!response.result || !response.paymentMethodPresent) { 6816 container.style.display = 'none'; 6817 console.error(response.paymentMethodPresent ? "Google Pay supp
6817ort not found" : "No payment method"); 6818 formActions.updateFormState({ 6819 serverErrors: [ServerError.MOBILE_PAYMENT_PROCESSING_ERROR] 6820 }); 6821 logDataLayerEvent(form, 'zephr_form_error', { 6822 error: ServerError[ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 6823 }); 6824 } 6825 container.appendChild(googlePaymentsClient.createButton({ 6826 buttonColor: 'default', 6827 buttonType: 'plain', 6828 buttonSizeMode: 'fill', 6829 onClick: () => { 6830 onClickPaymentButton$1(form, formState, formActions, googlePaymentInstance, googlePaymentsClient); 6831 }, 6832 })); 6833 }); 6834 }); 6835 }); 6836 }); 6837 }); 6838 }; 6839 const onClickPaymentButton$1 = (form, formState, formActions, googlePaymentInstance, googlePaymentsClient) => { 6840 formActions.updateFormState({ 6841 mobilePaymentService: MobilePaymentService.GOOGLE_PAY, 6842 serverErrors: [], 6843 }); 6844 const paymentDataRequest = googlePaymentInstance.createPaymentDataRequest({ 6845 transactionInfo: { 6846 currencyCode: formState.paymentOption.currencyCode, 6847 totalPriceStatus: 'FINAL', 6848 totalPrice: formState.paymentOptionPrices.totalPrice.toFixed(2) 6849 }, 6850 emailRequired: false, 6851 shippingAddressRequired: false 6852 }); 6853 googlePaymentsClient.loadPaymentData(paymentDataRequest).then(function (paymentData) { 6854 googlePaymentInstance.parseResponse(paymentData, (err, result) => { 6855 if (err || !result.nonce) { 6856 formActions.updateFormState({ 6857 serverErrors: [ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 6858 mobilePaymentService: null, 6859 }); 6860 console.error('Error requesting payment data', err, result); 6861 logDataLayerEvent(form, 'zephr_form_error', { 6862 error: ServerError[ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 6863 }); 6864 return; 6865 } 6866 formActions.updateFormState({ 6867 mobilePaymentMethodId: result.nonce 6868 }); 6869 formActions.completeSection(); 6870 }); 6871 }).catch(function (err) { 6872 // If we get heree, the user may have just closed the modal without paying. 6873 // Not sure if we should be showing an error in that case, but we cant distinguish 6874 // it from other failure cases https://developers.google.com/pay/api/web/reference/client#errors_1 6875 console.warn('Error requesting payment data', err); 6876 formActions.updateFormState({ 6877 mobilePaymentService: null, 6878 serverErrors: [ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 6879 }); 6880 logDataLayerEvent(form, 'zephr_form_error', { 6881 error: ServerError[ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 6882 }); 6883 }); 6884 }; 6885 const configureBraintreeApplePay = (form, formState, formActions) => { 6886 const apple_container = document.getElementById('apple_pay_button'); 6887 while (apple_container.firstChild) { 6888 apple_container.removeChild(apple_container.lastChild); 6889 } 6890 return loadBraintreeApplePay 6891 .then(() => { 6892 if (!(window.ApplePaySession && window.ApplePaySession.supportsVersion(3) && window.ApplePaySession.canMakePayments())) { 6893 apple_container.style.display = 'none'; 6894 console.log('Cannot make payments with Apple Pay'); 6895 return; 6896 } 6897 return loadBraintree 6898 .then(() => getBraintreeToken(formState, formActions)) 6899 .then((braintreeToken) => { 6900 window.braintree.client.create({ 6901 authorization: braintreeToken 6902 }, (clientErr, clientInstance) => { 6903 if (clientErr) { 6904 apple_container.style.display = 'none'; 6905 console.error('Error creating braintree client:', clientErr); 6906 return; 6907 } 6908 window.braintree.applePay.create({ 6909 client: clientInstance 6910 }, function (applePayErr, applePayInstance) { 6911 while (apple_container.firstChild) { 6912 apple_container.removeChild(apple_container.lastChild); 6913 } 6914 if (applePayErr) { 6915 apple_container.style.display = 'none'; 6916 console.error('Error creating applePayInstance:', applePayErr); 6917 return; 6918 } 6919 const paymentRequest = applePayInstance.createPaymentRequest({ 6920 total: { 6921 label: formState.paymentOption.label, 6922 amount: formState.paymentOptionPrices.totalPrice.toFixed(2) 6923 } 6924 }); 6925 const applePayDiv = document.createElement("div"); 6926 applePayDiv.classList.add("apple-pay-button"); 6927 applePayDiv.classList.add("apple-pay-button-black"); 6928 apple_container.appendChild(applePayDiv); 6929 applePayDiv.addEventListener('click', function () { 6930 onClickApplePayment(form, formState, formActions, paymentRequest, applePayInstance); 6931 }); 6932 }); 6933 }); 6934 }); 6935 }); 6936 }; 6937 const onClickApplePayment = (form, formState, formActions, paymentRequest, applePayInstance) => { 6938 formActions.updateFormState({ 6939 mobilePaymentService: MobilePaymentService.APPLE_PAY, 6940 serverErrors: [], 6941 }); 6942 const session = new ApplePaySession(3, paymentRequest); 6943 session.onvalidatemerchant = function (event) { 6944 applePayInstance.performValidation({ 6945 validationURL: event.validationURL, 6946 displayName: formState.paymentOption.label 6947 }, function (err, merchantSession) { 6948 if (err) { 6949 formActions.updateFormState({ 6950 serverErrors: [ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 6951 mobilePaymentService: null, 6952 }); 6953 console.log('err in onvalidatemerchant in apple pay configuration: ', err); 6954 logDataLayerEvent(form, 'zephr_form_error', { 6955 error: ServerError[ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 6956 }); 6957 return; 6958 } 6959 session.completeMerchantValidation(merchantSession); 6960 }); 6961 }; 6962 session.onpaymentauthorized = function (event) { 6963 applePayInstance.tokenize({ 6964 token: event.payment.token 6965 }, function (tokenizeErr, payload) { 6966 if (tokenizeErr) { 6967 formActions.updateFormState({ 6968 serverErrors: [ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 6969 mobilePaymentService: null, 6970 }); 6971 console.error('Error tokenizing Apple Pay:', tokenizeErr); 6972 logDataLayerEvent(form, 'zephr_form_error', { 6973 error: ServerError[ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 6974 }); 6975 session.completePayment(ApplePaySession.STATUS_FAILURE); 6976 return; 6977 } 6978 formActions.updateFormState({ 6979 mobilePaymentMethodId: payload.nonce 6980 }); 6981 formActions.completeSection(); 6982 session.completePayment(ApplePaySession.STATUS_SUCCESS); 6983 }); 6984 }; 6985 session.begin(); 6986 }; 6987 6988 const invalidCurrencySymbol = '¤'; 6989 const roundingErrorSmallNumber = 0.00001; 6990 const formatFromCurrencyCode = (price, currencyCode) => new Intl.NumberFormat(undefined, { 6991 style: 'currency', 6992 currency: currencyCode, 6993 minimumFractionDigits: Math.abs(price) % 1 < roundingErrorSmallNumber ? 0 : undefined, 6994 maximumFractionDigits: Math.abs(price) % 1 < roundingErrorSmallNumber ? 0 : 2, 6995 }).format(price);
6996 const formatFromCurrencySymbol = (price, currencySymbol) => currencySymbol?.length === 1 ? 6997 `${currencySymbol}${price}` : 6998 `${price} ${currencySymbol}`.trim(); 6999 /** 7000 * currency might either be a symbol ($,£,etc) or a code (GBP,EUR) 7001 */ 7002 const formatCurrency = (price, currency) => { 7003 try { 7004 if (currency?.length === 3) { 7005 const formatted = formatFromCurrencyCode(price, currency); 7006 if (!formatted.includes(invalidCurrencySymbol)) { 7007 return formatted; 7008 } 7009 } 7010 } 7011 catch (e) { 7012 console.warn(`Error formatting currency for symbol ${currency}`, e); 7013 } 7014 return formatFromCurrencySymbol(price, currency); 7015 }; 7016 7017 const getProductAddons = async (form, formState, formActions, skipMobileReload = false) => { 7018 const providerConfig = paymentProviderFor(form.organisationConfiguration.paymentProvider); 7019 if (!providerConfig.hasProductAddons || !(formState.loginRegistrationComplete || formState.userSession)) { 7020 return Promise.resolve(formState); 7021 } 7022 return request(providerConfig.productAddonPath, { 7023 method: 'POST', 7024 bodyObject: { 7025 promoCode: formState.promoCodeValid ? formState.promoCode : null, 7026 paymentOptions: formConfigAs(form).paymentOptions 7027 } 7028 }, formActions, null, true) 7029 .then(async (response) => { 7030 if (!response.ok) { 7031 console.log("error loading product addons", response); 7032 logDataLayerEvent(form, 'zephr_form_error', { 7033 error: ServerError[ServerError.UNKNOWN], 7034 }); 7035 return formActions.updateFormState({ 7036 addons: [], 7037 serverErrors: [ServerError.UNKNOWN] 7038 }); 7039 } 7040 const json = await response.json(); 7041 try { 7042 const addons = json.map(addon => ({ 7043 id: addon.id, 7044 label: addon.label, 7045 planPrices: addon.paymentOptions.map(planAddon => ({ 7046 planSlug: planAddon.slug, 7047 productId: planAddon.productId, 7048 addonPrice: planAddon.addonPrice 7049 })) 7050 })); 7051 return formActions.updateFormState({ 7052 addons 7053 }); 7054 } 7055 catch (err) { 7056 console.error("Error parsing product addons response", err, json); 7057 return formState; 7058 } 7059 }).then(async (updatedFormState) => { 7060 if (!skipMobileReload) { 7061 await afterProductAddonChange(form, updatedFormState, formActions); 7062 } 7063 return updatedFormState; 7064 }); 7065 }; 7066 /* 7067 If we're using mobile payment and we're on the payment screen, 7068 we'll need to reload the mobile payment button so it has the discounted amount 7069 and make sure they can't press the button while the button is updating 7070 */ 7071 const afterProductAddonChange = async (form, formState, formActions) => { 7072 if (formState.currentSection.elements.some(element => element.type === elementTypes.MOBILE_PAYMENT && element.config?.enabled !== false)) { 7073 formActions.incrementRequestCount(); 7074 try { 7075 // Only reload mobile payment service if the provider actually supports mobile payments 7076 if (supportsMobilePayments(form.organisationConfiguration.paymentProvider)) { 7077 await mobilePaymentServiceFor(form.organisationConfiguration.paymentProvider).loader(form, formState, formActions); 7078 } 7079 } 7080 finally { 7081 formActions.decrementRequestCount(); 7082 } 7083 } 7084 }; 7085 const addonsForPlan = (formState) => formState.addons.map(addon => { 7086 const plan = addon.planPrices 7087 .find(plan => plan.planSlug === formState.paymentOption.slug && plan.productId === formState.paymentOption.productId); 7088 return plan && { 7089 label: addon.label, 7090 addonPrice: plan.addonPrice, 7091 addonPriceFormattedString: formatCurrency(plan.addonPrice, formState.paymentOption.currencyCode) 7092 }; 7093 }).filter(o => o); 7094 7095 /** 7096 * Calculate the actual prices for a payment option, considering: 7097 * - The payment option 7098 * - Discount code 7099 * 7100 * Try not to run the calculation if the inputs have not changed from the previous calculation. 7101 */ 7102 const calculatePrices = async (form, formState, formActions) => { 7103 if (formState.paymentOptionPrices != null 7104 && formState.paymentOptionPrices.productId === formState.paymentOption.productId 7105 && formState.paymentOptionPrices.slug === formState.paymentOption.slug 7106 && formState.paymentOptionPrices.promoCode === formState.promoCode 7107 && formState.paymentOptionPrices.addonPrices == addonsForPlan(formState) 7108 && formState.paymentOptionPrices.billingAddress.country === formState.billingAddress.country 7109 && formState.paymentOptionPrices.billingAddress.postalCode === formState.billingAddress.postalCode 7110 // // This is a bit of a fudge but we know that there are only addons for braintree where the price calculation is non-io 7111 && formState.paymentOptionPrices.addonPrices.length == 0 7112 && addonsForPlan(formState).length == 0) { 7113 return formState; 7114 } 7115 formActions.updateFormState({ 7116 paymentOptionPrices: null 7117 }); 7118 const paymentOptionPrices = await paymentProviderFor(form.organisationConfiguration.paymentProvider).priceCalculator(form, formState, formActions); 7119 return formActions.updateFormState({ 7120 paymentOptionPrices 7121 }); 7122 }; 7123 7124 // See https://stripe.com/docs/currencies 7125 const currencies = [ 7126 "BIF", 7127 "CLP", 7128 "DJF", 7129 "GNF", 7130 "JPY", 7131 "KMF",
7132 "KRW", 7133 "MGA", 7134 "PYG", 7135 "RWF", 7136 "UGX", 7137 "VND", 7138 "VUV", 7139 "XAF", 7140 "XOF", 7141 "XPF", 7142 ]; 7143 const isZeroDecimalCurrency = currencyCode => currencies.includes(currencyCode); 7144 7145 const stripePaymentElementAppearance = (siteStyles) => { 7146 const stylesObj = JSON.parse(siteStyles ?? "{}"); 7147 return { 7148 variables: { 7149 color: stylesObj?.color?.text?.main ?? '#32325d', 7150 fontFamily: `${stylesObj?.typography?.body?.font}, ${stylesObj?.typography?.body?.fallbackFont}, "Helvetica Neue", Helvetica, sans-serif`, 7151 fontSmooth: 'always', 7152 fontSizeBase: '16px', 7153 colorWarningText: stylesObj?.color?.warning?.main ?? '#fa755a', 7154 colorIconCardError: stylesObj?.color?.warning?.main ?? '#fa755a', 7155 borderRadius: `${(stylesObj?.input?.borderRadius ?? '4')}px` 7156 }, 7157 rules: { 7158 '.Input::placeholder': { 7159 color: '#aab7c4' 7160 }, 7161 } 7162 }; 7163 }; 7164 const stripeCardElementStyle = { 7165 base: { 7166 color: '#32325d', 7167 fontFamily: '"Helvetica Neue", Helvetica, sans-serif', 7168 fontSmoothing: 'antialiased', 7169 fontSize: '16px', 7170 '::placeholder': { 7171 color: '#aab7c4' 7172 } 7173 }, 7174 invalid: { 7175 color: '#fa755a', 7176 iconColor: '#fa755a' 7177 } 7178 }; 7179 const createStripePaymentElement = (stripe, form, formActions) => { 7180 const formState = formActions.getFormState(); 7181 const currencyMultiplier = isZeroDecimalCurrency(formState.paymentOption.currencyCode.toUpperCase()) ? 1 : 100; 7182 const elements = stripe.elements({ 7183 mode: 'payment', 7184 currency: formState.paymentOption.currencyCode.toLowerCase(), 7185 amount: parseFloat((formState.paymentOptionPrices.totalPrice * currencyMultiplier).toFixed(2)), 7186 setup_future_usage: 'off_session', 7187 appearance: stripePaymentElementAppearance(form.organisationConfiguration.siteStyles), 7188 paymentMethodTypes: ['card'] 7189 }); 7190 return elements.create('payment', { 7191 terms: { 7192 card: 'never' 7193 }, 7194 wallets: { 7195 applePay: 'never', 7196 googlePay: 'never' 7197 } 7198 }); 7199 }; 7200 const createStripeCardElement = (stripe) => { 7201 return stripe.elements().create('card', { style: stripeCardElementStyle }); 7202 }; 7203 const createStripeElement = (stripe, form, formActions) => { 7204 if (form.organisationConfiguration.stripeAutomaticTaxEnabled && form.formType !== FormType.LIST_SUBSCRIPTIONS 7205 || formConfigAs(form).paymentProviderFormConfig?.usePaymentElement) { 7206 return createStripePaymentElement(stripe, form, formActions); 7207 } 7208 else { 7209 return createStripeCardElement(stripe); 7210 } 7211 }; 7212 7213 /*! 7214 * mustache.js - Logic-less {{mustache}} templates with JavaScript 7215 * http://github.com/janl/mustache.js 7216 */ 7217 7218 var objectToString = Object.prototype.toString; 7219 var isArray = Array.isArray || function isArrayPolyfill (object) { 7220 return objectToString.call(object) === '[object Array]'; 7221 }; 7222 7223 function isFunction (object) { 7224 return typeof object === 'function'; 7225 } 7226 7227 /** 7228 * More correct typeof string handling array 7229 * which normally returns typeof 'object' 7230 */ 7231 function typeStr (obj) { 7232 return isArray(obj) ? 'array' : typeof obj; 7233 } 7234 7235 function escapeRegExp (string) { 7236 return string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&'); 7237 } 7238 7239 /** 7240 * Null safe way of checking whether or not an object, 7241 * including its prototype, has a given property 7242 */ 7243 function hasProperty (obj, propName) { 7244 return obj != null && typeof obj === 'object' && (propName in obj); 7245 } 7246 7247 /** 7248 * Safe way of detecting whether or not the given thing is a primitive and 7249 * whether it has the given property 7250 */ 7251 function primitiveHasOwnProperty (primitive, propName) { 7252 return ( 7253 primitive != null 7254 && typeof primitive !== 'object' 7255 && primitive.hasOwnProperty 7256 && primitive.hasOwnProperty(propName) 7257 ); 7258 } 7259 7260 // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577 7261 // See https://github.com/janl/mustache.js/issues/189 7262 var regExpTest = RegExp.prototype.test; 7263 function testRegExp (re, string) { 7264 return regExpTest.call(re, string); 7265 } 7266 7267 var nonSpaceRe = /\S/; 7268 function isWhitespace (string) { 7269 return !testRegExp(nonSpaceRe, string); 7270 } 7271 7272 var entityMap = { 7273 '&': '&', 7274 '<': '<', 7275 '>': '>', 7276 '"': '"', 7277 "'": ''', 7278 '/': '/', 7279 '`': '`', 7280 '=': '=' 7281 }; 7282 7283 function escapeHtml (string) { 7284 return String(string).replace(/[&<>
vendor: 18,467 bytes, lines 7284-7847
7284"'`=\/]/g, function fromEntityMap (s) { 7285 return entityMap[s]; 7286 }); 7287 } 7288 7289 var whiteRe = /\s*/; 7290 var spaceRe = /\s+/; 7291 var equalsRe = /\s*=/; 7292 var curlyRe = /\s*\}/; 7293 var tagRe = /#|\^|\/|>|\{|&|=|!/; 7294 7295 /** 7296 * Breaks up the given `template` string into a tree of tokens. If the `tags` 7297 * argument is given here it must be an array with two string values: the 7298 * opening and closing tags used in the template (e.g. [ "<%", "%>" ]). Of 7299 * course, the default is to use mustaches (i.e. mustache.tags). 7300 * 7301 * A token is an array with at least 4 elements. The first element is the 7302 * mustache symbol that was used inside the tag, e.g. "#" or "&". If the tag 7303 * did not contain a symbol (i.e. {{myValue}}) this element is "name". For 7304 * all text that appears outside a symbol this element is "text". 7305 * 7306 * The second element of a token is its "value". For mustache tags this is 7307 * whatever else was inside the tag besides the opening symbol. For text tokens 7308 * this is the text itself. 7309 * 7310 * The third and fourth elements of the token are the start and end indices, 7311 * respectively, of the token in the original template. 7312 * 7313 * Tokens that are the root node of a subtree contain two more elements: 1) an 7314 * array of tokens in the subtree and 2) the index in the original template at 7315 * which the closing tag for that section begins. 7316 * 7317 * Tokens for partials also contain two more elements: 1) a string value of 7318 * indendation prior to that tag and 2) the index of that tag on that line - 7319 * eg a value of 2 indicates the partial is the third tag on this line. 7320 */ 7321 function parseTemplate (template, tags) { 7322 if (!template) 7323 return []; 7324 var lineHasNonSpace = false; 7325 var sections = []; // Stack to hold section tokens 7326 var tokens = []; // Buffer to hold the tokens 7327 var spaces = []; // Indices of whitespace tokens on the current line 7328 var hasTag = false; // Is there a {{tag}} on the current line? 7329 var nonSpace = false; // Is there a non-space char on the current line? 7330 var indentation = ''; // Tracks indentation for tags that use it 7331 var tagIndex = 0; // Stores a count of number of tags encountered on a line 7332 7333 // Strips all whitespace tokens array for the current line 7334 // if there was a {{#tag}} on it and otherwise only space. 7335 function stripSpace () { 7336 if (hasTag && !nonSpace) { 7337 while (spaces.length) 7338 delete tokens[spaces.pop()]; 7339 } else { 7340 spaces = []; 7341 } 7342 7343 hasTag = false; 7344 nonSpace = false; 7345 } 7346 7347 var openingTagRe, closingTagRe, closingCurlyRe; 7348 function compileTags (tagsToCompile) { 7349 if (typeof tagsToCompile === 'string') 7350 tagsToCompile = tagsToCompile.split(spaceRe, 2); 7351 7352 if (!isArray(tagsToCompile) || tagsToCompile.length !== 2) 7353 throw new Error('Invalid tags: ' + tagsToCompile); 7354 7355 openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\s*'); 7356 closingTagRe = new RegExp('\\s*' + escapeRegExp(tagsToCompile[1])); 7357 closingCurlyRe = new RegExp('\\s*' + escapeRegExp('}' + tagsToCompile[1])); 7358 } 7359 7360 compileTags(tags || mustache.tags); 7361 7362 var scanner = new Scanner(template); 7363 7364 var start, type, value, chr, token, openSection; 7365 while (!scanner.eos()) { 7366 start = scanner.pos; 7367 7368 // Match any text between tags. 7369 value = scanner.scanUntil(openingTagRe); 7370 7371 if (value) { 7372 for (var i = 0, valueLength = value.length; i < valueLength; ++i) { 7373 chr = value.charAt(i); 7374 7375 if (isWhitespace(chr)) { 7376 spaces.push(tokens.length); 7377 indentation += chr; 7378 } else { 7379 nonSpace = true; 7380 lineHasNonSpace = true; 7381 indentation += ' '; 7382 } 7383 7384 tokens.push([ 'text', chr, start, start + 1 ]); 7385 start += 1; 7386 7387 // Check for whitespace on the current line. 7388 if (chr === '\n') { 7389 stripSpace(); 7390 indentation = ''; 7391 tagIndex = 0; 7392 lineHasNonSpace = false; 7393 } 7394 } 7395 } 7396 7397 // Match the opening tag. 7398 if (!scanner.scan(openingTagRe)) 7399 break; 7400 7401 hasTag = true; 7402 7403 // Get the tag type. 7404 type = scanner.scan(tagRe) || 'name'; 7405 scanner.scan(whiteRe); 7406 7407 // Get the tag value. 7408 if (type === '=') { 7409 value = scanner.scanUntil(equalsRe); 7410 scanner.scan(equalsRe); 7411 scanner.scanUntil(closingTagRe); 7412 } else if (type === '{') { 7413 value = scanner.scanUntil(closingCurlyRe); 7414 scanner.scan(curlyRe); 7415 scanner.scanUntil(closingTagRe); 7416 type = '&'; 7417 } else { 7418 value = scanner.scanUntil(closingTagRe); 7419 } 7420 7421 // Match the closing tag. 7422 if (!scanner.scan(closingTagRe)) 7423 throw new Error('Unclosed tag at ' + scanner.pos); 7424 7425 if (type == '>') { 7426 token = [ type, value, start, scanner.pos, indentation, tagIndex, lineHasNonSpace ]; 7427 } else { 7428 token = [ type, value, start, scanner.pos ]; 7429 } 7430 tagIndex++; 7431 tokens.push(token); 7432 7433 if (type === '#' || type === '^') { 7434 sections.push(token); 7435 } else if (type === '/') { 7436 // Check section nesting. 7437 openSection = sections.pop(); 7438 7439 if (!openSection) 7440 throw new Error('Unopened section "' + value + '" at ' + start); 7441 7442 if (openSection[1] !== value) 7443 throw new Error('Unclosed section "' + openSection[1] + '" at ' + start); 7444 } else if (type === 'name' || type === '{' || type === '&') { 7445 nonSpace = true; 7446 } else if (type === '=') { 7447 // Set the tags for the next time around. 7448 compileTags(value); 7449 } 7450 } 7451 7452 stripSpace(); 7453 7454 // Make sure there are no open sections when we're done. 7455 openSection = sections.pop(); 7456 7457 if (openSection) 7458 throw new Error('Unclosed section "' + openSection[1] + '" at ' + scanner.pos); 7459 7460 return nestTokens(squashTokens(tokens)); 7461 } 7462 7463 /** 7464 * Combines the values of consecutive text tokens in the given `tokens` array 7465 * to a single token. 7466 */ 7467 function squashTokens (tokens) { 7468 var squashedTokens = []; 7469 7470 var token, lastToken; 7471 for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) { 7472 token = tokens[i]; 7473 7474 if (token) { 7475 if (token[0] === 'text' && lastToken && lastToken[0] === 'text') { 7476 lastToken[1] += token[1]; 7477 lastToken[3] = token[3]; 7478 } else { 7479 squashedTokens.push(token); 7480 lastToken = token; 7481 } 7482 } 7483 } 7484 7485 return squashedTokens; 7486 } 7487 7488 /** 7489 * Forms the given array of `tokens` into a nested tree structure where 7490 * tokens that represent a section have two additional items: 1) an array of 7491 * all tokens that appear in that section and 2) the index in the original 7492 * template that represents the end of that section. 7493 */ 7494 function nestTokens (tokens) { 7495 var nestedTokens = []; 7496 var collector = nestedTokens; 7497 var sections = []; 7498 7499 var token, section; 7500 for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) { 7501 token = tokens[i]; 7502 7503 switch (token[0]) { 7504 case '#': 7505 case '^': 7506 collector.push(token); 7507 sections.push(token); 7508 collector = token[4] = []; 7509 break; 7510 case '/': 7511 section = sections.pop(); 7512 section[5] = token[2]; 7513 collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens; 7514 break; 7515 default: 7516 collector.push(token); 7517 } 7518 } 7519 7520 return nestedTokens; 7521 } 7522 7523 /** 7524 * A simple string scanner that is used by the template parser to find 7525 * tokens in template strings. 7526 */ 7527 function Scanner (string) { 7528 this.string = string; 7529 this.tail = string; 7530 this.pos = 0; 7531 } 7532 7533 /** 7534 * Returns `true` if the tail is empty (end of string). 7535 */ 7536 Scanner.prototype.eos = function eos () { 7537 return this.tail === ''; 7538 }; 7539 7540 /** 7541 * Tries to match the given regular expression at the current position. 7542 * Returns the matched text if it can match, the empty string otherwise. 7543 */ 7544 Scanner.prototype.scan = function scan (re) { 7545 var match = this.tail.match(re); 7546 7547 if (!match || match.index !== 0) 7548 return ''; 7549 7550 var string = match[0]; 7551 7552 this.tail = this.tail.substring(string.length); 7553 this.pos += string.length; 7554 7555 return string; 7556 }; 7557 7558 /** 7559 * Skips all text until the given regular expression can be matched. Returns 7560 * the skipped string, which is the entire tail if no match can be made. 7561 */ 7562 Scanner.prototype.scanUntil = function scanUntil (re) { 7563 var index = this.tail.search(re), match; 7564 7565 switch (index) { 7566 case -1: 7567 match = this.tail; 7568 this.tail = ''; 7569 break; 7570 case 0: 7571 match = ''; 7572 break; 7573 default: 7574 match = this.tail.substring(0, index); 7575 this.tail = this.tail.substring(index); 7576 } 7577 7578 this.pos += match.length; 7579 7580 return match; 7581 }; 7582 7583 /** 7584 * Represents a rendering context by wrapping a view object and 7585 * maintaining a reference to the parent context. 7586 */ 7587 function Context (view, parentContext) { 7588 this.view = view; 7589 this.cache = { '.': this.view }; 7590 this.parent = parentContext; 7591 } 7592 7593 /** 7594 * Creates a new context using the given view with this context 7595 * as the parent. 7596 */ 7597 Context.prototype.push = function push (view) { 7598 return new Context(view, this); 7599 }; 7600 7601 /** 7602 * Returns the value of the given name in this context, traversing 7603 * up the context hierarchy if the value is absent in this context's view. 7604 */ 7605 Context.prototype.lookup = function lookup (name) { 7606 var cache = this.cache; 7607 7608 var value; 7609 if (cache.hasOwnProperty(name)) { 7610 value = cache[name]; 7611 } else { 7612 var context = this, intermediateValue, names, index, lookupHit = false; 7613 7614 while (context) { 7615 if (name.indexOf('.') > 0) { 7616 intermediateValue = context.view; 7617 names = name.split('.'); 7618 index = 0; 7619 7620 /** 7621 * Using the dot notion path in `name`, we descend through the 7622 * nested objects. 7623 * 7624 * To be certain that the lookup has been successful, we have to 7625 * check if the last object in the path actually has the property 7626 * we are looking for. We store the result in `lookupHit`. 7627 * 7628 * This is specially necessary for when the value has been set to 7629 * `undefined` and we want to avoid looking up parent contexts. 7630 * 7631 * In the case where dot notation is used, we consider the lookup 7632 * to be successful even if the last "object" in the path is 7633 * not actually an object but a primitive (e.g., a string, or an 7634 * integer), because it is sometimes useful to access a property 7635 * of an autoboxed primitive, such as the length of a string. 7636 **/ 7637 while (intermediateValue != null && index < names.length) { 7638 if (index === names.length - 1) 7639 lookupHit = ( 7640 hasProperty(intermediateValue, names[index]) 7641 || primitiveHasOwnProperty(intermediateValue, names[index]) 7642 ); 7643 7644 intermediateValue = intermediateValue[names[index++]]; 7645 } 7646 } else { 7647 intermediateValue = context.view[name]; 7648 7649 /** 7650 * Only checking against `hasProperty`, which always returns `false` if 7651 * `context.view` is not an object. Deliberately omitting the check 7652 * against `primitiveHasOwnProperty` if dot notation is not used. 7653 * 7654 * Consider this example: 7655 * ``` 7656 * Mustache.render("The length of a football field is {{#length}}{{length}}{{/length}}.", {length: "100 yards"}) 7657 * ``` 7658 * 7659 * If we were to check also against `primitiveHasOwnProperty`, as we do 7660 * in the dot notation case, then render call would return: 7661 * 7662 * "The length of a football field is 9." 7663 * 7664 * rather than the expected: 7665 * 7666 * "The length of a football field is 100 yards." 7667 **/ 7668 lookupHit = hasProperty(context.view, name); 7669 } 7670 7671 if (lookupHit) { 7672 value = intermediateValue; 7673 break; 7674 } 7675 7676 context = context.parent; 7677 } 7678 7679 cache[name] = value; 7680 } 7681 7682 if (isFunction(value)) 7683 value = value.call(this.view); 7684 7685 return value; 7686 }; 7687 7688 /** 7689 * A Writer knows how to take a stream of tokens and render them to a 7690 * string, given a context. It also maintains a cache of templates to 7691 * avoid the need to parse the same template twice. 7692 */ 7693 function Writer () { 7694 this.templateCache = { 7695 _cache: {}, 7696 set: function set (key, value) { 7697 this._cache[key] = value; 7698 }, 7699 get: function get (key) { 7700 return this._cache[key]; 7701 }, 7702 clear: function clear () { 7703 this._cache = {}; 7704 } 7705 }; 7706 } 7707 7708 /** 7709 * Clears all cached templates in this writer. 7710 */ 7711 Writer.prototype.clearCache = function clearCache () { 7712 if (typeof this.templateCache !== 'undefined') { 7713 this.templateCache.clear(); 7714 } 7715 }; 7716 7717 /** 7718 * Parses and caches the given `template` according to the given `tags` or 7719 * `mustache.tags` if `tags` is omitted, and returns the array of tokens 7720 * that is generated from the parse. 7721 */ 7722 Writer.prototype.parse = function parse (template, tags) { 7723 var cache = this.templateCache; 7724 var cacheKey = template + ':' + (tags || mustache.tags).join(':'); 7725 var isCacheEnabled = typeof cache !== 'undefined'; 7726 var tokens = isCacheEnabled ? cache.get(cacheKey) : undefined; 7727 7728 if (tokens == undefined) { 7729 tokens = parseTemplate(template, tags); 7730 isCacheEnabled && cache.set(cacheKey, tokens); 7731 } 7732 return tokens; 7733 }; 7734 7735 /** 7736 * High-level method that is used to render the given `template` with 7737 * the given `view`. 7738 * 7739 * The optional `partials` argument may be an object that contains the 7740 * names and templates of partials that are used in the template. It may 7741 * also be a function that is used to load partial templates on the fly 7742 * that takes a single argument: the name of the partial. 7743 * 7744 * If the optional `config` argument is given here, then it should be an 7745 * object with a `tags` attribute or an `escape` attribute or both. 7746 * If an array is passed, then it will be interpreted the same way as 7747 * a `tags` attribute on a `config` object. 7748 * 7749 * The `tags` attribute of a `config` object must be an array with two 7750 * string values: the opening and closing tags used in the template (e.g. 7751 * [ "<%", "%>" ]). The default is to mustache.tags. 7752 * 7753 * The `escape` attribute of a `config` object must be a function which 7754 * accepts a string as input and outputs a safely escaped string. 7755 * If an `escape` function is not provided, then an HTML-safe string 7756 * escaping function is used as the default. 7757 */ 7758 Writer.prototype.render = function render (template, view, partials, config) { 7759 var tags = this.getConfigTags(config); 7760 var tokens = this.parse(template, tags); 7761 var context = (view instanceof Context) ? view : new Context(view, undefined); 7762 return this.renderTokens(tokens, context, partials, template, config); 7763 }; 7764 7765 /** 7766 * Low-level method that renders the given array of `tokens` using 7767 * the given `context` and `partials`. 7768 * 7769 * Note: The `originalTemplate` is only ever used to extract the portion 7770 * of the original template that was contained in a higher-order section. 7771 * If the template doesn't use higher-order sections, this argument may 7772 * be omitted. 7773 */ 7774 Writer.prototype.renderTokens = function renderTokens (tokens, context, partials, originalTemplate, config) { 7775 var buffer = ''; 7776 7777 var token, symbol, value; 7778 for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) { 7779 value = undefined; 7780 token = tokens[i]; 7781 symbol = token[0]; 7782 7783 if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate, config); 7784 else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate, config); 7785 else if (symbol === '>') value = this.renderPartial(token, context, partials, config); 7786 else if (symbol === '&') value = this.unescapedValue(token, context); 7787 else if (symbol === 'name') value = this.escapedValue(token, context, config); 7788 else if (symbol === 'text') value = this.rawValue(token); 7789 7790 if (value !== undefined) 7791 buffer += value; 7792 } 7793 7794 return buffer; 7795 }; 7796 7797 Writer.prototype.renderSection = function renderSection (token, context, partials, originalTemplate, config) { 7798 var self = this; 7799 var buffer = ''; 7800 var value = context.lookup(token[1]); 7801 7802 // This function is used to render an arbitrary template 7803 // in the current context by higher-order sections. 7804 function subRender (template) { 7805 return self.render(template, context, partials, config); 7806 } 7807 7808 if (!value) return; 7809 7810 if (isArray(value)) { 7811 for (var j = 0, valueLength = value.length; j < valueLength; ++j) { 7812 buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate, config); 7813 } 7814 } else if (typeof value === 'object' || typeof value === 'string' || typeof value === 'number') { 7815 buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate, config); 7816 } else if (isFunction(value)) { 7817 if (typeof originalTemplate !== 'string') 7818 throw new Error('Cannot use higher-order sections without the original template'); 7819 7820 // Extract the portion of the original template that the section contains. 7821 value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender); 7822 7823 if (value != null) 7824 buffer += value; 7825 } else { 7826 buffer += this.renderTokens(token[4], context, partials, originalTemplate, config); 7827 } 7828 return buffer; 7829 }; 7830 7831 Writer.prototype.renderInverted = function renderInverted (token, context, partials, originalTemplate, config) { 7832 var value = context.lookup(token[1]); 7833 7834 // Use JavaScript's definition of falsy. Include empty arrays. 7835 // See https://github.com/janl/mustache.js/issues/186 7836 if (!value || (isArray(value) && value.length === 0)) 7837 return this.renderTokens(token[4], context, partials, originalTemplate, config); 7838 }; 7839 7840 Writer.prototype.indentPartial = function indentPartial (partial, indentation, lineHasNonSpace) { 7841 var filteredIndentation = indentation.replace(/[^ \t]/g, ''); 7842 var partialByNl = partial.split('\n'); 7843 for (var i = 0; i < partialByNl.length; i++) { 7844 if (partialByNl[i].length && (i > 0 || !lineHasNonSpace)) { 7845 partialByNl[i] = filteredIndentation + partialByNl[i]; 7846 } 7847 }
7848 return partialByNl.join('\n'); 7849 }; 7850 7851 Writer.prototype.renderPartial = function renderPartial (token, context, partials, config) { 7852 if (!partials) return; 7853 var tags = this.getConfigTags(config); 7854 7855 var value = isFunction(partials) ? partials(token[1]) : partials[token[1]]; 7856 if (value != null) { 7857 var lineHasNonSpace = token[6]; 7858 var tagIndex = token[5]; 7859 var indentation = token[4]; 7860 var indentedValue = value; 7861 if (tagIndex == 0 && indentation) { 7862 indentedValue = this.indentPartial(value, indentation, lineHasNonSpace); 7863 } 7864 var tokens = this.parse(indentedValue, tags); 7865 return this.renderTokens(tokens, context, partials, indentedValue, config); 7866 } 7867 }; 7868 7869 Writer.prototype.unescapedValue = function unescapedValue (token, context) { 7870 var value = context.lookup(token[1]); 7871 if (value != null) 7872 return value; 7873 }; 7874 7875 Writer.prototype.escapedValue = function escapedValue (token, context, config) { 7876 var escape = this.getConfigEscape(config) || mustache.escape; 7877 var value = context.lookup(token[1]); 7878 if (value != null) 7879 return (typeof value === 'number' && escape === mustache.escape) ? String(value) : escape(value); 7880 }; 7881 7882 Writer.prototype.rawValue = function rawValue (token) { 7883 return token[1]; 7884 }; 7885 7886 Writer.prototype.getConfigTags = function getConfigTags (config) { 7887 if (isArray(config)) { 7888 return config; 7889 } 7890 else if (config && typeof config === 'object') { 7891 return config.tags; 7892 } 7893 else { 7894 return undefined; 7895 } 7896 }; 7897 7898 Writer.prototype.getConfigEscape = function getConfigEscape (config) { 7899 if (config && typeof config === 'object' && !isArray(config)) { 7900 return config.escape; 7901 } 7902 else { 7903 return undefined; 7904 } 7905 }; 7906 7907 var mustache = { 7908 name: 'mustache.js', 7909 version: '4.2.0', 7910 tags: [ '{{', '}}' ], 7911 clearCache: undefined, 7912 escape: undefined, 7913 parse: undefined, 7914 render: undefined, 7915 Scanner: undefined, 7916 Context: undefined, 7917 Writer: undefined, 7918 /** 7919 * Allows a user to override the default caching strategy, by providing an 7920 * object with set, get and clear methods. This can also be used to disable 7921 * the cache by setting it to the literal `undefined`. 7922 */ 7923 set templateCache (cache) { 7924 defaultWriter.templateCache = cache; 7925 }, 7926 /** 7927 * Gets the default or overridden caching object from the default writer. 7928 */ 7929 get templateCache () { 7930 return defaultWriter.templateCache; 7931 } 7932 }; 7933 7934 // All high-level mustache.* functions use this writer. 7935 var defaultWriter = new Writer(); 7936 7937 /** 7938 * Clears all cached templates in the default writer. 7939 */ 7940 mustache.clearCache = function clearCache () { 7941 return defaultWriter.clearCache(); 7942 }; 7943 7944 /** 7945 * Parses and caches the given template in the default writer and returns the 7946 * array of tokens it contains. Doing this ahead of time avoids the need to 7947 * parse templates on the fly as they are rendered. 7948 */ 7949 mustache.parse = function parse (template, tags) { 7950 return defaultWriter.parse(template, tags); 7951 }; 7952 7953 /** 7954 * Renders the `template` with the given `view`, `partials`, and `config` 7955 * using the default writer. 7956 */ 7957 mustache.render = function render (template, view, partials, config) { 7958 if (typeof template !== 'string') { 7959 throw new TypeError('Invalid template! Template should be a "string" ' + 7960 'but "' + typeStr(template) + '" was given as the first ' + 7961 'argument for mustache#render(template, view, partials)'); 7962 } 7963 7964 return defaultWriter.render(template, view, partials, config); 7965 }; 7966 7967 // Export the escaping function so that the user may override it. 7968 // See https://github.com/janl/mustache.js/issues/244 7969 mustache.escape = escapeHtml; 7970 7971 // Export these mainly for testing, but also for advanced usage. 7972 mustache.Scanner = Scanner; 7973 mustache.Context = Context; 7974 mustache.Writer = Writer; 7975 7976 const processMustacheTemplate = (template, scope) => { 7977 return mustache.render(template, scope); 7978 }; 7979 7980 const getUserAttributes = async (formActions) => { 7981 try { 7982 return await request('blaize/profile', { 7983 method: "GET" 7984 }, formActions).then(response => response.json()); 7985 } 7986 catch (error) { 7987 console.error('Failed to fetch user attributes:', error); 7988 return {}; 7989 } 7990 }; 7991 const getSessions = async (formActions) => { 7992 try { 7993 const response = await request('zephr/public/sessions/v1/sessions', { 7994 method: "GET" 7995 }, formActions, null, true); 7996 return await response.json(); 7997 } 7998 catch (error) { 7999 console.error('Failed to fetch sessions:', error); 8000 return []; 8001 } 8002 }; 8003 const getUtmParameters = () => { 8004 const params = new URLSearchParams(window.location.search); 8005 return { 8006 source: params.get('utm_source'), 8007 medium: params.get('utm_medium'), 8008 campaign: params.get('utm_campaign'), 8009 term: params.get('utm_term'), 8010 content: params.get('utm_content') 8011 }; 8012 }; 8013 const initializeSubscriptionScope = async (form, formActions) => { 8014 try { 8015 const [sessions, attributes] = await Promise.all([ 8016 getSessions(formActions), 8017 getUserAttributes(formActions) 8018 ]); 8019 const deviceSession = sessions.find(session => session.requestingSession) || null; 8020 return { 8021 page: { 8022 url: window.location.href, 8023 path: window.location.pathname, 8024 searchParameters: Object.fromEntries(new URLSearchParams(window.location.search)), 8025 utmParameters: getUtmParameters(), 8026 referrer: document.referrer || null 8027 }, 8028 user: { 8029 attributes: attributes, 8030 session: deviceSession ? { 8031 id: deviceSession.id, 8032 tenantId: deviceSession.tenantId, 8033 userId: deviceSession.userId, 8034 deviceName: deviceSession.deviceName, 8035 browser: deviceSession.browser, 8036 startDate: deviceSession.startDate, 8037 ipAddress: deviceSession.ipAddress ?? null, 8038 requestingSession: deviceSession.requestingSession 8039 } : null, 8040 geoLocation: { 8041 city: deviceSession?.city ?? "unknown", 8042 country: deviceSession?.country ?? "unknown", 8043 state: deviceSession?.geoState ?? "unknown", 8044 ipAddress: deviceSession?.ipAddress ?? null 8045 } 8046 }, 8047 form: { 8048 id: form.id, 8049 outcomeId: form.outcomeId, 8050 ruleId: form.ruleId 8051 } 8052 }; 8053 } 8054 catch (error) { 8055 console.error('Failed to initialize subscription scope:', error); 8056 throw error; 8057 } 8058 }; 8059 8060 const publicKeyPath = 'blaize/payment/stripe/publicKey'; 8061 const getStripePublicKey = (formActions) => request(publicKeyPath, { 8062 method: "GET" 8063 }, formActions, null, true) 8064 .then(response => response.text()); 8065 let loadStripePromise, stripe, stripeElement; 8066 const loadStripe = (formActions) => { 8067 if (loadStripePromise) { 8068 return loadStripePromise; 8069 } 8070 return loadStripePromise = new Promise(function (resolve) { 8071 window.stripeLoadCallback = resolve; 8072 }).then(() => getStripePublicKey(formActions)) 8073 .then(publicKey => { stripe = window.Stripe(publicKey); return stripe; }); 8074 }; 8075 const handleStripeFormChecktax = (event, form, formActions) => { 8076 // only check tax if the form is complete 8077 if (!event.complete) { 8078 return; 8079 } 8080 formActions.incrementRequestCount(); 8081 stripe 8082 .createPaymentMethod('card', stripeElement, {}) 8083 .then(({ error, paymentMethod }) => { 8084 if (error || !paymentMethod) { 8085 console.error(`Error requesting payment method ${JSON.stringify(error)}`); 8086 return null; 8087 } 8088 formActions.updateFormState({ 8089 paymentMethodId: paymentMethod.id 8090 }); 8091 return paymentMethod?.billing_details?.address; 8092 }) 8093 .catch((error) => { 8094 console.error(`Error requesting payment method ${JSON.stringify(error)}`); 8095 return null; 8096 }).then((billingAddress) => calculatePrices(form, formActions.updateFormState({ 8097 billingAddress: { 8098 country: billingAddress?.country, 8099 postalCode: billingAddress?.postal_code, 8100 } 8101 }), formActions)) 8102 .catch((error) => { 8103 console.error(`Error requesting payment method ${JSON.stringify(error)}`); 8104 }).finally(() => { 8105 formActions.decrementRequestCount(); 8106 }); 8107 }; 8108 const loadStripeUi = (form, formState, formActions) => { 8109 formActions.incrementRequestCount(); 8110 void loadStripe(formActions).then(() => {
8111 stripeElement = createStripeElement(stripe, form, formActions); 8112 const id = '#stripe-element-' + form.uniqueKey; 8113 stripeElement.mount(id); 8114 stripeElement.addEventListener('change', (event) => { 8115 formActions.updateFormState({ 8116 paymentProviderError: event.error, 8117 paymentFormComplete: event.complete, 8118 serverErrors: [] 8119 }); 8120 if (form.organisationConfiguration.stripeAutomaticTaxEnabled && form.formType !== FormType.LIST_SUBSCRIPTIONS) { 8121 handleStripeFormChecktax(event, form, formActions); 8122 } 8123 }); 8124 stripeElement.addEventListener('ready', () => { 8125 formActions.updateFormState({ 8126 paymentProviderFormLoaded: true, 8127 }); 8128 }); 8129 formActions.decrementRequestCount(); 8130 }).catch(err => { 8131 console.error(err); 8132 formActions.decrementRequestCount(); 8133 }); 8134 }; 8135 const stripePay = (form, formState, formActions) => { 8136 const paymentMethodId = formState.paymentMethodId; 8137 formActions.incrementRequestCount(); 8138 if (paymentMethodId) { 8139 return performPay(form, formState, formActions, paymentMethodId); 8140 } 8141 else { 8142 return stripe.createPaymentMethod('card', stripeElement, {}) 8143 .then(async ({ error, paymentMethod }) => { 8144 if (error || !paymentMethod) { 8145 formActions.decrementRequestCount(); 8146 throw `Error requesting payment method ${JSON.stringify(error)}`; 8147 } 8148 await performPay(form, formState, formActions, paymentMethod.id); 8149 }); 8150 } 8151 }; 8152 const stripeChangePayment = (form, formState, formActions) => { 8153 const paymentMethodId = formState.paymentMethodId; 8154 formActions.incrementRequestCount(); 8155 if (paymentMethodId) { 8156 return performChangePayment(form, formState, formActions, paymentMethodId); 8157 } 8158 else { 8159 return stripe.createPaymentMethod('card', stripeElement, {}) 8160 .then(async ({ error, paymentMethod }) => { 8161 if (error || !paymentMethod) { 8162 formActions.decrementRequestCount(); 8163 throw `Error requesting payment method ${JSON.stringify(error)}`; 8164 } 8165 await request('zephr/payment/stripe/setupIntentSecret', { 8166 method: 'POST', 8167 }, formActions) 8168 .then(async (resp) => { 8169 const json = await resp.json(); 8170 const token = json.clientSecret; 8171 return stripe.confirmCardSetup(token, { 8172 payment_method: { 8173 card: stripeElement, 8174 }, 8175 }); 8176 }).then(async (resp) => { 8177 return performChangePayment(form, formState, formActions, resp.setupIntent.payment_method); 8178 }); 8179 }); 8180 } 8181 }; 8182 const performChangePayment = (form, formState, formActions, paymentMethod) => { 8183 return request('zephr/payment/stripe/updateSubscription', { 8184 method: 'POST', 8185 bodyObject: { 8186 payment_method_id: paymentMethod, 8187 subscription_id: formState.selectedSubscription.externalId, 8188 }, 8189 }, formActions); 8190 }; 8191 const performPay = async (form, formState, formActions, paymentMethod) => { 8192 const subscriptionMetadataRaw = (formConfigAs(form).paymentProviderFormConfig?.subscriptionMetadata || {}); 8193 const subscriptionMetadata = {}; 8194 if (subscriptionMetadataRaw) { 8195 const subscriptionFormScope = await initializeSubscriptionScope(form, formActions); 8196 for (const [key, value] of Object.entries(subscriptionMetadataRaw)) { 8197 subscriptionMetadata[key] = processMustacheTemplate(value, subscriptionFormScope) || ''; 8198 } 8199 } 8200 const hasSubscriptionMetadata = !!Object.keys(subscriptionMetadata).length; 8201 const { url, body, method } = mapToPayRequest(form, formState, paymentProviders.STRIPE, { 8202 payment_method: paymentMethod, 8203 billing_address_provided: !!formState.billingAddress.country, 8204 ...(hasSubscriptionMetadata ? { subscription_metadata: JSON.stringify(subscriptionMetadata) } : {}), 8205 }); 8206 return request(url, { 8207 method, 8208 bodyObject: body 8209 }, formActions) 8210 .then(async (response) => { 8211 if (!response?.ok) { 8212 throw JSON.stringify(response); 8213 } 8214 return response.json(); 8215 }).then(responseJson => { 8216 if (responseJson.grant_id) { 8217 return; 8218 } 8219 if (responseJson.paymentIntentStatus === 'requires_action') { 8220 return stripe.confirmCardPayment(responseJson.clientSecret ?? responseJson.client_secret) 8221 .then(afterConfirmResponse => { 8222 if (afterConfirmResponse.error || !afterConfirmResponse.paymentIntent) { 8223 throw `Error requesting payment method ${JSON.stringify(afterConfirmResponse)}`; 8224 } 8225 if (isOneOffPurchase(formState.paymentOption) && responseJson.payment_intent_id) { 8226 const { url, body, method } = mapToPayRequest(form, formState, paymentProviders.STRIPE, { 8227 payment_method: paymentMethod, 8228 billing_address_provided: !!formState.billingAddress.country, 8229 payment_intent_id: responseJson.payment_intent_id, 8230 ...(hasSubscriptionMetadata ? { subscription_metadata: JSON.stringify(subscriptionMetadata) } : {}), 8231 }); 8232 return request(url, { 8233 method, 8234 bodyObject: body 8235 }, formActions).then(response => { 8236 if (response?.ok) { 8237 return; 8238 } 8239 throw response; 8240 }); 8241 } 8242 else { 8243 return request('blaize/payment/stripe/subscription/confirmation', { 8244 method: 'POST', 8245 bodyObject: { 8246 subscriptionId: responseJson.subscriptionId 8247 } 8248 }, formActions) 8249 .then(response => { 8250 if (response?.ok) { 8251 return; 8252 } 8253 throw response; 8254 }); 8255 } 8256 }); 8257 } 8258 throw JSON.stringify(responseJson); 8259 }).catch((err) => { 8260 console.error(err); 8261 // TODO 8262 throw err; 8263 }).finally(() => { 8264 formActions.decrementRequestCount(); 8265 }); 8266 }; 8267 8268 /** 8269 * See https://stripe.com/docs/stripe-js/elements/payment-request-button 8270 */ 8271 const loadGooglePay = new Promise(function (resolve) { 8272 window.googlePayLoadStripeCallback = resolve; 8273 }); 8274 const configureStripeMobilePay = async (form, formState, formActions) => { 8275 const stripeMobilePaymentConfig = JSON.parse(form.organisationConfiguration?.stripeMobilePaymentConfig ?? "{}"); 8276 const container = document.getElementById('stripe-mobile-pay-button'); 8277 // No need to show the user any errors here just hide the button 8278 if (!stripeMobilePaymentConfig?.google && !stripeMobilePaymentConfig?.apple) { 8279 container.style.display = 'none'; 8280 console.error("Stripe Mobile payments are not configured in the console"); 8281 return; 8282 } 8283 return loadGooglePay 8284 .then(async () => await loadStripe(formActions)) 8285 .then(stripe => { 8286 formState = formActions.getFormState(); 8287 const currencyMultiplier = isZeroDecimalCurrency(formState.paymentOption.currencyCode.toUpperCase()) ? 1 : 100; 8288 const paymentLabels = { 8289 country: stripeMobilePaymentConfig.google?.countryCode ?? stripeMobilePaymentConfig.apple?.countryCode, 8290 currency: formState.paymentOption.currencyCode.toLowerCase(), 8291 total: { 8292 label: formState.paymentOption.label, 8293 amount: parseFloat((formState.paymentOptionPrices.totalPrice * currencyMultiplier).toFixed(2)), 8294 },
8295 requestPayerName: true 8296 }; 8297 const paymentRequest = stripe.paymentRequest(paymentLabels); 8298 const elements = stripe.elements(); 8299 const paymentButton = elements.create('paymentRequestButton', { 8300 paymentRequest: paymentRequest, 8301 }); 8302 paymentRequest.canMakePayment().then(result => { 8303 if (!result || (!result.googlePay && !result.applePay)) { 8304 // Not an error - Google Pay or Apple Pay are not supported here 8305 console.warn("Cannot make mobile payments on this browser", result); 8306 container.style.display = 'none'; 8307 return; 8308 } 8309 paymentButton.mount('#stripe-mobile-pay-button'); 8310 paymentRequest.on('paymentmethod', (ev) => { 8311 void onClickPaymentButton(formState, formActions, stripe, ev, result, form); 8312 }); 8313 }); 8314 }).catch(err => { 8315 console.error(err); 8316 formActions.updateFormState({ 8317 serverErrors: [ServerError.UNKNOWN] 8318 }); 8319 logDataLayerEvent(form, 'zephr_form_error', { 8320 error: ServerError[ServerError.UNKNOWN], 8321 }); 8322 }); 8323 }; 8324 const onClickPaymentButton = async (formState, formActions, stripe, ev, mobilePaymentType, form) => { 8325 if (mobilePaymentType.googlePay) { 8326 formActions.updateFormState({ 8327 mobilePaymentService: MobilePaymentService.GOOGLE_PAY, 8328 serverErrors: [], 8329 }); 8330 } 8331 else if (mobilePaymentType.applePay) { 8332 formActions.updateFormState({ 8333 mobilePaymentService: MobilePaymentService.APPLE_PAY, 8334 serverErrors: [], 8335 }); 8336 } 8337 if (!ev) { 8338 ev.complete('fail'); 8339 formActions.updateFormState({ 8340 serverErrors: [ServerError.MOBILE_PAYMENT_PROCESSING_ERROR] 8341 }); 8342 logDataLayerEvent(form, 'zephr_form_error', { 8343 error: ServerError[ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 8344 }); 8345 return; 8346 } 8347 const billingAddress = ev.paymentMethod.billing_details.address; 8348 if (form.organisationConfiguration.stripeAutomaticTaxEnabled) { 8349 formState = await (calculatePrices(form, formActions.updateFormState({ 8350 billingAddress: { 8351 country: billingAddress.country, 8352 postalCode: billingAddress.postal_code, 8353 } 8354 }), formActions)); 8355 } 8356 formState = formActions.updateFormState({ 8357 paymentMethodId: ev.paymentMethod.id 8358 }); 8359 ev.complete('success'); 8360 if (formState.paymentOptionPrices.taxPrice || !formState.canAttemptSectionCompletion) { 8361 const elementId = formState.elementValidity.find((e) => !e.isValid && e.elementType != 'payment')?.elementId; 8362 const element = elementId ? document.getElementById(`zephr-form-${elementId}`) : document.getElementsByClassName('zephr-form-button')[0]; 8363 element?.scrollIntoView({ 8364 block: "center", 8365 }); 8366 } 8367 else { 8368 formActions.completeSection(); 8369 } 8370 }; 8371 8372 const calculateBraintreeStripePrice = (form, formState, _) => { 8373 const addons = addonsForPlan(formState); 8374 const paymentOption = formConfigAs(form).paymentOptions.find(opt => opt.productId == formState.paymentOption.productId && opt.slug == formState.paymentOption.slug); 8375 const planPrice = paymentOption.price; 8376 const priceAfterPromoCode = formState.discountedPlanPrices.find(discount => discount.planSlug === formState.paymentOption.slug && discount.productId === formState.paymentOption.productId) 8377 ?.discountPrice; 8378 let finalPrice = priceAfterPromoCode ?? planPrice; 8379 let discountTotal = planPrice - finalPrice; 8380 // For Braintree only, we apply discounts on top of any promo code discounts 8381 if (form.organisationConfiguration.paymentProvider === 'braintree' && 8382 paymentOption.discounts && 8383 paymentOption.discounts.length > 0) { 8384 const totalBuiltInDiscount = paymentOption.discounts.reduce((sum, discount) => { 8385 return sum + (discount.amount || 0); 8386 }, 0); 8387 finalPrice = Math.max(0, finalPrice - totalBuiltInDiscount); 8388 discountTotal = planPrice - finalPrice; 8389 }
8390 const total = addons.reduce((total, addon) => total + addon.addonPrice, finalPrice); 8391 return Promise.resolve({ 8392 slug: formState.paymentOption.slug, 8393 productId: formState.paymentOption.productId, 8394 promoCode: formState.promoCode, 8395 addonPrices: addons, 8396 billingAddress: formState.billingAddress, 8397 totalPrice: total, 8398 totalPriceFormattedString: formatCurrency(total, formState.paymentOption.currencyCode), 8399 netPrice: planPrice, 8400 netPriceFormattedString: formatCurrency(planPrice, formState.paymentOption.currencyCode), 8401 discountPrice: discountTotal, 8402 discountPriceFormattedPrice: formatCurrency(discountTotal, formState.paymentOption.currencyCode), 8403 chargeItems: [] 8404 }); 8405 }; 8406 8407 const getRelevantCurrency = (form, formState) => { 8408 const formConfig = formConfigAs(form); 8409 if (formConfig.dynamicOffer?.id) { 8410 return formState.paymentOption?.currencyCode; 8411 } 8412 return formConfigAs(form).formCurrency ?? formState.paymentOption?.currencyCode; 8413 }; 8414 8415 const getPaymentFormNumber = (form, formState) => { 8416 const paymentConfig = formConfigAs(form); 8417 if (paymentConfig.changeSubscriptionMode) { 8418 return getChangeSubscriptionPaymentConfiguration(form, formState).paymentFormNumber; 8419 } 8420 return paymentConfig.paymentProviderFormConfig?.paymentFormNumber ?? undefined; 8421 }; 8422 const loadZuoraDynamicFormKey = async (_, formActions) => { 8423 const response = await request("zephr/public/payment/v1/billing/publishable-key", { method: "GET", }, formActions); 8424 return (await response.json())?.message; 8425 }; 8426 // Helper to cast custom field values to appropriate types 8427 const castCustomFieldValue$1 = (value, type) => { 8428 const trimmedValue = value.trim(); 8429 try { 8430 switch (type.toUpperCase()) { 8431 case 'INTEGER': { 8432 const intVal = parseInt(trimmedValue, 10); 8433 if (isNaN(intVal)) 8434 throw new Error(); 8435 return intVal; 8436 } 8437 case 'NUMBER': { 8438 const floatVal = parseFloat(trimmedValue); 8439 if (isNaN(floatVal)) 8440 throw new Error(); 8441 return floatVal; 8442 } 8443 case 'BOOLEAN': 8444 return trimmedValue.toLowerCase() === 'true'; 8445 case 'TEXT': 8446 case 'LONGTEXT': 8447 case 'PICKLIST': 8448 default: 8449 return trimmedValue.toString(); 8450 } 8451 } 8452 catch (e) { 8453 console.warn(`Error casting custom field value "${trimmedValue}" to type ${type}`); 8454 return null; 8455 } 8456 }; 8457 const createPaymentSession = async (form, formActions, context, operation) => { 8458 if (formActions.getFormState().isBusy) { 8459 console.warn('Form is busy - ignoring payment request'); 8460 return; 8461 } 8462 formActions.updateFormState({ 8463 serverErrors: [], 8464 paymentProviderFormBusy: true 8465 }); 8466 formActions.incrementRequestCount(); 8467 try { 8468 const formConfig = formConfigAs(form); 8469 const formState = formActions.getFormState(); 8470 const response = await request('zephr/public/payment/v1/billing/payment-sessions', { 8471 method: "POST", 8472 bodyObject: { 8473 currency: getRelevantCurrency(form, formState) || formState.existingSubscriptions?.[0]?.currency, 8474 amount: formState.paymentOptionPrices?.totalPrice || 0.01, 8475 paymentMethodType: context?.paymentMethodType, 8476 // Only include country if it's configured and has a value 8477 ...(formConfig.countryLabel && formState.billingCountry && { 8478 country: formState.billingCountry 8479 }), 8480 // Only include state if it's configured, has a value, and country is US/CA 8481 ...(formConfig.stateLabel && formState.billingState && (formState.billingCountry === "US" || 8482 formState.billingCountry === "CA") && { 8483 state: formState.billingState 8484 }), 8485 operation: operation, 8486 ...(formState.pfToken && { 8487 pfToken: formState.pfToken 8488 }) 8489 } 8490 }, formActions); 8491 if (response.ok) { 8492 return (await response.json())?.token; 8493 } 8494 else { 8495 console.error("Error occurred while creating payment session.", response); 8496 formActions.updateFormState({ 8497 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR], 8498 paymentProviderFormBusy: false 8499 }); 8500 logDataLayerEvent(form, 'zephr_form_error', { 8501 error: ServerError[ServerError.PAYMENT_PROCESSING_ERROR], 8502 }); 8503 } 8504 } 8505 catch (error) { 8506 console.error("Error occurred while creating payment session.", error); 8507 formActions.updateFormState({ 8508 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR], 8509 paymentProviderFormBusy: false 8510 }); 8511 logDataLayerEvent(form, 'zephr_form_error', { 8512 error: ServerError[ServerError.PAYMENT_PROCESSING_ERROR], 8513 }); 8514 } 8515 }; 8516 const onComplete = async (form, formActions, result) => { 8517 if (!result?.success || !result.paymentMethodId) { 8518 formActions.decrementRequestCount(); 8519 console.warn('Non-success payment result', result); 8520 formActions.updateFormState({ 8521 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR], 8522 paymentProviderFormBusy: false 8523 }); 8524 logDataLayerEvent(form, 'zephr_form_error', { 8525 error: ServerError[ServerError.PAYMENT_PROCESSING_ERROR], 8526 }); 8527 return; 8528 } 8529 const currentFormState = formActions.getFormState(); 8530 const isPaymentMethodSetupMode = formConfigAs(form).changeSubscriptionMode && currentFormState.requiresPaymentMethodSetup === true; 8531 if (isPaymentMethodSetupMode) { 8532 formActions.updateFormState({ 8533 paymentMethodSetupComplete: true, 8534 requiresPaymentMethodSetup: false, 8535 }); 8536 } 8537 if (form.formType === FormType.LIST_SUBSCRIPTIONS || form.formType === FormType.LIST_GIFT_SUBSCRIPTIONS_SENT) { 8538 formActions.updateFormState({ 8539 paymentFormComplete: true, 8540 paymentProviderVendorFields: { 8541 detail: JSON.stringify({ 8542 creditCardCountry: result.creditCardCountry, 8543 creditCardState: result.creditCardState, 8544 refId: result.paymentMethodId, 8545 email: currentFormState.emailAddress, 8546 paymentId: result?.paymentId, 8547 paymentMethodId: result?.paymentMethodId, 8548 }), 8549 } 8550 }); 8551 } 8552 else { 8553 // Get the autoRenew value based on payment option configuration 8554 const autoRenewConfig = currentFormState.paymentOption.autoRenewConfig; 8555 let autoRenewValue; 8556 if (autoRenewConfig === 'auto_renew') { 8557 autoRenewValue = true; 8558 } 8559 else if (autoRenewConfig === 'no_auto_renew') { 8560 autoRenewValue = false;
8561 } 8562 else if (autoRenewConfig === 'custom_toggle') { 8563 // Use user's choice from the toggle 8564 const paymentOptionKey = `${currentFormState.paymentOption.productId}-${currentFormState.paymentOption.slug}`; 8565 autoRenewValue = currentFormState.paymentOptionAutoRenew?.[paymentOptionKey] ?? false; 8566 } 8567 else { 8568 // Default behavior for legacy payment options without configuration 8569 autoRenewValue = true; 8570 } 8571 // Process subscription custom fields if any 8572 const rawCustomFields = formConfigAs(form).paymentProviderFormConfig?.subscriptionCustomFields || []; 8573 const subscriptionCustomFields = {}; 8574 if (rawCustomFields?.length) { 8575 const subscriptionFormScope = await initializeSubscriptionScope(form, formActions); 8576 for (const field of rawCustomFields) { 8577 const processedTemplate = processMustacheTemplate(field.value, subscriptionFormScope) || ''; 8578 subscriptionCustomFields[field.name] = castCustomFieldValue$1(processedTemplate, field.type); 8579 } 8580 } 8581 const hasCustomFields = !!Object.keys(subscriptionCustomFields).length; 8582 formActions.updateFormState({ 8583 paymentFormComplete: true, 8584 paymentProviderVendorFields: { 8585 currency: getRelevantCurrency(form, currentFormState), 8586 detail: JSON.stringify({ 8587 creditCardCountry: result.creditCardCountry, 8588 creditCardState: result.creditCardState, 8589 refId: result.paymentMethodId, 8590 email: currentFormState.emailAddress, 8591 paymentId: result?.paymentId, 8592 paymentMethodId: result?.paymentMethodId, 8593 }), 8594 ...(currentFormState.dynamicOfferResult ? { dynamicOfferResult: JSON.stringify(currentFormState.dynamicOfferResult) } : {}), 8595 ...(currentFormState.paymentOption?.terms ? { 8596 terms: JSON.stringify({ 8597 ...currentFormState.paymentOption.terms, 8598 autoRenew: autoRenewValue 8599 }) 8600 } : {}), 8601 ...(currentFormState.paymentOption?.termsAndConditions ? { 8602 termsAndConditions: JSON.stringify({ 8603 ...currentFormState.paymentOption.termsAndConditions, 8604 autoRenew: autoRenewValue 8605 }) 8606 } : {}), 8607 ...(currentFormState.paymentOption?.triggerOffsets ? { triggerOffsets: JSON.stringify(currentFormState.paymentOption.triggerOffsets) } : {}), 8608 ...(currentFormState.paymentOption?.changeSubscriptionTriggerOffsets ? { changeSubscriptionTriggerOffsets: JSON.stringify(currentFormState.paymentOption.changeSubscriptionTriggerOffsets) } : {}), 8609 ...(hasCustomFields ? { subscriptionCustomFields: JSON.stringify(subscriptionCustomFields) } : {}) 8610 } 8611 }); 8612 } 8613 formActions.decrementRequestCount(); 8614 formActions.completeSection(); 8615 }; 8616 const loadZuoraDynamicFormUi = async (form, formState, formActions, publishableKey, operation) => { 8617 const state = formState.paymentOption && await calculatePrices(form, formState, formActions); 8618 const [locale, region] = (navigator.language ?? '').split('-'); 8619 const paymentConfig = formConfigAs(form); 8620 const requestCountry = paymentConfig?.requestCountry; 8621 const isValidCountry = requestCountry && requestCountry.toLowerCase() !== 'unknown'; 8622 const configuration = { 8623 locale: locale || "en", 8624 region: (isValidCountry ? requestCountry : region) || 'US', 8625 currency: getRelevantCurrency(form, formState) || formState.existingSubscriptions?.[0]?.currency, 8626 amount: `${state?.paymentOptionPrices?.totalPrice ?? '0.00'}`, 8627 profile: getPaymentFormNumber(form, formState), 8628 createPaymentSession: (context) => createPaymentSession(form, formActions, context, operation), 8629 onComplete: (result) => onComplete(form, formActions, result), 8630 }; 8631 // Render form 8632 const zuora = window.Zuora(publishableKey); 8633 const paymentForm = await zuora.createPaymentForm(configuration); 8634 paymentForm.mount("#zuora_payment"); 8635 formActions.updateFormState({ 8636 paymentProviderFormLoaded: true, 8637 }); 8638 }; 8639 8640 let zuoraLoadPromise; 8641 const loadZuora = () => { 8642 if (zuoraLoadPromise != null) { 8643 return zuoraLoadPromise; 8644 } 8645 return zuoraLoadPromise = new Promise(function (resolve) { 8646 window.zuoraLoadCallback = resolve; 8647 }); 8648 }; 8649 const isDynamicForm = (form, formState) => { 8650 const paymentConfig = formConfigAs(form); 8651 if (paymentConfig.changeSubscriptionMode && formState) { 8652 return getChangeSubscriptionPaymentConfiguration(form, formState).useDynamicForm; 8653 } 8654 return paymentConfig.paymentProviderFormConfig?.useDynamicForm; 8655 }; 8656 /** 8657 * Determines the autoRenew value based on payment option configuration 8658 */ 8659 const getAutoRenewValue = (formState) => { 8660 const autoRenewConfig = formState.paymentOption.autoRenewConfig; 8661 if (autoRenewConfig === 'auto_renew') { 8662 return true; 8663 } 8664 else if (autoRenewConfig === 'no_auto_renew') { 8665 return false;
8666 } 8667 else if (autoRenewConfig === 'custom_toggle') { 8668 // Use user's choice from the toggle 8669 const paymentOptionKey = `${formState.paymentOption.productId}-${formState.paymentOption.slug}`; 8670 return formState.paymentOptionAutoRenew?.[paymentOptionKey] ?? false; 8671 } 8672 else { 8673 // Default behavior for legacy payment options without configuration 8674 return true; 8675 } 8676 }; 8677 const loadZuoraFormConfiguration = (form, formActions) => { 8678 const formState = formActions.getFormState(); 8679 if (isDynamicForm(form, formState)) { 8680 return loadZuoraDynamicFormKey(form, formActions); 8681 } 8682 // Get configuration based on form type 8683 const paymentConfig = formConfigAs(form); 8684 let hostedPageConfig; 8685 if (paymentConfig.changeSubscriptionMode) { 8686 hostedPageConfig = getChangeSubscriptionPaymentConfiguration(form, formState); 8687 } 8688 else { 8689 // Use regular payment provider configuration 8690 hostedPageConfig = paymentConfig.paymentProviderFormConfig; 8691 } 8692 if (!hostedPageConfig) { 8693 throw new Error('No hosted page configuration found for payment provider'); 8694 } 8695 return request("plugins/public/zuora-billing/payment-form-token", { 8696 method: "POST", 8697 bodyObject: { 8698 hostedPageId: hostedPageConfig.hostedPageId, 8699 hostedPageUrl: hostedPageConfig.hostedPageUrl, 8700 } 8701 }, formActions).then((response) => response.json()); 8702 }; 8703 const loadZuoraUi = (form, formState, formActions) => { 8704 // Check if we're in payment method setup mode for Change Subscription 8705 const isPaymentMethodSetupMode = formConfigAs(form).changeSubscriptionMode && 8706 formState.requiresPaymentMethodSetup === true; 8707 // Don't show card form if changing a Zuora subscription (unless in payment method setup mode) 8708 if (formConfigAs(form).changeSubscriptionMode && !isPaymentMethodSetupMode) { 8709 formActions.updateFormState({ 8710 paymentFormComplete: true, 8711 }); 8712 return; 8713 } 8714 if (form.formType === FormType.LIST_SUBSCRIPTIONS || form.formType === FormType.LIST_GIFT_SUBSCRIPTIONS_SENT || isPaymentMethodSetupMode) { 8715 void loadZuora() 8716 .then(() => loadZuoraFormConfiguration(form, formActions)) 8717 .then(formToken => { 8718 if (isDynamicForm(form, formState)) { 8719 return loadZuoraDynamicFormUi(form, formState, formActions, formToken, 2); 8720 } 8721 const formConfiguration = { 8722 tenantId: formToken.tenantId, 8723 token: formToken.token, 8724 signature: formToken.signature, 8725 key: formToken.key, 8726 id: formToken.id, 8727 url: formToken.url, 8728 style: 'inline', 8729 submitEnabled: true, 8730 }; 8731 const prePopulatedFields = { 8732 email: formState.emailAddress, 8733 }; 8734 window.Z.setEventHandler("onloadCallback", () => { 8735 formActions.updateFormState({ 8736 paymentProviderFormLoaded: true, 8737 }); 8738 }); 8739 window.Z.render(formConfiguration, prePopulatedFields, (event) => { 8740 if (event.success !== "true") { 8741 console.error("Payment failed", event); 8742 formActions.updateFormState({ 8743 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR] 8744 }); 8745 logDataLayerEvent(form, 'zephr_form_error', { 8746 error: ServerError[ServerError.PAYMENT_PROCESSING_ERROR], 8747 }); 8748 return; 8749 } 8750 // Handle payment method setup completion for Change Subscription forms 8751 const isPaymentMethodSetupMode = formConfigAs(form).changeSubscriptionMode && 8752 formState.requiresPaymentMethodSetup === true; 8753 if (isPaymentMethodSetupMode) { 8754 formActions.updateFormState({ 8755 paymentFormComplete: true, 8756 paymentMethodSetupComplete: true, 8757 requiresPaymentMethodSetup: false, 8758 paymentProviderVendorFields: { 8759 detail: JSON.stringify({ 8760 creditCardCountry: event.credit
8760CardCountry, 8761 creditCardState: event.creditCardState, 8762 refId: event.refId, 8763 email: event.email, 8764 }), 8765 } 8766 }); 8767 } 8768 else { 8769 formActions.updateFormState({ 8770 paymentFormComplete: true, 8771 paymentProviderVendorFields: { 8772 detail: JSON.stringify({ 8773 creditCardCountry: event.creditCardCountry, 8774 creditCardState: event.creditCardState, 8775 refId: event.refId, 8776 email: event.email, 8777 }), 8778 } 8779 }); 8780 } 8781 formActions.completeSection(); 8782 }); 8783 }); 8784 } 8785 else { 8786 void loadZuora() 8787 .then(() => loadZuoraFormConfiguration(form, formActions)) 8788 .then(formToken => { 8789 if (!getRelevantCurrency(form, formState)) { 8790 formActions.updateFormState({ 8791 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR] 8792 }); 8793 console.error("Form currency not set"); 8794 logDataLayerEvent(form, 'zephr_form_error', { 8795 error: ServerError[ServerError.PAYMENT_PROCESSING_ERROR], 8796 }); 8797 return; 8798 } 8799 if (isDynamicForm(form, formState)) { 8800 return loadZuoraDynamicFormUi(form, formState, formActions, formToken, 1); 8801 } 8802 const formConfiguration = { 8803 tenantId: formToken.tenantId, 8804 token: formToken.token, 8805 signature: formToken.signature, 8806 key: formToken.key, 8807 id: formToken.id, 8808 url: formToken.url, 8809 style: 'inline', 8810 submitEnabled: true, 8811 }; 8812 const prePopulatedFields = { 8813 email: formState.emailAddress, 8814 }; 8815 window.Z.setEventHandler("onloadCallback", () => { 8816 formActions.updateFormState({ 8817 paymentProviderFormLoaded: true, 8818 }); 8819 }); 8820 window.Z.render(formConfiguration, prePopulatedFields, (event) => { 8821 if (event.success !== "true") { 8822 console.error("Payment failed", event); 8823 formActions.updateFormState({ 8824 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR] 8825 }); 8826 logDataLayerEvent(form, 'zephr_form_error', { 8827 error: ServerError[ServerError.PAYMENT_PROCESSING_ERROR], 8828 }); 8829 return; 8830 } 8831 const currentFormState = formActions.getFormState(); 8832 const autoRenewValue = getAutoRenewValue(currentFormState); 8833 formActions.updateFormState({ 8834 paymentFormComplete: true, 8835 paymentProviderVendorFields: { 8836 currency: getRelevantCurrency(form, currentFormState), 8837 detail: JSON.stringify({ 8838 creditCardCountry: event.creditCardCountry, 8839 creditCardState: event.creditCardState, 8840 refId: event.refId, 8841 email: event.email, 8842 }), 8843 ...(currentFormState.dynamicOfferResult ? { dynamicOfferResult: JSON.stringify(currentFormState.dynamicOfferResult) } : {}), 8844 ...(currentFormState.paymentOption?.terms ? { 8845 terms: JSON.stringify({ 8846 ...currentFormState.paymentOption.terms, 8847 autoRenew: autoRenewValue 8848 }) 8849 } : {}), 8850 ...(currentFormState.paymentOption?.termsAndConditions ? {
8851 termsAndConditions: JSON.stringify({ 8852 ...currentFormState.paymentOption.termsAndConditions, 8853 autoRenew: autoRenewValue 8854 }) 8855 } : {}), 8856 ...(currentFormState.paymentOption?.triggerOffsets ? { triggerOffsets: JSON.stringify(currentFormState.paymentOption.triggerOffsets) } : {}), 8857 ...(currentFormState.paymentOption?.changeSubscriptionTriggerOffsets ? { changeSubscriptionTriggerOffsets: JSON.stringify(currentFormState.paymentOption.changeSubscriptionTriggerOffsets) } : {}), 8858 } 8859 }); 8860 formActions.completeSection(); 8861 }); 8862 }); 8863 } 8864 }; 8865 // TODO: Remove the ability to add MULTISELECT fields in the Console (Filter it out from the listBillingCustomFields endpoint) 8866 const castCustomFieldValue = (value, type) => { 8867 const trimmedValue = value.trim(); 8868 try { 8869 switch (type.toUpperCase()) { 8870 case 'INTEGER': { 8871 const intVal = parseInt(trimmedValue, 10); 8872 if (isNaN(intVal)) 8873 throw new Error(); 8874 return intVal; 8875 } 8876 case 'NUMBER': { 8877 const floatVal = parseFloat(trimmedValue); 8878 if (isNaN(floatVal)) 8879 throw new Error(); 8880 return floatVal; 8881 } 8882 case 'BOOLEAN': 8883 return trimmedValue.toLowerCase() === 'true'; 8884 case 'TEXT': 8885 case 'LONGTEXT': 8886 case 'PICKLIST': 8887 default: 8888 return trimmedValue.toString(); 8889 } 8890 } 8891 catch (e) { 8892 console.warn(`Error casting custom field value "${trimmedValue}" to type ${type}`); 8893 return null; 8894 } 8895 }; 8896 const zuoraComplete = async (form, formState, formActions) => { 8897 const typeConfiguration = formConfigAs(form); 8898 const requires_address = typeConfiguration.requires_address; 8899 const isChangeSubscriptionMode = formConfigAs(form).changeSubscriptionMode; 8900 formActions.incrementRequestCount(); 8901 try { 8902 if (!isChangeSubscriptionMode && !formState.paymentProviderVendorFields) { 8903 console.error("Flow error - no Zuora vendor fields found"); 8904 formActions.updateFormState({ 8905 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR] 8906 }); 8907 logDataLayerEvent(form, 'zephr_form_error', { 8908 error: ServerError[ServerError.PAYMENT_PROCESSING_ERROR], 8909 }); 8910 return Promise.resolve(); 8911 } 8912 const rawCustomFields = formConfigAs(form).paymentProviderFormConfig?.subscriptionCustomFields || []; 8913 const subscriptionCustomFields = {}; 8914 if (rawCustomFields?.length) { 8915 const subscriptionFormScope = await initializeSubscriptionScope(form, formActions); 8916 for (const field of rawCustomFields) { 8917 const processedTemplate = processMustacheTemplate(field.value, subscriptionFormScope) || ''; 8918 subscriptionCustomFields[field.name] = castCustomFieldValue(processedTemplate, field.type); 8919 } 8920 } 8921 const hasCustomFields = !!Object.keys(subscriptionCustomFields).length; 8922 // For changeSubscriptionMode, create vendor fields from termsAndConditions 8923 let vendorFields; 8924 if (isChangeSubscriptionMode && formState.paymentOption?.termsAndConditions) { 8925 const autoRenewValue = getAutoRenewValue(formState); 8926 const changingFromSubscription = formState 8927 .validChangeFromPlans 8928 .find(plan => formState.paymentOption.slug === plan.planSlug && formState.paymentOption.productId === plan.productId) 8929 ?.changesFromSubscription; 8930 vendorFields = { 8931 currency: formState.paymentOption.currencyCode, 8932 detail: JSON.stringify({ 8933 refId: changingFromSubscription?.externalId || '', 8934 email: formState.emailAddress || '' 8935 }), 8936 termsAndConditions: JSON.stringify({ 8937 ...formState.paymentOption.termsAndConditions, 8938 autoRenew: autoRenewValue 8939 }), 8940 ...(hasCustomFields ? { subscriptionCustomFields: JSON.stringify(subscriptionCustomFields) } : {}) 8941 }; 8942 } 8943 else if (formState.convertCancelSubscriptionToAcceptOffer) { 8944 const changingFromSubscription = formState 8945 .validChangeFromPlans 8946 .find(plan => formState.paymentOption.slug === plan.planSlug && formState.paymentOption.productId === plan.productId) 8947 ?.changesFromSubscription; 8948 vendorFields = { 8949 currency: formState.paymentOption.currencyCode, 8950 detail: JSON.stringify({ 8951 refId: changingFromSubscription?.externalId || '', 8952 email: formState.emailAddress || '' 8953 }), 8954 ...(hasCustomFields ? { subscriptionCustomFields: JSON.stringify(subscriptionCustomFields) } : {}) 8955 }; 8956 } 8957 else { 8958 vendorFields = { 8959 ...formState.paymentProviderVendorFields, 8960 ...(hasCustomFields ? { subscriptionCustomFields: JSON.stringify(subscriptionCustomFields) } : {}) 8961 }; 8962 } 8963 const { url, body, method } = mapToPayRequest(form, formState, paymentProviders.ZUORA, vendorFields); 8964 if (form.formType === FormType.GIFT_SUBSCRIPTION) { 8965 const giftBody = { 8966 ...body, // Includes attributes mapped by mapToPayRequest 8967 plan_id: `zuora-billing_product_rate_plan-${body.plan_id}-unused`, 8968 discount_code: formState.promoCodeValid ? formState.promoCode : undefined, 8969 vendor_fields: { 8970 ...(body.vendor_fields || {}), 8971 // Only include giftDetails if isGiftForm is true (defaults to true if no gift toggle elements are present) 8972 ...(formState.isGiftForm ? { 8973 giftDetails: JSON.stringify({ 8974 recipient_email: formState.giftRecipient.email, 8975 firstName: formState.giftRecipient.firstName, 8976 lastName: formState.giftRecipient.lastName, 8977 message: formState.giftRecipient.customMessage, 8978 ...(requires_address ? { 8979 recipient_address: { 8980 addressLine1: formState.giftRecipient.recipientAddress?.addressLine1 || '', 8981 addressLine2: formState.giftRecipient.recipientAddress?.addressLine2 || '', 8982 city: formState.giftRecipient.recipientAddress?.city || '', 8983 state: formState.giftRecipient.recipientAddress?.state || '', 8984 country: formState.giftRecipient.recipientAddress?.country || '', 8985 postalCode: formState.giftRecipient.recipientAddress?.postalCode || '', 8986 } 8987 } : {}), 8988 ...(formState.giftRecipient.futureDeliveryEnabled && formState.giftRecipient.futureDeliveryDate ? { 8989 startDate: formState.giftRecipient.futureDeliveryDate 8990 } : {}) 8991 }) 8992 } : {}) 8993 } 8994 }; 8995 const giftResponse = await request('zephr/subscribe', { 8996 method: 'POST', 8997 bodyObject: { 8998 ...giftBody, 8999 ...(formState.pfToken ? { pf_token: formState.pfToken } : {}) 9000 } 9001 }, formActions); 9002 if (!giftResponse?.ok) { 9003 console.error("Error creating gift subscription", giftResponse); 9004 formActions.updateFormState({ 9005 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR] 9006 }); 9007 return Promise.reject(); 9008 } 9009 return Promise.resolve(); 9010 } 9011 else { 9012 // Regular flow for non-gift subscriptions 9013 const modifiedBody = formConfigAs(form).changeSubscriptionMode ? body : { 9014 ...body, 9015 // eslint-disable-next-line @typescript-eslint/restrict-template-expressions 9016 plan_id: `zuora-billing_product_rate_plan-${body.plan_id}-unused`, 9017 }; 9018 return await request(url, { 9019 method, 9020 bodyObject: { 9021 ...modifiedBody, 9022 ...(url === 'zephr/subscribe' && formState.pfToken ? { pf_token: formState.pfToken } : {}) 9023 } 9024 }, formActions).then(response => { 9025 if (!response?.ok) { 9026 void response.json().then(json => { 9027 console.error("Error when subscribing", json); 9028 }); 9029 return Promise.reject(); 9030 } 9031 }); 9032 } 9033 } 9034 finally { 9035 formActions.decrementRequestCount(); 9036 formActions.updateFormState({ 9037 paymentProviderFormBusy: false 9038 }); 9039 } 9040 }; 9041 const zuoraChangePayment = (form, formState, formActions) => { 9042 console.log(formState.paymentProviderVendorFields); 9043 const paymentMethodId = JSON.parse(formState.paymentProviderVendorFields?.detail).refId; 9044 return request('plugins/public/zuora-billing/update-account', { 9045 method: 'POST', 9046 bodyObject: { 9047 paymentMethodId, 9048 } 9049 }, formActions).then(response => { 9050 if (!response?.ok) { 9051 console.error("Error when changing default payment method", response); 9052 return Promise.reject(); 9053 } 9054 }); 9055 }; 9056 9057 const getDynamicOffer = async (form, formActions) => { 9058 const dynamicOfferId = formConfigAs(form).dynamicOffer?.id; 9059 const dynamicOfferPreview = formConfigAs(form).dynamicOfferPreview; 9060 if (form.environment.previewMode) { 9061 formActions.updateFormState({ dynamicOfferResult: dynamicOfferPreview }); 9062 return; 9063 } 9064 let session; 9065 let jwt; 9066 try { 9067 session = document.cookie.match(/blaize_session=[0-9a-z-]+/)[0].substring(15); 9068 } 9069 catch { 9070 session = null; 9071 } 9072 try { 9073 jwt = document.cookie.match(/(?<=blaize_jwt=)[^;]+/)[0]; 9074 } 9075 catch { 9076 jwt = null; 9077 } 9078 if (!dynamicOfferId) { 9079 throw Error('Missing Dynamic Offer id'); 9080 } 9081 const response = await request('zephr/public/decisions/v2/dynamic-offers', { 9082 method: "POST", 9083 bodyObject: { 9084 "dynamic_offer": { "slug": dynamicOfferId }, 9085 "session": session, 9086 "jwt": jwt 9087 }, 9088 }, formActions); 9089 const dynamicOfferResult = await response.json(); 9090 formActions.updateFormState({ dynamicOfferResult }); 9091 }; 9092 const mockBillingPreviewResponse = (dynamicOfferResult) => { 9093 const chargeOne = dynamicOfferResult?.products 9094 ? dynamicOfferResult.products[0].paymentPlans[0].charges[0] 9095 : { prices: [{ price: 25 }], chargeData: { name: 'Monthly Fee' } }; 9096 const amount = chargeOne.prices[0]?.price; 9097 const chargeName = chargeOne.chargeData?.name; 9098 return { 9099 "success": true, 9100 "contractedMrr": amount, 9101 "totalContractedValue": null, 9102 "amount": amount + 3, 9103 "amountWithoutTax": amount, 9104 "taxAmount": 3, 9105 "invoiceTargetDate": "2024-05-20", 9106 "documentDate": "2024-05-20", 9107 "invoiceItems": { 9108 "0": { 9109 "serviceStartDate": "2024-05-20", 9110 "serviceEndDate": "2024-06-19", 9111 "chargeAmount": amount, 9112 "taxAmount": 3, 9113 "chargeDescription": "", 9114 "chargeName": chargeName, 9115 "productName": "Product", 9116 "productRatePlanChargeId": "8ad097b48f533234018f57a8982a5a45", 9117 "quantity": 1, 9118 "unitOfMeasure": "" 9119 } 9120 } 9121 }; 9122 }; 9123 const filterChangeSubDynamicOfferResponse = (dynamicOfferResult, form, formState) => { 9124 if (!formConfigAs(form).changeSubscriptionMode || form.environment.previewMode) { 9125 return dynamicOfferResult; 9126 } 9127 return { 9128 ...dynamicOfferResult, 9129 products: dynamicOfferResult.products.map(product => ({ 9130 ...product, 9131 paymentPlans: product.paymentPlans.filter(plan => formState 9132 .validChangeFromPlans 9133 .some(changeFromPlan => changeFromPlan.planSlug === plan.planId && changeFromPlan.productId === product.id)) 9134 })) 9135 }; 9136 }; 9137 9138 function ownKeys(e, r) { 9139 var t = Object.keys(e); 9140 if (Object.getOwnPropertySymbols) { 9141 var o = Object.getOwnPropertySymbols(e); 9142 r && (o = o.filter(function (r) { 9143 return Object.getOwnPropertyDescriptor(e, r).enumerable; 9144 })), t.push.apply(t, o); 9145 } 9146 return t; 9147 }
9148 function _objectSpread2(e) { 9149 for (var r = 1; r < arguments.length; r++) { 9150 var t = null != arguments[r] ? arguments[r] : {}; 9151 r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { 9152 _defineProperty(e, r, t[r]); 9153 }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { 9154 Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); 9155 }); 9156 } 9157 return e; 9158 } 9159 function _defineProperty(obj, key, value) { 9160 key = _toPropertyKey(key); 9161 if (key in obj) { 9162 Object.defineProperty(obj, key, { 9163 value: value, 9164 enumerable: true, 9165 configurable: true, 9166 writable: true 9167 }); 9168 } else { 9169 obj[key] = value; 9170 } 9171 return obj; 9172 } 9173 function _objectWithoutPropertiesLoose(source, excluded) { 9174 if (source == null) return {}; 9175 var target = {}; 9176 var sourceKeys = Object.keys(source); 9177 var key, i; 9178 for (i = 0; i < sourceKeys.length; i++) { 9179 key = sourceKeys[i]; 9180 if (excluded.indexOf(key) >= 0) continue; 9181 target[key] = source[key]; 9182 } 9183 return target; 9184 } 9185 function _objectWithoutProperties(source, excluded) { 9186 if (source == null) return {}; 9187 var target = _objectWithoutPropertiesLoose(source, excluded); 9188 var key, i; 9189 if (Object.getOwnPropertySymbols) { 9190 var sourceSymbolKeys = Object.getOwnPropertySymbols(source); 9191 for (i = 0; i < sourceSymbolKeys.length; i++) { 9192 key = sourceSymbolKeys[i]; 9193 if (excluded.indexOf(key) >= 0) continue; 9194 if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; 9195 target[key] = source[key]; 9196 } 9197 } 9198 return target; 9199 } 9200 function _toPrimitive(input, hint) { 9201 if (typeof input !== "object" || input === null) return input; 9202 var prim = input[Symbol.toPrimitive]; 9203 if (prim !== undefined) { 9204 var res = prim.call(input, hint || "default"); 9205 if (typeof res !== "object") return res; 9206 throw new TypeError("@@toPrimitive must return a primitive value."); 9207 } 9208 return (hint === "string" ? String : Number)(input); 9209 } 9210 function _toPropertyKey(arg) { 9211 var key = _toPrimitive(arg, "string"); 9212 return typeof key === "symbol" ? key : String(key); 9213 } 9214 9215 var countries$1 = { 9216 AD: "Andorra", 9217 AE: "United Arab Emirates", 9218 AF: "Afghanistan", 9219 AG: "Antigua and Barbuda", 9220 AI: "Anguilla", 9221 AL: "Albania", 9222 AM: "Armenia", 9223 AO: "Angola", 9224 AQ: "Antarctica", 9225 AR: "Argentina", 9226 AS: "American Samoa", 9227 AT: "Austria", 9228 AU: "Australia", 9229 AW: "Aruba", 9230 AX: "à land Islands", 9231 AZ: "Azerbaijan", 9232 BA: "Bosnia and Herzegovina", 9233 BB: "Barbados", 9234 BD: "Bangladesh", 9235 BE: "Belgium", 9236 BF: "Burkina Faso", 9237 BG: "Bulgaria", 9238 BH: "Bahrain", 9239 BI: "Burundi", 9240 BJ: "Benin", 9241 BL: "Saint Barthélemy", 9242 BM: "Bermuda", 9243 BN: "Brunei", 9244 BO: "Bolivia", 9245 BQ: "Caribbean Netherlands", 9246 BR: "Brazil", 9247 BS: "Bahamas", 9248 BT: "Bhutan", 9249 BW: "Botswana", 9250 BY: "Belarus", 9251 BZ: "Belize", 9252 CA: "Canada", 9253 CC: "Cocos Islands", 9254 CD: "Democratic Republic of the Congo", 9255 CF: "Central African Republic", 9256 CG: "Republic of the Congo", 9257 CH: "Switzerland", 9258 CI: "Ivory Coast", 9259 CK: "Cook Islands", 9260 CL: "Chile", 9261 CM: "Cameroon", 9262 CN: "China", 9263 CO: "Colombia", 9264 CR: "Costa Rica", 9265 CU: "Cuba", 9266 CV: "Cabo Verde", 9267 CW: "Curaçao", 9268 CX: "Christmas Island", 9269 CY: "Cyprus", 9270 CZ: "Czechia", 9271 DE: "Germany", 9272 DJ: "Djibouti", 9273 DK: "Denmark", 9274 DM: "Dominica", 9275 DO: "Dominican Republic", 9276 DZ: "Algeria", 9277 EC: "Ecuador", 9278 EE: "Estonia", 9279 EG: "Egypt", 9280 EH: "Western Sahara", 9281 ER: "Eritrea", 9282 ES: "Spain", 9283 ET: "Ethiopia", 9284 FI: "Finland", 9285 FJ: "Fiji", 9286 FK: "Falkland Islands", 9287 FM: "Micronesia", 9288 FO: "Faroe Islands", 9289 FR: "France", 9290 GA: "Gabon", 9291 GB: "United Kingdom", 9292 GD: "Grenada", 9293 GE: "Georgia", 9294 GF: "French Guiana", 9295 GG: "Guernsey", 9296 GH: "Ghana", 9297 GI: "Gibraltar", 9298 GL: "Greenland", 9299 GM: "Gambia", 9300 GN: "Guinea", 9301 GP: "Guadeloupe", 9302 GQ: "Equatorial Guinea", 9303 GR: "Greece", 9304 GS: "South Georgia and the South Sandwich Islands", 9305 GT: "Guatemala", 9306 GU: "Guam", 9307 GW: "Guinea-Bissau", 9308 GY: "Guyana", 9309 HK: "Hong Kong", 9310 HN: "Honduras", 9311 HR: "Croatia", 9312 HT: "Haiti", 9313 HU: "Hungary", 9314 ID: "Indonesia", 9315 IE: "Ireland", 9316 IL: "Israel", 9317 IM: "Isle of Man", 9318 IN: "India", 9319 IO: "British Indian Ocean Territory", 9320 IQ: "Iraq", 9321 IR: "Iran", 9322 IS: "Iceland", 9323 IT: "Italy", 9324 JE: "Jersey", 9325 JM: "Jamaica", 9326 JO: "Jordan", 9327 JP: "Japan", 9328 KE: "Kenya", 9329 KG: "Kyrgyzstan", 9330 KH: "Cambodia",
9331 KI: "Kiribati", 9332 KM: "Comoros", 9333 KN: "Saint Kitts and Nevis", 9334 KP: "North Korea", 9335 KR: "South Korea", 9336 KW: "Kuwait", 9337 KY: "Cayman Islands", 9338 KZ: "Kazakhstan", 9339 LA: "Laos", 9340 LB: "Lebanon", 9341 LC: "Saint Lucia", 9342 LI: "Liechtenstein", 9343 LK: "Sri Lanka", 9344 LR: "Liberia", 9345 LS: "Lesotho", 9346 LT: "Lithuania", 9347 LU: "Luxembourg", 9348 LV: "Latvia", 9349 LY: "Libya", 9350 MA: "Morocco", 9351 MC: "Monaco", 9352 MD: "Moldova", 9353 ME: "Montenegro", 9354 MF: "Saint Martin", 9355 MG: "Madagascar", 9356 MH: "Marshall Islands", 9357 MK: "North Macedonia", 9358 ML: "Mali", 9359 MM: "Myanmar", 9360 MN: "Mongolia", 9361 MO: "Macao", 9362 MP: "Northern Mariana Islands", 9363 MQ: "Martinique", 9364 MR: "Mauritania", 9365 MS: "Montserrat", 9366 MT: "Malta", 9367 MU: "Mauritius", 9368 MV: "Maldives", 9369 MW: "Malawi", 9370 MX: "Mexico", 9371 MY: "Malaysia", 9372 MZ: "Mozambique", 9373 NA: "Namibia", 9374 NC: "New Caledonia", 9375 NE: "Niger", 9376 NF: "Norfolk Island", 9377 NG: "Nigeria", 9378 NI: "Nicaragua", 9379 NL: "Netherlands", 9380 NO: "Norway", 9381 NP: "Nepal", 9382 NR: "Nauru", 9383 NU: "Niue", 9384 NZ: "New Zealand", 9385 OM: "Oman", 9386 PA: "Panama", 9387 PE: "Peru", 9388 PF: "French Polynesia", 9389 PG: "Papua New Guinea", 9390 PH: "Philippines", 9391 PK: "Pakistan", 9392 PL: "Poland", 9393 PM: "Saint Pierre and Miquelon", 9394 PN: "Pitcairn", 9395 PR: "Puerto Rico", 9396 PS: "Palestine", 9397 PT: "Portugal", 9398 PW: "Palau", 9399 PY: "Paraguay", 9400 QA: "Qatar", 9401 RE: "Réunion", 9402 RO: "Romania", 9403 RS: "Serbia", 9404 RU: "Russia", 9405 RW: "Rwanda", 9406 SA: "Saudi Arabia", 9407 SB: "Solomon Islands", 9408 SC: "Seychelles", 9409 SD: "Sudan", 9410 SE: "Sweden", 9411 SG: "Singapore", 9412 SH: "Saint Helena, Ascension and Tristan da Cunha", 9413 SI: "Slovenia", 9414 SJ: "Svalbard and Jan Mayen", 9415 SK: "Slovakia", 9416 SL: "Sierra Leone", 9417 SM: "San Marino", 9418 SN: "Senegal", 9419 SO: "Somalia", 9420 SR: "Suriname", 9421 SS: "South Sudan", 9422 ST: "Sao Tome and Principe", 9423 SV: "El Salvador", 9424 SX: "Sint Maarten", 9425 SY: "Syria", 9426 SZ: "Eswatini", 9427 TC: "Turks and Caicos Islands", 9428 TD: "Chad", 9429 TF: "French Southern Territories", 9430 TG: "Togo", 9431 TH: "Thailand", 9432 TJ: "Tajikistan", 9433 TK: "Tokelau", 9434 TL: "Timor-Leste", 9435 TM: "Turkmenistan", 9436 TN: "Tunisia", 9437 TO: "Tonga", 9438 TR: "Türkiye", 9439 TT: "Trinidad and Tobago", 9440 TV: "Tuvalu", 9441 TW: "Taiwan", 9442 TZ: "Tanzania", 9443 UA: "Ukraine", 9444 UG: "Uganda", 9445 UM: "United States Minor Outlying Islands", 9446 US: "United States of America", 9447 UY: "Uruguay", 9448 UZ: "Uzbekistan", 9449 VA: "Holy See", 9450 VC: "Saint Vincent and the Grenadines", 9451 VE: "Venezuela", 9452 VG: "Virgin Islands (UK)", 9453 VI: "Virgin Islands (US)", 9454 VN: "Vietnam", 9455 VU: "Vanuatu", 9456 WF: "Wallis and Futuna", 9457 WS: "Samoa", 9458 YE: "Yemen", 9459 YT: "Mayotte", 9460 ZA: "South Africa", 9461 ZM: "Zambia", 9462 ZW: "Zimbabwe" 9463 }; 9464 var timezones$1 = { 9465 "Africa/Abidjan": { 9466 u: 0, 9467 c: [ 9468 "CI", 9469 "BF", 9470 "GH", 9471 "GM", 9472 "GN", 9473 "IS", 9474 "ML", 9475 "MR", 9476 "SH", 9477 "SL", 9478 "SN", 9479 "TG" 9480 ] 9481 }, 9482 "Africa/Accra": { 9483 a: "Africa/Abidjan", 9484 c: [ 9485 "GH" 9486 ], 9487 r: 1 9488 }, 9489 "Africa/Addis_Ababa": { 9490 a: "Africa/Nairobi", 9491 c: [ 9492 "ET" 9493 ], 9494 r: 1 9495 }, 9496 "Africa/Algiers": { 9497 u: 60, 9498 c: [ 9499 "DZ" 9500 ] 9501 }, 9502 "Africa/Asmara": { 9503 a: "Africa/Nairobi", 9504 c: [ 9505 "ER" 9506 ], 9507 r: 1 9508 }, 9509 "Africa/Asmera": { 9510 a: "Africa/Nairobi", 9511 c: [ 9512 "ER" 9513 ], 9514 r: 1 9515 }, 9516 "Africa/Bamako": { 9517 a: "Africa/Abidjan", 9518 c: [ 9519 "ML" 9520 ], 9521 r: 1 9522 }, 9523 "Africa/Bangui": { 9524 a: "Africa/Lagos", 9525 c: [ 9526 "CF" 9527 ], 9528 r: 1 9529 }, 9530 "Africa/Banjul": { 9531 a: "Africa/Abidjan", 9532 c: [ 9533 "GM" 9534 ], 9535 r: 1 9536 }, 9537 "Africa/Bissau": { 9538 u: 0, 9539 c: [ 9540 "GW" 9541 ] 9542 }, 9543 "Africa/Blantyre": { 9544 a: "Africa/Maputo", 9545 c: [ 9546 "MW" 9547 ], 9548 r: 1 9549 }, 9550 "Africa/Brazzaville": { 9551 a: "Africa/Lagos", 9552 c: [ 9553 "CG" 9554 ], 9555 r: 1 9556 }, 9557 "Africa/Bujumbura": { 9558 a: "Africa/Maputo", 9559 c: [ 9560 "BI" 9561 ], 9562 r: 1 9563 }, 9564 "Africa/Cairo": { 9565 u: 120, 9566 d: 180, 9567 c: [ 9568 "EG" 9569 ] 9570 }, 9571 "Africa/Casablanca": { 9572 u: 60, 9573 d: 0, 9574 c: [ 9575 "MA" 9576 ] 9577 }, 9578 "Africa/Ceuta": { 9579 u: 60, 9580 d: 120, 9581 c: [ 9582 "ES" 9583 ] 9584 }, 9585 "Africa/Conakry": { 9586 a: "Africa/Abidjan", 9587 c: [ 9588 "GN" 9589 ], 9590 r: 1 9591 }, 9592 "Africa/Dakar": { 9593 a: "Africa/Abidjan", 9594 c: [ 9595 "SN" 9596 ], 9597 r: 1 9598 }, 9599 "Africa/Dar_es_Salaam": { 9600 a: "Africa/Nairobi", 9601 c: [ 9602 "TZ" 9603 ], 9604 r: 1 9605 }, 9606 "Africa/Djibouti": { 9607 a: "Africa/Nairobi", 9608 c: [ 9609 "DJ" 9610 ], 9611 r: 1 9612 }, 9613 "Africa/Douala": { 9614 a: "Africa/Lagos", 9615 c: [
vendor: 38,090 bytes, lines 9616-13003
9616 "CM" 9617 ], 9618 r: 1 9619 }, 9620 "Africa/El_Aaiun": { 9621 u: 60, 9622 d: 0, 9623 c: [ 9624 "EH" 9625 ] 9626 }, 9627 "Africa/Freetown": { 9628 a: "Africa/Abidjan", 9629 c: [ 9630 "SL" 9631 ], 9632 r: 1 9633 }, 9634 "Africa/Gaborone": { 9635 a: "Africa/Maputo", 9636 c: [ 9637 "BW" 9638 ], 9639 r: 1 9640 }, 9641 "Africa/Harare": { 9642 a: "Africa/Maputo", 9643 c: [ 9644 "ZW" 9645 ], 9646 r: 1 9647 }, 9648 "Africa/Johannesburg": { 9649 u: 120, 9650 c: [ 9651 "ZA", 9652 "LS", 9653 "SZ" 9654 ] 9655 }, 9656 "Africa/Juba": { 9657 u: 120, 9658 c: [ 9659 "SS" 9660 ] 9661 }, 9662 "Africa/Kampala": { 9663 a: "Africa/Nairobi", 9664 c: [ 9665 "UG" 9666 ], 9667 r: 1 9668 }, 9669 "Africa/Khartoum": { 9670 u: 120, 9671 c: [ 9672 "SD" 9673 ] 9674 }, 9675 "Africa/Kigali": { 9676 a: "Africa/Maputo", 9677 c: [ 9678 "RW" 9679 ], 9680 r: 1 9681 }, 9682 "Africa/Kinshasa": { 9683 a: "Africa/Lagos", 9684 c: [ 9685 "CD" 9686 ], 9687 r: 1 9688 }, 9689 "Africa/Lagos": { 9690 u: 60, 9691 c: [ 9692 "NG", 9693 "AO", 9694 "BJ", 9695 "CD", 9696 "CF", 9697 "CG", 9698 "CM", 9699 "GA", 9700 "GQ", 9701 "NE" 9702 ] 9703 }, 9704 "Africa/Libreville": { 9705 a: "Africa/Lagos", 9706 c: [ 9707 "GA" 9708 ], 9709 r: 1 9710 }, 9711 "Africa/Lome": { 9712 a: "Africa/Abidjan", 9713 c: [ 9714 "TG" 9715 ], 9716 r: 1 9717 }, 9718 "Africa/Luanda": { 9719 a: "Africa/Lagos", 9720 c: [ 9721 "AO" 9722 ], 9723 r: 1 9724 }, 9725 "Africa/Lubumbashi": { 9726 a: "Africa/Maputo", 9727 c: [ 9728 "CD" 9729 ], 9730 r: 1 9731 }, 9732 "Africa/Lusaka": { 9733 a: "Africa/Maputo", 9734 c: [ 9735 "ZM" 9736 ], 9737 r: 1 9738 }, 9739 "Africa/Malabo": { 9740 a: "Africa/Lagos", 9741 c: [ 9742 "GQ" 9743 ], 9744 r: 1 9745 }, 9746 "Africa/Maputo": { 9747 u: 120, 9748 c: [ 9749 "MZ", 9750 "BI", 9751 "BW", 9752 "CD", 9753 "MW", 9754 "RW", 9755 "ZM", 9756 "ZW" 9757 ] 9758 }, 9759 "Africa/Maseru": { 9760 a: "Africa/Johannesburg", 9761 c: [ 9762 "LS" 9763 ], 9764 r: 1 9765 }, 9766 "Africa/Mbabane": { 9767 a: "Africa/Johannesburg", 9768 c: [ 9769 "SZ" 9770 ], 9771 r: 1 9772 }, 9773 "Africa/Mogadishu": { 9774 a: "Africa/Nairobi", 9775 c: [ 9776 "SO" 9777 ], 9778 r: 1 9779 }, 9780 "Africa/Monrovia": { 9781 u: 0, 9782 c: [ 9783 "LR" 9784 ] 9785 }, 9786 "Africa/Nairobi": { 9787 u: 180, 9788 c: [ 9789 "KE", 9790 "DJ", 9791 "ER", 9792 "ET", 9793 "KM", 9794 "MG", 9795 "SO", 9796 "TZ", 9797 "UG", 9798 "YT" 9799 ] 9800 }, 9801 "Africa/Ndjamena": { 9802 u: 60, 9803 c: [ 9804 "TD" 9805 ] 9806 }, 9807 "Africa/Niamey": { 9808 a: "Africa/Lagos", 9809 c: [ 9810 "NE" 9811 ], 9812 r: 1 9813 }, 9814 "Africa/Nouakchott": { 9815 a: "Africa/Abidjan", 9816 c: [ 9817 "MR" 9818 ], 9819 r: 1 9820 }, 9821 "Africa/Ouagadougou": { 9822 a: "Africa/Abidjan", 9823 c: [ 9824 "BF" 9825 ], 9826 r: 1 9827 }, 9828 "Africa/Porto-Novo": { 9829 a: "Africa/Lagos", 9830 c: [ 9831 "BJ" 9832 ], 9833 r: 1 9834 }, 9835 "Africa/Sao_Tome": { 9836 u: 0, 9837 c: [ 9838 "ST" 9839 ] 9840 }, 9841 "Africa/Timbuktu": { 9842 a: "Africa/Abidjan", 9843 c: [ 9844 "ML" 9845 ], 9846 r: 1 9847 }, 9848 "Africa/Tripoli": { 9849 u: 120, 9850 c: [ 9851 "LY" 9852 ] 9853 }, 9854 "Africa/Tunis": { 9855 u: 60, 9856 c: [ 9857 "TN" 9858 ] 9859 }, 9860 "Africa/Windhoek": { 9861 u: 120, 9862 c: [ 9863 "NA" 9864 ] 9865 }, 9866 "America/Adak": { 9867 u: -600, 9868 d: -540, 9869 c: [ 9870 "US" 9871 ] 9872 }, 9873 "America/Anchorage": { 9874 u: -540, 9875 d: -480, 9876 c: [ 9877 "US" 9878 ] 9879 }, 9880 "America/Anguilla": { 9881 a: "America/Puerto_Rico", 9882 c: [ 9883 "AI" 9884 ], 9885 r: 1 9886 }, 9887 "America/Antigua": { 9888 a: "America/Puerto_Rico", 9889 c: [ 9890 "AG" 9891 ], 9892 r: 1 9893 }, 9894 "America/Araguaina": { 9895 u: -180, 9896 c: [ 9897 "BR" 9898 ] 9899 }, 9900 "America/Argentina/Buenos_Aires": { 9901 u: -180, 9902 c: [ 9903 "AR" 9904 ] 9905 }, 9906 "America/Argentina/Catamarca": { 9907 u: -180, 9908 c: [ 9909 "AR" 9910 ] 9911 }, 9912 "America/Argentina/ComodRivadavia": { 9913 a: "America/Argentina/Catamarca", 9914 r: 1 9915 }, 9916 "America/Argentina/Cordoba": { 9917 u: -180, 9918 c: [ 9919 "AR" 9920 ] 9921 }, 9922 "America/Argentina/Jujuy": { 9923 u: -180, 9924 c: [ 9925 "AR" 9926 ] 9927 }, 9928 "America/Argentina/La_Rioja": { 9929 u: -180, 9930 c: [ 9931 "AR" 9932 ] 9933 }, 9934 "America/Argentina/Mendoza": { 9935 u: -180, 9936 c: [ 9937 "AR" 9938 ] 9939 }, 9940 "America/Argentina/Rio_Gallegos": { 9941 u: -180, 9942 c: [ 9943 "AR" 9944 ] 9945 }, 9946 "America/Argentina/Salta": { 9947 u: -180, 9948 c: [ 9949 "AR" 9950 ] 9951 }, 9952 "America/Argentina/San_Juan": { 9953 u: -180, 9954 c: [ 9955 "AR" 9956 ] 9957 }, 9958 "America/Argentina/San_Luis": { 9959 u: -180, 9960 c: [ 9961 "AR" 9962 ] 9963 }, 9964 "America/Argentina/Tucuman": { 9965 u: -180, 9966 c: [ 9967 "AR" 9968 ] 9969 }, 9970 "America/Argentina/Ushuaia": { 9971 u: -180, 9972 c: [ 9973 "AR" 9974 ] 9975 }, 9976 "America/Aruba": { 9977 a: "America/Puerto_Rico", 9978 c: [ 9979 "AW" 9980 ], 9981 r: 1 9982 }, 9983 "America/Asuncion": { 9984 u: -240, 9985 d: -180, 9986 c: [ 9987 "PY" 9988 ] 9989 }, 9990 "America/Atikokan": { 9991 a: "America/Panama", 9992 c: [ 9993 "CA" 9994 ], 9995 r: 1 9996 }, 9997 "America/Atka": { 9998 a: "America/Adak", 9999 r: 1 10000 }, 10001 "America/Bahia": { 10002 u: -180, 10003 c: [ 10004 "BR" 10005 ] 10006 }, 10007 "America/Bahia_Banderas": { 10008 u: -360, 10009 c: [ 10010 "MX" 10011 ] 10012 }, 10013 "America/Barbados": { 10014 u: -240, 10015 c: [ 10016 "BB" 10017 ] 10018 }, 10019 "America/Belem": { 10020 u: -180, 10021 c: [ 10022 "BR" 10023 ] 10024 }, 10025 "America/Belize": { 10026 u: -360, 10027 c: [ 10028 "BZ" 10029 ] 10030 }, 10031 "America/Blanc-Sablon": { 10032 a: "America/Puerto_Rico", 10033 c: [ 10034 "CA" 10035 ], 10036 r: 1 10037 }, 10038 "America/Boa_Vista": { 10039 u: -240, 10040 c: [ 10041 "BR" 10042 ] 10043 }, 10044 "America/Bogota": { 10045 u: -300, 10046 c: [ 10047 "CO" 10048 ] 10049 }, 10050 "America/Boise": { 10051 u: -420, 10052 d: -360, 10053 c: [ 10054 "US" 10055 ] 10056 }, 10057 "America/Buenos_Aires": { 10058 a: "America/Argentina/Buenos_Aires", 10059 r: 1 10060 }, 10061 "America/Cambridge_Bay": { 10062 u: -420, 10063 d: -360, 10064 c: [ 10065 "CA" 10066 ] 10067 }, 10068 "America/Campo_Grande": { 10069 u: -240, 10070 c: [ 10071 "BR" 10072 ] 10073 }, 10074 "America/Cancun": { 10075 u: -300, 10076 c: [ 10077 "MX" 10078 ] 10079 }, 10080 "America/Caracas": { 10081 u: -240, 10082 c: [ 10083 "VE" 10084 ] 10085 }, 10086 "America/Catamarca": { 10087 a: "America/Argentina/Catamarca", 10088 r: 1 10089 }, 10090 "America/Cayenne": { 10091 u: -180, 10092 c: [ 10093 "GF" 10094 ] 10095 }, 10096 "America/Cayman": { 10097 a: "America/Panama", 10098 c: [ 10099 "KY" 10100 ], 10101 r: 1 10102 }, 10103 "America/Chicago": { 10104 u: -360, 10105 d: -300, 10106 c: [ 10107 "US" 10108 ] 10109 }, 10110 "America/Chihuahua": { 10111 u: -360, 10112 c: [ 10113 "MX" 10114 ] 10115 }, 10116 "America/Ciudad_Juarez": { 10117 u: -420, 10118 d: -360, 10119 c: [ 10120 "MX" 10121 ] 10122 }, 10123 "America/Coral_Harbour": { 10124 a: "America/Panama", 10125 c: [ 10126 "CA" 10127 ], 10128 r: 1 10129 }, 10130 "America/Cordoba": { 10131 a: "America/Argentina/Cordoba", 10132 r: 1 10133 }, 10134 "America/Costa_Rica": { 10135 u: -360, 10136 c: [ 10137 "CR" 10138 ] 10139 }, 10140 "America/Creston": { 10141 a: "America/Phoenix", 10142 c: [ 10143 "CA" 10144 ], 10145 r: 1 10146 }, 10147 "America/Cuiaba": { 10148 u: -240, 10149 c: [ 10150 "BR" 10151 ] 10152 }, 10153 "America/Curacao": { 10154 a: "America/Puerto_Rico", 10155 c: [ 10156 "CW" 10157 ], 10158 r: 1 10159 }, 10160 "America/Danmarkshavn": { 10161 u: 0, 10162 c: [ 10163 "GL" 10164 ] 10165 }, 10166 "America/Dawson": { 10167 u: -420, 10168 c: [ 10169 "CA" 10170 ] 10171 }, 10172 "America/Dawson_Creek": { 10173 u: -420, 10174 c: [ 10175 "CA" 10176 ] 10177 }, 10178 "America/Denver": { 10179 u: -420, 10180 d: -360, 10181 c: [ 10182 "US" 10183 ] 10184 }, 10185 "America/Detroit": { 10186 u: -300, 10187 d: -240, 10188 c: [ 10189 "US" 10190 ] 10191 }, 10192 "America/Dominica": { 10193 a: "America/Puerto_Rico", 10194 c: [ 10195 "DM" 10196 ], 10197 r: 1 10198 }, 10199 "America/Edmonton": { 10200 u: -420, 10201 d: -360, 10202 c: [ 10203 "CA" 10204 ] 10205 }, 10206 "America/Eirunepe": { 10207 u: -300, 10208 c: [ 10209 "BR" 10210 ] 10211 }, 10212 "America/El_Salvador": { 10213 u: -360, 10214 c: [ 10215 "SV" 10216 ] 10217 }, 10218 "America/Ensenada": { 10219 a: "America/Tijuana", 10220 r: 1 10221 }, 10222 "America/Fort_Nelson": { 10223 u: -420, 10224 c: [ 10225 "CA" 10226 ] 10227 }, 10228 "America/Fort_Wayne": { 10229 a: "America/Indiana/Indianapolis", 10230 r: 1 10231 }, 10232 "America/Fortaleza": { 10233 u: -180, 10234 c: [ 10235 "BR" 10236 ] 10237 }, 10238 "America/Glace_Bay": { 10239 u: -240, 10240 d: -180, 10241 c: [ 10242 "CA" 10243 ] 10244 }, 10245 "America/Godthab": { 10246 a: "America/Nuuk", 10247 r: 1 10248 }, 10249 "America/Goose_Bay": { 10250 u: -240, 10251 d: -180, 10252 c: [ 10253 "CA" 10254 ] 10255 }, 10256 "America/Grand_Turk": { 10257 u: -300, 10258 d: -240, 10259 c: [ 10260 "TC" 10261 ] 10262 }, 10263 "America/Grenada": { 10264 a: "America/Puerto_Rico", 10265 c: [ 10266 "GD" 10267 ], 10268 r: 1 10269 }, 10270 "America/Guadeloupe": { 10271 a: "America/Puerto_Rico", 10272 c: [ 10273 "GP" 10274 ], 10275 r: 1 10276 }, 10277 "America/Guatemala": { 10278 u: -360, 10279 c: [ 10280 "GT" 10281 ] 10282 }, 10283 "America/Guayaquil": { 10284 u: -300, 10285 c: [ 10286 "EC" 10287 ] 10288 }, 10289 "America/Guyana": { 10290 u: -240, 10291 c: [ 10292 "GY" 10293 ] 10294 }, 10295 "America/Halifax": { 10296 u: -240, 10297 d: -180, 10298 c: [ 10299 "CA" 10300 ] 10301 }, 10302 "America/Havana": { 10303 u: -300, 10304 d: -240, 10305 c: [ 10306 "CU" 10307 ] 10308 }, 10309 "America/Hermosillo": { 10310 u: -420, 10311 c: [ 10312 "MX" 10313 ] 10314 }, 10315 "America/Indiana/Indianapolis": { 10316 u: -300, 10317 d: -240, 10318 c: [ 10319 "US" 10320 ] 10321 }, 10322 "America/Indiana/Knox": { 10323 u: -360, 10324 d: -300, 10325 c: [ 10326 "US" 10327 ] 10328 }, 10329 "America/Indiana/Marengo": { 10330 u: -300, 10331 d: -240, 10332 c: [ 10333 "US" 10334 ] 10335 }, 10336 "America/Indiana/Petersburg": { 10337 u: -300, 10338 d: -240, 10339 c: [ 10340 "US" 10341 ] 10342 }, 10343 "America/Indiana/Tell_City": { 10344 u: -360, 10345 d: -300, 10346 c: [ 10347 "US" 10348 ] 10349 }, 10350 "America/Indiana/Vevay": { 10351 u: -300, 10352 d: -240, 10353 c: [ 10354 "US" 10355 ] 10356 }, 10357 "America/Indiana/Vincennes": { 10358 u: -300, 10359 d: -240, 10360 c: [ 10361 "US" 10362 ] 10363 }, 10364 "America/Indiana/Winamac": { 10365 u: -300, 10366 d: -240, 10367 c: [ 10368 "US" 10369 ] 10370 }, 10371 "America/Indianapolis": { 10372 a: "America/Indiana/Indianapolis", 10373 r: 1 10374 }, 10375 "America/Inuvik": { 10376 u: -420, 10377 d: -360, 10378 c: [ 10379 "CA" 10380 ] 10381 }, 10382 "America/Iqaluit": { 10383 u: -300, 10384 d: -240, 10385 c: [ 10386 "CA" 10387 ] 10388 }, 10389 "America/Jamaica": { 10390 u: -300, 10391 c: [ 10392 "JM" 10393 ] 10394 }, 10395 "America/Jujuy": { 10396 a: "America/Argentina/Jujuy", 10397 r: 1 10398 }, 10399 "America/Juneau": { 10400 u: -540, 10401 d: -480, 10402 c: [ 10403 "US" 10404 ] 10405 }, 10406 "America/Kentucky/Louisville": { 10407 u: -300, 10408 d: -240, 10409 c: [ 10410 "US" 10411 ] 10412 }, 10413 "America/Kentucky/Monticello": { 10414 u: -300, 10415 d: -240, 10416 c: [ 10417 "US" 10418 ] 10419 }, 10420 "America/Knox_IN": { 10421 a: "America/Indiana/Knox", 10422 r: 1 10423 }, 10424 "America/Kralendijk": { 10425 a: "America/Puerto_Rico", 10426 c: [ 10427 "BQ" 10428 ], 10429 r: 1 10430 }, 10431 "America/La_Paz": { 10432 u: -240, 10433 c: [ 10434 "BO" 10435 ] 10436 }, 10437 "America/Lima": { 10438 u: -300, 10439 c: [ 10440 "PE" 10441 ] 10442 }, 10443 "America/Los_Angeles": { 10444 u: -480, 10445 d: -420, 10446 c: [ 10447 "US" 10448 ] 10449 }, 10450 "America/Louisville": { 10451 a: "America/Kentucky/Louisville", 10452 r: 1 10453 }, 10454 "America/Lower_Princes": { 10455 a: "America/Puerto_Rico", 10456 c: [ 10457 "SX" 10458 ], 10459 r: 1 10460 }, 10461 "America/Maceio": { 10462 u: -180, 10463 c: [ 10464 "BR" 10465 ] 10466 }, 10467 "America/Managua": { 10468 u: -360, 10469 c: [ 10470 "NI" 10471 ] 10472 }, 10473 "America/Manaus": { 10474 u: -240, 10475 c: [ 10476 "BR" 10477 ] 10478 }, 10479 "America/Marigot": { 10480 a: "America/Puerto_Rico", 10481 c: [ 10482 "MF" 10483 ], 10484 r: 1 10485 }, 10486 "America/Martinique": { 10487 u: -240, 10488 c: [ 10489 "MQ" 10490 ] 10491 }, 10492 "America/Matamoros": { 10493 u: -360, 10494 d: -300, 10495 c: [ 10496 "MX" 10497 ] 10498 }, 10499 "America/Mazatlan": { 10500 u: -420, 10501 c: [ 10502 "MX" 10503 ] 10504 }, 10505 "America/Mendoza": { 10506 a: "America/Argentina/Mendoza", 10507 r: 1 10508 }, 10509 "America/Menominee": { 10510 u: -360, 10511 d: -300, 10512 c: [ 10513 "US" 10514 ] 10515 }, 10516 "America/Merida": { 10517 u: -360, 10518 c: [ 10519 "MX" 10520 ] 10521 }, 10522 "America/Metlakatla": { 10523 u: -540, 10524 d: -480, 10525 c: [ 10526 "US" 10527 ] 10528 }, 10529 "America/Mexico_City": { 10530 u: -360, 10531 c: [ 10532 "MX" 10533 ] 10534 }, 10535 "America/Miquelon": { 10536 u: -180, 10537 d: -120, 10538 c: [ 10539 "PM" 10540 ] 10541 }, 10542 "America/Moncton": { 10543 u: -240, 10544 d: -180, 10545 c: [ 10546 "CA" 10547 ] 10548 }, 10549 "America/Monterrey": { 10550 u: -360, 10551 c: [ 10552 "MX" 10553 ] 10554 }, 10555 "America/Montevideo": { 10556 u: -180, 10557 c: [ 10558 "UY" 10559 ] 10560 }, 10561 "America/Montreal": { 10562 a: "America/Toronto", 10563 c: [ 10564 "CA" 10565 ], 10566 r: 1 10567 }, 10568 "America/Montserrat": { 10569 a: "America/Puerto_Rico", 10570 c: [ 10571 "MS" 10572 ], 10573 r: 1 10574 }, 10575 "America/Nassau": { 10576 a: "America/Toronto", 10577 c: [ 10578 "BS" 10579 ], 10580 r: 1 10581 }, 10582 "America/New_York": { 10583 u: -300, 10584 d: -240, 10585 c: [ 10586 "US" 10587 ] 10588 }, 10589 "America/Nipigon": { 10590 a: "America/Toronto", 10591 c: [ 10592 "CA" 10593 ], 10594 r: 1 10595 }, 10596 "America/Nome": { 10597 u: -540, 10598 d: -480, 10599 c: [ 10600 "US" 10601 ] 10602 }, 10603 "America/Noronha": { 10604 u: -120, 10605 c: [ 10606 "BR" 10607 ] 10608 }, 10609 "America/North_Dakota/Beulah": { 10610 u: -360, 10611 d: -300, 10612 c: [ 10613 "US" 10614 ] 10615 }, 10616 "America/North_Dakota/Center": { 10617 u: -360, 10618 d: -300, 10619 c: [ 10620 "US" 10621 ] 10622 }, 10623 "America/North_Dakota/New_Salem": { 10624 u: -360, 10625 d: -300, 10626 c: [ 10627 "US" 10628 ] 10629 }, 10630 "America/Nuuk": { 10631 u: -120, 10632 d: -60, 10633 c: [ 10634 "GL" 10635 ] 10636 }, 10637 "America/Ojinaga": { 10638 u: -360, 10639 d: -300, 10640 c: [ 10641 "MX" 10642 ] 10643 }, 10644 "America/Panama": { 10645 u: -300, 10646 c: [ 10647 "PA", 10648 "CA", 10649 "KY" 10650 ] 10651 }, 10652 "America/Pangnirtung": { 10653 a: "America/Iqaluit", 10654 r: 1 10655 }, 10656 "America/Paramaribo": { 10657 u: -180, 10658 c: [ 10659 "SR" 10660 ] 10661 }, 10662 "America/Phoenix": { 10663 u: -420, 10664 c: [ 10665 "US", 10666 "CA" 10667 ] 10668 }, 10669 "America/Port-au-Prince": { 10670 u: -300, 10671 d: -240, 10672 c: [ 10673 "HT" 10674 ] 10675 }, 10676 "America/Port_of_Spain": { 10677 a: "America/Puerto_Rico", 10678 c: [ 10679 "TT" 10680 ], 10681 r: 1 10682 }, 10683 "America/Porto_Acre": { 10684 a: "America/Rio_Branco", 10685 r: 1 10686 }, 10687 "America/Porto_Velho": { 10688 u: -240, 10689 c: [ 10690 "BR" 10691 ] 10692 }, 10693 "America/Puerto_Rico": { 10694 u: -240, 10695 c: [ 10696 "PR", 10697 "AG", 10698 "CA", 10699 "AI", 10700 "AW", 10701 "BL", 10702 "BQ", 10703 "CW", 10704 "DM", 10705 "GD", 10706 "GP", 10707 "KN", 10708 "LC", 10709 "MF", 10710 "MS", 10711 "SX", 10712 "TT", 10713 "VC", 10714 "VG", 10715 "VI" 10716 ] 10717 }, 10718 "America/Punta_Arenas": { 10719 u: -180, 10720 c: [ 10721 "CL" 10722 ] 10723 }, 10724 "America/Rainy_River": { 10725 a: "America/Winnipeg", 10726 r: 1 10727 }, 10728 "America/Rankin_Inlet": { 10729 u: -360, 10730 d: -300, 10731 c: [ 10732 "CA" 10733 ] 10734 }, 10735 "America/Recife": { 10736 u: -180, 10737 c: [ 10738 "BR" 10739 ] 10740 }, 10741 "America/Regina": { 10742 u: -360, 10743 c: [ 10744 "CA" 10745 ] 10746 }, 10747 "America/Resolute": { 10748 u: -360, 10749 d: -300, 10750 c: [ 10751 "CA" 10752 ] 10753 }, 10754 "America/Rio_Branco": { 10755 u: -300, 10756 c: [ 10757 "BR" 10758 ] 10759 }, 10760 "America/Rosario": { 10761 a: "America/Argentina/Cordoba", 10762 r: 1 10763 }, 10764 "America/Santa_Isabel": { 10765 a: "America/Tijuana", 10766 r: 1 10767 }, 10768 "America/Santarem": { 10769 u: -180, 10770 c: [ 10771 "BR" 10772 ] 10773 }, 10774 "America/Santiago": { 10775 u: -240, 10776 d: -180, 10777 c: [ 10778 "CL" 10779 ] 10780 }, 10781 "America/Santo_Domingo": { 10782 u: -240, 10783 c: [ 10784 "DO" 10785 ] 10786 }, 10787 "America/Sao_Paulo": { 10788 u: -180, 10789 c: [ 10790 "BR" 10791 ] 10792 }, 10793 "America/Scoresbysund": { 10794 u: -60, 10795 d: 0, 10796 c: [ 10797 "GL" 10798 ] 10799 }, 10800 "America/Shiprock": { 10801 a: "America/Denver", 10802 r: 1 10803 }, 10804 "America/Sitka": { 10805 u: -540, 10806 d: -480, 10807 c: [ 10808 "US" 10809 ] 10810 }, 10811 "America/St_Barthelemy": { 10812 a: "America/Puerto_Rico", 10813 c: [ 10814 "BL" 10815 ], 10816 r: 1 10817 }, 10818 "America/St_Johns": { 10819 u: -210, 10820 d: -150, 10821 c: [ 10822 "CA" 10823 ] 10824 }, 10825 "America/St_Kitts": { 10826 a: "America/Puerto_Rico", 10827 c: [ 10828 "KN" 10829 ], 10830 r: 1 10831 }, 10832 "America/St_Lucia": { 10833 a: "America/Puerto_Rico", 10834 c: [ 10835 "LC" 10836 ], 10837 r: 1 10838 }, 10839 "America/St_Thomas": { 10840 a: "America/Puerto_Rico", 10841 c: [ 10842 "VI" 10843 ], 10844 r: 1 10845 }, 10846 "America/St_Vincent": { 10847 a: "America/Puerto_Rico", 10848 c: [ 10849 "VC" 10850 ], 10851 r: 1 10852 }, 10853 "America/Swift_Current": { 10854 u: -360, 10855 c: [ 10856 "CA" 10857 ] 10858 }, 10859 "America/Tegucigalpa": { 10860 u: -360, 10861 c: [ 10862 "HN" 10863 ] 10864 }, 10865 "America/Thule": { 10866 u: -240, 10867 d: -180, 10868 c: [ 10869 "GL" 10870 ] 10871 }, 10872 "America/Thunder_Bay": { 10873 a: "America/Toronto", 10874 c: [ 10875 "CA" 10876 ], 10877 r: 1 10878 }, 10879 "America/Tijuana": { 10880 u: -480, 10881 d: -420, 10882 c: [ 10883 "MX" 10884 ] 10885 }, 10886 "America/Toronto": { 10887 u: -300, 10888 d: -240, 10889 c: [ 10890 "CA", 10891 "BS" 10892 ] 10893 }, 10894 "America/Tortola": { 10895 a: "America/Puerto_Rico", 10896 c: [ 10897 "VG" 10898 ], 10899 r: 1 10900 }, 10901 "America/Vancouver": { 10902 u: -480, 10903 d: -420, 10904 c: [ 10905 "CA" 10906 ] 10907 }, 10908 "America/Virgin": { 10909 a: "America/Puerto_Rico", 10910 c: [ 10911 "VI" 10912 ], 10913 r: 1 10914 }, 10915 "America/Whitehorse": { 10916 u: -420, 10917 c: [ 10918 "CA" 10919 ] 10920 }, 10921 "America/Winnipeg": { 10922 u: -360, 10923 d: -300, 10924 c: [ 10925 "CA" 10926 ] 10927 }, 10928 "America/Yakutat": { 10929 u: -540, 10930 d: -480, 10931 c: [ 10932 "US" 10933 ] 10934 }, 10935 "America/Yellowknife": { 10936 a: "America/Edmonton", 10937 r: 1 10938 }, 10939 "Antarctica/Casey": { 10940 u: 660, 10941 c: [ 10942 "AQ" 10943 ] 10944 }, 10945 "Antarctica/Davis": { 10946 u: 420, 10947 c: [ 10948 "AQ" 10949 ] 10950 }, 10951 "Antarctica/DumontDUrville": { 10952 a: "Pacific/Port_Moresby", 10953 c: [ 10954 "AQ" 10955 ], 10956 r: 1 10957 }, 10958 "Antarctica/Macquarie": { 10959 u: 600, 10960 d: 660, 10961 c: [ 10962 "AU" 10963 ] 10964 }, 10965 "Antarctica/Mawson": { 10966 u: 300, 10967 c: [ 10968 "AQ" 10969 ] 10970 }, 10971 "Antarctica/McMurdo": { 10972 a: "Pacific/Auckland", 10973 c: [ 10974 "AQ" 10975 ], 10976 r: 1 10977 }, 10978 "Antarctica/Palmer": { 10979 u: -180, 10980 c: [ 10981 "AQ" 10982 ] 10983 }, 10984 "Antarctica/Rothera": { 10985 u: -180, 10986 c: [ 10987 "AQ" 10988 ] 10989 }, 10990 "Antarctica/South_Pole": { 10991 a: "Pacific/Auckland", 10992 c: [ 10993 "AQ" 10994 ], 10995 r: 1 10996 }, 10997 "Antarctica/Syowa": { 10998 a: "Asia/Riyadh", 10999 c: [ 11000 "AQ" 11001 ], 11002 r: 1 11003 }, 11004 "Antarctica/Troll": { 11005 u: 0, 11006 d: 120, 11007 c: [ 11008 "AQ" 11009 ] 11010 }, 11011 "Antarctica/Vostok": { 11012 a: "Asia/Urumqi", 11013 c: [ 11014 "AQ" 11015 ], 11016 r: 1 11017 }, 11018 "Arctic/Longyearbyen": { 11019 a: "Europe/Berlin", 11020 c: [ 11021 "SJ" 11022 ], 11023 r: 1 11024 }, 11025 "Asia/Aden": { 11026 a: "Asia/Riyadh", 11027 c: [ 11028 "YE" 11029 ], 11030 r: 1 11031 }, 11032 "Asia/Almaty": { 11033 u: 360, 11034 c: [ 11035 "KZ" 11036 ] 11037 }, 11038 "Asia/Amman": { 11039 u: 180, 11040 c: [ 11041 "JO" 11042 ] 11043 }, 11044 "Asia/Anadyr": { 11045 u: 720, 11046 c: [ 11047 "RU" 11048 ] 11049 }, 11050 "Asia/Aqtau": { 11051 u: 300, 11052 c: [ 11053 "KZ" 11054 ] 11055 }, 11056 "Asia/Aqtobe": { 11057 u: 300, 11058 c: [ 11059 "KZ" 11060 ] 11061 }, 11062 "Asia/Ashgabat": { 11063 u: 300, 11064 c: [ 11065 "TM" 11066 ] 11067 }, 11068 "Asia/Ashkhabad": { 11069 a: "Asia/Ashgabat", 11070 r: 1 11071 }, 11072 "Asia/Atyrau": { 11073 u: 300, 11074 c: [ 11075 "KZ" 11076 ] 11077 }, 11078 "Asia/Baghdad": { 11079 u: 180, 11080 c: [ 11081 "IQ" 11082 ] 11083 }, 11084 "Asia/Bahrain": { 11085 a: "Asia/Qatar", 11086 c: [ 11087 "BH" 11088 ], 11089 r: 1 11090 }, 11091 "Asia/Baku": { 11092 u: 240, 11093 c: [ 11094 "AZ" 11095 ] 11096 }, 11097 "Asia/Bangkok": { 11098 u: 420, 11099 c: [ 11100 "TH", 11101 "CX", 11102 "KH", 11103 "LA", 11104 "VN" 11105 ] 11106 }, 11107 "Asia/Barnaul": { 11108 u: 420, 11109 c: [ 11110 "RU" 11111 ] 11112 }, 11113 "Asia/Beirut": { 11114 u: 120, 11115 d: 180, 11116 c: [ 11117 "LB" 11118 ] 11119 }, 11120 "Asia/Bishkek": { 11121 u: 360, 11122 c: [ 11123 "KG" 11124 ] 11125 }, 11126 "Asia/Brunei": { 11127 a: "Asia/Kuching", 11128 c: [ 11129 "BN" 11130 ], 11131 r: 1 11132 }, 11133 "Asia/Calcutta": { 11134 a: "Asia/Kolkata", 11135 r: 1 11136 }, 11137 "Asia/Chita": { 11138 u: 540, 11139 c: [ 11140 "RU" 11141 ] 11142 }, 11143 "Asia/Choibalsan": { 11144 u: 480, 11145 c: [ 11146 "MN" 11147 ] 11148 }, 11149 "Asia/Chongqing": { 11150 a: "Asia/Shanghai", 11151 r: 1 11152 }, 11153 "Asia/Chungking": { 11154 a: "Asia/Shanghai", 11155 r: 1 11156 }, 11157 "Asia/Colombo": { 11158 u: 330, 11159 c: [ 11160 "LK" 11161 ] 11162 }, 11163 "Asia/Dacca": { 11164 a: "Asia/Dhaka", 11165 r: 1 11166 }, 11167 "Asia/Damascus": { 11168 u: 180, 11169 c: [ 11170 "SY" 11171 ] 11172 }, 11173 "Asia/Dhaka": { 11174 u: 360, 11175 c: [ 11176 "BD" 11177 ] 11178 }, 11179 "Asia/Dili": { 11180 u: 540, 11181 c: [ 11182 "TL" 11183 ] 11184 }, 11185 "Asia/Dubai": { 11186 u: 240, 11187 c: [ 11188 "AE", 11189 "OM", 11190 "RE", 11191 "SC", 11192 "TF" 11193 ] 11194 }, 11195 "Asia/Dushanbe": { 11196 u: 300, 11197 c: [ 11198 "TJ" 11199 ] 11200 }, 11201 "Asia/Famagusta": { 11202 u: 120, 11203 d: 180, 11204 c: [ 11205 "CY" 11206 ] 11207 }, 11208 "Asia/Gaza": { 11209 u: 120, 11210 d: 180, 11211 c: [ 11212 "PS" 11213 ] 11214 }, 11215 "Asia/Harbin": { 11216 a: "Asia/Shanghai", 11217 r: 1 11218 }, 11219 "Asia/Hebron": { 11220 u: 120, 11221 d: 180, 11222 c: [ 11223 "PS" 11224 ] 11225 }, 11226 "Asia/Ho_Chi_Minh": { 11227 u: 420, 11228 c: [ 11229 "VN" 11230 ] 11231 }, 11232 "Asia/Hong_Kong": { 11233 u: 480, 11234 c: [ 11235 "HK" 11236 ] 11237 }, 11238 "Asia/Hovd": { 11239 u: 420, 11240 c: [ 11241 "MN" 11242 ] 11243 }, 11244 "Asia/Irkutsk": { 11245 u: 480, 11246 c: [ 11247 "RU" 11248 ] 11249 }, 11250 "Asia/Istanbul": { 11251 a: "Europe/Istanbul", 11252 r: 1 11253 }, 11254 "Asia/Jakarta": { 11255 u: 420, 11256 c: [ 11257 "ID" 11258 ] 11259 }, 11260 "Asia/Jayapura": { 11261 u: 540, 11262 c: [ 11263 "ID" 11264 ] 11265 }, 11266 "Asia/Jerusalem": { 11267 u: 120, 11268 d: 180, 11269 c: [ 11270 "IL" 11271 ] 11272 }, 11273 "Asia/Kabul": { 11274 u: 270, 11275 c: [ 11276 "AF" 11277 ] 11278 }, 11279 "Asia/Kamchatka": { 11280 u: 720, 11281 c: [ 11282 "RU" 11283 ] 11284 }, 11285 "Asia/Karachi": { 11286 u: 300, 11287 c: [ 11288 "PK" 11289 ] 11290 }, 11291 "Asia/Kashgar": { 11292 a: "Asia/Urumqi", 11293 c: [ 11294 "CN" 11295 ], 11296 r: 1 11297 }, 11298 "Asia/Kathmandu": { 11299 u: 345, 11300 c: [ 11301 "NP" 11302 ] 11303 }, 11304 "Asia/Katmandu": { 11305 a: "Asia/Kathmandu", 11306 r: 1 11307 }, 11308 "Asia/Khandyga": { 11309 u: 540, 11310 c: [ 11311 "RU" 11312 ] 11313 }, 11314 "Asia/Kolkata": { 11315 u: 330, 11316 c: [ 11317 "IN" 11318 ] 11319 }, 11320 "Asia/Krasnoyarsk": { 11321 u: 420, 11322 c: [ 11323 "RU" 11324 ] 11325 }, 11326 "Asia/Kuala_Lumpur": { 11327 a: "Asia/Singapore", 11328 c: [ 11329 "MY" 11330 ], 11331 r: 1 11332 }, 11333 "Asia/Kuching": { 11334 u: 480, 11335 c: [ 11336 "MY", 11337 "BN" 11338 ] 11339 }, 11340 "Asia/Kuwait": { 11341 a: "Asia/Riyadh", 11342 c: [ 11343 "KW" 11344 ], 11345 r: 1 11346 }, 11347 "Asia/Macao": { 11348 a: "Asia/Macau", 11349 r: 1 11350 }, 11351 "Asia/Macau": { 11352 u: 480, 11353 c: [ 11354 "MO" 11355 ] 11356 }, 11357 "Asia/Magadan": { 11358 u: 660, 11359 c: [ 11360 "RU" 11361 ] 11362 }, 11363 "Asia/Makassar": { 11364 u: 480, 11365 c: [ 11366 "ID" 11367 ] 11368 }, 11369 "Asia/Manila": { 11370 u: 480, 11371 c: [ 11372 "PH" 11373 ] 11374 }, 11375 "Asia/Muscat": { 11376 a: "Asia/Dubai", 11377 c: [ 11378 "OM" 11379 ], 11380 r: 1 11381 }, 11382 "Asia/Nicosia": { 11383 u: 120, 11384 d: 180, 11385 c: [ 11386 "CY" 11387 ] 11388 }, 11389 "Asia/Novokuznetsk": { 11390 u: 420, 11391 c: [ 11392 "RU" 11393 ] 11394 }, 11395 "Asia/Novosibirsk": { 11396 u: 420, 11397 c: [ 11398 "RU" 11399 ] 11400 }, 11401 "Asia/Omsk": { 11402 u: 360, 11403 c: [ 11404 "RU" 11405 ] 11406 }, 11407 "Asia/Oral": { 11408 u: 300, 11409 c: [ 11410 "KZ" 11411 ] 11412 }, 11413 "Asia/Phnom_Penh": { 11414 a: "Asia/Bangkok", 11415 c: [ 11416 "KH" 11417 ], 11418 r: 1 11419 }, 11420 "Asia/Pontianak": { 11421 u: 420, 11422 c: [ 11423 "ID" 11424 ] 11425 }, 11426 "Asia/Pyongyang": { 11427 u: 540, 11428 c: [ 11429 "KP" 11430 ] 11431 }, 11432 "Asia/Qatar": { 11433 u: 180, 11434 c: [ 11435 "QA", 11436 "BH" 11437 ] 11438 }, 11439 "Asia/Qostanay": { 11440 u: 360, 11441 c: [ 11442 "KZ" 11443 ] 11444 }, 11445 "Asia/Qyzylorda": { 11446 u: 300, 11447 c: [ 11448 "KZ" 11449 ] 11450 }, 11451 "Asia/Rangoon": { 11452 a: "Asia/Yangon", 11453 c: [ 11454 "MM" 11455 ], 11456 r: 1 11457 }, 11458 "Asia/Riyadh": { 11459 u: 180, 11460 c: [ 11461 "SA", 11462 "AQ", 11463 "KW", 11464 "YE" 11465 ] 11466 }, 11467 "Asia/Saigon": { 11468 a: "Asia/Ho_Chi_Minh", 11469 r: 1 11470 }, 11471 "Asia/Sakhalin": { 11472 u: 660, 11473 c: [ 11474 "RU" 11475 ] 11476 }, 11477 "Asia/Samarkand": { 11478 u: 300, 11479 c: [ 11480 "UZ" 11481 ] 11482 }, 11483 "Asia/Seoul": { 11484 u: 540, 11485 c: [ 11486 "KR" 11487 ] 11488 }, 11489 "Asia/Shanghai": { 11490 u: 480, 11491 c: [ 11492 "CN" 11493 ] 11494 }, 11495 "Asia/Singapore": { 11496 u: 480, 11497 c: [ 11498 "SG", 11499 "MY" 11500 ] 11501 }, 11502 "Asia/Srednekolymsk": { 11503 u: 660, 11504 c: [ 11505 "RU" 11506 ] 11507 }, 11508 "Asia/Taipei": { 11509 u: 480, 11510 c: [ 11511 "TW" 11512 ] 11513 }, 11514 "Asia/Tashkent": { 11515 u: 300, 11516 c: [ 11517 "UZ" 11518 ] 11519 }, 11520 "Asia/Tbilisi": { 11521 u: 240, 11522 c: [ 11523 "GE" 11524 ] 11525 }, 11526 "Asia/Tehran": { 11527 u: 210, 11528 c: [ 11529 "IR" 11530 ] 11531 }, 11532 "Asia/Tel_Aviv": { 11533 a: "Asia/Jerusalem", 11534 r: 1 11535 }, 11536 "Asia/Thimbu": { 11537 a: "Asia/Thimphu", 11538 r: 1 11539 }, 11540 "Asia/Thimphu": { 11541 u: 360, 11542 c: [ 11543 "BT" 11544 ] 11545 }, 11546 "Asia/Tokyo": { 11547 u: 540, 11548 c: [ 11549 "JP" 11550 ] 11551 }, 11552 "Asia/Tomsk": { 11553 u: 420, 11554 c: [ 11555 "RU" 11556 ] 11557 }, 11558 "Asia/Ujung_Pandang": { 11559 a: "Asia/Makassar", 11560 r: 1 11561 }, 11562 "Asia/Ulaanbaatar": { 11563 u: 480, 11564 c: [ 11565 "MN" 11566 ] 11567 }, 11568 "Asia/Ulan_Bator": { 11569 a: "Asia/Ulaanbaatar", 11570 r: 1 11571 }, 11572 "Asia/Urumqi": { 11573 u: 360, 11574 c: [ 11575 "CN", 11576 "AQ" 11577 ] 11578 }, 11579 "Asia/Ust-Nera": { 11580 u: 600, 11581 c: [ 11582 "RU" 11583 ] 11584 }, 11585 "Asia/Vientiane": { 11586 a: "Asia/Bangkok", 11587 c: [ 11588 "LA" 11589 ], 11590 r: 1 11591 }, 11592 "Asia/Vladivostok": { 11593 u: 600, 11594 c: [ 11595 "RU" 11596 ] 11597 }, 11598 "Asia/Yakutsk": { 11599 u: 540, 11600 c: [ 11601 "RU" 11602 ] 11603 }, 11604 "Asia/Yangon": { 11605 u: 390, 11606 c: [ 11607 "MM", 11608 "CC" 11609 ] 11610 }, 11611 "Asia/Yekaterinburg": { 11612 u: 300, 11613 c: [ 11614 "RU" 11615 ] 11616 }, 11617 "Asia/Yerevan": { 11618 u: 240, 11619 c: [ 11620 "AM" 11621 ] 11622 }, 11623 "Atlantic/Azores": { 11624 u: -60, 11625 d: 0, 11626 c: [ 11627 "PT" 11628 ] 11629 }, 11630 "Atlantic/Bermuda": { 11631 u: -240, 11632 d: -180, 11633 c: [ 11634 "BM" 11635 ] 11636 }, 11637 "Atlantic/Canary": { 11638 u: 0, 11639 d: 60, 11640 c: [ 11641 "ES" 11642 ] 11643 }, 11644 "Atlantic/Cape_Verde": { 11645 u: -60, 11646 c: [ 11647 "CV" 11648 ] 11649 }, 11650 "Atlantic/Faeroe": { 11651 a: "Atlantic/Faroe", 11652 r: 1 11653 }, 11654 "Atlantic/Faroe": { 11655 u: 0, 11656 d: 60, 11657 c: [ 11658 "FO" 11659 ] 11660 }, 11661 "Atlantic/Jan_Mayen": { 11662 a: "Europe/Berlin", 11663 c: [ 11664 "SJ" 11665 ], 11666 r: 1 11667 }, 11668 "Atlantic/Madeira": { 11669 u: 0, 11670 d: 60, 11671 c: [ 11672 "PT" 11673 ] 11674 }, 11675 "Atlantic/Reykjavik": { 11676 a: "Africa/Abidjan", 11677 c: [ 11678 "IS" 11679 ], 11680 r: 1 11681 }, 11682 "Atlantic/South_Georgia": { 11683 u: -120, 11684 c: [ 11685 "GS" 11686 ] 11687 }, 11688 "Atlantic/St_Helena": { 11689 a: "Africa/Abidjan", 11690 c: [ 11691 "SH" 11692 ], 11693 r: 1 11694 }, 11695 "Atlantic/Stanley": { 11696 u: -180, 11697 c: [ 11698 "FK" 11699 ] 11700 }, 11701 "Australia/ACT": { 11702 a: "Australia/Sydney", 11703 r: 1 11704 }, 11705 "Australia/Adelaide": { 11706 u: 570, 11707 d: 630, 11708 c: [ 11709 "AU" 11710 ] 11711 }, 11712 "Australia/Brisbane": { 11713 u: 600, 11714 c: [ 11715 "AU" 11716 ] 11717 }, 11718 "Australia/Broken_Hill": { 11719 u: 570, 11720 d: 630, 11721 c: [ 11722 "AU" 11723 ] 11724 }, 11725 "Australia/Canberra": { 11726 a: "Australia/Sydney", 11727 r: 1 11728 }, 11729 "Australia/Currie": { 11730 a: "Australia/Hobart", 11731 r: 1 11732 }, 11733 "Australia/Darwin": { 11734 u: 570, 11735 c: [ 11736 "AU" 11737 ] 11738 }, 11739 "Australia/Eucla": { 11740 u: 525, 11741 c: [ 11742 "AU" 11743 ] 11744 }, 11745 "Australia/Hobart": { 11746 u: 600, 11747 d: 660, 11748 c: [ 11749 "AU" 11750 ] 11751 }, 11752 "Australia/LHI": { 11753 a: "Australia/Lord_Howe", 11754 r: 1 11755 }, 11756 "Australia/Lindeman": { 11757 u: 600, 11758 c: [ 11759 "AU" 11760 ] 11761 }, 11762 "Australia/Lord_Howe": { 11763 u: 630, 11764 d: 660, 11765 c: [ 11766 "AU" 11767 ] 11768 }, 11769 "Australia/Melbourne": { 11770 u: 600, 11771 d: 660, 11772 c: [ 11773 "AU" 11774 ] 11775 }, 11776 "Australia/NSW": { 11777 a: "Australia/Sydney", 11778 r: 1 11779 }, 11780 "Australia/North": { 11781 a: "Australia/Darwin", 11782 r: 1 11783 }, 11784 "Australia/Perth": { 11785 u: 480, 11786 c: [ 11787 "AU" 11788 ] 11789 }, 11790 "Australia/Queensland": { 11791 a: "Australia/Brisbane", 11792 r: 1 11793 }, 11794 "Australia/South": { 11795 a: "Australia/Adelaide", 11796 r: 1 11797 }, 11798 "Australia/Sydney": { 11799 u: 600, 11800 d: 660, 11801 c: [ 11802 "AU" 11803 ] 11804 }, 11805 "Australia/Tasmania": { 11806 a: "Australia/Hobart", 11807 r: 1 11808 }, 11809 "Australia/Victoria": { 11810 a: "Australia/Melbourne", 11811 r: 1 11812 }, 11813 "Australia/West": { 11814 a: "Australia/Perth", 11815 r: 1 11816 }, 11817 "Australia/Yancowinna": { 11818 a: "Australia/Broken_Hill", 11819 r: 1 11820 }, 11821 "Brazil/Acre": { 11822 a: "America/Rio_Branco", 11823 r: 1 11824 }, 11825 "Brazil/DeNoronha": { 11826 a: "America/Noronha", 11827 r: 1 11828 }, 11829 "Brazil/East": { 11830 a: "America/Sao_Paulo", 11831 r: 1 11832 }, 11833 "Brazil/West": { 11834 a: "America/Manaus", 11835 r: 1 11836 }, 11837 CET: { 11838 u: 60, 11839 d: 120 11840 }, 11841 CST6CDT: { 11842 u: -360, 11843 d: -300 11844 }, 11845 "Canada/Atlantic": { 11846 a: "America/Halifax", 11847 r: 1 11848 }, 11849 "Canada/Central": { 11850 a: "America/Winnipeg", 11851 r: 1 11852 }, 11853 "Canada/Eastern": { 11854 a: "America/Toronto", 11855 c: [ 11856 "CA" 11857 ], 11858 r: 1 11859 }, 11860 "Canada/Mountain": { 11861 a: "America/Edmonton", 11862 r: 1 11863 }, 11864 "Canada/Newfoundland": { 11865 a: "America/St_Johns", 11866 r: 1 11867 }, 11868 "Canada/Pacific": { 11869 a: "America/Vancouver", 11870 r: 1 11871 }, 11872 "Canada/Saskatchewan": { 11873 a: "America/Regina", 11874 r: 1 11875 }, 11876 "Canada/Yukon": { 11877 a: "America/Whitehorse", 11878 r: 1 11879 }, 11880 "Chile/Continental": { 11881 a: "America/Santiago", 11882 r: 1 11883 }, 11884 "Chile/EasterIsland": { 11885 a: "Pacific/Easter", 11886 r: 1 11887 }, 11888 Cuba: { 11889 a: "America/Havana", 11890 r: 1 11891 }, 11892 EET: { 11893 u: 120, 11894 d: 180 11895 }, 11896 EST: { 11897 u: -300 11898 }, 11899 EST5EDT: { 11900 u: -300, 11901 d: -240 11902 }, 11903 Egypt: { 11904 a: "Africa/Cairo", 11905 r: 1 11906 }, 11907 Eire: { 11908 a: "Europe/Dublin", 11909 r: 1 11910 }, 11911 "Etc/GMT": { 11912 u: 0 11913 }, 11914 "Etc/GMT+0": { 11915 a: "Etc/GMT", 11916 r: 1 11917 }, 11918 "Etc/GMT+1": { 11919 u: -60 11920 }, 11921 "Etc/GMT+10": { 11922 u: -600 11923 }, 11924 "Etc/GMT+11": { 11925 u: -660 11926 }, 11927 "Etc/GMT+12": { 11928 u: -720 11929 }, 11930 "Etc/GMT+2": { 11931 u: -120 11932 }, 11933 "Etc/GMT+3": { 11934 u: -180 11935 }, 11936 "Etc/GMT+4": { 11937 u: -240 11938 }, 11939 "Etc/GMT+5": { 11940 u: -300 11941 }, 11942 "Etc/GMT+6": { 11943 u: -360 11944 }, 11945 "Etc/GMT+7": { 11946 u: -420 11947 }, 11948 "Etc/GMT+8": { 11949 u: -480 11950 }, 11951 "Etc/GMT+9": { 11952 u: -540 11953 }, 11954 "Etc/GMT-0": { 11955 a: "Etc/GMT", 11956 r: 1 11957 }, 11958 "Etc/GMT-1": { 11959 u: 60 11960 }, 11961 "Etc/GMT-10": { 11962 u: 600 11963 }, 11964 "Etc/GMT-11": { 11965 u: 660 11966 }, 11967 "Etc/GMT-12": { 11968 u: 720 11969 }, 11970 "Etc/GMT-13": { 11971 u: 780 11972 }, 11973 "Etc/GMT-14": { 11974 u: 840 11975 }, 11976 "Etc/GMT-2": { 11977 u: 120 11978 }, 11979 "Etc/GMT-3": { 11980 u: 180 11981 }, 11982 "Etc/GMT-4": { 11983 u: 240 11984 }, 11985 "Etc/GMT-5": { 11986 u: 300 11987 }, 11988 "Etc/GMT-6": { 11989 u: 360 11990 }, 11991 "Etc/GMT-7": { 11992 u: 420 11993 }, 11994 "Etc/GMT-8": { 11995 u: 480 11996 }, 11997 "Etc/GMT-9": { 11998 u: 540 11999 }, 12000 "Etc/GMT0": { 12001 a: "Etc/GMT", 12002 r: 1 12003 }, 12004 "Etc/Greenwich": { 12005 a: "Etc/GMT", 12006 r: 1 12007 }, 12008 "Etc/UCT": { 12009 a: "Etc/UTC", 12010 r: 1 12011 }, 12012 "Etc/UTC": { 12013 u: 0 12014 }, 12015 "Etc/Universal": { 12016 a: "Etc/UTC", 12017 r: 1 12018 }, 12019 "Etc/Zulu": { 12020 a: "Etc/UTC", 12021 r: 1 12022 }, 12023 "Europe/Amsterdam": { 12024 a: "Europe/Brussels", 12025 c: [ 12026 "NL" 12027 ], 12028 r: 1 12029 }, 12030 "Europe/Andorra": { 12031 u: 60, 12032 d: 120, 12033 c: [ 12034 "AD" 12035 ] 12036 }, 12037 "Europe/Astrakhan": { 12038 u: 240, 12039 c: [ 12040 "RU" 12041 ] 12042 }, 12043 "Europe/Athens": { 12044 u: 120, 12045 d: 180, 12046 c: [ 12047 "GR" 12048 ] 12049 }, 12050 "Europe/Belfast": { 12051 a: "Europe/London", 12052 c: [ 12053 "GB" 12054 ], 12055 r: 1 12056 }, 12057 "Europe/Belgrade": { 12058 u: 60, 12059 d: 120, 12060 c: [ 12061 "RS", 12062 "BA", 12063 "HR", 12064 "ME", 12065 "MK", 12066 "SI" 12067 ] 12068 }, 12069 "Europe/Berlin": { 12070 u: 60, 12071 d: 120, 12072 c: [ 12073 "DE", 12074 "DK", 12075 "NO", 12076 "SE", 12077 "SJ" 12078 ] 12079 }, 12080 "Europe/Bratislava": { 12081 a: "Europe/Prague", 12082 c: [ 12083 "SK" 12084 ], 12085 r: 1 12086 }, 12087 "Europe/Brussels": { 12088 u: 60, 12089 d: 120, 12090 c: [ 12091 "BE", 12092 "LU", 12093 "NL" 12094 ] 12095 }, 12096 "Europe/Bucharest": { 12097 u: 120, 12098 d: 180, 12099 c: [ 12100 "RO" 12101 ] 12102 }, 12103 "Europe/Budapest": { 12104 u: 60, 12105 d: 120, 12106 c: [ 12107 "HU" 12108 ] 12109 }, 12110 "Europe/Busingen": { 12111 a: "Europe/Zurich", 12112 c: [ 12113 "DE" 12114 ], 12115 r: 1 12116 }, 12117 "Europe/Chisinau": { 12118 u: 120, 12119 d: 180, 12120 c: [ 12121 "MD" 12122 ] 12123 }, 12124 "Europe/Copenhagen": { 12125 a: "Europe/Berlin", 12126 c: [ 12127 "DK" 12128 ], 12129 r: 1 12130 }, 12131 "Europe/Dublin": { 12132 u: 60, 12133 d: 0, 12134 c: [ 12135 "IE" 12136 ] 12137 }, 12138 "Europe/Gibraltar": { 12139 u: 60, 12140 d: 120, 12141 c: [ 12142 "GI" 12143 ] 12144 }, 12145 "Europe/Guernsey": { 12146 a: "Europe/London", 12147 c: [ 12148 "GG" 12149 ], 12150 r: 1 12151 }, 12152 "Europe/Helsinki": { 12153 u: 120, 12154 d: 180, 12155 c: [ 12156 "FI", 12157 "AX" 12158 ] 12159 }, 12160 "Europe/Isle_of_Man": { 12161 a: "Europe/London", 12162 c: [ 12163 "IM" 12164 ], 12165 r: 1 12166 }, 12167 "Europe/Istanbul": { 12168 u: 180, 12169 c: [ 12170 "TR" 12171 ] 12172 }, 12173 "Europe/Jersey": { 12174 a: "Europe/London", 12175 c: [ 12176 "JE" 12177 ], 12178 r: 1 12179 }, 12180 "Europe/Kaliningrad": { 12181 u: 120, 12182 c: [ 12183 "RU" 12184 ] 12185 }, 12186 "Europe/Kiev": { 12187 a: "Europe/Kyiv", 12188 r: 1 12189 }, 12190 "Europe/Kirov": { 12191 u: 180, 12192 c: [ 12193 "RU" 12194 ] 12195 }, 12196 "Europe/Kyiv": { 12197 u: 120, 12198 d: 180, 12199 c: [ 12200 "UA" 12201 ] 12202 }, 12203 "Europe/Lisbon": { 12204 u: 0, 12205 d: 60, 12206 c: [ 12207 "PT" 12208 ] 12209 }, 12210 "Europe/Ljubljana": { 12211 a: "Europe/Belgrade", 12212 c: [ 12213 "SI" 12214 ], 12215 r: 1 12216 }, 12217 "Europe/London": { 12218 u: 0, 12219 d: 60, 12220 c: [ 12221 "GB", 12222 "GG", 12223 "IM", 12224 "JE" 12225 ] 12226 }, 12227 "Europe/Luxembourg": { 12228 a: "Europe/Brussels", 12229 c: [ 12230 "LU" 12231 ], 12232 r: 1 12233 }, 12234 "Europe/Madrid": { 12235 u: 60, 12236 d: 120, 12237 c: [ 12238 "ES" 12239 ] 12240 }, 12241 "Europe/Malta": { 12242 u: 60, 12243 d: 120, 12244 c: [ 12245 "MT" 12246 ] 12247 }, 12248 "Europe/Mariehamn": { 12249 a: "Europe/Helsinki", 12250 c: [ 12251 "AX" 12252 ], 12253 r: 1 12254 }, 12255 "Europe/Minsk": { 12256 u: 180, 12257 c: [ 12258 "BY" 12259 ] 12260 }, 12261 "Europe/Monaco": { 12262 a: "Europe/Paris", 12263 c: [ 12264 "MC" 12265 ], 12266 r: 1 12267 }, 12268 "Europe/Moscow": { 12269 u: 180, 12270 c: [ 12271 "RU" 12272 ] 12273 }, 12274 "Europe/Nicosia": { 12275 a: "Asia/Nicosia", 12276 r: 1 12277 }, 12278 "Europe/Oslo": { 12279 a: "Europe/Berlin", 12280 c: [ 12281 "NO" 12282 ], 12283 r: 1 12284 }, 12285 "Europe/Paris": { 12286 u: 60, 12287 d: 120, 12288 c: [ 12289 "FR", 12290 "MC" 12291 ] 12292 }, 12293 "Europe/Podgorica": { 12294 a: "Europe/Belgrade", 12295 c: [ 12296 "ME" 12297 ], 12298 r: 1 12299 }, 12300 "Europe/Prague": { 12301 u: 60, 12302 d: 120, 12303 c: [ 12304 "CZ", 12305 "SK" 12306 ] 12307 }, 12308 "Europe/Riga": { 12309 u: 120, 12310 d: 180, 12311 c: [ 12312 "LV" 12313 ] 12314 }, 12315 "Europe/Rome": { 12316 u: 60, 12317 d: 120, 12318 c: [ 12319 "IT", 12320 "SM", 12321 "VA" 12322 ] 12323 }, 12324 "Europe/Samara": { 12325 u: 240, 12326 c: [ 12327 "RU" 12328 ] 12329 }, 12330 "Europe/San_Marino": { 12331 a: "Europe/Rome", 12332 c: [ 12333 "SM" 12334 ], 12335 r: 1 12336 }, 12337 "Europe/Sarajevo": { 12338 a: "Europe/Belgrade", 12339 c: [ 12340 "BA" 12341 ], 12342 r: 1 12343 }, 12344 "Europe/Saratov": { 12345 u: 240, 12346 c: [ 12347 "RU" 12348 ] 12349 }, 12350 "Europe/Simferopol": { 12351 u: 180, 12352 c: [ 12353 "RU", 12354 "UA" 12355 ] 12356 }, 12357 "Europe/Skopje": { 12358 a: "Europe/Belgrade", 12359 c: [ 12360 "MK" 12361 ], 12362 r: 1 12363 }, 12364 "Europe/Sofia": { 12365 u: 120, 12366 d: 180, 12367 c: [ 12368 "BG" 12369 ] 12370 }, 12371 "Europe/Stockholm": { 12372 a: "Europe/Berlin", 12373 c: [ 12374 "SE" 12375 ], 12376 r: 1 12377 }, 12378 "Europe/Tallinn": { 12379 u: 120, 12380 d: 180, 12381 c: [ 12382 "EE" 12383 ] 12384 }, 12385 "Europe/Tirane": { 12386 u: 60, 12387 d: 120, 12388 c: [ 12389 "AL" 12390 ] 12391 }, 12392 "Europe/Tiraspol": { 12393 a: "Europe/Chisinau", 12394 r: 1 12395 }, 12396 "Europe/Ulyanovsk": { 12397 u: 240, 12398 c: [ 12399 "RU" 12400 ] 12401 }, 12402 "Europe/Uzhgorod": { 12403 a: "Europe/Kyiv", 12404 r: 1 12405 }, 12406 "Europe/Vaduz": { 12407 a: "Europe/Zurich", 12408 c: [ 12409 "LI" 12410 ], 12411 r: 1 12412 }, 12413 "Europe/Vatican": { 12414 a: "Europe/Rome", 12415 c: [ 12416 "VA" 12417 ], 12418 r: 1 12419 }, 12420 "Europe/Vienna": { 12421 u: 60, 12422 d: 120, 12423 c: [ 12424 "AT" 12425 ] 12426 }, 12427 "Europe/Vilnius": { 12428 u: 120, 12429 d: 180, 12430 c: [ 12431 "LT" 12432 ] 12433 }, 12434 "Europe/Volgograd": { 12435 u: 180, 12436 c: [ 12437 "RU" 12438 ] 12439 }, 12440 "Europe/Warsaw": { 12441 u: 60, 12442 d: 120, 12443 c: [ 12444 "PL" 12445 ] 12446 }, 12447 "Europe/Zagreb": { 12448 a: "Europe/Belgrade", 12449 c: [ 12450 "HR" 12451 ], 12452 r: 1 12453 }, 12454 "Europe/Zaporozhye": { 12455 a: "Europe/Kyiv", 12456 r: 1 12457 }, 12458 "Europe/Zurich": { 12459 u: 60, 12460 d: 120, 12461 c: [ 12462 "CH", 12463 "DE", 12464 "LI" 12465 ] 12466 }, 12467 Factory: { 12468 u: 0 12469 }, 12470 GB: { 12471 a: "Europe/London", 12472 c: [ 12473 "GB" 12474 ], 12475 r: 1 12476 }, 12477 "GB-Eire": { 12478 a: "Europe/London", 12479 c: [ 12480 "GB" 12481 ], 12482 r: 1 12483 }, 12484 GMT: { 12485 a: "Etc/GMT", 12486 r: 1 12487 }, 12488 "GMT+0": { 12489 a: "Etc/GMT", 12490 r: 1 12491 }, 12492 "GMT-0": { 12493 a: "Etc/GMT", 12494 r: 1 12495 }, 12496 GMT0: { 12497 a: "Etc/GMT", 12498 r: 1 12499 }, 12500 Greenwich: { 12501 a: "Etc/GMT", 12502 r: 1 12503 }, 12504 HST: { 12505 u: -600 12506 }, 12507 Hongkong: { 12508 a: "Asia/Hong_Kong", 12509 r: 1 12510 }, 12511 Iceland: { 12512 a: "Africa/Abidjan", 12513 c: [ 12514 "IS" 12515 ], 12516 r: 1 12517 }, 12518 "Indian/Antananarivo": { 12519 a: "Africa/Nairobi", 12520 c: [ 12521 "MG" 12522 ], 12523 r: 1 12524 }, 12525 "Indian/Chagos": { 12526 u: 360, 12527 c: [ 12528 "IO" 12529 ] 12530 }, 12531 "Indian/Christmas": { 12532 a: "Asia/Bangkok", 12533 c: [ 12534 "CX" 12535 ], 12536 r: 1 12537 }, 12538 "Indian/Cocos": { 12539 a: "Asia/Yangon", 12540 c: [ 12541 "CC" 12542 ], 12543 r: 1 12544 }, 12545 "Indian/Comoro": { 12546 a: "Africa/Nairobi", 12547 c: [ 12548 "KM" 12549 ], 12550 r: 1 12551 }, 12552 "Indian/Kerguelen": { 12553 a: "Indian/Maldives", 12554 c: [ 12555 "TF" 12556 ], 12557 r: 1 12558 }, 12559 "Indian/Mahe": { 12560 a: "Asia/Dubai", 12561 c: [ 12562 "SC" 12563 ], 12564 r: 1 12565 }, 12566 "Indian/Maldives": { 12567 u: 300, 12568 c: [ 12569 "MV", 12570 "TF" 12571 ] 12572 }, 12573 "Indian/Mauritius": { 12574 u: 240, 12575 c: [ 12576 "MU" 12577 ] 12578 }, 12579 "Indian/Mayotte": { 12580 a: "Africa/Nairobi", 12581 c: [ 12582 "YT" 12583 ], 12584 r: 1 12585 }, 12586 "Indian/Reunion": { 12587 a: "Asia/Dubai", 12588 c: [ 12589 "RE" 12590 ], 12591 r: 1 12592 }, 12593 Iran: { 12594 a: "Asia/Tehran", 12595 r: 1 12596 }, 12597 Israel: { 12598 a: "Asia/Jerusalem", 12599 r: 1 12600 }, 12601 Jamaica: { 12602 a: "America/Jamaica", 12603 r: 1 12604 }, 12605 Japan: { 12606 a: "Asia/Tokyo", 12607 r: 1 12608 }, 12609 Kwajalein: { 12610 a: "Pacific/Kwajalein", 12611 r: 1 12612 }, 12613 Libya: { 12614 a: "Africa/Tripoli", 12615 r: 1 12616 }, 12617 MET: { 12618 u: 60, 12619 d: 120 12620 }, 12621 MST: { 12622 u: -420 12623 }, 12624 MST7MDT: { 12625 u: -420, 12626 d: -360 12627 }, 12628 "Mexico/BajaNorte": { 12629 a: "America/Tijuana", 12630 r: 1 12631 }, 12632 "Mexico/BajaSur": { 12633 a: "America/Mazatlan", 12634 r: 1 12635 }, 12636 "Mexico/General": { 12637 a: "America/Mexico_City", 12638 r: 1 12639 }, 12640 NZ: { 12641 a: "Pacific/Auckland", 12642 c: [ 12643 "NZ" 12644 ], 12645 r: 1 12646 }, 12647 "NZ-CHAT": { 12648 a: "Pacific/Chatham", 12649 r: 1 12650 }, 12651 Navajo: { 12652 a: "America/Denver", 12653 r: 1 12654 }, 12655 PRC: { 12656 a: "Asia/Shanghai", 12657 r: 1 12658 }, 12659 PST8PDT: { 12660 u: -480, 12661 d: -420 12662 }, 12663 "Pacific/Apia": { 12664 u: 780, 12665 c: [ 12666 "WS" 12667 ] 12668 }, 12669 "Pacific/Auckland": { 12670 u: 720, 12671 d: 780, 12672 c: [ 12673 "NZ", 12674 "AQ" 12675 ] 12676 }, 12677 "Pacific/Bougainville": { 12678 u: 660, 12679 c: [ 12680 "PG" 12681 ] 12682 }, 12683 "Pacific/Chatham": { 12684 u: 765, 12685 d: 825, 12686 c: [ 12687 "NZ" 12688 ] 12689 }, 12690 "Pacific/Chuuk": { 12691 a: "Pacific/Port_Moresby", 12692 c: [ 12693 "FM" 12694 ], 12695 r: 1 12696 }, 12697 "Pacific/Easter": { 12698 u: -360, 12699 d: -300, 12700 c: [ 12701 "CL" 12702 ] 12703 }, 12704 "Pacific/Efate": { 12705 u: 660, 12706 c: [ 12707 "VU" 12708 ] 12709 }, 12710 "Pacific/Enderbury": { 12711 a: "Pacific/Kanton", 12712 r: 1 12713 }, 12714 "Pacific/Fakaofo": { 12715 u: 780, 12716 c: [ 12717 "TK" 12718 ] 12719 }, 12720 "Pacific/Fiji": { 12721 u: 720, 12722 c: [ 12723 "FJ" 12724 ] 12725 }, 12726 "Pacific/Funafuti": { 12727 a: "Pacific/Tarawa", 12728 c: [ 12729 "TV" 12730 ], 12731 r: 1 12732 }, 12733 "Pacific/Galapagos": { 12734 u: -360, 12735 c: [ 12736 "EC" 12737 ] 12738 }, 12739 "Pacific/Gambier": { 12740 u: -540, 12741 c: [ 12742 "PF" 12743 ] 12744 }, 12745 "Pacific/Guadalcanal": { 12746 u: 660, 12747 c: [ 12748 "SB", 12749 "FM" 12750 ] 12751 }, 12752 "Pacific/Guam": { 12753 u: 600, 12754 c: [ 12755 "GU", 12756 "MP" 12757 ] 12758 }, 12759 "Pacific/Honolulu": { 12760 u: -600, 12761 c: [ 12762 "US" 12763 ] 12764 }, 12765 "Pacific/Johnston": { 12766 a: "Pacific/Honolulu", 12767 r: 1 12768 }, 12769 "Pacific/Kanton": { 12770 u: 780, 12771 c: [ 12772 "KI" 12773 ] 12774 }, 12775 "Pacific/Kiritimati": { 12776 u: 840, 12777 c: [ 12778 "KI" 12779 ] 12780 }, 12781 "Pacific/Kosrae": { 12782 u: 660, 12783 c: [ 12784 "FM" 12785 ] 12786 }, 12787 "Pacific/Kwajalein": { 12788 u: 720, 12789 c: [ 12790 "MH" 12791 ] 12792 }, 12793 "Pacific/Majuro": { 12794 a: "Pacific/Tarawa", 12795 c: [ 12796 "MH" 12797 ], 12798 r: 1 12799 }, 12800 "Pacific/Marquesas": { 12801 u: -570, 12802 c: [ 12803 "PF" 12804 ] 12805 }, 12806 "Pacific/Midway": { 12807 a: "Pacific/Pago_Pago", 12808 c: [ 12809 "UM" 12810 ], 12811 r: 1 12812 }, 12813 "Pacific/Nauru": { 12814 u: 720, 12815 c: [ 12816 "NR" 12817 ] 12818 }, 12819 "Pacific/Niue": { 12820 u: -660, 12821 c: [ 12822 "NU" 12823 ] 12824 }, 12825 "Pacific/Norfolk": { 12826 u: 660, 12827 d: 720, 12828 c: [ 12829 "NF" 12830 ] 12831 }, 12832 "Pacific/Noumea": { 12833 u: 660, 12834 c: [ 12835 "NC" 12836 ] 12837 }, 12838 "Pacific/Pago_Pago": { 12839 u: -660, 12840 c: [ 12841 "AS", 12842 "UM" 12843 ] 12844 }, 12845 "Pacific/Palau": { 12846 u: 540, 12847 c: [ 12848 "PW" 12849 ] 12850 }, 12851 "Pacific/Pitcairn": { 12852 u: -480, 12853 c: [ 12854 "PN" 12855 ] 12856 }, 12857 "Pacific/Pohnpei": { 12858 a: "Pacific/Guadalcanal", 12859 c: [ 12860 "FM" 12861 ], 12862 r: 1 12863 }, 12864 "Pacific/Ponape": { 12865 a: "Pacific/Guadalcanal", 12866 c: [ 12867 "FM" 12868 ], 12869 r: 1 12870 }, 12871 "Pacific/Port_Moresby": { 12872 u: 600, 12873 c: [ 12874 "PG", 12875 "AQ", 12876 "FM" 12877 ] 12878 }, 12879 "Pacific/Rarotonga": { 12880 u: -600, 12881 c: [ 12882 "CK" 12883 ] 12884 }, 12885 "Pacific/Saipan": { 12886 a: "Pacific/Guam", 12887 c: [ 12888 "MP" 12889 ], 12890 r: 1 12891 }, 12892 "Pacific/Samoa": { 12893 a: "Pacific/Pago_Pago", 12894 c: [ 12895 "AS" 12896 ], 12897 r: 1 12898 }, 12899 "Pacific/Tahiti": { 12900 u: -600, 12901 c: [ 12902 "PF" 12903 ] 12904 }, 12905 "Pacific/Tarawa": { 12906 u: 720, 12907 c: [ 12908 "KI", 12909 "MH", 12910 "TV", 12911 "UM", 12912 "WF" 12913 ] 12914 }, 12915 "Pacific/Tongatapu": { 12916 u: 780, 12917 c: [ 12918 "TO" 12919 ] 12920 }, 12921 "Pacific/Truk": { 12922 a: "Pacific/Port_Moresby", 12923 c: [ 12924 "FM" 12925 ], 12926 r: 1 12927 }, 12928 "Pacific/Wake": { 12929 a: "Pacific/Tarawa", 12930 c: [ 12931 "UM" 12932 ], 12933 r: 1 12934 }, 12935 "Pacific/Wallis": { 12936 a: "Pacific/Tarawa", 12937 c: [ 12938 "WF" 12939 ], 12940 r: 1 12941 }, 12942 "Pacific/Yap": { 12943 a: "Pacific/Port_Moresby", 12944 c: [ 12945 "FM" 12946 ], 12947 r: 1 12948 }, 12949 Poland: { 12950 a: "Europe/Warsaw", 12951 r: 1 12952 }, 12953 Portugal: { 12954 a: "Europe/Lisbon", 12955 r: 1 12956 }, 12957 ROC: { 12958 a: "Asia/Taipei", 12959 r: 1 12960 }, 12961 ROK: { 12962 a: "Asia/Seoul", 12963 r: 1 12964 }, 12965 Singapore: { 12966 a: "Asia/Singapore", 12967 c: [ 12968 "SG" 12969 ], 12970 r: 1 12971 }, 12972 Turkey: { 12973 a: "Europe/Istanbul", 12974 r: 1 12975 }, 12976 UCT: { 12977 a: "Etc/UTC", 12978 r: 1 12979 }, 12980 "US/Alaska": { 12981 a: "America/Anchorage", 12982 r: 1 12983 }, 12984 "US/Aleutian": { 12985 a: "America/Adak", 12986 r: 1 12987 }, 12988 "US/Arizona": { 12989 a: "America/Phoenix", 12990 c: [ 12991 "US" 12992 ], 12993 r: 1 12994 }, 12995 "US/Central": { 12996 a: "America/Chicago", 12997 r: 1 12998 }, 12999 "US/East-Indiana": { 13000 a: "America/Indiana/Indianapolis", 13001 r: 1 13002 }, 13003 "US/Eastern": {
13004 a: "America/New_York", 13005 r: 1 13006 }, 13007 "US/Hawaii": { 13008 a: "Pacific/Honolulu", 13009 r: 1 13010 }, 13011 "US/Indiana-Starke": { 13012 a: "America/Indiana/Knox", 13013 r: 1 13014 }, 13015 "US/Michigan": { 13016 a: "America/Detroit", 13017 r: 1 13018 }, 13019 "US/Mountain": { 13020 a: "America/Denver", 13021 r: 1 13022 }, 13023 "US/Pacific": { 13024 a: "America/Los_Angeles", 13025 r: 1 13026 }, 13027 "US/Samoa": { 13028 a: "Pacific/Pago_Pago", 13029 c: [ 13030 "AS" 13031 ], 13032 r: 1 13033 }, 13034 UTC: { 13035 a: "Etc/UTC", 13036 r: 1 13037 }, 13038 Universal: { 13039 a: "Etc/UTC", 13040 r: 1 13041 }, 13042 "W-SU": { 13043 a: "Europe/Moscow", 13044 r: 1 13045 }, 13046 WET: { 13047 u: 0, 13048 d: 60 13049 }, 13050 Zulu: { 13051 a: "Etc/UTC", 13052 r: 1 13053 } 13054 }; 13055 var data = { 13056 countries: countries$1, 13057 timezones: timezones$1 13058 }; 13059 13060 var timezonesMap; 13061 function buildCountry(data, id) { 13062 var name = data.countries[id]; 13063 if (!name) return null; 13064 var tzMap = getTimezonesMap(data)[id] || {}; 13065 return { 13066 id: id, 13067 name: name, 13068 timezones: tzMap.current || [], 13069 allTimezones: tzMap.all || [] 13070 }; 13071 } 13072 function getTimezonesMap(data) { 13073 if (!timezonesMap) timezonesMap = buildTimezonesMap(data); 13074 return timezonesMap; 13075 } 13076 function buildTimezonesMap(data) { 13077 return Object.keys(data.timezones).reduce(function (result, id) { 13078 var tz = data.timezones[id]; 13079 var c = tz.c, 13080 a = tz.a; 13081 var aliasTz = data.timezones[a] || {}; 13082 var countries = c || aliasTz.c; 13083 if (!countries) return result; 13084 countries.forEach(function (country) { 13085 if (!result[country]) Object.assign(result, _defineProperty({}, country, { 13086 current: [], 13087 all: [] 13088 })); 13089 if (tz.r === undefined) result[country].current.push(id); 13090 result[country].all.push(id); 13091 }); 13092 return result; 13093 }, {}); 13094 } 13095 13096 function buildTimezone(data, name) { 13097 var timezone = data.timezones[name]; 13098 if (!timezone) return null; 13099 var _timezone$a = timezone.a, 13100 aliasOf = _timezone$a === void 0 ? null : _timezone$a; 13101 var aliasTz = aliasOf ? data.timezones[aliasOf] : {}; 13102 var tz = _objectSpread2(_objectSpread2({}, aliasTz), data.timezones[name]); 13103 var countries = tz.c || []; 13104 var utcOffset = tz.u; 13105 var dstOffset = Number.isInteger(tz.d) ? tz.d : utcOffset; 13106 var result = { 13107 name: name, 13108 countries: countries, 13109 utcOffset: utcOffset, 13110 utcOffsetStr: getOffsetStr(utcOffset), 13111 dstOffset: dstOffset, 13112 dstOffsetStr: getOffsetStr(dstOffset), 13113 aliasOf: aliasOf 13114 }; 13115 if (timezone.r) result.deprecated = true; 13116 return result; 13117 } 13118 function getOffsetStr(offset) { 13119 var hours = Math.floor(Math.abs(offset) / 60); 13120 var min = offset % 60; 13121 var sign = offset < 0 ? '-' : '+'; 13122 return "".concat(sign).concat(getNumStr(hours), ":").concat(getNumStr(min)); 13123 } 13124 function getNumStr(input) { 13125 var num = Math.abs(input); 13126 var prefix = num < 10 ? '0' : ''; 13127 return "".concat(prefix).concat(num); 13128 } 13129 13130 var _excluded = ["allTimezones"]; 13131 Object.keys(data.timezones).length; 13132 var countries$2 = {}; 13133 var timezones = {}; 13134 function getCountry(id) { 13135 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 13136 if (!countries$2[id]) memoizeCountry(buildCountry(data, id)); 13137 return deliverCountry(countries$2[id], options); 13138 } 13139 function memoizeCountry(country) { 13140 if (!country) return; 13141 countries$2[country.id] = country; 13142 } 13143 function getTimezone(name) { 13144 if (!timezones[name]) memoizeTimezone(buildTimezone(data, name)); 13145 return timezones[name] ? _objectSpread2({}, timezones[name]) : null; 13146 } 13147 function memoizeTimezone(timezone) { 13148 if (!timezone) return; 13149 timezones[timezone.name] = timezone; 13150 Object.keys(timezone).length; 13151 } 13152 function getCountriesForTimezone(tzName) { 13153 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 13154 var timezone = getTimezone(tzName) || {}; 13155 var values = timezone.countries || []; 13156 return values.map(function (c) { 13157 return getCountry(c, options); 13158 }); 13159 } 13160 function deliverCountry(country, options) { 13161 if (!country) return null; 13162 var _ref2 = options || {}, 13163 deprecated = _ref2.deprecated; 13164 country.allTimezones; 13165 var other = _objectWithoutProperties(country, _excluded); 13166 var tz = deprecated ? country.allTimezones : country.timezones;
13167 return _objectSpread2(_objectSpread2({}, other), {}, { 13168 timezones: tz 13169 }); 13170 } 13171 13172 const timezoneCountryId = () => { 13173 const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone; 13174 return getCountriesForTimezone(timezone)[0]?.id ?? ''; 13175 }; 13176 13177 function buildPreviewPayload(form, formState) { 13178 const terms = formState.paymentOption.terms; 13179 return { 13180 account: { 13181 city: unknownToEmpty(formConfigAs(form).requestCity), 13182 country: unknownToEmpty(formConfigAs(form).requestCountry) || timezoneCountryId(), 13183 county: '', 13184 state: unknownToEmpty(formConfigAs(form).requestState), 13185 zipCode: unknownToEmpty(formConfigAs(form).requestZipCode) 13186 }, 13187 currency: getRelevantCurrency(form, formState), 13188 ratePlanIds: [formState.paymentOption.slug], 13189 ...(terms ? { 13190 termType: terms.initialTerm.termType, 13191 ...(terms.initialTerm.termType === 'TERMED' ? { 13192 initialTerm: terms.initialTerm.period, 13193 initialTermPeriodType: terms.initialTerm.periodType, 13194 } : {}), 13195 } : { 13196 termType: "EVERGREEN", 13197 }), 13198 ...(formState.dynamicOfferResult ? { 13199 dynamicOfferResult: JSON.stringify(formState.dynamicOfferResult), 13200 productId: formState.paymentOption.productId 13201 } : {}), 13202 }; 13203 } 13204 const calculateZuoraPrice = (form, formState, formActions) => { 13205 return loadZuora() 13206 .then(() => getPreview(form, formState, formActions)) 13207 .then((previewResponse) => { 13208 if (previewResponse.pfToken) { 13209 formActions.updateFormState({ 13210 pfToken: previewResponse.pfToken 13211 }); 13212 } 13213 return { 13214 slug: formState.paymentOption.slug, 13215 productId: formState.paymentOption.productId, 13216 promoCode: formState.promoCode, 13217 addonPrices: [], 13218 totalPrice: previewResponse.amount, 13219 totalPriceFormattedString: formatCurrency(previewResponse.amount, getRelevantCurrency(form, formState)), 13220 netPrice: previewResponse.amountWithoutTax, 13221 netPriceFormattedString: formatCurrency(previewResponse.amountWithoutTax, getRelevantCurrency(form, formState)), 13222 taxPrice: previewResponse.taxAmount || null, 13223 taxPriceFormattedString: previewResponse.taxAmount ? formatCurrency(previewResponse.taxAmount, getRelevantCurrency(form, formState)) : null, 13224 discountPrice: 0, 13225 discountPriceFormattedPrice: formatCurrency(0, getRelevantCurrency(form, formState)), 13226 chargeItems: [...Object.values(previewResponse.invoiceItems)] 13227 .filter((invoiceItem) => invoiceItem.chargeAmount) 13228 .map((invoiceItem) => ({ 13229 label: invoiceItem.chargeName, 13230 priceFormattedString: formatCurrency(invoiceItem.chargeAmount, getRelevantCurrency(form, formState)) 13231 })), 13232 billingAddress: formState.billingAddress 13233 }; 13234 }); 13235 }; 13236 const unknownToEmpty = (location) => location?.toLowerCase() === 'unknown' ? '' : location; 13237 const getPreview = (form, formState, formActions) => { 13238 if (form.environment.previewMode) { 13239 return mockBillingPreviewResponse(formConfigAs(form).dynamicOfferPreview ?? {}); 13240 } 13241 const previewBody = buildPreviewPayload(form, formState); 13242 return request("zephr/public/payment/v1/billing/preview-subscription", { 13243 method: "POST", 13244 bodyObject: previewBody 13245 }, formActions).then(response => response.json()); 13246 }; 13247 13248 const formattedDateWord = (date, locale = 'en-UK') => { 13249 if (!date) 13250 return ''; 13251 const d = new Date(date); 13252 if (Number.isNaN(d.getDate())) 13253 return 'Unknown'; 13254 return d.toLocaleDateString(locale, { day: 'numeric', month: 'short', year: 'numeric' }); 13255 }; 13256 13257 // Example key: "<<<example.key|Default value>>>" 13258 const keyDefaultRegex = /^<<<([a-z0-9\-.]+)\|(.*)>>>$/; 13259 const resolveErrorLanguagePackKey = (form, serverError) => { 13260 if (serverError == null) { 13261 return ''; 13262 } 13263 const packEntries = form.languagePack?.entries ?? {}; 13264 const error = ServerErrors[serverError]; 13265 return packEntries[error.languagePackKey] ?? error.fallbackMessage; 13266 }; 13267 const resolveLanguagePackKey = (languagePack, string) => { 13268 if (!string) { 13269 return string; 13270 } 13271 try { 13272 const match = keyDefaultRegex.exec(string); 13273 if (!match || !match[1]) { 13274 return string; 13275 } 13276 const packEntries = languagePack?.entries ?? {}; 13277 return packEntries[match[1]] ?? match[2]; 13278 } 13279 catch (e) { 13280 console.warn(`error resolving language pack key in string ${string}`, e); 13281 return string; 13282 } 13283 };
13284 const resolveLanguagePackKeyTyped = (form, key, fallback) => { 13285 try { 13286 const packEntries = form.languagePack?.entries ?? {}; 13287 return packEntries[key] ?? fallback; 13288 } 13289 catch (e) { 13290 console.warn(`error resolving language pack key in string ${key}`, e); 13291 return fallback; 13292 } 13293 }; 13294 const resolveLanguagePackLocale = (form) => resolveLanguagePackKeyTyped(form, 'pages.common.date-time-format-locale', 'en-US'); 13295 const resolveLanguagePackKeys = (languagePack, object) => { 13296 try { 13297 if (object == null) { 13298 return object; 13299 } 13300 if (typeof object !== 'object' && !Array.isArray(object)) { 13301 if (typeof object === 'string' || object instanceof String) { 13302 return resolveLanguagePackKey(languagePack, object); 13303 } 13304 return object; 13305 } 13306 if (Array.isArray(object)) { 13307 return object.map(e => resolveLanguagePackKeys(languagePack, e)); 13308 } 13309 return Object.entries(object).reduce((acc, [key, value]) => { 13310 return { 13311 ...acc, 13312 [key]: resolveLanguagePackKeys(languagePack, value) 13313 }; 13314 }, {}); 13315 } 13316 catch (e) { 13317 console.warn(`error resolving language pack entries`, e); 13318 return object; 13319 } 13320 }; 13321 13322 const getSubscriptionAmount = (form, subscription) => { 13323 try { 13324 if (subscription.isOneOff) { 13325 return ''; 13326 } 13327 const everyLabel = resolveLanguagePackKeyTyped(form, 'forms.billing.history.every', 'every'); 13328 const firstPayment = subscription['transaction-history']?.[0] ?? subscription['next-billing-time']; 13329 const str = firstPayment?.['human-readable-amount']; 13330 if (!str) 13331 return ''; 13332 const currency = subscription.currency_code?.toUpperCase() ?? str.replace(/[0-9,.]/g, ''); 13333 const { discounts_applied: discountApplied, pre_discount_price: price, billing_frequency: freq, billing_frequency_unit: freqUnit, } = subscription ?? {}; 13334 if (!discountApplied && price && freq && freqUnit) { 13335 if (freq === 1) { 13336 return `${currency} ${price}/${freqUnit.toLowerCase()}`; 13337 } 13338 return `${currency} ${price} ${everyLabel} ${freq} ${freqUnit.toLowerCase()}s`; 13339 } 13340 const num = Number(str.replace(/[^\d.-]/g, '')); 13341 const amount = Number.isInteger(num) ? num.toFixed(0) : num; 13342 if (firstPayment.cycleCount === 1) { 13343 return `${currency}${amount}/${firstPayment.cycle}`; 13344 } 13345 return `${currency} ${amount} ${everyLabel} ${firstPayment.cycleCount} ${firstPayment.cycle}s`; 13346 } 13347 catch { 13348 console.error('Failed to get subscription amount'); 13349 return ''; 13350 } 13351 }; 13352 const getPeriod = (time, cycle, cycleCount, locale) => { 13353 try { 13354 const d = new Date(time); 13355 const addCycles = (() => { 13356 switch (cycle) { 13357 case 'day': return d.setDate(d.getDate() + cycleCount); 13358 case 'week': return d.setDate(d.getDate() + cycleCount * 7); 13359 case 'month': return d.setMonth(d.getMonth() + cycleCount); 13360 case 'year': return d.setFullYear(d.getFullYear() + cycleCount); 13361 default: return null; 13362 } 13363 })(); 13364 const start = formattedDateWord(time, locale); 13365 const end = formattedDateWord(addCycles, locale); 13366 return `${start} - ${end}`; 13367 } 13368 catch { 13369 console.error('Failed to get subscription period'); 13370 return ''; 13371 } 13372 }; 13373 const buildTaxString = (inclusive, cents, name) => (`${inclusive ? '' : '+'}` 13374 + `${(cents / 100).toFixed(2)} ${name}` 13375 + `${inclusive ? ' incl.' : ''}`); 13376 const getSpecificTax = (cents, displayName, taxInclusive, taxPercent) => { 13377 try { 13378 const taxAmount = taxPercent * (cents / 100); 13379 const totalCents = cents + (taxInclusive ? 0 : taxAmount); 13380 const total = (totalCents / 100).toFixed(2); 13381 const taxes = `(${buildTaxString(taxInclusive, taxAmount, displayName)})`; 13382 return { taxes, total }; 13383 } 13384 catch { 13385 console.error('Failed to get subscription tax'); 13386 return { taxes: '', total: 0 }; 13387 } 13388 }; 13389 const getDefaultTaxes = (cents, defaultTax) => { 13390 try { 13391 const taxes = []; 13392 let totalCents = cents;
13393 defaultTax.forEach((e) => { 13394 const taxCents = e.taxPercent * (cents / 100); 13395 const tax = buildTaxString(e.taxInclusive, taxCents, e.displayName); 13396 taxes.push(tax); 13397 totalCents += e.taxInclusive ? 0 : taxCents; 13398 }); 13399 const total = (totalCents / 100).toFixed(2); 13400 return { taxes: `(${taxes.join(', ')})`, total }; 13401 } 13402 catch { 13403 console.error('Failed to get subscription default tax'); 13404 return { taxes: '', total: 0 }; 13405 } 13406 }; 13407 const getBillingHistory = (form, subscription) => { 13408 try { 13409 const defaultTax = subscription['default-tax-rates']; 13410 const managedBy = subscription['managed-by'].toLowerCase(); 13411 const isCanceled = subscription['subscription-state'].toLowerCase() === 'canceled'; 13412 const cancelDate = formattedDateWord(managedBy === 'stripe' ? subscription.ended : subscription.ends); 13413 const locale = resolveLanguagePackLocale(form); 13414 let newArr = subscription['transaction-history'].reduce((acc, e) => { 13415 const date = formattedDateWord(e.time, locale); 13416 const period = getPeriod(e.time, e.cycle, e.cycleCount, locale); 13417 const { cents, currency, taxRate, } = e; 13418 let total; 13419 let taxes; 13420 if (taxRate) { 13421 const { displayName, taxInclusive, taxPercent } = taxRate; 13422 ({ taxes, total } = getSpecificTax(cents, displayName, taxInclusive, taxPercent)); 13423 } 13424 else if (defaultTax?.length) { 13425 ({ taxes, total } = getDefaultTaxes(cents, defaultTax)); 13426 } 13427 else { 13428 total = (cents / 100).toFixed(2); 13429 taxes = null; 13430 } 13431 const subtotal = managedBy === 'stripe' 13432 ? (e.cents / 100).toFixed(2) 13433 : null; 13434 return [...acc, { 13435 date, period, subtotal, currency, taxes, total, 13436 }]; 13437 }, []); 13438 if (isCanceled) { 13439 newArr = [{ 13440 date: cancelDate, 13441 period: 'canceled', 13442 }, ...newArr]; 13443 } 13444 return newArr; 13445 } 13446 catch { 13447 console.error('Failed to get subscription billing history'); 13448 return null; 13449 } 13450 }; 13451 13452 const loadBraintreeStripeSubscriptions = (form, _, formActions, activeOnly) => { 13453 return request(`blaize/payment/${form.organisationConfiguration.paymentProvider}/subscriptions`, { 13454 method: "GET" 13455 }, formActions, null, true) 13456 .then(response => response.ok ? response.json() : []) 13457 .then(subscriptions => subscriptions 13458 .filter(subscription => !activeOnly || subscription['subscription-state']?.toLowerCase() === 'active') 13459 .map(subscription => { 13460 const locale = resolveLanguagePackLocale(form); 13461 const multiphasePlanMappings = getMultiphasePlanMappings(subscription); 13462 return { 13463 externalId: subscription['external-id'], 13464 productId: subscription['blaize-product'].id, 13465 productLabel: subscription['blaize-product'].label ?? subscription['blaize-product'].id, 13466 planId: subscription['plan_id'], 13467 planLabel: subscription['plan_name'], 13468 currency: subscription['currency_code'], 13469 status: subscription['subscription-state']?.toLowerCase() === 'active' ? 'active' : 'inactive', 13470 nextBillingTime: formattedDateWord(subscription['next-billing-time'], locale), 13471 amount: getSubscriptionAmount(form, subscription), 13472 transactionHistory: getBillingHistory(form, subscription), 13473 ...(subscription['multiphase_plan'] && { multiphasePlan: subscription['multiphase_plan'] }), 13474 ...(Object.keys(multiphasePlanMappings).length > 0 && { multiphasePlanMappings }) 13475 }; 13476 })); 13477 }; 13478 const getMultiphasePlanMappings = (subscription) => { 13479 const multiPhasedPlans = subscription['blaize-product'].mapping?.recurring?.multiPhasedPlans || []; 13480 return multiPhasedPlans.reduce((acc, plan) => { 13481 acc[plan.id] = plan; 13482 return acc; 13483 }, {}); 13484 }; 13485 13486 const calculateStripeSubscriptionProrate = (form, formState, formActions) => { 13487 const changingFromSubscription = formState 13488 .validChangeFromPlans 13489 .find(plan => formState.paymentOption.slug === plan.planSlug && formState.paymentOption.productId === plan.productId) 13490 ?.changesFromSubscription; 13491 if (!changingFromSubscription) { 13492 console.error("No valid change from subscription"); 13493 return; 13494 } 13495 return request(`zephr/payment/stripe/subscriptions/${changingFromSubscription.externalId}/change-previews`, { 13496 method: 'POST', 13497 bodyObject: { 13498 plan_id: formState.paymentOption.slug 13499 } 13500 }, formActions) 13501 .then(response => response.json()) 13502 .then(preview => { 13503 const currencyMultiplier = isZeroDecimalCurrency(formState.paymentOption.currencyCode.toUpperCase()) ? 1 : 0.01; 13504 return { 13505 totalPrice: preview.total * currencyMultiplier, 13506 totalPriceFormattedString: formatCurrency(preview.total * currencyMultiplier, formState.paymentOption.currencyCode), 13507 subTotalPrice: preview.sub_total * currencyMultiplier, 13508 subTotalPriceFormattedString: formatCurrency(preview.sub_total * currencyMultiplier, formState.paymentOption.currencyCode), 13509 }; 13510 }); 13511 }; 13512 13513 // Standalone service to load gift subscriptions without importing paymentProviderConfigurations
13514 const loadGiftSubscriptions = async (form, formState, formActions) => { 13515 try { 13516 const response = await request("zephr/public/gifts/v1/gifts", { 13517 method: "GET" 13518 }, formActions, null, true); 13519 if (response.ok) { 13520 const json = await response.json(); 13521 const rawGiftSubscriptions = json || []; 13522 // Map API response fields from camelCase to the structure consumers expect 13523 const giftSubscriptions = rawGiftSubscriptions 13524 .filter((gift) => gift.subscriptionDetails) 13525 .map((gift) => ({ 13526 gift_code: gift.giftCode, 13527 subscription_number: gift.subscriptionNumber, 13528 status: gift.status, 13529 is_purchaser: gift.isPurchaser, 13530 is_recipient: gift.isRecipient, 13531 error_reason: gift.errorReason, 13532 host: gift.host, 13533 externalId: gift.subscriptionDetails?.id, 13534 recipientFirstName: gift.subscriptionDetails?.soldToContact?.firstName, 13535 recipientLastName: gift.subscriptionDetails?.soldToContact?.lastName, 13536 subscriptionStartDate: gift.subscriptionDetails?.subscriptionStartDate, 13537 subscriptionEndDate: gift.subscriptionDetails?.termEndDate, 13538 subscriptionType: gift.subscriptionDetails?.ratePlans?.[0]?.productName, 13539 currency: gift.subscriptionDetails?.currency, 13540 })); 13541 formActions.updateFormState({ 13542 giftSubscriptions: giftSubscriptions, 13543 formPrerequisiteLoaded: true 13544 }); 13545 } 13546 else { 13547 formActions.updateFormState({ 13548 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR] 13549 }); 13550 } 13551 } 13552 catch (error) { 13553 formActions.updateFormState({ 13554 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR] 13555 }); 13556 } 13557 }; 13558 13559 const formatChargeCadence = (form, charge) => { 13560 // Early return if we don't have the required charge data 13561 if (!charge.price || !charge.currency) { 13562 return null; 13563 } 13564 const price = formatCurrency(charge.price, charge.currency); 13565 // Use listPriceBase as the primary display denominator 13566 if (charge.listPriceBase && charge.listPriceBase !== 'Per_Billing_Perio
13566d') { 13567 // Convert "Per_Month" -> "month", "Per_Year" -> "year", etc. 13568 const unit = charge.listPriceBase.replace('Per_', '').toLowerCase(); 13569 return `${price}/${unit}`; 13570 } 13571 // Fall back to billingPeriod for "Per_Billing_Period" or missing listPriceBase 13572 if (charge.billingPeriod) { 13573 const period = charge.billingPeriod.toLowerCase(); 13574 // Handle special cases 13575 if (period === 'specificmonths') { 13576 return `${price}/month`; // Default to month for specific months 13577 } 13578 return `${price}/${period}`; 13579 } 13580 // Final fallback - assume monthly 13581 return `${price}/month`; 13582 }; 13583 // Helper function to format Zuora subscription amount based on billing period 13584 const formatZuoraSubscriptionAmount = (form, subscription) => { 13585 // Early return for completely invalid inputs 13586 if (!subscription.contractedMrr || !subscription.currency) { 13587 return ''; 13588 } 13589 // Get the first active rate plan charge for accurate pricing 13590 const ratePlanList = [...Object.values(subscription.ratePlans)]; 13591 const activeRatePlans = ratePlanList.length === 1 13592 ? ratePlanList 13593 : ratePlanList.filter(ratePlan => ratePlan.lastChangeType === 'Add'); 13594 // Try to use accurate charge-level data first 13595 if (activeRatePlans[0]?.ratePlanCharges?.[0]) { 13596 const firstCharge = activeRatePlans[0].ratePlanCharges[0]; 13597 const accurateAmount = formatChargeCadence(form, firstCharge); 13598 if (accurateAmount) { 13599 return accurateAmount; 13600 } 13601 } 13602 // Fallback: display MRR per month if we don't have the required charge data 13603 const fallbackAmount = formatCurrency(subscription.contractedMrr, subscription.currency); 13604 return `${fallbackAmount}/month`; 13605 }; 13606 // Helper function to extract only custom fields (those ending with "__c") 13607 const extractCustomFields = (subscription) => { 13608 const customFields = {}; 13609 for (const [key, value] of Object.entries(subscription)) { 13610 if (key.endsWith('__c')) { 13611 customFields[key] = value; 13612 } 13613 } 13614 return customFields; 13615 }; 13616 const zuoraStatusMap = { 13617 'draft': 'pending', 13618 'pending activation': 'pending', 13619 'pending acceptance': 'pending', 13620 'active': 'active', 13621 'cancelled': 'inactive', 13622 'expired': 'inactive', 13623 'suspended': 'inactive' 13624 }; 13625 const loadZuoraSubscriptions = async (form, formState, formActions, activeOnly, isGiftSubscriptions = false) => { 13626 // Load gift subscriptions first via standalone service (no circular deps) 13627 let giftSubscriptions = []; 13628 try { 13629 await loadGiftSubscriptions(form, formState, formActions); 13630 const updatedFormState = formActions.getFormState(); 13631 giftSubscriptions = (updatedFormState.giftSubscriptions || []).map((giftSub) => ({ 13632 externalId: giftSub.externalId, 13633 accountId: '', 13634 productId: giftSub.subscriptionType || '', 13635 productLabel: giftSub.subscriptionType || '', 13636 planId: '', 13637 planLabel: null, 13638 currency: giftSub.currency, 13639 status: giftSub.status, 13640 amount: '', 13641 isGift: true, 13642 recipientFirstName: giftSub.recipientFirstName, 13643 recipientLastName: giftSub.recipientLastName, 13644 subscriptionStartDate: giftSub.subscriptionStartDate, 13645 subscriptionEndDate: giftSub.subscriptionEndDate, 13646 subscriptionType: giftSub.subscriptionType, 13647 subscriptionNumber: giftSub.subscriptionNumber, 13648 })); 13649 } 13650 catch (error) { 13651 console.error('Error loading gift subscriptions:', error); 13652 // Continue without gift subscriptions 13653 } 13654 // Load regular Zuora subscriptions 13655 const regularSubscriptions = await request('plugins/public/zuora-billing/subscriptions', { 13656 method: "GET" 13657 }, formActions, null, true) 13658 .then(response => response.json()) 13659 .then(subscriptionsResponse => [...Object.values(subscriptionsResponse.subscriptions || {})]) 13660 .then(subscriptions => subscriptions 13661 .filter(subscription => !activeOnly || subscription.status?.toLowerCase() === 'active') 13662 .map(subscription => { 13663 // Assuming that Zephr created Zuora subscriptions only have 1 active rate plan 13664 const ratePlanList = [...Object.values(subscription.ratePlans)]; 13665 const activeRatePlans = ratePlanList.length === 1 13666 ? ratePlanList 13667 : ratePlanList.filter(ratePlan => ratePlan.lastChangeType === 'Add'); 13668 if (activeRatePlans.length !== 1) { 13669 console.warn(`Subscription ${subscription.id} has ${activeRatePlans.length} active rate plans`, ratePlanList); 13670 } 13671 // Verify currency 13672 if (activeRatePlans[0] 13673 && !formConfigAs(form).dynamicOffer?.id 13674 && getRelevantCurrency(form, formState) 13675 && ![...Object.values(activeRatePlans[0].ratePlanCharges ?? {})] 13676 .every(charge => charge?.currency === getRelevantCurrency(form, formState))) { 13677 console.log(`Subscription ${subscription.id} is not in the form currency`); 13678 return null; 13679 } 13680 const amount = formatZuoraSubscriptionAmount(form, subscription); 13681 return { 13682 // Start with only custom fields from the raw subscription (those ending with "__c") 13683 ...extractCustomFields(subscription), 13684 // Override with our specific mappings 13685 externalId: subscription.id, 13686 accountId: subscription.accountId, 13687 productId: subscription['SubscriptionExperienceProductID__c'], 13688 productLabel: activeRatePlans[0]?.productName, 13689 planId: activeRatePlans[0]?.productRatePlanId, 13690 planLabel: null, 13691 currency: activeRatePlans[0]?.ratePlanCharges[0]?.currency, 13692 status: zuoraStatusMap[subscription.status?.toLowerCase()] ?? 'inactive', 13693 amount, 13694 autoRenew: subscription?.autoRenew, 13695 billToContact: subscription.billToContact, 13696 termType: subscription.termType, 13697 ...(isGiftSubscriptions ? {
13698 recipientFirstName: subscription.soldToContact?.firstName, 13699 recipientLastName: subscription.soldToContact?.lastName, 13700 recipientEmail: subscription.soldToContact?.personalEmail, 13701 subscriptionStartDate: subscription.subscriptionStartDate, 13702 subscriptionEndDate: subscription.termEndDate, 13703 subscriptionType: subscription?.ratePlans[0]?.productName, 13704 subscriptionNumber: subscription.subscriptionNumber, 13705 } : {}) 13706 }; 13707 }) 13708 .filter(existingSubscription => existingSubscription && existingSubscription.planId != null && existingSubscription.productId != null)); 13709 // Combine both lists and return 13710 return [...regularSubscriptions, ...giftSubscriptions]; 13711 }; 13712 13713 const calculateZuoraSubscriptionProrate = (form, formState, formActions) => { 13714 const changingFromSubscription = formState 13715 .validChangeFromPlans 13716 .find(plan => formState.paymentOption.slug === plan.planSlug && formState.paymentOption.productId === plan.productId) 13717 ?.changesFromSubscription; 13718 if (!changingFromSubscription) { 13719 console.error("No valid change from subscription"); 13720 return; 13721 } 13722 return request(`plugins/public/zuora-billing/subscription-change-preview`, { 13723 method: 'POST', 13724 bodyObject: { 13725 subscriptionId: changingFromSubscription.externalId, 13726 newProductRatePlanId: formState.paymentOption.slug, 13727 currency: getRelevantCurrency(form, formState), 13728 ...(formState.dynamicOfferResult ? { 13729 dynamicOfferResult: JSON.stringify(formState.dynamicOfferResult), 13730 productId: formState.paymentOption.productId 13731 } : {}), 13732 } 13733 }, formActions) 13734 .then(response => response.json()) 13735 .then(preview => { 13736 return { 13737 totalPrice: preview.amount, 13738 totalPriceFormattedString: formatCurrency(preview.amount, getRelevantCurrency(form, formState)), 13739 subTotalPrice: preview.amountWithoutTax, 13740 subTotalPriceFormattedString: formatCurrency(preview.amountWithoutTax, getRelevantCurrency(form, formState)), 13741 }; 13742 }); 13743 }; 13744 13745 const stripePriceCalculator = (form, formState, formActions) => { 13746 // Fallback to the generic price calculator if there is no billing address 13747 if (!form.organisationConfiguration.stripeAutomaticTaxEnabled 13748 || formState.billingAddress.country == null) { 13749 return calculateBraintreeStripePrice(form, formState); 13750 } 13751 return fetchStripeTaxPreview(formState, formActions) 13752 .then((taxPreview) => { 13753 if (!taxPreview.total) { 13754 return calculateBraintreeStripePrice(form, formState); 13755 } 13756 const currencyMultiplier = isZeroDecimalCurrency(formState.paymentOption.currencyCode.toUpperCase()) 13757 ? 1 13758 : 0.01; 13759 const currencyFormatter = (value) => formatCurrency(value * currencyMultiplier, formState.paymentOption.currencyCode); 13760 return { 13761 slug: formState.paymentOption.slug, 13762 productId: formState.paymentOption.productId, 13763 promoCode: formState.promoCode, 13764 billingAddress: formState.billingAddress, 13765 addonPrices: [], 13766 totalPrice: taxPreview.total * currencyMultiplier, 13767 totalPriceFormattedString: currencyFormatter(taxPreview.total), 13768 netPrice: taxPreview.sub_total * currencyMultiplier, 13769 netPriceFormattedString: currencyFormatter(taxPreview.sub_total), 13770 taxPrice: taxPreview.tax ? taxPreview.tax * currencyMultiplier : null, 13771 taxPriceFormattedString: taxPreview.tax ? currencyFormatter(taxPreview.tax) : null, 13772 discountPrice: taxPreview.discount ? taxPreview.discount * currencyMultiplier : null, 13773 discountPriceFormattedPrice: taxPreview.discount ? currencyFormatter(taxPreview.discount) : null, 13774 chargeItems: [], 13775 }; 13776 }) 13777 .catch((error) => { 13778 console.error(`Error calculating stripe tax preview ${JSON.stringify(error)}`); 13779 return calculateBraintreeStripePrice(form, formState); 13780 }); 13781 }; 13782 const fetchStripeTaxPreview = (formState, formActions) => { 13783 return request('zephr/payment/stripe/create-subscription-previews', { 13784 method: 'POST', 13785 bodyObject: { 13786 product_id: formState.paymentOption.productId, 13787 plan_id: formState.paymentOption.slug, 13788 billing_country: formState.billingAddress.country, 13789 billing_post_code: formState.billingAddress.postalCode, 13790 promo_code: formState.promoCodeValid ? formState.promoCode : undefined, 13791 }, 13792 }, formActions, null, true).then((response) => response.json()); 13793 }; 13794 13795 const verifyingPromoCodeBusyKey$1 = "promo-code"; 13796 const checkDoPromoCode = async (form, formState, formActions) => { 13797 if (form.environment.previewMode) { 13798 return; 13799 } 13800 const dynamicOfferId = formConfigAs(form).dynamicOffer?.id; 13801 if (!dynamicOfferId) { 13802 throw Error('Missing Dynamic Offer id'); 13803 } 13804 let session; 13805 try { 13806 session = document.cookie.match(/blaize_session=[0-9a-z-]+/)[0].substring(15); 13807 } 13808 catch { 13809 session = null; 13810 } 13811 const doProducts = formState?.dynamicOfferResult?.products ?? []; 13812 const promoProducts = doProducts.flatMap(p =>
13812 p.paymentPlans.map(plan => ({ 13813 id: p.id, 13814 payment_plan: { 13815 "provider": "zuora-billing", 13816 "plan_id": plan.planId, 13817 charges: plan.charges.map(c => ({ 13818 "charge_definition_id": c.chargeDefinitionData.productChargeDefinitionId, 13819 "currency": c.prices[0]?.currency, 13820 "price": c.prices[0].price 13821 })) 13822 } 13823 }))); 13824 const response = await request('zephr/public/decisions/v1/promo-codes', { 13825 method: "POST", 13826 bodyObject: { 13827 "promo_code": formState.promoCode, 13828 "session": session, 13829 "selected_products": promoProducts 13830 }, 13831 }, formActions, verifyingPromoCodeBusyKey$1); 13832 if (!response.ok) { 13833 logDataLayerEvent(form, 'zephr_form_error', { 13834 error: ServerError[ServerError.PROMO_CODE_INVALID_ERROR], 13835 }); 13836 return Promise.resolve(formActions.updateFormState({ 13837 promoCodeValid: false, 13838 serverErrors: [ServerError.PROMO_CODE_INVALID_ERROR], 13839 discountedPlanPrices: [] 13840 })); 13841 } 13842 const json = await response.json(); 13843 const matchingProduct = json?.products?.find(p => p.id === formState.paymentOption.productId && p.paymentPlans.some(plan => plan.planId === formState.paymentOption.slug)); 13844 if (!matchingProduct) { 13845 logDataLayerEvent(form, 'zephr_form_error', { 13846 error: ServerError[ServerError.PROMO_CODE_INVALID_ERROR], 13847 }); 13848 return Promise.resolve(formActions.updateFormState({ 13849 promoCodeValid: false, 13850 serverErrors: [ServerError.PROMO_CODE_INVALID_ERROR], 13851 discountedPlanPrices: [] 13852 })); 13853 } 13854 const updatedState = formActions.updateFormState({ 13855 promoCodeValid: true, 13856 serverErrors: [], 13857 discountedPlanPrices: [], 13858 originalDynamicOfferResult: formState.dynamicOfferResult, 13859 dynamicOfferResult: { 13860 ...formState.dynamicOfferResult, 13861 ...json 13862 } 13863 }); 13864 await calculatePrices(form, updatedState, formActions); 13865 }; 13866 const zuoraDoPromoCodeService = async (form, formState, formActions) => checkDoPromoCode(form, formState, formActions); 13867 13868 /* src/components/elements/payment/zuora/ZuoraDynamicFormPreLoader.svelte generated by Svelte v4.2.12 */ 13869 13870 function create_fragment$V(ctx) { 13871 let script; 13872 let script_src_value; 13873 13874 return { 13875 c() { 13876 script = element("script"); 13877 script.innerHTML = ``; 13878 attr(script, "type", "text/javascript"); 13879 if (!src_url_equal(script.src, script_src_value = "https://js.zuora.com/payment/v3/zuora.js")) attr(script, "src", script_src_value); 13880 attr(script, "onload", "window.zuoraLoadCallback()"); 13881 }, 13882 m(target, anchor) { 13883 append(document.head, script); 13884 }, 13885 p: noop, 13886 i: noop, 13887 o: noop, 13888 d(detaching) { 13889 detach(script); 13890 } 13891 }; 13892 } 13893 13894 function instance$U($$self, $$props, $$invalidate) { 13895 let { onMountCallback } = $$props; 13896 onMount(onMountCallback); 13897 13898 $$self.$$set = $$props => {
13899 if ('onMountCallback' in $$props) $$invalidate(0, onMountCallback = $$props.onMountCallback); 13900 }; 13901 13902 return [onMountCallback]; 13903 } 13904 13905 class ZuoraDynamicFormPreLoader extends SvelteComponent { 13906 constructor(options) { 13907 super(); 13908 init(this, options, instance$U, create_fragment$V, safe_not_equal, { onMountCallback: 0 }); 13909 } 13910 } 13911 13912 const paymentProviderConfigurations = { 13913 [paymentProviders.BRAINTREE]: { 13914 loader: loadBraintreeUi, 13915 preLoader: null, 13916 completer: braintreePay, 13917 changePaymentCompleter: braintreeChangePayment, 13918 component: BraintreePayment, 13919 preLoaderComponent: null, 13920 promoCodeCheckPath: 'blaize/payment/braintree/promo-code-check', 13921 productAddonPath: 'blaize/payment/braintree/addons-check', 13922 existingSubscriptionLoader: loadBraintreeStripeSubscriptions, 13923 priceCalculator: calculateBraintreeStripePrice, 13924 hasProductAddons: true, 13925 hasPromoCodes: () => true, 13926 internalSubmit: () => false, 13927 noPaymentForm: (form, formState) => false, 13928 canAttemptIncompletePaymentFormSubmission: false, 13929 }, 13930 [paymentProviders.STRIPE]: { 13931 loader: loadStripeUi, 13932 preLoader: null, 13933 completer: stripePay, 13934 changePaymentCompleter: stripeChangePayment, 13935 component: StripePayment, 13936 preLoaderComponent: null, 13937 promoCodeCheckPath: 'zephr/payment/stripe/promo-code-check', 13938 existingSubscriptionLoader: loadBraintreeStripeSubscriptions, 13939 priceCalculator: stripePriceCalculator, 13940 changeSubscriptionProrateCalculator: calculateStripeSubscriptionProrate, 13941 hasProductAddons: false, 13942 hasPromoCodes: () => true, 13943 internalSubmit: () => false, 13944 noPaymentForm: (form, formState) => false, 13945 canAttemptIncompletePaymentFormSubmission: true, 13946 }, 13947 [paymentProviders.ZUORA]: { 13948 loader: loadZuoraUi, 13949 preLoader: loadZuora, 13950 completer: zuoraComplete, 13951 changePaymentCompleter: zuoraChangePayment, 13952 component: ZuoraPayment, 13953 preLoaderComponent: (config) => config?.useDynamicForm ? ZuoraDynamicFormPreLoader : ZuoraPreLoader, 13954 promoCodeCheckPath: '', 13955 promoCodeServiceOverride: zuoraDoPromoCodeService, 13956 priceCalculator: calculateZuoraPrice, 13957 existingSubscriptionLoader: loadZuoraSubscriptions, 13958 changeSubscriptionProrateCalculator: calculateZuoraSubscriptionProrate, 13959 hasProductAddons: false, 13960 hasPromoCodes: (form) => formConfigAs(form).dynamicOffer && !formConfigAs(form).changeSubscriptionMode, 13961 internalSubmit: (form) => !formConfigAs(form).changeSubscriptionMode, 13962 noPaymentForm: (form, formState) => { 13963 const config = formConfigAs(form); 13964 const isChangeSubscriptionMode = config.changeSubscriptionMode; 13965 const requiresPaymentMethodSetup = formState?.requiresPaymentMethodSetup; 13966 // Show payment form if we're in payment method setup mode, even during change subscription 13967 return isChangeSubscriptionMode && !requiresPaymentMethodSetup; 13968 }, 13969 canAttemptIncompletePaymentFormSubmission: false, 13970 } 13971 }; 13972 const mobilePaymentServiceConfigurations = { 13973 [paymentProviders.BRAINTREE]: { 13974 loader: configureBraintreeMobilePayments, 13975 completer: braintreePayWithMobile, 13976 component: BraintreeMobilePayment, 13977 previewMode: (form) => form.environment.previewMode, 13978 }, 13979 [paymentProviders.STRIPE]: { 13980 loader: configureStripeMobilePay, 13981 completer: stripePay, 13982 component: StripeMobilePayment, 13983 previewMode: (form) => form.environment.previewMode, 13984 }, 13985 }; 13986 const paymentProviderFor = (providerName) => { 13987 const configuration = paymentProviderConfigurations[providerName]; 13988 if (!configuration) { 13989 throw `Payment provider ${providerName} not configured.`; 13990 } 13991 return configuration; 13992 }; 13993 const supportsMobilePayments = (providerName) => { 13994 return !!mobilePaymentServiceConfigurations[providerName]; 13995 }; 13996 const mobilePaymentServiceFor = (providerName) => { 13997 const configuration = mobilePaymentServiceConfigurations[providerName]; 13998 if (!configuration) { 13999 throw `Mobile payment provider ${providerName} not configured.`; 14000 } 14001 return configuration; 14002 }; 14003 14004 const factory$q = { 14005 matches: (sectionElement) => sectionElement.type === elementTypes.BUTTON && !sectionElement.config.isLogin && !sectionElement.config.isCancel, 14006 create: (form, formState, formActions, elementConfig) => { 14007 const isSubmitButton = elementConfig.isSubmit === true; 14008 const inChangePaymentSection = formState.currentSection?.type === sectionTypes.CHANGE_PAYMENT.type; 14009 const providerHandlesSubmit = inChangePaymentSection && isSubmitButton 14010 ? paymentProviderFor(form.organisationConfiguration.paymentProvider).internalSubmit(form) 14011 : false;
14012 const handleClick = () => { 14013 if (providerHandlesSubmit) { 14014 return; 14015 } 14016 logDataLayerEvent(form, 'zephr_form_button_press', { 14017 sectionId: formState.currentSection.type, 14018 buttonType: 'SUBMIT' 14019 }); 14020 formActions.attemptCompleteSection(); 14021 }; 14022 return { 14023 component: Button, 14024 props: { 14025 disabled: formState.isBusy || !formState.canAttemptSectionCompletion || providerHandlesSubmit, 14026 text: elementConfig.text, 14027 onClick: handleClick, 14028 isPaymentForm: form.formType === FormType.PAYMENT, 14029 hidden: providerHandlesSubmit, 14030 } 14031 }; 14032 } 14033 }; 14034 14035 /** 14036 * Permissive email check: requires exactly one '@' with at least one non-space character 14037 * on each side. Does not validate full email syntax (e.g., dots, domain rules), 14038 * just catches obvious typos like spaces or missing parts. 14039 * Front-end email validation should be lightweight. 14040 * @param email 14041 */ 14042 const isValidEmail = (email) => { 14043 if (!email) 14044 return false; 14045 return /^[^\s@]+@[^\s@]+$/.test(email); 14046 }; 14047 const updateElementValidity = (component, formState, sectionElement, formActions) => { 14048 if (component?.isValid !== undefined) { 14049 const validity = { 14050 partType: formState.currentPart.type, 14051 sectionType: formState.currentSection.type, 14052 sectionOrder: formState.currentSection.order, 14053 elementType: sectionElement.type, 14054 elementOrder: sectionElement.order, 14055 isValid: component.isValid, 14056 elementId: sectionElement.config?.slug, 14057 }; 14058 const existingValidity = formState.elementValidity.find((other) => other.partType === validity.partType && 14059 other.sectionType === validity.sectionType && 14060 other.sectionOrder === validity.sectionOrder && 14061 other.elementType === validity.elementType && 14062 other.elementOrder === validity.elementOrder); 14063 if (existingValidity?.isValid !== validity.isValid) { 14064 formActions.updateFormState({ 14065 elementValidity: [ 14066 ...formState.elementValidity.filter((v) => v != existingValidity), 14067 validity, 14068 ], 14069 }); 14070 } 14071 } 14072 }; 14073 14074 /* src/components/elements/email/EmailAddress.svelte generated by Svelte v4.2.12 */ 14075 14076 function create_fragment$U(ctx) { 14077 let label_1; 14078 let t; 14079 let div; 14080 let input; 14081 let current; 14082 14083 label_1 = new Label({ 14084 props: { 14085 forInput: /*id*/ ctx[11], 14086 label: /*label*/ ctx[2], 14087 isPaymentForm: /*isPaymentForm*/ ctx[6] 14088 } 14089 }); 14090 14091 input = new Input({ 14092 props: { 14093 id: /*id*/ ctx[11], 14094 autocomplete: "email", 14095 type: "email", 14096 name: "email", 14097 disabled: /*disabled*/ ctx[1], 14098 value: /*emailAddress*/ ctx[0], 14099 placeholder: /*placeholder*/ ctx[3], 14100 errorMessage: /*error*/ ctx[5], 14101 innerTextOnClick: /*onEdit*/ ctx[7], 14102 innerText: /*onEdit*/ ctx[7] && (/*editText*/ ctx[4] || 'Edit'), 14103 isPaymentForm: /*isPaymentForm*/ ctx[6], 14104 onFocus: /*onFocus*/ ctx[9], 14105 onBlur: /*onBlur*/ ctx[10] 14106 } 14107 }); 14108 14109 input.$on("change", /*change_handler*/ ctx[13]); 14110 14111 return { 14112 c() { 14113 create_component(label_1.$$.fragment); 14114 t = space(); 14115 div = element("div"); 14116 create_component(input.$$.fragment); 14117 attr(div, "class", "zephr-form-relative-container"); 14118 toggle_class(div, "zephr-payment-form-relative-container", /*isPaymentForm*/ ctx[6]); 14119 }, 14120 m(target, anchor) { 14121 mount_component(label_1, target, anchor); 14122 insert(target, t, anchor); 14123 insert(target, div, anchor); 14124 mount_component(input, div, null); 14125 current = true; 14126 }, 14127 p(ctx, [dirty]) { 14128 const label_1_changes = {}; 14129 if (dirty & /*label*/ 4) label_1_changes.label = /*label*/ ctx[2]; 14130 if (dirty & /*isPaymentForm*/ 64) label_1_changes.isPaymentForm = /*isPaymentForm*/ ctx[6]; 14131 label_1.$set(label_1_changes); 14132 const input_changes = {};
14133 if (dirty & /*disabled*/ 2) input_changes.disabled = /*disabled*/ ctx[1]; 14134 if (dirty & /*emailAddress*/ 1) input_changes.value = /*emailAddress*/ ctx[0]; 14135 if (dirty & /*placeholder*/ 8) input_changes.placeholder = /*placeholder*/ ctx[3]; 14136 if (dirty & /*error*/ 32) input_changes.errorMessage = /*error*/ ctx[5]; 14137 if (dirty & /*onEdit*/ 128) input_changes.innerTextOnClick = /*onEdit*/ ctx[7]; 14138 if (dirty & /*onEdit, editText*/ 144) input_changes.innerText = /*onEdit*/ ctx[7] && (/*editText*/ ctx[4] || 'Edit'); 14139 if (dirty & /*isPaymentForm*/ 64) input_changes.isPaymentForm = /*isPaymentForm*/ ctx[6]; 14140 if (dirty & /*onFocus*/ 512) input_changes.onFocus = /*onFocus*/ ctx[9]; 14141 if (dirty & /*onBlur*/ 1024) input_changes.onBlur = /*onBlur*/ ctx[10]; 14142 input.$set(input_changes); 14143 14144 if (!current || dirty & /*isPaymentForm*/ 64) { 14145 toggle_class(div, "zephr-payment-form-relative-container", /*isPaymentForm*/ ctx[6]); 14146 } 14147 }, 14148 i(local) { 14149 if (current) return; 14150 transition_in(label_1.$$.fragment, local); 14151 transition_in(input.$$.fragment, local); 14152 current = true; 14153 }, 14154 o(local) { 14155 transition_out(label_1.$$.fragment, local); 14156 transition_out(input.$$.fragment, local); 14157 current = false; 14158 }, 14159 d(detaching) { 14160 if (detaching) { 14161 detach(t); 14162 detach(div); 14163 } 14164 14165 destroy_component(label_1, detaching); 14166 destroy_component(input); 14167 } 14168 }; 14169 } 14170 14171 function instance$T($$self, $$props, $$invalidate) { 14172 let { formKey } = $$props; 14173 let { emailAddress } = $$props; 14174 let { disabled } = $$props; 14175 let { label } = $$props; 14176 let { placeholder } = $$props; 14177 let { editText } = $$props; 14178 let { error = null } = $$props; 14179 let { isPaymentForm = false } = $$props; 14180 let { onEdit } = $$props; 14181 let { onChange } = $$props; 14182 let { onFocus } = $$props; 14183 let { onBlur } = $$props; 14184 const id = `zephr-form-identifier-${formKey}`; 14185 const change_handler = ({ detail }) => onChange(detail); 14186 14187 $$self.$$set = $$props => {
14188 if ('formKey' in $$props) $$invalidate(12, formKey = $$props.formKey); 14189 if ('emailAddress' in $$props) $$invalidate(0, emailAddress = $$props.emailAddress); 14190 if ('disabled' in $$props) $$invalidate(1, disabled = $$props.disabled); 14191 if ('label' in $$props) $$invalidate(2, label = $$props.label); 14192 if ('placeholder' in $$props) $$invalidate(3, placeholder = $$props.placeholder); 14193 if ('editText' in $$props) $$invalidate(4, editText = $$props.editText); 14194 if ('error' in $$props) $$invalidate(5, error = $$props.error); 14195 if ('isPaymentForm' in $$props) $$invalidate(6, isPaymentForm = $$props.isPaymentForm); 14196 if ('onEdit' in $$props) $$invalidate(7, onEdit = $$props.onEdit); 14197 if ('onChange' in $$props) $$invalidate(8, onChange = $$props.onChange); 14198 if ('onFocus' in $$props) $$invalidate(9, onFocus = $$props.onFocus); 14199 if ('onBlur' in $$props) $$invalidate(10, onBlur = $$props.onBlur); 14200 }; 14201 14202 return [ 14203 emailAddress, 14204 disabled, 14205 label, 14206 placeholder, 14207 editText, 14208 error, 14209 isPaymentForm, 14210 onEdit, 14211 onChange, 14212 onFocus, 14213 onBlur, 14214 id, 14215 formKey, 14216 change_handler 14217 ]; 14218 } 14219 14220 class EmailAddress extends SvelteComponent { 14221 constructor(options) { 14222 super(); 14223 14224 init(this, options, instance$T, create_fragment$U, safe_not_equal, { 14225 formKey: 12, 14226 emailAddress: 0, 14227 disabled: 1, 14228 label: 2, 14229 placeholder: 3, 14230 editText: 4, 14231 error: 5, 14232 isPaymentForm: 6, 14233 onEdit: 7, 14234 onChange: 8, 14235 onFocus: 9, 14236 onBlur: 10 14237 }); 14238 } 14239 } 14240 14241 const factory$p = { 14242 matches: (sectionElement) => sectionElement.type === elementTypes.EMAIL_ADDRESS, 14243 create: (form, formState, formActions, elementConfig) => { 14244 const disabled = elementConfig.disabled || formState.isBusy; 14245 return ({ 14246 component: EmailAddress, 14247 props: { 14248 formKey: form.uniqueKey, 14249 disabled, 14250 emailAddress: formState.emailAddress, 14251 label: elementConfig.label, 14252 placeholder: elementConfig.placeholder, 14253 editText: elementConfig.editText, 14254 onChange: (value) => { 14255 !disabled && formActions.updateFormState({ 14256 userExists: undefined, 14257 emailIsContact: undefined, 14258 emailAddress: value, 14259 verificationCode: "", 14260 verificationCodeValid: undefined, 14261 serverErrors: [] 14262 }); 14263 logDataLayerEvent(form, 'zephr_form_input_change', { 14264 inputName: `zephr-form-identifier-${form.uniqueKey}`, 14265 sectionId: formState.currentSection.type, 14266 field: 'email' 14267 }); 14268 }, 14269 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 14270 inputName: `zephr-form-identifier-${form.uniqueKey}`, 14271 sectionId: formState.currentSection.type, 14272 field: 'email' 14273 }), 14274 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 14275 inputName: `zephr-form-identifier-${form.uniqueKey}`, 14276 sectionId: formState.currentSection.type, 14277 field: 'email' 14278 }), 14279 onEdit: elementConfig.disabled && (() => { 14280 formActions.jumpToPartStart(partTypes.ACCOUNT_VERIFICATION.type); 14281 }), 14282 isPaymentForm: form.formType === FormType.PAYMENT, 14283 }, 14284 isValid: isValidEmail(formState.emailAddress) 14285 }); 14286 } 14287 }; 14288 14289 /* src/components/elements/payment/EmptyPayment.svelte generated by Svelte v4.2.12 */ 14290 14291 function create_fragment$T(ctx) { 14292 let errormessage; 14293 let current; 14294 14295 errormessage = new ErrorMessage({ 14296 props: { 14297 error: /*providerError*/ ctx[0]?.message ?? /*error*/ ctx[1] ?? "", 14298 isPaymentForm: true 14299 } 14300 }); 14301 14302 return { 14303 c() { 14304 create_component(errormessage.$$.fragment); 14305 }, 14306 m(target, anchor) { 14307 mount_component(errormessage, target, anchor); 14308 current = true; 14309 }, 14310 p(ctx, [dirty]) { 14311 const errormessage_changes = {};
14312 if (dirty & /*providerError, error*/ 3) errormessage_changes.error = /*providerError*/ ctx[0]?.message ?? /*error*/ ctx[1] ?? ""; 14313 errormessage.$set(errormessage_changes); 14314 }, 14315 i(local) { 14316 if (current) return; 14317 transition_in(errormessage.$$.fragment, local); 14318 current = true; 14319 }, 14320 o(local) { 14321 transition_out(errormessage.$$.fragment, local); 14322 current = false; 14323 }, 14324 d(detaching) { 14325 destroy_component(errormessage, detaching); 14326 } 14327 }; 14328 } 14329 14330 function instance$S($$self, $$props, $$invalidate) { 14331 let { providerError } = $$props; 14332 let { error = null } = $$props; 14333 14334 $$self.$$set = $$props => { 14335 if ('providerError' in $$props) $$invalidate(0, providerError = $$props.providerError); 14336 if ('error' in $$props) $$invalidate(1, error = $$props.error); 14337 }; 14338 14339 return [providerError, error]; 14340 } 14341 14342 class EmptyPayment extends SvelteComponent { 14343 constructor(options) { 14344 super(); 14345 init(this, options, instance$S, create_fragment$T, safe_not_equal, { providerError: 0, error: 1 }); 14346 } 14347 } 14348 14349 const factory$o = { 14350 matches: (sectionElement) => sectionElement.type === elementTypes.PAYMENT || sectionElement.type === elementTypes.CHNAGE_PAYMENT_METHOD, 14351 create: (form, formState, formActions) => { 14352 const paymentProvider = paymentProviderFor(form.organisationConfiguration.paymentProvider); 14353 if (paymentProvider.noPaymentForm(form, formState)) { 14354 return { 14355 component: EmptyPayment, 14356 props: { 14357 providerError: formState.paymentProviderError, 14358 }, 14359 isValid: true 14360 }; 14361 } 14362 return { 14363 component: paymentProvider.component, 14364 props: { 14365 isLoaded: formState.paymentProviderFormLoaded, 14366 isBusy: formState.paymentProviderFormBusy, 14367 providerError: formState.paymentProviderError, 14368 isComplete: formState.paymentFormComplete, 14369 isDisabled: paymentProvider.internalSubmit(form) 14370 ? !formState.canAttemptSectionCompletion 14371 : (formState.isBusy || formState.mobilePaymentService != null), 14372 formKey: form.uniqueKey, 14373 onMountCallback: () => { 14374 formActions.updateFormState({ 14375 paymentProviderFormLoaded: false 14376 }); 14377 void paymentProvider.loader(form, formState, formActions); 14378 } 14379 }, 14380 isValid: paymentProvider.internalSubmit(form) ? undefined : formState.paymentFormComplete && !formState.paymentProviderError 14381 }; 14382 } 14383 }; 14384 14385 const regularPaymentElementIsPresent = form => form.parts.flatMap(part => part.sections) 14386 .flatMap(section => section.elements) 14387 .some(element => element.type === elementTypes.PAYMENT && element.config?.enabled !== false); 14388 const factory$n = { 14389 matches: (sectionElement) => sectionElement.type === elementTypes.MOBILE_PAYMENT, 14390 create: (form, formState, formActions) => { 14391 if (form.environment.previewMode) { 14392 return null; 14393 } 14394 // Check if the payment provider supports mobile payments
14395 if (!supportsMobilePayments(form.organisationConfiguration.paymentProvider)) { 14396 return null; 14397 } 14398 const paymentProvider = mobilePaymentServiceFor(form.organisationConfiguration.paymentProvider); 14399 return { 14400 component: paymentProvider.component, 14401 props: { 14402 isDisabled: formState.isBusy || formState.mobilePaymentService != null, 14403 onMountCallback: () => paymentProvider.loader(form, formState, formActions), 14404 // Minor-hack to prevent injecting the payment provider lib twice 14405 disableCoreDependencyHeader: regularPaymentElementIsPresent(form) 14406 } 14407 }; 14408 } 14409 }; 14410 14411 /* src/components/elements/Checkbox.svelte generated by Svelte v4.2.12 */ 14412 14413 function create_fragment$S(ctx) { 14414 let input; 14415 let t0; 14416 let label_1; 14417 let div; 14418 let t1; 14419 let t2; 14420 let mounted; 14421 let dispose; 14422 14423 let input_levels = [ 14424 { id: /*id*/ ctx[0] }, 14425 { name: /*name*/ ctx[1] }, 14426 { required: /*required*/ ctx[2] }, 14427 { disabled: /*disabled*/ ctx[3] }, 14428 /*conditionalProps*/ ctx[8], 14429 { type: "checkbox" }, 14430 { class: "zephr-form-checkbox" } 14431 ]; 14432 14433 let input_data = {}; 14434 14435 for (let i = 0; i < input_levels.length; i += 1) { 14436 input_data = assign(input_data, input_levels[i]); 14437 } 14438 14439 return { 14440 c() { 14441 input = element("input"); 14442 t0 = space(); 14443 label_1 = element("label"); 14444 div = element("div"); 14445 t1 = space(); 14446 t2 = text(/*label*/ ctx[6]); 14447 set_attributes(input, input_data); 14448 toggle_class(input, "disabled", /*disabled*/ ctx[3]); 14449 toggle_class(input, "error", /*hasError*/ ctx[4]); 14450 toggle_class(input, "zephr-payment-form-checkbox", /*isPaymentForm*/ ctx[5]); 14451 toggle_class(input, "svelte-ud4i0a", true); 14452 attr(div, "class", "zephr-form-checkmark svelte-ud4i0a"); 14453 toggle_class(div, "zephr-payment-form-checkmark", /*isPaymentForm*/ ctx[5]); 14454 toggle_class(div, "disabled", /*disabled*/ ctx[3]); 14455 toggle_class(div, "checked", /*checked*/ ctx[7]); 14456 toggle_class(div, "error", /*hasError*/ ctx[4]); 14457 attr(label_1, "for", /*id*/ ctx[0]); 14458 attr(label_1, "class", "zephr-form-checkbox-label svelte-ud4i0a"); 14459 toggle_class(label_1, "zephr-payment-form-checkbox-label", /*isPaymentForm*/ ctx[5]); 14460 }, 14461 m(target, anchor) { 14462 insert(target, input, anchor); 14463 if (input.autofocus) input.focus(); 14464 insert(target, t0, anchor); 14465 insert(target, label_1, anchor); 14466 append(label_1, div); 14467 append(label_1, t1); 14468 append(label_1, t2); 14469 14470 if (!mounted) { 14471 dispose = listen(input, "input", /*handleInputChange*/ ctx[9]); 14472 mounted = true; 14473 } 14474 }, 14475 p(ctx, [dirty]) { 14476 set_attributes(input, input_data = get_spread_update(input_levels, [ 14477 dirty & /*id*/ 1 && { id: /*id*/ ctx[0] }, 14478 dirty & /*name*/ 2 && { name: /*name*/ ctx[1] }, 14479 dirty & /*required*/ 4 && { required: /*required*/ ctx[2] }, 14480 dirty & /*disabled*/ 8 && { disabled: /*disabled*/ ctx[3] }, 14481 dirty & /*conditionalProps*/ 256 && /*conditionalProps*/ ctx[8], 14482 { type: "checkbox" }, 14483 { class: "zephr-form-checkbox" } 14484 ])); 14485 14486 toggle_class(input, "disabled", /*disabled*/ ctx[3]); 14487 toggle_class(input, "error", /*hasError*/ ctx[4]); 14488 toggle_class(input, "zephr-payment-form-checkbox", /*isPaymentForm*/ ctx[5]); 14489 toggle_class(input, "svelte-ud4i0a", true); 14490 14491 if (dirty & /*isPaymentForm*/ 32) { 14492 toggle_class(div, "zephr-payment-form-checkmark", /*isPaymentForm*/ ctx[5]); 14493 } 14494 14495 if (dirty & /*disabled*/ 8) { 14496 toggle_class(div, "disabled", /*disabled*/ ctx[3]); 14497 } 14498 14499 if (dirty & /*checked*/ 128) { 14500 toggle_class(div, "checked", /*checked*/ ctx[7]); 14501 } 14502 14503 if (dirty & /*hasError*/ 16) { 14504 toggle_class(div, "error", /*hasError*/ ctx[4]); 14505 } 14506 14507 if (dirty & /*label*/ 64) set_data(t2, /*label*/ ctx[6]); 14508 14509 if (dirty & /*id*/ 1) { 14510 attr(label_1, "for", /*id*/ ctx[0]); 14511 } 14512 14513 if (dirty & /*isPaymentForm*/ 32) { 14514 toggle_class(label_1, "zephr-payment-form-checkbox-label", /*isPaymentForm*/ ctx[5]); 14515 } 14516 }, 14517 i: noop, 14518 o: noop, 14519 d(detaching) { 14520 if (detaching) { 14521 detach(input); 14522 detach(t0); 14523 detach(label_1); 14524 } 14525 14526 mounted = false;
14527 dispose(); 14528 } 14529 }; 14530 } 14531 14532 function instance$R($$self, $$props, $$invalidate) { 14533 const dispatch = createEventDispatcher(); 14534 let { id } = $$props; 14535 let { name = id } = $$props; 14536 let { required = true } = $$props; 14537 let { disabled = false } = $$props; 14538 let { hasError = false } = $$props; 14539 let { isPaymentForm = false } = $$props; 14540 let { label = "" } = $$props; 14541 let { value } = $$props; 14542 let { placeholder = "" } = $$props; 14543 let { checked = false } = $$props; 14544 let { pattern = "" } = $$props; 14545 let conditionalProps = {}; 14546 if (checked) conditionalProps.checked = checked; 14547 if (placeholder) conditionalProps.placeholder = placeholder; 14548 if (pattern) conditionalProps.pattern = pattern; 14549 if (value) conditionalProps.value = value; 14550 14551 const handleInputChange = e => { 14552 dispatch("change", e.target.checked); 14553 }; 14554 14555 $$self.$$set = $$props => { 14556 if ('id' in $$props) $$invalidate(0, id = $$props.id); 14557 if ('name' in $$props) $$invalidate(1, name = $$props.name); 14558 if ('required' in $$props) $$invalidate(2, required = $$props.required);
14559 if ('disabled' in $$props) $$invalidate(3, disabled = $$props.disabled); 14560 if ('hasError' in $$props) $$invalidate(4, hasError = $$props.hasError); 14561 if ('isPaymentForm' in $$props) $$invalidate(5, isPaymentForm = $$props.isPaymentForm); 14562 if ('label' in $$props) $$invalidate(6, label = $$props.label); 14563 if ('value' in $$props) $$invalidate(10, value = $$props.value); 14564 if ('placeholder' in $$props) $$invalidate(11, placeholder = $$props.placeholder); 14565 if ('checked' in $$props) $$invalidate(7, checked = $$props.checked); 14566 if ('pattern' in $$props) $$invalidate(12, pattern = $$props.pattern); 14567 }; 14568 14569 return [ 14570 id, 14571 name, 14572 required, 14573 disabled, 14574 hasError, 14575 isPaymentForm, 14576 label, 14577 checked, 14578 conditionalProps, 14579 handleInputChange, 14580 value, 14581 placeholder, 14582 pattern 14583 ]; 14584 } 14585 14586 class Checkbox extends SvelteComponent { 14587 constructor(options) { 14588 super(); 14589 14590 init(this, options, instance$R, create_fragment$S, safe_not_equal, { 14591 id: 0, 14592 name: 1, 14593 required: 2, 14594 disabled: 3, 14595 hasError: 4, 14596 isPaymentForm: 5, 14597 label: 6, 14598 value: 10, 14599 placeholder: 11, 14600 checked: 7, 14601 pattern: 12 14602 }); 14603 } 14604 } 14605 14606 /* src/components/elements/payment/PaymentAutoRenewToggle.svelte generated by Svelte v4.2.12 */ 14607 14608 function create_if_block$C(ctx) { 14609 let div; 14610 let checkbox; 14611 let current; 14612 14613 checkbox = new Checkbox({ 14614 props: { 14615 id: "payment-auto-renew-toggle-" + /*paymentOption*/ ctx[0].productId + "-" + /*paymentOption*/ ctx[0].slug, 14616 name: "payment-auto-renew-toggle", 14617 label: /*toggleLabel*/ ctx[3], 14618 value: "true", 14619 checked: /*checked*/ ctx[1], 14620 disabled: /*disabled*/ ctx[2], 14621 required: false 14622 } 14623 }); 14624 14625 checkbox.$on("change", /*handleChange*/ ctx[5]); 14626 14627 return { 14628 c() { 14629 div = element("div"); 14630 create_component(checkbox.$$.fragment); 14631 attr(div, "class", "zephr-form-payment-auto-renew-toggle svelte-1yfwddr"); 14632 }, 14633 m(target, anchor) { 14634 insert(target, div, anchor); 14635 mount_component(checkbox, div, null); 14636 current = true; 14637 }, 14638 p(ctx, dirty) { 14639 const checkbox_changes = {}; 14640 if (dirty & /*paymentOption*/ 1) checkbox_changes.id = "payment-auto-renew-toggle-" + /*paymentOption*/ ctx[0].productId + "-" + /*paymentOption*/ ctx[0].slug; 14641 if (dirty & /*toggleLabel*/ 8) checkbox_changes.label = /*toggleLabel*/ ctx[3]; 14642 if (dirty & /*checked*/ 2) checkbox_changes.checked = /*checked*/ ctx[1]; 14643 if (dirty & /*disabled*/ 4) checkbox_changes.disabled = /*disabled*/ ctx[2]; 14644 checkbox.$set(checkbox_changes); 14645 }, 14646 i(local) { 14647 if (current) return; 14648 transition_in(checkbox.$$.fragment, local); 14649 current = true; 14650 }, 14651 o(local) { 14652 transition_out(checkbox.$$.fragment, local); 14653 current = false; 14654 }, 14655 d(detaching) { 14656 if (detaching) { 14657 detach(div); 14658 } 14659 14660 destroy_component(checkbox); 14661 } 14662 }; 14663 } 14664 14665 function create_fragment$R(ctx) { 14666 let if_block_anchor; 14667 let current; 14668 let if_block = /*shouldShow*/ ctx[4] && create_if_block$C(ctx); 14669 14670 return { 14671 c() { 14672 if (if_block) if_block.c(); 14673 if_block_anchor = empty(); 14674 }, 14675 m(target, anchor) { 14676 if (if_block) if_block.m(target, anchor); 14677 insert(target, if_block_anchor, anchor); 14678 current = true; 14679 }, 14680 p(ctx, [dirty]) { 14681 if (/*shouldShow*/ ctx[4]) { 14682 if (if_block) { 14683 if_block.p(ctx, dirty); 14684 14685 if (dirty & /*shouldShow*/ 16) { 14686 transition_in(if_block, 1); 14687 } 14688 } else { 14689 if_block = create_if_block$C(ctx); 14690 if_block.c(); 14691 transition_in(if_block, 1); 14692 if_block.m(if_block_anchor.parentNode, if_block_anchor); 14693 } 14694 } else if (if_block) { 14695 group_outros(); 14696 14697 transition_out(if_block, 1, 1, () => { 14698 if_block = null; 14699 }); 14700 14701 check_outros(); 14702 } 14703 }, 14704 i(local) { 14705 if (current) return; 14706 transition_in(if_block); 14707 current = true; 14708 }, 14709 o(local) { 14710 transition_out(if_block); 14711 current = false; 14712 }, 14713 d(detaching) { 14714 if (detaching) { 14715 detach(if_block_anchor); 14716 } 14717 14718 if (if_block) if_block.d(detaching); 14719 } 14720 }; 14721 } 14722 14723 function instance$Q($$self, $$props, $$invalidate) { 14724 let shouldShow; 14725 let toggleLabel; 14726 let { paymentOption } = $$props; 14727 let { checked = false } = $$props; 14728 let { disabled = false } = $$props; 14729 let { onChange } = $$props; 14730 14731 const handleChange = event => { 14732 const isChecked = event.detail; 14733 onChange(isChecked); 14734 }; 14735 14736 $$self.$$set = $$props => {
14737 if ('paymentOption' in $$props) $$invalidate(0, paymentOption = $$props.paymentOption); 14738 if ('checked' in $$props) $$invalidate(1, checked = $$props.checked); 14739 if ('disabled' in $$props) $$invalidate(2, disabled = $$props.disabled); 14740 if ('onChange' in $$props) $$invalidate(6, onChange = $$props.onChange); 14741 }; 14742 14743 $$self.$$.update = () => { 14744 if ($$self.$$.dirty & /*paymentOption*/ 1) { 14745 // Only show if the payment option is configured for custom toggle 14746 $$invalidate(4, shouldShow = paymentOption?.autoRenewConfig === 'custom_toggle' && paymentOption.type !== 'ONE_OFF'); 14747 } 14748 14749 if ($$self.$$.dirty & /*paymentOption*/ 1) { 14750 $$invalidate(3, toggleLabel = paymentOption?.autoRenewToggleLabel || 'Auto-renew subscription'); 14751 } 14752 }; 14753 14754 return [ 14755 paymentOption, 14756 checked, 14757 disabled, 14758 toggleLabel, 14759 shouldShow, 14760 handleChange, 14761 onChange 14762 ]; 14763 } 14764 14765 class PaymentAutoRenewToggle extends SvelteComponent { 14766 constructor(options) { 14767 super(); 14768 14769 init(this, options, instance$Q, create_fragment$R, safe_not_equal, { 14770 paymentOption: 0, 14771 checked: 1, 14772 disabled: 2, 14773 onChange: 6 14774 }); 14775 } 14776 } 14777 14778 const paymentAutoRenewToggleFactory = { 14779 matches: (sectionElement) => sectionElement.type === elementTypes.PAYMENT_AUTO_RENEW_TOGGLE, 14780 create: (form, formState, formActions) => { 14781 // Only show for Zuora billing payment forms 14782 if (form.organisationConfiguration.paymentProvider !== 'zuora-billing') { 14783 return null; 14784 } 14785 // Only show if there's a selected payment option 14786 if (!formState.paymentOption) { 14787 return null; 14788 } 14789 // Only show if the payment option is configured for custom toggle 14790 if (formState.paymentOption.autoRenewConfig !== 'custom_toggle') { 14791 return null; 14792 } 14793 // Don't show for one-off purchases 14794 if (formState.paymentOption.type === 'ONE_OFF') { 14795 return null; 14796 } 14797 const paymentOptionKey = `${formState.paymentOption.productId}-${formState.paymentOption.slug}`; 14798 const handleToggleChange = (isChecked) => { 14799 // Update the payment option specific autoRenew state 14800 const updatedAutoRenewState = { 14801 ...formState.paymentOptionAutoRenew, 14802 [paymentOptionKey]: isChecked 14803 }; 14804 formActions.updateFormState({ 14805 paymentOptionAutoRenew: updatedAutoRenewState 14806 }); 14807 logDataLayerEvent(form, 'zephr_form_input_change', { 14808 field: 'payment-auto-renew-toggle', 14809 inputName: `payment-auto-renew-toggle-${formState.paymentOption.productId}-${formState.paymentOption.slug}`, 14810 sectionId: formState.currentSection.type, 14811 }); 14812 }; 14813 // Get the current checked state for this payment option 14814 // State is now properly initialized when payment option is selected 14815 const checkedState = formState.paymentOptionAutoRenew?.[paymentOptionKey] ?? false; 14816 return { 14817 component: PaymentAutoRenewToggle, 14818 props: { 14819 paymentOption: formState.paymentOption, 14820 checked: checkedState, 14821 disabled: formState.isBusy || formState.paymentProviderFormBusy || false, 14822 onChange: handleToggleChange, 14823 }, 14824 isValid: true, 14825 }; 14826 }, 14827 }; 14828 14829 var checkMarkImageBase64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAABiCAYAAABAkr0NAAAJa0lEQVR4Xu2dT28TRxTA39oGUsHBiC/giKT/LiRHpBYIUPWQEmfVD9BwrQoJpZW4JbkhtRUO9E74AO3GQTkVCLSVOGIurVRCky/QkgNIodjezoxjsrZ3Zt7Mzu7OOraEkOLZ9Zv3m3lv/rx540BWPtc2S1Cvl6DplJjITb/1f/CTc7bAgW1w/G0oFLbg+vBWFqrnWCfkwmYRXtbH4HVuDPJwwp24MBNFRu9BtUbAERjOIzjUrMH3ow+jvC+OZ+2AQFv5q+Y0gF92z0+diaOiwXd691YJCKcKh3MrNvSW9CDQFv9Pk7TyZBTPA8t6iuMswVD+YVpAkofwzbMzUPdn3InpL+Ju8arv99bvLsNQbjFpGMlBoMp/7cwnYW5Uld9dnpmrQ/5iUv4jfgjfbo7BTuOGKeUzBeWpow35NPwi+WsRcn7RPVseiwwjoZ4RHwRq87fr8+5EeU5HGS1lw1PIE1t9AGpaJoI2gCaUoEFGWw3ntG5D8NarFRgqLGnJgKh8PBCI6XE/Lq8jfr+jiLe+ugQFfwWOFGqwMLyt+jyqfASfROS7CJWRZdTvKBQyC0Gj9Sdtfzt0c3VzGhpvplUGCaxXFAuLJhuJOQhkrO+enNzENgBSmUVSmYrJymB/u6fctT9LsJNfUILxeG3YlHkyA+HqxrR7asrDKMEq5XcLrAjD+3XVhR9GVjD1FpWJDuHy83n33IUFmSDM7Bx+cxGufxA+spG9IMnvFWB49+8uwM3ji1HEiwYBC8BQi4lSUa1nv96YcU9P3ZY9GxWEPgQEANb6j+VdK+y+TJO875G9IgoIPQgoAHevwK3jFd26W/fc3DPiuMvzIrl0Qah
14829DwAD4rTqR1JQ/UViI+Y8OCDUIlzdn3XOTwtbtPf6JDN0y4Hx16RHz5J78XDgU9+79TKzA+2grgIdAlgDcjyafCLtjvwNoVx4D4ve1cfhuuIZhjYOAmIj1fQ8ImVNIewRyQoeDcGljXbT4te8AIHsEGx3eGpmQ9QY5BIkj9hS6nUyYTH4vMdMY/yCGIDFD3r0+G4bqtgLJpM6TmCUxhNlnT3ibI2wNqDIqXa7QrVfmnpt7XiGRIbNhcsvMEh+CjG75D7kpy5wmIwhMl/Ff1Nf5jZa/F8FVpFv90OeJtG8dsYyRzD88WTsatoQTDkHgjAdmSEJCsLzB010vBJkzHpghMQViltzxyRdcKxLSG3ohCHxBXHussl6eue/Jtql7ajJ0kyusN/RAEPqCQS/AtwfBBNfr0mMnhEEvwCtZVlKw4ur9QrZFf9zbFu2EoEBPJsPge6IBjj675w17EAQOeeALNJvUpedz7vkLN0IncAEHvQdB9MB+8AU0PH+IHDAxGXQmGCkFHfQehNm/yRLFZz3xmyxSuXL8omZbsP+xrgmWzs6YsJKc5YygSWpBEJmift2qpPXmzHCNml+Rg941SS0IolFRv5oiwRKDd9+rws33yMkhMx/esL8NuwVh7q/lsBDAvjVFsjUewxBk+m1B4PqDeKKQzbQvzbdg9spNb1RJLI0DIg/ebxv3GADrayT8fXhZE3H4Y4LAAI/4BQdEjqOf/EFaAHaxcP0CGfg4wJkfyHaDjLaUuF+WMgBWvcsbK+65qXJ3VekWsQO8cSw9NVMZ0TrqFLdOld5vAwA2+Anf/qSnkxwRoczHktoCgELgWRwyEiPmKDymyMv6JM0mABTCV2SP4ZPePQbvwUrNETmMzAb12gaAQviShJF+Gh5GyocQ1/A0EFTMUhq8U3BNnf1ivsJGAFQuwTA1WQicSYssOArtiG0FYBUEzjCNyhgZhM0AsgIhEgjbAVgFAXPSBRlO/tZEZQGAVRDYpAVx9gsLIisAtCGYXkkMelcTILIEgNZdYAUc7jJ2V1gGeoSCLRgFRNYACCDQNbp0ly10QGQRgHTZIu0FPBUQWQUgXcATLCyZ3GcVWikMCJKaQZbExItjQwZrXmXluIFgdCnblk0dBAhRPa0GQAQXb+rYtL2pCcJ2AMKQIra9KaIUU7qxqKYp+Lz1AKiwvDUzsowNS++O2xnyguwRmQDAnLI4pMje4C8JiMwAQFiaFgSRX0hzh40DIksAhAOf3T2bQFQ2Z5sz7Q3/LhCZAiAyRbv+gBbZgyA6dcg5+ikbGhv7np4R3iGZf02HrhsTkP8i7tA0kA1hD4LIJA3SJ+jhEoU/BraPUcel+ioQTE+dWk/xe0Fn9pdOCJywDCpB5kNgtNQY4SGFQ5joI7SD3qAGROUocu9hcpGDzmp+UzX9RS+t0As6R0ftn9ZICxBd6v56g2pylvAEIxpJMvpLjRFqo5GcJRyCrDfEuf8cof6pP6qZnEUr6RQLXzxamDB65jd1DUYXQGiGBCvS4uxdojQL9DKHyuiV6KL3yRtEZog22qXRcV5NxRAkSVi9+6szcHPkTp+oUb8akszJskxpYghULEG6BTaJ2+/+QXYcF5GwUQ6BgZAlpzV3tYl+c0zhSZkjNpacltYNkxsaG7qYgq5i+UmDqatxPYHWAhPzs19AYAAomGk8BIR/YD6i30FgACgu/atBoFpGbML37YorJrQf4Yi7zaM6BCwIA7cuxWLLdV+KucBDAwAVRw8CFkRCF4jq6hX1HLs3uuHJ7u2MkrRXHwISBPMTaQSRoTQsKYS8xC8KgGg9oS0/wke0QKRz4bQWC3ZdfeO2rPW36hU9e360ntCuoSAjbrcSrIZBTc+/TXJ5k/wGRQbA0CaXGQhUIsSELgjEKhiKym8Nxc3domUOApWMXQXcJJfChV/mEGYaGIy8XzVxkaiy6dG4sp7dGV3ML5hcxjcLoa0F5J2Voaaq0LwTW04N2kheklvK6w65g3kq9NYPEci45j/xQNg1T7BzcE6lV3SYK3Y9vP8I8k4Ncvkt7J1lHUqkDvZNg1wND2fIvxMYRxveW823/uDvxAeh/SvIC0QxpoTt6DUdem38NoETfn18wy/pKrunZ9KGMJS/otUAMBXaLRM/hLYwGvZXoR5GiyZ9ZX1yEGLoGUY1T0c8dJAQp0/iCJw8hCCM/w4QW+3P8m5kMq3kUHtPTQ44VTiWWzY54lGRPT0IQSmp33h1kKRF9sum7LlwlNNW/OHcitGEVyqaD5S1A0K38Mx/5EgGe/805IijPVvuyWavUl9mZhrwFA41a3CkUEurxfNkthNCmLR0uFmvl8AvFMFvFKHpl3qK5Zwt9recvwWFwpYNrRzTWP4HK7laSxb9gaIAAAAASUVORK5CYII="; 14830 14831 /* src/components/elements/successMessage/SuccessMessage.svelte generated by Svelte v4.2.12 */ 14832 14833 function create_fragment$Q(ctx) { 14834 let div1; 14835 let img; 14836 let img_src_value; 14837 let t0; 14838 let div0; 14839 let t1; 14840 14841 return { 14842 c() { 14843 div1 = element("div"); 14844 img = element("img"); 14845 t0 = space(); 14846 div0 = element("div"); 14847 t1 = text(/*text*/ ctx[0]); 14848 attr(img, "class", "check-image svelte-w5z6iw"); 14849 if (!src_url_equal(img.src, img_src_value = checkMarkImageBase64)) attr(img, "src", img_src_value); 14850 attr(img, "alt", "Success indicator"); 14851 attr(div0, "class", "zephr-form-success-message svelte-w5z6iw"); 14852 toggle_class(div0, "zephr-payment-form-success-message", /*isPaymentForm*/ ctx[1]); 14853 }, 14854 m(target, anchor) { 14855 insert(target, div1, anchor); 14856 append(div1, img); 14857 append(div1, t0); 14858 append(div1, div0); 14859 append(div0, t1); 14860 }, 14861 p(ctx, [dirty]) { 14862 if (dirty & /*text*/ 1) set_data(t1, /*text*/ ctx[0]); 14863 14864 if (dirty & /*isPaymentForm*/ 2) { 14865 toggle_class(div0, "zephr-payment-form-success-message", /*isPaymentForm*/ ctx[1]); 14866 } 14867 }, 14868 i: noop, 14869 o: noop, 14870 d(detaching) { 14871 if (detaching) { 14872 detach(div1); 14873 } 14874 } 14875 }; 14876 } 14877 14878 function instance$P($$self, $$props, $$invalidate) { 14879 let { text } = $$props; 14880 let { isPaymentForm = false } = $$props; 14881 14882 $$self.$$set = $$props => {
14883 if ('text' in $$props) $$invalidate(0, text = $$props.text); 14884 if ('isPaymentForm' in $$props) $$invalidate(1, isPaymentForm = $$props.isPaymentForm); 14885 }; 14886 14887 return [text, isPaymentForm]; 14888 } 14889 14890 class SuccessMessage extends SvelteComponent { 14891 constructor(options) { 14892 super(); 14893 init(this, options, instance$P, create_fragment$Q, safe_not_equal, { text: 0, isPaymentForm: 1 }); 14894 } 14895 } 14896 14897 const factory$m = { 14898 matches: (sectionElement) => sectionElement.type === elementTypes.SUCCESS_MESSAGE, 14899 create: (form, formState, formActions, elementConfig) => ({ 14900 component: SuccessMessage, 14901 props: { 14902 text: elementConfig?.text, 14903 isPaymentForm: form.formType === FormType.PAYMENT, 14904 } 14905 }) 14906 }; 14907 14908 const createTokenExchangePayload = (action, emailAddress) => { 14909 return { 14910 identifiers: { 14911 email_address: emailAddress, 14912 }, 14913 delivery: { 14914 method: 'email', 14915 destination: emailAddress, 14916 action, 14917 redirect: window.location.href.replace(window.location.origin, ''), 14918 }, 14919 }; 14920 }; 14921 const sendLink = async (form, action, emailAddress, formActions) => { 14922 try { 14923 const response = await request('blaize/token-exchange', { 14924 method: 'POST', 14925 bodyObject: createTokenExchangePayload(action, emailAddress), 14926 }, formActions); 14927 if (!response.ok) { 14928 formActions.updateFormState({ 14929 serverErrors: [ServerError.UNKNOWN], 14930 }); 14931 logDataLayerEvent(form, 'zephr_form_error', { 14932 error: ServerError[ServerError.UNKNOWN], 14933 }); 14934 } 14935 } 14936 catch (err) { 14937 formActions.updateFormState({ 14938 serverErrors: [ServerError.UNKNOWN], 14939 }); 14940 logDataLayerEvent(form, 'zephr_form_error', { 14941 error: ServerError[ServerError.UNKNOWN], 14942 }); 14943 } 14944 }; 14945 14946 const getFormIsPasswordless = (form) => { 14947 return (form.formType === FormType.REGISTRATION && 14948 formConfigAs(form).usePassword === false && 14949 form.organisationConfiguration.requireEmailVerfication === true && 14950 formConfigAs(form).useVerificationCodes === false); 14951 }; 14952 14953 const onEmailEntered = async (form, formState, formActions) => { 14954 return getUserInfo(formState, formActions) 14955 .then(async (response) => { 14956 if (response.redirected) { 14957 window.location.replace(response.url); 14958 return; 14959 } 14960 else { 14961 const existsInAnyState = response.status === 200; 14962 const formCanOtp = form.parts.flatMap(p => p.sections) 14963 .some(s => s.type === sectionTypes.VERIFICATION_CODE_REGISTRATION.type); 14964 const isContact = existsInAnyState ? ((await response.json()).contact) && formCanOtp : false; 14965 const exists = existsInAnyState && !isContact; 14966 formActions.updateFormState({ 14967 userExists: exists, 14968 emailIsContact: isContact, 14969 }); 14970 const isPasswordless = getFormIsPasswordless(form); 14971 if (isPasswordless) { 14972 if (exists) { 14973 void sendLink(form, 'login', formState.emailAddress, formActions); 14974 return jumpToSection(sectionTypes.PASSWORDLESS_VIA_LOGIN_LINK.type, form, formActions); 14975 } 14976 else { 14977 return moveToNextSection(form, formState, formActions); 14978 } 14979 } 14980 if (isContact 14981 || formConfigAs(form).useVerificationCodes 14982 || form.organisationConfiguration.twoFactorEmailAuthenticationEnabled) { 14983 void send2FaCode(form, formState, formActions); 14984 return jumpToSection(exists ? 14985 sectionTypes.VERIFICATION_CODE_LOGIN.type : sectionTypes.VERIFICATION_CODE_REGISTRATION.type, form, formActions); 14986 } 14987 return jumpToSection(exists ? 14988 sectionTypes.LOGIN_PASSWORD.type : sectionTypes.PASSWORD_SETUP.type, form, formActions); 14989 } 14990 }); 14991 }; 14992 const twoFactorPayload = (formState) => ({ 14993 identifiers: { 14994 email_address: formState.emailAddress 14995 }, 14996 delivery: { 14997 method: "email", 14998 destination: formState.emailAddress, 14999 action: formState.userExists ? "login" : "register", 15000 redirect: window.location.href.replace(window.location.origin, ""), 15001 } 15002 }); 15003 const send2FaCode = async (form, formState, formActions) => { 15004 formActions.updateFormState({ 15005 verificationCode: "", 15006 verificationCodeValid: undefined 15007 }); 15008 const response = await request('blaize/two-factor-authentication', { 15009 method: "POST", 15010 bodyObject: twoFactorPayload(formState) 15011 }, formActions); 15012 if (!response.ok) { 15013 formActions.updateFormState({ 15014 serverErrors: [ServerError.VERIFICATION_CODE_SEND_ERROR] 15015 }); 15016 logDataLayerEvent(form, 'zephr_form_error', { 15017 error: ServerError[ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 15018 }); 15019 } 15020 return response.ok; 15021 }; 15022 const getUserInfo = async (formState, formActions) => { 15023 formActions.updateFormState({ 15024 password: "", 15025 verificationCode: undefined, 15026 verificationCodeValid: undefined, 15027 forgotPassword: false 15028 }); 15029 return await request('zephr/media/user/info', { 15030 method: "POST", 15031 bodyObject: { identifiers: { email_address: formState.emailAddress } } 15032 }, formActions); 15033 }; 15034 15035 const verifyOtp = async (form, formState, formActions) => { 15036 const response = await request('zephr/media/user/otp-check', { 15037 method: "POST", 15038 bodyObject: { 15039 code: formState.verificationCode, 15040 email: formState.emailAddress 15041 } 15042 }, formActions); 15043 if (!response.ok) { 15044 formActions.updateFormState({ 15045 verificationCodeValid: false, 15046 serverErrors: [ServerError.VERIFICATION_CODE_INCORRECT] 15047 }); 15048 logDataLayerEvent(form, 'zephr_form_error', { 15049 error: ServerError[ServerError.VERIFICATION_CODE_INCORRECT], 15050 }); 15051 return; 15052 } 15053 formActions.updateFormState({ 15054 verificationCodeValid: false, 15055 serverErrors: [] 15056 }); 15057 formActions.completeSection(); 15058 }; 15059 15060 const postVerificationCodeDelaySeconds = 1.5; 15061 const waitAfterCode = async (form) => await new Promise(r => setTimeout(r, form.environment.reduceDelays ? 1 : (postVerificationCodeDelaySeconds * 1000))); 15062 15063 const verifiyPasswordResetCode = async (form, formState, formActions) => { 15064 formActions.incrementRequestCount(); 15065 formActions.updateFormState({ 15066 verificationCodeValid: undefined 15067 }); 15068 const response = await request(`zephr/users/reset/${formState.verificationCode}`, { 15069 method: "POST", 15070 bodyObject: { 15071 identifiers: { 15072 email_address: formState.emailAddress, 15073 }, 15074 } 15075 }, formActions); 15076 logDataLayerEvent(form, 'zephr_form_password_reset_code_validate', { 15077 success: response?.ok 15078 }); 15079 if (!response.ok) { 15080 formActions.updateFormState({ 15081 serverErrors: [ServerError.VERIFICATION_CODE_INCORRECT] 15082 }); 15083 logDataLayerEvent(form, 'zephr_form_error', { 15084 error: ServerError[ServerError.VERIFICATION_CODE_INCORRECT], 15085 }); 15086 formActions.decrementRequestCount(); 15087 return Promise.resolve(); 15088 } 15089 return waitAfterCode(form) 15090 .then(() => { 15091 formActions.decrementRequestCount(); 15092 formActions.jumpToSection(sectionTypes.PASSWORD_RESET.type); 15093 }); 15094 }; 15095 const sendPasswordResetCode = async (form, formState, formActions) => { 15096 formActions.updateFormState({ 15097 createPassword: "", 15098 confirmCreatePassword: "", 15099 forgotPassword: true, 15100 verificationCode: "", 15101 }); 15102 formActions.incrementRequestCount(); 15103 const response = await request('zephr/users/reset', { 15104 method: "POST", 15105 bodyObject: { 15106 identifiers: { 15107 email_address: formState.emailAddress, 15108 }, 15109 } 15110 }, formActions); 15111 logDataLayerEvent(form, 'zephr_form_password_reset_code_sent', { 15112 success: response?.ok 15113 }); 15114 if (!response.ok) { 15115 formActions.updateFormState({ 15116 serverErrors: [ServerError.PASSWORD_RESET_LINK_SEND_ERROR] 15117 }); 15118 formActions.decrementRequestCount(); 15119 logDataLayerEvent(form, 'zephr_form_error', { 15120 error: ServerError[ServerError.PASSWORD_RESET_LINK_SEND_ERROR], 15121 }); 15122 return Promise.resolve(); 15123 } 15124 return waitAfterCode(form) 15125 .then(() => { 15126 formActions.decrementRequestCount(); 15127 formActions.jumpToSection(sectionTypes.FORGOT_PASSWORD.type); 15128 }); 15129 }; 15130 const resetPassword = async (form, formState, formActions) => { 15131 const response = await request(`zephr/users/reset/${formState.verificationCode}`, { 15132 method: "POST", 15133 bodyObject: { 15134 identifiers: { 15135 email_address: formState.emailAddress, 15136 }, 15137 validators: { 15138 password: formState.createPassword 15139 } 15140 } 15141 }, formActions); 15142 logDataLayerEvent(form, 'zephr_form_password_reset', { 15143 success: response?.ok 15144 }); 15145 if (!response.ok) { 15146 formActions.updateFormState({ 15147 serverErrors: [ServerError.PASSWORD_RESET_ERROR] 15148 }); 15149 logDataLayerEvent(form, 'zephr_form_error', { 15150 error: ServerError[ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 15151 }); 15152 return Promise.resolve(); 15153 } 15154 formActions.updateFormState({ 15155 verificationCode: "", 15156 forgotPassword: false 15157 });
15158 return formActions.jumpToPartStart(partTypes.ACCOUNT_VERIFICATION.type); 15159 }; 15160 15161 /* src/components/elements/verificationCode/VerificationCode.svelte generated by Svelte v4.2.12 */ 15162 15163 function create_if_block_2$h(ctx) { 15164 let if_block_anchor; 15165 15166 function select_block_type(ctx, dirty) { 15167 if (/*showMessage*/ ctx[14] && !/*error*/ ctx[5]) return create_if_block_3$c; 15168 return create_else_block$9; 15169 } 15170 15171 let current_block_type = select_block_type(ctx); 15172 let if_block = current_block_type(ctx); 15173 15174 return { 15175 c() { 15176 if_block.c(); 15177 if_block_anchor = empty(); 15178 }, 15179 m(target, anchor) { 15180 if_block.m(target, anchor); 15181 insert(target, if_block_anchor, anchor); 15182 }, 15183 p(ctx, dirty) { 15184 if (current_block_type === (current_block_type = select_block_type(ctx)) && if_block) { 15185 if_block.p(ctx, dirty); 15186 } else { 15187 if_block.d(1); 15188 if_block = current_block_type(ctx); 15189 15190 if (if_block) { 15191 if_block.c(); 15192 if_block.m(if_block_anchor.parentNode, if_block_anchor); 15193 } 15194 } 15195 }, 15196 d(detaching) { 15197 if (detaching) { 15198 detach(if_block_anchor); 15199 } 15200 15201 if_block.d(detaching); 15202 } 15203 }; 15204 } 15205 15206 // (53:6) {:else} 15207 function create_else_block$9(ctx) { 15208 let button; 15209 let t; 15210 let mounted; 15211 let dispose; 15212 15213 return { 15214 c() { 15215 button = element("button"); 15216 t = text(/*resendText*/ ctx[3]); 15217 attr(button, "class", "zephr-form-verification-resend-link svelte-1yj9ceh"); 15218 toggle_class(button, "zephr-payment-form-verification-resend-link", /*isPaymentForm*/ ctx[9]); 15219 }, 15220 m(target, anchor) { 15221 insert(target, button, anchor); 15222 append(button, t); 15223 15224 if (!mounted) { 15225 dispose = listen(button, "click", /*click_handler*/ ctx[15]); 15226 mounted = true; 15227 } 15228 }, 15229 p(ctx, dirty) { 15230 if (dirty & /*resendText*/ 8) set_data(t, /*resendText*/ ctx[3]); 15231 15232 if (dirty & /*isPaymentForm*/ 512) { 15233 toggle_class(button, "zephr-payment-form-verification-resend-link", /*isPaymentForm*/ ctx[9]); 15234 } 15235 }, 15236 d(detaching) { 15237 if (detaching) { 15238 detach(button); 15239 } 15240 15241 mounted = false; 15242 dispose(); 15243 } 15244 }; 15245 } 15246 15247 // (46:6) {#if showMessage && !error} 15248 function create_if_block_3$c(ctx) { 15249 let div; 15250 let t; 15251 15252 return { 15253 c() { 15254 div = element("div"); 15255 t = text(/*resendMessage*/ ctx[2]); 15256 attr(div, "class", "zephr-form-verification-resend-text svelte-1yj9ceh"); 15257 toggle_class(div, "zephr-payment-form-verification-resend-text", /*isPaymentForm*/ ctx[9]); 15258 }, 15259 m(target, anchor) { 15260 insert(target, div, anchor); 15261 append(div, t); 15262 }, 15263 p(ctx, dirty) { 15264 if (dirty & /*resendMessage*/ 4) set_data(t, /*resendMessage*/ ctx[2]); 15265 15266 if (dirty & /*isPaymentForm*/ 512) { 15267 toggle_class(div, "zephr-payment-form-verification-resend-text", /*isPaymentForm*/ ctx[9]); 15268 } 15269 }, 15270 d(detaching) { 15271 if (detaching) { 15272 detach(div); 15273 } 15274 } 15275 }; 15276 } 15277 15278 // (32:2) <Input id="zephr-form-verification-code" value={code} {placeholder} maxlength={6} hasError={error != null} errorMessage={error} {isPaymentForm} {disabled} on:change={({ detail }) => !disabled && onChange(detail)} onFocus={onFocus} onBlur={onBlur} > 15279 function create_default_slot$6(ctx) { 15280 let if_block_anchor; 15281 let if_block = /*resendText*/ ctx[3] && create_if_block_2$h(ctx); 15282 15283 return { 15284 c() { 15285 if (if_block) if_block.c(); 15286 if_block_anchor = empty(); 15287 }, 15288 m(target, anchor) { 15289 if (if_block) if_block.m(target, anchor); 15290 insert(target, if_block_anchor, anchor); 15291 }, 15292 p(ctx, dirty) { 15293 if (/*resendText*/ ctx[3]) { 15294 if (if_block) { 15295 if_block.p(ctx, dirty); 15296 } else { 15297 if_block = create_if_block_2$h(ctx); 15298 if_block.c(); 15299 if_block.m(if_block_anchor.parentNode, if_block_anchor); 15300 } 15301 } else if (if_block) { 15302 if_block.d(1); 15303 if_block = null; 15304 } 15305 }, 15306 d(detaching) { 15307 if (detaching) { 15308 detach(if_block_anchor); 15309 } 15310 15311 if (if_block) if_block.d(detaching); 15312 } 15313 }; 15314 } 15315 15316 // (74:4) {#if codeValid} 15317 function create_if_block_1$r(ctx) { 15318 let fa; 15319 let current; 15320 fa = new Fa({ props: { icon: faCheck } }); 15321 15322 return { 15323 c() { 15324 create_component(fa.$$.fragment); 15325 }, 15326 m(target, anchor) { 15327 mount_component(fa, target, anchor); 15328 current = true; 15329 }, 15330 i(local) { 15331 if (current) return; 15332 transition_in(fa.$$.fragment, local); 15333 current = true; 15334 }, 15335 o(local) { 15336 transition_out(fa.$$.fragment, local); 15337 current = false;
15338 }, 15339 d(detaching) { 15340 destroy_component(fa, detaching); 15341 } 15342 }; 15343 } 15344 15345 // (77:4) {#if code && !codeValid && formBusy} 15346 function create_if_block$B(ctx) { 15347 let fa; 15348 let current; 15349 fa = new Fa({ props: { icon: faSpinner, spin: true } }); 15350 15351 return { 15352 c() { 15353 create_component(fa.$$.fragment); 15354 }, 15355 m(target, anchor) { 15356 mount_component(fa, target, anchor); 15357 current = true; 15358 }, 15359 i(local) { 15360 if (current) return; 15361 transition_in(fa.$$.fragment, local); 15362 current = true; 15363 }, 15364 o(local) { 15365 transition_out(fa.$$.fragment, local); 15366 current = false; 15367 }, 15368 d(detaching) { 15369 destroy_component(fa, detaching); 15370 } 15371 }; 15372 } 15373 15374 function create_fragment$P(ctx) { 15375 let label_1; 15376 let t0; 15377 let div1; 15378 let input; 15379 let t1; 15380 let div0; 15381 let t2; 15382 let current; 15383 15384 label_1 = new Label({ 15385 props: { 15386 forInput: "zephr-form-verification-code", 15387 label: /*label*/ ctx[0], 15388 isPaymentForm: /*isPaymentForm*/ ctx[9] 15389 } 15390 }); 15391 15392 input = new Input({ 15393 props: { 15394 id: "zephr-form-verification-code", 15395 value: /*code*/ ctx[8], 15396 placeholder: /*placeholder*/ ctx[1], 15397 maxlength: 6, 15398 hasError: /*error*/ ctx[5] != null, 15399 errorMessage: /*error*/ ctx[5], 15400 isPaymentForm: /*isPaymentForm*/ ctx[9], 15401 disabled: /*disabled*/ ctx[4], 15402 onFocus: /*onFocus*/ ctx[12], 15403 onBlur: /*onBlur*/ ctx[13], 15404 $$slots: { default: [create_default_slot$6] }, 15405 $$scope: { ctx } 15406 } 15407 }); 15408 15409 input.$on("change", /*change_handler*/ ctx[16]); 15410 let if_block0 = /*codeValid*/ ctx[6] && create_if_block_1$r(); 15411 let if_block1 = /*code*/ ctx[8] && !/*codeValid*/ ctx[6] && /*formBusy*/ ctx[7] && create_if_block$B(); 15412 15413 return { 15414 c() { 15415 create_component(label_1.$$.fragment); 15416 t0 = space(); 15417 div1 = element("div"); 15418 create_component(input.$$.fragment); 15419 t1 = space(); 15420 div0 = element("div"); 15421 if (if_block0) if_block0.c(); 15422 t2 = space(); 15423 if (if_block1) if_block1.c(); 15424 attr(div0, "class", "zephr-form-input-inner-text"); 15425 toggle_class(div0, "zephr-payment-form-input-inner-text", /*isPaymentForm*/ ctx[9]); 15426 attr(div1, "class", "zephr-form-relative-container zephr-form-verification-resend-link-container svelte-1yj9ceh"); 15427 toggle_class(div1, "zephr-payment-form-relative-container", /*isPaymentForm*/ ctx[9]); 15428 toggle_class(div1, "zephr-payment-form-verification-resend-link-container", /*isPaymentForm*/ ctx[9]); 15429 }, 15430 m(target, anchor) { 15431 mount_component(label_1, target, anchor); 15432 insert(target, t0, anchor); 15433 insert(target, div1, anchor); 15434 mount_component(input, div1, null); 15435 append(div1, t1); 15436 append(div1, div0); 15437 if (if_block0) if_block0.m(div0, null); 15438 append(div0, t2); 15439 if (if_block1) if_block1.m(div0, null); 15440 current = true; 15441 }, 15442 p(ctx, [dirty]) { 15443 const label_1_changes = {}; 15444 if (dirty & /*label*/ 1) label_1_changes.label = /*label*/ ctx[0]; 15445 if (dirty & /*isPaymentForm*/ 512) label_1_changes.isPaymentForm = /*isPaymentForm*/ ctx[9]; 15446 label_1.$set(label_1_changes); 15447 const input_changes = {}; 15448 if (dirty & /*code*/ 256) input_changes.value = /*code*/ ctx[8]; 15449 if (dirty & /*placeholder*/ 2) input_changes.placeholder = /*placeholder*/ ctx[1]; 15450 if (dirty & /*error*/ 32) input_changes.hasError = /*error*/ ctx[5] != null; 15451 if (dirty & /*error*/ 32) input_changes.errorMessage = /*error*/ ctx[5]; 15452 if (dirty & /*isPaymentForm*/ 512) input_changes.isPaymentForm = /*isPaymentForm*/ ctx[9]; 15453 if (dirty & /*disabled*/ 16) input_changes.disabled = /*disabled*/ ctx[4]; 15454 if (dirty & /*onFocus*/ 4096) input_changes.onFocus = /*onFocus*/ ctx[12]; 15455 if (dirty & /*onBlur*/ 8192) input_changes.onBlur = /*onBlur*/ ctx[13]; 15456 15457 if (dirty & /*$$scope, isPaymentForm, resendMessage, showMessage, error, onResendVerificationCode, resendText*/ 150060) { 15458 input_changes.$$scope = { dirty, ctx }; 15459 } 15460 15461 input.$set(input_changes); 15462 15463 if (/*codeValid*/ ctx[6]) { 15464 if (if_block0) { 15465 if (dirty & /*codeValid*/ 64) { 15466 transition_in(if_block0, 1); 15467 } 15468 } else { 15469 if_block0 = create_if_block_1$r(); 15470 if_block0.c(); 15471 transition_in(if_block0, 1); 15472 if_block0.m(div0, t2); 15473 } 15474 } else if (if_block0) { 15475 group_outros(); 15476 15477 transition_out(if_block0, 1, 1, () => { 15478 if_block0 = null; 15479 }); 15480 15481 check_outros(); 15482 } 15483 15484 if (/*code*/ ctx[8] && !/*codeValid*/ ctx[6] && /*formBusy*/ ctx[7]) { 15485 if (if_block1) {
15486 if (dirty & /*code, codeValid, formBusy*/ 448) { 15487 transition_in(if_block1, 1); 15488 } 15489 } else { 15490 if_block1 = create_if_block$B(); 15491 if_block1.c(); 15492 transition_in(if_block1, 1); 15493 if_block1.m(div0, null); 15494 } 15495 } else if (if_block1) { 15496 group_outros(); 15497 15498 transition_out(if_block1, 1, 1, () => { 15499 if_block1 = null; 15500 }); 15501 15502 check_outros(); 15503 } 15504 15505 if (!current || dirty & /*isPaymentForm*/ 512) { 15506 toggle_class(div0, "zephr-payment-form-input-inner-text", /*isPaymentForm*/ ctx[9]); 15507 } 15508 15509 if (!current || dirty & /*isPaymentForm*/ 512) { 15510 toggle_class(div1, "zephr-payment-form-relative-container", /*isPaymentForm*/ ctx[9]); 15511 } 15512 15513 if (!current || dirty & /*isPaymentForm*/ 512) { 15514 toggle_class(div1, "zephr-payment-form-verification-resend-link-container", /*isPaymentForm*/ ctx[9]); 15515 } 15516 }, 15517 i(local) { 15518 if (current) return; 15519 transition_in(label_1.$$.fragment, local); 15520 transition_in(input.$$.fragment, local); 15521 transition_in(if_block0); 15522 transition_in(if_block1); 15523 current = true; 15524 }, 15525 o(local) { 15526 transition_out(label_1.$$.fragment, local); 15527 transition_out(input.$$.fragment, local); 15528 transition_out(if_block0); 15529 transition_out(if_block1); 15530 current = false; 15531 }, 15532 d(detaching) { 15533 if (detaching) { 15534 detach(t0); 15535 detach(div1); 15536 } 15537 15538 destroy_component(label_1, detaching); 15539 destroy_component(input); 15540 if (if_block0) if_block0.d(); 15541 if (if_block1) if_block1.d(); 15542 } 15543 }; 15544 } 15545 15546 function instance$O($$self, $$props, $$invalidate) { 15547 let { label } = $$props; 15548 let { placeholder } = $$props; 15549 let { resendMessage = null } = $$props; 15550 let { resendText = null } = $$props; 15551 let { disabled } = $$props; 15552 let { error = null } = $$props; 15553 let { codeValid } = $$props; 15554 let { formBusy } = $$props; 15555 let { code } = $$props; 15556 let { isPaymentForm = false } = $$props; 15557 let { onChange } = $$props; 15558 let { onResendVerificationCode } = $$props; 15559 let { onFocus } = $$props; 15560 let { onBlur } = $$props; 15561 let showMessage = false; 15562 15563 const click_handler = () => { 15564 if (resendMessage) { 15565 $$invalidate(14, showMessage = true); 15566 setTimeout(() =>
15566 $$invalidate(14, showMessage = false), 2000); 15567 } 15568 15569 onResendVerificationCode(); 15570 }; 15571 15572 const change_handler = ({ detail }) => !disabled && onChange(detail); 15573 15574 $$self.$$set = $$props => { 15575 if ('label' in $$props) $$invalidate(0, label = $$props.label); 15576 if ('placeholder' in $$props) $$invalidate(1, placeholder = $$props.placeholder); 15577 if ('resendMessage' in $$props) $$invalidate(2, resendMessage = $$props.resendMessage); 15578 if ('resendText' in $$props) $$invalidate(3, resendText = $$props.resendText); 15579 if ('disabled' in $$props) $$invalidate(4, disabled = $$props.disabled); 15580 if ('error' in $$props) $$invalidate(5, error = $$props.error); 15581 if ('codeValid' in $$props) $$invalidate(6, codeValid = $$props.codeValid); 15582 if ('formBusy' in $$props) $$invalidate(7, formBusy = $$props.formBusy); 15583 if ('code' in $$props) $$invalidate(8, code = $$props.code); 15584 if ('isPaymentForm' in $$props) $$invalidate(9, isPaymentForm = $$props.isPaymentForm); 15585 if ('onChange' in $$props) $$invalidate(10, onChange = $$props.onChange);
15586 if ('onResendVerificationCode' in $$props) $$invalidate(11, onResendVerificationCode = $$props.onResendVerificationCode); 15587 if ('onFocus' in $$props) $$invalidate(12, onFocus = $$props.onFocus); 15588 if ('onBlur' in $$props) $$invalidate(13, onBlur = $$props.onBlur); 15589 }; 15590 15591 return [ 15592 label, 15593 placeholder, 15594 resendMessage, 15595 resendText, 15596 disabled, 15597 error, 15598 codeValid, 15599 formBusy, 15600 code, 15601 isPaymentForm, 15602 onChange, 15603 onResendVerificationCode, 15604 onFocus, 15605 onBlur, 15606 showMessage, 15607 click_handler, 15608 change_handler 15609 ]; 15610 } 15611 15612 class VerificationCode extends SvelteComponent { 15613 constructor(options) { 15614 super(); 15615 15616 init(this, options, instance$O, create_fragment$P, safe_not_equal, { 15617 label: 0, 15618 placeholder: 1, 15619 resendMessage: 2, 15620 resendText: 3, 15621 disabled: 4, 15622 error: 5, 15623 codeValid: 6, 15624 formBusy: 7, 15625 code: 8, 15626 isPaymentForm: 9, 15627 onChange: 10, 15628 onResendVerificationCode: 11, 15629 onFocus: 12, 15630 onBlur: 13 15631 }); 15632 } 15633 } 15634 15635 const verificationCodeLength = 6; 15636 const isPossiblyValidCode = code => code?.length === verificationCodeLength; 15637 const checkUserAttributesValid = (formState) => { 15638 return !formState.elementValidity 15639 .filter((e) => e.partType === formState.currentPart.type && 15640 e.sectionType === formState.currentSection.type && 15641 e.sectionOrder === formState.currentSection.order && 15642 e.elementType === 'user_attribute') 15643 .some((e) => !e.isValid); 15644 }; 15645 const factory$l = { 15646 matches: (sectionElement) => sectionElement.type === elementTypes.VERIFICATION_CODE, 15647 create: (form, formState, formActions, elementConfig) => ({ 15648 component: VerificationCode, 15649 props: { 15650 code: formState.verificationCode, 15651 label: elementConfig.label, 15652 placeholder: elementConfig.placeholder, 15653 resendMessage: elementConfig.message, 15654 resendText: elementConfig.resendText, 15655 disabled: formState.isBusy || formState.verificationCodeValid || !checkUserAttributesValid(formState), 15656 codeValid: formState.verificationCodeValid, 15657 formBusy: formState.isBusy, 15658 isPaymentForm: form.formType === FormType.PAYMENT, 15659 onResendVerificationCode: () => { 15660 void (formState.currentSection.type === sectionTypes.FORGOT_PASSWORD.type ? sendPasswordResetCode : send2FaCode)(form, formState, formActions); 15661 }, 15662 onChange: (value) => { 15663 const updatedState = formActions.updateFormState({ 15664 verificationCodeValid: undefined, 15665 verificationCode: value, 15666 serverErrors: [] 15667 }); 15668 const userAttributesValid = checkUserAttributesValid(formState); 15669 formActions.updateFormState({ 15670 showFieldErrors: !userAttributesValid 15671 }); 15672 if (isPossiblyValidCode(value)) { 15673 if (elementConfig.verificationEvent) { 15674 formActions.onEvent(elementConfig.verificationEvent); 15675 return; 15676 } 15677 if (formState.currentSection.type === sectionTypes.FORGOT_PASSWORD.type) { 15678 formActions.completeSection(); 15679 } 15680 else if (userAttributesValid) { 15681 void verifyOtp(form, updatedState, formActions); 15682 } 15683 } 15684 logDataLayerEvent(form, 'zephr_form_input_change', { 15685 inputName: 'zephr-form-verification-code', 15686 sectionId: formState.currentSection.type, 15687 field: 'verification-code' 15688 }); 15689 }, 15690 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 15691 inputName: 'zephr-form-verification-code', 15692 sectionId: formState.currentSection.type, 15693 field: 'verification-code' 15694 }), 15695 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 15696 inputName: 'zephr-form-verification-code', 15697 sectionId: formState.currentSection.type, 15698 field: 'verification-code' 15699 }), 15700 }, 15701 isValid: isPossiblyValidCode(formState.verificationCode) 15702 }) 15703 }; 15704 15705 /* src/components/elements/text/Text.svelte generated by Svelte v4.2.12 */ 15706 15707 function create_fragment$O(ctx) { 15708 let div; 15709 15710 return { 15711 c() { 15712 div = element("div"); 15713 attr(div, "class", "zephr-form-custom-text svelte-3sd7s2"); 15714 set_style(div, "text-align", /*centerText*/ ctx[1] ? 'center' : 'initial'); 15715 toggle_class(div, "zephr-payment-form-custom-text", /*isPaymentForm*/ ctx[2]); 15716 }, 15717 m(target, anchor) { 15718 insert(target, div, anchor); 15719 div.innerHTML = /*text*/ ctx[0]; 15720 }, 15721 p(ctx, [dirty]) {
15722 if (dirty & /*text*/ 1) div.innerHTML = /*text*/ ctx[0]; 15723 if (dirty & /*centerText*/ 2) { 15724 set_style(div, "text-align", /*centerText*/ ctx[1] ? 'center' : 'initial'); 15725 } 15726 15727 if (dirty & /*isPaymentForm*/ 4) { 15728 toggle_class(div, "zephr-payment-form-custom-text", /*isPaymentForm*/ ctx[2]); 15729 } 15730 }, 15731 i: noop, 15732 o: noop, 15733 d(detaching) { 15734 if (detaching) { 15735 detach(div); 15736 } 15737 } 15738 }; 15739 } 15740 15741 function instance$N($$self, $$props, $$invalidate) { 15742 let { text } = $$props; 15743 let { centerText = false } = $$props; 15744 let { isPaymentForm = false } = $$props; 15745 15746 $$self.$$set = $$props => { 15747 if ('text' in $$props) $$invalidate(0, text = $$props.text); 15748 if ('centerText' in $$props) $$invalidate(1, centerText = $$props.centerText); 15749 if ('isPaymentForm' in $$props) $$invalidate(2, isPaymentForm = $$props.isPaymentForm); 15750 }; 15751 15752 return [text, centerText, isPaymentForm]; 15753 } 15754 15755 class Text extends SvelteComponent { 15756 constructor(options) { 15757 super(); 15758 init(this, options, instance$N, create_fragment$O, safe_not_equal, { text: 0, centerText: 1, isPaymentForm: 2 }); 15759 } 15760 } 15761 15762 const factory$k = { 15763 matches: (sectionElement) => sectionElement.type === elementTypes.TEXT, 15764 create: (form, formState, formActions, elementConfig) => ({ 15765 component: Text, 15766 props: { 15767 text: elementConfig.text, 15768 centerText: elementConfig.centerText, 15769 isPaymentForm: form.formType === FormType.PAYMENT, 15770 } 15771 }) 15772 }; 15773 15774 /* src/components/elements/Radio.svelte generated by Svelte v4.2.12 */ 15775 15776 function create_fragment$N(ctx) { 15777 let input; 15778 let t0; 15779 let label_1; 15780 let span; 15781 let t1; 15782 let t2; 15783 let mounted; 15784 let dispose; 15785 15786 let input_levels = [ 15787 { id: /*id*/ ctx[0] }, 15788 { name: /*name*/ ctx[1] }, 15789 { required: /*required*/ ctx[2] }, 15790 { disabled: /*disabled*/ ctx[3] }, 15791 /*conditionalProps*/ ctx[8], 15792 { type: "radio" }, 15793 { class: "zephr-form-input-radio" } 15794 ]; 15795 15796 let input_data = {}; 15797 15798 for (let i = 0; i < input_levels.length; i += 1) { 15799 input_data = assign(input_data, input_levels[i]); 15800 } 15801 15802 return { 15803 c() { 15804 input = element("input"); 15805 t0 = space(); 15806 label_1 = element("label"); 15807 span = element("span"); 15808 t1 = space(); 15809 t2 = text(/*label*/ ctx[6]); 15810 set_attributes(input, input_data); 15811 toggle_class(input, "zephr-payment-form-input-radio", /*isPaymentForm*/ ctx[5]); 15812 toggle_class(input, "disabled", /*disabled*/ ctx[3]); 15813 toggle_class(input, "error", /*hasError*/ ctx[4]); 15814 toggle_class(input, "svelte-1cbmaif", true); 15815 attr(span, "class", "zephr-form-radio-dot svelte-1cbmaif"); 15816 toggle_class(span, "zephr-payment-form-radio-dot", /*isPaymentForm*/ ctx[5]); 15817 toggle_class(span, "disabled", /*disabled*/ ctx[3]); 15818 toggle_class(span, "checked", /*checked*/ ctx[7]); 15819 toggle_class(span, "error", /*hasError*/ ctx[4]); 15820 attr(label_1, "for", /*id*/ ctx[0]); 15821 attr(label_1, "class", "zephr-form-radio-label svelte-1cbmaif"); 15822 toggle_class(label_1, "zephr-payment-form-radio-label", /*isPaymentForm*/ ctx[5]); 15823 }, 15824 m(target, anchor) { 15825 insert(target, input, anchor); 15826 if (input.autofocus) input.focus(); 15827 insert(target, t0, anchor); 15828 insert(target, label_1, anchor); 15829 append(label_1, span); 15830 append(label_1, t1); 15831 append(label_1, t2); 15832 15833 if (!mounted) { 15834 dispose = listen(input, "input", /*handleInputChange*/ ctx[9]); 15835 mounted = true; 15836 } 15837 }, 15838 p(ctx, [dirty]) { 15839 set_attributes(input, input_data = get_spread_update(input_levels, [ 15840 dirty & /*id*/ 1 && { id: /*id*/ ctx[0] }, 15841 dirty & /*name*/ 2 && { name: /*name*/ ctx[1] }, 15842 dirty & /*required*/ 4 && { required: /*required*/ ctx[2] }, 15843 dirty & /*disabled*/ 8 && { disabled: /*disabled*/ ctx[3] }, 15844 dirty & /*conditionalProps*/ 256 && /*conditionalProps*/ ctx[8], 15845 { type: "radio" }, 15846 { class: "zephr-form-input-radio" } 15847 ])); 15848 15849 toggle_class(input, "zephr-payment-form-input-radio", /*isPaymentForm*/ ctx[5]); 15850 toggle_class(input, "disabled", /*disabled*/ ctx[3]); 15851 toggle_class(input, "error", /*hasError*/ ctx[4]); 15852 toggle_class(input, "svelte-1cbmaif", true); 15853
15854 if (dirty & /*isPaymentForm*/ 32) { 15855 toggle_class(span, "zephr-payment-form-radio-dot", /*isPaymentForm*/ ctx[5]); 15856 } 15857 15858 if (dirty & /*disabled*/ 8) { 15859 toggle_class(span, "disabled", /*disabled*/ ctx[3]); 15860 } 15861 15862 if (dirty & /*checked*/ 128) { 15863 toggle_class(span, "checked", /*checked*/ ctx[7]); 15864 } 15865 15866 if (dirty & /*hasError*/ 16) { 15867 toggle_class(span, "error", /*hasError*/ ctx[4]); 15868 } 15869 15870 if (dirty & /*label*/ 64) set_data(t2, /*label*/ ctx[6]); 15871 15872 if (dirty & /*id*/ 1) { 15873 attr(label_1, "for", /*id*/ ctx[0]); 15874 } 15875 15876 if (dirty & /*isPaymentForm*/ 32) { 15877 toggle_class(label_1, "zephr-payment-form-radio-label", /*isPaymentForm*/ ctx[5]); 15878 } 15879 }, 15880 i: noop, 15881 o: noop, 15882 d(detaching) { 15883 if (detaching) { 15884 detach(input); 15885 detach(t0); 15886 detach(label_1); 15887 } 15888 15889 mounted = false; 15890 dispose(); 15891 } 15892 }; 15893 } 15894 15895 function instance$M($$self, $$props, $$invalidate) { 15896 const dispatch = createEventDispatcher(); 15897 let { id } = $$props; 15898 let { name = id } = $$props; 15899 let { required = true } = $$props; 15900 let { disabled = false } = $$props; 15901 let { hasError = false } = $$props; 15902 let { isPaymentForm = false } = $$props; 15903 let { label = "" } = $$props; 15904 let { value } = $$props; 15905 let { placeholder = "" } = $$props; 15906 let { checked = false } = $$props; 15907 let { pattern = "" } = $$props; 15908 let conditionalProps = {}; 15909 if (checked) conditionalProps.checked = checked; 15910 if (placeholder) conditionalProps.placeholder = placeholder; 15911 if (pattern) conditionalProps.pattern = pattern; 15912 if (value) conditionalProps.value = value; 15913 15914 const handleInputChange = e => { 15915 dispatch("change", e.target.value); 15916 }; 15917 15918 $$self.$$set = $$props => {
15919 if ('id' in $$props) $$invalidate(0, id = $$props.id); 15920 if ('name' in $$props) $$invalidate(1, name = $$props.name); 15921 if ('required' in $$props) $$invalidate(2, required = $$props.required); 15922 if ('disabled' in $$props) $$invalidate(3, disabled = $$props.disabled); 15923 if ('hasError' in $$props) $$invalidate(4, hasError = $$props.hasError); 15924 if ('isPaymentForm' in $$props) $$invalidate(5, isPaymentForm = $$props.isPaymentForm); 15925 if ('label' in $$props) $$invalidate(6, label = $$props.label); 15926 if ('value' in $$props) $$invalidate(10, value = $$props.value); 15927 if ('placeholder' in $$props) $$invalidate(11, placeholder = $$props.placeholder); 15928 if ('checked' in $$props) $$invalidate(7, checked = $$props.checked); 15929 if ('pattern' in $$props) $$invalidate(12, pattern = $$props.pattern); 15930 }; 15931 15932 return [ 15933 id, 15934 name, 15935 required, 15936 disabled, 15937 hasError, 15938 isPaymentForm, 15939 label, 15940 checked, 15941 conditionalProps, 15942 handleInputChange, 15943 value, 15944 placeholder, 15945 pattern 15946 ]; 15947 } 15948 15949 class Radio extends SvelteComponent { 15950 constructor(options) { 15951 super(); 15952 15953 init(this, options, instance$M, create_fragment$N, safe_not_equal, { 15954 id: 0, 15955 name: 1, 15956 required: 2, 15957 disabled: 3, 15958 hasError: 4, 15959 isPaymentForm: 5, 15960 label: 6, 15961 value: 10, 15962 placeholder: 11, 15963 checked: 7, 15964 pattern: 12 15965 }); 15966 } 15967 } 15968 15969 /* src/components/elements/userAttribute/UserAttribute.svelte generated by Svelte v4.2.12 */ 15970 15971 function get_each_context_1$4(ctx, list, i) { 15972 const child_ctx = ctx.slice(); 15973 child_ctx[19] = list[i]; 15974 return child_ctx; 15975 } 15976 15977 function get_each_context$e(ctx, list, i) { 15978 const child_ctx = ctx.slice(); 15979 child_ctx[19] = list[i]; 15980 return child_ctx; 15981 } 15982 15983 // (120:2) {:else} 15984 function create_else_block$8(ctx) { 15985 let input; 15986 let current; 15987 15988 input = new Input({ 15989 props: { 15990 id: /*id*/ ctx[10], 15991 name: /*config*/ ctx[0].slug, 15992 required: /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required, 15993 type: /*attributeSchema*/ ctx[1]?.["input-type"], 15994 value: /*value*/ ctx[2], 15995 checked: /*attributeSchema*/ ctx[1]?.["input-type"] === "checkbox" && /*value*/ ctx[2], 15996 pattern: /*attributeSchema*/ ctx[1]?.["validation-expression"], 15997 placeholder: /*config*/ ctx[0].placeholder, 15998 hasError: /*hasError*/ ctx[8], 15999 isPaymentForm: /*isPaymentForm*/ ctx[3], 16000 onFocus: /*onFocus*/ ctx[5], 16001 onBlur: /*onBlur*/ ctx[6] 16002 } 16003 }); 16004 16005 input.$on("change", /*change_handler_4*/ ctx[18]); 16006 16007 return { 16008 c() { 16009 create_component(input.$$.fragment); 16010 }, 16011 m(target, anchor) { 16012 mount_component(input, target, anchor); 16013 current = true; 16014 }, 16015 p(ctx, dirty) { 16016 const input_changes = {}; 16017 if (dirty & /*config*/ 1) input_changes.name = /*config*/ ctx[0].slug; 16018 if (dirty & /*config, attributeSchema*/ 3) input_changes.required = /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required; 16019 if (dirty & /*attributeSchema*/ 2) input_changes.type = /*attributeSchema*/ ctx[1]?.["input-type"]; 16020 if (dirty & /*value*/ 4) input_changes.value = /*value*/ ctx[2]; 16021 if (dirty & /*attributeSchema, value*/ 6) input_changes.checked = /*attributeSchema*/ ctx[1]?.["input-type"] === "checkbox" && /*value*/ ctx[2]; 16022 if (dirty & /*attributeSchema*/ 2) input_changes.pattern = /*attributeSchema*/ ctx[1]?.["validation-expression"]; 16023 if (dirty & /*config*/ 1) input_changes.placeholder = /*config*/ ctx[0].placeholder; 16024 if (dirty & /*hasError*/ 256) input_changes.hasError = /*hasError*/ ctx[8]; 16025 if (dirty & /*isPaymentForm*/ 8) input_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 16026 if (dirty & /*onFocus*/ 32) input_changes.onFocus = /*onFocus*/ ctx[5]; 16027 if (dirty & /*onBlur*/ 64) input_changes.onBlur = /*onBlur*/ ctx[6]; 16028 input.$set(input_changes); 16029 }, 16030 i(local) { 16031 if (current) return; 16032 transition_in(input.$$.fragment, local); 16033 current = true; 16034 }, 16035 o(local) { 16036 transition_out(input.$$.fragment, local); 16037 current = false; 16038 }, 16039 d(detaching) { 16040 destroy_component(input, detaching); 16041 } 16042 }; 16043 } 16044 16045 // (93:56) 16046 function create_if_block_5$7(ctx) { 16047 let div; 16048 let input; 16049 let t; 16050 let current; 16051 16052 input = new Input({ 16053 props: {
16054 id: /*id*/ ctx[10], 16055 required: /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required, 16056 type: /*attributeSchema*/ ctx[1]["input-type"], 16057 value: /*value*/ ctx[2], 16058 min: /*attributeSchema*/ ctx[1]["range-start"], 16059 max: /*attributeSchema*/ ctx[1]["range-end"], 16060 step: /*attributeSchema*/ ctx[1]["range-start"], 16061 isPaymentForm: /*isPaymentForm*/ ctx[3], 16062 onFocus: /*onFocus*/ ctx[5], 16063 onBlur: /*onBlur*/ ctx[6] 16064 } 16065 }); 16066 16067 input.$on("change", /*change_handler_3*/ ctx[17]); 16068 let if_block = /*attributeSchema*/ ctx[1]["input-type"] === "range" && /*value*/ ctx[2] != null && create_if_block_6$7(ctx); 16069 16070 return { 16071 c() { 16072 div = element("div"); 16073 create_component(input.$$.fragment); 16074 t = space(); 16075 if (if_block) if_block.c(); 16076 attr(div, "class", "zephr-form-flex-container"); 16077 toggle_class(div, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[3]); 16078 }, 16079 m(target, anchor) { 16080 insert(target, div, anchor); 16081 mount_component(input, div, null); 16082 append(div, t); 16083 if (if_block) if_block.m(div, null); 16084 current = true; 16085 }, 16086 p(ctx, dirty) { 16087 const input_changes = {}; 16088 if (dirty & /*config, attributeSchema*/ 3) input_changes.required = /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required; 16089 if (dirty & /*attributeSchema*/ 2) input_changes.type = /*attributeSchema*/ ctx[1]["input-type"]; 16090 if (dirty & /*value*/ 4) input_changes.value = /*value*/ ctx[2]; 16091 if (dirty & /*attributeSchema*/ 2) input_changes.min = /*attributeSchema*/ ctx[1]["range-start"]; 16092 if (dirty & /*attributeSchema*/ 2) input_changes.max = /*attributeSchema*/ ctx[1]["range-end"]; 16093 if (dirty & /*attributeSchema*/ 2) input_changes.step = /*attributeSchema*/ ctx[1]["range-start"]; 16094 if (dirty & /*isPaymentForm*/ 8) input_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 16095 if (dirty & /*onFocus*/ 32) input_changes.onFocus = /*onFocus*/ ctx[5]; 16096 if (dirty & /*onBlur*/ 64) input_changes.onBlur = /*onBlur*/ ctx[6]; 16097 input.$set(input_changes); 16098 16099 if (/*attributeSchema*/ ctx[1]["input-type"] === "range" && /*value*/ ctx[2] != null) { 16100 if (if_block) { 16101 if_block.p(ctx, dirty); 16102 } else { 16103 if_block = create_if_block_6$7(ctx); 16104 if_block.c(); 16105 if_block.m(div, null); 16106 } 16107 } else if (if_block) { 16108 if_block.d(1); 16109 if_block = null; 16110 } 16111 16112 if (!current || dirty & /*isPaymentForm*/ 8) { 16113 toggle_class(div, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[3]); 16114 } 16115 }, 16116 i(local) { 16117 if (current) return; 16118 transition_in(input.$$.fragment, local); 16119 current = true; 16120 }, 16121 o(local) { 16122 transition_out(input.$$.fragment, local); 16123 current = false; 16124 }, 16125 d(detaching) { 16126 if (detaching) { 16127 detach(div); 16128 } 16129 16130 destroy_component(input); 16131 if (if_block) if_block.d(); 16132 } 16133 }; 16134 } 16135 16136 // (84:59) 16137 function create_if_block_4$9(ctx) { 16138 let textarea; 16139 let textarea_required_value; 16140 let textarea_placeholder_value; 16141 let mounted; 16142 let dispose; 16143 16144 return { 16145 c() { 16146 textarea = element("textarea"); 16147 attr(textarea, "id", /*id*/ ctx[10]); 16148 attr(textarea, "class", "zephr-form-input zephr-form-input-textarea svelte-wlae04"); 16149 textarea.required = textarea_required_value = /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required; 16150 attr(textarea, "placeholder", textarea_placeholder_value = /*config*/ ctx[0].placeholder); 16151 toggle_class(textarea, "zephr-payment-form-input", /*isPaymentForm*/ ctx[3]); 16152 toggle_class(textarea, "zephr-payment-form-input-textarea", /*isPaymentForm*/ ctx[3]); 16153 }, 16154 m(target, anchor) { 16155 insert(target, textarea, anchor); 16156 set_input_value(textarea, /*currentValue*/ ctx[7]); 16157 16158 if (!mounted) { 16159 dispose = listen(textarea, "input", /*textarea_input_handler*/ ctx[16]); 16160 mounted = true; 16161 } 16162 }, 16163 p(ctx, dirty) { 16164 if (dirty & /*config, attributeSchema*/ 3 && textarea_required_value !== (textarea_required_value = /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required)) { 16165 textarea.required = textarea_required_value; 16166 } 16167
16168 if (dirty & /*config*/ 1 && textarea_placeholder_value !== (textarea_placeholder_value = /*config*/ ctx[0].placeholder)) { 16169 attr(textarea, "placeholder", textarea_placeholder_value); 16170 } 16171 16172 if (dirty & /*currentValue*/ 128) { 16173 set_input_value(textarea, /*currentValue*/ ctx[7]); 16174 } 16175 16176 if (dirty & /*isPaymentForm*/ 8) { 16177 toggle_class(textarea, "zephr-payment-form-input", /*isPaymentForm*/ ctx[3]); 16178 } 16179 16180 if (dirty & /*isPaymentForm*/ 8) { 16181 toggle_class(textarea, "zephr-payment-form-input-textarea", /*isPaymentForm*/ ctx[3]); 16182 } 16183 }, 16184 i: noop, 16185 o: noop, 16186 d(detaching) { 16187 if (detaching) { 16188 detach(textarea); 16189 } 16190 16191 mounted = false; 16192 dispose(); 16193 } 16194 }; 16195 } 16196 16197 // (64:57) 16198 function create_if_block_3$b(ctx) { 16199 let select; 16200 let option_1; 16201 let t_value = (/*config*/ ctx[0].placeholder ?? "") + ""; 16202 let t; 16203 let select_name_value; 16204 let select_required_value; 16205 let select_value_value; 16206 let mounted; 16207 let dispose; 16208 let each_value_1 = ensure_array_like(/*attributeSchema*/ ctx[1]?.["select-options"]); 16209 let each_blocks = []; 16210 16211 for (let i = 0; i < each_value_1.length; i += 1) { 16212 each_blocks[i] = create_each_block_1$4(get_each_context_1$4(ctx, each_value_1, i)); 16213 } 16214 16215 return { 16216 c() { 16217 select = element("select"); 16218 option_1 = element("option"); 16219 t = text(t_value); 16220 16221 for (let i = 0; i < each_blocks.length; i += 1) { 16222 each_blocks[i].c(); 16223 } 16224 16225 option_1.disabled = true; 16226 option_1.__value = ""; 16227 set_input_value(option_1, option_1.__value); 16228 attr(select, "id", /*id*/ ctx[10]); 16229 attr(select, "name", select_name_value = /*config*/ ctx[0].slug); 16230 attr(select, "class", "zephr-form-input zephr-form-input-select svelte-wlae04"); 16231 select.required = select_required_value = /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required; 16232 toggle_class(select, "zephr-payment-form-input", /*isPaymentForm*/ ctx[3]); 16233 toggle_class(select, "zephr-payment-form-input-select", /*isPaymentForm*/ ctx[3]); 16234 toggle_class(select, "unselected", !/*value*/ ctx[2]); 16235 toggle_class(select, "error", /*hasError*/ ctx[8]); 16236 }, 16237 m(target, anchor) { 16238 insert(target, select, anchor); 16239 append(select, option_1); 16240 append(option_1, t); 16241 16242 for (let i = 0; i < each_blocks.length; i += 1) { 16243 if (each_blocks[i]) { 16244 each_blocks[i].m(select, null); 16245 } 16246 } 16247 16248 select_option(select, /*value*/ ctx[2] ?? ""); 16249 16250 if (!mounted) { 16251 dispose = listen(select, "change", /*change_handler_2*/ ctx[15]); 16252 mounted = true; 16253 } 16254 }, 16255 p(ctx, dirty) { 16256 if (dirty & /*config*/ 1 && t_value !== (t_value = (/*config*/ ctx[0].placeholder ?? "") + "")) set_data(t, t_value); 16257 16258 if (dirty & /*attributeSchema, value*/ 6) { 16259 each_value_1 = ensure_array_like(/*attributeSchema*/ ctx[1]?.["select-options"]); 16260 let i; 16261 16262 for (i = 0; i < each_value_1.length; i += 1) { 16263 const child_ctx = get_each_context_1$4(ctx, each_value_1, i); 16264 16265 if (each_blocks[i]) { 16266 each_blocks[i].p(child_ctx, dirty); 16267 } else { 16268 each_blocks[i] = create_each_block_1$4(child_ctx); 16269 each_blocks[i].c(); 16270 each_blocks[i].m(select, null); 16271 } 16272 } 16273 16274 for (; i < each_blocks.length; i += 1) { 16275 each_blocks[i].d(1); 16276 } 16277 16278 each_blocks.length = each_value_1.length; 16279 } 16280 16281 if (dirty & /*config*/ 1 && select_name_value !== (select_name_value = /*config*/ ctx[0].slug)) { 16282 attr(select, "name", select_name_value); 16283 } 16284 16285 if (dirty & /*config, attributeSchema*/ 3 && select_required_value !== (select_required_value = /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required)) { 16286 select.required = select_required_value; 16287 } 16288 16289 if (dirty & /*value, attributeSchema*/ 6 && select_value_value !== (select_value_value = /*value*/ ctx[2] ?? "")) { 16290 select_option(select, /*value*/ ctx[2] ?? ""); 16291 } 16292 16293 if (dirty & /*isPaymentForm*/ 8) { 16294 toggle_class(select, "zephr-payment-form-input", /*isPaymentForm*/ ctx[3]); 16295 } 16296 16297 if (dirty & /*isPaymentForm*/ 8) { 16298 toggle_class(select, "zephr-payment-form-input-select", /*isPaymentForm*/ ctx[3]); 16299 } 16300
16301 if (dirty & /*value*/ 4) { 16302 toggle_class(select, "unselected", !/*value*/ ctx[2]); 16303 } 16304 16305 if (dirty & /*hasError*/ 256) { 16306 toggle_class(select, "error", /*hasError*/ ctx[8]); 16307 } 16308 }, 16309 i: noop, 16310 o: noop, 16311 d(detaching) { 16312 if (detaching) { 16313 detach(select); 16314 } 16315 16316 destroy_each(each_blocks, detaching); 16317 mounted = false; 16318 dispose(); 16319 } 16320 }; 16321 } 16322 16323 // (48:59) 16324 function create_if_block_2$g(ctx) { 16325 let checkbox; 16326 let current; 16327 16328 checkbox = new Checkbox({ 16329 props: { 16330 id: /*id*/ ctx[10], 16331 name: /*config*/ ctx[0].slug, 16332 label: `${/*config*/ ctx[0].label}${/*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required 16333 ? "*" 16334 : ""}`, 16335 required: /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required, 16336 value: /*value*/ ctx[2], 16337 checked: /*value*/ ctx[2], 16338 pattern: /*attributeSchema*/ ctx[1]?.["validation-expression"], 16339 placeholder: /*config*/ ctx[0].placeholder, 16340 hasError: /*hasError*/ ctx[8], 16341 isPaymentForm: /*isPaymentForm*/ ctx[3] 16342 } 16343 }); 16344 16345 checkbox.$on("change", /*change_handler_1*/ ctx[14]); 16346 16347 return { 16348 c() { 16349 create_component(checkbox.$$.fragment); 16350 }, 16351 m(target, anchor) { 16352 mount_component(checkbox, target, anchor); 16353 current = true; 16354 }, 16355 p(ctx, dirty) { 16356 const checkbox_changes = {}; 16357 if (dirty & /*config*/ 1) checkbox_changes.name = /*config*/ ctx[0].slug; 16358 16359 if (dirty & /*config, attributeSchema*/ 3) checkbox_changes.label = `${/*config*/ ctx[0].label}${/*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required 16360 ? "*" 16361 : ""}`; 16362 16363 if (dirty & /*config, attributeSchema*/ 3) checkbox_changes.required = /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required; 16364 if (dirty & /*value*/ 4) checkbox_changes.value = /*value*/ ctx[2]; 16365 if (dirty & /*value*/ 4) checkbox_changes.checked = /*value*/ ctx[2]; 16366 if (dirty & /*attributeSchema*/ 2) checkbox_changes.pattern = /*attributeSchema*/ ctx[1]?.["validation-expression"]; 16367 if (dirty & /*config*/ 1) checkbox_changes.placeholder = /*config*/ ctx[0].placeholder; 16368 if (dirty & /*hasError*/ 256) checkbox_changes.hasError = /*hasError*/ ctx[8]; 16369 if (dirty & /*isPaymentForm*/ 8) checkbox_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 16370 checkbox.$set(checkbox_changes); 16371 }, 16372 i(local) { 16373 if (current) return; 16374 transition_in(checkbox.$$.fragment, local); 16375 current = true; 16376 }, 16377 o(local) { 16378 transition_out(checkbox.$$.fragment, local); 16379 current = false; 16380 }, 16381 d(detaching) { 16382 destroy_component(checkbox, detaching); 16383 } 16384 }; 16385 } 16386 16387 // (34:2) {#if attributeSchema?.["input-type"] === "radio"} 16388 function create_if_block_1$q(ctx) { 16389 let each_1_anchor; 16390 let current; 16391 let each_value = ensure_array_like(/*attributeSchema*/ ctx[1]?.["select-options"]); 16392 let each_blocks = []; 16393 16394 for (let i = 0; i < each_value.length; i += 1) { 16395 each_blocks[i] = create_each_block$e(get_each_context$e(ctx, each_value, i)); 16396 } 16397 16398 const out = i => transition_out(each_blocks[i], 1, 1, () => { 16399 each_blocks[i] = null; 16400 }); 16401 16402 return { 16403 c() { 16404 for (let i = 0; i < each_blocks.length; i += 1) { 16405 each_blocks[i].c(); 16406 } 16407 16408 each_1_anchor = empty(); 16409 }, 16410 m(target, anchor) { 16411 for (let i = 0; i < each_blocks.length; i += 1) { 16412 if (each_blocks[i]) { 16413 each_blocks[i].m(target, anchor); 16414 } 16415 } 16416 16417 insert(target, each_1_anchor, anchor); 16418 current = true; 16419 }, 16420 p(ctx, dirty) { 16421 if (dirty & /*id, attributeSchema, config, value, hasError, isPaymentForm, onChange*/ 1311) { 16422 each_value = ensure_array_like(/*attributeSchema*/ ctx[1]?.["select-options"]); 16423 let i; 16424 16425 for (i = 0; i < each_value.length; i += 1) { 16426 const child_ctx = get_each_context$e(ctx, each_value, i); 16427 16428 if (each_blocks[i]) { 16429 each_blocks[i].p(child_ctx, dirty); 16430 transition_in(each_blocks[i], 1); 16431 } else { 16432 each_blocks[i] = create_each_block$e(child_ctx); 16433 each_blocks[i].c(); 16434 transition_in(each_blocks[i], 1); 16435 each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); 16436 } 16437 } 16438 16439 group_outros(); 16440 16441 for (i = each_value.length; i < each_blocks.length; i += 1) { 16442 out(i); 16443 } 16444 16445 check_outros(); 16446 } 16447 }, 16448 i(local) { 16449 if (current) return; 16450 16451 for (let i = 0; i < each_value.length; i += 1) { 16452 transition_in(each_blocks[i]); 16453 } 16454 16455 current = true; 16456 }, 16457 o(local) {
16458 each_blocks = each_blocks.filter(Boolean); 16459 16460 for (let i = 0; i < each_blocks.length; i += 1) { 16461 transition_out(each_blocks[i]); 16462 } 16463 16464 current = false; 16465 }, 16466 d(detaching) { 16467 if (detaching) { 16468 detach(each_1_anchor); 16469 } 16470 16471 destroy_each(each_blocks, detaching); 16472 } 16473 }; 16474 } 16475 16476 // (111:6) {#if attributeSchema["input-type"] === "range" && value != null} 16477 function create_if_block_6$7(ctx) { 16478 let output; 16479 let t; 16480 16481 return { 16482 c() { 16483 output = element("output"); 16484 t = text(/*value*/ ctx[2]); 16485 attr(output, "class", "zephr-form-input-slider-output svelte-wlae04"); 16486 toggle_class(output, "zephr-payment-form-input-slider-output", /*isPaymentForm*/ ctx[3]); 16487 }, 16488 m(target, anchor) { 16489 insert(target, output, anchor); 16490 append(output, t); 16491 }, 16492 p(ctx, dirty) { 16493 if (dirty & /*value*/ 4) set_data(t, /*value*/ ctx[2]); 16494 16495 if (dirty & /*isPaymentForm*/ 8) { 16496 toggle_class(output, "zephr-payment-form-input-slider-output", /*isPaymentForm*/ ctx[3]); 16497 } 16498 }, 16499 d(detaching) { 16500 if (detaching) { 16501 detach(output); 16502 } 16503 } 16504 }; 16505 } 16506 16507 // (78:6) {#each attributeSchema?.["select-options"] as option} 16508 function create_each_block_1$4(ctx) { 16509 let option_1; 16510 let t0_value = /*option*/ ctx[19].label + ""; 16511 let t0; 16512 let t1; 16513 let option_1_value_value; 16514 let option_1_selected_value; 16515 16516 return { 16517 c() { 16518 option_1 = element("option"); 16519 t0 = text(t0_value); 16520 t1 = space(); 16521 option_1.__value = option_1_value_value = /*option*/ ctx[19].value; 16522 set_input_value(option_1, option_1.__value); 16523 option_1.selected = option_1_selected_value = /*value*/ ctx[2] === /*option*/ ctx[19].value; 16524 }, 16525 m(target, anchor) { 16526 insert(target, option_1, anchor); 16527 append(option_1, t0); 16528 append(option_1, t1); 16529 }, 16530 p(ctx, dirty) { 16531 if (dirty & /*attributeSchema*/ 2 && t0_value !== (t0_value = /*option*/ ctx[19].label + "")) set_data(t0, t0_value); 16532 16533 if (dirty & /*attributeSchema*/ 2 && option_1_value_value !== (option_1_value_value = /*option*/ ctx[19].value)) { 16534 option_1.__value = option_1_value_value; 16535 set_input_value(option_1, option_1.__value); 16536 } 16537 16538 if (dirty & /*value, attributeSchema*/ 6 && option_1_selected_value !== (option_1_selected_value = /*value*/ ctx[2] === /*option*/ ctx[19].value)) { 16539 option_1.selected = option_1_selected_value; 16540 } 16541 }, 16542 d(detaching) { 16543 if (detaching) { 16544 detach(option_1); 16545 } 16546 } 16547 }; 16548 } 16549 16550 // (35:4) {#each attributeSchema?.["select-options"] as option} 16551 function create_each_block$e(ctx) { 16552 let radio; 16553 let current; 16554 16555 radio = new Radio({ 16556 props: { 16557 id: "" + (/*id*/ ctx[10] + "-" + /*option*/ ctx[19].value), 16558 name: /*config*/ ctx[0].slug, 16559 label: /*option*/ ctx[19].label, 16560 required: /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required, 16561 value: /*option*/ ctx[19].value, 16562 checked: /*value*/ ctx[2] === /*option*/ ctx[19].value, 16563 hasError: /*hasError*/ ctx[8], 16564 isPaymentForm: /*isPaymentForm*/ ctx[3] 16565 } 16566 }); 16567 16568 radio.$on("change", /*change_handler*/ ctx[13]); 16569 16570 return { 16571 c() { 16572 create_component(radio.$$.fragment); 16573 }, 16574 m(target, anchor) { 16575 mount_component(radio, target, anchor); 16576 current = true; 16577 }, 16578 p(ctx, dirty) { 16579 const radio_changes = {}; 16580 if (dirty & /*attributeSchema*/ 2) radio_changes.id = "" + (/*id*/ ctx[10] + "-" + /*option*/ ctx[19].value); 16581 if (dirty & /*config*/ 1) radio_changes.name = /*config*/ ctx[0].slug; 16582 if (dirty & /*attributeSchema*/ 2) radio_changes.label = /*option*/ ctx[19].label; 16583 if (dirty & /*config, attributeSchema*/ 3) radio_changes.required = /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required; 16584 if (dirty & /*attributeSchema*/ 2) radio_changes.value = /*option*/ ctx[19].value; 16585 if (dirty & /*value, attributeSchema*/ 6) radio_changes.checked = /*value*/ ctx[2] === /*option*/ ctx[19].value; 16586 if (dirty & /*hasError*/ 256) radio_changes.hasError = /*hasError*/ ctx[8]; 16587 if (dirty & /*isPaymentForm*/ 8) radio_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 16588 radio.$set(radio_changes); 16589 }, 16590 i(local) { 16591 if (current) return; 16592 transition_in(radio.$$.fragment, local); 16593 current = true; 16594 }, 16595 o(local) { 16596 transition_out(radio.$$.fragment, local); 16597 current = false;
16598 }, 16599 d(detaching) { 16600 destroy_component(radio, detaching); 16601 } 16602 }; 16603 } 16604 16605 // (24:0) <Label forInput={id} sublabel={attributeSchema["public-description"]} label={!/(hidden|checkbox)/.test(attributeSchema?.["input-type"] || "") ? `${config.label}${ config.required || attributeSchema?.required ? "*" : "" }` : ""} {isPaymentForm} > 16606 function create_default_slot$5(ctx) { 16607 let current_block_type_index; 16608 let if_block; 16609 let if_block_anchor; 16610 let current; 16611 16612 const if_block_creators = [ 16613 create_if_block_1$q, 16614 create_if_block_2$g, 16615 create_if_block_3$b, 16616 create_if_block_4$9, 16617 create_if_block_5$7, 16618 create_else_block$8 16619 ]; 16620 16621 const if_blocks = []; 16622 16623 function select_block_type(ctx, dirty) { 16624 if (/*attributeSchema*/ ctx[1]?.["input-type"] === "radio") return 0; 16625 if (/*attributeSchema*/ ctx[1]?.["input-type"] === "checkbox") return 1; 16626 if (/*attributeSchema*/ ctx[1]?.["input-type"] === "select") return 2; 16627 if (/*attributeSchema*/ ctx[1]?.["input-type"] === "textarea") return 3; 16628 if (/*attributeSchema*/ ctx[1]?.["input-type"] === "range") return 4; 16629 return 5; 16630 } 16631 16632 current_block_type_index = select_block_type(ctx); 16633 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 16634 16635 return { 16636 c() { 16637 if_block.c(); 16638 if_block_anchor = empty(); 16639 }, 16640 m(target, anchor) { 16641 if_blocks[current_block_type_index].m(target, anchor); 16642 insert(target, if_block_anchor, anchor); 16643 current = true; 16644 }, 16645 p(ctx, dirty) { 16646 let previous_block_index = current_block_type_index; 16647 current_block_type_index = select_block_type(ctx); 16648 16649 if (current_block_type_index === previous_block_index) { 16650 if_blocks[current_block_type_index].p(ctx, dirty); 16651 } else { 16652 group_outros(); 16653 16654 transition_out(if_blocks[previous_block_index], 1, 1, () => { 16655 if_blocks[previous_block_index] = null; 16656 }); 16657 16658 check_outros(); 16659 if_block = if_blocks[current_block_type_index]; 16660 16661 if (!if_block) { 16662 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 16663 if_block.c(); 16664 } else { 16665 if_block.p(ctx, dirty); 16666 } 16667 16668 transition_in(if_block, 1); 16669 if_block.m(if_block_anchor.parentNode, if_block_anchor); 16670 } 16671 }, 16672 i(local) { 16673 if (current) return; 16674 transition_in(if_block); 16675 current = true; 16676 }, 16677 o(local) { 16678 transition_out(if_block); 16679 current = false; 16680 }, 16681 d(detaching) { 16682 if (detaching) { 16683 detach(if_block_anchor); 16684 } 16685 16686 if_blocks[current_block_type_index].d(detaching); 16687 } 16688 }; 16689 } 16690 16691 // (138:0) {#if hasError} 16692 function create_if_block$A(ctx) { 16693 let div; 16694 16695 return { 16696 c() { 16697 div = element("div"); 16698 div.textContent = "Mandatory information must be entered"; 16699 attr(div, "class", "zephr-form-input-error-text svelte-wlae04"); 16700 toggle_class(div, "zephr-payment-form-input-error-text", /*isPaymentForm*/ ctx[3]); 16701 }, 16702 m(target, anchor) { 16703 insert(target, div, anchor); 16704 }, 16705 p(ctx, dirty) { 16706 if (dirty & /*isPaymentForm*/ 8) { 16707 toggle_class(div, "zephr-payment-form-input-error-text", /*isPaymentForm*/ ctx[3]); 16708 } 16709 }, 16710 d(detaching) { 16711 if (detaching) { 16712 detach(div); 16713 } 16714 } 16715 }; 16716 } 16717 16718 function create_fragment$M(ctx) { 16719 let label; 16720 let t; 16721 let if_block_anchor; 16722 let current; 16723 16724 label = new Label({ 16725 props: { 16726 forInput: /*id*/ ctx[10], 16727 sublabel: /*attributeSchema*/ ctx[1]["public-description"], 16728 label: !(/(hidden|checkbox)/).test(/*attributeSchema*/ ctx[1]?.["input-type"] || "") 16729 ? `${/*config*/ ctx[0].label}${/*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required 16730 ? "*" 16731 : ""}` 16732 : "", 16733 isPaymentForm: /*isPaymentForm*/ ctx[3], 16734 $$slots: { default: [create_default_slot$5] }, 16735 $$scope: { ctx } 16736 } 16737 }); 16738 16739 let if_block = /*hasError*/ ctx[8] && create_if_block$A(ctx); 16740 16741 return { 16742 c() { 16743 create_component(label.$$.fragment); 16744 t = space(); 16745 if (if_block) if_block.c(); 16746 if_block_anchor = empty(); 16747 }, 16748 m(target, anchor) { 16749 mount_component(label, target, anchor); 16750 insert(target, t, anchor); 16751 if (if_block) if_block.m(target, anchor); 16752 insert(target, if_block_anchor, anchor); 16753 current = true; 16754 }, 16755 p(ctx, [dirty]) { 16756 const label_changes = {};
16757 if (dirty & /*attributeSchema*/ 2) label_changes.sublabel = /*attributeSchema*/ ctx[1]["public-description"]; 16758 16759 if (dirty & /*attributeSchema, config*/ 3) label_changes.label = !(/(hidden|checkbox)/).test(/*attributeSchema*/ ctx[1]?.["input-type"] || "") 16760 ? `${/*config*/ ctx[0].label}${/*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required 16761 ? "*" 16762 : ""}` 16763 : ""; 16764 16765 if (dirty & /*isPaymentForm*/ 8) label_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 16766 16767 if (dirty & /*$$scope, attributeSchema, config, value, hasError, isPaymentForm, onChange, currentValue, onFocus, onBlur*/ 16777727) { 16768 label_changes.$$scope = { dirty, ctx }; 16769 } 16770 16771 label.$set(label_changes); 16772 16773 if (/*hasError*/ ctx[8]) { 16774 if (if_block) { 16775 if_block.p(ctx, dirty); 16776 } else { 16777 if_block = create_if_block$A(ctx); 16778 if_block.c(); 16779 if_block.m(if_block_anchor.parentNode, if_block_anchor); 16780 } 16781 } else if (if_block) { 16782 if_block.d(1); 16783 if_block = null; 16784 } 16785 }, 16786 i(local) { 16787 if (current) return; 16788 transition_in(label.$$.fragment, local); 16789 current = true; 16790 }, 16791 o(local) { 16792 transition_out(label.$$.fragment, local); 16793 current = false; 16794 }, 16795 d(detaching) { 16796 if (detaching) { 16797 detach(t); 16798 detach(if_block_anchor); 16799 } 16800 16801 destroy_component(label, detaching); 16802 if (if_block) if_block.d(detaching); 16803 } 16804 }; 16805 } 16806 16807 function instance$L($$self, $$props, $$invalidate) { 16808 let hasError; 16809 let { formKey } = $$props; 16810 let { config } = $$props; 16811 let { attributeSchema } = $$props; 16812 let { value } = $$props; 16813 let { error } = $$props; 16814 let { isPaymentForm = false } = $$props; 16815 let { onChange } = $$props; 16816 let { onFocus } = $$props; 16817 let { onBlur } = $$props; 16818 let currentValue = value; 16819 16820 // Casting functions for typescript 16821 const asSelect = target => target; 16822 16823 const id = `zephr-form-${config.slug}-${formKey}`; 16824 const change_handler = ({ detail }) => onChange(detail); 16825 const change_handler_1 = ({ detail }) => onChange(detail); 16826 const change_handler_2 = e => onChange(asSelect(e.target).value); 16827 16828 function textarea_input_handler() { 16829 currentValue = this.value; 16830 $$invalidate(7, currentValue); 16831 } 16832 16833 const change_handler_3 = ({ detail }) => onChange(detail); 16834 const change_handler_4 = ({ detail }) => onChange(detail); 16835 16836 $$self.$$set = $$props => {
16837 if ('formKey' in $$props) $$invalidate(11, formKey = $$props.formKey); 16838 if ('config' in $$props) $$invalidate(0, config = $$props.config); 16839 if ('attributeSchema' in $$props) $$invalidate(1, attributeSchema = $$props.attributeSchema); 16840 if ('value' in $$props) $$invalidate(2, value = $$props.value); 16841 if ('error' in $$props) $$invalidate(12, error = $$props.error); 16842 if ('isPaymentForm' in $$props) $$invalidate(3, isPaymentForm = $$props.isPaymentForm); 16843 if ('onChange' in $$props) $$invalidate(4, onChange = $$props.onChange); 16844 if ('onFocus' in $$props) $$invalidate(5, onFocus = $$props.onFocus); 16845 if ('onBlur' in $$props) $$invalidate(6, onBlur = $$props.onBlur); 16846 }; 16847 16848 $$self.$$.update = () => { 16849 if ($$self.$$.dirty & /*error*/ 4096) { 16850 $$invalidate(8, hasError = !!error); 16851 } 16852 16853 if ($$self.$$.dirty & /*attributeSchema, currentValue, value, onChange*/ 150) { 16854 if (attributeSchema?.["input-type"] === "textarea" && currentValue !== value) { 16855 onChange(currentValue); 16856 } 16857 } 16858 }; 16859 16860 return [ 16861 config, 16862 attributeSchema, 16863 value, 16864 isPaymentForm, 16865 onChange, 16866 onFocus, 16867 onBlur, 16868 currentValue, 16869 hasError, 16870 asSelect, 16871 id, 16872 formKey, 16873 error, 16874 change_handler, 16875 change_handler_1, 16876 change_handler_2, 16877 textarea_input_handler, 16878 change_handler_3, 16879 change_handler_4 16880 ]; 16881 } 16882 16883 class UserAttribute extends SvelteComponent { 16884 constructor(options) { 16885 super(); 16886 16887 init(this, options, instance$L, create_fragment$M, safe_not_equal, { 16888 formKey: 11, 16889 config: 0, 16890 attributeSchema: 1, 16891 value: 2, 16892 error: 12, 16893 isPaymentForm: 3, 16894 onChange: 4, 16895 onFocus: 5, 16896 onBlur: 6 16897 }); 16898 } 16899 } 16900 16901 const isEmpty = value => value == null || value === ""; 16902 const factory$j = { 16903 matches: (sectionElement) => sectionElement.type === elementTypes.USER_ATTRIBUTE, 16904 create: (form, formState, formActions, elementConfig) => { 16905 const attributeSchema = form.organisationConfiguration.schemaFields.find(s => s.slug === elementConfig.slug); 16906 const hide = formState.hideIfSetAttributes?.includes(elementConfig.slug); 16907 if (attributeSchema == undefined || hide) { 16908 return undefined; 16909 } 16910 const required = attributeSchema.required || elementConfig.required; 16911 const currentValue = (formState.userAttributes[elementConfig.slug] ?? (formState.readOnlyAttributeValues ?? {})[elementConfig.slug]); 16912 return { 16913 component: UserAttribute, 16914 props: { 16915 formKey: form.uniqueKey, 16916 config: elementConfig, 16917 value: currentValue, 16918 attributeSchema, 16919 isPaymentForm: form.formType === FormType.PAYMENT, 16920 onChange: (value) => { 16921 formActions.updateFormState({ 16922 userAttributes: { 16923 ...formState.userAttributes, 16924 [elementConfig.slug]: value 16925 } 16926 }); 16927 logDataLayerEvent(form, 'zephr_form_input_change', { 16928 inputName: `zephr-form-${elementConfig.slug}-${form.uniqueKey}`, 16929 sectionId: formState.currentSection.type, 16930 field: elementConfig.slug 16931 }); 16932 }, 16933 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 16934 inputName: `zephr-form-${elementConfig.slug}-${form.uniqueKey}`, 16935 sectionId: formState.currentSection.type, 16936 field: elementConfig.slug 16937 }), 16938 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 16939 inputName: `zephr-form-${elementConfig.slug}-${form.uniqueKey}`, 16940 sectionId: formState.currentSection.type, 16941 field: elementConfig.slug 16942 }), 16943 }, 16944 isValid: !(required && isEmpty(currentValue)) 16945 && !(required && attributeSchema["input-type"] === 'checkbox' && !currentValue) 16946 && !(attributeSchema["input-type"] === 'email' && !isEmpty(currentValue) && !isValidEmail(currentValue)) 16947 }; 16948 } 16949 }; 16950 16951 /* src/components/elements/Link.svelte generated by Svelte v4.2.12 */ 16952 16953 function create_fragment$L(ctx) { 16954 let button; 16955 let t; 16956 let mounted; 16957 let dispose; 16958 16959 return { 16960 c() { 16961 button = element("button"); 16962 t = text(/*text*/ ctx[0]); 16963 attr(button, "type", "button"); 16964 attr(button, "class", "zephr-form-link svelte-14vxk2u"); 16965 toggle_class(button, "zephr-form-link-disabled", /*disabled*/ ctx[1]); 16966 toggle_class(button, "zephr-form-link-no-underline", /*noUnderline*/ ctx[3]); 16967 }, 16968 m(target, anchor) { 16969 insert(target, button, anchor); 16970 append(button, t); 16971 16972 if (!mounted) { 16973 dispose = listen(button, "click", /*click_handler*/ ctx[5]); 16974 mounted = true; 16975 } 16976 }, 16977 p(ctx, [dirty]) {
16978 if (dirty & /*text*/ 1) set_data(t, /*text*/ ctx[0]); 16979 16980 if (dirty & /*disabled*/ 2) { 16981 toggle_class(button, "zephr-form-link-disabled", /*disabled*/ ctx[1]); 16982 } 16983 16984 if (dirty & /*noUnderline*/ 8) { 16985 toggle_class(button, "zephr-form-link-no-underline", /*noUnderline*/ ctx[3]); 16986 } 16987 }, 16988 i: noop, 16989 o: noop, 16990 d(detaching) { 16991 if (detaching) { 16992 detach(button); 16993 } 16994 16995 mounted = false; 16996 dispose(); 16997 } 16998 }; 16999 } 17000 17001 function instance$K($$self, $$props, $$invalidate) { 17002 let { text } = $$props; 17003 let { disabled = false } = $$props; 17004 17005 let { onClick = () => { 17006 17007 } } = $$props; 17008 17009 let { noUnderline = false } = $$props; 17010 const dispatch = createEventDispatcher(); 17011 17012 const click_handler = () => { 17013 onClick(); 17014 dispatch('linkClick', null); 17015 }; 17016 17017 $$self.$$set = $$props => { 17018 if ('text' in $$props) $$invalidate(0, text = $$props.text); 17019 if ('disabled' in $$props) $$invalidate(1, disabled = $$props.disabled); 17020 if ('onClick' in $$props) $$invalidate(2, onClick = $$props.onClick);
17021 if ('noUnderline' in $$props) $$invalidate(3, noUnderline = $$props.noUnderline); 17022 }; 17023 17024 return [text, disabled, onClick, noUnderline, dispatch, click_handler]; 17025 } 17026 17027 class Link extends SvelteComponent { 17028 constructor(options) { 17029 super(); 17030 17031 init(this, options, instance$K, create_fragment$L, safe_not_equal, { 17032 text: 0, 17033 disabled: 1, 17034 onClick: 2, 17035 noUnderline: 3 17036 }); 17037 } 17038 } 17039 17040 /* src/components/elements/resetPasswordLink/ResetPasswordLink.svelte generated by Svelte v4.2.12 */ 17041 17042 function create_else_block$7(ctx) { 17043 let link; 17044 let current; 17045 17046 link = new Link({ 17047 props: { 17048 text: /*text*/ ctx[0], 17049 onClick: /*onClick*/ ctx[2] 17050 } 17051 }); 17052 17053 link.$on("linkClick", /*linkClick_handler*/ ctx[7]); 17054 17055 return { 17056 c() { 17057 create_component(link.$$.fragment); 17058 }, 17059 m(target, anchor) { 17060 mount_component(link, target, anchor); 17061 current = true; 17062 }, 17063 p(ctx, dirty) { 17064 const link_changes = {}; 17065 if (dirty & /*text*/ 1) link_changes.text = /*text*/ ctx[0]; 17066 if (dirty & /*onClick*/ 4) link_changes.onClick = /*onClick*/ ctx[2]; 17067 link.$set(link_changes); 17068 }, 17069 i(local) { 17070 if (current) return; 17071 transition_in(link.$$.fragment, local); 17072 current = true; 17073 }, 17074 o(local) { 17075 transition_out(link.$$.fragment, local); 17076 current = false; 17077 }, 17078 d(detaching) { 17079 destroy_component(link, detaching); 17080 } 17081 }; 17082 } 17083 17084 // (16:2) {#if showMessage && !error} 17085 function create_if_block_1$p(ctx) { 17086 let div; 17087 let t; 17088 17089 return { 17090 c() { 17091 div = element("div"); 17092 t = text(/*message*/ ctx[1]); 17093 attr(div, "class", "zephr-form-link-message svelte-49aomy"); 17094 }, 17095 m(target, anchor) { 17096 insert(target, div, anchor); 17097 append(div, t); 17098 }, 17099 p(ctx, dirty) { 17100 if (dirty & /*message*/ 2) set_data(t, /*message*/ ctx[1]); 17101 }, 17102 i: noop, 17103 o: noop, 17104 d(detaching) { 17105 if (detaching) { 17106 detach(div); 17107 } 17108 } 17109 }; 17110 } 17111 17112 // (32:2) {#if error} 17113 function create_if_block$z(ctx) { 17114 let errormessage; 17115 let current; 17116 17117 errormessage = new ErrorMessage({ 17118 props: { 17119 error: /*error*/ ctx[3], 17120 isPaymentForm: /*isPaymentForm*/ ctx[5] 17121 } 17122 }); 17123 17124 return { 17125 c() { 17126 create_component(errormessage.$$.fragment); 17127 }, 17128 m(target, anchor) { 17129 mount_component(errormessage, target, anchor); 17130 current = true; 17131 }, 17132 p(ctx, dirty) { 17133 const errormessage_changes = {}; 17134 if (dirty & /*error*/ 8) errormessage_changes.error = /*error*/ ctx[3]; 17135 if (dirty & /*isPaymentForm*/ 32) errormessage_changes.isPaymentForm = /*isPaymentForm*/ ctx[5]; 17136 errormessage.$set(errormessage_changes); 17137 }, 17138 i(local) { 17139 if (current) return; 17140 transition_in(errormessage.$$.fragment, local); 17141 current = true; 17142 }, 17143 o(local) { 17144 transition_out(errormessage.$$.fragment, local); 17145 current = false; 17146 }, 17147 d(detaching) { 17148 destroy_component(errormessage, detaching); 17149 } 17150 }; 17151 } 17152 17153 function create_fragment$K(ctx) { 17154 let div; 17155 let current_block_type_index; 17156 let if_block0; 17157 let t; 17158 let current; 17159 const if_block_creators = [create_if_block_1$p, create_else_block$7]; 17160 const if_blocks = []; 17161 17162 function select_block_type(ctx, dirty) { 17163 if (/*showMessage*/ ctx[6] && !/*error*/ ctx[3]) return 0; 17164 return 1; 17165 } 17166 17167 current_block_type_index = select_block_type(ctx); 17168 if_block0 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 17169 let if_block1 = /*error*/ ctx[3] && create_if_block$z(ctx); 17170 17171 return { 17172 c() { 17173 div = element("div"); 17174 if_block0.c(); 17175 t = space(); 17176 if (if_block1) if_block1.c(); 17177 attr(div, "class", "zephr-form-flex-container zephr-form-reset-link-container svelte-49aomy"); 17178 toggle_class(div, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[5]); 17179 }, 17180 m(target, anchor) { 17181 insert(target, div, anchor); 17182 if_blocks[current_block_type_index].m(div, null); 17183 append(div, t); 17184 if (if_block1) if_block1.m(div, null); 17185 current = true; 17186 }, 17187 p(ctx, [dirty]) { 17188 let previous_block_index = current_block_type_index; 17189 current_block_type_index = select_block_type(ctx); 17190 17191 if (current_block_type_index === previous_block_index) { 17192 if_blocks[current_block_type_index].p(ctx, dirty); 17193 } else { 17194 group_outros(); 17195 17196 transition_out(if_blocks[previous_block_index], 1, 1, () => { 17197 if_blocks[previous_block_index] = null; 17198 }); 17199 17200 check_outros(); 17201 if_block0 = if_blocks[current_block_type_index]; 17202 17203 if (!if_block0) { 17204 if_block0 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 17205 if_block0.c(); 17206 } else { 17207 if_block0.p(ctx, dirty); 17208 } 17209 17210 transition_in(if_block0, 1); 17211 if_block0.m(div, t); 17212 } 17213 17214 if (/*error*/ ctx[3]) { 17215 if (if_block1) { 17216 if_block1.p(ctx, dirty); 17217
17218 if (dirty & /*error*/ 8) { 17219 transition_in(if_block1, 1); 17220 } 17221 } else { 17222 if_block1 = create_if_block$z(ctx); 17223 if_block1.c(); 17224 transition_in(if_block1, 1); 17225 if_block1.m(div, null); 17226 } 17227 } else if (if_block1) { 17228 group_outros(); 17229 17230 transition_out(if_block1, 1, 1, () => { 17231 if_block1 = null; 17232 }); 17233 17234 check_outros(); 17235 } 17236 17237 if (!current || dirty & /*isPaymentForm*/ 32) { 17238 toggle_class(div, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[5]); 17239 } 17240 }, 17241 i(local) { 17242 if (current) return; 17243 transition_in(if_block0); 17244 transition_in(if_block1); 17245 current = true; 17246 }, 17247 o(local) { 17248 transition_out(if_block0); 17249 transition_out(if_block1); 17250 current = false; 17251 }, 17252 d(detaching) { 17253 if (detaching) { 17254 detach(div); 17255 } 17256 17257 if_blocks[current_block_type_index].d(); 17258 if (if_block1) if_block1.d(); 17259 } 17260 }; 17261 } 17262 17263 function instance$J($$self, $$props, $$invalidate) { 17264 let { text } = $$props; 17265 let { message } = $$props; 17266 let { onClick } = $$props; 17267 let { error = null } = $$props; 17268 let { delayMs } = $$props; 17269 let { isPaymentForm = false } = $$props; 17270 let showMessage = false; 17271 17272 const linkClick_handler = () => { 17273 if (message) { 17274 $$invalidate(6, showMessage = true); 17275 setTimeout(() =>
17275 $$invalidate(6, showMessage = false), delayMs); 17276 } 17277 }; 17278 17279 $$self.$$set = $$props => { 17280 if ('text' in $$props) $$invalidate(0, text = $$props.text); 17281 if ('message' in $$props) $$invalidate(1, message = $$props.message); 17282 if ('onClick' in $$props) $$invalidate(2, onClick = $$props.onClick); 17283 if ('error' in $$props) $$invalidate(3, error = $$props.error); 17284 if ('delayMs' in $$props) $$invalidate(4, delayMs = $$props.delayMs); 17285 if ('isPaymentForm' in $$props) $$invalidate(5, isPaymentForm = $$props.isPaymentForm); 17286 }; 17287 17288 return [ 17289 text, 17290 message, 17291 onClick, 17292 error, 17293 delayMs, 17294 isPaymentForm, 17295 showMessage, 17296 linkClick_handler 17297 ]; 17298 } 17299 17300 class ResetPasswordLink extends SvelteComponent { 17301 constructor(options) { 17302 super(); 17303 17304 init(this, options, instance$J, create_fragment$K, safe_not_equal, { 17305 text: 0, 17306 message: 1, 17307 onClick: 2, 17308 error: 3, 17309 delayMs: 4, 17310 isPaymentForm: 5 17311 }); 17312 } 17313 } 17314 17315 const factory$i = { 17316 matches: (sectionElement) => sectionElement.type === elementTypes.RESET_PASSWORD_LINK, 17317 create: (form, formState, formActions, elementConfig) => ({ 17318 component: ResetPasswordLink, 17319 props: { 17320 text: elementConfig.text, 17321 message: elementConfig.message, 17322 delayMs: form.environment.reduceDelays ? 1 : 3000, 17323 isPaymentForm: form.formType === FormType.PAYMENT, 17324 onClick: async () => { 17325 logDataLayerEvent(form, 'zephr_form_button_press', { 17326 sectionId: formState.currentSection.type, 17327 buttonType: 'RESET_PASSWORD_LINK' 17328 }); 17329 await sendPasswordResetCode(form, formState, formActions); 17330 } 17331 } 17332 }) 17333 }; 17334 17335 /* src/components/elements/resendLoginLink/ResendLoginLink.svelte generated by Svelte v4.2.12 */ 17336 17337 function create_else_block$6(ctx) { 17338 let link; 17339 let current; 17340 17341 link = new Link({ 17342 props: { 17343 text: /*text*/ ctx[0], 17344 onClick: /*onClick*/ ctx[2] 17345 } 17346 }); 17347 17348 link.$on("linkClick", /*linkClick_handler*/ ctx[7]); 17349 17350 return { 17351 c() { 17352 create_component(link.$$.fragment); 17353 }, 17354 m(target, anchor) { 17355 mount_component(link, target, anchor); 17356 current = true; 17357 }, 17358 p(ctx, dirty) { 17359 const link_changes = {}; 17360 if (dirty & /*text*/ 1) link_changes.text = /*text*/ ctx[0]; 17361 if (dirty & /*onClick*/ 4) link_changes.onClick = /*onClick*/ ctx[2]; 17362 link.$set(link_changes); 17363 }, 17364 i(local) { 17365 if (current) return; 17366 transition_in(link.$$.fragment, local); 17367 current = true; 17368 }, 17369 o(local) { 17370 transition_out(link.$$.fragment, local); 17371 current = false; 17372 }, 17373 d(detaching) { 17374 destroy_component(link, detaching); 17375 } 17376 }; 17377 } 17378 17379 // (16:2) {#if showMessage && !error} 17380 function create_if_block_1$o(ctx) { 17381 let div; 17382 let t; 17383 17384 return { 17385 c() { 17386 div = element("div"); 17387 t = text(/*message*/ ctx[1]); 17388 attr(div, "class", "zephr-form-link-message svelte-49aomy"); 17389 }, 17390 m(target, anchor) { 17391 insert(target, div, anchor); 17392 append(div, t); 17393 }, 17394 p(ctx, dirty) { 17395 if (dirty & /*message*/ 2) set_data(t, /*message*/ ctx[1]); 17396 }, 17397 i: noop, 17398 o: noop, 17399 d(detaching) { 17400 if (detaching) { 17401 detach(div); 17402 } 17403 } 17404 }; 17405 } 17406 17407 // (32:2) {#if error} 17408 function create_if_block$y(ctx) { 17409 let errormessage; 17410 let current; 17411 17412 errormessage = new ErrorMessage({ 17413 props: { 17414 error: /*error*/ ctx[3], 17415 isPaymentForm: /*isPaymentForm*/ ctx[5] 17416 } 17417 }); 17418 17419 return { 17420 c() { 17421 create_component(errormessage.$$.fragment); 17422 }, 17423 m(target, anchor) { 17424 mount_component(errormessage, target, anchor); 17425 current = true; 17426 }, 17427 p(ctx, dirty) { 17428 const errormessage_changes = {}; 17429 if (dirty & /*error*/ 8) errormessage_changes.error = /*error*/ ctx[3]; 17430 if (dirty & /*isPaymentForm*/ 32) errormessage_changes.isPaymentForm = /*isPaymentForm*/ ctx[5]; 17431 errormessage.$set(errormessage_changes); 17432 }, 17433 i(local) { 17434 if (current) return; 17435 transition_in(errormessage.$$.fragment, local); 17436 current = true; 17437 }, 17438 o(local) { 17439 transition_out(errormessage.$$.fragment, local); 17440 current = false;
17441 }, 17442 d(detaching) { 17443 destroy_component(errormessage, detaching); 17444 } 17445 }; 17446 } 17447 17448 function create_fragment$J(ctx) { 17449 let div; 17450 let current_block_type_index; 17451 let if_block0; 17452 let t; 17453 let current; 17454 const if_block_creators = [create_if_block_1$o, create_else_block$6]; 17455 const if_blocks = []; 17456 17457 function select_block_type(ctx, dirty) { 17458 if (/*showMessage*/ ctx[6] && !/*error*/ ctx[3]) return 0; 17459 return 1; 17460 } 17461 17462 current_block_type_index = select_block_type(ctx); 17463 if_block0 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 17464 let if_block1 = /*error*/ ctx[3] && create_if_block$y(ctx); 17465 17466 return { 17467 c() { 17468 div = element("div"); 17469 if_block0.c(); 17470 t = space(); 17471 if (if_block1) if_block1.c(); 17472 attr(div, "class", "zephr-form-flex-container zephr-form-reset-link-container svelte-49aomy"); 17473 toggle_class(div, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[5]); 17474 }, 17475 m(target, anchor) { 17476 insert(target, div, anchor); 17477 if_blocks[current_block_type_index].m(div, null); 17478 append(div, t); 17479 if (if_block1) if_block1.m(div, null); 17480 current = true; 17481 }, 17482 p(ctx, [dirty]) { 17483 let previous_block_index = current_block_type_index; 17484 current_block_type_index = select_block_type(ctx); 17485 17486 if (current_block_type_index === previous_block_index) { 17487 if_blocks[current_block_type_index].p(ctx, dirty); 17488 } else { 17489 group_outros(); 17490 17491 transition_out(if_blocks[previous_block_index], 1, 1, () => { 17492 if_blocks[previous_block_index] = null; 17493 }); 17494 17495 check_outros(); 17496 if_block0 = if_blocks[current_block_type_index]; 17497 17498 if (!if_block0) { 17499 if_block0 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 17500 if_block0.c(); 17501 } else { 17502 if_block0.p(ctx, dirty); 17503 } 17504 17505 transition_in(if_block0, 1); 17506 if_block0.m(div, t); 17507 } 17508 17509 if (/*error*/ ctx[3]) { 17510 if (if_block1) { 17511 if_block1.p(ctx, dirty); 17512 17513 if (dirty & /*error*/ 8) { 17514 transition_in(if_block1, 1); 17515 } 17516 } else { 17517 if_block1 = create_if_block$y(ctx); 17518 if_block1.c(); 17519 transition_in(if_block1, 1); 17520 if_block1.m(div, null); 17521 } 17522 } else if (if_block1) { 17523 group_outros(); 17524 17525 transition_out(if_block1, 1, 1, () => { 17526 if_block1 = null; 17527 }); 17528 17529 check_outros(); 17530 } 17531 17532 if (!current || dirty & /*isPaymentForm*/ 32) { 17533 toggle_class(div, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[5]); 17534 } 17535 }, 17536 i(local) { 17537 if (current) return; 17538 transition_in(if_block0); 17539 transition_in(if_block1); 17540 current = true; 17541 }, 17542 o(local) { 17543 transition_out(if_block0); 17544 transition_out(if_block1); 17545 current = false; 17546 }, 17547 d(detaching) { 17548 if (detaching) { 17549 detach(div); 17550 } 17551 17552 if_blocks[current_block_type_index].d(); 17553 if (if_block1) if_block1.d(); 17554 } 17555 }; 17556 } 17557 17558 function instance$I($$self, $$props, $$invalidate) { 17559 let { text } = $$props; 17560 let { message } = $$props; 17561 let { onClick } = $$props; 17562 let { error = null } = $$props; 17563 let { delayMs } = $$props; 17564 let { isPaymentForm = false } = $$props; 17565 let showMessage = false; 17566 17567 const linkClick_handler = () => { 17568 if (message) { 17569 $$invalidate(6, showMessage = true); 17570 setTimeout(() =>
17570 $$invalidate(6, showMessage = false), delayMs); 17571 } 17572 }; 17573 17574 $$self.$$set = $$props => { 17575 if ('text' in $$props) $$invalidate(0, text = $$props.text); 17576 if ('message' in $$props) $$invalidate(1, message = $$props.message); 17577 if ('onClick' in $$props) $$invalidate(2, onClick = $$props.onClick); 17578 if ('error' in $$props) $$invalidate(3, error = $$props.error); 17579 if ('delayMs' in $$props) $$invalidate(4, delayMs = $$props.delayMs); 17580 if ('isPaymentForm' in $$props) $$invalidate(5, isPaymentForm = $$props.isPaymentForm); 17581 }; 17582 17583 return [ 17584 text, 17585 message, 17586 onClick, 17587 error, 17588 delayMs, 17589 isPaymentForm, 17590 showMessage, 17591 linkClick_handler 17592 ]; 17593 } 17594 17595 class ResendLoginLink extends SvelteComponent { 17596 constructor(options) { 17597 super(); 17598 17599 init(this, options, instance$I, create_fragment$J, safe_not_equal, { 17600 text: 0, 17601 message: 1, 17602 onClick: 2, 17603 error: 3, 17604 delayMs: 4, 17605 isPaymentForm: 5 17606 }); 17607 } 17608 } 17609 17610 const factory$h = { 17611 matches: (sectionElement) => sectionElement.type === elementTypes.RESEND_LOGIN_LINK, 17612 create: (form, formState, formActions, elementConfig) => ({ 17613 component: ResendLoginLink, 17614 props: { 17615 text: elementConfig.text, 17616 message: elementConfig.message, 17617 delayMs: form.environment.reduceDelays ? 1 : 3000, 17618 isPaymentForm: form.formType === FormType.PAYMENT, 17619 onClick: async () => { 17620 logDataLayerEvent(form, 'zephr_form_button_press', { 17621 sectionId: formState.currentSection.type, 17622 buttonType: 'RESEND_LOGIN_LINK' 17623 }); 17624 await sendLink(form, 'login', formState.emailAddress, formActions); 17625 } 17626 } 17627 }) 17628 }; 17629 17630 const oauthProviderWindowFeatures = "menubar=no,location=yes,resizable=no,scrollbars=no,status=no,width=500,height=600"; 17631 const useOAuthProvider = (provider, form, formActions) => { 17632 formActions.updateFormState({ 17633 socialSigninError: undefined 17634 }); 17635 window.open(`${form.environment.apiUrlBase ?? ""}/blaize/oauth/${provider}`, provider + " sign-in", oauthProviderWindowFeatures); 17636 const listener = messageAction(form, formActions); 17637 window.zephrOAuthListener = listener; 17638 window.addEventListener("message", listener); 17639 }; 17640 const messageAction = (form, formActions) => (message) => { 17641 if (!message?.data?.fromZephr) { 17642 return; 17643 } 17644 window.removeEventListener("message", window.zephrOAuthListener); 17645 form.environment.debugLogging && console.log("Social signin message:", message); 17646 if (message.data.action === "register") { 17647 // This is a fresh user who is registering, they may need to add some required attributes first. 17648 // If not, register immediately. 17649 const newFormState = formActions.updateFormState({ 17650 emailAddress: message.data.identifier, 17651 socialSigninToken: message.data.stateKey, 17652 userAttributes: message.data.userAttributes ?? {}, 17653 socialSignin: true, 17654 userExists: false, 17655 emailIsContact: undefined 17656 }); 17657 if (formConfigAs(form).useVerificationCodes) { 17658 void send2FaCode(form, newFormState, formActions); 17659 } 17660 void moveToNextSection(form, newFormState, formActions); 17661 } 17662 else if (message.data.action == "otp") { 17663 // Already registered user and verification via OTP is needed 17664 formActions.updateFormState({ 17665 emailAddress: message.data.identifier, 17666 socialSigninToken: message.data.stateKey, 17667 userAttributes: message.data.userAttributes ?? {}, 17668 socialSignin: true, 17669 userExists: true, 17670 emailIsContact: false 17671 }); 17672 formActions.jumpToSection(sectionTypes.VERIFICATION_CODE_LOGIN.type); 17673 } 17674 else if (message.data.action === "login") { 17675 // Already registered user who is now logged in. 17676 document.cookie = message.data.cookie; 17677 formActions.updateFormState({ 17678 socialSignin: true, 17679 userExists: true, 17680 loginRegistrationComplete: true, 17681 emailIsContact: false 17682 }); 17683 void formActions.onEvent(FormEvent.LOGIN_REGISTRATION_COMPLETE); 17684 } 17685 else { 17686 // Failure 17687 formActions.updateFormState({ 17688 socialSigninError: message.data.message ?? "Something went wrong. Please try again later!" 17689 }); 17690 } 17691 }; 17692 17693 var faMicrosoft = { 17694 prefix: 'fab', 17695 iconName: 'microsoft', 17696 icon: [448, 512, [], "f3ca", "M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z"] 17697 }; 17698 var faApple = { 17699 prefix: 'fab', 17700 iconName: 'apple', 17701 icon: [384, 512, [], "f179", "M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"] 17702 }; 17703 var faLinkedin = { 17704 prefix: 'fab', 17705 iconName: 'linkedin', 17706 icon: [448, 512, [], "f08c", "M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"] 17707 }; 17708 var faFacebook = { 17709 prefix: 'fab', 17710 iconName: 'facebook', 17711 icon: [512, 512, [62000], "f09a", "M512 256C512 114.6 397.4 0 256 0S0 114.6 0 256C0 376 82.7 476.8 194.2 504.5V334.2H141.4V256h52.8V222.3c0-87.1 39.4-127.5 125-127.5c16.2 0 44.2 3.2 55.7 6.4V172c-6-.6-16.5-1-29.6-1c-42 0-58.2 15.9-58.2 57.2V256h83.6l-14.4 78.2H287V510.1C413.8 494.8 512 386.9 512 256h0z"] 17712 }; 17713 var faTwitter = { 17714 prefix: 'fab', 17715 iconName: 'twitter', 17716 icon: [512, 512, [], "f099", "M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"] 17717 }; 17718 17719 /* src/components/elements/socialSignIn/GoogleLogo.svelte generated by Svelte v4.2.12 */ 17720 17721 function create_fragment$I(ctx) { 17722 let svg; 17723 let path0; 17724 let path1; 17725 let path2; 17726 let path3; 17727 17728 return { 17729 c() {
17730 svg = svg_element("svg"); 17731 path0 = svg_element("path"); 17732 path1 = svg_element("path"); 17733 path2 = svg_element("path"); 17734 path3 = svg_element("path"); 17735 attr(path0, "d", "M533.5 278.4c0-18.5-1.5-37.1-4.7-55.3H272.1v104.8h147c-6.1 33.8-25.7 63.7-54.4 82.7v68h87.7c51.5-47.4 81.1-117.4 81.1-200.2z"); 17736 attr(path0, "fill", "#4285f4"); 17737 attr(path1, "d", "M272.1 544.3c73.4 0 135.3-24.1 180.4-65.7l-87.7-68c-24.4 16.6-55.9 26-92.6 26-71 0-131.2-47.9-152.8-112.3H28.9v70.1c46.2 91.9 140.3 149.9 243.2 149.9z"); 17738 attr(path1, "fill", "#34a853"); 17739 attr(path2, "d", "M119.3 324.3c-11.4-33.8-11.4-70.4 0-104.2V150H28.9c-38.6 76.9-38.6 167.5 0 244.4l90.4-70.1z"); 17740 attr(path2, "fill", "#fbbc04"); 17741 attr(path3, "d", "M272.1 107.7c38.8-.6 76.3 14 104.4 40.8l77.7-77.7C405 24.6 339.7-.8 272.1 0 169.2 0 75.1 58 28.9 150l90.4 70.1c21.5-64.5 81.8-112.4 152.8-112.4z"); 17742 attr(path3, "fill", "#ea4335"); 17743 attr(svg, "class", "zephr-form-social-sign-in-icon zephr-form-google-icon svelte-aktnoc"); 17744 attr(svg, "viewBox", "0 0 533.5 544.3"); 17745 attr(svg, "xmlns", "http://www.w3.org/2000/svg"); 17746 }, 17747 m(target, anchor) { 17748 insert(target, svg, anchor); 17749 append(svg, path0); 17750 append(svg, path1); 17751 append(svg, path2); 17752 append(svg, path3); 17753 }, 17754 p: noop, 17755 i: noop, 17756 o: noop, 17757 d(detaching) { 17758 if (detaching) { 17759 detach(svg); 17760 } 17761 } 17762 }; 17763 } 17764 17765 class GoogleLogo extends SvelteComponent { 17766 constructor(options) { 17767 super(); 17768 init(this, options, null, create_fragment$I, safe_not_equal, {}); 17769 } 17770 } 17771 17772 /* src/components/elements/socialSignIn/SocialSignIn.svelte generated by Svelte v4.2.12 */ 17773 17774 function get_each_context$d(ctx, list, i) { 17775 const child_ctx = ctx.slice(); 17776 child_ctx[8] = list[i]; 17777 return child_ctx; 17778 } 17779 17780 // (30:2) {#if config[option] === true && option !== 'labelText' && option !== 'allowEmptyLabel'} 17781 function create_if_block_1$n(ctx) { 17782 let button; 17783 let span1; 17784 let span0; 17785 let current_block_type_index; 17786 let if_block; 17787 let t0; 17788 let t1; 17789 let t2; 17790 let t3_value = /*option*/ ctx[8] + ""; 17791 let t3; 17792 let current; 17793 let mounted; 17794 let dispose; 17795 const if_block_creators = [create_if_block_2$f, create_else_block$5]; 17796 const if_blocks = []; 17797 17798 function select_block_type(ctx, dirty) { 17799 if (/*option*/ ctx[8] === "Google") return 0; 17800 return 1; 17801 } 17802 17803 current_block_type_index = select_block_type(ctx); 17804 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 17805 17806 function click_handler() { 17807 return /*click_handler*/ ctx[6](/*option*/ ctx[8]); 17808 } 17809 17810 return { 17811 c() { 17812 button = element("button"); 17813 span1 = element("span"); 17814 span0 = element("span"); 17815 if_block.c(); 17816 t0 = space(); 17817 t1 = text(/*labelText*/ ctx[4]); 17818 t2 = space(); 17819 t3 = text(t3_value); 17820 attr(span0, "class", "zephr-form-social-sign-in-icon svelte-1e2xtn4"); 17821 toggle_class(span0, "zephr-payment-form-social-sign-in-icon", /*isPaymentForm*/ ctx[3]); 17822 attr(span1, "class", "zephr-form-flex-container zephr-form-social-sign-in svelte-1e2xtn4"); 17823 toggle_class(span1, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[3]); 17824 toggle_class(span1, "zephr-payment-form-social-sign-in", /*isPaymentForm*/ ctx[3]); 17825 attr(button, "type", "button"); 17826 attr(button, "class", "zephr-form-button zephr-form-social-sign-in-button svelte-1e2xtn4"); 17827 toggle_class(button, "zephr-payment-form-button", /*isPaymentForm*/ ctx[3]); 17828 toggle_class(button, "zephr-payment-form-social-sign-in-button", /*isPaymentForm*/ ctx[3]); 17829 }, 17830 m(target, anchor) { 17831 insert(target, button, anchor); 17832 append(button, span1); 17833 append(span1, span0); 17834 if_blocks[current_block_type_index].m(span0, null); 17835 append(span1, t0); 17836 append(span1, t1); 17837 append(span1, t2); 17838 append(span1, t3); 17839 current = true; 17840 17841 if (!mounted) { 17842 dispose = listen(button, "click", prevent_default(click_handler)); 17843 mounted = true; 17844 } 17845 }, 17846 p(new_ctx, dirty) { 17847 ctx = new_ctx; 17848 let previous_block_index = current_block_type_index; 17849 current_block_type_index = select_block_type(ctx); 17850 17851 if (current_block_type_index === previous_block_index) { 17852 if_blocks[current_block_type_index].p(ctx, dirty); 17853 } else { 17854 group_outros(); 17855 17856 transition_out(if_blocks[previous_block_index], 1, 1, () => { 17857 if_blocks[previous_block_index] = null; 17858 }); 17859 17860 check_outros(); 17861 if_block = if_blocks[current_block_type_index]; 17862 17863 if (!if_block) { 17864 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 17865 if_block.c(); 17866 } else { 17867 if_block.p(ctx, dirty); 17868 } 17869 17870 transition_in(if_block, 1); 17871 if_block.m(span0, null); 17872 } 17873 17874 if (!current || dirty & /*isPaymentForm*/ 8) { 17875 toggle_class(span0, "zephr-payment-form-social-sign-in-icon", /*isPaymentForm*/ ctx[3]); 17876 } 17877 17878 if ((!current || dirty & /*config*/ 1) && t3_value !== (t3_value = /*option*/ ctx[8] + "")) set_data(t3, t3_value); 17879 17880 if (!current || dirty & /*isPaymentForm*/ 8) { 17881 toggle_class(span1, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[3]); 17882 } 17883 17884 if (!current || dirty & /*isPaymentForm*/ 8) { 17885 toggle_class(span1, "zephr-payment-form-social-sign-in", /*isPaymentForm*/ ctx[3]); 17886 } 17887 17888 if (!current || dirty & /*isPaymentForm*/ 8) { 17889 toggle_class(button, "zephr-payment-form-button", /*isPaymentForm*/ ctx[3]); 17890 } 17891 17892 if (!current || dirty & /*isPaymentForm*/ 8) { 17893 toggle_class(button, "zephr-payment-form-social-sign-in-button", /*isPaymentForm*/ ctx[3]); 17894 } 17895 }, 17896 i(local) { 17897 if (current) return; 17898 transition_in(if_block); 17899 current = true; 17900 }, 17901 o(local) { 17902 transition_out(if_block); 17903 current = false;
17904 }, 17905 d(detaching) { 17906 if (detaching) { 17907 detach(button); 17908 } 17909 17910 if_blocks[current_block_type_index].d(); 17911 mounted = false; 17912 dispose(); 17913 } 17914 }; 17915 } 17916 17917 // (49:10) {:else} 17918 function create_else_block$5(ctx) { 17919 let fa; 17920 let current; 17921 const fa_spread_levels = [/*getProviderIcon*/ ctx[5](/*option*/ ctx[8])]; 17922 let fa_props = {}; 17923 17924 for (let i = 0; i < fa_spread_levels.length; i += 1) { 17925 fa_props = assign(fa_props, fa_spread_levels[i]); 17926 } 17927 17928 fa = new Fa({ props: fa_props }); 17929 17930 return { 17931 c() { 17932 create_component(fa.$$.fragment); 17933 }, 17934 m(target, anchor) { 17935 mount_component(fa, target, anchor); 17936 current = true; 17937 }, 17938 p(ctx, dirty) { 17939 const fa_changes = (dirty & /*getProviderIcon, Object, config*/ 33) 17940 ? get_spread_update(fa_spread_levels, [get_spread_object(/*getProviderIcon*/ ctx[5](/*option*/ ctx[8]))]) 17941 : {}; 17942 17943 fa.$set(fa_changes); 17944 }, 17945 i(local) { 17946 if (current) return; 17947 transition_in(fa.$$.fragment, local); 17948 current = true; 17949 }, 17950 o(local) { 17951 transition_out(fa.$$.fragment, local); 17952 current = false; 17953 }, 17954 d(detaching) { 17955 destroy_component(fa, detaching); 17956 } 17957 }; 17958 } 17959 17960 // (47:10) {#if option === "Google"} 17961 function create_if_block_2$f(ctx) { 17962 let googlelogo; 17963 let current; 17964 googlelogo = new GoogleLogo({}); 17965 17966 return { 17967 c() { 17968 create_component(googlelogo.$$.fragment); 17969 }, 17970 m(target, anchor) { 17971 mount_component(googlelogo, target, anchor); 17972 current = true; 17973 }, 17974 p: noop, 17975 i(local) { 17976 if (current) return; 17977 transition_in(googlelogo.$$.fragment, local); 17978 current = true; 17979 }, 17980 o(local) { 17981 transition_out(googlelogo.$$.fragment, local); 17982 current = false; 17983 }, 17984 d(detaching) { 17985 destroy_component(googlelogo, detaching); 17986 } 17987 }; 17988 } 17989 17990 // (29:0) {#each Object.keys(config) as option} 17991 function create_each_block$d(ctx) { 17992 let if_block_anchor; 17993 let current; 17994 let if_block = /*config*/ ctx[0][/*option*/ ctx[8]] === true && /*option*/ ctx[8] !== 'labelText' && /*option*/ ctx[8] !== 'allowEmptyLabel' && create_if_block_1$n(ctx); 17995 17996 return { 17997 c() { 17998 if (if_block) if_block.c(); 17999 if_block_anchor = empty(); 18000 }, 18001 m(target, anchor) { 18002 if (if_block) if_block.m(target, anchor); 18003 insert(target, if_block_anchor, anchor); 18004 current = true; 18005 }, 18006 p(ctx, dirty) { 18007 if (/*config*/ ctx[0][/*option*/ ctx[8]] === true && /*option*/ ctx[8] !== 'labelText' && /*option*/ ctx[8] !== 'allowEmptyLabel') { 18008 if (if_block) { 18009 if_block.p(ctx, dirty); 18010 18011 if (dirty & /*config*/ 1) { 18012 transition_in(if_block, 1); 18013 } 18014 } else { 18015 if_block = create_if_block_1$n(ctx); 18016 if_block.c(); 18017 transition_in(if_block, 1); 18018 if_block.m(if_block_anchor.parentNode, if_block_anchor); 18019 } 18020 } else if (if_block) { 18021 group_outros(); 18022 18023 transition_out(if_block, 1, 1, () => { 18024 if_block = null; 18025 }); 18026 18027 check_outros(); 18028 } 18029 }, 18030 i(local) { 18031 if (current) return; 18032 transition_in(if_block); 18033 current = true; 18034 }, 18035 o(local) { 18036 transition_out(if_block); 18037 current = false; 18038 }, 18039 d(detaching) { 18040 if (detaching) { 18041 detach(if_block_anchor); 18042 } 18043 18044 if (if_block) if_block.d(detaching); 18045 } 18046 }; 18047 } 18048 18049 // (58:0) {#if error} 18050 function create_if_block$x(ctx) { 18051 let errormessage; 18052 let current; 18053 18054 errormessage = new ErrorMessage({ 18055 props: { 18056 error: /*error*/ ctx[2], 18057 isPaymentForm: /*isPaymentForm*/ ctx[3] 18058 } 18059 }); 18060 18061 return { 18062 c() { 18063 create_component(errormessage.$$.fragment); 18064 }, 18065 m(target, anchor) { 18066 mount_component(errormessage, target, anchor); 18067 current = true; 18068 }, 18069 p(ctx, dirty) { 18070 const errormessage_changes = {}; 18071 if (dirty & /*error*/ 4) errormessage_changes.error = /*error*/ ctx[2]; 18072 if (dirty & /*isPaymentForm*/ 8) errormessage_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 18073 errormessage.$set(errormessage_changes); 18074 }, 18075 i(local) { 18076 if (current) return; 18077 transition_in(errormessage.$$.fragment, local); 18078 current = true; 18079 }, 18080 o(local) { 18081 transition_out(errormessage.$$.fragment, local); 18082 current = false;
18083 }, 18084 d(detaching) { 18085 destroy_component(errormessage, detaching); 18086 } 18087 }; 18088 } 18089 18090 function create_fragment$H(ctx) { 18091 let t; 18092 let if_block_anchor; 18093 let current; 18094 let each_value = ensure_array_like(Object.keys(/*config*/ ctx[0])); 18095 let each_blocks = []; 18096 18097 for (let i = 0; i < each_value.length; i += 1) { 18098 each_blocks[i] = create_each_block$d(get_each_context$d(ctx, each_value, i)); 18099 } 18100 18101 const out = i => transition_out(each_blocks[i], 1, 1, () => { 18102 each_blocks[i] = null; 18103 }); 18104 18105 let if_block = /*error*/ ctx[2] && create_if_block$x(ctx); 18106 18107 return { 18108 c() { 18109 for (let i = 0; i < each_blocks.length; i += 1) { 18110 each_blocks[i].c(); 18111 } 18112 18113 t = space(); 18114 if (if_block) if_block.c(); 18115 if_block_anchor = empty(); 18116 }, 18117 m(target, anchor) { 18118 for (let i = 0; i < each_blocks.length; i += 1) { 18119 if (each_blocks[i]) { 18120 each_blocks[i].m(target, anchor); 18121 } 18122 } 18123 18124 insert(target, t, anchor); 18125 if (if_block) if_block.m(target, anchor); 18126 insert(target, if_block_anchor, anchor); 18127 current = true; 18128 }, 18129 p(ctx, [dirty]) { 18130 if (dirty & /*isPaymentForm, onSelectProvider, Object, config, labelText, getProviderIcon*/ 59) { 18131 each_value = ensure_array_like(Object.keys(/*config*/ ctx[0])); 18132 let i; 18133 18134 for (i = 0; i < each_value.length; i += 1) { 18135 const child_ctx = get_each_context$d(ctx, each_value, i); 18136 18137 if (each_blocks[i]) { 18138 each_blocks[i].p(child_ctx, dirty); 18139 transition_in(each_blocks[i], 1); 18140 } else { 18141 each_blocks[i] = create_each_block$d(child_ctx); 18142 each_blocks[i].c(); 18143 transition_in(each_blocks[i], 1); 18144 each_blocks[i].m(t.parentNode, t); 18145 } 18146 } 18147 18148 group_outros(); 18149 18150 for (i = each_value.length; i < each_blocks.length; i += 1) { 18151 out(i); 18152 } 18153 18154 check_outros(); 18155 } 18156 18157 if (/*error*/ ctx[2]) { 18158 if (if_block) { 18159 if_block.p(ctx, dirty); 18160 18161 if (dirty & /*error*/ 4) { 18162 transition_in(if_block, 1); 18163 } 18164 } else { 18165 if_block = create_if_block$x(ctx); 18166 if_block.c(); 18167 transition_in(if_block, 1); 18168 if_block.m(if_block_anchor.parentNode, if_block_anchor); 18169 } 18170 } else if (if_block) { 18171 group_outros(); 18172 18173 transition_out(if_block, 1, 1, () => { 18174 if_block = null; 18175 }); 18176 18177 check_outros(); 18178 } 18179 }, 18180 i(local) { 18181 if (current) return; 18182 18183 for (let i = 0; i < each_value.length; i += 1) { 18184 transition_in(each_blocks[i]); 18185 } 18186 18187 transition_in(if_block); 18188 current = true; 18189 }, 18190 o(local) {
18191 each_blocks = each_blocks.filter(Boolean); 18192 18193 for (let i = 0; i < each_blocks.length; i += 1) { 18194 transition_out(each_blocks[i]); 18195 } 18196 18197 transition_out(if_block); 18198 current = false; 18199 }, 18200 d(detaching) { 18201 if (detaching) { 18202 detach(t); 18203 detach(if_block_anchor); 18204 } 18205 18206 destroy_each(each_blocks, detaching); 18207 if (if_block) if_block.d(detaching); 18208 } 18209 }; 18210 } 18211 18212 function instance$H($$self, $$props, $$invalidate) { 18213 let { config } = $$props; 18214 let { onSelectProvider } = $$props; 18215 let { error = null } = $$props; 18216 let { isPaymentForm = false } = $$props; 18217 const defaultLabelText = config.allowEmptyLabel ? "" : "Continue with"; 18218 const labelText = config.labelText ? config.labelText : defaultLabelText; 18219 18220 const getProviderIcon = provider => { 18221 switch (provider) { 18222 case "Facebook": 18223 return { 18224 icon: faFacebook, 18225 color: "#1877f2", 18226 size: "lg" 18227 }; 18228 case "LinkedIn": 18229 return { 18230 icon: faLinkedin, 18231 color: "#0a66c2", 18232 size: "lg" 18233 }; 18234 case "Apple": 18235 return { icon: faApple, color: "#000", size: "lg" }; 18236 case "Microsoft": 18237 return { 18238 icon: faMicrosoft, 18239 color: "#00a4ef", 18240 size: "lg" 18241 }; 18242 case "Twitter": 18243 return { 18244 icon: faTwitter, 18245 color: "#08a0e9", 18246 size: "lg" 18247 }; 18248 default: 18249 return { 18250 icon: faFacebook, 18251 color: "#1877f2", 18252 size: "lg" 18253 }; 18254 } 18255 }; 18256 18257 const click_handler = option => onSelectProvider(option.toLowerCase()); 18258 18259 $$self.$$set = $$props => {
18260 if ('config' in $$props) $$invalidate(0, config = $$props.config); 18261 if ('onSelectProvider' in $$props) $$invalidate(1, onSelectProvider = $$props.onSelectProvider); 18262 if ('error' in $$props) $$invalidate(2, error = $$props.error); 18263 if ('isPaymentForm' in $$props) $$invalidate(3, isPaymentForm = $$props.isPaymentForm); 18264 }; 18265 18266 return [ 18267 config, 18268 onSelectProvider, 18269 error, 18270 isPaymentForm, 18271 labelText, 18272 getProviderIcon, 18273 click_handler 18274 ]; 18275 } 18276 18277 class SocialSignIn extends SvelteComponent { 18278 constructor(options) { 18279 super(); 18280 18281 init(this, options, instance$H, create_fragment$H, safe_not_equal, { 18282 config: 0, 18283 onSelectProvider: 1, 18284 error: 2, 18285 isPaymentForm: 3 18286 }); 18287 } 18288 } 18289 18290 const factory$g = { 18291 matches: (sectionElement) => sectionElement.type === elementTypes.SOCIAL_SIGNIN, 18292 create: (form, _, formActions, elementConfig) => { 18293 const { enabled: __, hide: ___, show: ____, ...cleanedConfig } = elementConfig ?? {}; 18294 return ({ 18295 component: SocialSignIn, 18296 props: { 18297 config: cleanedConfig, 18298 isPaymentForm: form.formType === FormType.PAYMENT, 18299 onSelectProvider: (provider) => useOAuthProvider(provider, form, formActions) 18300 } 18301 }); 18302 } 18303 }; 18304 18305 const verifyingPromoCodeBusyKey = "promo-code"; 18306 const runPromoCodeValidation = async (form, formState, formActions) => { 18307 formActions.updateFormState({ 18308 promoCodeValid: undefined, 18309 serverErrors: [], 18310 discountedPlanPrices: [] 18311 }); 18312 const providerConfig = paymentProviderFor(form.organisationConfiguration.paymentProvider); 18313 const response = await request(providerConfig.promoCodeCheckPath, { 18314 method: 'POST', 18315 bodyObject: { 18316 promoCode: formState.promoCode, 18317 paymentOptions: formConfigAs(form).paymentOptions 18318 } 18319 }, formActions, verifyingPromoCodeBusyKey); 18320 if (!response.ok) { 18321 let serverError; 18322 if (response.status === 403) { 18323 const json = await response.json(); 18324 if (json?.code === 2 || json?.code === 3) { 18325 serverError = ServerError.PROMO_CODE_EXPIRED_ERROR; 18326 } 18327 else { 18328 serverError = ServerError.PROMO_CODE_INVALID_ERROR; 18329 } 18330 } 18331 else { 18332 serverError = ServerError.PROMO_CODE_INVALID_ERROR; 18333 console.error("Unknown error evaluating promo code", response); 18334 } 18335 logDataLayerEvent(form, 'zephr_form_error', { 18336 error: ServerError[serverError], 18337 }); 18338 return Promise.resolve(formActions.updateFormState({ 18339 promoCodeValid: false, 18340 serverErrors: [serverError], 18341 discountedPlanPrices: [] 18342 })); 18343 } 18344 const json = await response.json(); 18345 const discountedPlanPrices = json.paymentOptions.map(p => ({ 18346 planSlug: p.slug, 18347 productId: p.productId, 18348 discountPrice: p.discountPrice 18349 })); 18350 if (!discountedPlanPrices.find(discount => discount.planSlug === formState.paymentOption.slug && discount.productId === formState.paymentOption.productId)) { 18351 logDataLayerEvent(form, 'zephr_form_error', { 18352 error: ServerError[ServerError.PROMO_CODE_NOT_VALID_FOR_PLAN_ERROR], 18353 }); 18354 return Promise.resolve(formActions.updateFormState({ 18355 promoCodeValid: false, 18356 serverErrors: [ServerError.PROMO_CODE_NOT_VALID_FOR_PLAN_ERROR], 18357 discountedPlanPrices: discountedPlanPrices 18358 })); 18359 } 18360 return Promise.resolve(formActions.updateFormState({ 18361 promoCodeValid: true, 18362 serverErrors: [], 18363 discountedPlanPrices: discountedPlanPrices 18364 })); 18365 }; 18366 /* 18367 If we're using mobile payment and we're on the payment screen, 18368 we'll need to reload the mobile payment button so it has the discounted amount 18369 and make sure they can't press the button while the button is updating 18370 */ 18371 const afterPromoCodeChange = async (form, formState, formActions) => { 18372 const formStateWithAddons = await getProductAddons(form, formState, formActions, true); 18373 const formStateWithPrices = await calculatePrices(form, formStateWithAddons, formActions); 18374 if (formState.currentSection.elements.some(element => element.type === elementTypes.MOBILE_PAYMENT && element.config?.enabled !== false)) { 18375 formActions.incrementRequestCount(); 18376 try { 18377 // Only reload mobile payment service if the provider actually supports mobile payments
18378 if (supportsMobilePayments(form.organisationConfiguration.paymentProvider)) { 18379 await mobilePaymentServiceFor(form.organisationConfiguration.paymentProvider).loader(form, formStateWithPrices, formActions); 18380 } 18381 } 18382 finally { 18383 formActions.decrementRequestCount(); 18384 } 18385 } 18386 }; 18387 const validatePromoCode = async (form, formState, formActions) => { 18388 const providerConfig = paymentProviderFor(form.organisationConfiguration.paymentProvider); 18389 if (!providerConfig.hasPromoCodes(form)) { 18390 return formState; 18391 } 18392 if (providerConfig?.promoCodeServiceOverride) { 18393 return providerConfig.promoCodeServiceOverride(form, formState, formActions); 18394 } 18395 return runPromoCodeValidation(form, formState, formActions) 18396 .then((updatedFormState) => afterPromoCodeChange(form, updatedFormState, formActions)); 18397 }; 18398 18399 /* src/components/elements/paymentSummary/PaymentSummary.svelte generated by Svelte v4.2.12 */ 18400 18401 function get_each_context$c(ctx, list, i) { 18402 const child_ctx = ctx.slice(); 18403 child_ctx[36] = list[i]; 18404 return child_ctx; 18405 } 18406 18407 function get_each_context_1$3(ctx, list, i) { 18408 const child_ctx = ctx.slice(); 18409 child_ctx[39] = list[i]; 18410 return child_ctx; 18411 } 18412 18413 function get_each_context_2(ctx, list, i) { 18414 const child_ctx = ctx.slice(); 18415 child_ctx[42] = list[i]; 18416 return child_ctx; 18417 } 18418 18419 // (52:2) {#each chargeItems as chargeItem} 18420 function create_each_block_2(ctx) { 18421 let div1; 18422 let span0; 18423 let t0_value = /*chargeItem*/ ctx[42].label + ""; 18424 let t0; 18425 let t1; 18426 let div0; 18427 let span1; 18428 let t2_value = /*chargeItem*/ ctx[42].priceFormattedString + ""; 18429 let t2; 18430 18431 return { 18432 c() { 18433 div1 = element("div"); 18434 span0 = element("span"); 18435 t0 = text(t0_value); 18436 t1 = space(); 18437 div0 = element("div"); 18438 span1 = element("span"); 18439 t2 = text(t2_value); 18440 attr(span0, "class", "zephr-form-summary-charge-description zephr-payment-form-summary-charge-description svelte-xf8v79"); 18441 attr(div0, "class", "zephr-form-summary-line-right zephr-payment-form-summary-line-right svelte-xf8v79"); 18442 attr(div1, "class", "zephr-form-charge-line zephr-payment-form-charge-line svelte-xf8v79"); 18443 }, 18444 m(target, anchor) { 18445 insert(target, div1, anchor); 18446 append(div1, span0); 18447 append(span0, t0); 18448 append(div1, t1); 18449 append(div1, div0); 18450 append(div0, span1); 18451 append(span1, t2); 18452 }, 18453 p(ctx, dirty) { 18454 if (dirty[0] & /*chargeItems*/ 524288 && t0_value !== (t0_value = /*chargeItem*/ ctx[42].label + "")) set_data(t0, t0_value); 18455 if (dirty[0] & /*chargeItems*/ 524288 && t2_value !== (t2_value = /*chargeItem*/ ctx[42].priceFormattedString + "")) set_data(t2, t2_value); 18456 }, 18457 d(detaching) { 18458 if (detaching) { 18459 detach(div1); 18460 } 18461 } 18462 }; 18463 } 18464 18465 // (65:2) {#if paymentProvider === 'braintree' && discounts.length > 0} 18466 function create_if_block_14$2(ctx) { 18467 let each_1_anchor; 18468 let each_value_1 = ensure_array_like(/*discounts*/ ctx[23]); 18469 let each_blocks = []; 18470 18471 for (let i = 0; i < each_value_1.length; i += 1) { 18472 each_blocks[i] = create_each_block_1$3(get_each_context_1$3(ctx, each_value_1, i)); 18473 } 18474 18475 return { 18476 c() { 18477 for (let i = 0; i < each_blocks.length; i += 1) { 18478 each_blocks[i].c(); 18479 } 18480 18481 each_1_anchor = empty(); 18482 }, 18483 m(target, anchor) { 18484 for (let i = 0; i < each_blocks.length; i += 1) { 18485 if (each_blocks[i]) { 18486 each_blocks[i].m(target, anchor); 18487 } 18488 } 18489 18490 insert(target, each_1_anchor, anchor); 18491 }, 18492 p(ctx, dirty) { 18493 if (dirty[0] & /*discounts*/ 8388608) { 18494 each_value_1 = ensure_array_like(/*discounts*/ ctx[23]); 18495 let i; 18496 18497 for (i = 0; i < each_value_1.length; i += 1) { 18498 const child_ctx = get_each_context_1$3(ctx, each_value_1, i); 18499 18500 if (each_blocks[i]) { 18501 each_blocks[i].p(child_ctx, dirty); 18502 } else { 18503 each_blocks[i] = create_each_block_1$3(child_ctx); 18504 each_blocks[i].c(); 18505 each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); 18506 } 18507 } 18508 18509 for (; i < each_blocks.length; i += 1) { 18510 each_blocks[i].d(1); 18511 } 18512 18513 each_blocks.length = each_value_1.length; 18514 } 18515 }, 18516 d(detaching) { 18517 if (detaching) { 18518 detach(each_1_anchor); 18519 } 18520 18521 destroy_each(each_blocks, detaching); 18522 } 18523 }; 18524 } 18525 18526 // (66:4) {#each discounts as discount} 18527 function create_each_block_1$3(ctx) { 18528 let div2; 18529 let div0; 18530 let t0_value = /*discount*/ ctx[39].description + ""; 18531 let t0; 18532 let t1; 18533 let div1; 18534 let t2_value = /*discount*/ ctx[39].formattedAmount + ""; 18535 let t2; 18536 let t3; 18537 18538 return { 18539 c() { 18540 div2 = element("div"); 18541 div0 = element("div"); 18542 t0 = text(t0_value); 18543 t1 = space(); 18544 div1 = element("div"); 18545 t2 = text(t2_value); 18546 t3 = space(); 18547 attr(div0, "class", "zephr-payment-form-summary-discount-description"); 18548 attr(div1, "class", "zephr-form-summary-line-right zephr-payment-form-summary-line-right discount-value svelte-xf8v79"); 18549 attr(div2, "class", "zephr-form-discount-line zephr-payment-form-discount-line svelte-xf8v79"); 18550 }, 18551 m(target, anchor) { 18552 insert(target, div2, anchor); 18553 append(div2, div0); 18554 append(div0, t0); 18555 append(div2, t1); 18556 append(div2, div1); 18557 append(div1, t2); 18558 append(div2, t3); 18559 }, 18560 p(ctx, dirty) {
18561 if (dirty[0] & /*discounts*/ 8388608 && t0_value !== (t0_value = /*discount*/ ctx[39].description + "")) set_data(t0, t0_value); 18562 if (dirty[0] & /*discounts*/ 8388608 && t2_value !== (t2_value = /*discount*/ ctx[39].formattedAmount + "")) set_data(t2, t2_value); 18563 }, 18564 d(detaching) { 18565 if (detaching) { 18566 detach(div2); 18567 } 18568 } 18569 }; 18570 } 18571 18572 // (78:2) {#if tax} 18573 function create_if_block_13$2(ctx) { 18574 let div2; 18575 let div0; 18576 let t0; 18577 let t1; 18578 let div1; 18579 let t2; 18580 18581 return { 18582 c() { 18583 div2 = element("div"); 18584 div0 = element("div"); 18585 t0 = text(/*taxLabel*/ ctx[22]); 18586 t1 = space(); 18587 div1 = element("div"); 18588 t2 = text(/*tax*/ ctx[21]); 18589 attr(div0, "class", "zephr-form-summary-charge-description zephr-payment-form-summary-charge-description svelte-xf8v79"); 18590 attr(div1, "class", "zephr-form-summary-line-right zephr-payment-form-summary-line-right svelte-xf8v79"); 18591 attr(div2, "class", "zephr-form-charge-line zephr-payment-form-charge-line svelte-xf8v79"); 18592 }, 18593 m(target, anchor) { 18594 insert(target, div2, anchor); 18595 append(div2, div0); 18596 append(div0, t0); 18597 append(div2, t1); 18598 append(div2, div1); 18599 append(div1, t2); 18600 }, 18601 p(ctx, dirty) { 18602 if (dirty[0] & /*taxLabel*/ 4194304) set_data(t0, /*taxLabel*/ ctx[22]); 18603 if (dirty[0] & /*tax*/ 2097152) set_data(t2, /*tax*/ ctx[21]); 18604 }, 18605 d(detaching) { 18606 if (detaching) { 18607 detach(div2); 18608 } 18609 } 18610 }; 18611 } 18612 18613 // (88:2) {#each addons as addon} 18614 function create_each_block$c(ctx) { 18615 let div1; 18616 let span0; 18617 let t0_value = /*addon*/ ctx[36].label + ""; 18618 let t0; 18619 let t1; 18620 let div0; 18621 let span1; 18622 let t2_value = /*addon*/ ctx[36].addonPrice + ""; 18623 let t2; 18624 18625 return { 18626 c() { 18627 div1 = element("div"); 18628 span0 = element("span"); 18629 t0 = text(t0_value); 18630 t1 = space(); 18631 div0 = element("div"); 18632 span1 = element("span"); 18633 t2 = text(t2_value); 18634 attr(div0, "class", "zephr-form-summary-line-right zephr-payment-form-summary-line-right svelte-xf8v79"); 18635 attr(div1, "class", "zephr-form-addon-line zephr-payment-form-addon-line svelte-xf8v79"); 18636 }, 18637 m(target, anchor) { 18638 insert(target, div1, anchor); 18639 append(div1, span0); 18640 append(span0, t0); 18641 append(div1, t1); 18642 append(div1, div0); 18643 append(div0, span1); 18644 append(span1, t2); 18645 }, 18646 p(ctx, dirty) { 18647 if (dirty[0] & /*addons*/ 262144 && t0_value !== (t0_value = /*addon*/ ctx[36].label + "")) set_data(t0, t0_value); 18648 if (dirty[0] & /*addons*/ 262144 && t2_value !== (t2_value = /*addon*/ ctx[36].addonPrice + "")) set_data(t2, t2_value); 18649 }, 18650 d(detaching) { 18651 if (detaching) { 18652 detach(div1); 18653 } 18654 } 18655 }; 18656 } 18657 18658 // (100:2) {#if allowPromoCodes} 18659 function create_if_block_2$e(ctx) { 18660 let t; 18661 let if_block1_anchor; 18662 let current; 18663 let if_block0 = !/*paymentProcessed*/ ctx[17] && !(/*showPromoCode*/ ctx[29] || /*promoCode*/ ctx[11]) && create_if_block_12$2(ctx); 18664 let if_block1 = (/*showPromoCode*/ ctx[29] || /*promoCode*/ ctx[11]) && create_if_block_3$a(ctx); 18665 18666 return { 18667 c() { 18668 if (if_block0) if_block0.c(); 18669 t = space(); 18670 if (if_block1) if_block1.c(); 18671 if_block1_anchor = empty(); 18672 }, 18673 m(target, anchor) { 18674 if (if_block0) if_block0.m(target, anchor); 18675 insert(target, t, anchor); 18676 if (if_block1) if_block1.m(target, anchor); 18677 insert(target, if_block1_anchor, anchor); 18678 current = true; 18679 }, 18680 p(ctx, dirty) { 18681 if (!/*paymentProcessed*/ ctx[17] && !(/*showPromoCode*/ ctx[29] || /*promoCode*/ ctx[11])) { 18682 if (if_block0) { 18683 if_block0.p(ctx, dirty); 18684 } else { 18685 if_block0 = create_if_block_12$2(ctx); 18686 if_block0.c(); 18687 if_block0.m(t.parentNode, t); 18688 } 18689 } else if (if_block0) { 18690 if_block0.d(1); 18691 if_block0 = null; 18692 } 18693 18694 if (/*showPromoCode*/ ctx[29] || /*promoCode*/ ctx[11]) { 18695 if (if_block1) { 18696 if_block1.p(ctx, dirty); 18697 18698 if (dirty[0] & /*showPromoCode, promoCode*/ 536872960) { 18699 transition_in(if_block1, 1); 18700 } 18701 } else { 18702 if_block1 = create_if_block_3$a(ctx); 18703 if_block1.c(); 18704 transition_in(if_block1, 1); 18705 if_block1.m(if_block1_anchor.parentNode, if_block1_anchor); 18706 } 18707 } else if (if_block1) { 18708 group_outros(); 18709 18710 transition_out(if_block1, 1, 1, () => { 18711 if_block1 = null; 18712 }); 18713 18714 check_outros(); 18715 } 18716 }, 18717 i(local) { 18718 if (current) return; 18719 transition_in(if_block1); 18720 current = true; 18721 }, 18722 o(local) { 18723 transition_out(if_block1); 18724 current = false;
18725 }, 18726 d(detaching) { 18727 if (detaching) { 18728 detach(t); 18729 detach(if_block1_anchor); 18730 } 18731 18732 if (if_block0) if_block0.d(detaching); 18733 if (if_block1) if_block1.d(detaching); 18734 } 18735 }; 18736 } 18737 18738 // (101:4) {#if !paymentProcessed && !(showPromoCode || promoCode)} 18739 function create_if_block_12$2(ctx) { 18740 let button; 18741 let span; 18742 let t; 18743 let mounted; 18744 let dispose; 18745 18746 return { 18747 c() { 18748 button = element("button"); 18749 span = element("span"); 18750 t = text(/*promoCodeLinkText*/ ctx[4]); 18751 attr(button, "type", "button"); 18752 attr(button, "class", "zephr-form-promo-activate-line zephr-payment-form-promo-activate-line svelte-xf8v79"); 18753 }, 18754 m(target, anchor) { 18755 insert(target, button, anchor); 18756 append(button, span); 18757 append(span, t); 18758 18759 if (!mounted) { 18760 dispose = listen(button, "click", /*click_handler*/ ctx[34]); 18761 mounted = true; 18762 } 18763 }, 18764 p(ctx, dirty) { 18765 if (dirty[0] & /*promoCodeLinkText*/ 16) set_data(t, /*promoCodeLinkText*/ ctx[4]); 18766 }, 18767 d(detaching) { 18768 if (detaching) { 18769 detach(button); 18770 } 18771 18772 mounted = false; 18773 dispose(); 18774 } 18775 }; 18776 } 18777 18778 // (110:4) {#if showPromoCode || promoCode} 18779 function create_if_block_3$a(ctx) { 18780 let div2; 18781 let div0; 18782 let current_block_type_index; 18783 let if_block0; 18784 let t0; 18785 let div1; 18786 let current_block_type_index_1; 18787 let if_block1; 18788 let div1_class_value; 18789 let t1; 18790 let if_block2_anchor; 18791 let current; 18792 const if_block_creators = [create_if_block_8$2, create_if_block_9$2]; 18793 const if_blocks = []; 18794 18795 function select_block_type(ctx, dirty) { 18796 if (/*paymentProcessed*/ ctx[17] && /*promoCode*/ ctx[11]) return 0; 18797 if (!/*paymentProcessed*/ ctx[17]) return 1; 18798 return -1; 18799 } 18800 18801 if (~(current_block_type_index = select_block_type(ctx))) { 18802 if_block0 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 18803 } 18804 18805 const if_block_creators_1 = [create_if_block_5$6, create_if_block_7$2]; 18806 const if_blocks_1 = []; 18807 18808 function select_block_type_2(ctx, dirty) { 18809 if (/*promoCodeValid*/ ctx[12]) return 0; 18810 if (!/*paymentProcessed*/ ctx[17]) return 1; 18811 return -1; 18812 } 18813 18814 if (~(current_block_type_index_1 = select_block_type_2(ctx))) { 18815 if_block1 = if_blocks_1[current_block_type_index_1] = if_block_creators_1[current_block_type_index_1](ctx); 18816 } 18817 18818 let if_block2 = /*error*/ ctx[14] && create_if_block_4$8(ctx); 18819 18820 return { 18821 c() { 18822 div2 = element("div"); 18823 div0 = element("div"); 18824 if (if_block0) if_block0.c(); 18825 t0 = space(); 18826 div1 = element("div"); 18827 if (if_block1) if_block1.c(); 18828 t1 = space(); 18829 if (if_block2) if_block2.c(); 18830 if_block2_anchor = empty(); 18831 attr(div0, "class", "zephr-form-promo-input-container zephr-payment-form-promo-input-container svelte-xf8v79"); 18832 18833 attr(div1, "class", div1_class_value = "" + (null_to_empty(/*promoCodeValid*/ ctx[12] 18834 ? "zephr-form-summary-line-right zephr-payment-form-summary-line-right" 18835 : "zephr-form-summary-line-left zephr-payment-form-summary-line-left") + " svelte-xf8v79")); 18836 18837 attr(div2, "class", "zephr-form-promo-line zephr-payment-form-promo-line svelte-xf8v79"); 18838 }, 18839 m(target, anchor) { 18840 insert(target, div2, anchor); 18841 append(div2, div0); 18842 18843 if (~current_block_type_index) { 18844 if_blocks[current_block_type_index].m(div0, null); 18845 } 18846 18847 append(div2, t0); 18848 append(div2, div1); 18849 18850 if (~current_block_type_index_1) { 18851 if_blocks_1[current_block_type_index_1].m(div1, null); 18852 } 18853 18854 insert(target, t1, anchor); 18855 if (if_block2) if_block2.m(target, anchor); 18856 insert(target, if_block2_anchor, anchor); 18857 current = true; 18858 }, 18859 p(ctx, dirty) { 18860 let previous_block_index = current_block_type_index; 18861 current_block_type_index = select_block_type(ctx); 18862 18863 if (current_block_type_index === previous_block_index) { 18864 if (~current_block_type_index) { 18865 if_blocks[current_block_type_index].p(ctx, dirty); 18866 } 18867 } else { 18868 if (if_block0) { 18869 group_outros(); 18870 18871 transition_out(if_blocks[previous_block_index], 1, 1, () => { 18872 if_blocks[previous_block_index] = null; 18873 }); 18874 18875 check_outros(); 18876 } 18877 18878 if (~current_block_type_index) { 18879 if_block0 = if_blocks[current_block_type_index]; 18880 18881 if (!if_block0) { 18882 if_block0 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 18883 if_block0.c(); 18884 } else { 18885 if_block0.p(ctx, dirty); 18886 } 18887 18888 transition_in(if_block0, 1); 18889 if_block0.m(div0, null); 18890 } else { 18891 if_block0 = null; 18892 } 18893 } 18894 18895 let previous_block_index_1 = current_block_type_index_1; 18896 current_block_type_index_1 = select_block_type_2(ctx); 18897 18898 if (current_block_type_index_1 === previous_block_index_1) { 18899 if (~current_block_type_index_1) { 18900 if_blocks_1[current_block_type_index_1].p(ctx, dirty); 18901 } 18902 } else { 18903 if (if_block1) { 18904 group_outros(); 18905 18906 transition_out(if_blocks_1[previous_block_index_1], 1, 1, () => { 18907 if_blocks_1[previous_block_index_1] = null; 18908 }); 18909 18910 check_outros(); 18911 } 18912 18913 if (~current_block_type_index_1) { 18914 if_block1 = if_blocks_1[current_block_type_index_1]; 18915 18916 if (!if_block1) { 18917 if_block1 = if_blocks_1[current_block_type_index_1] = if_block_creators_1[current_block_type_index_1](ctx); 18918 if_block1.c(); 18919 } else { 18920 if_block1.p(ctx, dirty); 18921 } 18922 18923 transition_in(if_block1, 1); 18924 if_block1.m(div1, null); 18925 } else { 18926 if_block1 = null; 18927 } 18928 } 18929 18930 if (!current || dirty[0] & /*promoCodeValid*/ 4096 && div1_class_value !== (div1_class_value = "" + (null_to_empty(/*promoCodeValid*/ ctx[12] 18931 ? "zephr-form-summary-line-right zephr-payment-form-summary-line-right" 18932 : "zephr-form-summary-line-left zephr-payment-form-summary-line-left") + " svelte-xf8v79"))) { 18933 attr(div1, "class", div1_class_value); 18934 } 18935 18936 if (/*error*/ ctx[14]) { 18937 if (if_block2) { 18938 if_block2.p(ctx, dirty); 18939
18940 if (dirty[0] & /*error*/ 16384) { 18941 transition_in(if_block2, 1); 18942 } 18943 } else { 18944 if_block2 = create_if_block_4$8(ctx); 18945 if_block2.c(); 18946 transition_in(if_block2, 1); 18947 if_block2.m(if_block2_anchor.parentNode, if_block2_anchor); 18948 } 18949 } else if (if_block2) { 18950 group_outros(); 18951 18952 transition_out(if_block2, 1, 1, () => { 18953 if_block2 = null; 18954 }); 18955 18956 check_outros(); 18957 } 18958 }, 18959 i(local) { 18960 if (current) return; 18961 transition_in(if_block0); 18962 transition_in(if_block1); 18963 transition_in(if_block2); 18964 current = true; 18965 }, 18966 o(local) { 18967 transition_out(if_block0); 18968 transition_out(if_block1); 18969 transition_out(if_block2); 18970 current = false; 18971 }, 18972 d(detaching) { 18973 if (detaching) { 18974 detach(div2); 18975 detach(t1); 18976 detach(if_block2_anchor); 18977 } 18978 18979 if (~current_block_type_index) { 18980 if_blocks[current_block_type_index].d(); 18981 } 18982 18983 if (~current_block_type_index_1) { 18984 if_blocks_1[current_block_type_index_1].d(); 18985 } 18986 18987 if (if_block2) if_block2.d(detaching); 18988 } 18989 }; 18990 } 18991 18992 // (117:38) 18993 function create_if_block_9$2(ctx) { 18994 let div; 18995 let input; 18996 let current; 18997 18998 input = new Input({ 18999 props: { 19000 id: "zephr-form-promo-code", 19001 value: /*promoCode*/ ctx[11], 19002 placeholder: /*promoCodePlaceholder*/ ctx[5], 19003 maxlength: 50, 19004 hasError: /*error*/ ctx[14] != null, 19005 fill: true, 19006 isPaymentForm: true, 19007 onFocus: /*onFocus*/ ctx[27], 19008 onBlur: /*onBlur*/ ctx[28], 19009 $$slots: { default: [create_default_slot$4] }, 19010 $$scope: { ctx } 19011 } 19012 }); 19013 19014 input.$on("change", /*change_handler*/ ctx[35]); 19015 19016 return { 19017 c() { 19018 div = element("div"); 19019 create_component(input.$$.fragment); 19020 attr(div, "class", "zephr-form-relative-container zephr-form-promo-input zephr-form-relative-container zephr-payment-form-promo-input"); 19021 }, 19022 m(target, anchor) { 19023 insert(target, div, anchor); 19024 mount_component(input, div, null); 19025 current = true; 19026 }, 19027 p(ctx, dirty) { 19028 const input_changes = {}; 19029 if (dirty[0] & /*promoCode*/ 2048) input_changes.value = /*promoCode*/ ctx[11]; 19030 if (dirty[0] & /*promoCodePlaceholder*/ 32) input_changes.placeholder = /*promoCodePlaceholder*/ ctx[5]; 19031 if (dirty[0] & /*error*/ 16384) input_changes.hasError = /*error*/ ctx[14] != null; 19032 if (dirty[0] & /*onFocus*/ 134217728) input_changes.onFocus = /*onFocus*/ ctx[27]; 19033 if (dirty[0] & /*onBlur*/ 268435456) input_changes.onBlur = /*onBlur*/ ctx[28]; 19034 19035 if (dirty[0] & /*promoCodeValid, busy, error*/ 53248 | dirty[1] & /*$$scope*/ 16384) { 19036 input_changes.$$scope = { dirty, ctx }; 19037 } 19038 19039 input.$set(input_changes); 19040 }, 19041 i(local) { 19042 if (current) return; 19043 transition_in(input.$$.fragment, local); 19044 current = true; 19045 }, 19046 o(local) { 19047 transition_out(input.$$.fragment, local); 19048 current = false; 19049 }, 19050 d(detaching) { 19051 if (detaching) { 19052 detach(div); 19053 } 19054 19055 destroy_component(input); 19056 } 19057 }; 19058 } 19059 19060 // (113:10) {#if paymentProcessed && promoCode} 19061 function create_if_block_8$2(ctx) { 19062 let span; 19063 let t; 19064 19065 return { 19066 c() { 19067 span = element("span"); 19068 t = text(/*promoCode*/ ctx[11]); 19069 attr(span, "class", "zephr-form-summary-promo-middle zephr-payment-form-summary-promo-middle svelte-xf8v79"); 19070 }, 19071 m(target, anchor) { 19072 insert(target, span, anchor); 19073 append(span, t); 19074 }, 19075 p(ctx, dirty) { 19076 if (dirty[0] & /*promoCode*/ 2048) set_data(t, /*promoCode*/ ctx[11]); 19077 }, 19078 i: noop, 19079 o: noop, 19080 d(detaching) { 19081 if (detaching) { 19082 detach(span); 19083 } 19084 } 19085 }; 19086 } 19087 19088 // (136:43) 19089 function create_if_block_11$2(ctx) { 19090 let fa; 19091 let current; 19092 fa = new Fa({ props: { icon: faSpinner, spin: true } }); 19093 19094 return { 19095 c() { 19096 create_component(fa.$$.fragment); 19097 }, 19098 m(target, anchor) { 19099 mount_component(fa, target, anchor); 19100 current = true; 19101 }, 19102 i(local) { 19103 if (current) return; 19104 transition_in(fa.$$.fragment, local); 19105 current = true; 19106 }, 19107 o(local) { 19108 transition_out(fa.$$.fragment, local); 19109 current = false; 19110 }, 19111 d(detaching) { 19112 destroy_component(fa, detaching); 19113 } 19114 }; 19115 } 19116 19117 // (134:18) {#if promoCodeValid} 19118 function create_if_block_10$2(ctx) { 19119 let fa; 19120 let current; 19121 fa = new Fa({ props: { icon: faCheck } }); 19122 19123 return { 19124 c() { 19125 create_component(fa.$$.fragment); 19126 }, 19127 m(target, anchor) { 19128 mount_component(fa, target, anchor); 19129 current = true; 19130 }, 19131 i(local) { 19132 if (current) return; 19133 transition_in(fa.$$.fragment, local); 19134 current = true; 19135 }, 19136 o(local) { 19137 transition_out(fa.$$.fragment, local); 19138 current = false;
19139 }, 19140 d(detaching) { 19141 destroy_component(fa, detaching); 19142 } 19143 }; 19144 } 19145 19146 // (121:14) <Input id="zephr-form-promo-code" value={promoCode} placeholder={promoCodePlaceholder} maxlength={50} hasError={error != null} fill isPaymentForm on:change={({ detail }) => onChangePromoCode(detail)} onFocus={onFocus} onBlur={onBlur} > 19147 function create_default_slot$4(ctx) { 19148 let div; 19149 let current_block_type_index; 19150 let if_block; 19151 let current; 19152 const if_block_creators = [create_if_block_10$2, create_if_block_11$2]; 19153 const if_blocks = []; 19154 19155 function select_block_type_1(ctx, dirty) { 19156 if (/*promoCodeValid*/ ctx[12]) return 0; 19157 if (/*busy*/ ctx[15] && !/*error*/ ctx[14]) return 1; 19158 return -1; 19159 } 19160 19161 if (~(current_block_type_index = select_block_type_1(ctx))) { 19162 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 19163 } 19164 19165 return { 19166 c() { 19167 div = element("div"); 19168 if (if_block) if_block.c(); 19169 attr(div, "class", "zephr-form-input-inner-text zephr-payment-form-input-inner-text zephr-form-input-inner-button"); 19170 }, 19171 m(target, anchor) { 19172 insert(target, div, anchor); 19173 19174 if (~current_block_type_index) { 19175 if_blocks[current_block_type_index].m(div, null); 19176 } 19177 19178 current = true; 19179 }, 19180 p(ctx, dirty) { 19181 let previous_block_index = current_block_type_index; 19182 current_block_type_index = select_block_type_1(ctx); 19183 19184 if (current_block_type_index !== previous_block_index) { 19185 if (if_block) { 19186 group_outros(); 19187 19188 transition_out(if_blocks[previous_block_index], 1, 1, () => { 19189 if_blocks[previous_block_index] = null; 19190 }); 19191 19192 check_outros(); 19193 } 19194 19195 if (~current_block_type_index) { 19196 if_block = if_blocks[current_block_type_index]; 19197 19198 if (!if_block) { 19199 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 19200 if_block.c(); 19201 } 19202 19203 transition_in(if_block, 1); 19204 if_block.m(div, null); 19205 } else { 19206 if_block = null; 19207 } 19208 } 19209 }, 19210 i(local) { 19211 if (current) return; 19212 transition_in(if_block); 19213 current = true; 19214 }, 19215 o(local) { 19216 transition_out(if_block); 19217 current = false; 19218 }, 19219 d(detaching) { 19220 if (detaching) { 19221 detach(div); 19222 } 19223 19224 if (~current_block_type_index) { 19225 if_blocks[current_block_type_index].d(); 19226 } 19227 } 19228 }; 19229 } 19230 19231 // (155:38) 19232 function create_if_block_7$2(ctx) { 19233 let button; 19234 let current; 19235 19236 button = new Button({ 19237 props: { 19238 disabled: /*promoCodeDisabled*/ ctx[16], 19239 text: /*promoCodeButtonText*/ ctx[6], 19240 onClick: /*verifyPromoCode*/ ctx[26], 19241 noMargin: true, 19242 inputHeight: true, 19243 isPaymentForm: true 19244 } 19245 }); 19246 19247 return { 19248 c() { 19249 create_component(button.$$.fragment); 19250 }, 19251 m(target, anchor) { 19252 mount_component(button, target, anchor); 19253 current = true; 19254 }, 19255 p(ctx, dirty) { 19256 const button_changes = {}; 19257 if (dirty[0] & /*promoCodeDisabled*/ 65536) button_changes.disabled = /*promoCodeDisabled*/ ctx[16]; 19258 if (dirty[0] & /*promoCodeButtonText*/ 64) button_changes.text = /*promoCodeButtonText*/ ctx[6]; 19259 if (dirty[0] & /*verifyPromoCode*/ 67108864) button_changes.onClick = /*verifyPromoCode*/ ctx[26]; 19260 button.$set(button_changes); 19261 }, 19262 i(local) { 19263 if (current) return; 19264 transition_in(button.$$.fragment, local); 19265 current = true; 19266 }, 19267 o(local) { 19268 transition_out(button.$$.fragment, local); 19269 current = false; 19270 }, 19271 d(detaching) { 19272 destroy_component(button, detaching); 19273 } 19274 }; 19275 } 19276 19277 // (149:10) {#if promoCodeValid} 19278 function create_if_block_5$6(ctx) { 19279 let span; 19280 let if_block = /*showPromoCodeDiscountAmount*/ ctx[0] && create_if_block_6$6(ctx); 19281 19282 return { 19283 c() { 19284 span = element("span"); 19285 if (if_block) if_block.c(); 19286 attr(span, "class", "zephr-form-summary-promo-middle zephr-payment-form-summary-promo-middle svelte-xf8v79"); 19287 }, 19288 m(target, anchor) { 19289 insert(target, span, anchor); 19290 if (if_block) if_block.m(span, null); 19291 }, 19292 p(ctx, dirty) { 19293 if (/*showPromoCodeDiscountAmount*/ ctx[0]) { 19294 if (if_block) { 19295 if_block.p(ctx, dirty); 19296 } else { 19297 if_block = create_if_block_6$6(ctx); 19298 if_block.c(); 19299 if_block.m(span, null); 19300 } 19301 } else if (if_block) { 19302 if_block.d(1); 19303 if_block = null; 19304 } 19305 }, 19306 i: noop, 19307 o: noop, 19308 d(detaching) { 19309 if (detaching) { 19310 detach(span); 19311 } 19312 19313 if (if_block) if_block.d(); 19314 } 19315 }; 19316 } 19317 19318 // (151:14) {#if showPromoCodeDiscountAmount} 19319 function create_if_block_6$6(ctx) { 19320 let t0; 19321 let t1; 19322 19323 return { 19324 c() { 19325 t0 = text("- "); 19326 t1 = text(/*discountAmount*/ ctx[13]); 19327 }, 19328 m(target, anchor) { 19329 insert(target, t0, anchor); 19330 insert(target, t1, anchor); 19331 }, 19332 p(ctx, dirty) {
19333 if (dirty[0] & /*discountAmount*/ 8192) set_data(t1, /*discountAmount*/ ctx[13]); 19334 }, 19335 d(detaching) { 19336 if (detaching) { 19337 detach(t0); 19338 detach(t1); 19339 } 19340 } 19341 }; 19342 } 19343 19344 // (167:6) {#if error} 19345 function create_if_block_4$8(ctx) { 19346 let errormessage; 19347 let current; 19348 19349 errormessage = new ErrorMessage({ 19350 props: { 19351 error: /*error*/ ctx[14], 19352 isPaymentForm: true 19353 } 19354 }); 19355 19356 return { 19357 c() { 19358 create_component(errormessage.$$.fragment); 19359 }, 19360 m(target, anchor) { 19361 mount_component(errormessage, target, anchor); 19362 current = true; 19363 }, 19364 p(ctx, dirty) { 19365 const errormessage_changes = {}; 19366 if (dirty[0] & /*error*/ 16384) errormessage_changes.error = /*error*/ ctx[14]; 19367 errormessage.$set(errormessage_changes); 19368 }, 19369 i(local) { 19370 if (current) return; 19371 transition_in(errormessage.$$.fragment, local); 19372 current = true; 19373 }, 19374 o(local) { 19375 transition_out(errormessage.$$.fragment, local); 19376 current = false; 19377 }, 19378 d(detaching) { 19379 destroy_component(errormessage, detaching); 19380 } 19381 }; 19382 } 19383 19384 // (180:2) {#if prorateDisclaimer} 19385 function create_if_block_1$m(ctx) { 19386 let div; 19387 let t; 19388 19389 return { 19390 c() { 19391 div = element("div"); 19392 t = text(/*prorateDisclaimer*/ ctx[10]); 19393 attr(div, "class", "zephr-form-summary-prorate-disclaimer zephr-payment-form-summary-prorate-disclaimer svelte-xf8v79"); 19394 }, 19395 m(target, anchor) { 19396 insert(target, div, anchor); 19397 append(div, t); 19398 }, 19399 p(ctx, dirty) { 19400 if (dirty[0] & /*prorateDisclaimer*/ 1024) set_data(t, /*prorateDisclaimer*/ ctx[10]); 19401 }, 19402 d(detaching) { 19403 if (detaching) { 19404 detach(div); 19405 } 19406 } 19407 }; 19408 } 19409 19410 // (185:2) {#if changeSubscriptionProrate} 19411 function create_if_block$w(ctx) { 19412 let div2; 19413 let div0; 19414 let t0_value = (/*prorateLabel*/ ctx[9] ?? "DUE TODAY") + ""; 19415 let t0; 19416 let t1; 19417 let div1; 19418 let t2_value = /*changeSubscriptionProrate*/ ctx[20].totalPriceFormattedString + ""; 19419 let t2; 19420 19421 return { 19422 c() { 19423 div2 = element("div"); 19424 div0 = element("div"); 19425 t0 = text(t0_value); 19426 t1 = space(); 19427 div1 = element("div"); 19428 t2 = text(t2_value); 19429 attr(div0, "class", "zephr-form-summary-line-total-title zephr-payment-form-summary-line-total-title"); 19430 attr(div1, "class", "zephr-form-summary-line-price zephr-payment-form-summary-line-price svelte-xf8v79"); 19431 attr(div2, "class", "zephr-form-summary-line zephr-form-summary-price-line zephr-payment-form-summary-line zephr-payment-form-summary-price-line svelte-xf8v79"); 19432 }, 19433 m(target, anchor) { 19434 insert(target, div2, anchor); 19435 append(div2, div0); 19436 append(div0, t0); 19437 append(div2, t1); 19438 append(div2, div1); 19439 append(div1, t2); 19440 }, 19441 p(ctx, dirty) { 19442 if (dirty[0] & /*prorateLabel*/ 512 && t0_value !== (t0_value = (/*prorateLabel*/ ctx[9] ?? "DUE TODAY") + "")) set_data(t0, t0_value); 19443 if (dirty[0] & /*changeSubscriptionProrate*/ 1048576 && t2_value !== (t2_value = /*changeSubscriptionProrate*/ ctx[20].totalPriceFormattedString + "")) set_data(t2, t2_value); 19444 }, 19445 d(detaching) { 19446 if (detaching) { 19447 detach(div2); 19448 } 19449 } 19450 }; 19451 } 19452 19453 function create_fragment$G(ctx) { 19454 let div7; 19455 let div0; 19456 let t0; 19457 let t1; 19458 let div3; 19459 let div1; 19460 let t2; 19461 let t3; 19462 let div2; 19463 let t4; 19464 let t5; 19465 let t6; 19466 let t7; 19467 let t8; 19468 let t9; 19469 let t10; 19470 let div6; 19471 let div4; 19472 let t11; 19473 let t12; 19474 let div5; 19475 let t13; 19476 let t14; 19477 let t15; 19478 let current; 19479 let each_value_2 = ensure_array_like(/*chargeItems*/ ctx[19]); 19480 let each_blocks_1 = []; 19481 19482 for (let i = 0; i < each_value_2.length; i += 1) { 19483 each_blocks_1[i] = create_each_block_2(get_each_context_2(ctx, each_value_2, i)); 19484 } 19485 19486 let if_block0 = /*paymentProvider*/ ctx[24] === 'braintree' && /*discounts*/ ctx[23].length > 0 && create_if_block_14$2(ctx); 19487 let if_block1 = /*tax*/ ctx[21] && create_if_block_13$2(ctx); 19488 let each_value = ensure_array_like(/*addons*/ ctx[18]); 19489 let each_blocks = []; 19490 19491 for (let i = 0; i < each_value.length; i += 1) { 19492 each_blocks[i] = create_each_block$c(get_each_context$c(ctx, each_value, i)); 19493 } 19494 19495 let if_block2 = /*allowPromoCodes*/ ctx[3] && create_if_block_2$e(ctx); 19496 let if_block3 = /*prorateDisclaimer*/ ctx[10] && create_if_block_1$m(ctx); 19497 let if_block4 = /*changeSubscriptionProrate*/ ctx[20] && create_if_block$w(ctx); 19498 19499 return { 19500 c() { 19501 div7 = element("div"); 19502 div0 = element("div"); 19503 t0 = text(/*title*/ ctx[7]); 19504 t1 = space(); 19505 div3 = element("div"); 19506 div1 = element("div"); 19507 t2 = text(/*planTitle*/ ctx[1]); 19508 t3 = space(); 19509 div2 = element("div"); 19510 t4 = text(/*displayPrice*/ ctx[30]); 19511 t5 = space(); 19512 19513 for (let i = 0; i < each_blocks_1.length; i += 1) { 19514 each_blocks_1[i].c(); 19515 } 19516 19517 t6 = space(); 19518 if (if_block0) if_block0.c(); 19519 t7 = space(); 19520 if (if_block1) if_block1.c(); 19521 t8 = space(); 19522 19523 for (let i = 0; i < each_blocks.length; i += 1) { 19524 each_blocks[i].c(); 19525 } 19526 19527 t9 = space(); 19528 if (if_block2) if_block2.c(); 19529 t10 = space(); 19530 div6 = element("div"); 19531 div4 = element("div"); 19532 t11 = text(/*totalLabel*/ ctx[8]); 19533 t12 = space(); 19534 div5 = element("div"); 19535 t13 = text(/*totalPrice*/ ctx[2]); 19536 t14 = space(); 19537 if (if_block3) if_block3.c(); 19538 t15 = space(); 19539 if (if_block4) if_block4.c(); 19540 attr(div0, "class", "zephr-form-summary-title zephr-payment-form-summary-title svelte-xf8v79"); 19541 attr(div1, "class", "zephr-form-summary-line-title zephr-payment-form-summary-line-title svelte-xf8v79"); 19542 attr(div2, "class", "zephr-form-summary-line-price zephr-payment-form-summary-line-price svelte-xf8v79"); 19543 attr(div3, "class", "zephr-form-summary-line zephr-payment-form-summary-line svelte-xf8v79"); 19544 attr(div4, "class", "zephr-form-summary-line-total-title zephr-payment-form-summary-line-total-title"); 19545 attr(div5, "class", "zephr-form-summary-line-price zephr-payment-form-summary-line-price svelte-xf8v79"); 19546 attr(div6, "class", "zephr-form-summary-line zephr-form-summary-price-line zephr-form-summary-price-line-upper zephr-payment-form-summary-line zephr-payment-form-summary-price-line zephr-payment-form-summary-price-line-upper svelte-xf8v79"); 19547 attr(div7, "class", "zephr-form-summary zephr-payment-form-summary svelte-xf8v79"); 19548 }, 19549 m(target, anchor) { 19550 insert(target, div7, anchor); 19551 append(div7, div0); 19552 append(div0, t0); 19553 append(div7, t1); 19554 append(div7, div3); 19555 append(div3, div1); 19556 append(div1, t2); 19557 append(div3, t3); 19558 append(div3, div2); 19559 append(div2, t4); 19560 append(div7, t5); 19561 19562 for (let i = 0; i < each_blocks_1.length; i += 1) { 19563 if (each_blocks_1[i]) { 19564 each_blocks_1[i].m(div7, null); 19565 } 19566 } 19567 19568 append(div7, t6); 19569 if (if_block0) if_block0.m(div7, null); 19570 append(div7, t7); 19571 if (if_block1) if_block1.m(div7, null); 19572 append(div7, t8); 19573 19574 for (let i = 0; i < each_blocks.length; i += 1) { 19575 if (each_blocks[i]) { 19576 each_blocks[i].m(div7, null); 19577 } 19578 } 19579 19580 append(div7, t9); 19581 if (if_block2) if_block2.m(div7, null); 19582 append(div7, t10); 19583 append(div7, div6); 19584 append(div6, div4); 19585 append(div4, t11); 19586 append(div6, t12); 19587 append(div6, div5); 19588 append(div5, t13); 19589 append(div7, t14); 19590 if (if_block3) if_block3.m(div7, null); 19591 append(div7, t15); 19592 if (if_block4) if_block4.m(div7, null); 19593 current = true; 19594 }, 19595 p(ctx, dirty) { 19596 if (!current || dirty[0] & /*title*/ 128) set_data(t0, /*title*/ ctx[7]); 19597 if (!current || dirty[0] & /*planTitle*/ 2) set_data(t2, /*planTitle*/ ctx[1]); 19598 if (!current || dirty[0] & /*displayPrice*/ 1073741824) set_data(t4, /*displayPrice*/ ctx[30]); 19599
19600 if (dirty[0] & /*chargeItems*/ 524288) { 19601 each_value_2 = ensure_array_like(/*chargeItems*/ ctx[19]); 19602 let i; 19603 19604 for (i = 0; i < each_value_2.length; i += 1) { 19605 const child_ctx = get_each_context_2(ctx, each_value_2, i); 19606 19607 if (each_blocks_1[i]) { 19608 each_blocks_1[i].p(child_ctx, dirty); 19609 } else { 19610 each_blocks_1[i] = create_each_block_2(child_ctx); 19611 each_blocks_1[i].c(); 19612 each_blocks_1[i].m(div7, t6); 19613 } 19614 } 19615 19616 for (; i < each_blocks_1.length; i += 1) { 19617 each_blocks_1[i].d(1); 19618 } 19619 19620 each_blocks_1.length = each_value_2.length; 19621 } 19622 19623 if (/*paymentProvider*/ ctx[24] === 'braintree' && /*discounts*/ ctx[23].length > 0) { 19624 if (if_block0) { 19625 if_block0.p(ctx, dirty); 19626 } else { 19627 if_block0 = create_if_block_14$2(ctx); 19628 if_block0.c(); 19629 if_block0.m(div7, t7); 19630 } 19631 } else if (if_block0) { 19632 if_block0.d(1); 19633 if_block0 = null; 19634 } 19635 19636 if (/*tax*/ ctx[21]) { 19637 if (if_block1) { 19638 if_block1.p(ctx, dirty); 19639 } else { 19640 if_block1 = create_if_block_13$2(ctx); 19641 if_block1.c(); 19642 if_block1.m(div7, t8); 19643 } 19644 } else if (if_block1) { 19645 if_block1.d(1); 19646 if_block1 = null; 19647 } 19648 19649 if (dirty[0] & /*addons*/ 262144) { 19650 each_value = ensure_array_like(/*addons*/ ctx[18]); 19651 let i; 19652 19653 for (i = 0; i < each_value.length; i += 1) { 19654 const child_ctx = get_each_context$c(ctx, each_value, i); 19655 19656 if (each_blocks[i]) { 19657 each_blocks[i].p(child_ctx, dirty); 19658 } else { 19659 each_blocks[i] = create_each_block$c(child_ctx); 19660 each_blocks[i].c(); 19661 each_blocks[i].m(div7, t9); 19662 } 19663 } 19664 19665 for (; i < each_blocks.length; i += 1) { 19666 each_blocks[i].d(1); 19667 } 19668 19669 each_blocks.length = each_value.length; 19670 } 19671 19672 if (/*allowPromoCodes*/ ctx[3]) { 19673 if (if_block2) { 19674 if_block2.p(ctx, dirty); 19675 19676 if (dirty[0] & /*allowPromoCodes*/ 8) { 19677 transition_in(if_block2, 1); 19678 } 19679 } else { 19680 if_block2 = create_if_block_2$e(ctx); 19681 if_block2.c(); 19682 transition_in(if_block2, 1); 19683 if_block2.m(div7, t10); 19684 } 19685 } else if (if_block2) { 19686 group_outros(); 19687 19688 transition_out(if_block2, 1, 1, () => { 19689 if_block2 = null; 19690 }); 19691 19692 check_outros(); 19693 } 19694 19695 if (!current || dirty[0] & /*totalLabel*/ 256) set_data(t11, /*totalLabel*/ ctx[8]); 19696 if (!current || dirty[0] & /*totalPrice*/ 4) set_data(t13, /*totalPrice*/ ctx[2]); 19697 19698 if (/*prorateDisclaimer*/ ctx[10]) { 19699 if (if_block3) { 19700 if_block3.p(ctx, dirty); 19701 } else { 19702 if_block3 = create_if_block_1$m(ctx); 19703 if_block3.c(); 19704 if_block3.m(div7, t15); 19705 } 19706 } else if (if_block3) { 19707 if_block3.d(1); 19708 if_block3 = null; 19709 } 19710 19711 if (/*changeSubscriptionProrate*/ ctx[20]) { 19712 if (if_block4) { 19713 if_block4.p(ctx, dirty); 19714 } else { 19715 if_block4 = create_if_block$w(ctx); 19716 if_block4.c(); 19717 if_block4.m(div7, null); 19718 } 19719 } else if (if_block4) { 19720 if_block4.d(1); 19721 if_block4 = null; 19722 } 19723 }, 19724 i(local) { 19725 if (current) return; 19726 transition_in(if_block2); 19727 current = true; 19728 }, 19729 o(local) { 19730 transition_out(if_block2); 19731 current = false; 19732 }, 19733 d(detaching) { 19734 if (detaching) { 19735 detach(div7); 19736 } 19737 19738 destroy_each(each_blocks_1, detaching); 19739 if (if_block0) if_block0.d(); 19740 if (if_block1) if_block1.d(); 19741 destroy_each(each_blocks, detaching); 19742 if (if_block2) if_block2.d(); 19743 if (if_block3) if_block3.d(); 19744 if (if_block4) if_block4.d(); 19745 } 19746 }; 19747 } 19748 19749 function instance$G($$self, $$props, $$invalidate) { 19750 let displayPrice; 19751 let { showPromoCodeDiscountAmount = true } = $$props; 19752 let { planTitle } = $$props; 19753 let { price } = $$props; 19754 let { totalPrice } = $$props; 19755 let { allowPromoCodes } = $$props; 19756 let { promoCodeLinkText } = $$props; 19757 let { promoCodePlaceholder } = $$props; 19758 let { promoCodeButtonText } = $$props; 19759 let { title } = $$props; 19760 let { totalLabel } = $$props; 19761 let { prorateLabel } = $$props; 19762 let { prorateDisclaimer } = $$props; 19763 let { promoCode } = $$props; 19764 let { promoCodeValid } = $$props; 19765 let { discountAmount } = $$props; 19766 let { error = null } = $$props; 19767 let { busy } = $$props; 19768 let { promoCodeDisabled } = $$props; 19769 let { paymentProcessed } = $$props; 19770 let { addons } = $$props; 19771 let { chargeItems } = $$props; 19772 let { changeSubscriptionProrate } = $$props; 19773 let { tax } = $$props; 19774 let { taxLabel } = $$props; 19775 let { subTotal } = $$props; 19776 let { discounts = [] } = $$props; 19777 let { paymentProvider = '' } = $$props; 19778 let { onChangePromoCode } = $$props; 19779 let { verifyPromoCode } = $$props; 19780 let { onFocus } = $$props; 19781 let { onBlur } = $$props; 19782 let { logBeginCheckout } = $$props; 19783 let showPromoCode = false;
19784 logBeginCheckout(); 19785 const click_handler = () => $$invalidate(29, showPromoCode = true); 19786 const change_handler = ({ detail }) => onChangePromoCode(detail); 19787 19788 $$self.$$set = $$props => { 19789 if ('showPromoCodeDiscountAmount' in $$props) $$invalidate(0, showPromoCodeDiscountAmount = $$props.showPromoCodeDiscountAmount); 19790 if ('planTitle' in $$props) $$invalidate(1, planTitle = $$props.planTitle); 19791 if ('price' in $$props) $$invalidate(31, price = $$props.price); 19792 if ('totalPrice' in $$props) $$invalidate(2, totalPrice = $$props.totalPrice); 19793 if ('allowPromoCodes' in $$props) $$invalidate(3, allowPromoCodes = $$props.allowPromoCodes); 19794 if ('promoCodeLinkText' in $$props) $$invalidate(4, promoCodeLinkText = $$props.promoCodeLinkText); 19795 if ('promoCodePlaceholder' in $$props) $$invalidate(5, promoCodePlaceholder = $$props.promoCodePlaceholder); 19796 if ('promoCodeButtonText' in $$props) $$invalidate(6, promoCodeButtonText = $$props.promoCodeButtonText); 19797 if ('title' in $$props) $$invalidate(7, title = $$props.title);
19798 if ('totalLabel' in $$props) $$invalidate(8, totalLabel = $$props.totalLabel); 19799 if ('prorateLabel' in $$props) $$invalidate(9, prorateLabel = $$props.prorateLabel); 19800 if ('prorateDisclaimer' in $$props) $$invalidate(10, prorateDisclaimer = $$props.prorateDisclaimer); 19801 if ('promoCode' in $$props) $$invalidate(11, promoCode = $$props.promoCode); 19802 if ('promoCodeValid' in $$props) $$invalidate(12, promoCodeValid = $$props.promoCodeValid); 19803 if ('discountAmount' in $$props) $$invalidate(13, discountAmount = $$props.discountAmount); 19804 if ('error' in $$props) $$invalidate(14, error = $$props.error); 19805 if ('busy' in $$props) $$invalidate(15, busy = $$props.busy); 19806 if ('promoCodeDisabled' in $$props) $$invalidate(16, promoCodeDisabled = $$props.promoCodeDisabled); 19807 if ('paymentProcessed' in $$props) $$invalidate(17, paymentProcessed = $$props.paymentProcessed); 19808 if ('addons' in $$props) $$invalidate(18, addons = $$props.addons); 19809 if ('chargeItems' in $$props) $$invalidate(19, chargeItems = $$props.chargeItems);
19810 if ('changeSubscriptionProrate' in $$props) $$invalidate(20, changeSubscriptionProrate = $$props.changeSubscriptionProrate); 19811 if ('tax' in $$props) $$invalidate(21, tax = $$props.tax); 19812 if ('taxLabel' in $$props) $$invalidate(22, taxLabel = $$props.taxLabel); 19813 if ('subTotal' in $$props) $$invalidate(32, subTotal = $$props.subTotal); 19814 if ('discounts' in $$props) $$invalidate(23, discounts = $$props.discounts); 19815 if ('paymentProvider' in $$props) $$invalidate(24, paymentProvider = $$props.paymentProvider); 19816 if ('onChangePromoCode' in $$props) $$invalidate(25, onChangePromoCode = $$props.onChangePromoCode); 19817 if ('verifyPromoCode' in $$props) $$invalidate(26, verifyPromoCode = $$props.verifyPromoCode); 19818 if ('onFocus' in $$props) $$invalidate(27, onFocus = $$props.onFocus); 19819 if ('onBlur' in $$props) $$invalidate(28, onBlur = $$props.onBlur); 19820 if ('logBeginCheckout' in $$props) $$invalidate(33, logBeginCheckout = $$props.logBeginCheckout); 19821 }; 19822 19823 $$self.$$.update = () => { 19824 if ($$self.$$.dirty[0] & /*chargeItems*/ 524288 | $$self.$$.dirty[1] & /*subTotal, price*/ 3) { 19825 $$invalidate(30, displayPrice = chargeItems.length ? "" : subTotal || price); 19826 } 19827 }; 19828 19829 return [ 19830 showPromoCodeDiscountAmount, 19831 planTitle, 19832 totalPrice, 19833 allowPromoCodes, 19834 promoCodeLinkText, 19835 promoCodePlaceholder, 19836 promoCodeButtonText, 19837 title, 19838 totalLabel, 19839 prorateLabel, 19840 prorateDisclaimer, 19841 promoCode, 19842 promoCodeValid, 19843 discountAmount, 19844 error, 19845 busy, 19846 promoCodeDisabled, 19847 paymentProcessed, 19848 addons, 19849 chargeItems, 19850 changeSubscriptionProrate, 19851 tax, 19852 taxLabel, 19853 discounts, 19854 paymentProvider, 19855 onChangePromoCode, 19856 verifyPromoCode, 19857 onFocus, 19858 onBlur, 19859 showPromoCode, 19860 displayPrice, 19861 price, 19862 subTotal, 19863 logBeginCheckout, 19864 click_handler, 19865 change_handler 19866 ]; 19867 } 19868 19869 class PaymentSummary extends SvelteComponent { 19870 constructor(options) { 19871 super(); 19872 19873 init( 19874 this, 19875 options, 19876 instance$G, 19877 create_fragment$G, 19878 safe_not_equal, 19879 { 19880 showPromoCodeDiscountAmount: 0, 19881 planTitle: 1, 19882 price: 31, 19883 totalPrice: 2, 19884 allowPromoCodes: 3, 19885 promoCodeLinkText: 4, 19886 promoCodePlaceholder: 5, 19887 promoCodeButtonText: 6, 19888 title: 7, 19889 totalLabel: 8, 19890 prorateLabel: 9, 19891 prorateDisclaimer: 10, 19892 promoCode: 11, 19893 promoCodeValid: 12, 19894 discountAmount: 13, 19895 error: 14, 19896 busy: 15, 19897 promoCodeDisabled: 16, 19898 paymentProcessed: 17, 19899 addons: 18, 19900 chargeItems: 19, 19901 changeSubscriptionProrate: 20, 19902 tax: 21, 19903 taxLabel: 22, 19904 subTotal: 32, 19905 discounts: 23, 19906 paymentProvider: 24, 19907 onChangePromoCode: 25, 19908 verifyPromoCode: 26, 19909 onFocus: 27, 19910 onBlur: 28, 19911 logBeginCheckout: 33 19912 }, 19913 null, 19914 [-1, -1] 19915 ); 19916 } 19917 } 19918 19919 const factory$f = { 19920 matches: (sectionElement) => sectionElement.type === elementTypes.PAYMENT_SUMMARY, 19921 create: (form, formState, formActions, elementConfig) => { 19922 const paymentProviderConfig = paymentProviderFor(form.organisationConfiguration.paymentProvider); 19923 return { 19924 component: PaymentSummary, 19925 props: { 19926 showPromoCodeDiscountAmount: !formConfigAs(form).dynamicOffer, 19927 price: formState.paymentOptionPrices?.netPriceFormattedString ?? '-', 19928 totalPrice: formState.paymentOptionPrices?.totalPriceFormattedString ?? '-', 19929 tax: formState.paymentOptionPrices?.taxPriceFormattedString, 19930 taxLabel: elementConfig.taxLabel ?? "Tax", 19931 subTotal: formState.paymentOptionPrices?.netPriceFormattedString, 19932 planTitle: formState.paymentOption.label, 19933 paymentProvider: form.organisationConfiguration.paymentProvider, 19934 // If we're using braintree we will need the full discounts array to display each discount 19935 discounts: form.organisationConfiguration.paymentProvider === 'braintree' ? 19936 (formConfigAs(form).paymentOptions 19937 .find(opt => opt.productId === formState.paymentOption.productId && opt.slug === formState.paymentOption.slug) 19938 ?.discounts || []) 19939 .map(discount => ({
19940 description: discount.description || discount.name, 19941 formattedAmount: `- ${formatCurrency(discount.amount || 0, formState.paymentOption.currencyCode)}` 19942 })) : [], 19943 allowPromoCodes: (formConfigAs(form).promoCodeConfig?.promoCodeAllowed 19944 || formConfigAs(form).dynamicOffer /* TODO temp just for customer demo */) && paymentProviderConfig.hasPromoCodes(form), 19945 promoCodeLinkText: formConfigAs(form).promoCodeConfig?.promoCodeText, 19946 promoCodePlaceholder: formConfigAs(form).promoCodeConfig?.promoCodePlaceholder, 19947 promoCodeButtonText: formConfigAs(form).promoCodeConfig?.promoCodeButtonText, 19948 totalLabel: elementConfig.total, 19949 prorateLabel: elementConfig.prorateLabel, 19950 prorateDisclaimer: (!formConfigAs(form).changeSubscriptionMode || paymentProviderConfig.changeSubscriptionProrateCalculator) ? null : elementConfig.prorateDisclaimer, 19951 title: elementConfig.title, 19952 promoCode: formState.promoCode, 19953 busy: formState.isBusyByKey[verifyingPromoCodeBusyKey], 19954 promoCodeDisabled: formState.isBusy || formState.promoCode?.length === 0, 19955 paymentProcessed: formState.paymentProcessed, 19956 discountAmount: formState.paymentOptionPrices?.discountPriceFormattedPrice ?? '-', 19957 addons: addonsForPlan(formState) 19958 .map(addon => ({ 19959 label: addon.label, 19960 addonPrice: formatCurrency(addon.addonPrice, formState.paymentOption.currencyCode) 19961 })), 19962 chargeItems: formState.paymentOptionPrices?.chargeItems ?? [], 19963 promoCodeValid: formState.promoCodeValid, 19964 changeSubscriptionProrate: formState.changeSubscriptionProrate, 19965 onChangePromoCode: (value) => { 19966 let updateFormState = formActions.updateFormState({ 19967 promoCode: value, 19968 promoCodeValid: undefined, 19969 discountedPlanPrices: [] 19970 }); 19971 // If we're going from a valid promo code -> incomplete promo code, the mobile payment button needs resetting 19972 if (formState.promoCodeValid) { 19973 if (formState.originalDynamicOfferResult) { 19974 updateFormState = formActions.updateFormState({ 19975 dynamicOfferResult: formState.originalDynamicOfferResult 19976 }); 19977 } 19978 void afterPromoCodeChange(form, updateFormState, formActions); 19979 } 19980 logDataLayerEvent(form, 'zephr_form_input_change', { 19981 inputName: 'zephr-form-promo-code', 19982 sectionId: formState.currentSection.type, 19983 field: 'promo-code' 19984 }); 19985 }, 19986 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 19987 inputName: 'zephr-form-promo-code', 19988 sectionId: formState.currentSection.type, 19989 field: 'promo-code' 19990 }), 19991 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 19992 inputName: 'zephr-form-promo-code', 19993 sectionId: formState.currentSection.type, 19994 field: 'promo-code' 19995 }), 19996 verifyPromoCode: () => { 19997 void validatePromoCode(form, formState, formActions); 19998 }, 19999 logBeginCheckout: async () => { 20000 if (formState.currentPart.type === partTypes.PAYMENT.type) { 20001 if (form.organisationConfiguration.trackFormDataLayerEvents) { 20002 await calculatePrices(form, formState, formActions); 20003 } 20004 logDataLayerEvent(form, 'begin_checkout', { 20005 ecommerce: { 20006 currency: getRelevantCurrency(form, formState), 20007 value: formActions.getFormState().paymentOptionPrices?.totalPrice, 20008 items: [{ 20009 item_id: formState.paymentOption.slug, 20010 item_name: formState.paymentOption.productId, 20011 price: formActions.getFormState().paymentOptionPrices?.totalPrice, 20012 quantity: 1 20013 }] 20014 } 20015 }); 20016 } 20017 } 20018 } 20019 }; 20020 } 20021 }; 20022 20023 /* src/components/elements/divider/Divider.svelte generated by Svelte v4.2.12 */ 20024 20025 function create_if_block$v(ctx) { 20026 let div; 20027 let t0; 20028 let t1; 20029 let if_block0 = /*showLine*/ ctx[1] && create_if_block_3$9(ctx); 20030 let if_block1 = /*text*/ ctx[0] && create_if_block_2$d(ctx); 20031 let if_block2 = /*showLine*/ ctx[1] && /*text*/ ctx[0] && create_if_block_1$l(ctx); 20032 20033 return { 20034 c() { 20035 div = element("div"); 20036 if (if_block0) if_block0.c(); 20037 t0 = space(); 20038 if (if_block1) if_block1.c(); 20039 t1 = space(); 20040 if (if_block2) if_block2.c(); 20041 attr(div, "class", "zephr-form-divider-container svelte-1jhhsfx"); 20042 toggle_class(div, "zephr-payment-form-divider-container", /*isPaymentForm*/ ctx[3]); 20043 }, 20044 m(target, anchor) { 20045 insert(target, div, anchor); 20046 if (if_block0) if_block0.m(div, null); 20047 append(div, t0); 20048 if (if_block1) if_block1.m(div, null); 20049 append(div, t1); 20050 if (if_block2) if_block2.m(div, null); 20051 }, 20052 p(ctx, dirty) { 20053 if (/*showLine*/ ctx[1]) { 20054 if (if_block0) { 20055 if_block0.p(ctx, dirty); 20056 } else { 20057 if_block0 = create_if_block_3$9(ctx); 20058 if_block0.c(); 20059 if_block0.m(div, t0); 20060 } 20061 } else if (if_block0) { 20062 if_block0.d(1); 20063 if_block0 = null; 20064 } 20065 20066 if (/*text*/ ctx[0]) { 20067 if (if_block1) { 20068 if_block1.p(ctx, dirty); 20069 } else { 20070 if_block1 = create_if_block_2$d(ctx); 20071 if_block1.c(); 20072 if_block1.m(div, t1); 20073 } 20074 } else if (if_block1) { 20075 if_block1.d(1); 20076 if_block1 = null; 20077 } 20078 20079 if (/*showLine*/ ctx[1] && /*text*/ ctx[0]) { 20080 if (if_block2) { 20081 if_block2.p(ctx, dirty); 20082 } else { 20083 if_block2 = create_if_block_1$l(ctx); 20084 if_block2.c(); 20085 if_block2.m(div, null); 20086 } 20087 } else if (if_block2) { 20088 if_block2.d(1); 20089 if_block2 = null; 20090 } 20091
20092 if (dirty & /*isPaymentForm*/ 8) { 20093 toggle_class(div, "zephr-payment-form-divider-container", /*isPaymentForm*/ ctx[3]); 20094 } 20095 }, 20096 d(detaching) { 20097 if (detaching) { 20098 detach(div); 20099 } 20100 20101 if (if_block0) if_block0.d(); 20102 if (if_block1) if_block1.d(); 20103 if (if_block2) if_block2.d(); 20104 } 20105 }; 20106 } 20107 20108 // (12:4) {#if showLine} 20109 function create_if_block_3$9(ctx) { 20110 let if_block_anchor; 20111 20112 function select_block_type(ctx, dirty) { 20113 if (/*text*/ ctx[0]) return create_if_block_4$7; 20114 return create_else_block$4; 20115 } 20116 20117 let current_block_type = select_block_type(ctx); 20118 let if_block = current_block_type(ctx); 20119 20120 return { 20121 c() { 20122 if_block.c(); 20123 if_block_anchor = empty(); 20124 }, 20125 m(target, anchor) { 20126 if_block.m(target, anchor); 20127 insert(target, if_block_anchor, anchor); 20128 }, 20129 p(ctx, dirty) { 20130 if (current_block_type === (current_block_type = select_block_type(ctx)) && if_block) { 20131 if_block.p(ctx, dirty); 20132 } else { 20133 if_block.d(1); 20134 if_block = current_block_type(ctx); 20135 20136 if (if_block) { 20137 if_block.c(); 20138 if_block.m(if_block_anchor.parentNode, if_block_anchor); 20139 } 20140 } 20141 }, 20142 d(detaching) { 20143 if (detaching) { 20144 detach(if_block_anchor); 20145 } 20146 20147 if_block.d(detaching); 20148 } 20149 }; 20150 } 20151 20152 // (18:8) {:else} 20153 function create_else_block$4(ctx) { 20154 let div; 20155 20156 return { 20157 c() { 20158 div = element("div"); 20159 attr(div, "class", "zephr-form-divider-line-complete svelte-1jhhsfx"); 20160 }, 20161 m(target, anchor) { 20162 insert(target, div, anchor); 20163 }, 20164 p: noop, 20165 d(detaching) { 20166 if (detaching) { 20167 detach(div); 20168 } 20169 } 20170 }; 20171 } 20172 20173 // (13:6) {#if text} 20174 function create_if_block_4$7(ctx) { 20175 let div; 20176 20177 return { 20178 c() { 20179 div = element("div"); 20180 attr(div, "class", "zephr-form-divider-line svelte-1jhhsfx"); 20181 toggle_class(div, "zephr-payment-form-divider-line", /*isPaymentForm*/ ctx[3]); 20182 }, 20183 m(target, anchor) { 20184 insert(target, div, anchor); 20185 }, 20186 p(ctx, dirty) { 20187 if (dirty & /*isPaymentForm*/ 8) { 20188 toggle_class(div, "zephr-payment-form-divider-line", /*isPaymentForm*/ ctx[3]); 20189 } 20190 }, 20191 d(detaching) { 20192 if (detaching) { 20193 detach(div); 20194 } 20195 } 20196 }; 20197 } 20198 20199 // (22:4) {#if text} 20200 function create_if_block_2$d(ctx) { 20201 let span; 20202 let t; 20203 20204 return { 20205 c() { 20206 span = element("span"); 20207 t = text(/*text*/ ctx[0]); 20208 attr(span, "class", "zephr-form-divider-text svelte-1jhhsfx"); 20209 toggle_class(span, "zephr-payment-form-divider-text", /*isPaymentForm*/ ctx[3]); 20210 }, 20211 m(target, anchor) { 20212 insert(target, span, anchor); 20213 append(span, t); 20214 }, 20215 p(ctx, dirty) { 20216 if (dirty & /*text*/ 1) set_data(t, /*text*/ ctx[0]); 20217 20218 if (dirty & /*isPaymentForm*/ 8) { 20219 toggle_class(span, "zephr-payment-form-divider-text", /*isPaymentForm*/ ctx[3]); 20220 } 20221 }, 20222 d(detaching) { 20223 if (detaching) { 20224 detach(span); 20225 } 20226 } 20227 }; 20228 } 20229 20230 // (30:4) {#if showLine && text} 20231 function create_if_block_1$l(ctx) { 20232 let div; 20233 20234 return { 20235 c() { 20236 div = element("div"); 20237 attr(div, "class", "zephr-form-divider-line svelte-1jhhsfx"); 20238 toggle_class(div, "zephr-payment-form-divider-line", /*isPaymentForm*/ ctx[3]); 20239 }, 20240 m(target, anchor) { 20241 insert(target, div, anchor); 20242 }, 20243 p(ctx, dirty) { 20244 if (dirty & /*isPaymentForm*/ 8) { 20245 toggle_class(div, "zephr-payment-form-divider-line", /*isPaymentForm*/ ctx[3]); 20246 } 20247 }, 20248 d(detaching) { 20249 if (detaching) { 20250 detach(div); 20251 } 20252 } 20253 }; 20254 } 20255 20256 function create_fragment$F(ctx) { 20257 let if_block_anchor; 20258 let if_block = /*show*/ ctx[2] && create_if_block$v(ctx); 20259 20260 return { 20261 c() { 20262 if (if_block) if_block.c(); 20263 if_block_anchor = empty(); 20264 }, 20265 m(target, anchor) { 20266 if (if_block) if_block.m(target, anchor); 20267 insert(target, if_block_anchor, anchor); 20268 }, 20269 p(ctx, [dirty]) { 20270 if (/*show*/ ctx[2]) { 20271 if (if_block) { 20272 if_block.p(ctx, dirty); 20273 } else { 20274 if_block = create_if_block$v(ctx); 20275 if_block.c(); 20276 if_block.m(if_block_anchor.parentNode, if_block_anchor); 20277 } 20278 } else if (if_block) { 20279 if_block.d(1); 20280 if_block = null; 20281 } 20282 }, 20283 i: noop, 20284 o: noop, 20285 d(detaching) { 20286 if (detaching) { 20287 detach(if_block_anchor); 20288 } 20289 20290 if (if_block) if_block.d(detaching); 20291 } 20292 }; 20293 } 20294
20295 function instance$F($$self, $$props, $$invalidate) { 20296 let { text } = $$props; 20297 let { showLine } = $$props; 20298 let { show } = $$props; 20299 let { isPaymentForm = false } = $$props; 20300 20301 $$self.$$set = $$props => { 20302 if ('text' in $$props) $$invalidate(0, text = $$props.text); 20303 if ('showLine' in $$props) $$invalidate(1, showLine = $$props.showLine); 20304 if ('show' in $$props) $$invalidate(2, show = $$props.show); 20305 if ('isPaymentForm' in $$props) $$invalidate(3, isPaymentForm = $$props.isPaymentForm); 20306 }; 20307 20308 return [text, showLine, show, isPaymentForm]; 20309 } 20310 20311 class Divider extends SvelteComponent { 20312 constructor(options) { 20313 super(); 20314 20315 init(this, options, instance$F, create_fragment$F, safe_not_equal, { 20316 text: 0, 20317 showLine: 1, 20318 show: 2, 20319 isPaymentForm: 3 20320 }); 20321 } 20322 } 20323 20324 const factory$e = { 20325 matches: (sectionElement) => sectionElement.type === elementTypes.DIVIDER, 20326 create: (form, formState, formActions, elementConfig) => ({ 20327 component: Divider, 20328 props: { 20329 text: elementConfig.text, 20330 showLine: elementConfig.showLine, 20331 show: elementConfig.show, 20332 isPaymentForm: form.formType === FormType.PAYMENT, 20333 } 20334 }) 20335 }; 20336 20337 /* src/components/elements/loginLink/LoginLink.svelte generated by Svelte v4.2.12 */ 20338 20339 function create_fragment$E(ctx) { 20340 let div; 20341 let t0; 20342 let t1; 20343 let a; 20344 let t2; 20345 20346 return { 20347 c() { 20348 div = element("div"); 20349 t0 = text(/*text*/ ctx[0]); 20350 t1 = space(); 20351 a = element("a"); 20352 t2 = text(/*linkText*/ ctx[1]); 20353 attr(a, "href", /*url*/ ctx[2]); 20354 attr(a, "class", "svelte-1jmemom"); 20355 attr(div, "class", "zephr-form-login-link svelte-1jmemom"); 20356 toggle_class(div, "zephr-payment-login-link", /*isPaymentForm*/ ctx[3]); 20357 }, 20358 m(target, anchor) { 20359 insert(target, div, anchor); 20360 append(div, t0); 20361 append(div, t1); 20362 append(div, a); 20363 append(a, t2); 20364 }, 20365 p(ctx, [dirty]) { 20366 if (dirty & /*text*/ 1) set_data(t0, /*text*/ ctx[0]); 20367 if (dirty & /*linkText*/ 2) set_data(t2, /*linkText*/ ctx[1]); 20368 20369 if (dirty & /*url*/ 4) { 20370 attr(a, "href", /*url*/ ctx[2]); 20371 } 20372 20373 if (dirty & /*isPaymentForm*/ 8) { 20374 toggle_class(div, "zephr-payment-login-link", /*isPaymentForm*/ ctx[3]); 20375 } 20376 }, 20377 i: noop, 20378 o: noop, 20379 d(detaching) { 20380 if (detaching) { 20381 detach(div); 20382 } 20383 } 20384 }; 20385 } 20386 20387 function instance$E($$self, $$props, $$invalidate) { 20388 let { text } = $$props; 20389 let { linkText } = $$props; 20390 let { url } = $$props; 20391 let { isPaymentForm = false } = $$props; 20392 20393 $$self.$$set = $$props => {
20394 if ('text' in $$props) $$invalidate(0, text = $$props.text); 20395 if ('linkText' in $$props) $$invalidate(1, linkText = $$props.linkText); 20396 if ('url' in $$props) $$invalidate(2, url = $$props.url); 20397 if ('isPaymentForm' in $$props) $$invalidate(3, isPaymentForm = $$props.isPaymentForm); 20398 }; 20399 20400 return [text, linkText, url, isPaymentForm]; 20401 } 20402 20403 class LoginLink extends SvelteComponent { 20404 constructor(options) { 20405 super(); 20406 20407 init(this, options, instance$E, create_fragment$E, safe_not_equal, { 20408 text: 0, 20409 linkText: 1, 20410 url: 2, 20411 isPaymentForm: 3 20412 }); 20413 } 20414 } 20415 20416 const factory$d = { 20417 matches: (sectionElement) => sectionElement.type === elementTypes.LOGIN_LINK, 20418 create: (form, formState, formActions, elementConfig) => ({ 20419 component: LoginLink, 20420 props: { 20421 text: elementConfig.alreadyRegText, 20422 linkText: elementConfig.loginText, 20423 url: elementConfig.url, 20424 isPaymentForm: form.formType === FormType.PAYMENT, 20425 } 20426 }) 20427 }; 20428 20429 const factory$c = { 20430 matches: (sectionElement) => sectionElement.type === elementTypes.BUTTON && sectionElement.config.isLogin, 20431 create: (form, formState, formActions, elementConfig) => ({ 20432 component: Button, 20433 props: { 20434 disabled: formState.isBusy, 20435 text: elementConfig.text, 20436 onClick: () => { 20437 logDataLayerEvent(form, 'zephr_form_button_press', { 20438 sectionId: formState.currentSection.type, 20439 buttonType: 'SUBMIT' 20440 }); 20441 formActions.updateFormState({ 20442 forgotPassword: false, 20443 }); 20444 formActions.jumpToPartStart(partTypes.ACCOUNT_VERIFICATION.type); 20445 }, 20446 isPaymentForm: form.formType === FormType.PAYMENT, 20447 } 20448 }) 20449 }; 20450 20451 const factory$b = { 20452 matches: (sectionElement) => sectionElement.type === elementTypes.BUTTON && sectionElement.config.isCancel, 20453 create: (form, formState, formActions, elementConfig) => ({ 20454 component: Button, 20455 props: { 20456 text: elementConfig.text, 20457 onClick: () => { 20458 logDataLayerEvent(form, 'zephr_form_button_press', { 20459 sectionId: formState.currentSection.type, 20460 buttonType: 'SUBMIT' 20461 }); 20462 formActions.updateFormState({ 20463 confirmCancel: true, 20464 }); 20465 formActions.completeSection(); 20466 }, 20467 } 20468 }) 20469 }; 20470 20471 /* src/components/elements/accountMembershipCode/AccountMembershipCode.svelte generated by Svelte v4.2.12 */ 20472 20473 function create_if_block_1$k(ctx) { 20474 let link; 20475 let current; 20476 link = new Link({ props: { text: /*label*/ ctx[0] } }); 20477 link.$on("linkClick", /*linkClick_handler*/ ctx[10]); 20478 20479 return { 20480 c() { 20481 create_component(link.$$.fragment); 20482 }, 20483 m(target, anchor) { 20484 mount_component(link, target, anchor); 20485 current = true; 20486 }, 20487 p(ctx, dirty) { 20488 const link_changes = {}; 20489 if (dirty & /*label*/ 1) link_changes.text = /*label*/ ctx[0]; 20490 link.$set(link_changes); 20491 }, 20492 i(local) { 20493 if (current) return; 20494 transition_in(link.$$.fragment, local); 20495 current = true; 20496 }, 20497 o(local) { 20498 transition_out(link.$$.fragment, local); 20499 current = false; 20500 }, 20501 d(detaching) { 20502 destroy_component(link, detaching); 20503 } 20504 }; 20505 } 20506 20507 // (23:2) {#if accountMembershipCode || showInput} 20508 function create_if_block$u(ctx) { 20509 let label_1; 20510 let t; 20511 let input; 20512 let current; 20513 20514 label_1 = new Label({ 20515 props: { 20516 forInput: /*id*/ ctx[8], 20517 label: /*label*/ ctx[0] 20518 } 20519 }); 20520 20521 input = new Input({ 20522 props: { 20523 id: /*id*/ ctx[8], 20524 value: /*accountMembershipCode*/ ctx[2], 20525 errorMessage: /*error*/ ctx[3], 20526 placeholder: /*placeholder*/ ctx[1], 20527 onFocus: /*onFocus*/ ctx[5], 20528 onBlur: /*onBlur*/ ctx[6] 20529 } 20530 }); 20531 20532 input.$on("change", /*change_handler*/ ctx[11]); 20533 20534 return { 20535 c() { 20536 create_component(label_1.$$.fragment); 20537 t = space(); 20538 create_component(input.$$.fragment); 20539 }, 20540 m(target, anchor) { 20541 mount_component(label_1, target, anchor); 20542 insert(target, t, anchor); 20543 mount_component(input, target, anchor); 20544 current = true; 20545 }, 20546 p(ctx, dirty) { 20547 const label_1_changes = {};
20548 if (dirty & /*label*/ 1) label_1_changes.label = /*label*/ ctx[0]; 20549 label_1.$set(label_1_changes); 20550 const input_changes = {}; 20551 if (dirty & /*accountMembershipCode*/ 4) input_changes.value = /*accountMembershipCode*/ ctx[2]; 20552 if (dirty & /*error*/ 8) input_changes.errorMessage = /*error*/ ctx[3]; 20553 if (dirty & /*placeholder*/ 2) input_changes.placeholder = /*placeholder*/ ctx[1]; 20554 if (dirty & /*onFocus*/ 32) input_changes.onFocus = /*onFocus*/ ctx[5]; 20555 if (dirty & /*onBlur*/ 64) input_changes.onBlur = /*onBlur*/ ctx[6]; 20556 input.$set(input_changes); 20557 }, 20558 i(local) { 20559 if (current) return; 20560 transition_in(label_1.$$.fragment, local); 20561 transition_in(input.$$.fragment, local); 20562 current = true; 20563 }, 20564 o(local) { 20565 transition_out(label_1.$$.fragment, local); 20566 transition_out(input.$$.fragment, local); 20567 current = false; 20568 }, 20569 d(detaching) { 20570 if (detaching) { 20571 detach(t); 20572 } 20573 20574 destroy_component(label_1, detaching); 20575 destroy_component(input, detaching); 20576 } 20577 }; 20578 } 20579 20580 function create_fragment$D(ctx) { 20581 let div; 20582 let t; 20583 let current; 20584 let if_block0 = !/*showInput*/ ctx[7] && create_if_block_1$k(ctx); 20585 let if_block1 = (/*accountMembershipCode*/ ctx[2] || /*showInput*/ ctx[7]) && create_if_block$u(ctx); 20586 20587 return { 20588 c() { 20589 div = element("div"); 20590 if (if_block0) if_block0.c(); 20591 t = space(); 20592 if (if_block1) if_block1.c(); 20593 attr(div, "class", "zephr-form-account-code-container svelte-1hhep92"); 20594 }, 20595 m(target, anchor) { 20596 insert(target, div, anchor); 20597 if (if_block0) if_block0.m(div, null); 20598 append(div, t); 20599 if (if_block1) if_block1.m(div, null); 20600 current = true; 20601 }, 20602 p(ctx, [dirty]) { 20603 if (!/*showInput*/ ctx[7]) { 20604 if (if_block0) { 20605 if_block0.p(ctx, dirty); 20606 20607 if (dirty & /*showInput*/ 128) { 20608 transition_in(if_block0, 1); 20609 } 20610 } else { 20611 if_block0 = create_if_block_1$k(ctx); 20612 if_block0.c(); 20613 transition_in(if_block0, 1); 20614 if_block0.m(div, t); 20615 } 20616 } else if (if_block0) { 20617 group_outros(); 20618 20619 transition_out(if_block0, 1, 1, () => { 20620 if_block0 = null; 20621 }); 20622 20623 check_outros(); 20624 } 20625 20626 if (/*accountMembershipCode*/ ctx[2] || /*showInput*/ ctx[7]) { 20627 if (if_block1) { 20628 if_block1.p(ctx, dirty); 20629 20630 if (dirty & /*accountMembershipCode, showInput*/ 132) { 20631 transition_in(if_block1, 1); 20632 } 20633 } else { 20634 if_block1 = create_if_block$u(ctx); 20635 if_block1.c(); 20636 transition_in(if_block1, 1); 20637 if_block1.m(div, null); 20638 } 20639 } else if (if_block1) { 20640 group_outros(); 20641 20642 transition_out(if_block1, 1, 1, () => { 20643 if_block1 = null; 20644 }); 20645 20646 check_outros(); 20647 } 20648 }, 20649 i(local) { 20650 if (current) return; 20651 transition_in(if_block0); 20652 transition_in(if_block1); 20653 current = true; 20654 }, 20655 o(local) { 20656 transition_out(if_block0); 20657 transition_out(if_block1); 20658 current = false; 20659 }, 20660 d(detaching) { 20661 if (detaching) { 20662 detach(div); 20663 } 20664 20665 if (if_block0) if_block0.d(); 20666 if (if_block1) if_block1.d(); 20667 } 20668 }; 20669 } 20670 20671 function instance$D($$self, $$props, $$invalidate) { 20672 let { formKey } = $$props; 20673 let { label } = $$props; 20674 let { placeholder } = $$props; 20675 let { accountMembershipCode } = $$props; 20676 let { error = null } = $$props; 20677 let { onChange } = $$props; 20678 let { onFocus } = $$props; 20679 let { onBlur } = $$props; 20680 let showInput = false; 20681 const id = `zephr-form-account-code-${formKey}`; 20682 const linkClick_handler = () =>
20682 $$invalidate(7, showInput = true); 20683 const change_handler = value => onChange(value.detail); 20684 20685 $$self.$$set = $$props => { 20686 if ('formKey' in $$props) $$invalidate(9, formKey = $$props.formKey); 20687 if ('label' in $$props) $$invalidate(0, label = $$props.label); 20688 if ('placeholder' in $$props) $$invalidate(1, placeholder = $$props.placeholder); 20689 if ('accountMembershipCode' in $$props) $$invalidate(2, accountMembershipCode = $$props.accountMembershipCode); 20690 if ('error' in $$props) $$invalidate(3, error = $$props.error); 20691 if ('onChange' in $$props) $$invalidate(4, onChange = $$props.onChange); 20692 if ('onFocus' in $$props) $$invalidate(5, onFocus = $$props.onFocus); 20693 if ('onBlur' in $$props) $$invalidate(6, onBlur = $$props.onBlur); 20694 }; 20695 20696 return [ 20697 label, 20698 placeholder, 20699 accountMembershipCode, 20700 error, 20701 onChange, 20702 onFocus, 20703 onBlur, 20704 showInput, 20705 id, 20706 formKey, 20707 linkClick_handler, 20708 change_handler 20709 ]; 20710 } 20711 20712 class AccountMembershipCode extends SvelteComponent { 20713 constructor(options) { 20714 super(); 20715 20716 init(this, options, instance$D, create_fragment$D, safe_not_equal, { 20717 formKey: 9, 20718 label: 0, 20719 placeholder: 1, 20720 accountMembershipCode: 2, 20721 error: 3, 20722 onChange: 4, 20723 onFocus: 5, 20724 onBlur: 6 20725 }); 20726 } 20727 } 20728 20729 const factory$a = { 20730 matches: (sectionElement) => sectionElement.type === elementTypes.ACCOUNT_MEMBERSHIP_CODE, 20731 create: (form, formState, formActions, elementConfig) => ({ 20732 component: AccountMembershipCode, 20733 props: { 20734 formKey: form.uniqueKey, 20735 label: elementConfig.label, 20736 placeholder: elementConfig.placeholder, 20737 accountMembershipCode: formState.accountMembershipCode, 20738 onChange: (value) => { 20739 formActions.updateFormState({ 20740 accountMembershipCode: value, 20741 serverErrors: [], 20742 }); 20743 logDataLayerEvent(form, 'zephr_form_input_change', { 20744 inputName: `zephr-form-account-code-${form.uniqueKey}`, 20745 sectionId: formState.currentSection.type, 20746 field: 'account-code' 20747 }); 20748 }, 20749 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 20750 inputName: `zephr-form-account-code-${form.uniqueKey}`, 20751 sectionId: formState.currentSection.type, 20752 field: 'account-code' 20753 }), 20754 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 20755 inputName: `zephr-form-account-code-${form.uniqueKey}`, 20756 sectionId: formState.currentSection.type, 20757 field: 'account-code' 20758 }), 20759 } 20760 }) 20761 }; 20762 20763 /* src/components/elements/invitation/Invitation.svelte generated by Svelte v4.2.12 */ 20764 20765 function create_if_block$t(ctx) { 20766 let div; 20767 let successmessage; 20768 let current; 20769 successmessage = new SuccessMessage({ props: { text: /*linkSentText*/ ctx[4] } }); 20770 20771 return { 20772 c() { 20773 div = element("div"); 20774 create_component(successmessage.$$.fragment); 20775 attr(div, "class", "zephr-form-invitation-success-message svelte-1qkv7d3"); 20776 }, 20777 m(target, anchor) { 20778 insert(target, div, anchor); 20779 mount_component(successmessage, div, null); 20780 current = true; 20781 }, 20782 p(ctx, dirty) { 20783 const successmessage_changes = {}; 20784 if (dirty & /*linkSentText*/ 16) successmessage_changes.text = /*linkSentText*/ ctx[4]; 20785 successmessage.$set(successmessage_changes); 20786 }, 20787 i(local) { 20788 if (current) return; 20789 transition_in(successmessage.$$.fragment, local); 20790 current = true; 20791 }, 20792 o(local) { 20793 transition_out(successmessage.$$.fragment, local); 20794 current = false; 20795 }, 20796 d(detaching) { 20797 if (detaching) { 20798 detach(div); 20799 } 20800 20801 destroy_component(successmessage); 20802 } 20803 }; 20804 } 20805 20806 function create_fragment$C(ctx) { 20807 let div4; 20808 let div0; 20809 let t0; 20810 let t1; 20811 let div1; 20812 let t2; 20813 let t3; 20814 let label_1; 20815 let t4; 20816 let div3; 20817 let div2; 20818 let input; 20819 let t5; 20820 let button; 20821 let t6; 20822 let current; 20823
20824 label_1 = new Label({ 20825 props: { 20826 forInput: /*id*/ ctx[14], 20827 label: /*label*/ ctx[2], 20828 isPaymentForm: /*isPaymentForm*/ ctx[11] 20829 } 20830 }); 20831 20832 input = new Input({ 20833 props: { 20834 disabled: /*isBusy*/ ctx[10], 20835 required: true, 20836 id: /*id*/ ctx[14], 20837 value: /*invitationEmail*/ ctx[7] ?? '', 20838 errorMessage: /*error*/ ctx[9], 20839 isPaymentForm: /*isPaymentForm*/ ctx[11], 20840 onFocus: /*onFocus*/ ctx[12], 20841 onBlur: /*onBlur*/ ctx[13] 20842 } 20843 }); 20844 20845 input.$on("change", /*change_handler*/ ctx[16]); 20846 20847 button = new Button({ 20848 props: { 20849 disabled: !isValidEmail(/*invitationEmail*/ ctx[7]) || /*isBusy*/ ctx[10], 20850 text: /*btnText*/ ctx[3], 20851 onClick: /*onSendInviteClick*/ ctx[5], 20852 noMargin: true, 20853 inputHeight: true, 20854 aside: true, 20855 isPaymentForm: /*isPaymentForm*/ ctx[11] 20856 } 20857 }); 20858 20859 let if_block = /*invitationSent*/ ctx[8] && create_if_block$t(ctx); 20860 20861 return { 20862 c() { 20863 div4 = element("div"); 20864 div0 = element("div"); 20865 t0 = text(/*title*/ ctx[0]); 20866 t1 = space(); 20867 div1 = element("div"); 20868 t2 = text(/*description*/ ctx[1]); 20869 t3 = space(); 20870 create_component(label_1.$$.fragment); 20871 t4 = space(); 20872 div3 = element("div"); 20873 div2 = element("div"); 20874 create_component(input.$$.fragment); 20875 t5 = space(); 20876 create_component(button.$$.fragment); 20877 t6 = space(); 20878 if (if_block) if_block.c(); 20879 attr(div0, "class", "zephr-form-invitation-title svelte-1qkv7d3"); 20880 attr(div1, "class", "zephr-form-invitation-description"); 20881 attr(div2, "class", "zephr-form-invitation-input-container svelte-1qkv7d3"); 20882 attr(div3, "class", "zephr-form-relative-container zephr-form-invitation-email svelte-1qkv7d3"); 20883 toggle_class(div3, "zephr-payment-form-relative-container", /*isPaymentForm*/ ctx[11]); 20884 attr(div4, "class", "zephr-form-invitation-container svelte-1qkv7d3"); 20885 }, 20886 m(target, anchor) { 20887 insert(target, div4, anchor); 20888 append(div4, div0); 20889 append(div0, t0); 20890 append(div4, t1); 20891 append(div4, div1); 20892 append(div1, t2); 20893 append(div4, t3); 20894 mount_component(label_1, div4, null); 20895 append(div4, t4); 20896 append(div4, div3); 20897 append(div3, div2); 20898 mount_component(input, div2, null); 20899 append(div3, t5); 20900 mount_component(button, div3, null); 20901 append(div4, t6); 20902 if (if_block) if_block.m(div4, null); 20903 current = true; 20904 }, 20905 p(ctx, [dirty]) { 20906 if (!current || dirty & /*title*/ 1) set_data(t0, /*title*/ ctx[0]); 20907 if (!current || dirty & /*description*/ 2) set_data(t2, /*description*/ ctx[1]); 20908 const label_1_changes = {}; 20909 if (dirty & /*label*/ 4) label_1_changes.label = /*label*/ ctx[2]; 20910 if (dirty & /*isPaymentForm*/ 2048) label_1_changes.isPaymentForm = /*isPaymentForm*/ ctx[11]; 20911 label_1.$set(label_1_changes); 20912 const input_changes = {}; 20913 if (dirty & /*isBusy*/ 1024) input_changes.disabled = /*isBusy*/ ctx[10]; 20914 if (dirty & /*invitationEmail*/ 128) input_changes.value = /*invitationEmail*/ ctx[7] ?? ''; 20915 if (dirty & /*error*/ 512) input_changes.errorMessage = /*error*/ ctx[9]; 20916 if (dirty & /*isPaymentForm*/ 2048) input_changes.isPaymentForm = /*isPaymentForm*/ ctx[11]; 20917 if (dirty & /*onFocus*/ 4096) input_changes.onFocus = /*onFocus*/ ctx[12]; 20918 if (dirty & /*onBlur*/ 8192) input_changes.onBlur = /*onBlur*/ ctx[13]; 20919 input.$set(input_changes); 20920 const button_changes = {}; 20921 if (dirty & /*invitationEmail, isBusy*/ 1152) button_changes.disabled = !isValidEmail(/*invitationEmail*/ ctx[7]) || /*isBusy*/ ctx[10]; 20922 if (dirty & /*btnText*/ 8) button_changes.text = /*btnText*/ ctx[3]; 20923 if (dirty & /*onSendInviteClick*/ 32) button_changes.onClick = /*onSendInviteClick*/ ctx[5]; 20924 if (dirty & /*isPaymentForm*/ 2048) button_changes.isPaymentForm = /*isPaymentForm*/ ctx[11]; 20925 button.$set(button_changes); 20926 20927 if (!current || dirty & /*isPaymentForm*/ 2048) { 20928 toggle_class(div3, "zephr-payment-form-relative-container", /*isPaymentForm*/ ctx[11]); 20929 } 20930 20931 if (/*invitationSent*/ ctx[8]) { 20932 if (if_block) { 20933 if_block.p(ctx, dirty); 20934
20935 if (dirty & /*invitationSent*/ 256) { 20936 transition_in(if_block, 1); 20937 } 20938 } else { 20939 if_block = create_if_block$t(ctx); 20940 if_block.c(); 20941 transition_in(if_block, 1); 20942 if_block.m(div4, null); 20943 } 20944 } else if (if_block) { 20945 group_outros(); 20946 20947 transition_out(if_block, 1, 1, () => { 20948 if_block = null; 20949 }); 20950 20951 check_outros(); 20952 } 20953 }, 20954 i(local) { 20955 if (current) return; 20956 transition_in(label_1.$$.fragment, local); 20957 transition_in(input.$$.fragment, local); 20958 transition_in(button.$$.fragment, local); 20959 transition_in(if_block); 20960 current = true; 20961 }, 20962 o(local) { 20963 transition_out(label_1.$$.fragment, local); 20964 transition_out(input.$$.fragment, local); 20965 transition_out(button.$$.fragment, local); 20966 transition_out(if_block); 20967 current = false; 20968 }, 20969 d(detaching) { 20970 if (detaching) { 20971 detach(div4); 20972 } 20973 20974 destroy_component(label_1); 20975 destroy_component(input); 20976 destroy_component(button); 20977 if (if_block) if_block.d(); 20978 } 20979 }; 20980 } 20981 20982 function instance$C($$self, $$props, $$invalidate) { 20983 let { formKey } = $$props; 20984 let { title } = $$props; 20985 let { description } = $$props; 20986 let { label } = $$props; 20987 let { btnText } = $$props; 20988 let { linkSentText } = $$props; 20989 let { onSendInviteClick } = $$props; 20990 let { onChange } = $$props; 20991 let { invitationEmail } = $$props; 20992 let { invitationSent } = $$props; 20993 let { error = null } = $$props; 20994 let { isBusy } = $$props; 20995 let { isPaymentForm = false } = $$props; 20996 let { onFocus } = $$props; 20997 let { onBlur } = $$props; 20998 const id = `zephr-form-invitation-email-${formKey}`; 20999 const change_handler = ({ detail }) => onChange(detail); 21000 21001 $$self.$$set = $$props => {
21002 if ('formKey' in $$props) $$invalidate(15, formKey = $$props.formKey); 21003 if ('title' in $$props) $$invalidate(0, title = $$props.title); 21004 if ('description' in $$props) $$invalidate(1, description = $$props.description); 21005 if ('label' in $$props) $$invalidate(2, label = $$props.label); 21006 if ('btnText' in $$props) $$invalidate(3, btnText = $$props.btnText); 21007 if ('linkSentText' in $$props) $$invalidate(4, linkSentText = $$props.linkSentText); 21008 if ('onSendInviteClick' in $$props) $$invalidate(5, onSendInviteClick = $$props.onSendInviteClick); 21009 if ('onChange' in $$props) $$invalidate(6, onChange = $$props.onChange); 21010 if ('invitationEmail' in $$props) $$invalidate(7, invitationEmail = $$props.invitationEmail); 21011 if ('invitationSent' in $$props) $$invalidate(8, invitationSent = $$props.invitationSent); 21012 if ('error' in $$props) $$invalidate(9, error = $$props.error); 21013 if ('isBusy' in $$props) $$invalidate(10, isBusy = $$props.isBusy); 21014 if ('isPaymentForm' in $$props) $$invalidate(11, isPaymentForm = $$props.isPaymentForm);
21015 if ('onFocus' in $$props) $$invalidate(12, onFocus = $$props.onFocus); 21016 if ('onBlur' in $$props) $$invalidate(13, onBlur = $$props.onBlur); 21017 }; 21018 21019 return [ 21020 title, 21021 description, 21022 label, 21023 btnText, 21024 linkSentText, 21025 onSendInviteClick, 21026 onChange, 21027 invitationEmail, 21028 invitationSent, 21029 error, 21030 isBusy, 21031 isPaymentForm, 21032 onFocus, 21033 onBlur, 21034 id, 21035 formKey, 21036 change_handler 21037 ]; 21038 } 21039 21040 class Invitation extends SvelteComponent { 21041 constructor(options) { 21042 super(); 21043 21044 init(this, options, instance$C, create_fragment$C, safe_not_equal, { 21045 formKey: 15, 21046 title: 0, 21047 description: 1, 21048 label: 2, 21049 btnText: 3, 21050 linkSentText: 4, 21051 onSendInviteClick: 5, 21052 onChange: 6, 21053 invitationEmail: 7, 21054 invitationSent: 8, 21055 error: 9, 21056 isBusy: 10, 21057 isPaymentForm: 11, 21058 onFocus: 12, 21059 onBlur: 13 21060 }); 21061 } 21062 } 21063 21064 const mapToError = (e) => { 21065 if (e?.status === 403 && e?.message?.includes('you do not have access to')) { 21066 return ServerError.INVITATION_FAILED_NO_PRODUCT_ACCESS; 21067 } 21068 if (e?.status === 400 && e?.message?.includes('Invalid recipient email')) { 21069 return ServerError.INVITATION_FAILED_INVALID_EMAIL; 21070 } 21071 if (e?.status === 400 && e?.message?.includes('reached the configured limit')) { 21072 return ServerError.INVITATION_FAILED_LIMIT_REACHED; 21073 } 21074 if (e?.status === 409) { 21075 return ServerError.INVITATION_FAILED_DUPLICATE_EMAIL; 21076 } 21077 return ServerError.INVITATION_FAILED_UNKNOWN; 21078 }; 21079 const getUserProfile = (formActions) => request('blaize/profile', { 21080 method: "GET" 21081 }, formActions) 21082 .then(response => response.json()); 21083 const convertMapping = (mapping, profile) => (mapping ?? []).reduce((acc, curr) => { 21084 const value = profile[curr.attrSlug]; 21085 return { ...acc, [curr.fieldName]: value }; 21086 }, {}); 21087 const sendInvitationEmail = async (form, formState, formActions) => { 21088 let profile; 21089 if (formState.userExists) { 21090 profile = await getUserProfile(formActions); 21091 } 21092 else { 21093 profile = formState.userAttributes; 21094 } 21095 const profileConverted = convertMapping(formConfigAs(form).invitationMetadata.mapping, profile); 21096 const response = await request('zephr/public/products/v1/shares/invitations/emails', { 21097 method: "POST", 21098 bodyObject: { 21099 product_id: formState.paymentOption.productId, 21100 email_address: formState.invitationEmail, 21101 base_url: formConfigAs(form).invitationMetadata.url, 21102 meta_data: profileConverted, 21103 } 21104 }, formActions); 21105 const responseJson = (await response.json()); 21106 if (response.ok) { 21107 formActions.updateFormState({ 21108 invitationSent: true, 21109 invitationEmail: '', 21110 }); 21111 setTimeout(() => { 21112 formActions.updateFormState({ 21113 invitationSent: false, 21114 }); 21115 }, 3000); 21116 } 21117 else { 21118 const serverError = mapToError(responseJson); 21119 logDataLayerEvent(form, 'zephr_form_error', { 21120 error: ServerError[serverError], 21121 }); 21122 formActions.updateFormState({ 21123 invitationSent: false, 21124 serverErrors: [serverError], 21125 }); 21126 } 21127 }; 21128 21129 const factory$9 = { 21130 matches: (sectionElement) => sectionElement.type === elementTypes.INVITATION, 21131 create: (form, formState, formActions, elementConfig) => { 21132 if (formState.paymentOption?.product_sharing_limit > 0) { 21133 return { 21134 component: Invitation, 21135 props: { 21136 formKey: form.uniqueKey, 21137 title: elementConfig.title, 21138 description: elementConfig.description, 21139 label: elementConfig.label, 21140 btnText: elementConfig.btnText, 21141 linkSentText: elementConfig.linkSentText, 21142 onSendInviteClick: () => { 21143 logDataLayerEvent(form, 'zephr_form_button_press', { 21144 sectionId: formState.currentSection.type, 21145 buttonType: 'SUBMIT' 21146 }); 21147 void sendInvitationEmail(form, formState, formActions); 21148 }, 21149 onChange: (value) => { 21150 formActions.updateFormState({
21151 invitationEmail: value, 21152 serverErrors: [], 21153 }); 21154 logDataLayerEvent(form, 'zephr_form_input_change', { 21155 inputName: `zephr-form-invitation-email-${form.uniqueKey}`, 21156 sectionId: formState.currentSection.type, 21157 field: 'invitation-email' 21158 }); 21159 }, 21160 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 21161 inputName: `zephr-form-invitation-email-${form.uniqueKey}`, 21162 sectionId: formState.currentSection.type, 21163 field: 'invitation-email' 21164 }), 21165 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 21166 inputName: `zephr-form-invitation-email-${form.uniqueKey}`, 21167 sectionId: formState.currentSection.type, 21168 field: 'invitation-email' 21169 }), 21170 invitationEmail: formState.invitationEmail, 21171 invitationSent: formState.invitationSent, 21172 isBusy: formState.isBusy, 21173 isPaymentForm: form.formType === FormType.PAYMENT, 21174 } 21175 }; 21176 } 21177 return { 21178 component: null, 21179 props: {}, 21180 }; 21181 } 21182 }; 21183 21184 /* src/components/elements/payment/EmptyPreLoader.svelte generated by Svelte v4.2.12 */ 21185 21186 class EmptyPreLoader extends SvelteComponent { 21187 constructor(options) { 21188 super(); 21189 init(this, options, null, null, safe_not_equal, {}); 21190 } 21191 } 21192 21193 const factory$8 = { 21194 matches: (sectionElement) => sectionElement.type === elementTypes.PAYMENT_PRE_LOADER, 21195 create: (form, _, __) => { 21196 const paymentProvider = paymentProviderFor(form.organisationConfiguration.paymentProvider); 21197 if (paymentProvider.preLoaderComponent == null) { 21198 return { 21199 component: EmptyPreLoader, 21200 props: {}, 21201 }; 21202 } 21203 let component; 21204 const formConfig = formConfigAs(form); 21205 if (form.formType === FormType.CHANGE_SUBSCRIPTION && formConfig.allowNoPaymentMethodUpgrade) { 21206 const environment = formConfig.paymentOptions?.[0]?.virtualEnvironment || 'live'; 21207 component = paymentProvider.preLoaderComponent(formConfig.paymentMethodSetupFormConfig[environment]); 21208 } 21209 else { 21210 component = paymentProvider.preLoaderComponent(formConfig.paymentProviderFormConfig); 21211 } 21212 return { 21213 component, 21214 props: { 21215 onMountCallback: () => paymentProvider.preLoader() 21216 }, 21217 }; 21218 } 21219 }; 21220 21221 /* src/components/elements/templateComponent/TemplateComponent.svelte generated by Svelte v4.2.12 */ 21222 21223 function create_fragment$B(ctx) { 21224 let div; 21225 21226 return { 21227 c() { 21228 div = element("div"); 21229 }, 21230 m(target, anchor) { 21231 insert(target, div, anchor); 21232 div.innerHTML = /*html*/ ctx[0]; 21233 }, 21234 p(ctx, [dirty]) { 21235 if (dirty & /*html*/ 1) div.innerHTML = /*html*/ ctx[0]; }, 21236 i: noop, 21237 o: noop, 21238 d(detaching) { 21239 if (detaching) { 21240 detach(div); 21241 } 21242 } 21243 }; 21244 } 21245 21246 function instance$B($$self, $$props, $$invalidate) { 21247 let { html } = $$props; 21248 21249 $$self.$$set = $$props => {
21250 if ('html' in $$props) $$invalidate(0, html = $$props.html); 21251 }; 21252 21253 return [html]; 21254 } 21255 21256 class TemplateComponent extends SvelteComponent { 21257 constructor(options) { 21258 super(); 21259 init(this, options, instance$B, create_fragment$B, safe_not_equal, { html: 0 }); 21260 } 21261 } 21262 21263 const randomId = () => (Math.random() + 1).toString(36).substring(7); 21264 21265 // Unique ID for this instance of this form being rendered. 21266 const formInstanceId = randomId(); 21267 // Flatten the extra scope variables from DO and remove null values, as for null values the default 21268 // should be used 21269 const extractDoScopeVariables = (formState) => { 21270 if (!formState.dynamicOfferResult) { 21271 return {}; 21272 } 21273 return Object.entries({ 21274 tagline: formState.dynamicOfferResult.tagline, 21275 ...(formState.dynamicOfferResult.custom ?? {}) 21276 }).reduce((acc, [key, value]) => { 21277 if (key && value != null) { 21278 acc[key] = value; 21279 } 21280 return acc; 21281 }, {}); 21282 }; 21283 const renderTemplateComponent = (form, formState, formActions, templateElement) => { 21284 // Load the resolved template values 21285 const templateContent = (form.resolvedComponentTemplates ?? []).find(c => c.id === templateElement.templateId); 21286 if (!templateContent) { 21287 console.warn(`No component template found for id '${templateElement.templateId}'`); 21288 return ''; 21289 } 21290 // Pre-render 21291 const templateForm = prepareForm(form, formState, formActions, templateElement, templateContent); 21292 const preRenderScope = { 21293 ...(templateDefaultVariableScope(templateContent, false)), 21294 ...(templateElement.templateValues ?? {}), 21295 ...(extractDoScopeVariables(formState)), 21296 zephrForm: templateForm, 21297 zephrOutcomeId: form.outcomeId, 21298 zephrRuleId: form.ruleId, 21299 }; 21300 const scriptResult = runTemplateScript(form, formState, templateElement, templateForm, templateContent.preRenderScript, preRenderScope); 21301 // Assemble pre-render results for template rendering 21302 const scope = { 21303 ...preRenderScope, 21304 ...(scriptResult.scope ?? {}) 21305 }; 21306 templateForm.actions = scriptResult.actions ?? {}; 21307 attachFormRefToWindow(templateForm); 21308 // Render the template 21309 try { 21310 const html = mustache.render(` 21311 ${templateContent.css ? `<style>${templateContent.css}</style>` : ''} 21312 ${templateContent.html ?? ""} 21313 `, scope); 21314 return html; 21315 } 21316 catch (e) { 21317 console.error('Error rendering mustache template', e); 21318 return ''; 21319 } 21320 }; 21321 const templateDefaultVariableScope = (template, paymentOptionLevel) => (template.templateVariables ?? []).reduce((prev, variable) => (variable.defaultValue == null || variable.paymentOptionLevel != paymentOptionLevel ? prev : { 21322 ...prev, 21323 [variable.key]: variable.defaultValue 21324 }), {}); 21325 const attachFormRefToWindow = (templateForm) => { 21326 if (!window.Zephr) { 21327 window.Zephr = {}; 21328 } 21329 if (!window.Zephr.forms) { 21330 window.Zephr.forms = {}; 21331 } 21332 window.Zephr.forms[templateForm.formInstanceId] = templateForm; 21333 }; 21334 const runTemplateScript = (form, formState, templateElement, templateForm, script, scope) => { 21335 if (!script) { 21336 return { 21337 scope: {}, 21338 actions: {} 21339 }; 21340 } 21341 try { 21342 // eslint-disable-next-line @typescript-eslint/no-implied-eval 21343 const templateScript = new Function('state', 'form', 'scope', script); 21344 const customState = (formState.customComponentState ?? {})[templateElement.id ?? '_']; 21345 const customStateWithDo = formState.dynamicOfferResult ? { 21346 ...(customState ?? {}), 21347 dynamicOfferResult: filterChangeSubDynamicOfferResponse(formState.dynamicOfferResult, form, formState) 21348 } : customState; 21349 return templateScript(customStateWithDo, templateForm, scope); 21350 } 21351 catch (e) { 21352 console.error('Error evaluating pre-render script', e); 21353 return { 21354 scope: { 21355 'error': e 21356 }, 21357 actions: {} 21358 }; 21359 } 21360 }; 21361 const setState = (formState, formActions, elementId) => (state) => { 21362 formActions.updateFormState({ 21363 customComponentState: { 21364 ...(formState.customComponentState ?? {}), 21365 [elementId]: { 21366 ...((formState.customComponentState ?? {})[elementId] ?? {}), 21367 ...(state ?? {}) 21368 } 21369 } 21370 }); 21371 }; 21372 const selectPaymentOption = (form, formActions, formState, isDynamicOffer) => (productId, slug) => { 21373 let paymentOption; 21374 if (isDynamicOffer) { 21375 const product = formState 21376 .dynamicOfferResult.products.find((prod) => prod.id === productId); 21377 const paymentPlan = product 21378 ?.paymentPlans.find(plan => plan.planId === slug); 21379 paymentOption = { 21380 slug: paymentPlan.planId, 21381 productId: product.id, 21382 label: product.label,
21383 currencyCode: paymentPlan.charges[0].prices[0].currency, 21384 terms: paymentPlan.additionalPlanData?.terms, 21385 termsAndConditions: paymentPlan.additionalPlanData?.termsAndConditions, 21386 triggerOffsets: paymentPlan.additionalPlanData?.triggerOffsets, 21387 changeSubscriptionTriggerOffsets: paymentPlan.additionalPlanData?.changeSubscriptionTriggerOffsets, 21388 autoRenewConfig: paymentPlan.additionalPlanData?.autoRenewConfig || 'auto_renew', 21389 autoRenewToggleLabel: paymentPlan.additionalPlanData?.autoRenewToggleLabel 21390 }; 21391 } 21392 else { 21393 paymentOption = formConfigAs(form) 21394 .paymentOptions 21395 ?.find(o => o.productId === productId && o.slug === slug); 21396 } 21397 if (!paymentOption) { 21398 console.warn(`No payment option exists for ${productId} ${slug}.`); 21399 return; 21400 } 21401 const paymentOptionKey = `${paymentOption.productId}-${paymentOption.slug}`; 21402 const updateState = { 21403 paymentOption: paymentOption, 21404 serverErrors: [], 21405 billingAddress: { 21406 country: null, 21407 postalCode: null, 21408 } 21409 }; 21410 // Only initialize auto-renew state for payment options with custom_toggle config 21411 if (paymentOption.autoRenewConfig === 'custom_toggle') { 21412 updateState.paymentOptionAutoRenew = { 21413 ...formState.paymentOptionAutoRenew, 21414 [paymentOptionKey]: paymentOption.terms?.autoRenew ?? false 21415 }; 21416 } 21417 formActions.updateFormState(updateState); 21418 if (form.organisationConfiguration.trackFormDataLayerEvents) { 21419 logDataLayerEvent(form, 'zephr_form_button_press', { 21420 sectionId: formState.currentSection.type, 21421 buttonType: 'SUBMIT' 21422 }); 21423 } 21424 formActions.completeSection(); 21425 }; 21426 const prepareForm = (form, formState, formActions, templateElement, template) => { 21427 const isDynamicOffer = !!formConfigAs(form).dynamicOffer?.id; 21428 const paymentOptions = (formConfigAs(form).paymentOptions ?? []).map((p, i) => ({ 21429 slug: p.slug, 21430 productId: p.productId, 21431 label: p.label, 21432 price: p.price, 21433 currencyCode: p.currencyCode, 21434 formattedPrice: formatCurrency(p.price, p.currencyCode), 21435 index: i, 21436 ...(templateDefaultVariableScope(template, true)), 21437 ...(p.templateValues ?? {}), 21438 })); 21439 return { 21440 formId: form.id, 21441 formInstanceId, 21442 paymentOptions: paymentOptions, 21443 ref: `window.Zephr.forms['${formInstanceId}']`, 21444 setState: setState(formState, formActions, templateElement.id ?? '_'), 21445 getState: () => formActions.getFormState(), 21446 selectPaymentOption: selectPaymentOption(form, formActions, formState, isDynamicOffer) 21447 }; 21448 }; 21449 21450 const factory$7 = { 21451 matches: (sectionElement) => sectionElement.type === elementTypes.TEMPLATE_COMPONENT, 21452 create: (form, formState, formActions, elementConfig) => { 21453 const renderedHtml = renderTemplateComponent(form, formState, formActions, elementConfig); 21454 return { 21455 component: TemplateComponent, 21456 props: { 21457 html: renderedHtml 21458 } 21459 }; 21460 } 21461 }; 21462 21463 /* src/components/elements/subscriptionSelect/SubscriptionOption.svelte generated by Svelte v4.2.12 */ 21464 21465 function create_if_block_3$8(ctx) { 21466 let div; 21467 let h3; 21468 let t_value = /*subscription*/ ctx[0].planLabel + ""; 21469 let t; 21470 21471 return { 21472 c() { 21473 div = element("div"); 21474 h3 = element("h3"); 21475 t = text(t_value); 21476 attr(div, "class", "plan-label"); 21477 }, 21478 m(target, anchor) { 21479 insert(target, div, anchor); 21480 append(div, h3); 21481 append(h3, t); 21482 }, 21483 p(ctx, dirty) { 21484 if (dirty & /*subscription*/ 1 && t_value !== (t_value = /*subscription*/ ctx[0].planLabel + "")) set_data(t, t_value); 21485 }, 21486 d(detaching) { 21487 if (detaching) { 21488 detach(div); 21489 } 21490 } 21491 }; 21492 } 21493 21494 // (26:6) {#if subscription.amount && amountLabel} 21495 function create_if_block_2$c(ctx) { 21496 let hr; 21497 let t0; 21498 let div2; 21499 let div0; 21500 let t1; 21501 let t2; 21502 let div1; 21503 let t3_value = /*subscription*/ ctx[0].amount + ""; 21504 let t3; 21505 21506 return { 21507 c() { 21508 hr = element("hr"); 21509 t0 = space(); 21510 div2 = element("div"); 21511 div0 = element("div"); 21512 t1 = text(/*amountLabel*/ ctx[2]); 21513 t2 = space(); 21514 div1 = element("div"); 21515 t3 = text(t3_value); 21516 attr(hr, "class", "svelte-1gr56ov"); 21517 attr(div0, "class", "info-label svelte-1gr56ov"); 21518 attr(div1, "class", "info svelte-1gr56ov"); 21519 attr(div2, "class", "info-row svelte-1gr56ov"); 21520 }, 21521 m(target, anchor) {
21522 insert(target, hr, anchor); 21523 insert(target, t0, anchor); 21524 insert(target, div2, anchor); 21525 append(div2, div0); 21526 append(div0, t1); 21527 append(div2, t2); 21528 append(div2, div1); 21529 append(div1, t3); 21530 }, 21531 p(ctx, dirty) { 21532 if (dirty & /*amountLabel*/ 4) set_data(t1, /*amountLabel*/ ctx[2]); 21533 if (dirty & /*subscription*/ 1 && t3_value !== (t3_value = /*subscription*/ ctx[0].amount + "")) set_data(t3, t3_value); 21534 }, 21535 d(detaching) { 21536 if (detaching) { 21537 detach(hr); 21538 detach(t0); 21539 detach(div2); 21540 } 21541 } 21542 }; 21543 } 21544 21545 // (37:4) {#if subscription.nextBillingTime && nextBillingDateLabel} 21546 function create_if_block_1$j(ctx) { 21547 let hr; 21548 let t0; 21549 let div2; 21550 let div0; 21551 let t1; 21552 let t2; 21553 let div1; 21554 let t3_value = /*subscription*/ ctx[0].nextBillingTime + ""; 21555 let t3; 21556 21557 return { 21558 c() { 21559 hr = element("hr"); 21560 t0 = space(); 21561 div2 = element("div"); 21562 div0 = element("div"); 21563 t1 = text(/*nextBillingDateLabel*/ ctx[3]); 21564 t2 = space(); 21565 div1 = element("div"); 21566 t3 = text(t3_value); 21567 attr(hr, "class", "svelte-1gr56ov"); 21568 attr(div0, "class", "info-label svelte-1gr56ov"); 21569 attr(div1, "class", "info svelte-1gr56ov"); 21570 attr(div2, "class", "info-row svelte-1gr56ov"); 21571 }, 21572 m(target, anchor) { 21573 insert(target, hr, anchor); 21574 insert(target, t0, anchor); 21575 insert(target, div2, anchor); 21576 append(div2, div0); 21577 append(div0, t1); 21578 append(div2, t2); 21579 append(div2, div1); 21580 append(div1, t3); 21581 }, 21582 p(ctx, dirty) { 21583 if (dirty & /*nextBillingDateLabel*/ 8) set_data(t1, /*nextBillingDateLabel*/ ctx[3]); 21584 if (dirty & /*subscription*/ 1 && t3_value !== (t3_value = /*subscription*/ ctx[0].nextBillingTime + "")) set_data(t3, t3_value); 21585 }, 21586 d(detaching) { 21587 if (detaching) { 21588 detach(hr); 21589 detach(t0); 21590 detach(div2); 21591 } 21592 } 21593 }; 21594 } 21595 21596 // (53:6) {#if subscription.cannotBeChanged} 21597 function create_if_block$s(ctx) { 21598 let div; 21599 21600 return { 21601 c() { 21602 div = element("div"); 21603 attr(div, "class", "change-disabled-label svelte-1gr56ov"); 21604 }, 21605 m(target, anchor) { 21606 insert(target, div, anchor); 21607 div.innerHTML = /*noChangePlanMappingMessage*/ ctx[4]; 21608 }, 21609 p(ctx, dirty) { 21610 if (dirty & /*noChangePlanMappingMessage*/ 16) div.innerHTML = /*noChangePlanMappingMessage*/ ctx[4]; }, 21611 d(detaching) { 21612 if (detaching) { 21613 detach(div); 21614 } 21615 } 21616 }; 21617 } 21618 21619 function create_fragment$A(ctx) { 21620 let div3; 21621 let div2; 21622 let div1; 21623 let div0; 21624 let h2; 21625 let t0_value = /*subscription*/ ctx[0].productLabel + ""; 21626 let t0; 21627 let t1; 21628 let t2; 21629 let t3; 21630 let t4; 21631 let button; 21632 let t5; 21633 let div2_style_value; 21634 let current; 21635 let mounted; 21636 let dispose; 21637 let if_block0 = /*subscription*/ ctx[0].planLabel && create_if_block_3$8(ctx); 21638 let if_block1 = /*subscription*/ ctx[0].amount && /*amountLabel*/ ctx[2] && create_if_block_2$c(ctx); 21639 let if_block2 = /*subscription*/ ctx[0].nextBillingTime && /*nextBillingDateLabel*/ ctx[3] && create_if_block_1$j(ctx); 21640 21641 button = new Button({ 21642 props: { 21643 disabled: /*subscription*/ ctx[0].cannotBeChanged, 21644 text: /*selectButtonText*/ ctx[1] ?? "Select", 21645 onClick: /*onSelect*/ ctx[5] 21646 } 21647 }); 21648 21649 let if_block3 = /*subscription*/ ctx[0].cannotBeChanged && create_if_block$s(ctx); 21650 21651 return { 21652 c() { 21653 div3 = element("div"); 21654 div2 = element("div"); 21655 div1 = element("div"); 21656 div0 = element("div"); 21657 h2 = element("h2"); 21658 t0 = text(t0_value); 21659 t1 = space(); 21660 if (if_block0) if_block0.c(); 21661 t2 = space(); 21662 if (if_block1) if_block1.c(); 21663 t3 = space(); 21664 if (if_block2) if_block2.c(); 21665 t4 = space(); 21666 create_component(button.$$.fragment); 21667 t5 = space(); 21668 if (if_block3) if_block3.c(); 21669 attr(div0, "class", "subscription-option-product-label"); 21670 attr(div1, "class", "inner-box svelte-1gr56ov"); 21671 attr(div2, "class", "subscription-option-box"); 21672 attr(div2, "aria-hidden", "true"); 21673 21674 attr(div2, "style", div2_style_value = /*subscription*/ ctx[0].cannotBeChanged 21675 ? "" 21676 : "cursor: pointer;"); 21677 21678 attr(div3, "class", "subscription-option-wrapper svelte-1gr56ov"); 21679 }, 21680 m(target, anchor) {
21681 insert(target, div3, anchor); 21682 append(div3, div2); 21683 append(div2, div1); 21684 append(div1, div0); 21685 append(div0, h2); 21686 append(h2, t0); 21687 append(div1, t1); 21688 if (if_block0) if_block0.m(div1, null); 21689 append(div1, t2); 21690 if (if_block1) if_block1.m(div1, null); 21691 append(div1, t3); 21692 if (if_block2) if_block2.m(div1, null); 21693 append(div1, t4); 21694 mount_component(button, div1, null); 21695 append(div1, t5); 21696 if (if_block3) if_block3.m(div1, null); 21697 current = true; 21698 21699 if (!mounted) { 21700 dispose = listen(div2, "click", self(prevent_default(function () { 21701 if (is_function(/*onSelect*/ ctx[5])) /*onSelect*/ ctx[5].apply(this, arguments); 21702 }))); 21703 21704 mounted = true; 21705 } 21706 }, 21707 p(new_ctx, [dirty]) { 21708 ctx = new_ctx; 21709 if ((!current || dirty & /*subscription*/ 1) && t0_value !== (t0_value = /*subscription*/ ctx[0].productLabel + "")) set_data(t0, t0_value); 21710 21711 if (/*subscription*/ ctx[0].planLabel) { 21712 if (if_block0) { 21713 if_block0.p(ctx, dirty); 21714 } else { 21715 if_block0 = create_if_block_3$8(ctx); 21716 if_block0.c(); 21717 if_block0.m(div1, t2); 21718 } 21719 } else if (if_block0) { 21720 if_block0.d(1); 21721 if_block0 = null; 21722 } 21723 21724 if (/*subscription*/ ctx[0].amount && /*amountLabel*/ ctx[2]) { 21725 if (if_block1) { 21726 if_block1.p(ctx, dirty); 21727 } else { 21728 if_block1 = create_if_block_2$c(ctx); 21729 if_block1.c(); 21730 if_block1.m(div1, t3); 21731 } 21732 } else if (if_block1) { 21733 if_block1.d(1); 21734 if_block1 = null; 21735 } 21736 21737 if (/*subscription*/ ctx[0].nextBillingTime && /*nextBillingDateLabel*/ ctx[3]) { 21738 if (if_block2) { 21739 if_block2.p(ctx, dirty); 21740 } else { 21741 if_block2 = create_if_block_1$j(ctx); 21742 if_block2.c(); 21743 if_block2.m(div1, t4); 21744 } 21745 } else if (if_block2) { 21746 if_block2.d(1); 21747 if_block2 = null; 21748 } 21749 21750 const button_changes = {}; 21751 if (dirty & /*subscription*/ 1) button_changes.disabled = /*subscription*/ ctx[0].cannotBeChanged; 21752 if (dirty & /*selectButtonText*/ 2) button_changes.text = /*selectButtonText*/ ctx[1] ?? "Select"; 21753 if (dirty & /*onSelect*/ 32) button_changes.onClick = /*onSelect*/ ctx[5]; 21754 button.$set(button_changes); 21755 21756 if (/*subscription*/ ctx[0].cannotBeChanged) { 21757 if (if_block3) { 21758 if_block3.p(ctx, dirty); 21759 } else { 21760 if_block3 = create_if_block$s(ctx); 21761 if_block3.c(); 21762 if_block3.m(div1, null); 21763 } 21764 } else if (if_block3) { 21765 if_block3.d(1); 21766 if_block3 = null; 21767 } 21768 21769 if (!current || dirty & /*subscription*/ 1 && div2_style_value !== (div2_style_value = /*subscription*/ ctx[0].cannotBeChanged 21770 ? "" 21771 : "cursor: pointer;")) { 21772 attr(div2, "style", div2_style_value); 21773 } 21774 }, 21775 i(local) { 21776 if (current) return; 21777 transition_in(button.$$.fragment, local); 21778 current = true; 21779 }, 21780 o(local) { 21781 transition_out(button.$$.fragment, local); 21782 current = false; 21783 }, 21784 d(detaching) { 21785 if (detaching) { 21786 detach(div3); 21787 } 21788 21789 if (if_block0) if_block0.d(); 21790 if (if_block1) if_block1.d(); 21791 if (if_block2) if_block2.d(); 21792 destroy_component(button); 21793 if (if_block3) if_block3.d(); 21794 mounted = false; 21795 dispose(); 21796 } 21797 }; 21798 } 21799 21800 function instance$A($$self, $$props, $$invalidate) { 21801 let { subscription } = $$props; 21802 let { selectButtonText } = $$props; 21803 let { amountLabel } = $$props; 21804 let { nextBillingDateLabel } = $$props; 21805 let { noChangePlanMappingMessage } = $$props; 21806 let { onSelect } = $$props; 21807 21808 $$self.$$set = $$props => {
21809 if ('subscription' in $$props) $$invalidate(0, subscription = $$props.subscription); 21810 if ('selectButtonText' in $$props) $$invalidate(1, selectButtonText = $$props.selectButtonText); 21811 if ('amountLabel' in $$props) $$invalidate(2, amountLabel = $$props.amountLabel); 21812 if ('nextBillingDateLabel' in $$props) $$invalidate(3, nextBillingDateLabel = $$props.nextBillingDateLabel); 21813 if ('noChangePlanMappingMessage' in $$props) $$invalidate(4, noChangePlanMappingMessage = $$props.noChangePlanMappingMessage); 21814 if ('onSelect' in $$props) $$invalidate(5, onSelect = $$props.onSelect); 21815 }; 21816 21817 return [ 21818 subscription, 21819 selectButtonText, 21820 amountLabel, 21821 nextBillingDateLabel, 21822 noChangePlanMappingMessage, 21823 onSelect 21824 ]; 21825 } 21826 21827 class SubscriptionOption extends SvelteComponent { 21828 constructor(options) { 21829 super(); 21830 21831 init(this, options, instance$A, create_fragment$A, safe_not_equal, { 21832 subscription: 0, 21833 selectButtonText: 1, 21834 amountLabel: 2, 21835 nextBillingDateLabel: 3, 21836 noChangePlanMappingMessage: 4, 21837 onSelect: 5 21838 }); 21839 } 21840 } 21841 21842 /* src/components/elements/subscriptionSelect/SubscriptionSelect.svelte generated by Svelte v4.2.12 */ 21843 21844 function get_each_context$b(ctx, list, i) { 21845 const child_ctx = ctx.slice(); 21846 child_ctx[8] = list[i]; 21847 return child_ctx; 21848 } 21849 21850 // (13:2) {#if subscriptions == null} 21851 function create_if_block_1$i(ctx) { 21852 let spinner; 21853 let current; 21854 spinner = new Spinner({}); 21855 21856 return { 21857 c() { 21858 create_component(spinner.$$.fragment); 21859 }, 21860 m(target, anchor) { 21861 mount_component(spinner, target, anchor); 21862 current = true; 21863 }, 21864 i(local) { 21865 if (current) return; 21866 transition_in(spinner.$$.fragment, local); 21867 current = true; 21868 }, 21869 o(local) { 21870 transition_out(spinner.$$.fragment, local); 21871 current = false; 21872 }, 21873 d(detaching) { 21874 destroy_component(spinner, detaching); 21875 } 21876 }; 21877 } 21878 21879 // (16:2) {#if subscriptions != null && !subscriptions.length} 21880 function create_if_block$r(ctx) { 21881 let div; 21882 21883 return { 21884 c() { 21885 div = element("div"); 21886 }, 21887 m(target, anchor) { 21888 insert(target, div, anchor); 21889 div.innerHTML = /*noSubscriptionsMessage*/ ctx[0]; 21890 }, 21891 p(ctx, dirty) { 21892 if (dirty & /*noSubscriptionsMessage*/ 1) div.innerHTML = /*noSubscriptionsMessage*/ ctx[0]; }, 21893 d(detaching) { 21894 if (detaching) { 21895 detach(div); 21896 } 21897 } 21898 }; 21899 } 21900 21901 // (21:2) {#each subscriptions ?? [] as subscription} 21902 function create_each_block$b(ctx) { 21903 let subscriptionoption; 21904 let current; 21905 21906 function func() { 21907 return /*func*/ ctx[7](/*subscription*/ ctx[8]); 21908 } 21909 21910 subscriptionoption = new SubscriptionOption({ 21911 props: { 21912 subscription: /*subscription*/ ctx[8], 21913 selectButtonText: /*selectButtonText*/ ctx[5], 21914 noChangePlanMappingMessage: /*noChangePlanMappingMessage*/ ctx[1], 21915 amountLabel: /*amountLabel*/ ctx[3], 21916 nextBillingDateLabel: /*nextBillingDateLabel*/ ctx[4], 21917 onSelect: func 21918 } 21919 }); 21920 21921 return { 21922 c() { 21923 create_component(subscriptionoption.$$.fragment); 21924 }, 21925 m(target, anchor) { 21926 mount_component(subscriptionoption, target, anchor); 21927 current = true; 21928 }, 21929 p(new_ctx, dirty) { 21930 ctx = new_ctx; 21931 const subscriptionoption_changes = {}; 21932 if (dirty & /*subscriptions*/ 4) subscriptionoption_changes.subscription = /*subscription*/ ctx[8]; 21933 if (dirty & /*selectButtonText*/ 32) subscriptionoption_changes.selectButtonText = /*selectButtonText*/ ctx[5]; 21934 if (dirty & /*noChangePlanMappingMessage*/ 2) subscriptionoption_changes.noChangePlanMappingMessage = /*noChangePlanMappingMessage*/ ctx[1]; 21935 if (dirty & /*amountLabel*/ 8) subscriptionoption_changes.amountLabel = /*amountLabel*/ ctx[3]; 21936 if (dirty & /*nextBillingDateLabel*/ 16) subscriptionoption_changes.nextBillingDateLabel = /*nextBillingDateLabel*/ ctx[4]; 21937 if (dirty & /*onSelect, subscriptions*/ 68) subscriptionoption_changes.onSelect = func; 21938 subscriptionoption.$set(subscriptionoption_changes); 21939 }, 21940 i(local) { 21941 if (current) return; 21942 transition_in(subscriptionoption.$$.fragment, local); 21943 current = true; 21944 }, 21945 o(local) { 21946 transition_out(subscriptionoption.$$.fragment, local); 21947 current = false;
21948 }, 21949 d(detaching) { 21950 destroy_component(subscriptionoption, detaching); 21951 } 21952 }; 21953 } 21954 21955 function create_fragment$z(ctx) { 21956 let div; 21957 let t0; 21958 let t1; 21959 let current; 21960 let if_block0 = /*subscriptions*/ ctx[2] == null && create_if_block_1$i(); 21961 let if_block1 = /*subscriptions*/ ctx[2] != null && !/*subscriptions*/ ctx[2].length && create_if_block$r(ctx); 21962 let each_value = ensure_array_like(/*subscriptions*/ ctx[2] ?? []); 21963 let each_blocks = []; 21964 21965 for (let i = 0; i < each_value.length; i += 1) { 21966 each_blocks[i] = create_each_block$b(get_each_context$b(ctx, each_value, i)); 21967 } 21968 21969 const out = i => transition_out(each_blocks[i], 1, 1, () => { 21970 each_blocks[i] = null; 21971 }); 21972 21973 return { 21974 c() { 21975 div = element("div"); 21976 if (if_block0) if_block0.c(); 21977 t0 = space(); 21978 if (if_block1) if_block1.c(); 21979 t1 = space(); 21980 21981 for (let i = 0; i < each_blocks.length; i += 1) { 21982 each_blocks[i].c(); 21983 } 21984 21985 attr(div, "class", "subscription-options-container svelte-bnxnvq"); 21986 }, 21987 m(target, anchor) { 21988 insert(target, div, anchor); 21989 if (if_block0) if_block0.m(div, null); 21990 append(div, t0); 21991 if (if_block1) if_block1.m(div, null); 21992 append(div, t1); 21993 21994 for (let i = 0; i < each_blocks.length; i += 1) { 21995 if (each_blocks[i]) { 21996 each_blocks[i].m(div, null); 21997 } 21998 } 21999 22000 current = true; 22001 }, 22002 p(ctx, [dirty]) { 22003 if (/*subscriptions*/ ctx[2] == null) { 22004 if (if_block0) { 22005 if (dirty & /*subscriptions*/ 4) { 22006 transition_in(if_block0, 1); 22007 } 22008 } else { 22009 if_block0 = create_if_block_1$i(); 22010 if_block0.c(); 22011 transition_in(if_block0, 1); 22012 if_block0.m(div, t0); 22013 } 22014 } else if (if_block0) { 22015 group_outros(); 22016 22017 transition_out(if_block0, 1, 1, () => { 22018 if_block0 = null; 22019 }); 22020 22021 check_outros(); 22022 } 22023 22024 if (/*subscriptions*/ ctx[2] != null && !/*subscriptions*/ ctx[2].length) { 22025 if (if_block1) { 22026 if_block1.p(ctx, dirty); 22027 } else { 22028 if_block1 = create_if_block$r(ctx); 22029 if_block1.c(); 22030 if_block1.m(div, t1); 22031 } 22032 } else if (if_block1) { 22033 if_block1.d(1); 22034 if_block1 = null; 22035 } 22036 22037 if (dirty & /*subscriptions, selectButtonText, noChangePlanMappingMessage, amountLabel, nextBillingDateLabel, onSelect*/ 126) { 22038 each_value = ensure_array_like(/*subscriptions*/ ctx[2] ?? []); 22039 let i; 22040 22041 for (i = 0; i < each_value.length; i += 1) { 22042 const child_ctx = get_each_context$b(ctx, each_value, i); 22043 22044 if (each_blocks[i]) { 22045 each_blocks[i].p(child_ctx, dirty); 22046 transition_in(each_blocks[i], 1); 22047 } else { 22048 each_blocks[i] = create_each_block$b(child_ctx); 22049 each_blocks[i].c(); 22050 transition_in(each_blocks[i], 1); 22051 each_blocks[i].m(div, null); 22052 } 22053 } 22054 22055 group_outros(); 22056 22057 for (i = each_value.length; i < each_blocks.length; i += 1) { 22058 out(i); 22059 } 22060 22061 check_outros(); 22062 } 22063 }, 22064 i(local) { 22065 if (current) return; 22066 transition_in(if_block0); 22067 22068 for (let i = 0; i < each_value.length; i += 1) { 22069 transition_in(each_blocks[i]); 22070 } 22071 22072 current = true; 22073 }, 22074 o(local) { 22075 transition_out(if_block0);
22076 each_blocks = each_blocks.filter(Boolean); 22077 22078 for (let i = 0; i < each_blocks.length; i += 1) { 22079 transition_out(each_blocks[i]); 22080 } 22081 22082 current = false; 22083 }, 22084 d(detaching) { 22085 if (detaching) { 22086 detach(div); 22087 } 22088 22089 if (if_block0) if_block0.d(); 22090 if (if_block1) if_block1.d(); 22091 destroy_each(each_blocks, detaching); 22092 } 22093 }; 22094 } 22095 22096 function instance$z($$self, $$props, $$invalidate) { 22097 let { noSubscriptionsMessage } = $$props; 22098 let { noChangePlanMappingMessage } = $$props; 22099 let { subscriptions } = $$props; 22100 let { amountLabel } = $$props; 22101 let { nextBillingDateLabel } = $$props; 22102 let { selectButtonText } = $$props; 22103 let { onSelect } = $$props; 22104 const func = subscription => onSelect(subscription); 22105 22106 $$self.$$set = $$props => { 22107 if ('noSubscriptionsMessage' in $$props) $$invalidate(0, noSubscriptionsMessage = $$props.noSubscriptionsMessage); 22108 if ('noChangePlanMappingMessage' in $$props) $$invalidate(1, noChangePlanMappingMessage = $$props.noChangePlanMappingMessage); 22109 if ('subscriptions' in $$props) $$invali
22109date(2, subscriptions = $$props.subscriptions); 22110 if ('amountLabel' in $$props) $$invalidate(3, amountLabel = $$props.amountLabel); 22111 if ('nextBillingDateLabel' in $$props) $$invalidate(4, nextBillingDateLabel = $$props.nextBillingDateLabel); 22112 if ('selectButtonText' in $$props) $$invalidate(5, selectButtonText = $$props.selectButtonText); 22113 if ('onSelect' in $$props) $$invalidate(6, onSelect = $$props.onSelect); 22114 }; 22115 22116 return [ 22117 noSubscriptionsMessage, 22118 noChangePlanMappingMessage, 22119 subscriptions, 22120 amountLabel, 22121 nextBillingDateLabel, 22122 selectButtonText, 22123 onSelect, 22124 func 22125 ]; 22126 } 22127 22128 class SubscriptionSelect extends SvelteComponent { 22129 constructor(options) { 22130 super(); 22131 22132 init(this, options, instance$z, create_fragment$z, safe_not_equal, { 22133 noSubscriptionsMessage: 0, 22134 noChangePlanMappingMessage: 1, 22135 subscriptions: 2, 22136 amountLabel: 3, 22137 nextBillingDateLabel: 4, 22138 selectButtonText: 5, 22139 onSelect: 6 22140 }); 22141 } 22142 } 22143 22144 const subscriptionSelectFactory = { 22145 matches: (sectionElement) => sectionElement.type === elementTypes.SUBSCRIPTION_SELECT, 22146 create: (form, formState, formActions, elementConfig) => ({ 22147 component: SubscriptionSelect, 22148 props: { 22149 noSubscriptionsMessage: elementConfig.noSubscriptionsMessage, 22150 selectButtonText: elementConfig.selectButtonText, 22151 noChangePlanMappingMessage: elementConfig.noChangePlanMappingMessage, 22152 amountLabel: elementConfig.amountLabel, 22153 nextBillingDateLabel: elementConfig.nextBillingDateLabel, 22154 subscriptions: formState.existingSubscriptions 22155 ? formState.existingSubscriptions.filter(s => s.status !== 'inactive') 22156 : null, 22157 onSelect: (subscription) => { 22158 formActions.updateFormState({ 22159 selectedSubscription: subscription 22160 }); 22161 logDataLayerEvent(form, 'zephr_form_button_press', { 22162 sectionId: formState.currentSection.type, 22163 buttonType: 'SUBMIT' 22164 }); 22165 formActions.completeSection(); 22166 } 22167 } 22168 }) 22169 }; 22170 22171 /* src/components/elements/subscriptionsList/SubscriptionsListItem.svelte generated by Svelte v4.2.12 */ 22172 22173 function create_if_block_4$6(ctx) { 22174 let span; 22175 let t; 22176 22177 return { 22178 c() { 22179 span = element("span"); 22180 t = text(/*giftPillText*/ ctx[7]); 22181 attr(span, "class", "gift-pill svelte-1qhs7yc"); 22182 }, 22183 m(target, anchor) { 22184 insert(target, span, anchor); 22185 append(span, t); 22186 }, 22187 p(ctx, dirty) { 22188 if (dirty & /*giftPillText*/ 128) set_data(t, /*giftPillText*/ ctx[7]); 22189 }, 22190 d(detaching) { 22191 if (detaching) { 22192 detach(span); 22193 } 22194 } 22195 }; 22196 } 22197 22198 // (23:4) {#if showBillingHistory} 22199 function create_if_block_2$b(ctx) { 22200 let div1; 22201 let div0; 22202 let t0; 22203 let t1; 22204 let t2; 22205 let hr; 22206 let current; 22207 let if_block = /*billingHistoryLink*/ ctx[4] && create_if_block_3$7(ctx); 22208 22209 return { 22210 c() { 22211 div1 = element("div"); 22212 div0 = element("div"); 22213 t0 = text(/*billingHistoryText*/ ctx[3]); 22214 t1 = space(); 22215 if (if_block) if_block.c(); 22216 t2 = space(); 22217 hr = element("hr"); 22218 attr(div0, "class", "information"); 22219 attr(div1, "class", "section"); 22220 attr(hr, "class", "svelte-1qhs7yc"); 22221 }, 22222 m(target, anchor) { 22223 insert(target, div1, anchor); 22224 append(div1, div0); 22225 append(div0, t0); 22226 append(div0, t1); 22227 if (if_block) if_block.m(div0, null); 22228 insert(target, t2, anchor); 22229 insert(target, hr, anchor); 22230 current = true; 22231 }, 22232 p(ctx, dirty) { 22233 if (!current || dirty & /*billingHistoryText*/ 8) set_data(t0, /*billingHistoryText*/ ctx[3]); 22234 22235 if (/*billingHistoryLink*/ ctx[4]) { 22236 if (if_block) { 22237 if_block.p(ctx, dirty); 22238 22239 if (dirty & /*billingHistoryLink*/ 16) { 22240 transition_in(if_block, 1); 22241 } 22242 } else { 22243 if_block = create_if_block_3$7(ctx); 22244 if_block.c(); 22245 transition_in(if_block, 1); 22246 if_block.m(div0, null); 22247 } 22248 } else if (if_block) { 22249 group_outros(); 22250 22251 transition_out(if_block, 1, 1, () => { 22252 if_block = null; 22253 }); 22254 22255 check_outros(); 22256 } 22257 }, 22258 i(local) { 22259 if (current) return; 22260 transition_in(if_block); 22261 current = true; 22262 }, 22263 o(local) { 22264 transition_out(if_block); 22265 current = false;
22266 }, 22267 d(detaching) { 22268 if (detaching) { 22269 detach(div1); 22270 detach(t2); 22271 detach(hr); 22272 } 22273 22274 if (if_block) if_block.d(); 22275 } 22276 }; 22277 } 22278 22279 // (27:10) {#if billingHistoryLink} 22280 function create_if_block_3$7(ctx) { 22281 let link; 22282 let current; 22283 22284 link = new Link({ 22285 props: { text: /*billingHistoryLink*/ ctx[4] } 22286 }); 22287 22288 link.$on("linkClick", /*linkClick_handler*/ ctx[8]); 22289 22290 return { 22291 c() { 22292 create_component(link.$$.fragment); 22293 }, 22294 m(target, anchor) { 22295 mount_component(link, target, anchor); 22296 current = true; 22297 }, 22298 p(ctx, dirty) { 22299 const link_changes = {}; 22300 if (dirty & /*billingHistoryLink*/ 16) link_changes.text = /*billingHistoryLink*/ ctx[4]; 22301 link.$set(link_changes); 22302 }, 22303 i(local) { 22304 if (current) return; 22305 transition_in(link.$$.fragment, local); 22306 current = true; 22307 }, 22308 o(local) { 22309 transition_out(link.$$.fragment, local); 22310 current = false; 22311 }, 22312 d(detaching) { 22313 destroy_component(link, detaching); 22314 } 22315 }; 22316 } 22317 22318 // (34:4) {#if subscription.status === 'active' && subscription.nextBillingTime} 22319 function create_if_block_1$h(ctx) { 22320 let div1; 22321 let h3; 22322 let t0; 22323 let t1; 22324 let div0; 22325 let t2_value = /*subscription*/ ctx[0].nextBillingTime + ""; 22326 let t2; 22327 let t3; 22328 let hr; 22329 22330 return { 22331 c() { 22332 div1 = element("div"); 22333 h3 = element("h3"); 22334 t0 = text(/*nextPaymentDateText*/ ctx[1]); 22335 t1 = space(); 22336 div0 = element("div"); 22337 t2 = text(t2_value); 22338 t3 = space(); 22339 hr = element("hr"); 22340 attr(h3, "class", "svelte-1qhs7yc"); 22341 attr(div0, "class", "information"); 22342 attr(div1, "class", "section"); 22343 attr(hr, "class", "svelte-1qhs7yc"); 22344 }, 22345 m(target, anchor) { 22346 insert(target, div1, anchor); 22347 append(div1, h3); 22348 append(h3, t0); 22349 append(div1, t1); 22350 append(div1, div0); 22351 append(div0, t2); 22352 insert(target, t3, anchor); 22353 insert(target, hr, anchor); 22354 }, 22355 p(ctx, dirty) { 22356 if (dirty & /*nextPaymentDateText*/ 2) set_data(t0, /*nextPaymentDateText*/ ctx[1]); 22357 if (dirty & /*subscription*/ 1 && t2_value !== (t2_value = /*subscription*/ ctx[0].nextBillingTime + "")) set_data(t2, t2_value); 22358 }, 22359 d(detaching) { 22360 if (detaching) { 22361 detach(div1); 22362 detach(t3); 22363 detach(hr); 22364 } 22365 } 22366 }; 22367 } 22368 22369 // (41:4) {#if subscription.amount} 22370 function create_if_block$q(ctx) { 22371 let div1; 22372 let h3; 22373 let t0; 22374 let t1; 22375 let div0; 22376 let t2_value = /*subscription*/ ctx[0].amount + ""; 22377 let t2; 22378 let t3; 22379 let hr; 22380 22381 return { 22382 c() { 22383 div1 = element("div"); 22384 h3 = element("h3"); 22385 t0 = text(/*subscriptionRateText*/ ctx[2]); 22386 t1 = space(); 22387 div0 = element("div"); 22388 t2 = text(t2_value); 22389 t3 = space(); 22390 hr = element("hr"); 22391 attr(h3, "class", "svelte-1qhs7yc"); 22392 attr(div0, "class", "information"); 22393 attr(div1, "class", "section"); 22394 attr(hr, "class", "svelte-1qhs7yc"); 22395 }, 22396 m(target, anchor) { 22397 insert(target, div1, anchor); 22398 append(div1, h3); 22399 append(h3, t0); 22400 append(div1, t1); 22401 append(div1, div0); 22402 append(div0, t2); 22403 insert(target, t3, anchor); 22404 insert(target, hr, anchor); 22405 }, 22406 p(ctx, dirty) { 22407 if (dirty & /*subscriptionRateText*/ 4) set_data(t0, /*subscriptionRateText*/ ctx[2]); 22408 if (dirty & /*subscription*/ 1 && t2_value !== (t2_value = /*subscription*/ ctx[0].amount + "")) set_data(t2, t2_value); 22409 }, 22410 d(detaching) { 22411 if (detaching) { 22412 detach(div1); 22413 detach(t3); 22414 detach(hr); 22415 } 22416 } 22417 }; 22418 } 22419 22420 function create_fragment$y(ctx) { 22421 let div2; 22422 let div1; 22423 let div0; 22424 let h2; 22425 let t0_value = /*subscription*/ ctx[0].productLabel + ""; 22426 let t0; 22427 let t1; 22428 let h2_class_value; 22429 let t2; 22430 let hr; 22431 let t3; 22432 let t4; 22433 let t5; 22434 let current; 22435 let if_block0 = /*subscription*/ ctx[0].isGift && create_if_block_4$6(ctx); 22436 let if_block1 = /*showBillingHistory*/ ctx[6] && create_if_block_2$b(ctx); 22437 let if_block2 = /*subscription*/ ctx[0].status === 'active' && /*subscription*/ ctx[0].nextBillingTime && create_if_block_1$h(ctx); 22438 let if_block3 = /*subscription*/ ctx[0].amount && create_if_block$q(ctx); 22439 22440 return { 22441 c() { 22442 div2 = element("div"); 22443 div1 = element("div"); 22444 div0 = element("div"); 22445 h2 = element("h2"); 22446 t0 = text(t0_value); 22447 t1 = space(); 22448 if (if_block0) if_block0.c(); 22449 t2 = space(); 22450 hr = element("hr"); 22451 t3 = space(); 22452 if (if_block1) if_block1.c(); 22453 t4 = space(); 22454 if (if_block2) if_block2.c(); 22455 t5 = space(); 22456 if (if_block3) if_block3.c(); 22457 22458 attr(h2, "class", h2_class_value = "" + (null_to_empty(/*sub
22458scription*/ ctx[0].status === 'inactive' 22459 ? 'inactive' 22460 : '') + " svelte-1qhs7yc")); 22461 22462 attr(div0, "class", "section"); 22463 attr(hr, "class", "svelte-1qhs7yc"); 22464 attr(div1, "class", "inner-box svelte-1qhs7yc"); 22465 attr(div2, "class", "subscription-list-item svelte-1qhs7yc"); 22466 }, 22467 m(target, anchor) { 22468 insert(target, div2, anchor); 22469 append(div2, div1); 22470 append(div1, div0); 22471 append(div0, h2); 22472 append(h2, t0); 22473 append(h2, t1); 22474 if (if_block0) if_block0.m(h2, null); 22475 append(div1, t2); 22476 append(div1, hr); 22477 append(div1, t3); 22478 if (if_block1) if_block1.m(div1, null); 22479 append(div1, t4); 22480 if (if_block2) if_block2.m(div1, null); 22481 append(div1, t5); 22482 if (if_block3) if_block3.m(div1, null); 22483 current = true; 22484 }, 22485 p(ctx, [dirty]) { 22486 if ((!current || dirty & /*subscription*/ 1) && t0_value !== (t0_value = /*subscription*/ ctx[0].productLabel + "")) set_data(t0, t0_value); 22487 22488 if (/*subscription*/ ctx[0].isGift) { 22489 if (if_block0) { 22490 if_block0.p(ctx, dirty); 22491 } else { 22492 if_block0 = create_if_block_4$6(ctx); 22493 if_block0.c(); 22494 if_block0.m(h2, null); 22495 } 22496 } else if (if_block0) { 22497 if_block0.d(1); 22498 if_block0 = null; 22499 } 22500 22501 if (!current || dirty & /*subscription*/ 1 && h2_class_value !== (h2_class_value = "" + (null_to_empty(/*subscription*/ ctx[0].status === 'inactive' 22502 ? 'inactive' 22503 : '') + " svelte-1qhs7yc"))) { 22504 attr(h2, "class", h2_class_value); 22505 } 22506 22507 if (/*showBillingHistory*/ ctx[6]) { 22508 if (if_block1) { 22509 if_block1.p(ctx, dirty); 22510 22511 if (dirty & /*showBillingHistory*/ 64) { 22512 transition_in(if_block1, 1); 22513 } 22514 } else { 22515 if_block1 = create_if_block_2$b(ctx); 22516 if_block1.c(); 22517 transition_in(if_block1, 1); 22518 if_block1.m(div1, t4); 22519 } 22520 } else if (if_block1) { 22521 group_outros(); 22522 22523 transition_out(if_block1, 1, 1, () => { 22524 if_block1 = null; 22525 }); 22526 22527 check_outros(); 22528 } 22529 22530 if (/*subscription*/ ctx[0].status === 'active' && /*subscription*/ ctx[0].nextBillingTime) { 22531 if (if_block2) { 22532 if_block2.p(ctx, dirty); 22533 } else { 22534 if_block2 = create_if_block_1$h(ctx); 22535 if_block2.c(); 22536 if_block2.m(div1, t5); 22537 } 22538 } else if (if_block2) { 22539 if_block2.d(1); 22540 if_block2 = null; 22541 } 22542 22543 if (/*subscription*/ ctx[0].amount) { 22544 if (if_block3) { 22545 if_block3.p(ctx, dirty); 22546 } else { 22547 if_block3 = create_if_block$q(ctx); 22548 if_block3.c(); 22549 if_block3.m(div1, null); 22550 } 22551 } else if (if_block3) { 22552 if_block3.d(1); 22553 if_block3 = null; 22554 } 22555 }, 22556 i(local) { 22557 if (current) return; 22558 transition_in(if_block1); 22559 current = true; 22560 }, 22561 o(local) { 22562 transition_out(if_block1); 22563 current = false; 22564 }, 22565 d(detaching) { 22566 if (detaching) { 22567 detach(div2); 22568 } 22569 22570 if (if_block0) if_block0.d(); 22571 if (if_block1) if_block1.d(); 22572 if (if_block2) if_block2.d(); 22573 if (if_block3) if_block3.d(); 22574 } 22575 }; 22576 } 22577 22578 function instance$y($$self, $$props, $$invalidate) { 22579 let { subscription } = $$props; 22580 let { nextPaymentDateText } = $$props; 22581 let { subscriptionRateText } = $$props; 22582 let { billingHistoryText } = $$props; 22583 let { billingHistoryLink } = $$props; 22584 let { onViewHistory } = $$props; 22585 let { showBillingHistory } = $$props; 22586 let { giftPillText = 'Gift' } = $$props; 22587 const linkClick_handler = () => onViewHistory(subscription); 22588 22589 $$self.$$set = $$props => {
22590 if ('subscription' in $$props) $$invalidate(0, subscription = $$props.subscription); 22591 if ('nextPaymentDateText' in $$props) $$invalidate(1, nextPaymentDateText = $$props.nextPaymentDateText); 22592 if ('subscriptionRateText' in $$props) $$invalidate(2, subscriptionRateText = $$props.subscriptionRateText); 22593 if ('billingHistoryText' in $$props) $$invalidate(3, billingHistoryText = $$props.billingHistoryText); 22594 if ('billingHistoryLink' in $$props) $$invalidate(4, billingHistoryLink = $$props.billingHistoryLink); 22595 if ('onViewHistory' in $$props) $$invalidate(5, onViewHistory = $$props.onViewHistory); 22596 if ('showBillingHistory' in $$props) $$invalidate(6, showBillingHistory = $$props.showBillingHistory); 22597 if ('giftPillText' in $$props) $$invalidate(7, giftPillText = $$props.giftPillText); 22598 }; 22599 22600 return [ 22601 subscription, 22602 nextPaymentDateText, 22603 subscriptionRateText, 22604 billingHistoryText, 22605 billingHistoryLink, 22606 onViewHistory, 22607 showBillingHistory, 22608 giftPillText, 22609 linkClick_handler 22610 ]; 22611 } 22612 22613 class SubscriptionsListItem extends SvelteComponent { 22614 constructor(options) { 22615 super(); 22616 22617 init(this, options, instance$y, create_fragment$y, safe_not_equal, { 22618 subscription: 0, 22619 nextPaymentDateText: 1, 22620 subscriptionRateText: 2, 22621 billingHistoryText: 3, 22622 billingHistoryLink: 4, 22623 onViewHistory: 5, 22624 showBillingHistory: 6, 22625 giftPillText: 7 22626 }); 22627 } 22628 } 22629 22630 /* src/components/elements/Tablink.svelte generated by Svelte v4.2.12 */ 22631 22632 function create_fragment$x(ctx) { 22633 let a; 22634 let span; 22635 let t0; 22636 let t1; 22637 let svg; 22638 let path_1; 22639 let a_href_value; 22640 let mounted; 22641 let dispose; 22642 22643 return { 22644 c() { 22645 a = element("a"); 22646 span = element("span"); 22647 t0 = text(/*text*/ ctx[0]); 22648 t1 = space(); 22649 svg = svg_element("svg"); 22650 path_1 = svg_element("path"); 22651 attr(path_1, "fill", "currentColor"); 22652 attr(path_1, "d", "M305 239c9.4 9.4 9.4 24.6 0 33.9L113 465c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l175-175L79 81c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L305 239z"); 22653 attr(svg, "aria-hidden", "true"); 22654 attr(svg, "focusable", "false"); 22655 attr(svg, "data-prefix", "far"); 22656 attr(svg, "data-icon", "chevron-right"); 22657 attr(svg, "class", "svg-inline--fa fa-chevron-right sc-egTsrv kzAurc"); 22658 attr(svg, "role", "img"); 22659 attr(svg, "xmlns", "http://www.w3.org/2000/svg"); 22660 attr(svg, "viewBox", "0 0 320 512"); 22661 attr(svg, "width", "16"); 22662 attr(svg, "height", "16"); 22663 attr(a, "class", "zephr-form-tablink svelte-py0ruk"); 22664 22665 attr(a, "href", a_href_value = /*path*/ ctx[1] && (!window.Zephr || !window.Zephr.isCustomPage || !/*path*/ ctx[1].startsWith(window.Zephr.customPagePath)) 22666 ? /*path*/ ctx[1] 22667 : "javascript: void(0)"); 22668 }, 22669 m(target, anchor) { 22670 insert(target, a, anchor); 22671 append(a, span); 22672 append(span, t0); 22673 append(a, t1); 22674 append(a, svg); 22675 append(svg, path_1); 22676 22677 if (!mounted) { 22678 dispose = listen(a, "click", /*click_handler*/ ctx[4]); 22679 mounted = true; 22680 } 22681 }, 22682 p(ctx, [dirty]) { 22683 if (dirty & /*text*/ 1) set_data(t0, /*text*/ ctx[0]); 22684 22685 if (dirty & /*path*/ 2 && a_href_value !== (a_href_value = /*path*/ ctx[1] && (!window.Zephr || !window.Zephr.isCustomPage || !/*path*/ ctx[1].startsWith(window.Zephr.customPagePath)) 22686 ? /*path*/ ctx[1] 22687 : "javascript: void(0)")) { 22688 attr(a, "href", a_href_value); 22689 } 22690 }, 22691 i: noop, 22692 o: noop, 22693 d(detaching) { 22694 if (detaching) { 22695 detach(a); 22696 } 22697 22698 mounted = false; 22699 dispose(); 22700 } 22701 }; 22702 } 22703 22704 function instance$x($$self, $$props, $$invalidate) { 22705 let { text } = $$props; 22706 let { path = '' } = $$props; 22707 22708 let { onClick = () => { 22709 22710 } } = $$props; 22711 22712 let { logDlEvent = () => { 22713 22714 } } = $$props; 22715 22716 const click_handler = () => { 22717 logDlEvent?.(); 22718 22719 if (window.Zephr && window.Zephr.isCustomPage && path.startsWith(window.Zephr.customPagePath)) { 22720 window.history.pushState({}, '', path); 22721 } else { 22722 onClick(); 22723 } 22724 }; 22725 22726 $$self.$$set = $$props => {
22727 if ('text' in $$props) $$invalidate(0, text = $$props.text); 22728 if ('path' in $$props) $$invalidate(1, path = $$props.path); 22729 if ('onClick' in $$props) $$invalidate(2, onClick = $$props.onClick); 22730 if ('logDlEvent' in $$props) $$invalidate(3, logDlEvent = $$props.logDlEvent); 22731 }; 22732 22733 return [text, path, onClick, logDlEvent, click_handler]; 22734 } 22735 22736 class Tablink extends SvelteComponent { 22737 constructor(options) { 22738 super(); 22739 22740 init(this, options, instance$x, create_fragment$x, safe_not_equal, { 22741 text: 0, 22742 path: 1, 22743 onClick: 2, 22744 logDlEvent: 3 22745 }); 22746 } 22747 } 22748 22749 /* src/components/elements/subscriptionsList/SubscriptionsListBoxItem.svelte generated by Svelte v4.2.12 */ 22750 22751 function get_each_context$a(ctx, list, i) { 22752 const child_ctx = ctx.slice(); 22753 child_ctx[48] = list[i]; 22754 child_ctx[50] = i; 22755 return child_ctx; 22756 } 22757 22758 function get_each_context_1$2(ctx, list, i) { 22759 const child_ctx = ctx.slice(); 22760 child_ctx[51] = list[i]; 22761 return child_ctx; 22762 } 22763 22764 // (123:8) {#if subscription.isGift} 22765 function create_if_block_23(ctx) { 22766 let span; 22767 let t; 22768 22769 return { 22770 c() { 22771 span = element("span"); 22772 t = text(/*giftPillText*/ ctx[24]); 22773 attr(span, "class", "gift-pill svelte-xxnasy"); 22774 }, 22775 m(target, anchor) { 22776 insert(target, span, anchor); 22777 append(span, t); 22778 }, 22779 p(ctx, dirty) { 22780 if (dirty[0] & /*giftPillText*/ 16777216) set_data(t, /*giftPillText*/ ctx[24]); 22781 }, 22782 d(detaching) { 22783 if (detaching) { 22784 detach(span); 22785 } 22786 } 22787 }; 22788 } 22789 22790 // (135:4) {:else} 22791 function create_else_block$3(ctx) { 22792 let each_1_anchor; 22793 let current; 22794 let each_value = ensure_array_like(/*elementsOrder*/ ctx[21]); 22795 let each_blocks = []; 22796 22797 for (let i = 0; i < each_value.length; i += 1) { 22798 each_blocks[i] = create_each_block$a(get_each_context$a(ctx, each_value, i)); 22799 } 22800 22801 const out = i => transition_out(each_blocks[i], 1, 1, () => { 22802 each_blocks[i] = null; 22803 }); 22804 22805 return { 22806 c() { 22807 for (let i = 0; i < each_blocks.length; i += 1) { 22808 each_blocks[i].c(); 22809 } 22810 22811 each_1_anchor = empty(); 22812 }, 22813 m(target, anchor) { 22814 for (let i = 0; i < each_blocks.length; i += 1) { 22815 if (each_blocks[i]) { 22816 each_blocks[i].m(target, anchor); 22817 } 22818 } 22819 22820 insert(target, each_1_anchor, anchor); 22821 current = true; 22822 }, 22823 p(ctx, dirty) { 22824 if (dirty[0] & /*elementsOrder, updateBillToContactText, updateBillToContactPath, subscription, logUpdateBillToContact, elementsHide, paymentProvider, subscriptionCustomFieldsText, onUpdateSubscriptionCustomFields, suspendResumeSubscriptionText, suspendResumeSubscriptionPath, logSuspendResumeSubscription, cancelSubscriptionText, cancelSubscriptionPath, logCancelSubscription, changeSubscriptionText, changeSubscriptionPath, logChangeSubscription, changePaymentMethodText, onChangePayment, billingHistoryLink, onViewHistory, statusType, statusMessage, isUpdatingAutoRenew, autoRenewToggleText, autoRenewToggleEnabled, nextPaymentDateText, subscriptionRateText*/ 2122317823 | dirty[1] & /*displayedFields, withSubscriptionParam, autoRenewValue, handleAutoRenewChange*/ 15) { 22825 each_value = ensure_array_like(/*elementsOrder*/ ctx[21]); 22826 let i; 22827 22828 for (i = 0; i < each_value.length; i += 1) { 22829 const child_ctx = get_each_context$a(ctx, each_value, i); 22830 22831 if (each_blocks[i]) { 22832 each_blocks[i].p(child_ctx, dirty); 22833 transition_in(each_blocks[i], 1); 22834 } else { 22835 each_blocks[i] = create_each_block$a(child_ctx); 22836 each_blocks[i].c(); 22837 transition_in(each_blocks[i], 1); 22838 each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); 22839 } 22840 } 22841 22842 group_outros(); 22843 22844 for (i = each_value.length; i < each_blocks.length; i += 1) { 22845 out(i); 22846 } 22847 22848 check_outros(); 22849 } 22850 }, 22851 i(local) { 22852 if (current) return; 22853 22854 for (let i = 0; i < each_value.length; i += 1) { 22855 transition_in(each_blocks[i]); 22856 } 22857 22858 current = true; 22859 }, 22860 o(local) {
22861 each_blocks = each_blocks.filter(Boolean); 22862 22863 for (let i = 0; i < each_blocks.length; i += 1) { 22864 transition_out(each_blocks[i]); 22865 } 22866 22867 current = false; 22868 }, 22869 d(detaching) { 22870 if (detaching) { 22871 detach(each_1_anchor); 22872 } 22873 22874 destroy_each(each_blocks, detaching); 22875 } 22876 }; 22877 } 22878 22879 // (128:4) {#if isInactive} 22880 function create_if_block$p(ctx) { 22881 let if_block_anchor; 22882 let if_block = /*subscription*/ ctx[0].amount && create_if_block_1$g(ctx); 22883 22884 return { 22885 c() { 22886 if (if_block) if_block.c(); 22887 if_block_anchor = empty(); 22888 }, 22889 m(target, anchor) { 22890 if (if_block) if_block.m(target, anchor); 22891 insert(target, if_block_anchor, anchor); 22892 }, 22893 p(ctx, dirty) { 22894 if (/*subscription*/ ctx[0].amount) { 22895 if (if_block) { 22896 if_block.p(ctx, dirty); 22897 } else { 22898 if_block = create_if_block_1$g(ctx); 22899 if_block.c(); 22900 if_block.m(if_block_anchor.parentNode, if_block_anchor); 22901 } 22902 } else if (if_block) { 22903 if_block.d(1); 22904 if_block = null; 22905 } 22906 }, 22907 i: noop, 22908 o: noop, 22909 d(detaching) { 22910 if (detaching) { 22911 detach(if_block_anchor); 22912 } 22913 22914 if (if_block) if_block.d(detaching); 22915 } 22916 }; 22917 } 22918 22919 // (137:8) {#if element === 'subscription_information' && !elementsHide.subscriptionInformation} 22920 function create_if_block_20(ctx) { 22921 let t; 22922 let if_block1_anchor; 22923 let if_block0 = /*subscription*/ ctx[0].amount && create_if_block_22(ctx); 22924 let if_block1 = /*subscription*/ ctx[0].status === 'active' && /*subscription*/ ctx[0].nextBillingTime && create_if_block_21(ctx); 22925 22926 return { 22927 c() { 22928 if (if_block0) if_block0.c(); 22929 t = space(); 22930 if (if_block1) if_block1.c(); 22931 if_block1_anchor = empty(); 22932 }, 22933 m(target, anchor) { 22934 if (if_block0) if_block0.m(target, anchor); 22935 insert(target, t, anchor); 22936 if (if_block1) if_block1.m(target, anchor); 22937 insert(target, if_block1_anchor, anchor); 22938 }, 22939 p(ctx, dirty) { 22940 if (/*subscription*/ ctx[0].amount) { 22941 if (if_block0) { 22942 if_block0.p(ctx, dirty); 22943 } else { 22944 if_block0 = create_if_block_22(ctx); 22945 if_block0.c(); 22946 if_block0.m(t.parentNode, t); 22947 } 22948 } else if (if_block0) { 22949 if_block0.d(1); 22950 if_block0 = null; 22951 } 22952 22953 if (/*subscription*/ ctx[0].status === 'active' && /*subscription*/ ctx[0].nextBillingTime) { 22954 if (if_block1) { 22955 if_block1.p(ctx, dirty); 22956 } else { 22957 if_block1 = create_if_block_21(ctx); 22958 if_block1.c(); 22959 if_block1.m(if_block1_anchor.parentNode, if_block1_anchor); 22960 } 22961 } else if (if_block1) { 22962 if_block1.d(1); 22963 if_block1 = null; 22964 } 22965 }, 22966 d(detaching) { 22967 if (detaching) { 22968 detach(t); 22969 detach(if_block1_anchor); 22970 } 22971 22972 if (if_block0) if_block0.d(detaching); 22973 if (if_block1) if_block1.d(detaching); 22974 } 22975 }; 22976 } 22977 22978 // (138:10) {#if subscription.amount} 22979 function create_if_block_22(ctx) { 22980 let div1; 22981 let span; 22982 let t0; 22983 let t1; 22984 let div0; 22985 let t2_value = /*subscription*/ ctx[0].amount + ""; 22986 let t2; 22987 22988 return { 22989 c() { 22990 div1 = element("div"); 22991 span = element("span"); 22992 t0 = text(/*subscriptionRateText*/ ctx[2]); 22993 t1 = space(); 22994 div0 = element("div"); 22995 t2 = text(t2_value); 22996 attr(span, "class", "svelte-xxnasy"); 22997 attr(div0, "class", "zephr-box-item-information svelte-xxnasy"); 22998 attr(div1, "class", "zephr-section svelte-xxnasy"); 22999 }, 23000 m(target, anchor) { 23001 insert(target, div1, anchor); 23002 append(div1, span); 23003 append(span, t0); 23004 append(div1, t1); 23005 append(div1, div0); 23006 append(div0, t2); 23007 }, 23008 p(ctx, dirty) { 23009 if (dirty[0] & /*subscriptionRateText*/ 4) set_data(t0, /*subscriptionRateText*/ ctx[2]); 23010 if (dirty[0] & /*subscription*/ 1 && t2_value !== (t2_value = /*subscription*/ ctx[0].amount + "")) set_data(t2, t2_value); 23011 }, 23012 d(detaching) { 23013 if (detaching) { 23014 detach(div1); 23015 } 23016 } 23017 }; 23018 } 23019 23020 // (146:10) {#if subscription.status === 'active' && subscription.nextBillingTime} 23021 function create_if_block_21(ctx) { 23022 let div1; 23023 let span; 23024 let t0; 23025 let t1; 23026 let div0; 23027 let t2_value = /*subscription*/ ctx[0].nextBillingTime + ""; 23028 let t2; 23029 23030 return { 23031 c() { 23032 div1 = element("div"); 23033 span = element("span"); 23034 t0 = text(/*nextPaymentDateText*/ ctx[1]); 23035 t1 = space(); 23036 div0 = element("div"); 23037 t2 = text(t2_value); 23038 attr(span, "class", "svelte-xxnasy"); 23039 attr(div0, "class", "zephr-box-item-information svelte-xxnasy"); 23040 attr(div1, "class", "zephr-section svelte-xxnasy"); 23041 }, 23042 m(target, anchor) { 23043 insert(target, div1, anchor); 23044 append(div1, span); 23045 append(span, t0); 23046 append(div1, t1); 23047 append(div1, div0); 23048 append(div0, t2); 23049 }, 23050 p(ctx, dirty) {
23051 if (dirty[0] & /*nextPaymentDateText*/ 2) set_data(t0, /*nextPaymentDateText*/ ctx[1]); 23052 if (dirty[0] & /*subscription*/ 1 && t2_value !== (t2_value = /*subscription*/ ctx[0].nextBillingTime + "")) set_data(t2, t2_value); 23053 }, 23054 d(detaching) { 23055 if (detaching) { 23056 detach(div1); 23057 } 23058 } 23059 }; 23060 } 23061 23062 // (155:8) {#if element === 'payment_auto_renew_toggle' && autoRenewToggleEnabled && paymentProvider === 'zuora-billing' && subscription.status === 'active' && !subscription.isGift && subscription.termType === 'TERMED'} 23063 function create_if_block_17(ctx) { 23064 let div1; 23065 let div0; 23066 let checkbox; 23067 let t0; 23068 let t1; 23069 let current; 23070 23071 checkbox = new Checkbox({ 23072 props: { 23073 id: "auto-renew-" + /*subscription*/ ctx[0].externalId, 23074 label: /*autoRenewToggleText*/ ctx[27], 23075 value: "auto-renew", 23076 checked: /*autoRenewValue*/ ctx[31], 23077 disabled: /*isUpdatingAutoRenew*/ ctx[28] 23078 } 23079 }); 23080 23081 checkbox.$on("change", /*handleAutoRenewChange*/ ctx[34]); 23082 let if_block0 = /*isUpdatingAutoRenew*/ ctx[28] && create_if_block_19(); 23083 let if_block1 = /*statusMessage*/ ctx[29] && create_if_block_18(ctx); 23084 23085 return { 23086 c() { 23087 div1 = element("div"); 23088 div0 = element("div"); 23089 create_component(checkbox.$$.fragment); 23090 t0 = space(); 23091 if (if_block0) if_block0.c(); 23092 t1 = space(); 23093 if (if_block1) if_block1.c(); 23094 attr(div0, "class", "auto-renew-toggle-container svelte-xxnasy"); 23095 attr(div1, "class", "zephr-section svelte-xxnasy"); 23096 }, 23097 m(target, anchor) { 23098 insert(target, div1, anchor); 23099 append(div1, div0); 23100 mount_component(checkbox, div0, null); 23101 append(div0, t0); 23102 if (if_block0) if_block0.m(div0, null); 23103 append(div1, t1); 23104 if (if_block1) if_block1.m(div1, null); 23105 current = true; 23106 }, 23107 p(ctx, dirty) { 23108 const checkbox_changes = {}; 23109 if (dirty[0] & /*subscription*/ 1) checkbox_changes.id = "auto-renew-" + /*subscription*/ ctx[0].externalId; 23110 if (dirty[0] & /*autoRenewToggleText*/ 134217728) checkbox_changes.label = /*autoRenewToggleText*/ ctx[27]; 23111 if (dirty[1] & /*autoRenewValue*/ 1) checkbox_changes.checked = /*autoRenewValue*/ ctx[31]; 23112 if (dirty[0] & /*isUpdatingAutoRenew*/ 268435456) checkbox_changes.disabled = /*isUpdatingAutoRenew*/ ctx[28]; 23113 checkbox.$set(checkbox_changes); 23114 23115 if (/*isUpdatingAutoRenew*/ ctx[28]) { 23116 if (if_block0) ; else { 23117 if_block0 = create_if_block_19(); 23118 if_block0.c(); 23119 if_block0.m(div0, null); 23120 } 23121 } else if (if_block0) { 23122 if_block0.d(1); 23123 if_block0 = null; 23124 } 23125 23126 if (/*statusMessage*/ ctx[29]) { 23127 if (if_block1) { 23128 if_block1.p(ctx, dirty); 23129 } else { 23130 if_block1 = create_if_block_18(ctx); 23131 if_block1.c(); 23132 if_block1.m(div1, null); 23133 } 23134 } else if (if_block1) { 23135 if_block1.d(1); 23136 if_block1 = null; 23137 } 23138 }, 23139 i(local) { 23140 if (current) return; 23141 transition_in(checkbox.$$.fragment, local); 23142 current = true; 23143 }, 23144 o(local) { 23145 transition_out(checkbox.$$.fragment, local); 23146 current = false; 23147 }, 23148 d(detaching) { 23149 if (detaching) { 23150 detach(div1); 23151 } 23152 23153 destroy_component(checkbox); 23154 if (if_block0) if_block0.d(); 23155 if (if_block1) if_block1.d(); 23156 } 23157 }; 23158 } 23159 23160 // (166:14) {#if isUpdatingAutoRenew} 23161 function create_if_block_19(ctx) { 23162 let span; 23163 23164 return { 23165 c() { 23166 span = element("span"); 23167 span.textContent = "Updating..."; 23168 attr(span, "class", "updating-indicator svelte-xxnasy"); 23169 }, 23170 m(target, anchor) { 23171 insert(target, span, anchor); 23172 }, 23173 d(detaching) { 23174 if (detaching) { 23175 detach(span); 23176 } 23177 } 23178 }; 23179 } 23180 23181 // (170:12) {#if statusMessage} 23182 function create_if_block_18(ctx) { 23183 let div; 23184 let t; 23185 let div_class_value; 23186 23187 return { 23188 c() { 23189 div = element("div"); 23190 t = text(/*statusMessage*/ ctx[29]); 23191 attr(div, "class", div_class_value = "status-message " + /*statusType*/ ctx[30] + " svelte-xxnasy"); 23192 }, 23193 m(target, anchor) { 23194 insert(target, div, anchor); 23195 append(div, t); 23196 }, 23197 p(ctx, dirty) { 23198 if (dirty[0] & /*statusMessage*/ 536870912) set_data(t, /*statusMessage*/ ctx[29]); 23199
23200 if (dirty[0] & /*statusType*/ 1073741824 && div_class_value !== (div_class_value = "status-message " + /*statusType*/ ctx[30] + " svelte-xxnasy")) { 23201 attr(div, "class", div_class_value); 23202 } 23203 }, 23204 d(detaching) { 23205 if (detaching) { 23206 detach(div); 23207 } 23208 } 23209 }; 23210 } 23211 23212 // (177:8) {#if element === 'billing_history' && !elementsHide.billingHistory} 23213 function create_if_block_15(ctx) { 23214 let if_block_anchor; 23215 let current; 23216 let if_block = /*billingHistoryLink*/ ctx[3] && create_if_block_16(ctx); 23217 23218 return { 23219 c() { 23220 if (if_block) if_block.c(); 23221 if_block_anchor = empty(); 23222 }, 23223 m(target, anchor) { 23224 if (if_block) if_block.m(target, anchor); 23225 insert(target, if_block_anchor, anchor); 23226 current = true; 23227 }, 23228 p(ctx, dirty) { 23229 if (/*billingHistoryLink*/ ctx[3]) { 23230 if (if_block) { 23231 if_block.p(ctx, dirty); 23232 23233 if (dirty[0] & /*billingHistoryLink*/ 8) { 23234 transition_in(if_block, 1); 23235 } 23236 } else { 23237 if_block = create_if_block_16(ctx); 23238 if_block.c(); 23239 transition_in(if_block, 1); 23240 if_block.m(if_block_anchor.parentNode, if_block_anchor); 23241 } 23242 } else if (if_block) { 23243 group_outros(); 23244 23245 transition_out(if_block, 1, 1, () => { 23246 if_block = null; 23247 }); 23248 23249 check_outros(); 23250 } 23251 }, 23252 i(local) { 23253 if (current) return; 23254 transition_in(if_block); 23255 current = true; 23256 }, 23257 o(local) { 23258 transition_out(if_block); 23259 current = false; 23260 }, 23261 d(detaching) { 23262 if (detaching) { 23263 detach(if_block_anchor); 23264 } 23265 23266 if (if_block) if_block.d(detaching); 23267 } 23268 }; 23269 } 23270 23271 // (178:10) {#if billingHistoryLink} 23272 function create_if_block_16(ctx) { 23273 let tablink; 23274 let current; 23275 23276 tablink = new Tablink({ 23277 props: { 23278 text: /*billingHistoryLink*/ ctx[3], 23279 onClick: /*func*/ ctx[39] 23280 } 23281 }); 23282 23283 return { 23284 c() { 23285 create_component(tablink.$$.fragment); 23286 }, 23287 m(target, anchor) { 23288 mount_component(tablink, target, anchor); 23289 current = true; 23290 }, 23291 p(ctx, dirty) { 23292 const tablink_changes = {}; 23293 if (dirty[0] & /*billingHistoryLink*/ 8) tablink_changes.text = /*billingHistoryLink*/ ctx[3]; 23294 if (dirty[0] & /*onViewHistory, subscription*/ 17) tablink_changes.onClick = /*func*/ ctx[39]; 23295 tablink.$set(tablink_changes); 23296 }, 23297 i(local) { 23298 if (current) return; 23299 transition_in(tablink.$$.fragment, local); 23300 current = true; 23301 }, 23302 o(local) { 23303 transition_out(tablink.$$.fragment, local); 23304 current = false; 23305 }, 23306 d(detaching) { 23307 destroy_component(tablink, detaching); 23308 } 23309 }; 23310 } 23311 23312 // (185:8) {#if element === 'change_payment' && !elementsHide.changePayment && !subscription.isGift} 23313 function create_if_block_13$1(ctx) { 23314 let if_block_anchor; 23315 let current; 23316 let if_block = /*changePaymentMethodText*/ ctx[10] && create_if_block_14$1(ctx); 23317 23318 return { 23319 c() { 23320 if (if_block) if_block.c(); 23321 if_block_anchor = empty(); 23322 }, 23323 m(target, anchor) { 23324 if (if_block) if_block.m(target, anchor); 23325 insert(target, if_block_anchor, anchor); 23326 current = true; 23327 }, 23328 p(ctx, dirty) { 23329 if (/*changePaymentMethodText*/ ctx[10]) { 23330 if (if_block) { 23331 if_block.p(ctx, dirty); 23332 23333 if (dirty[0] & /*changePaymentMethodText*/ 1024) { 23334 transition_in(if_block, 1); 23335 } 23336 } else { 23337 if_block = create_if_block_14$1(ctx); 23338 if_block.c(); 23339 transition_in(if_block, 1); 23340 if_block.m(if_block_anchor.parentNode, if_block_anchor); 23341 } 23342 } else if (if_block) { 23343 group_outros(); 23344 23345 transition_out(if_block, 1, 1, () => { 23346 if_block = null; 23347 }); 23348 23349 check_outros(); 23350 } 23351 }, 23352 i(local) { 23353 if (current) return; 23354 transition_in(if_block); 23355 current = true; 23356 }, 23357 o(local) { 23358 transition_out(if_block); 23359 current = false; 23360 }, 23361 d(detaching) { 23362 if (detaching) { 23363 detach(if_block_anchor); 23364 } 23365 23366 if (if_block) if_block.d(detaching); 23367 } 23368 }; 23369 } 23370 23371 // (186:10) {#if changePaymentMethodText} 23372 function create_if_block_14$1(ctx) { 23373 let tablink; 23374 let current; 23375 23376 tablink = new Tablink({ 23377 props: { 23378 text: /*changePaymentMethodText*/ ctx[10], 23379 onClick: /*func_1*/ ctx[40] 23380 } 23381 }); 23382 23383 return { 23384 c() { 23385 create_component(tablink.$$.fragment); 23386 }, 23387 m(target, anchor) { 23388 mount_component(tablink, target, anchor); 23389 current = true; 23390 }, 23391 p(ctx, dirty) { 23392 const tablink_changes = {};
23393 if (dirty[0] & /*changePaymentMethodText*/ 1024) tablink_changes.text = /*changePaymentMethodText*/ ctx[10]; 23394 if (dirty[0] & /*onChangePayment, subscription*/ 33) tablink_changes.onClick = /*func_1*/ ctx[40]; 23395 tablink.$set(tablink_changes); 23396 }, 23397 i(local) { 23398 if (current) return; 23399 transition_in(tablink.$$.fragment, local); 23400 current = true; 23401 }, 23402 o(local) { 23403 transition_out(tablink.$$.fragment, local); 23404 current = false; 23405 }, 23406 d(detaching) { 23407 destroy_component(tablink, detaching); 23408 } 23409 }; 23410 } 23411 23412 // (193:8) {#if element === 'change_subscription' && !elementsHide.changeSubscription} 23413 function create_if_block_11$1(ctx) { 23414 let if_block_anchor; 23415 let current; 23416 let if_block = /*changeSubscriptionText*/ ctx[11] && create_if_block_12$1(ctx); 23417 23418 return { 23419 c() { 23420 if (if_block) if_block.c(); 23421 if_block_anchor = empty(); 23422 }, 23423 m(target, anchor) { 23424 if (if_block) if_block.m(target, anchor); 23425 insert(target, if_block_anchor, anchor); 23426 current = true; 23427 }, 23428 p(ctx, dirty) { 23429 if (/*changeSubscriptionText*/ ctx[11]) { 23430 if (if_block) { 23431 if_block.p(ctx, dirty); 23432 23433 if (dirty[0] & /*changeSubscriptionText*/ 2048) { 23434 transition_in(if_block, 1); 23435 } 23436 } else { 23437 if_block = create_if_block_12$1(ctx); 23438 if_block.c(); 23439 transition_in(if_block, 1); 23440 if_block.m(if_block_anchor.parentNode, if_block_anchor); 23441 } 23442 } else if (if_block) { 23443 group_outros(); 23444 23445 transition_out(if_block, 1, 1, () => { 23446 if_block = null; 23447 }); 23448 23449 check_outros(); 23450 } 23451 }, 23452 i(local) { 23453 if (current) return; 23454 transition_in(if_block); 23455 current = true; 23456 }, 23457 o(local) { 23458 transition_out(if_block); 23459 current = false; 23460 }, 23461 d(detaching) { 23462 if (detaching) { 23463 detach(if_block_anchor); 23464 } 23465 23466 if (if_block) if_block.d(detaching); 23467 } 23468 }; 23469 } 23470 23471 // (194:10) {#if changeSubscriptionText} 23472 function create_if_block_12$1(ctx) { 23473 let tablink; 23474 let current; 23475 23476 tablink = new Tablink({ 23477 props: { 23478 text: /*changeSubscriptionText*/ ctx[11], 23479 path: /*withSubscriptionParam*/ ctx[33](/*changeSubscriptionPath*/ ctx[13], /*subscription*/ ctx[0].externalId), 23480 logDlEvent: /*func_2*/ ctx[41] 23481 } 23482 }); 23483 23484 return { 23485 c() { 23486 create_component(tablink.$$.fragment); 23487 }, 23488 m(target, anchor) { 23489 mount_component(tablink, target, anchor); 23490 current = true; 23491 }, 23492 p(ctx, dirty) { 23493 const tablink_changes = {}; 23494 if (dirty[0] & /*changeSubscriptionText*/ 2048) tablink_changes.text = /*changeSubscriptionText*/ ctx[11]; 23495 if (dirty[0] & /*changeSubscriptionPath, subscription*/ 8193) tablink_changes.path = /*withSubscriptionParam*/ ctx[33](/*changeSubscriptionPath*/ ctx[13], /*subscription*/ ctx[0].externalId); 23496 if (dirty[0] & /*logChangeSubscription, subscription*/ 65) tablink_changes.logDlEvent = /*func_2*/ ctx[41]; 23497 tablink.$set(tablink_changes); 23498 }, 23499 i(local) { 23500 if (current) return; 23501 transition_in(tablink.$$.fragment, local); 23502 current = true; 23503 }, 23504 o(local) { 23505 transition_out(tablink.$$.fragment, local); 23506 current = false; 23507 }, 23508 d(detaching) { 23509 destroy_component(tablink, detaching); 23510 } 23511 }; 23512 } 23513 23514 // (202:8) {#if element === 'cancel_subscription' && !elementsHide.cancelSubscription && !subscription.isGift} 23515 function create_if_block_9$1(ctx) { 23516 let if_block_anchor; 23517 let current; 23518 let if_block = /*cancelSubscriptionText*/ ctx[12] && create_if_block_10$1(ctx); 23519 23520 return { 23521 c() { 23522 if (if_block) if_block.c(); 23523 if_block_anchor = empty(); 23524 }, 23525 m(target, anchor) { 23526 if (if_block) if_block.m(target, anchor); 23527 insert(target, if_block_anchor, anchor); 23528 current = true; 23529 }, 23530 p(ctx, dirty) { 23531 if (/*cancelSubscriptionText*/ ctx[12]) { 23532 if (if_block) { 23533 if_block.p(ctx, dirty); 23534 23535 if (dirty[0] & /*cancelSubscriptionText*/ 4096) { 23536 transition_in(if_block, 1); 23537 } 23538 } else { 23539 if_block = create_if_block_10$1(ctx); 23540 if_block.c(); 23541 transition_in(if_block, 1); 23542 if_block.m(if_block_anchor.parentNode, if_block_anchor); 23543 } 23544 } else if (if_block) { 23545 group_outros(); 23546 23547 transition_out(if_block, 1, 1, () => { 23548 if_block = null; 23549 }); 23550 23551 check_outros(); 23552 } 23553 }, 23554 i(local) { 23555 if (current) return; 23556 transition_in(if_block); 23557 current = true; 23558 }, 23559 o(local) { 23560 transition_out(if_block); 23561 current = false;
23562 }, 23563 d(detaching) { 23564 if (detaching) { 23565 detach(if_block_anchor); 23566 } 23567 23568 if (if_block) if_block.d(detaching); 23569 } 23570 }; 23571 } 23572 23573 // (203:10) {#if cancelSubscriptionText} 23574 function create_if_block_10$1(ctx) { 23575 let tablink; 23576 let current; 23577 23578 tablink = new Tablink({ 23579 props: { 23580 text: /*cancelSubscriptionText*/ ctx[12], 23581 path: /*withSubscriptionParam*/ ctx[33](/*cancelSubscriptionPath*/ ctx[14], /*subscription*/ ctx[0].externalId), 23582 logDlEvent: /*func_3*/ ctx[42] 23583 } 23584 }); 23585 23586 return { 23587 c() { 23588 create_component(tablink.$$.fragment); 23589 }, 23590 m(target, anchor) { 23591 mount_component(tablink, target, anchor); 23592 current = true; 23593 }, 23594 p(ctx, dirty) { 23595 const tablink_changes = {}; 23596 if (dirty[0] & /*cancelSubscriptionText*/ 4096) tablink_changes.text = /*cancelSubscriptionText*/ ctx[12]; 23597 if (dirty[0] & /*cancelSubscriptionPath, subscription*/ 16385) tablink_changes.path = /*withSubscriptionParam*/ ctx[33](/*cancelSubscriptionPath*/ ctx[14], /*subscription*/ ctx[0].externalId); 23598 if (dirty[0] & /*logCancelSubscription, subscription*/ 129) tablink_changes.logDlEvent = /*func_3*/ ctx[42]; 23599 tablink.$set(tablink_changes); 23600 }, 23601 i(local) { 23602 if (current) return; 23603 transition_in(tablink.$$.fragment, local); 23604 current = true; 23605 }, 23606 o(local) { 23607 transition_out(tablink.$$.fragment, local); 23608 current = false; 23609 }, 23610 d(detaching) { 23611 destroy_component(tablink, detaching); 23612 } 23613 }; 23614 } 23615 23616 // (211:8) {#if element === 'suspend_resume_subscription' && !elementsHide.suspendResumeSubscription && paymentProvider === 'zuora-billing'} 23617 function create_if_block_7$1(ctx) { 23618 let if_block_anchor; 23619 let current; 23620 let if_block = /*suspendResumeSubscriptionText*/ ctx[15] && create_if_block_8$1(ctx); 23621 23622 return { 23623 c() { 23624 if (if_block) if_block.c(); 23625 if_block_anchor = empty(); 23626 }, 23627 m(target, anchor) { 23628 if (if_block) if_block.m(target, anchor); 23629 insert(target, if_block_anchor, anchor); 23630 current = true; 23631 }, 23632 p(ctx, dirty) { 23633 if (/*suspendResumeSubscriptionText*/ ctx[15]) { 23634 if (if_block) { 23635 if_block.p(ctx, dirty); 23636 23637 if (dirty[0] & /*suspendResumeSubscriptionText*/ 32768) { 23638 transition_in(if_block, 1); 23639 } 23640 } else { 23641 if_block = create_if_block_8$1(ctx); 23642 if_block.c(); 23643 transition_in(if_block, 1); 23644 if_block.m(if_block_anchor.parentNode, if_block_anchor); 23645 } 23646 } else if (if_block) { 23647 group_outros(); 23648 23649 transition_out(if_block, 1, 1, () => { 23650 if_block = null; 23651 }); 23652 23653 check_outros(); 23654 } 23655 }, 23656 i(local) { 23657 if (current) return; 23658 transition_in(if_block); 23659 current = true; 23660 }, 23661 o(local) { 23662 transition_out(if_block); 23663 current = false; 23664 }, 23665 d(detaching) { 23666 if (detaching) { 23667 detach(if_block_anchor); 23668 } 23669 23670 if (if_block) if_block.d(detaching); 23671 } 23672 }; 23673 } 23674 23675 // (212:10) {#if suspendResumeSubscriptionText} 23676 function create_if_block_8$1(ctx) { 23677 let tablink; 23678 let current; 23679 23680 tablink = new Tablink({ 23681 props: { 23682 text: /*suspendResumeSubscriptionText*/ ctx[15], 23683 path: /*withSubscriptionParam*/ ctx[33](/*suspendResumeSubscriptionPath*/ ctx[16], /*subscription*/ ctx[0].externalId), 23684 logDlEvent: /*func_4*/ ctx[43] 23685 } 23686 }); 23687 23688 return { 23689 c() { 23690 create_component(tablink.$$.fragment); 23691 }, 23692 m(target, anchor) { 23693 mount_component(tablink, target, anchor); 23694 current = true; 23695 }, 23696 p(ctx, dirty) { 23697 const tablink_changes = {}; 23698 if (dirty[0] & /*suspendResumeSubscriptionText*/ 32768) tablink_changes.text = /*suspendResumeSubscriptionText*/ ctx[15]; 23699 if (dirty[0] & /*suspendResumeSubscriptionPath, subscription*/ 65537) tablink_changes.path = /*withSubscriptionParam*/ ctx[33](/*suspendResumeSubscriptionPath*/ ctx[16], /*subscription*/ ctx[0].externalId); 23700 if (dirty[0] & /*logSuspendResumeSubscription, subscription*/ 257) tablink_changes.logDlEvent = /*func_4*/ ctx[43]; 23701 tablink.$set(tablink_changes); 23702 }, 23703 i(local) { 23704 if (current) return; 23705 transition_in(tablink.$$.fragment, local); 23706 current = true; 23707 }, 23708 o(local) { 23709 transition_out(tablink.$$.fragment, local); 23710 current = false;
23711 }, 23712 d(detaching) { 23713 destroy_component(tablink, detaching); 23714 } 23715 }; 23716 } 23717 23718 // (220:8) {#if element === 'subscription_custom_fields_list' && !elementsHide.subscriptionCustomFields} 23719 function create_if_block_5$5(ctx) { 23720 let if_block_anchor; 23721 let current; 23722 let if_block = /*subscriptionCustomFieldsText*/ ctx[17] && create_if_block_6$5(ctx); 23723 23724 return { 23725 c() { 23726 if (if_block) if_block.c(); 23727 if_block_anchor = empty(); 23728 }, 23729 m(target, anchor) { 23730 if (if_block) if_block.m(target, anchor); 23731 insert(target, if_block_anchor, anchor); 23732 current = true; 23733 }, 23734 p(ctx, dirty) { 23735 if (/*subscriptionCustomFieldsText*/ ctx[17]) { 23736 if (if_block) { 23737 if_block.p(ctx, dirty); 23738 23739 if (dirty[0] & /*subscriptionCustomFieldsText*/ 131072) { 23740 transition_in(if_block, 1); 23741 } 23742 } else { 23743 if_block = create_if_block_6$5(ctx); 23744 if_block.c(); 23745 transition_in(if_block, 1); 23746 if_block.m(if_block_anchor.parentNode, if_block_anchor); 23747 } 23748 } else if (if_block) { 23749 group_outros(); 23750 23751 transition_out(if_block, 1, 1, () => { 23752 if_block = null; 23753 }); 23754 23755 check_outros(); 23756 } 23757 }, 23758 i(local) { 23759 if (current) return; 23760 transition_in(if_block); 23761 current = true; 23762 }, 23763 o(local) { 23764 transition_out(if_block); 23765 current = false; 23766 }, 23767 d(detaching) { 23768 if (detaching) { 23769 detach(if_block_anchor); 23770 } 23771 23772 if (if_block) if_block.d(detaching); 23773 } 23774 }; 23775 } 23776 23777 // (221:10) {#if subscriptionCustomFieldsText} 23778 function create_if_block_6$5(ctx) { 23779 let tablink; 23780 let current; 23781 23782 tablink = new Tablink({ 23783 props: { 23784 text: /*subscriptionCustomFieldsText*/ ctx[17], 23785 onClick: /*func_5*/ ctx[44] 23786 } 23787 }); 23788 23789 return { 23790 c() { 23791 create_component(tablink.$$.fragment); 23792 }, 23793 m(target, anchor) { 23794 mount_component(tablink, target, anchor); 23795 current = true; 23796 }, 23797 p(ctx, dirty) { 23798 const tablink_changes = {}; 23799 if (dirty[0] & /*subscriptionCustomFieldsText*/ 131072) tablink_changes.text = /*subscriptionCustomFieldsText*/ ctx[17]; 23800 if (dirty[0] & /*onUpdateSubscriptionCustomFields, subscription*/ 262145) tablink_changes.onClick = /*func_5*/ ctx[44]; 23801 tablink.$set(tablink_changes); 23802 }, 23803 i(local) { 23804 if (current) return; 23805 transition_in(tablink.$$.fragment, local); 23806 current = true; 23807 }, 23808 o(local) { 23809 transition_out(tablink.$$.fragment, local); 23810 current = false; 23811 }, 23812 d(detaching) { 23813 destroy_component(tablink, detaching); 23814 } 23815 }; 23816 } 23817 23818 // (228:8) {#if element === 'bill_to_contact' && !elementsHide.updateBillToContact && paymentProvider === 'zuora-billing'} 23819 function create_if_block_3$6(ctx) { 23820 let if_block_anchor; 23821 let current; 23822 let if_block = /*updateBillToContactText*/ ctx[19] && create_if_block_4$5(ctx); 23823 23824 return { 23825 c() { 23826 if (if_block) if_block.c(); 23827 if_block_anchor = empty(); 23828 }, 23829 m(target, anchor) { 23830 if (if_block) if_block.m(target, anchor); 23831 insert(target, if_block_anchor, anchor); 23832 current = true; 23833 }, 23834 p(ctx, dirty) { 23835 if (/*updateBillToContactText*/ ctx[19]) { 23836 if (if_block) { 23837 if_block.p(ctx, dirty); 23838 23839 if (dirty[0] & /*updateBillToContactText*/ 524288) { 23840 transition_in(if_block, 1); 23841 } 23842 } else { 23843 if_block = create_if_block_4$5(ctx); 23844 if_block.c(); 23845 transition_in(if_block, 1); 23846 if_block.m(if_block_anchor.parentNode, if_block_anchor); 23847 } 23848 } else if (if_block) { 23849 group_outros(); 23850 23851 transition_out(if_block, 1, 1, () => { 23852 if_block = null; 23853 }); 23854 23855 check_outros(); 23856 } 23857 }, 23858 i(local) { 23859 if (current) return; 23860 transition_in(if_block); 23861 current = true; 23862 }, 23863 o(local) { 23864 transition_out(if_block); 23865 current = false; 23866 }, 23867 d(detaching) { 23868 if (detaching) { 23869 detach(if_block_anchor); 23870 } 23871 23872 if (if_block) if_block.d(detaching); 23873 } 23874 }; 23875 } 23876 23877 // (229:10) {#if updateBillToContactText} 23878 function create_if_block_4$5(ctx) { 23879 let tablink; 23880 let current; 23881 23882 tablink = new Tablink({ 23883 props: { 23884 text: /*updateBillToContactText*/ ctx[19], 23885 path: /*withSubscriptionParam*/ ctx[33](/*updateBillToContactPath*/ ctx[20], /*subscription*/ ctx[0].externalId), 23886 logDlEvent: /*func_6*/ ctx[45] 23887 } 23888 }); 23889 23890 return { 23891 c() { 23892 create_component(tablink.$$.fragment); 23893 }, 23894 m(target, anchor) { 23895 mount_component(tablink, target, anchor); 23896 current = true; 23897 }, 23898 p(ctx, dirty) { 23899 const tablink_changes = {};
23900 if (dirty[0] & /*updateBillToContactText*/ 524288) tablink_changes.text = /*updateBillToContactText*/ ctx[19]; 23901 if (dirty[0] & /*updateBillToContactPath, subscription*/ 1048577) tablink_changes.path = /*withSubscriptionParam*/ ctx[33](/*updateBillToContactPath*/ ctx[20], /*subscription*/ ctx[0].externalId); 23902 if (dirty[0] & /*logUpdateBillToContact, subscription*/ 513) tablink_changes.logDlEvent = /*func_6*/ ctx[45]; 23903 tablink.$set(tablink_changes); 23904 }, 23905 i(local) { 23906 if (current) return; 23907 transition_in(tablink.$$.fragment, local); 23908 current = true; 23909 }, 23910 o(local) { 23911 transition_out(tablink.$$.fragment, local); 23912 current = false; 23913 }, 23914 d(detaching) { 23915 destroy_component(tablink, detaching); 23916 } 23917 }; 23918 } 23919 23920 // (237:8) {#if element === 'subscription_custom_fields_list' && displayedFields.length > 0} 23921 function create_if_block_2$a(ctx) { 23922 let each_1_anchor; 23923 let each_value_1 = ensure_array_like(/*displayedFields*/ ctx[32]); 23924 let each_blocks = []; 23925 23926 for (let i = 0; i < each_value_1.length; i += 1) { 23927 each_blocks[i] = create_each_block_1$2(get_each_context_1$2(ctx, each_value_1, i)); 23928 } 23929 23930 return { 23931 c() { 23932 for (let i = 0; i < each_blocks.length; i += 1) { 23933 each_blocks[i].c(); 23934 } 23935 23936 each_1_anchor = empty(); 23937 }, 23938 m(target, anchor) { 23939 for (let i = 0; i < each_blocks.length; i += 1) { 23940 if (each_blocks[i]) { 23941 each_blocks[i].m(target, anchor); 23942 } 23943 } 23944 23945 insert(target, each_1_anchor, anchor); 23946 }, 23947 p(ctx, dirty) { 23948 if (dirty[1] & /*displayedFields*/ 2) { 23949 each_value_1 = ensure_array_like(/*displayedFields*/ ctx[32]); 23950 let i; 23951 23952 for (i = 0; i < each_value_1.length; i += 1) { 23953 const child_ctx = get_each_context_1$2(ctx, each_value_1, i); 23954 23955 if (each_blocks[i]) { 23956 each_blocks[i].p(child_ctx, dirty); 23957 } else { 23958 each_blocks[i] = create_each_block_1$2(child_ctx); 23959 each_blocks[i].c(); 23960 each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); 23961 } 23962 } 23963 23964 for (; i < each_blocks.length; i += 1) { 23965 each_blocks[i].d(1); 23966 } 23967 23968 each_blocks.length = each_value_1.length; 23969 } 23970 }, 23971 d(detaching) { 23972 if (detaching) { 23973 detach(each_1_anchor); 23974 } 23975 23976 destroy_each(each_blocks, detaching); 23977 } 23978 }; 23979 } 23980 23981 // (238:10) {#each displayedFields as field} 23982 function create_each_block_1$2(ctx) { 23983 let div1; 23984 let span; 23985 let t0_value = /*field*/ ctx[51].label + ""; 23986 let t0; 23987 let t1; 23988 let div0; 23989 let t2_value = /*field*/ ctx[51].value + ""; 23990 let t2; 23991 let t3; 23992 23993 return { 23994 c() { 23995 div1 = element("div"); 23996 span = element("span"); 23997 t0 = text(t0_value); 23998 t1 = space(); 23999 div0 = element("div"); 24000 t2 = text(t2_value); 24001 t3 = space(); 24002 attr(span, "class", "svelte-xxnasy"); 24003 attr(div0, "class", "zephr-box-item-information svelte-xxnasy"); 24004 attr(div1, "class", "zephr-section svelte-xxnasy"); 24005 }, 24006 m(target, anchor) { 24007 insert(target, div1, anchor); 24008 append(div1, span); 24009 append(span, t0); 24010 append(div1, t1); 24011 append(div1, div0); 24012 append(div0, t2); 24013 append(div1, t3); 24014 }, 24015 p(ctx, dirty) { 24016 if (dirty[1] & /*displayedFields*/ 2 && t0_value !== (t0_value = /*field*/ ctx[51].label + "")) set_data(t0, t0_value); 24017 if (dirty[1] & /*displayedFields*/ 2 && t2_value !== (t2_value = /*field*/ ctx[51].value + "")) set_data(t2, t2_value); 24018 }, 24019 d(detaching) { 24020 if (detaching) { 24021 detach(div1); 24022 } 24023 } 24024 }; 24025 } 24026 24027 // (136:6) {#each elementsOrder as element, _index} 24028 function create_each_block$a(ctx) { 24029 let t0; 24030 let t1; 24031 let t2; 24032 let t3; 24033 let t4; 24034 let t5; 24035 let t6; 24036 let t7; 24037 let t8; 24038 let if_block9_anchor; 24039 let current; 24040 let if_block0 = /*element*/ ctx[48] === 'subscription_information' && !/*elementsHide*/ ctx[22].subscriptionInformation && create_if_block_20(ctx); 24041 let if_block1 = /*element*/ ctx[48] === 'payment_auto_renew_toggle' && /*autoRenewToggleEnabled*/ ctx[26] && /*paymentProvider*/ ctx[25] === 'zuora-billing' && /*subscription*/ ctx[0].status === 'active' && !/*subscription*/ ctx[0].isGift && /*subscription*/ ctx[0].termType === 'TERMED' && create_if_block_17(ctx); 24042 let if_block2 = /*element*/ ctx[48] === 'billing_history' && !/*elementsHide*/ ctx[22].billingHistory && create_if_block_15(ctx); 24043 let if_block3 = /*element*/ ctx[48] === 'change_payment' && !/*elementsHide*/ ctx[22].changePayment && !/*subscription*/ ctx[0].isGift && create_if_block_13$1(ctx); 24044 let if_block4 = /*element*/ ctx[48] === 'change_subscription' && !/*elementsHide*/ ctx[22].changeSubscription && create_if_block_11$1(ctx); 24045 let if_block5 = /*element*/ ctx[48] === 'cancel_subscription' && !/*elementsHide*/ ctx[22].cancelSubscription && !/*subscription*/ ctx[0].isGift && create_if_block_9$1(ctx); 24046 let if_block6 = /*element*/ ctx[48] === 'suspend_resume_subscription' && !/*elementsHide*/ ctx[22].suspendResumeSubscription && /*paymentProvider*/ ctx[25] === 'zuora-billing' && create_if_block_7$1(ctx); 24047 let if_block7 = /*element*/ ctx[48] === 'subscription_custom_fields_list' && !/*elementsHide*/ ctx[22].subscriptionCustomFields && create_if_block_5$5(ctx); 24048 let if_block8 = /*element*/ ctx[48] === 'bill_to_contact' && !/*elementsHide*/ ctx[22].updateBillToContact && /*paymentProvider*/ ctx[25] === 'zuora-billing' && create_if_block_3$6(ctx); 24049 let if_block9 = /*element*/ ctx[48] === 'subscription_custom_fields_list' && /*displayedFields*/ ctx[32].length > 0 && create_if_block_2$a(ctx); 24050 24051 return { 24052 c() { 24053 if (if_block0) if_block0.c(); 24054 t0 = space(); 24055 if (if_block1) if_block1.c(); 24056 t1 = space(); 24057 if (if_block2) if_block2.c(); 24058 t2 = space(); 24059 if (if_block3) if_block3.c(); 24060 t3 = space(); 24061 if (if_block4) if_block4.c(); 24062 t4 = space(); 24063 if (if_block5) if_block5.c(); 24064 t5 = space(); 24065 if (if_block6) if_block6.c(); 24066 t6 = space(); 24067 if (if_block7) if_block7.c(); 24068 t7 = space(); 24069 if (if_block8) if_block8.c(); 24070 t8 = space(); 24071 if (if_block9) if_block9.c(); 24072 if_block9_anchor = empty(); 24073 }, 24074 m(target, anchor) { 24075 if (if_block0) if_block0.m(target, anchor); 24076 insert(target, t0, anchor); 24077 if (if_block1) if_block1.m(target, anchor); 24078 insert(target, t1, anchor); 24079 if (if_block2) if_block2.m(target, anchor); 24080 insert(target, t2, anchor); 24081 if (if_block3) if_block3.m(target, anchor);
24082 insert(target, t3, anchor); 24083 if (if_block4) if_block4.m(target, anchor); 24084 insert(target, t4, anchor); 24085 if (if_block5) if_block5.m(target, anchor); 24086 insert(target, t5, anchor); 24087 if (if_block6) if_block6.m(target, anchor); 24088 insert(target, t6, anchor); 24089 if (if_block7) if_block7.m(target, anchor); 24090 insert(target, t7, anchor); 24091 if (if_block8) if_block8.m(target, anchor); 24092 insert(target, t8, anchor); 24093 if (if_block9) if_block9.m(target, anchor); 24094 insert(target, if_block9_anchor, anchor); 24095 current = true; 24096 }, 24097 p(ctx, dirty) { 24098 if (/*element*/ ctx[48] === 'subscription_information' && !/*elementsHide*/ ctx[22].subscriptionInformation) { 24099 if (if_block0) { 24100 if_block0.p(ctx, dirty); 24101 } else { 24102 if_block0 = create_if_block_20(ctx); 24103 if_block0.c(); 24104 if_block0.m(t0.parentNode, t0); 24105 } 24106 } else if (if_block0) { 24107 if_block0.d(1); 24108 if_block0 = null; 24109 } 24110 24111 if (/*element*/ ctx[48] === 'payment_auto_renew_toggle' && /*autoRenewToggleEnabled*/ ctx[26] && /*paymentProvider*/ ctx[25] === 'zuora-billing' && /*subscription*/ ctx[0].status === 'active' && !/*subscription*/ ctx[0].isGift && /*subscription*/ ctx[0].termType === 'TERMED') { 24112 if (if_block1) { 24113 if_block1.p(ctx, dirty); 24114 24115 if (dirty[0] & /*elementsOrder, autoRenewToggleEnabled, paymentProvider, subscription*/ 102760449) { 24116 transition_in(if_block1, 1); 24117 } 24118 } else { 24119 if_block1 = create_if_block_17(ctx); 24120 if_block1.c(); 24121 transition_in(if_block1, 1); 24122 if_block1.m(t1.parentNode, t1); 24123 } 24124 } else if (if_block1) { 24125 group_outros(); 24126 24127 transition_out(if_block1, 1, 1, () => { 24128 if_block1 = null; 24129 }); 24130 24131 check_outros(); 24132 } 24133 24134 if (/*element*/ ctx[48] === 'billing_history' && !/*elementsHide*/ ctx[22].billingHistory) { 24135 if (if_block2) { 24136 if_block2.p(ctx, dirty); 24137 24138 if (dirty[0] & /*elementsOrder, elementsHide*/ 6291456) { 24139 transition_in(if_block2, 1); 24140 } 24141 } else { 24142 if_block2 = create_if_block_15(ctx); 24143 if_block2.c(); 24144 transition_in(if_block2, 1); 24145 if_block2.m(t2.parentNode, t2); 24146 } 24147 } else if (if_block2) { 24148 group_outros(); 24149 24150 transition_out(if_block2, 1, 1, () => { 24151 if_block2 = null; 24152 }); 24153 24154 check_outros(); 24155 } 24156 24157 if (/*element*/ ctx[48] === 'change_payment' && !/*elementsHide*/ ctx[22].changePayment && !/*subscription*/ ctx[0].isGift) { 24158 if (if_block3) { 24159 if_block3.p(ctx, dirty); 24160 24161 if (dirty[0] & /*elementsOrder, elementsHide, subscription*/ 6291457) { 24162 transition_in(if_block3, 1); 24163 } 24164 } else { 24165 if_block3 = create_if_block_13$1(ctx); 24166 if_block3.c(); 24167 transition_in(if_block3, 1); 24168 if_block3.m(t3.parentNode, t3); 24169 } 24170 } else if (if_block3) { 24171 group_outros(); 24172 24173 transition_out(if_block3, 1, 1, () => { 24174 if_block3 = null; 24175 }); 24176 24177 check_outros(); 24178 } 24179 24180 if (/*element*/ ctx[48] === 'change_subscription' && !/*elementsHide*/ ctx[22].changeSubscription) { 24181 if (if_block4) { 24182 if_block4.p(ctx, dirty); 24183 24184 if (dirty[0] & /*elementsOrder, elementsHide*/ 6291456) { 24185 transition_in(if_block4, 1); 24186 } 24187 } else { 24188 if_block4 = create_if_block_11$1(ctx); 24189 if_block4.c(); 24190 transition_in(if_block4, 1); 24191 if_block4.m(t4.parentNode, t4); 24192 } 24193 } else if (if_block4) { 24194 group_outros(); 24195 24196 transition_out(if_block4, 1, 1, () => { 24197 if_block4 = null; 24198 }); 24199 24200 check_outros(); 24201 } 24202 24203 if (/*element*/ ctx[48] === 'cancel_subscription' && !/*elementsHide*/ ctx[22].cancelSubscription && !/*subscription*/ ctx[0].isGift) { 24204 if (if_block5) { 24205 if_block5.p(ctx, dirty); 24206 24207 if (dirty[0] & /*elementsOrder, elementsHide, subscription*/ 6291457) { 24208 transition_in(if_block5, 1); 24209 } 24210 } else { 24211 if_block5 = create_if_block_9$1(ctx); 24212 if_block5.c(); 24213 transition_in(if_block5, 1); 24214 if_block5.m(t5.parentNode, t5); 24215 } 24216 } else if (if_block5) { 24217 group_outros(); 24218 24219 transition_out(if_block5, 1, 1, () => { 24220 if_block5 = null; 24221 }); 24222 24223 check_outros(); 24224 } 24225 24226 if (/*element*/ ctx[48] === 'suspend_resume_subscription' && !/*elementsHide*/ ctx[22].suspendResumeSubscription && /*paymentProvider*/ ctx[25] === 'zuora-billing') { 24227 if (if_block6) { 24228 if_block6.p(ctx, dirty); 24229
24230 if (dirty[0] & /*elementsOrder, elementsHide, paymentProvider*/ 39845888) { 24231 transition_in(if_block6, 1); 24232 } 24233 } else { 24234 if_block6 = create_if_block_7$1(ctx); 24235 if_block6.c(); 24236 transition_in(if_block6, 1); 24237 if_block6.m(t6.parentNode, t6); 24238 } 24239 } else if (if_block6) { 24240 group_outros(); 24241 24242 transition_out(if_block6, 1, 1, () => { 24243 if_block6 = null; 24244 }); 24245 24246 check_outros(); 24247 } 24248 24249 if (/*element*/ ctx[48] === 'subscription_custom_fields_list' && !/*elementsHide*/ ctx[22].subscriptionCustomFields) { 24250 if (if_block7) { 24251 if_block7.p(ctx, dirty); 24252 24253 if (dirty[0] & /*elementsOrder, elementsHide*/ 6291456) { 24254 transition_in(if_block7, 1); 24255 } 24256 } else { 24257 if_block7 = create_if_block_5$5(ctx); 24258 if_block7.c(); 24259 transition_in(if_block7, 1); 24260 if_block7.m(t7.parentNode, t7); 24261 } 24262 } else if (if_block7) { 24263 group_outros(); 24264 24265 transition_out(if_block7, 1, 1, () => { 24266 if_block7 = null; 24267 }); 24268 24269 check_outros(); 24270 } 24271 24272 if (/*element*/ ctx[48] === 'bill_to_contact' && !/*elementsHide*/ ctx[22].updateBillToContact && /*paymentProvider*/ ctx[25] === 'zuora-billing') { 24273 if (if_block8) { 24274 if_block8.p(ctx, dirty); 24275 24276 if (dirty[0] & /*elementsOrder, elementsHide, paymentProvider*/ 39845888) { 24277 transition_in(if_block8, 1); 24278 } 24279 } else { 24280 if_block8 = create_if_block_3$6(ctx); 24281 if_block8.c(); 24282 transition_in(if_block8, 1); 24283 if_block8.m(t8.parentNode, t8); 24284 } 24285 } else if (if_block8) { 24286 group_outros(); 24287 24288 transition_out(if_block8, 1, 1, () => { 24289 if_block8 = null; 24290 }); 24291 24292 check_outros(); 24293 } 24294 24295 if (/*element*/ ctx[48] === 'subscription_custom_fields_list' && /*displayedFields*/ ctx[32].length > 0) { 24296 if (if_block9) { 24297 if_block9.p(ctx, dirty); 24298 } else { 24299 if_block9 = create_if_block_2$a(ctx); 24300 if_block9.c(); 24301 if_block9.m(if_block9_anchor.parentNode, if_block9_anchor); 24302 } 24303 } else if (if_block9) { 24304 if_block9.d(1); 24305 if_block9 = null; 24306 } 24307 }, 24308 i(local) { 24309 if (current) return; 24310 transition_in(if_block1); 24311 transition_in(if_block2); 24312 transition_in(if_block3); 24313 transition_in(if_block4); 24314 transition_in(if_block5); 24315 transition_in(if_block6); 24316 transition_in(if_block7); 24317 transition_in(if_block8); 24318 current = true; 24319 }, 24320 o(local) { 24321 transition_out(if_block1); 24322 transition_out(if_block2); 24323 transition_out(if_block3); 24324 transition_out(if_block4); 24325 transition_out(if_block5); 24326 transition_out(if_block6); 24327 transition_out(if_block7); 24328 transition_out(if_block8); 24329 current = false; 24330 }, 24331 d(detaching) { 24332 if (detaching) { 24333 detach(t0); 24334 detach(t1); 24335 detach(t2); 24336 detach(t3); 24337 detach(t4); 24338 detach(t5); 24339 detach(t6); 24340 detach(t7); 24341 detach(t8); 24342 detach(if_block9_anchor); 24343 } 24344 24345 if (if_block0) if_block0.d(detaching); 24346 if (if_block1) if_block1.d(detaching); 24347 if (if_block2) if_block2.d(detaching); 24348 if (if_block3) if_block3.d(detaching); 24349 if (if_block4) if_block4.d(detaching); 24350 if (if_block5) if_block5.d(detaching); 24351 if (if_block6) if_block6.d(detaching); 24352 if (if_block7) if_block7.d(detaching); 24353 if (if_block8) if_block8.d(detaching); 24354 if (if_block9) if_block9.d(detaching); 24355 } 24356 }; 24357 } 24358 24359 // (129:6) {#if subscription.amount} 24360 function create_if_block_1$g(ctx) { 24361 let div1; 24362 let span; 24363 let t0; 24364 let t1; 24365 let div0; 24366 let t2_value = /*subscription*/ ctx[0].amount + ""; 24367 let t2; 24368 24369 return { 24370 c() { 24371 div1 = element("div"); 24372 span = element("span"); 24373 t0 = text(/*subscriptionRateText*/ ctx[2]); 24374 t1 = space(); 24375 div0 = element("div"); 24376 t2 = text(t2_value); 24377 attr(span, "class", "svelte-xxnasy"); 24378 attr(div0, "class", "zephr-box-item-information svelte-xxnasy"); 24379 attr(div1, "class", "zephr-section svelte-xxnasy"); 24380 }, 24381 m(target, anchor) { 24382 insert(target, div1, anchor); 24383 append(div1, span); 24384 append(span, t0); 24385 append(div1, t1); 24386 append(div1, div0); 24387 append(div0, t2); 24388 }, 24389 p(ctx, dirty) {
24390 if (dirty[0] & /*subscriptionRateText*/ 4) set_data(t0, /*subscriptionRateText*/ ctx[2]); 24391 if (dirty[0] & /*subscription*/ 1 && t2_value !== (t2_value = /*subscription*/ ctx[0].amount + "")) set_data(t2, t2_value); 24392 }, 24393 d(detaching) { 24394 if (detaching) { 24395 detach(div1); 24396 } 24397 } 24398 }; 24399 } 24400 24401 function create_fragment$w(ctx) { 24402 let div2; 24403 let div1; 24404 let div0; 24405 let h2; 24406 let t0_value = /*subscription*/ ctx[0].productLabel + ""; 24407 let t0; 24408 let t1; 24409 let t2; 24410 let current_block_type_index; 24411 let if_block1; 24412 let current; 24413 let if_block0 = /*subscription*/ ctx[0].isGift && create_if_block_23(ctx); 24414 const if_block_creators = [create_if_block$p, create_else_block$3]; 24415 const if_blocks = []; 24416 24417 function select_block_type(ctx, dirty) { 24418 if (/*isInactive*/ ctx[23]) return 0; 24419 return 1; 24420 } 24421 24422 current_block_type_index = select_block_type(ctx); 24423 if_block1 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 24424 24425 return { 24426 c() { 24427 div2 = element("div"); 24428 div1 = element("div"); 24429 div0 = element("div"); 24430 h2 = element("h2"); 24431 t0 = text(t0_value); 24432 t1 = space(); 24433 if (if_block0) if_block0.c(); 24434 t2 = space(); 24435 if_block1.c(); 24436 attr(h2, "class", "svelte-xxnasy"); 24437 attr(div0, "class", "zephr-section svelte-xxnasy"); 24438 attr(div1, "class", "zephr-inner-box svelte-xxnasy"); 24439 attr(div2, "class", "zephr-subscription-list-box-item svelte-xxnasy"); 24440 }, 24441 m(target, anchor) { 24442 insert(target, div2, anchor); 24443 append(div2, div1); 24444 append(div1, div0); 24445 append(div0, h2); 24446 append(h2, t0); 24447 append(h2, t1); 24448 if (if_block0) if_block0.m(h2, null); 24449 append(div1, t2); 24450 if_blocks[current_block_type_index].m(div1, null); 24451 current = true; 24452 }, 24453 p(ctx, dirty) { 24454 if ((!current || dirty[0] & /*subscription*/ 1) && t0_value !== (t0_value = /*subscription*/ ctx[0].productLabel + "")) set_data(t0, t0_value); 24455 24456 if (/*subscription*/ ctx[0].isGift) { 24457 if (if_block0) { 24458 if_block0.p(ctx, dirty); 24459 } else { 24460 if_block0 = create_if_block_23(ctx); 24461 if_block0.c(); 24462 if_block0.m(h2, null); 24463 } 24464 } else if (if_block0) { 24465 if_block0.d(1); 24466 if_block0 = null; 24467 } 24468 24469 let previous_block_index = current_block_type_index; 24470 current_block_type_index = select_block_type(ctx); 24471 24472 if (current_block_type_index === previous_block_index) { 24473 if_blocks[current_block_type_index].p(ctx, dirty); 24474 } else { 24475 group_outros(); 24476 24477 transition_out(if_blocks[previous_block_index], 1, 1, () => { 24478 if_blocks[previous_block_index] = null; 24479 }); 24480 24481 check_outros(); 24482 if_block1 = if_blocks[current_block_type_index]; 24483 24484 if (!if_block1) { 24485 if_block1 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 24486 if_block1.c(); 24487 } else { 24488 if_block1.p(ctx, dirty); 24489 } 24490 24491 transition_in(if_block1, 1); 24492 if_block1.m(div1, null); 24493 } 24494 }, 24495 i(local) { 24496 if (current) return; 24497 transition_in(if_block1); 24498 current = true; 24499 }, 24500 o(local) { 24501 transition_out(if_block1); 24502 current = false; 24503 }, 24504 d(detaching) { 24505 if (detaching) { 24506 detach(div2); 24507 } 24508 24509 if (if_block0) if_block0.d(); 24510 if_blocks[current_block_type_index].d(); 24511 } 24512 }; 24513 } 24514 24515 function instance$w($$self, $$props, $$invalidate) { 24516 let displayedFields; 24517 let { subscription } = $$props; 24518 let { nextPaymentDateText = '' } = $$props; 24519 let { subscriptionRateText } = $$props; 24520 let { billingHistoryLink = '' } = $$props; 24521 24522 let { onViewHistory = () => { 24523 24524 } } = $$props; 24525 24526 let { onChangePayment = () => { 24527 24528 } } = $$props; 24529 24530 let { logChangeSubscription = () => { 24531 24532 } } = $$props; 24533 24534 let { logCancelSubscription = () => { 24535 24536 } } = $$props; 24537 24538 let { logSuspendResumeSubscription = () => { 24539 24540 } } = $$props; 24541 24542 let { logUpdateBillToContact = () => { 24543 24544 } } = $$props; 24545 24546 let { changePaymentMethodText = '' } = $$props; 24547 let { changeSubscriptionText = '' } = $$props; 24548 let { cancelSubscriptionText = '' } = $$props; 24549 let { changeSubscriptionPath = '' } = $$props; 24550 let { cancelSubscriptionPath = '' } = $$props; 24551 let { suspendResumeSubscriptionText = '' } = $$props; 24552 let { suspendResumeSubscriptionPath = '' } = $$props; 24553 let { subscriptionCustomFieldsText } = $$props;
24554 let { onUpdateSubscriptionCustomFields } = $$props; 24555 let { updateBillToContactText } = $$props; 24556 let { updateBillToContactPath } = $$props; 24557 let { elementsOrder = [] } = $$props; 24558 24559 let { elementsHide = { 24560 subscriptionInformation: false, 24561 changePayment: true, 24562 changeSubscription: true, 24563 cancelSubscription: true, 24564 billingHistory: true, 24565 suspendResumeSubscription: true, 24566 subscriptionCustomFields: true, 24567 updateBillToContact: true 24568 } } = $$props; 24569 24570 let { isInactive = false } = $$props; 24571 let { displayedCustomFields = {} } = $$props; 24572 let { giftPillText = 'Gift' } = $$props; 24573 let { paymentProvider = '' } = $$props; 24574 let { autoRenewToggleEnabled = false } = $$props; 24575 let { autoRenewToggleText = 'Auto-renew subscription' } = $$props; 24576 let { autoRenewSuccessMessage = 'Preferences updated' } = $$props; 24577 let { autoRenewErrorMessage = 'Something went wrong. Please try again later' } = $$props; 24578 let { onAutoRenewToggle = async () => ({ success: false }) } = $$props; 24579 let isUpdatingAutoRenew = false; 24580 let statusMessage = ''; 24581 let statusType = ''; 24582 let statusTimeout = null; 24583 let autoRenewValue = subscription.autoRenew ?? false; // Local checkbox state 24584 24585 // Ensures we append the subscription id correctly whether or not the base path already has query params 24586 const withSubscriptionParam = (basePath, subscriptionId) => { 24587 if (!basePath) return ''; 24588 const hasQuery = basePath.includes('?'); 24589 const separator = hasQuery ? '&' : '?'; 24590 return `${basePath}${separator}subscription=${encodeURIComponent(subscriptionId)}`; 24591 }; 24592 24593 const handleAutoRenewChange = async event => { 24594 const newAutoRenewValue = event.detail; 24595 24596 // Clear any existing status message 24597 clearStatusMessage(); 24598 24599 // Revert checkbox to previous state immediately (will update on success) 24600 $$invalidate(31, autoRenewValue = subscription.autoRenew ?? false); 24601 24602 $$invalidate(28, isUpdatingAutoRenew = true); 24603 24604 try { 24605 const result = await onAutoRenewToggle(subscription, newAutoRenewValue); 24606 24607 if (result.success) { 24608 // Update local subscription state (this will trigger checkbox update via reactive statement) 24609 $$invalidate(0, subscription.autoRenew = newAutoRenewValue, subscription); 24610 24611 // Show success message for 5 seconds 24612 $$invalidate(29, statusMessage = autoRenewSuccessMessage); 24613 24614 $$invalidate(30, statusType = 'success'); 24615 24616 statusTimeout = setTimeout( 24617 () => { 24618 clearStatusMessage(); 24619 }, 24620 5000 24621 ); 24622 } else { 24623 // Show error message persistently (checkbox already reverted) 24624 $$invalidate(29, statusMessage = autoRenewErrorMessage); 24625 24626 $$invalidate(30, statusType = 'error'); 24627 } 24628 } catch(error) { 24629 console.error('Failed to update auto-renewal:', error); 24630 24631 // Show error message persistently (checkbox already reverted) 24632 $$invalidate(29, statusMessage = autoRenewErrorMessage); 24633 24634 $$invalidate(30, statusType = 'error'); 24635 } finally { 24636 $$invalidate(28, isUpdatingAutoRenew = false); 24637 } 24638 }; 24639 24640 const clearStatusMessage = () => { 24641 if (statusTimeout) { 24642 clearTimeout(statusTimeout); 24643 statusTimeout = null; 24644 } 24645 24646 $$invalidate(29, statusMessage = ''); 24647 $$invalidate(30, statusType = ''); 24648 }; 24649 24650 // Clean up timeout on component destroy 24651 onDestroy(() => { 24652 if (statusTimeout) { 24653 clearTimeout(statusTimeout); 24654 } 24655 }); 24656 24657 const func = () => onViewHistory(subscription); 24658 const func_1 = () => onChangePayment(subscription); 24659 const func_2 = () => logChangeSubscription(subscription); 24660 const func_3 = () => logCancelSubscription(subscription); 24661 const func_4 = () => logSuspendResumeSubscription(subscription); 24662 const func_5 = () => onUpdateSubscriptionCustomFields(subscription); 24663 const func_6 = () => logUpdateBillToContact(subscription); 24664 24665 $$self.$$set = $$props => {
24666 if ('subscription' in $$props) $$invalidate(0, subscription = $$props.subscription); 24667 if ('nextPaymentDateText' in $$props) $$invalidate(1, nextPaymentDateText = $$props.nextPaymentDateText); 24668 if ('subscriptionRateText' in $$props) $$invalidate(2, subscriptionRateText = $$props.subscriptionRateText); 24669 if ('billingHistoryLink' in $$props) $$invalidate(3, billingHistoryLink = $$props.billingHistoryLink); 24670 if ('onViewHistory' in $$props) $$invalidate(4, onViewHistory = $$props.onViewHistory); 24671 if ('onChangePayment' in $$props) $$invalidate(5, onChangePayment = $$props.onChangePayment); 24672 if ('logChangeSubscription' in $$props) $$invalidate(6, logChangeSubscription = $$props.logChangeSubscription); 24673 if ('logCancelSubscription' in $$props) $$invalidate(7, logCancelSubscription = $$props.logCancelSubscription); 24674 if ('logSuspendResumeSubscription' in $$props) $$invalidate(8, logSuspendResumeSubscription = $$props.logSuspendResumeSubscription); 24675 if ('logUpdateBillToContact' in $$props) $$invalidate(9, logUpdateBillToContact = $$props.logUpdateBillToContact);
24676 if ('changePaymentMethodText' in $$props) $$invalidate(10, changePaymentMethodText = $$props.changePaymentMethodText); 24677 if ('changeSubscriptionText' in $$props) $$invalidate(11, changeSubscriptionText = $$props.changeSubscriptionText); 24678 if ('cancelSubscriptionText' in $$props) $$invalidate(12, cancelSubscriptionText = $$props.cancelSubscriptionText); 24679 if ('changeSubscriptionPath' in $$props) $$invalidate(13, changeSubscriptionPath = $$props.changeSubscriptionPath); 24680 if ('cancelSubscriptionPath' in $$props) $$invalidate(14, cancelSubscriptionPath = $$props.cancelSubscriptionPath); 24681 if ('suspendResumeSubscriptionText' in $$props) $$invalidate(15, suspendResumeSubscriptionText = $$props.suspendResumeSubscriptionText); 24682 if ('suspendResumeSubscriptionPath' in $$props) $$invalidate(16, suspendResumeSubscriptionPath = $$props.suspendResumeSubscriptionPath); 24683 if ('subscriptionCustomFieldsText' in $$props) $$invalidate(17, subscriptionCustomFieldsText = $$props.subscriptionCustomFieldsText); 24684 if ('onUpdateSubscriptionCustomFields' in $$props) $$invali
24684date(18, onUpdateSubscriptionCustomFields = $$props.onUpdateSubscriptionCustomFields); 24685 if ('updateBillToContactText' in $$props) $$invalidate(19, updateBillToContactText = $$props.updateBillToContactText); 24686 if ('updateBillToContactPath' in $$props) $$invalidate(20, updateBillToContactPath = $$props.updateBillToContactPath); 24687 if ('elementsOrder' in $$props) $$invalidate(21, elementsOrder = $$props.elementsOrder); 24688 if ('elementsHide' in $$props) $$invalidate(22, elementsHide = $$props.elementsHide); 24689 if ('isInactive' in $$props) $$invalidate(23, isInactive = $$props.isInactive); 24690 if ('displayedCustomFields' in $$props) $$invalidate(35, displayedCustomFields = $$props.displayedCustomFields); 24691 if ('giftPillText' in $$props) $$invalidate(24, giftPillText = $$props.giftPillText); 24692 if ('paymentProvider' in $$props) $$invalidate(25, paymentProvider = $$props.paymentProvider); 24693 if ('autoRenewToggleEnabled' in $$props) $$invalidate(26, autoRenewToggleEnabled = $$props.autoRenewToggleEnabled); 24694 if ('autoRenewToggleText' in $$props) $$invali
24694date(27, autoRenewToggleText = $$props.autoRenewToggleText); 24695 if ('autoRenewSuccessMessage' in $$props) $$invalidate(36, autoRenewSuccessMessage = $$props.autoRenewSuccessMessage); 24696 if ('autoRenewErrorMessage' in $$props) $$invalidate(37, autoRenewErrorMessage = $$props.autoRenewErrorMessage); 24697 if ('onAutoRenewToggle' in $$props) $$invalidate(38, onAutoRenewToggle = $$props.onAutoRenewToggle); 24698 }; 24699 24700 $$self.$$.update = () => { 24701 if ($$self.$$.dirty[0] & /*subscription*/ 1 | $$self.$$.dirty[1] & /*displayedCustomFields*/ 16) { 24702 // Compute displayed custom fields 24703 $$invalidate(32, displayedFields = Object.entries(displayedCustomFields).filter(([fieldId, fieldConfig]) => fieldConfig.enabled && subscription[fieldId]).map(([fieldId, fieldConfig]) => ({ 24704 label: fieldConfig.label, 24705 value: subscription[fieldId] 24706 }))); 24707 } 24708 24709 if ($$self.$$.dirty[0] & /*subscription*/ 1) { 24710 // Update local checkbox state when subscription changes 24711 $$invalidate(31, autoRenewValue = subscription.autoRenew ?? false); 24712 } 24713 }; 24714 24715 return [ 24716 subscription, 24717 nextPaymentDateText, 24718 subscriptionRateText, 24719 billingHistoryLink, 24720 onViewHistory, 24721 onChangePayment, 24722 logChangeSubscription, 24723 logCancelSubscription, 24724 logSuspendResumeSubscription, 24725 logUpdateBillToContact, 24726 changePaymentMethodText, 24727 changeSubscriptionText, 24728 cancelSubscriptionText, 24729 changeSubscriptionPath, 24730 cancelSubscriptionPath, 24731 suspendResumeSubscriptionText, 24732 suspendResumeSubscriptionPath, 24733 subscriptionCustomFieldsText,
24734 onUpdateSubscriptionCustomFields, 24735 updateBillToContactText, 24736 updateBillToContactPath, 24737 elementsOrder, 24738 elementsHide, 24739 isInactive, 24740 giftPillText, 24741 paymentProvider, 24742 autoRenewToggleEnabled, 24743 autoRenewToggleText, 24744 isUpdatingAutoRenew, 24745 statusMessage, 24746 statusType, 24747 autoRenewValue, 24748 displayedFields, 24749 withSubscriptionParam, 24750 handleAutoRenewChange, 24751 displayedCustomFields, 24752 autoRenewSuccessMessage, 24753 autoRenewErrorMessage, 24754 onAutoRenewToggle, 24755 func, 24756 func_1, 24757 func_2, 24758 func_3, 24759 func_4, 24760 func_5, 24761 func_6 24762 ]; 24763 } 24764 24765 class SubscriptionsListBoxItem extends SvelteComponent { 24766 constructor(options) { 24767 super(); 24768 24769 init( 24770 this, 24771 options, 24772 instance$w, 24773 create_fragment$w, 24774 safe_not_equal, 24775 { 24776 subscription: 0, 24777 nextPaymentDateText: 1, 24778 subscriptionRateText: 2, 24779 billingHistoryLink: 3, 24780 onViewHistory: 4, 24781 onChangePayment: 5, 24782 logChangeSubscription: 6, 24783 logCancelSubscription: 7, 24784 logSuspendResumeSubscription: 8, 24785 logUpdateBillToContact: 9, 24786 changePaymentMethodText: 10, 24787 changeSubscriptionText: 11, 24788 cancelSubscriptionText: 12, 24789 changeSubscriptionPath: 13, 24790 cancelSubscriptionPath: 14, 24791 suspendResumeSubscriptionText: 15, 24792 suspendResumeSubscriptionPath: 16, 24793 subscriptionCustomFieldsText: 17, 24794 onUpdateSubscriptionCustomFields: 18, 24795 updateBillToContactText: 19, 24796 updateBillToContactPath: 20, 24797 elementsOrder: 21, 24798 elementsHide: 22, 24799 isInactive: 23, 24800 displayedCustomFields: 35, 24801 giftPillText: 24, 24802 paymentProvider: 25, 24803 autoRenewToggleEnabled: 26, 24804 autoRenewToggleText: 27, 24805 autoRenewSuccessMessage: 36, 24806 autoRenewErrorMessage: 37, 24807 onAutoRenewToggle: 38 24808 }, 24809 null, 24810 [-1, -1] 24811 ); 24812 } 24813 } 24814 24815 /* src/components/elements/subscriptionsList/SubscriptionsList.svelte generated by Svelte v4.2.12 */ 24816 24817 function get_each_context$9(ctx, list, i) { 24818 const child_ctx = ctx.slice(); 24819 child_ctx[34] = list[i]; 24820 return child_ctx; 24821 } 24822 24823 function get_each_context_1$1(ctx, list, i) { 24824 const child_ctx = ctx.slice(); 24825 child_ctx[34] = list[i]; 24826 return child_ctx; 24827 } 24828 24829 // (44:2) {#if loading} 24830 function create_if_block_6$4(ctx) { 24831 let spinner; 24832 let current; 24833 spinner = new Spinner({}); 24834 24835 return { 24836 c() { 24837 create_component(spinner.$$.fragment); 24838 }, 24839 m(target, anchor) { 24840 mount_component(spinner, target, anchor); 24841 current = true; 24842 }, 24843 i(local) { 24844 if (current) return; 24845 transition_in(spinner.$$.fragment, local); 24846 current = true; 24847 }, 24848 o(local) { 24849 transition_out(spinner.$$.fragment, local); 24850 current = false; 24851 }, 24852 d(detaching) { 24853 destroy_component(spinner, detaching); 24854 } 24855 }; 24856 } 24857 24858 // (47:2) {#if !isPastSubscriptions} 24859 function create_if_block_2$9(ctx) { 24860 let t; 24861 let each_1_anchor; 24862 let current; 24863 let if_block = !/*loading*/ ctx[10] && !/*subscriptions*/ ctx[6].length && create_if_block_5$4(ctx); 24864 let each_value_1 = ensure_array_like(/*subscriptions*/ ctx[6]); 24865 let each_blocks = []; 24866 24867 for (let i = 0; i < each_value_1.length; i += 1) { 24868 each_blocks[i] = create_each_block_1$1(get_each_context_1$1(ctx, each_value_1, i)); 24869 } 24870 24871 const out = i => transition_out(each_blocks[i], 1, 1, () => { 24872 each_blocks[i] = null; 24873 }); 24874 24875 return { 24876 c() { 24877 if (if_block) if_block.c(); 24878 t = space(); 24879 24880 for (let i = 0; i < each_blocks.length; i += 1) { 24881 each_blocks[i].c(); 24882 } 24883 24884 each_1_anchor = empty(); 24885 }, 24886 m(target, anchor) { 24887 if (if_block) if_block.m(target, anchor); 24888 insert(target, t, anchor); 24889 24890 for (let i = 0; i < each_blocks.length; i += 1) { 24891 if (each_blocks[i]) { 24892 each_blocks[i].m(target, anchor); 24893 } 24894 } 24895 24896 insert(target, each_1_anchor, anchor); 24897 current = true; 24898 }, 24899 p(ctx, dirty) { 24900 if (!/*loading*/ ctx[10] && !/*subscriptions*/ ctx[6].length) { 24901 if (if_block) { 24902 if_block.p(ctx, dirty); 24903 } else { 24904 if_block = create_if_block_5$4(ctx); 24905 if_block.c(); 24906 if_block.m(t.parentNode, t); 24907 } 24908 } else if (if_block) { 24909 if_block.d(1); 24910 if_block = null; 24911 } 24912
24913 if (dirty[0] & /*subscriptions, nextPaymentDateText, subscriptionRateText, billingHistoryLink, onViewHistory, onChangePayment, logChangeSubscription, logCancelSubscription, logSuspendResumeSubscription, changePaymentMethodText, changeSubscriptionText, cancelSubscriptionText, changeSubscriptionPath, cancelSubscriptionPath, suspendResumeSubscriptionText, suspendResumeSubscriptionPath, subscriptionCustomFieldsText, onUpdateSubscriptionCustomFields, updateBillToContactText, updateBillToContactPath, elementsOrder, elementsHide, giftPillText, paymentProvider, autoRenewToggleEnabled, autoRenewToggleText, billingHistoryText*/ 2147482492 | dirty[1] & /*onAutoRenewToggle, displayedCustomFields*/ 3) { 24914 each_value_1 = ensure_array_like(/*subscriptions*/ ctx[6]); 24915 let i; 24916 24917 for (i = 0; i < each_value_1.length; i += 1) { 24918 const child_ctx = get_each_context_1$1(ctx, each_value_1, i); 24919 24920 if (each_blocks[i]) { 24921 each_blocks[i].p(child_ctx, dirty); 24922 transition_in(each_blocks[i], 1); 24923 } else { 24924 each_blocks[i] = create_each_block_1$1(child_ctx); 24925 each_blocks[i].c(); 24926 transition_in(each_blocks[i], 1); 24927 each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); 24928 } 24929 } 24930 24931 group_outros(); 24932 24933 for (i = each_value_1.length; i < each_blocks.length; i += 1) { 24934 out(i); 24935 } 24936 24937 check_outros(); 24938 } 24939 }, 24940 i(local) { 24941 if (current) return; 24942 24943 for (let i = 0; i < each_value_1.length; i += 1) { 24944 transition_in(each_blocks[i]); 24945 } 24946 24947 current = true; 24948 }, 24949 o(local) {
24950 each_blocks = each_blocks.filter(Boolean); 24951 24952 for (let i = 0; i < each_blocks.length; i += 1) { 24953 transition_out(each_blocks[i]); 24954 } 24955 24956 current = false; 24957 }, 24958 d(detaching) { 24959 if (detaching) { 24960 detach(t); 24961 detach(each_1_anchor); 24962 } 24963 24964 if (if_block) if_block.d(detaching); 24965 destroy_each(each_blocks, detaching); 24966 } 24967 }; 24968 } 24969 24970 // (48:4) {#if !loading && !subscriptions.length} 24971 function create_if_block_5$4(ctx) { 24972 let div; 24973 24974 return { 24975 c() { 24976 div = element("div"); 24977 }, 24978 m(target, anchor) { 24979 insert(target, div, anchor); 24980 div.innerHTML = /*noSubscriptionsMessage*/ ctx[1]; 24981 }, 24982 p(ctx, dirty) { 24983 if (dirty[0] & /*noSubscriptionsMessage*/ 2) div.innerHTML = /*noSubscriptionsMessage*/ ctx[1]; }, 24984 d(detaching) { 24985 if (detaching) { 24986 detach(div); 24987 } 24988 } 24989 }; 24990 } 24991 24992 // (85:6) {:else} 24993 function create_else_block$2(ctx) { 24994 let subscriptionslistitem; 24995 let t; 24996 let if_block_anchor; 24997 let current; 24998 24999 subscriptionslistitem = new SubscriptionsListItem({ 25000 props: { 25001 subscription: /*subscription*/ ctx[34], 25002 nextPaymentDateText: /*nextPaymentDateText*/ ctx[4], 25003 subscriptionRateText: /*subscriptionRateText*/ ctx[5], 25004 billingHistoryText: /*billingHistoryText*/ ctx[2], 25005 billingHistoryLink: /*billingHistoryLink*/ ctx[3], 25006 onViewHistory: /*onViewHistory*/ ctx[15], 25007 showBillingHistory: /*paymentProvider*/ ctx[8] !== "zuora-billing", 25008 giftPillText: /*giftPillText*/ ctx[28] 25009 } 25010 }); 25011 25012 let if_block = /*paymentProvider*/ ctx[8] !== "zuora-billing" && /*subscription*/ ctx[34].status === "active" && !/*subscription*/ ctx[34].isGift && create_if_block_4$4(ctx); 25013 25014 return { 25015 c() { 25016 create_component(subscriptionslistitem.$$.fragment); 25017 t = space(); 25018 if (if_block) if_block.c(); 25019 if_block_anchor = empty(); 25020 }, 25021 m(target, anchor) { 25022 mount_component(subscriptionslistitem, target, anchor); 25023 insert(target, t, anchor); 25024 if (if_block) if_block.m(target, anchor); 25025 insert(target, if_block_anchor, anchor); 25026 current = true; 25027 }, 25028 p(ctx, dirty) { 25029 const subscriptionslistitem_changes = {}; 25030 if (dirty[0] & /*subscriptions*/ 64) subscriptionslistitem_changes.subscription = /*subscription*/ ctx[34]; 25031 if (dirty[0] & /*nextPaymentDateText*/ 16) subscriptionslistitem_changes.nextPaymentDateText = /*nextPaymentDateText*/ ctx[4]; 25032 if (dirty[0] & /*subscriptionRateText*/ 32) subscriptionslistitem_changes.subscriptionRateText = /*subscriptionRateText*/ ctx[5]; 25033 if (dirty[0] & /*billingHistoryText*/ 4) subscriptionslistitem_changes.billingHistoryText = /*billingHistoryText*/ ctx[2]; 25034 if (dirty[0] & /*billingHistoryLink*/ 8) subscriptionslistitem_changes.billingHistoryLink = /*billingHistoryLink*/ ctx[3]; 25035 if (dirty[0] & /*onViewHistory*/ 32768) subscriptionslistitem_changes.onViewHistory = /*onViewHistory*/ ctx[15]; 25036 if (dirty[0] & /*paymentProvider*/ 256) subscriptionslistitem_changes.showBillingHistory = /*paymentProvider*/ ctx[8] !== "zuora-billing"; 25037 if (dirty[0] & /*giftPillText*/ 268435456) subscriptionslistitem_changes.giftPillText = /*giftPillText*/ ctx[28]; 25038 subscriptionslistitem.$set(subscriptionslistitem_changes); 25039 25040 if (/*paymentProvider*/ ctx[8] !== "zuora-billing" && /*subscription*/ ctx[34].status === "active" && !/*subscription*/ ctx[34].isGift) { 25041 if (if_block) { 25042 if_block.p(ctx, dirty); 25043 25044 if (dirty[0] & /*paymentProvider, subscriptions*/ 320) { 25045 transition_in(if_block, 1); 25046 } 25047 } else { 25048 if_block = create_if_block_4$4(ctx); 25049 if_block.c(); 25050 transition_in(if_block, 1); 25051 if_block.m(if_block_anchor.parentNode, if_block_anchor); 25052 } 25053 } else if (if_block) { 25054 group_outros(); 25055 25056 transition_out(if_block, 1, 1, () => { 25057 if_block = null; 25058 }); 25059 25060 check_outros(); 25061 } 25062 }, 25063 i(local) { 25064 if (current) return; 25065 transition_in(subscriptionslistitem.$$.fragment, local); 25066 transition_in(if_block); 25067 current = true; 25068 }, 25069 o(local) { 25070 transition_out(subscriptionslistitem.$$.fragment, local); 25071 transition_out(if_block); 25072 current = false;
25073 }, 25074 d(detaching) { 25075 if (detaching) { 25076 detach(t); 25077 detach(if_block_anchor); 25078 } 25079 25080 destroy_component(subscriptionslistitem, detaching); 25081 if (if_block) if_block.d(detaching); 25082 } 25083 }; 25084 } 25085 25086 // (54:6) {#if elementsOrder} 25087 function create_if_block_3$5(ctx) { 25088 let subscriptionslistboxitem; 25089 let current; 25090 25091 subscriptionslistboxitem = new SubscriptionsListBoxItem({ 25092 props: { 25093 subscription: /*subscription*/ ctx[34], 25094 nextPaymentDateText: /*nextPaymentDateText*/ ctx[4], 25095 subscriptionRateText: /*subscriptionRateText*/ ctx[5], 25096 billingHistoryLink: /*billingHistoryLink*/ ctx[3], 25097 onViewHistory: /*onViewHistory*/ ctx[15], 25098 onChangePayment: /*onChangePayment*/ ctx[11], 25099 logChangeSubscription: /*logChangeSubscription*/ ctx[12], 25100 logCancelSubscription: /*logCancelSubscription*/ ctx[13], 25101 logSuspendResumeSubscription: /*logSuspendResumeSubscription*/ ctx[14], 25102 changePaymentMethodText: /*changePaymentMethodText*/ ctx[9], 25103 changeSubscriptionText: /*changeSubscriptionText*/ ctx[16], 25104 cancelSubscriptionText: /*cancelSubscriptionText*/ ctx[17], 25105 changeSubscriptionPath: /*changeSubscriptionPath*/ ctx[18], 25106 cancelSubscriptionPath: /*cancelSubscriptionPath*/ ctx[19], 25107 suspendResumeSubscriptionText: /*suspendResumeSubscriptionText*/ ctx[20],
25108 suspendResumeSubscriptionPath: /*suspendResumeSubscriptionPath*/ ctx[21], 25109 subscriptionCustomFieldsText: /*subscriptionCustomFieldsText*/ ctx[22], 25110 onUpdateSubscriptionCustomFields: /*onUpdateSubscriptionCustomFields*/ ctx[23], 25111 updateBillToContactText: /*updateBillToContactText*/ ctx[24], 25112 updateBillToContactPath: /*updateBillToContactPath*/ ctx[25], 25113 elementsOrder: /*elementsOrder*/ ctx[26], 25114 elementsHide: /*elementsHide*/ ctx[27], 25115 giftPillText: /*giftPillText*/ ctx[28], 25116 paymentProvider: /*paymentProvider*/ ctx[8], 25117 autoRenewToggleEnabled: /*autoRenewToggleEnabled*/ ctx[29], 25118 autoRenewToggleText: /*autoRenewToggleText*/ ctx[30], 25119 onAutoRenewToggle: /*onAutoRenewToggle*/ ctx[31], 25120 displayedCustomFields: /*displayedCustomFields*/ ctx[32] 25121 } 25122 }); 25123 25124 return { 25125 c() { 25126 create_component(subscriptionslistboxitem.$$.fragment); 25127 }, 25128 m(target, anchor) { 25129 mount_component(subscriptionslistboxitem, target, anchor); 25130 current = true; 25131 }, 25132 p(ctx, dirty) { 25133 const subscriptionslistboxitem_changes = {}; 25134 if (dirty[0] & /*subscriptions*/ 64) subscriptionslistboxitem_changes.subscription = /*subscription*/ ctx[34]; 25135 if (dirty[0] & /*nextPaymentDateText*/ 16) subscriptionslistboxitem_changes.nextPaymentDateText = /*nextPaymentDateText*/ ctx[4]; 25136 if (dirty[0] & /*subscriptionRateText*/ 32) subscriptionslistboxitem_changes.subscriptionRateText = /*subscriptionRateText*/ ctx[5]; 25137 if (dirty[0] & /*billingHistoryLink*/ 8) subscriptionslistboxitem_changes.billingHistoryLink = /*billingHistoryLink*/ ctx[3]; 25138 if (dirty[0] & /*onViewHistory*/ 32768) subscriptionslistboxitem_changes.onViewHistory = /*onViewHistory*/ ctx[15]; 25139 if (dirty[0] & /*onChangePayment*/ 2048) subscriptionslistboxitem_changes.onChangePayment = /*onChangePayment*/ ctx[11]; 25140 if (dirty[0] & /*logChangeSubscription*/ 4096) subscriptionslistboxitem_changes.logChangeSubscription = /*logChangeSubscription*/ ctx[12]; 25141 if (dirty[0] & /*logCancelSubscription*/ 8192) subscriptionslistboxitem_changes.logCancelSubscription = /*logCancelSubscription*/ ctx[13]; 25142 if (dirty[0] & /*logSuspendResumeSubscription*/ 16384) subscriptionslistboxitem_changes.logSuspendResumeSubscription = /*logSuspendResumeSubscription*/ ctx[14]; 25143 if (dirty[0] & /*changePaymentMethodText*/ 512) subscriptionslistboxitem_changes.changePaymentMethodText = /*changePaymentMethodText*/ ctx[9]; 25144 if (dirty[0] & /*changeSubscriptionText*/ 65536) subscriptionslistboxitem_changes.changeSubscriptionText = /*changeSubscriptionText*/ ctx[16]; 25145 if (dirty[0] & /*cancelSubscriptionText*/ 131072) subscriptionslistboxitem_changes.cancelSubscriptionText = /*cancelSubscriptionText*/ ctx[17]; 25146 if (dirty[0] & /*changeSubscriptionPath*/ 262144) subscriptionslistboxitem_changes.changeSubscriptionPath = /*changeSubscriptionPath*/ ctx[18]; 25147 if (dirty[0] & /*cancelSubscriptionPath*/ 524288) subscriptionslistboxitem_changes.cancelSubscriptionPath = /*cancelSubscriptionPath*/ ctx[19]; 25148 if (dirty[0] & /*suspendResumeSubscriptionText*/ 1048576) subscriptionslistboxitem_changes.suspendResumeSubscriptionText = /*suspendResumeSubscriptionText*/ ctx[20]; 25149 if (dirty[0] & /*suspendResumeSubscriptionPath*/ 2097152) subscriptionslistboxitem_changes.suspendResumeSubscriptionPath = /*suspendResumeSubscriptionPath*/ ctx[21]; 25150 if (dirty[0] & /*subscriptionCustomFieldsText*/ 4194304) subscriptionslistboxitem_changes.subscriptionCustomFieldsText = /*subscriptionCustomFieldsText*/ ctx[22]; 25151 if (dirty[0] & /*onUpdateSubscriptionCustomFields*/ 8388608) subscriptionslistboxitem_changes.onUpdateSubscriptionCustomFields = /*onUpdateSubscriptionCustomFields*/ ctx[23]; 25152 if (dirty[0] & /*updateBillToContactText*/ 16777216) subscriptionslistboxitem_changes.updateBillToContactText = /*updateBillToContactText*/ ctx[24]; 25153 if (dirty[0] & /*updateBillToContactPath*/ 33554432) subscriptionslistboxitem_changes.updateBillToContactPath = /*updateBillToContactPath*/ ctx[25]; 25154 if (dirty[0] & /*elementsOrder*/ 67108864) subscriptionslistboxitem_changes.elementsOrder = /*elementsOrder*/ ctx[26];
25155 if (dirty[0] & /*elementsHide*/ 134217728) subscriptionslistboxitem_changes.elementsHide = /*elementsHide*/ ctx[27]; 25156 if (dirty[0] & /*giftPillText*/ 268435456) subscriptionslistboxitem_changes.giftPillText = /*giftPillText*/ ctx[28]; 25157 if (dirty[0] & /*paymentProvider*/ 256) subscriptionslistboxitem_changes.paymentProvider = /*paymentProvider*/ ctx[8]; 25158 if (dirty[0] & /*autoRenewToggleEnabled*/ 536870912) subscriptionslistboxitem_changes.autoRenewToggleEnabled = /*autoRenewToggleEnabled*/ ctx[29]; 25159 if (dirty[0] & /*autoRenewToggleText*/ 1073741824) subscriptionslistboxitem_changes.autoRenewToggleText = /*autoRenewToggleText*/ ctx[30]; 25160 if (dirty[1] & /*onAutoRenewToggle*/ 1) subscriptionslistboxitem_changes.onAutoRenewToggle = /*onAutoRenewToggle*/ ctx[31]; 25161 if (dirty[1] & /*displayedCustomFields*/ 2) subscriptionslistboxitem_changes.displayedCustomFields = /*displayedCustomFields*/ ctx[32]; 25162 subscriptionslistboxitem.$set(subscriptionslistboxitem_changes); 25163 }, 25164 i(local) { 25165 if (current) return; 25166 transition_in(subscriptionslistboxitem.$$.fragment, local); 25167 current = true; 25168 }, 25169 o(local) { 25170 transition_out(subscriptionslistboxitem.$$.fragment, local); 25171 current = false; 25172 }, 25173 d(detaching) { 25174 destroy_component(subscriptionslistboxitem, detaching); 25175 } 25176 }; 25177 } 25178 25179 // (96:8) {#if paymentProvider !== "zuora-billing" && subscription.status === "active" && !subscription.isGift} 25180 function create_if_block_4$4(ctx) { 25181 let button; 25182 let current; 25183 25184 function func() { 25185 return /*func*/ ctx[33](/*subscription*/ ctx[34]); 25186 } 25187 25188 button = new Button({ 25189 props: { 25190 disabled: false, 25191 text: /*changePaymentMethodText*/ ctx[9], 25192 onClick: func, 25193 noMargin: true 25194 } 25195 }); 25196 25197 return { 25198 c() { 25199 create_component(button.$$.fragment); 25200 }, 25201 m(target, anchor) { 25202 mount_component(button, target, anchor); 25203 current = true; 25204 }, 25205 p(new_ctx, dirty) { 25206 ctx = new_ctx; 25207 const button_changes = {}; 25208 if (dirty[0] & /*changePaymentMethodText*/ 512) button_changes.text = /*changePaymentMethodText*/ ctx[9]; 25209 if (dirty[0] & /*onChangePayment, subscriptions*/ 2112) button_changes.onClick = func; 25210 button.$set(button_changes); 25211 }, 25212 i(local) { 25213 if (current) return; 25214 transition_in(button.$$.fragment, local); 25215 current = true; 25216 }, 25217 o(local) { 25218 transition_out(button.$$.fragment, local); 25219 current = false; 25220 }, 25221 d(detaching) { 25222 destroy_component(button, detaching); 25223 } 25224 }; 25225 } 25226 25227 // (53:4) {#each subscriptions as subscription} 25228 function create_each_block_1$1(ctx) { 25229 let current_block_type_index; 25230 let if_block; 25231 let if_block_anchor; 25232 let current; 25233 const if_block_creators = [create_if_block_3$5, create_else_block$2]; 25234 const if_blocks = []; 25235 25236 function select_block_type(ctx, dirty) { 25237 if (/*elementsOrder*/ ctx[26]) return 0; 25238 return 1; 25239 } 25240 25241 current_block_type_index = select_block_type(ctx); 25242 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 25243 25244 return { 25245 c() { 25246 if_block.c(); 25247 if_block_anchor = empty(); 25248 }, 25249 m(target, anchor) { 25250 if_blocks[current_block_type_index].m(target, anchor); 25251 insert(target, if_block_anchor, anchor); 25252 current = true; 25253 }, 25254 p(ctx, dirty) { 25255 let previous_block_index = current_block_type_index; 25256 current_block_type_index = select_block_type(ctx); 25257 25258 if (current_block_type_index === previous_block_index) { 25259 if_blocks[current_block_type_index].p(ctx, dirty); 25260 } else { 25261 group_outros(); 25262 25263 transition_out(if_blocks[previous_block_index], 1, 1, () => { 25264 if_blocks[previous_block_index] = null; 25265 }); 25266 25267 check_outros(); 25268 if_block = if_blocks[current_block_type_index]; 25269 25270 if (!if_block) { 25271 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 25272 if_block.c(); 25273 } else { 25274 if_block.p(ctx, dirty); 25275 } 25276 25277 transition_in(if_block, 1); 25278 if_block.m(if_block_anchor.parentNode, if_block_anchor); 25279 } 25280 }, 25281 i(local) { 25282 if (current) return; 25283 transition_in(if_block); 25284 current = true; 25285 }, 25286 o(local) { 25287 transition_out(if_block); 25288 current = false;
25289 }, 25290 d(detaching) { 25291 if (detaching) { 25292 detach(if_block_anchor); 25293 } 25294 25295 if_blocks[current_block_type_index].d(detaching); 25296 } 25297 }; 25298 } 25299 25300 // (107:2) {#if isPastSubscriptions} 25301 function create_if_block$o(ctx) { 25302 let t; 25303 let each_1_anchor; 25304 let current; 25305 let if_block = !/*loading*/ ctx[10] && !/*inactiveSubscriptions*/ ctx[7].length && create_if_block_1$f(ctx); 25306 let each_value = ensure_array_like(/*inactiveSubscriptions*/ ctx[7]); 25307 let each_blocks = []; 25308 25309 for (let i = 0; i < each_value.length; i += 1) { 25310 each_blocks[i] = create_each_block$9(get_each_context$9(ctx, each_value, i)); 25311 } 25312 25313 const out = i => transition_out(each_blocks[i], 1, 1, () => { 25314 each_blocks[i] = null; 25315 }); 25316 25317 return { 25318 c() { 25319 if (if_block) if_block.c(); 25320 t = space(); 25321 25322 for (let i = 0; i < each_blocks.length; i += 1) { 25323 each_blocks[i].c(); 25324 } 25325 25326 each_1_anchor = empty(); 25327 }, 25328 m(target, anchor) { 25329 if (if_block) if_block.m(target, anchor); 25330 insert(target, t, anchor); 25331 25332 for (let i = 0; i < each_blocks.length; i += 1) { 25333 if (each_blocks[i]) { 25334 each_blocks[i].m(target, anchor); 25335 } 25336 } 25337 25338 insert(target, each_1_anchor, anchor); 25339 current = true; 25340 }, 25341 p(ctx, dirty) { 25342 if (!/*loading*/ ctx[10] && !/*inactiveSubscriptions*/ ctx[7].length) { 25343 if (if_block) { 25344 if_block.p(ctx, dirty); 25345 } else { 25346 if_block = create_if_block_1$f(ctx); 25347 if_block.c(); 25348 if_block.m(t.parentNode, t); 25349 } 25350 } else if (if_block) { 25351 if_block.d(1); 25352 if_block = null; 25353 } 25354 25355 if (dirty[0] & /*inactiveSubscriptions, subscriptionRateText, giftPillText*/ 268435616 | dirty[1] & /*displayedCustomFields*/ 2) { 25356 each_value = ensure_array_like(/*inactiveSubscriptions*/ ctx[7]); 25357 let i; 25358 25359 for (i = 0; i < each_value.length; i += 1) { 25360 const child_ctx = get_each_context$9(ctx, each_value, i); 25361 25362 if (each_blocks[i]) { 25363 each_blocks[i].p(child_ctx, dirty); 25364 transition_in(each_blocks[i], 1); 25365 } else { 25366 each_blocks[i] = create_each_block$9(child_ctx); 25367 each_blocks[i].c(); 25368 transition_in(each_blocks[i], 1); 25369 each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); 25370 } 25371 } 25372 25373 group_outros(); 25374 25375 for (i = each_value.length; i < each_blocks.length; i += 1) { 25376 out(i); 25377 } 25378 25379 check_outros(); 25380 } 25381 }, 25382 i(local) { 25383 if (current) return; 25384 25385 for (let i = 0; i < each_value.length; i += 1) { 25386 transition_in(each_blocks[i]); 25387 } 25388 25389 current = true; 25390 }, 25391 o(local) {
25392 each_blocks = each_blocks.filter(Boolean); 25393 25394 for (let i = 0; i < each_blocks.length; i += 1) { 25395 transition_out(each_blocks[i]); 25396 } 25397 25398 current = false; 25399 }, 25400 d(detaching) { 25401 if (detaching) { 25402 detach(t); 25403 detach(each_1_anchor); 25404 } 25405 25406 if (if_block) if_block.d(detaching); 25407 destroy_each(each_blocks, detaching); 25408 } 25409 }; 25410 } 25411 25412 // (108:4) {#if !loading && !inactiveSubscriptions.length} 25413 function create_if_block_1$f(ctx) { 25414 let div; 25415 25416 return { 25417 c() { 25418 div = element("div"); 25419 }, 25420 m(target, anchor) { 25421 insert(target, div, anchor); 25422 div.innerHTML = /*noSubscriptionsMessage*/ ctx[1]; 25423 }, 25424 p(ctx, dirty) { 25425 if (dirty[0] & /*noSubscriptionsMessage*/ 2) div.innerHTML = /*noSubscriptionsMessage*/ ctx[1]; }, 25426 d(detaching) { 25427 if (detaching) { 25428 detach(div); 25429 } 25430 } 25431 }; 25432 } 25433 25434 // (113:4) {#each inactiveSubscriptions as subscription} 25435 function create_each_block$9(ctx) { 25436 let subscriptionslistboxitem; 25437 let current; 25438 25439 subscriptionslistboxitem = new SubscriptionsListBoxItem({ 25440 props: { 25441 subscription: /*subscription*/ ctx[34], 25442 isInactive: true, 25443 subscriptionRateText: /*subscriptionRateText*/ ctx[5], 25444 giftPillText: /*giftPillText*/ ctx[28], 25445 displayedCustomFields: /*displayedCustomFields*/ ctx[32], 25446 subscriptionCustomFieldsText: "", 25447 onUpdateSubscriptionCustomFields: func_1$1, 25448 updateBillToContactText: "", 25449 updateBillToContactPath: "" 25450 } 25451 }); 25452 25453 return { 25454 c() { 25455 create_component(subscriptionslistboxitem.$$.fragment); 25456 }, 25457 m(target, anchor) { 25458 mount_component(subscriptionslistboxitem, target, anchor); 25459 current = true; 25460 }, 25461 p(ctx, dirty) { 25462 const subscriptionslistboxitem_changes = {}; 25463 if (dirty[0] & /*inactiveSubscriptions*/ 128) subscriptionslistboxitem_changes.subscription = /*subscription*/ ctx[34]; 25464 if (dirty[0] & /*subscriptionRateText*/ 32) subscriptionslistboxitem_changes.subscriptionRateText = /*subscriptionRateText*/ ctx[5]; 25465 if (dirty[0] & /*giftPillText*/ 268435456) subscriptionslistboxitem_changes.giftPillText = /*giftPillText*/ ctx[28]; 25466 if (dirty[1] & /*displayedCustomFields*/ 2) subscriptionslistboxitem_changes.displayedCustomFields = /*displayedCustomFields*/ ctx[32]; 25467 subscriptionslistboxitem.$set(subscriptionslistboxitem_changes); 25468 }, 25469 i(local) { 25470 if (current) return; 25471 transition_in(subscriptionslistboxitem.$$.fragment, local); 25472 current = true; 25473 }, 25474 o(local) { 25475 transition_out(subscriptionslistboxitem.$$.fragment, local); 25476 current = false; 25477 }, 25478 d(detaching) { 25479 destroy_component(subscriptionslistboxitem, detaching); 25480 } 25481 }; 25482 } 25483 25484 function create_fragment$v(ctx) { 25485 let div; 25486 let t0; 25487 let t1; 25488 let current; 25489 let if_block0 = /*loading*/ ctx[10] && create_if_block_6$4(); 25490 let if_block1 = !/*isPastSubscriptions*/ ctx[0] && create_if_block_2$9(ctx); 25491 let if_block2 = /*isPastSubscriptions*/ ctx[0] && create_if_block$o(ctx); 25492 25493 return { 25494 c() { 25495 div = element("div"); 25496 if (if_block0) if_block0.c(); 25497 t0 = space(); 25498 if (if_block1) if_block1.c(); 25499 t1 = space(); 25500 if (if_block2) if_block2.c(); 25501 attr(div, "class", "subscriptions-list-container svelte-ldb1rq"); 25502 }, 25503 m(target, anchor) { 25504 insert(target, div, anchor); 25505 if (if_block0) if_block0.m(div, null); 25506 append(div, t0); 25507 if (if_block1) if_block1.m(div, null); 25508 append(div, t1); 25509 if (if_block2) if_block2.m(div, null); 25510 current = true; 25511 }, 25512 p(ctx, dirty) { 25513 if (/*loading*/ ctx[10]) { 25514 if (if_block0) { 25515 if (dirty[0] & /*loading*/ 1024) { 25516 transition_in(if_block0, 1); 25517 } 25518 } else { 25519 if_block0 = create_if_block_6$4(); 25520 if_block0.c(); 25521 transition_in(if_block0, 1); 25522 if_block0.m(div, t0); 25523 } 25524 } else if (if_block0) { 25525 group_outros(); 25526 25527 transition_out(if_block0, 1, 1, () => { 25528 if_block0 = null; 25529 }); 25530 25531 check_outros(); 25532 } 25533 25534 if (!/*isPastSubscriptions*/ ctx[0]) { 25535 if (if_block1) { 25536 if_block1.p(ctx, dirty); 25537 25538 if (dirty[0] & /*isPastSubscriptions*/ 1) { 25539 transition_in(if_block1, 1); 25540 } 25541 } else { 25542 if_block1 = create_if_block_2$9(ctx); 25543 if_block1.c(); 25544 transition_in(if_block1, 1); 25545 if_block1.m(div, t1); 25546 } 25547 } else if (if_block1) { 25548 group_outros(); 25549 25550 transition_out(if_block1, 1, 1, () => { 25551 if_block1 = null; 25552 }); 25553 25554 check_outros(); 25555 } 25556 25557 if (/*isPastSubscriptions*/ ctx[0]) { 25558 if (if_block2) { 25559 if_block2.p(ctx, dirty); 25560
25561 if (dirty[0] & /*isPastSubscriptions*/ 1) { 25562 transition_in(if_block2, 1); 25563 } 25564 } else { 25565 if_block2 = create_if_block$o(ctx); 25566 if_block2.c(); 25567 transition_in(if_block2, 1); 25568 if_block2.m(div, null); 25569 } 25570 } else if (if_block2) { 25571 group_outros(); 25572 25573 transition_out(if_block2, 1, 1, () => { 25574 if_block2 = null; 25575 }); 25576 25577 check_outros(); 25578 } 25579 }, 25580 i(local) { 25581 if (current) return; 25582 transition_in(if_block0); 25583 transition_in(if_block1); 25584 transition_in(if_block2); 25585 current = true; 25586 }, 25587 o(local) { 25588 transition_out(if_block0); 25589 transition_out(if_block1); 25590 transition_out(if_block2); 25591 current = false; 25592 }, 25593 d(detaching) { 25594 if (detaching) { 25595 detach(div); 25596 } 25597 25598 if (if_block0) if_block0.d(); 25599 if (if_block1) if_block1.d(); 25600 if (if_block2) if_block2.d(); 25601 } 25602 }; 25603 } 25604 25605 const func_1$1 = () => { 25606 25607 }; 25608 25609 function instance$v($$self, $$props, $$invalidate) { 25610 let { isPastSubscriptions } = $$props; 25611 let { noSubscriptionsMessage } = $$props; 25612 let { billingHistoryText } = $$props; 25613 let { billingHistoryLink } = $$props; 25614 let { nextPaymentDateText } = $$props; 25615 let { subscriptionRateText } = $$props; 25616 let { subscriptions } = $$props; 25617 let { inactiveSubscriptions } = $$props; 25618 let { paymentProvider } = $$props; 25619 let { changePaymentMethodText } = $$props; 25620 let { loading } = $$props; 25621 let { onChangePayment } = $$props; 25622 let { logChangeSubscription } = $$props; 25623 let { logCancelSubscription } = $$props; 25624 let { logSuspendResumeSubscription } = $$props; 25625 let { onViewHistory } = $$props; 25626 let { changeSubscriptionText } = $$props; 25627 let { cancelSubscriptionText } = $$props; 25628 let { changeSubscriptionPath } = $$props; 25629 let { cancelSubscriptionPath } = $$props; 25630 let { suspendResumeSubscriptionText } = $$props; 25631 let { suspendResumeSubscriptionPath } = $$props; 25632 let { subscriptionCustomFieldsText } = $$props; 25633 let { onUpdateSubscriptionCustomFields } = $$props; 25634 let { updateBillToContactText } = $$props; 25635 let { updateBillToContactPath } = $$props; 25636 let { elementsOrder } = $$props; 25637 let { elementsHide } = $$props; 25638 let { giftPillText = 'Gift' } = $$props; 25639 let { autoRenewToggleEnabled = false } = $$props; 25640 let { autoRenewToggleText = 'Auto-renew subscription' } = $$props; 25641 let { onAutoRenewToggle = async () => ({ success: false }) } = $$props; 25642 let { displayedCustomFields = {} } = $$props; 25643 25644 onMount(() => { 25645 25646 }); 25647 25648 const func = subscription => onChangePayment(subscription); 25649 25650 $$self.$$set = $$props => {
25651 if ('isPastSubscriptions' in $$props) $$invalidate(0, isPastSubscriptions = $$props.isPastSubscriptions); 25652 if ('noSubscriptionsMessage' in $$props) $$invalidate(1, noSubscriptionsMessage = $$props.noSubscriptionsMessage); 25653 if ('billingHistoryText' in $$props) $$invalidate(2, billingHistoryText = $$props.billingHistoryText); 25654 if ('billingHistoryLink' in $$props) $$invalidate(3, billingHistoryLink = $$props.billingHistoryLink); 25655 if ('nextPaymentDateText' in $$props) $$invalidate(4, nextPaymentDateText = $$props.nextPaymentDateText); 25656 if ('subscriptionRateText' in $$props) $$invalidate(5, subscriptionRateText = $$props.subscriptionRateText); 25657 if ('subscriptions' in $$props) $$invalidate(6, subscriptions = $$props.subscriptions); 25658 if ('inactiveSubscriptions' in $$props) $$invalidate(7, inactiveSubscriptions = $$props.inactiveSubscriptions); 25659 if ('paymentProvider' in $$props) $$invalidate(8, paymentProvider = $$props.paymentProvider); 25660 if ('changePaymentMethodText' in $$props) $$invalidate(9, changePaymentMethodText = $$props.changePaymentMethodText);
25661 if ('loading' in $$props) $$invalidate(10, loading = $$props.loading); 25662 if ('onChangePayment' in $$props) $$invalidate(11, onChangePayment = $$props.onChangePayment); 25663 if ('logChangeSubscription' in $$props) $$invalidate(12, logChangeSubscription = $$props.logChangeSubscription); 25664 if ('logCancelSubscription' in $$props) $$invalidate(13, logCancelSubscription = $$props.logCancelSubscription); 25665 if ('logSuspendResumeSubscription' in $$props) $$invalidate(14, logSuspendResumeSubscription = $$props.logSuspendResumeSubscription); 25666 if ('onViewHistory' in $$props) $$invalidate(15, onViewHistory = $$props.onViewHistory); 25667 if ('changeSubscriptionText' in $$props) $$invalidate(16, changeSubscriptionText = $$props.changeSubscriptionText); 25668 if ('cancelSubscriptionText' in $$props) $$invalidate(17, cancelSubscriptionText = $$props.cancelSubscriptionText); 25669 if ('changeSubscriptionPath' in $$props) $$invalidate(18, changeSubscriptionPath = $$props.changeSubscriptionPath); 25670 if ('cancelSubscriptionPath' in $$props) $$invali
25670date(19, cancelSubscriptionPath = $$props.cancelSubscriptionPath); 25671 if ('suspendResumeSubscriptionText' in $$props) $$invalidate(20, suspendResumeSubscriptionText = $$props.suspendResumeSubscriptionText); 25672 if ('suspendResumeSubscriptionPath' in $$props) $$invalidate(21, suspendResumeSubscriptionPath = $$props.suspendResumeSubscriptionPath); 25673 if ('subscriptionCustomFieldsText' in $$props) $$invalidate(22, subscriptionCustomFieldsText = $$props.subscriptionCustomFieldsText); 25674 if ('onUpdateSubscriptionCustomFields' in $$props) $$invalidate(23, onUpdateSubscriptionCustomFields = $$props.onUpdateSubscriptionCustomFields); 25675 if ('updateBillToContactText' in $$props) $$invalidate(24, updateBillToContactText = $$props.updateBillToContactText); 25676 if ('updateBillToContactPath' in $$props) $$invalidate(25, updateBillToContactPath = $$props.updateBillToContactPath); 25677 if ('elementsOrder' in $$props) $$invalidate(26, elementsOrder = $$props.elementsOrder); 25678 if ('elementsHide' in $$props) $$invalidate(27, elementsHide = $$props.elementsHide);
25679 if ('giftPillText' in $$props) $$invalidate(28, giftPillText = $$props.giftPillText); 25680 if ('autoRenewToggleEnabled' in $$props) $$invalidate(29, autoRenewToggleEnabled = $$props.autoRenewToggleEnabled); 25681 if ('autoRenewToggleText' in $$props) $$invalidate(30, autoRenewToggleText = $$props.autoRenewToggleText); 25682 if ('onAutoRenewToggle' in $$props) $$invalidate(31, onAutoRenewToggle = $$props.onAutoRenewToggle); 25683 if ('displayedCustomFields' in $$props) $$invalidate(32, displayedCustomFields = $$props.displayedCustomFields); 25684 }; 25685 25686 return [ 25687 isPastSubscriptions, 25688 noSubscriptionsMessage, 25689 billingHistoryText, 25690 billingHistoryLink, 25691 nextPaymentDateText, 25692 subscriptionRateText, 25693 subscriptions, 25694 inactiveSubscriptions, 25695 paymentProvider, 25696 changePaymentMethodText, 25697 loading, 25698 onChangePayment, 25699 logChangeSubscription, 25700 logCancelSubscription, 25701 logSuspendResumeSubscription, 25702 onViewHistory, 25703 changeSubscriptionText, 25704 cancelSubscriptionText, 25705 changeSubscriptionPath, 25706 cancelSubscriptionPath, 25707 suspendResumeSubscriptionText, 25708 suspendResumeSubscriptionPath, 25709 subscriptionCustomFieldsText,
25710 onUpdateSubscriptionCustomFields, 25711 updateBillToContactText, 25712 updateBillToContactPath, 25713 elementsOrder, 25714 elementsHide, 25715 giftPillText, 25716 autoRenewToggleEnabled, 25717 autoRenewToggleText, 25718 onAutoRenewToggle, 25719 displayedCustomFields, 25720 func 25721 ]; 25722 } 25723 25724 class SubscriptionsList extends SvelteComponent { 25725 constructor(options) { 25726 super(); 25727 25728 init( 25729 this, 25730 options, 25731 instance$v, 25732 create_fragment$v, 25733 safe_not_equal, 25734 { 25735 isPastSubscriptions: 0, 25736 noSubscriptionsMessage: 1, 25737 billingHistoryText: 2, 25738 billingHistoryLink: 3, 25739 nextPaymentDateText: 4, 25740 subscriptionRateText: 5, 25741 subscriptions: 6, 25742 inactiveSubscriptions: 7, 25743 paymentProvider: 8, 25744 changePaymentMethodText: 9, 25745 loading: 10, 25746 onChangePayment: 11, 25747 logChangeSubscription: 12, 25748 logCancelSubscription: 13, 25749 logSuspendResumeSubscription: 14, 25750 onViewHistory: 15, 25751 changeSubscriptionText: 16, 25752 cancelSubscriptionText: 17, 25753 changeSubscriptionPath: 18, 25754 cancelSubscriptionPath: 19, 25755 suspendResumeSubscriptionText: 20, 25756 suspendResumeSubscriptionPath: 21, 25757 subscriptionCustomFieldsText: 22, 25758 onUpdateSubscriptionCustomFields: 23, 25759 updateBillToContactText: 24, 25760 updateBillToContactPath: 25, 25761 elementsOrder: 26, 25762 elementsHide: 27, 25763 giftPillText: 28, 25764 autoRenewToggleEnabled: 29, 25765 autoRenewToggleText: 30, 25766 onAutoRenewToggle: 31, 25767 displayedCustomFields: 32 25768 }, 25769 null, 25770 [-1, -1] 25771 ); 25772 } 25773 } 25774 25775 const updateZuoraSubscriptionAutoRenew = async (subscription, autoRenew, formActions) => { 25776 try { 25777 const order = { 25778 subscription: { 25779 orderActions: [{ 25780 type: "TermsAndConditions", 25781 termsAndConditions: { 25782 autoRenew 25783 } 25784 }] 25785 } 25786 }; 25787 const requestBody = { 25788 vendor_fields: { 25789 order: JSON.stringify(order) 25790 } 25791 }; 25792 const response = await request(`zephr/subscriptions/${subscription.externalId}/manage`, { 25793 method: 'POST', 25794 bodyObject: requestBody 25795 }, formActions); 25796 if (!response?.ok) { 25797 const errorText = await response?.text() || 'Unknown error occurred'; 25798 console.error('Error updating subscription auto-renewal:', response); 25799 return { 25800 success: false, 25801 error: `HTTP ${response?.status}: ${errorText}` 25802 }; 25803 } 25804 const result = await response.json(); 25805 if (result.error) { 25806 console.error('API error updating subscription auto-renewal:', result.error); 25807 return { 25808 success: false, 25809 error: result.error 25810 }; 25811 } 25812 return { 25813 success: true, 25814 message: 'Settings updated' 25815 }; 25816 } 25817 catch (error) { 25818 console.error('Exception updating subscription auto-renewal:', error); 25819 return { 25820 success: false, 25821 error: error instanceof Error ? error.message : 'An unexpected error occurred' 25822 }; 25823 } 25824 }; 25825 25826 // Temporarily disable this feature 25827 const shouldShowSubscriptionCustomFields = false; 25828 const subscriptionCustomFieldsUpdateFactory = { 25829 matches: (sectionElement) => sectionElement.type === elementTypes.SUBSCRIPTION_CUSTOM_FIELDS_UPDATE, 25830 create: (form, formState, formActions, elementConfig) => { 25831 // Return null component to prevent rendering 25832 { 25833 return { 25834 component: null, 25835 props: {} 25836 }; 25837 } 25838 } 25839 }; 25840 25841 const subscriptionsListFactory = { 25842 matches: (sectionElement) => sectionElement.type === elementTypes.SUBSCRIPTIONS_LIST, 25843 create: (form, formState, formActions, elementConfig) => { 25844 // Get existing regular subscriptions and gift subscriptions 25845 const existingSubscriptions = formState.existingSubscriptions || []; 25846 const giftSubscriptions = formState.giftSubscriptions || []; 25847 // Default gift pill settings if not provided in config 25848 const giftPillText = elementConfig.giftPillText || 'Gift'; 25849 // Convert received gift subscriptions to ExistingSubscription format for display 25850 // Only include gift subscriptions where the current user is the recipient (is_re
25850cipient === true) 25851 const receivedGiftSubscriptions = giftSubscriptions 25852 .filter(gift => gift.is_recipient === true) 25853 .map(gift => { 25854 return { 25855 externalId: gift.subscription_number || gift.gift_code || '', 25856 productId: gift.subscription_type || 'gift', 25857 productLabel: gift.subscription_type || 'Subscription', 25858 planId: gift.subscription_number || gift.gift_code || '', 25859 planLabel: `Valid until ${gift.subscription_end_date || 'N/A'}`, 25860 status: gift.status === 'REDEEMED' ? 'active' : 'pending', 25861 ...gift, 25862 // Add a flag to identify this as a gift subscription 25863 isGift: true 25864 }; 25865 }); 25866 // Combine regular subscriptions with received gift subscriptions 25867 const allActiveSubscriptions = [ 25868 ...existingSubscriptions.filter(s => s.status === 'active'), 25869 ...receivedGiftSubscriptions.filter(s => s.status === 'active') 25870 ]; 25871 const allInactiveSubscriptions = [ 25872 ...existingSubscriptions.filter(s => s.status !== 'active'), 25873 ...receivedGiftSubscriptions.filter(s => s.status !== 'active') 25874 ]; 25875 // Auto-renew toggle handler for Zuora billing subscriptions 25876 const onAutoRenewToggle = async (subscription, autoRenew) => { 25877 try { 25878 let result; 25879 // Mock API call in preview mode 25880 if (form.environment?.previewMode) { 25881 // Simulate API delay 25882 await new Promise(resolve => setTimeout(resolve, 1000)); 25883 // Mock successful response (you could add logic to simulate failures occasionally) 25884 result = { 25885 success: true, 25886 message: 'Preferences updated' 25887 }; 25888 } 25889 else { 25890 result = await updateZuoraSubscriptionAutoRenew(subscription, autoRenew, formActions); 25891 } 25892 if (result.success) { 25893 // Update the subscription in the local state 25894 const updatedSubscriptions = existingSubscriptions.map(sub => sub.externalId === subscription.externalId 25895 ? { ...sub, autoRenew } 25896 : sub); 25897 formActions.updateFormState({ 25898 existingSubscriptions: updatedSubscriptions 25899 }); 25900 // Log the change 25901 logDataLayerEvent(form, 'zephr_form_button_press', { 25902 sectionId: formState.currentSection.type, 25903 buttonType: 'AUTO_RENEW_TOGGLE' 25904 }); 25905 return { success: true, message: result.message }; 25906 } 25907 else { 25908 return { success: false, error: result.error }; 25909 } 25910 } 25911 catch (error) { 25912 console.error('Error updating auto-renewal:', error); 25913 return { 25914 success: false, 25915 error: error instanceof Error ? error.message : 'An unexpected error occurred' 25916 }; 25917 } 25918 }; 25919 return { 25920 component: SubscriptionsList, 25921 props: { 25922 isPastSubscriptions: elementConfig.isPastSubscriptions, 25923 subscriptionTitle: elementConfig.subscriptionTitle, 25924 billingHistoryText: elementConfig.billingHistoryText, 25925 billingHistoryLink: elementConfig.billingHistoryLink, 25926 noSubscriptionsMessage: elementConfig.noSubscriptionsMessage, 25927 nextPaymentDateText: elementConfig.nextPaymentDateText, 25928 subscriptionRateText: elementConfig.subscriptionRateText, 25929 loading: (!formState.existingSubscriptions || formState.loadingSubscriptions) || 25930 (!formState.giftSubscriptions && formState.loadingGiftSubscriptions), 25931 subscriptions: allActiveSubscriptions, 25932 inactiveSubscriptions: allInactiveSubscriptions, 25933 paymentProvider: form.organisationConfiguration.paymentProvider, 25934 changePaymentMethodText: elementConfig.changePaymentMethodText, 25935 onChangePayment: (subscription) => { 25936 formActions.updateFormState({ 25937 selectedSubscription: subscription 25938 }); 25939 logDataLayerEvent(form, 'zephr_form_button_press', { 25940 sectionId: formState.currentSection.type, 25941 buttonType: 'SUBMIT' 25942 }); 25943 formActions.completeSection(); 25944 }, 25945 onViewHistory: (subscription) => { 25946 formActions.updateFormState({ 25947 selectedSubscription: subscription 25948 });
25949 formActions.jumpToPartStart('billing-history'); 25950 logDataLayerEvent(form, 'zephr_form_billing_history_view', null); 25951 }, 25952 logChangeSubscription: (subscription) => { 25953 logDataLayerEvent(form, 'zephr_form_subscription_change_clicked', { 25954 productId: subscription.productId, 25955 planId: subscription.externalId 25956 }); 25957 }, 25958 logCancelSubscription: (subscription) => { 25959 logDataLayerEvent(form, 'zephr_form_cancel_subscription_clicked', { 25960 productId: subscription.productId, 25961 planId: subscription.externalId 25962 }); 25963 }, 25964 logSuspendResumeSubscription: (subscription) => { 25965 logDataLayerEvent(form, 'zephr_form_suspend_resume_subscription_clicked', { 25966 productId: subscription.productId, 25967 planId: subscription.externalId, 25968 status: subscription.status 25969 }); 25970 }, 25971 changeSubscriptionText: elementConfig.changeSubscriptionText, 25972 cancelSubscriptionText: elementConfig.cancelSubscriptionText, 25973 changeSubscriptionPath: elementConfig.changeSubscriptionPath, 25974 cancelSubscriptionPath: elementConfig.cancelSubscriptionPath, 25975 suspendResumeSubscriptionText: elementConfig.suspendResumeSubscriptionText, 25976 suspendResumeSubscriptionPath: elementConfig.suspendResumeSubscriptionPath, 25977 updateBillToContactText: elementConfig.updateBillToContactText, 25978 updateBillToContactPath: elementConfig.updateBillToContactPath, 25979 elementsOrder: elementConfig.elementsOrder, 25980 subscriptionCustomFieldsText: elementConfig.subscriptionCustomFieldsText || 'Update subscription details', 25981 onUpdateSubscriptionCustomFields: (subscription) => { 25982 formActions.updateFormState({ 25983 selectedSubscription: subscription 25984 }); 25985 formActions.jumpToPartStart('subscription-custom-fields'); 25986 logDataLayerEvent(form, 'zephr_form_subscription_custom_fields_clicked', { 25987 productId: subscription.productId, 25988 planId: subscription.externalId 25989 }); 25990 }, 25991 elementsHide: { 25992 subscriptionInformation: elementConfig?.hideSubscriptionInformation, 25993 changePayment: elementConfig?.hideChangePayment, 25994 changeSubscription: elementConfig?.hideChangeSubscription, 25995 cancelSubscription: elementConfig?.hideCancelSubscription, 25996 billingHistory: elementConfig?.hideBillingHistory, 25997 suspendResumeSubscription: elementConfig?.hideSuspendResumeSubscription, 25998 // elementConfig?.hideSubscriptionCustomFields, 25999 subscriptionCustomFields: !shouldShowSubscriptionCustomFields, 26000 updateBillToContact: elementConfig?.hideUpdateBillToContact 26001 }, 26002 giftPillText, 26003 autoRenewToggleEnabled: elementConfig.autoRenewToggleEnabled || false, 26004 autoRenewToggleText: elementConfig.autoRenewToggleText || 'Auto-renew subscription', 26005 onAutoRenewToggle: onAutoRenewToggle, 26006 displayedCustomFields: elementConfig.displayedCustomFields || {} 26007 } 26008 }; 26009 } 26010 }; 26011 26012 /* src/components/elements/pastSubscriptionsLink/PastSubscriptionsLink.svelte generated by Svelte v4.2.12 */ 26013 26014 function create_if_block$n(ctx) { 26015 let div; 26016 let link; 26017 let current; 26018 link = new Link({ props: { text: /*linkText*/ ctx[2] } }); 26019 26020 link.$on("linkClick", function () { 26021 if (is_function(/*onClick*/ ctx[3])) /*onClick*/ ctx[3].apply(this, arguments); 26022 }); 26023 26024 return { 26025 c() { 26026 div = element("div"); 26027 create_component(link.$$.fragment); 26028 attr(div, "class", "past-subscriptions-link-wrapper svelte-zpa2t"); 26029 }, 26030 m(target, anchor) { 26031 insert(target, div, anchor); 26032 mount_component(link, div, null); 26033 current = true; 26034 }, 26035 p(new_ctx, dirty) { 26036 ctx = new_ctx; 26037 const link_changes = {};
26038 if (dirty & /*linkText*/ 4) link_changes.text = /*linkText*/ ctx[2]; 26039 link.$set(link_changes); 26040 }, 26041 i(local) { 26042 if (current) return; 26043 transition_in(link.$$.fragment, local); 26044 current = true; 26045 }, 26046 o(local) { 26047 transition_out(link.$$.fragment, local); 26048 current = false; 26049 }, 26050 d(detaching) { 26051 if (detaching) { 26052 detach(div); 26053 } 26054 26055 destroy_component(link); 26056 } 26057 }; 26058 } 26059 26060 function create_fragment$u(ctx) { 26061 let if_block_anchor; 26062 let current; 26063 let if_block = /*show*/ ctx[1] && !/*loading*/ ctx[0] && create_if_block$n(ctx); 26064 26065 return { 26066 c() { 26067 if (if_block) if_block.c(); 26068 if_block_anchor = empty(); 26069 }, 26070 m(target, anchor) { 26071 if (if_block) if_block.m(target, anchor); 26072 insert(target, if_block_anchor, anchor); 26073 current = true; 26074 }, 26075 p(ctx, [dirty]) { 26076 if (/*show*/ ctx[1] && !/*loading*/ ctx[0]) { 26077 if (if_block) { 26078 if_block.p(ctx, dirty); 26079 26080 if (dirty & /*show, loading*/ 3) { 26081 transition_in(if_block, 1); 26082 } 26083 } else { 26084 if_block = create_if_block$n(ctx); 26085 if_block.c(); 26086 transition_in(if_block, 1); 26087 if_block.m(if_block_anchor.parentNode, if_block_anchor); 26088 } 26089 } else if (if_block) { 26090 group_outros(); 26091 26092 transition_out(if_block, 1, 1, () => { 26093 if_block = null; 26094 }); 26095 26096 check_outros(); 26097 } 26098 }, 26099 i(local) { 26100 if (current) return; 26101 transition_in(if_block); 26102 current = true; 26103 }, 26104 o(local) { 26105 transition_out(if_block); 26106 current = false; 26107 }, 26108 d(detaching) { 26109 if (detaching) { 26110 detach(if_block_anchor); 26111 } 26112 26113 if (if_block) if_block.d(detaching); 26114 } 26115 }; 26116 } 26117 26118 function instance$u($$self, $$props, $$invalidate) { 26119 let { loading } = $$props; 26120 let { show } = $$props; 26121 let { linkText } = $$props; 26122 let { onClick } = $$props; 26123 26124 $$self.$$set = $$props => {
26125 if ('loading' in $$props) $$invalidate(0, loading = $$props.loading); 26126 if ('show' in $$props) $$invalidate(1, show = $$props.show); 26127 if ('linkText' in $$props) $$invalidate(2, linkText = $$props.linkText); 26128 if ('onClick' in $$props) $$invalidate(3, onClick = $$props.onClick); 26129 }; 26130 26131 return [loading, show, linkText, onClick]; 26132 } 26133 26134 class PastSubscriptionsLink extends SvelteComponent { 26135 constructor(options) { 26136 super(); 26137 26138 init(this, options, instance$u, create_fragment$u, safe_not_equal, { 26139 loading: 0, 26140 show: 1, 26141 linkText: 2, 26142 onClick: 3 26143 }); 26144 } 26145 } 26146 26147 const pastSubscriptionsLinkFactory = { 26148 matches: (sectionElement) => sectionElement.type === elementTypes.PAST_SUBSCRIPTIONS_LINK, 26149 create: (form, formState, formActions, elementConfig) => ({ 26150 component: PastSubscriptionsLink, 26151 props: { 26152 loading: !formState.existingSubscriptions || formState.loadingSubscriptions, 26153 show: elementConfig.show, 26154 linkText: elementConfig.linkText, 26155 onClick: () => { 26156 logDataLayerEvent(form, 'zephr_form_button_press', { 26157 sectionId: formState.currentSection.type, 26158 buttonType: 'PAST_SUBSCRIPTIONS_LINK' 26159 }); 26160 formActions.jumpToPartStart('past-subscriptions'); 26161 } 26162 } 26163 }) 26164 }; 26165 26166 /* src/components/elements/changePaymentMethodButton/ChangePaymentMethodButton.svelte generated by Svelte v4.2.12 */ 26167 26168 function create_fragment$t(ctx) { 26169 let div; 26170 let button; 26171 let current; 26172 26173 button = new Button({ 26174 props: { 26175 disabled: false, 26176 text: /*text*/ ctx[0], 26177 onClick: /*func*/ ctx[2] 26178 } 26179 }); 26180 26181 return { 26182 c() { 26183 div = element("div"); 26184 create_component(button.$$.fragment); 26185 attr(div, "class", "change-payment-method-button-container"); 26186 }, 26187 m(target, anchor) { 26188 insert(target, div, anchor); 26189 mount_component(button, div, null); 26190 current = true; 26191 }, 26192 p(ctx, [dirty]) { 26193 const button_changes = {}; 26194 if (dirty & /*text*/ 1) button_changes.text = /*text*/ ctx[0]; 26195 if (dirty & /*onChangePayment*/ 2) button_changes.onClick = /*func*/ ctx[2]; 26196 button.$set(button_changes); 26197 }, 26198 i(local) { 26199 if (current) return; 26200 transition_in(button.$$.fragment, local); 26201 current = true; 26202 }, 26203 o(local) { 26204 transition_out(button.$$.fragment, local); 26205 current = false; 26206 }, 26207 d(detaching) { 26208 if (detaching) { 26209 detach(div); 26210 } 26211 26212 destroy_component(button); 26213 } 26214 }; 26215 } 26216 26217 function instance$t($$self, $$props, $$invalidate) { 26218 let { text } = $$props; 26219 let { onChangePayment } = $$props; 26220 const func = () => onChangePayment(); 26221 26222 $$self.$$set = $$props => {
26223 if ('text' in $$props) $$invalidate(0, text = $$props.text); 26224 if ('onChangePayment' in $$props) $$invalidate(1, onChangePayment = $$props.onChangePayment); 26225 }; 26226 26227 return [text, onChangePayment, func]; 26228 } 26229 26230 class ChangePaymentMethodButton extends SvelteComponent { 26231 constructor(options) { 26232 super(); 26233 init(this, options, instance$t, create_fragment$t, safe_not_equal, { text: 0, onChangePayment: 1 }); 26234 } 26235 } 26236 26237 const changePaymentMethodButtonFactory = { 26238 matches: (sectionElement) => sectionElement.type === elementTypes.CHNAGE_PAYMENT_METHOD_BUTTON, 26239 create: (form, formState, formActions, elementConfig) => ({ 26240 component: ChangePaymentMethodButton, 26241 props: { 26242 text: elementConfig.text, 26243 onChangePayment: () => { 26244 logDataLayerEvent(form, 'zephr_form_button_press', { 26245 sectionId: formState.currentSection.type, 26246 buttonType: 'SUBMIT' 26247 }); 26248 formActions.completeSection(); 26249 } 26250 } 26251 }) 26252 }; 26253 26254 /* src/components/elements/eventLink/EventLink.svelte generated by Svelte v4.2.12 */ 26255 26256 function create_fragment$s(ctx) { 26257 let div; 26258 let link; 26259 let div_class_value; 26260 let current; 26261 26262 link = new Link({ 26263 props: { 26264 text: /*text*/ ctx[0], 26265 onClick: /*onClick*/ ctx[2] 26266 } 26267 }); 26268 26269 link.$on("linkClick", function () { 26270 if (is_function(/*onClick*/ ctx[2])) /*onClick*/ ctx[2].apply(this, arguments); 26271 }); 26272 26273 return { 26274 c() { 26275 div = element("div"); 26276 create_component(link.$$.fragment); 26277 attr(div, "class", div_class_value = "" + (null_to_empty(`event-link-wrapper ${/*floatRight*/ ctx[1] ? "float-right" : ""}`) + " svelte-3cxpfz")); 26278 }, 26279 m(target, anchor) { 26280 insert(target, div, anchor); 26281 mount_component(link, div, null); 26282 current = true; 26283 }, 26284 p(new_ctx, [dirty]) { 26285 ctx = new_ctx; 26286 const link_changes = {}; 26287 if (dirty & /*text*/ 1) link_changes.text = /*text*/ ctx[0]; 26288 if (dirty & /*onClick*/ 4) link_changes.onClick = /*onClick*/ ctx[2]; 26289 link.$set(link_changes); 26290 26291 if (!current || dirty & /*floatRight*/ 2 && div_class_value !== (div_class_value = "" + (null_to_empty(`event-link-wrapper ${/*floatRight*/ ctx[1] ? "float-right" : ""}`) + " svelte-3cxpfz"))) { 26292 attr(div, "class", div_class_value); 26293 } 26294 }, 26295 i(local) { 26296 if (current) return; 26297 transition_in(link.$$.fragment, local); 26298 current = true; 26299 }, 26300 o(local) { 26301 transition_out(link.$$.fragment, local); 26302 current = false; 26303 }, 26304 d(detaching) { 26305 if (detaching) { 26306 detach(div); 26307 } 26308 26309 destroy_component(link); 26310 } 26311 }; 26312 } 26313 26314 function instance$s($$self, $$props, $$invalidate) { 26315 let { text } = $$props; 26316 let { floatRight } = $$props; 26317 let { onClick } = $$props; 26318 26319 $$self.$$set = $$props => {
26320 if ('text' in $$props) $$invalidate(0, text = $$props.text); 26321 if ('floatRight' in $$props) $$invalidate(1, floatRight = $$props.floatRight); 26322 if ('onClick' in $$props) $$invalidate(2, onClick = $$props.onClick); 26323 }; 26324 26325 return [text, floatRight, onClick]; 26326 } 26327 26328 class EventLink extends SvelteComponent { 26329 constructor(options) { 26330 super(); 26331 init(this, options, instance$s, create_fragment$s, safe_not_equal, { text: 0, floatRight: 1, onClick: 2 }); 26332 } 26333 } 26334 26335 const eventLinkFactory = { 26336 matches: (sectionElement) => sectionElement.type === elementTypes.EVENT_LINK, 26337 create: (form, formState, formActions, elementConfig) => ({ 26338 component: EventLink, 26339 props: { 26340 text: elementConfig.text, 26341 floatRight: elementConfig.floatRight, 26342 onClick: () => { 26343 console.log({ 26344 sectionId: formState.currentSection.type, 26345 buttonType: 'EVENT_LINK' 26346 }); 26347 logDataLayerEvent(form, 'zephr_form_button_press', { 26348 sectionId: formState.currentSection.type, 26349 buttonType: 'EVENT_LINK' 26350 }); 26351 formActions.onEvent(elementConfig.event); 26352 } 26353 } 26354 }) 26355 }; 26356 26357 /* src/components/elements/email/ReadOnlyEmailAddress.svelte generated by Svelte v4.2.12 */ 26358 26359 function create_if_block$m(ctx) { 26360 let link; 26361 let current; 26362 link = new Link({ props: { text: /*updateLabel*/ ctx[2] } }); 26363 26364 link.$on("linkClick", function () { 26365 if (is_function(/*onUpdate*/ ctx[4])) /*onUpdate*/ ctx[4].apply(this, arguments); 26366 }); 26367 26368 return { 26369 c() { 26370 create_component(link.$$.fragment); 26371 }, 26372 m(target, anchor) { 26373 mount_component(link, target, anchor); 26374 current = true; 26375 }, 26376 p(new_ctx, dirty) { 26377 ctx = new_ctx; 26378 const link_changes = {}; 26379 if (dirty & /*updateLabel*/ 4) link_changes.text = /*updateLabel*/ ctx[2]; 26380 link.$set(link_changes); 26381 }, 26382 i(local) { 26383 if (current) return; 26384 transition_in(link.$$.fragment, local); 26385 current = true; 26386 }, 26387 o(local) { 26388 transition_out(link.$$.fragment, local); 26389 current = false; 26390 }, 26391 d(detaching) { 26392 destroy_component(link, detaching); 26393 } 26394 }; 26395 } 26396 26397 function create_fragment$r(ctx) { 26398 let div0; 26399 let label_1; 26400 let t0; 26401 let div1; 26402 let input; 26403 let t1; 26404 let current; 26405 26406 label_1 = new Label({ 26407 props: { 26408 forInput: /*id*/ ctx[5], 26409 label: /*label*/ ctx[0] 26410 } 26411 }); 26412 26413 let if_block = /*updateEnabled*/ ctx[3] && create_if_block$m(ctx); 26414 26415 return { 26416 c() { 26417 div0 = element("div"); 26418 create_component(label_1.$$.fragment); 26419 t0 = space(); 26420 div1 = element("div"); 26421 input = element("input"); 26422 t1 = space(); 26423 if (if_block) if_block.c(); 26424 attr(div0, "class", "bold-label svelte-nx4w5y"); 26425 attr(input, "id", /*id*/ ctx[5]); 26426 attr(input, "type", "email"); 26427 attr(input, "name", "email"); 26428 input.value = /*emailAddress*/ ctx[1]; 26429 input.readOnly = true; 26430 attr(input, "class", "read-only-input svelte-nx4w5y"); 26431 attr(div1, "class", "zephr-form-relative-container svelte-nx4w5y"); 26432 }, 26433 m(target, anchor) { 26434 insert(target, div0, anchor); 26435 mount_component(label_1, div0, null); 26436 insert(target, t0, anchor); 26437 insert(target, div1, anchor); 26438 append(div1, input); 26439 append(div1, t1); 26440 if (if_block) if_block.m(div1, null); 26441 current = true; 26442 }, 26443 p(ctx, [dirty]) { 26444 const label_1_changes = {}; 26445 if (dirty & /*label*/ 1) label_1_changes.label = /*label*/ ctx[0]; 26446 label_1.$set(label_1_changes); 26447 26448 if (!current || dirty & /*emailAddress*/ 2 && input.value !== /*emailAddress*/ ctx[1]) { 26449 input.value = /*emailAddress*/ ctx[1]; 26450 } 26451 26452 if (/*updateEnabled*/ ctx[3]) { 26453 if (if_block) { 26454 if_block.p(ctx, dirty); 26455 26456 if (dirty & /*updateEnabled*/ 8) { 26457 transition_in(if_block, 1); 26458 } 26459 } else { 26460 if_block = create_if_block$m(ctx); 26461 if_block.c(); 26462 transition_in(if_block, 1); 26463 if_block.m(div1, null); 26464 } 26465 } else if (if_block) { 26466 group_outros(); 26467 26468 transition_out(if_block, 1, 1, () => { 26469 if_block = null; 26470 }); 26471 26472 check_outros(); 26473 } 26474 }, 26475 i(local) { 26476 if (current) return; 26477 transition_in(label_1.$$.fragment, local); 26478 transition_in(if_block); 26479 current = true; 26480 }, 26481 o(local) { 26482 transition_out(label_1.$$.fragment, local); 26483 transition_out(if_block); 26484 current = false;
26485 }, 26486 d(detaching) { 26487 if (detaching) { 26488 detach(div0); 26489 detach(t0); 26490 detach(div1); 26491 } 26492 26493 destroy_component(label_1); 26494 if (if_block) if_block.d(); 26495 } 26496 }; 26497 } 26498 26499 function instance$r($$self, $$props, $$invalidate) { 26500 let { formKey } = $$props; 26501 let { label } = $$props; 26502 let { emailAddress } = $$props; 26503 let { updateLabel } = $$props; 26504 let { updateEnabled } = $$props; 26505 let { onUpdate } = $$props; 26506 const id = `zephr-form-read-only-email-address-${formKey}`; 26507 26508 $$self.$$set = $$props => { 26509 if ('formKey' in $$props) $$invalidate(6, formKey = $$props.formKey); 26510 if ('label' in $$props) $$invalidate(0, label = $$props.label); 26511 if ('emailAddress' in $$props) $$invalidate(1, emailAddress = $$props.emailAddress); 26512 if ('updateLabel' in $$props) $$invalidate(2, updateLabel = $$props.updateLabel); 26513 if ('updateEnabled' in $$props) $$invalidate(3, updateEnabled = $$props.updateEnabled); 26514 if ('onUpdate' in $$props) $$invalidate(4, onUpdate = $$props.onUpdate); 26515 }; 26516 26517 return [label, emailAddress, updateLabel, updateEnabled, onUpdate, id, formKey]; 26518 } 26519 26520 class ReadOnlyEmailAddress extends SvelteComponent { 26521 constructor(options) { 26522 super(); 26523 26524 init(this, options, instance$r, create_fragment$r, safe_not_equal, { 26525 formKey: 6, 26526 label: 0, 26527 emailAddress: 1, 26528 updateLabel: 2, 26529 updateEnabled: 3, 26530 onUpdate: 4 26531 }); 26532 } 26533 } 26534 26535 const factory$6 = { 26536 matches: (sectionElement) => sectionElement.type === elementTypes.READ_ONLY_EMAIL_ADDRESS, 26537 create: (form, formState, formActions, elementConfig) => { 26538 return { 26539 component: ReadOnlyEmailAddress, 26540 props: { 26541 formKey: form.uniqueKey, 26542 emailAddress: formState.readOnlyEmail ?? '', 26543 label: elementConfig.label, 26544 updateLabel: elementConfig.updateLinkLabel, 26545 updateEnabled: elementConfig.updateLinkEnabled, 26546 onUpdate: () => formActions.jumpToPartStart('email-update') 26547 } 26548 }; 26549 } 26550 }; 26551 26552 /* src/components/elements/password/ReadOnlyPassword.svelte generated by Svelte v4.2.12 */ 26553 26554 function create_if_block$l(ctx) { 26555 let link; 26556 let current; 26557 link = new Link({ props: { text: /*updateLabel*/ ctx[1] } }); 26558 26559 link.$on("linkClick", function () { 26560 if (is_function(/*onUpdate*/ ctx[3])) /*onUpdate*/ ctx[3].apply(this, arguments); 26561 }); 26562 26563 return { 26564 c() { 26565 create_component(link.$$.fragment); 26566 }, 26567 m(target, anchor) { 26568 mount_component(link, target, anchor); 26569 current = true; 26570 }, 26571 p(new_ctx, dirty) { 26572 ctx = new_ctx; 26573 const link_changes = {}; 26574 if (dirty & /*updateLabel*/ 2) link_changes.text = /*updateLabel*/ ctx[1]; 26575 link.$set(link_changes); 26576 }, 26577 i(local) { 26578 if (current) return; 26579 transition_in(link.$$.fragment, local); 26580 current = true; 26581 }, 26582 o(local) { 26583 transition_out(link.$$.fragment, local); 26584 current = false; 26585 }, 26586 d(detaching) { 26587 destroy_component(link, detaching); 26588 } 26589 }; 26590 } 26591 26592 function create_fragment$q(ctx) { 26593 let div0; 26594 let label_1; 26595 let t0; 26596 let div1; 26597 let input; 26598 let t1; 26599 let current; 26600 26601 label_1 = new Label({ 26602 props: { 26603 forInput: /*id*/ ctx[4], 26604 label: /*label*/ ctx[0] 26605 } 26606 }); 26607 26608 let if_block = /*updateEnabled*/ ctx[2] && create_if_block$l(ctx); 26609 26610 return { 26611 c() { 26612 div0 = element("div"); 26613 create_component(label_1.$$.fragment); 26614 t0 = space(); 26615 div1 = element("div"); 26616 input = element("input"); 26617 t1 = space(); 26618 if (if_block) if_block.c(); 26619 attr(div0, "class", "bold-label svelte-nx4w5y"); 26620 attr(input, "id", /*id*/ ctx[4]); 26621 attr(input, "type", "password"); 26622 input.value = "â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢"; 26623 input.readOnly = true; 26624 attr(input, "class", "read-only-input svelte-nx4w5y"); 26625 attr(div1, "class", "zephr-form-relative-container svelte-nx4w5y"); 26626 }, 26627 m(target, anchor) { 26628 insert(target, div0, anchor); 26629 mount_component(label_1, div0, null); 26630 insert(target, t0, anchor); 26631 insert(target, div1, anchor); 26632 append(div1, input); 26633 append(div1, t1); 26634 if (if_block) if_block.m(div1, null); 26635 current = true; 26636 }, 26637 p(ctx, [dirty]) { 26638 const label_1_changes = {};
26639 if (dirty & /*label*/ 1) label_1_changes.label = /*label*/ ctx[0]; 26640 label_1.$set(label_1_changes); 26641 26642 if (/*updateEnabled*/ ctx[2]) { 26643 if (if_block) { 26644 if_block.p(ctx, dirty); 26645 26646 if (dirty & /*updateEnabled*/ 4) { 26647 transition_in(if_block, 1); 26648 } 26649 } else { 26650 if_block = create_if_block$l(ctx); 26651 if_block.c(); 26652 transition_in(if_block, 1); 26653 if_block.m(div1, null); 26654 } 26655 } else if (if_block) { 26656 group_outros(); 26657 26658 transition_out(if_block, 1, 1, () => { 26659 if_block = null; 26660 }); 26661 26662 check_outros(); 26663 } 26664 }, 26665 i(local) { 26666 if (current) return; 26667 transition_in(label_1.$$.fragment, local); 26668 transition_in(if_block); 26669 current = true; 26670 }, 26671 o(local) { 26672 transition_out(label_1.$$.fragment, local); 26673 transition_out(if_block); 26674 current = false; 26675 }, 26676 d(detaching) { 26677 if (detaching) { 26678 detach(div0); 26679 detach(t0); 26680 detach(div1); 26681 } 26682 26683 destroy_component(label_1); 26684 if (if_block) if_block.d(); 26685 } 26686 }; 26687 } 26688 26689 function instance$q($$self, $$props, $$invalidate) { 26690 let { formKey } = $$props; 26691 let { label } = $$props; 26692 let { updateLabel } = $$props; 26693 let { updateEnabled } = $$props; 26694 let { onUpdate } = $$props; 26695 const id = `zephr-form-read-only-password-${formKey}`; 26696 26697 $$self.$$set = $$props => {
26698 if ('formKey' in $$props) $$invalidate(5, formKey = $$props.formKey); 26699 if ('label' in $$props) $$invalidate(0, label = $$props.label); 26700 if ('updateLabel' in $$props) $$invalidate(1, updateLabel = $$props.updateLabel); 26701 if ('updateEnabled' in $$props) $$invalidate(2, updateEnabled = $$props.updateEnabled); 26702 if ('onUpdate' in $$props) $$invalidate(3, onUpdate = $$props.onUpdate); 26703 }; 26704 26705 return [label, updateLabel, updateEnabled, onUpdate, id, formKey]; 26706 } 26707 26708 class ReadOnlyPassword extends SvelteComponent { 26709 constructor(options) { 26710 super(); 26711 26712 init(this, options, instance$q, create_fragment$q, safe_not_equal, { 26713 formKey: 5, 26714 label: 0, 26715 updateLabel: 1, 26716 updateEnabled: 2, 26717 onUpdate: 3 26718 }); 26719 } 26720 } 26721 26722 const factory$5 = { 26723 matches: (sectionElement) => sectionElement.type === elementTypes.READ_ONLY_PASSWORD, 26724 create: (form, formState, formActions, elementConfig) => { 26725 return { 26726 component: ReadOnlyPassword, 26727 props: { 26728 formKey: form.uniqueKey, 26729 label: elementConfig.label, 26730 updateLabel: elementConfig.updateLinkLabel, 26731 updateEnabled: elementConfig.updateLinkEnabled, 26732 onUpdate: () => formActions.jumpToPartStart('password-update') 26733 } 26734 }; 26735 } 26736 }; 26737 26738 /* src/components/elements/userAttribute/ReadOnlyUserAttribute.svelte generated by Svelte v4.2.12 */ 26739 26740 function create_else_block$1(ctx) { 26741 let div2; 26742 let div0; 26743 let t0; 26744 let t1; 26745 let div1; 26746 let t2; 26747 26748 return { 26749 c() { 26750 div2 = element("div"); 26751 div0 = element("div"); 26752 t0 = text(/*label*/ ctx[3]); 26753 t1 = space(); 26754 div1 = element("div"); 26755 t2 = text(/*value*/ ctx[2]); 26756 attr(div0, "class", "zephr-form-ro-attribute-label"); 26757 attr(div1, "class", "zephr-form-ro-attribute-value"); 26758 attr(div2, "class", "zephr-form-ro-attribute"); 26759 }, 26760 m(target, anchor) { 26761 insert(target, div2, anchor); 26762 append(div2, div0); 26763 append(div0, t0); 26764 append(div2, t1); 26765 append(div2, div1); 26766 append(div1, t2); 26767 }, 26768 p(ctx, dirty) { 26769 if (dirty & /*label*/ 8) set_data(t0, /*label*/ ctx[3]); 26770 if (dirty & /*value*/ 4) set_data(t2, /*value*/ ctx[2]); 26771 }, 26772 i: noop, 26773 o: noop, 26774 d(detaching) { 26775 if (detaching) { 26776 detach(div2); 26777 } 26778 } 26779 }; 26780 } 26781 26782 // (8:0) {#if isCheckbox} 26783 function create_if_block$k(ctx) { 26784 let div; 26785 let checkbox; 26786 let current; 26787 26788 checkbox = new Checkbox({ 26789 props: { 26790 id: `zephr-form-ro-checkbox-${/*slug*/ ctx[1]}`, 26791 name: /*slug*/ ctx[1], 26792 label: /*label*/ ctx[3], 26793 required: false, 26794 value: /*value*/ ctx[2], 26795 checked: /*value*/ ctx[2], 26796 disabled: true 26797 } 26798 }); 26799 26800 return { 26801 c() { 26802 div = element("div"); 26803 create_component(checkbox.$$.fragment); 26804 attr(div, "class", "zephr-form-ro-attribute"); 26805 }, 26806 m(target, anchor) { 26807 insert(target, div, anchor); 26808 mount_component(checkbox, div, null); 26809 current = true; 26810 }, 26811 p(ctx, dirty) { 26812 const checkbox_changes = {}; 26813 if (dirty & /*slug*/ 2) checkbox_changes.id = `zephr-form-ro-checkbox-${/*slug*/ ctx[1]}`; 26814 if (dirty & /*slug*/ 2) checkbox_changes.name = /*slug*/ ctx[1]; 26815 if (dirty & /*label*/ 8) checkbox_changes.label = /*label*/ ctx[3]; 26816 if (dirty & /*value*/ 4) checkbox_changes.value = /*value*/ ctx[2]; 26817 if (dirty & /*value*/ 4) checkbox_changes.checked = /*value*/ ctx[2]; 26818 checkbox.$set(checkbox_changes); 26819 }, 26820 i(local) { 26821 if (current) return; 26822 transition_in(checkbox.$$.fragment, local); 26823 current = true; 26824 }, 26825 o(local) { 26826 transition_out(checkbox.$$.fragment, local); 26827 current = false; 26828 }, 26829 d(detaching) { 26830 if (detaching) { 26831 detach(div); 26832 } 26833 26834 destroy_component(checkbox); 26835 } 26836 }; 26837 } 26838 26839 function create_fragment$p(ctx) { 26840 let current_block_type_index; 26841 let if_block; 26842 let if_block_anchor; 26843 let current; 26844 const if_block_creators = [create_if_block$k, create_else_block$1]; 26845 const if_blocks = []; 26846 26847 function select_block_type(ctx, dirty) { 26848 if (/*isCheckbox*/ ctx[0]) return 0; 26849 return 1; 26850 } 26851 26852 current_block_type_index = select_block_type(ctx); 26853 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 26854 26855 return { 26856 c() { 26857 if_block.c(); 26858 if_block_anchor = empty(); 26859 }, 26860 m(target, anchor) { 26861 if_blocks[current_block_type_index].m(target, anchor); 26862 insert(target, if_block_anchor, anchor); 26863 current = true; 26864 }, 26865 p(ctx, [dirty]) { 26866 let previous_block_index = current_block_type_index; 26867 current_block_type_index = select_block_type(ctx); 26868 26869 if (current_block_type_index === previous_block_index) { 26870 if_blocks[current_block_type_index].p(ctx, dirty); 26871 } else { 26872 group_outros(); 26873 26874 transition_out(if_blocks[previous_block_index], 1, 1, () => { 26875 if_blocks[previous_block_index] = null; 26876 }); 26877 26878 check_outros(); 26879 if_block = if_blocks[current_block_type_index]; 26880 26881 if (!if_block) { 26882 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 26883 if_block.c(); 26884 } else { 26885 if_block.p(ctx, dirty); 26886 } 26887 26888 transition_in(if_block, 1); 26889 if_block.m(if_block_anchor.parentNode, if_block_anchor); 26890 } 26891 }, 26892 i(local) { 26893 if (current) return; 26894 transition_in(if_block); 26895 current = true; 26896 }, 26897 o(local) { 26898 transition_out(if_block); 26899 current = false;
26900 }, 26901 d(detaching) { 26902 if (detaching) { 26903 detach(if_block_anchor); 26904 } 26905 26906 if_blocks[current_block_type_index].d(detaching); 26907 } 26908 }; 26909 } 26910 26911 function instance$p($$self, $$props, $$invalidate) { 26912 let { isCheckbox } = $$props; 26913 let { slug } = $$props; 26914 let { value } = $$props; 26915 let { label } = $$props; 26916 26917 $$self.$$set = $$props => { 26918 if ('isCheckbox' in $$props) $$invalidate(0, isCheckbox = $$props.isCheckbox); 26919 if ('slug' in $$props) $$invalidate(1, slug = $$props.slug); 26920 if ('value' in $$props) $$invalidate(2, value = $$props.value); 26921 if ('label' in $$props) $$invalidate(3, label = $$props.label); 26922 }; 26923 26924 return [isCheckbox, slug, value, label]; 26925 } 26926 26927 class ReadOnlyUserAttribute extends SvelteComponent { 26928 constructor(options) { 26929 super(); 26930 26931 init(this, options, instance$p, create_fragment$p, safe_not_equal, { 26932 isCheckbox: 0, 26933 slug: 1, 26934 value: 2, 26935 label: 3 26936 }); 26937 } 26938 } 26939 26940 const selectAttributeTypes = ['radio', 'select']; 26941 const readOnlyUserAttributeFactory = { 26942 matches: (sectionElement) => sectionElement.type === elementTypes.READ_ONLY_USER_ATTRIBUTE, 26943 create: (form, formState, _, elementConfig) => { 26944 const attributeSchema = form.organisationConfiguration.schemaFields.find(s => s.slug === elementConfig.slug); 26945 let value = (formState.readOnlyAttributeValues ?? {})[elementConfig.slug] ?? ''; 26946 if (value && selectAttributeTypes.includes(attributeSchema?.["input-type"])) { 26947 value = (attributeSchema?.["select-options"] ?? []).find(o => o.value === value)?.label ?? value; 26948 } 26949 const isCheckbox = attributeSchema?.["input-type"] === 'checkbox'; 26950 return { 26951 component: ReadOnlyUserAttribute, 26952 props: { 26953 value, 26954 slug: elementConfig.slug, 26955 label: elementConfig.label, 26956 isCheckbox, 26957 } 26958 }; 26959 } 26960 }; 26961 26962 /* src/components/elements/devices/DeviceSessionWrapper.svelte generated by Svelte v4.2.12 */ 26963 26964 function create_if_block_1$e(ctx) { 26965 let span; 26966 let t; 26967 26968 return { 26969 c() { 26970 span = element("span"); 26971 t = text(/*currentDeviceLabel*/ ctx[2]); 26972 attr(span, "class", "current-device svelte-jmotet"); 26973 }, 26974 m(target, anchor) { 26975 insert(target, span, anchor); 26976 append(span, t); 26977 }, 26978 p(ctx, dirty) { 26979 if (dirty & /*currentDeviceLabel*/ 4) set_data(t, /*currentDeviceLabel*/ ctx[2]); 26980 }, 26981 d(detaching) { 26982 if (detaching) { 26983 detach(span); 26984 } 26985 } 26986 }; 26987 } 26988 26989 // (22:4) {#if !deviceSession.requestingSession} 26990 function create_if_block$j(ctx) { 26991 let button; 26992 let current; 26993 26994 button = new Button({ 26995 props: { 26996 disabled: false, 26997 text: /*signOutLabel*/ ctx[4], 26998 onClick: /*func*/ ctx[5] 26999 } 27000 }); 27001 27002 return { 27003 c() { 27004 create_component(button.$$.fragment); 27005 }, 27006 m(target, anchor) { 27007 mount_component(button, target, anchor); 27008 current = true; 27009 }, 27010 p(ctx, dirty) { 27011 const button_changes = {}; 27012 if (dirty & /*signOutLabel*/ 16) button_changes.text = /*signOutLabel*/ ctx[4]; 27013 if (dirty & /*onDeviceSignOut, deviceSession*/ 3) button_changes.onClick = /*func*/ ctx[5]; 27014 button.$set(button_changes); 27015 }, 27016 i(local) { 27017 if (current) return; 27018 transition_in(button.$$.fragment, local); 27019 current = true; 27020 }, 27021 o(local) { 27022 transition_out(button.$$.fragment, local); 27023 current = false; 27024 }, 27025 d(detaching) { 27026 destroy_component(button, detaching); 27027 } 27028 }; 27029 } 27030 27031 function create_fragment$o(ctx) { 27032 let div4; 27033 let div0; 27034 let t0_value = /*deviceSession*/ ctx[0].deviceName + ""; 27035 let t0; 27036 let t1; 27037 let t2; 27038 let div1; 27039 let t3; 27040 let t4; 27041 let t5_value = /*deviceSession*/ ctx[0].startDate + ""; 27042 let t5; 27043 let t6; 27044 let div2; 27045 let t7_value = /*deviceSession*/ ctx[0].browser + ""; 27046 let t7; 27047 let t8; 27048 let div3; 27049 let t9_value = /*deviceSession*/ ctx[0].country + ""; 27050 let t9; 27051 let t10; 27052 let t11; 27053 let hr; 27054 let current; 27055 let if_block0 = /*deviceSession*/ ctx[0].requestingSession && create_if_block_1$e(ctx); 27056 let if_block1 = !/*deviceSession*/ ctx[0].requestingSession && create_if_block$j(ctx); 27057 27058 return { 27059 c() { 27060 div4 = element("div"); 27061 div0 = element("div"); 27062 t0 = text(t0_value); 27063 t1 = space(); 27064 if (if_block0) if_block0.c(); 27065 t2 = space(); 27066 div1 = element("div"); 27067 t3 = text(/*loginTimeLabel*/ ctx[3]); 27068 t4 = text(": "); 27069 t5 = text(t5_value); 27070 t6 = space(); 27071 div2 = element("div"); 27072 t7 = text(t7_value); 27073 t8 = space(); 27074 div3 = element("div"); 27075 t9 = text(t9_value); 27076 t10 = space(); 27077 if (if_block1) if_block1.c(); 27078 t11 = space(); 27079 hr = element("hr"); 27080 attr(div0, "class", "device-title svelte-jmotet"); 27081 attr(div1, "class", "login-time svelte-jmotet"); 27082 attr(div2, "class", "browser svelte-jmotet"); 27083 attr(div3, "class", "country svelte-jmotet"); 27084 attr(hr, "class", "svelte-jmotet"); 27085 attr(div4, "class", "session-container svelte-jmotet"); 27086 }, 27087 m(target, anchor) { 27088 insert(target, div4, anchor); 27089 append(div4, div0); 27090 append(div0, t0); 27091 append(div0, t1); 27092 if (if_block0) if_block0.m(div0, null); 27093 append(div4, t2); 27094 append(div4, div1); 27095 append(div1, t3); 27096 append(div1, t4); 27097 append(div1, t5); 27098 append(div4, t6); 27099 append(div4, div2); 27100 append(div2, t7); 27101 append(div4, t8); 27102 append(div4, div3); 27103 append(div3, t9); 27104 append(div4, t10); 27105 if (if_block1) if_block1.m(div4, null); 27106 append(div4, t11); 27107 append(div4, hr); 27108 current = true; 27109 }, 27110 p(ctx, [dirty]) { 27111 if ((!current || dirty & /*deviceSession*/ 1) && t0_value !== (t0_value = /*deviceSession*/ ctx[0].deviceName + "")) set_data(t0, t0_value); 27112 27113 if (/*deviceSession*/ ctx[0].requestingSession) { 27114 if (if_block0) { 27115 if_block0.p(ctx, dirty); 27116 } else { 27117 if_block0 = create_if_block_1$e(ctx); 27118 if_block0.c(); 27119 if_block0.m(div0, null); 27120 } 27121 } else if (if_block0) { 27122 if_block0.d(1); 27123 if_block0 = null; 27124 } 27125 27126 if (!current || dirty & /*loginTimeLabel*/ 8) set_data(t3, /*loginTimeLabel*/ ctx[3]); 27127 if ((!current || dirty & /*deviceSession*/ 1) && t5_value !== (t5_value = /*deviceSession*/ ctx[0].startDate + "")) set_data(t5, t5_value); 27128 if ((!current || dirty & /*deviceSession*/ 1) && t7_value !== (t7_value = /*deviceSession*/ ctx[0].browser + "")) set_data(t7, t7_value); 27129 if ((!current || dirty & /*deviceSession*/ 1) && t9_value !== (t9_value = /*deviceSession*/ ctx[0].country + "")) set_data(t9, t9_value); 27130 27131 if (!/*deviceSession*/ ctx[0].requestingSession) { 27132 if (if_block1) { 27133 if_block1.p(ctx, dirty); 27134
27135 if (dirty & /*deviceSession*/ 1) { 27136 transition_in(if_block1, 1); 27137 } 27138 } else { 27139 if_block1 = create_if_block$j(ctx); 27140 if_block1.c(); 27141 transition_in(if_block1, 1); 27142 if_block1.m(div4, t11); 27143 } 27144 } else if (if_block1) { 27145 group_outros(); 27146 27147 transition_out(if_block1, 1, 1, () => { 27148 if_block1 = null; 27149 }); 27150 27151 check_outros(); 27152 } 27153 }, 27154 i(local) { 27155 if (current) return; 27156 transition_in(if_block1); 27157 current = true; 27158 }, 27159 o(local) { 27160 transition_out(if_block1); 27161 current = false; 27162 }, 27163 d(detaching) { 27164 if (detaching) { 27165 detach(div4); 27166 } 27167 27168 if (if_block0) if_block0.d(); 27169 if (if_block1) if_block1.d(); 27170 } 27171 }; 27172 } 27173 27174 function instance$o($$self, $$props, $$invalidate) { 27175 let { deviceSession } = $$props; 27176 let { onDeviceSignOut } = $$props; 27177 let { currentDeviceLabel } = $$props; 27178 let { loginTimeLabel } = $$props; 27179 let { signOutLabel } = $$props; 27180 const func = () => onDeviceSignOut(deviceSession.id); 27181 27182 $$self.$$set = $$props => {
27183 if ('deviceSession' in $$props) $$invalidate(0, deviceSession = $$props.deviceSession); 27184 if ('onDeviceSignOut' in $$props) $$invalidate(1, onDeviceSignOut = $$props.onDeviceSignOut); 27185 if ('currentDeviceLabel' in $$props) $$invalidate(2, currentDeviceLabel = $$props.currentDeviceLabel); 27186 if ('loginTimeLabel' in $$props) $$invalidate(3, loginTimeLabel = $$props.loginTimeLabel); 27187 if ('signOutLabel' in $$props) $$invalidate(4, signOutLabel = $$props.signOutLabel); 27188 }; 27189 27190 return [ 27191 deviceSession, 27192 onDeviceSignOut, 27193 currentDeviceLabel, 27194 loginTimeLabel, 27195 signOutLabel, 27196 func 27197 ]; 27198 } 27199 27200 class DeviceSessionWrapper extends SvelteComponent { 27201 constructor(options) { 27202 super(); 27203 27204 init(this, options, instance$o, create_fragment$o, safe_not_equal, { 27205 deviceSession: 0, 27206 onDeviceSignOut: 1, 27207 currentDeviceLabel: 2, 27208 loginTimeLabel: 3, 27209 signOutLabel: 4 27210 }); 27211 } 27212 } 27213 27214 /* src/components/elements/devices/DevicesSessionList.svelte generated by Svelte v4.2.12 */ 27215 27216 function get_each_context$8(ctx, list, i) { 27217 const child_ctx = ctx.slice(); 27218 child_ctx[7] = list[i]; 27219 return child_ctx; 27220 } 27221 27222 // (33:4) {#if devicesSessions == null} 27223 function create_if_block_1$d(ctx) { 27224 let fa; 27225 let current; 27226 27227 fa = new Fa({ 27228 props: { icon: faSpinner, spin: true, size: "lg" } 27229 }); 27230 27231 return { 27232 c() { 27233 create_component(fa.$$.fragment); 27234 }, 27235 m(target, anchor) { 27236 mount_component(fa, target, anchor); 27237 current = true; 27238 }, 27239 i(local) { 27240 if (current) return; 27241 transition_in(fa.$$.fragment, local); 27242 current = true; 27243 }, 27244 o(local) { 27245 transition_out(fa.$$.fragment, local); 27246 current = false; 27247 }, 27248 d(detaching) { 27249 destroy_component(fa, detaching); 27250 } 27251 }; 27252 } 27253 27254 // (36:4) {#if devicesSessions != null && !devicesSessions.length} 27255 function create_if_block$i(ctx) { 27256 let div; 27257 27258 return { 27259 c() { 27260 div = element("div"); 27261 }, 27262 m(target, anchor) { 27263 insert(target, div, anchor); 27264 div.innerHTML = /*noDeviceSessionsMessage*/ ctx[1]; 27265 }, 27266 p(ctx, dirty) { 27267 if (dirty & /*noDeviceSessionsMessage*/ 2) div.innerHTML = /*noDeviceSessionsMessage*/ ctx[1]; }, 27268 d(detaching) { 27269 if (detaching) { 27270 detach(div); 27271 } 27272 } 27273 }; 27274 } 27275 27276 // (41:4) {#each devicesSessions ?? [] as deviceSession} 27277 function create_each_block$8(ctx) { 27278 let devicesessionwrapper; 27279 let current; 27280 27281 devicesessionwrapper = new DeviceSessionWrapper({ 27282 props: { 27283 deviceSession: /*deviceSession*/ ctx[7], 27284 currentDeviceLabel: /*currentDeviceLabel*/ ctx[3], 27285 loginTimeLabel: /*loginTimeLabel*/ ctx[4], 27286 signOutLabel: /*signOutLabel*/ ctx[5], 27287 onDeviceSignOut: /*onDeviceSignOut*/ ctx[6] 27288 } 27289 }); 27290 27291 return { 27292 c() { 27293 create_component(devicesessionwrapper.$$.fragment); 27294 }, 27295 m(target, anchor) { 27296 mount_component(devicesessionwrapper, target, anchor); 27297 current = true; 27298 }, 27299 p(ctx, dirty) { 27300 const devicesessionwrapper_changes = {}; 27301 if (dirty & /*devicesSessions*/ 1) devicesessionwrapper_changes.deviceSession = /*deviceSession*/ ctx[7]; 27302 if (dirty & /*currentDeviceLabel*/ 8) devicesessionwrapper_changes.currentDeviceLabel = /*currentDeviceLabel*/ ctx[3]; 27303 if (dirty & /*loginTimeLabel*/ 16) devicesessionwrapper_changes.loginTimeLabel = /*loginTimeLabel*/ ctx[4]; 27304 if (dirty & /*signOutLabel*/ 32) devicesessionwrapper_changes.signOutLabel = /*signOutLabel*/ ctx[5]; 27305 if (dirty & /*onDeviceSignOut*/ 64) devicesessionwrapper_changes.onDeviceSignOut = /*onDeviceSignOut*/ ctx[6]; 27306 devicesessionwrapper.$set(devicesessionwrapper_changes); 27307 }, 27308 i(local) { 27309 if (current) return; 27310 transition_in(devicesessionwrapper.$$.fragment, local); 27311 current = true; 27312 }, 27313 o(local) { 27314 transition_out(devicesessionwrapper.$$.fragment, local); 27315 current = false; 27316 }, 27317 d(detaching) { 27318 destroy_component(devicesessionwrapper, detaching); 27319 } 27320 }; 27321 } 27322 27323 function create_fragment$n(ctx) { 27324 let div1; 27325 let div0; 27326 let h1; 27327 let t0; 27328 let t1; 27329 let t2; 27330 let t3; 27331 let current; 27332 let if_block0 = /*devicesSessions*/ ctx[0] == null && create_if_block_1$d(); 27333 let if_block1 = /*devicesSessions*/ ctx[0] != null && !/*devicesSessions*/ ctx[0].length && create_if_block$i(ctx); 27334 let each_value = ensure_array_like(/*devicesSessions*/ ctx[0] ?? []); 27335 let each_blocks = []; 27336 27337 for (let i = 0; i < each_value.length; i += 1) { 27338 each_blocks[i] = create_each_block$8(get_each_context$8(ctx, each_value, i)); 27339 } 27340 27341 const out = i => transition_out(each_blocks[i], 1, 1, () => { 27342 each_blocks[i] = null; 27343 }); 27344 27345 return { 27346 c() { 27347 div1 = element("div"); 27348 div0 = element("div"); 27349 h1 = element("h1"); 27350 t0 = text(/*yourDevicesLabel*/ ctx[2]); 27351 t1 = space(); 27352 if (if_block0) if_block0.c(); 27353 t2 = space(); 27354 if (if_block1) if_block1.c(); 27355 t3 = space(); 27356 27357 for (let i = 0; i < each_blocks.length; i += 1) { 27358 each_blocks[i].c(); 27359 } 27360 27361 attr(h1, "class", "current-device"); 27362 attr(div0, "class", "your-devices"); 27363 attr(div1, "class", "devices-sessions-container"); 27364 }, 27365 m(target, anchor) { 27366 insert(target, div1, anchor); 27367 append(div1, div0); 27368 append(div0, h1); 27369 append(h1, t0); 27370 append(div1, t1); 27371 if (if_block0) if_block0.m(div1, null); 27372 append(div1, t2); 27373 if (if_block1) if_block1.m(div1, null); 27374 append(div1, t3); 27375 27376 for (let i = 0; i < each_blocks.length; i += 1) { 27377 if (each_blocks[i]) { 27378 each_blocks[i].m(div1, null); 27379 } 27380 } 27381 27382 current = true; 27383 }, 27384 p(ctx, [dirty]) { 27385 if (!current || dirty & /*yourDevicesLabel*/ 4) set_data(t0, /*yourDevicesLabel*/ ctx[2]); 27386 27387 if (/*devicesSessions*/ ctx[0] == null) { 27388 if (if_block0) {
27389 if (dirty & /*devicesSessions*/ 1) { 27390 transition_in(if_block0, 1); 27391 } 27392 } else { 27393 if_block0 = create_if_block_1$d(); 27394 if_block0.c(); 27395 transition_in(if_block0, 1); 27396 if_block0.m(div1, t2); 27397 } 27398 } else if (if_block0) { 27399 group_outros(); 27400 27401 transition_out(if_block0, 1, 1, () => { 27402 if_block0 = null; 27403 }); 27404 27405 check_outros(); 27406 } 27407 27408 if (/*devicesSessions*/ ctx[0] != null && !/*devicesSessions*/ ctx[0].length) { 27409 if (if_block1) { 27410 if_block1.p(ctx, dirty); 27411 } else { 27412 if_block1 = create_if_block$i(ctx); 27413 if_block1.c(); 27414 if_block1.m(div1, t3); 27415 } 27416 } else if (if_block1) { 27417 if_block1.d(1); 27418 if_block1 = null; 27419 } 27420 27421 if (dirty & /*devicesSessions, currentDeviceLabel, loginTimeLabel, signOutLabel, onDeviceSignOut*/ 121) { 27422 each_value = ensure_array_like(/*devicesSessions*/ ctx[0] ?? []); 27423 let i; 27424 27425 for (i = 0; i < each_value.length; i += 1) { 27426 const child_ctx = get_each_context$8(ctx, each_value, i); 27427 27428 if (each_blocks[i]) { 27429 each_blocks[i].p(child_ctx, dirty); 27430 transition_in(each_blocks[i], 1); 27431 } else { 27432 each_blocks[i] = create_each_block$8(child_ctx); 27433 each_blocks[i].c(); 27434 transition_in(each_blocks[i], 1); 27435 each_blocks[i].m(div1, null); 27436 } 27437 } 27438 27439 group_outros(); 27440 27441 for (i = each_value.length; i < each_blocks.length; i += 1) { 27442 out(i); 27443 } 27444 27445 check_outros(); 27446 } 27447 }, 27448 i(local) { 27449 if (current) return; 27450 transition_in(if_block0); 27451 27452 for (let i = 0; i < each_value.length; i += 1) { 27453 transition_in(each_blocks[i]); 27454 } 27455 27456 current = true; 27457 }, 27458 o(local) { 27459 transition_out(if_block0);
27460 each_blocks = each_blocks.filter(Boolean); 27461 27462 for (let i = 0; i < each_blocks.length; i += 1) { 27463 transition_out(each_blocks[i]); 27464 } 27465 27466 current = false; 27467 }, 27468 d(detaching) { 27469 if (detaching) { 27470 detach(div1); 27471 } 27472 27473 if (if_block0) if_block0.d(); 27474 if (if_block1) if_block1.d(); 27475 destroy_each(each_blocks, detaching); 27476 } 27477 }; 27478 } 27479 27480 function instance$n($$self, $$props, $$invalidate) { 27481 let { devicesSessions } = $$props; 27482 let { noDeviceSessionsMessage } = $$props; 27483 let { yourDevicesLabel } = $$props; 27484 let { currentDeviceLabel } = $$props; 27485 let { loginTimeLabel } = $$props; 27486 let { signOutLabel } = $$props; 27487 let { onDeviceSignOut } = $$props; 27488 27489 $$self.$$set = $$props => { 27490 if ('devicesSessions' in $$props) $$invalidate(0, devicesSessions = $$props.devicesSessions); 27491 if ('noDeviceSessionsMessage' in $$props) $$invalidate(1, noDeviceSessionsMessage = $$props.noDeviceSessionsMessage); 27492 if ('yourDevicesLabel' in $$props) $$invalidate(2, yourDevicesLabel = $$props.yourDevicesLabel);
27493 if ('currentDeviceLabel' in $$props) $$invalidate(3, currentDeviceLabel = $$props.currentDeviceLabel); 27494 if ('loginTimeLabel' in $$props) $$invalidate(4, loginTimeLabel = $$props.loginTimeLabel); 27495 if ('signOutLabel' in $$props) $$invalidate(5, signOutLabel = $$props.signOutLabel); 27496 if ('onDeviceSignOut' in $$props) $$invalidate(6, onDeviceSignOut = $$props.onDeviceSignOut); 27497 }; 27498 27499 return [ 27500 devicesSessions, 27501 noDeviceSessionsMessage, 27502 yourDevicesLabel, 27503 currentDeviceLabel, 27504 loginTimeLabel, 27505 signOutLabel, 27506 onDeviceSignOut 27507 ]; 27508 } 27509 27510 class DevicesSessionList extends SvelteComponent { 27511 constructor(options) { 27512 super(); 27513 27514 init(this, options, instance$n, create_fragment$n, safe_not_equal, { 27515 devicesSessions: 0, 27516 noDeviceSessionsMessage: 1, 27517 yourDevicesLabel: 2, 27518 currentDeviceLabel: 3, 27519 loginTimeLabel: 4, 27520 signOutLabel: 5, 27521 onDeviceSignOut: 6 27522 }); 27523 } 27524 } 27525 27526 const loadDeviceSessions = async (form, formState, formActions) => { 27527 const availableDeviceSessions = await getAvailableDeviceSessions(form, formState, formActions); 27528 formActions.updateFormState({ 27529 availableDeviceSessions 27530 }); 27531 return availableDeviceSessions; 27532 }; 27533 const getAvailableDeviceSessions = (form, _, formActions) => { 27534 return request(`zephr/public/sessions/v1/sessions`, { 27535 method: "GET" 27536 }, formActions, null, true) 27537 .then(response => response.ok ? response.json() : []) 27538 .then(sessions => sessions 27539 .map(session => ({ 27540 tenantId: session['tenantId'], 27541 userId: session['userId'], 27542 id: session['id'], 27543 startDate: new Date(session['startDate']).toLocaleString(resolveLanguagePackLocale(form), { 27544 year: 'numeric', 27545 month: 'long', 27546 day: 'numeric', 27547 hour: '2-digit', 27548 minute: '2-digit', 27549 second: '2-digit', 27550 hour12: true 27551 }), 27552 deviceName: session['deviceName'], 27553 browser: session['browser'], 27554 requestingSession: session['requestingSession'], 27555 city: session['city'] ?? null, 27556 country: session['country'] ?? null, 27557 geoState: session['geoState'] ?? null, 27558 ipAddress: session['ipAddress'] ?? null, 27559 }))); 27560 }; 27561 27562 const signOutSingleDevice = async (form, formState, formActions, deviceId) => { 27563 const success = await signOutDevice(form, formState, formActions, deviceId); 27564 if (success) { 27565 console.log("Successfully signed out device."); 27566 return loadDeviceSessions(form, formState, formActions); 27567 } 27568 else { 27569 console.error("Failed to sign out device."); 27570 } 27571 }; 27572 const signOutDevice = async (form, formState, formActions, deviceId) => { 27573 try { 27574 const response = await request(`zephr/public/sessions/v1/sessions/${deviceId}`, { 27575 method: "DELETE" 27576 }, formActions, null, true); 27577 return response.status === 200; 27578 } 27579 catch (error) { 27580 console.error("Error occurred while signing out device:", error); 27581 return false; 27582 } 27583 }; 27584 27585 const deviceSessionsFactory = { 27586 matches: (sectionElement) => sectionElement.type === elementTypes.DEVICES_SESSIONS_LIST, 27587 create: (form, formState, formActions, elementConfig) => ({ 27588 component: DevicesSessionList, 27589 props: { 27590 yourDevicesLabel: elementConfig.yourDevicesLabel, 27591 noDeviceSessionsMessage: elementConfig.noDeviceSessionsMessage, 27592 devicesSessions: formState.availableDeviceSessions, 27593 currentDeviceLabel: elementConfig.currentDeviceLabel, 27594 loginTimeLabel: elementConfig.loginTimeLabel, 27595 signOutLabel: elementConfig.signOutLabel, 27596 onDeviceSignOut: (value) => { 27597 logDataLayerEvent(form, 'zephr_form_button_press', { 27598 sectionId: formState.currentSection.type, 27599 buttonType: 'SUBMIT' 27600 }); 27601 logDataLayerEvent(form, 'zephr_form_device_logout', { deviceId: value }); 27602 void signOutSingleDevice(form, formState, formActions, value); 27603 } 27604 } 27605 }) 27606 }; 27607 27608 /* src/components/elements/devices/DeviceSessionsSignOutAllWrapper.svelte generated by Svelte v4.2.12 */ 27609 27610 function create_if_block$h(ctx) { 27611 let div; 27612 let t; 27613 let mounted; 27614 let dispose; 27615 27616 return { 27617 c() { 27618 div = element("div"); 27619 t = text(/*text*/ ctx[2]); 27620 attr(div, "class", "sign-out-all svelte-1ogdv39"); 27621 }, 27622 m(target, anchor) { 27623 insert(target, div, anchor); 27624 append(div, t); 27625 27626 if (!mounted) { 27627 dispose = listen(div, "click", function () { 27628 if (is_function(/*onSignOutAllDevices*/ ctx[0])) /*onSignOutAllDevices*/ ctx[0].apply(this, arguments); 27629 }); 27630 27631 mounted = true; 27632 } 27633 }, 27634 p(new_ctx, dirty) { 27635 ctx = new_ctx;
27636 if (dirty & /*text*/ 4) set_data(t, /*text*/ ctx[2]); 27637 }, 27638 d(detaching) { 27639 if (detaching) { 27640 detach(div); 27641 } 27642 27643 mounted = false; 27644 dispose(); 27645 } 27646 }; 27647 } 27648 27649 function create_fragment$m(ctx) { 27650 let if_block_anchor; 27651 let if_block = !/*hidden*/ ctx[1] && create_if_block$h(ctx); 27652 27653 return { 27654 c() { 27655 if (if_block) if_block.c(); 27656 if_block_anchor = empty(); 27657 }, 27658 m(target, anchor) { 27659 if (if_block) if_block.m(target, anchor); 27660 insert(target, if_block_anchor, anchor); 27661 }, 27662 p(ctx, [dirty]) { 27663 if (!/*hidden*/ ctx[1]) { 27664 if (if_block) { 27665 if_block.p(ctx, dirty); 27666 } else { 27667 if_block = create_if_block$h(ctx); 27668 if_block.c(); 27669 if_block.m(if_block_anchor.parentNode, if_block_anchor); 27670 } 27671 } else if (if_block) { 27672 if_block.d(1); 27673 if_block = null; 27674 } 27675 }, 27676 i: noop, 27677 o: noop, 27678 d(detaching) { 27679 if (detaching) { 27680 detach(if_block_anchor); 27681 } 27682 27683 if (if_block) if_block.d(detaching); 27684 } 27685 }; 27686 } 27687 27688 function instance$m($$self, $$props, $$invalidate) { 27689 let { onSignOutAllDevices } = $$props; 27690 let { hidden } = $$props; 27691 let { text } = $$props; 27692 27693 $$self.$$set = $$props => {
27694 if ('onSignOutAllDevices' in $$props) $$invalidate(0, onSignOutAllDevices = $$props.onSignOutAllDevices); 27695 if ('hidden' in $$props) $$invalidate(1, hidden = $$props.hidden); 27696 if ('text' in $$props) $$invalidate(2, text = $$props.text); 27697 }; 27698 27699 return [onSignOutAllDevices, hidden, text]; 27700 } 27701 27702 class DeviceSessionsSignOutAllWrapper extends SvelteComponent { 27703 constructor(options) { 27704 super(); 27705 27706 init(this, options, instance$m, create_fragment$m, safe_not_equal, { 27707 onSignOutAllDevices: 0, 27708 hidden: 1, 27709 text: 2 27710 }); 27711 } 27712 } 27713 27714 const signOutOfAllDevices = async (form, formState, formActions) => { 27715 const success = await signOutDevices(form, formState, formActions); 27716 if (success) { 27717 console.log("Successfully signed out of all devices."); 27718 return loadDeviceSessions(form, formState, formActions); 27719 } 27720 else { 27721 console.error("Failed to sign out of all devices."); 27722 } 27723 }; 27724 const signOutDevices = async (form, _, formActions) => { 27725 try { 27726 const response = await request(`zephr/public/sessions/v1/sessions?except-current`, { 27727 method: "DELETE" 27728 }, formActions, null, true); 27729 return response.status === 200; 27730 } 27731 catch (error) { 27732 console.error("Error occurred while signing out devices:", error); 27733 return false; 27734 } 27735 }; 27736 27737 const deviceSessionsSignOutAll = { 27738 matches: (sectionElement) => sectionElement.type === elementTypes.SIGN_OUT_ALL_OTHER_DEVICES, 27739 create: (form, formState, formActions, elementConfig) => ({ 27740 component: DeviceSessionsSignOutAllWrapper, 27741 props: { 27742 hidden: formState.availableDeviceSessions?.length <= 1, 27743 text: elementConfig.text, 27744 onSignOutAllDevices: () => { 27745 logDataLayerEvent(form, 'zephr_form_sign_out_all_devices', null); 27746 void signOutOfAllDevices(form, formState, formActions); 27747 } 27748 } 27749 }) 27750 }; 27751 27752 /* src/components/elements/billingHistory/BillingHistory.svelte generated by Svelte v4.2.12 */ 27753 27754 function get_each_context$7(ctx, list, i) { 27755 const child_ctx = ctx.slice(); 27756 child_ctx[5] = list[i]; 27757 return child_ctx; 27758 } 27759 27760 // (30:10) {#if e.subtotal} 27761 function create_if_block_1$c(ctx) { 27762 let t0_value = /*e*/ ctx[5].currency + ""; 27763 let t0; 27764 let t1; 27765 let t2_value = /*e*/ ctx[5].subtotal + ""; 27766 let t2; 27767 let t3; 27768 let if_block_anchor; 27769 let if_block = /*e*/ ctx[5].taxes && create_if_block_2$8(ctx); 27770 27771 return { 27772 c() { 27773 t0 = text(t0_value); 27774 t1 = space(); 27775 t2 = text(t2_value); 27776 t3 = space(); 27777 if (if_block) if_block.c(); 27778 if_block_anchor = empty(); 27779 }, 27780 m(target, anchor) { 27781 insert(target, t0, anchor); 27782 insert(target, t1, anchor); 27783 insert(target, t2, anchor); 27784 insert(target, t3, anchor); 27785 if (if_block) if_block.m(target, anchor); 27786 insert(target, if_block_anchor, anchor); 27787 }, 27788 p(ctx, dirty) { 27789 if (dirty & /*historyItems*/ 1 && t0_value !== (t0_value = /*e*/ ctx[5].currency + "")) set_data(t0, t0_value); 27790 if (dirty & /*historyItems*/ 1 && t2_value !== (t2_value = /*e*/ ctx[5].subtotal + "")) set_data(t2, t2_value); 27791 27792 if (/*e*/ ctx[5].taxes) { 27793 if (if_block) { 27794 if_block.p(ctx, dirty); 27795 } else { 27796 if_block = create_if_block_2$8(ctx); 27797 if_block.c(); 27798 if_block.m(if_block_anchor.parentNode, if_block_anchor); 27799 } 27800 } else if (if_block) { 27801 if_block.d(1); 27802 if_block = null; 27803 } 27804 }, 27805 d(detaching) { 27806 if (detaching) { 27807 detach(t0); 27808 detach(t1); 27809 detach(t2); 27810 detach(t3); 27811 detach(if_block_anchor); 27812 } 27813 27814 if (if_block) if_block.d(detaching); 27815 } 27816 }; 27817 } 27818 27819 // (32:12) {#if e.taxes} 27820 function create_if_block_2$8(ctx) { 27821 let span; 27822 let t_value = ` ${/*e*/ ctx[5].taxes}` + ""; 27823 let t; 27824 27825 return { 27826 c() { 27827 span = element("span"); 27828 t = text(t_value); 27829 attr(span, "class", "taxes svelte-7sscau"); 27830 }, 27831 m(target, anchor) { 27832 insert(target, span, anchor); 27833 append(span, t); 27834 }, 27835 p(ctx, dirty) { 27836 if (dirty & /*historyItems*/ 1 && t_value !== (t_value = ` ${/*e*/ ctx[5].taxes}` + "")) set_data(t, t_value); 27837 }, 27838 d(detaching) { 27839 if (detaching) { 27840 detach(span); 27841 } 27842 } 27843 }; 27844 } 27845 27846 // (38:10) {#if e.total} 27847 function create_if_block$g(ctx) { 27848 let t0_value = /*e*/ ctx[5].currency + ""; 27849 let t0; 27850 let t1; 27851 let t2_value = /*e*/ ctx[5].total + ""; 27852 let t2; 27853 27854 return { 27855 c() { 27856 t0 = text(t0_value); 27857 t1 = space(); 27858 t2 = text(t2_value); 27859 }, 27860 m(target, anchor) { 27861 insert(target, t0, anchor); 27862 insert(target, t1, anchor); 27863 insert(target, t2, anchor); 27864 }, 27865 p(ctx, dirty) {
27866 if (dirty & /*historyItems*/ 1 && t0_value !== (t0_value = /*e*/ ctx[5].currency + "")) set_data(t0, t0_value); 27867 if (dirty & /*historyItems*/ 1 && t2_value !== (t2_value = /*e*/ ctx[5].total + "")) set_data(t2, t2_value); 27868 }, 27869 d(detaching) { 27870 if (detaching) { 27871 detach(t0); 27872 detach(t1); 27873 detach(t2); 27874 } 27875 } 27876 }; 27877 } 27878 27879 // (25:4) {#each historyItems ?? [] as e} 27880 function create_each_block$7(ctx) { 27881 let div4; 27882 let div0; 27883 let t0_value = /*e*/ ctx[5].date + ""; 27884 let t0; 27885 let t1; 27886 let div1; 27887 let t2_value = /*e*/ ctx[5].period + ""; 27888 let t2; 27889 let t3; 27890 let div2; 27891 let t4; 27892 let div3; 27893 let t5; 27894 let if_block0 = /*e*/ ctx[5].subtotal && create_if_block_1$c(ctx); 27895 let if_block1 = /*e*/ ctx[5].total && create_if_block$g(ctx); 27896 27897 return { 27898 c() { 27899 div4 = element("div"); 27900 div0 = element("div"); 27901 t0 = text(t0_value); 27902 t1 = space(); 27903 div1 = element("div"); 27904 t2 = text(t2_value); 27905 t3 = space(); 27906 div2 = element("div"); 27907 if (if_block0) if_block0.c(); 27908 t4 = space(); 27909 div3 = element("div"); 27910 if (if_block1) if_block1.c(); 27911 t5 = space(); 27912 attr(div0, "class", "svelte-7sscau"); 27913 attr(div1, "class", "svelte-7sscau"); 27914 attr(div2, "class", "svelte-7sscau"); 27915 attr(div3, "class", "svelte-7sscau"); 27916 attr(div4, "class", "table-row svelte-7sscau"); 27917 }, 27918 m(target, anchor) { 27919 insert(target, div4, anchor); 27920 append(div4, div0); 27921 append(div0, t0); 27922 append(div4, t1); 27923 append(div4, div1); 27924 append(div1, t2); 27925 append(div4, t3); 27926 append(div4, div2); 27927 if (if_block0) if_block0.m(div2, null); 27928 append(div4, t4); 27929 append(div4, div3); 27930 if (if_block1) if_block1.m(div3, null); 27931 append(div4, t5); 27932 }, 27933 p(ctx, dirty) { 27934 if (dirty & /*historyItems*/ 1 && t0_value !== (t0_value = /*e*/ ctx[5].date + "")) set_data(t0, t0_value); 27935 if (dirty & /*historyItems*/ 1 && t2_value !== (t2_value = /*e*/ ctx[5].period + "")) set_data(t2, t2_value); 27936 27937 if (/*e*/ ctx[5].subtotal) { 27938 if (if_block0) { 27939 if_block0.p(ctx, dirty); 27940 } else { 27941 if_block0 = create_if_block_1$c(ctx); 27942 if_block0.c(); 27943 if_block0.m(div2, null); 27944 } 27945 } else if (if_block0) { 27946 if_block0.d(1); 27947 if_block0 = null; 27948 } 27949 27950 if (/*e*/ ctx[5].total) { 27951 if (if_block1) { 27952 if_block1.p(ctx, dirty); 27953 } else { 27954 if_block1 = create_if_block$g(ctx); 27955 if_block1.c(); 27956 if_block1.m(div3, null); 27957 } 27958 } else if (if_block1) { 27959 if_block1.d(1); 27960 if_block1 = null; 27961 } 27962 }, 27963 d(detaching) { 27964 if (detaching) { 27965 detach(div4); 27966 } 27967 27968 if (if_block0) if_block0.d(); 27969 if (if_block1) if_block1.d(); 27970 } 27971 }; 27972 } 27973 27974 function create_fragment$l(ctx) { 27975 let div6; 27976 let div5; 27977 let div4; 27978 let div0; 27979 let t0; 27980 let t1; 27981 let div1; 27982 let t2; 27983 let t3; 27984 let div2; 27985 let t4; 27986 let t5; 27987 let div3; 27988 let t6; 27989 let t7; 27990 let each_value = ensure_array_like(/*historyItems*/ ctx[0] ?? []); 27991 let each_blocks = []; 27992 27993 for (let i = 0; i < each_value.length; i += 1) { 27994 each_blocks[i] = create_each_block$7(get_each_context$7(ctx, each_value, i)); 27995 } 27996 27997 return { 27998 c() { 27999 div6 = element("div"); 28000 div5 = element("div"); 28001 div4 = element("div"); 28002 div0 = element("div"); 28003 t0 = text(/*dateLabel*/ ctx[1]); 28004 t1 = space(); 28005 div1 = element("div"); 28006 t2 = text(/*periodLabel*/ ctx[2]); 28007 t3 = space(); 28008 div2 = element("div"); 28009 t4 = text(/*subtotalLabel*/ ctx[3]); 28010 t5 = space(); 28011 div3 = element("div"); 28012 t6 = text(/*totalLabel*/ ctx[4]); 28013 t7 = space(); 28014 28015 for (let i = 0; i < each_blocks.length; i += 1) { 28016 each_blocks[i].c(); 28017 } 28018 28019 attr(div0, "class", "svelte-7sscau"); 28020 attr(div1, "class", "svelte-7sscau"); 28021 attr(div2, "class", "svelte-7sscau"); 28022 attr(div3, "class", "svelte-7sscau"); 28023 attr(div4, "class", "table-head svelte-7sscau"); 28024 attr(div5, "class", "table svelte-7sscau"); 28025 attr(div6, "class", "billing-history-container"); 28026 }, 28027 m(target, anchor) { 28028 insert(target, div6, anchor); 28029 append(div6, div5); 28030 append(div5, div4); 28031 append(div4, div0); 28032 append(div0, t0); 28033 append(div4, t1); 28034 append(div4, div1); 28035 append(div1, t2); 28036 append(div4, t3); 28037 append(div4, div2); 28038 append(div2, t4); 28039 append(div4, t5); 28040 append(div4, div3); 28041 append(div3, t6); 28042 append(div5, t7); 28043 28044 for (let i = 0; i < each_blocks.length; i += 1) { 28045 if (each_blocks[i]) { 28046 each_blocks[i].m(div5, null); 28047 } 28048 } 28049 }, 28050 p(ctx, [dirty]) {
28051 if (dirty & /*dateLabel*/ 2) set_data(t0, /*dateLabel*/ ctx[1]); 28052 if (dirty & /*periodLabel*/ 4) set_data(t2, /*periodLabel*/ ctx[2]); 28053 if (dirty & /*subtotalLabel*/ 8) set_data(t4, /*subtotalLabel*/ ctx[3]); 28054 if (dirty & /*totalLabel*/ 16) set_data(t6, /*totalLabel*/ ctx[4]); 28055 28056 if (dirty & /*historyItems*/ 1) { 28057 each_value = ensure_array_like(/*historyItems*/ ctx[0] ?? []); 28058 let i; 28059 28060 for (i = 0; i < each_value.length; i += 1) { 28061 const child_ctx = get_each_context$7(ctx, each_value, i); 28062 28063 if (each_blocks[i]) { 28064 each_blocks[i].p(child_ctx, dirty); 28065 } else { 28066 each_blocks[i] = create_each_block$7(child_ctx); 28067 each_blocks[i].c(); 28068 each_blocks[i].m(div5, null); 28069 } 28070 } 28071 28072 for (; i < each_blocks.length; i += 1) { 28073 each_blocks[i].d(1); 28074 } 28075 28076 each_blocks.length = each_value.length; 28077 } 28078 }, 28079 i: noop, 28080 o: noop, 28081 d(detaching) { 28082 if (detaching) { 28083 detach(div6); 28084 } 28085 28086 destroy_each(each_blocks, detaching); 28087 } 28088 }; 28089 } 28090 28091 function instance$l($$self, $$props, $$invalidate) { 28092 let { historyItems } = $$props; 28093 let { dateLabel } = $$props; 28094 let { periodLabel } = $$props; 28095 let { subtotalLabel } = $$props; 28096 let { totalLabel } = $$props; 28097 28098 $$self.$$set = $$props => {
28099 if ('historyItems' in $$props) $$invalidate(0, historyItems = $$props.historyItems); 28100 if ('dateLabel' in $$props) $$invalidate(1, dateLabel = $$props.dateLabel); 28101 if ('periodLabel' in $$props) $$invalidate(2, periodLabel = $$props.periodLabel); 28102 if ('subtotalLabel' in $$props) $$invalidate(3, subtotalLabel = $$props.subtotalLabel); 28103 if ('totalLabel' in $$props) $$invalidate(4, totalLabel = $$props.totalLabel); 28104 }; 28105 28106 return [historyItems, dateLabel, periodLabel, subtotalLabel, totalLabel]; 28107 } 28108 28109 class BillingHistory extends SvelteComponent { 28110 constructor(options) { 28111 super(); 28112 28113 init(this, options, instance$l, create_fragment$l, safe_not_equal, { 28114 historyItems: 0, 28115 dateLabel: 1, 28116 periodLabel: 2, 28117 subtotalLabel: 3, 28118 totalLabel: 4 28119 }); 28120 } 28121 } 28122 28123 const billingHistoryFactory = { 28124 matches: (sectionElement) => sectionElement.type === elementTypes.BILLING_HISTORY, 28125 create: (form, formState, __) => ({ 28126 component: BillingHistory, 28127 props: { 28128 historyItems: formState.selectedSubscription?.transactionHistory, 28129 dateLabel: resolveLanguagePackKeyTyped(form, 'forms.billing.history.date', 'Date'), 28130 periodLabel: resolveLanguagePackKeyTyped(form, 'forms.billing.history.period', 'Period'), 28131 subtotalLabel: resolveLanguagePackKeyTyped(form, 'forms.billing.history.subtotal', 'Subtotal'), 28132 totalLabel: resolveLanguagePackKeyTyped(form, 'forms.billing.history.total', 'Total'), 28133 } 28134 }) 28135 }; 28136 28137 /* src/components/elements/buttonGroup/ButtonGroup.svelte generated by Svelte v4.2.12 */ 28138 28139 function create_if_block$f(ctx) { 28140 let button; 28141 let t; 28142 let mounted; 28143 let dispose; 28144 28145 return { 28146 c() { 28147 button = element("button"); 28148 t = text(/*backText*/ ctx[1]); 28149 attr(button, "class", "zephr-form-back-button svelte-5uv9ua"); 28150 attr(button, "type", "submit"); 28151 }, 28152 m(target, anchor) { 28153 insert(target, button, anchor); 28154 append(button, t); 28155 28156 if (!mounted) { 28157 dispose = listen(button, "click", prevent_default(function () { 28158 if (is_function(/*onBack*/ ctx[3])) /*onBack*/ ctx[3].apply(this, arguments); 28159 })); 28160 28161 mounted = true; 28162 } 28163 }, 28164 p(new_ctx, dirty) { 28165 ctx = new_ctx; 28166 if (dirty & /*backText*/ 2) set_data(t, /*backText*/ ctx[1]); 28167 }, 28168 d(detaching) { 28169 if (detaching) { 28170 detach(button); 28171 } 28172 28173 mounted = false; 28174 dispose(); 28175 } 28176 }; 28177 } 28178 28179 function create_fragment$k(ctx) { 28180 let div; 28181 let t0; 28182 let button; 28183 let t1; 28184 let mounted; 28185 let dispose; 28186 let if_block = /*backEnabled*/ ctx[2] && create_if_block$f(ctx); 28187 28188 return { 28189 c() { 28190 div = element("div"); 28191 if (if_block) if_block.c(); 28192 t0 = space(); 28193 button = element("button"); 28194 t1 = text(/*continueText*/ ctx[0]); 28195 attr(button, "class", "zephr-form-continue-button svelte-5uv9ua"); 28196 attr(button, "type", "submit"); 28197 attr(div, "class", "zephr-form-button-group zephr-form-max-width svelte-5uv9ua"); 28198 }, 28199 m(target, anchor) { 28200 insert(target, div, anchor); 28201 if (if_block) if_block.m(div, null); 28202 append(div, t0); 28203 append(div, button); 28204 append(button, t1); 28205 28206 if (!mounted) { 28207 dispose = listen(button, "click", prevent_default(function () { 28208 if (is_function(/*onClick*/ ctx[4])) /*onClick*/ ctx[4].apply(this, arguments); 28209 })); 28210 28211 mounted = true; 28212 } 28213 }, 28214 p(new_ctx, [dirty]) { 28215 ctx = new_ctx; 28216 28217 if (/*backEnabled*/ ctx[2]) { 28218 if (if_block) { 28219 if_block.p(ctx, dirty); 28220 } else { 28221 if_block = create_if_block$f(ctx); 28222 if_block.c(); 28223 if_block.m(div, t0); 28224 } 28225 } else if (if_block) { 28226 if_block.d(1); 28227 if_block = null; 28228 } 28229 28230 if (dirty & /*continueText*/ 1) set_data(t1, /*continueText*/ ctx[0]); 28231 }, 28232 i: noop, 28233 o: noop, 28234 d(detaching) { 28235 if (detaching) { 28236 detach(div); 28237 } 28238 28239 if (if_block) if_block.d(); 28240 mounted = false; 28241 dispose(); 28242 } 28243 }; 28244 } 28245 28246 function instance$k($$self, $$props, $$invalidate) { 28247 let { continueText } = $$props; 28248 let { backText } = $$props; 28249 let { backEnabled } = $$props; 28250 let { onBack } = $$props; 28251 let { onClick } = $$props; 28252 28253 $$self.$$set = $$props => {
28254 if ('continueText' in $$props) $$invalidate(0, continueText = $$props.continueText); 28255 if ('backText' in $$props) $$invalidate(1, backText = $$props.backText); 28256 if ('backEnabled' in $$props) $$invalidate(2, backEnabled = $$props.backEnabled); 28257 if ('onBack' in $$props) $$invalidate(3, onBack = $$props.onBack); 28258 if ('onClick' in $$props) $$invalidate(4, onClick = $$props.onClick); 28259 }; 28260 28261 return [continueText, backText, backEnabled, onBack, onClick]; 28262 } 28263 28264 class ButtonGroup extends SvelteComponent { 28265 constructor(options) { 28266 super(); 28267 28268 init(this, options, instance$k, create_fragment$k, safe_not_equal, { 28269 continueText: 0, 28270 backText: 1, 28271 backEnabled: 2, 28272 onBack: 3, 28273 onClick: 4 28274 }); 28275 } 28276 } 28277 28278 const factory$4 = { 28279 matches: (sectionElement) => sectionElement.type === elementTypes.BUTTON_GROUP, 28280 create: (form, formState, formActions, elementConfig) => ({ 28281 component: ButtonGroup, 28282 props: { 28283 continueText: elementConfig.continueText, 28284 backText: elementConfig.backText, 28285 backEnabled: elementConfig.backEnabled, 28286 onClick: () => { 28287 logDataLayerEvent(form, 'zephr_form_button_press', { 28288 sectionId: formState.currentSection.type, 28289 buttonType: 'CONTINUE' 28290 }); 28291 if (elementConfig.isCancel) { 28292 formActions.updateFormState({ 28293 confirmCancel: true, 28294 }); 28295 } 28296 formActions.updateFormState({ 28297 isExternalReferrer: false, 28298 }); 28299 formActions.attemptCompleteSection(); 28300 }, 28301 onBack: () => { 28302 logDataLayerEvent(form, 'zephr_form_button_press', { 28303 sectionId: formState.currentSection.type, 28304 buttonType: 'BACK' 28305 }); 28306 if (elementConfig.backToURL) { 28307 window.location.pathname = elementConfig.backURL; 28308 } 28309 else if (formState.isExternalReferrer) { 28310 window.history.back(); 28311 } 28312 else { 28313 formActions.onEvent(elementConfig.event); 28314 } 28315 } 28316 } 28317 }) 28318 }; 28319 28320 /* src/components/elements/linkButton/LinkButton.svelte generated by Svelte v4.2.12 */ 28321 28322 function create_fragment$j(ctx) { 28323 let a; 28324 let t; 28325 let mounted; 28326 let dispose; 28327 28328 return { 28329 c() { 28330 a = element("a"); 28331 t = text(/*text*/ ctx[0]); 28332 attr(a, "class", "zephr-form-button zephr-form-button-top-margin svelte-1uaz0r"); 28333 attr(a, "href", /*href*/ ctx[1]); 28334 }, 28335 m(target, anchor) { 28336 insert(target, a, anchor); 28337 append(a, t); 28338 28339 if (!mounted) { 28340 dispose = listen(a, "click", function () { 28341 if (is_function(/*onClick*/ ctx[2])) /*onClick*/ ctx[2].apply(this, arguments); 28342 }); 28343 28344 mounted = true; 28345 } 28346 }, 28347 p(new_ctx, [dirty]) { 28348 ctx = new_ctx; 28349 if (dirty & /*text*/ 1) set_data(t, /*text*/ ctx[0]); 28350 28351 if (dirty & /*href*/ 2) { 28352 attr(a, "href", /*href*/ ctx[1]); 28353 } 28354 }, 28355 i: noop, 28356 o: noop, 28357 d(detaching) { 28358 if (detaching) { 28359 detach(a); 28360 } 28361 28362 mounted = false; 28363 dispose(); 28364 } 28365 }; 28366 } 28367 28368 function instance$j($$self, $$props, $$invalidate) { 28369 let { text } = $$props; 28370 let { href } = $$props; 28371 28372 let { onClick = () => { 28373 28374 } } = $$props; 28375 28376 $$self.$$set = $$props => {
28377 if ('text' in $$props) $$invalidate(0, text = $$props.text); 28378 if ('href' in $$props) $$invalidate(1, href = $$props.href); 28379 if ('onClick' in $$props) $$invalidate(2, onClick = $$props.onClick); 28380 }; 28381 28382 return [text, href, onClick]; 28383 } 28384 28385 class LinkButton extends SvelteComponent { 28386 constructor(options) { 28387 super(); 28388 init(this, options, instance$j, create_fragment$j, safe_not_equal, { text: 0, href: 1, onClick: 2 }); 28389 } 28390 } 28391 28392 const factory$3 = { 28393 matches: (sectionElement) => sectionElement.type === elementTypes.LINK_BUTTON, 28394 create: (form, formState, formActions, elementConfig) => ({ 28395 component: LinkButton, 28396 props: { 28397 text: elementConfig.text, 28398 href: elementConfig.href, 28399 onClick: () => { 28400 logDataLayerEvent(form, 'zephr_form_button_press', { 28401 sectionId: formState.currentSection.type, 28402 buttonType: 'LINK_BUTTON' 28403 }); 28404 }, 28405 }, 28406 }) 28407 }; 28408 28409 /* src/components/elements/recipientName/RecipientName.svelte generated by Svelte v4.2.12 */ 28410 28411 function create_if_block_1$b(ctx) { 28412 let div; 28413 let t; 28414 28415 return { 28416 c() { 28417 div = element("div"); 28418 t = text(/*firstNameError*/ ctx[3]); 28419 attr(div, "class", "error-text svelte-hvl7z2"); 28420 }, 28421 m(target, anchor) { 28422 insert(target, div, anchor); 28423 append(div, t); 28424 }, 28425 p(ctx, dirty) { 28426 if (dirty & /*firstNameError*/ 8) set_data(t, /*firstNameError*/ ctx[3]); 28427 }, 28428 d(detaching) { 28429 if (detaching) { 28430 detach(div); 28431 } 28432 } 28433 }; 28434 } 28435 28436 // (71:4) {#if lastNameError} 28437 function create_if_block$e(ctx) { 28438 let div; 28439 let t; 28440 28441 return { 28442 c() { 28443 div = element("div"); 28444 t = text(/*lastNameError*/ ctx[4]); 28445 attr(div, "class", "error-text svelte-hvl7z2"); 28446 }, 28447 m(target, anchor) { 28448 insert(target, div, anchor); 28449 append(div, t); 28450 }, 28451 p(ctx, dirty) { 28452 if (dirty & /*lastNameError*/ 16) set_data(t, /*lastNameError*/ ctx[4]); 28453 }, 28454 d(detaching) { 28455 if (detaching) { 28456 detach(div); 28457 } 28458 } 28459 }; 28460 } 28461 28462 function create_fragment$i(ctx) { 28463 let div2; 28464 let div0; 28465 let label0; 28466 let t0_value = /*config*/ ctx[0].firstNameLabel + ""; 28467 let t0; 28468 let t1; 28469 let input0; 28470 let input0_placeholder_value; 28471 let t2; 28472 let t3; 28473 let div1; 28474 let label1; 28475 let t4_value = /*config*/ ctx[0].lastNameLabel + ""; 28476 let t4; 28477 let t5; 28478 let input1; 28479 let input1_placeholder_value; 28480 let t6; 28481 let mounted; 28482 let dispose; 28483 let if_block0 = /*firstNameError*/ ctx[3] && create_if_block_1$b(ctx); 28484 let if_block1 = /*lastNameError*/ ctx[4] && create_if_block$e(ctx); 28485 28486 return { 28487 c() { 28488 div2 = element("div"); 28489 div0 = element("div"); 28490 label0 = element("label"); 28491 t0 = text(t0_value); 28492 t1 = space(); 28493 input0 = element("input"); 28494 t2 = space(); 28495 if (if_block0) if_block0.c(); 28496 t3 = space(); 28497 div1 = element("div"); 28498 label1 = element("label"); 28499 t4 = text(t4_value); 28500 t5 = space(); 28501 input1 = element("input"); 28502 t6 = space(); 28503 if (if_block1) if_block1.c(); 28504 attr(label0, "for", "firstName"); 28505 attr(label0, "class", "svelte-hvl7z2"); 28506 attr(input0, "id", "firstName"); 28507 attr(input0, "type", "text"); 28508 input0.required = true; 28509 attr(input0, "placeholder", input0_placeholder_value = /*config*/ ctx[0].firstNamePlaceholder); 28510 attr(input0, "class", "svelte-hvl7z2"); 28511 toggle_class(input0, "error", !!/*firstNameError*/ ctx[3]); 28512 attr(div0, "class", "field svelte-hvl7z2"); 28513 attr(label1, "for", "lastName"); 28514 attr(label1, "class", "svelte-hvl7z2"); 28515 attr(input1, "id", "lastName"); 28516 attr(input1, "type", "text"); 28517 input1.required = true; 28518 attr(input1, "placeholder", input1_placeholder_value = /*config*/ ctx[0].lastNamePlaceholder); 28519 attr(input1, "class", "svelte-hvl7z2"); 28520 toggle_class(input1, "error", !!/*lastNameError*/ ctx[4]); 28521 attr(div1, "class", "field svelte-hvl7z2"); 28522 attr(div2, "class", "recipient-name-section svelte-hvl7z2"); 28523 }, 28524 m(target, anchor) { 28525 insert(target, div2, anchor); 28526 append(div2, div0); 28527 append(div0, label0); 28528 append(label0, t0); 28529 append(div0, t1); 28530 append(div0, input0); 28531 set_input_value(input0, /*firstName*/ ctx[1]); 28532 append(div0, t2); 28533 if (if_block0) if_block0.m(div0, null); 28534 append(div2, t3); 28535 append(div2, div1); 28536 append(div1, label1); 28537 append(label1, t4); 28538 append(div1, t5); 28539 append(div1, input1); 28540 set_input_value(input1, /*lastName*/ ctx[2]); 28541 append(div1, t6); 28542 if (if_block1) if_block1.m(div1, null); 28543 28544 if (!mounted) { 28545 dispose = [ 28546 listen(input0, "input", /*input0_input_handler*/ ctx[8]), 28547 listen(input0, "input", /*updateGiftRecipient*/ ctx[5]), 28548 listen(input1, "input", /*input1_input_handler*/ ctx[9]), 28549 listen(input1, "input", /*updateGiftRecipient*/ ctx[5]) 28550 ]; 28551 28552 mounted = true; 28553 } 28554 }, 28555 p(ctx, [dirty]) {
28556 if (dirty & /*config*/ 1 && t0_value !== (t0_value = /*config*/ ctx[0].firstNameLabel + "")) set_data(t0, t0_value); 28557 28558 if (dirty & /*config*/ 1 && input0_placeholder_value !== (input0_placeholder_value = /*config*/ ctx[0].firstNamePlaceholder)) { 28559 attr(input0, "placeholder", input0_placeholder_value); 28560 } 28561 28562 if (dirty & /*firstName*/ 2 && input0.value !== /*firstName*/ ctx[1]) { 28563 set_input_value(input0, /*firstName*/ ctx[1]); 28564 } 28565 28566 if (dirty & /*firstNameError*/ 8) { 28567 toggle_class(input0, "error", !!/*firstNameError*/ ctx[3]); 28568 } 28569 28570 if (/*firstNameError*/ ctx[3]) { 28571 if (if_block0) { 28572 if_block0.p(ctx, dirty); 28573 } else { 28574 if_block0 = create_if_block_1$b(ctx); 28575 if_block0.c(); 28576 if_block0.m(div0, null); 28577 } 28578 } else if (if_block0) { 28579 if_block0.d(1); 28580 if_block0 = null; 28581 } 28582 28583 if (dirty & /*config*/ 1 && t4_value !== (t4_value = /*config*/ ctx[0].lastNameLabel + "")) set_data(t4, t4_value); 28584 28585 if (dirty & /*config*/ 1 && input1_placeholder_value !== (input1_placeholder_value = /*config*/ ctx[0].lastNamePlaceholder)) { 28586 attr(input1, "placeholder", input1_placeholder_value); 28587 } 28588 28589 if (dirty & /*lastName*/ 4 && input1.value !== /*lastName*/ ctx[2]) { 28590 set_input_value(input1, /*lastName*/ ctx[2]); 28591 } 28592 28593 if (dirty & /*lastNameError*/ 16) { 28594 toggle_class(input1, "error", !!/*lastNameError*/ ctx[4]); 28595 } 28596 28597 if (/*lastNameError*/ ctx[4]) { 28598 if (if_block1) { 28599 if_block1.p(ctx, dirty); 28600 } else { 28601 if_block1 = create_if_block$e(ctx); 28602 if_block1.c(); 28603 if_block1.m(div1, null); 28604 } 28605 } else if (if_block1) { 28606 if_block1.d(1); 28607 if_block1 = null; 28608 } 28609 }, 28610 i: noop, 28611 o: noop, 28612 d(detaching) { 28613 if (detaching) { 28614 detach(div2); 28615 } 28616 28617 if (if_block0) if_block0.d(); 28618 if (if_block1) if_block1.d(); 28619 mounted = false; 28620 run_all(dispose); 28621 } 28622 }; 28623 } 28624 28625 function instance$i($$self, $$props, $$invalidate) { 28626 let { formState } = $$props; 28627 let { formActions } = $$props; 28628 let { config } = $$props; 28629 const dispatch = createEventDispatcher(); 28630 let firstName = formState.giftRecipient?.firstName || ''; 28631 let lastName = formState.giftRecipient?.lastName || ''; 28632 let firstNameError = ''; 28633 let lastNameError = ''; 28634 28635 // Update form state when input changes 28636 const updateGiftRecipient = () => { 28637 const updatedGiftRecipient = { 28638 ...formState.giftRecipient || {}, 28639 firstName, 28640 lastName 28641 }; 28642 28643 formActions.updateFormState({ giftRecipient: updatedGiftRecipient }); 28644 validateForm(); 28645 }; 28646 28647 const validateForm = () => { 28648 const hasValidFirstName = !!firstName.trim(); 28649 const hasValidLastName = !!lastName.trim(); 28650 28651 if (!hasValidFirstName) { 28652 $$invalidate(3, firstNameError = 'First name is required'); 28653 } else { 28654 $$invalidate(3, firstNameError = ''); 28655 } 28656 28657 if (!hasValidLastName) { 28658 $$invalidate(4, lastNameError = 'Last name is required'); 28659 } else { 28660 $$invalidate(4, lastNameError = ''); 28661 } 28662 28663 // Dispatch event for form validity 28664 dispatch('validity', { 28665 isValid: hasValidFirstName && hasValidLastName 28666 }); 28667 }; 28668 28669 function input0_input_handler() { 28670 firstName = this.value; 28671 $$invalidate(1, firstName); 28672 } 28673 28674 function input1_input_handler() { 28675 lastName = this.value; 28676 $$invalidate(2, lastName); 28677 } 28678 28679 $$self.$$set = $$props => {
28680 if ('formState' in $$props) $$invalidate(6, formState = $$props.formState); 28681 if ('formActions' in $$props) $$invalidate(7, formActions = $$props.formActions); 28682 if ('config' in $$props) $$invalidate(0, config = $$props.config); 28683 }; 28684 28685 return [ 28686 config, 28687 firstName, 28688 lastName, 28689 firstNameError, 28690 lastNameError, 28691 updateGiftRecipient, 28692 formState, 28693 formActions, 28694 input0_input_handler, 28695 input1_input_handler 28696 ]; 28697 } 28698 28699 class RecipientName extends SvelteComponent { 28700 constructor(options) { 28701 super(); 28702 init(this, options, instance$i, create_fragment$i, safe_not_equal, { formState: 6, formActions: 7, config: 0 }); 28703 } 28704 } 28705 28706 const recipientNameFactory = { 28707 matches: (sectionElement) => sectionElement.type === elementTypes.RECIPIENT_NAME, 28708 create: (form, formState, formActions, elementConfig) => { 28709 // Resolve all labels through language pack service 28710 const resolvedConfig = { 28711 firstNameLabel: resolveLanguagePackKeyTyped(form, 'forms.gift.recipient-first-name', elementConfig.firstNameLabel), 28712 lastNameLabel: resolveLanguagePackKeyTyped(form, 'forms.gift.recipient-last-name', elementConfig.lastNameLabel), 28713 firstNamePlaceholder: resolveLanguagePackKeyTyped(form, 'forms.gift.first-name-placeholder', elementConfig.firstNamePlaceholder), 28714 lastNamePlaceholder: resolveLanguagePackKeyTyped(form, 'forms.gift.last-name-placeholder', elementConfig.lastNamePlaceholder), 28715 }; 28716 // Determine if the input is valid 28717 const giftRecipient = (formState.giftRecipient || {}); 28718 const hasValidFirstName = !!giftRecipient.firstName?.trim(); 28719 const hasValidLastName = !!giftRecipient.lastName?.trim(); 28720 const isValid = hasValidFirstName && hasValidLastName; 28721 return { 28722 component: RecipientName, 28723 props: { 28724 config: resolvedConfig, 28725 form, 28726 formState, 28727 formActions, 28728 }, 28729 isValid 28730 }; 28731 } 28732 }; 28733 28734 /* src/components/elements/recipientEmail/RecipientEmail.svelte generated by Svelte v4.2.12 */ 28735 28736 function create_if_block$d(ctx) { 28737 let div; 28738 let t; 28739 28740 return { 28741 c() { 28742 div = element("div"); 28743 t = text(/*emailError*/ ctx[2]); 28744 attr(div, "class", "error-text svelte-1odylgp"); 28745 }, 28746 m(target, anchor) { 28747 insert(target, div, anchor); 28748 append(div, t); 28749 }, 28750 p(ctx, dirty) { 28751 if (dirty & /*emailError*/ 4) set_data(t, /*emailError*/ ctx[2]); 28752 }, 28753 d(detaching) { 28754 if (detaching) { 28755 detach(div); 28756 } 28757 } 28758 }; 28759 } 28760 28761 function create_fragment$h(ctx) { 28762 let div1; 28763 let div0; 28764 let label; 28765 let t0_value = /*config*/ ctx[0].emailLabel + ""; 28766 let t0; 28767 let t1; 28768 let input; 28769 let input_placeholder_value; 28770 let t2; 28771 let mounted; 28772 let dispose; 28773 let if_block = /*emailError*/ ctx[2] && create_if_block$d(ctx); 28774 28775 return { 28776 c() { 28777 div1 = element("div"); 28778 div0 = element("div"); 28779 label = element("label"); 28780 t0 = text(t0_value); 28781 t1 = space(); 28782 input = element("input"); 28783 t2 = space(); 28784 if (if_block) if_block.c(); 28785 attr(label, "for", "recipientEmail"); 28786 attr(label, "class", "svelte-1odylgp"); 28787 attr(input, "id", "recipientEmail"); 28788 attr(input, "type", "email"); 28789 input.required = true; 28790 attr(input, "placeholder", input_placeholder_value = /*config*/ ctx[0].emailPlaceholder); 28791 attr(input, "class", "svelte-1odylgp"); 28792 toggle_class(input, "error", !!/*emailError*/ ctx[2]); 28793 attr(div0, "class", "field svelte-1odylgp"); 28794 attr(div1, "class", "recipient-email-section svelte-1odylgp"); 28795 }, 28796 m(target, anchor) { 28797 insert(target, div1, anchor); 28798 append(div1, div0); 28799 append(div0, label); 28800 append(label, t0); 28801 append(div0, t1); 28802 append(div0, input); 28803 set_input_value(input, /*recipientEmail*/ ctx[1]); 28804 append(div0, t2); 28805 if (if_block) if_block.m(div0, null); 28806 28807 if (!mounted) { 28808 dispose = [ 28809 listen(input, "input", /*input_input_handler*/ ctx[7]), 28810 listen(input, "input", /*updateGiftRecipient*/ ctx[3]) 28811 ]; 28812 28813 mounted = true; 28814 } 28815 }, 28816 p(ctx, [dirty]) {
28817 if (dirty & /*config*/ 1 && t0_value !== (t0_value = /*config*/ ctx[0].emailLabel + "")) set_data(t0, t0_value); 28818 28819 if (dirty & /*config*/ 1 && input_placeholder_value !== (input_placeholder_value = /*config*/ ctx[0].emailPlaceholder)) { 28820 attr(input, "placeholder", input_placeholder_value); 28821 } 28822 28823 if (dirty & /*recipientEmail*/ 2 && input.value !== /*recipientEmail*/ ctx[1]) { 28824 set_input_value(input, /*recipientEmail*/ ctx[1]); 28825 } 28826 28827 if (dirty & /*emailError*/ 4) { 28828 toggle_class(input, "error", !!/*emailError*/ ctx[2]); 28829 } 28830 28831 if (/*emailError*/ ctx[2]) { 28832 if (if_block) { 28833 if_block.p(ctx, dirty); 28834 } else { 28835 if_block = create_if_block$d(ctx); 28836 if_block.c(); 28837 if_block.m(div0, null); 28838 } 28839 } else if (if_block) { 28840 if_block.d(1); 28841 if_block = null; 28842 } 28843 }, 28844 i: noop, 28845 o: noop, 28846 d(detaching) { 28847 if (detaching) { 28848 detach(div1); 28849 } 28850 28851 if (if_block) if_block.d(); 28852 mounted = false; 28853 run_all(dispose); 28854 } 28855 }; 28856 } 28857 28858 function instance$h($$self, $$props, $$invalidate) { 28859 let { formState } = $$props; 28860 let { formActions } = $$props; 28861 let { config } = $$props; 28862 let { form } = $$props; 28863 const dispatch = createEventDispatcher(); 28864 let recipientEmail = formState.giftRecipient?.email || ''; 28865 let emailError = ''; 28866 28867 // Update form state when input changes 28868 const updateGiftRecipient = () => { 28869 const updatedGiftRecipient = { 28870 ...formState.giftRecipient || {}, 28871 email: recipientEmail 28872 }; 28873 28874 formActions.updateFormState({ giftRecipient: updatedGiftRecipient }); 28875 validateForm(); 28876 }; 28877 28878 const validateForm = () => { 28879 const hasValidEmail = isValidEmail(recipientEmail); 28880 28881 if (recipientEmail && !hasValidEmail) { 28882 $$invalidate(2, emailError = resolveLanguagePackKeyTyped(form, 'forms.errors.email-invalid', 'Please enter a valid email address')); 28883 } else if (!recipientEmail) { 28884 $$invalidate(2, emailError = 'Recipient email is required'); 28885 } else { 28886 $$invalidate(2, emailError = ''); 28887 } 28888 28889 // Dispatch event for form validity 28890 dispatch('validity', { isValid: hasValidEmail }); 28891 }; 28892 28893 function input_input_handler() { 28894 recipientEmail = this.value; 28895 $$invalidate(1, recipientEmail); 28896 } 28897 28898 $$self.$$set = $$props => {
28899 if ('formState' in $$props) $$invalidate(4, formState = $$props.formState); 28900 if ('formActions' in $$props) $$invalidate(5, formActions = $$props.formActions); 28901 if ('config' in $$props) $$invalidate(0, config = $$props.config); 28902 if ('form' in $$props) $$invalidate(6, form = $$props.form); 28903 }; 28904 28905 return [ 28906 config, 28907 recipientEmail, 28908 emailError, 28909 updateGiftRecipient, 28910 formState, 28911 formActions, 28912 form, 28913 input_input_handler 28914 ]; 28915 } 28916 28917 class RecipientEmail extends SvelteComponent { 28918 constructor(options) { 28919 super(); 28920 28921 init(this, options, instance$h, create_fragment$h, safe_not_equal, { 28922 formState: 4, 28923 formActions: 5, 28924 config: 0, 28925 form: 6 28926 }); 28927 } 28928 } 28929 28930 const recipientEmailFactory = { 28931 matches: (sectionElement) => sectionElement.type === elementTypes.RECIPIENT_EMAIL, 28932 create: (form, formState, formActions, elementConfig) => { 28933 // Resolve all labels through language pack service 28934 const resolvedConfig = { 28935 emailLabel: resolveLanguagePackKeyTyped(form, 'forms.gift.recipient-email', elementConfig.emailLabel), 28936 emailPlaceholder: resolveLanguagePackKeyTyped(form, 'forms.gift.email-placeholder', elementConfig.emailPlaceholder), 28937 }; 28938 // Determine if the input is valid 28939 const giftRecipient = (formState.giftRecipient || {}); 28940 const hasValidEmail = isValidEmail(giftRecipient.email); 28941 const isValid = hasValidEmail; 28942 return { 28943 component: RecipientEmail, 28944 props: { 28945 config: resolvedConfig, 28946 form, 28947 formState, 28948 formActions, 28949 }, 28950 isValid 28951 }; 28952 } 28953 }; 28954 28955 const countries = { 28956 AF: "Afghanistan", 28957 AL: "Albania", 28958 DZ: "Algeria", 28959 AX: "à land Islands", 28960 AS: "American Samoa", 28961 AD: "Andorra", 28962 AO: "Angola", 28963 AI: "Anguilla", 28964 AQ: "Antarctica", 28965 AG: "Antigua and Barbuda", 28966 AR: "Argentina", 28967 AM: "Armenia", 28968 AW: "Aruba", 28969 AU: "Australia", 28970 AT: "Austria", 28971 AZ: "Azerbaijan", 28972 BS: "Bahamas (the)", 28973 BH: "Bahrain", 28974 BD: "Bangladesh", 28975 BB: "Barbados", 28976 BY: "Belarus", 28977 BE: "Belgium", 28978 BZ: "Belize", 28979 BJ: "Benin", 28980 BM: "Bermuda", 28981 BT: "Bhutan", 28982 BO: "Bolivia (Plurinational State of)", 28983 BQ: "Bonaire, Sint Eustatius and Saba", 28984 BA: "Bosnia and Herzegovina", 28985 BW: "Botswana", 28986 BV: "Bouvet Island", 28987 BR: "Brazil", 28988 IO: "British Indian Ocean Territory (the)", 28989 BN: "Brunei Darussalam", 28990 BG: "Bulgaria", 28991 BF: "Burkina Faso", 28992 BI: "Burundi", 28993 CV: "Cabo Verde", 28994 KH: "Cambodia", 28995 CM: "Cameroon", 28996 CA: "Canada", 28997 KY: "Cayman Islands (the)", 28998 CF: "Central African Republic (the)", 28999 TD: "Chad", 29000 CL: "Chile", 29001 CN: "China", 29002 CX: "Christmas Island", 29003 CC: "Cocos (Keeling) Islands (the)", 29004 CO: "Colombia", 29005 KM: "Comoros (the)", 29006 CD: "Congo (the Democratic Republic of the)", 29007 CG: "Congo (the)", 29008 CK: "Cook Islands (the)", 29009 CR: "Costa Rica", 29010 CI: "Côte d'Ivoire", 29011 HR: "Croatia", 29012 CU: "Cuba", 29013 CW: "Curaçao", 29014 CY: "Cyprus", 29015 CZ: "Czechia", 29016 DK: "Denmark", 29017 DJ: "Djibouti", 29018 DM: "Dominica", 29019 DO: "Dominican Republic (the)", 29020 EC: "Ecuador", 29021 EG: "Egypt", 29022 SV: "El Salvador", 29023 GQ: "Equatorial Guinea", 29024 ER: "Eritrea", 29025 EE: "Estonia", 29026 SZ: "Eswatini", 29027 ET: "Ethiopia", 29028 FK: "Falkland Islands (the) [Malvinas]", 29029 FO: "Faroe Islands (the)", 29030 FJ: "Fiji", 29031 FI: "Finland", 29032 FR: "France", 29033 GF: "French Guiana", 29034 PF: "French Polynesia", 29035 TF: "French Southern Territories (the)", 29036 GA: "Gabon", 29037 GM: "Gambia (the)", 29038 GE: "Georgia", 29039 DE: "Germany", 29040 GH: "Ghana", 29041 GI: "Gibraltar", 29042 GR: "Greece", 29043 GL: "Greenland", 29044 GD: "Grenada", 29045 GP: "Guadeloupe", 29046 GU: "Guam", 29047 GT: "Guatemala", 29048 GG: "Guernsey", 29049 GN: "Guinea", 29050 GW: "Guinea-Bissau", 29051 GY: "Guyana", 29052 HT: "Haiti", 29053 HM: "Heard Island and McDonald Islands", 29054 VA: "Holy See (the)", 29055 HN: "Honduras", 29056 HK: "Hong Kong", 29057 HU: "Hungary", 29058 IS: "Iceland", 29059 IN: "India", 29060 ID: "Indonesia", 29061 IR: "Iran (Islamic Republic of)", 29062 IQ: "Iraq", 29063 IE: "Ireland", 29064 IM: "Isle of Man", 29065 IL: "Israel", 29066 IT: "Italy", 29067 JM: "Jamaica", 29068 JP: "Japan", 29069 JE: "Jersey", 29070 JO: "Jordan", 29071 KZ: "Kazakhstan", 29072 KE: "Kenya", 29073 KI: "Kiribati", 29074 KP: "Korea (the Democratic People's Republic of)",
29075 KR: "Korea (the Republic of)", 29076 KW: "Kuwait", 29077 KG: "Kyrgyzstan", 29078 LA: "Lao People's Democratic Republic (the)", 29079 LV: "Latvia", 29080 LB: "Lebanon", 29081 LS: "Lesotho", 29082 LR: "Liberia", 29083 LY: "Libya", 29084 LI: "Liechtenstein", 29085 LT: "Lithuania", 29086 LU: "Luxembourg", 29087 MO: "Macao", 29088 MG: "Madagascar", 29089 MW: "Malawi", 29090 MY: "Malaysia", 29091 MV: "Maldives", 29092 ML: "Mali", 29093 MT: "Malta", 29094 MH: "Marshall Islands (the)", 29095 MQ: "Martinique", 29096 MR: "Mauritania", 29097 MU: "Mauritius", 29098 YT: "Mayotte", 29099 MX: "Mexico", 29100 FM: "Micronesia (Federated States of)", 29101 MD: "Moldova (the Republic of)", 29102 MC: "Monaco", 29103 MN: "Mongolia", 29104 ME: "Montenegro", 29105 MS: "Montserrat", 29106 MA: "Morocco", 29107 MZ: "Mozambique", 29108 MM: "Myanmar", 29109 NA: "Namibia", 29110 NR: "Nauru", 29111 NP: "Nepal", 29112 NL: "Netherlands (the)", 29113 NC: "New Caledonia", 29114 NZ: "New Zealand", 29115 NI: "Nicaragua", 29116 NE: "Niger (the)", 29117 NG: "Nigeria", 29118 NU: "Niue", 29119 NF: "Norfolk Island", 29120 MK: "North Macedonia", 29121 MP: "Northern Mariana Islands (the)", 29122 NO: "Norway", 29123 OM: "Oman", 29124 PK: "Pakistan", 29125 PW: "Palau", 29126 PS: "Palestine, State of", 29127 PA: "Panama", 29128 PG: "Papua New Guinea", 29129 PY: "Paraguay", 29130 PE: "Peru", 29131 PH: "Philippines (the)", 29132 PN: "Pitcairn", 29133 PL: "Poland", 29134 PT: "Portugal", 29135 PR: "Puerto Rico", 29136 QA: "Qatar", 29137 RE: "Réunion", 29138 RO: "Romania", 29139 RU: "Russian Federation (the)", 29140 RW: "Rwanda", 29141 BL: "Saint Barthélemy", 29142 SH: "Saint Helena, Ascension and Tristan da Cunha", 29143 KN: "Saint Kitts and Nevis", 29144 LC: "Saint Lucia", 29145 MF: "Saint Martin (French part)", 29146 PM: "Saint Pierre and Miquelon", 29147 VC: "Saint Vincent and the Grenadines", 29148 WS: "Samoa", 29149 SM: "San Marino", 29150 ST: "Sao Tome and Principe", 29151 SA: "Saudi Arabia", 29152 SN: "Senegal", 29153 RS: "Serbia", 29154 SC: "Seychelles", 29155 SL: "Sierra Leone", 29156 SG: "Singapore", 29157 SX: "Sint Maarten (Dutch part)", 29158 SK: "Slovakia", 29159 SI: "Slovenia", 29160 SB: "Solomon Islands", 29161 SO: "Somalia", 29162 ZA: "South Africa", 29163 GS: "South Georgia and the South Sandwich Islands", 29164 SS: "South Sudan", 29165 ES: "Spain", 29166 LK: "Sri Lanka", 29167 SD: "Sudan (the)", 29168 SR: "Suriname", 29169 SJ: "Svalbard and Jan Mayen", 29170 SE: "Sweden", 29171 CH: "Switzerland", 29172 SY: "Syrian Arab Republic", 29173 TW: "Taiwan (Province of China)", 29174 TJ: "Tajikistan", 29175 TZ: "Tanzania, United Republic of", 29176 TH: "Thailand", 29177 TL: "Timor-Leste", 29178 TG: "Togo", 29179 TK: "Tokelau", 29180 TO: "Tonga", 29181 TT: "Trinidad and Tobago", 29182 TN: "Tunisia", 29183 TR: "Turkey", 29184 TM: "Turkmenistan", 29185 TC: "Turks and Caicos Islands (the)", 29186 TV: "Tuvalu", 29187 UG: "Uganda", 29188 UA: "Ukraine", 29189 AE: "United Arab Emirates (the)", 29190 GB: "United Kingdom of Great Britain and Northern Ireland (the)", 29191 US: "United States of America (the)", 29192 UM: "United States Minor Outlying Islands (the)", 29193 UY: "Uruguay", 29194 UZ: "Uzbekistan", 29195 VU: "Vanuatu", 29196 VE: "Venezuela (Bolivarian Republic of)", 29197 VN: "Viet Nam", 29198 VG: "Virgin Islands (British)", 29199 VI: "Virgin Islands (U.S.)", 29200 WF: "Wallis and Futuna", 29201 EH: "Western Sahara", 29202 YE: "Yemen", 29203 ZM: "Zambia", 29204 ZW: "Zimbabwe", 29205 }; 29206 const statesForUS = { 29207 AK: "Alaska", 29208 AL: "Alabama", 29209 AR: "Arkansas", 29210 AZ: "Arizona", 29211 CA: "California", 29212 CO: "Colorado", 29213 CT: "Connecticut", 29214 DC: "District of Columbia", 29215 DE: "Delaware", 29216 FL: "Florida", 29217 GA: "Georgia", 29218 GU: "Guam", 29219 HI: "Hawaii", 29220 IA: "Iowa", 29221 ID: "Idaho", 29222 IL: "Illinois", 29223 IN: "Indiana", 29224 KS: "Kansas", 29225 KY: "Kentucky", 29226 LA: "Louisiana", 29227 MA: "Massachusetts", 29228 MD: "Maryland", 29229 ME: "Maine", 29230 MI: "Michigan", 29231 MN: "Minnesota", 29232 MO: "Missouri", 29233 MS: "Mississippi", 29234 MT: "Montana", 29235 NC: "North Carolina", 29236 ND: "North Dakota", 29237 NE: "Nebraska", 29238 NH: "New Hampshire", 29239 NJ: "New Jersey", 29240 NM: "New Mexico", 29241 NV: "Nevada", 29242 NY: "New York", 29243 OH: "Ohio", 29244 OK: "Oklahoma", 29245 OR: "Oregon", 29246 PA: "Pennsylvania", 29247 PR: "Puerto Rico", 29248 RI: "Rhode Island", 29249 SC: "South Carolina", 29250 SD: "South Dakota", 29251 TN: "Tennessee", 29252 TX: "Texas", 29253 UT: "Utah", 29254 VA: "Virginia", 29255 VI: "Virgin Islands", 29256 VT: "Vermont", 29257 WA: "Washington", 29258 WI: "Wisconsin", 29259 WV: "West Virginia", 29260 WY: "Wyoming" 29261 }; 29262 const provincesForCanada = { 29263 AB: "Alberta", 29264 BC: "British Columbia", 29265 MB: "Manitoba", 29266 NB: "New Brunswick", 29267 NL: "Newfoundland and Labrador", 29268 NT: "Northwest Territories", 29269 NS: "Nova Scotia", 29270 NU: "Nunavut", 29271 ON: "Ontario", 29272 PE: "Prince Edward Island", 29273 QC: "Quebec", 29274 SK: "Saskatchewan", 29275 YT: "Yukon" 29276 }; 29277 29278 /* src/components/elements/billingCountry/BillingCountry.svelte generated by Svelte v4.2.12 */ 29279 29280 function get_each_context$6(ctx, list, i) { 29281 const child_ctx = ctx.slice(); 29282 child_ctx[14] = list[i]; 29283 return child_ctx; 29284 } 29285 29286 // (47:4) {#each countryOptions as option} 29287 function create_each_block$6(ctx) { 29288 let option_1; 29289 let t0_value = /*option*/ ctx[14].label + ""; 29290 let t0; 29291 let t1; 29292 let option_1_value_value; 29293 let option_1_selected_value; 29294 29295 return { 29296 c() { 29297 option_1 = element("option"); 29298 t0 = text(t0_value); 29299 t1 = space(); 29300 option_1.__value = option_1_value_value = /*option*/ ctx[14].value; 29301 set_input_value(option_1, option_1.__value); 29302 option_1.selected = option_1_selected_value = /*value*/ ctx[1] === /*option*/ ctx[14].value; 29303 }, 29304 m(target, anchor) { 29305 insert(target, option_1, anchor); 29306 append(option_1, t0); 29307 append(option_1, t1); 29308 }, 29309 p(ctx, dirty) {
29310 if (dirty & /*countryOptions*/ 64 && t0_value !== (t0_value = /*option*/ ctx[14].label + "")) set_data(t0, t0_value); 29311 29312 if (dirty & /*countryOptions*/ 64 && option_1_value_value !== (option_1_value_value = /*option*/ ctx[14].value)) { 29313 option_1.__value = option_1_value_value; 29314 set_input_value(option_1, option_1.__value); 29315 } 29316 29317 if (dirty & /*value, countryOptions*/ 66 && option_1_selected_value !== (option_1_selected_value = /*value*/ ctx[1] === /*option*/ ctx[14].value)) { 29318 option_1.selected = option_1_selected_value; 29319 } 29320 }, 29321 d(detaching) { 29322 if (detaching) { 29323 detach(option_1); 29324 } 29325 } 29326 }; 29327 } 29328 29329 // (26:0) <Label forInput={id} label={label + (config.required ? "*" : "")} {isPaymentForm} > 29330 function create_default_slot$3(ctx) { 29331 let select; 29332 let option_1; 29333 let t; 29334 let select_required_value; 29335 let select_value_value; 29336 let select_disabled_value; 29337 let mounted; 29338 let dispose; 29339 let each_value = ensure_array_like(/*countryOptions*/ ctx[6]); 29340 let each_blocks = []; 29341 29342 for (let i = 0; i < each_value.length; i += 1) { 29343 each_blocks[i] = create_each_block$6(get_each_context$6(ctx, each_value, i)); 29344 } 29345 29346 return { 29347 c() { 29348 select = element("select"); 29349 option_1 = element("option"); 29350 t = text(/*placeholder*/ ctx[7]); 29351 29352 for (let i = 0; i < each_blocks.length; i += 1) { 29353 each_blocks[i].c(); 29354 } 29355 29356 option_1.disabled = true; 29357 option_1.__value = ""; 29358 set_input_value(option_1, option_1.__value); 29359 attr(select, "id", /*id*/ ctx[10]); 29360 attr(select, "name", "billing-country"); 29361 attr(select, "class", "zephr-form-input zephr-form-input-select svelte-dxm1g8"); 29362 select.required = select_required_value = /*config*/ ctx[0].required; 29363 select.disabled = select_disabled_value = /*config*/ ctx[0].disabled; 29364 toggle_class(select, "zephr-payment-form-input", /*isPaymentForm*/ ctx[3]); 29365 toggle_class(select, "zephr-payment-form-input-select", /*isPaymentForm*/ ctx[3]); 29366 toggle_class(select, "unselected", !/*value*/ ctx[1]); 29367 toggle_class(select, "error", /*hasError*/ ctx[9]); 29368 }, 29369 m(target, anchor) { 29370 insert(target, select, anchor); 29371 append(select, option_1); 29372 append(option_1, t); 29373 29374 for (let i = 0; i < each_blocks.length; i += 1) { 29375 if (each_blocks[i]) { 29376 each_blocks[i].m(select, null); 29377 } 29378 } 29379 29380 select_option(select, /*value*/ ctx[1] || ""); 29381 29382 if (!mounted) { 29383 dispose = [ 29384 listen(select, "change", /*handleChange*/ ctx[11]), 29385 listen(select, "focus", function () { 29386 if (is_function(/*onFocus*/ ctx[4])) /*onFocus*/ ctx[4].apply(this, arguments); 29387 }), 29388 listen(select, "blur", function () { 29389 if (is_function(/*onBlur*/ ctx[5])) /*onBlur*/ ctx[5].apply(this, arguments); 29390 }) 29391 ]; 29392 29393 mounted = true; 29394 } 29395 }, 29396 p(new_ctx, dirty) { 29397 ctx = new_ctx; 29398 if (dirty & /*placeholder*/ 128) set_data(t, /*placeholder*/ ctx[7]); 29399 29400 if (dirty & /*countryOptions, value*/ 66) { 29401 each_value = ensure_array_like(/*countryOptions*/ ctx[6]); 29402 let i; 29403 29404 for (i = 0; i < each_value.length; i += 1) { 29405 const child_ctx = get_each_context$6(ctx, each_value, i); 29406 29407 if (each_blocks[i]) { 29408 each_blocks[i].p(child_ctx, dirty); 29409 } else { 29410 each_blocks[i] = create_each_block$6(child_ctx); 29411 each_blocks[i].c(); 29412 each_blocks[i].m(select, null); 29413 } 29414 } 29415 29416 for (; i < each_blocks.length; i += 1) { 29417 each_blocks[i].d(1); 29418 } 29419 29420 each_blocks.length = each_value.length; 29421 } 29422 29423 if (dirty & /*config*/ 1 && select_required_value !== (select_required_value = /*config*/ ctx[0].required)) { 29424 select.required = select_required_value; 29425 } 29426 29427 if (dirty & /*value, countryOptions*/ 66 && select_value_value !== (select_value_value = /*value*/ ctx[1] || "")) { 29428 select_option(select, /*value*/ ctx[1] || ""); 29429 } 29430 29431 if (dirty & /*config*/ 1 && select_disabled_value !== (select_disabled_value = /*config*/ ctx[0].disabled)) { 29432 select.disabled = select_disabled_value; 29433 } 29434 29435 if (dirty & /*isPaymentForm*/ 8) { 29436 toggle_class(select, "zephr-payment-form-input", /*isPaymentForm*/ ctx[3]); 29437 } 29438
29439 if (dirty & /*isPaymentForm*/ 8) { 29440 toggle_class(select, "zephr-payment-form-input-select", /*isPaymentForm*/ ctx[3]); 29441 } 29442 29443 if (dirty & /*value*/ 2) { 29444 toggle_class(select, "unselected", !/*value*/ ctx[1]); 29445 } 29446 29447 if (dirty & /*hasError*/ 512) { 29448 toggle_class(select, "error", /*hasError*/ ctx[9]); 29449 } 29450 }, 29451 d(detaching) { 29452 if (detaching) { 29453 detach(select); 29454 } 29455 29456 destroy_each(each_blocks, detaching); 29457 mounted = false; 29458 run_all(dispose); 29459 } 29460 }; 29461 } 29462 29463 // (55:0) {#if hasError} 29464 function create_if_block$c(ctx) { 29465 let div; 29466 let t; 29467 29468 return { 29469 c() { 29470 div = element("div"); 29471 t = text(/*error*/ ctx[2]); 29472 attr(div, "class", "zephr-form-input-error-text svelte-dxm1g8"); 29473 toggle_class(div, "zephr-payment-form-input-error-text", /*isPaymentForm*/ ctx[3]); 29474 }, 29475 m(target, anchor) { 29476 insert(target, div, anchor); 29477 append(div, t); 29478 }, 29479 p(ctx, dirty) { 29480 if (dirty & /*error*/ 4) set_data(t, /*error*/ ctx[2]); 29481 29482 if (dirty & /*isPaymentForm*/ 8) { 29483 toggle_class(div, "zephr-payment-form-input-error-text", /*isPaymentForm*/ ctx[3]); 29484 } 29485 }, 29486 d(detaching) { 29487 if (detaching) { 29488 detach(div); 29489 } 29490 } 29491 }; 29492 } 29493 29494 function create_fragment$g(ctx) { 29495 let label_1; 29496 let t; 29497 let if_block_anchor; 29498 let current; 29499 29500 label_1 = new Label({ 29501 props: { 29502 forInput: /*id*/ ctx[10], 29503 label: /*label*/ ctx[8] + (/*config*/ ctx[0].required ? "*" : ""), 29504 isPaymentForm: /*isPaymentForm*/ ctx[3], 29505 $$slots: { default: [create_default_slot$3] }, 29506 $$scope: { ctx } 29507 } 29508 }); 29509 29510 let if_block = /*hasError*/ ctx[9] && create_if_block$c(ctx); 29511 29512 return { 29513 c() { 29514 create_component(label_1.$$.fragment); 29515 t = space(); 29516 if (if_block) if_block.c(); 29517 if_block_anchor = empty(); 29518 }, 29519 m(target, anchor) { 29520 mount_component(label_1, target, anchor); 29521 insert(target, t, anchor); 29522 if (if_block) if_block.m(target, anchor); 29523 insert(target, if_block_anchor, anchor); 29524 current = true; 29525 }, 29526 p(ctx, [dirty]) { 29527 const label_1_changes = {}; 29528 if (dirty & /*label, config*/ 257) label_1_changes.label = /*label*/ ctx[8] + (/*config*/ ctx[0].required ? "*" : ""); 29529 if (dirty & /*isPaymentForm*/ 8) label_1_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 29530 29531 if (dirty & /*$$scope, config, value, isPaymentForm, hasError, onFocus, onBlur, countryOptions, placeholder*/ 131835) { 29532 label_1_changes.$$scope = { dirty, ctx }; 29533 } 29534 29535 label_1.$set(label_1_changes); 29536 29537 if (/*hasError*/ ctx[9]) { 29538 if (if_block) { 29539 if_block.p(ctx, dirty); 29540 } else { 29541 if_block = create_if_block$c(ctx); 29542 if_block.c(); 29543 if_block.m(if_block_anchor.parentNode, if_block_anchor); 29544 } 29545 } else if (if_block) { 29546 if_block.d(1); 29547 if_block = null; 29548 } 29549 }, 29550 i(local) { 29551 if (current) return; 29552 transition_in(label_1.$$.fragment, local); 29553 current = true; 29554 }, 29555 o(local) { 29556 transition_out(label_1.$$.fragment, local); 29557 current = false; 29558 }, 29559 d(detaching) { 29560 if (detaching) { 29561 detach(t); 29562 detach(if_block_anchor); 29563 } 29564 29565 destroy_component(label_1, detaching); 29566 if (if_block) if_block.d(detaching); 29567 } 29568 }; 29569 } 29570 29571 function instance$g($$self, $$props, $$invalidate) { 29572 let hasError; 29573 let label; 29574 let placeholder; 29575 let countryOptions; 29576 let { formKey } = $$props; 29577 let { config } = $$props; 29578 let { value } = $$props; 29579 let { error = "" } = $$props; 29580 let { isPaymentForm = false } = $$props; 29581 let { onChange } = $$props; 29582 let { onFocus } = $$props; 29583 let { onBlur } = $$props; 29584 const id = `zephr-form-billing-country-${formKey}`; 29585 29586 const handleChange = e => { 29587 const target = e.target; 29588 onChange(target.value); 29589 }; 29590 29591 $$self.$$set = $$props => {
29592 if ('formKey' in $$props) $$invalidate(12, formKey = $$props.formKey); 29593 if ('config' in $$props) $$invalidate(0, config = $$props.config); 29594 if ('value' in $$props) $$invalidate(1, value = $$props.value); 29595 if ('error' in $$props) $$invalidate(2, error = $$props.error); 29596 if ('isPaymentForm' in $$props) $$invalidate(3, isPaymentForm = $$props.isPaymentForm); 29597 if ('onChange' in $$props) $$invalidate(13, onChange = $$props.onChange); 29598 if ('onFocus' in $$props) $$invalidate(4, onFocus = $$props.onFocus); 29599 if ('onBlur' in $$props) $$invalidate(5, onBlur = $$props.onBlur); 29600 }; 29601 29602 $$self.$$.update = () => { 29603 if ($$self.$$.dirty & /*error*/ 4) { 29604 $$invalidate(9, hasError = !!error); 29605 } 29606 29607 if ($$self.$$.dirty & /*config*/ 1) { 29608 $$invalidate(8, label = config.label || "Country"); 29609 } 29610 29611 if ($$self.$$.dirty & /*config*/ 1) { 29612 $$invalidate(7, placeholder = config.placeholder || "Select your country"); 29613 } 29614 }; 29615 29616 $$invalidate(6, countryOptions = Object.entries(countries).map(([code, name]) => ({ value: code, label: name }))); 29617 29618 return [ 29619 config, 29620 value, 29621 error, 29622 isPaymentForm, 29623 onFocus, 29624 onBlur, 29625 countryOptions, 29626 placeholder, 29627 label, 29628 hasError, 29629 id, 29630 handleChange, 29631 formKey, 29632 onChange 29633 ]; 29634 } 29635 29636 class BillingCountry extends SvelteComponent { 29637 constructor(options) { 29638 super(); 29639 29640 init(this, options, instance$g, create_fragment$g, safe_not_equal, { 29641 formKey: 12, 29642 config: 0, 29643 value: 1, 29644 error: 2, 29645 isPaymentForm: 3, 29646 onChange: 13, 29647 onFocus: 4, 29648 onBlur: 5 29649 }); 29650 } 29651 } 29652 29653 /* src/components/elements/billingState/BillingState.svelte generated by Svelte v4.2.12 */ 29654 29655 function get_each_context$5(ctx, list, i) { 29656 const child_ctx = ctx.slice(); 29657 child_ctx[16] = list[i]; 29658 return child_ctx; 29659 } 29660 29661 // (44:0) {#if shouldShow} 29662 function create_if_block$b(ctx) { 29663 let label_1; 29664 let t; 29665 let if_block_anchor; 29666 let current; 29667 29668 label_1 = new Label({ 29669 props: { 29670 forInput: /*id*/ ctx[11], 29671 label: /*label*/ ctx[9] + (/*config*/ ctx[0].required ? "*" : ""), 29672 isPaymentForm: /*isPaymentForm*/ ctx[3], 29673 $$slots: { default: [create_default_slot$2] }, 29674 $$scope: { ctx } 29675 } 29676 }); 29677 29678 let if_block = /*hasError*/ ctx[10] && create_if_block_1$a(ctx); 29679 29680 return { 29681 c() { 29682 create_component(label_1.$$.fragment); 29683 t = space(); 29684 if (if_block) if_block.c(); 29685 if_block_anchor = empty(); 29686 }, 29687 m(target, anchor) { 29688 mount_component(label_1, target, anchor); 29689 insert(target, t, anchor); 29690 if (if_block) if_block.m(target, anchor); 29691 insert(target, if_block_anchor, anchor); 29692 current = true; 29693 }, 29694 p(ctx, dirty) { 29695 const label_1_changes = {}; 29696 if (dirty & /*label, config*/ 513) label_1_changes.label = /*label*/ ctx[9] + (/*config*/ ctx[0].required ? "*" : ""); 29697 if (dirty & /*isPaymentForm*/ 8) label_1_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 29698 29699 if (dirty & /*$$scope, config, value, isPaymentForm, hasError, onFocus, onBlur, stateOptions, placeholder*/ 525755) { 29700 label_1_changes.$$scope = { dirty, ctx }; 29701 } 29702 29703 label_1.$set(label_1_changes); 29704 29705 if (/*hasError*/ ctx[10]) { 29706 if (if_block) { 29707 if_block.p(ctx, dirty); 29708 } else { 29709 if_block = create_if_block_1$a(ctx); 29710 if_block.c(); 29711 if_block.m(if_block_anchor.parentNode, if_block_anchor); 29712 } 29713 } else if (if_block) { 29714 if_block.d(1); 29715 if_block = null; 29716 } 29717 }, 29718 i(local) { 29719 if (current) return; 29720 transition_in(label_1.$$.fragment, local); 29721 current = true; 29722 }, 29723 o(local) { 29724 transition_out(label_1.$$.fragment, local); 29725 current = false; 29726 }, 29727 d(detaching) { 29728 if (detaching) { 29729 detach(t); 29730 detach(if_block_anchor); 29731 } 29732 29733 destroy_component(label_1, detaching); 29734 if (if_block) if_block.d(detaching); 29735 } 29736 }; 29737 } 29738 29739 // (66:6) {#each stateOptions as option} 29740 function create_each_block$5(ctx) { 29741 let option_1; 29742 let t0_value = /*option*/ ctx[16].label + ""; 29743 let t0; 29744 let t1; 29745 let option_1_value_value; 29746 let option_1_selected_value; 29747 29748 return { 29749 c() { 29750 option_1 = element("option"); 29751 t0 = text(t0_value); 29752 t1 = space(); 29753 option_1.__value = option_1_value_value = /*option*/ ctx[16].value; 29754 set_input_value(option_1, option_1.__value); 29755 option_1.selected = option_1_selected_value = /*value*/ ctx[1] === /*option*/ ctx[16].value; 29756 }, 29757 m(target, anchor) { 29758 insert(target, option_1, anchor); 29759 append(option_1, t0); 29760 append(option_1, t1); 29761 }, 29762 p(ctx, dirty) {
29763 if (dirty & /*stateOptions*/ 128 && t0_value !== (t0_value = /*option*/ ctx[16].label + "")) set_data(t0, t0_value); 29764 29765 if (dirty & /*stateOptions*/ 128 && option_1_value_value !== (option_1_value_value = /*option*/ ctx[16].value)) { 29766 option_1.__value = option_1_value_value; 29767 set_input_value(option_1, option_1.__value); 29768 } 29769 29770 if (dirty & /*value, stateOptions*/ 130 && option_1_selected_value !== (option_1_selected_value = /*value*/ ctx[1] === /*option*/ ctx[16].value)) { 29771 option_1.selected = option_1_selected_value; 29772 } 29773 }, 29774 d(detaching) { 29775 if (detaching) { 29776 detach(option_1); 29777 } 29778 } 29779 }; 29780 } 29781 29782 // (45:2) <Label forInput={id} label={label + (config.required ? "*" : "")} {isPaymentForm} > 29783 function create_default_slot$2(ctx) { 29784 let select; 29785 let option_1; 29786 let t; 29787 let select_required_value; 29788 let select_value_value; 29789 let select_disabled_value; 29790 let mounted; 29791 let dispose; 29792 let each_value = ensure_array_like(/*stateOptions*/ ctx[7]); 29793 let each_blocks = []; 29794 29795 for (let i = 0; i < each_value.length; i += 1) { 29796 each_blocks[i] = create_each_block$5(get_each_context$5(ctx, each_value, i)); 29797 } 29798 29799 return { 29800 c() { 29801 select = element("select"); 29802 option_1 = element("option"); 29803 t = text(/*placeholder*/ ctx[8]); 29804 29805 for (let i = 0; i < each_blocks.length; i += 1) { 29806 each_blocks[i].c(); 29807 } 29808 29809 option_1.disabled = true; 29810 option_1.__value = ""; 29811 set_input_value(option_1, option_1.__value); 29812 attr(select, "id", /*id*/ ctx[11]); 29813 attr(select, "name", "billing-state"); 29814 attr(select, "class", "zephr-form-input zephr-form-input-select svelte-dxm1g8"); 29815 select.required = select_required_value = /*config*/ ctx[0].required; 29816 select.disabled = select_disabled_value = /*config*/ ctx[0].disabled; 29817 toggle_class(select, "zephr-payment-form-input", /*isPaymentForm*/ ctx[3]); 29818 toggle_class(select, "zephr-payment-form-input-select", /*isPaymentForm*/ ctx[3]); 29819 toggle_class(select, "unselected", !/*value*/ ctx[1]); 29820 toggle_class(select, "error", /*hasError*/ ctx[10]); 29821 }, 29822 m(target, anchor) { 29823 insert(target, select, anchor); 29824 append(select, option_1); 29825 append(option_1, t); 29826 29827 for (let i = 0; i < each_blocks.length; i += 1) { 29828 if (each_blocks[i]) { 29829 each_blocks[i].m(select, null); 29830 } 29831 } 29832 29833 select_option(select, /*value*/ ctx[1] || ""); 29834 29835 if (!mounted) { 29836 dispose = [ 29837 listen(select, "change", /*handleChange*/ ctx[12]), 29838 listen(select, "focus", function () { 29839 if (is_function(/*onFocus*/ ctx[4])) /*onFocus*/ ctx[4].apply(this, arguments); 29840 }), 29841 listen(select, "blur", function () { 29842 if (is_function(/*onBlur*/ ctx[5])) /*onBlur*/ ctx[5].apply(this, arguments); 29843 }) 29844 ]; 29845 29846 mounted = true; 29847 } 29848 }, 29849 p(new_ctx, dirty) { 29850 ctx = new_ctx; 29851 if (dirty & /*placeholder*/ 256) set_data(t, /*placeholder*/ ctx[8]); 29852 29853 if (dirty & /*stateOptions, value*/ 130) { 29854 each_value = ensure_array_like(/*stateOptions*/ ctx[7]); 29855 let i; 29856 29857 for (i = 0; i < each_value.length; i += 1) { 29858 const child_ctx = get_each_context$5(ctx, each_value, i); 29859 29860 if (each_blocks[i]) { 29861 each_blocks[i].p(child_ctx, dirty); 29862 } else { 29863 each_blocks[i] = create_each_block$5(child_ctx); 29864 each_blocks[i].c(); 29865 each_blocks[i].m(select, null); 29866 } 29867 } 29868 29869 for (; i < each_blocks.length; i += 1) { 29870 each_blocks[i].d(1); 29871 } 29872 29873 each_blocks.length = each_value.length; 29874 } 29875 29876 if (dirty & /*config*/ 1 && select_required_value !== (select_required_value = /*config*/ ctx[0].required)) { 29877 select.required = select_required_value; 29878 } 29879 29880 if (dirty & /*value, stateOptions*/ 130 && select_value_value !== (select_value_value = /*value*/ ctx[1] || "")) { 29881 select_option(select, /*value*/ ctx[1] || ""); 29882 } 29883 29884 if (dirty & /*config*/ 1 && select_disabled_value !== (select_disabled_value = /*config*/ ctx[0].disabled)) { 29885 select.disabled = select_disabled_value; 29886 } 29887 29888 if (dirty & /*isPaymentForm*/ 8) { 29889 toggle_class(select, "zephr-payment-form-input", /*isPaymentForm*/ ctx[3]); 29890 } 29891
29892 if (dirty & /*isPaymentForm*/ 8) { 29893 toggle_class(select, "zephr-payment-form-input-select", /*isPaymentForm*/ ctx[3]); 29894 } 29895 29896 if (dirty & /*value*/ 2) { 29897 toggle_class(select, "unselected", !/*value*/ ctx[1]); 29898 } 29899 29900 if (dirty & /*hasError*/ 1024) { 29901 toggle_class(select, "error", /*hasError*/ ctx[10]); 29902 } 29903 }, 29904 d(detaching) { 29905 if (detaching) { 29906 detach(select); 29907 } 29908 29909 destroy_each(each_blocks, detaching); 29910 mounted = false; 29911 run_all(dispose); 29912 } 29913 }; 29914 } 29915 29916 // (74:2) {#if hasError} 29917 function create_if_block_1$a(ctx) { 29918 let div; 29919 let t; 29920 29921 return { 29922 c() { 29923 div = element("div"); 29924 t = text(/*error*/ ctx[2]); 29925 attr(div, "class", "zephr-form-input-error-text svelte-dxm1g8"); 29926 toggle_class(div, "zephr-payment-form-input-error-text", /*isPaymentForm*/ ctx[3]); 29927 }, 29928 m(target, anchor) { 29929 insert(target, div, anchor); 29930 append(div, t); 29931 }, 29932 p(ctx, dirty) { 29933 if (dirty & /*error*/ 4) set_data(t, /*error*/ ctx[2]); 29934 29935 if (dirty & /*isPaymentForm*/ 8) { 29936 toggle_class(div, "zephr-payment-form-input-error-text", /*isPaymentForm*/ ctx[3]); 29937 } 29938 }, 29939 d(detaching) { 29940 if (detaching) { 29941 detach(div); 29942 } 29943 } 29944 }; 29945 } 29946 29947 function create_fragment$f(ctx) { 29948 let if_block_anchor; 29949 let current; 29950 let if_block = /*shouldShow*/ ctx[6] && create_if_block$b(ctx); 29951 29952 return { 29953 c() { 29954 if (if_block) if_block.c(); 29955 if_block_anchor = empty(); 29956 }, 29957 m(target, anchor) { 29958 if (if_block) if_block.m(target, anchor); 29959 insert(target, if_block_anchor, anchor); 29960 current = true; 29961 }, 29962 p(ctx, [dirty]) { 29963 if (/*shouldShow*/ ctx[6]) { 29964 if (if_block) { 29965 if_block.p(ctx, dirty); 29966 29967 if (dirty & /*shouldShow*/ 64) { 29968 transition_in(if_block, 1); 29969 } 29970 } else { 29971 if_block = create_if_block$b(ctx); 29972 if_block.c(); 29973 transition_in(if_block, 1); 29974 if_block.m(if_block_anchor.parentNode, if_block_anchor); 29975 } 29976 } else if (if_block) { 29977 group_outros(); 29978 29979 transition_out(if_block, 1, 1, () => { 29980 if_block = null; 29981 }); 29982 29983 check_outros(); 29984 } 29985 }, 29986 i(local) { 29987 if (current) return; 29988 transition_in(if_block); 29989 current = true; 29990 }, 29991 o(local) { 29992 transition_out(if_block); 29993 current = false; 29994 }, 29995 d(detaching) { 29996 if (detaching) { 29997 detach(if_block_anchor); 29998 } 29999 30000 if (if_block) if_block.d(detaching); 30001 } 30002 }; 30003 } 30004 30005 function instance$f($$self, $$props, $$invalidate) { 30006 let hasError; 30007 let label; 30008 let placeholder; 30009 let shouldShow; 30010 let stateOptions; 30011 let { formKey } = $$props; 30012 let { config } = $$props; 30013 let { value } = $$props; 30014 let { error = "" } = $$props; 30015 let { isPaymentForm = false } = $$props; 30016 let { billingCountry } = $$props; 30017 let { onChange } = $$props; 30018 let { onFocus } = $$props; 30019 let { onBlur } = $$props; 30020 const id = `zephr-form-billing-state-${formKey}`; 30021 30022 const handleChange = e => { 30023 const target = e.target; 30024 onChange(target.value); 30025 }; 30026 30027 $$self.$$set = $$props => {
30028 if ('formKey' in $$props) $$invalidate(13, formKey = $$props.formKey); 30029 if ('config' in $$props) $$invalidate(0, config = $$props.config); 30030 if ('value' in $$props) $$invalidate(1, value = $$props.value); 30031 if ('error' in $$props) $$invalidate(2, error = $$props.error); 30032 if ('isPaymentForm' in $$props) $$invalidate(3, isPaymentForm = $$props.isPaymentForm); 30033 if ('billingCountry' in $$props) $$invalidate(14, billingCountry = $$props.billingCountry); 30034 if ('onChange' in $$props) $$invalidate(15, onChange = $$props.onChange); 30035 if ('onFocus' in $$props) $$invalidate(4, onFocus = $$props.onFocus); 30036 if ('onBlur' in $$props) $$invalidate(5, onBlur = $$props.onBlur); 30037 }; 30038 30039 $$self.$$.update = () => { 30040 if ($$self.$$.dirty & /*error*/ 4) { 30041 $$invalidate(10, hasError = !!error); 30042 } 30043 30044 if ($$self.$$.dirty & /*config*/ 1) { 30045 $$invalidate(9, label = config.label || "State/Province"); 30046 } 30047 30048 if ($$self.$$.dirty & /*config*/ 1) { 30049 $$invalidate(8, placeholder = config.placeholder || "Select your state/province"); 30050 } 30051 30052 if ($$self.$$.dirty & /*billingCountry*/ 16384) { 30053 // Only show when country is US or Canada 30054 $$invalidate(6, shouldShow = billingCountry === "US" || billingCountry === "CA"); 30055 } 30056 30057 if ($$self.$$.dirty & /*billingCountry*/ 16384) { 30058 // Get appropriate state/province options based on country 30059 $$invalidate(7, stateOptions = (() => { 30060 if (billingCountry === "US") { 30061 return Object.entries(statesForUS).map(([code, name]) => ({ value: code, label: name })); 30062 } else if (billingCountry === "CA") { 30063 return Object.entries(provincesForCanada).map(([code, name]) => ({ value: code, label: name })); 30064 } 30065 30066 return []; 30067 })()); 30068 } 30069 30070 if ($$self.$$.dirty & /*shouldShow, value, onChange*/ 32834) { 30071 // Clear value when country changes to non-US/CA 30072 if (!shouldShow && value) { 30073 onChange(""); 30074 } 30075 } 30076 }; 30077 30078 return [ 30079 config, 30080 value, 30081 error, 30082 isPaymentForm, 30083 onFocus, 30084 onBlur, 30085 shouldShow, 30086 stateOptions, 30087 placeholder, 30088 label, 30089 hasError, 30090 id, 30091 handleChange, 30092 formKey, 30093 billingCountry, 30094 onChange 30095 ]; 30096 } 30097 30098 class BillingState extends SvelteComponent { 30099 constructor(options) { 30100 super(); 30101 30102 init(this, options, instance$f, create_fragment$f, safe_not_equal, { 30103 formKey: 13, 30104 config: 0, 30105 value: 1, 30106 error: 2, 30107 isPaymentForm: 3, 30108 billingCountry: 14, 30109 onChange: 15, 30110 onFocus: 4, 30111 onBlur: 5 30112 }); 30113 } 30114 } 30115 30116 /* src/components/elements/recipientAddress/RecipientAddress.svelte generated by Svelte v4.2.12 */ 30117 30118 function create_if_block$a(ctx) { 30119 let div1; 30120 let label; 30121 let t0_value = /*config*/ ctx[0].label + ""; 30122 let t0; 30123 let t1; 30124 let div0; 30125 let t2; 30126 let t3; 30127 let t4; 30128 let t5; 30129 let t6; 30130 let current; 30131 let if_block0 = /*showAddress*/ ctx[3] && create_if_block_6$3(ctx); 30132 let if_block1 = /*showCity*/ ctx[5] && create_if_block_5$3(ctx); 30133 let if_block2 = /*showCountry*/ ctx[7] && create_if_block_4$3(ctx); 30134 let if_block3 = /*showState*/ ctx[6] && create_if_block_3$4(ctx); 30135 let if_block4 = /*showPostalCode*/ ctx[4] && create_if_block_2$7(ctx); 30136 let if_block5 = /*addressError*/ ctx[1] && create_if_block_1$9(ctx); 30137 30138 return { 30139 c() { 30140 div1 = element("div"); 30141 label = element("label"); 30142 t0 = text(t0_value); 30143 t1 = space(); 30144 div0 = element("div"); 30145 if (if_block0) if_block0.c(); 30146 t2 = space(); 30147 if (if_block1) if_block1.c(); 30148 t3 = space(); 30149 if (if_block2) if_block2.c(); 30150 t4 = space(); 30151 if (if_block3) if_block3.c(); 30152 t5 = space(); 30153 if (if_block4) if_block4.c(); 30154 t6 = space(); 30155 if (if_block5) if_block5.c(); 30156 attr(label, "class", "address-main-label svelte-1lcs5wj"); 30157 attr(div0, "class", "address-fields svelte-1lcs5wj"); 30158 attr(div1, "class", "recipient-address-section svelte-1lcs5wj"); 30159 }, 30160 m(target, anchor) { 30161 insert(target, div1, anchor); 30162 append(div1, label); 30163 append(label, t0); 30164 append(div1, t1); 30165 append(div1, div0); 30166 if (if_block0) if_block0.m(div0, null); 30167 append(div0, t2); 30168 if (if_block1) if_block1.m(div0, null); 30169 append(div0, t3); 30170 if (if_block2) if_block2.m(div0, null); 30171 append(div0, t4); 30172 if (if_block3) if_block3.m(div0, null); 30173 append(div0, t5); 30174 if (if_block4) if_block4.m(div0, null); 30175 append(div1, t6); 30176 if (if_block5) if_block5.m(div1, null); 30177 current = true; 30178 }, 30179 p(ctx, dirty) { 30180 if ((!current || dirty & /*config*/ 1) && t0_value !== (t0_value = /*config*/ ctx[0].label + "")) set_data(t0, t0_value); 30181 30182 if (/*showAddress*/ ctx[3]) { 30183 if (if_block0) { 30184 if_block0.p(ctx, dirty); 30185 } else { 30186 if_block0 = create_if_block_6$3(ctx); 30187 if_block0.c(); 30188 if_block0.m(div0, t2); 30189 } 30190 } else if (if_block0) { 30191 if_block0.d(1); 30192 if_block0 = null; 30193 } 30194 30195 if (/*showCity*/ ctx[5]) { 30196 if (if_block1) { 30197 if_block1.p(ctx, dirty); 30198 } else { 30199 if_block1 = create_if_block_5$3(ctx); 30200 if_block1.c(); 30201 if_block1.m(div0, t3); 30202 } 30203 } else if (if_block1) { 30204 if_block1.d(1); 30205 if_block1 = null; 30206 } 30207 30208 if (/*showCountry*/ ctx[7]) { 30209 if (if_block2) { 30210 if_block2.p(ctx, dirty); 30211
30212 if (dirty & /*showCountry*/ 128) { 30213 transition_in(if_block2, 1); 30214 } 30215 } else { 30216 if_block2 = create_if_block_4$3(ctx); 30217 if_block2.c(); 30218 transition_in(if_block2, 1); 30219 if_block2.m(div0, t4); 30220 } 30221 } else if (if_block2) { 30222 group_outros(); 30223 30224 transition_out(if_block2, 1, 1, () => { 30225 if_block2 = null; 30226 }); 30227 30228 check_outros(); 30229 } 30230 30231 if (/*showState*/ ctx[6]) { 30232 if (if_block3) { 30233 if_block3.p(ctx, dirty); 30234 30235 if (dirty & /*showState*/ 64) { 30236 transition_in(if_block3, 1); 30237 } 30238 } else { 30239 if_block3 = create_if_block_3$4(ctx); 30240 if_block3.c(); 30241 transition_in(if_block3, 1); 30242 if_block3.m(div0, t5); 30243 } 30244 } else if (if_block3) { 30245 group_outros(); 30246 30247 transition_out(if_block3, 1, 1, () => { 30248 if_block3 = null; 30249 }); 30250 30251 check_outros(); 30252 } 30253 30254 if (/*showPostalCode*/ ctx[4]) { 30255 if (if_block4) { 30256 if_block4.p(ctx, dirty); 30257 } else { 30258 if_block4 = create_if_block_2$7(ctx); 30259 if_block4.c(); 30260 if_block4.m(div0, null); 30261 } 30262 } else if (if_block4) { 30263 if_block4.d(1); 30264 if_block4 = null; 30265 } 30266 30267 if (/*addressError*/ ctx[1]) { 30268 if (if_block5) { 30269 if_block5.p(ctx, dirty); 30270 } else { 30271 if_block5 = create_if_block_1$9(ctx); 30272 if_block5.c(); 30273 if_block5.m(div1, null); 30274 } 30275 } else if (if_block5) { 30276 if_block5.d(1); 30277 if_block5 = null; 30278 } 30279 }, 30280 i(local) { 30281 if (current) return; 30282 transition_in(if_block2); 30283 transition_in(if_block3); 30284 current = true; 30285 }, 30286 o(local) { 30287 transition_out(if_block2); 30288 transition_out(if_block3); 30289 current = false; 30290 }, 30291 d(detaching) { 30292 if (detaching) { 30293 detach(div1); 30294 } 30295 30296 if (if_block0) if_block0.d(); 30297 if (if_block1) if_block1.d(); 30298 if (if_block2) if_block2.d(); 30299 if (if_block3) if_block3.d(); 30300 if (if_block4) if_block4.d(); 30301 if (if_block5) if_block5.d(); 30302 } 30303 }; 30304 } 30305 30306 // (80:6) {#if showAddress} 30307 function create_if_block_6$3(ctx) { 30308 let div0; 30309 let label0; 30310 let t0_value = /*config*/ ctx[0].addressLine1Label + ""; 30311 let t0; 30312 let t1; 30313 let input0; 30314 let input0_placeholder_value; 30315 let t2; 30316 let div1; 30317 let label1; 30318 let t3_value = /*config*/ ctx[0].addressLine2Label + ""; 30319 let t3; 30320 let t4; 30321 let input1; 30322 let input1_placeholder_value; 30323 let mounted; 30324 let dispose; 30325 30326 return { 30327 c() { 30328 div0 = element("div"); 30329 label0 = element("label"); 30330 t0 = text(t0_value); 30331 t1 = space(); 30332 input0 = element("input"); 30333 t2 = space(); 30334 div1 = element("div"); 30335 label1 = element("label"); 30336 t3 = text(t3_value); 30337 t4 = space(); 30338 input1 = element("input"); 30339 attr(label0, "for", "addressLine1"); 30340 attr(label0, "class", "svelte-1lcs5wj"); 30341 attr(input0, "id", "addressLine1"); 30342 attr(input0, "type", "text"); 30343 input0.required = /*showAddress*/ ctx[3]; 30344 attr(input0, "placeholder", input0_placeholder_value = /*config*/ ctx[0].addressLine1Placeholder); 30345 attr(input0, "class", "svelte-1lcs5wj"); 30346 attr(div0, "class", "field svelte-1lcs5wj"); 30347 attr(label1, "for", "addressLine2"); 30348 attr(label1, "class", "svelte-1lcs5wj"); 30349 attr(input1, "id", "addressLine2"); 30350 attr(input1, "type", "text"); 30351 attr(input1, "placeholder", input1_placeholder_value = /*config*/ ctx[0].addressLine2Placeholder); 30352 attr(input1, "class", "svelte-1lcs5wj"); 30353 attr(div1, "class", "field svelte-1lcs5wj"); 30354 }, 30355 m(target, anchor) { 30356 insert(target, div0, anchor); 30357 append(div0, label0); 30358 append(label0, t0); 30359 append(div0, t1); 30360 append(div0, input0); 30361 set_input_value(input0, /*recipientAddress*/ ctx[2].addressLine1); 30362 insert(target, t2, anchor); 30363 insert(target, div1, anchor); 30364 append(div1, label1); 30365 append(label1, t3); 30366 append(div1, t4); 30367 append(div1, input1); 30368 set_input_value(input1, /*recipientAddress*/ ctx[2].addressLine2); 30369 30370 if (!mounted) { 30371 dispose = [ 30372 listen(input0, "input", /*input0_input_handler*/ ctx[13]), 30373 listen(input0, "input", /*updateGiftRecipient*/ ctx[9]), 30374 listen(input1, "input", /*input1_input_handler*/ ctx[14]), 30375 listen(input1, "input", /*updateGiftRecipient*/ ctx[9]) 30376 ]; 30377 30378 mounted = true; 30379 } 30380 }, 30381 p(ctx, dirty) {
30382 if (dirty & /*config*/ 1 && t0_value !== (t0_value = /*config*/ ctx[0].addressLine1Label + "")) set_data(t0, t0_value); 30383 30384 if (dirty & /*showAddress*/ 8) { 30385 input0.required = /*showAddress*/ ctx[3]; 30386 } 30387 30388 if (dirty & /*config*/ 1 && input0_placeholder_value !== (input0_placeholder_value = /*config*/ ctx[0].addressLine1Placeholder)) { 30389 attr(input0, "placeholder", input0_placeholder_value); 30390 } 30391 30392 if (dirty & /*recipientAddress*/ 4 && input0.value !== /*recipientAddress*/ ctx[2].addressLine1) { 30393 set_input_value(input0, /*recipientAddress*/ ctx[2].addressLine1); 30394 } 30395 30396 if (dirty & /*config*/ 1 && t3_value !== (t3_value = /*config*/ ctx[0].addressLine2Label + "")) set_data(t3, t3_value); 30397 30398 if (dirty & /*config*/ 1 && input1_placeholder_value !== (input1_placeholder_value = /*config*/ ctx[0].addressLine2Placeholder)) { 30399 attr(input1, "placeholder", input1_placeholder_value); 30400 } 30401 30402 if (dirty & /*recipientAddress*/ 4 && input1.value !== /*recipientAddress*/ ctx[2].addressLine2) { 30403 set_input_value(input1, /*recipientAddress*/ ctx[2].addressLine2); 30404 } 30405 }, 30406 d(detaching) { 30407 if (detaching) { 30408 detach(div0); 30409 detach(t2); 30410 detach(div1); 30411 } 30412 30413 mounted = false; 30414 run_all(dispose); 30415 } 30416 }; 30417 } 30418 30419 // (105:6) {#if showCity} 30420 function create_if_block_5$3(ctx) { 30421 let div; 30422 let label; 30423 let t0_value = /*config*/ ctx[0].cityLabel + ""; 30424 let t0; 30425 let t1; 30426 let input; 30427 let input_placeholder_value; 30428 let mounted; 30429 let dispose; 30430 30431 return { 30432 c() { 30433 div = element("div"); 30434 label = element("label"); 30435 t0 = text(t0_value); 30436 t1 = space(); 30437 input = element("input"); 30438 attr(label, "for", "city"); 30439 attr(label, "class", "svelte-1lcs5wj"); 30440 attr(input, "id", "city"); 30441 attr(input, "type", "text"); 30442 input.required = /*showCity*/ ctx[5]; 30443 attr(input, "placeholder", input_placeholder_value = /*config*/ ctx[0].cityPlaceholder); 30444 attr(input, "class", "svelte-1lcs5wj"); 30445 attr(div, "class", "field svelte-1lcs5wj"); 30446 }, 30447 m(target, anchor) { 30448 insert(target, div, anchor); 30449 append(div, label); 30450 append(label, t0); 30451 append(div, t1); 30452 append(div, input); 30453 set_input_value(input, /*recipientAddress*/ ctx[2].city); 30454 30455 if (!mounted) { 30456 dispose = [ 30457 listen(input, "input", /*input_input_handler*/ ctx[15]), 30458 listen(input, "input", /*updateGiftRecipient*/ ctx[9]) 30459 ]; 30460 30461 mounted = true; 30462 } 30463 }, 30464 p(ctx, dirty) { 30465 if (dirty & /*config*/ 1 && t0_value !== (t0_value = /*config*/ ctx[0].cityLabel + "")) set_data(t0, t0_value); 30466 30467 if (dirty & /*showCity*/ 32) { 30468 input.required = /*showCity*/ ctx[5]; 30469 } 30470 30471 if (dirty & /*config*/ 1 && input_placeholder_value !== (input_placeholder_value = /*config*/ ctx[0].cityPlaceholder)) { 30472 attr(input, "placeholder", input_placeholder_value); 30473 } 30474 30475 if (dirty & /*recipientAddress*/ 4 && input.value !== /*recipientAddress*/ ctx[2].city) { 30476 set_input_value(input, /*recipientAddress*/ ctx[2].city); 30477 } 30478 }, 30479 d(detaching) { 30480 if (detaching) { 30481 detach(div); 30482 } 30483 30484 mounted = false; 30485 run_all(dispose); 30486 } 30487 }; 30488 } 30489 30490 // (119:6) {#if showCountry} 30491 function create_if_block_4$3(ctx) { 30492 let div; 30493 let billingcountry; 30494 let current; 30495 30496 billingcountry = new BillingCountry({ 30497 props: { 30498 formKey: "gift-recipient", 30499 config: { 30500 label: /*config*/ ctx[0].countryLabel, 30501 placeholder: /*config*/ ctx[0].countryPlaceholder, 30502 required: /*showCountry*/ ctx[7] 30503 }, 30504 value: /*recipientAddress*/ ctx[2].country, 30505 error: "", 30506 isPaymentForm: false, 30507 onChange: /*func*/ ctx[16], 30508 onFocus: func_1, 30509 onBlur: func_2 30510 } 30511 }); 30512 30513 return { 30514 c() { 30515 div = element("div"); 30516 create_component(billingcountry.$$.fragment); 30517 attr(div, "class", "field svelte-1lcs5wj"); 30518 }, 30519 m(target, anchor) { 30520 insert(target, div, anchor); 30521 mount_component(billingcountry, div, null); 30522 current = true; 30523 }, 30524 p(ctx, dirty) { 30525 const billingcountry_changes = {}; 30526 30527 if (dirty & /*config, showCountry*/ 129) billingcountry_changes.config = { 30528 label: /*config*/ ctx[0].countryLabel, 30529 placeholder: /*config*/ ctx[0].countryPlaceholder, 30530 required: /*showCountry*/ ctx[7] 30531 }; 30532
30533 if (dirty & /*recipientAddress*/ 4) billingcountry_changes.value = /*recipientAddress*/ ctx[2].country; 30534 if (dirty & /*recipientAddress*/ 4) billingcountry_changes.onChange = /*func*/ ctx[16]; 30535 billingcountry.$set(billingcountry_changes); 30536 }, 30537 i(local) { 30538 if (current) return; 30539 transition_in(billingcountry.$$.fragment, local); 30540 current = true; 30541 }, 30542 o(local) { 30543 transition_out(billingcountry.$$.fragment, local); 30544 current = false; 30545 }, 30546 d(detaching) { 30547 if (detaching) { 30548 detach(div); 30549 } 30550 30551 destroy_component(billingcountry); 30552 } 30553 }; 30554 } 30555 30556 // (141:6) {#if showState} 30557 function create_if_block_3$4(ctx) { 30558 let div; 30559 let billingstate; 30560 let current; 30561 30562 billingstate = new BillingState({ 30563 props: { 30564 formKey: "gift-recipient", 30565 config: { 30566 label: /*config*/ ctx[0].stateLabel, 30567 placeholder: /*config*/ ctx[0].statePlaceholder, 30568 required: /*showState*/ ctx[6] && (/*recipientAddress*/ ctx[2].country === 'US' || /*recipientAddress*/ ctx[2].country === 'CA') 30569 }, 30570 value: /*recipientAddress*/ ctx[2].state, 30571 error: "", 30572 isPaymentForm: false, 30573 billingCountry: /*recipientAddress*/ ctx[2].country, 30574 onChange: /*func_3*/ ctx[17], 30575 onFocus: func_4, 30576 onBlur: func_5 30577 } 30578 }); 30579 30580 return { 30581 c() { 30582 div = element("div"); 30583 create_component(billingstate.$$.fragment); 30584 attr(div, "class", "field svelte-1lcs5wj"); 30585 }, 30586 m(target, anchor) { 30587 insert(target, div, anchor); 30588 mount_component(billingstate, div, null); 30589 current = true; 30590 }, 30591 p(ctx, dirty) { 30592 const billingstate_changes = {}; 30593 30594 if (dirty & /*config, showState, recipientAddress*/ 69) billingstate_changes.config = { 30595 label: /*config*/ ctx[0].stateLabel, 30596 placeholder: /*config*/ ctx[0].statePlaceholder, 30597 required: /*showState*/ ctx[6] && (/*recipientAddress*/ ctx[2].country === 'US' || /*recipientAddress*/ ctx[2].country === 'CA') 30598 }; 30599 30600 if (dirty & /*recipientAddress*/ 4) billingstate_changes.value = /*recipientAddress*/ ctx[2].state; 30601 if (dirty & /*recipientAddress*/ 4) billingstate_changes.billingCountry = /*recipientAddress*/ ctx[2].country; 30602 if (dirty & /*recipientAddress*/ 4) billingstate_changes.onChange = /*func_3*/ ctx[17]; 30603 billingstate.$set(billingstate_changes); 30604 }, 30605 i(local) { 30606 if (current) return; 30607 transition_in(billingstate.$$.fragment, local); 30608 current = true; 30609 }, 30610 o(local) { 30611 transition_out(billingstate.$$.fragment, local); 30612 current = false; 30613 }, 30614 d(detaching) { 30615 if (detaching) { 30616 detach(div); 30617 } 30618 30619 destroy_component(billingstate); 30620 } 30621 }; 30622 } 30623 30624 // (164:6) {#if showPostalCode} 30625 function create_if_block_2$7(ctx) { 30626 let div; 30627 let label; 30628 let t0_value = /*config*/ ctx[0].postalCodeLabel + ""; 30629 let t0; 30630 let t1; 30631 let input; 30632 let input_placeholder_value; 30633 let mounted; 30634 let dispose; 30635 30636 return { 30637 c() { 30638 div = element("div"); 30639 label = element("label"); 30640 t0 = text(t0_value); 30641 t1 = space(); 30642 input = element("input"); 30643 attr(label, "for", "postalCode"); 30644 attr(label, "class", "svelte-1lcs5wj"); 30645 attr(input, "id", "postalCode"); 30646 attr(input, "type", "text"); 30647 input.required = /*showPostalCode*/ ctx[4]; 30648 attr(input, "placeholder", input_placeholder_value = /*config*/ ctx[0].postalCodePlaceholder); 30649 attr(input, "class", "svelte-1lcs5wj"); 30650 attr(div, "class", "field svelte-1lcs5wj"); 30651 }, 30652 m(target, anchor) { 30653 insert(target, div, anchor); 30654 append(div, label); 30655 append(label, t0); 30656 append(div, t1); 30657 append(div, input); 30658 set_input_value(input, /*recipientAddress*/ ctx[2].postalCode); 30659 30660 if (!mounted) { 30661 dispose = [ 30662 listen(input, "input", /*input_input_handler_1*/ ctx[18]), 30663 listen(input, "input", /*updateGiftRecipient*/ ctx[9]) 30664 ]; 30665 30666 mounted = true; 30667 } 30668 }, 30669 p(ctx, dirty) { 30670 if (dirty & /*config*/ 1 && t0_value !== (t0_value = /*config*/ ctx[0].postalCodeLabel + "")) set_data(t0, t0_value); 30671 30672 if (dirty & /*showPostalCode*/ 16) { 30673 input.required = /*showPostalCode*/ ctx[4]; 30674 } 30675 30676 if (dirty & /*config*/ 1 && input_placeholder_value !== (input_placeholder_value = /*config*/ ctx[0].postalCodePlaceholder)) { 30677 attr(input, "placeholder", input_placeholder_value); 30678 } 30679
30680 if (dirty & /*recipientAddress*/ 4 && input.value !== /*recipientAddress*/ ctx[2].postalCode) { 30681 set_input_value(input, /*recipientAddress*/ ctx[2].postalCode); 30682 } 30683 }, 30684 d(detaching) { 30685 if (detaching) { 30686 detach(div); 30687 } 30688 30689 mounted = false; 30690 run_all(dispose); 30691 } 30692 }; 30693 } 30694 30695 // (178:4) {#if addressError} 30696 function create_if_block_1$9(ctx) { 30697 let div; 30698 let t; 30699 30700 return { 30701 c() { 30702 div = element("div"); 30703 t = text(/*addressError*/ ctx[1]); 30704 attr(div, "class", "error-text svelte-1lcs5wj"); 30705 }, 30706 m(target, anchor) { 30707 insert(target, div, anchor); 30708 append(div, t); 30709 }, 30710 p(ctx, dirty) { 30711 if (dirty & /*addressError*/ 2) set_data(t, /*addressError*/ ctx[1]); 30712 }, 30713 d(detaching) { 30714 if (detaching) { 30715 detach(div); 30716 } 30717 } 30718 }; 30719 } 30720 30721 function create_fragment$e(ctx) { 30722 let if_block_anchor; 30723 let current; 30724 let if_block = /*showAnyAddress*/ ctx[8] && create_if_block$a(ctx); 30725 30726 return { 30727 c() { 30728 if (if_block) if_block.c(); 30729 if_block_anchor = empty(); 30730 }, 30731 m(target, anchor) { 30732 if (if_block) if_block.m(target, anchor); 30733 insert(target, if_block_anchor, anchor); 30734 current = true; 30735 }, 30736 p(ctx, [dirty]) { 30737 if (/*showAnyAddress*/ ctx[8]) { 30738 if (if_block) { 30739 if_block.p(ctx, dirty); 30740 30741 if (dirty & /*showAnyAddress*/ 256) { 30742 transition_in(if_block, 1); 30743 } 30744 } else { 30745 if_block = create_if_block$a(ctx); 30746 if_block.c(); 30747 transition_in(if_block, 1); 30748 if_block.m(if_block_anchor.parentNode, if_block_anchor); 30749 } 30750 } else if (if_block) { 30751 group_outros(); 30752 30753 transition_out(if_block, 1, 1, () => { 30754 if_block = null; 30755 }); 30756 30757 check_outros(); 30758 } 30759 }, 30760 i(local) { 30761 if (current) return; 30762 transition_in(if_block); 30763 current = true; 30764 }, 30765 o(local) { 30766 transition_out(if_block); 30767 current = false; 30768 }, 30769 d(detaching) { 30770 if (detaching) { 30771 detach(if_block_anchor); 30772 } 30773 30774 if (if_block) if_block.d(detaching); 30775 } 30776 }; 30777 } 30778 30779 const func_1 = () => { 30780 30781 }; 30782 30783 const func_2 = () => { 30784 30785 }; 30786 30787 const func_4 = () => { 30788 30789 }; 30790 30791 const func_5 = () => { 30792 30793 }; 30794 30795 function instance$e($$self, $$props, $$invalidate) { 30796 let showAddress; 30797 let showPostalCode; 30798 let showCountry; 30799 let showState; 30800 let showCity; 30801 let showAnyAddress; 30802 let { formState } = $$props; 30803 let { formActions } = $$props; 30804 let { config } = $$props; 30805 let { form } = $$props; 30806 const dispatch = createEventDispatcher(); 30807 let addressError = ''; 30808 30809 // Initialize recipient address fields 30810 let recipientAddress = { 30811 addressLine1: formState.giftRecipient?.recipientAddress?.addressLine1 || '', 30812 addressLine2: formState.giftRecipient?.recipientAddress?.addressLine2 || '', 30813 city: formState.giftRecipient?.recipientAddress?.city || '', 30814 state: formState.giftRecipient?.recipientAddress?.state || '', 30815 country: formState.giftRecipient?.recipientAddress?.country || '', 30816 postalCode: formState.giftRecipient?.recipientAddress?.postalCode || '' 30817 }; 30818 30819 // Update form state when inputs change 30820 const updateGiftRecipient = () => { 30821 const updatedGiftRecipient = { 30822 ...formState.giftRecipient || {}, 30823 recipientAddress 30824 }; 30825 30826 formActions.updateFormState({ giftRecipient: updatedGiftRecipient }); 30827 validateForm(); 30828 }; 30829 30830 const validateForm = () => { 30831 let isValid = true; 30832 let errorMessage = ''; 30833 30834 // Validate country if shown 30835 if (showCountry && !recipientAddress.country.trim()) { 30836 isValid = false; 30837 errorMessage = config.countryRequiredError; 30838 } 30839 30840 // Validate state if shown and country requires it 30841 if (showState && (recipientAddress.country === 'US' || recipientAddress.country === 'CA') && !recipientAddress.state.trim()) { 30842 isValid = false; 30843 errorMessage = config.stateRequiredError; 30844 } 30845 30846 // Validate city if shown 30847 if (showCity && !recipientAddress.city.trim()) { 30848 isValid = false; 30849 errorMessage = config.cityRequiredError; 30850 } 30851 30852 // Validate postal code if shown 30853 if (showPostalCode && !errorMessage) { 30854 if (!recipientAddress.postalCode.trim()) { 30855 isValid = false; 30856 errorMessage = config.postalCodeRequiredError; 30857 } 30858 } 30859 30860 // Validate street address if shown 30861 if (showAddress && !errorMessage) { 30862 if (!recipientAddress.addressLine1.trim()) { 30863 isValid = false;
30864 errorMessage = config.addressRequiredError; 30865 } 30866 } 30867 30868 $$invalidate(1, addressError = errorMessage); 30869 30870 // Dispatch event for form validity 30871 dispatch('validity', { isValid }); 30872 }; 30873 30874 function input0_input_handler() { 30875 recipientAddress.addressLine1 = this.value; 30876 $$invalidate(2, recipientAddress); 30877 } 30878 30879 function input1_input_handler() { 30880 recipientAddress.addressLine2 = this.value; 30881 $$invalidate(2, recipientAddress); 30882 } 30883 30884 function input_input_handler() { 30885 recipientAddress.city = this.value; 30886 $$invalidate(2, recipientAddress); 30887 } 30888 30889 const func = value => { 30890 $$invalidate(2, recipientAddress.country = value, recipientAddress); 30891 updateGiftRecipient(); 30892 }; 30893 30894 const func_3 = value => { 30895 $$invalidate(2, recipientAddress.state = value, recipientAddress); 30896 updateGiftRecipient(); 30897 }; 30898 30899 function input_input_handler_1() { 30900 recipientAddress.postalCode = this.value; 30901 $$invalidate(2, recipientAddress); 30902 } 30903 30904 $$self.$$set = $$props => { 30905 if ('formState' in $$props) $$invalidate(10, formState = $$props.formState);
30906 if ('formActions' in $$props) $$invalidate(11, formActions = $$props.formActions); 30907 if ('config' in $$props) $$invalidate(0, config = $$props.config); 30908 if ('form' in $$props) $$invalidate(12, form = $$props.form); 30909 }; 30910 30911 $$self.$$.update = () => { 30912 if ($$self.$$.dirty & /*config*/ 1) { 30913 // Use config values directly - they are reactive props 30914 $$invalidate(3, showAddress = config?.showAddress ?? false); 30915 } 30916 30917 if ($$self.$$.dirty & /*config*/ 1) { 30918 $$invalidate(4, showPostalCode = config?.showPostalCode ?? false); 30919 } 30920 30921 if ($$self.$$.dirty & /*config*/ 1) { 30922 $$invalidate(7, showCountry = config?.showCountry ?? false); 30923 } 30924 30925 if ($$self.$$.dirty & /*config*/ 1) { 30926 $$invalidate(6, showState = config?.showState ?? false); 30927 } 30928 30929 if ($$self.$$.dirty & /*config*/ 1) { 30930 $$invalidate(5, showCity = config?.showCity ?? false); 30931 } 30932 }; 30933 30934 $$invalidate(8, showAnyAddress = true); 30935 30936 return [ 30937 config, 30938 addressError, 30939 recipientAddress, 30940 showAddress, 30941 showPostalCode, 30942 showCity, 30943 showState, 30944 showCountry, 30945 showAnyAddress, 30946 updateGiftRecipient, 30947 formState, 30948 formActions, 30949 form, 30950 input0_input_handler, 30951 input1_input_handler, 30952 input_input_handler, 30953 func, 30954 func_3, 30955 input_input_handler_1 30956 ]; 30957 } 30958 30959 class RecipientAddress extends SvelteComponent { 30960 constructor(options) { 30961 super(); 30962 30963 init(this, options, instance$e, create_fragment$e, safe_not_equal, { 30964 formState: 10, 30965 formActions: 11, 30966 config: 0, 30967 form: 12 30968 }); 30969 } 30970 } 30971 30972 const recipientAddressFactory = { 30973 matches: (sectionElement) => sectionElement.type === elementTypes.RECIPIENT_ADDRESS, 30974 create: (form, formState, formActions, elementConfig) => { 30975 // Determine if address is required from form configuration 30976 const typeConfiguration = formConfigAs(form); 30977 const requires_address = typeConfiguration.requires_address; 30978 // If requires_address is false, don't render the component at all 30979 if (requires_address === false) { 30980 return { 30981 component: null, 30982 props: {}, 30983 isValid: true 30984 }; 30985 } 30986 // Resolve all labels and error messages through language pack service 30987 const resolvedConfig = { 30988 label: resolveLanguagePackKeyTyped(form, 'forms.gift.recipient-address', elementConfig.label), 30989 addressLine1Label: resolveLanguagePackKeyTyped(form, 'forms.gift.address-line1', elementConfig.addressLine1Label), 30990 addressLine2Label: resolveLanguagePackKeyTyped(form, 'forms.gift.address-line2', elementConfig.addressLine2Label), 30991 cityLabel: resolveLanguagePackKeyTyped(form, 'forms.gift.city', elementConfig.cityLabel), 30992 stateLabel: resolveLanguagePackKeyTyped(form, 'forms.gift.state', elementConfig.stateLabel), 30993 countryLabel: resolveLanguagePackKeyTyped(form, 'forms.gift.country', elementConfig.countryLabel), 30994 postalCodeLabel: resolveLanguagePackKeyTyped(form, 'forms.gift.postal-code', elementConfig.postalCodeLabel), 30995 addressRequiredError: resolveLanguagePackKeyTyped(form, 'forms.gift.address-required', elementConfig.addressRequiredError), 30996 countryRequiredError: resolveLanguagePackKeyTyped(form, 'forms.gift.country-required', elementConfig.countryRequiredError), 30997 stateRequiredError: resolveLanguagePackKeyTyped(form, 'forms.gift.state-required', elementConfig.stateRequiredError), 30998 cityRequiredError: resolveLanguagePackKeyTyped(form, 'forms.gift.city-required', elementConfig.cityRequiredError), 30999 postalCodeRequiredError: resolveLanguagePackKeyTyped(form, 'forms.gift.postal-code-required', elementConfig.postalCodeRequiredError), 31000 addressLine1Placeholder: resolveLanguagePackKeyTyped(form, 'forms.gift.address-line1-placeholder', elementConfig.addressLine1Placeholder), 31001 addressLine2Placeholder: resolveLanguagePackKeyTyped(form, 'forms.gift.address-line2-placeholder', elementConfig.addressLine2Placeholder),
31002 cityPlaceholder: resolveLanguagePackKeyTyped(form, 'forms.gift.city-placeholder', elementConfig.cityPlaceholder), 31003 statePlaceholder: resolveLanguagePackKeyTyped(form, 'forms.gift.state-placeholder', elementConfig.statePlaceholder), 31004 countryPlaceholder: resolveLanguagePackKeyTyped(form, 'forms.gift.country-placeholder', elementConfig.countryPlaceholder), 31005 postalCodePlaceholder: resolveLanguagePackKeyTyped(form, 'forms.gift.postal-code-placeholder', elementConfig.postalCodePlaceholder), 31006 // Field visibility controls - pass through from element config 31007 showAddress: elementConfig.showAddress, 31008 showPostalCode: elementConfig.showPostalCode, 31009 showCountry: elementConfig.showCountry, 31010 showState: elementConfig.showState, 31011 showCity: elementConfig.showCity, 31012 }; 31013 // Determine if the input is valid based on granular field requirements 31014 const giftRecipient = (formState.giftRecipient || {}); 31015 const recipientAddress = giftRecipient.recipientAddress || {}; 31016 let isValid = true; 31017 // Calculate which fields are shown (same logic as component) 31018 const showAddress = elementConfig.showAddress ?? false; 31019 const showPostalCode = elementConfig.showPostalCode ?? false; 31020 const showCountry = elementConfig.showCountry ?? false; 31021 const showState = elementConfig.showState ?? false; 31022 const showCity = elementConfig.showCity ?? false; 31023 // Validate address if required 31024 if (showAddress && !recipientAddress.addressLine1?.trim()) { 31025 isValid = false; 31026 } 31027 // Validate postal code if required 31028 if (showPostalCode && !recipientAddress.postalCode?.trim()) { 31029 isValid = false; 31030 } 31031 // Validate country if required 31032 if (showCountry && !recipientAddress.country?.trim()) { 31033 isValid = false; 31034 } 31035 // Validate state if required (only for US/CA when showState is enabled) 31036 if (showState && (recipientAddress.country === 'US' || recipientAddress.country === 'CA') && !recipientAddress.state?.trim()) { 31037 isValid = false; 31038 } 31039 // Validate city if required 31040 if (showCity && !recipientAddress.city?.trim()) { 31041 isValid = false; 31042 } 31043 return { 31044 component: RecipientAddress, 31045 props: { 31046 config: resolvedConfig, 31047 form, 31048 formState, 31049 formActions, 31050 }, 31051 isValid 31052 }; 31053 } 31054 }; 31055 31056 /* src/components/elements/recipientMessage/RecipientMessage.svelte generated by Svelte v4.2.12 */ 31057 31058 function create_fragment$d(ctx) { 31059 let div1; 31060 let div0; 31061 let label; 31062 let t0_value = /*config*/ ctx[0].messageLabel + ""; 31063 let t0; 31064 let t1; 31065 let textarea; 31066 let textarea_placeholder_value; 31067 let mounted; 31068 let dispose; 31069 31070 return { 31071 c() { 31072 div1 = element("div"); 31073 div0 = element("div"); 31074 label = element("label"); 31075 t0 = text(t0_value); 31076 t1 = space(); 31077 textarea = element("textarea"); 31078 attr(label, "for", "customMessage"); 31079 attr(label, "class", "svelte-h6tpk7"); 31080 attr(textarea, "id", "customMessage"); 31081 attr(textarea, "placeholder", textarea_placeholder_value = /*config*/ ctx[0].messagePlaceholder); 31082 attr(textarea, "class", "svelte-h6tpk7"); 31083 attr(div0, "class", "field svelte-h6tpk7"); 31084 attr(div1, "class", "recipient-message-section svelte-h6tpk7"); 31085 }, 31086 m(target, anchor) { 31087 insert(target, div1, anchor); 31088 append(div1, div0); 31089 append(div0, label); 31090 append(label, t0); 31091 append(div0, t1); 31092 append(div0, textarea); 31093 set_input_value(textarea, /*customMessage*/ ctx[1]); 31094 31095 if (!mounted) { 31096 dispose = [ 31097 listen(textarea, "input", /*textarea_input_handler*/ ctx[5]), 31098 listen(textarea, "input", /*updateGiftRecipient*/ ctx[2]) 31099 ]; 31100 31101 mounted = true; 31102 } 31103 }, 31104 p(ctx, [dirty]) { 31105 if (dirty & /*config*/ 1 && t0_value !== (t0_value = /*config*/ ctx[0].messageLabel + "")) set_data(t0, t0_value); 31106
31107 if (dirty & /*config*/ 1 && textarea_placeholder_value !== (textarea_placeholder_value = /*config*/ ctx[0].messagePlaceholder)) { 31108 attr(textarea, "placeholder", textarea_placeholder_value); 31109 } 31110 31111 if (dirty & /*customMessage*/ 2) { 31112 set_input_value(textarea, /*customMessage*/ ctx[1]); 31113 } 31114 }, 31115 i: noop, 31116 o: noop, 31117 d(detaching) { 31118 if (detaching) { 31119 detach(div1); 31120 } 31121 31122 mounted = false; 31123 run_all(dispose); 31124 } 31125 }; 31126 } 31127 31128 function instance$d($$self, $$props, $$invalidate) { 31129 let { formState } = $$props; 31130 let { formActions } = $$props; 31131 let { config } = $$props; 31132 const dispatch = createEventDispatcher(); 31133 let customMessage = formState.giftRecipient?.customMessage || ''; 31134 31135 // Update form state when input changes 31136 const updateGiftRecipient = () => { 31137 const updatedGiftRecipient = { 31138 ...formState.giftRecipient || {}, 31139 customMessage 31140 }; 31141 31142 formActions.updateFormState({ giftRecipient: updatedGiftRecipient }); 31143 }; 31144 31145 // Initial validation 31146 onMount(() => { 31147 // Message is always valid as it's optional 31148 dispatch('validity', { isValid: true }); 31149 }); 31150 31151 function textarea_input_handler() { 31152 customMessage = this.value; 31153 $$invalidate(1, customMessage); 31154 } 31155 31156 $$self.$$set = $$props => {
31157 if ('formState' in $$props) $$invalidate(3, formState = $$props.formState); 31158 if ('formActions' in $$props) $$invalidate(4, formActions = $$props.formActions); 31159 if ('config' in $$props) $$invalidate(0, config = $$props.config); 31160 }; 31161 31162 return [ 31163 config, 31164 customMessage, 31165 updateGiftRecipient, 31166 formState, 31167 formActions, 31168 textarea_input_handler 31169 ]; 31170 } 31171 31172 class RecipientMessage extends SvelteComponent { 31173 constructor(options) { 31174 super(); 31175 init(this, options, instance$d, create_fragment$d, safe_not_equal, { formState: 3, formActions: 4, config: 0 }); 31176 } 31177 } 31178 31179 const recipientMessageFactory = { 31180 matches: (sectionElement) => sectionElement.type === elementTypes.RECIPIENT_MESSAGE, 31181 create: (form, formState, formActions, elementConfig) => { 31182 // Resolve all labels through language pack service 31183 const resolvedConfig = { 31184 messageLabel: resolveLanguagePackKeyTyped(form, 'forms.gift.custom-message', elementConfig.messageLabel), 31185 messagePlaceholder: resolveLanguagePackKeyTyped(form, 'forms.gift.message-placeholder', elementConfig.messagePlaceholder), 31186 }; 31187 // Message is always valid as it's optional 31188 const isValid = true; 31189 return { 31190 component: RecipientMessage, 31191 props: { 31192 config: resolvedConfig, 31193 form, 31194 formState, 31195 formActions, 31196 }, 31197 isValid 31198 }; 31199 } 31200 }; 31201 31202 /* src/components/elements/giftCode/GiftCode.svelte generated by Svelte v4.2.12 */ 31203 31204 function create_if_block_1$8(ctx) { 31205 let label_1; 31206 let t0; 31207 let t1; 31208 let if_block = /*required*/ ctx[3] && create_if_block_2$6(); 31209 31210 return { 31211 c() { 31212 label_1 = element("label"); 31213 t0 = text(/*label*/ ctx[1]); 31214 t1 = space(); 31215 if (if_block) if_block.c(); 31216 attr(label_1, "for", "zephr-form-gift-code"); 31217 attr(label_1, "class", "svelte-764k6k"); 31218 }, 31219 m(target, anchor) { 31220 insert(target, label_1, anchor); 31221 append(label_1, t0); 31222 append(label_1, t1); 31223 if (if_block) if_block.m(label_1, null); 31224 }, 31225 p(ctx, dirty) { 31226 if (dirty & /*label*/ 2) set_data(t0, /*label*/ ctx[1]); 31227 31228 if (/*required*/ ctx[3]) { 31229 if (if_block) ; else { 31230 if_block = create_if_block_2$6(); 31231 if_block.c(); 31232 if_block.m(label_1, null); 31233 } 31234 } else if (if_block) { 31235 if_block.d(1); 31236 if_block = null; 31237 } 31238 }, 31239 d(detaching) { 31240 if (detaching) { 31241 detach(label_1); 31242 } 31243 31244 if (if_block) if_block.d(); 31245 } 31246 }; 31247 } 31248 31249 // (22:6) {#if required} 31250 function create_if_block_2$6(ctx) { 31251 let span; 31252 31253 return { 31254 c() { 31255 span = element("span"); 31256 span.textContent = "*"; 31257 attr(span, "class", "required svelte-764k6k"); 31258 }, 31259 m(target, anchor) { 31260 insert(target, span, anchor); 31261 }, 31262 d(detaching) { 31263 if (detaching) { 31264 detach(span); 31265 } 31266 } 31267 }; 31268 } 31269 31270 // (40:2) {#if errorMessage} 31271 function create_if_block$9(ctx) { 31272 let div; 31273 let t; 31274 31275 return { 31276 c() { 31277 div = element("div"); 31278 t = text(/*errorMessage*/ ctx[7]); 31279 attr(div, "class", "error-message svelte-764k6k"); 31280 }, 31281 m(target, anchor) { 31282 insert(target, div, anchor); 31283 append(div, t); 31284 }, 31285 p(ctx, dirty) { 31286 if (dirty & /*errorMessage*/ 128) set_data(t, /*errorMessage*/ ctx[7]); 31287 }, 31288 d(detaching) { 31289 if (detaching) { 31290 detach(div); 31291 } 31292 } 31293 }; 31294 } 31295 31296 function create_fragment$c(ctx) { 31297 let div; 31298 let t0; 31299 let input; 31300 let t1; 31301 let mounted; 31302 let dispose; 31303 let if_block0 = /*label*/ ctx[1] && create_if_block_1$8(ctx); 31304 let if_block1 = /*errorMessage*/ ctx[7] && create_if_block$9(ctx); 31305 31306 return { 31307 c() { 31308 div = element("div"); 31309 if (if_block0) if_block0.c(); 31310 t0 = space(); 31311 input = element("input"); 31312 t1 = space(); 31313 if (if_block1) if_block1.c(); 31314 attr(input, "id", "zephr-form-gift-code"); 31315 attr(input, "type", "text"); 31316 attr(input, "placeholder", /*placeholder*/ ctx[2]); 31317 input.disabled = /*disabled*/ ctx[4]; 31318 input.required = /*required*/ ctx[3]; 31319 input.value = /*value*/ ctx[0]; 31320 attr(input, "maxlength", "16"); 31321 attr(input, "class", "svelte-764k6k"); 31322 toggle_class(input, "error", !!/*errorMessage*/ ctx[7]); 31323 attr(div, "class", "zephr-form-input-wrapper svelte-764k6k"); 31324 }, 31325 m(target, anchor) { 31326 insert(target, div, anchor); 31327 if (if_block0) if_block0.m(div, null); 31328 append(div, t0); 31329 append(div, input); 31330 append(div, t1); 31331 if (if_block1) if_block1.m(div, null); 31332 31333 if (!mounted) { 31334 dispose = [ 31335 listen(input, "input", /*handleChange*/ ctx[8]),
31336 listen(input, "focus", function () { 31337 if (is_function(/*onFocus*/ ctx[5])) /*onFocus*/ ctx[5].apply(this, arguments); 31338 }), 31339 listen(input, "blur", function () { 31340 if (is_function(/*onBlur*/ ctx[6])) /*onBlur*/ ctx[6].apply(this, arguments); 31341 }) 31342 ]; 31343 31344 mounted = true; 31345 } 31346 }, 31347 p(new_ctx, [dirty]) { 31348 ctx = new_ctx; 31349 31350 if (/*label*/ ctx[1]) { 31351 if (if_block0) { 31352 if_block0.p(ctx, dirty); 31353 } else { 31354 if_block0 = create_if_block_1$8(ctx); 31355 if_block0.c(); 31356 if_block0.m(div, t0); 31357 } 31358 } else if (if_block0) { 31359 if_block0.d(1); 31360 if_block0 = null; 31361 } 31362 31363 if (dirty & /*placeholder*/ 4) { 31364 attr(input, "placeholder", /*placeholder*/ ctx[2]); 31365 } 31366 31367 if (dirty & /*disabled*/ 16) { 31368 input.disabled = /*disabled*/ ctx[4]; 31369 } 31370 31371 if (dirty & /*required*/ 8) { 31372 input.required = /*required*/ ctx[3]; 31373 } 31374 31375 if (dirty & /*value*/ 1 && input.value !== /*value*/ ctx[0]) { 31376 input.value = /*value*/ ctx[0]; 31377 } 31378 31379 if (dirty & /*errorMessage*/ 128) { 31380 toggle_class(input, "error", !!/*errorMessage*/ ctx[7]); 31381 } 31382 31383 if (/*errorMessage*/ ctx[7]) { 31384 if (if_block1) { 31385 if_block1.p(ctx, dirty); 31386 } else { 31387 if_block1 = create_if_block$9(ctx); 31388 if_block1.c(); 31389 if_block1.m(div, null); 31390 } 31391 } else if (if_block1) { 31392 if_block1.d(1); 31393 if_block1 = null; 31394 } 31395 }, 31396 i: noop, 31397 o: noop, 31398 d(detaching) { 31399 if (detaching) { 31400 detach(div); 31401 } 31402 31403 if (if_block0) if_block0.d(); 31404 if (if_block1) if_block1.d(); 31405 mounted = false; 31406 run_all(dispose); 31407 } 31408 }; 31409 } 31410 31411 function instance$c($$self, $$props, $$invalidate) { 31412 let errorMessage; 31413 let { value = "" } = $$props; 31414 let { label = "" } = $$props; 31415 let { placeholder = "" } = $$props; 31416 let { required = false } = $$props; 31417 let { disabled = false } = $$props; 31418 let { hasError = false } = $$props; 31419 let { error = false } = $$props; 31420 31421 let { onChange = _value => { 31422 31423 } } = $$props; 31424 31425 let { onFocus = () => { 31426 31427 } } = $$props; 31428 31429 let { onBlur = () => { 31430 31431 } } = $$props; 31432 31433 const handleChange = event => { 31434 const newValue = event.target.value; 31435 onChange(newValue); 31436 }; 31437 31438 $$self.$$set = $$props => {
31439 if ('value' in $$props) $$invalidate(0, value = $$props.value); 31440 if ('label' in $$props) $$invalidate(1, label = $$props.label); 31441 if ('placeholder' in $$props) $$invalidate(2, placeholder = $$props.placeholder); 31442 if ('required' in $$props) $$invalidate(3, required = $$props.required); 31443 if ('disabled' in $$props) $$invalidate(4, disabled = $$props.disabled); 31444 if ('hasError' in $$props) $$invalidate(9, hasError = $$props.hasError); 31445 if ('error' in $$props) $$invalidate(10, error = $$props.error); 31446 if ('onChange' in $$props) $$invalidate(11, onChange = $$props.onChange); 31447 if ('onFocus' in $$props) $$invalidate(5, onFocus = $$props.onFocus); 31448 if ('onBlur' in $$props) $$invalidate(6, onBlur = $$props.onBlur); 31449 }; 31450 31451 $$self.$$.update = () => { 31452 if ($$self.$$.dirty & /*hasError, error*/ 1536) { 31453 $$invalidate(7, errorMessage = hasError || error); 31454 } 31455 }; 31456 31457 return [ 31458 value, 31459 label, 31460 placeholder, 31461 required, 31462 disabled, 31463 onFocus, 31464 onBlur, 31465 errorMessage, 31466 handleChange, 31467 hasError, 31468 error, 31469 onChange 31470 ]; 31471 } 31472 31473 class GiftCode extends SvelteComponent { 31474 constructor(options) { 31475 super(); 31476 31477 init(this, options, instance$c, create_fragment$c, safe_not_equal, { 31478 value: 0, 31479 label: 1, 31480 placeholder: 2, 31481 required: 3, 31482 disabled: 4, 31483 hasError: 9, 31484 error: 10, 31485 onChange: 11, 31486 onFocus: 5, 31487 onBlur: 6 31488 }); 31489 } 31490 } 31491 31492 const factory$2 = { 31493 matches: (sectionElement) => sectionElement.type === elementTypes.GIFT_CODE, 31494 create: (form, formState, formActions, config) => { 31495 const { disabled, label, placeholder, required } = config; 31496 const error = serverErrorForElement(elementTypes.GIFT_CODE, formState); 31497 const onChange = (value) => { 31498 formActions.updateFormState({ 31499 giftCode: value, 31500 giftCodeError: undefined, 31501 }); 31502 logDataLayerEvent(form, 'zephr_form_input_change', { 31503 field: 'gift-code', 31504 inputName: `zephr-form-gift-code-${form.uniqueKey}`, 31505 sectionId: formState.currentSection.type, 31506 }); 31507 }; 31508 const onFocus = () => logDataLayerEvent(form, 'zephr_form_input_focus', { 31509 field: 'gift-code', 31510 inputName: `zephr-form-gift-code-${form.uniqueKey}`, 31511 sectionId: formState.currentSection.type, 31512 }); 31513 const onBlur = () => logDataLayerEvent(form, 'zephr_form_input_blur', { 31514 field: 'gift-code', 31515 inputName: `zephr-form-gift-code-${form.uniqueKey}`, 31516 sectionId: formState.currentSection.type, 31517 }); 31518 const giftCode = formState.giftCode || ''; 31519 const isValid = (!required || !!giftCode) && giftCode.length === 16; 31520 const errorMessage = error 31521 ? resolveErrorLanguagePackKey(form, error) 31522 : formState.giftCodeError; 31523 return { 31524 component: GiftCode, 31525 props: { 31526 hasError: errorMessage, 31527 label, 31528 placeholder, 31529 required, 31530 disabled, 31531 onChange, 31532 onFocus, 31533 onBlur, 31534 value: formState.giftCode || '', 31535 }, 31536 isValid, 31537 }; 31538 }, 31539 }; 31540 31541 /* src/components/elements/giftSubscriptionsList/GiftSubscriptionsListBoxItem.svelte generated by Svelte v4.2.12 */ 31542 31543 function get_each_context$4(ctx, list, i) { 31544 const child_ctx = ctx.slice(); 31545 child_ctx[25] = list[i]; 31546 return child_ctx; 31547 } 31548 31549 // (30:39) 31550 function create_if_block_14(ctx) { 31551 let div; 31552 let t; 31553 31554 return { 31555 c() { 31556 div = element("div"); 31557 t = text(/*redeemedBannerText*/ ctx[5]); 31558 attr(div, "class", "zephr-banner-top svelte-srvimy"); 31559 }, 31560 m(target, anchor) { 31561 insert(target, div, anchor); 31562 append(div, t); 31563 }, 31564 p(ctx, dirty) { 31565 if (dirty & /*redeemedBannerText*/ 32) set_data(t, /*redeemedBannerText*/ ctx[5]); 31566 }, 31567 d(detaching) { 31568 if (detaching) { 31569 detach(div); 31570 } 31571 } 31572 }; 31573 } 31574 31575 // (26:2) {#if gift.status === 'PENDING'} 31576 function create_if_block_13(ctx) { 31577 let div; 31578 let t0; 31579 let t1; 31580 let t2_value = /*gift*/ ctx[0].subscriptionStartDate + ""; 31581 let t2; 31582 31583 return { 31584 c() { 31585 div = element("div"); 31586 t0 = text(/*pendingBannerText*/ ctx[4]); 31587 t1 = space(); 31588 t2 = text(t2_value); 31589 attr(div, "class", "zephr-banner-top svelte-srvimy"); 31590 }, 31591 m(target, anchor) { 31592 insert(target, div, anchor); 31593 append(div, t0); 31594 append(div, t1); 31595 append(div, t2); 31596 }, 31597 p(ctx, dirty) {
31598 if (dirty & /*pendingBannerText*/ 16) set_data(t0, /*pendingBannerText*/ ctx[4]); 31599 if (dirty & /*gift*/ 1 && t2_value !== (t2_value = /*gift*/ ctx[0].subscriptionStartDate + "")) set_data(t2, t2_value); 31600 }, 31601 d(detaching) { 31602 if (detaching) { 31603 detach(div); 31604 } 31605 } 31606 }; 31607 } 31608 31609 // (38:6) {#if element === 'subscription_information' && !elementsHide.subscriptionInformation} 31610 function create_if_block_8(ctx) { 31611 let t0; 31612 let t1; 31613 let t2; 31614 let if_block3_anchor; 31615 let if_block0 = (/*gift*/ ctx[0].recipientFirstName || /*gift*/ ctx[0].recipientLastName || /*gift*/ ctx[0].is_recipient) && create_if_block_12(ctx); 31616 let if_block1 = /*gift*/ ctx[0].subscriptionType && create_if_block_11(ctx); 31617 let if_block2 = /*gift*/ ctx[0].subscriptionStartDate && create_if_block_10(ctx); 31618 let if_block3 = /*gift*/ ctx[0].subscriptionEndDate && create_if_block_9(ctx); 31619 31620 return { 31621 c() { 31622 if (if_block0) if_block0.c(); 31623 t0 = space(); 31624 if (if_block1) if_block1.c(); 31625 t1 = space(); 31626 if (if_block2) if_block2.c(); 31627 t2 = space(); 31628 if (if_block3) if_block3.c(); 31629 if_block3_anchor = empty(); 31630 }, 31631 m(target, anchor) { 31632 if (if_block0) if_block0.m(target, anchor); 31633 insert(target, t0, anchor); 31634 if (if_block1) if_block1.m(target, anchor); 31635 insert(target, t1, anchor); 31636 if (if_block2) if_block2.m(target, anchor); 31637 insert(target, t2, anchor); 31638 if (if_block3) if_block3.m(target, anchor); 31639 insert(target, if_block3_anchor, anchor); 31640 }, 31641 p(ctx, dirty) { 31642 if (/*gift*/ ctx[0].recipientFirstName || /*gift*/ ctx[0].recipientLastName || /*gift*/ ctx[0].is_recipient) { 31643 if (if_block0) { 31644 if_block0.p(ctx, dirty); 31645 } else { 31646 if_block0 = create_if_block_12(ctx); 31647 if_block0.c(); 31648 if_block0.m(t0.parentNode, t0); 31649 } 31650 } else if (if_block0) { 31651 if_block0.d(1); 31652 if_block0 = null; 31653 } 31654 31655 if (/*gift*/ ctx[0].subscriptionType) { 31656 if (if_block1) { 31657 if_block1.p(ctx, dirty); 31658 } else { 31659 if_block1 = create_if_block_11(ctx); 31660 if_block1.c(); 31661 if_block1.m(t1.parentNode, t1); 31662 } 31663 } else if (if_block1) { 31664 if_block1.d(1); 31665 if_block1 = null; 31666 } 31667 31668 if (/*gift*/ ctx[0].subscriptionStartDate) { 31669 if (if_block2) { 31670 if_block2.p(ctx, dirty); 31671 } else { 31672 if_block2 = create_if_block_10(ctx); 31673 if_block2.c(); 31674 if_block2.m(t2.parentNode, t2); 31675 } 31676 } else if (if_block2) { 31677 if_block2.d(1); 31678 if_block2 = null; 31679 } 31680 31681 if (/*gift*/ ctx[0].subscriptionEndDate) { 31682 if (if_block3) { 31683 if_block3.p(ctx, dirty); 31684 } else { 31685 if_block3 = create_if_block_9(ctx); 31686 if_block3.c(); 31687 if_block3.m(if_block3_anchor.parentNode, if_block3_anchor); 31688 } 31689 } else if (if_block3) { 31690 if_block3.d(1); 31691 if_block3 = null; 31692 } 31693 }, 31694 d(detaching) { 31695 if (detaching) { 31696 detach(t0); 31697 detach(t1); 31698 detach(t2); 31699 detach(if_block3_anchor); 31700 } 31701 31702 if (if_block0) if_block0.d(detaching); 31703 if (if_block1) if_block1.d(detaching); 31704 if (if_block2) if_block2.d(detaching); 31705 if (if_block3) if_block3.d(detaching); 31706 } 31707 }; 31708 } 31709 31710 // (39:8) {#if gift.recipientFirstName || gift.recipientLastName || gift.is_recipient} 31711 function create_if_block_12(ctx) { 31712 let div2; 31713 let span; 31714 let t0; 31715 let t1; 31716 let div0; 31717 let t2_value = (/*gift*/ ctx[0].recipientFirstName || '') + ""; 31718 let t2; 31719 let t3; 31720 let t4_value = (/*gift*/ ctx[0].recipientLastName || '') + ""; 31721 let t4; 31722 let t5; 31723 let div1; 31724 31725 let t6_value = (/*gift*/ ctx[0].status === 'REDEEMED' 31726 ? /*activeStatusText*/ ctx[6] 31727 : /*pendingStatusText*/ ctx[7]) + ""; 31728 31729 let t6; 31730 31731 return { 31732 c() { 31733 div2 = element("div"); 31734 span = element("span"); 31735 t0 = text(/*giftRecipientText*/ ctx[1]); 31736 t1 = space(); 31737 div0 = element("div"); 31738 t2 = text(t2_value); 31739 t3 = space(); 31740 t4 = text(t4_value); 31741 t5 = space(); 31742 div1 = element("div"); 31743 t6 = text(t6_value); 31744 attr(span, "class", "svelte-srvimy"); 31745 attr(div0, "class", "zephr-box-item-information svelte-srvimy"); 31746 attr(div1, "class", "zephr-status-pill svelte-srvimy"); 31747 attr(div2, "class", "zephr-section zephr-header-section svelte-srvimy"); 31748 }, 31749 m(target, anchor) { 31750 insert(target, div2, anchor); 31751 append(div2, span); 31752 append(span, t0); 31753 append(div2, t1); 31754 append(div2, div0); 31755 append(div0, t2); 31756 append(div0, t3); 31757 append(div0, t4); 31758 append(div2, t5); 31759 append(div2, div1); 31760 append(div1, t6); 31761 }, 31762 p(ctx, dirty) {
31763 if (dirty & /*giftRecipientText*/ 2) set_data(t0, /*giftRecipientText*/ ctx[1]); 31764 if (dirty & /*gift*/ 1 && t2_value !== (t2_value = (/*gift*/ ctx[0].recipientFirstName || '') + "")) set_data(t2, t2_value); 31765 if (dirty & /*gift*/ 1 && t4_value !== (t4_value = (/*gift*/ ctx[0].recipientLastName || '') + "")) set_data(t4, t4_value); 31766 31767 if (dirty & /*gift, activeStatusText, pendingStatusText*/ 193 && t6_value !== (t6_value = (/*gift*/ ctx[0].status === 'REDEEMED' 31768 ? /*activeStatusText*/ ctx[6] 31769 : /*pendingStatusText*/ ctx[7]) + "")) set_data(t6, t6_value); 31770 }, 31771 d(detaching) { 31772 if (detaching) { 31773 detach(div2); 31774 } 31775 } 31776 }; 31777 } 31778 31779 // (51:8) {#if gift.subscriptionType} 31780 function create_if_block_11(ctx) { 31781 let div1; 31782 let span; 31783 let t0; 31784 let t1; 31785 let div0; 31786 let t2_value = /*gift*/ ctx[0].subscriptionType + ""; 31787 let t2; 31788 31789 return { 31790 c() { 31791 div1 = element("div"); 31792 span = element("span"); 31793 t0 = text(/*subscriptionTypeText*/ ctx[13]); 31794 t1 = space(); 31795 div0 = element("div"); 31796 t2 = text(t2_value); 31797 attr(span, "class", "svelte-srvimy"); 31798 attr(div0, "class", ""); 31799 attr(div1, "class", "zephr-section svelte-srvimy"); 31800 }, 31801 m(target, anchor) { 31802 insert(target, div1, anchor); 31803 append(div1, span); 31804 append(span, t0); 31805 append(div1, t1); 31806 append(div1, div0); 31807 append(div0, t2); 31808 }, 31809 p(ctx, dirty) { 31810 if (dirty & /*subscriptionTypeText*/ 8192) set_data(t0, /*subscriptionTypeText*/ ctx[13]); 31811 if (dirty & /*gift*/ 1 && t2_value !== (t2_value = /*gift*/ ctx[0].subscriptionType + "")) set_data(t2, t2_value); 31812 }, 31813 d(detaching) { 31814 if (detaching) { 31815 detach(div1); 31816 } 31817 } 31818 }; 31819 } 31820 31821 // (60:8) {#if gift.subscriptionStartDate} 31822 function create_if_block_10(ctx) { 31823 let div1; 31824 let span; 31825 let t0; 31826 let t1; 31827 let div0; 31828 let t2_value = /*gift*/ ctx[0].subscriptionStartDate + ""; 31829 let t2; 31830 31831 return { 31832 c() { 31833 div1 = element("div"); 31834 span = element("span"); 31835 t0 = text(/*startDateText*/ ctx[2]); 31836 t1 = space(); 31837 div0 = element("div"); 31838 t2 = text(t2_value); 31839 attr(span, "class", "svelte-srvimy"); 31840 attr(div0, "class", ""); 31841 attr(div1, "class", "zephr-section svelte-srvimy"); 31842 }, 31843 m(target, anchor) { 31844 insert(target, div1, anchor); 31845 append(div1, span); 31846 append(span, t0); 31847 append(div1, t1); 31848 append(div1, div0); 31849 append(div0, t2); 31850 }, 31851 p(ctx, dirty) { 31852 if (dirty & /*startDateText*/ 4) set_data(t0, /*startDateText*/ ctx[2]); 31853 if (dirty & /*gift*/ 1 && t2_value !== (t2_value = /*gift*/ ctx[0].subscriptionStartDate + "")) set_data(t2, t2_value); 31854 }, 31855 d(detaching) { 31856 if (detaching) { 31857 detach(div1); 31858 } 31859 } 31860 }; 31861 } 31862 31863 // (69:8) {#if gift.subscriptionEndDate} 31864 function create_if_block_9(ctx) { 31865 let div1; 31866 let span; 31867 let t0; 31868 let t1; 31869 let div0; 31870 let t2_value = /*gift*/ ctx[0].subscriptionEndDate + ""; 31871 let t2; 31872 31873 return { 31874 c() { 31875 div1 = element("div"); 31876 span = element("span"); 31877 t0 = text(/*endDateText*/ ctx[3]); 31878 t1 = space(); 31879 div0 = element("div"); 31880 t2 = text(t2_value); 31881 attr(span, "class", "svelte-srvimy"); 31882 attr(div0, "class", ""); 31883 attr(div1, "class", "zephr-section svelte-srvimy"); 31884 }, 31885 m(target, anchor) { 31886 insert(target, div1, anchor); 31887 append(div1, span); 31888 append(span, t0); 31889 append(div1, t1); 31890 append(div1, div0); 31891 append(div0, t2); 31892 }, 31893 p(ctx, dirty) { 31894 if (dirty & /*endDateText*/ 8) set_data(t0, /*endDateText*/ ctx[3]); 31895 if (dirty & /*gift*/ 1 && t2_value !== (t2_value = /*gift*/ ctx[0].subscriptionEndDate + "")) set_data(t2, t2_value); 31896 }, 31897 d(detaching) { 31898 if (detaching) { 31899 detach(div1); 31900 } 31901 } 31902 }; 31903 } 31904 31905 // (78:6) {#if element === 'billing_history' && !elementsHide.billingHistory && gift.status === "PENDING"} 31906 function create_if_block_6$2(ctx) { 31907 let if_block_anchor; 31908 let current; 31909 let if_block = /*billingHistoryLink*/ ctx[16] && create_if_block_7(ctx); 31910 31911 return { 31912 c() { 31913 if (if_block) if_block.c(); 31914 if_block_anchor = empty(); 31915 }, 31916 m(target, anchor) { 31917 if (if_block) if_block.m(target, anchor); 31918 insert(target, if_block_anchor, anchor); 31919 current = true; 31920 }, 31921 p(ctx, dirty) { 31922 if (/*billingHistoryLink*/ ctx[16]) { 31923 if (if_block) { 31924 if_block.p(ctx, dirty); 31925
31926 if (dirty & /*billingHistoryLink*/ 65536) { 31927 transition_in(if_block, 1); 31928 } 31929 } else { 31930 if_block = create_if_block_7(ctx); 31931 if_block.c(); 31932 transition_in(if_block, 1); 31933 if_block.m(if_block_anchor.parentNode, if_block_anchor); 31934 } 31935 } else if (if_block) { 31936 group_outros(); 31937 31938 transition_out(if_block, 1, 1, () => { 31939 if_block = null; 31940 }); 31941 31942 check_outros(); 31943 } 31944 }, 31945 i(local) { 31946 if (current) return; 31947 transition_in(if_block); 31948 current = true; 31949 }, 31950 o(local) { 31951 transition_out(if_block); 31952 current = false; 31953 }, 31954 d(detaching) { 31955 if (detaching) { 31956 detach(if_block_anchor); 31957 } 31958 31959 if (if_block) if_block.d(detaching); 31960 } 31961 }; 31962 } 31963 31964 // (79:6) {#if billingHistoryLink} 31965 function create_if_block_7(ctx) { 31966 let tablink; 31967 let current; 31968 31969 tablink = new Tablink({ 31970 props: { 31971 text: /*billingHistoryLink*/ ctx[16], 31972 onClick: /*func*/ ctx[21] 31973 } 31974 }); 31975 31976 return { 31977 c() { 31978 create_component(tablink.$$.fragment); 31979 }, 31980 m(target, anchor) { 31981 mount_component(tablink, target, anchor); 31982 current = true; 31983 }, 31984 p(ctx, dirty) { 31985 const tablink_changes = {}; 31986 if (dirty & /*billingHistoryLink*/ 65536) tablink_changes.text = /*billingHistoryLink*/ ctx[16]; 31987 if (dirty & /*onViewHistory, gift*/ 131073) tablink_changes.onClick = /*func*/ ctx[21]; 31988 tablink.$set(tablink_changes); 31989 }, 31990 i(local) { 31991 if (current) return; 31992 transition_in(tablink.$$.fragment, local); 31993 current = true; 31994 }, 31995 o(local) { 31996 transition_out(tablink.$$.fragment, local); 31997 current = false; 31998 }, 31999 d(detaching) { 32000 destroy_component(tablink, detaching); 32001 } 32002 }; 32003 } 32004 32005 // (83:4) {#if element === 'change_payment' && !elementsHide.changePayment && gift.status === "PENDING"} 32006 function create_if_block_4$2(ctx) { 32007 let if_block_anchor; 32008 let current; 32009 let if_block = /*changePaymentMethodText*/ ctx[9] && create_if_block_5$2(ctx); 32010 32011 return { 32012 c() { 32013 if (if_block) if_block.c(); 32014 if_block_anchor = empty(); 32015 }, 32016 m(target, anchor) { 32017 if (if_block) if_block.m(target, anchor); 32018 insert(target, if_block_anchor, anchor); 32019 current = true; 32020 }, 32021 p(ctx, dirty) { 32022 if (/*changePaymentMethodText*/ ctx[9]) { 32023 if (if_block) { 32024 if_block.p(ctx, dirty); 32025 32026 if (dirty & /*changePaymentMethodText*/ 512) { 32027 transition_in(if_block, 1); 32028 } 32029 } else { 32030 if_block = create_if_block_5$2(ctx); 32031 if_block.c(); 32032 transition_in(if_block, 1); 32033 if_block.m(if_block_anchor.parentNode, if_block_anchor); 32034 } 32035 } else if (if_block) { 32036 group_outros(); 32037 32038 transition_out(if_block, 1, 1, () => { 32039 if_block = null; 32040 }); 32041 32042 check_outros(); 32043 } 32044 }, 32045 i(local) { 32046 if (current) return; 32047 transition_in(if_block); 32048 current = true; 32049 }, 32050 o(local) { 32051 transition_out(if_block); 32052 current = false; 32053 }, 32054 d(detaching) { 32055 if (detaching) { 32056 detach(if_block_anchor); 32057 } 32058 32059 if (if_block) if_block.d(detaching); 32060 } 32061 }; 32062 } 32063 32064 // (84:6) {#if changePaymentMethodText} 32065 function create_if_block_5$2(ctx) { 32066 let tablink; 32067 let current; 32068 32069 tablink = new Tablink({ 32070 props: { 32071 text: /*changePaymentMethodText*/ ctx[9], 32072 onClick: /*func_1*/ ctx[22] 32073 } 32074 }); 32075 32076 return { 32077 c() { 32078 create_component(tablink.$$.fragment); 32079 }, 32080 m(target, anchor) { 32081 mount_component(tablink, target, anchor); 32082 current = true; 32083 }, 32084 p(ctx, dirty) { 32085 const tablink_changes = {}; 32086 if (dirty & /*changePaymentMethodText*/ 512) tablink_changes.text = /*changePaymentMethodText*/ ctx[9]; 32087 if (dirty & /*onChangePayment, gift*/ 262145) tablink_changes.onClick = /*func_1*/ ctx[22]; 32088 tablink.$set(tablink_changes); 32089 }, 32090 i(local) { 32091 if (current) return; 32092 transition_in(tablink.$$.fragment, local); 32093 current = true; 32094 }, 32095 o(local) { 32096 transition_out(tablink.$$.fragment, local); 32097 current = false; 32098 }, 32099 d(detaching) { 32100 destroy_component(tablink, detaching); 32101 } 32102 }; 32103 } 32104 32105 // (88:4) {#if element === 'change_subscription' && !elementsHide.changeSubscription && gift.status === "PENDING"} 32106 function create_if_block_2$5(ctx) { 32107 let if_block_anchor; 32108 let current; 32109 let if_block = /*changeSubscriptionText*/ ctx[10] && create_if_block_3$3(ctx); 32110 32111 return { 32112 c() { 32113 if (if_block) if_block.c(); 32114 if_block_anchor = empty(); 32115 }, 32116 m(target, anchor) { 32117 if (if_block) if_block.m(target, anchor); 32118 insert(target, if_block_anchor, anchor); 32119 current = true; 32120 }, 32121 p(ctx, dirty) { 32122 if (/*changeSubscriptionText*/ ctx[10]) { 32123 if (if_block) { 32124 if_block.p(ctx, dirty); 32125
32126 if (dirty & /*changeSubscriptionText*/ 1024) { 32127 transition_in(if_block, 1); 32128 } 32129 } else { 32130 if_block = create_if_block_3$3(ctx); 32131 if_block.c(); 32132 transition_in(if_block, 1); 32133 if_block.m(if_block_anchor.parentNode, if_block_anchor); 32134 } 32135 } else if (if_block) { 32136 group_outros(); 32137 32138 transition_out(if_block, 1, 1, () => { 32139 if_block = null; 32140 }); 32141 32142 check_outros(); 32143 } 32144 }, 32145 i(local) { 32146 if (current) return; 32147 transition_in(if_block); 32148 current = true; 32149 }, 32150 o(local) { 32151 transition_out(if_block); 32152 current = false; 32153 }, 32154 d(detaching) { 32155 if (detaching) { 32156 detach(if_block_anchor); 32157 } 32158 32159 if (if_block) if_block.d(detaching); 32160 } 32161 }; 32162 } 32163 32164 // (89:6) {#if changeSubscriptionText} 32165 function create_if_block_3$3(ctx) { 32166 let tablink; 32167 let current; 32168 32169 tablink = new Tablink({ 32170 props: { 32171 text: /*changeSubscriptionText*/ ctx[10], 32172 path: `${/*changeSubscriptionPath*/ ctx[8]}?subscription=${/*gift*/ ctx[0].externalId}`, 32173 logDlEvent: /*func_2*/ ctx[23] 32174 } 32175 }); 32176 32177 return { 32178 c() { 32179 create_component(tablink.$$.fragment); 32180 }, 32181 m(target, anchor) { 32182 mount_component(tablink, target, anchor); 32183 current = true; 32184 }, 32185 p(ctx, dirty) { 32186 const tablink_changes = {}; 32187 if (dirty & /*changeSubscriptionText*/ 1024) tablink_changes.text = /*changeSubscriptionText*/ ctx[10]; 32188 if (dirty & /*changeSubscriptionPath, gift*/ 257) tablink_changes.path = `${/*changeSubscriptionPath*/ ctx[8]}?subscription=${/*gift*/ ctx[0].externalId}`; 32189 if (dirty & /*logChangeSubscription, gift*/ 524289) tablink_changes.logDlEvent = /*func_2*/ ctx[23]; 32190 tablink.$set(tablink_changes); 32191 }, 32192 i(local) { 32193 if (current) return; 32194 transition_in(tablink.$$.fragment, local); 32195 current = true; 32196 }, 32197 o(local) { 32198 transition_out(tablink.$$.fragment, local); 32199 current = false; 32200 }, 32201 d(detaching) { 32202 destroy_component(tablink, detaching); 32203 } 32204 }; 32205 } 32206 32207 // (93:4) {#if element === 'cancel_subscription' && !elementsHide.cancelSubscription && gift.status === "PENDING"} 32208 function create_if_block$8(ctx) { 32209 let if_block_anchor; 32210 let current; 32211 let if_block = /*cancelSubscriptionText*/ ctx[11] && create_if_block_1$7(ctx); 32212 32213 return { 32214 c() { 32215 if (if_block) if_block.c(); 32216 if_block_anchor = empty(); 32217 }, 32218 m(target, anchor) { 32219 if (if_block) if_block.m(target, anchor); 32220 insert(target, if_block_anchor, anchor); 32221 current = true; 32222 }, 32223 p(ctx, dirty) { 32224 if (/*cancelSubscriptionText*/ ctx[11]) { 32225 if (if_block) { 32226 if_block.p(ctx, dirty); 32227 32228 if (dirty & /*cancelSubscriptionText*/ 2048) { 32229 transition_in(if_block, 1); 32230 } 32231 } else { 32232 if_block = create_if_block_1$7(ctx); 32233 if_block.c(); 32234 transition_in(if_block, 1); 32235 if_block.m(if_block_anchor.parentNode, if_block_anchor); 32236 } 32237 } else if (if_block) { 32238 group_outros(); 32239 32240 transition_out(if_block, 1, 1, () => { 32241 if_block = null; 32242 }); 32243 32244 check_outros(); 32245 } 32246 }, 32247 i(local) { 32248 if (current) return; 32249 transition_in(if_block); 32250 current = true; 32251 }, 32252 o(local) { 32253 transition_out(if_block); 32254 current = false; 32255 }, 32256 d(detaching) { 32257 if (detaching) { 32258 detach(if_block_anchor); 32259 } 32260 32261 if (if_block) if_block.d(detaching); 32262 } 32263 }; 32264 } 32265 32266 // (94:6) {#if cancelSubscriptionText} 32267 function create_if_block_1$7(ctx) { 32268 let tablink; 32269 let current; 32270 32271 tablink = new Tablink({ 32272 props: { 32273 text: /*cancelSubscriptionText*/ ctx[11], 32274 path: `${/*cancelSubscriptionPath*/ ctx[12]}?subscription=${/*gift*/ ctx[0].externalId}`, 32275 logDlEvent: /*func_3*/ ctx[24] 32276 } 32277 }); 32278 32279 return { 32280 c() { 32281 create_component(tablink.$$.fragment); 32282 }, 32283 m(target, anchor) { 32284 mount_component(tablink, target, anchor); 32285 current = true; 32286 }, 32287 p(ctx, dirty) { 32288 const tablink_changes = {}; 32289 if (dirty & /*cancelSubscriptionText*/ 2048) tablink_changes.text = /*cancelSubscriptionText*/ ctx[11]; 32290 if (dirty & /*cancelSubscriptionPath, gift*/ 4097) tablink_changes.path = `${/*cancelSubscriptionPath*/ ctx[12]}?subscription=${/*gift*/ ctx[0].externalId}`;
32291 if (dirty & /*logCancelSubscription, gift*/ 1048577) tablink_changes.logDlEvent = /*func_3*/ ctx[24]; 32292 tablink.$set(tablink_changes); 32293 }, 32294 i(local) { 32295 if (current) return; 32296 transition_in(tablink.$$.fragment, local); 32297 current = true; 32298 }, 32299 o(local) { 32300 transition_out(tablink.$$.fragment, local); 32301 current = false; 32302 }, 32303 d(detaching) { 32304 destroy_component(tablink, detaching); 32305 } 32306 }; 32307 } 32308 32309 // (37:4) {#each elementsOrder as element} 32310 function create_each_block$4(ctx) { 32311 let t0; 32312 let t1; 32313 let t2; 32314 let t3; 32315 let if_block4_anchor; 32316 let current; 32317 let if_block0 = /*element*/ ctx[25] === 'subscription_information' && !/*elementsHide*/ ctx[14].subscriptionInformation && create_if_block_8(ctx); 32318 let if_block1 = /*element*/ ctx[25] === 'billing_history' && !/*elementsHide*/ ctx[14].billingHistory && /*gift*/ ctx[0].status === "PENDING" && create_if_block_6$2(ctx); 32319 let if_block2 = /*element*/ ctx[25] === 'change_payment' && !/*elementsHide*/ ctx[14].changePayment && /*gift*/ ctx[0].status === "PENDING" && create_if_block_4$2(ctx); 32320 let if_block3 = /*element*/ ctx[25] === 'change_subscription' && !/*elementsHide*/ ctx[14].changeSubscription && /*gift*/ ctx[0].status === "PENDING" && create_if_block_2$5(ctx); 32321 let if_block4 = /*element*/ ctx[25] === 'cancel_subscription' && !/*elementsHide*/ ctx[14].cancelSubscription && /*gift*/ ctx[0].status === "PENDING" && create_if_block$8(ctx); 32322 32323 return { 32324 c() { 32325 if (if_block0) if_block0.c(); 32326 t0 = space(); 32327 if (if_block1) if_block1.c(); 32328 t1 = space(); 32329 if (if_block2) if_block2.c(); 32330 t2 = space(); 32331 if (if_block3) if_block3.c(); 32332 t3 = space(); 32333 if (if_block4) if_block4.c(); 32334 if_block4_anchor = empty(); 32335 }, 32336 m(target, anchor) { 32337 if (if_block0) if_block0.m(target, anchor); 32338 insert(target, t0, anchor); 32339 if (if_block1) if_block1.m(target, anchor); 32340 insert(target, t1, anchor); 32341 if (if_block2) if_block2.m(target, anchor); 32342 insert(target, t2, anchor); 32343 if (if_block3) if_block3.m(target, anchor); 32344 insert(target, t3, anchor); 32345 if (if_block4) if_block4.m(target, anchor); 32346 insert(target, if_block4_anchor, anchor); 32347 current = true; 32348 }, 32349 p(ctx, dirty) { 32350 if (/*element*/ ctx[25] === 'subscription_information' && !/*elementsHide*/ ctx[14].subscriptionInformation) { 32351 if (if_block0) { 32352 if_block0.p(ctx, dirty); 32353 } else { 32354 if_block0 = create_if_block_8(ctx); 32355 if_block0.c(); 32356 if_block0.m(t0.parentNode, t0); 32357 } 32358 } else if (if_block0) { 32359 if_block0.d(1); 32360 if_block0 = null; 32361 } 32362 32363 if (/*element*/ ctx[25] === 'billing_history' && !/*elementsHide*/ ctx[14].billingHistory && /*gift*/ ctx[0].status === "PENDING") { 32364 if (if_block1) { 32365 if_block1.p(ctx, dirty); 32366 32367 if (dirty & /*elementsOrder, elementsHide, gift*/ 49153) { 32368 transition_in(if_block1, 1); 32369 } 32370 } else { 32371 if_block1 = create_if_block_6$2(ctx); 32372 if_block1.c(); 32373 transition_in(if_block1, 1); 32374 if_block1.m(t1.parentNode, t1); 32375 } 32376 } else if (if_block1) { 32377 group_outros(); 32378 32379 transition_out(if_block1, 1, 1, () => { 32380 if_block1 = null; 32381 }); 32382 32383 check_outros(); 32384 } 32385 32386 if (/*element*/ ctx[25] === 'change_payment' && !/*elementsHide*/ ctx[14].changePayment && /*gift*/ ctx[0].status === "PENDING") { 32387 if (if_block2) { 32388 if_block2.p(ctx, dirty); 32389 32390 if (dirty & /*elementsOrder, elementsHide, gift*/ 49153) { 32391 transition_in(if_block2, 1); 32392 } 32393 } else { 32394 if_block2 = create_if_block_4$2(ctx); 32395 if_block2.c(); 32396 transition_in(if_block2, 1); 32397 if_block2.m(t2.parentNode, t2); 32398 } 32399 } else if (if_block2) { 32400 group_outros(); 32401 32402 transition_out(if_block2, 1, 1, () => { 32403 if_block2 = null; 32404 }); 32405 32406 check_outros(); 32407 } 32408 32409 if (/*element*/ ctx[25] === 'change_subscription' && !/*elementsHide*/ ctx[14].changeSubscription && /*gift*/ ctx[0].status === "PENDING") { 32410 if (if_block3) { 32411 if_block3.p(ctx, dirty); 32412 32413 if (dirty & /*elementsOrder, elementsHide, gift*/ 49153) { 32414 transition_in(if_block3, 1); 32415 } 32416 } else { 32417 if_block3 = create_if_block_2$5(ctx); 32418 if_block3.c(); 32419 transition_in(if_block3, 1); 32420 if_block3.m(t3.parentNode, t3); 32421 } 32422 } else if (if_block3) { 32423 group_outros(); 32424 32425 transition_out(if_block3, 1, 1, () => { 32426 if_block3 = null; 32427 }); 32428 32429 check_outros(); 32430 } 32431 32432 if (/*element*/ ctx[25] === 'cancel_subscription' && !/*elementsHide*/ ctx[14].cancelSubscription && /*gift*/ ctx[0].status === "PENDING") { 32433 if (if_block4) { 32434 if_block4.p(ctx, dirty); 32435
32436 if (dirty & /*elementsOrder, elementsHide, gift*/ 49153) { 32437 transition_in(if_block4, 1); 32438 } 32439 } else { 32440 if_block4 = create_if_block$8(ctx); 32441 if_block4.c(); 32442 transition_in(if_block4, 1); 32443 if_block4.m(if_block4_anchor.parentNode, if_block4_anchor); 32444 } 32445 } else if (if_block4) { 32446 group_outros(); 32447 32448 transition_out(if_block4, 1, 1, () => { 32449 if_block4 = null; 32450 }); 32451 32452 check_outros(); 32453 } 32454 }, 32455 i(local) { 32456 if (current) return; 32457 transition_in(if_block1); 32458 transition_in(if_block2); 32459 transition_in(if_block3); 32460 transition_in(if_block4); 32461 current = true; 32462 }, 32463 o(local) { 32464 transition_out(if_block1); 32465 transition_out(if_block2); 32466 transition_out(if_block3); 32467 transition_out(if_block4); 32468 current = false; 32469 }, 32470 d(detaching) { 32471 if (detaching) { 32472 detach(t0); 32473 detach(t1); 32474 detach(t2); 32475 detach(t3); 32476 detach(if_block4_anchor); 32477 } 32478 32479 if (if_block0) if_block0.d(detaching); 32480 if (if_block1) if_block1.d(detaching); 32481 if (if_block2) if_block2.d(detaching); 32482 if (if_block3) if_block3.d(detaching); 32483 if (if_block4) if_block4.d(detaching); 32484 } 32485 }; 32486 } 32487 32488 function create_fragment$b(ctx) { 32489 let div1; 32490 let t; 32491 let div0; 32492 let current; 32493 32494 function select_block_type(ctx, dirty) { 32495 if (/*gift*/ ctx[0].status === 'PENDING') return create_if_block_13; 32496 if (/*gift*/ ctx[0].status === 'REDEEMED') return create_if_block_14; 32497 } 32498 32499 let current_block_type = select_block_type(ctx); 32500 let if_block = current_block_type && current_block_type(ctx); 32501 let each_value = ensure_array_like(/*elementsOrder*/ ctx[15]); 32502 let each_blocks = []; 32503 32504 for (let i = 0; i < each_value.length; i += 1) { 32505 each_blocks[i] = create_each_block$4(get_each_context$4(ctx, each_value, i)); 32506 } 32507 32508 const out = i => transition_out(each_blocks[i], 1, 1, () => { 32509 each_blocks[i] = null; 32510 }); 32511 32512 return { 32513 c() { 32514 div1 = element("div"); 32515 if (if_block) if_block.c(); 32516 t = space(); 32517 div0 = element("div"); 32518 32519 for (let i = 0; i < each_blocks.length; i += 1) { 32520 each_blocks[i].c(); 32521 } 32522 32523 attr(div0, "class", "zephr-inner-box svelte-srvimy"); 32524 attr(div1, "class", "zephr-gift-list-box-item svelte-srvimy"); 32525 }, 32526 m(target, anchor) { 32527 insert(target, div1, anchor); 32528 if (if_block) if_block.m(div1, null); 32529 append(div1, t); 32530 append(div1, div0); 32531 32532 for (let i = 0; i < each_blocks.length; i += 1) { 32533 if (each_blocks[i]) { 32534 each_blocks[i].m(div0, null); 32535 } 32536 } 32537 32538 current = true; 32539 }, 32540 p(ctx, [dirty]) { 32541 if (current_block_type === (current_block_type = select_block_type(ctx)) && if_block) { 32542 if_block.p(ctx, dirty); 32543 } else { 32544 if (if_block) if_block.d(1); 32545 if_block = current_block_type && current_block_type(ctx); 32546 32547 if (if_block) { 32548 if_block.c(); 32549 if_block.m(div1, t); 32550 } 32551 } 32552 32553 if (dirty & /*cancelSubscriptionText, cancelSubscriptionPath, gift, logCancelSubscription, elementsOrder, elementsHide, changeSubscriptionText, changeSubscriptionPath, logChangeSubscription, changePaymentMethodText, onChangePayment, billingHistoryLink, onViewHistory, endDateText, startDateText, subscriptionTypeText, activeStatusText, pendingStatusText, giftRecipientText*/ 2097103) { 32554 each_value = ensure_array_like(/*elementsOrder*/ ctx[15]); 32555 let i; 32556 32557 for (i = 0; i < each_value.length; i += 1) { 32558 const child_ctx = get_each_context$4(ctx, each_value, i); 32559 32560 if (each_blocks[i]) { 32561 each_blocks[i].p(child_ctx, dirty); 32562 transition_in(each_blocks[i], 1); 32563 } else { 32564 each_blocks[i] = create_each_block$4(child_ctx); 32565 each_blocks[i].c(); 32566 transition_in(each_blocks[i], 1); 32567 each_blocks[i].m(div0, null); 32568 } 32569 } 32570 32571 group_outros(); 32572 32573 for (i = each_value.length; i < each_blocks.length; i += 1) { 32574 out(i); 32575 } 32576 32577 check_outros(); 32578 } 32579 }, 32580 i(local) { 32581 if (current) return; 32582 32583 for (let i = 0; i < each_value.length; i += 1) { 32584 transition_in(each_blocks[i]); 32585 } 32586 32587 current = true; 32588 }, 32589 o(local) {
32590 each_blocks = each_blocks.filter(Boolean); 32591 32592 for (let i = 0; i < each_blocks.length; i += 1) { 32593 transition_out(each_blocks[i]); 32594 } 32595 32596 current = false; 32597 }, 32598 d(detaching) { 32599 if (detaching) { 32600 detach(div1); 32601 } 32602 32603 if (if_block) { 32604 if_block.d(); 32605 } 32606 32607 destroy_each(each_blocks, detaching); 32608 } 32609 }; 32610 } 32611 32612 function instance$b($$self, $$props, $$invalidate) { 32613 let { gift } = $$props; 32614 let { giftRecipientText } = $$props; 32615 let { startDateText } = $$props; 32616 let { endDateText } = $$props; 32617 let { pendingBannerText } = $$props; 32618 let { redeemedBannerText } = $$props; 32619 let { activeStatusText } = $$props; 32620 let { pendingStatusText } = $$props; 32621 let { changeSubscriptionPath } = $$props; 32622 let { changePaymentMethodText } = $$props; 32623 let { changeSubscriptionText } = $$props; 32624 let { cancelSubscriptionText } = $$props; 32625 let { cancelSubscriptionPath } = $$props; 32626 let { subscriptionTypeText } = $$props; 32627 let { elementsHide } = $$props; 32628 let { elementsOrder = [] } = $$props; 32629 let { billingHistoryLink } = $$props; 32630 let { onViewHistory } = $$props; 32631 let { onChangePayment } = $$props; 32632 let { logChangeSubscription } = $$props; 32633 let { logCancelSubscription } = $$props; 32634 const func = () => onViewHistory(gift); 32635 const func_1 = () => onChangePayment(gift); 32636 const func_2 = () => logChangeSubscription(gift); 32637 const func_3 = () => logCancelSubscription(gift); 32638 32639 $$self.$$set = $$props => {
32640 if ('gift' in $$props) $$invalidate(0, gift = $$props.gift); 32641 if ('giftRecipientText' in $$props) $$invalidate(1, giftRecipientText = $$props.giftRecipientText); 32642 if ('startDateText' in $$props) $$invalidate(2, startDateText = $$props.startDateText); 32643 if ('endDateText' in $$props) $$invalidate(3, endDateText = $$props.endDateText); 32644 if ('pendingBannerText' in $$props) $$invalidate(4, pendingBannerText = $$props.pendingBannerText); 32645 if ('redeemedBannerText' in $$props) $$invalidate(5, redeemedBannerText = $$props.redeemedBannerText); 32646 if ('activeStatusText' in $$props) $$invalidate(6, activeStatusText = $$props.activeStatusText); 32647 if ('pendingStatusText' in $$props) $$invalidate(7, pendingStatusText = $$props.pendingStatusText); 32648 if ('changeSubscriptionPath' in $$props) $$invalidate(8, changeSubscriptionPath = $$props.changeSubscriptionPath); 32649 if ('changePaymentMethodText' in $$props) $$invalidate(9, changePaymentMethodText = $$props.changePaymentMethodText); 32650 if ('changeSubscriptionText' in $$props) $$invali
32650date(10, changeSubscriptionText = $$props.changeSubscriptionText); 32651 if ('cancelSubscriptionText' in $$props) $$invalidate(11, cancelSubscriptionText = $$props.cancelSubscriptionText); 32652 if ('cancelSubscriptionPath' in $$props) $$invalidate(12, cancelSubscriptionPath = $$props.cancelSubscriptionPath); 32653 if ('subscriptionTypeText' in $$props) $$invalidate(13, subscriptionTypeText = $$props.subscriptionTypeText); 32654 if ('elementsHide' in $$props) $$invalidate(14, elementsHide = $$props.elementsHide); 32655 if ('elementsOrder' in $$props) $$invalidate(15, elementsOrder = $$props.elementsOrder); 32656 if ('billingHistoryLink' in $$props) $$invalidate(16, billingHistoryLink = $$props.billingHistoryLink); 32657 if ('onViewHistory' in $$props) $$invalidate(17, onViewHistory = $$props.onViewHistory); 32658 if ('onChangePayment' in $$props) $$invalidate(18, onChangePayment = $$props.onChangePayment); 32659 if ('logChangeSubscription' in $$props) $$invalidate(19, logChangeSubscription = $$props.logChangeSubscription); 32660 if ('logCancelSubscription' in $$props) $$invali
32660date(20, logCancelSubscription = $$props.logCancelSubscription); 32661 }; 32662 32663 return [ 32664 gift, 32665 giftRecipientText, 32666 startDateText, 32667 endDateText, 32668 pendingBannerText, 32669 redeemedBannerText, 32670 activeStatusText, 32671 pendingStatusText, 32672 changeSubscriptionPath, 32673 changePaymentMethodText, 32674 changeSubscriptionText, 32675 cancelSubscriptionText, 32676 cancelSubscriptionPath, 32677 subscriptionTypeText, 32678 elementsHide, 32679 elementsOrder, 32680 billingHistoryLink, 32681 onViewHistory, 32682 onChangePayment, 32683 logChangeSubscription, 32684 logCancelSubscription, 32685 func, 32686 func_1, 32687 func_2, 32688 func_3 32689 ]; 32690 } 32691 32692 class GiftSubscriptionsListBoxItem extends SvelteComponent { 32693 constructor(options) { 32694 super(); 32695 32696 init(this, options, instance$b, create_fragment$b, safe_not_equal, { 32697 gift: 0, 32698 giftRecipientText: 1, 32699 startDateText: 2, 32700 endDateText: 3, 32701 pendingBannerText: 4, 32702 redeemedBannerText: 5, 32703 activeStatusText: 6, 32704 pendingStatusText: 7, 32705 changeSubscriptionPath: 8, 32706 changePaymentMethodText: 9, 32707 changeSubscriptionText: 10, 32708 cancelSubscriptionText: 11, 32709 cancelSubscriptionPath: 12, 32710 subscriptionTypeText: 13, 32711 elementsHide: 14, 32712 elementsOrder: 15, 32713 billingHistoryLink: 16, 32714 onViewHistory: 17, 32715 onChangePayment: 18, 32716 logChangeSubscription: 19, 32717 logCancelSubscription: 20 32718 }); 32719 } 32720 } 32721 32722 /* src/components/elements/giftSubscriptionsList/GiftSubscriptionsList.svelte generated by Svelte v4.2.12 */ 32723 32724 function get_each_context$3(ctx, list, i) { 32725 const child_ctx = ctx.slice(); 32726 child_ctx[24] = list[i]; 32727 return child_ctx; 32728 } 32729 32730 // (36:2) {#if loading} 32731 function create_if_block_2$4(ctx) { 32732 let spinner; 32733 let current; 32734 spinner = new Spinner({}); 32735 32736 return { 32737 c() { 32738 create_component(spinner.$$.fragment); 32739 }, 32740 m(target, anchor) { 32741 mount_component(spinner, target, anchor); 32742 current = true; 32743 }, 32744 i(local) { 32745 if (current) return; 32746 transition_in(spinner.$$.fragment, local); 32747 current = true; 32748 }, 32749 o(local) { 32750 transition_out(spinner.$$.fragment, local); 32751 current = false; 32752 }, 32753 d(detaching) { 32754 destroy_component(spinner, detaching); 32755 } 32756 }; 32757 } 32758 32759 // (40:2) {#if !loading && !gifts.length} 32760 function create_if_block_1$6(ctx) { 32761 let div; 32762 let raw_value = (/*noSubscriptionsMessage*/ ctx[1] || /*emptyMessage*/ ctx[0]) + ""; 32763 32764 return { 32765 c() { 32766 div = element("div"); 32767 }, 32768 m(target, anchor) { 32769 insert(target, div, anchor); 32770 div.innerHTML = raw_value; 32771 }, 32772 p(ctx, dirty) { 32773 if (dirty & /*noSubscriptionsMessage, emptyMessage*/ 3 && raw_value !== (raw_value = (/*noSubscriptionsMessage*/ ctx[1] || /*emptyMessage*/ ctx[0]) + "")) div.innerHTML = raw_value; }, 32774 d(detaching) { 32775 if (detaching) { 32776 detach(div); 32777 } 32778 } 32779 }; 32780 } 32781 32782 // (46:2) {#if !loading && gifts.length > 0} 32783 function create_if_block$7(ctx) { 32784 let each_1_anchor; 32785 let current; 32786 let each_value = ensure_array_like(/*gifts*/ ctx[3]); 32787 let each_blocks = []; 32788 32789 for (let i = 0; i < each_value.length; i += 1) { 32790 each_blocks[i] = create_each_block$3(get_each_context$3(ctx, each_value, i)); 32791 } 32792 32793 const out = i => transition_out(each_blocks[i], 1, 1, () => { 32794 each_blocks[i] = null; 32795 }); 32796 32797 return { 32798 c() { 32799 for (let i = 0; i < each_blocks.length; i += 1) { 32800 each_blocks[i].c(); 32801 } 32802 32803 each_1_anchor = empty(); 32804 }, 32805 m(target, anchor) { 32806 for (let i = 0; i < each_blocks.length; i += 1) { 32807 if (each_blocks[i]) { 32808 each_blocks[i].m(target, anchor); 32809 } 32810 } 32811 32812 insert(target, each_1_anchor, anchor); 32813 current = true; 32814 }, 32815 p(ctx, dirty) { 32816 if (dirty & /*gifts, giftRecipientText, startDateText, endDateText, pendingBannerText, redeemedBannerText, activeStatusText, pendingStatusText, onChangePayment, logChangeSubscription, logCancelSubscription, onViewHistory, changePaymentMethodText, changeSubscriptionText, cancelSubscriptionText, changeSubscriptionPath, cancelSubscriptionPath, elementsHide, subscriptionTypeText, elementsOrder, billingHistoryLink*/ 16777208) { 32817 each_value = ensure_array_like(/*gifts*/ ctx[3]); 32818 let i; 32819 32820 for (i = 0; i < each_value.length; i += 1) { 32821 const child_ctx = get_each_context$3(ctx, each_value, i); 32822 32823 if (each_blocks[i]) { 32824 each_blocks[i].p(child_ctx, dirty); 32825 transition_in(each_blocks[i], 1); 32826 } else { 32827 each_blocks[i] = create_each_block$3(child_ctx); 32828 each_blocks[i].c(); 32829 transition_in(each_blocks[i], 1); 32830 each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); 32831 } 32832 } 32833 32834 group_outros(); 32835 32836 for (i = each_value.length; i < each_blocks.length; i += 1) { 32837 out(i); 32838 } 32839 32840 check_outros(); 32841 } 32842 }, 32843 i(local) { 32844 if (current) return; 32845 32846 for (let i = 0; i < each_value.length; i += 1) { 32847 transition_in(each_blocks[i]); 32848 } 32849 32850 current = true; 32851 }, 32852 o(local) {
32853 each_blocks = each_blocks.filter(Boolean); 32854 32855 for (let i = 0; i < each_blocks.length; i += 1) { 32856 transition_out(each_blocks[i]); 32857 } 32858 32859 current = false; 32860 }, 32861 d(detaching) { 32862 if (detaching) { 32863 detach(each_1_anchor); 32864 } 32865 32866 destroy_each(each_blocks, detaching); 32867 } 32868 }; 32869 } 32870 32871 // (47:4) {#each gifts as gift} 32872 function create_each_block$3(ctx) { 32873 let giftsubscriptionslistboxitem; 32874 let current; 32875 32876 giftsubscriptionslistboxitem = new GiftSubscriptionsListBoxItem({ 32877 props: { 32878 gift: /*gift*/ ctx[24], 32879 giftRecipientText: /*giftRecipientText*/ ctx[14], 32880 startDateText: /*startDateText*/ ctx[15], 32881 endDateText: /*endDateText*/ ctx[16], 32882 pendingBannerText: /*pendingBannerText*/ ctx[18], 32883 redeemedBannerText: /*redeemedBannerText*/ ctx[19], 32884 activeStatusText: /*activeStatusText*/ ctx[20], 32885 pendingStatusText: /*pendingStatusText*/ ctx[21], 32886 onChangePayment: /*onChangePayment*/ ctx[6], 32887 logChangeSubscription: /*logChangeSubscription*/ ctx[7], 32888 logCancelSubscription: /*logCancelSubscription*/ ctx[8], 32889 onViewHistory: /*onViewHistory*/ ctx[9], 32890 changePaymentMethodText: /*changePaymentMethodText*/ ctx[10], 32891 changeSubscriptionText: /*changeSubscriptionText*/ ctx[11], 32892 cancelSubscriptionText: /*cancelSubscriptionText*/ ctx[12], 32893 changeSubscriptionPath: /*changeSubscriptionPath*/ ctx[5], 32894 cancelSubscriptionPath: /*cancelSubscriptionPath*/ ctx[4], 32895 elementsHide: /*elementsHide*/ ctx[23], 32896 subscriptionTypeText: /*subscriptionTypeText*/ ctx[17], 32897 elementsOrder: /*elementsOrder*/ ctx[22], 32898 billingHistoryLink: /*billingHistoryLink*/ ctx[13] 32899 } 32900 }); 32901 32902 return { 32903 c() { 32904 create_component(giftsubscriptionslistboxitem.$$.fragment); 32905 }, 32906 m(target, anchor) { 32907 mount_component(giftsubscriptionslistboxitem, target, anchor); 32908 current = true; 32909 }, 32910 p(ctx, dirty) { 32911 const giftsubscriptionslistboxitem_changes = {}; 32912 if (dirty & /*gifts*/ 8) giftsubscriptionslistboxitem_changes.gift = /*gift*/ ctx[24]; 32913 if (dirty & /*giftRecipientText*/ 16384) giftsubscriptionslistboxitem_changes.giftRecipientText = /*giftRecipientText*/ ctx[14]; 32914 if (dirty & /*startDateText*/ 32768) giftsubscriptionslistboxitem_changes.startDateText = /*startDateText*/ ctx[15]; 32915 if (dirty & /*endDateText*/ 65536) giftsubscriptionslistboxitem_changes.endDateText = /*endDateText*/ ctx[16]; 32916 if (dirty & /*pendingBannerText*/ 262144) giftsubscriptionslistboxitem_changes.pendingBannerText = /*pendingBannerText*/ ctx[18]; 32917 if (dirty & /*redeemedBannerText*/ 524288) giftsubscriptionslistboxitem_changes.redeemedBannerText = /*redeemedBannerText*/ ctx[19]; 32918 if (dirty & /*activeStatusText*/ 1048576) giftsubscriptionslistboxitem_changes.activeStatusText = /*activeStatusText*/ ctx[20]; 32919 if (dirty & /*pendingStatusText*/ 2097152) giftsubscriptionslistboxitem_changes.pendingStatusText = /*pendingStatusText*/ ctx[21]; 32920 if (dirty & /*onChangePayment*/ 64) giftsubscriptionslistboxitem_changes.onChangePayment = /*onChangePayment*/ ctx[6]; 32921 if (dirty & /*logChangeSubscription*/ 128) giftsubscriptionslistboxitem_changes.logChangeSubscription = /*logChangeSubscription*/ ctx[7]; 32922 if (dirty & /*logCancelSubscription*/ 256) giftsubscriptionslistboxitem_changes.logCancelSubscription = /*logCancelSubscription*/ ctx[8]; 32923 if (dirty & /*onViewHistory*/ 512) giftsubscriptionslistboxitem_changes.onViewHistory = /*onViewHistory*/ ctx[9]; 32924 if (dirty & /*changePaymentMethodText*/ 1024) giftsubscriptionslistboxitem_changes.changePaymentMethodText = /*changePaymentMethodText*/ ctx[10]; 32925 if (dirty & /*changeSubscriptionText*/ 2048) giftsubscriptionslistboxitem_changes.changeSubscriptionText = /*changeSubscriptionText*/ ctx[11]; 32926 if (dirty & /*cancelSubscriptionText*/ 4096) giftsubscriptionslistboxitem_changes.cancelSubscriptionText = /*cancelSubscriptionText*/ ctx[12]; 32927 if (dirty & /*changeSubscriptionPath*/ 32) giftsubscriptionslistboxitem_changes.changeSubscriptionPath = /*changeSubscriptionPath*/ ctx[5]; 32928 if (dirty & /*cancelSubscriptionPath*/ 16) giftsubscriptionslistboxitem_changes.cancelSubscriptionPath = /*cancelSubscriptionPath*/ ctx[4];
32929 if (dirty & /*elementsHide*/ 8388608) giftsubscriptionslistboxitem_changes.elementsHide = /*elementsHide*/ ctx[23]; 32930 if (dirty & /*subscriptionTypeText*/ 131072) giftsubscriptionslistboxitem_changes.subscriptionTypeText = /*subscriptionTypeText*/ ctx[17]; 32931 if (dirty & /*elementsOrder*/ 4194304) giftsubscriptionslistboxitem_changes.elementsOrder = /*elementsOrder*/ ctx[22]; 32932 if (dirty & /*billingHistoryLink*/ 8192) giftsubscriptionslistboxitem_changes.billingHistoryLink = /*billingHistoryLink*/ ctx[13]; 32933 giftsubscriptionslistboxitem.$set(giftsubscriptionslistboxitem_changes); 32934 }, 32935 i(local) { 32936 if (current) return; 32937 transition_in(giftsubscriptionslistboxitem.$$.fragment, local); 32938 current = true; 32939 }, 32940 o(local) { 32941 transition_out(giftsubscriptionslistboxitem.$$.fragment, local); 32942 current = false; 32943 }, 32944 d(detaching) { 32945 destroy_component(giftsubscriptionslistboxitem, detaching); 32946 } 32947 }; 32948 } 32949 32950 function create_fragment$a(ctx) { 32951 let div; 32952 let t0; 32953 let t1; 32954 let current; 32955 let if_block0 = /*loading*/ ctx[2] && create_if_block_2$4(); 32956 let if_block1 = !/*loading*/ ctx[2] && !/*gifts*/ ctx[3].length && create_if_block_1$6(ctx); 32957 let if_block2 = !/*loading*/ ctx[2] && /*gifts*/ ctx[3].length > 0 && create_if_block$7(ctx); 32958 32959 return { 32960 c() { 32961 div = element("div"); 32962 if (if_block0) if_block0.c(); 32963 t0 = space(); 32964 if (if_block1) if_block1.c(); 32965 t1 = space(); 32966 if (if_block2) if_block2.c(); 32967 attr(div, "class", "subscriptions-list-container svelte-ldb1rq"); 32968 }, 32969 m(target, anchor) { 32970 insert(target, div, anchor); 32971 if (if_block0) if_block0.m(div, null); 32972 append(div, t0); 32973 if (if_block1) if_block1.m(div, null); 32974 append(div, t1); 32975 if (if_block2) if_block2.m(div, null); 32976 current = true; 32977 }, 32978 p(ctx, [dirty]) { 32979 if (/*loading*/ ctx[2]) { 32980 if (if_block0) { 32981 if (dirty & /*loading*/ 4) { 32982 transition_in(if_block0, 1); 32983 } 32984 } else { 32985 if_block0 = create_if_block_2$4(); 32986 if_block0.c(); 32987 transition_in(if_block0, 1); 32988 if_block0.m(div, t0); 32989 } 32990 } else if (if_block0) { 32991 group_outros(); 32992 32993 transition_out(if_block0, 1, 1, () => { 32994 if_block0 = null; 32995 }); 32996 32997 check_outros(); 32998 } 32999 33000 if (!/*loading*/ ctx[2] && !/*gifts*/ ctx[3].length) { 33001 if (if_block1) { 33002 if_block1.p(ctx, dirty); 33003 } else { 33004 if_block1 = create_if_block_1$6(ctx); 33005 if_block1.c(); 33006 if_block1.m(div, t1); 33007 } 33008 } else if (if_block1) { 33009 if_block1.d(1); 33010 if_block1 = null; 33011 } 33012 33013 if (!/*loading*/ ctx[2] && /*gifts*/ ctx[3].length > 0) { 33014 if (if_block2) { 33015 if_block2.p(ctx, dirty); 33016 33017 if (dirty & /*loading, gifts*/ 12) { 33018 transition_in(if_block2, 1); 33019 } 33020 } else { 33021 if_block2 = create_if_block$7(ctx); 33022 if_block2.c(); 33023 transition_in(if_block2, 1); 33024 if_block2.m(div, null); 33025 } 33026 } else if (if_block2) { 33027 group_outros(); 33028 33029 transition_out(if_block2, 1, 1, () => { 33030 if_block2 = null; 33031 }); 33032 33033 check_outros(); 33034 } 33035 }, 33036 i(local) { 33037 if (current) return; 33038 transition_in(if_block0); 33039 transition_in(if_block2); 33040 current = true; 33041 }, 33042 o(local) { 33043 transition_out(if_block0); 33044 transition_out(if_block2); 33045 current = false; 33046 }, 33047 d(detaching) { 33048 if (detaching) { 33049 detach(div); 33050 } 33051 33052 if (if_block0) if_block0.d(); 33053 if (if_block1) if_block1.d(); 33054 if (if_block2) if_block2.d(); 33055 } 33056 }; 33057 } 33058 33059 function instance$a($$self, $$props, $$invalidate) { 33060 let { emptyMessage } = $$props; 33061 let { noSubscriptionsMessage } = $$props; 33062 let { loading } = $$props; 33063 let { gifts = [] } = $$props; 33064 let { cancelSubscriptionPath } = $$props; 33065 let { changeSubscriptionPath } = $$props; 33066 let { onChangePayment } = $$props; 33067 let { logChangeSubscription } = $$props; 33068 let { logCancelSubscription } = $$props; 33069 let { onViewHistory } = $$props; 33070 let { changePaymentMethodText } = $$props; 33071 let { changeSubscriptionText } = $$props; 33072 let { cancelSubscriptionText } = $$props; 33073 let { billingHistoryLink } = $$props; 33074 let { giftRecipientText } = $$props; 33075 let { startDateText } = $$props; 33076 let { endDateText } = $$props; 33077 let { subscriptionTypeText } = $$props; 33078 let { pendingBannerText } = $$props; 33079 let { redeemedBannerText } = $$props; 33080 let { activeStatusText } = $$props; 33081 let { pendingStatusText } = $$props; 33082 let { elementsOrder = [] } = $$props; 33083 33084 let { elementsHide = { 33085 subscriptionInformation: undefined, 33086 changePayment: undefined, 33087 changeSubscription: undefined, 33088 cancelSubscription: undefined, 33089 billingHistory: undefined 33090 } } = $$props; 33091 33092 $$self.$$set = $$props => {
33093 if ('emptyMessage' in $$props) $$invalidate(0, emptyMessage = $$props.emptyMessage); 33094 if ('noSubscriptionsMessage' in $$props) $$invalidate(1, noSubscriptionsMessage = $$props.noSubscriptionsMessage); 33095 if ('loading' in $$props) $$invalidate(2, loading = $$props.loading); 33096 if ('gifts' in $$props) $$invalidate(3, gifts = $$props.gifts); 33097 if ('cancelSubscriptionPath' in $$props) $$invalidate(4, cancelSubscriptionPath = $$props.cancelSubscriptionPath); 33098 if ('changeSubscriptionPath' in $$props) $$invalidate(5, changeSubscriptionPath = $$props.changeSubscriptionPath); 33099 if ('onChangePayment' in $$props) $$invalidate(6, onChangePayment = $$props.onChangePayment); 33100 if ('logChangeSubscription' in $$props) $$invalidate(7, logChangeSubscription = $$props.logChangeSubscription); 33101 if ('logCancelSubscription' in $$props) $$invalidate(8, logCancelSubscription = $$props.logCancelSubscription); 33102 if ('onViewHistory' in $$props) $$invalidate(9, onViewHistory = $$props.onViewHistory); 33103 if ('changePaymentMethodText' in $$props) $$invali
33103date(10, changePaymentMethodText = $$props.changePaymentMethodText); 33104 if ('changeSubscriptionText' in $$props) $$invalidate(11, changeSubscriptionText = $$props.changeSubscriptionText); 33105 if ('cancelSubscriptionText' in $$props) $$invalidate(12, cancelSubscriptionText = $$props.cancelSubscriptionText); 33106 if ('billingHistoryLink' in $$props) $$invalidate(13, billingHistoryLink = $$props.billingHistoryLink); 33107 if ('giftRecipientText' in $$props) $$invalidate(14, giftRecipientText = $$props.giftRecipientText); 33108 if ('startDateText' in $$props) $$invalidate(15, startDateText = $$props.startDateText); 33109 if ('endDateText' in $$props) $$invalidate(16, endDateText = $$props.endDateText); 33110 if ('subscriptionTypeText' in $$props) $$invalidate(17, subscriptionTypeText = $$props.subscriptionTypeText); 33111 if ('pendingBannerText' in $$props) $$invalidate(18, pendingBannerText = $$props.pendingBannerText); 33112 if ('redeemedBannerText' in $$props) $$invalidate(19, redeemedBannerText = $$props.redeemedBannerText); 33113 if ('activeStatusText' in $$props) $$invali
33113date(20, activeStatusText = $$props.activeStatusText); 33114 if ('pendingStatusText' in $$props) $$invalidate(21, pendingStatusText = $$props.pendingStatusText); 33115 if ('elementsOrder' in $$props) $$invalidate(22, elementsOrder = $$props.elementsOrder); 33116 if ('elementsHide' in $$props) $$invalidate(23, elementsHide = $$props.elementsHide); 33117 }; 33118 33119 return [ 33120 emptyMessage, 33121 noSubscriptionsMessage, 33122 loading, 33123 gifts, 33124 cancelSubscriptionPath, 33125 changeSubscriptionPath, 33126 onChangePayment, 33127 logChangeSubscription, 33128 logCancelSubscription, 33129 onViewHistory, 33130 changePaymentMethodText, 33131 changeSubscriptionText, 33132 cancelSubscriptionText, 33133 billingHistoryLink, 33134 giftRecipientText, 33135 startDateText, 33136 endDateText, 33137 subscriptionTypeText, 33138 pendingBannerText, 33139 redeemedBannerText, 33140 activeStatusText, 33141 pendingStatusText, 33142 elementsOrder, 33143 elementsHide 33144 ]; 33145 } 33146 33147 class GiftSubscriptionsList extends SvelteComponent { 33148 constructor(options) { 33149 super(); 33150 33151 init(this, options, instance$a, create_fragment$a, safe_not_equal, { 33152 emptyMessage: 0, 33153 noSubscriptionsMessage: 1, 33154 loading: 2, 33155 gifts: 3, 33156 cancelSubscriptionPath: 4, 33157 changeSubscriptionPath: 5, 33158 onChangePayment: 6, 33159 logChangeSubscription: 7, 33160 logCancelSubscription: 8, 33161 onViewHistory: 9, 33162 changePaymentMethodText: 10, 33163 changeSubscriptionText: 11, 33164 cancelSubscriptionText: 12, 33165 billingHistoryLink: 13, 33166 giftRecipientText: 14, 33167 startDateText: 15, 33168 endDateText: 16, 33169 subscriptionTypeText: 17, 33170 pendingBannerText: 18, 33171 redeemedBannerText: 19, 33172 activeStatusText: 20, 33173 pendingStatusText: 21, 33174 elementsOrder: 22, 33175 elementsHide: 23 33176 }); 33177 } 33178 } 33179 33180 const giftSubscriptionsListFactory = { 33181 matches: (sectionElement, _form, _currentPart, _currentSection) => sectionElement.type === elementTypes.GIFT_SUBSCRIPTIONS_LIST, 33182 create: (form, formState, formActions, elementConfig) => { 33183 // Get all gift subscriptions from form state 33184 const giftSubscriptions = formState.giftSubscriptions || []; 33185 // filter to only show sent gifts (where user is purchaser) 33186 const activeGifts = giftSubscriptions.filter(gift => gift.is_purchaser === true); 33187 const logEditSubscription = (gift) => { 33188 logDataLayerEvent(form, 'zephr_form_subscription_change_clicked', { 33189 productId: gift.subscription_type || 'gift', 33190 planId: gift.subscription_number || gift.gift_code || '' 33191 }); 33192 }; 33193 const logCancelSubscription = (gift) => { 33194 logDataLayerEvent(form, 'zephr_form_cancel_subscription_clicked', { 33195 productId: gift.subscription_type || 'gift', 33196 planId: gift.subscription_number || gift.gift_code || '' 33197 }); 33198 }; 33199 // Create elements hide object to match SubscriptionElementsHide 33200 const elementsHide = { 33201 subscriptionInformation: elementConfig?.hideSubscriptionInformation, 33202 changePayment: elementConfig?.hideChangePayment, 33203 changeSubscription: elementConfig?.hideChangeSubscription, 33204 cancelSubscription: elementConfig?.hideCancelSubscription, 33205 suspendResumeSubscription: elementConfig?.hideSuspendResumeSubscription, 33206 billingHistory: elementConfig?.hideBillingHistory, 33207 subscriptionCustomFields: elementConfig?.hideSubscriptionCustomFields, 33208 updateBillToContact: elementConfig?.hideUpdateBillToContact 33209 }; 33210 const cancelSubscriptionPath = elementConfig.cancelSubscriptionPath || ''; 33211 const changePaymentPath = ''; // Default empty string if not available in config 33212 return { 33213 component: GiftSubscriptionsList, 33214 props: { 33215 isPastSubscriptions: elementConfig.isPastSubscriptions, 33216 billingHistoryText: elementConfig.billingHistoryText, 33217 billingHistoryLink: elementConfig.billingHistoryLink, 33218 changeSubscriptionPath: elementConfig.changeSubscriptionPath, 33219 noSubscriptionsMessage: elementConfig.noSubscriptionsMessage || elementConfig.emptyMessage, 33220 emptyMessage: elementConfig.emptyMessage, 33221 loading: !formState.giftSubscriptions || formState.loadingGiftSubscriptions, 33222 gifts: activeGifts, 33223 changePaymentPath, 33224 cancelSubscriptionPath, 33225 changePaymentMethodText: elementConfig.changePaymentMethodText, 33226 changeSubscriptionText: elementConfig.changeSubscriptionText, 33227 cancelSubscriptionText: elementConfig.cancelSubscriptionText, 33228 giftRecipientText: elementConfig.giftRecipientText, 33229 startDateText: elementConfig.startDateText, 33230 endDateText: elementConfig.endDateText,
33231 pendingBannerText: elementConfig.pendingBannerText, 33232 redeemedBannerText: elementConfig.redeemedBannerText, 33233 activeStatusText: elementConfig.activeStatusText, 33234 pendingStatusText: elementConfig.pendingStatusText, 33235 subscriptionTypeText: elementConfig.subscriptionTypeText, 33236 elementsOrder: elementConfig.elementsOrder, 33237 elementsHide, 33238 onSelectGift: (gift) => { 33239 formActions.updateFormState({ 33240 selectedGiftSubscription: gift 33241 }); 33242 formActions.jumpToPartStart('gift-details'); 33243 }, 33244 onEditSubscription: logEditSubscription, 33245 onViewHistory: (subscription) => { 33246 formActions.updateFormState({ 33247 selectedSubscription: subscription, 33248 selectedGiftSubscription: subscription 33249 }); 33250 formActions.jumpToPartStart('billing-history'); 33251 logDataLayerEvent(form, 'zephr_form_billing_history_view', null); 33252 }, 33253 onCancelSubscription: logCancelSubscription, 33254 onChangePayment: (subscription) => { 33255 formActions.updateFormState({ 33256 selectedSubscription: subscription, 33257 selectedGiftSubscription: subscription 33258 }); 33259 logDataLayerEvent(form, 'zephr_form_button_press', { 33260 sectionId: formState.currentSection.type, 33261 buttonType: 'SUBMIT' 33262 }); 33263 formActions.completeSection(); 33264 }, 33265 logChangeSubscription: (subscription) => { 33266 logDataLayerEvent(form, 'zephr_form_subscription_change_clicked', { 33267 productId: subscription.productId, 33268 planId: subscription.externalId 33269 }); 33270 }, 33271 logCancelSubscription: (subscription) => { 33272 logDataLayerEvent(form, 'zephr_form_cancel_subscription_clicked', { 33273 productId: subscription.productId, 33274 planId: subscription.externalId 33275 }); 33276 }, 33277 } 33278 }; 33279 } 33280 }; 33281 33282 /* src/components/elements/giftToggle/GiftToggle.svelte generated by Svelte v4.2.12 */ 33283 33284 function create_fragment$9(ctx) { 33285 let div; 33286 let checkbox; 33287 let current; 33288 33289 checkbox = new Checkbox({ 33290 props: { 33291 id: "gift-toggle-checkbox", 33292 name: "gift-toggle", 33293 label: /*config*/ ctx[0]?.label || '', 33294 value: "true", 33295 checked: /*checked*/ ctx[1], 33296 disabled: /*disabled*/ ctx[2], 33297 required: false 33298 } 33299 }); 33300 33301 checkbox.$on("change", /*handleChange*/ ctx[3]); 33302 33303 return { 33304 c() { 33305 div = element("div"); 33306 create_component(checkbox.$$.fragment); 33307 attr(div, "class", "zephr-form-gift-toggle svelte-93167f"); 33308 }, 33309 m(target, anchor) { 33310 insert(target, div, anchor); 33311 mount_component(checkbox, div, null); 33312 current = true; 33313 }, 33314 p(ctx, [dirty]) { 33315 const checkbox_changes = {}; 33316 if (dirty & /*config*/ 1) checkbox_changes.label = /*config*/ ctx[0]?.label || ''; 33317 if (dirty & /*checked*/ 2) checkbox_changes.checked = /*checked*/ ctx[1]; 33318 if (dirty & /*disabled*/ 4) checkbox_changes.disabled = /*disabled*/ ctx[2]; 33319 checkbox.$set(checkbox_changes); 33320 }, 33321 i(local) { 33322 if (current) return; 33323 transition_in(checkbox.$$.fragment, local); 33324 current = true; 33325 }, 33326 o(local) { 33327 transition_out(checkbox.$$.fragment, local); 33328 current = false; 33329 }, 33330 d(detaching) { 33331 if (detaching) { 33332 detach(div); 33333 } 33334 33335 destroy_component(checkbox); 33336 } 33337 }; 33338 } 33339 33340 function instance$9($$self, $$props, $$invalidate) { 33341 let { config } = $$props; 33342 let { checked = false } = $$props; 33343 let { disabled = false } = $$props; 33344 let { onChange } = $$props; 33345 33346 const handleChange = event => { 33347 const isChecked = event.detail; 33348 onChange(isChecked); 33349 }; 33350 33351 $$self.$$set = $$props => {
33352 if ('config' in $$props) $$invalidate(0, config = $$props.config); 33353 if ('checked' in $$props) $$invalidate(1, checked = $$props.checked); 33354 if ('disabled' in $$props) $$invalidate(2, disabled = $$props.disabled); 33355 if ('onChange' in $$props) $$invalidate(4, onChange = $$props.onChange); 33356 }; 33357 33358 return [config, checked, disabled, handleChange, onChange]; 33359 } 33360 33361 class GiftToggle extends SvelteComponent { 33362 constructor(options) { 33363 super(); 33364 33365 init(this, options, instance$9, create_fragment$9, safe_not_equal, { 33366 config: 0, 33367 checked: 1, 33368 disabled: 2, 33369 onChange: 4 33370 }); 33371 } 33372 } 33373 33374 const giftToggleFactory = { 33375 matches: (sectionElement) => sectionElement.type === elementTypes.GIFT_TOGGLE, 33376 create: (form, formState, formActions, elementConfig) => { 33377 // Only show if enabled 33378 if (!elementConfig.enabled) { 33379 return null; 33380 } 33381 const handleToggleChange = (isChecked) => { 33382 const previousIsGiftForm = formState.isGiftForm; 33383 formActions.updateFormState({ 33384 isGiftForm: isChecked 33385 }); 33386 if (!isChecked && previousIsGiftForm) { 33387 // When deselecting gift mode, only navigate if we're on gift-specific sections 33388 if (formState.currentSection.type === 'recipient_details' && formState.giftTogglePreviousSection) { 33389 // If on recipient details, go back to where they were before enabling gift mode 33390 formActions.jumpToSection(formState.giftTogglePreviousSection); 33391 } 33392 // If on any other section (email, password, payment), stay on current section 33393 // Clear the stored section 33394 formActions.updateFormState({ 33395 giftTogglePreviousSection: undefined 33396 }); 33397 } 33398 else if (isChecked && !previousIsGiftForm) { 33399 // When enabling gift mode, always store current section (update it each time) 33400 formActions.updateFormState({ 33401 giftTogglePreviousSection: formState.currentSection.type 33402 }); 33403 // Check if recipient details are valid before jumping 33404 const recipientDetailsElementTypes = [ 33405 elementTypes.RECIPIENT_NAME, 33406 elementTypes.RECIPIENT_EMAIL, 33407 elementTypes.RECIPIENT_ADDRESS, 33408 elementTypes.RECIPIENT_MESSAGE 33409 ]; 33410 // Check if all recipient details elements are valid 33411 const recipientDetailsValid = recipientDetailsElementTypes.every(elementType => { 33412 const elementValidity = formState.elementValidity.find(e => e.elementType === elementType && 33413 e.sectionType === 'recipient_details'); 33414 return elementValidity ? elementValidity.isValid : false; 33415 }); 33416 // Only jump to recipient details if they are not valid 33417 if (!recipientDetailsValid) { 33418 formActions.jumpToSection('recipient_details'); 33419 } 33420 // If recipient details are valid, stay on current step 33421 } 33422 logDataLayerEvent(form, 'zephr_form_input_change', { 33423 field: 'gift-toggle', 33424 inputName: 'gift-toggle-checkbox', 33425 sectionId: formState.currentSection.type, 33426 }); 33427 }; 33428 return { 33429 component: GiftToggle, 33430 props: { 33431 config: elementConfig, 33432 checked: formState.isGiftForm || false, 33433 disabled: formState.isBusy || formState.paymentProviderFormBusy || false, 33434 onChange: handleToggleChange, 33435 }, 33436 isValid: true, 33437 }; 33438 }, 33439 }; 33440 33441 /* src/components/elements/giftFutureDateToggle/GiftFutureDateToggle.svelte generated by Svelte v4.2.12 */ 33442 33443 function create_if_block$6(ctx) { 33444 let p; 33445 let t_value = /*config*/ ctx[0].description + ""; 33446 let t; 33447 33448 return { 33449 c() { 33450 p = element("p"); 33451 t = text(t_value); 33452 attr(p, "class", "zephr-form-gift-future-date-toggle-description svelte-c9nudz"); 33453 }, 33454 m(target, anchor) { 33455 insert(target, p, anchor); 33456 append(p, t); 33457 }, 33458 p(ctx, dirty) {
33459 if (dirty & /*config*/ 1 && t_value !== (t_value = /*config*/ ctx[0].description + "")) set_data(t, t_value); 33460 }, 33461 d(detaching) { 33462 if (detaching) { 33463 detach(p); 33464 } 33465 } 33466 }; 33467 } 33468 33469 function create_fragment$8(ctx) { 33470 let div; 33471 let checkbox; 33472 let t; 33473 let current; 33474 33475 checkbox = new Checkbox({ 33476 props: { 33477 id: "gift-future-date-toggle-checkbox", 33478 name: "gift-future-date-toggle", 33479 label: /*config*/ ctx[0]?.label || '', 33480 value: "true", 33481 checked: /*checked*/ ctx[1], 33482 disabled: /*disabled*/ ctx[2], 33483 required: false 33484 } 33485 }); 33486 33487 checkbox.$on("change", /*handleChange*/ ctx[3]); 33488 let if_block = /*config*/ ctx[0]?.description && create_if_block$6(ctx); 33489 33490 return { 33491 c() { 33492 div = element("div"); 33493 create_component(checkbox.$$.fragment); 33494 t = space(); 33495 if (if_block) if_block.c(); 33496 attr(div, "class", "zephr-form-gift-future-date-toggle svelte-c9nudz"); 33497 }, 33498 m(target, anchor) { 33499 insert(target, div, anchor); 33500 mount_component(checkbox, div, null); 33501 append(div, t); 33502 if (if_block) if_block.m(div, null); 33503 current = true; 33504 }, 33505 p(ctx, [dirty]) { 33506 const checkbox_changes = {}; 33507 if (dirty & /*config*/ 1) checkbox_changes.label = /*config*/ ctx[0]?.label || ''; 33508 if (dirty & /*checked*/ 2) checkbox_changes.checked = /*checked*/ ctx[1]; 33509 if (dirty & /*disabled*/ 4) checkbox_changes.disabled = /*disabled*/ ctx[2]; 33510 checkbox.$set(checkbox_changes); 33511 33512 if (/*config*/ ctx[0]?.description) { 33513 if (if_block) { 33514 if_block.p(ctx, dirty); 33515 } else { 33516 if_block = create_if_block$6(ctx); 33517 if_block.c(); 33518 if_block.m(div, null); 33519 } 33520 } else if (if_block) { 33521 if_block.d(1); 33522 if_block = null; 33523 } 33524 }, 33525 i(local) { 33526 if (current) return; 33527 transition_in(checkbox.$$.fragment, local); 33528 current = true; 33529 }, 33530 o(local) { 33531 transition_out(checkbox.$$.fragment, local); 33532 current = false; 33533 }, 33534 d(detaching) { 33535 if (detaching) { 33536 detach(div); 33537 } 33538 33539 destroy_component(checkbox); 33540 if (if_block) if_block.d(); 33541 } 33542 }; 33543 } 33544 33545 function instance$8($$self, $$props, $$invalidate) { 33546 let { config } = $$props; 33547 let { checked = false } = $$props; 33548 let { disabled = false } = $$props; 33549 let { onChange } = $$props; 33550 33551 const handleChange = event => { 33552 const isChecked = event.detail; 33553 onChange(isChecked); 33554 }; 33555 33556 $$self.$$set = $$props => {
33557 if ('config' in $$props) $$invalidate(0, config = $$props.config); 33558 if ('checked' in $$props) $$invalidate(1, checked = $$props.checked); 33559 if ('disabled' in $$props) $$invalidate(2, disabled = $$props.disabled); 33560 if ('onChange' in $$props) $$invalidate(4, onChange = $$props.onChange); 33561 }; 33562 33563 return [config, checked, disabled, handleChange, onChange]; 33564 } 33565 33566 class GiftFutureDateToggle extends SvelteComponent { 33567 constructor(options) { 33568 super(); 33569 33570 init(this, options, instance$8, create_fragment$8, safe_not_equal, { 33571 config: 0, 33572 checked: 1, 33573 disabled: 2, 33574 onChange: 4 33575 }); 33576 } 33577 } 33578 33579 const giftFutureDateToggleFactory = { 33580 matches: (sectionElement) => sectionElement.type === elementTypes.GIFT_FUTURE_DATE_TOGGLE, 33581 create: (form, formState, formActions, elementConfig) => { 33582 // Only show if enabled and in gift mode 33583 if (!elementConfig.enabled || !formState.isGiftForm) { 33584 return null; 33585 } 33586 const handleToggleChange = (isChecked) => { 33587 formActions.updateFormState({ 33588 giftRecipient: { 33589 ...formState.giftRecipient, 33590 futureDeliveryEnabled: isChecked, 33591 // Clear the date if toggling off 33592 futureDeliveryDate: isChecked ? formState.giftRecipient?.futureDeliveryDate || '' : '' 33593 } 33594 }); 33595 logDataLayerEvent(form, 'zephr_form_input_change', { 33596 field: 'gift-future-date-toggle', 33597 inputName: 'gift-future-date-toggle-checkbox', 33598 sectionId: formState.currentSection.type, 33599 }); 33600 }; 33601 return { 33602 component: GiftFutureDateToggle, 33603 props: { 33604 config: elementConfig, 33605 checked: formState.giftRecipient?.futureDeliveryEnabled || false, 33606 disabled: formState.isBusy || formState.paymentProviderFormBusy || false, 33607 onChange: handleToggleChange, 33608 }, 33609 isValid: true, 33610 }; 33611 }, 33612 }; 33613 33614 /* src/components/elements/giftFutureDateInput/GiftFutureDateInput.svelte generated by Svelte v4.2.12 */ 33615 33616 function create_if_block_1$5(ctx) { 33617 let label; 33618 let current; 33619 33620 label = new Label({ 33621 props: { 33622 for: "gift-future-date-input", 33623 required: /*config*/ ctx[0].required || false, 33624 $$slots: { default: [create_default_slot$1] }, 33625 $$scope: { ctx } 33626 } 33627 }); 33628 33629 return { 33630 c() { 33631 create_component(label.$$.fragment); 33632 }, 33633 m(target, anchor) { 33634 mount_component(label, target, anchor); 33635 current = true; 33636 }, 33637 p(ctx, dirty) { 33638 const label_changes = {}; 33639 if (dirty & /*config*/ 1) label_changes.required = /*config*/ ctx[0].required || false; 33640 33641 if (dirty & /*$$scope, config*/ 513) { 33642 label_changes.$$scope = { dirty, ctx }; 33643 } 33644 33645 label.$set(label_changes); 33646 }, 33647 i(local) { 33648 if (current) return; 33649 transition_in(label.$$.fragment, local); 33650 current = true; 33651 }, 33652 o(local) { 33653 transition_out(label.$$.fragment, local); 33654 current = false; 33655 }, 33656 d(detaching) { 33657 destroy_component(label, detaching); 33658 } 33659 }; 33660 } 33661 33662 // (25:4) <Label for="gift-future-date-input" required={config.required || false} > 33663 function create_default_slot$1(ctx) { 33664 let t_value = /*config*/ ctx[0].label + ""; 33665 let t; 33666 33667 return { 33668 c() { 33669 t = text(t_value); 33670 }, 33671 m(target, anchor) { 33672 insert(target, t, anchor); 33673 }, 33674 p(ctx, dirty) { 33675 if (dirty & /*config*/ 1 && t_value !== (t_value = /*config*/ ctx[0].label + "")) set_data(t, t_value); 33676 }, 33677 d(detaching) { 33678 if (detaching) { 33679 detach(t); 33680 } 33681 } 33682 }; 33683 } 33684 33685 // (47:2) {#if config?.description} 33686 function create_if_block$5(ctx) { 33687 let p; 33688 let t_value = /*config*/ ctx[0].description + ""; 33689 let t; 33690 33691 return { 33692 c() { 33693 p = element("p"); 33694 t = text(t_value); 33695 attr(p, "class", "zephr-form-gift-future-date-input-description svelte-1vykgtl"); 33696 }, 33697 m(target, anchor) { 33698 insert(target, p, anchor); 33699 append(p, t); 33700 }, 33701 p(ctx, dirty) { 33702 if (dirty & /*config*/ 1 && t_value !== (t_value = /*config*/ ctx[0].description + "")) set_data(t, t_value); 33703 }, 33704 d(detaching) { 33705 if (detaching) { 33706 detach(p); 33707 } 33708 } 33709 }; 33710 } 33711 33712 function create_fragment$7(ctx) { 33713 let div; 33714 let t0; 33715 let input; 33716 let t1; 33717 let current; 33718 let if_block0 = /*config*/ ctx[0]?.label && create_if_block_1$5(ctx); 33719 33720 input = new Input({ 33721 props: { 33722 id: "gift-future-date-input", 33723 name: "gift-future-date", 33724 type: "date", 33725 value: /*value*/ ctx[1], 33726 disabled: /*disabled*/ ctx[2], 33727 hasError: /*hasError*/ ctx[3], 33728 errorMessage: /*errorMessage*/ ctx[4], 33729 placeholder: /*config*/ ctx[0]?.placeholder || '', 33730 required: /*config*/ ctx[0]?.required || false, 33731 min: /*minDate*/ ctx[6] 33732 } 33733 }); 33734 33735 input.$on("change", /*handleChange*/ ctx[5]); 33736 let if_block1 = /*config*/ ctx[0]?.description && create_if_block$5(ctx); 33737 33738 return { 33739 c() { 33740 div = element("div"); 33741 if (if_block0) if_block0.c(); 33742 t0 = space(); 33743 create_component(input.$$.fragment); 33744 t1 = space(); 33745 if (if_block1) if_block1.c(); 33746 attr(div, "class", "zephr-form-gift-future-date-input svelte-1vykgtl"); 33747 }, 33748 m(target, anchor) { 33749 insert(target, div, anchor); 33750 if (if_block0) if_block0.m(div, null); 33751 append(div, t0); 33752 mount_component(input, div, null); 33753 append(div, t1); 33754 if (if_block1) if_block1.m(div, null); 33755 current = true; 33756 }, 33757 p(ctx, [dirty]) { 33758 if (/*config*/ ctx[0]?.label) { 33759 if (if_block0) { 33760 if_block0.p(ctx, dirty); 33761
33762 if (dirty & /*config*/ 1) { 33763 transition_in(if_block0, 1); 33764 } 33765 } else { 33766 if_block0 = create_if_block_1$5(ctx); 33767 if_block0.c(); 33768 transition_in(if_block0, 1); 33769 if_block0.m(div, t0); 33770 } 33771 } else if (if_block0) { 33772 group_outros(); 33773 33774 transition_out(if_block0, 1, 1, () => { 33775 if_block0 = null; 33776 }); 33777 33778 check_outros(); 33779 } 33780 33781 const input_changes = {}; 33782 if (dirty & /*value*/ 2) input_changes.value = /*value*/ ctx[1]; 33783 if (dirty & /*disabled*/ 4) input_changes.disabled = /*disabled*/ ctx[2]; 33784 if (dirty & /*hasError*/ 8) input_changes.hasError = /*hasError*/ ctx[3]; 33785 if (dirty & /*errorMessage*/ 16) input_changes.errorMessage = /*errorMessage*/ ctx[4]; 33786 if (dirty & /*config*/ 1) input_changes.placeholder = /*config*/ ctx[0]?.placeholder || ''; 33787 if (dirty & /*config*/ 1) input_changes.required = /*config*/ ctx[0]?.required || false; 33788 input.$set(input_changes); 33789 33790 if (/*config*/ ctx[0]?.description) { 33791 if (if_block1) { 33792 if_block1.p(ctx, dirty); 33793 } else { 33794 if_block1 = create_if_block$5(ctx); 33795 if_block1.c(); 33796 if_block1.m(div, null); 33797 } 33798 } else if (if_block1) { 33799 if_block1.d(1); 33800 if_block1 = null; 33801 } 33802 }, 33803 i(local) { 33804 if (current) return; 33805 transition_in(if_block0); 33806 transition_in(input.$$.fragment, local); 33807 current = true; 33808 }, 33809 o(local) { 33810 transition_out(if_block0); 33811 transition_out(input.$$.fragment, local); 33812 current = false; 33813 }, 33814 d(detaching) { 33815 if (detaching) { 33816 detach(div); 33817 } 33818 33819 if (if_block0) if_block0.d(); 33820 destroy_component(input); 33821 if (if_block1) if_block1.d(); 33822 } 33823 }; 33824 } 33825 33826 function instance$7($$self, $$props, $$invalidate) { 33827 let { config } = $$props; 33828 let { value = '' } = $$props; 33829 let { disabled = false } = $$props; 33830 let { hasError = false } = $$props; 33831 let { errorMessage = '' } = $$props; 33832 let { onChange } = $$props; 33833 33834 // Calculate tomorrow's date in YYYY-MM-DD format 33835 const getTomorrowDate = () => { 33836 const tomorrow = new Date(); 33837 tomorrow.setDate(tomorrow.getDate() + 1); 33838 return tomorrow.toISOString().split('T')[0]; 33839 }; 33840 33841 const handleChange = event => { 33842 const inputValue = event.detail; 33843 onChange(inputValue); 33844 }; 33845 33846 // Set minimum date to tomorrow 33847 const minDate = getTomorrowDate(); 33848 33849 $$self.$$set = $$props => {
33850 if ('config' in $$props) $$invalidate(0, config = $$props.config); 33851 if ('value' in $$props) $$invalidate(1, value = $$props.value); 33852 if ('disabled' in $$props) $$invalidate(2, disabled = $$props.disabled); 33853 if ('hasError' in $$props) $$invalidate(3, hasError = $$props.hasError); 33854 if ('errorMessage' in $$props) $$invalidate(4, errorMessage = $$props.errorMessage); 33855 if ('onChange' in $$props) $$invalidate(7, onChange = $$props.onChange); 33856 }; 33857 33858 return [ 33859 config, 33860 value, 33861 disabled, 33862 hasError, 33863 errorMessage, 33864 handleChange, 33865 minDate, 33866 onChange 33867 ]; 33868 } 33869 33870 class GiftFutureDateInput extends SvelteComponent { 33871 constructor(options) { 33872 super(); 33873 33874 init(this, options, instance$7, create_fragment$7, safe_not_equal, { 33875 config: 0, 33876 value: 1, 33877 disabled: 2, 33878 hasError: 3, 33879 errorMessage: 4, 33880 onChange: 7 33881 }); 33882 } 33883 } 33884 33885 const giftFutureDateInputFactory = { 33886 matches: (sectionElement) => sectionElement.type === elementTypes.GIFT_FUTURE_DATE_INPUT, 33887 create: (form, formState, formActions, elementConfig) => { 33888 // Only show if enabled, in gift mode, and future delivery is enabled 33889 if (!elementConfig.enabled || !formState.isGiftForm || !formState.giftRecipient?.futureDeliveryEnabled) { 33890 return null; 33891 } 33892 // Validation function 33893 const validateDate = (value) => { 33894 if (!value) { 33895 return resolveLanguagePackKeyTyped(form, 'forms.errors.future-delivery-date-required', 'Please select a future delivery date'); 33896 } 33897 if (value) { 33898 const selectedDate = new Date(value); 33899 const tomorrow = new Date(); 33900 tomorrow.setDate(tomorrow.getDate() + 1); 33901 tomorrow.setHours(0, 0, 0, 0); // Reset time for date comparison 33902 if (selectedDate < tomorrow) { 33903 return resolveLanguagePackKeyTyped(form, 'forms.errors.future-delivery-date-too-early', 'Delivery date must be at least 24 hours in the future'); 33904 } 33905 } 33906 return null; 33907 }; 33908 const handleChange = (value) => { 33909 formActions.updateFormState({ 33910 giftRecipient: { 33911 ...formState.giftRecipient, 33912 futureDeliveryDate: value 33913 } 33914 }); 33915 logDataLayerEvent(form, 'zephr_form_input_change', { 33916 field: 'gift-future-date', 33917 inputName: 'gift-future-date-input', 33918 sectionId: formState.currentSection.type, 33919 }); 33920 }; 33921 const currentValue = formState.giftRecipient?.futureDeliveryDate || ''; 33922 const errorMessage = validateDate(currentValue); 33923 const isValid = !errorMessage; 33924 return { 33925 component: GiftFutureDateInput, 33926 props: { 33927 config: elementConfig, 33928 value: currentValue, 33929 disabled: formState.isBusy || formState.paymentProviderFormBusy || false, 33930 hasError: !isValid, 33931 errorMessage: errorMessage || '', 33932 onChange: handleChange, 33933 }, 33934 isValid, 33935 }; 33936 }, 33937 }; 33938 33939 /* src/components/elements/suspendResumeSubscription/SuspendResumeSubscription.svelte generated by Svelte v4.2.12 */ 33940 33941 function create_if_block_2$3(ctx) { 33942 let div; 33943 let t; 33944 33945 return { 33946 c() { 33947 div = element("div"); 33948 t = text(/*suspensionDateError*/ ctx[3]); 33949 attr(div, "class", "error-text svelte-1hog2jr"); 33950 }, 33951 m(target, anchor) { 33952 insert(target, div, anchor); 33953 append(div, t); 33954 }, 33955 p(ctx, dirty) { 33956 if (dirty & /*suspensionDateError*/ 8) set_data(t, /*suspensionDateError*/ ctx[3]); 33957 }, 33958 d(detaching) { 33959 if (detaching) { 33960 detach(div); 33961 } 33962 } 33963 }; 33964 } 33965 33966 // (88:6) {#if resumeDateError} 33967 function create_if_block_1$4(ctx) { 33968 let div; 33969 let t; 33970 33971 return { 33972 c() { 33973 div = element("div"); 33974 t = text(/*resumeDateError*/ ctx[4]); 33975 attr(div, "class", "error-text svelte-1hog2jr"); 33976 }, 33977 m(target, anchor) { 33978 insert(target, div, anchor); 33979 append(div, t); 33980 }, 33981 p(ctx, dirty) {
33982 if (dirty & /*resumeDateError*/ 16) set_data(t, /*resumeDateError*/ ctx[4]); 33983 }, 33984 d(detaching) { 33985 if (detaching) { 33986 detach(div); 33987 } 33988 } 33989 }; 33990 } 33991 33992 // (92:4) {#if generalError} 33993 function create_if_block$4(ctx) { 33994 let div; 33995 let t; 33996 33997 return { 33998 c() { 33999 div = element("div"); 34000 t = text(/*generalError*/ ctx[5]); 34001 attr(div, "class", "error-text svelte-1hog2jr"); 34002 }, 34003 m(target, anchor) { 34004 insert(target, div, anchor); 34005 append(div, t); 34006 }, 34007 p(ctx, dirty) { 34008 if (dirty & /*generalError*/ 32) set_data(t, /*generalError*/ ctx[5]); 34009 }, 34010 d(detaching) { 34011 if (detaching) { 34012 detach(div); 34013 } 34014 } 34015 }; 34016 } 34017 34018 function create_fragment$6(ctx) { 34019 let div2; 34020 let div0; 34021 let label0; 34022 let t0_value = /*config*/ ctx[0].suspensionDateLabel + ""; 34023 let t0; 34024 let t1; 34025 let input0; 34026 let t2; 34027 let t3; 34028 let div1; 34029 let label1; 34030 let t4_value = /*config*/ ctx[0].resumeDateLabel + ""; 34031 let t4; 34032 let t5; 34033 let input1; 34034 let t6; 34035 let t7; 34036 let mounted; 34037 let dispose; 34038 let if_block0 = /*suspensionDateError*/ ctx[3] && create_if_block_2$3(ctx); 34039 let if_block1 = /*resumeDateError*/ ctx[4] && create_if_block_1$4(ctx); 34040 let if_block2 = /*generalError*/ ctx[5] && create_if_block$4(ctx); 34041 34042 return { 34043 c() { 34044 div2 = element("div"); 34045 div0 = element("div"); 34046 label0 = element("label"); 34047 t0 = text(t0_value); 34048 t1 = space(); 34049 input0 = element("input"); 34050 t2 = space(); 34051 if (if_block0) if_block0.c(); 34052 t3 = space(); 34053 div1 = element("div"); 34054 label1 = element("label"); 34055 t4 = text(t4_value); 34056 t5 = space(); 34057 input1 = element("input"); 34058 t6 = space(); 34059 if (if_block1) if_block1.c(); 34060 t7 = space(); 34061 if (if_block2) if_block2.c(); 34062 attr(label0, "for", "suspensionDate"); 34063 attr(label0, "class", "svelte-1hog2jr"); 34064 attr(input0, "id", "suspensionDate"); 34065 attr(input0, "type", "date"); 34066 input0.required = true; 34067 attr(input0, "class", "svelte-1hog2jr"); 34068 toggle_class(input0, "error", !!/*suspensionDateError*/ ctx[3]); 34069 attr(div0, "class", "field svelte-1hog2jr"); 34070 attr(label1, "for", "resumeDate"); 34071 attr(label1, "class", "svelte-1hog2jr"); 34072 attr(input1, "id", "resumeDate"); 34073 attr(input1, "type", "date"); 34074 input1.required = true; 34075 attr(input1, "class", "svelte-1hog2jr"); 34076 toggle_class(input1, "error", !!/*resumeDateError*/ ctx[4]); 34077 attr(div1, "class", "field svelte-1hog2jr"); 34078 attr(div2, "class", "suspend-resume-subscription-section svelte-1hog2jr"); 34079 }, 34080 m(target, anchor) { 34081 insert(target, div2, anchor); 34082 append(div2, div0); 34083 append(div0, label0); 34084 append(label0, t0); 34085 append(div0, t1); 34086 append(div0, input0); 34087 set_input_value(input0, /*suspensionDate*/ ctx[1]); 34088 append(div0, t2); 34089 if (if_block0) if_block0.m(div0, null); 34090 append(div2, t3); 34091 append(div2, div1); 34092 append(div1, label1); 34093 append(label1, t4); 34094 append(div1, t5); 34095 append(div1, input1); 34096 set_input_value(input1, /*resumeDate*/ ctx[2]); 34097 append(div1, t6); 34098 if (if_block1) if_block1.m(div1, null); 34099 append(div2, t7); 34100 if (if_block2) if_block2.m(div2, null); 34101 34102 if (!mounted) { 34103 dispose = [ 34104 listen(input0, "input", /*input0_input_handler*/ ctx[9]), 34105 listen(input0, "input", /*updateSuspendResumeSubscription*/ ctx[6]), 34106 listen(input1, "input", /*input1_input_handler*/ ctx[10]), 34107 listen(input1, "input", /*updateSuspendResumeSubscription*/ ctx[6]) 34108 ]; 34109 34110 mounted = true; 34111 } 34112 }, 34113 p(ctx, [dirty]) { 34114 if (dirty & /*config*/ 1 && t0_value !== (t0_value = /*config*/ ctx[0].suspensionDateLabel + "")) set_data(t0, t0_value); 34115 34116 if (dirty & /*suspensionDate*/ 2) { 34117 set_input_value(input0, /*suspensionDate*/ ctx[1]); 34118 } 34119 34120 if (dirty & /*suspensionDateError*/ 8) { 34121 toggle_class(input0, "error", !!/*suspensionDateError*/ ctx[3]); 34122 } 34123 34124 if (/*suspensionDateError*/ ctx[3]) { 34125 if (if_block0) { 34126 if_block0.p(ctx, dirty); 34127 } else { 34128 if_block0 = create_if_block_2$3(ctx); 34129 if_block0.c(); 34130 if_block0.m(div0, null); 34131 } 34132 } else if (if_block0) { 34133 if_block0.d(1); 34134 if_block0 = null; 34135 } 34136
34137 if (dirty & /*config*/ 1 && t4_value !== (t4_value = /*config*/ ctx[0].resumeDateLabel + "")) set_data(t4, t4_value); 34138 34139 if (dirty & /*resumeDate*/ 4) { 34140 set_input_value(input1, /*resumeDate*/ ctx[2]); 34141 } 34142 34143 if (dirty & /*resumeDateError*/ 16) { 34144 toggle_class(input1, "error", !!/*resumeDateError*/ ctx[4]); 34145 } 34146 34147 if (/*resumeDateError*/ ctx[4]) { 34148 if (if_block1) { 34149 if_block1.p(ctx, dirty); 34150 } else { 34151 if_block1 = create_if_block_1$4(ctx); 34152 if_block1.c(); 34153 if_block1.m(div1, null); 34154 } 34155 } else if (if_block1) { 34156 if_block1.d(1); 34157 if_block1 = null; 34158 } 34159 34160 if (/*generalError*/ ctx[5]) { 34161 if (if_block2) { 34162 if_block2.p(ctx, dirty); 34163 } else { 34164 if_block2 = create_if_block$4(ctx); 34165 if_block2.c(); 34166 if_block2.m(div2, null); 34167 } 34168 } else if (if_block2) { 34169 if_block2.d(1); 34170 if_block2 = null; 34171 } 34172 }, 34173 i: noop, 34174 o: noop, 34175 d(detaching) { 34176 if (detaching) { 34177 detach(div2); 34178 } 34179 34180 if (if_block0) if_block0.d(); 34181 if (if_block1) if_block1.d(); 34182 if (if_block2) if_block2.d(); 34183 mounted = false; 34184 run_all(dispose); 34185 } 34186 }; 34187 } 34188 34189 function instance$6($$self, $$props, $$invalidate) { 34190 let { formState } = $$props; 34191 let { formActions } = $$props; 34192 let { config } = $$props; 34193 const dispatch = createEventDispatcher(); 34194 let suspensionDate = formState.suspendResumeSubscription?.suspensionDate || ''; 34195 let resumeDate = formState.suspendResumeSubscription?.resumeDate || ''; 34196 let suspensionDateError = ''; 34197 let resumeDateError = ''; 34198 let generalError = ''; 34199 34200 // Update form state when input changes 34201 const updateSuspendResumeSubscription = () => { 34202 const updatedSuspendResumeSubscription = { 34203 ...formState.suspendResumeSubscription || {}, 34204 suspensionDate, 34205 resumeDate 34206 }; 34207 34208 formActions.updateFormState({ 34209 suspendResumeSubscription: updatedSuspendResumeSubscription 34210 }); 34211 34212 validateForm(); 34213 }; 34214 34215 const validateForm = () => { 34216 const hasValidSuspensionDate = !!suspensionDate.trim(); 34217 const hasValidResumeDate = !!resumeDate.trim(); 34218 const today = new Date(); 34219 today.setHours(0, 0, 0, 0); // Reset time to start of day for accurate comparison 34220 const suspensionDateObj = new Date(suspensionDate); 34221 const resumeDateObj = new Date(resumeDate); 34222 const isSuspensionDateInPast = hasValidSuspensionDate && suspensionDateObj < today; 34223 const isSuspensionDateBeforeResumeDate = hasValidSuspensionDate && hasValidResumeDate && suspensionDateObj < resumeDateObj; 34224 34225 // Reset errors 34226 $$invalidate(3, suspensionDateError = ''); 34227 34228 $$invalidate(4, resumeDateError = ''); 34229 $$invalidate(5, generalError = ''); 34230 34231 if (!hasValidSuspensionDate) { 34232 $$invalidate(3, suspensionDateError = 'Suspension date is required'); 34233 } else if (isSuspensionDateInPast) { 34234 $$invalidate(3, suspensionDateError = 'Suspension date cannot be in the past'); 34235 } 34236 34237 if (!hasValidResumeDate) { 34238 $$invalidate(4, resumeDateError = 'Resume date is required'); 34239 } 34240 34241 if (hasValidSuspensionDate && hasValidResumeDate && !isSuspensionDateBeforeResumeDate) { 34242 $$invalidate(5, generalError = 'Resume date must be after suspension date'); 34243 } 34244 34245 // Dispatch event for form validity 34246 const isValid = hasValidSuspensionDate && hasValidResumeDate && !isSuspensionDateInPast && isSuspensionDateBeforeResumeDate; 34247 34248 dispatch('validity', { isValid }); 34249 }; 34250 34251 // Run validation on mount to ensure initial state is validated 34252 onMount(() => { 34253 validateForm(); 34254 }); 34255 34256 function input0_input_handler() { 34257 suspensionDate = this.value; 34258 $$invalidate(1, suspensionDate); 34259 } 34260 34261 function input1_input_handler() { 34262 resumeDate = this.value; 34263 $$invalidate(2, resumeDate); 34264 } 34265 34266 $$self.$$set = $$props => {
34267 if ('formState' in $$props) $$invalidate(7, formState = $$props.formState); 34268 if ('formActions' in $$props) $$invalidate(8, formActions = $$props.formActions); 34269 if ('config' in $$props) $$invalidate(0, config = $$props.config); 34270 }; 34271 34272 return [ 34273 config, 34274 suspensionDate, 34275 resumeDate, 34276 suspensionDateError, 34277 resumeDateError, 34278 generalError, 34279 updateSuspendResumeSubscription, 34280 formState, 34281 formActions, 34282 input0_input_handler, 34283 input1_input_handler 34284 ]; 34285 } 34286 34287 class SuspendResumeSubscription extends SvelteComponent { 34288 constructor(options) { 34289 super(); 34290 init(this, options, instance$6, create_fragment$6, safe_not_equal, { formState: 7, formActions: 8, config: 0 }); 34291 } 34292 } 34293 34294 const suspendResumeSubscriptionFactory = { 34295 matches: (sectionElement) => sectionElement.type === elementTypes.SUSPEND_RESUME_SUBSCRIPTION, 34296 create: (form, formState, formActions, elementConfig) => { 34297 // Resolve all labels through language pack service 34298 const resolvedConfig = { 34299 suspensionDateLabel: resolveLanguagePackKeyTyped(form, 'forms.suspend-resume-subscription.suspension-date-label', elementConfig.suspensionDateLabel), 34300 resumeDateLabel: resolveLanguagePackKeyTyped(form, 'forms.suspend-resume-subscription.resume-date-label', elementConfig.resumeDateLabel), 34301 }; 34302 // Determine if the input is valid 34303 const suspendResumeSubscription = (formState.suspendResumeSubscription || {}); 34304 const hasValidSuspensionDate = !!suspendResumeSubscription.suspensionDate?.trim(); 34305 const hasValidResumeDate = !!suspendResumeSubscription.resumeDate?.trim(); 34306 // Check if suspension date is in the past 34307 const today = new Date(); 34308 today.setHours(0, 0, 0, 0); // Reset time to start of day for accurate comparison 34309 const suspensionDateObj = new Date(suspendResumeSubscription.suspensionDate); 34310 const isSuspensionDateInPast = hasValidSuspensionDate && suspensionDateObj < today; 34311 const resumeDateObj = new Date(suspendResumeSubscription.resumeDate); 34312 const isSuspensionDateBeforeResumeDate = hasValidSuspensionDate && hasValidResumeDate && suspensionDateObj < resumeDateObj; 34313 const isValid = hasValidSuspensionDate && 34314 hasValidResumeDate && 34315 !isSuspensionDateInPast && 34316 isSuspensionDateBeforeResumeDate; 34317 return { 34318 component: SuspendResumeSubscription, 34319 props: { 34320 config: resolvedConfig, 34321 form, 34322 formState, 34323 formActions, 34324 }, 34325 isValid 34326 }; 34327 } 34328 }; 34329 34330 /* src/components/elements/subscriptionCustomFieldsList/SubscriptionCustomFieldsList.svelte generated by Svelte v4.2.12 */ 34331 34332 function get_each_context$2(ctx, list, i) { 34333 const child_ctx = ctx.slice(); 34334 child_ctx[30] = list[i][0]; 34335 child_ctx[31] = list[i][1]; 34336 return child_ctx; 34337 } 34338 34339 function get_each_context_1(ctx, list, i) { 34340 const child_ctx = ctx.slice(); 34341 child_ctx[34] = list[i]; 34342 return child_ctx; 34343 } 34344 34345 // (142:2) {#if formTitle} 34346 function create_if_block_6$1(ctx) { 34347 let h2; 34348 let t; 34349 34350 return { 34351 c() { 34352 h2 = element("h2"); 34353 t = text(/*formTitle*/ ctx[2]); 34354 attr(h2, "class", "form-title svelte-uox0m2"); 34355 }, 34356 m(target, anchor) { 34357 insert(target, h2, anchor); 34358 append(h2, t); 34359 }, 34360 p(ctx, dirty) { 34361 if (dirty[0] & /*formTitle*/ 4) set_data(t, /*formTitle*/ ctx[2]); 34362 }, 34363 d(detaching) { 34364 if (detaching) { 34365 detach(h2); 34366 } 34367 } 34368 }; 34369 } 34370 34371 // (146:2) {#if formDescription} 34372 function create_if_block_5$1(ctx) { 34373 let p; 34374 let t; 34375 34376 return { 34377 c() { 34378 p = element("p"); 34379 t = text(/*formDescription*/ ctx[3]); 34380 attr(p, "class", "form-description svelte-uox0m2"); 34381 }, 34382 m(target, anchor) { 34383 insert(target, p, anchor); 34384 append(p, t); 34385 }, 34386 p(ctx, dirty) { 34387 if (dirty[0] & /*formDescription*/ 8) set_data(t, /*formDescription*/ ctx[3]); 34388 }, 34389 d(detaching) { 34390 if (detaching) { 34391 detach(p); 34392 } 34393 } 34394 }; 34395 } 34396 34397 // (152:52) 34398 function create_if_block_1$3(ctx) { 34399 let form; 34400 let t0; 34401 let t1; 34402 let t2; 34403 let mounted; 34404 let dispose; 34405 let each_value = ensure_array_like(/*activeFieldGroups*/ ctx[9]); 34406 let each_blocks = []; 34407 34408 for (let i = 0; i < each_value.length; i += 1) { 34409 each_blocks[i] = create_each_block$2(get_each_context$2(ctx, each_value, i)); 34410 } 34411 34412 let if_block0 = /*successMessage*/ ctx[6] && create_if_block_4$1(ctx); 34413 let if_block1 = /*errorMessage*/ ctx[7] && create_if_block_3$2(ctx); 34414 let if_block2 = /*editableFieldNames*/ ctx[1].length > 0 && create_if_block_2$2(ctx); 34415 34416 return { 34417 c() { 34418 form = element("form"); 34419 34420 for (let i = 0; i < each_blocks.length; i += 1) { 34421 each_blocks[i].c(); 34422 } 34423 34424 t0 = space(); 34425 if (if_block0) if_block0.c(); 34426 t1 = space(); 34427 if (if_block1) if_block1.c(); 34428 t2 = space(); 34429 if (if_block2) if_block2.c(); 34430 attr(form, "class", "custom-fields-form svelte-uox0m2"); 34431 }, 34432 m(target, anchor) { 34433 insert(target, form, anchor); 34434 34435 for (let i = 0; i < each_blocks.length; i += 1) { 34436 if (each_blocks[i]) { 34437 each_blocks[i].m(form, null); 34438 } 34439 } 34440 34441 append(form, t0); 34442 if (if_block0) if_block0.m(form, null); 34443 append(form, t1); 34444 if (if_block1) if_block1.m(form, null); 34445 append(form, t2); 34446 if (if_block2) if_block2.m(form, null); 34447 34448 if (!mounted) { 34449 dispose = listen(form, "submit", prevent_default(/*handleSubmit*/ ctx[13])); 34450 mounted = true; 34451 } 34452 }, 34453 p(ctx, dirty) {
34454 if (dirty[0] & /*activeFieldGroups, fieldValues, isFieldEditable, handleInputEvent*/ 21248) { 34455 each_value = ensure_array_like(/*activeFieldGroups*/ ctx[9]); 34456 let i; 34457 34458 for (i = 0; i < each_value.length; i += 1) { 34459 const child_ctx = get_each_context$2(ctx, each_value, i); 34460 34461 if (each_blocks[i]) { 34462 each_blocks[i].p(child_ctx, dirty); 34463 } else { 34464 each_blocks[i] = create_each_block$2(child_ctx); 34465 each_blocks[i].c(); 34466 each_blocks[i].m(form, t0); 34467 } 34468 } 34469 34470 for (; i < each_blocks.length; i += 1) { 34471 each_blocks[i].d(1); 34472 } 34473 34474 each_blocks.length = each_value.length; 34475 } 34476 34477 if (/*successMessage*/ ctx[6]) { 34478 if (if_block0) { 34479 if_block0.p(ctx, dirty); 34480 } else { 34481 if_block0 = create_if_block_4$1(ctx); 34482 if_block0.c(); 34483 if_block0.m(form, t1); 34484 } 34485 } else if (if_block0) { 34486 if_block0.d(1); 34487 if_block0 = null; 34488 } 34489 34490 if (/*errorMessage*/ ctx[7]) { 34491 if (if_block1) { 34492 if_block1.p(ctx, dirty); 34493 } else { 34494 if_block1 = create_if_block_3$2(ctx); 34495 if_block1.c(); 34496 if_block1.m(form, t2); 34497 } 34498 } else if (if_block1) { 34499 if_block1.d(1); 34500 if_block1 = null; 34501 } 34502 34503 if (/*editableFieldNames*/ ctx[1].length > 0) { 34504 if (if_block2) { 34505 if_block2.p(ctx, dirty); 34506 } else { 34507 if_block2 = create_if_block_2$2(ctx); 34508 if_block2.c(); 34509 if_block2.m(form, null); 34510 } 34511 } else if (if_block2) { 34512 if_block2.d(1); 34513 if_block2 = null; 34514 } 34515 }, 34516 d(detaching) { 34517 if (detaching) { 34518 detach(form); 34519 } 34520 34521 destroy_each(each_blocks, detaching); 34522 if (if_block0) if_block0.d(); 34523 if (if_block1) if_block1.d(); 34524 if (if_block2) if_block2.d(); 34525 mounted = false; 34526 dispose(); 34527 } 34528 }; 34529 } 34530 34531 // (150:2) {#if loading} 34532 function create_if_block$3(ctx) { 34533 let div; 34534 34535 return { 34536 c() { 34537 div = element("div"); 34538 div.textContent = "Loading custom fields..."; 34539 attr(div, "class", "loading svelte-uox0m2"); 34540 }, 34541 m(target, anchor) { 34542 insert(target, div, anchor); 34543 }, 34544 p: noop, 34545 d(detaching) { 34546 if (detaching) { 34547 detach(div); 34548 } 34549 } 34550 }; 34551 } 34552 34553 // (158:10) {#each group.fields as field} 34554 function create_each_block_1(ctx) { 34555 let div; 34556 let label; 34557 let t0_value = /*field*/ ctx[34].label + ""; 34558 let t0; 34559 let label_for_value; 34560 let t1; 34561 let input; 34562 let input_id_value; 34563 let input_name_value; 34564 let input_value_value; 34565 let input_disabled_value; 34566 let mounted; 34567 let dispose; 34568 34569 function input_handler(...args) { 34570 return /*input_handler*/ ctx[20](/*field*/ ctx[34], ...args); 34571 } 34572 34573 return { 34574 c() { 34575 div = element("div"); 34576 label = element("label"); 34577 t0 = text(t0_value); 34578 t1 = space(); 34579 input = element("input"); 34580 attr(label, "for", label_for_value = /*field*/ ctx[34].name); 34581 attr(label, "class", "field-label svelte-uox0m2"); 34582 attr(input, "id", input_id_value = /*field*/ ctx[34].name); 34583 attr(input, "name", input_name_value = /*field*/ ctx[34].name); 34584 attr(input, "type", "text"); 34585 input.value = input_value_value = /*fieldValues*/ ctx[8][/*field*/ ctx[34].name]; 34586 input.disabled = input_disabled_value = !/*isFieldEditable*/ ctx[12](/*field*/ ctx[34].name); 34587 attr(input, "class", "field-input svelte-uox0m2"); 34588 attr(div, "class", "field-item svelte-uox0m2"); 34589 }, 34590 m(target, anchor) { 34591 insert(target, div, anchor); 34592 append(div, label); 34593 append(label, t0); 34594 append(div, t1); 34595 append(div, input); 34596 34597 if (!mounted) { 34598 dispose = listen(input, "input", input_handler); 34599 mounted = true; 34600 } 34601 }, 34602 p(new_ctx, dirty) { 34603 ctx = new_ctx; 34604 if (dirty[0] & /*activeFieldGroups*/ 512 && t0_value !== (t0_value = /*field*/ ctx[34].label + "")) set_data(t0, t0_value); 34605 34606 if (dirty[0] & /*activeFieldGroups*/ 512 && label_for_value !== (label_for_value = /*field*/ ctx[34].name)) { 34607 attr(label, "for", label_for_value); 34608 } 34609 34610 if (dirty[0] & /*activeFieldGroups*/ 512 && input_id_value !== (input_id_value = /*field*/ ctx[34].name)) { 34611 attr(input, "id", input_id_value); 34612 } 34613 34614 if (dirty[0] & /*activeFieldGroups*/ 512 && input_name_value !== (input_name_value = /*field*/ ctx[34].name)) { 34615 attr(input, "name", input_name_value); 34616 } 34617
34618 if (dirty[0] & /*fieldValues, activeFieldGroups*/ 768 && input_value_value !== (input_value_value = /*fieldValues*/ ctx[8][/*field*/ ctx[34].name]) && input.value !== input_value_value) { 34619 input.value = input_value_value; 34620 } 34621 34622 if (dirty[0] & /*activeFieldGroups*/ 512 && input_disabled_value !== (input_disabled_value = !/*isFieldEditable*/ ctx[12](/*field*/ ctx[34].name))) { 34623 input.disabled = input_disabled_value; 34624 } 34625 }, 34626 d(detaching) { 34627 if (detaching) { 34628 detach(div); 34629 } 34630 34631 mounted = false; 34632 dispose(); 34633 } 34634 }; 34635 } 34636 34637 // (156:6) {#each activeFieldGroups as [_groupKey, group]} 34638 function create_each_block$2(ctx) { 34639 let div; 34640 let t; 34641 let each_value_1 = ensure_array_like(/*group*/ ctx[31].fields); 34642 let each_blocks = []; 34643 34644 for (let i = 0; i < each_value_1.length; i += 1) { 34645 each_blocks[i] = create_each_block_1(get_each_context_1(ctx, each_value_1, i)); 34646 } 34647 34648 return { 34649 c() { 34650 div = element("div"); 34651 34652 for (let i = 0; i < each_blocks.length; i += 1) { 34653 each_blocks[i].c(); 34654 } 34655 34656 t = space(); 34657 attr(div, "class", "simple-field-group svelte-uox0m2"); 34658 }, 34659 m(target, anchor) { 34660 insert(target, div, anchor); 34661 34662 for (let i = 0; i < each_blocks.length; i += 1) { 34663 if (each_blocks[i]) { 34664 each_blocks[i].m(div, null); 34665 } 34666 } 34667 34668 append(div, t); 34669 }, 34670 p(ctx, dirty) { 34671 if (dirty[0] & /*activeFieldGroups, fieldValues, isFieldEditable, handleInputEvent*/ 21248) { 34672 each_value_1 = ensure_array_like(/*group*/ ctx[31].fields); 34673 let i; 34674 34675 for (i = 0; i < each_value_1.length; i += 1) { 34676 const child_ctx = get_each_context_1(ctx, each_value_1, i); 34677 34678 if (each_blocks[i]) { 34679 each_blocks[i].p(child_ctx, dirty); 34680 } else { 34681 each_blocks[i] = create_each_block_1(child_ctx); 34682 each_blocks[i].c(); 34683 each_blocks[i].m(div, t); 34684 } 34685 } 34686 34687 for (; i < each_blocks.length; i += 1) { 34688 each_blocks[i].d(1); 34689 } 34690 34691 each_blocks.length = each_value_1.length; 34692 } 34693 }, 34694 d(detaching) { 34695 if (detaching) { 34696 detach(div); 34697 } 34698 34699 destroy_each(each_blocks, detaching); 34700 } 34701 }; 34702 } 34703 34704 // (179:6) {#if successMessage} 34705 function create_if_block_4$1(ctx) { 34706 let div; 34707 let t0; 34708 let t1; 34709 34710 return { 34711 c() { 34712 div = element("div"); 34713 t0 = text("â "); 34714 t1 = text(/*successMessage*/ ctx[6]); 34715 attr(div, "class", "success-message svelte-uox0m2"); 34716 }, 34717 m(target, anchor) { 34718 insert(target, div, anchor); 34719 append(div, t0); 34720 append(div, t1); 34721 }, 34722 p(ctx, dirty) { 34723 if (dirty[0] & /*successMessage*/ 64) set_data(t1, /*successMessage*/ ctx[6]); 34724 }, 34725 d(detaching) { 34726 if (detaching) { 34727 detach(div); 34728 } 34729 } 34730 }; 34731 } 34732 34733 // (185:6) {#if errorMessage} 34734 function create_if_block_3$2(ctx) { 34735 let div; 34736 let t0; 34737 let t1; 34738 34739 return { 34740 c() { 34741 div = element("div"); 34742 t0 = text("â "); 34743 t1 = text(/*errorMessage*/ ctx[7]); 34744 attr(div, "class", "error-message svelte-uox0m2"); 34745 }, 34746 m(target, anchor) { 34747 insert(target, div, anchor); 34748 append(div, t0); 34749 append(div, t1); 34750 }, 34751 p(ctx, dirty) { 34752 if (dirty[0] & /*errorMessage*/ 128) set_data(t1, /*errorMessage*/ ctx[7]); 34753 }, 34754 d(detaching) { 34755 if (detaching) { 34756 detach(div); 34757 } 34758 } 34759 }; 34760 } 34761 34762 // (192:6) {#if editableFieldNames.length > 0} 34763 function create_if_block_2$2(ctx) { 34764 let div; 34765 let button; 34766 34767 let t_value = (/*submitting*/ ctx[11] 34768 ? 'Updating...' 34769 : /*loading*/ ctx[5] 34770 ? 'Loading...' 34771 : /*submitButtonText*/ ctx[4]) + ""; 34772 34773 let t; 34774 let button_disabled_value; 34775 34776 return { 34777 c() { 34778 div = element("div"); 34779 button = element("button"); 34780 t = text(t_value); 34781 attr(button, "type", "submit"); 34782 attr(button, "class", "submit-button svelte-uox0m2"); 34783 button.disabled = button_disabled_value = /*loading*/ ctx[5] || /*submitting*/ ctx[11] || !/*hasChanges*/ ctx[10]; 34784 attr(div, "class", "form-actions svelte-uox0m2"); 34785 }, 34786 m(target, anchor) { 34787 insert(target, div, anchor); 34788 append(div, button); 34789 append(button, t); 34790 }, 34791 p(ctx, dirty) { 34792 if (dirty[0] & /*submitting, loading, submitButtonText*/ 2096 && t_value !== (t_value = (/*submitting*/ ctx[11] 34793 ? 'Updating...' 34794 : /*loading*/ ctx[5] 34795 ? 'Loading...' 34796 : /*submitButtonText*/ ctx[4]) + "")) set_data(t, t_value); 34797
34798 if (dirty[0] & /*loading, submitting, hasChanges*/ 3104 && button_disabled_value !== (button_disabled_value = /*loading*/ ctx[5] || /*submitting*/ ctx[11] || !/*hasChanges*/ ctx[10])) { 34799 button.disabled = button_disabled_value; 34800 } 34801 }, 34802 d(detaching) { 34803 if (detaching) { 34804 detach(div); 34805 } 34806 } 34807 }; 34808 } 34809 34810 function create_fragment$5(ctx) { 34811 let div; 34812 let t0; 34813 let t1; 34814 let if_block0 = /*formTitle*/ ctx[2] && create_if_block_6$1(ctx); 34815 let if_block1 = /*formDescription*/ ctx[3] && create_if_block_5$1(ctx); 34816 34817 function select_block_type(ctx, dirty) { 34818 if (/*loading*/ ctx[5]) return create_if_block$3; 34819 if (/*customFields*/ ctx[0] && /*customFields*/ ctx[0].length > 0) return create_if_block_1$3; 34820 } 34821 34822 let current_block_type = select_block_type(ctx); 34823 let if_block2 = current_block_type && current_block_type(ctx); 34824 34825 return { 34826 c() { 34827 div = element("div"); 34828 if (if_block0) if_block0.c(); 34829 t0 = space(); 34830 if (if_block1) if_block1.c(); 34831 t1 = space(); 34832 if (if_block2) if_block2.c(); 34833 attr(div, "class", "subscription-custom-fields-container svelte-uox0m2"); 34834 }, 34835 m(target, anchor) { 34836 insert(target, div, anchor); 34837 if (if_block0) if_block0.m(div, null); 34838 append(div, t0); 34839 if (if_block1) if_block1.m(div, null); 34840 append(div, t1); 34841 if (if_block2) if_block2.m(div, null); 34842 }, 34843 p(ctx, dirty) { 34844 if (/*formTitle*/ ctx[2]) { 34845 if (if_block0) { 34846 if_block0.p(ctx, dirty); 34847 } else { 34848 if_block0 = create_if_block_6$1(ctx); 34849 if_block0.c(); 34850 if_block0.m(div, t0); 34851 } 34852 } else if (if_block0) { 34853 if_block0.d(1); 34854 if_block0 = null; 34855 } 34856 34857 if (/*formDescription*/ ctx[3]) { 34858 if (if_block1) { 34859 if_block1.p(ctx, dirty); 34860 } else { 34861 if_block1 = create_if_block_5$1(ctx); 34862 if_block1.c(); 34863 if_block1.m(div, t1); 34864 } 34865 } else if (if_block1) { 34866 if_block1.d(1); 34867 if_block1 = null; 34868 } 34869 34870 if (current_block_type === (current_block_type = select_block_type(ctx)) && if_block2) { 34871 if_block2.p(ctx, dirty); 34872 } else { 34873 if (if_block2) if_block2.d(1); 34874 if_block2 = current_block_type && current_block_type(ctx); 34875 34876 if (if_block2) { 34877 if_block2.c(); 34878 if_block2.m(div, null); 34879 } 34880 } 34881 }, 34882 i: noop, 34883 o: noop, 34884 d(detaching) { 34885 if (detaching) { 34886 detach(div); 34887 } 34888 34889 if (if_block0) if_block0.d(); 34890 if (if_block1) if_block1.d(); 34891 34892 if (if_block2) { 34893 if_block2.d(); 34894 } 34895 } 34896 }; 34897 } 34898 34899 function instance$5($$self, $$props, $$invalidate) { 34900 let hasChanges; 34901 let changedFields; 34902 let fieldGroups; 34903 let activeFieldGroups; 34904 let { customFields } = $$props; 34905 let { editableFieldNames } = $$props; 34906 let { formTitle } = $$props; 34907 let { formDescription } = $$props; 34908 let { submitButtonText } = $$props; 34909 let { onUpdateCustomFields } = $$props; 34910 let { loading = false } = $$props; 34911 34912 // New props for API call states 34913 let submitting = false; 34914 34915 let successMessage = ''; 34916 let errorMessage = ''; 34917 let fieldValues = {}; 34918 let originalFieldValues = {}; // Track original values to detect changes 34919 34920 // Custom validation function that only validates sections with changes 34921 const validateChangedSections = () => { 34922 // Custom fields don't have validation requirements 34923 return []; 34924 }; 34925 34926 // Initialize/reset form values when component mounts or custom fields change 34927 let lastCustomFieldsLength = 0; 34928 34929 // eslint-disable-next-line no-inner-declarations 34930 function initializeFormValues() { 34931 // Reset/initialize field values to original values 34932 $$invalidate(8, fieldValues = {}); 34933 34934 $$invalidate(16, originalFieldValues = {}); 34935 34936 customFields.forEach(field => { 34937 const originalValue = field.value || ''; 34938 $$invalidate(8, fieldValues[field.name] = originalValue, fieldValues); 34939 $$invalidate(16, originalFieldValues[field.name] = originalValue, originalFieldValues); 34940 }); 34941 34942 // Clear any messages and states 34943 $$invalidate(6, successMessage = ''); 34944 34945 $$invalidate(7, errorMessage = ''); 34946 $$invalidate(11, submitting = false); 34947 } 34948 34949 // Check if a field is editable 34950 const isFieldEditable = fieldName => { 34951 return editableFieldNames.includes(fieldName); 34952 }; 34953 34954 const handleSubmit = async () => { 34955 // Validate only the sections that have changes 34956 const validationErrors = validateChangedSections(); 34957 34958 if (validationErrors.length > 0) {
34959 $$invalidate(7, errorMessage = validationErrors.join(', ')); 34960 return; 34961 } 34962 34963 $$invalidate(11, submitting = true); 34964 $$invalidate(6, successMessage = ''); 34965 $$invalidate(7, errorMessage = ''); 34966 34967 try { 34968 // Only send the fields that have actually changed 34969 const changedFieldValues = {}; 34970 34971 changedFields.forEach(fieldName => { 34972 changedFieldValues[fieldName] = fieldValues[fieldName]; 34973 }); 34974 34975 await onUpdateCustomFields(changedFieldValues); 34976 $$invalidate(6, successMessage = 'Successfully updated subscription details!'); 34977 34978 // Clear all input boxes after successful update 34979 Object.keys(fieldValues).forEach(fieldName => { 34980 $$invalidate(8, fieldValues[fieldName] = '', fieldValues); 34981 $$invalidate(16, originalFieldValues[fieldName] = '', originalFieldValues); 34982 }); 34983 34984 // Clear success message after 5 seconds 34985 setTimeout( 34986 () => { 34987 $$invalidate(6, successMessage = ''); 34988 }, 34989 5000 34990 ); 34991 } catch(error) { 34992 $$invalidate(7, errorMessage = error.message || 'Failed to update subscription details. Please try again.'); 34993 } finally { 34994 $$invalidate(11, submitting = false); 34995 } 34996 }; 34997 34998 const handleFieldChange = (fieldName, value) => { 34999 $$invalidate(8, fieldValues[fieldName] = value, fieldValues); 35000 }; 35001 35002 const handleInputEvent = (fieldName, event) => { 35003 handleFieldChange(fieldName, event.target.value); 35004 }; 35005 35006 const addressFieldNames = [ 35007 'DeliveryAddressLine1__c', 35008 'DeliveryAddressLine2__c', 35009 'DeliveryCity__c', 35010 'DeliveryPostcode__c', 35011 'DeliveryZipcode__c', 35012 'DeliveryState__c', 35013 'DeliveryCountry__c' 35014 ]; 35015 35016 addressFieldNames.some(name => isFieldEditable(name)); 35017 addressFieldNames.some(name => fieldValues[name]); 35018 const input_handler = (field, e) => handleInputEvent(field.name, e); 35019 35020 $$self.$$set = $$props => {
35021 if ('customFields' in $$props) $$invalidate(0, customFields = $$props.customFields); 35022 if ('editableFieldNames' in $$props) $$invalidate(1, editableFieldNames = $$props.editableFieldNames); 35023 if ('formTitle' in $$props) $$invalidate(2, formTitle = $$props.formTitle); 35024 if ('formDescription' in $$props) $$invalidate(3, formDescription = $$props.formDescription); 35025 if ('submitButtonText' in $$props) $$invalidate(4, submitButtonText = $$props.submitButtonText); 35026 if ('onUpdateCustomFields' in $$props) $$invalidate(15, onUpdateCustomFields = $$props.onUpdateCustomFields); 35027 if ('loading' in $$props) $$invalidate(5, loading = $$props.loading); 35028 }; 35029 35030 $$self.$$.update = () => { 35031 if ($$self.$$.dirty[0] & /*fieldValues, originalFieldValues*/ 65792) { 35032 // Check if any field values have been modified 35033 $$invalidate(10, hasChanges = Object.keys(fieldValues).some(key => { 35034 const current = fieldValues[key]; 35035 const original = originalFieldValues[key]; 35036 35037 // Handle array values (multiselect) 35038 if (Array.isArray(current) && Array.isArray(original)) { 35039 return JSON.stringify(current.sort()) !== JSON.stringify(original.sort()); 35040 } 35041 35042 // Handle regular values 35043 return current !== original; 35044 })); 35045 } 35046 35047 if ($$self.$$.dirty[0] & /*fieldValues, originalFieldValues*/ 65792) { 35048 // Get the fields that have been changed (and thus the sections that should be validated) 35049 $$invalidate(19, changedFields = Object.keys(fieldValues).filter(key => { 35050 const current = fieldValues[key]; 35051 const original = originalFieldValues[key]; 35052 35053 // Handle array values (multiselect) 35054 if (Array.isArray(current) && Array.isArray(original)) { 35055 return JSON.stringify(current.sort()) !== JSON.stringify(original.sort()); 35056 } 35057 35058 // Handle regular values 35059 return current !== original; 35060 })); 35061 } 35062 35063 if ($$self.$$.dirty[0] & /*customFields*/ 1) { 35064 // Group fields by category - include all fields for display 35065 $$invalidate(18, fieldGroups = { all: { fields: customFields || [] } }); 35066 } 35067 35068 if ($$self.$$.dirty[0] & /*fieldGroups*/ 262144) { 35069 // Get only field groups that have fields 35070 $$invalidate(9, activeFieldGroups = Object.entries(fieldGroups).filter(([_key, group]) => group.fields.length > 0)); 35071 } 35072 35073 if ($$self.$$.dirty[0] & /*activeFieldGroups, changedFields*/ 524800) { 35074 // Get the sections that have changes and need validation 35075 activeFieldGroups.filter(([_groupKey, group]) => { 35076 return group.fields.some(field => changedFields.includes(field.name)); 35077 }); 35078 } 35079 35080 if ($$self.$$.dirty[0] & /*hasChanges, successMessage, errorMessage*/ 1216) { 35081 // Clear messages when user starts making changes 35082 if (hasChanges && (successMessage || errorMessage)) { 35083 $$invalidate(6, successMessage = ''); 35084 $$invalidate(7, errorMessage = ''); 35085 } 35086 } 35087 35088 if ($$self.$$.dirty[0] & /*customFields, lastCustomFieldsLength*/ 131073) { 35089 if (customFields && customFields.length !== lastCustomFieldsLength) { 35090 initializeFormValues(); 35091 $$invalidate(17, lastCustomFieldsLength = customFields.length); 35092 } 35093 } 35094 }; 35095 35096 return [ 35097 customFields, 35098 editableFieldNames, 35099 formTitle, 35100 formDescription, 35101 submitButtonText, 35102 loading, 35103 successMessage, 35104 errorMessage, 35105 fieldValues, 35106 activeFieldGroups, 35107 hasChanges, 35108 submitting, 35109 isFieldEditable, 35110 handleSubmit, 35111 handleInputEvent, 35112 onUpdateCustomFields, 35113 originalFieldValues, 35114 lastCustomFieldsLength, 35115 fieldGroups, 35116 changedFields, 35117 input_handler 35118 ]; 35119 } 35120 35121 class SubscriptionCustomFieldsList extends SvelteComponent { 35122 constructor(options) { 35123 super(); 35124 35125 init( 35126 this, 35127 options, 35128 instance$5, 35129 create_fragment$5, 35130 safe_not_equal, 35131 { 35132 customFields: 0, 35133 editableFieldNames: 1, 35134 formTitle: 2, 35135 formDescription: 3, 35136 submitButtonText: 4, 35137 onUpdateCustomFields: 15, 35138 loading: 5 35139 }, 35140 null, 35141 [-1, -1] 35142 ); 35143 } 35144 } 35145 35146 const subscriptionCustomFieldsListFactory = { 35147 matches: (sectionElement) => sectionElement.type === elementTypes.SUBSCRIPTION_CUSTOM_FIELDS_LIST, 35148 create: (form, formState, formActions, elementConfig) => { 35149 // Get the selected subscription's custom fields data 35150 const selectedSubscription = formState.selectedSubscription || formState.existingSubscriptions?.[0]; 35151 // Create custom fields array from field definitions and subscription data 35152 // Include all field definitions so both read-only and editable fields are available 35153 const customFields = (elementConfig.customFieldDefinitions || []).map(fieldDef => ({ 35154 ...fieldDef, 35155 value: selectedSubscription?.[fieldDef.name] || '' 35156 })); 35157 return { 35158 component: SubscriptionCustomFieldsList, 35159 props: { 35160 customFields, 35161 editableFieldNames: elementConfig.enabledCustomFields || [], 35162 formTitle: elementConfig.formTitle || 'Update Subscription Details', 35163 formDescription: elementConfig.formDescription || 'Update your subscription information below', 35164 submitButtonText: elementConfig.submitButtonText || 'Update Details', 35165 loading: formState.loadingSubscriptionCustomFields || false, 35166 onBack: () => { 35167 // Navigate back to the main subscription list
35168 formActions.jumpToPartStart(partTypes.LIST_SUBSCRIPTIONS.type); 35169 }, 35170 onUpdateCustomFields: async (fieldValues) => { 35171 // Check if we have a selected subscription with ID 35172 if (!selectedSubscription?.externalId) { 35173 throw new Error('No subscription selected for update'); 35174 } 35175 // Check if we have accountId for ownership verification 35176 if (!selectedSubscription?.accountId) { 35177 throw new Error('Subscription account information is missing. Please try again.'); 35178 } 35179 const subscriptionId = selectedSubscription.externalId; 35180 const accountId = selectedSubscription.accountId; 35181 // Set loading state 35182 formActions.updateFormState({ 35183 loadingSubscriptionCustomFields: true 35184 }); 35185 // Handle preview mode with mock API response 35186 if (form.environment?.previewMode) { 35187 // Simulate API delay 35188 await new Promise(resolve => setTimeout(resolve, 1000)); 35189 // Update form state with the new values 35190 formActions.updateFormState({ 35191 selectedSubscription: { 35192 ...selectedSubscription, 35193 ...fieldValues 35194 }, 35195 loadingSubscriptionCustomFields: false 35196 }); 35197 // Return mock success response 35198 return { success: true, message: 'Custom fields updated successfully (preview mode)' }; 35199 } 35200 try { 35201 // Make real API call to update subscription custom fields 35202 const response = await fetch(`/zephr/subscriptions/${subscriptionId}/custom-fields`, { 35203 method: 'PATCH', 35204 headers: { 35205 'Content-Type': 'application/json', 35206 }, 35207 body: JSON.stringify({ 35208 accountId: accountId, // Required for backend ownership verification 35209 customFields: fieldValues 35210 }) 35211 }); 35212 if (!response.ok) { 35213 const errorData = await response.json().catch(() => ({})); 35214 throw new Error(errorData.message || `Failed to update subscription: ${response.status} ${response.statusText}`); 35215 } 35216 const result = await response.json(); 35217 // Update form state with the new values 35218 formActions.updateFormState({ 35219 selectedSubscription: { 35220 ...selectedSubscription, 35221 ...fieldValues 35222 }, 35223 loadingSubscriptionCustomFields: false 35224 }); 35225 // Return success - the component will handle showing success message 35226 return result; 35227 } 35228 catch (error) { 35229 console.error('Error updating subscription custom fields:', error); 35230 // Clear loading state on error 35231 formActions.updateFormState({ 35232 loadingSubscriptionCustomFields: false 35233 }); 35234 throw error; // Re-throw so component can handle it 35235 } 35236 } 35237 } 35238 }; 35239 } 35240 }; 35241 35242 // TODO: This is a temporary list of countries that are accepted by Zuora. 35243 // We need to get this from the Contact metadata endpoint. 35244 const ZUORA_BILLING_COUNTRIES = [ 35245 "Afghanistan", 35246 "Aland Islands", 35247 "Albania", 35248 "Algeria", 35249 "American Samoa", 35250 "Andorra", 35251 "Angola", 35252 "Anguilla", 35253 "Antarctica", 35254 "Antigua And Barbuda", 35255 "Argentina", 35256 "Armenia", 35257 "Aruba", 35258 "Australia", 35259 "Austria", 35260 "Azerbaijan", 35261 "Bahamas", 35262 "Bahrain", 35263 "Bangladesh", 35264 "Barbados", 35265 "Belarus", 35266 "Belgium", 35267 "Belize", 35268 "Benin", 35269 "Bermuda", 35270 "Bhutan", 35271 "Bolivia", 35272 "Bonaire, Saint Eustatius and Saba", 35273 "Bosnia and Herzegovina", 35274 "Botswana", 35275 "Bouvet Island", 35276 "Brazil", 35277 "British Indian Ocean Territory", 35278 "Brunei Darussalam", 35279 "Bulgaria", 35280 "Burkina Faso", 35281 "Burundi", 35282 "Cambodia", 35283 "Cameroon", 35284 "Canada", 35285 "Cape Verde", 35286 "Cayman Islands", 35287 "Central African Republic", 35288 "Chad", 35289 "Chile", 35290 "China", 35291 "Christmas Island", 35292 "Cocos (Keeling) Islands", 35293 "Colombia", 35294 "Comoros", 35295 "Congo", 35296 "Congo, the Democratic Republic of the", 35297 "Cook Islands", 35298 "Costa Rica", 35299 "Cote d'Ivoire", 35300 "Croatia", 35301 "Cuba", 35302 "Curacao", 35303 "Cyprus", 35304 "Czech Republic", 35305 "Denmark", 35306 "Djibouti", 35307 "Dominica", 35308 "Dominican Republic", 35309 "Ecuador", 35310 "Egypt", 35311 "El Salvador", 35312 "Equatorial Guinea", 35313 "Eritrea", 35314 "Estonia", 35315 "Ethiopia", 35316 "Falkland Islands (Malvinas)", 35317 "Faroe Islands", 35318 "Fiji", 35319 "Finland", 35320 "France", 35321 "French Guiana", 35322 "French Polynesia", 35323 "French Southern Territories", 35324 "Gabon", 35325 "Gambia", 35326 "Georgia", 35327 "Germany", 35328 "Ghana", 35329 "Gibraltar", 35330 "Greece", 35331 "Greenland", 35332 "Grenada", 35333 "Guadeloupe", 35334 "Guam", 35335 "Guatemala", 35336 "Guernsey", 35337 "Guinea", 35338 "Guinea-Bissau", 35339 "Guyana", 35340 "Haiti", 35341 "Heard Island and McDonald Islands", 35342 "Holy See (Vatican City State)", 35343 "Honduras", 35344 "Hong Kong", 35345 "Hungary", 35346 "Iceland", 35347 "India", 35348 "Indonesia",
35349 "Iran, Islamic Republic of", 35350 "Iraq", 35351 "Ireland", 35352 "Isle of Man", 35353 "Israel", 35354 "Italy", 35355 "Jamaica", 35356 "Japan", 35357 "Jersey", 35358 "Jordan", 35359 "Kazakhstan", 35360 "Kenya", 35361 "Kiribati", 35362 "Korea, Democratic People's Republic of", 35363 "Korea, Republic of", 35364 "Kosovo", 35365 "Kuwait", 35366 "Kyrgyzstan", 35367 "Lao People's Democratic Republic", 35368 "Latvia", 35369 "Lebanon", 35370 "Lesotho", 35371 "Liberia", 35372 "Libyan Arab Jamahiriya", 35373 "Liechtenstein", 35374 "Lithuania", 35375 "Luxembourg", 35376 "Macao", 35377 "Macedonia, the former Yugoslav Republic of", 35378 "Madagascar", 35379 "Malawi", 35380 "Malaysia", 35381 "Maldives", 35382 "Mali", 35383 "Malta", 35384 "Marshall Islands", 35385 "Martinique", 35386 "Mauritania", 35387 "Mauritius", 35388 "Mayotte", 35389 "Mexico", 35390 "Micronesia, Federated States of", 35391 "Moldova, Republic of", 35392 "Monaco", 35393 "Mongolia", 35394 "Montenegro", 35395 "Montserrat", 35396 "Morocco", 35397 "Mozambique", 35398 "Myanmar", 35399 "Namibia", 35400 "Nauru", 35401 "Nepal", 35402 "Netherlands", 35403 "Netherlands Antilles", 35404 "New Caledonia", 35405 "New Zealand", 35406 "Nicaragua", 35407 "Niger", 35408 "Nigeria", 35409 "Niue", 35410 "Norfolk Island", 35411 "Northern Mariana Islands", 35412 "Norway", 35413 "Oman", 35414 "Pakistan", 35415 "Palau", 35416 "Palestinian Territory, Occupied", 35417 "Panama", 35418 "Papua New Guinea", 35419 "Paraguay", 35420 "Peru", 35421 "Philippines", 35422 "Pitcairn", 35423 "Poland", 35424 "Portugal", 35425 "Puerto Rico", 35426 "Qatar", 35427 "Reunion", 35428 "Romania", 35429 "Russian Federation", 35430 "Rwanda", 35431 "Saint Barthelemy", 35432 "Saint Helena", 35433 "Saint Kitts and Nevis", 35434 "Saint Lucia", 35435 "Saint Martin (French part)", 35436 "Saint Pierre and Miquelon", 35437 "Saint Vincent and the Grenadines", 35438 "Samoa", 35439 "San Marino", 35440 "Sao Tome and Principe", 35441 "Saudi Arabia", 35442 "Senegal", 35443 "Serbia", 35444 "Seychelles", 35445 "Sierra Leone", 35446 "Singapore", 35447 "Sint Maarten", 35448 "Slovakia", 35449 "Slovenia", 35450 "Solomon Islands", 35451 "Somalia", 35452 "South Africa", 35453 "South Georgia and the South Sandwich Islands", 35454 "South Sudan", 35455 "Spain", 35456 "Sri Lanka", 35457 "Sudan", 35458 "Suriname", 35459 "Svalbard and Jan Mayen", 35460 "Swaziland", 35461 "Sweden", 35462 "Switzerland", 35463 "Syrian Arab Republic", 35464 "Taiwan", 35465 "Tajikistan", 35466 "Tanzania, United Republic of", 35467 "Thailand", 35468 "Timor-Leste", 35469 "Togo", 35470 "Tokelau", 35471 "Tonga", 35472 "Trinidad and Tobago", 35473 "Tunisia", 35474 "Turkey", 35475 "Turkmenistan", 35476 "Turks and Caicos Islands", 35477 "Tuvalu", 35478 "Uganda", 35479 "Ukraine", 35480 "United Arab Emirates", 35481 "United Kingdom", 35482 "United States", 35483 "United States Minor Outlying Islands", 35484 "Uruguay", 35485 "Uzbekistan", 35486 "Vanuatu", 35487 "Venezuela", 35488 "Viet Nam", 35489 "Virgin Islands, British", 35490 "Virgin Islands, U.S.", 35491 "Wallis and Futuna", 35492 "Western Sahara", 35493 "Yemen", 35494 "Zambia", 35495 "Zimbabwe" 35496 ]; 35497 35498 /* src/components/elements/billToContact/BillToContact.svelte generated by Svelte v4.2.12 */ 35499 35500 function get_each_context$1(ctx, list, i) { 35501 const child_ctx = ctx.slice(); 35502 child_ctx[17] = list[i]; 35503 return child_ctx; 35504 } 35505 35506 // (63:6) {#each ZUORA_BILLING_COUNTRIES as country} 35507 function create_each_block$1(ctx) { 35508 let option; 35509 let t0; 35510 let t1; 35511 let option_selected_value; 35512 35513 return { 35514 c() { 35515 option = element("option"); 35516 t0 = text(/*country*/ ctx[17]); 35517 t1 = space(); 35518 option.__value = /*country*/ ctx[17]; 35519 set_input_value(option, option.__value); 35520 option.selected = option_selected_value = /*billToContact*/ ctx[0].country === /*country*/ ctx[17]; 35521 }, 35522 m(target, anchor) { 35523 insert(target, option, anchor); 35524 append(option, t0); 35525 append(option, t1); 35526 }, 35527 p(ctx, dirty) { 35528 if (dirty & /*billToContact*/ 1 && option_selected_value !== (option_selected_value = /*billToContact*/ ctx[0].country === /*country*/ ctx[17])) { 35529 option.selected = option_selected_value; 35530 } 35531 }, 35532 d(detaching) { 35533 if (detaching) { 35534 detach(option); 35535 } 35536 } 35537 }; 35538 } 35539 35540 // (83:4) {#if errors["address1"]} 35541 function create_if_block_6(ctx) { 35542 let div; 35543 let t_value = /*errors*/ ctx[1]["address1"] + ""; 35544 let t; 35545 35546 return { 35547 c() { 35548 div = element("div"); 35549 t = text(t_value); 35550 attr(div, "class", "error-text svelte-z564ap"); 35551 }, 35552 m(target, anchor) { 35553 insert(target, div, anchor); 35554 append(div, t); 35555 }, 35556 p(ctx, dirty) {
35557 if (dirty & /*errors*/ 2 && t_value !== (t_value = /*errors*/ ctx[1]["address1"] + "")) set_data(t, t_value); 35558 }, 35559 d(detaching) { 35560 if (detaching) { 35561 detach(div); 35562 } 35563 } 35564 }; 35565 } 35566 35567 // (97:4) {#if errors["address2"]} 35568 function create_if_block_5(ctx) { 35569 let div; 35570 let t_value = /*errors*/ ctx[1]["address2"] + ""; 35571 let t; 35572 35573 return { 35574 c() { 35575 div = element("div"); 35576 t = text(t_value); 35577 attr(div, "class", "error-text svelte-z564ap"); 35578 }, 35579 m(target, anchor) { 35580 insert(target, div, anchor); 35581 append(div, t); 35582 }, 35583 p(ctx, dirty) { 35584 if (dirty & /*errors*/ 2 && t_value !== (t_value = /*errors*/ ctx[1]["address2"] + "")) set_data(t, t_value); 35585 }, 35586 d(detaching) { 35587 if (detaching) { 35588 detach(div); 35589 } 35590 } 35591 }; 35592 } 35593 35594 // (111:4) {#if errors["city"]} 35595 function create_if_block_4(ctx) { 35596 let div; 35597 let t_value = /*errors*/ ctx[1]["city"] + ""; 35598 let t; 35599 35600 return { 35601 c() { 35602 div = element("div"); 35603 t = text(t_value); 35604 attr(div, "class", "error-text svelte-z564ap"); 35605 }, 35606 m(target, anchor) { 35607 insert(target, div, anchor); 35608 append(div, t); 35609 }, 35610 p(ctx, dirty) { 35611 if (dirty & /*errors*/ 2 && t_value !== (t_value = /*errors*/ ctx[1]["city"] + "")) set_data(t, t_value); 35612 }, 35613 d(detaching) { 35614 if (detaching) { 35615 detach(div); 35616 } 35617 } 35618 }; 35619 } 35620 35621 // (125:4) {#if errors["state"]} 35622 function create_if_block_3$1(ctx) { 35623 let div; 35624 let t_value = /*errors*/ ctx[1]["state"] + ""; 35625 let t; 35626 35627 return { 35628 c() { 35629 div = element("div"); 35630 t = text(t_value); 35631 attr(div, "class", "error-text svelte-z564ap"); 35632 }, 35633 m(target, anchor) { 35634 insert(target, div, anchor); 35635 append(div, t); 35636 }, 35637 p(ctx, dirty) { 35638 if (dirty & /*errors*/ 2 && t_value !== (t_value = /*errors*/ ctx[1]["state"] + "")) set_data(t, t_value); 35639 }, 35640 d(detaching) { 35641 if (detaching) { 35642 detach(div); 35643 } 35644 } 35645 }; 35646 } 35647 35648 // (139:4) {#if errors["zipCode"]} 35649 function create_if_block_2$1(ctx) { 35650 let div; 35651 let t_value = /*errors*/ ctx[1]["zipCode"] + ""; 35652 let t; 35653 35654 return { 35655 c() { 35656 div = element("div"); 35657 t = text(t_value); 35658 attr(div, "class", "error-text svelte-z564ap"); 35659 }, 35660 m(target, anchor) { 35661 insert(target, div, anchor); 35662 append(div, t); 35663 }, 35664 p(ctx, dirty) { 35665 if (dirty & /*errors*/ 2 && t_value !== (t_value = /*errors*/ ctx[1]["zipCode"] + "")) set_data(t, t_value); 35666 }, 35667 d(detaching) { 35668 if (detaching) { 35669 detach(div); 35670 } 35671 } 35672 }; 35673 } 35674 35675 // (153:4) {#if errors["county"]} 35676 function create_if_block_1$2(ctx) { 35677 let div; 35678 let t_value = /*errors*/ ctx[1]["county"] + ""; 35679 let t; 35680 35681 return { 35682 c() { 35683 div = element("div"); 35684 t = text(t_value); 35685 attr(div, "class", "error-text svelte-z564ap"); 35686 }, 35687 m(target, anchor) { 35688 insert(target, div, anchor); 35689 append(div, t); 35690 }, 35691 p(ctx, dirty) { 35692 if (dirty & /*errors*/ 2 && t_value !== (t_value = /*errors*/ ctx[1]["county"] + "")) set_data(t, t_value); 35693 }, 35694 d(detaching) { 35695 if (detaching) { 35696 detach(div); 35697 } 35698 } 35699 }; 35700 } 35701 35702 // (167:4) {#if errors["taxRegion"]} 35703 function create_if_block$2(ctx) { 35704 let div; 35705 let t_value = /*errors*/ ctx[1]["taxRegion"] + ""; 35706 let t; 35707 35708 return { 35709 c() { 35710 div = element("div"); 35711 t = text(t_value); 35712 attr(div, "class", "error-text svelte-z564ap"); 35713 }, 35714 m(target, anchor) { 35715 insert(target, div, anchor); 35716 append(div, t); 35717 }, 35718 p(ctx, dirty) { 35719 if (dirty & /*errors*/ 2 && t_value !== (t_value = /*errors*/ ctx[1]["taxRegion"] + "")) set_data(t, t_value); 35720 }, 35721 d(detaching) { 35722 if (detaching) { 35723 detach(div); 35724 } 35725 } 35726 }; 35727 } 35728 35729 function create_fragment$4(ctx) { 35730 let div8; 35731 let div0; 35732 let label0; 35733 let t1; 35734 let select; 35735 let option; 35736 let select_value_value; 35737 let t3; 35738 let div1; 35739 let label1; 35740 let t5; 35741 let input0; 35742 let t6; 35743 let t7; 35744 let div2; 35745 let label2; 35746 let t9; 35747 let input1; 35748 let t10; 35749 let t11; 35750 let div3; 35751 let label3; 35752 let t13; 35753 let input2; 35754 let t14; 35755 let t15; 35756 let div4; 35757 let label4; 35758 let t17; 35759 let input3; 35760 let t18; 35761 let t19; 35762 let div5; 35763 let label5; 35764 let t21; 35765 let input4; 35766 let t22; 35767 let t23; 35768 let div6; 35769 let label6; 35770 let t25; 35771 let input5; 35772 let t26; 35773 let t27; 35774 let div7; 35775 let label7; 35776 let t29; 35777 let input6; 35778 let t30; 35779 let mounted; 35780 let dispose; 35781 let each_value = ensure_array_like(ZUORA_BILLING_COUNTRIES); 35782 let each_blocks = []; 35783 35784 for (let i = 0; i < each_value.length; i += 1) { 35785 each_blocks[i] = create_each_block$1(get_each_context$1(ctx, each_value, i)); 35786 } 35787 35788 let if_block0 = /*errors*/ ctx[1]["address1"] && create_if_block_6(ctx); 35789 let if_block1 = /*errors*/ ctx[1]["address2"] && create_if_block_5(ctx); 35790 let if_block2 = /*errors*/ ctx[1]["city"] && create_if_block_4(ctx); 35791 let if_block3 = /*errors*/ ctx[1]["state"] && create_if_block_3$1(ctx); 35792 let if_block4 = /*errors*/ ctx[1]["zipCode"] && create_if_block_2$1(ctx); 35793 let if_block5 = /*errors*/ ctx[1]["county"] && create_if_block_1$2(ctx); 35794 let if_block6 = /*errors*/ ctx[1]["taxRegion"] && create_if_block$2(ctx); 35795 35796 return { 35797 c() { 35798 div8 = element("div"); 35799 div0 = element("div"); 35800 label0 = element("label"); 35801 label0.textContent = "Country"; 35802 t1 = space(); 35803 select = element("select"); 35804 option = element("option"); 35805 option.textContent = "Select a Country"; 35806 35807 for (let i = 0; i < each_blocks.length; i += 1) { 35808 each_blocks[i].c(); 35809 } 35810 35811 t3 = space(); 35812 div1 = element("div"); 35813 label1 = element("label"); 35814 label1.textContent = "Address 1"; 35815 t5 = space(); 35816 input0 = element("input"); 35817 t6 = space(); 35818 if (if_block0) if_block0.c(); 35819 t7 = space(); 35820 div2 = element("div"); 35821 label2 = element("label"); 35822 label2.textContent = "Address 2"; 35823 t9 = space(); 35824 input1 = element("input"); 35825 t10 = space(); 35826 if (if_block1) if_block1.c(); 35827 t11 = space(); 35828 div3 = element("div"); 35829 label3 = element("label"); 35830 label3.textContent = "City"; 35831 t13 = space(); 35832 input2 = element("input"); 35833 t14 = space(); 35834 if (if_block2) if_block2.c(); 35835 t15 = space(); 35836 div4 = element("div"); 35837 label4 = element("label"); 35838 label4.textContent = "State/Province"; 35839 t17 = space(); 35840 input3 = element("input"); 35841 t18 = space(); 35842 if (if_block3) if_block3.c(); 35843 t19 = space(); 35844 div5 = element("div"); 35845 label5 = element("label"); 35846 label5.textContent = "Postal Code"; 35847 t21 = space(); 35848 input4 = element("input"); 35849 t22 = space(); 35850 if (if_block4) if_block4.c(); 35851 t23 = space(); 35852 div6 = element("div"); 35853 label6 = element("label"); 35854 label6.textContent = "County"; 35855 t25 = space(); 35856 input5 = element("input"); 35857 t26 = space(); 35858 if (if_block5) if_block5.c(); 35859 t27 = space(); 35860 div7 = element("div"); 35861 label7 = element("label"); 35862 label7.textContent = "Tax Region"; 35863 t29 = space(); 35864 input6 = element("input"); 35865 t30 = space(); 35866 if (if_block6) if_block6.c(); 35867 attr(label0, "for", "address1"); 35868 attr(label0, "class", "svelte-z564ap"); 35869 option.disabled = true; 35870 option.__value = ""; 35871 set_input_value(option, option.__value); 35872 attr(select, "name", "country"); 35873 attr(select, "class", "zephr-form-input zephr-form-input-select svelte-z564ap"); 35874 toggle_class(select, "unselected", !/*billToContact*/ ctx[0].country); 35875 attr(div0, "class", "field svelte-z564ap"); 35876 attr(label1, "for", "address1"); 35877 attr(label1, "class", "svelte-z564ap"); 35878 attr(input0, "id", "address1"); 35879 attr(input0, "type", "text"); 35880 input0.required = true; 35881 attr(input0, "class", "svelte-z564ap"); 35882 toggle_class(input0, "error", !!/*errors*/ ctx[1]["address1"]); 35883 attr(div1, "class", "field svelte-z564ap"); 35884 attr(label2, "for", "address2"); 35885 attr(label2, "class", "svelte-z564ap"); 35886 attr(input1, "id", "address2"); 35887 attr(input1, "type", "text"); 35888 input1.required = true; 35889 attr(input1, "class", "svelte-z564ap"); 35890 toggle_class(input1, "error", !!/*errors*/ ctx[1]["address2"]); 35891 attr(div2, "class", "field svelte-z564ap"); 35892 attr(label3, "for", "city"); 35893 attr(label3, "class", "svelte-z564ap"); 35894 attr(input2, "id", "city"); 35895 attr(input2, "type", "text"); 35896 input2.required = true; 35897 attr(input2, "class", "svelte-z564ap"); 35898 toggle_class(input2, "error", !!/*errors*/ ctx[1]["city"]); 35899 attr(div3, "class", "field svelte-z564ap"); 35900 attr(label4, "for", "state"); 35901 attr(label4, "class", "svelte-z564ap"); 35902 attr(input3, "id", "state"); 35903 attr(input3, "type", "text"); 35904 input3.required = true; 35905 attr(input3, "class", "svelte-z564ap"); 35906 toggle_class(input3, "error", !!/*errors*/ ctx[1]["state"]); 35907 attr(div4, "class", "field svelte-z564ap"); 35908 attr(label5, "for", "zipCode"); 35909 attr(label5, "class", "svelte-z564ap"); 35910 attr(input4, "id", "zipCode"); 35911 attr(input4, "type", "text"); 35912 input4.required = true; 35913 attr(input4, "class", "svelte-z564ap"); 35914 toggle_class(input4, "error", !!/*errors*/ ctx[1]["zipCode"]); 35915 attr(div5, "class", "field svelte-z564ap"); 35916 attr(label6, "for", "county"); 35917 attr(label6, "class", "svelte-z564ap"); 35918 attr(input5, "id", "county"); 35919 attr(input5, "type", "text"); 35920 input5.required = true; 35921 attr(input5, "class", "svelte-z564ap"); 35922 toggle_class(input5, "error", !!/*errors*/ ctx[1]["county"]); 35923 attr(div6, "class", "field svelte-z564ap"); 35924 attr(label7, "for", "taxRegion"); 35925 attr(label7, "class", "svelte-z564ap"); 35926 attr(input6, "id", "taxRegion"); 35927 attr(input6, "type", "text"); 35928 input6.required = true; 35929 attr(input6, "class", "svelte-z564ap"); 35930 toggle_class(input6, "error", !!/*errors*/ ctx[1]["taxRegion"]); 35931 attr(div7, "class", "field svelte-z564ap"); 35932 attr(div8, "class", "bill-to-contact-section svelte-z564ap"); 35933 }, 35934 m(target, anchor) {
35935 insert(target, div8, anchor); 35936 append(div8, div0); 35937 append(div0, label0); 35938 append(div0, t1); 35939 append(div0, select); 35940 append(select, option); 35941 35942 for (let i = 0; i < each_blocks.length; i += 1) { 35943 if (each_blocks[i]) { 35944 each_blocks[i].m(select, null); 35945 } 35946 } 35947 35948 select_option(select, /*billToContact*/ ctx[0].country ?? ""); 35949 append(div8, t3); 35950 append(div8, div1); 35951 append(div1, label1); 35952 append(div1, t5); 35953 append(div1, input0); 35954 set_input_value(input0, /*billToContact*/ ctx[0].address1); 35955 append(div1, t6); 35956 if (if_block0) if_block0.m(div1, null); 35957 append(div8, t7); 35958 append(div8, div2); 35959 append(div2, label2); 35960 append(div2, t9); 35961 append(div2, input1); 35962 set_input_value(input1, /*billToContact*/ ctx[0].address2); 35963 append(div2, t10); 35964 if (if_block1) if_block1.m(div2, null); 35965 append(div8, t11); 35966 append(div8, div3); 35967 append(div3, label3); 35968 append(div3, t13); 35969 append(div3, input2); 35970 set_input_value(input2, /*billToContact*/ ctx[0].city); 35971 append(div3, t14); 35972 if (if_block2) if_block2.m(div3, null); 35973 append(div8, t15); 35974 append(div8, div4); 35975 append(div4, label4); 35976 append(div4, t17); 35977 append(div4, input3); 35978 set_input_value(input3, /*billToContact*/ ctx[0].state); 35979 append(div4, t18); 35980 if (if_block3) if_block3.m(div4, null); 35981 append(div8, t19); 35982 append(div8, div5); 35983 append(div5, label5); 35984 append(div5, t21); 35985 append(div5, input4); 35986 set_input_value(input4, /*billToContact*/ ctx[0].zipCode); 35987 append(div5, t22); 35988 if (if_block4) if_block4.m(div5, null); 35989 append(div8, t23); 35990 append(div8, div6); 35991 append(div6, label6); 35992 append(div6, t25); 35993 append(div6, input5); 35994 set_input_value(input5, /*billToContact*/ ctx[0].county); 35995 append(div6, t26); 35996 if (if_block5) if_block5.m(div6, null); 35997 append(div8, t27); 35998 append(div8, div7); 35999 append(div7, label7); 36000 append(div7, t29); 36001 append(div7, input6); 36002 set_input_value(input6, /*billToContact*/ ctx[0].taxRegion); 36003 append(div7, t30); 36004 if (if_block6) if_block6.m(div7, null); 36005 36006 if (!mounted) { 36007 dispose = [ 36008 listen(select, "change", /*onCountrySelect*/ ctx[3]), 36009 listen(input0, "input", /*input0_input_handler*/ ctx[6]), 36010 listen(input0, "input", /*updateSuspendResumeSubscription*/ ctx[2]), 36011 listen(input1, "input", /*input1_input_handler*/ ctx[7]), 36012 listen(input1, "input", /*updateSuspendResumeSubscription*/ ctx[2]), 36013 listen(input2, "input", /*input2_input_handler*/ ctx[8]), 36014 listen(input2, "input", /*updateSuspendResumeSubscription*/ ctx[2]), 36015 listen(input3, "input", /*input3_input_handler*/ ctx[9]), 36016 listen(input3, "input", /*updateSuspendResumeSubscription*/ ctx[2]), 36017 listen(input4, "input", /*input4_input_handler*/ ctx[10]), 36018 listen(input4, "input", /*updateSuspendResumeSubscription*/ ctx[2]), 36019 listen(input5, "input", /*input5_input_handler*/ ctx[11]), 36020 listen(input5, "input", /*updateSuspendResumeSubscription*/ ctx[2]), 36021 listen(input6, "input", /*input6_input_handler*/ ctx[12]), 36022 listen(input6, "input", /*updateSuspendResumeSubscription*/ ctx[2]) 36023 ]; 36024 36025 mounted = true; 36026 } 36027 }, 36028 p(ctx, [dirty]) { 36029 if (dirty & /*billToContact*/ 1) { 36030 each_value = ensure_array_like(ZUORA_BILLING_COUNTRIES); 36031 let i; 36032 36033 for (i = 0; i < each_value.length; i += 1) { 36034 const child_ctx = get_each_context$1(ctx, each_value, i); 36035 36036 if (each_blocks[i]) { 36037 each_blocks[i].p(child_ctx, dirty); 36038 } else { 36039 each_blocks[i] = create_each_block$1(child_ctx); 36040 each_blocks[i].c(); 36041 each_blocks[i].m(select, null); 36042 } 36043 } 36044 36045 for (; i < each_blocks.length; i += 1) { 36046 each_blocks[i].d(1); 36047 } 36048 36049 each_blocks.length = each_value.length; 36050 } 36051 36052 if (dirty & /*billToContact*/ 1 && select_value_value !== (select_value_value = /*billToContact*/ ctx[0].country ?? "")) { 36053 select_option(select, /*billToContact*/ ctx[0].country ?? ""); 36054 } 36055 36056 if (dirty & /*billToContact*/ 1) { 36057 toggle_class(select, "unselected", !/*billToContact*/ ctx[0].country); 36058 } 36059
36060 if (dirty & /*billToContact*/ 1 && input0.value !== /*billToContact*/ ctx[0].address1) { 36061 set_input_value(input0, /*billToContact*/ ctx[0].address1); 36062 } 36063 36064 if (dirty & /*errors*/ 2) { 36065 toggle_class(input0, "error", !!/*errors*/ ctx[1]["address1"]); 36066 } 36067 36068 if (/*errors*/ ctx[1]["address1"]) { 36069 if (if_block0) { 36070 if_block0.p(ctx, dirty); 36071 } else { 36072 if_block0 = create_if_block_6(ctx); 36073 if_block0.c(); 36074 if_block0.m(div1, null); 36075 } 36076 } else if (if_block0) { 36077 if_block0.d(1); 36078 if_block0 = null; 36079 } 36080 36081 if (dirty & /*billToContact*/ 1 && input1.value !== /*billToContact*/ ctx[0].address2) { 36082 set_input_value(input1, /*billToContact*/ ctx[0].address2); 36083 } 36084 36085 if (dirty & /*errors*/ 2) { 36086 toggle_class(input1, "error", !!/*errors*/ ctx[1]["address2"]); 36087 } 36088 36089 if (/*errors*/ ctx[1]["address2"]) { 36090 if (if_block1) { 36091 if_block1.p(ctx, dirty); 36092 } else { 36093 if_block1 = create_if_block_5(ctx); 36094 if_block1.c(); 36095 if_block1.m(div2, null); 36096 } 36097 } else if (if_block1) { 36098 if_block1.d(1); 36099 if_block1 = null; 36100 } 36101 36102 if (dirty & /*billToContact*/ 1 && input2.value !== /*billToContact*/ ctx[0].city) { 36103 set_input_value(input2, /*billToContact*/ ctx[0].city); 36104 } 36105 36106 if (dirty & /*errors*/ 2) { 36107 toggle_class(input2, "error", !!/*errors*/ ctx[1]["city"]); 36108 } 36109 36110 if (/*errors*/ ctx[1]["city"]) { 36111 if (if_block2) { 36112 if_block2.p(ctx, dirty); 36113 } else { 36114 if_block2 = create_if_block_4(ctx); 36115 if_block2.c(); 36116 if_block2.m(div3, null); 36117 } 36118 } else if (if_block2) { 36119 if_block2.d(1); 36120 if_block2 = null; 36121 } 36122 36123 if (dirty & /*billToContact*/ 1 && input3.value !== /*billToContact*/ ctx[0].state) { 36124 set_input_value(input3, /*billToContact*/ ctx[0].state); 36125 } 36126 36127 if (dirty & /*errors*/ 2) { 36128 toggle_class(input3, "error", !!/*errors*/ ctx[1]["state"]); 36129 } 36130 36131 if (/*errors*/ ctx[1]["state"]) { 36132 if (if_block3) { 36133 if_block3.p(ctx, dirty); 36134 } else { 36135 if_block3 = create_if_block_3$1(ctx); 36136 if_block3.c(); 36137 if_block3.m(div4, null); 36138 } 36139 } else if (if_block3) { 36140 if_block3.d(1); 36141 if_block3 = null; 36142 } 36143 36144 if (dirty & /*billToContact*/ 1 && input4.value !== /*billToContact*/ ctx[0].zipCode) { 36145 set_input_value(input4, /*billToContact*/ ctx[0].zipCode); 36146 } 36147 36148 if (dirty & /*errors*/ 2) { 36149 toggle_class(input4, "error", !!/*errors*/ ctx[1]["zipCode"]); 36150 } 36151 36152 if (/*errors*/ ctx[1]["zipCode"]) { 36153 if (if_block4) { 36154 if_block4.p(ctx, dirty); 36155 } else { 36156 if_block4 = create_if_block_2$1(ctx); 36157 if_block4.c(); 36158 if_block4.m(div5, null); 36159 } 36160 } else if (if_block4) { 36161 if_block4.d(1); 36162 if_block4 = null; 36163 } 36164 36165 if (dirty & /*billToContact*/ 1 && input5.value !== /*billToContact*/ ctx[0].county) { 36166 set_input_value(input5, /*billToContact*/ ctx[0].county); 36167 } 36168 36169 if (dirty & /*errors*/ 2) { 36170 toggle_class(input5, "error", !!/*errors*/ ctx[1]["county"]); 36171 } 36172 36173 if (/*errors*/ ctx[1]["county"]) { 36174 if (if_block5) { 36175 if_block5.p(ctx, dirty); 36176 } else { 36177 if_block5 = create_if_block_1$2(ctx); 36178 if_block5.c(); 36179 if_block5.m(div6, null); 36180 } 36181 } else if (if_block5) { 36182 if_block5.d(1); 36183 if_block5 = null; 36184 } 36185 36186 if (dirty & /*billToContact*/ 1 && input6.value !== /*billToContact*/ ctx[0].taxRegion) { 36187 set_input_value(input6, /*billToContact*/ ctx[0].taxRegion); 36188 } 36189 36190 if (dirty & /*errors*/ 2) { 36191 toggle_class(input6, "error", !!/*errors*/ ctx[1]["taxRegion"]); 36192 } 36193 36194 if (/*errors*/ ctx[1]["taxRegion"]) { 36195 if (if_block6) { 36196 if_block6.p(ctx, dirty); 36197 } else { 36198 if_block6 = create_if_block$2(ctx); 36199 if_block6.c(); 36200 if_block6.m(div7, null); 36201 } 36202 } else if (if_block6) { 36203 if_block6.d(1); 36204 if_block6 = null; 36205 } 36206 }, 36207 i: noop, 36208 o: noop, 36209 d(detaching) { 36210 if (detaching) { 36211 detach(div8); 36212 } 36213 36214 destroy_each(each_blocks, detaching); 36215 if (if_block0) if_block0.d(); 36216 if (if_block1) if_block1.d(); 36217 if (if_block2) if_block2.d(); 36218 if (if_block3) if_block3.d(); 36219 if (if_block4) if_block4.d(); 36220 if (if_block5) if_block5.d(); 36221 if (if_block6) if_block6.d(); 36222 mounted = false;
36223 run_all(dispose); 36224 } 36225 }; 36226 } 36227 36228 function instance$4($$self, $$props, $$invalidate) { 36229 let { formState } = $$props; 36230 let { formActions } = $$props; 36231 const dispatch = createEventDispatcher(); 36232 let billToContact = {}; 36233 const sourceContact = formState.selectedSubscription?.billToContact || {}; 36234 36235 const fieldsToExtract = [ 36236 'country', 36237 'address1', 36238 'address2', 36239 'city', 36240 'state', 36241 'zipCode', 36242 'county', 36243 'taxRegion' 36244 ]; 36245 36246 for (const field of fieldsToExtract) { 36247 if (sourceContact[field] != null) { 36248 billToContact[field] = sourceContact[field]; 36249 } 36250 } 36251 36252 let errors = {}; 36253 36254 // Update form state when input changes 36255 const updateSuspendResumeSubscription = () => { 36256 formActions.updateFormState({ billToContact }); 36257 validateForm(); 36258 }; 36259 36260 const onCountrySelect = e => { 36261 $$invalidate(0, billToContact.country = e.target.value, billToContact); 36262 updateSuspendResumeSubscription(); 36263 }; 36264 36265 const validateForm = () => { 36266 // Reset errors 36267 $$invalidate(1, errors = {}); 36268 36269 if (!!billToContact.address1 && billToContact.address1.length > 255) { 36270 $$invalidate(1, errors["address1"] = "Address 1 should be 255 characters or less", errors); 36271 } 36272 36273 if (!!billToContact.address2 && billToContact.address2.length > 255) { 36274 $$invalidate(1, errors["address2"] = "Address 2 should be 255 characters or less", errors); 36275 } 36276 36277 if (!!billToContact.city && billToContact.city.length > 40) { 36278 $$invalidate(1, errors["city"] = "City should be 40 characters or less", errors); 36279 } 36280 36281 if (!!billToContact.county && billToContact.county.length > 32) { 36282 $$invalidate(1, errors["county"] = "County should be 32 characters or less", errors); 36283 } 36284 36285 if (!!billToContact.zipCode && billToContact.zipCode.length > 20) { 36286 $$invalidate(1, errors["zipCode"] = "Postal code should be 20 characters or less", errors); 36287 } 36288 36289 // Dispatch event for form validity 36290 const isValid = Object.keys(errors).length === 0; 36291 36292 dispatch("validity", { isValid }); 36293 }; 36294 36295 function input0_input_handler() { 36296 billToContact.address1 = this.value; 36297 $$invalidate(0, billToContact); 36298 } 36299 36300 function input1_input_handler() { 36301 billToContact.address2 = this.value; 36302 $$invalidate(0, billToContact); 36303 } 36304 36305 function input2_input_handler() { 36306 billToContact.city = this.value; 36307 $$invalidate(0, billToContact); 36308 } 36309 36310 function input3_input_handler() { 36311 billToContact.state = this.value; 36312 $$invalidate(0, billToContact); 36313 } 36314 36315 function input4_input_handler() { 36316 billToContact.zipCode = this.value; 36317 $$invalidate(0, billToContact); 36318 } 36319 36320 function input5_input_handler() { 36321 billToContact.county = this.value; 36322 $$invalidate(0, billToContact); 36323 } 36324 36325 function input6_input_handler() { 36326 billToContact.taxRegion = this.value; 36327 $$invalidate(0, billToContact); 36328 } 36329 36330 $$self.$$set = $$props => {
36331 if ('formState' in $$props) $$invalidate(4, formState = $$props.formState); 36332 if ('formActions' in $$props) $$invalidate(5, formActions = $$props.formActions); 36333 }; 36334 36335 return [ 36336 billToContact, 36337 errors, 36338 updateSuspendResumeSubscription, 36339 onCountrySelect, 36340 formState, 36341 formActions, 36342 input0_input_handler, 36343 input1_input_handler, 36344 input2_input_handler, 36345 input3_input_handler, 36346 input4_input_handler, 36347 input5_input_handler, 36348 input6_input_handler 36349 ]; 36350 } 36351 36352 class BillToContact extends SvelteComponent { 36353 constructor(options) { 36354 super(); 36355 init(this, options, instance$4, create_fragment$4, safe_not_equal, { formState: 4, formActions: 5 }); 36356 } 36357 } 36358 36359 const billToContactFactory = { 36360 matches: (sectionElement) => sectionElement.type === elementTypes.BILL_TO_CONTACT, 36361 create: (form, formState, formActions) => { 36362 return { 36363 component: BillToContact, 36364 props: { 36365 form, 36366 formState, 36367 formActions, 36368 } 36369 }; 36370 } 36371 }; 36372 36373 const factory$1 = { 36374 matches: (sectionElement) => sectionElement.type === elementTypes.BILLING_COUNTRY, 36375 create: (form, formState, formActions, elementConfig) => { 36376 const disabled = elementConfig.disabled || formState.isBusy; 36377 // Only show for zuora-billing payment provider AND when countryLabel is configured 36378 if (form.organisationConfiguration.paymentProvider !== 'zuora-billing') { 36379 return null; 36380 } 36381 const paymentConfig = formConfigAs(form); 36382 // Don't render if countryLabel is not configured in admin console 36383 if (!paymentConfig.countryLabel) { 36384 return null; 36385 } 36386 const configuredLabel = paymentConfig.countryLabel || elementConfig.label || "Country"; 36387 return ({ 36388 component: BillingCountry, 36389 props: { 36390 formKey: form.uniqueKey, 36391 config: { 36392 ...elementConfig, 36393 label: configuredLabel 36394 }, 36395 value: formState.billingCountry || "", 36396 disabled, 36397 onChange: (value) => { 36398 if (!disabled) { 36399 formActions.updateFormState({ 36400 billingCountry: value, 36401 // Clear state when country changes (always clear to avoid US/CA state conflicts) 36402 billingState: "", 36403 serverErrors: [] 36404 }); 36405 logDataLayerEvent(form, 'zephr_form_input_change', { 36406 inputName: `zephr-form-billing-country-${form.uniqueKey}`, 36407 sectionId: formState.currentSection.type, 36408 field: 'billing_country' 36409 }); 36410 } 36411 }, 36412 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 36413 inputName: `zephr-form-billing-country-${form.uniqueKey}`, 36414 sectionId: formState.currentSection.type, 36415 field: 'billing_country' 36416 }), 36417 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 36418 inputName: `zephr-form-billing-country-${form.uniqueKey}`, 36419 sectionId: formState.currentSection.type, 36420 field: 'billing_country' 36421 }), 36422 isPaymentForm: form.formType === FormType.PAYMENT, 36423 }, 36424 isValid: !elementConfig.required || !!formState.billingCountry 36425 }); 36426 } 36427 }; 36428 36429 const factory = { 36430 matches: (sectionElement) => sectionElement.type === elementTypes.BILLING_STATE, 36431 create: (form, formState, formActions, elementConfig) => { 36432 const disabled = elementConfig.disabled || formState.isBusy; 36433 // Only show for zuora-billing payment provider AND when stateLabel is configured 36434 if (form.organisationConfiguration.paymentProvider !== 'zuora-billing') { 36435 return null; 36436 } 36437 const paymentConfig = formConfigAs(form); 36438 // Don't render if stateLabel is not configured in admin console 36439 if (!paymentConfig.stateLabel) { 36440 return null; 36441 } 36442 const configuredLabel = paymentConfig.stateLabel || elementConfig.label || "State"; 36443 return ({ 36444 component: BillingState, 36445 props: { 36446 formKey: form.uniqueKey, 36447 config: { 36448 ...elementConfig, 36449 label: configuredLabel 36450 }, 36451 value: formState.billingState || "", 36452 billingCountry: formState.billingCountry || "", 36453 disabled, 36454 onChange: (value) => { 36455 if (!disabled) { 36456 formActions.updateFormState({ 36457 billingState: value, 36458 serverErrors: [] 36459 }); 36460 logDataLayerEvent(form, 'zephr_form_input_change', { 36461 inputName: `zephr-form-billing-state-${form.uniqueKey}`, 36462 sectionId: formState.currentSection.type, 36463 field: 'billing_state' 36464 }); 36465 } 36466 }, 36467 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 36468 inputName: `zephr-form-billing-state-${form.uniqueKey}`, 36469 sectionId: formState.currentSection.type, 36470 field: 'billing_state' 36471 }), 36472 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 36473 inputName: `zephr-form-billing-state-${form.uniqueKey}`, 36474 sectionId: formState.currentSection.type, 36475 field: 'billing_state' 36476 }), 36477 isPaymentForm: form.formType === FormType.PAYMENT, 36478 }, 36479 isValid: !elementConfig.required || 36480 (formState.billingCountry === "US" || formState.billingCountry === "CA" 36481 ? !!formState.billingState 36482 : true) // Not required if country is not US or CA 36483 }); 36484 } 36485 }; 36486 36487 const elementFactories = [ 36488 factory$u, 36489 factory$t, 36490 factory$s, 36491 factory$r, 36492 factory$q, 36493 factory$p, 36494 factory$o, 36495 factory$n, 36496 paymentAutoRenewToggleFactory, 36497 factory$m, 36498 factory$l, 36499 factory$k, 36500 factory$j, 36501 factory$i, 36502 factory$h, 36503 factory$g, 36504 factory$f, 36505 factory$e, 36506 factory$d, 36507 factory$c, 36508 factory$b, 36509 factory$a, 36510 factory$9, 36511 factory$8, 36512 factory$7, 36513 subscriptionSelectFactory, 36514 subscriptionsListFactory,
36515 pastSubscriptionsLinkFactory, 36516 changePaymentMethodButtonFactory, 36517 eventLinkFactory, 36518 factory$6, 36519 factory$5, 36520 readOnlyUserAttributeFactory, 36521 deviceSessionsFactory, 36522 deviceSessionsSignOutAll, 36523 billingHistoryFactory, 36524 factory$4, 36525 factory$3, 36526 recipientNameFactory, 36527 recipientEmailFactory, 36528 recipientAddressFactory, 36529 recipientMessageFactory, 36530 factory$2, 36531 giftSubscriptionsListFactory, 36532 giftToggleFactory, 36533 giftFutureDateToggleFactory, 36534 giftFutureDateInputFactory, 36535 suspendResumeSubscriptionFactory, 36536 subscriptionCustomFieldsUpdateFactory, 36537 subscriptionCustomFieldsListFactory, 36538 billToContactFactory, 36539 factory$1, 36540 factory, 36541 ]; 36542 36543 /* src/components/ElementResolver.svelte generated by Svelte v4.2.12 */ 36544 36545 function create_if_block$1(ctx) { 36546 let switch_instance; 36547 let t; 36548 let if_block_anchor; 36549 let current; 36550 36551 const switch_instance_spread_levels = [ 36552 /*enrichPropsWithServerError*/ ctx[4](/*element*/ ctx[2].props, /*formState*/ ctx[0], /*sectionElement*/ ctx[1]) 36553 ]; 36554 36555 var switch_value = /*element*/ ctx[2].component; 36556 36557 function switch_props(ctx, dirty) { 36558 let switch_instance_props = {}; 36559 36560 for (let i = 0; i < switch_instance_spread_levels.length; i += 1) { 36561 switch_instance_props = assign(switch_instance_props, switch_instance_spread_levels[i]); 36562 } 36563 36564 if (dirty !== undefined && dirty & /*enrichPropsWithServerError, element, formState, sectionElement*/ 23) { 36565 switch_instance_props = assign(switch_instance_props, get_spread_update(switch_instance_spread_levels, [ 36566 get_spread_object(/*enrichPropsWithServerError*/ ctx[4](/*element*/ ctx[2].props, /*formState*/ ctx[0], /*sectionElement*/ ctx[1])) 36567 ])); 36568 } 36569 36570 return { props: switch_instance_props }; 36571 } 36572 36573 if (switch_value) { 36574 switch_instance = construct_svelte_component(switch_value, switch_props(ctx)); 36575 } 36576 36577 let if_block = /*element*/ ctx[2].isValid === false && /*formState*/ ctx[0].showFieldErrors && create_if_block_1$1(ctx); 36578 36579 return { 36580 c() { 36581 if (switch_instance) create_component(switch_instance.$$.fragment); 36582 t = space(); 36583 if (if_block) if_block.c(); 36584 if_block_anchor = empty(); 36585 }, 36586 m(target, anchor) { 36587 if (switch_instance) mount_component(switch_instance, target, anchor); 36588 insert(target, t, anchor); 36589 if (if_block) if_block.m(target, anchor); 36590 insert(target, if_block_anchor, anchor); 36591 current = true; 36592 }, 36593 p(ctx, dirty) { 36594 if (dirty & /*element*/ 4 && switch_value !== (switch_value = /*element*/ ctx[2].component)) { 36595 if (switch_instance) { 36596 group_outros(); 36597 const old_component = switch_instance; 36598 36599 transition_out(old_component.$$.fragment, 1, 0, () => { 36600 destroy_component(old_component, 1); 36601 }); 36602 36603 check_outros(); 36604 } 36605 36606 if (switch_value) { 36607 switch_instance = construct_svelte_component(switch_value, switch_props(ctx, dirty)); 36608 create_component(switch_instance.$$.fragment); 36609 transition_in(switch_instance.$$.fragment, 1); 36610 mount_component(switch_instance, t.parentNode, t); 36611 } else { 36612 switch_instance = null; 36613 } 36614 } else if (switch_value) { 36615 const switch_instance_changes = (dirty & /*enrichPropsWithServerError, element, formState, sectionElement*/ 23) 36616 ? get_spread_update(switch_instance_spread_levels, [ 36617 get_spread_object(/*enrichPropsWithServerError*/ ctx[4](/*element*/ ctx[2].props, /*formState*/ ctx[0], /*sectionElement*/ ctx[1])) 36618 ]) 36619 : {}; 36620 36621 switch_instance.$set(switch_instance_changes); 36622 } 36623 36624 if (/*element*/ ctx[2].isValid === false && /*formState*/ ctx[0].showFieldErrors) { 36625 if (if_block) { 36626 if_block.p(ctx, dirty); 36627 36628 if (dirty & /*element, formState*/ 5) { 36629 transition_in(if_block, 1); 36630 } 36631 } else { 36632 if_block = create_if_block_1$1(ctx); 36633 if_block.c(); 36634 transition_in(if_block, 1); 36635 if_block.m(if_block_anchor.parentNode, if_block_anchor); 36636 } 36637 } else if (if_block) { 36638 group_outros(); 36639 36640 transition_out(if_block, 1, 1, () => { 36641 if_block = null; 36642 }); 36643 36644 check_outros(); 36645 } 36646 }, 36647 i(local) { 36648 if (current) return; 36649 if (switch_instance) transition_in(switch_instance.$$.fragment, local); 36650 transition_in(if_block); 36651 current = true; 36652 }, 36653 o(local) { 36654 if (switch_instance) transition_out(switch_instance.$$.fragment, local); 36655 transition_out(if_block); 36656 current = false;
36657 }, 36658 d(detaching) { 36659 if (detaching) { 36660 detach(t); 36661 detach(if_block_anchor); 36662 } 36663 36664 if (switch_instance) destroy_component(switch_instance, detaching); 36665 if (if_block) if_block.d(detaching); 36666 } 36667 }; 36668 } 36669 36670 // (61:2) {#if element.isValid === false && formState.showFieldErrors} 36671 function create_if_block_1$1(ctx) { 36672 let errormessage; 36673 let current; 36674 36675 errormessage = new ErrorMessage({ 36676 props: { 36677 error: "Field is invalid", 36678 isPaymentForm: /*isPaymentForm*/ ctx[3] 36679 } 36680 }); 36681 36682 return { 36683 c() { 36684 create_component(errormessage.$$.fragment); 36685 }, 36686 m(target, anchor) { 36687 mount_component(errormessage, target, anchor); 36688 current = true; 36689 }, 36690 p: noop, 36691 i(local) { 36692 if (current) return; 36693 transition_in(errormessage.$$.fragment, local); 36694 current = true; 36695 }, 36696 o(local) { 36697 transition_out(errormessage.$$.fragment, local); 36698 current = false; 36699 }, 36700 d(detaching) { 36701 destroy_component(errormessage, detaching); 36702 } 36703 }; 36704 } 36705 36706 function create_fragment$3(ctx) { 36707 let if_block_anchor; 36708 let current; 36709 let if_block = /*element*/ ctx[2] && create_if_block$1(ctx); 36710 36711 return { 36712 c() { 36713 if (if_block) if_block.c(); 36714 if_block_anchor = empty(); 36715 }, 36716 m(target, anchor) { 36717 if (if_block) if_block.m(target, anchor); 36718 insert(target, if_block_anchor, anchor); 36719 current = true; 36720 }, 36721 p(ctx, [dirty]) { 36722 if (/*element*/ ctx[2]) { 36723 if (if_block) { 36724 if_block.p(ctx, dirty); 36725 36726 if (dirty & /*element*/ 4) { 36727 transition_in(if_block, 1); 36728 } 36729 } else { 36730 if_block = create_if_block$1(ctx); 36731 if_block.c(); 36732 transition_in(if_block, 1); 36733 if_block.m(if_block_anchor.parentNode, if_block_anchor); 36734 } 36735 } else if (if_block) { 36736 group_outros(); 36737 36738 transition_out(if_block, 1, 1, () => { 36739 if_block = null; 36740 }); 36741 36742 check_outros(); 36743 } 36744 }, 36745 i(local) { 36746 if (current) return; 36747 transition_in(if_block); 36748 current = true; 36749 }, 36750 o(local) { 36751 transition_out(if_block); 36752 current = false; 36753 }, 36754 d(detaching) { 36755 if (detaching) { 36756 detach(if_block_anchor); 36757 } 36758 36759 if (if_block) if_block.d(detaching); 36760 } 36761 }; 36762 } 36763 36764 function instance$3($$self, $$props, $$invalidate) { 36765 let element; 36766 let { form } = $$props; 36767 let { formActions } = $$props; 36768 let isPaymentForm = form.formType === "PAYMENT"; 36769 let { formState } = $$props; 36770 let { sectionElement } = $$props; 36771 36772 const enrichPropsWithServerError = (props, _formState, _sectionElement) => { 36773 const serverErrorForElementValue = serverErrorForElement(_sectionElement.type, _formState); 36774 const error = ServerErrors[serverErrorForElementValue]; 36775 36776 if (error) { 36777 // send message to app saying payment form has errored 36778 const formErrorMessage = { 36779 error: ServerError[serverErrorForElementValue], 36780 errorMessage: resolveErrorLanguagePackKey(form, serverErrorForElementValue), 36781 success: false, 36782 formSlug: form.id 36783 }; 36784 36785 const formEventPayload = JSON.stringify(formErrorMessage); 36786 36787 // handle ios message 36788 window?.webkit?.messageHandlers?.messageHandler?.postMessage(formEventPayload); 36789 36790 // handle android message 36791 window?.AndroidFormEventListener?.processFormEvent(formEventPayload); 36792 } 36793 36794 return error 36795 ? { 36796 ...element.props, 36797 error: element.props.error ?? (error.useDymamicMessage 36798 ? _formState.dynamicServerErrorMessage 36799 : resolveErrorLanguagePackKey(form, serverErrorForElementValue)) 36800 } 36801 : props; 36802 }; 36803 36804 const buildElement = (_formState, _sectionElement) => { 36805 if (_sectionElement.config?.enabled === false || _sectionElement.hidden === true) { 36806 return null; 36807 } 36808 36809 const factory = elementFactories.find(f => f.matches(_sectionElement, form, _formState.currentPart, _formState.currentSection)); 36810 36811 if (!factory) { 36812 throw `Unknown element ${JSON.stringify(_sectionElement)}`; 36813 } 36814 36815 const element = factory.create(form, _formState, formActions, _sectionElement.config); 36816 updateElementValidity(element, _formState, _sectionElement, formActions); 36817 return element; 36818 }; 36819 36820 $$self.$$set = $$props => {
36821 if ('form' in $$props) $$invalidate(5, form = $$props.form); 36822 if ('formActions' in $$props) $$invalidate(6, formActions = $$props.formActions); 36823 if ('formState' in $$props) $$invalidate(0, formState = $$props.formState); 36824 if ('sectionElement' in $$props) $$invalidate(1, sectionElement = $$props.sectionElement); 36825 }; 36826 36827 $$self.$$.update = () => { 36828 if ($$self.$$.dirty & /*formState, sectionElement*/ 3) { 36829 $$invalidate(2, element = buildElement(formState, sectionElement)); 36830 } 36831 }; 36832 36833 return [ 36834 formState, 36835 sectionElement, 36836 element, 36837 isPaymentForm, 36838 enrichPropsWithServerError, 36839 form, 36840 formActions 36841 ]; 36842 } 36843 36844 class ElementResolver extends SvelteComponent { 36845 constructor(options) { 36846 super(); 36847 36848 init(this, options, instance$3, create_fragment$3, safe_not_equal, { 36849 form: 5, 36850 formActions: 6, 36851 formState: 0, 36852 sectionElement: 1 36853 }); 36854 } 36855 } 36856 36857 const extractDefaultUserAttributes = (form) => form.parts 36858 .flatMap((p) => p.sections) 36859 .flatMap((s) => s.elements) 36860 .filter((e) => e.type === elementTypes.USER_ATTRIBUTE) 36861 .map(e => e.config) 36862 .reduce((attributes, config) => { 36863 const schemafield = form.organisationConfiguration.schemaFields.find(s => s.slug === config.slug); 36864 if (schemafield) { 36865 return { 36866 ...attributes, 36867 [config.slug]: (config.defaultValue || (schemafield["select-options"]?.find(o => o.default)?.value)) ?? undefined 36868 }; 36869 } 36870 else { 36871 return { 36872 ...attributes 36873 }; 36874 } 36875 }, {}); 36876 36877 /** 36878 * Sort all items in the Form by their order properties 36879 */ 36880 const sortForm = (form) => ({ 36881 ...form, 36882 parts: form.parts 36883 .sort((a, b) => partTypeFor(a.type).order - partTypeFor(b.type).order) 36884 .map((p) => ({ 36885 ...p, 36886 sections: p.sections 36887 .sort((a, b) => a.order - b.order) 36888 .map((s) => ({ 36889 ...s, 36890 elements: s.elements.sort((a, b) => a.order - b.order), 36891 })), 36892 })) 36893 }); 36894 36895 const addFormProcessorsToWindow = () => { 36896 if (!window.Blaize) { 36897 window.Blaize = { 36898 formPreProcessors: {}, 36899 formPostProcessors: {}, 36900 registerFormPreProcessor: function (formSlug, processor) { 36901 if (!window.Blaize.formPreProcessors[formSlug]) 36902 window.Blaize.formPreProcessors[formSlug] = []; 36903 if (typeof processor === "function") { 36904 window.Blaize.formPreProcessors[formSlug].push(processor); 36905 } 36906 }, 36907 registerFormPostProcessor: function (formSlug, processor) { 36908 if (!window.Blaize.formPostProcessors[formSlug]) 36909 window.Blaize.formPostProcessors[formSlug] = []; 36910 if (typeof processor === "function") { 36911 window.Blaize.formPostProcessors[formSlug].push(processor); 36912 } 36913 }, 36914 preProcessFormData: function (formSlug, formData) { 36915 if (window.Blaize.formPreProcessors[formSlug] || 36916 window.Blaize.formPreProcessors["*"]) { 36917 const processors = []; 36918 if (window.Blaize.formPreProcessors["*"]) { 36919 window.Blaize.formPreProcessors["*"].forEach(function (processor) { 36920 processors.push(processor); 36921 }); 36922 } 36923 if (window.Blaize.formPreProcessors[formSlug]) { 36924 window.Blaize.formPreProcessors[formSlug].forEach(function (processor) { 36925 processors.push(processor); 36926 }); 36927 } 36928 processors.forEach(function (processor) { 36929 const processedFormData = processor(formData); 36930 if (processedFormData != undefined) { 36931 formData = processedFormData; 36932 } 36933 }); 36934 } 36935 return formData; 36936 }, 36937 postProcessFormData: function (formSlug, formData, response) { 36938 if (window.Blaize.formPostProcessors[formSlug] || 36939 window.Blaize.formPostProcessors["*"]) { 36940 const processors = []; 36941 if (window.Blaize.formPostProcessors["*"]) { 36942 window.Blaize.formPostProcessors["*"].forEach(function (processor) { 36943 processors.push(processor); 36944 }); 36945 } 36946 if (window.Blaize.formPostProcessors[formSlug]) { 36947 window.Blaize.formPostProcessors[formSlug].forEach(function (processor) { 36948 processors.push(processor); 36949 }); 36950 }
36951 processors.forEach(function (processor) { 36952 processor(formData, response); 36953 }); 36954 } 36955 }, 36956 }; 36957 } 36958 }; 36959 36960 /* src/components/FormViewedDetect.svelte generated by Svelte v4.2.12 */ 36961 36962 function create_fragment$2(ctx) { 36963 let div; 36964 let current; 36965 const default_slot_template = /*#slots*/ ctx[3].default; 36966 const default_slot = create_slot(default_slot_template, ctx, /*$$scope*/ ctx[2], null); 36967 36968 return { 36969 c() { 36970 div = element("div"); 36971 if (default_slot) default_slot.c(); 36972 }, 36973 m(target, anchor) { 36974 insert(target, div, anchor); 36975 36976 if (default_slot) { 36977 default_slot.m(div, null); 36978 } 36979 36980 /*div_binding*/ ctx[4](div); 36981 current = true; 36982 }, 36983 p(ctx, [dirty]) { 36984 if (default_slot) { 36985 if (default_slot.p && (!current || dirty & /*$$scope*/ 4)) { 36986 update_slot_base( 36987 default_slot, 36988 default_slot_template, 36989 ctx, 36990 /*$$scope*/ ctx[2], 36991 !current 36992 ? get_all_dirty_from_scope(/*$$scope*/ ctx[2]) 36993 : get_slot_changes(default_slot_template, /*$$scope*/ ctx[2], dirty, null), 36994 null 36995 ); 36996 } 36997 } 36998 }, 36999 i(local) { 37000 if (current) return; 37001 transition_in(default_slot, local); 37002 current = true; 37003 }, 37004 o(local) { 37005 transition_out(default_slot, local); 37006 current = false; 37007 }, 37008 d(detaching) { 37009 if (detaching) { 37010 detach(div); 37011 } 37012 37013 if (default_slot) default_slot.d(detaching); 37014 /*div_binding*/ ctx[4](null); 37015 } 37016 }; 37017 } 37018 37019 function instance$2($$self, $$props, $$invalidate) { 37020 let { $$slots: slots = {}, $$scope } = $$props; 37021 let { form } = $$props; 37022 let intersecting = false; 37023 let element; 37024 let observer; 37025 const dispatch = createEventDispatcher(); 37026 37027 onMount(() => { 37028 if (typeof IntersectionObserver !== 'undefined') { 37029 observer = new IntersectionObserver(entries => { 37030 const entry = entries[0]; 37031 intersecting = entry?.isIntersecting; 37032 dispatch('observe', entry); 37033 37034 if (intersecting && form) { 37035 logDataLayerEvent(form, 'zephr_form_view', null); 37036 observer.unobserve(element); 37037 } 37038 }, 37039 { threshold: 0.75 }); 37040 37041 if (element) { 37042 observer.observe(element); 37043 } 37044 } 37045 37046 return () => { 37047 if (observer) { 37048 observer.disconnect(); 37049 } 37050 }; 37051 }); 37052 37053 function div_binding($$value) { 37054 binding_callbacks[$$value ? 'unshift' : 'push'](() => { 37055 element = $$value; 37056 $$invalidate(0, element); 37057 }); 37058 } 37059 37060 $$self.$$set = $$props => {
37061 if ('form' in $$props) $$invalidate(1, form = $$props.form); 37062 if ('$$scope' in $$props) $$invalidate(2, $$scope = $$props.$$scope); 37063 }; 37064 37065 return [element, form, $$scope, slots, div_binding]; 37066 } 37067 37068 class FormViewedDetect extends SvelteComponent { 37069 constructor(options) { 37070 super(); 37071 init(this, options, instance$2, create_fragment$2, safe_not_equal, { form: 1 }); 37072 } 37073 } 37074 37075 const checkForRegisteredUser = async (formActions) => { 37076 if (!document.cookie?.includes("blaize_session")) { 37077 formActions.updateFormState({ 37078 userSession: false, 37079 }); 37080 return false; 37081 } 37082 let response; 37083 try { 37084 response = await request('blaize/account', { method: "GET" }, formActions); 37085 } 37086 catch (err) { 37087 console.error(err); 37088 } 37089 if (response?.ok) { 37090 const responseJson = await response.json(); 37091 formActions.updateFormState({ 37092 userExists: true, 37093 emailIsContact: false, 37094 emailAddress: responseJson.identifiers?.email_address, 37095 userSession: true, 37096 loginRegistrationComplete: true 37097 }); 37098 } 37099 else { 37100 formActions.updateFormState({ 37101 userSession: false, 37102 }); 37103 } 37104 return response?.ok; 37105 }; 37106 37107 /* src/components/FormRoot.svelte generated by Svelte v4.2.12 */ 37108 37109 function get_each_context(ctx, list, i) { 37110 const child_ctx = ctx.slice(); 37111 child_ctx[21] = list[i]; 37112 return child_ctx; 37113 } 37114 37115 // (206:2) {#if formCanBeManuallyClosed} 37116 function create_if_block_3(ctx) { 37117 let div; 37118 let button; 37119 let fa; 37120 let current; 37121 let mounted; 37122 let dispose; 37123 fa = new Fa({ props: { icon: faTimesCircle } }); 37124 37125 return { 37126 c() { 37127 div = element("div"); 37128 button = element("button"); 37129 create_component(fa.$$.fragment); 37130 attr(button, "type", "button"); 37131 attr(button, "class", "close-button svelte-j7lu48"); 37132 attr(div, "class", "close-button-container svelte-j7lu48"); 37133 }, 37134 m(target, anchor) { 37135 insert(target, div, anchor); 37136 append(div, button); 37137 mount_component(fa, button, null); 37138 current = true; 37139 37140 if (!mounted) { 37141 dispose = listen(button, "click", /*closeForm*/ ctx[8]); 37142 mounted = true; 37143 } 37144 }, 37145 p: noop, 37146 i(local) { 37147 if (current) return; 37148 transition_in(fa.$$.fragment, local); 37149 current = true; 37150 }, 37151 o(local) { 37152 transition_out(fa.$$.fragment, local); 37153 current = false; 37154 }, 37155 d(detaching) { 37156 if (detaching) { 37157 detach(div); 37158 } 37159 37160 destroy_component(fa); 37161 mounted = false; 37162 dispose(); 37163 } 37164 }; 37165 } 37166 37167 // (219:2) {:else} 37168 function create_else_block(ctx) { 37169 let formvieweddetect; 37170 let t; 37171 let if_block_anchor; 37172 let current; 37173 37174 formvieweddetect = new FormViewedDetect({ 37175 props: { 37176 form: /*form*/ ctx[5], 37177 $$slots: { default: [create_default_slot] }, 37178 $$scope: { ctx } 37179 } 37180 }); 37181 37182 let if_block = /*topLevelError*/ ctx[3] && create_if_block_2(ctx); 37183 37184 return { 37185 c() { 37186 create_component(formvieweddetect.$$.fragment); 37187 t = space(); 37188 if (if_block) if_block.c(); 37189 if_block_anchor = empty(); 37190 }, 37191 m(target, anchor) { 37192 mount_component(formvieweddetect, target, anchor); 37193 insert(target, t, anchor); 37194 if (if_block) if_block.m(target, anchor); 37195 insert(target, if_block_anchor, anchor); 37196 current = true; 37197 }, 37198 p(ctx, dirty) { 37199 const formvieweddetect_changes = {}; 37200 37201 if (dirty & /*$$scope, isFullWidth, formState*/ 16777221) { 37202 formvieweddetect_changes.$$scope = { dirty, ctx }; 37203 } 37204 37205 formvieweddetect.$set(formvieweddetect_changes); 37206 37207 if (/*topLevelError*/ ctx[3]) { 37208 if (if_block) { 37209 if_block.p(ctx, dirty); 37210 37211 if (dirty & /*topLevelError*/ 8) { 37212 transition_in(if_block, 1); 37213 } 37214 } else { 37215 if_block = create_if_block_2(ctx); 37216 if_block.c(); 37217 transition_in(if_block, 1); 37218 if_block.m(if_block_anchor.parentNode, if_block_anchor); 37219 } 37220 } else if (if_block) { 37221 group_outros(); 37222 37223 transition_out(if_block, 1, 1, () => { 37224 if_block = null; 37225 }); 37226 37227 check_outros(); 37228 } 37229 }, 37230 i(local) { 37231 if (current) return; 37232 transition_in(formvieweddetect.$$.fragment, local); 37233 transition_in(if_block); 37234 current = true; 37235 }, 37236 o(local) { 37237 transition_out(formvieweddetect.$$.fragment, local); 37238 transition_out(if_block); 37239 current = false;
37240 }, 37241 d(detaching) { 37242 if (detaching) { 37243 detach(t); 37244 detach(if_block_anchor); 37245 } 37246 37247 destroy_component(formvieweddetect, detaching); 37248 if (if_block) if_block.d(detaching); 37249 } 37250 }; 37251 } 37252 37253 // (215:69) 37254 function create_if_block_1(ctx) { 37255 let div; 37256 let spinner; 37257 let current; 37258 spinner = new Spinner({}); 37259 37260 return { 37261 c() { 37262 div = element("div"); 37263 create_component(spinner.$$.fragment); 37264 attr(div, "class", "loading-placeholder svelte-j7lu48"); 37265 }, 37266 m(target, anchor) { 37267 insert(target, div, anchor); 37268 mount_component(spinner, div, null); 37269 current = true; 37270 }, 37271 p: noop, 37272 i(local) { 37273 if (current) return; 37274 transition_in(spinner.$$.fragment, local); 37275 current = true; 37276 }, 37277 o(local) { 37278 transition_out(spinner.$$.fragment, local); 37279 current = false; 37280 }, 37281 d(detaching) { 37282 if (detaching) { 37283 detach(div); 37284 } 37285 37286 destroy_component(spinner); 37287 } 37288 }; 37289 } 37290 37291 // (213:2) {#if formHasCrashed} 37292 function create_if_block(ctx) { 37293 let div; 37294 37295 return { 37296 c() { 37297 div = element("div"); 37298 div.textContent = `${resolveErrorLanguagePackKey(/*form*/ ctx[5], ServerError.UNKNOWN)}`; 37299 }, 37300 m(target, anchor) { 37301 insert(target, div, anchor); 37302 }, 37303 p: noop, 37304 i: noop, 37305 o: noop, 37306 d(detaching) { 37307 if (detaching) { 37308 detach(div); 37309 } 37310 } 37311 }; 37312 } 37313 37314 // (226:8) {#each form.sectionFlow.extraElements.concat(formState.currentSection.elements || []) as element} 37315 function create_each_block(ctx) { 37316 let elementresolver; 37317 let current; 37318 37319 elementresolver = new ElementResolver({ 37320 props: { 37321 form: /*form*/ ctx[5], 37322 formState: /*formState*/ ctx[0], 37323 formActions: /*formActions*/ ctx[7], 37324 sectionElement: /*element*/ ctx[21] 37325 } 37326 }); 37327 37328 return { 37329 c() { 37330 create_component(elementresolver.$$.fragment); 37331 }, 37332 m(target, anchor) { 37333 mount_component(elementresolver, target, anchor); 37334 current = true; 37335 }, 37336 p(ctx, dirty) { 37337 const elementresolver_changes = {}; 37338 if (dirty & /*formState*/ 1) elementresolver_changes.formState = /*formState*/ ctx[0]; 37339 if (dirty & /*formState*/ 1) elementresolver_changes.sectionElement = /*element*/ ctx[21]; 37340 elementresolver.$set(elementresolver_changes); 37341 }, 37342 i(local) { 37343 if (current) return; 37344 transition_in(elementresolver.$$.fragment, local); 37345 current = true; 37346 }, 37347 o(local) { 37348 transition_out(elementresolver.$$.fragment, local); 37349 current = false; 37350 }, 37351 d(detaching) { 37352 destroy_component(elementresolver, detaching); 37353 } 37354 }; 37355 } 37356 37357 // (220:4) <FormViewedDetect form={form}> 37358 function create_default_slot(ctx) { 37359 let form_1; 37360 let current; 37361 let mounted; 37362 let dispose; 37363 let each_value = ensure_array_like(/*form*/ ctx[5].sectionFlow.extraElements.concat(/*formState*/ ctx[0].currentSection.elements || [])); 37364 let each_blocks = []; 37365 37366 for (let i = 0; i < each_value.length; i += 1) { 37367 each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i)); 37368 } 37369 37370 const out = i => transition_out(each_blocks[i], 1, 1, () => { 37371 each_blocks[i] = null; 37372 }); 37373 37374 return { 37375 c() { 37376 form_1 = element("form"); 37377 37378 for (let i = 0; i < each_blocks.length; i += 1) { 37379 each_blocks[i].c(); 37380 } 37381 37382 attr(form_1, "class", "zephr-form-content svelte-j7lu48"); 37383 toggle_class(form_1, "zephr-payment-options-content", /*isFullWidth*/ ctx[2]); 37384 }, 37385 m(target, anchor) { 37386 insert(target, form_1, anchor); 37387 37388 for (let i = 0; i < each_blocks.length; i += 1) { 37389 if (each_blocks[i]) { 37390 each_blocks[i].m(form_1, null); 37391 } 37392 } 37393 37394 current = true; 37395 37396 if (!mounted) { 37397 dispose = listen(form_1, "submit", submit_handler); 37398 mounted = true; 37399 } 37400 }, 37401 p(ctx, dirty) { 37402 if (dirty & /*form, formState, formActions*/ 161) { 37403 each_value = ensure_array_like(/*form*/ ctx[5].sectionFlow.extraElements.concat(/*formState*/ ctx[0].currentSection.elements || [])); 37404 let i; 37405 37406 for (i = 0; i < each_value.length; i += 1) { 37407 const child_ctx = get_each_context(ctx, each_value, i); 37408 37409 if (each_blocks[i]) { 37410 each_blocks[i].p(child_ctx, dirty); 37411 transition_in(each_blocks[i], 1); 37412 } else { 37413 each_blocks[i] = create_each_block(child_ctx); 37414 each_blocks[i].c(); 37415 transition_in(each_blocks[i], 1); 37416 each_blocks[i].m(form_1, null); 37417 } 37418 } 37419 37420 group_outros(); 37421 37422 for (i = each_value.length; i < each_blocks.length; i += 1) { 37423 out(i); 37424 } 37425 37426 check_outros(); 37427 } 37428 37429 if (!current || dirty & /*isFullWidth*/ 4) { 37430 toggle_class(form_1, "zephr-payment-options-content", /*isFullWidth*/ ctx[2]); 37431 } 37432 }, 37433 i(local) { 37434 if (current) return; 37435 37436 for (let i = 0; i < each_value.length; i += 1) { 37437 transition_in(each_blocks[i]); 37438 } 37439 37440 current = true; 37441 }, 37442 o(local) {
37443 each_blocks = each_blocks.filter(Boolean); 37444 37445 for (let i = 0; i < each_blocks.length; i += 1) { 37446 transition_out(each_blocks[i]); 37447 } 37448 37449 current = false; 37450 }, 37451 d(detaching) { 37452 if (detaching) { 37453 detach(form_1); 37454 } 37455 37456 destroy_each(each_blocks, detaching); 37457 mounted = false; 37458 dispose(); 37459 } 37460 }; 37461 } 37462 37463 // (236:4) {#if topLevelError} 37464 function create_if_block_2(ctx) { 37465 let errormessage; 37466 let current; 37467 37468 errormessage = new ErrorMessage({ 37469 props: { 37470 error: resolveErrorLanguagePackKey(/*form*/ ctx[5], /*topLevelError*/ ctx[3]), 37471 isPaymentForm: /*isPaymentForm*/ ctx[6] 37472 } 37473 }); 37474 37475 return { 37476 c() { 37477 create_component(errormessage.$$.fragment); 37478 }, 37479 m(target, anchor) { 37480 mount_component(errormessage, target, anchor); 37481 current = true; 37482 }, 37483 p(ctx, dirty) { 37484 const errormessage_changes = {}; 37485 if (dirty & /*topLevelError*/ 8) errormessage_changes.error = resolveErrorLanguagePackKey(/*form*/ ctx[5], /*topLevelError*/ ctx[3]); 37486 errormessage.$set(errormessage_changes); 37487 }, 37488 i(local) { 37489 if (current) return; 37490 transition_in(errormessage.$$.fragment, local); 37491 current = true; 37492 }, 37493 o(local) { 37494 transition_out(errormessage.$$.fragment, local); 37495 current = false; 37496 }, 37497 d(detaching) { 37498 destroy_component(errormessage, detaching); 37499 } 37500 }; 37501 } 37502 37503 function create_fragment$1(ctx) { 37504 let div; 37505 let t; 37506 let current_block_type_index; 37507 let if_block1; 37508 let accordion_action; 37509 let current; 37510 let mounted; 37511 let dispose; 37512 let if_block0 = /*formCanBeManuallyClosed*/ ctx[9] && create_if_block_3(ctx); 37513 const if_block_creators = [create_if_block, create_if_block_1, create_else_block]; 37514 const if_blocks = []; 37515 37516 function select_block_type(ctx, dirty) { 37517 if (/*form*/ ctx[5].formType === "GIFT_REDEMPTION" && !/*isSessionChecked*/ ctx[1]) return 1; 37518 return 2; 37519 } 37520 37521 current_block_type_index = select_block_type(ctx); 37522 if_block1 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 37523 37524 return { 37525 c() { 37526 div = element("div"); 37527 if (if_block0) if_block0.c(); 37528 t = space(); 37529 if_block1.c(); 37530 toggle_class(div, "zephr-form-max-width", !/*isFullWidth*/ ctx[2]); 37531 toggle_class(div, "zephr-payment-form-max-width", !/*isFullWidth*/ ctx[2]); 37532 }, 37533 m(target, anchor) { 37534 insert(target, div, anchor); 37535 if (if_block0) if_block0.m(div, null); 37536 append(div, t); 37537 if_blocks[current_block_type_index].m(div, null); 37538 current = true; 37539 37540 if (!mounted) { 37541 dispose = action_destroyer(accordion_action = accordion.call(null, div, /*formIsOpen*/ ctx[4])); 37542 mounted = true; 37543 } 37544 }, 37545 p(ctx, [dirty]) { 37546 if (/*formCanBeManuallyClosed*/ ctx[9]) if_block0.p(ctx, dirty); 37547 let previous_block_index = current_block_type_index; 37548 current_block_type_index = select_block_type(ctx); 37549 37550 if (current_block_type_index === previous_block_index) { 37551 if_blocks[current_block_type_index].p(ctx, dirty); 37552 } else { 37553 group_outros(); 37554 37555 transition_out(if_blocks[previous_block_index], 1, 1, () => { 37556 if_blocks[previous_block_index] = null; 37557 }); 37558 37559 check_outros(); 37560 if_block1 = if_blocks[current_block_type_index]; 37561 37562 if (!if_block1) { 37563 if_block1 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 37564 if_block1.c(); 37565 } else { 37566 if_block1.p(ctx, dirty); 37567 } 37568 37569 transition_in(if_block1, 1); 37570 if_block1.m(div, null); 37571 } 37572 37573 if (accordion_action && is_function(accordion_action.update) && dirty & /*formIsOpen*/ 16) accordion_action.update.call(null, /*formIsOpen*/ ctx[4]); 37574 37575 if (!current || dirty & /*isFullWidth*/ 4) { 37576 toggle_class(div, "zephr-form-max-width", !/*isFullWidth*/ ctx[2]); 37577 } 37578 37579 if (!current || dirty & /*isFullWidth*/ 4) { 37580 toggle_class(div, "zephr-payment-form-max-width", !/*isFullWidth*/ ctx[2]); 37581 } 37582 }, 37583 i(local) { 37584 if (current) return; 37585 transition_in(if_block0); 37586 transition_in(if_block1); 37587 current = true; 37588 }, 37589 o(local) { 37590 transition_out(if_block0); 37591 transition_out(if_block1); 37592 current = false;
37593 }, 37594 d(detaching) { 37595 if (detaching) { 37596 detach(div); 37597 } 37598 37599 if (if_block0) if_block0.d(); 37600 if_blocks[current_block_type_index].d(); 37601 mounted = false; 37602 dispose(); 37603 } 37604 }; 37605 } 37606 const defaultBusyKey = "default"; 37607 const submit_handler = e => e?.preventDefault(); 37608 37609 function instance$1($$self, $$props, $$invalidate) { 37610 let formIsOpen; 37611 let topLevelError; 37612 let isFullWidth; 37613 onMount(addFormProcessorsToWindow); 37614 let { formConfiguration } = $$props; 37615 let form = sortForm(formConfiguration); 37616 37617 if (form.environment.debugLogging) { 37618 console.log(form); 37619 } 37620 37621 // variable 37622 let isPaymentForm = form.formType === "PAYMENT"; 37623 37624 let requestCountByKey = {}; 37625 let isSessionChecked = false; 37626 37627 const previewSection = form.environment.previewMode && form.environment.previewInitialState 37628 ? findSectionByAddress(form.environment.previewInitialState, form) 37629 : null; 37630 37631 let formState = Object.freeze({ 37632 currentPart: previewSection?.part ?? form.parts[0], 37633 currentSection: previewSection?.section ?? form.parts[0].sections[0], 37634 paymentOption: null, 37635 paymentOptionPrices: null, 37636 emailAddress: "", 37637 billingCountry: "", 37638 billingState: "", 37639 createPassword: "", 37640 password: "", 37641 confirmCreatePassword: "", 37642 accountMembershipCode: "", 37643 passwordIsValid: false, 37644 elementValidity: [], 37645 canAttemptSectionCompletion: true, 37646 showFieldErrors: false, 37647 loginRegistrationComplete: false, 37648 serverErrors: [], 37649 isBusy: false, 37650 isBusyByKey: [], 37651 formCannotBeActioned: false, 37652 forgotPassword: false, 37653 promoCode: "", 37654 addons: [], 37655 discountedPlanPrices: [], 37656 paymentProviderFormLoaded: false, 37657 paymentProviderError: null, 37658 paymentFormComplete: false, 37659 paymentProviderVendorFields: null, 37660 verificationCode: "", 37661 userAttributes: extractDefaultUserAttributes(form), 37662 socialSignin: false, 37663 paymentProcessed: false, 37664 invitationEmail: "", 37665 invitationSent: false, 37666 validChangeFromPlans: [], 37667 taxCalculations: {}, 37668 billingAddress: { country: null, postalCode: null }, 37669 formPrerequisiteLoaded: !form.sectionFlow.formRequiresPrerequisiteLoading(form), 37670 dynamicOfferResult: null, 37671 originalDynamicOfferResult: null, 37672 giftCode: new URLSearchParams(window.location.search).get('giftCode') || '', 37673 giftRecipient: { 37674 name: '', 37675 email: '', 37676 customMessage: '', 37677 recipientAddress: { 37678 addressLine1: '', 37679 addressLine2: '', 37680 city: '', 37681 state: '', 37682 country: '', 37683 postalCode: '' 37684 } 37685 } 37686 }); 37687 37688 // actions 37689 const updateFormState = update => { 37690 $$invalidate(0, formState = Object.freeze({ ...formState, ...update })); 37691 form.environment.debugLogging && console.log(formState); 37692 form.environment.onStateChanged(update, formState); 37693 return formState; 37694 }; 37695 37696 const _attemptCompleteSection = () => { 37697 void attemptCompleteSection(form, formState, formActions); 37698 }; 37699 37700 const _completeSection = () => { 37701 void completeSection(form, formState, formActions); 37702 }; 37703 37704 const jumpToPartStart = partType => { 37705 void jumpToPart(partType, form, formActions); 37706 }; 37707 37708 const _jumpToSection = sectionType => { 37709 void jumpToSection(sectionType, form, formActions); 37710 }; 37711 37712 const onEvent = formEvent => { 37713 if (form.environment.previewMode) { 37714 return; 37715 } 37716 37717 void form.sectionFlow.eventHandlers[formEvent]?.(form, formState, formActions); 37718 }; 37719 37720 const modifyRequestCount = (by, busyKey) => { 37721 const key = busyKey ?? defaultBusyKey; 37722 37723 if (requestCountByKey[key] === undefined) { 37724 requestCountByKey[key] = 0; 37725 } 37726 37727 requestCountByKey[key] += by; 37728 37729 if (requestCountByKey[key] < 0) { 37730 throw "Negative request count"; 37731 } 37732 37733 const isBusy = Object.values(requestCountByKey).some(v => v > 0); 37734 37735 if (isBusy !== formState.isBusy) { 37736 updateFormState({ isBusy }); 37737 } 37738 37739 const isBusyByKey = requestCountByKey[key] > 0; 37740 37741 if (isBusyByKey !== formState.isBusyByKey[key]) { 37742 updateFormState({ 37743 isBusyByKey: { 37744 ...formState.isBusyByKey, 37745 [key]: isBusyByKey 37746 } 37747 }); 37748 } 37749 }; 37750 37751 const formActions = { 37752 updateFormState, 37753 attemptCompleteSection: _attemptCompleteSection, 37754 completeSection: _completeSection,
37755 jumpToPartStart, 37756 jumpToSection: _jumpToSection, 37757 onEvent, 37758 incrementRequestCount: (busyKey = null) => modifyRequestCount(+1, busyKey), 37759 decrementRequestCount: (busyKey = null) => modifyRequestCount(-1, busyKey), 37760 getFormState: () => formState, 37761 apiUrlBase: form.environment.apiUrlBase 37762 }; 37763 37764 // Preview 37765 if (form.environment.previewMode) { 37766 form.environment.previewBundle?.setupPreviewMode(form, formActions); 37767 } 37768 37769 // When the form first loads, check if this is a currently-registered user 37770 onMount(async () => { 37771 if (form.formType === "GIFT_REDEMPTION") { 37772 // Check user session before triggering form start 37773 await checkForRegisteredUser(formActions); 37774 37775 $$invalidate(1, isSessionChecked = true); 37776 } 37777 37778 formActions.onEvent(FormEvent.FORM_START); 37779 logDataLayerEvent(form, 'zephr_form_render', null); 37780 }); 37781 37782 let formManuallyClosed = false; 37783 const closeForm = () => $$invalidate(11, formManuallyClosed = true); 37784 const formCanBeManuallyClosed = form.sectionFlow.canDismissFormManually(form) && form.formType !== 'CHANGE_SUBSCRIPTION'; 37785 37786 $$self.$$set = $$props => {
37787 if ('formConfiguration' in $$props) $$invalidate(10, formConfiguration = $$props.formConfiguration); 37788 }; 37789 37790 $$self.$$.update = () => { 37791 if ($$self.$$.dirty & /*formState*/ 1) { 37792 { 37793 const canAttemptSectionCompletion = form.sectionFlow.canAttemptSectionCompletion(form, formState); 37794 37795 if (canAttemptSectionCompletion != formState.canAttemptSectionCompletion) { 37796 updateFormState({ canAttemptSectionCompletion }); 37797 } 37798 } 37799 } 37800 37801 if ($$self.$$.dirty & /*formManuallyClosed, formState*/ 2049) { 37802 $$invalidate(4, formIsOpen = !formManuallyClosed && formState.formPrerequisiteLoaded && !formState.formCannotBeActioned); 37803 } 37804 37805 if ($$self.$$.dirty & /*formState*/ 1) { 37806 // Unshown errors 37807 $$invalidate(3, topLevelError = formState.serverErrors[0] && (formState.currentSection.elements || []).filter(e => serverErrorForElement(e.type, formState)).length === 0 37808 ? formState.serverErrors[0] 37809 : null); 37810 } 37811 37812 if ($$self.$$.dirty & /*formState*/ 1) { 37813 $$invalidate(2, isFullWidth = [...Object.values(sectionTypes)].find(s => s.type === formState.currentSection.type)?.fullWidth); 37814 } 37815 }; 37816 37817 return [ 37818 formState, 37819 isSessionChecked, 37820 isFullWidth, 37821 topLevelError, 37822 formIsOpen, 37823 form, 37824 isPaymentForm, 37825 formActions, 37826 closeForm, 37827 formCanBeManuallyClosed, 37828 formConfiguration, 37829 formManuallyClosed 37830 ]; 37831 } 37832 37833 class FormRoot extends SvelteComponent { 37834 constructor(options) { 37835 super(); 37836 init(this, options, instance$1, create_fragment$1, safe_not_equal, { formConfiguration: 10 }); 37837 } 37838 } 37839 37840 const defaultCssVariables = { 37841 "--zephr-button-borderRadius": "9", 37842 "--zephr-button-borderWidth": "0", 37843 "--zephr-button-fontSize": "16", 37844 "--zephr-button-fontWeight": "normal", 37845 "--zephr-button-height": "50", 37846 "--zephr-color-accent-main": "#dcf1fb", 37847 "--zephr-color-accent-tinted": "#81cdf1", 37848 "--zephr-color-action-main": "#006edb", 37849 "--zephr-color-action-tinted": "#0f87ff", 37850 "--zephr-color-background-main": "#fff", 37851 "--zephr-color-background-tinted": "#ccc", 37852 "--zephr-color-text-main": "#000", 37853 "--zephr-color-text-tinted": "#333", 37854 "--zephr-color-warning-main": "#d90b00", 37855 "--zephr-color-warning-tinted": "#ff190d", 37856 "--zephr-input-borderColor": "#333", 37857 "--zephr-input-borderRadius": "5", 37858 "--zephr-input-borderWidth": "1", 37859 "--zephr-input-height": "50", 37860 "--zephr-typography-title-fallbackFont": "sans-serif", 37861 "--zephr-typography-title-font": "Roboto", 37862 "--zephr-typography-body-fallbackFont": "sans-serif", 37863 "--zephr-typography-body-font": "Roboto", 37864 }; 37865 /* eslint-disable @typescript-eslint/restrict-template-expressions */ 37866 const convertSiteStylesToCssVariables = (siteStyles) => { 37867 const styles = {}; 37868 const convertToCssVariables = (styleGuide, variablePrefix) => { 37869 if (styleGuide !== null && typeof styleGuide == "object") { 37870 Object.entries(styleGuide).forEach(([key, value]) => { 37871 convertToCssVariables(value, variablePrefix.concat(`${variablePrefix ? "-" : ""}${key}`)); 37872 }); 37873 } 37874 else { 37875 styles[`--zephr-${variablePrefix}`] = styleGuide; 37876 } 37877 }; 37878 convertToCssVariables(siteStyles, ""); 37879 return Object.entries({ ...defaultCssVariables, ...styles }) 37880 .map(([key, value]) => `${key}: ${value}`) 37881 .join(';\n'); 37882 }; 37883 37884 function formTypeClass(formType) { 37885 switch (formType) { 37886 case FormType.CHANGE_SUBSCRIPTION: 37887 case FormType.PAYMENT: 37888 case FormType.GIFT_SUBSCRIPTION: 37889 return "zephr-payment-form"; 37890 case FormType.REGISTRATION: 37891 case FormType.COMPLETE_REGISTRATION: 37892 case FormType.GIFT_REDEMPTION: 37893 return "zephr-registration-form"; 37894 case FormType.CONTACT: 37895 return "zephr-contact-form"; 37896 case FormType.DATA_CAPTURE: 37897 return "zephr-data-capture-form"; 37898 default: 37899 return ""; 37900 } 37901 } 37902 37903 const userAttributesValuesForPart = (partType, form, formState) => form.parts.find(p => p.type === partType) 37904 .sections.flatMap(s => s.elements) 37905 .filter(e => e.type === elementTypes.USER_ATTRIBUTE) 37906 .map(e => e.config) 37907 .reduce((current, elementConfig) => { 37908 if (formState.userAttributes) { 37909 return ({ 37910 ...current, 37911 [elementConfig.slug]: formState.userAttributes[elementConfig.slug] 37912 }); 37913 } 37914 else { 37915 return ({ 37916 ...current 37917 }); 37918 } 37919 }, {}); 37920 37921 const mapToServerError = (responseCode, responseMessage, formState) => { 37922 if (responseCode === 401) { 37923 if (responseMessage.indexOf("verification is required") > -1) { 37924 return ServerError.EMAIL_VERIFICATION_REQUIRED; 37925 } 37926 if (responseMessage.indexOf("session must be authenticated") > -1) { 37927 return ServerError.NO_AUTHENTICATED_SESSION; 37928 } 37929 if (formState.verificationCode) { 37930 return ServerError.VERIFICATION_CODE_OR_PASSWORD_INCORRECT; 37931 } 37932 return ServerError.LOGIN_FAILED; 37933 } 37934 if (responseCode === 402 && responseMessage?.includes('this domain is not supported.')) { 37935 return ServerError.BLOCKED_EMAIL_DOMAIN; 37936 } 37937 if (responseCode === 409) { 37938 return ServerError.USER_ALREADY_EXISTS; 37939 } 37940 if (responseCode === 400 && responseMessage?.includes("The provided password is not strong enough")) { 37941 return ServerError.PASSWORD_NOT_STRONG_ENOUGH; 37942 } 37943 if (responseCode === 404 && responseMessage?.includes("account")) { 37944 return ServerError.ACCOUNT_NOT_FOUND; 37945 } 37946 if (responseCode === 404) 37947 return ServerError.USER_DOES_NOT_EXIST; 37948 if (responseCode === 429 && responseMessage?.includes("sessions limit reached")) { 37949 return ServerError.TOO_MANY_SESSIONS; 37950 } 37951 if (responseCode === 429) 37952 return ServerError.NO_ACCOUNT_ACCESS; 37953 if (formState.socialSignin) 37954 return ServerError.SOCIAL_SIGNIN_REGISTRATION_LOGIN_ERROR; 37955 if (responseCode === 403 && responseMessage?.includes("Contact creation not enabled")) { 37956 return ServerError.CONTACT_CREATION_NOT_ENABLED; 37957 }
37958 return ServerError.UNKNOWN_LOGIN_REGISTER_ERROR; 37959 }; 37960 37961 const logConversion = (conversion, form, formActions) => { 37962 if (!form.organisationConfiguration.ruleAnalyticsEnabled) { 37963 return; 37964 } 37965 void request('zephr/public/rule-outcomes/v1/conversions', { 37966 method: 'POST', 37967 bodyObject: { 37968 "conversion": conversion, 37969 "ruleId": form.ruleId, 37970 "outcomeId": form.outcomeId 37971 } 37972 }, formActions); 37973 }; 37974 37975 const logConversionAfterRegistration = (form, formActions) => logConversion("REGISTERED", form, formActions); 37976 37977 const PATH_PARAM_NAME = "sharing_id"; 37978 /** 37979 * Extract a sharing ID from the page URL. 37980 */ 37981 const getProductSharingInvite = () => { 37982 try { 37983 const sharingId = new URLSearchParams(window.location.search).get(PATH_PARAM_NAME); 37984 return sharingId ? { product_sharing_id: sharingId } : null; 37985 } 37986 catch { 37987 // If there is any browser compatibility issue, ignore it 37988 return null; 37989 } 37990 }; 37991 const removeSharingInviteFromUrl = (url) => { 37992 try { 37993 const r = new URL(url); 37994 if (!r.searchParams.has(PATH_PARAM_NAME)) { 37995 return url; 37996 } 37997 r.searchParams.delete(PATH_PARAM_NAME); 37998 return r.href; 37999 } 38000 catch { 38001 // If there is any browser compatibility issue, ignore it 38002 return url; 38003 } 38004 }; 38005 38006 const toLoginPayload = (formState) => ({ 38007 identifiers: { email_address: formState.emailAddress }, 38008 validators: { 38009 password: formState.password || undefined, 38010 email_otp: formState.verificationCode || undefined, 38011 token_exchange: formState.socialSigninToken || undefined 38012 } 38013 }); 38014 const preprocessorIdentity$2 = (slug, t) => t; 38015 const toRegistrationPayload = (form, formState) => { 38016 const autoAppliedAttributes = formConfigAs(form).autoApplyAttributes ?? {}; 38017 const preprocessor = window.Blaize?.preProcessFormData ?? preprocessorIdentity$2; 38018 const attributes = userAttributesValuesForPart(partTypes.ACCOUNT_VERIFICATION.type, form, formState); 38019 const attributesWithAutoApplied = { 38020 ...attributes, 38021 ...autoAppliedAttributes 38022 }; 38023 const productSharingData = getProductSharingInvite(); 38024 return preprocessor(form.id, { 38025 identifiers: formState.socialSignin ? {} : { email_address: formState.emailAddress }, 38026 validators: { 38027 password: formState.createPassword || undefined, 38028 email_otp: formState.verificationCode || undefined, 38029 token_exchange: formState.socialSigninToken || undefined 38030 }, 38031 attributes: Object.keys(attributesWithAutoApplied).length ? attributesWithAutoApplied : undefined, 38032 account_membership_code: formState.accountMembershipCode || undefined, 38033 ...(productSharingData ?? {}) 38034 }); 38035 }; 38036 const register = async (form, formState, formActions) => { 38037 const payload = toRegistrationPayload(form, formState); 38038 const response = await request('blaize/register', { 38039 method: "POST", 38040 bodyObject: payload 38041 }, formActions); 38042 return processResponse$2(payload, response, form, formState, formActions); 38043 }; 38044 const login = async (form, formState, formActions) => { 38045 const payload = toLoginPayload(formState); 38046 const response = await request('blaize/login', { 38047 method: "POST", 38048 bodyObject: payload 38049 }, formActions); 38050 return processResponse$2(null, response, form, formState, formActions); 38051 }; 38052 const processResponse$2 = async (registrationPayload, response, form, formState, formActions) => { 38053 registrationPayload ? 38054 logDataLayerEvent(form, 'zephr_form_register', { 38055 success: response?.ok 38056 }) : 38057 logDataLayerEvent(form, 'zephr_form_login', { 38058 success: response?.ok 38059 }); 38060 if (!response?.ok) { 38061 if (formState.verificationCode) { 38062 formActions.updateFormState({ 38063 verificationCodeValid: false 38064 }); 38065 } 38066 const responseMessage = (await response.json())?.message; 38067 const serverError = mapToServerError(response.status, responseMessage, formState); 38068 logDataLayerEvent(form, 'zephr_form_error', { 38069 error: ServerError[serverError], 38070 }); 38071 if (serverError === ServerError.PASSWORD_NOT_STRONG_ENOUGH) { 38072 formActions.updateFormState({ 38073 dynamicServerErrorMessage: responseMessage, 38074 }); 38075 } 38076 formActions.updateFormState({ 38077 serverErrors: [serverError] 38078 }); 38079 if (ServerErrors[serverError].jumpToPart) {
38080 formActions.jumpToPartStart(ServerErrors[serverError].jumpToPart); 38081 } 38082 return Promise.resolve(); 38083 } 38084 if (!formState.userExists) { 38085 logConversionAfterRegistration(form, formActions); 38086 } 38087 return response.json() 38088 .then(async (json) => { 38089 const cookieInResponse = json.cookie?.includes("blaize_session"); 38090 if (cookieInResponse) { 38091 document.cookie = json.cookie; 38092 } 38093 else { 38094 if (!form.sectionFlow.canPartiallyRegister) { 38095 console.warn("No cookie returned from login/register endpoint - most likely incorrect form configuration."); 38096 formActions.updateFormState({ 38097 serverErrors: [ServerError.NO_COOKIE_FROM_LOGIN_REGISTER_ERROR], 38098 }); 38099 return Promise.resolve(); 38100 } 38101 } 38102 registrationPayload && window.Blaize?.postProcessFormData && window.Blaize.postProcessFormData(form.id, registrationPayload, json); 38103 if (formState.verificationCode && formState.currentSection.elements.some(e => e.type === elementTypes.VERIFICATION_CODE)) { 38104 formActions.updateFormState({ 38105 verificationCodeValid: true 38106 }); 38107 await waitAfterCode(form); 38108 } 38109 formActions.updateFormState({ 38110 loginRegistrationComplete: true 38111 }); 38112 return formActions.onEvent(FormEvent.LOGIN_REGISTRATION_COMPLETE); 38113 }); 38114 }; 38115 38116 /** 38117 * Submit user attributes in sections that are not part of registration. 38118 */ 38119 const submitUserAttributesForPart = async (partType, form, formState, formActions) => { 38120 const attributes = userAttributesValuesForPart(partType, form, formState); 38121 if (Object.keys(attributes).length === 0) { 38122 return Promise.resolve(); 38123 } 38124 const response = await request('blaize/profile', { 38125 method: "PATCH", 38126 bodyObject: attributes 38127 }, formActions); 38128 if (!response.ok) { 38129 formActions.updateFormState({ 38130 serverErrors: [ServerError.INVALID_USER_ATTRIBUTES] 38131 }); 38132 logDataLayerEvent(form, 'zephr_form_error', { 38133 error: ServerError[ServerError.INVALID_USER_ATTRIBUTES], 38134 }); 38135 throw `Error submitting user attributes ${JSON.stringify(response)}`; 38136 } 38137 return Promise.resolve(); 38138 }; 38139 38140 const CHANGE_SUBSCRIPTION_DEFAULT_CONVERSION_NAME = "CHANGE_SUBSCRIPTION"; 38141 const logConversionAfterPurchase = (form, formActions) => logConversion(formConfigAs(form).changeSubscriptionMode 38142 ? (formConfigAs(form).changeSubscriptionConversionName ?? CHANGE_SUBSCRIPTION_DEFAULT_CONVERSION_NAME) 38143 : "CUSTOMER", form, formActions); 38144 38145 // Unique ID creation requires a high quality random # generator. In the browser we therefore 38146 // require the crypto API and do not support built-in fallback to lower quality random number 38147 // generators (like Math.random()). 38148 let getRandomValues; 38149 const rnds8 = new Uint8Array(16); 38150 function rng() { 38151 // lazy load so that environments that need to polyfill have a chance to do so 38152 if (!getRandomValues) { 38153 // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. 38154 getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto); 38155 38156 if (!getRandomValues) { 38157 throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); 38158 } 38159 } 38160 38161 return getRandomValues(rnds8); 38162 } 38163 38164 /** 38165 * Convert array of 16 byte values to UUID string format of the form: 38166 * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 38167 */ 38168 38169 const byteToHex = []; 38170 38171 for (let i = 0; i < 256; ++i) { 38172 byteToHex.push((i + 0x100).toString(16).slice(1)); 38173 } 38174 38175 function unsafeStringify(arr, offset = 0) { 38176 // Note: Be careful editing this code! It's been tuned for performance 38177 // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 38178 return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]; 38179 } 38180 38181 const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto); 38182 var native = { 38183 randomUUID 38184 }; 38185 38186 function v4(options, buf, offset) { 38187 if (native.randomUUID && !buf && !options) { 38188 return native.randomUUID(); 38189 } 38190 38191 options = options || {}; 38192 const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` 38193 38194 rnds[6] = rnds[6] & 0x0f | 0x40; 38195 rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided 38196 38197 if (buf) { 38198 offset = offset || 0; 38199 38200 for (let i = 0; i < 16; ++i) { 38201 buf[offset + i] = rnds[i]; 38202 } 38203 38204 return buf; 38205 } 38206 38207 return unsafeStringify(rnds); 38208 } 38209 38210 const pay = (form, formState, formActions) => submitUserAttributesForPart(partTypes.PAYMENT.type, form, formState, formActions) 38211 .then(() => { 38212 const completer = formState.mobilePaymentService == null 38213 ? paymentProviderFor(form.organisationConfiguration.paymentProvider).completer 38214 : mobilePaymentServiceFor(form.organisationConfiguration.paymentProvider).completer; 38215 return completer(form, formState, formActions) 38216 .then(() => { 38217 const postFormSubmitMessage = { 38218 error: null, 38219 errorMessage: "", 38220 success: true, 38221 formSlug: form.id 38222 }; 38223 const formEventPayload = JSON.stringify(postFormSubmitMessage); 38224 // handle ios message 38225 window?.webkit?.messageHandlers?.messageHandler?.postMessage(formEventPayload); 38226 // handle android message
38227 window?.AndroidFormEventListener?.processFormEvent(formEventPayload); 38228 logConversionAfterPurchase(form, formActions); 38229 formActions.updateFormState({ 38230 paymentProcessed: true 38231 }); 38232 logDataLayerEvent(form, 'zephr_form_purchase', { 38233 productId: formState.paymentOption.productId, 38234 planId: formState.paymentOption.slug, 38235 price: formState.paymentOptionPrices?.totalPrice 38236 }); 38237 logDataLayerEvent(form, 'purchase', { 38238 ecommerce: { 38239 transaction_id: v4(), 38240 value: formState.paymentOptionPrices?.totalPrice, 38241 tax: formState.paymentOptionPrices?.taxPrice, 38242 currency: getRelevantCurrency(form, formState), 38243 coupon: formState.promoCode, 38244 items: [{ 38245 item_id: formState.paymentOption.slug, 38246 item_name: formState.paymentOption.productId, 38247 price: formState.paymentOptionPrices?.totalPrice, 38248 quantity: 1 38249 }] 38250 } 38251 }); 38252 if (formState.convertCancelSubscriptionToAcceptOffer) { 38253 logDataLayerEvent(form, 'zephr_form_subscription_cancel_accept_offer', { 38254 canceledProductId: formState.selectedSubscription.productId, 38255 acceptedProductId: formState.paymentOption.productId, 38256 productLabel: formState.paymentOption.label, 38257 currency: formState.paymentOption.currencyCode, 38258 amount: formState.paymentOptionPrices?.totalPrice 38259 }); 38260 } 38261 formActions.jumpToPartStart(partTypes.SUCCESS.type); 38262 if (formConfigAs(form).changeSubscriptionMode) { 38263 const changingFromSubscription = formState 38264 .validChangeFromPlans 38265 .find(plan => formState.paymentOption.slug === plan.planSlug && formState.paymentOption.productId === plan.productId) 38266 .changesFromSubscription; 38267 logDataLayerEvent(form, 'zephr_form_subscription_change', { 38268 fromProductId: changingFromSubscription.productId, 38269 fromProductAmount: changingFromSubscription.amount, 38270 toProductId: formState.paymentOption.productId, 38271 toProductAmount: formState.paymentOptionPrices.netPriceFormattedString, 38272 }); 38273 } 38274 }).catch(err => { 38275 const serverError = formState.mobilePaymentService == null 38276 ? ServerError.PAYMENT_PROCESSING_ERROR 38277 : ServerError.MOBILE_PAYMENT_PROCESSING_ERROR; 38278 console.error("Error completing payment", err); 38279 logDataLayerEvent(form, 'zephr_form_payment_failure', { 38280 reason: err 38281 }); 38282 formActions.updateFormState({ 38283 mobilePaymentService: null, 38284 serverErrors: [serverError] 38285 }); 38286 logDataLayerEvent(form, 'zephr_form_error', { 38287 error: ServerError[serverError], 38288 }); 38289 }); 38290 }); 38291 38292 const calculateChangeSubscriptionProrate = async (form, formState, formActions) => { 38293 if (!formConfigAs(form).changeSubscriptionMode) { 38294 return; 38295 } 38296 formActions.updateFormState({ 38297 changeSubscriptionProrate: null 38298 }); 38299 const prorateCalculator = paymentProviderFor(form.organisationConfiguration.paymentProvider) 38300 .changeSubscriptionProrateCalculator; 38301 if (!prorateCalculator) { 38302 return; 38303 } 38304 const prorate = await prorateCalculator(form, formState, formActions); 38305 formActions.updateFormState({ 38306 changeSubscriptionProrate: prorate 38307 }); 38308 }; 38309 38310 const getSubscriptionParam = (url) => { 38311 const urlObj = new URL(url); 38312 return urlObj.searchParams.get("subscription"); 38313 }; 38314 38315 /** 38316 * Checks if the current user has payment methods stored in their Zuora billing account 38317 * Only runs for zuora-billing payment provider 38318 */ 38319 const checkUserHasPaymentMethods = async (form, formActions) => { 38320 // Only check for zuora-billing provider 38321 if (form.organisationConfiguration.paymentProvider !== 'zuora-billing') { 38322 return true; // Assume other providers have payment methods or don't need this check 38323 } 38324 try { 38325 const response = await request('plugins/public/zuora-billing/payment-methods', { 38326 method: 'GET' 38327 }, formActions); 38328 const data = await response.json(); 38329 // Check if user has any credit cards stored 38330 return data.creditCards && data.creditCards[0]?.id; 38331 } 38332 catch (error) { 38333 console.warn('Unable to check payment methods, assuming user has payment methods:', error); 38334 // If we can't check, assume they have payment methods to avoid blocking the flow 38335 return true; 38336 } 38337 }; 38338 38339 const getChangeFromPlans = (subscriptions, form) => { 38340 return subscriptions.length === 0 ? [] : 38341 formConfigAs(form).paymentOptions.map(paymentOption => { 38342 const mapping = (formConfigAs(form).changeSubscriptionPlanMappings ?? []) 38343 .find(mapping => mapping.toPlan.planSlug === paymentOption.slug 38344 && mapping.toPlan.productId === paymentOption.productId); 38345 if (!mapping) { 38346 return; 38347 } 38348 const validSubscriptions = subscriptions.filter(subscription => 38349 // Ignore if subscription is for the destination payment option 38350 !(subscription.planId === paymentOption.slug && subscription.productId === paymentOption.productId) 38351 && 38352 ( 38353 // Ignore if subscription plan is not in 'fromPlans', unless allowing any plan 38354 mapping.fromAnyPlan || 38355 mapping.fromPlans.some(fromPlan => ((!subscription.multiphasePlan && fromPlan.planSlug === subscription.planId) || 38356 subscriptionMatchesMultiphasePlan(fromPlan, subscription)) 38357 && fromPlan.productId === subscription.productId))); 38358 if (validSubscriptions.length === 0) { 38359 return; 38360 } 38361 if (validSubscriptions.length > 1) { 38362 console.log("Found multiple valid subscriptions to move to payment option, selecting the first", paymentOption); 38363 } 38364 return { 38365 planSlug: paymentOption.slug, 38366 productId: paymentOption.productId, 38367 changesFromSubscription: subscriptions[0], 38368 }; 38369 }
38369).filter(Boolean); 38370 }; 38371 const subscriptionMatchesMultiphasePlan = (fromPlan, subscription) => { 38372 if (!subscription.multiphasePlan) { 38373 return false; 38374 } 38375 const planSlug = fromPlan.planSlug; 38376 const multiphasePlan = subscription.multiphasePlanMappings?.[planSlug]; 38377 if (!multiphasePlan) { 38378 return false; 38379 } 38380 return multiphasePlan.phases.some(phase => phase.planId === subscription.planId); 38381 }; 38382 const loadExistingSubscriptions$1 = async (form, formState, formActions, hasDynamicOfferAttached, validPlansRequired) => { 38383 const subscriptionLoader = paymentProviderFor(form.organisationConfiguration.paymentProvider).existingSubscriptionLoader; 38384 if (!subscriptionLoader) { 38385 console.error(`Existing subscription loader not configured for ${form.organisationConfiguration.paymentProvider}`); 38386 formActions.updateFormState({ 38387 formCannotBeActioned: true 38388 }); 38389 return; 38390 } 38391 let subscriptions; 38392 try { 38393 subscriptions = await subscriptionLoader(form, formState, formActions, true); 38394 } 38395 catch (err) { 38396 console.error("Unable to load subscriptions", err); 38397 formActions.updateFormState({ 38398 formCannotBeActioned: true 38399 }); 38400 return; 38401 } 38402 // Check if payment method setup is required 38403 const paymentConfig = formConfigAs(form); 38404 let requiresPaymentMethodSetup = false; 38405 if (paymentConfig.allowNoPaymentMethodUpgrade && form.organisationConfiguration.paymentProvider === 'zuora-billing') { 38406 const hasPaymentMethods = await checkUserHasPaymentMethods(form, formActions); 38407 if (!hasPaymentMethods) { 38408 requiresPaymentMethodSetup = true; 38409 } 38410 } 38411 const subscriptionQueryParamId = getSubscriptionParam(window.location.href); 38412 if (subscriptionQueryParamId) { 38413 const subscriptionMatched = subscriptions.filter(sub => sub.externalId === subscriptionQueryParamId); 38414 if (subscriptionMatched.length && getChangeFromPlans(subscriptionMatched, form).length) { 38415 subscriptions = subscriptionMatched; 38416 } 38417 } 38418 if (hasDynamicOfferAttached) { 38419 filterDynamicOfferChangeFromPlans(subscriptions, formState, formActions, requiresPaymentMethodSetup); 38420 return subscriptions; 38421 } 38422 const changeFromPlans = getChangeFromPlans(subscriptions, form); 38423 const selectionMode = formConfigAs(form).subscriptionSelectionMode; 38424 if (subscriptions.length === 0) { 38425 console.warn("Not showing form as user has no active subscriptions"); 38426 } 38427 else if (changeFromPlans.length === 0 && !selectionMode && validPlansRequired) { 38428 console.warn("Not showing form as no payment options can be actioned with the user's current subscriptions"); 38429 } 38430 if (selectionMode) { 38431 subscriptions = subscriptions.map(subscription => { 38432 if (formConfigAs(form).changeSubscriptionPlanMappings.some(m => m.fromAnyPlan || m.fromPlans.some(fromPlan => ((!subscription.multiphasePlan && fromPlan.planSlug === subscription.planId) || 38433 subscriptionMatchesMultiphasePlan(fromPlan, subscription)) 38434 && fromPlan.productId === subscription.productId))) { 38435 subscription.cannotBeChanged = false; 38436 } 38437 else { 38438 subscription.cannotBeChanged = true; 38439 } 38440 return subscription; 38441 }); 38442 } 38443 formActions.updateFormState({ 38444 existingSubscriptions: subscriptions, 38445 formCannotBeActioned: changeFromPlans.length === 0 && !selectionMode && validPlansRequired && !requiresPaymentMethodSetup, 38446 validChangeFromPlans: changeFromPlans, 38447 formPrerequisiteLoaded: true, 38448 requiresPaymentMethodSetup, 38449 showPaymentMethodFlowFirst: requiresPaymentMethodSetup, 38450 }); 38451 return subscriptions; 38452 }; 38453 const filterDynamicOfferChangeFromPlans = (subscriptions, formState, formActions, requiresPaymentMethodSetup) => { 38454 if (subscriptions.length === 0) { 38455 console.log("No subscriptions available."); 38456 formActions.updateFormState({ 38457 existingSubscriptions: [], 38458 formCannotBeActioned: true, 38459 validChangeFromPlans: [], 38460 formPrerequisiteLoaded: true, 38461 requiresPaymentMethodSetup, 38462 showPaymentMethodFlowFirst: requiresPaymentMethodSetup, 38463 }); 38464 return; 38465 } 38466 const dynamicOffer = formState.dynamicOfferResult; 38467 if (!dynamicOffer) { 38468 console.log("No dynamic offer result available."); 38469 } 38470 // Filter payment plans from dynamic offers that the user is not already subscribed to and matches the currency of existing subscriptions. 38471 const changeFromPlans = dynamicOffer?.products?.flatMap(product => product.paymentPlans.filter(plan => { 38472 const isSubscribed = subscriptions.some(sub => sub.planId === plan.planId && sub.productId === product.id); 38473 const currencyMatch = subscriptions.every(sub => plan.charges.every(charge => charge.prices?.some(price => price.currency === sub.currency))); 38474 return !isSubscribed && currencyMatch; 38475 }
38475).map(plan => ({ 38476 planSlug: plan.planId, 38477 productId: product.id, 38478 changesFromSubscription: subscriptions.find(sub => plan.charges.every(charge => charge.prices?.some(price => price.currency === sub.currency))) 38479 })).filter(plan => { 38480 const hasChangesFromSubscription = !!plan.changesFromSubscription; 38481 return hasChangesFromSubscription; 38482 })) ?? []; 38483 formActions.updateFormState({ 38484 existingSubscriptions: subscriptions, 38485 formCannotBeActioned: changeFromPlans.length === 0 && !requiresPaymentMethodSetup, 38486 validChangeFromPlans: changeFromPlans, 38487 formPrerequisiteLoaded: true, 38488 requiresPaymentMethodSetup, 38489 showPaymentMethodFlowFirst: requiresPaymentMethodSetup, 38490 }); 38491 }; 38492 38493 const loadExistingSubscriptions = async (form, formState, formActions, activeOnly) => { 38494 const provider = form.organisationConfiguration.paymentProvider; 38495 const loader = paymentProviderFor(provider)?.existingSubscriptionLoader; 38496 if (!loader) { 38497 console.error(`â [loadExistingSubscriptions] Existing subscription loader not configured for ${provider}`); 38498 return []; 38499 } 38500 const existingSubscriptions = loader ? await loader(form, formState, formActions, activeOnly) : []; 38501 formActions.updateFormState({ 38502 existingSubscriptions 38503 }); 38504 return existingSubscriptions; 38505 }; 38506 38507 const formStartAction$9 = async (form, formState, formActions) => { 38508 const hasGifts = form.formType === FormType.LIST_GIFT_SUBSCRIPTIONS_SENT 38509 || (form.formType === FormType.LIST_SUBSCRIPTIONS && form.organisationConfiguration.paymentProvider.includes('zuora-billing')); 38510 // Load gift subscriptions if applicable (for sent gifts or regular subscriptions that need to show received gifts) 38511 if (hasGifts) { 38512 // Set loading state to true first 38513 formActions.updateFormState({ 38514 loadingGiftSubscriptions: true 38515 }); 38516 // Get the mock data outside the try block so it's accessible in the catch block 38517 let allGiftSubscriptionsData = []; 38518 // For preview mode, we can skip the API call and use the mock data directly 38519 if (form.environment?.previewMode) { 38520 allGiftSubscriptionsData = [ 38521 // Received gift (current user is recipient) 38522 { 38523 gift_code: "GIFT-PREVIEW-1", 38524 subscription_number: "gift-sub-preview-1", 38525 status: "REDEEMED", 38526 is_purchaser: false, 38527 is_recipient: true, 38528 amount: "GBP 99/year", 38529 currency: "GBP", 38530 currentTermPeriodType: "Year", 38531 tenant_id: "organization_tenant_id", 38532 purchaser_user_id: "user_sender_12345", 38533 recipient_user_id: "user_current", 38534 recipient_email: "[email protected]", 38535 recipientFirstName: "John", 38536 recipientLastName: "Smith", 38537 message: "Enjoy your premium gift subscription!", 38538 subscriptionType: "Premium Digital", 38539 subscriptionStartDate: "January 1, 2025", 38540 subscriptionEndDate: "January 1, 2026", 38541 error_reason: null, 38542 host: "example.com", 38543 recipient_zuora_account_id: "account_123" 38544 }, 38545 // Sent gift (current user is purchaser) 38546 { 38547 gift_code: "GIFT-PREVIEW-2", 38548 subscription_number: "gift-sub-preview-2", 38549 status: "REDEEMED", 38550 is_purchaser: true, 38551 is_recipient: false, 38552 amount: "GBP 50/year", 38553 currency: "GBP", 38554 currentTermPeriodType: "Year", 38555 tenant_id: "organization_tenant_id", 38556 purchaser_user_id: "user_current", 38557 recipient_user_id: "user_recipient_12345", 38558 recipient_email: "[email protected]", 38559 recipientFirstName: "Jane", 38560 recipientLastName: "Doe", 38561 message: "Here's your gift subscription!", 38562 subscriptionType: "Basic Digital", 38563 subscriptionStartDate: "February 15, 2025", 38564 subscriptionEndDate: "February 15, 2026", 38565 error_reason: null, 38566 host: "example.com", 38567 recipient_zuora_account_id: "account_456" 38568 }, 38569 // Pending gift (not yet redeemed) 38570 { 38571 gift_code: "GIFT-PREVIEW-3", 38572 subscription_number: "gift-sub-preview-3", 38573 status: "PENDING", 38574 is_purchaser: true, 38575 is_recipient: false, 38576 amount: "GBP 50/year", 38577 currency: "GBP", 38578 currentTermPeriodType: "Year", 38579 tenant_id: "organization_tenant_id", 38580 purchaser_user_id: "user_current", 38581 recipient_user_id: null, 38582 recipient_email: "[email protected]", 38583 recipientFirstName: "", 38584 recipientLastName: "", 38585 message: "A gift subscription for you!", 38586 subscriptionType: "Basic Digital", 38587 subscriptionStartDate: "March 1, 2025", 38588 subscriptionEndDate: "March 1, 2026", 38589 error_reason: null, 38590 host: "example.com", 38591 recipient_zuora_account_id: null 38592 } 38593 ]; 38594 formActions.updateFormState({ 38595 giftSubscriptions: allGiftSubscriptionsData, 38596 formPrerequisiteLoaded: true, 38597 loadingGiftSubscriptions: false 38598 }); 38599 } 38600 else { 38601 try { 38602 formActions.updateFormState({ 38603 loadingSubscriptions: true 38604 }); 38605 // loads in subscriptions and gift data
38606 await loadGiftSubscriptions(form, formState, formActions); 38607 formActions.updateFormState({ 38608 formPrerequisiteLoaded: true, 38609 loadingGiftSubscriptions: false 38610 }); 38611 } 38612 catch (error) { 38613 console.error('â [LIST_SUBSCRIPTIONS] Error loading gift subscriptions:', error); 38614 formActions.updateFormState({ 38615 formPrerequisiteLoaded: true, 38616 serverErrors: [ 38617 ServerError.UNKNOWN 38618 ] 38619 }); 38620 } 38621 } 38622 formActions.updateFormState({ 38623 loadingGiftSubscriptions: false, 38624 loadingSubscriptions: false 38625 }); 38626 } 38627 // Load regular subscriptions for the standard list view 38628 try { 38629 formActions.updateFormState({ 38630 loadingSubscriptions: true 38631 }); 38632 await loadExistingSubscriptions(form, formState, formActions, false); 38633 } 38634 catch (error) { 38635 console.error("â [LIST_SUBSCRIPTIONS] Error loading subscriptions", error); 38636 formActions.updateFormState({ 38637 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR], 38638 }); 38639 } 38640 finally { 38641 formActions.updateFormState({ 38642 loadingSubscriptions: false, 38643 loadingGiftSubscriptions: false, 38644 }); 38645 } 38646 }; 38647 const goBack$2 = async (_, __, formActions) => { 38648 formActions.jumpToPartStart(partTypes.LIST_SUBSCRIPTIONS.type); 38649 return Promise.resolve(); 38650 }; 38651 const changePayment = async (form, formState, formActions) => { 38652 const completer = paymentProviderFor(form.organisationConfiguration.paymentProvider).changePaymentCompleter; 38653 await completer(form, formState, formActions) 38654 .then(async () => { 38655 formActions.updateFormState({ 38656 paymentProviderFormBusy: false 38657 }); 38658 const paymentConfig = formConfigAs(form); 38659 if (paymentConfig.changeSubscriptionMode && formState.paymentMethodSetupComplete) { 38660 const subscriptionCompleter = paymentProviderFor(form.organisationConfiguration.paymentProvider).completer; 38661 await subscriptionCompleter(form, formState, formActions) 38662 .then(() => { 38663 formActions.jumpToPartStart(partTypes.SUCCESS.type); 38664 logDataLayerEvent(form, 'zephr_form_subscription_change', null); 38665 }) 38666 .catch(err => { 38667 console.error("Error changing subscription after adding payment method:", err); 38668 formActions.updateFormState({ 38669 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR] 38670 }); 38671 }); 38672 } 38673 else { 38674 formActions.jumpToPartStart(partTypes.SUCCESS.type); 38675 logDataLayerEvent(form, 'zephr_form_payment_method_changed', null); 38676 } 38677 }).catch(err => { 38678 const serverError = formState.mobilePaymentService == null 38679 ? ServerError.PAYMENT_PROCESSING_ERROR 38680 : ServerError.MOBILE_PAYMENT_PROCESSING_ERROR; 38681 console.error("Error completing payment change", err); 38682 formActions.updateFormState({ 38683 mobilePaymentService: null, 38684 paymentProviderFormBusy: false, 38685 serverErrors: [serverError] 38686 }); 38687 logDataLayerEvent(form, 'zephr_form_error', { 38688 error: ServerError[serverError], 38689 }); 38690 }); 38691 }; 38692 // NB: If you change these event handlers, you must also consider updating the event handlers in giftSubscriptionsListSectionFlow.ts 38693 const eventHandlers$b = { 38694 [FormEvent.FORM_START]: formStartAction$9, 38695 [FormEvent.GO_BACK]: goBack$2, 38696 [FormEvent.PART_CHANGE_PAYMENT_COMPLETE]: changePayment, 38697 }; 38698 const sectionVisibilities$9 = []; 38699 const canAttemptSectionCompletion$a = (_, formState) => { 38700 return !formState.elementValidity 38701 .filter((e) => e.partType === formState.currentPart.type && 38702 e.sectionType === formState.currentSection.type && 38703 e.sectionOrder === formState.currentSection.order) 38704 .some((e) => !e.isValid); 38705 }; 38706 const extraElements$2 = [ 38707 { 38708 type: elementTypes.PAYMENT_PRE_LOADER, 38709 order: -1, 38710 }, 38711 ]; 38712 const listSubscriptionsSectionFlow = { 38713 extraElements: extraElements$2, 38714 eventHandlers: eventHandlers$b, 38715 sectionVisibilities: sectionVisibilities$9, 38716 canAttemptSectionCompletion: canAttemptSectionCompletion$a,
38717 canDismissFormManually: () => false, 38718 formRequiresPrerequisiteLoading: () => false, 38719 }; 38720 38721 /** 38722 * Map of possible movements through the form sections. 38723 */ 38724 let checkForRegisteredUserResolve; 38725 const checkForRegisteredUserPromise = new Promise(function (resolve) { 38726 checkForRegisteredUserResolve = resolve; 38727 }); 38728 const formStartAction$8 = async (form, _, formActions) => { 38729 const hasDynamicOfferAttached = !!formConfigAs(form).dynamicOffer?.id 38730 || !!formConfigAs(form).dynamicOfferPreview; 38731 if (hasDynamicOfferAttached) { 38732 await getDynamicOffer(form, formActions).catch((e) => { console.error('Error loading Dynamic Offer', e); }); 38733 } 38734 return checkForRegisteredUser(formActions) 38735 .then(async (alreadyRegistered) => { 38736 checkForRegisteredUserResolve(checkForRegisteredUserResolve); 38737 if (formConfigAs(form).changeSubscriptionMode) { 38738 formActions.updateFormState({ formCannotBeActioned: !alreadyRegistered }); 38739 await loadExistingSubscriptions$1(form, formActions.getFormState(), formActions, hasDynamicOfferAttached, true); 38740 const subscriptionQueryParam = getSubscriptionParam(window.location.href); 38741 if (subscriptionQueryParam && formActions.getFormState().existingSubscriptions.length === 1) { 38742 formActions.jumpToPartStart(partTypes.PLAN_SELECT.type); 38743 } 38744 } 38745 }); 38746 }; 38747 const onPlanSelectComplete$2 = (form, formState, formActions) => 38748 // After plan select, wait to see if the user is already logged in 38749 checkForRegisteredUserPromise 38750 .then(async () => { 38751 const state = formActions.getFormState(); 38752 if (state.userSession || state.loginRegistrationComplete) { 38753 const updatedState = await getProductAddons(form, state, formActions); 38754 void calculatePrices(form, updatedState, formActions) 38755 .then(formState => logDataLayerEvents(form, formState)); 38756 void calculateChangeSubscriptionProrate(form, updatedState, formActions); 38757 // If payment method setup is required, go to change-payment part first 38758 if (updatedState.requiresPaymentMethodSetup && !updatedState.paymentMethodSetupComplete) { 38759 formActions.jumpToPartStart(partTypes.CHANGE_PAYMENT.type); 38760 } 38761 else { 38762 formActions.jumpToPartStart(partTypes.PAYMENT.type); 38763 } 38764 } 38765 else { 38766 void calculatePrices(form, formState, formActions) 38767 .then(formState => logDataLayerEvents(form, formState)); 38768 void calculateChangeSubscriptionProrate(form, formState, formActions); 38769 formActions.jumpToPartStart(partTypes.ACCOUNT_VERIFICATION.type); 38770 } 38771 }); 38772 const logDataLayerEvents = (form, formState) => { 38773 // don't trigger data layer events for other form types that override this flow (i.e. gift subscription form) 38774 if (form.organisationConfiguration.trackFormDataLayerEvents && form.formType == FormType.PAYMENT) { 38775 const paymentOption = formState.paymentOption; 38776 // await calculatePrices(form, formActions.getFormState(), formActions); 38777 const paymentOptionPrice = formState.paymentOptionPrices?.totalPrice; 38778 logDataLayerEvent(form, 'zephr_form_payment_option_selected', { 38779 productId: paymentOption.productId, 38780 planId: paymentOption.slug, 38781 price: paymentOptionPrice, 38782 }); 38783 logDataLayerEvent(form, 'select_item', { 38784 ecommerce: { 38785 items: [{ 38786 item_id: paymentOption.slug, 38787 item_name: paymentOption.productId, 38788 price: paymentOptionPrice, 38789 quantity: 1 38790 }] 38791 } 38792 }); 38793 logDataLayerEvent(form, 'add_to_cart', { 38794 ecommerce: { 38795 currency: formConfigAs(form).formCurrency ?? paymentOption?.currencyCode, 38796 value: paymentOptionPrice, 38797 items: [{ 38798 item_id: paymentOption.slug, 38799 item_name: paymentOption.productId, 38800 price: paymentOptionPrice, 38801 quantity: 1 38802 }] 38803 } 38804 }); 38805 } 38806 }; 38807 const onAccountVerificationComplete$1 = (form, formState, formActions) => (formState.userExists ? login : register)(form, formState, formActions); 38808 const onSuccessComplete$1 = (form, formState, formActions) => submitUserAttributesForPart(partTypes.SUCCESS.type, form, formState, formActions) 38809 .then(() => { 38810 window.location.reload(); 38811 }); 38812 const onLoginRegister = (form, _, formActions) => getProductAddons(form, formActions.getFormState(), formActions) 38813 .then(() => calculatePrices(form, formActions.getFormState(), formActions)) 38814 .then(() =>
38814 formActions.jumpToPartStart(partTypes.PAYMENT.type)); 38815 const onSubscriptionSelectComplete$3 = (form, formState, formActions) => { 38816 const changeFromPlans = getChangeFromPlans([formState.selectedSubscription], form); 38817 formActions.updateFormState({ 38818 existingSubscriptions: [formState.selectedSubscription], 38819 formCannotBeActioned: changeFromPlans.length === 0, 38820 validChangeFromPlans: changeFromPlans, 38821 formPrerequisiteLoaded: true, 38822 }); 38823 formActions.jumpToPartStart(partTypes.PLAN_SELECT.type); 38824 }; 38825 const eventHandlers$a = { 38826 [FormEvent.FORM_START]: formStartAction$8, 38827 [FormEvent.LOGIN_REGISTRATION_COMPLETE]: onLoginRegister, 38828 [FormEvent.SECTION_EMAIL_COMPLETE]: onEmailEntered, 38829 [FormEvent.SECTION_PASSWORD_RESET_COMPLETE]: resetPassword, 38830 [FormEvent.SECTION_FORGOT_PASSWORD_COMPLETE]: verifiyPasswordResetCode, 38831 [FormEvent.PART_PLAN_SELECT_COMPLETE]: onPlanSelectComplete$2, 38832 [FormEvent.PART_ACCOUNT_VERIFICATION_COMPLETE]: onAccountVerificationComplete$1, 38833 [FormEvent.PART_PAYMENT_COMPLETE]: pay, 38834 [FormEvent.PART_SUCCESS_COMPLETE]: onSuccessComplete$1, 38835 [FormEvent.SELECT_SUBSCRIPTION_COMPLETE]: onSubscriptionSelectComplete$3, 38836 [FormEvent.PART_CHANGE_PAYMENT_COMPLETE]: changePayment, 38837 }; 38838 const sectionVisibilities$8 = [ 38839 { 38840 type: sectionTypes.EMAIL.type, 38841 isDisplayedInProgressBar: true, 38842 isVisible: (form) => !formConfigAs(form).changeSubscriptionMode 38843 }, 38844 { 38845 type: sectionTypes.LOGIN_PASSWORD.type, 38846 isDisplayedInProgressBar: false, 38847 isVisible: (form, formState) => formConfigAs(form).usePassword && formState.userExists && !formState.socialSignin 38848 }, 38849 { 38850 type: sectionTypes.PASSWORD_SETUP.type, 38851 isDisplayedInProgressBar: false, 38852 isVisible: (form, formState) => formConfigAs(form).usePassword && !formState.userExists && !formState.socialSignin 38853 }, 38854 { 38855 type: sectionTypes.SUCCESS.type, 38856 isDisplayedInProgressBar: false, 38857 isVisible: () => true 38858 }, 38859 { 38860 type: sectionTypes.PASSWORD_RESET.type, 38861 isDisplayedInProgressBar: false, 38862 isVisible: (form, formState) => formConfigAs(form).usePassword && formState.forgotPassword 38863 }, 38864 { 38865 type: sectionTypes.FORGOT_PASSWORD.type, 38866 isDisplayedInProgressBar: false, 38867 isVisible: (form, formState) => formConfigAs(form).usePassword && formState.forgotPassword 38868 }, 38869 { 38870 type: sectionTypes.VERIFICATION_CODE_LOGIN.type, 38871 isDisplayedInProgressBar: false, 38872 isVisible: (form, formState) => (formState.userExists && (formConfigAs(form).useVerificationCodes || formState.socialSignin)) ?? false 38873 }, 38874 { 38875 type: sectionTypes.VERIFICATION_CODE_REGISTRATION.type, 38876 isDisplayedInProgressBar: false, 38877 isVisible: (form, formState) => (!formState.userExists && (formConfigAs(form).useVerificationCodes || formState.emailIsContact)) ?? false 38878 }, 38879 { 38880 type: sectionTypes.REGISTRATION_CUSTOM.type, 38881 isDisplayedInProgressBar: true, 38882 isVisible: (form, formState) => !formState.userExists 38883 }, 38884 { 38885 type: sectionTypes.CHANGE_PAYMENT.type, 38886 isDisplayedInProgressBar: false, 38887 isVisible: (form, formState) => { 38888 const paymentConfig = formConfigAs(form); 38889 return paymentConfig.changeSubscriptionMode && 38890 paymentConfig.allowNoPaymentMethodUpgrade && 38891 formState.requiresPaymentMethodSetup === true && 38892 !formState.paymentMethodSetupComplete; 38893 } 38894 } 38895 ]; 38896 const canAttemptSectionCompletion$9 = (form, formState) => { 38897 const providerConfig = paymentProviderFor(form.organisationConfiguration.paymentProvider); 38898 return !formState.elementValidity.filter(e => e.partType === formState.currentPart.type && 38899 e.sectionType === formState.currentSection.type && 38900 e.sectionOrder === formState.currentSection.order) 38901 .filter(e => !(e.elementType === elementTypes.PAYMENT 38902 && providerConfig.canAttemptIncompletePaymentFormSubmission 38903 && formState.paymentProviderFormLoaded)) 38904 .some(e => !e.isValid); 38905 }; 38906 const canDismissFormManually = (form) => formConfigAs(form).changeSubscriptionMode; 38907 const formRequiresPrerequisiteLoading = (form) => formConfigAs(form).changeSubscriptionMode; 38908 const extraElements$1 = [ 38909 { 38910 type: elementTypes.PAYMENT_PRE_LOADER, 38911 order: -1, 38912 }, 38913 ]; 38914 const sectionFlow$9 = { 38915 extraElements: extraElements$1, 38916 sectionVisibilities: sectionVisibilities$8, 38917 eventHandlers: eventHandlers$a,
38918 canAttemptSectionCompletion: canAttemptSectionCompletion$9, 38919 canDismissFormManually, 38920 formRequiresPrerequisiteLoading 38921 }; 38922 38923 /** 38924 * Map of possible movements through the form sections for reg forms. 38925 */ 38926 const onAccountVerificationComplete = (form, formState, formActions) => (formState.userExists ? login : register)(form, formState, formActions); 38927 const onLoginRegisterComplete$1 = async (form, formState, formActions) => { 38928 const config = formConfigAs(form); 38929 const isPasswordless = getFormIsPasswordless(form); 38930 if (!formState.userExists && (isPasswordless || (form.organisationConfiguration.requireEmailVerfication && !config.useVerificationCodes && !formState.socialSignin))) { 38931 await sendLink(form, 'register', formState.emailAddress, formActions); 38932 await jumpToSection(sectionTypes.EMAIL_VERIFIED.type, form, formActions); 38933 return Promise.resolve(); 38934 } 38935 if (config.showSuccessOnFormCompletion && !formState.userExists) { 38936 await jumpToSection(sectionTypes.SUCCESS.type, form, formActions); 38937 } 38938 else { 38939 window.location.href = removeSharingInviteFromUrl(window.location.href); 38940 if (window.flowpoint) { 38941 window.flowpoint.track("Registration/Login Form Submitted"); 38942 } 38943 } 38944 return Promise.resolve(); 38945 }; 38946 const onSuccessComplete = () => { 38947 window.location.href = removeSharingInviteFromUrl(window.location.href); 38948 if (window.flowpoint) { 38949 window.flowpoint.track("Registration/Login Form Submitted"); 38950 } 38951 return Promise.resolve(); 38952 }; 38953 const eventHandlers$9 = { 38954 [FormEvent.LOGIN_REGISTRATION_COMPLETE]: onLoginRegisterComplete$1, 38955 [FormEvent.SECTION_EMAIL_COMPLETE]: onEmailEntered, 38956 [FormEvent.SECTION_PASSWORD_RESET_COMPLETE]: resetPassword, 38957 [FormEvent.SECTION_FORGOT_PASSWORD_COMPLETE]: verifiyPasswordResetCode, 38958 [FormEvent.PART_ACCOUNT_VERIFICATION_COMPLETE]: onAccountVerificationComplete, 38959 [FormEvent.PART_SUCCESS_COMPLETE]: onSuccessComplete, 38960 }; 38961 const sectionVisibilities$7 = [ 38962 { 38963 type: sectionTypes.EMAIL.type, 38964 isDisplayedInProgressBar: true, 38965 isVisible: () => true 38966 }, 38967 { 38968 type: sectionTypes.LOGIN_PASSWORD.type, 38969 isDisplayedInProgressBar: true, 38970 isVisible: (form, formState) => formConfigAs(form).usePassword && formState.userExists && !formState.socialSignin 38971 }, 38972 { 38973 type: sectionTypes.PASSWORD_SETUP.type, 38974 isDisplayedInProgressBar: true, 38975 isVisible: (form, formState) => formConfigAs(form).usePassword && !formState.userExists && !formState.socialSignin 38976 }, 38977 { 38978 type: sectionTypes.PASSWORD_RESET.type, 38979 isDisplayedInProgressBar: false, 38980 isVisible: (form, formState) => formConfigAs(form).usePassword && formState.forgotPassword 38981 }, 38982 { 38983 type: sectionTypes.FORGOT_PASSWORD.type, 38984 isDisplayedInProgressBar: false, 38985 isVisible: (form, formState) => formConfigAs(form).usePassword && formState.forgotPassword 38986 }, 38987 { 38988 type: sectionTypes.VERIFICATION_CODE_LOGIN.type, 38989 isDisplayedInProgressBar: false, 38990 isVisible: (form, formState) => (formState.userExists && (formConfigAs(form).useVerificationCodes || formState.socialSignin)) ?? false 38991 }, 38992 { 38993 type: sectionTypes.VERIFICATION_CODE_REGISTRATION.type, 38994 isDisplayedInProgressBar: false, 38995 isVisible: (form, formState) => (!formState.userExists && (formConfigAs(form).useVerificationCodes || formState.emailIsContact)) ?? false 38996 }, 38997 { 38998 type: sectionTypes.REGISTRATION_CUSTOM.type, 38999 isDisplayedInProgressBar: true, 39000 isVisible: (_, formState) => !formState.userExists 39001 }, 39002 { 39003 type: sectionTypes.SUCCESS.type, 39004 isDisplayedInProgressBar: false, 39005 isVisible: () => true 39006 }, 39007 { 39008 type: sectionTypes.EMAIL_VERIFIED.type, 39009 isDisplayedInProgressBar: false, 39010 isVisible: (form, formState) => form.organisationConfiguration.requireEmailVerfication && 39011 !(formConfigAs(form).useVerificationCodes) && 39012 !formState.socialSignin 39013 }, 39014 { 39015 type: sectionTypes.PASSWORDLESS_VIA_LOGIN_LINK.type, 39016 isDisplayedInProgressBar: false, 39017 isVisible: (form, formState) => formState.userExists && getFormIsPasswordless(form) 39018 } 39019 ]; 39020 const canAttemptSectionCompletion$8 = (_, formState) => { 39021 return !formState.elementValidity.filter(e => e.partType === formState.currentPart.type && 39022 e.sectionType === formState.currentSection.type && 39023 e.sectionOrder === formState.currentSection.order) 39024 .some(e => !e.isValid); 39025 }; 39026 const sectionFlow$8 = { 39027 extraElements: [], 39028 eventHandlers: eventHandlers$9, 39029 sectionVisibilities: sectionVisibilities$7,
39030 canAttemptSectionCompletion: canAttemptSectionCompletion$8, 39031 canDismissFormManually: () => false, 39032 formRequiresPrerequisiteLoading: () => false, 39033 canPartiallyRegister: true 39034 }; 39035 39036 const processResponse$1 = async (payload, response, form, formState, formActions) => { 39037 const json = await response.json(); 39038 if (response?.ok) { 39039 logConversion('CONTACT', form, formActions); 39040 window.Blaize?.postProcessFormData && window.Blaize.postProcessFormData(form.id, payload, json); 39041 return Promise.resolve(true); 39042 } 39043 // Handle errors 39044 const serverError = mapToServerError(response.status, json?.message, formState); 39045 formActions.updateFormState({ 39046 serverErrors: [serverError] 39047 }); 39048 logDataLayerEvent(form, 'zephr_form_error', { 39049 error: ServerError[serverError], 39050 }); 39051 if (ServerErrors[serverError].jumpToPart) { 39052 formActions.jumpToPartStart(ServerErrors[serverError].jumpToPart); 39053 } 39054 return Promise.resolve(false); 39055 }; 39056 const preprocessorIdentity$1 = (_, t) => t; 39057 const toContactCreeatePayload = (form, formState) => { 39058 const autoAppliedAttributes = formConfigAs(form).autoApplyAttributes ?? {}; 39059 const preprocessor = window.Blaize?.preProcessFormData ?? preprocessorIdentity$1; 39060 const attributes = userAttributesValuesForPart(partTypes.CONTACT_VERIFICATION.type, form, formState); 39061 const attributesWithAutoApplied = { 39062 ...attributes, 39063 ...autoAppliedAttributes 39064 }; 39065 return preprocessor(form.id, { 39066 identifiers: { email_address: formState.emailAddress }, 39067 attributes: Object.keys(attributesWithAutoApplied).length ? attributesWithAutoApplied : undefined, 39068 }); 39069 }; 39070 const registerContact = async (form, formState, formActions) => { 39071 const payload = toContactCreeatePayload(form, formState); 39072 const response = await request('zephr/createContact', { 39073 method: "POST", 39074 bodyObject: payload 39075 }, formActions); 39076 return processResponse$1(payload, response, form, formState, formActions); 39077 }; 39078 39079 /** 39080 * Map of possible movements through the form sections for contact forms. 39081 */ 39082 const formStartAction$7 = async (_, __, formActions) => { 39083 await checkForRegisteredUser(formActions); 39084 }; 39085 // handle submit of email on first step or after additional attributes preferences provided 39086 const onContactVerificationComplete = async (form, formState, formActions) => { 39087 const config = formConfigAs(form); 39088 try { 39089 await registerContact(form, formState, formActions); 39090 if (config.showSuccessOnFormCompletion) { 39091 await jumpToPart(partTypes.SUCCESS.type, form, formActions); 39092 } 39093 else { 39094 window.location.reload(); 39095 } 39096 } 39097 catch (error) { 39098 console.error(error); 39099 await jumpToSection(sectionTypes.EMAIL.type, form, formActions); 39100 } 39101 }; 39102 const eventHandlers$8 = { 39103 [FormEvent.FORM_START]: formStartAction$7, 39104 [FormEvent.PART_CONTACT_VERIFICATION_COMPLETE]: onContactVerificationComplete, 39105 }; 39106 const sectionVisibilities$6 = [ 39107 { 39108 type: sectionTypes.EMAIL.type, 39109 isDisplayedInProgressBar: false, 39110 isVisible: () => true, 39111 }, 39112 { 39113 type: sectionTypes.REGISTRATION_CUSTOM.type, 39114 isDisplayedInProgressBar: false, 39115 isVisible: (_, formState) => !formState.userExists, 39116 }, 39117 ]; 39118 const canAttemptSectionCompletion$7 = (_, formState) => { 39119 return !formState.elementValidity 39120 .filter((e) => e.partType === formState.currentPart.type && 39121 e.sectionType === formState.currentSection.type && 39122 e.sectionOrder === formState.currentSection.order) 39123 .some((e) => !e.isValid); 39124 }; 39125 const sectionFlow$7 = { 39126 extraElements: [], 39127 eventHandlers: eventHandlers$8, 39128 sectionVisibilities: sectionVisibilities$6, 39129 canAttemptSectionCompletion: canAttemptSectionCompletion$7, 39130 canDismissFormManually: () => false, 39131 formRequiresPrerequisiteLoading: () => false, 39132 }; 39133 39134 const processResponse = async (payload, response, attributes, form, formState, formActions) => { 39135 if (response?.ok) { 39136 if (form.formType == FormType.UPDATE_PROFILE) { 39137 logDataLayerEvent(form, 'zephr_form_profile_update', { 39138 success: response?.ok, 39139 ...Object.entries(attributes).reduce((acc, [key, value]) => ({ ...acc, [`attr_${key}`]: value }), {}) 39140 }); 39141 } 39142 if (form.formType == FormType.DATA_CAPTURE) { 39143 logConversion('Data Captured', form, formActions); 39144 logDataLayerEvent(form, 'zephr_form_data_capture', { 39145 success: response?.ok, 39146 ...Object.entries(attributes).reduce((acc, [key, value]) => ({ ...acc, [`attr_${key}`]: value }), {}) 39147 }); 39148 } 39149 if (form.formType == FormType.COMPLETE_REGISTRATION) { 39150 logConversion('Completed Registration', form, formActions); 39151 logDataLayerEvent(form, 'zephr_form_complete_registration', { 39152 success: response?.ok, 39153 ...Object.entries(attributes).reduce((acc, [key, value]) => ({ ...acc, [`attr_${key}`]: value }), {}) 39154 }); 39155 } 39156 const json = await response.json(); 39157 payload && window.Blaize?.postProcessFormData && window.Blaize.postProcessFormData(form.id, payload, json); 39158 return Promise.resolve(true); 39159 } 39160 const responseMessage = (await response.json())?.message; 39161 const serverError = mapToServerError(response.status, responseMessage, formState); 39162 formActions.updateFormState({ 39163 serverErrors: [serverError] 39164 }); 39165 logDataLayerEvent(form, 'zephr_form_error', { 39166 error: ServerError[serverError], 39167 }); 39168 return Promise.resolve(false); 39169 }; 39170 const preprocessorIdentity = (_, t) => t; 39171 const toUpdateUserPayload = (form, formState, partType) => { 39172 const preprocessor = window.Blaize?.preProcessFormData ?? preprocessorIdentity; 39173 const attributes = userAttributesValuesForPart(partType, form, formState); 39174 const autoAppliedAttributes = formConfigAs(form).autoApplyAttributes ?? {}; 39175 return preprocessor(form.id, { 39176 ...attributes, 39177 ...autoAppliedAttributes, 39178 ...(formState.createPassword && { 'blaize-validator': formState.createPassword }), 39179 }); 39180 }; 39181 const updateUser = async (form, formState, formActions, partType) => { 39182 const payload = toUpdateUserPayload(form, formState, partType); 39183 if (formState.fireCancelationReasonEvent) { 39184 formActions.updateFormState({ 39185 cancelationReasonAttributes: payload 39186 }); 39187 } 39188 const response = await request('blaize/profile', { 39189 method: "PATCH", 39190 bodyObject: payload 39191 }, formActions); 39192 const attributes = userAttributesValuesForPart(partType, form, formState); 39193 return processResponse(payload, response, attributes, form, formState, formActions); 39194 }; 39195 39196 const formStartAction$6 = async (form, formState, formActions) => { 39197 const hideIfSet = form.parts 39198 .map(e => e.sections) 39199 .reduce((acc, curr) => { 39200 const attrToHide = curr.map(e => e.elements 39201 .filter(e => e.type == "user_attribute" && e.config?.hideIfSet) 39202 .map(e => e.config?.slug) 39203 .filter(slug => slug != null)); 39204 return acc.concat(attrToHide); 39205 }, []) 39206 .flat(); 39207 const toRemove = []; 39208 try { 39209 const response = await request('blaize/profile', { method: "GET" }, formActions); 39210 if (response?.ok) { 39211 const responseJson = await response.json(); 39212 formConfigAs(form).autoApplyAttributes && 39213 Object.keys(formConfigAs(form).autoApplyAttributes).forEac
39213h(a => { 39214 if (Object.prototype.hasOwnProperty.call(responseJson, a)) { 39215 delete responseJson[a]; 39216 } 39217 }); 39218 hideIfSet.forEach(a => { 39219 if (Object.prototype.hasOwnProperty.call(responseJson, a)) { 39220 toRemove.push(a); 39221 } 39222 }); 39223 if (toRemove.length == Object.keys(formState.userAttributes).length && form.formType != FormType.COMPLETE_REGISTRATION) { 39224 console.warn("Not showing form as user has no attributes to update"); 39225 } 39226 else { 39227 formActions.updateFormState({ 39228 formPrerequisiteLoaded: true, 39229 hideIfSetAttributes: toRemove, 39230 userAttributes: { ...responseJson }, 39231 }); 39232 } 39233 } 39234 } 39235 catch (err) { 39236 console.error(err); 39237 } 39238 }; 39239 const onUpdateProfileComplete = async (form, formState, formActions) => { 39240 const config = formConfigAs(form); 39241 try { 39242 await updateUser(form, formState, formActions, partTypes.PROFILE_UPDATE.type) 39243 .then(async (success) => { 39244 if (success && config.showSuccessOnFormCompletion) { 39245 await jumpToPart(partTypes.SUCCESS.type, form, formActions); 39246 } 39247 else if (success) { 39248 window.location.reload(); 39249 } 39250 }); 39251 } 39252 catch (error) { 39253 console.error(error); 39254 } 39255 }; 39256 const eventHandlers$7 = { 39257 [FormEvent.FORM_START]: formStartAction$6, 39258 [FormEvent.PART_PROFILE_UPDATE_COMPLETE]: onUpdateProfileComplete, 39259 }; 39260 const sectionVisibilities$5 = []; 39261 const canAttemptSectionCompletion$6 = (_, formState) => { 39262 return !formState.elementValidity 39263 .filter((e) => e.partType === formState.currentPart.type && 39264 e.sectionType === formState.currentSection.type && 39265 e.sectionOrder === formState.currentSection.order) 39266 .some((e) => !e.isValid); 39267 }; 39268 const sectionFlow$6 = { 39269 extraElements: [], 39270 eventHandlers: eventHandlers$7, 39271 sectionVisibilities: sectionVisibilities$5, 39272 canAttemptSectionCompletion: canAttemptSectionCompletion$6, 39273 canDismissFormManually: () => false, 39274 formRequiresPrerequisiteLoading: () => true, 39275 }; 39276 39277 const startUpdateEmailFlow = async (form, formState, formActions) => { 39278 try { 39279 const updateEmailWithoutPassword = !formState.password; 39280 const payload = { 39281 current_identifiers: { 39282 email_address: formState.readOnlyEmail, 39283 }, 39284 new_identifiers: { 39285 email_address: formState.emailAddress, 39286 }, 39287 ...(updateEmailWithoutPassword ? {} : { 39288 validators: { 39289 password: formState.password, 39290 }, 39291 }), 39292 }; 39293 const response = await request(updateEmailWithoutPassword ? 'blaize/users/update-email' : 'zephr/users/update-email', { 39294 method: 'POST', 39295 bodyObject: payload, 39296 }, formActions); 39297 logDataLayerEvent(form, 'zephr_form_email_update_code_sent', { 39298 success: response?.ok 39299 }); 39300 if (!response.ok) { 39301 formActions.updateFormState({ 39302 serverErrors: [ServerError.UNKNOWN], 39303 }); 39304 logDataLayerEvent(form, 'zephr_form_error', { 39305 error: ServerError[ServerError.UNKNOWN], 39306 }); 39307 return { success: false, isLinkBased: updateEmailWithoutPassword }; 39308 } 39309 return { success: true, isLinkBased: updateEmailWithoutPassword }; 39310 } 39311 catch (err) { 39312 formActions.updateFormState({ 39313 serverErrors: [ServerError.UNKNOWN], 39314 }); 39315 logDataLayerEvent(form, 'zephr_form_error', { 39316 error: ServerError[ServerError.UNKNOWN], 39317 }); 39318 return { success: false, isLinkBased: !formState.password }; 39319 } 39320 }; 39321 const endEmailUpdateFlow = async (form, formState, formActions) => { 39322 formActions.incrementRequestCount(); 39323 formActions.updateFormState({ 39324 verificationCodeValid: undefined 39325 }); 39326 const response = await request(`zephr/users/update-email/${formState.verificationCode}`, { 39327 method: "POST", 39328 bodyObject: { 39329 current_identifiers: { 39330 email_address: formState.readOnlyEmail, 39331 }, 39332 } 39333 }, formActions); 39334 logDataLayerEvent(form, 'zephr_form_password_reset_code_validate', { 39335 success: response?.ok 39336 }); 39337 if (!response.ok) { 39338 formActions.updateFormState({ 39339 serverErrors: [ServerError.VERIFICATION_CODE_INCORRECT] 39340 }); 39341 logDataLayerEvent(form, 'zephr_form_error', { 39342 error: ServerError[ServerError.VERIFICATION_CODE_INCORRECT], 39343 }); 39344 formActions.decrementRequestCount(); 39345 return false;
39346 } 39347 await waitAfterCode(form); 39348 formActions.decrementRequestCount(); 39349 return true; 39350 }; 39351 39352 const startPasswordUpdateFlow = async (form, formState, formActions) => { 39353 try { 39354 const payload = { 39355 current_validators: { 39356 password: formState.currentPassword, 39357 }, 39358 new_validators: { 39359 password: formState.createPassword, 39360 }, 39361 }; 39362 const response = await request('zephr/users/change-password', { 39363 method: 'POST', 39364 bodyObject: payload, 39365 }, formActions); 39366 logDataLayerEvent(form, 'zephr_form_password_update_code_sent', { 39367 success: response?.ok 39368 }); 39369 if (!response.ok) { 39370 formActions.updateFormState({ 39371 serverErrors: [ServerError.UNKNOWN], 39372 }); 39373 return false; 39374 } 39375 return true; 39376 } 39377 catch (err) { 39378 formActions.updateFormState({ 39379 serverErrors: [ServerError.UNKNOWN], 39380 }); 39381 return false; 39382 } 39383 }; 39384 const endPasswordUpdateFlow = async (form, formState, formActions) => { 39385 formActions.incrementRequestCount(); 39386 formActions.updateFormState({ 39387 verificationCodeValid: undefined 39388 }); 39389 const response = await request(`zephr/users/change-password/${formState.verificationCode}`, { 39390 method: "GET", 39391 }, formActions); 39392 logDataLayerEvent(form, 'zephr_form_password_update_code_validate', { 39393 success: response?.ok 39394 }); 39395 if (!response.ok) { 39396 formActions.updateFormState({ 39397 serverErrors: [ServerError.VERIFICATION_CODE_INCORRECT] 39398 }); 39399 logDataLayerEvent(form, 'zephr_form_error', { 39400 error: ServerError[ServerError.VERIFICATION_CODE_INCORRECT], 39401 }); 39402 formActions.decrementRequestCount(); 39403 return false; 39404 } 39405 await waitAfterCode(form); 39406 formActions.decrementRequestCount(); 39407 return true; 39408 }; 39409 39410 const formStartAction$5 = async (_, __, formActions) => { 39411 formActions.incrementRequestCount(); 39412 try { 39413 await Promise.all([fetchProfile(formActions), fetchEmail(formActions)]); 39414 } 39415 finally { 39416 formActions.decrementRequestCount(); 39417 } 39418 }; 39419 const startEmailUpdate = async (form, formState, formActions) => { 39420 const result = await startUpdateEmailFlow(form, formState, formActions); 39421 if (result.success) { 39422 if (result.isLinkBased) { 39423 // Passwordless flow - show confirmation message to check email for link 39424 // Check if confirmation part exists in form config (defensive guard for legacy forms) 39425 const hasConfirmationPart = form.parts.some(p => p.type === partTypes.EMAIL_UPDATE_CONFIRMATION.type); 39426 if (hasConfirmationPart) { 39427 await jumpToPart(partTypes.EMAIL_UPDATE_CONFIRMATION.type, form, formActions); 39428 } 39429 else { 39430 // Fallback: show OTP screen for legacy forms without confirmation part 39431 await jumpToPart(partTypes.EMAIL_UPDATE_OTP.type, form, formActions); 39432 } 39433 } 39434 else { 39435 // Password-protected flow - show OTP code input screen 39436 await jumpToPart(partTypes.EMAIL_UPDATE_OTP.type, form, formActions); 39437 } 39438 } 39439 }; 39440 const endEmailUpdate = async (form, formState, formActions) => { 39441 const success = await endEmailUpdateFlow(form, formState, formActions); 39442 if (success) { 39443 await reset(form, formState, formActions, true); 39444 } 39445 }; 39446 const startPasswordUpdate = async (form, formState, formActions) => { 39447 const success = await startPasswordUpdateFlow(form, formState, formActions); 39448 if (success) { 39449 await jumpToPart(partTypes.PASSWORD_UPDATE_OTP.type, form, formActions); 39450 } 39451 }; 39452 const endPasswordUpdate = async (form, formState, formActions) => { 39453 const success = await endPasswordUpdateFlow(form, formState, formActions); 39454 if (success) { 39455 await reset(form, formState, formActions, true); 39456 } 39457 }; 39458 const onUpdateAttributes$1 = async (form, formState, formActions) => { 39459 const submitSuccess = await updateUser(form, formState, formActions, partTypes.ATTRIBUTES_UPDATE.type); 39460 if (submitSuccess) { 39461 await reset(form, formState, formActions, true); 39462 } 39463 }; 39464 const goBack$1 = async (form, formState, formActions) => reset(form, formState, formActions, false); 39465 const jumpToUserAttributeUpdate = async (form, _, formActions) => { 39466 await jumpToPart(partTypes.ATTRIBUTES_UPDATE.type, form, formActions); 39467 }; 39468 const reset = async (form, formState, formActions, wait) => { 39469 formActions.updateFormState({ 39470 emailAddress: null, 39471 password: null, 39472 createPassword: null, 39473 passwordIsValid: null, 39474 verificationCode: null, 39475 currentPassword: null, 39476 serverErrors: [], 39477 }); 39478 if (wait) { 39479 await formStartAction$5(form, formState, formActions); 39480 } 39481 else { 39482 void formStartAction$5(form, formState, formActions); 39483 } 39484 await jumpToPart(partTypes.PROFILE_UPDATE.type, form, formActions); 39485 }; 39486 const fetchProfile = async (formActions) => { 39487 try { 39488 const response = await request('blaize/profile', { method: "GET" }, formActions); 39489 const json = await response.json(); 39490 formActions.updateFormState({ 39491 readOnlyAttributeValues: json, 39492 }); 39493 } 39494 catch (err) { 39495 console.error("Unable to load user profile", err); 39496 } 39497 }; 39498 const fetchEmail = async (formActions) => { 39499 try { 39500 const response = await request('blaize/account', { method: "GET" }, formActions); 39501 const email = (await response.json())?.identifiers.email_address; 39502 formActions.updateFormState({ 39503 readOnlyEmail: email 39504 }); 39505 } 39506 catch (err) { 39507 console.error("Unable to load user email", err); 39508 } 39509 }; 39510 const eventHandlers$6 = {
39511 [FormEvent.FORM_START]: formStartAction$5, 39512 [FormEvent.GO_BACK]: goBack$1, 39513 [FormEvent.UPDATE]: jumpToUserAttributeUpdate, 39514 [FormEvent.PART_EMAIL_UPDATE_COMPLETE]: startEmailUpdate, 39515 [FormEvent.VERIFY_EMAIL_UPDATE_OTP]: endEmailUpdate, 39516 [FormEvent.PART_PASSWORD_UPDATE_COMPLETE]: startPasswordUpdate, 39517 [FormEvent.VERIFY_PASSWORD_UPDATE_OTP]: endPasswordUpdate, 39518 [FormEvent.PART_ATTRIBUTES_UPDATE_COMPLETE]: onUpdateAttributes$1, 39519 }; 39520 const canAttemptSectionCompletion$5 = (_, formState) => { 39521 return !formState.elementValidity 39522 .filter((e) => e.partType === formState.currentPart.type && 39523 e.sectionType === formState.currentSection.type && 39524 e.sectionOrder === formState.currentSection.order) 39525 .some((e) => !e.isValid); 39526 }; 39527 const sectionFlow$5 = { 39528 extraElements: [], 39529 eventHandlers: eventHandlers$6, 39530 sectionVisibilities: [], 39531 canAttemptSectionCompletion: canAttemptSectionCompletion$5, 39532 canDismissFormManually: () => false, 39533 formRequiresPrerequisiteLoading: () => false, 39534 }; 39535 39536 const formStartAction$4 = async (form, formState, formActions) => { 39537 const hasDynamicOfferAttached = !!formConfigAs(form).dynamicOffer?.id; 39538 const hasCancelReason = formConfigAs(form).hasCancelReason; 39539 const hasSaveOffer = formConfigAs(form).hasSaveOffer; 39540 // Skip Dynamic Offer fetch if we need to capture cancellation reason first 39541 // This ensures the cancellation reason is available as a user attribute for Dynamic Offer filtering 39542 const shouldFetchDynamicOfferNow = hasDynamicOfferAttached && !(hasSaveOffer && hasCancelReason); 39543 if (shouldFetchDynamicOfferNow) { 39544 await getDynamicOffer(form, formActions).catch((e) => { console.error('Error loading Dynamic Offer', e); }); 39545 formState = formActions.getFormState(); 39546 } 39547 const existingSubscriptions = formConfigAs(form).hasSaveOffer ? 39548 await loadExistingSubscriptions$1(form, formState, formActions, shouldFetchDynamicOfferNow, false) : await loadExistingSubscriptions(form, formState, formActions, true); 39549 const subscriptionQueryParam = getSubscriptionParam(window.location.href); 39550 if (!subscriptionQueryParam) { 39551 return; 39552 } 39553 const queryParamSubscription = existingSubscriptions.find(subscription => subscription.externalId === subscriptionQueryParam); 39554 if (queryParamSubscription) { 39555 formActions.updateFormState({ 39556 selectedSubscription: queryParamSubscription, 39557 isExternalReferrer: true, 39558 }); 39559 formActions.completeSection(); 39560 } 39561 }; 39562 const cancel = async (form, formActions) => { 39563 const formState = formActions.getFormState(); 39564 try { 39565 const response = await request(`zephr/subscriptions/${formState.selectedSubscription.externalId}`, { 39566 method: 'DELETE', 39567 }, formActions); 39568 if (response.ok) { 39569 if (formState.fireCancelationReasonEvent) { 39570 logDataLayerEvent(form, 'zephr_form_subscription_cancel_reason', { 39571 productId: formState.selectedSubscription.productId, 39572 ...Object.entries(formState.cancelationReasonAttributes).reduce((acc, [key, value]) => ({ ...acc, [`attr_${key}`]: value }), {}) 39573 }); 39574 } 39575 logDataLayerEvent(form, 'zephr_form_subscription_cancel', { 39576 productId: formState.selectedSubscription.productId, 39577 productLabel: formState.selectedSubscription.productLabel, 39578 currency: formState.selectedSubscription.currency, 39579 amount: formState.selectedSubscription.amount, 39580 }); 39581 if (form.parts.some(e => e.type == partTypes.CANCEL_SUCCESS.type)) { 39582 formActions.jumpToPartStart(partTypes.CANCEL_SUCCESS.type); 39583 } 39584 else { 39585 formActions.jumpToPartStart(partTypes.SUCCESS.type); 39586 } 39587 } 39588 else { 39589 formActions.updateFormState({ 39590 serverErrors: [ServerError.UNKNOWN], 39591 }); 39592 logDataLayerEvent(form, 'zephr_form_error', { 39593 error: ServerError[ServerError.UNKNOWN], 39594 }); 39595 } 39596 } 39597 catch (error) { 39598 console.error("Error occurred while cancelling subscription.", error); 39599 formActions.updateFormState({ 39600 serverErrors: [ServerError.UNKNOWN], 39601 }); 39602 logDataLayerEvent(form, 'zephr_form_error', { 39603 error: ServerError[ServerError.UNKNOWN], 39604 }); 39605 } 39606 }; 39607 const onSubscriptionSelectComplete$2 = async (form, formState, formActions) => { 39608 if (formConfigAs(form).hasCancelReason) { 39609 formActions.updateFormState({ 39610 fireCancelationReasonEvent: true, 39611 cancelFlowSubscriptionSelectedId: formState.selectedSubscription.externalId, 39612 });
39613 formActions.jumpToPartStart(partTypes.ATTRIBUTES_UPDATE.type); 39614 } 39615 else if (formState.validChangeFromPlans.length === 0) { 39616 await cancel(form, formActions); 39617 } 39618 else if (formConfigAs(form).hasSaveOffer) { 39619 formActions.updateFormState({ 39620 cancelFlowSubscriptionSelectedId: formState.selectedSubscription.externalId, 39621 }); 39622 formActions.jumpToPartStart(partTypes.PLAN_SELECT.type); 39623 } 39624 else { 39625 await cancel(form, formActions); 39626 } 39627 }; 39628 const onPlanSelectComplete$1 = async (form, formState, formActions) => { 39629 if (formState.confirmCancel) { 39630 await cancel(form, formActions); 39631 } 39632 else { 39633 const state = formActions.getFormState(); 39634 const updatedState = await getProductAddons(form, state, formActions); 39635 void calculatePrices(form, updatedState, formActions); 39636 void calculateChangeSubscriptionProrate(form, updatedState, formActions); 39637 formActions.updateFormState({ 39638 convertCancelSubscriptionToAcceptOffer: true, 39639 }); 39640 formActions.jumpToPartStart(partTypes.PAYMENT.type); 39641 } 39642 }; 39643 const onUpdateAttributes = async (form, formState, formActions) => { 39644 const submitSuccess = await updateUser(form, formState, formActions, partTypes.ATTRIBUTES_UPDATE.type); 39645 if (!submitSuccess) { 39646 return; 39647 } 39648 // Fetch Dynamic Offer now that cancellation reason is available as a user attribute 39649 const hasDynamicOfferAttached = !!formConfigAs(form).dynamicOffer?.id; 39650 const hasSaveOffer = formConfigAs(form).hasSaveOffer; 39651 if (hasDynamicOfferAttached && hasSaveOffer) { 39652 await getDynamicOffer(form, formActions).catch((e) => { console.error('Error loading Dynamic Offer', e); }); 39653 // Filter subscriptions with the newly fetched Dynamic Offer result 39654 const updatedFormState = formActions.getFormState(); 39655 const existingSubscriptions = updatedFormState.existingSubscriptions || []; 39656 if (existingSubscriptions.length > 0) { 39657 filterDynamicOfferChangeFromPlans(existingSubscriptions, updatedFormState, formActions, updatedFormState.requiresPaymentMethodSetup || false); 39658 } 39659 formState = formActions.getFormState(); 39660 } 39661 if (formState.validChangeFromPlans.length === 0) { 39662 await cancel(form, formActions); 39663 } 39664 else if (hasSaveOffer) { 39665 formActions.jumpToPartStart(partTypes.PLAN_SELECT.type); 39666 } 39667 else { 39668 await cancel(form, formActions); 39669 } 39670 }; 39671 const goBack = async (_, __, formActions) => { 39672 formActions.jumpToPartStart(partTypes.SELECT_SUBSCRIPTION.type); 39673 return Promise.resolve(); 39674 }; 39675 const eventHandlers$5 = { 39676 [FormEvent.FORM_START]: formStartAction$4, 39677 [FormEvent.SELECT_SUBSCRIPTION_COMPLETE]: onSubscriptionSelectComplete$2, 39678 [FormEvent.GO_BACK]: goBack, 39679 [FormEvent.PART_PLAN_SELECT_COMPLETE]: onPlanSelectComplete$1, 39680 [FormEvent.PART_PAYMENT_COMPLETE]: pay, 39681 [FormEvent.PART_ATTRIBUTES_UPDATE_COMPLETE]: onUpdateAttributes, 39682 }; 39683 const extraElements = [ 39684 { 39685 type: elementTypes.PAYMENT_PRE_LOADER, 39686 order: -1, 39687 }, 39688 ]; 39689 const cancelSubscriptionSectionFlow = { 39690 extraElements, 39691 eventHandlers: eventHandlers$5, 39692 sectionVisibilities: [], 39693 canAttemptSectionCompletion: () => true, 39694 canDismissFormManually: () => false, 39695 formRequiresPrerequisiteLoading: () => false, 39696 }; 39697 39698 const formStartAction$3 = async (form, formState, formActions) => { 39699 const existingSubscriptions = await loadExistingSubscriptions(form, formState, formActions, true); 39700 const subscriptionQueryParam = getSubscriptionParam(window.location.href); 39701 if (!subscriptionQueryParam) { 39702 return; 39703 } 39704 const queryParamSubscription = existingSubscriptions.find(subscription => subscription.externalId === subscriptionQueryParam); 39705 if (queryParamSubscription) { 39706 formActions.updateFormState({ 39707 selectedSubscription: queryParamSubscription, 39708 isExternalReferrer: true, 39709 }); 39710 formActions.completeSection(); 39711 } 39712 }; 39713 const onSubscriptionSelectComplete$1 = (form, formState, formActions) => { 39714 formActions.updateFormState({ 39715 suspendResumeFlowSubscriptionSelectedId: formState.selectedSubscription.externalId, 39716 });
39717 formActions.jumpToPartStart(partTypes.SUSPEND_RESUME_SUBSCRIPTION.type); 39718 }; 39719 const suspendResumeSubscriptionComplete = async (form, formState, formActions) => { 39720 try { 39721 const response = await request(`zephr/subscriptions/${formState.selectedSubscription.externalId}/manage`, { 39722 method: 'POST', 39723 bodyObject: { 39724 vendor_fields: { 39725 order: JSON.stringify({ 39726 subscription: { 39727 orderActions: [ 39728 { 39729 type: 'Suspend', 39730 suspend: { 39731 suspendPolicy: 'SpecificDate', 39732 suspendSpecificDate: formState.suspendResumeSubscription.suspensionDate, 39733 } 39734 }, 39735 { 39736 type: 'Resume', 39737 resume: { 39738 resumePolicy: 'SpecificDate', 39739 resumeSpecificDate: formState.suspendResumeSubscription.resumeDate, 39740 extendsTerm: true, 39741 } 39742 } 39743 ] 39744 } 39745 }) 39746 } 39747 } 39748 }, formActions); 39749 if (response.ok) { 39750 logDataLayerEvent(form, 'zephr_form_subscription_suspend', { 39751 productId: formState.selectedSubscription.productId, 39752 productLabel: formState.selectedSubscription.productLabel, 39753 currency: formState.selectedSubscription.currency, 39754 amount: formState.selectedSubscription.amount, 39755 }); 39756 formActions.jumpToPartStart(partTypes.SUCCESS.type); 39757 } 39758 else { 39759 formActions.updateFormState({ 39760 serverErrors: [ServerError.UNKNOWN], 39761 }); 39762 logDataLayerEvent(form, 'zephr_form_error', { 39763 error: ServerError[ServerError.UNKNOWN], 39764 }); 39765 } 39766 } 39767 catch (error) { 39768 console.error("Error occurred while suspending subscription.", error); 39769 formActions.updateFormState({ 39770 serverErrors: [ServerError.UNKNOWN], 39771 }); 39772 logDataLayerEvent(form, 'zephr_form_error', { 39773 error: ServerError[ServerError.UNKNOWN], 39774 }); 39775 } 39776 }; 39777 const eventHandlers$4 = { 39778 [FormEvent.FORM_START]: formStartAction$3, 39779 [FormEvent.SELECT_SUBSCRIPTION_COMPLETE]: onSubscriptionSelectComplete$1, 39780 [FormEvent.SUSPEND_RESUME_SUBSCRIPTION_COMPLETE]: suspendResumeSubscriptionComplete, 39781 }; 39782 const sectionVisibilities$4 = []; 39783 const canAttemptSectionCompletion$4 = (_, formState) => { 39784 return !formState.elementValidity 39785 .filter((e) => e.partType === formState.currentPart.type && 39786 e.sectionType === formState.currentSection.type && 39787 e.sectionOrder === formState.currentSection.order) 39788 .some((e) => !e.isValid); 39789 }; 39790 const sectionFlow$4 = { 39791 extraElements: [], 39792 eventHandlers: eventHandlers$4, 39793 sectionVisibilities: sectionVisibilities$4, 39794 canAttemptSectionCompletion: canAttemptSectionCompletion$4, 39795 canDismissFormManually: () => false, 39796 formRequiresPrerequisiteLoading: () => false, 39797 }; 39798 39799 const formStartAction$2 = async (form, formState, formActions) => { 39800 await loadDeviceSessions(form, formState, formActions); 39801 }; 39802 const eventHandlers$3 = { 39803 [FormEvent.FORM_START]: formStartAction$2, 39804 }; 39805 const sectionVisibilities$3 = []; 39806 const canAttemptSectionCompletion$3 = (_, formState) => { 39807 return !formState.elementValidity 39808 .filter((e) => e.partType === formState.currentPart.type && 39809 e.sectionType === formState.currentSection.type && 39810 e.sectionOrder === formState.currentSection.order) 39811 .some((e) => !e.isValid); 39812 }; 39813 const sectionFlow$3 = { 39814 extraElements: [], 39815 eventHandlers: eventHandlers$3, 39816 sectionVisibilities: sectionVisibilities$3, 39817 canAttemptSectionCompletion: canAttemptSectionCompletion$3, 39818 canDismissFormManually: () => false, 39819 formRequiresPrerequisiteLoading: () => false, 39820 }; 39821 39822 /** 39823 * Map of possible movements through the form sections for gift subscription forms. 39824 */ 39825 // Handle the completion of the recipient details section 39826 const onGiftRecipientComplete = async (form, formState, formActions) => { 39827 // Check if user is logged in using existing session state 39828 if (formState.loginRegistrationComplete) { 39829 // If logged in, jump directly to payment section 39830 await jumpToPart(partTypes.PAYMENT.type, form, formActions); 39831 } 39832 else { 39833 // If not logged in, continue with normal flow to account verification
39834 await jumpToSection(sectionTypes.EMAIL.type, form, formActions); 39835 } 39836 }; 39837 // Modified pay service for gift subscription 39838 const payWithGiftInfo = async (form, formState, formActions) => { 39839 try { 39840 // Add gift recipient info to the payment metadata 39841 const giftRecipient = formState.giftRecipient; 39842 if (!giftRecipient) { 39843 throw new Error("Gift recipient information is missing"); 39844 } 39845 // Call the standard payment flow - the gift-specific logic is handled in zuoraService.ts 39846 // which will make the actual API call to create the gift subscription 39847 return await pay(form, formState, formActions); 39848 } 39849 catch (error) { 39850 console.error("Error in gift subscription payment:", error); 39851 // Use the language pack for error message 39852 const errorMessage = resolveLanguagePackKeyTyped(form, 'forms.errors.unknown-payment-error', "Payment failed"); 39853 // Display the error message 39854 formActions.updateFormState({ 39855 dynamicServerErrorMessage: errorMessage 39856 }); 39857 throw error; 39858 } 39859 }; 39860 // Customize the payment flow's PART_PLAN_SELECT_COMPLETE handler to add our gift recipient step 39861 const onPlanSelectComplete = async (form, formState, formActions) => { 39862 // Check gift form mode FIRST, before calling payment flow handler 39863 if (formState.isGiftForm) { 39864 // If gift mode is enabled, check if recipient details are valid before jumping 39865 const recipientDetailsElementTypes = [ 39866 'recipient_name', 39867 'recipient_email', 39868 'recipient_address', 39869 'recipient_message' 39870 ]; 39871 // Check if all recipient details elements are valid 39872 const recipientDetailsValid = recipientDetailsElementTypes.every(elementType => { 39873 const elementValidity = formState.elementValidity.find(e => e.elementType === elementType && 39874 e.sectionType === 'recipient_details'); 39875 return elementValidity ? elementValidity.isValid : false; 39876 }); 39877 // Calculate prices first (from payment form flow) 39878 await sectionFlow$9.eventHandlers[FormEvent.PART_PLAN_SELECT_COMPLETE](form, formState, formActions); 39879 // Then navigate to recipient details if they are not valid 39880 if (!recipientDetailsValid) { 39881 await jumpToSection('recipient_details', form, formActions); 39882 } 39883 // If recipient details are valid, the payment handler already navigated correctly 39884 } 39885 else { 39886 // If gift mode is disabled, just run the standard payment flow 39887 await sectionFlow$9.eventHandlers[FormEvent.PART_PLAN_SELECT_COMPLETE](form, formState, formActions); 39888 } 39889 }; 39890 // Starting with the payment form handlers, override only what we need 39891 const eventHandlers$2 = { 39892 ...sectionFlow$9.eventHandlers, 39893 [FormEvent.FORM_START]: async (form, formState, formActions) => { 39894 // Execute the standard payment form start handler 39895 await sectionFlow$9.eventHandlers[FormEvent.FORM_START](form, formState, formActions); 39896 // Check if the form has any gift toggle elements 39897 const hasGiftToggleElements = form.parts 39898 .flatMap(part => part.sections) 39899 .flatMap(section => section.elements) 39900 .some(element => element.type === elementTypes.GIFT_TOGGLE); 39901 // Initialize the gift form state based on whether gift toggle elements are present 39902 // If no gift toggle elements are found, assume this is a dedicated gift form (isGiftForm = true) 39903 // If gift toggle elements are present, default to regular subscription mode (isGiftForm = false) 39904 formActions.updateFormState({ 39905 isGiftForm: !hasGiftToggleElements, // true if no toggles (dedicated gift form), false if toggles exist 39906 giftRecipient: { 39907 firstName: '', 39908 lastName: '', 39909 email: '', 39910 recipientAddress: { 39911 addressLine1: '', 39912 addressLine2: '', 39913 city: '', 39914 state: '', 39915 country: '', 39916 postalCode: '' 39917 }, 39918 customMessage: '', 39919 futureDeliveryEnabled: false, 39920 futureDeliveryDate: '' 39921 } 39922 }); 39923 }, 39924 // Override plan select to redirect to gift recipient conditionally 39925 [FormEvent.PART_PLAN_SELECT_COMPLETE]: onPlanSelectComplete, 39926 // Add gift recipient handler 39927 [FormEvent.PART_GIFT_RECIPIENT_COMPLETE]: onGiftRecipientComplete, 39928 // Override payment complete to include gift logic 39929 [FormEvent.PART_PAYMENT_COMPLETE]: payWithGiftInfo, 39930 }; 39931 // Add our new section visibility for recipient details 39932 const sectionVisibilities$2 = [ 39933 ...sectionFlow$9.sectionVisibilities, 39934 { 39935 type: sectionTypes.RECIPIENT_DETAILS.type, 39936 isDisplayedInProgressBar: true, 39937 isVisible: (form, formState) => { 39938 // Only show recipient details section if gift form mode is enabled 39939 return formState.isGiftForm === true; 39940 } 39941 } 39942 ]; 39943 const canAttemptSectionCompletion$2 = (form, formState) => { 39944 return !formState.elementValidity 39945 .filter((e) => e.partType === formState.currentPart.type && 39946 e.sectionType === formState.currentSection.type && 39947 e.sectionOrder === formState.currentSection.order) 39948 .some((e) => !e.isValid); 39949 }; 39950 // Inherit other properties from payment flow 39951 const sectionFlow$2 = { 39952 extraElements: sectionFlow$9.extraElements, 39953 sectionVisibilities: sectionVisibilities$2, 39954 eventHandlers: eventHandlers$2, 39955 canAttemptSectionCompletion: canAttemptSectionCompletion$2, 39956 canDismissFormManually: sectionFlow$9.canDismissFormManually, 39957 formRequiresPrerequisiteLoading: sectionFlow$9.formRequiresPrerequisiteLoading, 39958 canPartiallyRegister: true 39959 }; 39960 39961 const validateGiftCode = async (form, formState, formActions) => { 39962 const giftCode = formState.giftCode; 39963 try {
39964 // First check locally if gift code is valid length 39965 if (!giftCode || giftCode.length !== 16) { 39966 formActions.updateFormState({ 39967 giftCodeError: resolveLanguagePackKeyTyped(form, 'forms.errors.gift-code-invalid-length', 'Gift code must be 16 characters long') 39968 }); 39969 return false; 39970 } 39971 formActions.incrementRequestCount(); 39972 const response = await request('zephr/public/gifts/v1/redeem', { 39973 method: 'POST', 39974 bodyObject: { 39975 giftCode: giftCode, 39976 }, 39977 }, formActions); 39978 // Log event for gift redemption attempt 39979 logDataLayerEvent(form, 'zephr_form_gift_redeem', { 39980 success: response.ok, 39981 }); 39982 if (!response.ok) { 39983 formActions.updateFormState({ 39984 serverErrors: [ServerError.GIFT_CODE_INVALID], 39985 giftCodeError: resolveLanguagePackKeyTyped(form, 'forms.errors.gift-code-invalid', 'The gift code you entered is invalid'), 39986 }); 39987 formActions.decrementRequestCount(); 39988 return false; 39989 } 39990 formActions.decrementRequestCount(); 39991 await jumpToSection(sectionTypes.GIFT_REDEEMED.type, form, formActions); 39992 return true; 39993 } 39994 catch (error) { 39995 formActions.updateFormState({ 39996 serverErrors: [ServerError.GIFT_CODE_SERVER_ERROR], 39997 giftCodeError: resolveLanguagePackKeyTyped(form, 'forms.errors.gift-code-server-error', 'An error occurred processing your gift code'), 39998 }); 39999 formActions.decrementRequestCount(); 40000 return false; 40001 } 40002 }; 40003 40004 const GIFT_REDEMPTION_PART = "gift_redemption"; 40005 const onGiftRedemptionComplete = async (form, formState, formActions) => { 40006 await validateGiftCode(form, formState, formActions); 40007 }; 40008 const formStartAction$1 = async (form, formState, formActions) => { 40009 // If user session is already set, we don't need to check again 40010 if (formState.userSession) { 40011 // Skip registration and go straight to gift redemption if user is logged in 40012 const giftRedemptionPart = form.parts.find(part => part.type === "gift_redemption"); 40013 if (giftRedemptionPart) { 40014 formActions.updateFormState({ 40015 currentPart: giftRedemptionPart, 40016 currentSection: giftRedemptionPart.sections[0], 40017 userSession: true, 40018 loginRegistrationComplete: true 40019 }); 40020 } 40021 return; 40022 } 40023 // Otherwise check for user session 40024 const userSession = await checkForRegisteredUser(formActions); 40025 if (userSession) { 40026 // Skip registration and go straight to gift redemption if user is logged in 40027 const giftRedemptionPart = form.parts.find(part => part.type === "gift_redemption"); 40028 if (giftRedemptionPart) { 40029 formActions.updateFormState({ 40030 currentPart: giftRedemptionPart, 40031 currentSection: giftRedemptionPart.sections[0], 40032 userSession: true, 40033 loginRegistrationComplete: true 40034 }); 40035 } 40036 } 40037 }; 40038 const onLoginRegisterComplete = async (form, formState, formActions) => { 40039 // Instead of reloading page or showing success, go straight to gift redemption 40040 await jumpToPart(GIFT_REDEMPTION_PART, form, formActions); 40041 return Promise.resolve(); 40042 }; 40043 const canAttemptSectionCompletion$1 = (form, formState) => { 40044 // Check if we're in the gift redemption section and enforce validation 40045 if (formState.currentSection.type === sectionTypes.GIFT_REDEMPTION.type) { 40046 const giftCodeElement = formState.elementValidity.find(e => e.elementType === elementTypes.GIFT_CODE && 40047 e.sectionType === formState.currentSection.type); 40048 if (giftCodeElement && !giftCodeElement.isValid) { 40049 return false; 40050 } 40051 if (formState.giftCode?.length !== 16) { 40052 return false; 40053 } 40054 } 40055 // For other sections, use the default registration flow validation 40056 return sectionFlow$8.canAttemptSectionCompletion(form, formState); 40057 }; 40058 const eventHandlers$1 = { 40059 ...sectionFlow$8.eventHandlers,
40060 [FormEvent.FORM_START]: formStartAction$1, 40061 [FormEvent.GIFT_REDEMPTION_COMPLETE]: onGiftRedemptionComplete, 40062 [FormEvent.LOGIN_REGISTRATION_COMPLETE]: onLoginRegisterComplete, // Override the registration flow handler 40063 }; 40064 // Add gift redemption specific section visibilities while inheriting registration ones 40065 const sectionVisibilities$1 = [ 40066 { 40067 type: sectionTypes.EMAIL.type, 40068 isDisplayedInProgressBar: true, 40069 isVisible: (form, formState) => !formState.userSession 40070 }, 40071 { 40072 type: sectionTypes.LOGIN_PASSWORD.type, 40073 isDisplayedInProgressBar: true, 40074 isVisible: (form, formState) => !formState.userSession && 40075 formConfigAs(form).usePassword && 40076 formState.userExists && 40077 !formState.socialSignin 40078 }, 40079 { 40080 type: sectionTypes.PASSWORD_SETUP.type, 40081 isDisplayedInProgressBar: true, 40082 isVisible: (form, formState) => !formState.userSession && 40083 formConfigAs(form).usePassword && 40084 !formState.userExists && 40085 !formState.socialSignin 40086 }, 40087 { 40088 type: sectionTypes.PASSWORD_RESET.type, 40089 isDisplayedInProgressBar: false, 40090 isVisible: (form, formState) => !formState.userSession && 40091 formConfigAs(form).usePassword && 40092 formState.forgotPassword 40093 }, 40094 { 40095 type: sectionTypes.FORGOT_PASSWORD.type, 40096 isDisplayedInProgressBar: false, 40097 isVisible: (form, formState) => !formState.userSession && 40098 formConfigAs(form).usePassword && 40099 formState.forgotPassword 40100 }, 40101 { 40102 type: sectionTypes.GIFT_REDEMPTION.type, 40103 isDisplayedInProgressBar: true, 40104 isVisible: (form, formState) => { 40105 // Show after registration is complete or if user is logged in 40106 return formState.loginRegistrationComplete || formState.userSession; 40107 } 40108 }, 40109 { 40110 type: sectionTypes.GIFT_REDEEMED.type, 40111 isDisplayedInProgressBar: false, 40112 isVisible: () => true 40113 } 40114 ]; 40115 const sectionFlow$1 = { 40116 ...sectionFlow$8, 40117 eventHandlers: eventHandlers$1, 40118 sectionVisibilities: sectionVisibilities$1, 40119 canAttemptSectionCompletion: canAttemptSectionCompletion$1, 40120 canDismissFormManually: () => false, 40121 formRequiresPrerequisiteLoading: () => false, 40122 canPartiallyRegister: true 40123 }; 40124 40125 const formStartAction = async (form, formState, formActions) => { 40126 const existingSubscriptions = await loadExistingSubscriptions(form, formState, formActions, true); 40127 const subscriptionQueryParam = getSubscriptionParam(window.location.href); 40128 if (!subscriptionQueryParam) { 40129 return; 40130 } 40131 const queryParamSubscription = existingSubscriptions.find(subscription => subscription.externalId === subscriptionQueryParam); 40132 if (queryParamSubscription) { 40133 formActions.updateFormState({ 40134 selectedSubscription: queryParamSubscription, 40135 isExternalReferrer: true, 40136 }); 40137 formActions.completeSection(); 40138 } 40139 }; 40140 const onSubscriptionSelectComplete = (form, formState, formActions) => { 40141 formActions.jumpToPartStart(partTypes.BILL_TO_CONTACT.type); 40142 }; 40143 const onBillToContactComplete = async (form, formState, formActions) => { 40144 try { 40145 const response = await request(`zephr/accounts/${formState.selectedSubscription.accountId}/update`, { 40146 method: 'PATCH', 40147 bodyObject: { 40148 vendor_fields: { 40149 account: JSON.stringify({ 40150 billToContact: formState.billToContact 40151 }) 40152 } 40153 } 40154 }, formActions); 40155 if (response.ok) { 40156 logDataLayerEvent(form, 'zephr_form_bill_to_contact_change', { 40157 accountId: formState.selectedSubscription.accountId, 40158 billToContact: formState.billToContact 40159 }); 40160 formActions.jumpToPartStart(partTypes.SUCCESS.type); 40161 } 40162 else { 40163 formActions.updateFormState({ 40164 serverErrors: [ServerError.UNKNOWN], 40165 }); 40166 logDataLayerEvent(form, 'zephr_form_error', { 40167 error: ServerError[ServerError.UNKNOWN], 40168 }); 40169 } 40170 } 40171 catch (error) { 40172 console.error("Error occurred while updating bill to contact address.", error); 40173 formActions.updateFormState({ 40174 serverErrors: [ServerError.UNKNOWN], 40175 }); 40176 logDataLayerEvent(form, 'zephr_form_error', { 40177 error: ServerError[ServerError.UNKNOWN], 40178 }); 40179 } 40180 }; 40181 const eventHandlers = {
40182 [FormEvent.FORM_START]: formStartAction, 40183 [FormEvent.SELECT_SUBSCRIPTION_COMPLETE]: onSubscriptionSelectComplete, 40184 [FormEvent.BILL_TO_CONTACT_COMPLETE]: onBillToContactComplete, 40185 }; 40186 const sectionVisibilities = []; 40187 const canAttemptSectionCompletion = (_, formState) => { 40188 return !formState.elementValidity 40189 .filter((e) => e.partType === formState.currentPart.type && 40190 e.sectionType === formState.currentSection.type && 40191 e.sectionOrder === formState.currentSection.order) 40192 .some((e) => !e.isValid); 40193 }; 40194 const sectionFlow = { 40195 extraElements: [], 40196 eventHandlers, 40197 sectionVisibilities, 40198 canAttemptSectionCompletion, 40199 canDismissFormManually: () => false, 40200 formRequiresPrerequisiteLoading: () => false, 40201 }; 40202 40203 const sectionFlows = { 40204 [FormType.PAYMENT]: sectionFlow$9, 40205 [FormType.CHANGE_SUBSCRIPTION]: sectionFlow$9, 40206 [FormType.REGISTRATION]: sectionFlow$8, 40207 [FormType.CONTACT]: sectionFlow$7, 40208 [FormType.DATA_CAPTURE]: sectionFlow$6, 40209 [FormType.COMPLETE_REGISTRATION]: sectionFlow$6, 40210 [FormType.UPDATE_PROFILE]: sectionFlow$5, 40211 [FormType.CANCEL_SUBSCRIPTION]: cancelSubscriptionSectionFlow, 40212 [FormType.LIST_SUBSCRIPTIONS]: listSubscriptionsSectionFlow, 40213 [FormType.LIST_GIFT_SUBSCRIPTIONS_SENT]: listSubscriptionsSectionFlow, 40214 [FormType.DEVICES]: sectionFlow$3, 40215 [FormType.GIFT_SUBSCRIPTION]: sectionFlow$2, 40216 [FormType.GIFT_REDEMPTION]: sectionFlow$1, 40217 [FormType.SUSPEND_RESUME_SUBSCRIPTION]: sectionFlow$4, 40218 [FormType.BILL_TO_CONTACT]: sectionFlow, 40219 [FormType.EMPTY]: { 40220 extraElements: [], 40221 sectionVisibilities: [], 40222 eventHandlers: {}, 40223 canAttemptSectionCompletion: () => true, 40224 canDismissFormManually: () => false, 40225 formRequiresPrerequisiteLoading: () => false, 40226 } 40227 }; 40228 const sectionFlowFor = (formType) => { 40229 const flow = sectionFlows[formType]; 40230 if (!flow) { 40231 throw `No flow for form type ${formType}`; 40232 } 40233 return flow; 40234 }; 40235 40236 const baselineCssVariablesTimestamp = Date.parse("2024-04-19T00:00:00Z"); 40237 const baselineCssVariables = { 40238 "--zf-container-color": "unset", 40239 "--zf-container-bgColor": "#fff", 40240 "--zf-container-borderRadius": "0", 40241 "--zf-input-bgColor": "#fff", 40242 "--zf-payment-options-border": "1px solid #000", 40243 "--zf-payment-options-color": "#000", 40244 "--zf-payment-options-bgColor": "#fff", 40245 "--zf-payment-summary-border": "1px solid #000", 40246 "--zf-payment-summary-borderRadius": "0", 40247 "--zf-payment-summary-color": "unset", 40248 "--zf-payment-summary-bgColor": "transparent", 40249 }; 40250 const appendCssVariables = (cssVariablesStyle, additionalCssVariables) => { 40251 const additionalCssVariablesStyle = Object.entries(additionalCssVariables) 40252 .map(([key, value]) => `${key}: ${value}`) 40253 .join(';\n'); 40254 return `${cssVariablesStyle};\n${additionalCssVariablesStyle}`; 40255 }; 40256 const addBackwardsCompatibilityCssVariables = (cssVariablesStyle, formConfigTimestamp) => (formConfigTimestamp || 0) < baselineCssVariablesTimestamp 40257 ? appendCssVariables(cssVariablesStyle, baselineCssVariables) 40258 : cssVariablesStyle; 40259 40260 /* src/FormApp.svelte generated by Svelte v4.2.12 */ 40261 40262 function create_fragment(ctx) { 40263 let div; 40264 let formroot; 40265 let div_class_value; 40266 let current; 40267 40268 formroot = new FormRoot({ 40269 props: { 40270 formConfiguration: /*formConfiguration*/ ctx[2] 40271 } 40272 }); 40273 40274 return { 40275 c() { 40276 div = element("div"); 40277 create_component(formroot.$$.fragment); 40278 attr(div, "id", /*formConfiguration*/ ctx[2].formId); 40279 attr(div, "class", div_class_value = "" + (null_to_empty(`zephr-form ${formTypeClass(/
40279*formType*/ ctx[0])}`) + " svelte-789zog")); 40280 attr(div, "style", /*cssVariables*/ ctx[1]); 40281 }, 40282 m(target, anchor) { 40283 insert(target, div, anchor); 40284 mount_component(formroot, div, null); 40285 current = true; 40286 }, 40287 p(ctx, [dirty]) { 40288 if (!current || dirty & /*formType*/ 1 && div_class_value !== (div_class_value = "" + (null_to_empty(`zephr-form ${formTypeClass(/*formType*/ ctx[0])}`) + " svelte-789zog"))) { 40289 attr(div, "class", div_class_value); 40290 } 40291 }, 40292 i(local) { 40293 if (current) return; 40294 transition_in(formroot.$$.fragment, local); 40295 current = true; 40296 }, 40297 o(local) { 40298 transition_out(formroot.$$.fragment, local); 40299 current = false; 40300 }, 40301 d(detaching) { 40302 if (detaching) { 40303 detach(div); 40304 } 40305 40306 destroy_component(formroot); 40307 } 40308 }; 40309 } 40310 40311 function instance($$self, $$props, $$invalidate) { 40312 const defaultEnvironment = { 40313 apiUrlBase: "", 40314 onStateChanged: () => { 40315 40316 }, 40317 debugLogging: false, 40318 reduceDelays: false, 40319 previewMode: false 40320 }; 40321 40322 let { formType } = $$props; 40323 let { formConfig } = $$props; 40324 let { formTypeConfig } = $$props; 40325 let { organisationConfig } = $$props; 40326 let { environment = {} } = $$props; 40327 40328 const mergedEnvironment = { 40329 ...defaultEnvironment, 40330 ...environment, 40331 ...(formConfig?._spikeApiUrl) 40332 ? { apiUrlBase: formConfig._spikeApiUrl } 40333 : {} 40334 }; 40335 40336 // Styles 40337 const styleGuideObj = JSON.parse(organisationConfig.siteStyles ?? "{}"); 40338 40339 const cssVariables = addBackwardsCompatibilityCssVariables(convertSiteStylesToCssVariables(styleGuideObj), formConfig.timestamp); 40340 40341 // Section flow 40342 const sectionFlow = sectionFlowFor(formType); 40343 40344 // Language pack resolving 40345 const formConfigResolved = resolveLanguagePackKeys(formConfig.languagePack, formConfig); 40346 40347 const typeConfigResolved = resolveLanguagePackKeys(formConfig.languagePack, formTypeConfig); 40348 const orgConfigResolved = resolveLanguagePackKeys(formConfig.languagePack, organisationConfig); 40349 const uniqueKey = randomId(); 40350 const isPaymentForm = formType === FormType.PAYMENT; 40351 40352 const formConfiguration = { 40353 environment: mergedEnvironment, 40354 formType, 40355 ...formConfigResolved, 40356 organisationConfiguration: orgConfigResolved, 40357 typeConfiguration: typeConfigResolved, 40358 sectionFlow, 40359 uniqueKey, 40360 formId: isPaymentForm 40361 ? "zephr-payment-form-root" 40362 : `zephr-form-root-${uniqueKey}` 40363 }; 40364 40365 $$self.$$set = $$props => {
40366 if ('formType' in $$props) $$invalidate(0, formType = $$props.formType); 40367 if ('formConfig' in $$props) $$invalidate(3, formConfig = $$props.formConfig); 40368 if ('formTypeConfig' in $$props) $$invalidate(4, formTypeConfig = $$props.formTypeConfig); 40369 if ('organisationConfig' in $$props) $$invalidate(5, organisationConfig = $$props.organisationConfig); 40370 if ('environment' in $$props) $$invalidate(6, environment = $$props.environment); 40371 }; 40372 40373 return [ 40374 formType, 40375 cssVariables, 40376 formConfiguration, 40377 formConfig, 40378 formTypeConfig, 40379 organisationConfig, 40380 environment 40381 ]; 40382 } 40383 40384 class FormApp extends SvelteComponent { 40385 constructor(options) { 40386 super(); 40387 40388 init(this, options, instance, create_fragment, safe_not_equal, { 40389 formType: 0, 40390 formConfig: 3, 40391 formTypeConfig: 4, 40392 organisationConfig: 5, 40393 environment: 6 40394 }); 40395 } 40396 } 40397 40398 // TODO Parameter version translation 40399 // TODO remove circular deps 40400 const currentPropsVersion = "main:1"; 40401 const translateFormProps = (propsVersion, props) => { 40402 if (propsVersion === currentPropsVersion) { 40403 return props; 40404 } 40405 // Knowledge of other prop versions goes here once some backwards-incompatible changes 40406 // have been made to the props schema. 40407 throw `Unknown props version ${propsVersion}`; 40408 }; 40409 const renderForm = (container, props) => { 40410 const target = (typeof container === 'string' || container instanceof String) 40411 ? document.getElementById(container) 40412 : container; 40413 return new FormApp({ target, props }); 40414 }; 40415 // Public API entrypoint 40416 if (window.Zephr == null) { 40417 window.Zephr = {}; 40418 } 40419 window.Zephr.renderForm = renderForm; 40420 window.Zephr.translateFormProps = translateFormProps; 40421 40422})(); 40423//# sourceMappingURL=bundle.js.map 40424</script>
40424 40425 <style></style> 40426 <div id="zephr-form-RWCJsQ" class="zephr-form-container"> 40427 </div> 40428
40428<script data-cmp-ab="2"> 40429 var element = document.currentScript; 40430 while(!(element.classList && element.classList.contains('zephr-form-container'))){ 40431 element = element.previousSibling; 40432 } 40433 window.Zephr.renderForm(element, window.Zephr.translateFormProps("main:1", {"formType":"REGISTRATION","formConfig":{"parts":[{"type":"account-verification","label":"<<<forms.registration.account-verification-section|Account Verification>>>","sections":[{"type":"email","order":0,"elements":[{"type":"text","order":0,"id":"28f060c1-625f-49b7-a7c4-9b5e3d4be04c","config":{"text":"<h2>Login or Register</h2>\n<h3>Enter your email to start</h3>\n<hr />","centerText":true},"hidden":false},{"type":"email_address","id":"23e4942d-9917-4173-a82e-8a6e9888a002","config":{"label":"<<<forms.common.email|Email>>>","placeholder":"[email protected]"},"order":1,"hidden":false},{"type":"account_code","id":"a392308a-cc18-4483-a5bf-eff8429e21ad","config":{"label":"<<<forms.common.account-code.label|Have an account registration code? Enter it here>>>","placeholder":"<<<forms.common.account-code.placeholder|e.g. ACCOUNT001>>>","enabled":false,"hidden":true},"order":2,"hidden":false},{"type":"divider","id":"0f41d61b-4521-4df5-b3b1-34454cbdc3f2","config":{"show":false,"text":"OR USE","showLine":true,"enabled":false,"hidden":true},"order":3,"hidden":false},{"type":"social_sign_in","id":"4680165a-8bf4-4de6-8fd8-5bce8ee4c854","config":{"labelText":"<<<forms.common.social-sign-in-label|Continue with>>>","enabled":false,"allowEmptyLabel":true,"hidden":true},"order":4,"hidden":false},{"type":"button","id":"26da6627-87c1-4219-bdfb-5d313a7c9cec","config":{"text":"<<<forms.common.continue|Continue>>>","isSubmit":false},"order":5,"hidden":false},{"type":"text","order":6,"id":"fb31a359-7ed1-457e-92e4-962c099f8cb4","config":{"text":"<p>You will receive a one time passcode to this email address.</p>","centerText":true}},{"type":"text","order":7,"id":"e0f3ecbb-4f2b-40aa-8d7c-a1063181185b","config":{"text":"<p style=\"font-size: 11px;\">By continuing you agree to our <a href=\"/terms-of-use\">terms and conditions</a> and acknowledge our <a href=\"/privacy-policy\">privacy policy</a>.</p>","centerText":true}}]},{"type":"verification_code_registration","order":1,"label":"OTP Verification","elements":[{"type":"progress_bar","id":"076d7bbb-3769-4f67-b40e-de62c7fa2b8f","config":{"enabled":false,"hidden":true},"order":0,"hidden":false},{"type":"text","order":1,"id":"66d72e1b-8194-43c1-bd50-ab2b3a67f438","config":{"text":"<h2>Register</h2>\n<h3>Enter code to register</h3>\n<hr />","centerText":true},"hidden":false},{"type":"email_address","id":"f982f2ea-31f0-4625-8a9f-fee3a990ba36","config":{"label":"<<<forms.common.email|Email>>>","editText":"<<<forms.common.email-edit|Edit>>>","disabled":true},"order":2,"hidden":false},{"type":"otp_code","id":"5c98f09e-cb7c-4449-b7a0-7e120878f743","config":{"label":"<<<forms.common.otp.label|Code>>>","placeholder":"<<<forms.common.otp.placeholder|e.g. 350271>>>","resendText":"<<<forms.common.otp.resend|Didn't get a code?>>>","message":"<<<forms.common.otp.resent|Resent!>>>"},"order":3,"hidden":false}]},{"type":"password_setup","order":2,"label":"<<<forms.registration.password-setup-section|Password Setup>>>","elements":[{"type":"progress_bar","id":"a73c1373-3496-4df1-a9b4-d59278688cc1","config":{"enabled":false,"hidden":true}},{"type":"text","id":"aed60673-d037-409a-90d1-9e8df17423b5","config":{"text":"<<<forms.registration.password-setup-text|Create an account>>>"}},{"type":"email_address","id":"51fe6911-ae51-48f7-a328-de1eb96c7d36","config":{"label":"<<<forms.common.email|Email>>>","editText":"<<<forms.common.email-edit|Edit>>>","disabled":true}},{"type":"password","id":"3593ba37-a0a3-4a25-ae73-69c0b3e9d9cf","config":{"password":"<<<forms.common.password|Password>>>","show":"<<<forms.common.password-show|Show>>>","hide":"<<<forms.common.password-hide|Hide>>>","passValidatorEnabled":true,"placeholder":"<<<forms.common.password-placeholder|password...>>>","confirm":"<<<forms.common.password-confirm|Confirm Password>>>","confirmPlaceholder":"<<<forms.common.password-confirm-placeholder|confirm password...>>>","passwordsMatchIndicatorEnabled":true,"minLengthValidation":"<<<forms.common.password-validator.length|Must include at least 8 characters>>>","uppercaseValidation":"<<<forms.common.password-validator.uppercase|Must include an uppercase letter>>>","numberValidation":"<<<forms.common.password-validator.number|Must include a number character>>>","symbolValidation":"<<<forms.common.password-validator.symbol|Must include a supported symbol>>>","passwordsMatchText":"<<<forms.common.password-validator.match|Passwords match>>>"}},{"type":"button","id":"f86e29f8-2717-4b64-9bc1-64a6003e99c7","config":{"text":"<<<forms.common.continue|Continue>>>","isSubmit":false}}]},{"type":"verification_code_login","order":3,"label":"Passwordless Login via Login Code","elements":[{"type":"progress_bar","id":"0da34152-a835-4c05-a009-f9510a221678","config":{"enabled":false,"hidden":true},"order":0,"hidden":false},{"type":"text","order":1,"id":"d435c818-a98f-42a2-b5a5-dfac166dafa3","config":{"text":"<h2>Welcome back</h2>\n<h3>Enter code to log in</h3>\n<hr />","centerText":true},"hidden":false},{"type":"email_address","id":"1a371d45-b6db-4b5c-b462-a6893c262451","config":{"label":"<<<forms.common.email|Email>>>","editText":"<<<forms.common.email-edit|Edit>>>","disabled":true},"order":2,"hidden":false},{"type":"otp_code","id":"4678ce12-dd4d-4340-a657-d34f9d38ff87","config":{"label":"<<<forms.common.otp.label|Code>>>","placeholder":"<<<forms.common.otp.placeholder|e.g. 350271>>>","resendText":"<<<forms.common.otp.resend|Didn't get a code?>>>","message":"<<<forms.common.otp.resent|Resent!>>>"},"order":3,"hidden":false}]},{"type":"login_password","order":4,"label":"Login with Password","elements":[{"id":"31ee5cfe-36ea-43fb-91cc-0225b03fcc1c","config":{"enabled":false,"hidden":true},"type":"progress_bar"},{"type":"password","id":"dc705dfc-2f9a-409d-877b-d06fc28f33f0","config":{"password":"<<<forms.common.password|Password>>>","placeholder":"<<<forms.common.password-placeholder|password...>>>","isLogin":true}},{"type":"link","id":"793325e9-fdfd-4b53-92ca-5748ed7ef911","config":{"text":"<<<forms.common.otp.forgot-password|Forgot Password?>>>","message":"<<<forms.common.otp.forgot-password-code-sent|Code sent!>>>"}},{"type":"button","id":"76f11c51-367e-483b-8152-fcc00dcbb333","config":{"isSubmit":false,"text":"<<<forms.common.continue|Continue>>>"}}]},{"type":"passwordless_login_via_link","order":5,"label":"Passwordless Login","elements":[{"type":"text","id":"a25adc84-1477-4f04-8637-16813c93781a","config":{"text":"<<<forms.registration.login-link-text|A login link has been sent to>>>"}},{"type":"email_address","id":"fe5345ad-51ac-4de8-a684-359214a04b74","config":{"label":"<<<forms.common.email|Email>>>","editText":"<<<forms.common.email-edit|Edit>>>","disabled":true}},{"type":"resend_login_link","id":"7233076d-df77-4481-8043-6f4e12cf9
404331a3","config":{"text":"<<<forms.registration.resend-login-link|Didn't get a link?>>>","message":"<<<forms.registration.resend-login-link-resent|Resent!>>>"}}]},{"type":"forgot_password","order":6,"label":"Password Reset Code","elements":[{"type":"text","id":"fae3aabd-64c1-4158-ab95-8405a38ae4d5","config":{"text":"<<<forms.registration.reset-password-text|Reset your password>>>"}},{"type":"text","id":"068950e7-a317-4779-ad95-d2135ff52683","config":{"text":"<<<forms.common.otp.code-sent-to|A message with a code has been sent to>>>"}},{"type":"email_address","id":"df8d043b-ebab-4a45-bea1-1f32ddf83813","config":{"label":"<<<forms.common.email|Email>>>","editText":"<<<forms.common.email-edit|Edit>>>","disabled":true}},{"type":"text","id":"88797ea0-e3fe-43e0-8128-bb108cef36d9","config":{"text":"<<<forms.common.otp.enter-code|Enter the code in the box below.>>>"}},{"type":"otp_code","id":"4d18e49a-d9fe-456b-8283-5cf0b405e0b0","config":{"label":"<<<forms.common.otp.label|Code>>>","placeholder":"<<<forms.common.otp.placeholder|e.g. 350271>>>","resendText":"<<<forms.common.otp.resend|Didn't get a code?>>>","message":"<<<forms.common.otp.resent|Resent!>>>"}},{"type":"divider","id":"5d1cd9a2-502c-47e9-9f16-8695f2dad00a","config":{"text":"<<<forms.common.divider-text|or use>>>","showLine":true,"show":true}},{"type":"button","id":"f1235a31-cbf2-462b-a5f0-cea89f0ca005","config":{"isSubmit":false,"isLogin":true,"text":"<<<forms.registration.login|Login>>>"}}]},{"type":"reset_password","order":7,"label":"Reset Password","elements":[{"type":"email_address","id":"40fdea0a-4115-4eb7-9c71-5038cf82cf1d","config":{"label":"<<<forms.common.email|Email>>>","editText":"<<<forms.common.email-edit|Edit>>>","disabled":true}},{"type":"password","id":"b144c9f4-a085-4ca6-a597-1fddca446f36","config":{"password":"<<<forms.common.password|Password>>>","show":"<<<forms.common.password-show|Show>>>","hide":"<<<forms.common.password-hide|Hide>>>","passValidatorEnabled":true,"placeholder":"<<<forms.common.password-placeholder|password...>>>","confirm":"<<<forms.common.password-confirm|Confirm Password>>>","confirmPlaceholder":"<<<forms.common.password-confirm-placeholder|confirm password...>>>","passwordsMatchIndicatorEnabled":true,"minLengthValidation":"<<<forms.common.password-validator.length|Must include at least 8 characters>>>","uppercaseValidation":"<<<forms.common.password-validator.uppercase|Must include an uppercase letter>>>","numberValidation":"<<<forms.common.password-validator.number|Must include a number character>>>","symbolValidation":"<<<forms.common.password-validator.symbol|Must include a supported symbol>>>","passwordsMatchText":"<<<forms.common.password-validator.match|Passwords match>>>"}},{"type":"button","id":"555843e1-6b8f-4153-b1c3-ad6570c55cf8","config":{"text":"<<<forms.registration.reset|Reset!>>>","isSubmit":false}}]},{"type":"custom_69d7686c-deb1-4d0f-ad81-16f66e1bd423","label":"Create your account","order":8,"elements":[{"type":"progress_bar","order":0,"id":"4b9c4219-9766-413e-a7c9-bc0709f940ff","config":{"enabled":false,"hidden":true},"hidden":false},{"type":"text","order":1,"id":"48502c22-359c-43c5-af19-644b135923bf","config":{"text":"<h2>Create your account</h2>\n<h3>Join over 150K members who use Sifted to stay up to speed on latest developments across Startup Europe</h3>\n<hr />","centerText":true},"hidden":false},{"type":"user_attribute","order":2,"id":"aa413ab8-0c27-4f08-bbb4-2129b4dda733","config":{"slug":"first_name","label":"First name","hasCondition":false},"hidden":false},{"type":"user_attribute","order":3,"id":"a103adde-5608-49e8-9afd-bd2c43968d85","config":{"slug":"last_name","label":"Last name","hasCondition":false,"required":false},"hidden":false}
40433,{"type":"user_attribute","order":4,"id":"f8a22532-e393-4025-b15c-377d4d1a5f47","config":{"slug":"form_role_at_business","label":"Job role","hasCondition":false,"required":false,"placeholder":"Select..."},"hidden":false},{"type":"user_attribute","order":5,"id":"f05e5418-207e-47e1-a5ad-e66e58354190","config":{"slug":"form_company_name","label":"Company name","hasCondition":false},"hidden":false},{"type":"user_attribute","order":6,"id":"9c10b7ae-7897-49d6-8711-e0ab5e01d6f6","config":{"slug":"form_company_type","label":"Company type","hasCondition":false,"required":false,"placeholder":"Select..."},"hidden":false},{"type":"user_attribute","order":7,"id":"c3c3d9bf-3826-4d4b-a36f-650636ffe306","config":{"slug":"form_advisory_firm_type","label":"Advisory Firm Type","hasCondition":false},"hidden":false},{"type":"user_attribute","order":8,"id":"ab227273-a82a-43d5-a022-78ba769cb983","config":{"slug":"form_professional_service_type","label":"Type of Service Provider","hasCondition":false,"placeholder":"Select..."},"hidden":false},{"type":"user_attribute","order":9,"id":"8d921a5b-9c4f-4821-8460-d96161c021e1","config":{"slug":"form_investment_firm_type","label":"Type of Investment Firm","hasCondition":false,"placeholder":"Select..."},"hidden":false},{"type":"user_attribute","order":10,"id":"34edc1a6-abb3-4643-9345-4e8f997014d3","config":{"slug":"form_sector","label":"Sector","hasCondition":false,"placeholder":"Select..."},"hidden":false},{"type":"user_attribute","order":11,"id":"daa0a671-3fcd-4432-b5be-14b84729127b","config":{"slug":"form_country","label":"Country","hasCondition":false,"placeholder":"Select..."},"hidden":false},{"type":"user_attribute","order":12,"id":"e500fd49-f6e3-4fd5-9f00-5786e98881aa","config":{"slug":"agree_to_have_data_stored","label":"I agree to have my data stored and processed by Sifted.","hasCondition":false,"required":false},"hidden":false},{"type":"button","order":13,"id":"9c5dac75-8bf4-49ea-83ea-45d3caeccf56","config":{"isSubmit":false,"text":"Create account"},"hidden":false},{"type":"text","order":14,"id":"f35e521e-6366-4175-9a50-e098e262d2c8","config":{"text":"<p><strong>Your account registration includes access to a limited number of articles each month and the Sifted Daily newsletter. By signing up you agree to our <a href=\"/privacy-policy\" target=\"_blank\" rel=\"noopener noreferrer\">privacy policy</a> and <a href=\"/cookie-policy\" target=\"_blank\" rel=\"noopener noreferrer\">cookie policy</a> and to receive marketing and account-related emails from Sifted, as well as the Sifted Daily newsletter. You can unsubscribe at any time. This site is protected by reCAPTCHA and the Google <a href=\"https://policies.google.com/privacy\" target=\"_blank\" rel=\"noopener noreferrer\">Privacy Policy</a> and <a href=\"https://policies.google.com/terms\" target=\"_blank\" rel=\"noopener noreferrer\">Terms of Service</a> apply.</strong></p>","centerText":true},"hidden":false}]},{"type":"custom_3f2b8209-a157-476f-9587-f559b8721280","label":"Complete your profile","order":9,"elements":[{"type":"text","order":0,"id":"46f0a4e4-6cfa-496a-821a-ba585807bc09","config":{"text":"<h2>Complete your profile</h2>\n<h3>Sign up to Siftedâs specialist newsletters, and hear about our upcoming events</h3>\n<hr />","centerText":true},"hidden":false},{"type":"progress_bar","order":1,"id":"2003ff9e-f9d9-4f45-9fd0-7e177cc5575f","config":{"enabled":false,"hidden":true},"hidden":false},{"type":"text","order":2,"id":"c16fbd73-c333-4ae6-ba9a-106365e54c2e","config":{"text":"<p>Newsletters</p>","centerText":true},"hidden":false},{"type":"text","order":3,"id":"deecb05f-e8f7-476c-8621-4fa10b64f181","config":{"text":"<label class=\"zephr-form-input-label\" for=\"sign-me-up-to-all-newsletters\">\n <div class=\"zephr-form-checkbox-label\">\n <input type=\"checkbox\" id=\"sign-me-up-to-all-newsletters\">Sign me up to all newsletters\n </div>\n</label>","centerText":true},"hidden":false}
40433,{"type":"user_attribute","order":4,"id":"b38a6b74-189c-49ee-9ada-ede7e76e39ee","config":{"slug":"would-like-futureproof-newsletter","label":"","hasCondition":false},"hidden":false},{"type":"user_attribute","order":6,"id":"00249052-5335-4fb5-8fe5-5e3e301a3e29","config":{"slug":"would-like-startup-life-newsletter","label":"","hasCondition":false},"hidden":false},{"type":"user_attribute","order":7,"id":"b0fadebe-167e-4296-9a9e-9b2caea8510b","config":{"slug":"would-like-fintech-newsletter","label":"","hasCondition":false},"hidden":false},{"type":"user_attribute","order":8,"id":"dbc61400-fec7-4684-8434-d532ab147d46","config":{"slug":"would-like-deeptech-newsletter","label":"","hasCondition":false},"hidden":false},{"type":"text","order":9,"id":"799fdb34-2116-454e-bec8-7bbcc2005915","config":{"text":"<p>Event updates</p>","centerText":true},"hidden":false},{"type":"user_attribute","order":10,"id":"2e07bf1d-5dbb-4f60-8ef1-4442eb4cbe27","config":{"slug":"would-like-event-newsletter","label":"Receive invitations, updates, and special offers across all Sifted events, including Sifted Talks, Breakfasts, Networking Drinks and Sifted Summit","hasCondition":false},"hidden":false},{"type":"button","order":11,"id":"6f3f16f2-4716-4a0d-a1d8-89716ef51011","config":{"isSubmit":true,"text":"Continue"},"hidden":false}]}]},{"type":"success","sections":[{"type":"success","order":1,"label":"Successful Registration","elements":[{"type":"text","id":"7ac39017-c217-4a87-9e05-3c9677563be3","config":{"text":"<<<forms.registration.success-message|You have signed up successfully!>>>"}},{"type":"button","id":"cb503d01-3609-4664-bb91-949a0ddc2981","config":{"text":"Continue"}}]},{"type":"email_verified","order":2,"label":"Email Verification","elements":[{"type":"text","id":"f20f8e40-fecd-412e-8c91-3a613235107d","config":{"text":"<p>A link has been sent to you. Please check your Email. (Registration)</p>"},"order":0}]}]}],"timestamp":1789634134090,"id":"U-djY8Uq","outcomeId":"","ruleId":"H-login-register-4","resolvedComponentTemplates":[],"languagePack":{"entries":{"forms.billing.history.date":"Date","forms.billing.history.every":"every","forms.billing.history.period":"Period","forms.billing.history.subtotal":"Subtotal","forms.billing.history.total":"Total","forms.buttons.back-button":"Back","forms.common.account-code.label":"Have an account registration code? Enter it here","forms.common.account-code.placeholder":"e.g. ACCOUNT001","forms.common.additional-section":"Additional Section","forms.common.continue":"Continue","forms.common.current-password":"Current Password","forms.common.divider-text":"or use","forms.common.email":"Email","forms.common.email-edit":"Edit","forms.common.email-placeholder":"Your email address","forms.common.otp.code-sent-to":"A message with a code has been sent to","forms.common.otp.enter-code":"Enter the code in the box below.","forms.common.otp.forgot-password":"Forgot Password?","forms.common.otp.forgot-password-code-sent":"Code sent!","forms.common.otp.label":"Code","forms.common.otp.placeholder":"e.g. 350271","forms.common.otp.resend":"Didn't get a code?","forms.common.otp.resent":"Resent!","forms.common.password":"Password","forms.common.password-confirm":"Confirm Password","forms.common.password-confirm-placeholder":"confirm password...","forms.common.password-hide":"Hide","forms.common.password-placeholder":"password...","forms.common.password-show":"Show","forms.common.password-validator.length":"Must include at least 8 characters","forms.common.password-validator.match":"Passwords match","forms.common.password-validator.number":"Must include a number character","forms.common.password-validator.symbol":"Must include a supported symbol","forms.common.password-validator.uppercase":"Must include an uppercase letter","forms.common.social-sign-in-label":"Continue with","forms.common.submit":"Submit","forms.common.update":"Update","forms.complete-registration-form.default-intro-text":"Set up your password","forms.complete-registration-form.default-success-message":"Thank you for updating your profile.","forms.contact-form.default-intro-text-1":"Stay in touch","forms.contact-form.default-intro-text-2":"Subscribe to our newsletter today","forms.contact-form.default-success-message":"Thank y
40433ou for submitting your contact information.","forms.data-capture-form.default-intro-text":"Tell us more about you!","forms.data-capture-form.default-success-message":"Thank you for updating your profile.","forms.devices.current-device-label":"Current Device","forms.devices.login-time-label":"Login Time","forms.devices.no-session-message":"No Device sessions recorded","forms.devices.sign-out-button":"Sign Out","forms.devices.sign-out-of-other-devices-button":"Sign Out of Other Devices","forms.devices.your-devices-label":"Your Devices","forms.errors.company-account-not-found":"Account not found","forms.errors.contact-creation-disabled":"This operation is not possible at the moment, please try again later","forms.errors.email-domain-blocked":"Please use a different email address, this domain is not supported","forms.errors.email-taken":"This email address is already registered. Please log in to continue","forms.errors.email-verification-required":"Email verification is required","forms.errors.future-delivery-date-invalid":"Please select a valid future date","forms.errors.future-delivery-date-required":"Please select a future delivery date","forms.errors.future-delivery-date-too-early":"Delivery date must be at least 24 hours in the future","forms.errors.invitation-failed-duplicate-email":"An invite has already been created for this email","forms.errors.invitation-failed-invalid-email":"Invalid email address","forms.errors.invitation-failed-limit-reached":"You have reached the sharing limit for this product","forms.errors.invitation-failed-no-product-access":"You do not currently have access to this product","forms.errors.login-failed":"The email address or password you entered is incorrect","forms.errors.no-authenticated-session":"Please login to update your profile","forms.errors.otp-incorrect":"The code you entered is incorrect","forms.errors.otp-or-password-incorrect":"The password or code you entered is incorrect","forms.errors.otp-send-failed":"Unable to send a verification code. Please try again later","forms.errors.password-reset-failed":"Unable to reset your password. Please try again later","forms.errors.password-reset-link-send-failed":"Unable to send a password reset link. Please try again later","forms.errors.promo-code-expired":"Promo code expired","forms.errors.promo-code-invalid":"Invalid promo code","forms.errors.promo-code-invalid-for-payment-option":"Promo code cannot be applied to selected option","forms.errors.session-limit-reached":"You have reached the session limit. Please log out from another device to access this content","forms.errors.too-many-requests":"To gain login access, please contact your administrator","forms.errors.unknown-error":"Something went wrong. Please try again later","forms.errors.unknown-payment-error":"Something went wrong when processing your payment. Please try again later","forms.errors.user-attribute-invalid":"Invalid user attribute","forms.errors.user-not-found":"User not found","forms.gift-subscription.enable-future-delivery-toggle-description":"Schedule this gift subscription to start on a specific date","forms.gift-subscription.enable-future-delivery-toggle-label":"Schedule for future date","forms.gift-subscription.future-delivery-date-description":"Choose when the gift subscription should start","forms.gift-subscription.future-delivery-date-label":"Start date","forms.gift-subscription.future-delivery-date-placeholder":"Select start date","forms.list-subscriptions.billing-history-link":"Billing history","forms.list-subscriptions.billing-history-text":"To see previous invoices visit","forms.list-subscriptions.cancel-subscription-text":"Cancel subscription","forms.list-subscriptions.change-default-payment-method-button":"Change Default Payment Method","forms.list-subscriptions.change-payment-method-button":"Change Payment Method","forms.list-subscriptions.change-payment-success-text":"Payment successfully changed","forms.list-subscriptions.change-subscription-text":"Change subscription","forms.list-subscriptions.custom-fields-section-description":"Update your subscription information below","forms.list-subscriptions.custom-fields-section-title":"Update Subscription Details","forms.list-subscriptions.custom-fields-submit-button-text":"Update Details","forms.list-subscriptions.delivery-address-line-1-label":"Delivery Address Line 1","forms.list-subscriptions.delivery-address-line-1-placeholder":"Enter delivery address line 1","forms.list-subscriptions.delivery-address-line-2-label":"Delivery Address Line 2","forms.list-subscriptions.delivery-address-line-2-placeholder":"Enter delivery address line 2","forms.list-subscriptions.delivery-city-label":"Delivery City","forms.list-subscriptions.delivery-city-placeholder":"Enter delivery city","forms.list-subscriptions.delivery-country-label":"Delivery Country","forms.list-subscriptions.delivery-country-placeholder":"Enter delivery country","forms.list-subscriptions.delivery-information-description":"Manage your delivery address and preferences","forms.list-subscriptions.delivery-information-title":"Delivery Information","forms.list-subscriptions.delivery-postcode-label":"Delivery Postc
40433ode","forms.list-subscriptions.delivery-postcode-placeholder":"Enter delivery postcode","forms.list-subscriptions.next-payment-date":"Next payment date","forms.list-subscriptions.no-subscriptions-message":"You don't have any subscriptions","forms.list-subscriptions.subscription-rate-label":"Subscription rate","forms.list-subscriptions.suspend-resume-subscription-text":"Suspend/Resume subscription","forms.list-subscriptions.view-past-subscriptions-link":"View past subscriptions","forms.payment.account-verification-section":"Account Verification","forms.payment.invitation-button":"Send Invite","forms.payment.invitation-description":"You can invite people by entering their email","forms.payment.invitation-label":"Email Address","forms.payment.invitation-link-sent":"Invite sent!","forms.payment.invitation-title":"Invite people to your sharable plan","forms.payment.login":"Login","forms.payment.login-link":"Login","forms.payment.login-link-message":"Already a registered user?","forms.payment.password-setup-text":"Create an account","forms.payment.payment-button":"Confirm and process payment","forms.payment.payment-option-select-button":"Select Plan","forms.payment.payment-section":"Payment Details","forms.payment.payment-summary-disclaimer":"Today's payment may vary","forms.payment.payment-summary-prorate":"DUE TODAY","forms.payment.payment-summary-tax":"Tax","forms.payment.payment-summary-title":"Subscription","forms.payment.payment-summary-total":"TOTAL","forms.payment.plan-select-section":"Plan Select","forms.payment.promo-code-button":"Verify","forms.payment.promo-code-placeholder":"Promo code","forms.payment.promo-code-text":"Have a promo code?","forms.payment.reset-password-text":"Reset your password","forms.payment.success-button":"Continue Reading","forms.payment.success-message":"Payment processed successfully","forms.registration.account-verification-section":"Account Verification","forms.registration.default-intro-text":"You've reached the limit of free articles","forms.registration.email-verification-required-message":"A link has been sent to you. Please check your Email.","forms.registration.login":"Login","forms.registration.login-link-text":"A login link has been sent to","forms.registration.password-setup-section":"Password Setup","forms.registration.password-setup-text":"Create an account","forms.registration.resend-login-link":"Didn't get a link?","forms.registration.resend-login-link-resent":"Resent!","forms.registration.reset":"Reset!","forms.registration.reset-password-text":"Reset your password","forms.registration.success-button":"Continue Reading","forms.registration.success-message":"You have signed up successfully!","forms.subscription-cancel.back-button":"Back","forms.subscription-cancel.back-cancellation-button":"Back","forms.subscription-cancel.cancel-button":"Cancel Subscription","forms.subscription-cancel.confirm-text":"Are you sure you want to cancel?","forms.subscription-cancel.continue-cancel-button":"Continue Cancellation","forms.subscription-cancel.intro-text":"Select a subscription to cancel","forms.subscription-cancel.offer-text":"<h2>We are sorry to see you go</h2>Here is a special offer just for you.","forms.subscription-cancel.payment-option-select-button":"Accept Offer","forms.subscription-cancel.reason-text":"<h2>We would like to hear your feedback</h2>We'd appreciate it if you could to take a moment to let us know why you are cancelling.","forms.subscription-cancel.success-text":"Your subscription has been cancelled","forms.subscription-select.amount-label":"Amount:","forms.subscription-select.intro-text":"Select a subscription to upgrade","forms.subscription-select.next-billing-date-label":"Next billing date:","forms.subscription-select.no-change-plan-mapping-message":"No upgrade options are available for this subscription","forms.subscription-select.no-subscriptions-message":"No subscriptions available","forms.subscription-select.select-button":"Select","forms.suspend-resume-subscription.back-button":"Back to Home","forms.suspend-resume-subscription.intro-text":"Select a subscription to suspend or resume","forms.suspend-resume-subscription.resume-d
40433ate-label":"Resume date:","forms.suspend-resume-subscription.success-text":"Your subscription has been suspended","forms.suspend-resume-subscription.suspension-date-label":"Suspension date:","forms.update-profile.update-email-title":"<h2>Update Email Address</h2>","forms.update-profile.update-password-title":"<h2>Update Password</h2>","forms.update-profile.your-profile":"Your Profile","forms.update-profile.your-profile-title":"<h2>Your Profile</h2>","hidden.example-key":"Hello world","hidden.form-preview.locale":"en-US","hidden.forms-preview.example-payment-option-description":"Example Payment Option","hidden.forms-preview.example-payment-option-label":"Example Offer","interstitial-page.password-reset.new-password":"New password:","interstitial-page.password-reset.password-mismatch-error":"You did not enter the same password twice","interstitial-page.password-reset.repeat-password":"Repeat password:","interstitial-page.password-reset.reset-button":"Reset","interstitial-page.password-reset.return-home-link":"Go back to the site","interstitial-page.password-reset.success-message":"Your password has been reset successfully!","interstitial-page.password-reset.title":"Change your password","interstitial-page.password-reset.unknown-error":"Something went wrong! Please try again later.","interstitial-page.passwordless-login.title":"Welcome","interstitial-page.update-email.enter-password":"Please enter your current password to complete the email update request.","interstitial-page.update-email.incorrect-password-error":"Incorrect password.","interstitial-page.update-email.password":"Password:","interstitial-page.update-email.return-home-link":"Go back to the site","interstitial-page.update-email.submit-button":"Update","interstitial-page.update-email.title":"Changing your email","interstitial-page.update-email.unknown-error":"Something went wrong! Please try again later.","interstitial-page.update-email-passwordless.message":"Please check the inbox of your new email for further instructions.","interstitial-page.update-email-passwordless.title":"Changing your email","interstitial-page.update-email-passwordless-success.message":"You have successfully changed your email address.","interstitial-page.update-email-passwordless-success.title":"Changing your email","interstitial-page.update-email-success.message":"Your email has been updated successfully!","pages.account-management.account-select-dropdown":"Select account","pages.account-management.delete-link":"Delete","pages.account-management.delete-modal-body":"Are you sure you want to delete this user?","pages.account-management.delete-modal-button":"Yes Delete","pages.account-management.delete-modal-title":"You are about to delete user","pages.account-management.delete-success-modal-body":"has been successfully deleted.","pages.account-management.delete-success-modal-title":"User Deleted","pages.account-management.errors.already-exists":"already exists","pages.account-management.errors.delete-fail":"Failed to delete","pages.account-management.errors.invite-fail":"Could not invite user","pages.account-management.invite-button-text":"Invite a User","pages.account-management.invite-modal-cancel-button":"Cancel","pages.account-management.invite-modal-confirm-button":"Invite User","pages.account-management.invite-modal-email-label":"Email Address","pages.account-management.invite-modal-email-placeholder":"Enter Email Address","pages.account-management.invite-modal-title":"Invite User","pages.account-management.invite-success-modal-body":"An invite has been sent to","pages.account-management.no-users":"No users found","pages.account-management.owner":"Owner","pages.account-management.search-button-text":"Search","pages.account-management.search-placeholder-text":"Search for a user","pages.account-management.success-modal-button":"Close","pages.account-management.title":"Manage Your Users","pages.cancel.back-to-subscriptions":"Back to Subscriptions","pages.cancel.cancel-subscription":"Cancel Subscription","pages.cancel.cancelled":"Cancelled","pages.cancel.continue-subscription":"Continue Subscription","pages.cancel.days-left":"DAYS LEFT:","pages.cancel.plan-frequency":"Frequency","pages.cancel.plan-name":"Name","pages.cancel.plan-next-billing":"Next Billing","pages.cancel.plan-period":"Period","pages.cancel.plan-price":"Price","pages.cancel.plan-type":"Type","pages.cancel.select-plans":"Select the plans you wish to cancel","pages.cancel.status-active":"Active","pages.cancel.status-cancelled":"Cancelled","pages.cancel.status-draft":"Draft","pages.cancel.status-expired":"Expired","pages.cancel.status-pending-acceptance":"Pending Acceptance","pages.cancel.status-pending-activation":"Pending Activation","pages.cancel.status-suspended":"Suspended","pages.cancel.status-unknown":"Unknown","pages.cancel.subscription-ends-on":"Subscription ends on","pages.cancel.subscription-will-end-on":"Your subscription will end on","pages.cancel.success":"You've cancelled your subscription","pages.cancel.until-cancelled":"Until Cancelled","pages.common.collapsible-content-text":"See details","pages.common.confirmation-modal-cancel-button":"Cancel","pages.common.confirmation-modal-confirm-button":"Confirm","pages.common.confirmation-primary-error-message":"Something went wrong!","pages.common.confirmation-secondary-error-message":"Try again later.","pages.common.date-time-format-locale":"en-US","pages.common.input-errors-invalid-email":"Please enter a valid email","pages.common.input-errors-invalid-url":"Please enter a valid URL","pages.common.input-errors-missing-value":"Please enter a value","pages.common.loading":"Loading...","pages.common.no-access-back-link":"Go Back","pages.common.no-access-body":"Sorry, you are not allowed to access this page. Click the button to go back.","pages.common.no-access-title":"No access.","pages.common.password-hide":"Hide","pages.common.password-show":"Show","pages.login-reg.already-registered-sign-in":"Already registered? Sign in","pages.login-reg.cancel":"Cancel","pages.login-reg.complete-registration-button":"Complete Registration","pages.login-reg.continue-with-apple":"Continue with Apple","pages.login-reg.continue-with-facebook":"Continue with Facebook","pages.login-reg.continue-with-google":"Continue with Google","pages.login-reg.continue-with-linkedin":"Continue with Linkedin","pages.login-reg.continue-with-microsoft":"Continue with Microsoft","pages.login-reg.continue-with-open-id-connect":"Continue with Open ID Connect","pages.login-reg.continue-with-twitter":"Continue with X","pages.login-reg.create-account":"Create an account","pages.login-reg.email-me-login-link":"Email me login link","pages.login-reg.email-me-reset-code":"Email me reset code","pages.login-reg.email-placeholder":"Email Address","pages.login-reg.enter-account-reg-code-here":"Enter an account registration code here","pages.login-reg.errors.contact-admin":"Please contact the administrator","pages.login-reg.errors.email-already-taken":"Email already taken","pages.login-reg.errors.email-verification-required":"Email verification is required","pages.login-reg.errors.password-incorrect":"The password you entered is incorrect","pages.login-reg.errors.password-not-strong-enough":"Password is not strong enough","pages.login-reg.errors.seat-capacity":"Your registration request couldn't be completed due to account seat capacity issue.","pages.login-reg.errors.something-went-wrong":"Something went wrong!","pages.login-reg.errors.to-gain-access-contact-admin":"To gain login access, please contact your administrator","pages.login-reg.errors.try-again-later":"Please try again later.","pages.login-reg.errors.user-not-found":"User not found","pages.login-reg.errors.username-already-taken":"Username already taken","pages.login-reg.forgotten-password":"Forgotten Password?","pages.login-reg.logging-in":"Logging in...","pages.login-reg.login-button":"Login","pages.login-reg.login-to-account":"Login to your account","pages.login-reg.or":"Or","pages.login-reg.password-placeholder":"Password","pages.login-reg.password-requirement":"Password must be a minimum of 8 characters and contain uppercase and lowercase, numbers and at least 1 special character.","pages.login-reg.register-button":"Register","pages.login-reg.register-for-account":"Register for an account","pages.login-reg.reset-your-password":"Reset your password","pages.login-reg.wait":"Please wait...","pages.pref-center.devices.current-device":"Current Device","pages.pref-center.devices.error-loading":"There was an error getting the device list","pages.pref-center.devices.sign-in-time":"Login date and time:","pages.pref-center.devices.sign-out":"Sign out","pages.pref-center.devices.sign-out-all":"Sign out of all other devices","pages.pref-center.devices.sign-out-all-success":"All other devices are now signed out","pages.pref-center.devices.sign-out-fail":"Signing out failed","pages.pref-center.devices.sign-out-success":"is now signed out.","pages.pref-center.devices.title":"Your Devices","pages.pref-center.devices.unknown-device":"Unknown","pages.pref-center.email-update-passwordless-message":"A link has been sent to your current email. Please check your inbox.","pages.pref-center.email-update-passwordless-title":"Check Your Inbox","pages.pref-center.general-error":"Something went wrong - please try again later","pages.pref-center.profile.attributes-select-list-placeholder":"Select One","pages.pref-center.profile.attributes-update-save":"Save","pages.pref-center.profile.attributes-update-title":"Your profile","pages.pref-center.profile.email":"Email Address","pages.pref-center.profile.email-update-email-label":"New Email","pages.pref-center.profile.email-update-email-placeholder":"Enter Email","pages.pref-center.profile.email-update-password-label":"Your Password","pages.pref-center.profile.email-update-password-placeholder":"Enter password","pages.pref-center.profile.email-update-save":"Save","pages.pref-center.profile.email-update-step-2-title":"Update Email Address","pages.pref-center.profile.email-update-title":"Update Email Address","pages.pref-center.profile.errors.change-email-error":"Sorry but your email address has not been changed. Please try again.","pages.pref-center.profile.errors.change-password-error":"Sorry but we were unable to reset your password. Please try again.","pages.pref-center.profile.errors.email-already-taken-error":"This email address is already taken.","pages.pref-center.profile.errors.incorrect-code":"Entered code is incorrect","pages.pref-center.profile.errors.incorrect-password":"The password you entered is incorrect","pages.pref-center.profile.errors.password-validation-error":"Password is not strong enough","pages.pref-center.profile.errors.unsuccessful":"Unsuccessful","pages.pref-center.profile.errors.update-profile-error":"Sorry but we were unable to update your profile. Please try again.","pages.pref-center.profile.password":"Password","pages.pref-center.profile.password-update-current-password-label":"Current Password","pages.pref-center.profile.password-update-current-password-placeholder":"Enter your password","pages.pref-center.profile.password-update-new-password-label":"New Password","pages.pref-center.profile.password-update-new-password-placeholder":"Enter a password","pages.pref-center.profile.password-update-save":"Continue","pages.pref-center.profile.password-update-step-2-title":"Reset your password","pages.pref-center.profile.password-update-title":"Update Password","pages.pref-center.profile.title":"Your Profile","pages.pref-center.profile.update":"Update","pages.pref-center.profile.update-email-successful":"Your email address has been changed.","pages.pref-center.profile.update-password-successful":"Your password has been reset.","pages.pref-center.profile.update-profile-successful":"Your profile has been updated.","pages.pref-center.profile.update-return-text":"Return to Personal Information","pages.pref-center.profile.update-step-2-code-label":"Code","pages.pref-center.profile.update-step-2-code-placeholder":"e.g. 350271","pages.pref-center.profile.update-step-2-enter-code":"Enter the code in the box below.","pages.pref-center.profile.update-step-2-message-sent":"A message with a code has been sent to email address:","pages.pref-center.profile.update-step-2-ne
40433w-code-modal-body":"Would you like to send a new verification code to","pages.pref-center.profile.update-step-2-new-code-modal-button":"Resend Code","pages.pref-center.profile.update-step-2-new-code-modal-title":"Get a new verification code","pages.pref-center.profile.update-step-2-resend-code-link-text":"Didn't get a code?","pages.pref-center.profile.update-step-2-save":"Submit","pages.pref-center.profile.update-successful":"Success","pages.pref-center.share-product.modal-body":"You can invite people by entering their email. Available seats:","pages.pref-center.share-product.modal-email-label":"Email Address","pages.pref-center.share-product.modal-email-placeholder":"Enter Email Address","pages.pref-center.share-product.modal-send-button-text":"Send Invite","pages.pref-center.share-product.modal-title":"Invite people to your sharable subscription","pages.pref-center.shared-members.done-button":"Done","pages.pref-center.shared-members.invite-button-text":"Invite new members","pages.pref-center.shared-members.manage-shared-members-title":"Manage shared members","pages.pref-center.shared-members.no-members":"This product is not currently shared with anyone.","pages.pref-center.shared-members.seats-used":"seats used","pages.pref-center.shared-members.status-active":"Active","pages.pref-center.shared-members.status-inactive":"Inactive","pages.pref-center.shared-members.status-pending":"Pending","pages.pref-center.shared-members.table-header-date":"Date Shared","pages.pref-center.shared-members.table-header-email":"Email Address","pages.pref-center.shared-members.table-header-status":"Status","pages.pref-center.shared-members.table-remove-member":"Remove member","pages.pref-center.shared-members.title":"Shared Members","pages.pref-center.shared-products.errors.existing-invite-error":"An invite has already been created for this email","pages.pref-center.shared-products.errors.invalid-email-error":"Invalid email address","pages.pref-center.shared-products.errors.limit-reached-error":"You have reached the sharing limit for this product","pages.pref-center.shared-products.errors.no-access-error":"You do not currently have access to this product","pages.pref-center.shared-products.leave-product-body":"Are you sure you want to leave this shared product?","pages.pref-center.shared-products.leave-product-title":"Leave Product","pages.pref-center.shared-products.no-subscriptions":"You do not currently have any products shared with you.","pages.pref-center.shared-products.remove-invite-body":"Are you sure you want to remove this pending invite from your subscription?","pages.pref-center.shared-products.remove-invite-title":"Remove Invite","pages.pref-center.shared-products.remove-member-body":"Are you sure you want to remove this user from your subscription?","pages.pref-center.shared-products.remove-member-title":"Remove Member","pages.pref-center.shared-products.remove-subscription":"Leave shared subscription","pages.pref-center.shared-products.shared-by":"Shared by","pages.pref-center.subscriptions.billing-history-link":"Billing History.","pages.pref-center.subscriptions.billing-history-table-canceled":"Subscription canceled","pages.pref-center.subscriptions.billing-history-table-header-date":"Date","pages.pref-center.subscriptions.billing-history-table-header-period":"Subscription Period","pages.pref-center.subscriptions.billing-history-table-header-subtotal":"Subtotal","pages.pref-center.subscriptions.billing-history-table-header-total":"Total","pages.pref-center.subscriptions.billing-history-title":"Billing History","pages.pref-center.subscriptions.cancel-subscription-confirm-modal-body":"Your subscription has been canceled.","pages.pref-center.subscriptions.cancel-subscription-confirm-modal-button":"Close","pages.pref-center.subscriptions.cancel-subscription-confirm-modal-title":"Subscription canceled","pages.pref-center.subscriptions.cancel-subscription-modal-body":"Are you sure you want to cancel the subscription","pages.pref-center.subscriptions.cancel-subscription-modal-button":"Cancel Subscription","pages.pref-center.subscriptions.cancel-subscription-modal-title":"Cancel your subscription","pages.pref-center.subscriptions.cancel-subscription-title":"Cancel your subscription","pages.pref-center.subscriptions.canceled-date":"Canceled on","pages.pref-center.subscriptions.change-multi-subscription-screen-active-subscription":"active","pages.pref-center.subscriptions.change-multi-subscription-screen-best-value":"best value","pages.pref-center.subscriptions.change-multi-subscription-screen-cancel-subscriptions-confirm-modal-body":"Your subscriptions have been canceled.","pages.pref-center.subscriptions.change-multi-subscription-screen-cancel-subscriptions-confirm-modal-title":"Subscriptions canceled","pages.pref-center.subscriptions.change-multi-subscription-screen-cancel-subscriptions-modal-title":"Cancel your subscriptions","pages.pref-center.subscriptions.change-multi-subscription-screen-cancel-subscriptions-text":"Cancel Subscriptions","pages.pref-center.subscriptions.change-multi-subscription-screen-current-subscription":"current subscription","pages.pref-center.subscriptions.change-multi-subscription-screen-current-subscriptions-title":"Current Subscriptions","pages.pref-center.subscriptions.change-multi-subscription-screen-edit-subscription-text":"Edit","pages.pref-center.subscriptions.change-multi-subscription-screen-new-subscriptions-title":"New Subscriptions","pages.pref-center.subscriptions.change-multi-subscription-screen-review-button":"Review Changes","pages.pref-center.subscriptions.change-multi-subscription-screen-title":"Manage Subscriptions","pages.pref-center.subscriptions.change-payment-method-description":"Adjust how you pay for the product.","pages.pref-center.subscriptions.change-payment-method-screen-description":"This credit card will be used as the payment method for the following subscription:","pages.pref-center.subscriptions.change-payment-method-screen-save-button":"Save","pages.pref-center.subscriptions.change-payment-method-screen-title":"Enter Payment Detail","pages.pref-center.subscriptions.change-payment-method-title":"Change payment method","pages.pref-center.subscriptions.change-single-subscription-screen-add-new":"Add a new card","pages.pref-center.subscriptions.change-single-subscription-screen-best-value":"Best Value","pages.pref-center.subscriptions.change-single-subscription-screen-confirm-button":"CONFIRM & PROCESS PAYMENT","pages.pref-center.subscriptions.change-single-subscription-screen-current-subscription-title":"Current Subscription","pages.pref-center.subscriptions.change-single-subscription-screen-existing-payment":"Use existing payment method","pages.pref-center.subscriptions.change-single-subscription-screen-new-subscription-description":"Change your current subscription for another.","pages.pref-center.subscriptions.change-single-subscription-screen-new-subscription-title":"Change Subscription","pages.pref-center.subscriptions.change-single-subscription-screen-payment-method-selection":"Payment Method","pages.pref-center.subscriptions.change-single-subscription-screen-review-button":"Review Changes","pages.pref-center.subscriptions.change-single-subscription-screen-select-plan":"Select Plan","pages.pref-center.subscriptions.change-single-subscription-screen-selected-plan":"Selected Plan","pages.pref-center.subscriptions.change-single-subscription-screen-title":"Manage Subscription","pages.pref-center.subscriptions.change-single-subscription-title":"Change your subscription","pages.pref-center.subscriptions.change-subscription-description":"Adjust what products you have access to.","pages.pref-center.subscriptions.change-subscriptions-title":"Change your subscriptions","pages.pref-center.subscriptions.invoices-text":"To see previous invoices visit","pages.pref-center.subscriptions.manage-single-subscription-title":"Manage Subscription","pages.pref-center.subscriptions.manage-subscriptions-title":"Manage Subscriptions","pages.pref-center.subscriptions.next-payment-title":"Next payment date","pages.pref-center.subscriptions.no-subscriptions":"You don't have any subscriptions.","pages.pref-center.subscriptions.one-off-expiry-date":"Expiry Date","pages.pref-center.subscriptions.one-off-price-title":"Price","pages.pref-center.subscriptions.payment-information-title":"Payment Information","pages.pref-center.subscriptions.payment-processing-text":"(payment processing)","pages.pref-center.subscriptions.product-canceled":"Product canceled","pages.pref-center.subscriptions.return-to-subscription-text":"Return to Subscription","pages.pref-center.subscriptions.return-to-subscriptions-text":"Return to Subscriptions","pages.pref-center.subscriptions.subscription-rate-title":"Subscription rate","pages.pref-center.subscriptions.update-success":"Update success"}}},"formTypeConfig":{"allowAccountRegistrationCodes":false,"usePasswordlessAuthentication":false,"twoFactorEmailAuthentication":true,"usePassword":false,"useVerificationCodes":true,"showSuccessOnFormCompletion":false,"autoApplyAttributes":{"email_verified":"true","wants_main_newsletter":"true","would-like-member-newsletter":"false"},"version":1,"requestCountry":"US","requestState":"Illinois","requestCity":"Chicago","requestZipCode":"60602"},"organisationConfig":{"schemaFields":[{"slug":"agree_to_have_data_stored","visibility":"PUBLIC","label":"I agree to have my data stored and processed by Sifted.","required":false,"public-description":"","validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"articles-gift-given","visibility":"PUBLIC","label":"Articles gift given","required":false,"public-description":"","validation-expression":null,"input-type":"number","select-options":null,"range-start":null,"range-end":null,"range-step":null},{"slug":"breakfastRsvp","visibility":"PUBLIC","label":"breakfastRsvp","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"company","visibility":"PUBLIC","label":"Company","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"complete_profile_submitted","visibility":"PUBLIC","label":"Complete profile submitted","required":false,"public-description":"","validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"cookiebot_user_hash","visibility":"PUBLIC","label":"Cookiebot User Hash","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"date-of-current-gifting-cycle-started","visibility":"PUBLIC","label":"Date of current gifting cycle started","required":false,"public-description":"","validation-expression":null,"input-type":"date","select-options":null,"range-start":null,"range-end":null,"range-step":null},{"slug":"department","visibility":"PUBLIC","label":"Department","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"âï¸ Engineering","value":"âï¸ Engineering","default":false},{"label":"ð¥ HR","value":"ð¥ HR","default":false},{"label":"ð Product","value":"ð Product","default":false},{"label":"ð¨ Design","value":"ð¨ Design","default":false},{"label":"ð¤ Sales","value":"ð¤ Sales","default":false},{"label":"ð Marketing","value":"ð Marketing","default":false},{"label":"âï¸ Legal","value":"âï¸ Legal","default":false},{"label":"ð¼ Business Development","value":"ð¼ Business Development","default":false},{"label":"ð¦ Leadership","value":"ð¦ Leadership","default":false},{"label":"ð¸ Finance","value":"ð¸ Finance","default":false},{"label":"ð Other","value":"ð Other","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"email_verified","visibility":"PUBLIC","label":"email verified","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"legacy","value":"legacy","default":false},{"label":"true","value":"true","default":false},{"label":"false","value":"false","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"expressed_interest","visibility":"PUBLIC","label":"Expressed Interest (Subscriber Events)","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"first_name","visibility":"PUBLIC","label":"First name","required":true,"public-description":"","validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"form_advisory_firm_type","visibility":"PUBLIC","label":"form_advisory_firm_type","required":false,"public-description":"","validation-expression":null,"input-type":"select","select-options":[{"label":"Law Firm","value":"Law Firm","default":false},{"label":"Consultancy Firm","value":"Consultancy Firm","default":false},{"label":"Financial Advisory","value":"Financial Advisory","default":false}],"range-start":null,"range-end":null,"range-step":null},{"slug":"form_aum","visibility":"PUBLIC","label":"form_aum","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Less than $1 million","value":"Less than $1 million","default":false},{"label":"$1 million - $10 million","value":"$1 million - $10 million","default":false},{"label":"$10 million - $50 million","value":"$10 million - $50 million","default":false},{"label":"$50 million - $100 million","value":"$50 million - $100 million","default":false},{"label":"$100 million - $500 million","value":"$100 million - $500 million","default":false},{"label":"$500 million - $1 billion","value":"$500 million - $1 billion","default":false},{"label":"Over $1 billion","value":"Over $1 billion","default":false},{"label":"Prefer not to disclose","value":"Prefer not to disclose","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_b2b_or_b2c","visibility":"PUBLIC","label":"form_b2b_or_b2c","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"B2B","value":"B2B","default":false},{"label":"B2C","value":"B2C","default":false},{"label":"Both","value":"Both","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_company_founded","visibility":"PUBLIC","label":"form_company_founded","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"form_company_hq_country","visibility":"PUBLIC","label":"form_company_hq_country","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Antilles","value":"Antilles","default":false},{"label":"Antigua and Barbuda","value":"Antigua and Barbuda","default":false},{"label":"Angola","value":"Angola","default":false},{"label":"Afghanistan","value":"Afghanistan","default":false},{"label":"Armenia","value":"Armenia","default":false},{"label":"Antarctica","value":"Antarctica","default":false},{"label":"Albania","value":"Albania","default":false},{"label":"Argentina","value":"Argentina","default":false},{"label":"Austria","value":"Austria","default":false},{"label":"American Samoa","value":"American Samoa","default":false},{"label":"Canada","value":"Canada","default":false},{"label":"Burkina Faso","value":"Burkina Faso","default":false},{"label":"Switzerland","value":"Switzerland","default":false},{"label":"Ã
land Islands","value":"Ã
land Islands","default":false},{"label":"France","value":"France","default":false},{"label":"Aruba","value":"Aruba","default":false},{"label":"Azerbaijan","value":"Azerbaijan","default":false},{"label":"Bahrain","value":"Bahrain","default":false},{"label":"Bosnia and Herzegovina","value":"Bosnia and Herzegovina","default":false},{"label":"Australia","value":"Australia","default":false},{"label":"Barbados","value":"Barbados","default
40433":false},{"label":"Belgium","value":"Belgium","default":false},{"label":"Bulgaria","value":"Bulgaria","default":false},{"label":"Burundi","value":"Burundi","default":false},{"label":"Benin","value":"Benin","default":false},{"label":"Brunei Darussalam","value":"Brunei Darussalam","default":false},{"label":"Bermuda","value":"Bermuda","default":false},{"label":"Bolivia, Plurinational State of","value":"Bolivia, Plurinational State of","default":false},{"label":"Bonaire, Sint Eustatius and Saba","value":"Bonaire, Sint Eustatius and Saba","default":false},{"label":"Brazil","value":"Brazil","default":false},{"label":"Germany","value":"Germany","default":false},{"label":"Saint Barthélemy","value":"Saint Barthélemy","default":false},{"label":"Bahamas","value":"Bahamas","default":false},{"label":"Botswana","value":"Botswana","default":false},{"label":"Bouvet Island","value":"Bouvet Island","default":false},{"label":"Belarus","value":"Belarus","default":false},{"label":"Belize","value":"Belize","default":false},{"label":"Cocos (Keeling) Islands","value":"Cocos (Keeling) Islands","default":false},{"label":"Congo, the Democratic Republic of the","value":"Congo, the Democratic Republic of the","default":false},{"label":"Congo","value":"Congo","default":false},{"label":"Central African Republic","value":"Central African Republic","default":false},{"label":"Cabo Verde","value":"Cabo Verde","default":false},{"label":"Colombia","value":"Colombia","default":false},{"label":"Cameroon","value":"Cameroon","default":false},{"label":"Czech Republic","value":"Czech Republic","default":false},{"label":"Costa Rica","value":"Costa Rica","default":false},{"label":"China","value":"China","default":false},{"label":"Christmas Island","value":"Christmas Island","default":false},{"label":"Cyprus","value":"Cyprus","default":false},{"label":"Côte d'Ivoire","value":"Côte d'Ivoire","default":false},{"label":"Cuba","value":"Cuba","default":false},{"label":"Cook Islands","value":"Cook Islands","default":false},{"label":"Serbia and Montenegro","value":"Serbia and Montenegro","default":false},{"label":"Curaçao","value":"Curaçao","default":false},{"label":"Denmark","value":"Denmark","default":false},{"label":"Djibouti","value":"Djibouti","default":false},{"label":"Dominican Republic","value":"Dominican Republic","default":false},{"label":"Algeria","value":"Algeria","default":false},{"label":"Ethiopia","value":"Ethiopia","default":false},{"label":"Chile","value":"Chile","default":false},{"label":"Faroe Islands","value":"Faroe Islands","default":false},{"label":"Ecuador","value":"Ecuador","default":false},{"label":"Dominica","value":"Dominica","default":false},{"label":"Bangladesh","value":"Bangladesh","default":false},{"label":"Egypt","value":"Egypt","default":false},{"label":"Micronesia, Federated States of","value":"Micronesia, Federated States of","default":false},{"label":"Spain","value":"Spain","default":false},{"label":"Falkland Islands (Malvinas)","value":"Falkland Islands (Malvinas)","default":false},{"label":"Finland","value":"Finland","default":false},{"label":"Estonia","value":"Estonia","default":false},{"label":"Gabon","value":"Gabon","default":false},{"label":"Bhutan","value":"Bhutan","default":false},{"label":"Western Sahara","value":"Western Sahara","default":false},{"label":"Fiji","value":"Fiji","default":false},{"label":"Eritrea","value":"Eritrea","default":false},{"label":"Andorra","value":"Andorra","default":false},{"label":"United Kingdom","value":"United Kingdom","default":false},{"label":"Grenada","value":"Grenada","default":false},{"label":"Georgia","value":"Georgia","default":false},{"label":"French Guiana","value":"French Guiana","default":false},{"label":"Guernsey","value":"Guernsey","default":false},{"label":"Ghana","value":"Ghana","default":false},{"label":"Gibraltar","value":"Gibraltar","default":false},{"label":"Greenland","value":"Greenland","default":false},{"label":"Gambia","value":"Gambia","default":false},{"label":"Guinea","value":"Guinea","default":false},{"label":"Guadeloupe","value":"Guadeloupe","default":false},{"label":"Equatorial Guinea","value":"Equatorial Guinea","default":false},{"label":"Greece","value":"Greece","default":false},{"label":"South Georgia and the South Sandwich Islands","value":"South Georgia and the South Sandwich Islands","default":false},{"label":"Guatemala","value":"Guatemala","default":false},{"label":"Guam","value":"Guam","default":false},{"label":"Guinea-Bissau","value":"Guinea-Bissau","default":false},{"label":"Guyana","value":"Guyana","default":false},{"label":"Hong Kong","value":"Hong Kong","default":false},{"label":"Heard Island and McDonald Islands","value":"Heard Island and McDonald Islands","default":false},{"label":"Honduras","value":"Honduras","default":false},{"label":"Croatia","value":"Croatia","default":false},{"label":"Haiti","value":"Haiti","default":false},{"label":"Hungary","value":"Hungary","default":false},{"label":"Indonesia","value":"Indonesia","default":false},{"label":"Ireland","value":"Ireland","default":false},{"label":"Israel","value":"Israel","default":false},{"label":"Isle of Man","value":"Isle of Man","default":false},{"label":"India","value":"India","default":false},{"label":"British Indian Ocean Territory","value":"British Indian Ocean Territory","default":false},{"label":"Iraq","value":"Iraq","default":false}
40433,{"label":"Iran, Islamic Republic of","value":"Iran, Islamic Republic of","default":false},{"label":"Iceland","value":"Iceland","default":false},{"label":"Italy","value":"Italy","default":false},{"label":"Jersey","value":"Jersey","default":false},{"label":"Jamaica","value":"Jamaica","default":false},{"label":"Jordan","value":"Jordan","default":false},{"label":"Japan","value":"Japan","default":false},{"label":"Kenya","value":"Kenya","default":false},{"label":"Kyrgyzstan","value":"Kyrgyzstan","default":false},{"label":"Cambodia","value":"Cambodia","default":false},{"label":"Kiribati","value":"Kiribati","default":false},{"label":"Comoros","value":"Comoros","default":false},{"label":"Saint Kitts and Nevis","value":"Saint Kitts and Nevis","default":false},{"label":"Korea, Democratic People's Republic of","value":"Korea, Democratic People's Republic of","default":false},{"label":"Korea, Republic of","value":"Korea, Republic of","default":false},{"label":"Kuwait","value":"Kuwait","default":false},{"label":"Cayman Islands","value":"Cayman Islands","default":false},{"label":"Kazakhstan","value":"Kazakhstan","default":false},{"label":"Lao People's Democratic Republic","value":"Lao People's Democratic Republic","default":false},{"label":"Lebanon","value":"Lebanon","default":false},{"label":"Saint Lucia","value":"Saint Lucia","default":false},{"label":"Liechtenstein","value":"Liechtenstein","default":false},{"label":"Sri Lanka","value":"Sri Lanka","default":false},{"label":"Liberia","value":"Liberia","default":false},{"label":"Lesotho","value":"Lesotho","default":false},{"label":"Lithuania","value":"Lithuania","default":false},{"label":"Luxembourg","value":"Luxembourg","default":false},{"label":"Latvia","value":"Latvia","default":false},{"label":"Libya","value":"Libya","default":false},{"label":"Morocco","value":"Morocco","default":false},{"label":"Monaco","value":"Monaco","default":false},{"label":"Moldova, Republic of","value":"Moldova, Republic of","default":false},{"label":"Montenegro","value":"Montenegro","default":false},{"label":"Saint Martin (French part)","value":"Saint Martin (French part)","default":false},{"label":"Madagascar","value":"Madagascar","default":false},{"label":"Marshall Islands","value":"Marshall Islands","default":false},{"label":"Macedonia","value":"Macedonia","default":false},{"label":"Mali","value":"Mali","default":false},{"label":"Myanmar","value":"Myanmar","default":false},{"label":"Mongolia","value":"Mongolia","default":false},{"label":"Macao","value":"Macao","default":false},{"label":"Northern Mariana Islands","value":"Northern Mariana Islands","default":false},{"label":"Martinique","value":"Martinique","default":false},{"label":"Mauritania","value":"Mauritania","default":false},{"label":"Montserrat","value":"Montserrat","default":false},{"label":"Malta","value":"Malta","default":false},{"label":"Mauritius","value":"Mauritius","default":false},{"label":"Maldives","value":"Maldives","default":false},{"label":"Malawi","value":"Malawi","default":false},{"label":"Mexico","value":"Mexico","default":false},{"label":"Malaysia","value":"Malaysia","default":false},{"label":"Mozambique","value":"Mozambique","default":false},{"label":"Namibia","value":"Namibia","default":false},{"label":"New Caledonia","value":"New Caledonia","default":false},{"label":"Niger","value":"Niger","default":false},{"label":"Norfolk Island","value":"Norfolk Island","default":false},{"label":"Nigeria","value":"Nigeria","default":false},{"label":"Nicaragua","value":"Nicaragua","default":false},{"label":"Netherlands","value":"Netherlands","default":false},{"label":"Norway","value":"Norway","default":false},{"label":"Nepal","value":"Nepal","default":false},{"label":"Nauru","value":"Nauru","default":false},{"label":"Niue","value":"Niue","default":false},{"label":"New Zealand","value":"New Zealand","default":false},{"label":"Oman","value":"Oman","default":false},{"label":"Panama","value":"Panama","default":false},{"label":"Peru","value":"Peru","default":false},{"label":"French Polynesia","value":"French Polynesia","default":false},{"label":"Papua New Guinea","value":"Papua New Guinea","default":false},{"label":"Philippines","value":"Philippines","default":false},{"label":"Pakistan","value":"Pakistan","default":false},{"label":"Poland","value":"Poland","default":false},{"label":"Saint Pierre and Miquelon","value":"Saint Pierre and Miquelon","default":false},{"label":"Pitcairn","value":"Pitcairn","default":false},{"label":"Puerto Rico","value":"Puerto Rico","default":false},{"label":"Palestine, State of","value":"Palestine, State of","default":false},{"label":"Portugal","value":"Portugal","default":false},{"label":"Palau","value":"Palau","default":false},{"label":"Paraguay","value":"Paraguay","default":false},{"label":"Qatar","value":"Qatar","default":false},{"label":"Réunion","value":"Réunion","default":false},{"label":"Romania","value":"Romania","default":false},{"label":"Serbia","value":"Serbia","default":false},{"label":"Russian Federation","value":"Russian Federation","default":false},{"label":"Rwanda","value":"Rwanda","default":false},{"label":"Saudi Arabia","value":"Saudi Arabia","default":false},{"label":"Solomon Islands","value":"Solomon Islands","default":false},{"label":"Seychelles","value":"Seychelles","default":false},{"label":"Sudan","value":"Sudan","default":false},{"label":"Sweden","value":"Sweden","default":false},{"label":"Singapore","value":"Singapore","default":false},{"label":"Saint Helena, Ascension and Tristan da Cunha","value":"Saint Helena, Ascension and Tristan da Cunha","default":false},{"label":"Slovenia","value":"Slovenia","default":false},{"label":"Svalbard and Jan Mayen","value":"Svalbard and Jan Mayen","default":false},{"label":"Slovakia","value":"Slovakia","default":false},{"label":"Sierra Leone","value":"Sierra Leone","default":false},{"label":"San Marino","value":"San Marino","default":false},{"label":"Senegal","value":"Senegal","default":false},{"label":"Somalia","value":"Somalia","default":false},{"label":"Suriname","value":"Suriname","default":false},{"label":"South Sudan","value":"South Sudan","default":false},{"label":"Sao Tome and Principe","value":"Sao Tome and Principe","default":false},{"label":"El Salvador","value":"El Salvador","default":false},{"label":"Sint Maarten (Dutch part)","value":"Sint Maarten (Dutch part)","default":false},{"label":"Syrian Arab Republic","value":"Syrian Arab Republic","default":false},{"label":"Swaziland","value":"Swaziland","default":false},{"label":"Turks and Caicos Islands","value":"Turks and Caicos Islands","default":false},{"label":"Chad","value":"Chad","default":false},{"label":"French Southern Territories","value":"French Southern Territories","default":false},{"label":"Togo","value":"Togo","default":false},{"label":"Thailand","value":"Thailand","default":false},{"label":"Tajikistan","value":"Tajikistan","default":false},{"label":"Tokelau","value":"Tokelau","default":false},{"label":"Timor-Leste","value":"Timor-Leste","default":false},{"label":"Turkmenistan","value":"Turkmenistan","default":false},{"label":"Tunisia","value":"Tunisia","default":false},{"label":"Tonga","value":"Tonga","default":false},{"label":"Turkey","value":"Turkey","default":false},{"label":"Trinidad and Tobago","value":"Trinidad and Tobago","default":false},{"label":"Tuvalu","value":"Tuvalu","default":false},{"label":"Taiwan, Province of China","value":"Taiwan, Province of China","default":false},{"label":"Tanzania, United Republic of","value":"Tanzania, United Republic of","default":false},{"label":"Ukraine","value":"Ukraine","default":false},{"label":"Uganda","value":"Uganda","default":false},{"label":"United Arab Emirates","value":"United Arab Emirates","default":false},{"label":"United States Minor Outlying Islands","value":"United States Minor Outlying Islands","default":false},{"label":"United States","value":"United States","default":false},{"label":"Uruguay","value":"Uruguay","default":false},{"label":"Uzbekistan","value":"Uzbekistan","default":false},{"label":"Holy See (Vatican City State)","value":"Holy See (Vatican City State)","default":false},{"label":"Saint Vincent and the Grenadines","value":"Saint Vincent and the Grenadines","default":false},{"label":"Venezuela, Bolivarian Republic of","value":"Venezuela, Bolivarian Republic of","default":false},{"label":"Virgin Islands, British","value":"Virgin Islands, British","default":false},{"label":"Virgin Islands, U.S.","value":"Virgin Islands, U.S.","default":false},{"label":"Viet Nam","value":"Viet Nam","default":false},{"label":"Vanuatu","value":"Vanuatu","default":false},{"label":"Wallis and Futuna","value":"Wallis and Futuna","default":false},{"label":"Samoa","value":"Samoa","default":false},{"label":"Kosovo","value":"Kosovo","default":false},{"label":"Yemen","value":"Yemen","default":false},{"label":"Mayotte","value":"Mayotte","default":false},{"label":"South Africa","value":"South Africa","default":false},{"label":"Zambia","value":"Zambia","default":false},{"label":"Zimbabwe","value":"Zimbabwe","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_company_name","visibility":"PUBLIC","label":"form_company_name","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5}
40433,{"slug":"form_company_size","visibility":"PUBLIC","label":"form_company_size","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"1-10","value":"1-10","default":false},{"label":"11-50","value":"11-50","default":false},{"label":"51-200","value":"51-200","default":false},{"label":"201-500","value":"201-500","default":false},{"label":"501-1000","value":"501-1000","default":false},{"label":"1001-5000","value":"1001-5000","default":false},{"label":"5001-10,000","value":"5001-10,000","default":false},{"label":"10,001+","value":"10,001+","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_company_type","visibility":"PUBLIC","label":"form_company_type","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Startup (up to Series A)","value":"Startup","default":false},{"label":"Scaleup (Series B+)","value":"Scaleup","default":false},{"label":"Professional Services","value":"Professional Services","default":false},{"label":"Investment Firm","value":"Investment Firm","default":false},{"label":"Non-profit","value":"Non-profit","default":false},{"label":"Academic Institution","value":"Academic Institution","default":false},{"label":"Media & Publishing","value":"Media & Publishing","default":false},{"label":"Research & Data Platform","value":"Research & Data Platform","default":false},{"label":"Government","value":"Government","default":false},{"label":"Tech & SaaS","value":"Tech & SaaS","default":false},{"label":"Advisory Firm","value":"Advisory Firm","default":false},{"label":"Other","value":"other","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_country","visibility":"PUBLIC","label":"form_country","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"United Kingdom","value":"United Kingdom","default":false},{"label":"Afghanistan","value":"Afghanistan","default":false},{"label":"Ã
land Islands","value":"Ã
land Islands","default":false},{"label":"Albania","value":"Albania","default":false},{"label":"Algeria","value":"Algeria","default":false},{"label":"American Samoa","value":"American Samoa","default":false},{"label":"Andorra","value":"Andorra","default":false},{"label":"Angola","value":"Angola","default":false},{"label":"Antarctica","value":"Antarctica","default":false},{"label":"Antigua and Barbuda","value":"Antigua and Barbuda","default":false},{"label":"Antilles","value":"Antilles","default":false},{"label":"Argentina","value":"Argentina","default":false},{"label":"Armenia","value":"Armenia","default":false},{"label":"Aruba","value":"Aruba","default":false},{"label":"Australia","value":"Australia","default":false},{"label":"Austria","value":"Austria","default":false},{"label":"Azerbaijan","value":"Azerbaijan","default":false},{"label":"Bahamas","value":"Bahamas","default":false},{"label":"Bahrain","value":"Bahrain","default":false},{"label":"Bangladesh","value":"Bangladesh","default":false},{"label":"Barbados","value":"Barbados","default":false},{"label":"Belarus","value":"Belarus","default":false},{"label":"Belgium","value":"Belgium","default":false},{"label":"Belize","value":"Belize","default":false},{"label":"Benin","value":"Benin","default":false},{"label":"Bermuda","value":"Bermuda","default":false},{"label":"Bhutan","value":"Bhutan","default":false},{"label":"Bolivia, Plurinational State of","value":"Bolivia, Plurinational State of","default":false},{"label":"Bonaire, Sint Eustatius and Saba","value":"Bonaire, Sint Eustatius and Saba","default":false},{"label":"Bosnia and Herzegovina","value":"Bosnia and Herzegovina","default":false},{"label":"Botswana","value":"Botswana","default":false},{"label":"Bouvet Island","value":"Bouvet Island","default":false},{"label":"Brazil","value":"Brazil","default":false},{"label":"British Indian Ocean Territory","value":"British Indian Ocean Territory","default":false},{"label":"Brunei Darussalam","value":"Brunei Darussalam","default":false},{"label":"Bulgaria","value":"Bulgaria","default":false},{"label":"Burkina Faso","value":"Burkina Faso","default":false},{"label":"Burundi","value":"Burundi","default":false},{"label":"Cabo Verde","value":"Cabo Verde","default":false},{"label":"Cambodia","value":"Cambodia","default":false},{"label":"Cameroon","value":"Cameroon","default":false},{"label":"Canada","value":"Canada","default":false},{"label":"Cayman Islands","value":"Cayman Islands","default":false},{"label":"Central African Republic","value":"Central African Republic","default":false},{"label":"Chad","value":"Chad","default":false},{"label":"Chile","value":"Chile","default":false},{"label":"China","value":"China","default":false},{"label":"Christmas Island","value":"Christmas Island","default":false},{"label":"Cocos (Keeling) Islands","value":"Cocos (Keeling) Islands","default":false},{"label":"Colombia","value":"Colombia","default":false},{"label":"Comoros","value":"Comoros","default":false},{"label":"Congo, the Democratic Republic of the","value":"Congo, the Democratic Republic of the","default":false},{"label":"Congo","value":"Congo","default":false},{"label":"Cook Islands","value":"Cook Islands","default":false},{"label":"Costa Rica","value":"Costa Rica","default":false},{"label":"Côte d'Ivoire","value":"Côte d'Ivoire","default":false},{"label":"Croatia","value":"Croatia","default":false},{"label":"Cuba","value":"Cuba","default":false},{"label":"Curaçao","value":"Curaçao","default":false},{"label":"Cyprus","value":"Cyprus","default":false},{"label":"Czech Republic","value":"Czech Republic","default":false},{"label":"Denmark","value":"Denmark","default":false},{"label":"Djibouti","value":"Djibouti","default":false},{"label":"Dominica","value":"Dominica","default":false},{"label":"Dominican Republic","value":"Dominican Republic","default":false},{"label":"Ecuador","value":"Ecuador","default":false},{"label":"Egypt","value":"Egypt","default":false},{"label":"El Salvador","value":"El Salvador","default":false},{"label":"Equatorial Guinea","value":"Equatorial Guinea","default":false},{"label":"Eritrea","value":"Eritrea","default":false},{"label":"Estonia","value":"Estonia","default":false},{"label":"Ethiopia","value":"Ethiopia","default":false},{"label":"Falkland Islands (Malvinas)","value":"Falkland Islands (Malvinas)","default":false},{"label":"Faroe Islands","value":"Faroe Islands","default":false},{"label":"Fiji","value":"Fiji","default":false},{"label":"Finland","value":"Finland","default":false},{"label":"France","value":"France","default":false},{"label":"French Guiana","value":"French Guiana","default":false},{"label":"French Polynesia","value":"French Polynesia","default":false},{"label":"French Southern Territories","value":"French Southern Territories","default":false},{"label":"Gabon","value":"Gabon","default":false},{"label":"Gambia","value":"Gambia","default":false},{"label":"Georgia","value":"Georgia","default":false},{"label":"Germany","value":"Germany","default":false},{"label":"Ghana","value":"Ghana","default":false},{"label":"Gibraltar","value":"Gibraltar","default":false},{"label":"Greece","value":"Greece","default":false},{"label":"Greenland","value":"Greenland","default":false},{"label":"Grenada","value":"Grenada","default":false},{"label":"Guadeloupe","value":"Guadeloupe","default":false},{"label":"Guam","value":"Guam","default":false},{"label":"Guatemala","value":"Guatemala","default":false},{"label":"Guernsey","value":"Guernsey","default":false},{"label":"Guinea-Bissau","value":"Guinea-Bissau","default":false},{"label":"Guinea","value":"Guinea","default":false},{"label":"Guyana","value":"Guyana","default":false},{"label":"Haiti","value":"Haiti","default":false},{"label":"Heard Island and McDonald Islands","value":"Heard Island and McDonald Islands","default":false},{"label":"Holy See (Vatican City State)","value":"Holy See (Vatican City State)","default":false},{"label":"Honduras","value":"Honduras","default":false},{"label":"Hong Kong","value":"Hong Kong","default":false},{"label":"Hungary","value":"Hungary","default":false},{"label":"Iceland","value":"Iceland","default":false},{"label":"India","value":"India","default":false},{"label":"Indonesia","value":"Indonesia","default":false}
40433,{"label":"Iran, Islamic Republic of","value":"Iran, Islamic Republic of","default":false},{"label":"Iraq","value":"Iraq","default":false},{"label":"Ireland","value":"Ireland","default":false},{"label":"Isle of Man","value":"Isle of Man","default":false},{"label":"Israel","value":"Israel","default":false},{"label":"Italy","value":"Italy","default":false},{"label":"Jamaica","value":"Jamaica","default":false},{"label":"Japan","value":"Japan","default":false},{"label":"Jersey","value":"Jersey","default":false},{"label":"Jordan","value":"Jordan","default":false},{"label":"Kazakhstan","value":"Kazakhstan","default":false},{"label":"Kenya","value":"Kenya","default":false},{"label":"Kiribati","value":"Kiribati","default":false},{"label":"Korea, Democratic People's Republic of","value":"Korea, Democratic People's Republic of","default":false},{"label":"Korea, Republic of","value":"Korea, Republic of","default":false},{"label":"Kosovo","value":"Kosovo","default":false},{"label":"Kuwait","value":"Kuwait","default":false},{"label":"Kyrgyzstan","value":"Kyrgyzstan","default":false},{"label":"Lao People's Democratic Republic","value":"Lao People's Democratic Republic","default":false},{"label":"Latvia","value":"Latvia","default":false},{"label":"Lebanon","value":"Lebanon","default":false},{"label":"Lesotho","value":"Lesotho","default":false},{"label":"Liberia","value":"Liberia","default":false},{"label":"Libya","value":"Libya","default":false},{"label":"Liechtenstein","value":"Liechtenstein","default":false},{"label":"Lithuania","value":"Lithuania","default":false},{"label":"Luxembourg","value":"Luxembourg","default":false},{"label":"Macao","value":"Macao","default":false},{"label":"Macedonia","value":"Macedonia","default":false},{"label":"Madagascar","value":"Madagascar","default":false},{"label":"Malawi","value":"Malawi","default":false},{"label":"Malaysia","value":"Malaysia","default":false},{"label":"Maldives","value":"Maldives","default":false},{"label":"Mali","value":"Mali","default":false},{"label":"Malta","value":"Malta","default":false},{"label":"Marshall Islands","value":"Marshall Islands","default":false},{"label":"Martinique","value":"Martinique","default":false},{"label":"Mauritania","value":"Mauritania","default":false},{"label":"Mauritius","value":"Mauritius","default":false},{"label":"Mayotte","value":"Mayotte","default":false},{"label":"Mexico","value":"Mexico","default":false},{"label":"Micronesia, Federated States of","value":"Micronesia, Federated States of","default":false},{"label":"Moldova, Republic of","value":"Moldova, Republic of","default":false},{"label":"Monaco","value":"Monaco","default":false},{"label":"Mongolia","value":"Mongolia","default":false},{"label":"Montenegro","value":"Montenegro","default":false},{"label":"Montserrat","value":"Montserrat","default":false},{"label":"Morocco","value":"Morocco","default":false},{"label":"Mozambique","value":"Mozambique","default":false},{"label":"Myanmar","value":"Myanmar","default":false},{"label":"Namibia","value":"Namibia","default":false},{"label":"Nauru","value":"Nauru","default":false},{"label":"Nepal","value":"Nepal","default":false},{"label":"Netherlands","value":"Netherlands","default":false},{"label":"New Caledonia","value":"New Caledonia","default":false},{"label":"New Zealand","value":"New Zealand","default":false},{"label":"Nicaragua","value":"Nicaragua","default":false},{"label":"Niger","value":"Niger","default":false},{"label":"Nigeria","value":"Nigeria","default":false},{"label":"Niue","value":"Niue","default":false},{"label":"Norfolk Island","value":"Norfolk Island","default":false},{"label":"Northern Mariana Islands","value":"Northern Mariana Islands","default":false},{"label":"Norway","value":"Norway","default":false},{"label":"Oman","value":"Oman","default":false},{"label":"Pakistan","value":"Pakistan","default":false},{"label":"Palau","value":"Palau","default":false},{"label":"Palestine, State of","value":"Palestine, State of","default":false},{"label":"Panama","value":"Panama","default":false},{"label":"Papua New Guinea","value":"Papua New Guinea","default":false},{"label":"Paraguay","value":"Paraguay","default":false},{"label":"Peru","value":"Peru","default":false},{"label":"Philippines","value":"Philippines","default":false},{"label":"Pitcairn","value":"Pitcairn","default":false},{"label":"Poland","value":"Poland","default":false},{"label":"Portugal","value":"Portugal","default":false},{"label":"Puerto Rico","value":"Puerto Rico","default":false},{"label":"Qatar","value":"Qatar","default":false},{"label":"Réunion","value":"Réunion","default":false},{"label":"Romania","value":"Romania","default":false},{"label":"Russian Federation","value":"Russian Federation","default":false},{"label":"Rwanda","value":"Rwanda","default":false},{"label":"Saint Barthélemy","value":"Saint Barthélemy","default":false},{"label":"Saint Helena, Ascension and Tristan da Cunha","value":"Saint Helena, Ascension and Tristan da Cunha","default":false},{"label":"Saint Kitts and Nevis","value":"Saint Kitts and Nevis","default":false},{"label":"Saint Lucia","value":"Saint Lucia","default":false},{"label":"Saint Martin (French part)","value":"Saint Martin (French part)","default":false},{"label":"Saint Pierre and Miquelon","value":"Saint Pierre and Miquelon","default":false},{"label":"Saint Vincent and the Grenadines","value":"Saint Vincent and the Grenadines","default":false},{"label":"Samoa","value":"Samoa","default":false},{"label":"San Marino","value":"San Marino","default":false},{"label":"Sao Tome and Principe","value":"Sao Tome and Principe","default":false},{"label":"Saudi Arabia","value":"Saudi Arabia","default":false},{"label":"Senegal","value":"Senegal","default":false},{"label":"Serbia and Montenegro","value":"Serbia and Montenegro","default":false},{"label":"Serbia","value":"Serbia","default":false},{"label":"Seychelles","value":"Seychelles","default":false},{"label":"Sierra Leone","value":"Sierra Leone","default":false},{"label":"Singapore","value":"Singapore","default":false},{"label":"Sint Maarten (Dutch part)","value":"Sint Maarten (Dutch part)","default":false},{"label":"Slovakia","value":"Slovakia","default":false},{"label":"Slovenia","value":"Slovenia","default":false},{"label":"Solomon Islands","value":"Solomon Islands","default":false},{"label":"Somalia","value":"Somalia","default":false},{"label":"South Africa","value":"South Africa","default":false},{"label":"South Georgia and the South Sandwich Islands","value":"South Georgia and the South Sandwich Islands","default":false},{"label":"South Sudan","value":"South Sudan","default":false},{"label":"Spain","value":"Spain","default":false},{"label":"Sri Lanka","value":"Sri Lanka","default":false},{"label":"Sudan","value":"Sudan","default":false},{"label":"Suriname","value":"Suriname","default":false},{"label":"Svalbard and Jan Mayen","value":"Svalbard and Jan Mayen","default":false},{"label":"Swaziland","value":"Swaziland","default":false},{"label":"Sweden","value":"Sweden","default":false},{"label":"Switzerland","value":"Switzerland","default":false},{"label":"Syrian Arab Republic","value":"Syrian Arab Republic","default":false},{"label":"Taiwan, Province of China","value":"Taiwan, Province of China","default":false},{"label":"Tajikistan","value":"Tajikistan","default":false},{"label":"Tanzania, United Republic of","value":"Tanzania, United Republic of","default":false},{"label":"Thailand","value":"Thailand","default":false},{"label":"Timor-Leste","value":"Timor-Leste","default":false},{"label":"Togo","value":"Togo","default":false},{"label":"Tokelau","value":"Tokelau","default":false},{"label":"Tonga","value":"Tonga","default":false},{"label":"Trinidad and Tobago","value":"Trinidad and Tobago","default":false},{"label":"Tunisia","value":"Tunisia","default":false},{"label":"Turkey","value":"Turkey","default":false},{"label":"Turkmenistan","value":"Turkmenistan","default":false},{"label":"Turks and Caicos Islands","value":"Turks and Caicos Islands","default":false},{"label":"Tuvalu","value":"Tuvalu","default":false},{"label":"Uganda","value":"Uganda","default":false},{"label":"Ukraine","value":"Ukraine","default":false},{"label":"United Arab Emirates","value":"United Arab Emirates","default":false},{"label":"United States Minor Outlying Islands","value":"United States Minor Outlying Islands","default":false},{"label":"United States","value":"United States","default":false},{"label":"Uruguay","value":"Uruguay","default":false},{"label":"Uzbekistan","value":"Uzbekistan","default":false},{"label":"Vanuatu","value":"Vanuatu","default":false},{"label":"Venezuela, Bolivarian Republic of","value":"Venezuela, Bolivarian Republic of","default":false},{"label":"Viet Nam","value":"Viet Nam","default":false},{"label":"Virgin Islands, British","value":"Virgin Islands, British","default":false},{"label":"Virgin Islands, U.S.","value":"Virgin Islands, U.S.","default":false},{"label":"Wallis and Futuna","value":"Wallis and Futuna","default":false},{"label":"Western Sahara","value":"Western Sahara","default":false},{"label":"Yemen","value":"Yemen","default":false},{"label":"Zambia","value":"Zambia","default":false},{"label":"Zimbabwe","value":"Zimbabwe","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_department","visibility":"PUBLIC","label":"form_department","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Sales, Business Development or Partnerships","value":"Sales, Business Development or Partnerships","default":false},{"label":"Marketing","value":"Marketing","default":false},{"label":"Product","value":"Product","default":false},{"label":"HR, People & Talent","value":"HR, People & Talent","default":false},{"label":"Data","value":"Data","default":false},{"label":"Technology & Engineering","value":"Technology & Engineering","default":false},{"label":"Legal","value":"Legal","default":false},{"label":"Finance","value":"Finance","default":false},{"label":"Operations","value":"Operations","default":false},{"label":"Innovation","value":"Innovation","default":false},{"label":"PR & Communications","value":"PR & Communications","default":false},{"label":"Investor Relations","value":"Investor Relations","default":false},{"label":"Senior Leadership","value":"Senior Leadership","default":false},{"label":"Other","value":"Other","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_events_consent","visibility":"PUBLIC","label":"form_events_consent","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"form_funding_stages_invested","visibility":"PUBLIC","label":"form_funding_stages_invested","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Pre-Series A","value":"Pre-Series A","default":false},{"label":"Series A","value":"Series A","default":false},{"label":"Growth","value":"Growth","default":false},{"label":"Late","value":"Late","default":false},{"label":"Venture Debt","value":"Venture Debt","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_investment_firm_type","visibility":"PUBLIC","label":"form_investment_firm_type","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Venture Capital","value":"Venture Capital","default":false},{"label":"Private Equity","value":"Private Equity","default":false},{"label":"Family Office","value":"Family Office","default":false},{"label":"Fund of Funds & LPs","value":"Fund of Funds & LPs","default":false},{"label":"Accelerator","value":"Accelerator","default":false},{"label":"Corporate Venture Capital","value":"Corporate Venture Capital","default":false},{"label":"Public Fund","value":"Public Fund","default":false},{"label":"Pension Fund","value":"Pension Fund","default":false},{"label":"Institutional Investor","value":"Institutional Investor","default":false},{"label":"Angel Network","value":"Angel Network","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_job_title","visibility":"PUBLIC","label":"form_job_title","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"form_last_asked_for_optional_data","visibility":"PUBLIC","label":"form_last_asked_for_optional_data","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"form_latest_funding_stage","visibility":"PUBLIC","label":"form_latest_funding_stage","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Bootstrapped","value":"Bootstrapped","default":false},{"label":"Pre-Series A","value":"Pre-Series A","default":false},{"label":"Series A","value":"Series A","default":false},{"label":"Growth","value":"Growth","default":false},{"label":"Late","value":"Late","default":false},{"label":"Public Company","value":"Public Company","default":false},{"label":"Acquired","value":"Acquired","default":false},{"label":"I don't know","value":"I don't know","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_professional_service_type","visibility":"PUBLIC","label":"form_professional_service_type","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Accountancy or Audit Firm","value":"Accountancy or Audit Firm","default":false},{"label":"Asset/Investment Manager","value":"Asset/Investment Manager","default":false},{"label":"Business Bank","value":"Business Bank","default":false},{"label":"Commercial Real Estate or Co-working Space","value":"Commercial Real Estate or Co-working Space","default":false},{"label":"Fintech","value":"Fintech","default":false},{"label":"IT Consulting & Services","value":"IT Consulting & Services","default":false},{"label":"Insurance","value":"Insurance","default":false},{"label":"Investment Bank","value":"Investment Bank","default":false},{"label":"Marketing, Advertising or Design Agency","value":"Marketing, Advertising or Design Agency","default":false},{"label":"Other","value":"Other","default":false},{"label":"PR & Communications Agency","value":"PR & Communications Agency","default":false}
40433,{"label":"Professional Training and Coaching","value":"Professional Training and Coaching","default":false},{"label":"Staffing & Recruitment","value":"Staffing & Recruitment","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_role_at_business","visibility":"PUBLIC","label":"form_role_at_business","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"(Co) founder","value":"(Co) founder","default":false},{"label":"C-Suite","value":"C-Suite","default":false},{"label":"VP","value":"VP","default":false},{"label":"Director","value":"Director","default":false},{"label":"Senior manager","value":"Senior manager","default":false},{"label":"Manager","value":"Manager","default":false},{"label":"Junior","value":"Junior","default":false},{"label":"General Partner","value":"General Partner","default":false},{"label":"Partner","value":"Partner","default":false},{"label":"Principal","value":"Principal","default":false},{"label":"Associate","value":"Associate","default":false},{"label":"Analyst","value":"Analyst","default":false},{"label":"Researcher","value":"Researcher","default":false},{"label":"Angel Investor","value":"Angel Investor","default":false},{"label":"Other","value":"Other","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_sector","visibility":"PUBLIC","label":"form_sector","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"B2B SaaS","value":"B2B SaaS","default":false},{"label":"Fintech","value":"Fintech","default":false},{"label":"Deeptech","value":"Deeptech","default":false},{"label":"Climate tech","value":"Climate tech","default":false},{"label":"Healthtech","value":"Healthtech","default":false},{"label":"Consumer","value":"Consumer","default":false},{"label":"Other","value":"Other","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_sectors","visibility":"PUBLIC","label":"form_sectors","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"B2B SaaS","value":"B2B SaaS","default":false},{"label":"Fintech","value":"Fintech","default":false},{"label":"Deeptech","value":"Deeptech","default":false},{"label":"Climate tech","value":"Climate tech","default":false},{"label":"Healthtech","value":"Healthtech","default":false},{"label":"Consumer","value":"Consumer","default":false},{"label":"Other","value":"Other","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_work_in_startup_ecosystem","visibility":"PUBLIC","label":"form_work_in_startup_ecosystem","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Service provider","value":"Service provider","default":false},{"label":"Venture arm","value":"Venture arm","default":false},{"label":"Accelerator / incubator / open innovation","value":"Accelerator / incubator / open innovation","default":false},{"label":"Corporate innovation","value":"Corporate innovation","default":false},{"label":"Other","value":"Other","default":false},{"label":"Do not work with startup ecosystem","value":"Do not work with startup ecosystem","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"is_academic_user","visibility":"PUBLIC","label":"is_academic_user","required":false,"public-description":"Does user is academic user","validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":null,"range-end":null,"range-step":null},{"slug":"is-migrated-from-hubspot","visibility":"PUBLIC","label":"Is migrated from Hubspot","required":false,"public-description":"","validation-expression":null,"input-type":"hidden","select-options":null,"range-start":null,"range-end":null,"range-step":null},{"slug":"last_name","visibility":"PUBLIC","label":"Last name","required":true,"public-description":"","validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"newsletter_preferences_seen","visibility":"PUBLIC","label":"Newsletter preferences seen","required":false,"public-description":"","validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"nudges","visibility":"PUBLIC","label":"nudges","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"organisation_type","visibility":"PUBLIC","label":"Organisation Type","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Pre-seed Startup","value":"Pre-seed Startup","default":false},{"label":"Seed Startup","value":"Seed Startup","default":false},{"label":"Series A Startup","value":"Series A Startup","default":false},{"label":"Series B+ Startup","value":"Series B+ Startup","default":false},{"label":"Corporate","value":"Corporate","default":false},{"label":"Service provider to Startups","value":"Service provider to Startups","default":false},{"label":"Investment firm","value":"Investment firm","default":false},{"label":"Other","value":"Other","default":false},{"label":"I don't work at the moment","value":"I don't work at the moment","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"paywallCounter","visibility":"PUBLIC","label":"paywallCounter","required":false,"public-description":null,"validation-expression":null,"input-type":"number","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"paywallHitsList","visibility":"PUBLIC","label":"paywallHitsList","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"position","visibility":"PUBLIC","label":"Job Title","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"pql-test","visibility":"PUBLIC","label":"Also interested in...","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Our Sifted Pro product (investment-grade research on the early-stage startup ecosystem)","value":"Our Sifted Pro product (investment-grade research on the early-stage startup ecosystem)","default":false},{"label":"Sponsorship and advertising opportunities (reaching Siftedâs audie
40433nce)","value":"Sponsorship and advertising opportunities (reaching Siftedâs audience)","default":false},{"label":"None of the above","value":"None of the above","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"reports_downloaded","visibility":"PUBLIC","label":"Reports Downloaded","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"role","visibility":"PUBLIC","label":"Role","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"(Co) Founder","value":"(Co) Founder","default":false},{"label":"Partner","value":"Partner","default":false},{"label":"Director","value":"Director","default":false},{"label":"Senior manager","value":"Senior manager","default":false},{"label":"Manager","value":"Manager","default":false},{"label":"Associate","value":"Associate","default":false},{"label":"Junior","value":"Junior","default":false},{"label":"Senior","value":"Senior","default":false},{"label":"Student","value":"Student","default":false},{"label":"Academic","value":"Academic","default":false},{"label":"Other","value":"Other","default":false},{"label":"Staff","value":"Staff","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"roundtableRsvp","visibility":"PUBLIC","label":"Roundtable RSVP","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"sector_preference","visibility":"PUBLIC","label":"Sector of interest","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"ð Fintech","value":"ð Fintech","default":false},{"label":"ð Venture Capital","value":"ð Venture Capital","default":false},{"label":"ð± Sustainability","value":"ð± Sustainability","default":false},{"label":"ð Public & Academia","value":"ð Public & Academia","default":false},{"label":"ð¦ Startup Life","value":"ð¦ Startup Life","default":false},{"label":"ð± Consumer","value":"ð± Consumer","default":false},{"label":"ð¾ Deeptech","value":"ð¾ Deeptech","default":false},{"label":"ð Mobility","value":"ð Mobility","default":false},{"label":"ð¥ Healthtech","value":"ð¥ Healthtech","default":false},{"label":"ð¡ Corporate Innovation","value":"ð¡ Corporate Innovation","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_address_line_1","visibility":"PUBLIC","label":"self_serve_address_line_1","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_address_line_2","visibility":"PUBLIC","label":"self_serve_address_line_2","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_address_line_3","visibility":"PUBLIC","label":"self_serve_address_line_3","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_city","visibility":"PUBLIC","label":"self_serve_city","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_country","visibility":"PUBLIC","label":"self_serve_country","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Afghanistan","value":"Afghanistan","default":false},{"label":"Albania","value":"Albania","default":false},{"label":"Algeria","value":"Algeria","default":false},{"label":"American Samoa","value":"American Samoa","default":false},{"label":"Andorra","value":"Andorra","default":false},{"label":"Angola","value":"Angola","default":false},{"label":"Antarctica","value":"Antarctica","default":false},{"label":"Antigua and Barbuda","value":"Antigua and Barbuda","default":false},{"label":"Antilles","value":"Antilles","default":false},{"label":"Argentina","value":"Argentina","default":false},{"label":"Armenia","value":"Armenia","default":false},{"label":"Aruba","value":"Aruba","default":false},{"label":"Australia","value":"Australia","default":false},{"label":"Austria","value":"Austria","default":false},{"label":"Azerbaijan","value":"Azerbaijan","default":false},{"label":"Bahamas","value":"Bahamas","default":false},{"label":"Bahrain","value":"Bahrain","default":false},{"label":"Bangladesh","value":"Bangladesh","default":false},{"label":"Barbados","value":"Barbados","default":false},{"label":"Belarus","value":"Belarus","default":false},{"label":"Belgium","value":"Belgium","default":false},{"label":"Belize","value":"Belize","default":false},{"label":"Benin","value":"Benin","default":false},{"label":"Bermuda","value":"Bermuda","default":false},{"label":"Bhutan","value":"Bhutan","default":false},{"label":"Bolivia, Plurinational State of","value":"Bolivia, Plurinational State of","default":false},{"label":"Bonaire, Sint Eustatius and Saba","value":"Bonaire, Sint Eustatius and Saba","default":false},{"label":"Bosnia and Herzegovina","value":"Bosnia and Herzegovina","default":false},{"label":"Botswana","value":"Botswana","default":false},{"label":"Bouvet Island","value":"Bouvet Island","default":false},{"label":"Brazil","value":"Brazil","default":false},{"label":"British Indian Ocean Territory","value":"British Indian Ocean Territory","default":false},{"label":"Brunei Darussalam","value":"Brunei Darussalam","default":false},{"label":"Bulgaria","value":"Bulgaria","default":false},{"label":"Burkina Faso","value":"Burkina Faso","default":false},{"label":"Burundi","value":"Burundi","default":false},{"label":"Cabo Verde","value":"Cabo Verde","default":false},{"label":"Cambodia","value":"Cambodia","default":false},{"label":"Cameroon","value":"Cameroon","default":false},{"label":"Canada","value":"Canada","default":false},{"label":"Cayman Islands","value":"Cayman Islands","default":false},{"label":"Central African Republic","value":"Central African Republic","default":false},{"label":"Chad","value":"Chad","default":false},{"label":"Chile","value":"Chile","default":false},{"label":"China","value":"China","default":false},{"label":"Christmas Island","value":"Christmas Island","default":false},{"label":"Cocos (Keeling) Islands","value":"Cocos (Keeling) Islands","default":false},{"label":"Colombia","value":"Colombia","default":false},{"label":"Comoros","value":"Comoros","default":false},{"label":"Congo","value":"Congo","default":false},{"label":"Congo, the Democratic Republic of the","value":"Congo, the Democratic Republic of the","default":false},{"label":"Cook Islands","value":"Cook Islands","default":false},{"label":"Costa Rica","value":"Costa Rica","default":false},{"label":"Croatia","value":"Croatia","default":false},{"label":"Cuba","value":"Cuba","default":false},{"label":"Curaçao","value":"Curaçao","default":false},{"label":"Cyprus","value":"Cyprus","default":false},{"label":"Czech Republic","value":"Czech Republic","default":false},{"label":"Côte d'Ivoire","value":"Côte d'Ivoire","default":false},{"label":"Denmark","value":"Denmark","default":false},{"label":"Djibouti","value":"Djibouti","default":false},{"label":"Dominica","value":"Dominica","default":false},{"label":"Dominican Republic","value":"Dominican Republic","default":false},{"label":"Ecuador","value":"Ecuador","default":false},{"label":"Egypt","value":"Egypt","default":false},{"label":"El Salvador","value":"El Salvador","default":false},{"label":"Equatorial Guinea","value":"Equatorial Guinea","default":false},{"label":"Eritrea","value":"Eritrea","default":false},{"label":"Estonia","value":"Estonia","default":false},{"label":"Ethiopia","value":"Ethiopia","default":false},{"label":"Falkland Islands (Malvinas)","value":"Falkland Islands (Malvinas)","default":false},{"label":"Faroe Islands","value":"Faroe Islands","default":false},{"label":"Fiji","value":"Fiji","default":false},{"label":"Finland","value":"Finland","default":false},{"label":"France","value":"France","default":false},{"label":"French Guiana","value":"French Guiana","default":false},{"label":"French Polynesia","value":"French Polynesia","default":false},{"label":"French Southern Territories","value":"French Southern Territories","default":false},{"label":"Gabon","value":"Gabon","default":false},{"label":"Gambia","value":"Gambia","default":false},{"label":"Georgia","value":"Georgia","default":false},{"label":"Germany","value":"Germany","default":false},{"label":"Ghana","value":"Ghana","default":false},{"label":"Gibraltar","value":"Gibraltar","default":false},{"label":"Greece","value":"Greece","default":false},{"label":"Greenland","value":"Greenland","default":false},{"label":"Grenada","value":"Grenada","default":false},{"label":"Guadeloupe","value":"Guadeloupe","default":false},{"label":"Guam","value":"Guam","default":false},{"label":"Guatemala","value":"Guatemala","default":false},{"label":"Guernsey","value":"Guernsey","default":false},{"label":"Guinea","value":"Guinea","default":false},{"label":"Guinea-Bissau","value":"Guinea-Bissau","default":false},{"label":"Guyana","value":"Guyana","default":false},{"label":"Haiti","value":"Haiti","default":false},{"label":"Heard Island and McDonald Islands","value":"Heard Island and McDonald Islands","default":false},{"label":"Holy See (Vatican City State)","value":"Holy See (Vatican City State)","default":false},{"label":"Honduras","value":"Honduras","default":false},{"label":"Hong Kong","value":"Hong Kong","default":false},{"label":"Hungary","value":"Hungary","default":false},{"label":"Iceland","value":"Iceland","default":false},{"label":"India","value":"India","default":false},{"label":"Indonesia","value":"Indonesia","default":false}
40433,{"label":"Iran, Islamic Republic of","value":"Iran, Islamic Republic of","default":false},{"label":"Iraq","value":"Iraq","default":false},{"label":"Ireland","value":"Ireland","default":false},{"label":"Isle of Man","value":"Isle of Man","default":false},{"label":"Israel","value":"Israel","default":false},{"label":"Italy","value":"Italy","default":false},{"label":"Jamaica","value":"Jamaica","default":false},{"label":"Japan","value":"Japan","default":false},{"label":"Jersey","value":"Jersey","default":false},{"label":"Jordan","value":"Jordan","default":false},{"label":"Kazakhstan","value":"Kazakhstan","default":false},{"label":"Kenya","value":"Kenya","default":false},{"label":"Kiribati","value":"Kiribati","default":false},{"label":"Korea, Democratic People's Republic of","value":"Korea, Democratic People's Republic of","default":false},{"label":"Korea, Republic of","value":"Korea, Republic of","default":false},{"label":"Kosovo","value":"Kosovo","default":false},{"label":"Kuwait","value":"Kuwait","default":false},{"label":"Kyrgyzstan","value":"Kyrgyzstan","default":false},{"label":"Lao People's Democratic Republic","value":"Lao People's Democratic Republic","default":false},{"label":"Latvia","value":"Latvia","default":false},{"label":"Lebanon","value":"Lebanon","default":false},{"label":"Lesotho","value":"Lesotho","default":false},{"label":"Liberia","value":"Liberia","default":false},{"label":"Libya","value":"Libya","default":false},{"label":"Liechtenstein","value":"Liechtenstein","default":false},{"label":"Lithuania","value":"Lithuania","default":false},{"label":"Luxembourg","value":"Luxembourg","default":false},{"label":"Macao","value":"Macao","default":false},{"label":"Macedonia","value":"Macedonia","default":false},{"label":"Madagascar","value":"Madagascar","default":false},{"label":"Malawi","value":"Malawi","default":false},{"label":"Malaysia","value":"Malaysia","default":false},{"label":"Maldives","value":"Maldives","default":false},{"label":"Mali","value":"Mali","default":false},{"label":"Malta","value":"Malta","default":false},{"label":"Marshall Islands","value":"Marshall Islands","default":false},{"label":"Martinique","value":"Martinique","default":false},{"label":"Mauritania","value":"Mauritania","default":false},{"label":"Mauritius","value":"Mauritius","default":false},{"label":"Mayotte","value":"Mayotte","default":false},{"label":"Mexico","value":"Mexico","default":false},{"label":"Micronesia, Federated States of","value":"Micronesia, Federated States of","default":false},{"label":"Moldova, Republic of","value":"Moldova, Republic of","default":false},{"label":"Monaco","value":"Monaco","default":false},{"label":"Mongolia","value":"Mongolia","default":false},{"label":"Montenegro","value":"Montenegro","default":false},{"label":"Montserrat","value":"Montserrat","default":false},{"label":"Morocco","value":"Morocco","default":false},{"label":"Mozambique","value":"Mozambique","default":false},{"label":"Myanmar","value":"Myanmar","default":false},{"label":"Namibia","value":"Namibia","default":false},{"label":"Nauru","value":"Nauru","default":false},{"label":"Nepal","value":"Nepal","default":false},{"label":"Netherlands","value":"Netherlands","default":false},{"label":"New Caledonia","value":"New Caledonia","default":false},{"label":"New Zealand","value":"New Zealand","default":false},{"label":"Nicaragua","value":"Nicaragua","default":false},{"label":"Niger","value":"Niger","default":false},{"label":"Nigeria","value":"Nigeria","default":false},{"label":"Niue","value":"Niue","default":false},{"label":"Norfolk Island","value":"Norfolk Island","default":false},{"label":"Northern Mariana Islands","value":"Northern Mariana Islands","default":false},{"label":"Norway","value":"Norway","default":false},{"label":"Oman","value":"Oman","default":false},{"label":"Pakistan","value":"Pakistan","default":false},{"label":"Palau","value":"Palau","default":false},{"label":"Palestine, State of","value":"Palestine, State of","default":false},{"label":"Panama","value":"Panama","default":false},{"label":"Papua New Guinea","value":"Papua New Guinea","default":false},{"label":"Paraguay","value":"Paraguay","default":false},{"label":"Peru","value":"Peru","default":false},{"label":"Philippines","value":"Philippines","default":false},{"label":"Pitcairn","value":"Pitcairn","default":false},{"label":"Poland","value":"Poland","default":false},{"label":"Portugal","value":"Portugal","default":false},{"label":"Puerto Rico","value":"Puerto Rico","default":false},{"label":"Qatar","value":"Qatar","default":false},{"label":"Romania","value":"Romania","default":false},{"label":"Russian Federation","value":"Russian Federation","default":false},{"label":"Rwanda","value":"Rwanda","default":false},{"label":"Réunion","value":"Réunion","default":false},{"label":"Saint Barthélemy","value":"Saint Barthélemy","default":false},{"label":"Saint Helena, Ascension and Tristan da Cunha","value":"Saint Helena, Ascension and Tristan da Cunha","default":false},{"label":"Saint Kitts and Nevis","value":"Saint Kitts and Nevis","default":false},{"label":"Saint Lucia","value":"Saint Lucia","default":false},{"label":"Saint Martin (French part)","value":"Saint Martin (French part)","default":false},{"label":"Saint Pierre and Miquelon","value":"Saint Pierre and Miquelon","default":false},{"label":"Saint Vincent and the Grenadines","value":"Saint Vincent and the Grenadines","default":false},{"label":"Samoa","value":"Samoa","default":false},{"label":"San Marino","value":"San Marino","default":false},{"label":"Sao Tome and Principe","value":"Sao Tome and Principe","default":false},{"label":"Saudi Arabia","value":"Saudi Arabia","default":false},{"label":"Senegal","value":"Senegal","default":false},{"label":"Serbia","value":"Serbia","default":false},{"label":"Serbia and Montenegro","value":"Serbia and Montenegro","default":false},{"label":"Seychelles","value":"Seychelles","default":false},{"label":"Sierra Leone","value":"Sierra Leone","default":false},{"label":"Singapore","value":"Singapore","default":false},{"label":"Sint Maarten (Dutch part)","value":"Sint Maarten (Dutch part)","default":false},{"label":"Slovakia","value":"Slovakia","default":false},{"label":"Slovenia","value":"Slovenia","default":false},{"label":"Solomon Islands","value":"Solomon Islands","default":false},{"label":"Somalia","value":"Somalia","default":false},{"label":"South Africa","value":"South Africa","default":false},{"label":"South Georgia and the South Sandwich Islands","value":"South Georgia and the South Sandwich Islands","default":false},{"label":"South Sudan","value":"South Sudan","default":false},{"label":"Spain","value":"Spain","default":false},{"label":"Sri Lanka","value":"Sri Lanka","default":false},{"label":"Sudan","value":"Sudan","default":false},{"label":"Suriname","value":"Suriname","default":false},{"label":"Svalbard and Jan Mayen","value":"Svalbard and Jan Mayen","default":false},{"label":"Swaziland","value":"Swaziland","default":false},{"label":"Sweden","value":"Sweden","default":false},{"label":"Switzerland","value":"Switzerland","default":false},{"label":"Syrian Arab Republic","value":"Syrian Arab Republic","default":false},{"label":"Taiwan, Province of China","value":"Taiwan, Province of China","default":false},{"label":"Tajikistan","value":"Tajikistan","default":false},{"label":"Tanzania, United Republic of","value":"Tanzania, United Republic of","default":false},{"label":"Thailand","value":"Thailand","default":false},{"label":"Timor-Leste","value":"Timor-Leste","default":false},{"label":"Togo","value":"Togo","default":false},{"label":"Tokelau","value":"Tokelau","default":false},{"label":"Tonga","value":"Tonga","default":false},{"label":"Trinidad and Tobago","value":"Trinidad and Tobago","default":false},{"label":"Tunisia","value":"Tunisia","default":false},{"label":"Turkey","value":"Turkey","default":false},{"label":"Turkmenistan","value":"Turkmenistan","default":false},{"label":"Turks and Caicos Islands","value":"Turks and Caicos Islands","default":false},{"label":"Tuvalu","value":"Tuvalu","default":false},{"label":"Uganda","value":"Uganda","default":false},{"label":"Ukraine","value":"Ukraine","default":false},{"label":"United Arab Emirates","value":"United Arab Emirates","default":false},{"label":"United Kingdom","value":"United Kingdom","default":false},{"label":"United States","value":"United States","default":false},{"label":"United States Minor Outlying Islands","value":"United States Minor Outlying Islands","default":false},{"label":"Uruguay","value":"Uruguay","default":false},{"label":"Uzbekistan","value":"Uzbekistan","default":false},{"label":"Vanuatu","value":"Vanuatu","default":false},{"label":"Venezuela, Bolivarian Republic of","value":"Venezuela, Bolivarian Republic of","default":false},{"label":"Viet Nam","value":"Viet Nam","default":false},{"label":"Virgin Islands, British","value":"Virgin Islands, British","default":false},{"label":"Virgin Islands, U.S.","value":"Virgin Islands, U.S.","default":false},{"label":"Wallis and Futuna","value":"Wallis and Futuna","default":false},{"label":"Western Sahara","value":"Western Sahara","default":false},{"label":"Yemen","value":"Yemen","default":false},{"label":"Zambia","value":"Zambia","default":false},{"label":"Zimbabwe","value":"Zimbabwe","default":false},{"label":"Ã
land Islands","value":"Ã
land Islands","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_name","visibility":"PUBLIC","label":"self_serve_name","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_need_an_invoice","visibility":"PUBLIC","label":"Do you need an invoice?","required":false,"public-description":"","validation-expression":null,"input-type":"radio","select-options":[{"label":"Yes","value":"yes","default":false},{"label":"No","value":"no","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_personal_or_business","visibility":"PUBLIC","label":"self_serve_personal_or_business","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Personal","value":"Personal","default":false},{"label":"Business","value":"Business","default":false}],"range-start":0,"range-end":100,"range-step":5}
40433,{"slug":"self_serve_phone_number","visibility":"PUBLIC","label":"self_serve_phone_number","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_postcode","visibility":"PUBLIC","label":"self_serve_postcode","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_vat_number","visibility":"PUBLIC","label":"self_serve_vat_number","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"show_angel_onboard","visibility":"PUBLIC","label":"show angel onboard ","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"show_pro_onboard","visibility":"PUBLIC","label":"show pro onboard","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"show_pro_trial_onboard","visibility":"PUBLIC","label":"show pro trial onboard","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"show_reg_onboard","visibility":"PUBLIC","label":"show reg onboard","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"show_startup_onboard","visibility":"PUBLIC","label":"show startup onboard","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"sifted12","visibility":"PUBLIC","label":"Profession","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Founder / cofounder","value":"Founder / cofounder","default":false},{"label":"C-suite","value":"C-suite","default":false},{"label":"Investor (VC/private equity/angel etc)","value":"Investor (VC/private equity/angel etc)","default":false},{"label":"Corporate consultant","value":"Corporate consultant","default":false},{"label":"Startup service provider (e.g. brand agency etc)","value":"Startup service provider (e.g. brand agency etc)","default":false},{"label":"Student","value":"Student","default":false},{"label":"Academia","value":"Academia","default":false},{"label":"Startup employee (e.g. operations etc)","value":"Startup employee (e.g. operations etc)","default":false},{"label":"Policy / government","value":"Policy / government","default":false},{"label":"Media","value":"Media","default":false},{"label":"Unemployed / looking for work","value":"Unemployed / looking for work","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"sifted13","visibility":"PUBLIC","label":"Primary reason for joining","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Stay ahead of the competition","value":"Stay ahead of the competition","default":false},{"label":"Find actionable data insights","value":"Find actionable data insights","default":false},{"label":"Hear the views of those in similar roles","value":"Hear the views of those in similar roles","default":false},{"label":"Find a community of like-minded people","value":"Find a community of like-minded people","default":false},{"label":"Support quality tech journalism","value":"Support quality tech journalism","default":false},{"label":"Understand business best practices","value":"Understand business best practices","default":false},{"label":"Understand industry/sector trends","value":"Understand industry/sector trends","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"subscriberEventCheckIn","visibility":"PUBLIC","label":"Subscriber Event Check-in","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"talkcheckin","visibility":"PUBLIC","label":"talkCheckIn","required":false,"public-description":"","validation-expression":null,"input-type":"textarea","select-options":null,"range-start":null,"range-end":null,"range-step":null},{"slug":"talks_rsvp","visibility":"PUBLIC","label":"talksRsvp","required":false,"public-description":"","validation-expression":null,"input-type":"textarea","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"top_banner_dismissed_at","visibility":"PUBLIC","label":"Top_banner_dismissed_at","required":false,"public-description":"Top banner dismissal timestamp","validation-expression":null,"input-type":"text","select-options":null,"range-start":null,"range-end":null,"range-step":null},{"slug":"validation_last_timestamp","visibility":"PUBLIC","label":"validation_last_timestamp","required":false,"public-description":"JISC Student verification timestamp","validation-expression":null,"input-type":"text","select-options":null,"range-start":null,"range-end":null,"range-step":null},{"slug":"wants_main_newsletter","visibility":"PUBLIC","label":"Daily Newsletter","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"work_country","visibility":"PUBLIC","label":"Work Country","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Antilles","value":"Antilles","default":false},{"label":"Antigua and Barbuda","value":"Antigua and Barbuda","default":false},{"label":"Angola","value":"Angola","default":false},{"label":"Afghanistan","value":"Afghanistan","default":false},{"label":"Armenia","value":"Armenia","default":false},{"label":"Antarctica","value":"Antarctica","default":false},{"label":"Albania","value":"Albania","default":false},{"label":"Argentina","value":"Argentina","default":false},{"label":"Austria","value":"Austria","default":false},{"label":"American Samoa","value":"American Samoa","default":false},{"label":"Canada","value":"Canada","default":false},{"label":"Burkina Faso","value":"Burkina Faso","default":false},{"label":"Switzerland","value":"Switzerland","default":false},{"label":"Ã
land Islands","value":"Ã
land Islands","default":false},{"label":"France","value":"France","default":false},{"label":"Aruba","value":"Aruba","default":false},{"label":"Azerbaijan","value":"Azerbaijan","default":false},{"label":"Bahrain","value":"Bahrain","default":false},{"label":"Bosnia and Herzegovina","value":"Bosnia and Herzegovina","default":false},{"label":"Australia","value":"Australia","default":false},{"label":"Barbados","value":"Barbados","default":false},{"label":"Belgium","value":"Belgium","default":false},{"label":"Bulgaria","value":"Bulgaria","default":false},{"label":"Burundi","value":"Burundi","default":false},{"label":"Benin","value":"Benin","default":false},{"label":"Brunei Darussalam","value":"Brunei Darussalam","default":false},{"label":"Bermuda","value":"Bermuda","default":false},{"label":"Bolivia, Plurinational State of","value":"Bolivia, Plurinational State of","default":false},{"label":"Bonaire, Sint Eustatius and Saba","value":"Bonaire, Sint Eustatius and Saba","default":false},{"label":"Brazil","value":"Brazil","default":false},{"label":"Germany","value":"Germany","default":false},{"label":"Saint Barthélemy","value":"Saint Barthélemy","default":false},{"label":"Bahamas","value":"Bahamas","default":false},{"label":"Botswana","value":"Botswana","default":false},{"label":"Bouvet Island","value":"Bouvet Island","default":false},{"label":"Belarus","value":"Belarus","default":false},{"label":"Belize","value":"Belize","default":false},{"label":"Cocos (Keeling) Islands","value":"Cocos (Keeling) Islands","default":false},{"label":"Congo, the Democratic Republic of the","value":"Congo, the Democratic Republic of the","default":false},{"label":"Congo","value":"Congo","default":false},{"label":"Central African Republic","value":"Central African Republic","default":false},{"label":"Cabo Verde","value":"Cabo Verde","default":false},{"label":"Colombia","value":"Colombia","default":false},{"label":"Cameroon","value":"Cameroon","default":false},{"label":"Czech Republic","value":"Czech Republic","default":false},{"label":"Costa Rica","value":"Costa Rica","default":false},{"label":"China","value":"China","default":false},{"label":"Christmas Island","value":"Christmas Island","default":false},{"label":"Cyprus","value":"Cyprus","default":false},{"label":"Côte d'Ivoire","value":"Côte d'Ivoire","default":false},{"label":"Cuba","value":"Cuba","default":false},{"label":"Cook Islands","value":"Cook Islands","default":false},{"label":"Serbia and Montenegro","value":"Serbia and Montenegro","default":false},{"label":"Curaçao","value":"Curaçao","default":false},{"label":"Denmark","value":"Denmark","default":false},{"label":"Djibouti","value":"Djibouti","default":false},{"label":"Dominican Republic","value":"Dominican Republic","default":false},{"label":"Algeria","value":"Algeria","default":false},{"label":"Ethiopia","value":"Ethiopia","default":false},{"label":"Chile","value":"Chile","default":false},{"label":"Faroe Islands","value":"Faroe Islands","default":false},{"label":"Ecuador","value":"Ecuador","default":false},{"label":"Dominica","value":"Dominica","default":false},{"label":"Bangladesh","value":"Bangladesh","default":false},{"label":"Egypt","value":"Egypt","default":false},{"label":"Micronesia, Federated States of","value":"Micronesia, Federated States of","default":false},{"label":"Spain","value":"Spain","default":false},{"label":"Falkland Islands (Malvinas)","value":"Falkland Islands (Malvinas)","default":false},{"label":"Finland","value":"Finland","default":false},{"label":"Estonia","value":"Estonia","default":false},{"label":"Gabon","value":"Gabon","default":false},{"label":"Bhutan","value":"Bhutan","default":false},{"label":"Western Sahara","value":"Western Sahara","default":false},{"label":"Fiji","value":"Fiji","default":false},{"label":"Eritrea","value":"Eritrea","default":false},{"label":"Andorra","value":"Andorra","default":false},{"label":"United Kingdom","value":"United Kingdom","default":false},{"label":"Grenada","value":"Grenada","default":false},{"label":"Georgia","value":"Georgia","default":false},{"label":"French Guiana","value":"French Guiana","default":false},{"label":"Guernsey","value":"Guernsey","default":false},{"label":"Ghana","value":"Ghana","default":false},{"label":"Gibraltar","value":"Gibraltar","default":false},{"label":"Greenland","value":"Greenland","default":false},{"label":"Gambia","value":"Gambia","default":false},{"label":"Guinea","value":"Guinea","default":false},{"label":"Guadeloupe","value":"Guadeloupe","default":false},{"label":"Equatorial Guinea","value":"Equatorial Guinea","default":false},{"label":"Greece","value":"Greece","default":false},{"label":"South Georgia and the South Sandwich Islands","value":"South Georgia and the South Sandwich Islands","default":false},{"label":"Guatemala","value":"Guatemala","default":false},{"label":"Guam","value":"Guam","default":false},{"label":"Guinea-Bissau","value":"Guinea-Bissau","default":false},{"label":"Guyana","value":"Guyana","default":false},{"label":"Hong Kong","value":"Hong Kong","default":false},{"label":"Heard Island and McDonald Islands","value":"Heard Island and McDonald Islands","default":false},{"label":"Honduras","value":"Honduras","default":false},{"label":"Croatia","value":"Croatia","default":false},{"label":"Haiti","value":"Haiti","default":false},{"label":"Hungary","value":"Hungary","default":false},{"label":"Indonesia","value":"Indonesia","default":false},{"label":"Ireland","value":"Ireland","default":false},{"label":"Israel","value":"Israel","default":false},{"label":"Isle of Man","value":"Isle of Man","default":false},{"label":"India","value":"India","default":false},{"label":"British Indian Ocean Territory","value":"British Indian Ocean Territory","default":false},{"label":"Iraq","value":"Iraq","default":false}
40433,{"label":"Iran, Islamic Republic of","value":"Iran, Islamic Republic of","default":false},{"label":"Iceland","value":"Iceland","default":false},{"label":"Italy","value":"Italy","default":false},{"label":"Jersey","value":"Jersey","default":false},{"label":"Jamaica","value":"Jamaica","default":false},{"label":"Jordan","value":"Jordan","default":false},{"label":"Japan","value":"Japan","default":false},{"label":"Kenya","value":"Kenya","default":false},{"label":"Kyrgyzstan","value":"Kyrgyzstan","default":false},{"label":"Cambodia","value":"Cambodia","default":false},{"label":"Kiribati","value":"Kiribati","default":false},{"label":"Comoros","value":"Comoros","default":false},{"label":"Saint Kitts and Nevis","value":"Saint Kitts and Nevis","default":false},{"label":"Korea, Democratic People's Republic of","value":"Korea, Democratic People's Republic of","default":false},{"label":"Korea, Republic of","value":"Korea, Republic of","default":false},{"label":"Kuwait","value":"Kuwait","default":false},{"label":"Cayman Islands","value":"Cayman Islands","default":false},{"label":"Kazakhstan","value":"Kazakhstan","default":false},{"label":"Lao People's Democratic Republic","value":"Lao People's Democratic Republic","default":false},{"label":"Lebanon","value":"Lebanon","default":false},{"label":"Saint Lucia","value":"Saint Lucia","default":false},{"label":"Liechtenstein","value":"Liechtenstein","default":false},{"label":"Sri Lanka","value":"Sri Lanka","default":false},{"label":"Liberia","value":"Liberia","default":false},{"label":"Lesotho","value":"Lesotho","default":false},{"label":"Lithuania","value":"Lithuania","default":false},{"label":"Luxembourg","value":"Luxembourg","default":false},{"label":"Latvia","value":"Latvia","default":false},{"label":"Libya","value":"Libya","default":false},{"label":"Morocco","value":"Morocco","default":false},{"label":"Monaco","value":"Monaco","default":false},{"label":"Moldova, Republic of","value":"Moldova, Republic of","default":false},{"label":"Montenegro","value":"Montenegro","default":false},{"label":"Saint Martin (French part)","value":"Saint Martin (French part)","default":false},{"label":"Madagascar","value":"Madagascar","default":false},{"label":"Marshall Islands","value":"Marshall Islands","default":false},{"label":"Macedonia, the former Yugoslav Republic of","value":"Macedonia, the former Yugoslav Republic of","default":false},{"label":"Mali","value":"Mali","default":false},{"label":"Myanmar","value":"Myanmar","default":false},{"label":"Mongolia","value":"Mongolia","default":false},{"label":"Macao","value":"Macao","default":false},{"label":"Northern Mariana Islands","value":"Northern Mariana Islands","default":false},{"label":"Martinique","value":"Martinique","default":false},{"label":"Mauritania","value":"Mauritania","default":false},{"label":"Montserrat","value":"Montserrat","default":false},{"label":"Malta","value":"Malta","default":false},{"label":"Mauritius","value":"Mauritius","default":false},{"label":"Maldives","value":"Maldives","default":false},{"label":"Malawi","value":"Malawi","default":false},{"label":"Mexico","value":"Mexico","default":false},{"label":"Malaysia","value":"Malaysia","default":false},{"label":"Mozambique","value":"Mozambique","default":false},{"label":"Namibia","value":"Namibia","default":false},{"label":"New Caledonia","value":"New Caledonia","default":false},{"label":"Niger","value":"Niger","default":false},{"label":"Norfolk Island","value":"Norfolk Island","default":false},{"label":"Nigeria","value":"Nigeria","default":false},{"label":"Nicaragua","value":"Nicaragua","default":false},{"label":"Netherlands","value":"Netherlands","default":false},{"label":"Norway","value":"Norway","default":false},{"label":"Nepal","value":"Nepal","default":false},{"label":"Nauru","value":"Nauru","default":false},{"label":"Niue","value":"Niue","default":false},{"label":"New Zealand","value":"New Zealand","default":false},{"label":"Oman","value":"Oman","default":false},{"label":"Panama","value":"Panama","default":false},{"label":"Peru","value":"Peru","default":false},{"label":"French Polynesia","value":"French Polynesia","default":false},{"label":"Papua New Guinea","value":"Papua New Guinea","default":false},{"label":"Philippines","value":"Philippines","default":false},{"label":"Pakistan","value":"Pakistan","default":false},{"label":"Poland","value":"Poland","default":false},{"label":"Saint Pierre and Miquelon","value":"Saint Pierre and Miquelon","default":false},{"label":"Pitcairn","value":"Pitcairn","default":false},{"label":"Puerto Rico","value":"Puerto Rico","default":false},{"label":"Palestine, State of","value":"Palestine, State of","default":false},{"label":"Portugal","value":"Portugal","default":false},{"label":"Palau","value":"Palau","default":false},{"label":"Paraguay","value":"Paraguay","default":false},{"label":"Qatar","value":"Qatar","default":false},{"label":"Réunion","value":"Réunion","default":false},{"label":"Romania","value":"Romania","default":false},{"label":"Serbia","value":"Serbia","default":false},{"label":"Russian Federation","value":"Russian Federation","default":false},{"label":"Rwanda","value":"Rwanda","default":false},{"label":"Saudi Arabia","value":"Saudi Arabia","default":false},{"label":"Solomon Islands","value":"Solomon Islands","default":false},{"label":"Seychelles","value":"Seychelles","default":false},{"label":"Sudan","value":"Sudan","default":false},{"label":"Sweden","value":"Sweden","default":false},{"label":"Singapore","value":"Singapore","default":false},{"label":"Saint Helena, Ascension and Tristan da Cunha","value":"Saint Helena, Ascension and Tristan da Cunha","default":false},{"label":"Slovenia","value":"Slovenia","default":false},{"label":"Svalbard and Jan Mayen","value":"Svalbard and Jan Mayen","default":false},{"label":"Slovakia","value":"Slovakia","default":false},{"label":"Sierra Leone","value":"Sierra Leone","default":false},{"label":"San Marino","value":"San Marino","default":false},{"label":"Senegal","value":"Senegal","default":false},{"label":"Somalia","value":"Somalia","default":false},{"label":"Suriname","value":"Suriname","default":false},{"label":"South Sudan","value":"South Sudan","default":false},{"label":"Sao Tome and Principe","value":"Sao Tome and Principe","default":false},{"label":"El Salvador","value":"El Salvador","default":false},{"label":"Sint Maarten (Dutch part)","value":"Sint Maarten (Dutch part)","default":false},{"label":"Syrian Arab Republic","value":"Syrian Arab Republic","default":false},{"label":"Swaziland","value":"Swaziland","default":false},{"label":"Turks and Caicos Islands","value":"Turks and Caicos Islands","default":false},{"label":"Chad","value":"Chad","default":false},{"label":"French Southern Territories","value":"French Southern Territories","default":false},{"label":"Togo","value":"Togo","default":false},{"label":"Thailand","value":"Thailand","default":false},{"label":"Tajikistan","value":"Tajikistan","default":false},{"label":"Tokelau","value":"Tokelau","default":false},{"label":"Timor-Leste","value":"Timor-Leste","default":false},{"label":"Turkmenistan","value":"Turkmenistan","default":false},{"label":"Tunisia","value":"Tunisia","default":false},{"label":"Tonga","value":"Tonga","default":false},{"label":"Turkey","value":"Turkey","default":false},{"label":"Trinidad and Tobago","value":"Trinidad and Tobago","default":false},{"label":"Tuvalu","value":"Tuvalu","default":false},{"label":"Taiwan, Province of China","value":"Taiwan, Province of China","default":false},{"label":"Tanzania, United Republic of","value":"Tanzania, United Republic of","default":false},{"label":"Ukraine","value":"Ukraine","default":false},{"label":"Uganda","value":"Uganda","default":false},{"label":"United Arab Emirates","value":"United Arab Emirates","default":false},{"label":"United States Minor Outlying Islands","value":"United States Minor Outlying Islands","default":false},{"label":"United States","value":"United States","default":false},{"label":"Uruguay","value":"Uruguay","default":false},{"label":"Uzbekistan","value":"Uzbekistan","default":false},{"label":"Holy See (Vatican City State)","value":"Holy See (Vatican City State)","default":false},{"label":"Saint Vincent and the Grenadines","value":"Saint Vincent and the Grenadines","default":false},{"label":"Venezuela, Bolivarian Republic of","value":"Venezuela, Bolivarian Republic of","default":false},{"label":"Virgin Islands, British","value":"Virgin Islands, British","default":false},{"label":"Virgin Islands, U.S.","value":"Virgin Islands, U.S.","default":false},{"label":"Viet Nam","value":"Viet Nam","default":false},{"label":"Vanuatu","value":"Vanuatu","default":false},{"label":"Wallis and Futuna","value":"Wallis and Futuna","default":false},{"label":"Samoa","value":"Samoa","default":false},{"label":"Kosovo","value":"Kosovo","default":false},{"label":"Yemen","value":"Yemen","default":false},{"label":"Mayotte","value":"Mayotte","default":false},{"label":"South Africa","value":"South Africa","default":false},{"label":"Zambia","value":"Zambia","default":false},{"label":"Zimbabwe","value":"Zimbabwe","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"would_like_digital_event","visibility":"PUBLIC","label":"would like digital event","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"would_like_in_person_event","visibility":"PUBLIC","label":"would like in-person event","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"would-like-deeptech-newsletter","visibility":"PUBLIC","label":"AI & Deeptech Newsletter","required":false,"public-description":"","validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"would-like-event-newsletter","visibility":"PUBLIC","label":"Sifted Updates","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"would-like-fintech-newsletter","visibility":"PUBLIC","label":"Fintech Newsletter","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"would-like-futureproof-newsletter","visibility":"PUBLIC","label":"Up Round Newsletter","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"would-like-member-newsletter","visibility":"PUBLIC","label":"Sifted Members","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"would-like-scoop-newsletter","visibility":"PUBLIC","label":"The Scoop","required":false,"public-description":"","validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5}
40433,{"slug":"would-like-startup-life-newsletter","visibility":"PUBLIC","label":"Startup Life Newsletter","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"would-like-sustainability-newsletter","visibility":"PUBLIC","label":"Climate Tech Newsletter","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"wp_username","visibility":"PUBLIC","label":"wp_username","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5}],"siteStyles":"{\"color\":{\"text\":{\"main\":\"#000000\",\"tinted\":\"#333333\"},\"background\":{\"main\":\"#FFFFFF\",\"tinted\":\"#cccccc\"},\"accent\":{\"main\":\"#d81c5f\",\"tinted\":\"#e6417b\"},\"action\":{\"main\":\"#2322ff\",\"tinted\":\"#0000ee\"},\"warning\":{\"main\":\"#D90B00\",\"tinted\":\"#ff190d\"}},\"typography\":{\"title\":{\"font\":\"Roboto\",\"fallbackFont\":\"sans-serif\"},\"body\":{\"font\":\"Roboto\",\"fallbackFont\":\"sans-serif\"}},\"button\":{\"fontWeight\":\"normal\",\"fontSize\":\"16\",\"borderWidth\":\"0\",\"borderRadius\":\"9\",\"height\":\"50\"},\"input\":{\"borderColor\":\"#333333\",\"borderWidth\":\"1\",\"borderRadius\":\"5\",\"height\":\"50\"}}","twoFactorEmailAuthenticationEnabled":false,"requireEmailVerfication":true,"hideConfirmPasswordOnRegForm":false,"passwordStrengthRequirements":{"minLength":8,"requireUppercase":false,"requireNumbers":false,"requireSpecialCharacters":false},"ruleAnalyticsEnabled":true,"paymentProvider":"stripe","braintreeSandboxEnv":true,"braintreeMobilePaymentConfig":null,"stripeMobilePaymentConfig":"{\"apple\":{\"countryCode\":\"GB\"},\"google\":{\"countryCode\":\"GB\"}}","stripeAutomaticTaxEnabled":false,"dataLayerName":"ZephrDataLayer","trackFormDataLayerEvents":false,"recaptchaV2Enabled":false,"recaptchaV2SiteKey":null}})); 40434 </script>
40434<script type="text/javascript"> 40435 if (!window.Zephr) window.Zephr = {}; 40436 if (!window.Zephr.outcomes) window.Zephr.outcomes = {}; 40437 window.Zephr.outcomes["login-register"] = { 40438 featureLabel: "Display Login/Register Feature", 40439 outcomeId: "transformation/1", 40440 outcomeLabel: "Show Login/Register Form" 40441 }; 40442 </script>
40442</div></div></div></div><div data-login-form="checkout" class="hidden"><div class="LoginRegistrationForm_loginRegistrationForm__eKVrT" style="--fintech:url(https://www.datocms-assets.com/60124/1757341374-sifted_fintech.png?auto=format&fit=max&h=50&q=80);--futureproof:url(https://www.datocms-assets.com/60124/1757341374-sifted_upround.png?auto=format&fit=max&h=50&q=80);--startup-life:url(https://www.datocms-assets.com/60124/1757341374-sifted_startuplife.png?auto=format&fit=max&h=50&q=80);--deeptech:url(https://www.datocms-assets.com/60124/1757341374-sifted_ai-and-deeptech.png?auto=format&fit=max&h=50&q=80)"><div class="w-full bg-white" role="form"><div> <style>.zephr-form-progress-bar.svelte-19rlx92{width:100%;border:0;border-radius:20px;margin-top:10px}.zephr-form-progress-bar.svelte-19rlx92::-webkit-progress-bar{background-color:var(--zephr-color-background-tinted);border:0;border-radius:20px}.zephr-form-progress-bar.svelte-19rlx92::-webkit-progress-value{background-color:var(--zephr-color-text-tinted);border:0;border-radius:20px}.zephr-progress-bar-step.svelte-19rlx92{margin:auto;color:var(--zephr-color-text-tinted);font-size:var(--zf-subtext-fontSize);font-family:var(--zf-root-fontFamily);cursor:pointer}.zephr-progress-bar-step.svelte-19rlx92:first-child{margin-left:0}.zephr-progress-bar-step.svelte-19rlx92:last-child{margin-right:0}.zephr-progress-bar-step.disabled.svelte-19rlx92{cursor:default} 40443.zephr-form-button-top-margin.svelte-gd8hr6{margin-top:20px}.zephr-form-button.svelte-gd8hr6{padding:0 20px;text-decoration:none;text-transform:capitalize;border-radius:calc(var(--zephr-button-borderRadius) * 1px);font-size:var(--zf-button-fontSize);font-weight:normal;cursor:pointer;border-style:solid;border-width:calc(var(--zephr-button-borderWidth) * 1px);border-color:var(--zephr-color-action-tinted);transition:backdrop-filter 0.2s, background-color 0.2s;display:flex;justify-content:center;align-items:center;width:100%;background-color:var(--zephr-color-action-main);color:var(--zf-button-color);position:relative;overflow:hidden;font-family:var(--zf-root-fontFamily)}.zephr-form-button.svelte-gd8hr6:hover{background-color:var(--zephr-color-action-tinted);border-color:var(--zephr-color-action-tinted)}.zephr-form-button.svelte-gd8hr6:disabled{background-color:var(--zephr-color-background-tinted);border-color:var(--zephr-color-background-tinted)}.zephr-form-button.svelte-gd8hr6:disabled:hover{background-color:var(--zephr-color-background-tinted);border-color:var(--zephr-color-background-tinted)}.zephr-form-button.inputHeight.svelte-gd8hr6{height:calc(var(--zephr-input-height) * 1px)}
40443.zephr-form-button.svelte-gd8hr6:not(inputHeight){height:calc(var(--zephr-button-height) * 1px)}.zephr-form-button.aside.svelte-gd8hr6{width:auto;margin-left:10px} 40444.payment-option-wrapper.svelte-hcxnnv>input[type="radio"].svelte-hcxnnv{display:none}.payment-option-wrapper.svelte-hcxnnv.svelte-hcxnnv{display:flex;flex:1 0 28%;width:100%}.payment-option-wrapper.svelte-hcxnnv.svelte-hcxnnv:only-child{max-width:325px}.box-container.svelte-hcxnnv.svelte-hcxnnv{display:flex;flex-direction:column;flex:1 1 0;width:0;text-align:center}.inner-box.svelte-hcxnnv.svelte-hcxnnv{border:var(--zf-payment-options-border);border-radius:var(--zf-payment-options-borderRadius);background-color:var(--zf-payment-options-bgColor);height:100%;display:flex;flex-direction:column}.box-container.highlighted.svelte-hcxnnv .inner-box.svelte-hcxnnv{border-top-left-radius:0;border-top-right-radius:0}.box-container.svelte-hcxnnv .box-content.svelte-hcxnnv{flex-grow:1;padding:30px 20px;margin:0 10px;overflow:hidden}.box-container.svelte-hcxnnv .styled-box-content.svelte-hcxnnv{color:var(--zephr-color-text-main);font-family:var(--zf-root-fontFamily)} 40445 .box-container .styled-box-content h1, 40446 .box-container .styled-box-content h2, 40447 .box-container .styled-box-content h3, 40448 .box-container .styled-box-content p, 40449 .box-container .styled-box-content span 40450 {color:var(--zephr-color-text-main);font-family:var(--zf-root-fontFamily)}.payment-options-container .box-container .styled-box-content button{color:#fff;background-color:var(--zephr-color-action-main);border-width:calc(var(--zephr-button-borderWidth) * 1px);border-color:var(--zephr-color-action-tinted);border-radius:calc(var(--zephr-button-borderRadius) * 1px);font-size:var(--zf-button-fontSize)}.payment-options-container .box-container .styled-box-content button:hover{background-color:var(--zephr-color-action-tinted);border-color:var(--zephr-color-action-tinted)}.payment-options-container .box-container .box-content img{max-width:210px;height:auto}.box-top.svelte-hcxnnv.svelte-hcxnnv{height:40px}.box-container.highlighted.svelte-hcxnnv .box-top.svelte-hcxnnv{color:var(--zf-payment-options-highlighted-color);background-color:var(--zf-payment-options-highlighted-bgColor);position:relative;border:var(--zf-payment-options-border);border-bottom-width:0;border-radius:var(--zf-payment-options-borderRadius);border-bottom-left-radius:0;border-bottom-right-radius:0;display:flex;justify-content:center;align-items:center}.box-container.highlighted.svelte-hcxnnv .box-top .box-top-text.svelte-hcxnnv{font-weight:bold}.box-container.svelte-hcxnnv .box-bottom.svelte-hcxnnv{min-height:60px;display:flex;flex-direction:column;align-items:center;padding:20px 0 30px;margin:0 30px}.button-sub-text.svelte-hcxnnv.svelte-hcxnnv{margin-top:10px} 40451.payment-options-container.svelte-tqlhky{flex-wrap:wrap;font-size:var(--zf-payment-options-fontSize);width:100%;color:var(--zf-payment-options-color);line-height:18px;padding:31px 0 20px;display:grid;justify-content:space-evenly;justify-items:center;grid-template-columns:repeat(auto-fit, minmax(300px, 1fr));gap:13px}@media(max-width: 340px){.payment-options-container.svelte-tqlhky{grid-template-columns:repeat(auto-fit, minmax(280px, 1fr))}} 40452.zephr-form-error-message-min-height.svelte-1ko2lqj{min-height:1.1em}.zephr-form-error-message.svelte-1ko2lqj{color:var(--zephr-color-warning-main);font-size:var(--zf-subtext-fontSize);margin-top:0.5em;position:relative;margin-left:1.2em;margin-right:1.2em} 40453.zephr-form-input-inner-container.svelte-88cmol{position:relative}.zephr-form-input-full-width.svelte-88cmol{width:100%}.zephr-form-input.svelte-88cmol{width:100%;display:block;height:calc(var(--zephr-input-height) * 1px);padding-left:8px;font-size:var(--zf-input-fontSize);border:calc(var(--zephr-input-borderWidth) * 1px) solid 40454 var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);transition:border-color 0.25s ease, box-shadow 0.25s ease;outline:0;color:var(--zephr-color-text-main);background-color:var(--zf-input-bgColor);font-family:var(--zf-root-fontFamily)}.zephr-form-input.svelte-88cmol::placeholder{color:var(--zephr-color-background-tinted);font-family:var(--zf-root-fontFamily)}.zephr-form-input-checkbox.svelte-88cmol{width:auto;height:auto;margin:8px 5px 0 0;float:left}.zephr-form-input-radio.svelte-88cmol{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.zephr-form-input-color[type="color"].svelte-88cmol{width:50px;padding:0;border-radius:50%}.zephr-form-input-color[type="color"].svelte-88cmol::-webkit-color-swatch{border:none;border-radius:50%;padding:0}.zephr-form-input-color[type="color"].svelte-88cmol::-webkit-color-swatch-wrapper{border:none;border-radius:50%;padding:0}.zephr-form-input.disabled.svelte-88cmol,.zephr-form-input.disabled.svelte-88cmol:hover{border:calc(var(--zephr-input-borderWidth) * 1px) solid 40455 var(--zephr-input-borderColor);background-color:var(--zephr-color-background-tinted)}.zephr-form-input.error.svelte-88cmol{border:1px solid var(--zephr-color-warning-main)} 40456.zephr-form-input-label.svelte-yaw4yg.svelte-yaw4yg{margin-top:10px;display:block;line-height:30px;font-size:var(--zf-subtext-fontSize);color:var(--zephr-color-text-tinted);font-family:var(--zf-root-fontFamily)}.zephr-form-input-label.svelte-yaw4yg.svelte-yaw4yg:first-child{margin-top:0}.zephr-form-input-label.svelte-yaw4yg span.svelte-yaw4yg{display:block} 40457.svelte-fa-base{height:1em;overflow:visible;transform-origin:center;vertical-align:-0.125em}.svelte-fa-fw{text-align:center;width:1.25em}.svelte-fa-pull-left.svelte-f5ydbn{float:left}.svelte-fa-pull-right.svelte-f5ydbn{float:right}.svelte-fa-size-lg.svelte-f5ydbn{font-size:1.33333em;line-height:0.75em;vertical-align:-0.225em}.svelte-fa-size-sm.svelte-f5ydbn{font-size:0.875em}.svelte-fa-size-xs.svelte-f5ydbn{font-size:0.75em}.spin.svelte-f5ydbn{animation:svelte-f5ydbn-spin 2s 0s infinite linear}.pulse.svelte-f5ydbn{animation:svelte-f5ydbn-spin 1s infinite steps(8)}@keyframes svelte-f5ydbn-spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}
40458.svelte-fa-layers.svelte-ff6okk{display:inline-block;position:relative}.svelte-fa-layers.svelte-ff6okk .svelte-fa{position:absolute;bottom:0;left:0;right:0;top:0;margin:auto;text-align:center}.svelte-fa-layers.svelte-ff6okk .svelte-fa-layers-text{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.svelte-fa-layers.svelte-ff6okk .svelte-fa-layers-text span{display:inline-block}.svelte-fa-pull-left.svelte-ff6okk{float:left}.svelte-fa-pull-right.svelte-ff6okk{float:right}.svelte-fa-size-lg.svelte-ff6okk{font-size:1.33333em;line-height:0.75em;vertical-align:-0.225em}.svelte-fa-size-sm.svelte-ff6okk{font-size:0.875em}.svelte-fa-size-xs.svelte-ff6okk{font-size:0.75em} 40459.container.svelte-1j4jgwv{display:inline-block;height:auto}.svelte-fa-size-lg.svelte-1j4jgwv{font-size:1.33333em;line-height:0.75em;vertical-align:-0.225em}.svelte-fa-size-sm.svelte-1j4jgwv{font-size:0.875em}.svelte-fa-size-xs.svelte-1j4jgwv{font-size:0.75em} 40460.zephr-form-password-match.svelte-tsrdk3.svelte-tsrdk3{margin:20px 0;justify-content:center}.zephr-form-password-match.svelte-tsrdk3 ul.svelte-tsrdk3{padding-left:0;margin:0}.zephr-form-password-requirement.svelte-tsrdk3.svelte-tsrdk3{display:flex;align-items:center;color:var(--zephr-color-text-tinted);font-size:var(--zf-subtext-fontSize);min-height:20px;font-family:var(--zf-root-fontFamily)}.zephr-form-password-requirement-icon.svelte-tsrdk3.svelte-tsrdk3{margin-right:10px;font-size:15px} 40461.zephr-form-password-progress.svelte-1bpbne4.svelte-1bpbne4{display:flex;margin-top:10px}.zephr-form-password-bar.svelte-1bpbne4.svelte-1bpbne4{width:100%;height:4px;border-radius:2px}.zephr-form-password-bar.svelte-1bpbne4.svelte-1bpbne4:not(:first-child){margin-left:8px}.zephr-form-password-requirements.svelte-1bpbne4.svelte-1bpbne4{margin:20px 0;justify-content:center}.zephr-form-password-requirements.svelte-1bpbne4 ul.svelte-1bpbne4{padding-left:0;margin:0}.zephr-form-password-requirement.svelte-1bpbne4.svelte-1bpbne4{display:flex;align-items:center;color:var(--zephr-color-text-tinted);font-size:var(--zf-subtext-fontSize);min-height:20px;font-family:var(--zf-root-fontFamily)}.zephr-form-password-requirement-icon.svelte-1bpbne4.svelte-1bpbne4{margin-right:10px;font-size:15px} 40462.apple-pay-button{display:inline-block;-webkit-appearance:-apple-pay-button;-apple-pay-button-type:pay;width:440px;max-width:100%;height:45px;margin-top:20px}.apple-pay-button-black{-apple-pay-button-style:black}#google-pay-button.svelte-1drqjgk{width:440px;max-width:100%;height:45px;margin-top:20px} 40463#braintree-dropin-container.svelte-w52z2j{margin-top:1em;margin-bottom:1em} 40464.stripe-element.svelte-1bi6tmz{margin-top:2em;margin-bottom:1em;border:calc(var(--zephr-input-borderWidth) * 1px) solid 40465 var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);padding:1em}.stripe-element.svelte-1bi6tmz iframe:focus{outline:none !important} 40466#stripe-mobile-pay-button.svelte-12ehv8b{width:440px;max-width:100%;height:45px;margin-top:20px} 40467.spinner-container.svelte-1c5ov4v{text-align:center;padding:2em} 40468#zuora_payment.svelte-1vnsk3p{margin-top:1em;margin-bottom:1em}.zuora-disabled-iframe-container.svelte-1vnsk3p .z_hppm_iframe{pointer-events:none;opacity:0.3}.zuora-dynamic-form-disabled.svelte-1vnsk3p{pointer-events:none;opacity:0.3}.spinner-overlay.svelte-1vnsk3p{width:100%;height:100%;position:absolute;top:0;left:0;display:flex;align-items:center;justify-content:center}.form-wrapper.svelte-1vnsk3p{position:relative} 40469#payment-element.svelte-1ejcgdg{margin-top:1em;margin-bottom:1em;border:calc(var(--zephr-input-borderWidth) * 1px) solid 40470 var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);padding:1em} 40471.zephr-form-checkbox.svelte-ud4i0a.svelte-ud4i0a.svelte-ud4i0a{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.zephr-form-checkbox-label.svelte-ud4i0a.svelte-ud4i0a.svelte-ud4i0a{display:flex;align-items:center;font-family:var(--zf-root-fontFamily)}.zephr-form-checkmark.svelte-ud4i0a.svelte-ud4i0a.svelte-ud4i0a{position:relative;box-sizing:border-box;height:23px;width:23px;background-color:#fff;border:calc(var(--zephr-input-borderWidth) * 1px) solid 40472 var(--zephr-input-borderColor);border-radius:6px;margin-right:12px;cursor:pointer}.zephr-form-checkmark.checked.svelte-ud4i0a.svelte-ud4i0a.svelte-ud4i0a{border-color:var(--zephr-color-action-main)}.zephr-form-checkmark.checked.svelte-ud4i0a.svelte-ud4i0a.svelte-ud4i0a:after{content:"";position:absolute;width:6px;height:13px;border:solid var(--zephr-color-action-main);border-width:0 2px 2px 0;transform:rotate(45deg);top:3px;left:8px;box-sizing:border-box}.zephr-form-checkmark.disabled.svelte-ud4i0a.svelte-ud4i0a.svelte-ud4i0a{border:calc(var(--zephr-input-borderWidth) * 1px) solid 40473 var(--zephr-color-background-tinted)}.zephr-form-checkmark.disabled.checked.svelte-ud4i0a.svelte-ud4i0a.svelte-ud4i0a:after{border:solid var(--zephr-color-background-tinted);border-width:0 2px 2px 0}.zephr-form-checkmark.error.svelte-ud4i0a.svelte-ud4i0a.svelte-ud4i0a{border:calc(var(--zephr-input-borderWidth) * 1px) solid 40474 var(--zephr-color-warning-main)}.zephr-form-checkbox.svelte-ud4i0a:focus-visible+.zephr-form-checkbox-label.svelte-ud4i0a>.zephr-form-checkmark.svelte-ud4i0a{outline:2px solid var(--zephr-color-action-main);outline-color:-webkit-focus-ring-color} 40475.zephr-form-payment-auto-renew-toggle.svelte-1yfwddr{margin:10px 0;font-size:var(--zf-font-size-base);font-family:var(--zf-root-fontFamily)}
40476.check-image.svelte-w5z6iw{height:1.2em;vertical-align:middle;margin-right:0.5em}.zephr-form-success-message.svelte-w5z6iw{color:var(--zephr-color-text-main);display:inline-block} 40477.zephr-form-verification-resend-link-container.svelte-1yj9ceh{margin-bottom:2em}.zephr-form-verification-resend-link.svelte-1yj9ceh,.zephr-form-verification-resend-text.svelte-1yj9ceh{float:right;position:absolute;padding-right:2px;padding-top:0.5em;padding-left:0.5em;font-size:var(--zf-subtext-fontSize);right:0}.zephr-form-verification-resend-link.svelte-1yj9ceh{cursor:pointer;color:var(--zf-link-color)} 40478.zephr-form-custom-text.svelte-3sd7s2{margin-top:1em;margin-bottom:1em;color:var(--zephr-color-text-main)} 40479.zephr-form-input-radio.svelte-1cbmaif.svelte-1cbmaif.svelte-1cbmaif{position:absolute;opacity:0;cursor:pointer;height:0;width:0}.zephr-form-radio-label.svelte-1cbmaif.svelte-1cbmaif.svelte-1cbmaif{display:flex;align-items:center;font-family:var(--zf-root-fontFamily)}.zephr-form-radio-dot.svelte-1cbmaif.svelte-1cbmaif.svelte-1cbmaif{display:block;position:relative;box-sizing:border-box;height:23px;width:23px;background-color:#fff;border:1px solid #ebebeb;border-radius:50%;margin-right:12px;cursor:pointer}.checked.svelte-1cbmaif.svelte-1cbmaif.svelte-1cbmaif{border-color:var(--zephr-color-action-main)}.checked.svelte-1cbmaif.svelte-1cbmaif.svelte-1cbmaif:after{content:"";position:absolute;width:17px;height:17px;background:var(--zephr-color-action-main);border-radius:50%;top:2px;left:2px}.disabled.checked.svelte-1cbmaif.svelte-1cbmaif.svelte-1cbmaif:after{background:var(--zephr-color-background-tinted)}.error.svelte-1cbmaif.svelte-1cbmaif.svelte-1cbmaif{border:1px solid var(--zephr-color-warning-main)}.zephr-form-input-radio.svelte-1cbmaif:focus-visible+.zephr-form-radio-label.svelte-1cbmaif>.zephr-form-radio-dot.svelte-1cbmaif{outline:2px solid var(--zephr-color-action-main);outline-color:-webkit-focus-ring-color} 40480.zephr-form-input-error-text.svelte-wlae04{color:var(--zephr-color-warning-main);font-family:var(--zf-root-fontFamily)}.zephr-form-input-select.svelte-wlae04{display:block;appearance:auto;width:100%;height:calc(var(--zephr-input-height) * 1px);font-size:var(--zf-input-fontSize);font-family:var(--zf-root-fontFamily);border:calc(var(--zephr-input-borderWidth) * 1px) solid 40481 var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);transition:border-color 0.25s ease, box-shadow 0.25s ease;outline:0;color:var(--zephr-color-text-main);background-color:var(--zf-input-bgColor);padding:10px}.zephr-form-input-select.unselected.svelte-wlae04{color:var(--zephr-color-background-tinted)}.zephr-form-input-select.error.svelte-wlae04{border-color:var(--zephr-color-warning-main)}.zephr-form-input-textarea.svelte-wlae04{display:block;min-height:calc(var(--zephr-input-height) * 1px);min-width:100%;max-width:100%;background-color:var(--zf-input-bgColor);border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);transition:border-color 0.25s ease, box-shadow 0.25s ease;color:var(--zephr-color-text-main);font-size:var(--zf-input-fontSize);font-weight:300;padding:16px 8px;font-family:var(--zf-root-fontFamily);outline:0}.zephr-form-input-textarea.svelte-wlae04::placeholder{color:var(--zephr-color-background-tinted);font-family:var(--zf-root-fontFamily)}.zephr-form-input-slider-output.svelte-wlae04{margin:13px 0 0 10px} 40482.zephr-form-link.svelte-14vxk2u{margin:10px 0;color:var(--zf-link-color);text-decoration:underline;cursor:pointer;font-family:var(--zf-root-fontFamily)}.zephr-form-link-disabled.svelte-14vxk2u{color:var(--zephr-color-text-main);cursor:not-allowed;text-decoration:none}.zephr-form-link-no-underline.svelte-14vxk2u{text-decoration:none} 40483.zephr-form-reset-link-container.svelte-49aomy{min-height:2.5em}.zephr-form-link-message.svelte-49aomy{margin:10px 0 10px 20px;font-family:var(--zf-root-fontFamily)} 40484.zephr-form-reset-link-container.svelte-49aomy{min-height:2.5em}.zephr-form-link-message.svelte-49aomy{margin:10px 0 10px 20px;font-family:var(--zf-root-fontFamily)} 40485.zephr-form-google-icon.svelte-aktnoc{width:20px} 40486.zephr-form-social-sign-in.svelte-1e2xtn4{align-items:center}.zephr-form-social-sign-in-button.svelte-1e2xtn4{width:100%;min-height:55px;padding:15px;color:#000;background-color:#fff;box-shadow:0 0 5px rgba(0, 0, 0, 0.3);border-radius:10px;font-size:17px;
40486display:flex;align-items:center;cursor:pointer;margin-top:20px;font-family:var(--zf-root-fontFamily)}.zephr-form-social-sign-in-button.svelte-1e2xtn4:hover{background-color:#fafafa}.zephr-form-social-sign-in-icon.svelte-1e2xtn4{display:flex;justify-content:center;margin-right:30px;width:25px} 40487.zephr-form-promo-input-container.svelte-xf8v79{flex:0.6}.zephr-form-promo-activate-line.svelte-xf8v79{display:flex;cursor:pointer;min-height:calc(var(--zephr-input-height) * 1px);margin:1em 1.2em;font-size:var(--zf-payment-summary-fontSize);line-height:calc(var(--zephr-input-height) * 1px);color:var(--zf-link-color)}.zephr-form-promo-line.svelte-xf8v79{display:flex;min-height:calc(var(--zephr-input-height) * 1px);margin:1em 1.2em}.zephr-form-addon-line.svelte-xf8v79{display:flex;padding-top:1em;padding-bottom:1em;margin-left:1.2em}.zephr-form-summary-prorate-disclaimer.svelte-xf8v79{padding-top:0.25em;padding-left:1em;color:var(--zephr-color-text-tinted)}.zephr-form-summary-charge-description.svelte-xf8v79{color:var(--zephr-color-text-tinted)}.zephr-form-charge-line.svelte-xf8v79{display:flex;padding-top:1em;margin-left:1.2em;padding-left:1em}.zephr-form-summary-line-right.svelte-xf8v79{margin-left:auto;margin-right:1.5em;text-align:right}.zephr-form-summary-line-left.svelte-xf8v79{margin-left:10px}.zephr-form-summary-promo-middle.svelte-xf8v79{position:relative;top:calc(var(--zephr-input-height) * 0.5px)}.zephr-form-summary.svelte-xf8v79{border:var(--zf-payment-summary-border);border-radius:var(--zf-payment-summary-borderRadius);padding-top:1em;padding-bottom:1em;font-size:var(--zf-payment-summary-fontSize);margin-top:1.5em;margin-bottom:1.5em;color:var(--zf-payment-summary-color);background-color:var(--zf-payment-summary-bgColor)}.zephr-form-summary.svelte-xf8v79:first-child{margin-top:0}.zephr-form-summary-title.svelte-xf8v79{margin-bottom:1em;margin-left:1.2em}.zephr-form-summary-price-line.svelte-xf8v79{font-weight:bold;padding-left:1em;padding-top:1em}.zephr-form-summary-line.svelte-xf8v79{display:flex}.zephr-form-summary-price-line-upper.svelte-xf8v79{border-top:var(--zf-payment-summary-border);margin-top:1em}.zephr-form-summary-line-title.svelte-xf8v79{flex:0 0 65%;margin-left:1.2em}.zephr-form-summary-line-price.svelte-xf8v79{flex:1;text-align:right;margin-right:1.5em}.zephr-form-discount-line.svelte-xf8v79{display:flex;justify-content:space-between;margin:0.5em 0;margin-left:1.2em} 40488.zephr-form-divider-container.svelte-1jhhsfx{display:flex;align-items:center;justify-content:center;margin:1.5em 0}.zephr-form-divider-line.svelte-1jhhsfx{height:1px;width:50%;margin:0 5px;background-color:var(--zephr-color-text-tinted)}.zephr-form-divider-line-complete.svelte-1jhhsfx{height:1px;width:100%;margin:0 5px;background-color:var(--zephr-color-text-tinted)}.zephr-form-divider-text.svelte-1jhhsfx{margin:0 12px;color:var(--zephr-color-text-main);font-size:var(--zf-info-fontSize);font-family:var(--zf-root-fontFamily);white-space:nowrap} 40489.zephr-form-login-link.svelte-1jmemom.svelte-1jmemom{margin-top:1em;margin-bottom:1em;text-align:center}.zephr-form-login-link.svelte-1jmemom>a.svelte-1jmemom{color:var(--zf-link-color);margin-left:0.25em} 40490.zephr-form-account-code-container.svelte-1hhep92{margin-top:1.5em} 40491.zephr-form-invitation-container.svelte-1qkv7d3{border:1px solid;margin:1.5em 0;padding:20px;color:var(--zephr-color-text-main)}.zephr-form-invitation-title.svelte-1qkv7d3{margin-bottom:20px;font-weight:bold;font-family:var(--zf-root-fontFamily)}.zephr-form-invitation-email.svelte-1qkv7d3{display:flex;align-items:center}.zephr-form-invitation-input-container.svelte-1qkv7d3{flex-grow:1}.zephr-form-invitation-success-message.svelte-1qkv7d3{margin-top:0.5em} 40492.subscription-option-product-label{margin-bottom:5px;margin-top:0}.subscription-option-wrapper.svelte-1gr56ov{display:flex;flex:1 0 28%;width:100%;max-width:400px}.subscription-option-wrapper.svelte-1gr56ov:only-child{max-width:325px}.subscription-option-box{display:flex;flex-direction:column;flex:1 1 0;width:0}.info-row.svelte-1gr56ov{margin-top:7px;margin-bottom:7px}.info-label.svelte-1gr56ov{display:inline;margin-right:10px}.info.svelte-1gr56ov{display:inline}hr.svelte-1gr56ov{border-width:1px 0px 0px;margin:5px 5px;border-color:var(--zephr-color-background-tinted)}.inner-box.svelte-1gr56ov{border:var(--zf-payment-options-border);border-radius:var(--zf-payment-options-borderRadius);background-color:var(--zf-payment-options-bgColor);height:100%;display:flex;flex-direction:column;flex-grow:1;padding:20px 20px;margin:0 10px;overflow:hidden}.change-disabled-label.svelte-1gr56ov{margin-top:15px} 40493.subscription-options-container.svelte-bnxnvq{flex-wrap:wrap;font-size:var(--zf-payment-options-fontSize);width:100%;color:var(--zf-payment-options-color);line-height:18px;padding:31px 0 20px;display:grid;justify-content:space-evenly;justify-items:center;grid-template-columns:repeat(auto-fit, minmax(300px, 1fr));gap:13px}@media(max-width: 340px){.subscription-options-container.svelte-bnxnvq{grid-template-columns:repeat(auto-fit, minmax(280px, 1fr))}} 40494.subscription-list-item.svelte-1qhs7yc{font-family:var(--zephr-typography-body-font), var(--zephr-typography-body-fallbackFont);color:var(--zephr-color-text-main)}hr.svelte-1qhs7yc{border-width:1px 0px 0px;margin:20px 0px;border-color:var(--zephr-color-background-tinted)}.inactive.svelte-1qhs7yc{text-decoration:line-through}h3.svelte-1qhs7yc{margin:0 0 20px}.inner-box.svelte-1qhs7yc{display:flex;flex-direction:column;flex-grow:1;padding:30px 20px;margin:0 10px;overflow:hidden;min-width:300px}.gift-pill.svelte-1qhs7yc{display:inline-block;background-color:var(--zephr-color-background-tinted);color:var(--zephr-color-text-main);font-size:0.75rem;font-weight:600;padding:3px 8px;border-radius:12px;margin-left:8px;vertical-align:middle} 40495.zephr-form-tablink.svelte-py0ruk{display:flex;align-items:center;cursor:pointer;justify-content:space-between;text-decoration:none;color:var(--zephr-color-text-main);font-weight:590;padding:var(--zf-list-subscriptions-section-padding);border-bottom:1px solid var(--zephr-color-background-tinted)}.zephr-form-tablink.svelte-py0ruk:hover{text-decoration:underline}.zephr-form-tablink.svelte-py0ruk:last-child{border-bottom:none 40496 } 40497.zephr-subscription-list-box-item.svelte-xxnasy.svelte-xxnasy{font-family:var(--zephr-typography-body-font), 40498 var(--zephr-typography-body-fallbackFont);color:var(--zephr-color-text-main);max-width:var(--zf-list-subscriptions-container-maxWidth);border-radius:var(--zf-list-subscriptions-container-borderRadius);border:var(--zf-list-subscriptions-container-border);padding:var(--zf-list-subscriptions-container-padding)}.zephr-inner-box.svelte-xxnasy.svelte-xxnasy{display:flex;flex-direction:column;flex-grow:1}.zephr-box-item-information.svelte-xxnasy.svelte-xxnasy{font-size:var(--zf-list-subscriptions-info-fontSize);color:var(--zephr-color-text-tinted);margin-top:8px}.zephr-section.svelte-xxnasy.svelte-xxnasy{padding:var(--zf-list-subscriptions-section-padding);border-bottom:1px solid var(--zephr-color-background-tinted);gap:8px}.zephr-section.svelte-xxnasy.svelte-xxnasy:first-child{padding-top:0;border-bottom:none}.zephr-section.svelte-xxnasy.svelte-xxnasy:last-child{border-bottom:none}.zephr-section.svelte-xxnasy span.svelte-xxnasy{font-weight:590}.zephr-section.svelte-xxnasy h2.svelte-xxnasy{margin:0}.gift-pill.svelte-xxnasy.svelte-xxnasy{display:inline-block;background-color:var(--zephr-color-background-tinted);color:var(--zephr-color-text-main);font-size:0.75rem;font-weight:600;padding:3px 8px;border-radius:12px;margin-left:8px;vertical-align:middle}.auto-renew-toggle-container.svelte-xxnasy.svelte-xxnasy{display:flex;align-items:center;gap:8px}.updating-indicator.svelte-xxnasy.svelte-xxnasy{font-size:0.85rem;color:var(--zephr-color-text-tinted);font-style:italic}.status-message.svelte-xxnasy.svelte-xxnasy{margin-top:8px;font-size:0.85rem}.status-message.success.svelte-xxnasy.svelte-xxnasy{color:#28a745}.status-message.error.svelte-xxnasy.svelte-xxnasy{color:#dc3545} 40499.subscriptions-list-container.svelte-ldb1rq{margin-top:40px;
40499display:flex;flex-direction:column;gap:40px} 40500.subscription-custom-fields-update.svelte-t6s0pv{max-width:600px;margin:0 auto;padding:1rem}.title.svelte-t6s0pv{font-size:1.5rem;font-weight:600;margin-bottom:0.5rem;color:var(--text-color, #333)}.description.svelte-t6s0pv{color:var(--text-secondary, #666);margin-bottom:1rem;line-height:1.5}.subscription-info.svelte-t6s0pv{background:var(--background-light, #f8f9fa);padding:0.75rem;border-radius:4px;margin-bottom:1rem;border:1px solid var(--border-color, #e0e0e0)}.custom-fields-form.svelte-t6s0pv{display:flex;flex-direction:column;gap:1.5rem}.field-group.svelte-t6s0pv{display:flex;flex-direction:column;gap:0.25rem;padding:1rem;background:var(--background-light, #f8f9fa);border-radius:4px;border:1px solid var(--border-color, #e0e0e0)}.textarea-input.svelte-t6s0pv{min-height:80px;padding:0.75rem;border:1px solid var(--border-color, #ccc);border-radius:4px;font-family:inherit;font-size:1rem;resize:vertical;transition:border-color 0.2s}.textarea-input.svelte-t6s0pv:focus{outline:none;border-color:var(--primary-color, #007bff);box-shadow:0 0 0 2px var(--primary-color-alpha, rgba(0, 123, 255, 0.25))}.textarea-input.error.svelte-t6s0pv{border-color:var(--error-color, #dc3545)}.textarea-input.svelte-t6s0pv:disabled{background-color:var(--background-disabled, #f5f5f5);
40500cursor:not-allowed}.error-message.svelte-t6s0pv{margin-top:0.5rem}.success-message.svelte-t6s0pv{padding:0.75rem;background:var(--success-background, #d4edda);border:1px solid var(--success-border, #c3e6cb);border-radius:4px;margin-top:0.5rem}.success-text.svelte-t6s0pv{color:var(--success-color, #155724);margin:0}.button-group.svelte-t6s0pv{display:flex;gap:0.75rem;margin-top:1rem}.submit-button.svelte-t6s0pv,.cancel-button.svelte-t6s0pv{padding:0.75rem 1.5rem;border:none;border-radius:4px;font-size:1rem;font-weight:500;cursor:pointer;transition:all 0.2s;display:flex;align-items:center;gap:0.5rem}.submit-button.svelte-t6s0pv{background:var(--primary-color, #007bff);color:white}.submit-button.svelte-t6s0pv:hover:not(:disabled){background:var(--primary-color-hover, #0056b3)}.submit-button.svelte-t6s0pv:disabled{background:var(--background-disabled, #6c757d);cursor:not-allowed}.cancel-button.svelte-t6s0pv{background:var(--secondary-color, #6c757d);color:white}.cancel-button.svelte-t6s0pv:hover:not(:disabled){background:var(--secondary-color-hover, #545b62)}.cancel-button.svelte-t6s0pv:disabled{opacity:0.6;cursor:not-allowed} 40501.past-subscriptions-link-wrapper.svelte-zpa2t{margin:10px 0} 40502.event-link-wrapper{margin-top:10px}.float-right.svelte-3cxpfz{float:right;margin-top:calc(var(--zephr-input-height) * -1px + 5px)} 40503.bold-label.svelte-nx4w5y label{font-weight:bold}.read-only-input.svelte-nx4w5y{border:none;background:none;color:#333;cursor:default;outline:none;flex-grow:1;margin-right:10px;margin-top:15px}.zephr-form-relative-container.svelte-nx4w5y{display:flex;align-items:center;justify-content:space-between;width:100%}.update-link{white-space:nowrap;text-decoration:none;font-size:0.75em} 40504.bold-label.svelte-nx4w5y label{font-weight:bold}.read-only-input.svelte-nx4w5y{border:none;background:none;color:#333;cursor:default;outline:none;flex-grow:1;margin-right:10px;margin-top:15px}.zephr-form-relative-container.svelte-nx4w5y{display:flex;align-items:center;justify-content:space-between;width:100%}.update-link{white-space:nowrap;text-decoration:none;font-size:0.75em} 40505.zephr-form-ro-attribute{display:flex;align-items:center;height:50px;justify-content:flex-start}.zephr-form-ro-attribute-label{margin-right:10px;&:after { 40506 content: ": "; 40507 }} 40508hr.svelte-jmotet{border-width:1px 0px 0px;margin:20px 0px;border-color:var(--zephr-color-background-tinted)}.session-container.svelte-jmotet{padding:15px;display:flex;flex-direction:column}.device-title.svelte-jmotet{font-weight:bold;font-size:1.2em;margin-bottom:10px}.current-device.svelte-jmotet{color:#777;font-size:0.9em;margin-left:10px}.login-time.svelte-jmotet,.browser.svelte-jmotet,.country.svelte-jmotet{margin-bottom:10px;font-size:0.9em} 40509.sign-out-all.svelte-1ogdv39{color:#0073e6;cursor:pointer;font-size:1em;margin:20px 0;text-align:center}.sign-out-all.svelte-1ogdv39:hover{text-decoration:underline} 40510.table.svelte-7sscau.svelte-7sscau{display:grid;grid-template-columns:0.7fr 1.4fr 1fr 0.6fr}.table-head.svelte-7sscau.svelte-7sscau{display:contents}.table-row.svelte-7sscau.svelte-7sscau{display:contents}.table-head.svelte-7sscau>div.svelte-7sscau{font-size:13px;padding:13px 10px 10px;border-bottom:1px solid var(--zephr-color-background-tinted)}.table-row.svelte-7sscau>div.svelte-7sscau{font-size:var(--zf-info-fontSize);height:60px;padding:0 10px;border-bottom:1px solid var(--zephr-color-background-tinted);display:flex;align-items:center}.table-head.svelte-7sscau>div.svelte-7sscau:first-child,.table-row.svelte-7sscau>div.svelte-7sscau:first-child{padding-left:0}.table-head.svelte-7sscau>div.svelte-7sscau:last-child,.table-row.svelte-7sscau>div.svelte-7sscau:last-child{padding-right:0}.taxes.svelte-7sscau.svelte-7sscau{color:var(--zephr-color-background-tinted);white-space:pre;font-size:small} 40511.zephr-form-button-group.svelte-5uv9ua{display:flex;flex-direction:row;gap:12px;margin-top:20px}.zephr-form-back-button.svelte-5uv9ua{padding:0 20px;border-radius:calc(var(--zephr-button-borderRadius) * 1px);border-style:solid;border-width:calc(var(--zephr-button-borderWidth) * 1px);border-color:var(--zephr-color-action-main);display:flex;justify-content:center;align-items:center;width:100%;background-color:var(--zephr-color-action-main);color:var(--zf-button-color);cursor:pointer}.zephr-form-continue-button.svelte-5uv9ua{padding:0 20px;border-radius:calc(var(--zephr-button-borderRadius) * 1px);border-style:solid;border-width:calc(var(--zephr-button-borderWidth) * 1px);border-color:var(--zephr-color-action-main);display:flex;justify-content:center;align-items:center;width:100%;background-color:var(--zf-button-color);color:var(--zephr-color-action-main);
40511cursor:pointer}.zephr-form-back-button.svelte-5uv9ua:hover{background-color:var(--zephr-color-action-tinted);border-color:var(--zephr-color-action-tinted)}.zephr-form-continue-button.svelte-5uv9ua:hover{background-color:var(--zephr-color-action-tinted);border-color:var(--zephr-color-action-tinted);color:var(--zf-button-color)}.zephr-form-back-button.svelte-5uv9ua:not(inputHeight){height:calc(var(--zephr-button-height) * 1px)}.zephr-form-continue-button.svelte-5uv9ua:not(inputHeight){height:calc(var(--zephr-button-height) * 1px)} 40512.zephr-form-button.svelte-1uaz0r{padding:0 20px;text-decoration:none;text-transform:capitalize;border-radius:calc(var(--zephr-button-borderRadius) * 1px);font-size:var(--zf-button-fontSize);font-weight:normal;cursor:pointer;border-style:solid;border-width:calc(var(--zephr-button-borderWidth) * 1px);border-color:var(--zephr-color-action-tinted);transition:backdrop-filter 0.2s, background-color 0.2s;display:flex;justify-content:center;align-items:center;width:100%;background-color:var(--zephr-color-action-main);color:var(--zf-button-color);position:relative;overflow:hidden;font-family:var(--zf-root-fontFamily);height:calc(var(--zephr-button-height) * 1px)}.zephr-form-button.svelte-1uaz0r:hover{background-color:var(--zephr-color-action-tinted);border-color:var(--zephr-color-action-tinted);color:var(--zf-button-color)}.zephr-form-button-top-margin.svelte-1uaz0r{margin-top:20px} 40513.recipient-name-section.svelte-hvl7z2{margin-top:1rem;margin-bottom:1rem}.field.svelte-hvl7z2{margin-bottom:0.5rem}label.svelte-hvl7z2{display:block;margin-bottom:0.5rem;color:var(--zephr-color-text-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-hvl7z2{width:100%;padding:0.5rem;border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);background-color:var(--zf-input-bgColor);color:var(--zephr-color-text-main);font-family:var(--zf-root-fontFamily)}input.svelte-hvl7z2::placeholder{color:var(--zephr-color-background-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-hvl7z2:focus{outline:none;border-color:var(--zephr-color-action-main)}.error.svelte-hvl7z2{border-color:var(--zephr-color-warning-main) !important}.error-text.svelte-hvl7z2{color:var(--zephr-color-warning-main);font-size:0.875em;margin-top:0.25rem;font-family:var(--zf-root-fontFamily)} 40514.recipient-email-section.svelte-1odylgp{margin-bottom:1rem}.field.svelte-1odylgp{margin-bottom:0.5rem}label.svelte-1odylgp{display:block;margin-bottom:0.5rem;color:var(--zephr-color-text-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-1odylgp{width:100%;padding:0.5rem;border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);background-color:var(--zf-input-bgColor);color:var(--zephr-color-text-main);font-family:var(--zf-root-fontFamily)}input.svelte-1odylgp::placeholder{color:var(--zephr-color-background-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-1odylgp:focus{outline:none;border-color:var(--zephr-color-action-main)}.error.svelte-1odylgp{border-color:var(--zephr-color-warning-main) !important}.error-text.svelte-1odylgp{color:var(--zephr-color-warning-main);font-size:0.875em;margin-top:0.25rem;font-family:var(--zf-root-fontFamily)} 40515.zephr-form-input-error-text.svelte-dxm1g8{color:var(--zephr-color-warning-main);font-family:var(--zf-root-fontFamily);font-size:12px;margin-top:4px}.zephr-form-input-select.svelte-dxm1g8{display:block;appearance:auto;width:100%;height:calc(var(--zephr-input-height) * 1px);font-size:var(--zf-input-fontSize);font-family:var(--zf-root-fontFamily);border:calc(var(--zephr-input-borderWidth) * 1px) solid 40516 var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);transition:border-color 0.25s ease, box-shadow 0.25s ease;outline:0;color:var(--zephr-color-text-main);background-color:var(--zf-input-bgColor);padding:10px}.zephr-form-input-select.unselected.svelte-dxm1g8{color:var(--zephr-color-background-tinted)}.zephr-form-input-select.error.svelte-dxm1g8{border-color:var(--zephr-color-warning-main)}.zephr-form-input-select.svelte-dxm1g8:disabled{background-color:var(--zephr-color-background-tinted);cursor:not-allowed} 40517.zephr-form-input-error-text.svelte-dxm1g8{color:var(--zephr-color-warning-main);font-family:var(--zf-root-fontFamily);font-size:12px;margin-top:4px}.zephr-form-input-select.svelte-dxm1g8{display:block;appearance:auto;width:100%;height:calc(var(--zephr-input-height) * 1px);font-size:var(--zf-input-fontSize);font-family:var(--zf-root-fontFamily);border:calc(var(--zephr-input-borderWidth) * 1px) solid 40518 var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);transition:border-color 0.25s ease, box-shadow 0.25s ease;outline:0;color:var(--zephr-color-text-main);background-color:var(--zf-input-bgColor);padding:10px}.zephr-form-input-select.unselected.svelte-dxm1g8{color:var(--zephr-color-background-tinted)}.zephr-form-input-select.error.svelte-dxm1g8{border-color:var(--zephr-color-warning-main)}.zephr-form-input-select.svelte-dxm1g8:disabled{background-color:var(--zephr-color-background-tinted);cursor:not-allowed} 40519.recipient-address-section.svelte-1lcs5wj{margin-bottom:1rem}.address-main-label.svelte-1lcs5wj{display:block;margin-bottom:0.75rem;color:var(--zephr-color-text-tinted);font-family:var(--zf-root-fontFamily);font-weight:600}.address-fields.svelte-1lcs5wj{display:flex;flex-direction:column;gap:1rem}.field.svelte-1lcs5wj{width:100%}label.svelte-1lcs5wj{display:block;margin-bottom:0.5rem;color:var(--zephr-color-text-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-1lcs5wj{width:100%;padding:0.5rem;border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);background-color:var(--zf-input-bgColor);color:var(--zephr-color-text-main);font-family:var(--zf-root-fontFamily)}input.svelte-1lcs5wj::placeholder{color:var(--zephr-color-background-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-1lcs5wj:focus{outline:none;border-color:var(--zephr-color-action-main)}.error-text.svelte-1lcs5wj{color:var(--zephr-color-warning-main);font-size:0.875em;margin-top:0.25rem;font-family:var(--zf-root-fontFamily)} 40520.recipient-message-section.svelte-h6tpk7{margin-top:1rem;margin-bottom:1rem}.field.svelte-h6tpk7{margin-bottom:0.5rem}label.svelte-h6tpk7{display:block;margin-bottom:0.5rem;color:var(--zephr-color-text-tinted);font-family:var(--zf-root-fontFamily)}textarea.svelte-h6tpk7{width:100%;min-height:100px;resize:vertical;padding:0.5rem;border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);background-color:var(--zf-input-bgColor);color:var(--zephr-color-text-main);font-family:var(--zf-root-fontFamily)}textarea.svelte-h6tpk7::placeholder{color:var(--zephr-color-background-tinted);font-family:var(--zf-root-fontFamily)}textarea.svelte-h6tpk7:focus{outline:none;border-color:var(--zephr-color-action-main)} 40521.zephr-form-input-wrapper.svelte-764k6k{display:flex;flex-direction:column;margin-bottom:16px;width:100%}label.svelte-764k6k{margin-bottom:8px;font-weight:500}input.svelte-764k6k{padding:12px;border-radius:var(--input-border-radius, 4px);border:var(--input-border-width, 1px) solid var(--input-border-color, #ccc);font-size:16px;height:var(--input-height, 50px);box-sizing:border-box}input.svelte-764k6k:focus{outline:none;border-color:var(--color-action-main, #006EDB)}input.error.svelte-764k6k{border-color:var(--color-warning-main, #D90B00)}.error-message.svelte-764k6k{color:var(--color-warning-main, #D90B00);font-size:14px;margin-top:4px}.required.svelte-764k6k{color:var(--color-warning-main, #D90B00)} 40522.zephr-gift-list-box-item.svelte-srvimy.svelte-srvimy{margin-bottom:1.5rem;font-family:var(--zephr-typography-body-font), var(--zephr-typography-body-fallbackFont);color:var(--zephr-color-text-main);max-width:var(--zf-list-subscriptions-container-maxWidth);border-radius:var(--zf-list-subscriptions-container-borderRadius);border:var(--zf-list-subscriptions-container-border);padding:var(--zf-list-subscriptions-container-padding);position:relative;overflow:hidden;background-color:white}.zephr-inner-box.svelte-srvimy.svelte-srvimy{display:flex;flex-direction:column;flex-grow:1;padding-top:20px}.zephr-banner-top.svelte-srvimy.svelte-srvimy{background-color:black;color:white;padding:5px 1.5rem;width:100%;font-size:0.875rem;text-align:center;position:absolute;top:0;left:0;right:0}.zephr-header-section.svelte-srvimy.svelte-srvimy{position:relative}.zephr-status-pill.svelte-srvimy.svelte-srvimy{position:absolute;top:0;right:0;display:inline-block;padding:4px 12px;border-radius:16px;font-size:0.75rem;font-weight:500;color:white;background-color:black}.zephr-section.svelte-srvimy.svelte-srvimy{padding:var(--zf-list-subscriptions-section-padding);gap:8px}.zephr-section.svelte-srvimy.svelte-srvimy:first-child{padding-top:0}.zephr-section.svelte-srvimy span.svelte-srvimy{font-weight:590;display:block;margin-bottom:0.25rem}.zephr-box-item-information.svelte-srvimy.svelte-srvimy{font-size:var(--zf-list-subscriptions-info-fontSize);color:var(--zephr-color-text-tinted);margin-top:8px} 40523.subscriptions-list-container.svelte-ldb1rq{margin-top:40px;
40523display:flex;flex-direction:column;gap:40px} 40524.zephr-form-gift-toggle.svelte-93167f{margin:10px 0;font-size:var(--zf-font-size-base);font-family:var(--zf-root-fontFamily)} 40525.zephr-form-gift-future-date-toggle.svelte-c9nudz{margin:10px 0;font-size:var(--zf-font-size-base);font-family:var(--zf-root-fontFamily)}.zephr-form-gift-future-date-toggle-description.svelte-c9nudz{margin:5px 0 0 0;font-size:var(--zf-font-size-small, 14px);color:var(--zf-color-text-secondary, #666);line-height:1.4} 40526.zephr-form-gift-future-date-input.svelte-1vykgtl{margin:10px 0;font-size:var(--zf-font-size-base);font-family:var(--zf-root-fontFamily)}.zephr-form-gift-future-date-input-description.svelte-1vykgtl{margin:5px 0 0 0;font-size:var(--zf-font-size-small, 14px);color:var(--zf-color-text-secondary, #666);line-height:1.4} 40527.suspend-resume-subscription-section.svelte-1hog2jr{margin-top:1rem;margin-bottom:1rem}.field.svelte-1hog2jr{margin-bottom:0.5rem}label.svelte-1hog2jr{display:block;margin-bottom:0.5rem;color:var(--zephr-color-text-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-1hog2jr{width:100%;padding:0.5rem;border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);background-color:var(--zf-input-bgColor);color:var(--zephr-color-text-main);font-family:var(--zf-root-fontFamily)}input.svelte-1hog2jr::placeholder{color:var(--zephr-color-background-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-1hog2jr:focus{outline:none;border-color:var(--zephr-color-action-main)}.error.svelte-1hog2jr{border-color:var(--zephr-color-warning-main) !important}.error-text.svelte-1hog2jr{color:var(--zephr-color-warning-main);font-size:0.875em;margin-top:0.25rem;font-family:var(--zf-root-fontFamily)} 40528.subscription-custom-fields-container.svelte-uox0m2{padding:0;max-width:800px;margin:0 auto}.form-title.svelte-uox0m2{font-size:1.75rem;font-weight:700;margin:0 0 16px 0;color:var(--zephr-color-text-main)}.form-description.svelte-uox0m2{font-size:1rem;margin:0 0 32px 0;color:var(--zephr-color-text-tinted);line-height:1.5}.custom-fields-form.svelte-uox0m2{display:flex;flex-direction:column;gap:16px}.field-item.svelte-uox0m2{display:flex;flex-direction:column;gap:8px;padding:16px;background-color:var(--zephr-color-background-main);border:1px solid var(--zephr-color-background-tinted);border-radius:8px;transition:all 0.2s ease}.field-item.svelte-uox0m2:focus-within{border-color:var(--zephr-color-action-main);box-shadow:0 0 0 2px rgba(66, 153, 225, 0.1)}.field-label.svelte-uox0m2{font-weight:600;font-size:0.9rem;color:var(--zephr-color-text-main);display:flex;align-items:center;gap:8px}.field-input.svelte-uox0m2{padding:12px 16px;border:2px solid var(--zephr-color-background-tinted);border-radius:8px;font-size:1rem;transition:all 0.2s ease;background-color:var(--zephr-color-background-main)}.field-input.svelte-uox0m2:focus{outline:none;border-color:var(--zephr-color-action-main);box-shadow:0 0 0 3px rgba(66, 153, 225, 0.1)}.field-input.svelte-uox0m2:disabled{background-color:#f5f5f5;color:#666;cursor:not-allowed}.success-message.svelte-uox0m2{background-color:#d4edda;border:1px solid #c3e6cb;color:#155724;padding:12px 16px;border-radius:8px;margin:16px 0;font-weight:500;display:flex;align-items:center;gap:8px}.error-message.svelte-uox0m2{background-color:#f8d7da;border:1px solid #f5c6cb;color:#721c24;padding:12px 16px;border-radius:8px;margin:16px 0;font-weight:500;display:flex;align-items:center;gap:8px}.form-actions.svelte-uox0m2{margin-top:32px;padding-top:24px;border-top:1px solid var(--zephr-color-background-tinted);text-align:center;display:flex;justify-content:center;gap:16px}.submit-button.svelte-uox0m2{background:linear-gradient(135deg, var(--zephr-color-action-main) 0%, var(--zephr-color-action-tinted) 100%);color:white;border:none;padding:16px 32px;border-radius:8px;font-size:1rem;font-weight:600;cursor:pointer;transition:all 0.2s ease;min-width:160px}.submit-button.svelte-uox0m2:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 4px 8px rgba(0, 0, 0, 0.2)}.submit-button.svelte-uox0m2:disabled{opacity:0.6;cursor:not-allowed;transform:none}.simple-field-group.svelte-uox0m2{margin-bottom:24px;display:flex;flex-direction:column;gap:16px}.loading.svelte-uox0m2{text-align:center;padding:40px 20px;color:var(--zephr-color-text-tinted);font-size:1.1rem;background-color:var(--zephr-color-background-tinted);border-radius:8px} 40529.bill-to-contact-section.svelte-z564ap{margin-top:1rem;margin-bottom:1rem}.field.svelte-z564ap{margin-bottom:0.5rem}label.svelte-z564ap{display:block;margin-bottom:0.5rem;color:var(--zephr-color-text-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-z564ap,select.svelte-z564ap{width:100%;padding:0.5rem;border:calc(var(--zephr-input-borderWidth) * 1px) solid 40530 var(--zephr-input-borderColor);border-radius:calc(var(--zephr-input-borderRadius) * 1px);background-color:var(--zf-input-bgColor);color:var(--zephr-color-text-main);font-family:var(--zf-root-fontFamily)}input.svelte-z564ap::placeholder{color:var(--zephr-color-background-tinted);font-family:var(--zf-root-fontFamily)}input.svelte-z564ap:focus{outline:none;border-color:var(--zephr-color-action-main)}.error.svelte-z564ap{border-color:var(--zephr-color-warning-main) !important}.error-text.svelte-z564ap{color:var(--zephr-color-warning-main);font-size:0.875em;margin-top:0.25rem;font-family:var(--zf-root-fontFamily)} 40531.zephr-form-max-width{max-width:var(--zf-container-maxWidth);margin:auto}.zephr-form-content.svelte-j7lu48{padding:var(--zf-container-padding);background-color:var(--zf-container-bgColor);border:var(--zf-container-border);border-radius:var(--zf-container-borderRadius)}.zephr-payment-options-content.svelte-j7lu48{background-color:transparent;border:none;border-radius:0}.close-button-container.svelte-j7lu48{text-align:right;width:100%;margin-bottom:15px}.close-button.svelte-j7lu48{cursor:pointer;display:inline;padding:7px;min-width:32px;min-height:32px;border-radius:16px;margin:1px}.loading-placeholder.svelte-j7lu48{display:flex;justify-content:center;align-items:center;min-height:200px} 40532.zephr-form{--zf-root-fontSize:16px;--zf-root-fontFamily:var(--zephr-typography-body-font), var(--zephr-typography-body-fallbackFont);--zf-container-maxWidth:440px;--zf-container-padding:20px;--zf-container-margin:20px auto;--zf-container-border:none;--zf-container-borderRadius:calc(var(--zephr-input-borderRadius) * 1px);--zf-container-color:var(--zephr-color-text-main);--zf-container-bgColor:var(--zephr-color-background-main, transparent);--zf-info-fontSize:14px;--zf-subtext-fontSize:12px;--zf-link-color:#6ba5e9;--zf-input-fontSize:var(--zf-root-fontSize);--zf-input-bgColor:var(--zephr-color-background-main, transparent);--zf-button-fontSize:calc(var(--zephr-button-fontSize, 16) * 1px);--zf-button-color:#fff;--zf-password-valid-color:#7bcb7f;--zf-password-invalid-color:#c4c4c4;--zf-payment-options-fontSize:var(--zf-subtext-fontSize);--zf-payment-options-color:var(--zephr-color-text-main);--zf-payment-options-bgColor:var(--zf-container-bgColor);--zf-payment-options-border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);--zf-payment-options-borderRadius:calc(var(--zephr-input-borderRadius) * 1px);--zf-payment-options-highlighted-color:var(--zephr-color-text-main);--zf-payment-options-highlighted-bgColor:var(--zephr-color-accent-main);--zf-payment-summary-fontSize:var(--zf-subtext-fontSize);--zf-payment-summary-color:var(--zephr-color-text-main);--zf-payment-summary-bgColor:var(--zf-input-bgColor);--zf-payment-summary-border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);--zf-payment-summary-borderRadius:calc(var(--zephr-input-borderRadius) * 1px);--zf-list-subscriptions-container-maxWidth:630px;--zf-list-subscriptions-container-padding:24px;--zf-list-subscriptions-section-padding:16px 0px;--zf-list-subscriptions-container-border:calc(var(--zephr-input-borderWidth) * 1px) solid var(--zephr-input-borderColor);--zf-list-subscriptions-container-borderRadius:calc(var(--zephr-input-borderRadius) * 1px);--zf-list-subscriptions-info-fontSize:var(--zf-info-fontSize)}.zephr-form.svelte-789zog{color:var(--zf-container-color);margin:var(--zf-container-margin);font-size:var(--zf-root-fontSize);font-family:var(--zf-root-fontFamily)}.zephr-form *{box-sizing:border-box}:where(.zephr-form) button{text-transform:unset;overflow:visible;font-family:var(--zf-root-fontFamily, unset);font-size:var(--zf-root-fontSize, unset);line-height:unset;margin:unset;padding:unset;border:unset;background:unset;&:hover, &:focus-visible { 40533 border: unset; 40534 background: unset; 40535 }}.zephr-form-disabled-div{pointer-events:none;opacity:0.8}.zephr-form-relative-container{position:relative}.zephr-form-flex-container{display:flex}
40535.zephr-form-input-inner-button{cursor:pointer;position:absolute;top:50%;transform:translateY(-50%);right:5px;padding:10px 5px}.zephr-form-input-inner-text{color:var(--zephr-color-text-main);font-size:var(--zf-subtext-fontSize);font-weight:bold;font-family:var(--zf-root-fontFamily)} 40536</style> 40537
40537<script data-cmp-ab="2">(function () { 40538 'use strict'; 40539 40540 /** @returns {void} */ 40541 function noop() {} 40542 40543 /** 40544 * @template T 40545 * @template S 40546 * @param {T} tar 40547 * @param {S} src 40548 * @returns {T & S} 40549 */ 40550 function assign(tar, src) { 40551 // @ts-ignore 40552 for (const k in src) tar[k] = src[k]; 40553 return /** @type {T & S} */ (tar); 40554 } 40555 40556 function run(fn) { 40557 return fn(); 40558 } 40559 40560 function blank_object() { 40561 return Object.create(null); 40562 } 40563 40564 /** 40565 * @param {Function[]} fns 40566 * @returns {void} 40567 */ 40568 function run_all(fns) { 40569 fns.forEach(run); 40570 } 40571 40572 /** 40573 * @param {any} thing 40574 * @returns {thing is Function} 40575 */ 40576 function is_function(thing) { 40577 return typeof thing === 'function'; 40578 } 40579 40580 /** @returns {boolean} */ 40581 function safe_not_equal(a, b) { 40582 return a != a ? b == b : a !== b || (a && typeof a === 'object') || typeof a === 'function'; 40583 } 40584 40585 let src_url_equal_anchor; 40586 40587 /** 40588 * @param {string} element_src 40589 * @param {string} url 40590 * @returns {boolean} 40591 */ 40592 function src_url_equal(element_src, url) { 40593 if (element_src === url) return true; 40594 if (!src_url_equal_anchor) { 40595 src_url_equal_anchor = document.createElement('a'); 40596 } 40597 // This is actually faster than doing URL(..).href 40598 src_url_equal_anchor.href = url; 40599 return element_src === src_url_equal_anchor.href; 40600 } 40601 40602 /** @returns {boolean} */ 40603 function is_empty(obj) { 40604 return Object.keys(obj).length === 0; 40605 } 40606 40607 function create_slot(definition, ctx, $$scope, fn) { 40608 if (definition) { 40609 const slot_ctx = get_slot_context(definition, ctx, $$scope, fn); 40610 return definition[0](slot_ctx); 40611 } 40612 } 40613 40614 function get_slot_context(definition, ctx, $$scope, fn) { 40615 return definition[1] && fn ? assign($$scope.ctx.slice(), definition[1](fn(ctx))) : $$scope.ctx; 40616 } 40617 40618 function get_slot_changes(definition, $$scope, dirty, fn) { 40619 if (definition[2] && fn) { 40620 const lets = definition[2](fn(dirty)); 40621 if ($$scope.dirty === undefined) { 40622 return lets; 40623 } 40624 if (typeof lets === 'object') { 40625 const merged = []; 40626 const len = Math.max($$scope.dirty.length, lets.length); 40627 for (let i = 0; i < len; i += 1) { 40628 merged[i] = $$scope.dirty[i] | lets[i]; 40629 } 40630 return merged; 40631 } 40632 return $$scope.dirty | lets; 40633 } 40634 return $$scope.dirty; 40635 } 40636 40637 /** @returns {void} */ 40638 function update_slot_base( 40639 slot, 40640 slot_definition, 40641 ctx, 40642 $$scope, 40643 slot_changes, 40644 get_slot_context_fn 40645 ) { 40646 if (slot_changes) { 40647 const slot_context = get_slot_context(slot_definition, ctx, $$scope, get_slot_context_fn); 40648 slot.p(slot_context, slot_changes); 40649 } 40650 } 40651 40652 /** @returns {any[] | -1} */ 40653 function get_all_dirty_from_scope($$scope) { 40654 if ($$scope.ctx.length > 32) { 40655 const dirty = []; 40656 const length = $$scope.ctx.length / 32; 40657 for (let i = 0; i < length; i++) { 40658 dirty[i] = -1; 40659 } 40660 return dirty; 40661 } 40662 return -1; 40663 } 40664 40665 function null_to_empty(value) { 40666 return value == null ? '' : value; 40667 } 40668 40669 function action_destroyer(action_result) { 40670 return action_result && is_function(action_result.destroy) ? action_result.destroy : noop; 40671 } 40672 40673 /** 40674 * @param {Node} target 40675 * @param {Node} node 40676 * @returns {void} 40677 */ 40678 function append(target, node) { 40679 target.appendChild(node); 40680 } 40681 40682 /** 40683 * @param {Node} target 40684 * @param {Node} node 40685 * @param {Node} [anchor] 40686 * @returns {void} 40687 */ 40688 function insert(target, node, anchor) { 40689 target.insertBefore(node, anchor || null); 40690 } 40691 40692 /** 40693 * @param {Node} node 40694 * @returns {void} 40695 */ 40696 function detach(node) { 40697 if (node.parentNode) { 40698 node.parentNode.removeChild(node); 40699 } 40700 } 40701 40702 /** 40703 * @returns {void} */ 40704 function destroy_each(iterations, detaching) { 40705 for (let i = 0; i < iterations.length; i += 1) { 40706 if (iterations[i]) iterations[i].d(detaching); 40707 } 40708 } 40709 40710 /** 40711 * @template {keyof HTMLElementTagNameMap} K 40712 * @param {K} name 40713 * @returns {HTMLElementTagNameMap[K]} 40714 */ 40715 function element(name) { 40716 return document.createElement(name); 40717 } 40718 40719 /** 40720 * @template {keyof SVGElementTagNameMap} K 40721 * @param {K} name 40722 * @returns {SVGElement} 40723 */ 40724 function svg_element(name) { 40725 return document.createElementNS('http://www.w3.org/2000/svg', name); 40726 } 40727 40728 /** 40729 * @param {string} data 40730 * @returns {Text} 40731 */ 40732 function text(data) { 40733 return document.createTextNode(data); 40734 } 40735 40736 /** 40737 * @returns {Text} */ 40738 function space() { 40739 return text(' '); 40740 } 40741 40742 /** 40743 * @returns {Text} */ 40744 function empty() { 40745 return text(''); 40746 } 40747 40748 /** 40749 * @param {EventTarget} node 40750 * @param {string} event 40751 * @param {EventListenerOrEventListenerObject} handler 40752 * @param {boolean | AddEventListenerOptions | EventListenerOptions} [options] 40753 * @returns {() => void} 40754 */ 40755 function listen(node, event, handler, options) { 40756 node.addEventListener(event, handler, options); 40757 return () => node.removeEventListener(event, handler, options); 40758 } 40759 40760 /** 40761 * @returns {(event: any) => any} */ 40762 function prevent_default(fn) { 40763 return function (event) { 40764 event.preventDefault(); 40765 // @ts-ignore
40766 return fn.call(this, event); 40767 }; 40768 } 40769 40770 /** 40771 * @returns {(event: any) => void} */ 40772 function self(fn) { 40773 return function (event) { 40774 // @ts-ignore 40775 if (event.target === this) fn.call(this, event); 40776 }; 40777 } 40778 40779 /** 40780 * @param {Element} node 40781 * @param {string} attribute 40782 * @param {string} [value] 40783 * @returns {void} 40784 */ 40785 function attr(node, attribute, value) { 40786 if (value == null) node.removeAttribute(attribute); 40787 else if (node.getAttribute(attribute) !== value) node.setAttribute(attribute, value); 40788 } 40789 /** 40790 * List of attributes that should always be set through the attr method, 40791 * because updating them through the property setter doesn't work reliably. 40792 * In the example of `width`/`height`, the problem is that the setter only 40793 * accepts numeric values, but the attribute can also be set to a string like `50%`. 40794 * If this list becomes too big, rethink this approach. 40795 */ 40796 const always_set_through_set_attribute = ['width', 'height']; 40797 40798 /** 40799 * @param {Element & ElementCSSInlineStyle} node 40800 * @param {{ [x: string]: string }} attributes 40801 * @returns {void} 40802 */ 40803 function set_attributes(node, attributes) { 40804 // @ts-ignore 40805 const descriptors = Object.getOwnPropertyDescriptors(node.__proto__); 40806 for (const key in attributes) { 40807 if (attributes[key] == null) { 40808 node.removeAttribute(key); 40809 } else if (key === 'style') { 40810 node.style.cssText = attributes[key]; 40811 } else if (key === '__value') { 40812 /** @type {any} */ (node).value = node[key] = attributes[key]; 40813 } else if ( 40814 descriptors[key] && 40815 descriptors[key].set && 40816 always_set_through_set_attribute.indexOf(key) === -1 40817 ) { 40818 node[key] = attributes[key]; 40819 } else { 40820 attr(node, key, attributes[key]); 40821 } 40822 } 40823 } 40824 40825 /** 40826 * @param {Element} element 40827 * @returns {ChildNode[]} 40828 */ 40829 function children(element) { 40830 return Array.from(element.childNodes); 40831 } 40832 40833 /** 40834 * @param {Text} text 40835 * @param {unknown} data 40836 * @returns {void} 40837 */ 40838 function set_data(text, data) { 40839 data = '' + data; 40840 if (text.data === data) return; 40841 text.data = /** @type {string} */ (data); 40842 } 40843 40844 /** 40845 * @returns {void} */ 40846 function set_input_value(input, value) { 40847 input.value = value == null ? '' : value; 40848 } 40849 40850 /** 40851 * @returns {void} */ 40852 function set_style(node, key, value, important) { 40853 if (value == null) { 40854 node.style.removeProperty(key); 40855 } else { 40856 node.style.setProperty(key, value, important ? 'important' : ''); 40857 } 40858 } 40859 40860 /** 40861 * @returns {void} */ 40862 function select_option(select, value, mounting) { 40863 for (let i = 0; i < select.options.length; i += 1) { 40864 const option = select.options[i]; 40865 if (option.__value === value) { 40866 option.selected = true; 40867 return; 40868 } 40869 } 40870 if (!mounting || value !== undefined) { 40871 select.selectedIndex = -1; // no option should be selected 40872 } 40873 } 40874 40875 /** 40876 * @returns {void} */ 40877 function toggle_class(element, name, toggle) { 40878 // The `!!` is required because an `undefined` flag means flipping the current state. 40879 element.classList.toggle(name, !!toggle); 40880 } 40881 40882 /** 40883 * @template T 40884 * @param {string} type 40885 * @param {T} [detail] 40886 * @param {{ bubbles?: boolean, cancelable?: boolean }} [options] 40887 * @returns {CustomEvent<T>} 40888 */ 40889 function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) { 40890 return new CustomEvent(type, { detail, bubbles, cancelable }); 40891 } 40892 40893 function construct_svelte_component(component, props) { 40894 return new component(props); 40895 } 40896 40897 /** 40898 * @typedef {Node & { 40899 * claim_order?: number; 40900 * hydrate_init?: true; 40901 * actual_end_child?: NodeEx; 40902 * childNodes: NodeListOf<NodeEx>; 40903 * }} NodeEx 40904 */ 40905 40906 /** @typedef {ChildNode & NodeEx} ChildNodeEx */ 40907 40908 /** @typedef {NodeEx & { claim_order: number }} NodeEx2 */ 40909 40910 /** 40911 * @typedef {ChildNodeEx[] & { 40912 * claim_info?: { 40913 * last_index: number; 40914 * total_claimed: number; 40915 * }; 40916 * }} ChildNodeArray 40917 */ 40918 40919 let current_component; 40920 40921 /** @returns {void} */ 40922 function set_current_component(component) { 40923 current_component = component; 40924 } 40925 40926 function get_current_component() { 40927 if (!current_component) throw new Error('Function called outside component initialization'); 40928 return current_component; 40929 } 40930 40931 /** 40932 * The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM. 40933 * It must be called during the component's initialisation (but doesn't need to live *inside* the component; 40934 * it can be called from an external module). 40935 * 40936 * If a function is returned _synchronously_ from `onMount`, it will be called when the component is unmounted. 40937 * 40938 * `onMount` does not run inside a [server-side component](https://svelte.dev/docs#run-time-server-side-component-api). 40939 * 40940 * https://svelte.dev/docs/svelte#onmount
40941 * @template T 40942 * @param {() => import('./private.js').NotFunction<T> | Promise<import('./private.js').NotFunction<T>> | (() => any)} fn 40943 * @returns {void} 40944 */ 40945 function onMount(fn) { 40946 get_current_component().$$.on_mount.push(fn); 40947 } 40948 40949 /** 40950 * Schedules a callback to run immediately after the component has been updated. 40951 * 40952 * The first time the callback runs will be after the initial `onMount` 40953 * 40954 * https://svelte.dev/docs/svelte#afterupdate 40955 * @param {() => any} fn 40956 * @returns {void} 40957 */ 40958 function afterUpdate(fn) { 40959 get_current_component().$$.after_update.push(fn); 40960 } 40961 40962 /** 40963 * Schedules a callback to run immediately before the component is unmounted. 40964 * 40965 * Out of `onMount`, `beforeUpdate`, `afterUpdate` and `onDestroy`, this is the 40966 * only one that runs inside a server-side component. 40967 * 40968 * https://svelte.dev/docs/svelte#ondestroy 40969 * @param {() => any} fn 40970 * @returns {void} 40971 */ 40972 function onDestroy(fn) { 40973 get_current_component().$$.on_destroy.push(fn); 40974 } 40975 40976 /** 40977 * Creates an event dispatcher that can be used to dispatch [component events](https://svelte.dev/docs#template-syntax-component-directives-on-eventname). 40978 * Event dispatchers are functions that can take two arguments: `name` and `detail`. 40979 * 40980 * Component events created with `createEventDispatcher` create a 40981 * [CustomEvent](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent). 40982 * These events do not [bubble](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events#Event_bubbling_and_capture). 40983 * The `detail` argument corresponds to the [CustomEvent.detail](https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/detail) 40984 * property and can contain any type of data. 40985 * 40986 * The event dispatcher can be typed to narrow the allowed event names and the type of the `detail` argument: 40987 * ```ts 40988 * const dispatch = createEventDispatcher<{ 40989 * loaded: never; // does not take a detail argument 40990 * change: string; // takes a detail argument of type string, which is required 40991 * optional: number | null; // takes an optional detail argument of type number 40992 * }>(); 40993 * ``` 40994 * 40995 * https://svelte.dev/docs/svelte#createeventdispatcher 40996 * @template {Record<string, any>} [EventMap=any] 40997 * @returns {import('./public.js').EventDispatcher<EventMap>} 40998 */ 40999 function createEventDispatcher() { 41000 const component = get_current_component(); 41001 return (type, detail, { cancelable = false } = {}) => { 41002 const callbacks = component.$$.callbacks[type]; 41003 if (callbacks) { 41004 // TODO are there situations where events could be dispatched 41005 // in a server (non-DOM) environment? 41006 const event = custom_event(/** @type {string} */ (type), detail, { cancelable }); 41007 callbacks.slice().forEach((fn) => { 41008 fn.call(component, event); 41009 }); 41010 return !event.defaultPrevented; 41011 } 41012 return true; 41013 }; 41014 } 41015 41016 const dirty_components = []; 41017 const binding_callbacks = []; 41018 41019 let render_callbacks = []; 41020 41021 const flush_callbacks = []; 41022 41023 const resolved_promise = /* @__PURE__ */ Promise.resolve(); 41024 41025 let update_scheduled = false; 41026 41027 /** @returns {void} */ 41028 function schedule_update() { 41029 if (!update_scheduled) { 41030 update_scheduled = true; 41031 resolved_promise.then(flush); 41032 } 41033 } 41034 41035 /** @returns {void} */ 41036 function add_render_callback(fn) { 41037 render_callbacks.push(fn); 41038 } 41039 41040 // flush() calls callbacks in this order: 41041 // 1. All beforeUpdate callbacks, in order: parents before children 41042 // 2. All bind:this callbacks, in reverse order: children before parents. 41043 // 3. All afterUpdate callbacks, in order: parents before children. EXCEPT 41044 // for afterUpdates called during the initial onMount, which are called in 41045 // reverse order: children before parents. 41046 // Since callbacks might update component values, which could trigger another 41047 // call to flush(), the following steps guard against this: 41048 // 1. During beforeUpdate, any updated components will be added to the 41049 // dirty_components array and will cause a reentrant call to flush(). Because 41050 // the flush index is kept outside the function, the reentrant call will pick 41051 // up where the earlier call left off and go through all dirty components. The 41052 // current_component value is saved and restored so that the reentrant call will 41053 // not interfere with the "parent" flush() call. 41054 // 2. bind:this callbacks cannot trigger new flush() calls. 41055 // 3. During afterUpdate, any updated components will NOT have their afterUpdate 41056 // callback called a second time; the seen_callbacks set, outside the flush() 41057 // function, guarantees this behavior. 41058 const seen_callbacks = new Set(); 41059 41060 let flushidx = 0; // Do *not* move this inside the flush() function 41061 41062 /** @returns {void} */ 41063 function flush() {
vendor: 4,269 bytes, lines 41064-41239
41064 // Do not reenter flush while dirty components are updated, as this can 41065 // result in an infinite loop. Instead, let the inner flush handle it. 41066 // Reentrancy is ok afterwards for bindings etc. 41067 if (flushidx !== 0) { 41068 return; 41069 } 41070 const saved_component = current_component; 41071 do { 41072 // first, call beforeUpdate functions 41073 // and update components 41074 try { 41075 while (flushidx < dirty_components.length) { 41076 const component = dirty_components[flushidx]; 41077 flushidx++; 41078 set_current_component(component); 41079 update(component.$$); 41080 } 41081 } catch (e) { 41082 // reset dirty state to not end up in a deadlocked state and then rethrow 41083 dirty_components.length = 0; 41084 flushidx = 0; 41085 throw e; 41086 } 41087 set_current_component(null); 41088 dirty_components.length = 0; 41089 flushidx = 0; 41090 while (binding_callbacks.length) binding_callbacks.pop()(); 41091 // then, once components are updated, call 41092 // afterUpdate functions. This may cause 41093 // subsequent updates... 41094 for (let i = 0; i < render_callbacks.length; i += 1) { 41095 const callback = render_callbacks[i]; 41096 if (!seen_callbacks.has(callback)) { 41097 // ...so guard against infinite loops 41098 seen_callbacks.add(callback); 41099 callback(); 41100 } 41101 } 41102 render_callbacks.length = 0; 41103 } while (dirty_components.length); 41104 while (flush_callbacks.length) { 41105 flush_callbacks.pop()(); 41106 } 41107 update_scheduled = false; 41108 seen_callbacks.clear(); 41109 set_current_component(saved_component); 41110 } 41111 41112 /** @returns {void} */ 41113 function update($$) { 41114 if ($$.fragment !== null) { 41115 $$.update(); 41116 run_all($$.before_update); 41117 const dirty = $$.dirty; 41118 $$.dirty = [-1]; 41119 $$.fragment && $$.fragment.p($$.ctx, dirty); 41120 $$.after_update.forEach(add_render_callback); 41121 } 41122 } 41123 41124 /** 41125 * Useful for example to execute remaining `afterUpdate` callbacks before executing `destroy`. 41126 * @param {Function[]} fns 41127 * @returns {void} 41128 */ 41129 function flush_render_callbacks(fns) { 41130 const filtered = []; 41131 const targets = []; 41132 render_callbacks.forEach((c) => (fns.indexOf(c) === -1 ? filtered.push(c) : targets.push(c))); 41133 targets.forEach((c) => c()); 41134 render_callbacks = filtered; 41135 } 41136 41137 const outroing = new Set(); 41138 41139 /** 41140 * @type {Outro} 41141 */ 41142 let outros; 41143 41144 /** 41145 * @returns {void} */ 41146 function group_outros() { 41147 outros = { 41148 r: 0, 41149 c: [], 41150 p: outros // parent group 41151 }; 41152 } 41153 41154 /** 41155 * @returns {void} */ 41156 function check_outros() { 41157 if (!outros.r) { 41158 run_all(outros.c); 41159 } 41160 outros = outros.p; 41161 } 41162 41163 /** 41164 * @param {import('./private.js').Fragment} block 41165 * @param {0 | 1} [local] 41166 * @returns {void} 41167 */ 41168 function transition_in(block, local) { 41169 if (block && block.i) { 41170 outroing.delete(block); 41171 block.i(local); 41172 } 41173 } 41174 41175 /** 41176 * @param {import('./private.js').Fragment} block 41177 * @param {0 | 1} local 41178 * @param {0 | 1} [detach] 41179 * @param {() => void} [callback] 41180 * @returns {void} 41181 */ 41182 function transition_out(block, local, detach, callback) { 41183 if (block && block.o) { 41184 if (outroing.has(block)) return; 41185 outroing.add(block); 41186 outros.c.push(() => { 41187 outroing.delete(block); 41188 if (callback) { 41189 if (detach) block.d(1); 41190 callback(); 41191 } 41192 }); 41193 block.o(local); 41194 } else if (callback) { 41195 callback(); 41196 } 41197 } 41198 41199 /** @typedef {1} INTRO */ 41200 /** @typedef {0} OUTRO */ 41201 /** @typedef {{ direction: 'in' | 'out' | 'both' }} TransitionOptions */ 41202 /** @typedef {(node: Element, params: any, options: TransitionOptions) => import('../transition/public.js').TransitionConfig} TransitionFn */ 41203 41204 /** 41205 * @typedef {Object} Outro 41206 * @property {number} r 41207 * @property {Function[]} c 41208 * @property {Object} p 41209 */ 41210 41211 /** 41212 * @typedef {Object} PendingProgram 41213 * @property {number} start 41214 * @property {INTRO|OUTRO} b 41215 * @property {Outro} [group] 41216 */ 41217 41218 /** 41219 * @typedef {Object} Program 41220 * @property {number} a 41221 * @property {INTRO|OUTRO} b 41222 * @property {1|-1} d 41223 * @property {number} duration 41224 * @property {number} start 41225 * @property {number} end 41226 * @property {Outro} [group] 41227 */ 41228 41229 // general each functions: 41230 41231 function ensure_array_like(array_like_or_iterator) { 41232 return array_like_or_iterator?.length !== undefined 41233 ? array_like_or_iterator 41234 : Array.from(array_like_or_iterator); 41235 } 41236 41237 /** @returns {{}} */ 41238 function get_spread_update(levels, updates) { 41239 const update = {};
41240 const to_null_out = {}; 41241 const accounted_for = { $$scope: 1 }; 41242 let i = levels.length; 41243 while (i--) { 41244 const o = levels[i]; 41245 const n = updates[i]; 41246 if (n) { 41247 for (const key in o) { 41248 if (!(key in n)) to_null_out[key] = 1; 41249 } 41250 for (const key in n) { 41251 if (!accounted_for[key]) { 41252 update[key] = n[key]; 41253 accounted_for[key] = 1; 41254 } 41255 } 41256 levels[i] = n; 41257 } else { 41258 for (const key in o) { 41259 accounted_for[key] = 1; 41260 } 41261 } 41262 } 41263 for (const key in to_null_out) { 41264 if (!(key in update)) update[key] = undefined; 41265 } 41266 return update; 41267 } 41268 41269 function get_spread_object(spread_props) { 41270 return typeof spread_props === 'object' && spread_props !== null ? spread_props : {}; 41271 } 41272 41273 /** @returns {void} */ 41274 function create_component(block) { 41275 block && block.c(); 41276 } 41277 41278 /** @returns {void} */ 41279 function mount_component(component, target, anchor) { 41280 const { fragment, after_update } = component.$$; 41281 fragment && fragment.m(target, anchor); 41282 // onMount happens before the initial afterUpdate 41283 add_render_callback(() => { 41284 const new_on_destroy = component.$$.on_mount.map(run).filter(is_function); 41285 // if the component was destroyed immediately 41286 // it will update the `$$.on_destroy` reference to `null`. 41287 // the destructured on_destroy may still reference to the old array 41288 if (component.$$.on_destroy) { 41289 component.$$.on_destroy.push(...new_on_destroy); 41290 } else { 41291 // Edge case - component was destroyed immediately, 41292 // most likely as a result of a binding initialising 41293 run_all(new_on_destroy); 41294 } 41295 component.$$.on_mount = []; 41296 }); 41297 after_update.forEach(add_render_callback); 41298 } 41299 41300 /** @returns {void} */ 41301 function destroy_component(component, detaching) { 41302 const $$ = component.$$; 41303 if ($$.fragment !== null) { 41304 flush_render_callbacks($$.after_update); 41305 run_all($$.on_destroy); 41306 $$.fragment && $$.fragment.d(detaching); 41307 // TODO null out other refs, including component.$$ (but need to 41308 // preserve final state?) 41309 $$.on_destroy = $$.fragment = null; 41310 $$.ctx = []; 41311 } 41312 } 41313 41314 /** @returns {void} */ 41315 function make_dirty(component, i) { 41316 if (component.$$.dirty[0] === -1) { 41317 dirty_components.push(component); 41318 schedule_update(); 41319 component.$$.dirty.fill(0); 41320 } 41321 component.$$.dirty[(i / 31) | 0] |= 1 << i % 31; 41322 } 41323 41324 // TODO: Document the other params 41325 /** 41326 * @param {SvelteComponent} component 41327 * @param {import('./public.js').ComponentConstructorOptions} options 41328 * 41329 * @param {import('./utils.js')['not_equal']} not_equal Used to compare props and state values. 41330 * @param {(target: Element | ShadowRoot) => void} [append_styles] Function that appends styles to the DOM when the component is first initialised. 41331 * This will be the `add_css` function from the compiled component. 41332 * 41333 * @returns {void} 41334 */ 41335 function init( 41336 component, 41337 options, 41338 instance, 41339 create_fragment, 41340 not_equal, 41341 props, 41342 append_styles = null, 41343 dirty = [-1] 41344 ) { 41345 const parent_component = current_component; 41346 set_current_component(component); 41347 /** @type {import('./private.js').T$$} */ 41348 const $$ = (component.$$ = { 41349 fragment: null, 41350 ctx: [], 41351 // state 41352 props, 41353 update: noop, 41354 not_equal, 41355 bound: blank_object(), 41356 // lifecycle 41357 on_mount: [], 41358 on_destroy: [], 41359 on_disconnect: [], 41360 before_update: [], 41361 after_update: [], 41362 context: new Map(options.context || (parent_component ? parent_component.$$.context : [])), 41363 // everything else 41364 callbacks: blank_object(), 41365 dirty, 41366 skip_bound: false, 41367 root: options.target || parent_component.$$.root 41368 }); 41369 append_styles && append_styles($$.root); 41370 let ready = false; 41371 $$.ctx = instance 41372 ? instance(component, options.props || {}, (i, ret, ...rest) => { 41373 const value = rest.length ? rest[0] : ret; 41374 if ($$.ctx && not_equal($$.ctx[i], ($$.ctx[i] = value))) { 41375 if (!$$.skip_bound && $$.bound[i]) $$.bound[i](value); 41376 if (ready) make_dirty(component, i); 41377 } 41378 return ret; 41379 }) 41380 : []; 41381 $$.update(); 41382 ready = true; 41383 run_all($$.before_update); 41384 // `false` as a special case of no DOM component 41385 $$.fragment = create_fragment ? create_fragment($$.ctx) : false;
41386 if (options.target) { 41387 if (options.hydrate) { 41388 // TODO: what is the correct type here? 41389 // @ts-expect-error 41390 const nodes = children(options.target); 41391 $$.fragment && $$.fragment.l(nodes); 41392 nodes.forEach(detach); 41393 } else { 41394 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion 41395 $$.fragment && $$.fragment.c(); 41396 } 41397 if (options.intro) transition_in(component.$$.fragment); 41398 mount_component(component, options.target, options.anchor); 41399 flush(); 41400 } 41401 set_current_component(parent_component); 41402 } 41403 41404 /** 41405 * Base class for Svelte components. Used when dev=false. 41406 * 41407 * @template {Record<string, any>} [Props=any] 41408 * @template {Record<string, any>} [Events=any] 41409 */ 41410 class SvelteComponent { 41411 /** 41412 * ### PRIVATE API 41413 * 41414 * Do not use, may change at any time 41415 * 41416 * @type {any} 41417 */ 41418 $$ = undefined; 41419 /** 41420 * ### PRIVATE API 41421 * 41422 * Do not use, may change at any time 41423 * 41424 * @type {any} 41425 */ 41426 $$set = undefined; 41427 41428 /** @returns {void} */ 41429 $destroy() { 41430 destroy_component(this, 1); 41431 this.$destroy = noop; 41432 } 41433 41434 /** 41435 * @template {Extract<keyof Events, string>} K 41436 * @param {K} type 41437 * @param {((e: Events[K]) => void) | null | undefined} callback 41438 * @returns {() => void} 41439 */ 41440 $on(type, callback) { 41441 if (!is_function(callback)) { 41442 return noop; 41443 } 41444 const callbacks = this.$$.callbacks[type] || (this.$$.callbacks[type] = []); 41445 callbacks.push(callback); 41446 return () => { 41447 const index = callbacks.indexOf(callback); 41448 if (index !== -1) callbacks.splice(index, 1); 41449 }; 41450 } 41451 41452 /** 41453 * @param {Partial<Props>} props 41454 * @returns {void} 41455 */ 41456 $set(props) { 41457 if (this.$$set && !is_empty(props)) { 41458 this.$$.skip_bound = true; 41459 this.$$set(props); 41460 this.$$.skip_bound = false; 41461 } 41462 } 41463 } 41464 41465 /** 41466 * @typedef {Object} CustomElementPropDefinition 41467 * @property {string} [attribute] 41468 * @property {boolean} [reflect] 41469 * @property {'String'|'Boolean'|'Number'|'Array'|'Object'} [type] 41470 */ 41471 41472 // generated during release, do not modify 41473 41474 const PUBLIC_VERSION = '4'; 41475 41476 if (typeof window !== 'undefined') 41477 // @ts-ignore 41478 (window.__svelte || (window.__svelte = { v: new Set() })).v.add(PUBLIC_VERSION); 41479 41480 // Some height larger than whats resonable expected, 41481 // but not so large as to infulence the transition time 41482 const TRANSITION_OPEN_HEIGHT = '700px'; 41483 // Absolute max height 41484 const MAX_OPEN_HEIGHT = '10000px'; 41485 const CLOSED_HEIGHT = '0px'; 41486 const DURATION_MS = 500; 41487 function accordion(node, isOpen) { 41488 let currentState = isOpen; 41489 node.style.maxHeight = isOpen ? MAX_OPEN_HEIGHT : CLOSED_HEIGHT; 41490 node.style.overflow = isOpen ? "unset" : "hidden"; 41491 const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)'); 41492 const animationsDisabled = mediaQuery.matches; 41493 if (animationsDisabled) { 41494 node.style.display = isOpen ? 'unset' : 'none'; 41495 } 41496 return { 41497 update(isOpen) { 41498 if (animationsDisabled) { 41499 node.style.display = isOpen ? 'unset' : 'none'; 41500 return; 41501 } 41502 if (isOpen === currentState) { 41503 return; 41504 } 41505 currentState = isOpen; 41506 const toHeight = isOpen ? TRANSITION_OPEN_HEIGHT : CLOSED_HEIGHT; 41507 const fromHeight = isOpen ? CLOSED_HEIGHT : TRANSITION_OPEN_HEIGHT; 41508 node.animate([ 41509 { 41510 maxHeight: fromHeight, 41511 overflow: 'hidden' 41512 }, 41513 { 41514 maxHeight: toHeight, 41515 overflow: 'hidden' 41516 }, 41517 ], { 41518 duration: DURATION_MS, 41519 fill: 'both', 41520 }).addEventListener("finish", () => { 41521 // After the opening transition, unset the max height so if it's larger than OPEN_HEIGHT the content 41522 // will be shown, but via a quick jump 41523 if (!isOpen) { 41524 return; 41525 } 41526 node.animate([ 41527 { 41528 maxHeight: toHeight, 41529 overflow: 'hidden' 41530 }, 41531 { 41532 maxHeight: MAX_OPEN_HEIGHT, 41533 overflow: 'hidden' 41534 }, 41535 ], { 41536 duration: 100, 41537 fill: 'both', 41538 }); 41539 }); 41540 } 41541 }; 41542 } 41543 41544 const elementTypes = { 41545 PROGRESS_BAR: 'progress_bar', 41546 PAYMENT_OPTION_SELECTION: 'payment_option_selection', 41547 PASSWORD: 'password', 41548 VERIFICATION_CODE: 'otp_code', 41549 BUTTON: 'button', 41550 PAYMENT: 'payment', 41551 PAYMENT_PRE_LOADER: 'payment-pre-loader', 41552 EMAIL_ADDRESS: 'email_address', 41553 SUCCESS_MESSAGE: 'success_message', 41554 TEXT: 'text', 41555 USER_ATTRIBUTE: 'user_attribute', 41556 RESET_PASSWORD_LINK: 'link', 41557 RESEND_LOGIN_LINK: 'resend_login_link', 41558 SOCIAL_SIGNIN: 'social_sign_in', 41559 PAYMENT_SUMMARY: 'payment_summary', 41560 DIVIDER: 'divider', 41561 LOGIN_LINK: 'show_login_link', 41562 ACCOUNT_MEMBERSHIP_CODE: 'account_code', 41563 MOBILE_PAYMENT: 'mobile_payment', 41564 INVITATION: 'invitation', 41565 TEMPLATE_COMPONENT: 'template_component', 41566 SUBSCRIPTION_SELECT: 'subscription_select', 41567 EVENT_LINK: 'event_link', 41568 SUBSCRIPTIONS_LIST: 'subscriptions_list', 41569 PAST_SUBSCRIPTIONS_LINK: 'past_subscriptions_link', 41570 BILLING_HISTORY: 'billing_history', 41571 CHNAGE_PAYMENT_METHOD_BUTTON: 'change_payment_method_button', 41572 READ_ONLY_EMAIL_ADDRESS: 'read_only_email_address', 41573 READ_ONLY_PASSWORD: 'read_only_password', 41574 READ_ONLY_USER_ATTRIBUTE: 'read_only_user_attribute', 41575 CHNAGE_PAYMENT_METHOD: 'change_payment_method', 41576 DEVICES_SESSIONS_LIST: 'devices_list', 41577 SIGN_OUT_ALL_OTHER_DEVICES: 'sign_out_of_devices_button', 41578 TABLINK: 'tablink', 41579 BUTTON_GROUP: 'button_group', 41580 LINK_BUTTON: 'link_button', 41581 RECIPIENT_NAME: 'recipient_name', 41582 RECIPIENT_EMAIL: 'recipient_email', 41583 RECIPIENT_ADDRESS: 'recipient_address', 41584 RECIPIENT_MESSAGE: 'recipient_message', 41585 GIFT_CODE: 'gift_code', 41586 GIFT_SUBSCRIPTIONS_LIST: 'gift_subscriptions_list', 41587 GIFT_TOGGLE: 'gift_toggle', 41588 GIFT_FUTURE_DATE_TOGGLE: 'gift_future_date_toggle', 41589 GIFT_FUTURE_DATE_INPUT: 'gift_future_date_input', 41590 PAYMENT_AUTO_RENEW_TOGGLE: 'payment_auto_renew_toggle', 41591 SUSPEND_RESUME_SUBSCRIPTION: 'suspend_resume_subscription', 41592 SUBSCRIPTION_CUSTOM_FIELDS_UPDATE: 'subscription_custom_fields_update', 41593 SUBSCRIPTION_CUSTOM_FIELDS_LIST: 'subscription_custom_fields_list', 41594 BILL_TO_CONTACT: 'bill_to_contact', 41595 BILLING_COUNTRY: 'billing_country', 41596 BILLING_STATE: 'billing_state', 41597 }; 41598 41599 var FormEvent; 41600 (function (FormEvent) { 41601 FormEvent["FORM_START"] = "FORM_START"; 41602 FormEvent["LOGIN_REGISTRATION_COMPLETE"] = "LOGIN_REGISTRATION_COMPLETE"; 41603 FormEvent["SECTION_EMAIL_COMPLETE"] = "SECTION_EMAIL_COMPLETE"; 41604 FormEvent["SECTION_PASSWORD_RESET_COMPLETE"] = "SECTION_PASSWORD_RESET_COMPLETE"; 41605 FormEvent["SECTION_FORGOT_PASSWORD_COMPLETE"] = "SECTION_FORGOT_PASSWORD_COMPLETE"; 41606 FormEvent["PART_PLAN_SELECT_COMPLETE"] = "PART_PLAN_SELECT_COMPLETE"; 41607 FormEvent["PART_ACCOUNT_VERIFICATION_COMPLETE"] = "PART_ACCOUNT_VERIFICATION_COMPLETE"; 41608 FormEvent["PART_GIFT_RECIPIENT_COMPLETE"] = "PART_GIFT_RECIPIENT_COMPLETE"; 41609 FormEvent["PART_PAYMENT_COMPLETE"] = "PART_PAYMENT_COMPLETE"; 41610 FormEvent["PART_SUCCESS_COMPLETE"] = "PART_SUCCESS_COMPLETE"; 41611 FormEvent["PART_CONTACT_VERIFICATION_COMPLETE"] = "PART_CONTACT_VERIFICATION_COMPLETE"; 41612 FormEvent["PART_PROFILE_UPDATE_COMPLETE"] = "PART_PROFILE_UPDATE_COMPLETE"; 41613 FormEvent["PART_EMAIL_UPDATE_COMPLETE"] = "PART_EMAIL_UPDATE_COMPLETE"; 41614 FormEvent["PART_EMAIL_UPDATE_OTP_COMPLETE"] = "PART_EMAIL_UPDATE_OTP_COMPLETE"; 41615 FormEvent["PART_EMAIL_UPDATE_CONFIRMATION_COMPLETE"] = "PART_EMAIL_UPDATE_CONFIRMATION_COMPLETE"; 41616 FormEvent["PART_PASSWORD_UPDATE_COMPLETE"] = "PART_PASSWORD_UPDATE_COMPLETE"; 41617 FormEvent["PART_PASSWORD_UPDATE_OTP_COMPLETE"] = "PART_PASSWORD_UPDATE_OTP_COMPLETE"; 41618 FormEvent["PART_ATTRIBUTES_UPDATE_COMPLETE"] = "PART_ATTRIBUTES_UPDATE_COMPLETE"; 41619 FormEvent["REGISTRATION_CUSTOM_COMPLETE"] = "REGISTRATION_CUSTOM_COMPLETE"; 41620 FormEvent["SELECT_SUBSCRIPTION_COMPLETE"] = "SELECT_SUBSCRIPTION_COMPLETE"; 41621 FormEvent["UPDATE"] = "UPDATE"; 41622 FormEvent["GO_BACK"] = "GO_BACK"; 41623 FormEvent["VERIFY_EMAIL_UPDATE_OTP"] = "VERIFY_EMAIL_UPDATE_OTP"; 41624 FormEvent["VERIFY_PASSWORD_UPDATE_OTP"] = "VERIFY_PASSWORD_UPDATE_OTP"; 41625 FormEvent["PART_CHANGE_PAYMENT_COMPLETE"] = "PART_CHANGE_PAYMENT_COMPLETE"; 41626 FormEvent["LIST_DEVICES_SESSIONS"] = "LIST_DEVICES_SESSIONS";
41627 FormEvent["SIGN_OUT_ALL_DEVICES"] = "SIGN_OUT_ALL_DEVICES"; 41628 FormEvent["SIGN_OUT_SINGLE_DEVICE"] = "SIGN_OUT_SINGLE_DEVICE"; 41629 FormEvent["GIFT_REDEMPTION_COMPLETE"] = "GIFT_REDEMPTION_COMPLETE"; 41630 FormEvent["SUSPEND_RESUME_SUBSCRIPTION_COMPLETE"] = "SUSPEND_RESUME_SUBSCRIPTION_COMPLETE"; 41631 FormEvent["BILL_TO_CONTACT_COMPLETE"] = "BILL_TO_CONTACT_COMPLETE"; 41632 })(FormEvent || (FormEvent = {})); 41633 41634 const partTypes = { 41635 PLAN_SELECT: { 41636 type: 'plan-select', 41637 order: 0, 41638 completionEvent: FormEvent.PART_PLAN_SELECT_COMPLETE 41639 }, 41640 ACCOUNT_VERIFICATION: { 41641 type: 'account-verification', 41642 order: 1, 41643 completionEvent: FormEvent.PART_ACCOUNT_VERIFICATION_COMPLETE 41644 }, 41645 GIFT_RECIPIENT: { 41646 type: 'gift-recipient', 41647 order: 1, 41648 completionEvent: FormEvent.PART_GIFT_RECIPIENT_COMPLETE 41649 }, 41650 PAYMENT: { 41651 type: 'payment', 41652 order: 2, 41653 completionEvent: FormEvent.PART_PAYMENT_COMPLETE 41654 }, 41655 SUCCESS: { 41656 type: 'success', 41657 order: 3, 41658 completionEvent: FormEvent.PART_SUCCESS_COMPLETE 41659 }, 41660 CONTACT_VERIFICATION: { 41661 type: 'contact-verification', 41662 order: 1, 41663 completionEvent: FormEvent.PART_CONTACT_VERIFICATION_COMPLETE 41664 }, 41665 PROFILE_UPDATE: { 41666 type: 'profile-update', 41667 order: 0, 41668 completionEvent: FormEvent.PART_PROFILE_UPDATE_COMPLETE 41669 }, 41670 SELECT_SUBSCRIPTION: { 41671 type: 'select-subscription', 41672 order: 0, 41673 completionEvent: FormEvent.SELECT_SUBSCRIPTION_COMPLETE 41674 }, 41675 EMAIL_UPDATE: { 41676 type: 'email-update', 41677 order: 0, 41678 completionEvent: FormEvent.PART_EMAIL_UPDATE_COMPLETE 41679 }, 41680 EMAIL_UPDATE_OTP: { 41681 type: 'email-update-otp', 41682 order: 0, 41683 completionEvent: FormEvent.PART_EMAIL_UPDATE_OTP_COMPLETE 41684 }, 41685 EMAIL_UPDATE_CONFIRMATION: { 41686 type: 'email-update-confirmation', 41687 order: 0, 41688 completionEvent: FormEvent.PART_EMAIL_UPDATE_CONFIRMATION_COMPLETE 41689 }, 41690 PASSWORD_UPDATE: { 41691 type: 'password-update', 41692 order: 0, 41693 completionEvent: FormEvent.PART_PASSWORD_UPDATE_COMPLETE 41694 }, 41695 PASSWORD_UPDATE_OTP: { 41696 type: 'password-update-otp', 41697 order: 0, 41698 completionEvent: FormEvent.PART_PASSWORD_UPDATE_OTP_COMPLETE 41699 }, 41700 ATTRIBUTES_UPDATE: { 41701 type: 'attributes-update', 41702 order: 0, 41703 completionEvent: FormEvent.PART_ATTRIBUTES_UPDATE_COMPLETE 41704 }, 41705 LIST_SUBSCRIPTIONS: { 41706 type: 'list-subscriptions', 41707 order: 0, 41708 }, 41709 BILLING_HISTORY: { 41710 type: 'billing-history', 41711 order: 0, 41712 }, 41713 PAST_SUBSCRIPTIONS: { 41714 type: 'past-subscriptions', 41715 order: 0, 41716 }, 41717 CHANGE_PAYMENT: { 41718 type: 'change-payment', 41719 order: 2, 41720 completionEvent: FormEvent.PART_CHANGE_PAYMENT_COMPLETE 41721 }, 41722 DEVICES_SESSIONS: { 41723 type: 'devices-sessions', 41724 order: 0, 41725 completionEvent: FormEvent.LIST_DEVICES_SESSIONS 41726 }, 41727 CANCEL_SUCCESS: { 41728 type: 'cancel-success', 41729 order: 3, 41730 }, 41731 GIFT_REDEMPTION: { 41732 type: 'gift_redemption', 41733 order: 4 41734 }, 41735 GIFT_DETAILS: { 41736 type: 'gift-details', 41737 order: 1 41738 }, 41739 SUSPEND_RESUME_SUBSCRIPTION: { 41740 type: 'suspend-resume-subscription', 41741 order: 0, 41742 completionEvent: FormEvent.SUSPEND_RESUME_SUBSCRIPTION_COMPLETE 41743 }, 41744 SUBSCRIPTION_CUSTOM_FIELDS: { 41745 type: 'subscription-custom-fields', 41746 order: 0, 41747 }, 41748 BILL_TO_CONTACT: { 41749 type: 'bill-to-contact', 41750 order: 0, 41751 completionEvent: FormEvent.BILL_TO_CONTACT_COMPLETE 41752 } 41753 }; 41754 const partTypeFor = (type) => Object.values(partTypes).find(p => p.type == type) || (() => { throw `No part ${type} found`; })(); 41755 41756 var ServerError; 41757 (function (ServerError) { 41758 ServerError[ServerError["USER_DOES_NOT_EXIST"] = 0] = "USER_DOES_NOT_EXIST"; 41759 ServerError[ServerError["USER_ALREADY_EXISTS"] = 1] = "USER_ALREADY_EXISTS"; 41760 ServerError[ServerError["PASSWORD_NOT_STRONG_ENOUGH"] = 2] = "PASSWORD_NOT_STRONG_ENOUGH"; 41761 ServerError[ServerError["EMAIL_VERIFICATION_REQUIRED"] = 3] = "EMAIL_VERIFICATION_REQUIRED"; 41762 ServerError[ServerError["VERIFICATION_CODE_OR_PASSWORD_INCORRECT"] = 4] = "VERIFICATION_CODE_OR_PASSWORD_INCORRECT"; 41763 ServerError[ServerError["VERIFICATION_CODE_INCORRECT"] = 5] = "VERIFICATION_CODE_INCORRECT"; 41764 ServerError[ServerError["LOGIN_FAILED"] = 6] = "LOGIN_FAILED";
41765 ServerError[ServerError["UNKNOWN_LOGIN_REGISTER_ERROR"] = 7] = "UNKNOWN_LOGIN_REGISTER_ERROR"; 41766 ServerError[ServerError["NO_COOKIE_FROM_LOGIN_REGISTER_ERROR"] = 8] = "NO_COOKIE_FROM_LOGIN_REGISTER_ERROR"; 41767 ServerError[ServerError["NO_ACCOUNT_ACCESS"] = 9] = "NO_ACCOUNT_ACCESS"; 41768 ServerError[ServerError["ACCOUNT_NOT_FOUND"] = 10] = "ACCOUNT_NOT_FOUND"; 41769 ServerError[ServerError["PAYMENT_PROCESSING_ERROR"] = 11] = "PAYMENT_PROCESSING_ERROR"; 41770 ServerError[ServerError["MOBILE_PAYMENT_PROCESSING_ERROR"] = 12] = "MOBILE_PAYMENT_PROCESSING_ERROR"; 41771 ServerError[ServerError["PASSWORD_RESET_LINK_SEND_ERROR"] = 13] = "PASSWORD_RESET_LINK_SEND_ERROR"; 41772 ServerError[ServerError["PASSWORD_RESET_ERROR"] = 14] = "PASSWORD_RESET_ERROR"; 41773 ServerError[ServerError["VERIFICATION_CODE_SEND_ERROR"] = 15] = "VERIFICATION_CODE_SEND_ERROR"; 41774 ServerError[ServerError["SOCIAL_SIGNIN_REGISTRATION_LOGIN_ERROR"] = 16] = "SOCIAL_SIGNIN_REGISTRATION_LOGIN_ERROR"; 41775 ServerError[ServerError["PROMO_CODE_EXPIRED_ERROR"] = 17] = "PROMO_CODE_EXPIRED_ERROR"; 41776 ServerError[ServerError["PROMO_CODE_INVALID_ERROR"] = 18] = "PROMO_CODE_INVALID_ERROR"; 41777 ServerError[ServerError["PROMO_CODE_NOT_VALID_FOR_PLAN_ERROR"] = 19] = "PROMO_CODE_NOT_VALID_FOR_PLAN_ERROR"; 41778 ServerError[ServerError["INVITATION_FAILED_LIMIT_REACHED"] = 20] = "INVITATION_FAILED_LIMIT_REACHED"; 41779 ServerError[ServerError["INVITATION_FAILED_DUPLICATE_EMAIL"] = 21] = "INVITATION_FAILED_DUPLICATE_EMAIL"; 41780 ServerError[ServerError["INVITATION_FAILED_INVALID_EMAIL"] = 22] = "INVITATION_FAILED_INVALID_EMAIL"; 41781 ServerError[ServerError["INVITATION_FAILED_NO_PRODUCT_ACCESS"] = 23] = "INVITATION_FAILED_NO_PRODUCT_ACCESS"; 41782 ServerError[ServerError["INVITATION_FAILED_UNKNOWN"] = 24] = "INVITATION_FAILED_UNKNOWN"; 41783 ServerError[ServerError["TOO_MANY_SESSIONS"] = 25] = "TOO_MANY_SESSIONS"; 41784 ServerError[ServerError["INVALID_USER_ATTRIBUTES"] = 26] = "INVALID_USER_ATTRIBUTES"; 41785 ServerError[ServerError["CONTACT_CREATION_NOT_ENABLED"] = 27] = "CONTACT_CREATION_NOT_ENABLED"; 41786 ServerError[ServerError["NO_AUTHENTICATED_SESSION"] = 28] = "NO_AUTHENTICATED_SESSION"; 41787 ServerError[ServerError["BLOCKED_EMAIL_DOMAIN"] = 29] = "BLOCKED_EMAIL_DOMAIN"; 41788 ServerError[ServerError["UNKNOWN"] = 30] = "UNKNOWN"; 41789 ServerError[ServerError["GIFT_CODE_INVALID"] = 31] = "GIFT_CODE_INVALID"; 41790 ServerError[ServerError["GIFT_CODE_ALREADY_REDEEMED"] = 32] = "GIFT_CODE_ALREADY_REDEEMED"; 41791 ServerError[ServerError["GIFT_CODE_SERVER_ERROR"] = 33] = "GIFT_CODE_SERVER_ERROR"; 41792 })(ServerError || (ServerError = {})); 41793 const ServerErrors = { 41794 [ServerError.USER_DOES_NOT_EXIST]: { 41795 languagePackKey: 'forms.errors.user-not-found', 41796 fallbackMessage: 'User not found.', 41797 jumpToPart: partTypes.ACCOUNT_VERIFICATION.type, 41798 displayOnElements: [elementTypes.EMAIL_ADDRESS] 41799 }, 41800 [ServerError.USER_ALREADY_EXISTS]: { 41801 languagePackKey: 'forms.errors.email-taken', 41802 fallbackMessage: 'This email address is already registered. Please log in to continue.', 41803 jumpToPart: partTypes.ACCOUNT_VERIFICATION.type, 41804 displayOnElements: [elementTypes.EMAIL_ADDRESS] 41805 }, 41806 [ServerError.EMAIL_VERIFICATION_REQUIRED]: { 41807 languagePackKey: 'forms.errors.email-verification-required', 41808 fallbackMessage: 'Email verification is required', 41809 jumpToPart: partTypes.ACCOUNT_VERIFICATION.type, 41810 displayOnElements: [elementTypes.EMAIL_ADDRESS] 41811 }, 41812 [ServerError.VERIFICATION_CODE_OR_PASSWORD_INCORRECT]: { 41813 languagePackKey: 'forms.errors.otp-or-password-incorrect', 41814 fallbackMessage: 'The password or code you entered is incorrect.', 41815 displayOnElements: [elementTypes.VERIFICATION_CODE, elementTypes.PASSWORD] 41816 }, 41817 [ServerError.VERIFICATION_CODE_INCORRECT]: { 41818 languagePackKey: 'forms.errors.otp-incorrect', 41819 fallbackMessage: 'The code you entered is incorrect.', 41820 displayOnElements: [elementTypes.VERIFICATION_CODE] 41821 }, 41822 [ServerError.LOGIN_FAILED]: { 41823 languagePackKey: 'forms.errors.login-failed', 41824 fallbackMessage: 'The email address or password you entered is incorrect.', 41825 displayOnElements: [elementTypes.PASSWORD, elementTypes.VERIFICATION_CODE] 41826 }, 41827 [ServerError.PASSWORD_NOT_STRONG_ENOUGH]: { 41828 languagePackKey: 'n/a', 41829 fallbackMessage: '', 41830 useDymamicMessage: true, 41831 displayOnElements: [elementTypes.PASSWORD] 41832 },
41833 [ServerError.UNKNOWN_LOGIN_REGISTER_ERROR]: { 41834 languagePackKey: 'forms.errors.unknown-error', 41835 fallbackMessage: 'Something went wrong. Please try again later', 41836 displayOnElements: [elementTypes.PASSWORD, elementTypes.VERIFICATION_CODE] 41837 }, 41838 [ServerError.NO_COOKIE_FROM_LOGIN_REGISTER_ERROR]: { 41839 languagePackKey: 'forms.errors.unknown-error', 41840 fallbackMessage: 'Something went wrong. Please try again later', 41841 displayOnElements: [elementTypes.PASSWORD, elementTypes.VERIFICATION_CODE] 41842 }, 41843 [ServerError.NO_ACCOUNT_ACCESS]: { 41844 languagePackKey: 'forms.errors.too-many-requests', 41845 fallbackMessage: 'To gain login access, please contact your administrator.', 41846 displayOnElements: [elementTypes.PASSWORD] 41847 }, 41848 [ServerError.ACCOUNT_NOT_FOUND]: { 41849 languagePackKey: 'forms.errors.company-account-not-found', 41850 fallbackMessage: 'Account not found.', 41851 jumpToPart: partTypes.ACCOUNT_VERIFICATION.type, 41852 displayOnElements: [elementTypes.ACCOUNT_MEMBERSHIP_CODE] 41853 }, 41854 [ServerError.PAYMENT_PROCESSING_ERROR]: { 41855 languagePackKey: 'forms.errors.unknown-payment-error', 41856 fallbackMessage: 'Something went wrong when processing your payment. Please try again later.', 41857 displayOnElements: [elementTypes.PAYMENT] 41858 }, 41859 [ServerError.MOBILE_PAYMENT_PROCESSING_ERROR]: { 41860 languagePackKey: 'forms.errors.unknown-payment-error', 41861 fallbackMessage: 'Something went wrong when processing your payment. Please try again later.', 41862 displayOnElements: [elementTypes.MOBILE_PAYMENT] 41863 }, 41864 [ServerError.PASSWORD_RESET_LINK_SEND_ERROR]: { 41865 languagePackKey: 'forms.errors.password-reset-link-send-failed', 41866 fallbackMessage: 'Unable to send a password reset link. Please try again later', 41867 displayOnElements: [elementTypes.RESET_PASSWORD_LINK] 41868 }, 41869 [ServerError.VERIFICATION_CODE_SEND_ERROR]: { 41870 languagePackKey: 'forms.errors.otp-send-failed', 41871 fallbackMessage: 'Unable to send a verification code. Please try again later', 41872 displayOnElements: [elementTypes.VERIFICATION_CODE] 41873 }, 41874 [ServerError.PASSWORD_RESET_ERROR]: { 41875 languagePackKey: 'forms.errors.password-reset-failed', 41876 fallbackMessage: 'Unable to reset your password. Please try again later', 41877 displayOnElements: [elementTypes.PASSWORD] 41878 }, 41879 [ServerError.SOCIAL_SIGNIN_REGISTRATION_LOGIN_ERROR]: { 41880 languagePackKey: 'forms.errors.unknown-error', 41881 fallbackMessage: 'Something went wrong. Please try again later', 41882 displayOnElements: [elementTypes.SOCIAL_SIGNIN] 41883 }, 41884 [ServerError.PROMO_CODE_EXPIRED_ERROR]: { 41885 languagePackKey: 'forms.errors.promo-code-expired', 41886 fallbackMessage: 'Promo code expired', 41887 displayOnElements: [elementTypes.PAYMENT_SUMMARY] 41888 }, 41889 [ServerError.PROMO_CODE_INVALID_ERROR]: { 41890 languagePackKey: 'forms.errors.promo-code-invalid', 41891 fallbackMessage: 'Invalid promo code', 41892 displayOnElements: [elementTypes.PAYMENT_SUMMARY] 41893 }, 41894 [ServerError.PROMO_CODE_NOT_VALID_FOR_PLAN_ERROR]: { 41895 languagePackKey: 'forms.errors.promo-code-invalid-for-payment-option', 41896 fallbackMessage: 'Promo code cannot be applied to selected option', 41897 displayOnElements: [elementTypes.PAYMENT_SUMMARY] 41898 }, 41899 [ServerError.INVITATION_FAILED_LIMIT_REACHED]: { 41900 languagePackKey: 'forms.errors.invitation-failed-limit-reached', 41901 fallbackMessage: 'You have reached the sharing limit for this product', 41902 displayOnElements: [elementTypes.INVITATION] 41903 }, 41904 [ServerError.INVITATION_FAILED_DUPLICATE_EMAIL]: { 41905 languagePackKey: 'forms.errors.invitation-failed-duplicate-email', 41906 fallbackMessage: 'An invite has already been created for this email', 41907 displayOnElements: [elementTypes.INVITATION] 41908 }, 41909 [ServerError.INVITATION_FAILED_INVALID_EMAIL]: { 41910 languagePackKey: 'forms.errors.invitation-failed-invalid-email', 41911 fallbackMessage: 'Invalid email address', 41912 displayOnElements: [elementTypes.INVITATION] 41913 }, 41914 [ServerError.INVITATION_FAILED_NO_PRODUCT_ACCESS]: { 41915 languagePackKey: 'forms.errors.invitation-failed-no-product-access', 41916 fallbackMessage: 'You do not currently have access to this product', 41917 displayOnElements: [elementTypes.INVITATION] 41918 }, 41919 [ServerError.INVITATION_FAILED_UNKNOWN]: { 41920 languagePackKey: 'forms.errors.unknown-error', 41921 fallbackMessage: 'Something went wrong. Please try again later', 41922 displayOnElements: [elementTypes.INVITATION] 41923 }, 41924 [ServerError.TOO_MANY_SESSIONS]: { 41925 languagePackKey: 'forms.errors.session-limit-reached', 41926 fallbackMessage: 'You have reached the session limit. Please log out from another device to access this content.', 41927 displayOnElements: [elementTypes.EMAIL_ADDRESS] 41928 }, 41929 [ServerError.INVALID_USER_ATTRIBUTES]: { 41930 languagePackKey: 'forms.errors.user-attribute-invalid', 41931 fallbackMessage: 'Invalid User Attribute', 41932 displayOnElements: [elementTypes.USER_ATTRIBUTE] 41933 }, 41934 [ServerError.CONTACT_CREATION_NOT_ENABLED]: { 41935 languagePackKey: 'forms.errors.contact-creation-disabled', 41936 fallbackMessage: 'This operation is not possible at the moment, please try again later.', 41937 jumpToPart: partTypes.ACCOUNT_VERIFICATION.type, 41938 displayOnElements: [elementTypes.EMAIL_ADDRESS] 41939 }, 41940 [ServerError.NO_AUTHENTICATED_SESSION]: { 41941 languagePackKey: 'forms.errors.no-authenticated-session', 41942 fallbackMessage: 'Please login to update your profile', 41943 }, 41944 [ServerError.BLOCKED_EMAIL_DOMAIN]: { 41945 languagePackKey: 'forms.errors.email-domain-blocked', 41946 fallbackMessage: 'Please use a different email address, this domain is not supported.', 41947 jumpToPart: partTypes.ACCOUNT_VERIFICATION.type, 41948 displayOnElements: [elementTypes.EMAIL_ADDRESS] 41949 }, 41950 [ServerError.UNKNOWN]: { 41951 languagePackKey: 'forms.errors.unknown-error', 41952 fallbackMessage: 'Something went wrong. Please try again later', 41953 }, 41954 [ServerError.GIFT_CODE_INVALID]: { 41955 languagePackKey: 'forms.errors.gift-code-invalid', 41956 fallbackMessage: 'Invalid gift code', 41957 displayOnElements: [elementTypes.GIFT_CODE] 41958 }, 41959 [ServerError.GIFT_CODE_ALREADY_REDEEMED]: { 41960 languagePackKey: 'forms.errors.gift-code-already-redeemed', 41961 fallbackMessage: 'Gift code already redeemed', 41962 displayOnElements: [elementTypes.GIFT_CODE] 41963 }, 41964 [ServerError.GIFT_CODE_SERVER_ERROR]: { 41965 languagePackKey: 'forms.errors.gift-code-server-error', 41966 fallbackMessage: 'Something went wrong with the gift co
41966de. Please try again later', 41967 displayOnElements: [elementTypes.GIFT_CODE] 41968 } 41969 }; 41970 const serverErrorForElement = (elementType, formState) => formState.serverErrors.find(e => ServerErrors[e].displayOnElements?.includes(elementType)) ?? undefined; 41971 41972 const sectionTypes = { 41973 PLAN_SELECT: { 41974 type: 'plan_select', 41975 defaultLabel: 'Plan Select', 41976 fullWidth: true 41977 }, 41978 EMAIL: { 41979 type: 'email', 41980 defaultLabel: 'Account Verification', 41981 completionEvent: FormEvent.SECTION_EMAIL_COMPLETE, 41982 }, 41983 RECIPIENT_DETAILS: { 41984 type: 'recipient_details', 41985 defaultLabel: 'Recipient', 41986 }, 41987 PASSWORD_SETUP: { 41988 type: 'password_setup', 41989 defaultLabel: 'Password Setup' 41990 }, 41991 PASSWORDLESS_VIA_LOGIN_LINK: { 41992 type: 'passwordless_login_via_link', 41993 defaultLabel: 'Passwordless Login via Login Link' 41994 }, 41995 VERIFICATION_CODE_LOGIN: { 41996 type: 'verification_code_login', 41997 defaultLabel: '' 41998 }, 41999 VERIFICATION_CODE_REGISTRATION: { 42000 type: 'verification_code_registration', 42001 defaultLabel: '' 42002 }, 42003 LOGIN_PASSWORD: { 42004 type: 'login_password', 42005 defaultLabel: 'Login' 42006 }, 42007 REGISTRATION_CUSTOM: { 42008 type: 'registration_custom', 42009 defaultLabel: '', 42010 }, 42011 FORGOT_PASSWORD: { 42012 type: 'forgot_password', 42013 defaultLabel: '', 42014 completionEvent: FormEvent.SECTION_FORGOT_PASSWORD_COMPLETE, 42015 }, 42016 PASSWORD_RESET: { 42017 type: 'reset_password', 42018 defaultLabel: '', 42019 completionEvent: FormEvent.SECTION_PASSWORD_RESET_COMPLETE, 42020 }, 42021 SUCCESS: { 42022 type: 'success', 42023 defaultLabel: '' 42024 }, 42025 EMAIL_VERIFIED: { 42026 type: 'email_verified', 42027 defaultLabel: '' 42028 }, 42029 READ_ONLY_PROFILE: { 42030 type: 'read_only_profile', 42031 defaultLabel: 'Read Only Profile' 42032 }, 42033 UPDATE_EMAIL: { 42034 type: 'update_email', 42035 defaultLabel: 'Update Email' 42036 }, 42037 EMAIL_UPDATE_CONFIRMATION: { 42038 type: 'email_update_confirmation', 42039 defaultLabel: 'Email Update Confirmation' 42040 }, 42041 UPDATE_PASSWORD: { 42042 type: 'update_password', 42043 defaultLabel: 'Update Password' 42044 }, 42045 UPDATE_ATTRIBUTES: { 42046 type: 'update_attributes', 42047 defaultLabel: 'Update Attributes' 42048 }, 42049 CHANGE_PAYMENT: { 42050 type: 'change-payment', 42051 completionEvent: FormEvent.PART_CHANGE_PAYMENT_COMPLETE, 42052 defaultLabel: '' 42053 }, 42054 SELECT: { 42055 type: 'select', 42056 defaultLabel: '', 42057 fullWidth: true, 42058 }, 42059 LIST: { 42060 type: 'list', 42061 defaultLabel: '', 42062 fullWidth: true, 42063 }, 42064 PAST_SUBSCRIPTIONS: { 42065 type: 'past-subscriptions', 42066 defaultLabel: '', 42067 fullWidth: true, 42068 }, 42069 GIFT_REDEMPTION: { 42070 type: 'gift_redemption', 42071 defaultLabel: 'Gift Code Redemption', 42072 completionEvent: FormEvent.GIFT_REDEMPTION_COMPLETE 42073 }, 42074 GIFT_REDEEMED: { 42075 type: 'gift_redeemed', 42076 defaultLabel: 'Gift Redeemed' 42077 }, 42078 GIFT_DETAIL: { 42079 type: 'gift-detail', 42080 defaultLabel: 'Gift Details' 42081 }, 42082 SUSPEND_RESUME_SUBSCRIPTION: { 42083 type: 'suspend_resume_subscription', 42084 defaultLabel: 'Suspend/Resume Subscription', 42085 }, 42086 BILL_TO_CONTACT: { 42087 type: 'bill_to_contact', 42088 defaultLabel: 'Update Bill To Contact Address', 42089 }, 42090 }; 42091 const sectionTypeFor = (type) => Object.values(sectionTypes).find(s => s.type == type); 42092 42093 function logDataLayerEvent(form, eventName, customDimensions) { 42094 const event = { 42095 event: eventName, 42096 formType: form.formType, 42097 formId: form.formId, 42098 ruleId: form.ruleId, 42099 outcomeId: form.outcomeId, 42100 ...customDimensions 42101 }; 42102 window.postMessage({ 'zephr-form-datalayer-event': event }, window.origin); 42103 if (!form.organisationConfiguration.trackFormDataLayerEvents) { 42104 return; 42105 } 42106 const dataLayerName = form.organisationConfiguration.dataLayerName || 'dataLayer'; 42107 window[dataLayerName] = window[dataLayerName] || []; 42108 window[dataLayerName].push(event); 42109 } 42110 42111 const reScrollToFormTop = (formId) => { 42112 try { 42113 const formRootElement = document.getElementById(formId); 42114 if (!formRootElement) 42115 return; 42116 const { top } = formRootElement.getBoundingClientRect(); 42117 if (top < 0) { 42118 formRootElement.scrollIntoView({ 42119 block: "start", 42120 inline: "nearest", 42121 }); 42122 } 42123 } 42124 catch (err) { 42125 console.error(err); 42126 } 42127 }; 42128 42129 /** 42130 * Functions to initiate movements through the form sections. 42131 */ 42132 const findSection = (sectionType, form) => { 42133 return form.parts 42134 .flatMap(part => part.sections.map(section => ({ part, section }))) 42135 .find(partSection => partSection.section.type === sectionType); 42136 }; 42137 const findSectionByAddress = (address, form) => { 42138 const [part, section] = address.includes(':') ? address.split(':') : [null, address]; 42139 return form.parts 42140 .flatMap(part => part.sections.map(section => ({ part, section }))) 42141 .find(partSection => partSection.section.type === section && (!part || partSection.part.type === part)); 42142 }; 42143 const jumpToSection = (sectionType, form, formActions) => { 42144 const destination = findSection(sectionType, form); 42145 if (!destination) { 42146 throw `Cannot find section ${sectionType}`; 42147 } 42148 const formState = formActions.getFormState(); 42149 setSection({ 42150 form, 42151 formActions, 42152 part: destination.part, 42153 section: destination.section, 42154 previousPart: formState.currentPart, 42155 previousSection: formState.currentSection 42156 }); 42157 return Promise.resolve(); 42158 }; 42159 const jumpToPart = (partType, form, formActions) => { 42160 if (form.environment.previewMode) { 42161 return; 42162 } 42163 const part = form.parts.find(p => p.type == partType); 42164 const formState = formActions.getFormState(); 42165 setSection({ 42166 form, 42167 formActions, 42168 part, 42169 section: part.sections[0], 42170 previousPart: formState.currentPart, 42171 previousSection: formState.currentSection 42172 }); 42173 return Promise.resolve(); 42174 }; 42175 const findNextPart = (currentPart, form) => { 42176 const partType = partTypeFor(currentPart.type); 42177 if (partType) { 42178 const nextPart = form.parts.find((p) => partTypeFor(p.type).order === partType.order + 1) 42179 ?? form.parts[form.parts.indexOf(currentPart) + 1]; 42180 if (nextPart) { 42181 return { 42182 section: nextPart.sections[0], 42183 part: nextPart 42184 }; 42185 } 42186 } 42187 return null; 42188 }; 42189 const findNextSection = (currentSection, currentPart, form) => { 42190 // Next section in part ... 42191 const currentSectionIndex = currentPart.sections.findIndex((s) => s.order == currentSection.order); 42192 if (currentPart.sections.length > currentSectionIndex + 1) { 42193 return { 42194 section: currentPart.sections[currentSectionIndex + 1], 42195 part: currentPart 42196 }; 42197 } 42198 // ... or the first setion in next part 42199 return findNextPart(currentPart, form); 42200 }; 42201 const mapCustomSectionType = (sectionType) => { 42202 return sectionType?.startsWith('custom_') ? 'registration_custom' : sectionType; 42203 }; 42204 const isSectionVisible = (section, form, formState) => form.sectionFlow.sectionVisibilities.find((s) => s.type === mapCustomSectionType(section.type)) 42205 ?.isVisible(form, formState) ?? true; 42206 const isSectionDisplayedInProgressBar = (section, form, formState) => { 42207 const sectionConfig = form.sectionFlow.sectionVisibilities 42208 .find((s) => (s.type === mapCustomSectionType(section.type))); 42209 return (sectionConfig?.isDisplayedInProgressBar && isSectionVisible(section, form, formState)) ?? true; 42210 }; 42211 const moveToNextSection = (form, formState, formActions) => { 42212 if (form.environment.previewMode) { 42213 return; 42214 } 42215 // Find the next visible section 42216 let i = 0; 42217 let nextPartSection = { part: formState.currentPart, section: formState.currentSection }; 42218 do { 42219 i++; 42220 if (i > 50) { 42221 throw new Error(`Cannot move from ${formState.currentPart.type}:${formState.currentSection.type}. 42222 Exceeded max loop size after ${nextPartSection?.part?.type}:${nextPartSection?.section?.type} 42223 `); 42224 } 42225 const next = findNextSection(nextPartSection?.section, nextPartSection?.part, form); 42226 if (next?.part.type === nextPartSection?.part?.type 42227 && next?.section.type === nextPartSection?.section?.type 42228 && next?.section.order === nextPartSection?.section?.order) { 42229 throw new Error(`Cannot move from ${formState.currentPart.type}:${formState.currentSection.type}. 42230 Infinte loop found at next section ${next?.part?.type}:${next?.section?.type} 42231 `); 42232 } 42233 nextPartSection = next; 42234 } while (nextPartSection && !isSectionVisible(nextPartSection.section, form, formState)); 42235 if (!nextPartSection || nextPartSection.part !== formState.currentPart) { 42236 const part = partTypeFor(formState.currentPart.type); 42237 const action = part?.completionEvent && form.sectionFlow.eventHandlers[part.completionEvent]; 42238 if (action) { 42239 return action(form, formState, formActions); 42240 } 42241 } 42242 if (!nextPartSection) { 42243 throw "No next section"; 42244 } 42245 setSection({ 42246 form, 42247 formActions, 42248 part: nextPartSection.part, 42249 section: nextPartSection.section, 42250 previousPart: formState.currentPart, 42251 previousSection: formState.currentSection 42252 }); 42253 return Promise.resolve(); 42254 }; 42255 const completeSection = (form, formState, formActions) => { 42256 if (form.environment.previewMode) { 42257 return; 42258 } 42259 const sectionType = sectionTypeFor(formState.currentSection.type); 42260 const action = (sectionType && form.sectionFlow.eventHandlers[sectionType.completionEvent]) ?? moveToNextSection; 42261 return action(form, formState, formActions); 42262 }; 42263 const attemptCompleteSection = (form, _, formActions) => { 42264 if (formActions.getFormState().canAttemptSectionCompletion) { 42265 const updatedState = formActions.updateFormState({ 42266 showFieldErrors: false 42267 }); 42268 return completeSection(form, updatedState, formActions); 42269 } 42270 formActions.updateFormState({ 42271 showFieldErrors: true 42272 }); 42273 return Promise.resolve(); 42274 }; 42275 const setSection = ({ form, formActions, part, section, previousSection, previousPart }) => { 42276 formActions.updateFormState({ 42277 currentPart: part, 42278 currentSection: section 42279 }); 42280 logDataLayerEvent(form, 'zephr_form_section_change', { 42281 sectionId: section.type, 42282 previousSectionId: previousSection.type, 42283 partId: part.type, 42284 previousPartId: previousPart.type 42285 }); 42286 reScrollToFormTop(form.formId); 42287 }; 42288 42289 /* src/components/elements/progressBar/ProgressBar.svelte generated by Svelte v4.2.12 */ 42290 42291 function get_each_context$h(ctx, list, i) { 42292 const child_ctx = ctx.slice(); 42293 child_ctx[7] = list[i]; 42294 const constants_0 = !/*disabled*/ child_ctx[0] && !/*item*/ child_ctx[7].isDisabled && /*item*/ child_ctx[7].order < /*currentItem*/ child_ctx[2].order; 42295 child_ctx[8] = constants_0; 42296 return child_ctx; 42297 } 42298 42299 // (15:0) {#if !isNaN(value)} 42300 function create_if_block$L(ctx) { 42301 let div; 42302 let t; 42303 let progress; 42304 let each_value = ensure_array_like(/*visibleItems*/ ctx[3]); 42305 let each_blocks = []; 42306 42307 for (let i = 0; i < each_value.length; i += 1) { 42308 each_blocks[i] = create_each_block$h(get_each_context$h(ctx, each_value, i)); 42309 } 42310 42311 return { 42312 c() { 42313 div = element("div"); 42314 42315 for (let i = 0; i < each_blocks.length; i += 1) { 42316 each_blocks[i].c(); 42317 } 42318 42319 t = space(); 42320 progress = element("progress"); 42321 attr(div, "class", "zephr-form-flex-container"); 42322 toggle_class(div, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[1]); 42323 attr(progress, "class", "zephr-form-progress-bar svelte-19rlx92"); 42324 attr(progress, "id", "progress-bar"); 42325 attr(progress, "max", "100"); 42326 progress.value = /*value*/ ctx[4]; 42327 toggle_class(progress, "zephr-payment-form-progress-bar", /*isPaymentForm*/ ctx[1]); 42328 }, 42329 m(target, anchor) { 42330 insert(target, div, anchor); 42331 42332 for (let i = 0; i < each_blocks.length; i += 1) { 42333 if (each_blocks[i]) { 42334 each_blocks[i].m(div, null); 42335 } 42336 } 42337 42338 insert(target, t, anchor); 42339 insert(target, progress, anchor); 42340 }, 42341 p(ctx, dirty) {
42342 if (dirty & /*isPaymentForm, visibleItems, disabled, currentItem*/ 15) { 42343 each_value = ensure_array_like(/*visibleItems*/ ctx[3]); 42344 let i; 42345 42346 for (i = 0; i < each_value.length; i += 1) { 42347 const child_ctx = get_each_context$h(ctx, each_value, i); 42348 42349 if (each_blocks[i]) { 42350 each_blocks[i].p(child_ctx, dirty); 42351 } else { 42352 each_blocks[i] = create_each_block$h(child_ctx); 42353 each_blocks[i].c(); 42354 each_blocks[i].m(div, null); 42355 } 42356 } 42357 42358 for (; i < each_blocks.length; i += 1) { 42359 each_blocks[i].d(1); 42360 } 42361 42362 each_blocks.length = each_value.length; 42363 } 42364 42365 if (dirty & /*isPaymentForm*/ 2) { 42366 toggle_class(div, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[1]); 42367 } 42368 42369 if (dirty & /*value*/ 16) { 42370 progress.value = /*value*/ ctx[4]; 42371 } 42372 42373 if (dirty & /*isPaymentForm*/ 2) { 42374 toggle_class(progress, "zephr-payment-form-progress-bar", /*isPaymentForm*/ ctx[1]); 42375 } 42376 }, 42377 d(detaching) { 42378 if (detaching) { 42379 detach(div); 42380 detach(t); 42381 detach(progress); 42382 } 42383 42384 destroy_each(each_blocks, detaching); 42385 } 42386 }; 42387 } 42388 42389 // (33:6) {:else} 42390 function create_else_block$b(ctx) { 42391 let div; 42392 let t0_value = /*item*/ ctx[7].label + ""; 42393 let t0; 42394 let t1; 42395 42396 return { 42397 c() { 42398 div = element("div"); 42399 t0 = text(t0_value); 42400 t1 = space(); 42401 attr(div, "class", "zephr-progress-bar-step disabled svelte-19rlx92"); 42402 toggle_class(div, "zephr-payment-progress-bar-step", /*isPaymentForm*/ ctx[1]); 42403 }, 42404 m(target, anchor) { 42405 insert(target, div, anchor); 42406 append(div, t0); 42407 append(div, t1); 42408 }, 42409 p(ctx, dirty) { 42410 if (dirty & /*visibleItems*/ 8 && t0_value !== (t0_value = /*item*/ ctx[7].label + "")) set_data(t0, t0_value); 42411 42412 if (dirty & /*isPaymentForm*/ 2) { 42413 toggle_class(div, "zephr-payment-progress-bar-step", /*isPaymentForm*/ ctx[1]); 42414 } 42415 }, 42416 d(detaching) { 42417 if (detaching) { 42418 detach(div); 42419 } 42420 } 42421 }; 42422 } 42423 42424 // (24:6) {#if isClickable} 42425 function create_if_block_1$y(ctx) { 42426 let button; 42427 let t0_value = /*item*/ ctx[7].label + ""; 42428 let t0; 42429 let t1; 42430 let mounted; 42431 let dispose; 42432 42433 function click_handler() { 42434 return /*click_handler*/ ctx[6](/*item*/ ctx[7]); 42435 } 42436 42437 return { 42438 c() { 42439 button = element("button"); 42440 t0 = text(t0_value); 42441 t1 = space(); 42442 attr(button, "type", "button"); 42443 attr(button, "class", "zephr-progress-bar-step svelte-19rlx92"); 42444 toggle_class(button, "zephr-payment-progress-bar-step", /*isPaymentForm*/ ctx[1]); 42445 }, 42446 m(target, anchor) { 42447 insert(target, button, anchor); 42448 append(button, t0); 42449 append(button, t1); 42450 42451 if (!mounted) { 42452 dispose = listen(button, "click", prevent_default(click_handler)); 42453 mounted = true; 42454 } 42455 }, 42456 p(new_ctx, dirty) { 42457 ctx = new_ctx; 42458 if (dirty & /*visibleItems*/ 8 && t0_value !== (t0_value = /*item*/ ctx[7].label + "")) set_data(t0, t0_value); 42459 42460 if (dirty & /*isPaymentForm*/ 2) { 42461 toggle_class(button, "zephr-payment-progress-bar-step", /*isPaymentForm*/ ctx[1]); 42462 } 42463 }, 42464 d(detaching) { 42465 if (detaching) { 42466 detach(button); 42467 } 42468 42469 mounted = false; 42470 dispose(); 42471 } 42472 }; 42473 } 42474 42475 // (20:4) {#each visibleItems as item} 42476 function create_each_block$h(ctx) { 42477 let if_block_anchor; 42478 42479 function select_block_type(ctx, dirty) { 42480 if (/*isClickable*/ ctx[8]) return create_if_block_1$y; 42481 return create_else_block$b; 42482 } 42483 42484 let current_block_type = select_block_type(ctx); 42485 let if_block = current_block_type(ctx); 42486 42487 return { 42488 c() { 42489 if_block.c(); 42490 if_block_anchor = empty(); 42491 }, 42492 m(target, anchor) { 42493 if_block.m(target, anchor); 42494 insert(target, if_block_anchor, anchor); 42495 }, 42496 p(ctx, dirty) { 42497 if (current_block_type === (current_block_type = select_block_type(ctx)) && if_block) { 42498 if_block.p(ctx, dirty); 42499 } else { 42500 if_block.d(1); 42501 if_block = current_block_type(ctx); 42502 42503 if (if_block) { 42504 if_block.c(); 42505 if_block.m(if_block_anchor.parentNode, if_block_anchor); 42506 } 42507 } 42508 }, 42509 d(detaching) { 42510 if (detaching) { 42511 detach(if_block_anchor); 42512 } 42513 42514 if_block.d(detaching); 42515 } 42516 }; 42517 } 42518 42519 function create_fragment$1c(ctx) { 42520 let show_if = !isNaN(/*value*/ ctx[4]); 42521 let if_block_anchor; 42522 let if_block = show_if && create_if_block$L(ctx); 42523 42524 return { 42525 c() { 42526 if (if_block) if_block.c(); 42527 if_block_anchor = empty(); 42528 }, 42529 m(target, anchor) { 42530 if (if_block) if_block.m(target, anchor); 42531 insert(target, if_block_anchor, anchor); 42532 }, 42533 p(ctx, [dirty]) {
42534 if (dirty & /*value*/ 16) show_if = !isNaN(/*value*/ ctx[4]); 42535 42536 if (show_if) { 42537 if (if_block) { 42538 if_block.p(ctx, dirty); 42539 } else { 42540 if_block = create_if_block$L(ctx); 42541 if_block.c(); 42542 if_block.m(if_block_anchor.parentNode, if_block_anchor); 42543 } 42544 } else if (if_block) { 42545 if_block.d(1); 42546 if_block = null; 42547 } 42548 }, 42549 i: noop, 42550 o: noop, 42551 d(detaching) { 42552 if (detaching) { 42553 detach(if_block_anchor); 42554 } 42555 42556 if (if_block) if_block.d(detaching); 42557 } 42558 }; 42559 } 42560 42561 function instance$1a($$self, $$props, $$invalidate) { 42562 let currentItem; 42563 let visibleItems; 42564 let value; 42565 let { disabled } = $$props; 42566 let { items } = $$props; 42567 let { isPaymentForm = false } = $$props; 42568 42569 const click_handler = item => { 42570 item.onSelect(); 42571 }; 42572 42573 $$self.$$set = $$props => { 42574 if ('disabled' in $$props) $$invalidate(0, disabled = $$props.disabled); 42575 if ('items' in $$props) $$invalidate(5, items = $$props.items); 42576 if ('isPaymentForm' in $$props) $$invalidate(1, isPaymentForm = $$props.isPaymentForm); 42577 }; 42578 42579 $$self.$$.update = () => { 42580 if ($$self.$$.dirty & /*items*/ 32) { 42581 $$invalidate(2, currentItem = items.find(i => i.isCurrent)); 42582 } 42583 42584 if ($$self.$$.dirty & /*items*/ 32) { 42585 $$invalidate(3, visibleItems = items.filter(i => i.isVisible)); 42586 } 42587 42588 if ($$self.$$.dirty & /*visibleItems, currentItem*/ 12) { 42589 $$invalidate(4, value = Math.floor(100 / (visibleItems.length - 1) * (currentItem.isVisible 42590 ? currentItem.visibleOrder 42591 : Math.max.apply(Math, visibleItems.filter(i => i.order < currentItem.order).map(i => i.visibleOrder))))); 42592 } 42593 }; 42594 42595 return [ 42596 disabled, 42597 isPaymentForm, 42598 currentItem, 42599 visibleItems, 42600 value, 42601 items, 42602 click_handler 42603 ]; 42604 } 42605 42606 class ProgressBar extends SvelteComponent { 42607 constructor(options) { 42608 super(); 42609 init(this, options, instance$1a, create_fragment$1c, safe_not_equal, { disabled: 0, items: 5, isPaymentForm: 1 }); 42610 } 42611 } 42612 42613 var FormType; 42614 (function (FormType) { 42615 FormType["EMPTY"] = "EMPTY"; 42616 FormType["PAYMENT"] = "PAYMENT"; 42617 FormType["CHANGE_SUBSCRIPTION"] = "CHANGE_SUBSCRIPTION"; 42618 FormType["REGISTRATION"] = "REGISTRATION"; 42619 FormType["CONTACT"] = "CONTACT"; 42620 FormType["DATA_CAPTURE"] = "DATA_CAPTURE"; 42621 FormType["COMPLETE_REGISTRATION"] = "COMPLETE_REGISTRATION"; 42622 FormType["UPDATE_PROFILE"] = "UPDATE_PROFILE"; 42623 FormType["CANCEL_SUBSCRIPTION"] = "CANCEL_SUBSCRIPTION"; 42624 FormType["LIST_SUBSCRIPTIONS"] = "LIST_SUBSCRIPTIONS"; 42625 FormType["SUSPEND_RESUME_SUBSCRIPTION"] = "SUSPEND_RESUME_SUBSCRIPTION"; 42626 FormType["DEVICES"] = "DEVICES"; 42627 FormType["GIFT_SUBSCRIPTION"] = "GIFT_SUBSCRIPTION"; 42628 FormType["GIFT_REDEMPTION"] = "GIFT_REDEMPTION"; 42629 FormType["LIST_GIFT_SUBSCRIPTIONS_SENT"] = "LIST_GIFT_SUBSCRIPTIONS_SENT"; 42630 FormType["BILL_TO_CONTACT"] = "BILL_TO_CONTACT"; 42631 })(FormType || (FormType = {})); 42632 42633 const toProgressBarItems = (form, formState, formActions) => { 42634 let order = 0; 42635 let visibleOrder = 0; 42636 return form.parts.flatMap(part => part.sections 42637 .map(section => ({ part, section }))) 42638 .map(({ part, section }) => ({ 42639 type: section.type, 42640 isVisible: isSectionDisplayedInProgressBar(section, form, formState), 42641 label: (section.label ?? part.label) ?? sectionTypeFor(section.type)?.defaultLabel, 42642 isCurrent: formState.currentSection == section, 42643 // Do not allow users to go backwards from PAYMENT if they have just registered 42644 isDisabled: formState.loginRegistrationComplete && ![partTypes.PLAN_SELECT.type ].includes(part.type), 42645 order: order++, 42646 visibleOrder: isSectionDisplayedInProgressBar(section, form, formState) ? visibleOrder++ : null, 42647 onSelect: () => setSection({ form, formActions, part, section, previousSection: formState.currentSection, previousPart: formState.currentPart }) 42648 })); 42649 }; 42650 const factory$u = { 42651 matches: (sectionElement) => sectionElement.type === elementTypes.PROGRESS_BAR, 42652 create: (form, formState, formActions) => { 42653 return { 42654 component: ProgressBar, 42655 props: { 42656 disabled: formState.isBusy, 42657 items: toProgressBarItems(form, formState, formActions), 42658 isPaymentForm: form.formType === FormType.PAYMENT, 42659 } 42660 }; 42661 } 42662 }; 42663 42664 const formConfigAs = (form) => { 42665 return form.typeConfiguration; 42666 }; 42667 42668 /* src/components/elements/button/Button.svelte generated by Svelte v4.2.12 */ 42669 42670 function create_fragment$1b(ctx) { 42671 let button; 42672 let t; 42673 let button_style_value; 42674 let mounted; 42675 let dispose; 42676 42677 return { 42678 c() { 42679 button = element("button"); 42680 t = text(/*text*/ ctx[1]); 42681 attr(button, "class", "zephr-form-button svelte-gd8hr6"); 42682 attr(button, "type", "submit"); 42683 button.hidden = /*hidden*/ ctx[6]; 42684 attr(button, "style", button_style_value = /*hidden*/ ctx[6] ? 'dis
42684play:none' : undefined); 42685 button.disabled = /*disabled*/ ctx[0]; 42686 toggle_class(button, "zephr-payment-form-button", /*isPaymentForm*/ ctx[5]); 42687 toggle_class(button, "zephr-form-button-top-margin", !/*noMargin*/ ctx[2]); 42688 toggle_class(button, "zephr-payment-form-button-top-margin", /*isPaymentForm*/ ctx[5] && !/*noMargin*/ ctx[2]); 42689 toggle_class(button, "inputHeight", /*inputHeight*/ ctx[3]); 42690 toggle_class(button, "aside", /*aside*/ ctx[4]); 42691 }, 42692 m(target, anchor) { 42693 insert(target, button, anchor); 42694 append(button, t); 42695 42696 if (!mounted) { 42697 dispose = listen(button, "click", prevent_default(function () { 42698 if (is_function(/*onClick*/ ctx[7])) /*onClick*/ ctx[7].apply(this, arguments); 42699 })); 42700 42701 mounted = true; 42702 } 42703 }, 42704 p(new_ctx, [dirty]) { 42705 ctx = new_ctx; 42706 if (dirty & /*text*/ 2) set_data(t, /*text*/ ctx[1]); 42707 42708 if (dirty & /*hidden*/ 64) { 42709 button.hidden = /*hidden*/ ctx[6]; 42710 } 42711 42712 if (dirty & /*hidden*/ 64 && button_style_value !== (button_style_value = /*hidden*/ ctx[6] ? 'display:none' : undefined)) { 42713 attr(button, "style", button_style_value); 42714 } 42715 42716 if (dirty & /*disabled*/ 1) { 42717 button.disabled = /*disabled*/ ctx[0]; 42718 } 42719 42720 if (dirty & /*isPaymentForm*/ 32) { 42721 toggle_class(button, "zephr-payment-form-button", /*isPaymentForm*/ ctx[5]); 42722 } 42723 42724 if (dirty & /*noMargin*/ 4) { 42725 toggle_class(button, "zephr-form-button-top-margin", !/*noMargin*/ ctx[2]); 42726 } 42727 42728 if (dirty & /*isPaymentForm, noMargin*/ 36) { 42729 toggle_class(button, "zephr-payment-form-button-top-margin", /*isPaymentForm*/ ctx[5] && !/*noMargin*/ ctx[2]); 42730 } 42731 42732 if (dirty & /*inputHeight*/ 8) { 42733 toggle_class(button, "inputHeight", /*inputHeight*/ ctx[3]); 42734 } 42735 42736 if (dirty & /*aside*/ 16) { 42737 toggle_class(button, "aside", /*aside*/ ctx[4]); 42738 } 42739 }, 42740 i: noop, 42741 o: noop, 42742 d(detaching) { 42743 if (detaching) { 42744 detach(button); 42745 } 42746 42747 mounted = false; 42748 dispose(); 42749 } 42750 }; 42751 } 42752 42753 function instance$19($$self, $$props, $$invalidate) { 42754 let { disabled } = $$props; 42755 let { text } = $$props; 42756 let { noMargin = false } = $$props; 42757 let { inputHeight = false } = $$props; 42758 let { aside = false } = $$props; 42759 let { isPaymentForm = false } = $$props; 42760 let { hidden = false } = $$props; 42761 let { onClick } = $$props; 42762 42763 $$self.$$set = $$props => {
42764 if ('disabled' in $$props) $$invalidate(0, disabled = $$props.disabled); 42765 if ('text' in $$props) $$invalidate(1, text = $$props.text); 42766 if ('noMargin' in $$props) $$invalidate(2, noMargin = $$props.noMargin); 42767 if ('inputHeight' in $$props) $$invalidate(3, inputHeight = $$props.inputHeight); 42768 if ('aside' in $$props) $$invalidate(4, aside = $$props.aside); 42769 if ('isPaymentForm' in $$props) $$invalidate(5, isPaymentForm = $$props.isPaymentForm); 42770 if ('hidden' in $$props) $$invalidate(6, hidden = $$props.hidden); 42771 if ('onClick' in $$props) $$invalidate(7, onClick = $$props.onClick); 42772 }; 42773 42774 return [disabled, text, noMargin, inputHeight, aside, isPaymentForm, hidden, onClick]; 42775 } 42776 42777 class Button extends SvelteComponent { 42778 constructor(options) { 42779 super(); 42780 42781 init(this, options, instance$19, create_fragment$1b, safe_not_equal, { 42782 disabled: 0, 42783 text: 1, 42784 noMargin: 2, 42785 inputHeight: 3, 42786 aside: 4, 42787 isPaymentForm: 5, 42788 hidden: 6, 42789 onClick: 7 42790 }); 42791 } 42792 } 42793 42794 /* src/components/elements/paymentOptionSelection/PaymentOptionComponent.svelte generated by Svelte v4.2.12 */ 42795 42796 function create_if_block_1$x(ctx) { 42797 let div; 42798 let t_value = /*paymentOption*/ ctx[1].highlightedText + ""; 42799 let t; 42800 42801 return { 42802 c() { 42803 div = element("div"); 42804 t = text(t_value); 42805 attr(div, "class", "box-top-text svelte-hcxnnv"); 42806 }, 42807 m(target, anchor) { 42808 insert(target, div, anchor); 42809 append(div, t); 42810 }, 42811 p(ctx, dirty) { 42812 if (dirty & /*paymentOption*/ 2 && t_value !== (t_value = /*paymentOption*/ ctx[1].highlightedText + "")) set_data(t, t_value); 42813 }, 42814 d(detaching) { 42815 if (detaching) { 42816 detach(div); 42817 } 42818 } 42819 }; 42820 } 42821 42822 // (38:8) {#if paymentOption.disclaimerMessage} 42823 function create_if_block$K(ctx) { 42824 let span; 42825 let t_value = /*paymentOption*/ ctx[1].disclaimerMessage + ""; 42826 let t; 42827 42828 return { 42829 c() { 42830 span = element("span"); 42831 t = text(t_value); 42832 attr(span, "class", "button-sub-text svelte-hcxnnv"); 42833 }, 42834 m(target, anchor) { 42835 insert(target, span, anchor); 42836 append(span, t); 42837 }, 42838 p(ctx, dirty) { 42839 if (dirty & /*paymentOption*/ 2 && t_value !== (t_value = /*paymentOption*/ ctx[1].disclaimerMessage + "")) set_data(t, t_value); 42840 }, 42841 d(detaching) { 42842 if (detaching) { 42843 detach(span); 42844 } 42845 } 42846 }; 42847 } 42848 42849 function create_fragment$1a(ctx) { 42850 let div5; 42851 let input; 42852 let input_id_value; 42853 let input_value_value; 42854 let t0; 42855 let div4; 42856 let div0; 42857 let t1; 42858 let div3; 42859 let div1; 42860 let raw_value = (/*paymentOption*/ ctx[1].description ?? '') + ""; 42861 let t2; 42862 let div2; 42863 let button; 42864 let t3; 42865 let div3_class_value; 42866 let div4_class_value; 42867 let current; 42868 let mounted; 42869 let dispose; 42870 let if_block0 = /*paymentOption*/ ctx[1].highlightedText && create_if_block_1$x(ctx); 42871 42872 button = new Button({ 42873 props: { 42874 disabled: false, 42875 text: /*paymentOption*/ ctx[1].selectButtonText ?? 'Select Plan', 42876 onClick: /*onSelect*/ ctx[0], 42877 isPaymentForm: true 42878 } 42879 }); 42880 42881 let if_block1 = /*paymentOption*/ ctx[1].disclaimerMessage && create_if_block$K(ctx); 42882 42883 return { 42884 c() { 42885 div5 = element("div"); 42886 input = element("input"); 42887 t0 = space(); 42888 div4 = element("div"); 42889 div0 = element("div"); 42890 if (if_block0) if_block0.c(); 42891 t1 = space(); 42892 div3 = element("div"); 42893 div1 = element("div"); 42894 t2 = space(); 42895 div2 = element("div"); 42896 create_component(button.$$.fragment); 42897 t3 = space(); 42898 if (if_block1) if_block1.c(); 42899 attr(input, "type", "radio"); 42900 attr(input, "name", "boxSelect"); 42901 attr(input, "id", input_id_value = "boxSelect-" + /*paymentOption*/ ctx[1].slug + "-" + /*paymentOption*/ ctx[1].productId + "}"); 42902 input.value = input_value_value = /*paymentOption*/ ctx[1].price; 42903 attr(input, "class", "svelte-hcxnnv"); 42904 attr(div0, "class", "box-top svelte-hcxnnv"); 42905 attr(div1, "class", "box-content svelte-hcxnnv"); 42906 toggle_class(div1, "styled-box-content", /*styleDescription*/ ctx[2]); 42907 attr(div2, "class", "box-bottom svelte-hcxnnv"); 42908 attr(div3, "class", div3_class_value = "inner-box " + (/*paymentOption*/ ctx[1].highlightedText || '') + " svelte-hcxnnv"); 42909 42910 attr(div4, "class", div4_class_value = "box-container " + (/*paymentOption*/ ctx[1].highlightedText 42911 ? 'highlighted' 42912 : '') + " svelte-hcxnnv"); 42913 42914 attr(div4, "aria-hidden", "true"); 42915 set_style(div4, "cursor", "pointer"); 42916 attr(div5, "class", "payment-option-wrapper svelte-hcxnnv"); 42917 }, 42918 m(target, anchor) { 42919 insert(target, div5, anchor); 42920 append(div5, input); 42921 append(div5, t0); 42922 append(div5, div4); 42923 append(div4, div0); 42924 if (if_block0) if_block0.m(div0, null); 42925 append(div4, t1); 42926 append(div4, div3); 42927 append(div3, div1); 42928 div1.innerHTML = raw_value; 42929 append(div3, t2); 42930 append(div3, div2); 42931 mount_component(button, div2, null); 42932 append(div2, t3); 42933 if (if_block1) if_block1.m(div2, null); 42934 current = true; 42935 42936 if (!mounted) { 42937 dispose = listen(div4, "click", prevent_default(function () { 42938 if (is_function(/*onSelect*/ ctx[0])) /*onSelect*/ ctx[0].apply(this, arguments); 42939 })); 42940 42941 mounted = true; 42942 } 42943 }, 42944 p(new_ctx, [dirty]) { 42945 ctx = new_ctx; 42946 42947 if (!current || dirty & /*paymentOption*/ 2 && input_id_value !== (input_id_value = "boxSelect-" + /*paymentOption*/ ctx[1].slug + "-" + /*paymentOption*/ ctx[1].productId + "}")) { 42948 attr(input, "id", input_id_value); 42949 } 42950 42951 if (!current || dirty & /*paymentOption*/ 2 && input_value_value !== (input_value_value = /*paymentOption*/ ctx[1].price)) { 42952 input.value = input_value_value; 42953 } 42954 42955 if (/*paymentOption*/ ctx[1].highlightedText) { 42956 if (if_block0) { 42957 if_block0.p(ctx, dirty); 42958 } else { 42959 if_block0 = create_if_block_1$x(ctx); 42960 if_block0.c(); 42961 if_block0.m(div0, null); 42962 } 42963 } else if (if_block0) { 42964 if_block0.d(1); 42965 if_block0 = null; 42966 } 42967 42968 if ((!current || dirty & /*paymentOption*/ 2) && raw_value !== (raw_value = (/*paymentOption*/ ctx[1].description ?? '') + "")) div1.innerHTML = raw_value; 42969 if (!current || dirty & /*styleDescription*/ 4) { 42970 toggle_class(div1, "styled-box-content", /*styleDescription*/ ctx[2]); 42971 } 42972 42973 const button_changes = {};
42974 if (dirty & /*paymentOption*/ 2) button_changes.text = /*paymentOption*/ ctx[1].selectButtonText ?? 'Select Plan'; 42975 if (dirty & /*onSelect*/ 1) button_changes.onClick = /*onSelect*/ ctx[0]; 42976 button.$set(button_changes); 42977 42978 if (/*paymentOption*/ ctx[1].disclaimerMessage) { 42979 if (if_block1) { 42980 if_block1.p(ctx, dirty); 42981 } else { 42982 if_block1 = create_if_block$K(ctx); 42983 if_block1.c(); 42984 if_block1.m(div2, null); 42985 } 42986 } else if (if_block1) { 42987 if_block1.d(1); 42988 if_block1 = null; 42989 } 42990 42991 if (!current || dirty & /*paymentOption*/ 2 && div3_class_value !== (div3_class_value = "inner-box " + (/*paymentOption*/ ctx[1].highlightedText || '') + " svelte-hcxnnv")) { 42992 attr(div3, "class", div3_class_value); 42993 } 42994 42995 if (!current || dirty & /*paymentOption*/ 2 && div4_class_value !== (div4_class_value = "box-container " + (/*paymentOption*/ ctx[1].highlightedText 42996 ? 'highlighted' 42997 : '') + " svelte-hcxnnv")) { 42998 attr(div4, "class", div4_class_value); 42999 } 43000 }, 43001 i(local) { 43002 if (current) return; 43003 transition_in(button.$$.fragment, local); 43004 current = true; 43005 }, 43006 o(local) { 43007 transition_out(button.$$.fragment, local); 43008 current = false; 43009 }, 43010 d(detaching) { 43011 if (detaching) { 43012 detach(div5); 43013 } 43014 43015 if (if_block0) if_block0.d(); 43016 destroy_component(button); 43017 if (if_block1) if_block1.d(); 43018 mounted = false; 43019 dispose(); 43020 } 43021 }; 43022 } 43023 43024 function instance$18($$self, $$props, $$invalidate) { 43025 let { onSelect } = $$props; 43026 let { paymentOption } = $$props; 43027 let { styleDescription } = $$props; 43028 43029 $$self.$$set = $$props => {
43030 if ('onSelect' in $$props) $$invalidate(0, onSelect = $$props.onSelect); 43031 if ('paymentOption' in $$props) $$invalidate(1, paymentOption = $$props.paymentOption); 43032 if ('styleDescription' in $$props) $$invalidate(2, styleDescription = $$props.styleDescription); 43033 }; 43034 43035 return [onSelect, paymentOption, styleDescription]; 43036 } 43037 43038 class PaymentOptionComponent extends SvelteComponent { 43039 constructor(options) { 43040 super(); 43041 43042 init(this, options, instance$18, create_fragment$1a, safe_not_equal, { 43043 onSelect: 0, 43044 paymentOption: 1, 43045 styleDescription: 2 43046 }); 43047 } 43048 } 43049 43050 /* src/components/elements/paymentOptionSelection/PaymentOptionSelectionComponent.svelte generated by Svelte v4.2.12 */ 43051 43052 function get_each_context$g(ctx, list, i) { 43053 const child_ctx = ctx.slice(); 43054 child_ctx[6] = list[i]; 43055 return child_ctx; 43056 } 43057 43058 // (12:2) {#each orderedPaymentOptions as paymentOption} 43059 function create_each_block$g(ctx) { 43060 let paymentoptioncomponent; 43061 let current; 43062 43063 function func() { 43064 return /*func*/ ctx[5](/*paymentOption*/ ctx[6]); 43065 } 43066 43067 paymentoptioncomponent = new PaymentOptionComponent({ 43068 props: { 43069 paymentOption: /*paymentOption*/ ctx[6], 43070 styleDescription: /*config*/ ctx[0].styleDescription, 43071 onSelect: func 43072 } 43073 }); 43074 43075 return { 43076 c() { 43077 create_component(paymentoptioncomponent.$$.fragment); 43078 }, 43079 m(target, anchor) { 43080 mount_component(paymentoptioncomponent, target, anchor); 43081 current = true; 43082 }, 43083 p(new_ctx, dirty) { 43084 ctx = new_ctx; 43085 const paymentoptioncomponent_changes = {}; 43086 if (dirty & /*orderedPaymentOptions*/ 4) paymentoptioncomponent_changes.paymentOption = /*paymentOption*/ ctx[6]; 43087 if (dirty & /*config*/ 1) paymentoptioncomponent_changes.styleDescription = /*config*/ ctx[0].styleDescription; 43088 if (dirty & /*onSelect, orderedPaymentOptions*/ 6) paymentoptioncomponent_changes.onSelect = func; 43089 paymentoptioncomponent.$set(paymentoptioncomponent_changes); 43090 }, 43091 i(local) { 43092 if (current) return; 43093 transition_in(paymentoptioncomponent.$$.fragment, local); 43094 current = true; 43095 }, 43096 o(local) { 43097 transition_out(paymentoptioncomponent.$$.fragment, local); 43098 current = false; 43099 }, 43100 d(detaching) { 43101 destroy_component(paymentoptioncomponent, detaching); 43102 } 43103 }; 43104 } 43105 43106 function create_fragment$19(ctx) { 43107 let div; 43108 let current; 43109 let each_value = ensure_array_like(/*orderedPaymentOptions*/ ctx[2]); 43110 let each_blocks = []; 43111 43112 for (let i = 0; i < each_value.length; i += 1) { 43113 each_blocks[i] = create_each_block$g(get_each_context$g(ctx, each_value, i)); 43114 } 43115 43116 const out = i => transition_out(each_blocks[i], 1, 1, () => { 43117 each_blocks[i] = null; 43118 }); 43119 43120 return { 43121 c() { 43122 div = element("div"); 43123 43124 for (let i = 0; i < each_blocks.length; i += 1) { 43125 each_blocks[i].c(); 43126 } 43127 43128 attr(div, "class", "payment-options-container svelte-tqlhky"); 43129 }, 43130 m(target, anchor) { 43131 insert(target, div, anchor); 43132 43133 for (let i = 0; i < each_blocks.length; i += 1) { 43134 if (each_blocks[i]) { 43135 each_blocks[i].m(div, null); 43136 } 43137 } 43138 43139 current = true; 43140 }, 43141 p(ctx, [dirty]) { 43142 if (dirty & /*orderedPaymentOptions, config, onSelect*/ 7) { 43143 each_value = ensure_array_like(/*orderedPaymentOptions*/ ctx[2]); 43144 let i; 43145 43146 for (i = 0; i < each_value.length; i += 1) { 43147 const child_ctx = get_each_context$g(ctx, each_value, i); 43148 43149 if (each_blocks[i]) { 43150 each_blocks[i].p(child_ctx, dirty); 43151 transition_in(each_blocks[i], 1); 43152 } else { 43153 each_blocks[i] = create_each_block$g(child_ctx); 43154 each_blocks[i].c(); 43155 transition_in(each_blocks[i], 1); 43156 each_blocks[i].m(div, null); 43157 } 43158 } 43159 43160 group_outros(); 43161 43162 for (i = each_value.length; i < each_blocks.length; i += 1) { 43163 out(i); 43164 } 43165 43166 check_outros(); 43167 } 43168 }, 43169 i(local) { 43170 if (current) return; 43171 43172 for (let i = 0; i < each_value.length; i += 1) { 43173 transition_in(each_blocks[i]); 43174 } 43175 43176 current = true; 43177 }, 43178 o(local) {
43179 each_blocks = each_blocks.filter(Boolean); 43180 43181 for (let i = 0; i < each_blocks.length; i += 1) { 43182 transition_out(each_blocks[i]); 43183 } 43184 43185 current = false; 43186 }, 43187 d(detaching) { 43188 if (detaching) { 43189 detach(div); 43190 } 43191 43192 destroy_each(each_blocks, detaching); 43193 } 43194 }; 43195 } 43196 43197 function instance$17($$self, $$props, $$invalidate) { 43198 let orderedPaymentOptions; 43199 let { paymentOptions } = $$props; 43200 let { config } = $$props; 43201 let { onSelect } = $$props; 43202 let { logView } = $$props; 43203 logView(); 43204 const func = paymentOption => onSelect(paymentOption); 43205 43206 $$self.$$set = $$props => { 43207 if ('paymentOptions' in $$props) $$invalidate(3, paymentOptions = $$props.paymentOptions); 43208 if ('config' in $$props) $$invalidate(0, config = $$props.config); 43209 if ('onSelect' in $$props) $$invalidate(1, onSelect = $$props.onSelect); 43210 if ('logView' in $$props) $$invalidate(4, logView = $$props.logView); 43211 }; 43212 43213 $$self.$$.update = () => { 43214 if ($$self.$$.dirty & /*paymentOptions*/ 8) { 43215 $$invalidate(2, orderedPaymentOptions = paymentOptions.sort((a, b) => a.fieldOrder - b.fieldOrder)); 43216 } 43217 }; 43218 43219 return [config, onSelect, orderedPaymentOptions, paymentOptions, logView, func]; 43220 } 43221 43222 class PaymentOptionSelectionComponent extends SvelteComponent { 43223 constructor(options) { 43224 super(); 43225 43226 init(this, options, instance$17, create_fragment$19, safe_not_equal, { 43227 paymentOptions: 3, 43228 config: 0, 43229 onSelect: 1, 43230 logView: 4 43231 }); 43232 } 43233 } 43234 43235 const filterValidPaymentOptions = (form, formState) => { 43236 if (!formConfigAs(form).changeSubscriptionMode) { 43237 return formConfigAs(form).paymentOptions; 43238 } 43239 return formConfigAs(form).paymentOptions 43240 .filter(paymentOption => formState 43241 .validChangeFromPlans 43242 .some(validPlan => validPlan.productId === paymentOption.productId && validPlan.planSlug === paymentOption.slug)); 43243 }; 43244 const factory$t = { 43245 matches: (sectionElement) => sectionElement.type === elementTypes.PAYMENT_OPTION_SELECTION, 43246 create: (form, formState, formActions, elementConfig) => ({ 43247 component: PaymentOptionSelectionComponent, 43248 props: { 43249 paymentOptions: filterValidPaymentOptions(form, formState), 43250 config: elementConfig ? elementConfig : {}, 43251 onSelect: (paymentOption) => { 43252 const paymentOptionKey = `${paymentOption.productId}-${paymentOption.slug}`; 43253 const updateState = { 43254 paymentOption: { 43255 ...paymentOption, 43256 autoRenewConfig: paymentOption.autoRenewConfig, 43257 autoRenewToggleLabel: paymentOption.autoRenewToggleLabel 43258 }, 43259 serverErrors: [], 43260 billingAddress: { 43261 country: null, 43262 postalCode: null, 43263 } 43264 }; 43265 // Only initialize auto-renew state for payment options with custom_toggle config 43266 if (paymentOption.autoRenewConfig === 'custom_toggle') { 43267 updateState.paymentOptionAutoRenew = { 43268 ...formState.paymentOptionAutoRenew, 43269 [paymentOptionKey]: paymentOption.terms?.autoRenew ?? false 43270 }; 43271 } 43272 formActions.updateFormState(updateState); 43273 if (form.organisationConfiguration.trackFormDataLayerEvents) { 43274 logDataLayerEvent(form, 'zephr_form_button_press', { 43275 sectionId: formState.currentSection.type, 43276 buttonType: 'SUBMIT' 43277 }); 43278 } 43279 void formActions.completeSection(); 43280 }, 43281 logView: () => { 43282 filterValidPaymentOptions(form, formState).forEach(paymentOption => logDataLayerEvent(form, 'view_item', { 43283 ecommerce: { 43284 currency: formConfigAs(form).formCurrency ?? paymentOption?.currencyCode, 43285 value: paymentOption.price, 43286 items: [{ 43287 item_id: paymentOption.slug, 43288 item_name: paymentOption.productId, 43289 price: paymentOption.price, 43290 quantity: 1 43291 }] 43292 } 43293 })); 43294 } 43295 } 43296 }) 43297 }; 43298 43299 /* src/components/elements/ErrorMessage.svelte generated by Svelte v4.2.12 */ 43300 43301 function create_fragment$18(ctx) { 43302 let div1; 43303 let div0; 43304 let t; 43305 43306 return { 43307 c() { 43308 div1 = element("div"); 43309 div0 = element("div"); 43310 t = text(/*error*/ ctx[0]); 43311 attr(div0, "class", "zephr-form-error-message svelte-1ko2lqj"); 43312 attr(div0, "aria-live", "assertive"); 43313 toggle_class(div0, "zephr-payment-form-error-message", !/*isPaymentForm*/ ctx[1]); 43314 attr(div1, "class", "zephr-form-error-message-min-height svelte-1ko2lqj"); 43315 toggle_class(div1, "zephr-payment-form-error-message-min-height", !/*isPaymentForm*/ ctx[1]); 43316 }, 43317 m(target, anchor) { 43318 insert(target, div1, anchor); 43319 append(div1, div0); 43320 append(div0, t); 43321 }, 43322 p(ctx, [dirty]) {
43323 if (dirty & /*error*/ 1) set_data(t, /*error*/ ctx[0]); 43324 43325 if (dirty & /*isPaymentForm*/ 2) { 43326 toggle_class(div0, "zephr-payment-form-error-message", !/*isPaymentForm*/ ctx[1]); 43327 } 43328 43329 if (dirty & /*isPaymentForm*/ 2) { 43330 toggle_class(div1, "zephr-payment-form-error-message-min-height", !/*isPaymentForm*/ ctx[1]); 43331 } 43332 }, 43333 i: noop, 43334 o: noop, 43335 d(detaching) { 43336 if (detaching) { 43337 detach(div1); 43338 } 43339 } 43340 }; 43341 } 43342 43343 function instance$16($$self, $$props, $$invalidate) { 43344 let { error } = $$props; 43345 let { isPaymentForm = false } = $$props; 43346 43347 $$self.$$set = $$props => { 43348 if ('error' in $$props) $$invalidate(0, error = $$props.error); 43349 if ('isPaymentForm' in $$props) $$invalidate(1, isPaymentForm = $$props.isPaymentForm); 43350 }; 43351 43352 return [error, isPaymentForm]; 43353 } 43354 43355 class ErrorMessage extends SvelteComponent { 43356 constructor(options) { 43357 super(); 43358 init(this, options, instance$16, create_fragment$18, safe_not_equal, { error: 0, isPaymentForm: 1 }); 43359 } 43360 } 43361 43362 /* src/components/elements/Input.svelte generated by Svelte v4.2.12 */ 43363 43364 function create_if_block_1$w(ctx) { 43365 let button; 43366 let span; 43367 let t; 43368 let mounted; 43369 let dispose; 43370 43371 return { 43372 c() { 43373 button = element("button"); 43374 span = element("span"); 43375 t = text(/*innerText*/ ctx[16]); 43376 attr(span, "class", "zephr-form-input-inner-text"); 43377 toggle_class(span, "zephr-payment-form-input-inner-text", /*isPaymentForm*/ ctx[7]); 43378 attr(button, "type", "button"); 43379 attr(button, "class", "zephr-form-input-inner-button"); 43380 }, 43381 m(target, anchor) { 43382 insert(target, button, anchor); 43383 append(button, span); 43384 append(span, t); 43385 /*button_binding*/ ctx[28](button); 43386 43387 if (!mounted) { 43388 dispose = listen(button, "click", prevent_default(function () { 43389 if (is_function(/*innerTextOnClick*/ ctx[17])) /*innerTextOnClick*/ ctx[17].apply(this, arguments); 43390 })); 43391 43392 mounted = true; 43393 } 43394 }, 43395 p(new_ctx, dirty) { 43396 ctx = new_ctx; 43397 if (dirty & /*innerText*/ 65536) set_data(t, /*innerText*/ ctx[16]); 43398 43399 if (dirty & /*isPaymentForm*/ 128) { 43400 toggle_class(span, "zephr-payment-form-input-inner-text", /*isPaymentForm*/ ctx[7]); 43401 } 43402 }, 43403 d(detaching) { 43404 if (detaching) { 43405 detach(button); 43406 } 43407 43408 /*button_binding*/ ctx[28](null); 43409 mounted = false; 43410 dispose(); 43411 } 43412 }; 43413 } 43414 43415 // (89:0) {#if errorMessage} 43416 function create_if_block$J(ctx) { 43417 let errormessage; 43418 let current; 43419 43420 errormessage = new ErrorMessage({ 43421 props: { 43422 error: /*errorMessage*/ ctx[6], 43423 isPaymentForm: /*isPaymentForm*/ ctx[7] 43424 } 43425 }); 43426 43427 return { 43428 c() { 43429 create_component(errormessage.$$.fragment); 43430 }, 43431 m(target, anchor) { 43432 mount_component(errormessage, target, anchor); 43433 current = true; 43434 }, 43435 p(ctx, dirty) { 43436 const errormessage_changes = {}; 43437 if (dirty & /*errorMessage*/ 64) errormessage_changes.error = /*errorMessage*/ ctx[6]; 43438 if (dirty & /*isPaymentForm*/ 128) errormessage_changes.isPaymentForm = /*isPaymentForm*/ ctx[7]; 43439 errormessage.$set(errormessage_changes); 43440 }, 43441 i(local) { 43442 if (current) return; 43443 transition_in(errormessage.$$.fragment, local); 43444 current = true; 43445 }, 43446 o(local) { 43447 transition_out(errormessage.$$.fragment, local); 43448 current = false; 43449 }, 43450 d(detaching) { 43451 destroy_component(errormessage, detaching); 43452 } 43453 }; 43454 } 43455 43456 function create_fragment$17(ctx) { 43457 let div; 43458 let input; 43459 let input_value_value; 43460 let input_autocomplete_value; 43461 let input_checked_value; 43462 let input_placeholder_value; 43463 let input_pattern_value; 43464 let input_min_value; 43465 let input_max_value; 43466 let input_step_value; 43467 let input_class_value; 43468 let t0; 43469 let t1; 43470 let t2; 43471 let if_block1_anchor; 43472 let current; 43473 let mounted; 43474 let dispose; 43475 let if_block0 = /*innerText*/ ctx[16] && create_if_block_1$w(ctx); 43476 const default_slot_template = /*#slots*/ ctx[26].default; 43477 const default_slot = create_slot(default_slot_template, ctx, /*$$scope*/ ctx[25], null); 43478 let if_block1 = /*errorMessage*/ ctx[6] && create_if_block$J(ctx); 43479 43480 return { 43481 c() { 43482 div = element("div"); 43483 input = element("input"); 43484 t0 = space(); 43485 if (if_block0) if_block0.c(); 43486 t1 = space(); 43487 if (default_slot) default_slot.c(); 43488 t2 = space(); 43489 if (if_block1) if_block1.c(); 43490 if_block1_anchor = empty(); 43491 attr(input, "id", /*id*/ ctx[0]); 43492 attr(input, "name", /*name*/ ctx[1]); 43493 input.required = /*required*/ ctx[3]; 43494 input.disabled = /*disabled*/ ctx[4]; 43495 attr(input, "type", /*type*/ ctx[2]); 43496 input.value = input_value_value = /*value*/ ctx[8] || null; 43497 attr(input, "autocomplete", input_autocomplete_value = /*autocomplete*/ ctx[19] || null); 43498 input.checked = input_checked_value = /*checked*/ ctx[10] || null; 43499 attr(input, "placeholder", input_placeholder_value = /*placeholder*/ ctx[9] || null); 43500 attr(input, "pattern", input_pattern_value = /*pattern*/ ctx[11] || null); 43501 attr(input, "min", input_min_value = /*min*/ ctx[12] || null); 43502 attr(input, "max", input_max_value = /*max*/ ctx[13] || null); 43503 attr(input, "maxlength", /*maxlength*/ ctx[15]); 43504 attr(input, "step", input_step_value = /*step*/ ctx[14] || null); 43505 attr(input, "class", input_class_value = "" + (null_to_empty(`zephr-form-input ${/*type*/ ctx[2] && `zephr-form-input-${/*type*/ ctx[2]}`} ${/*isPaymentForm*/ ctx[7] && /*type*/ ctx[2] && `zephr-payment-form-input-${/*type*/ ctx[2]}`}`) + " svelte-88cmol")); 43506 toggle_class(input, "disabled", /*disabled*/ ctx[4]); 43507 toggle_class(input, "error", /*hasError*/ ctx[5] || /*errorMessage*/ ctx[6]); 43508 toggle_class(input, "zephr-form-input-full-width", /*fill*/ ctx[18]); 43509 toggle_class(input, "zephr-payment-form-input", /*isPaymentForm*/ ctx[7]); 43510 toggle_class(input, "zephr-payment-form-input-full-width", /*isPaymentForm*/ ctx[7] && /*fill*/ ctx[18]); 43511 attr(div, "class", "zephr-form-input-inner-container svelte-88cmol"); 43512 toggle_class(div, "zephr-payment-form-input-inner-container", /*isPaymentForm*/ ctx[7]); 43513 }, 43514 m(target, anchor) { 43515 insert(target, div, anchor); 43516 append(div, input); 43517 /*input_binding*/ ctx[27](input); 43518 append(div, t0); 43519 if (if_block0) if_block0.m(div, null); 43520 insert(target, t1, anchor); 43521 43522 if (default_slot) { 43523 default_slot.m(target, anchor); 43524 } 43525 43526 insert(target, t2, anchor); 43527 if (if_block1) if_block1.m(target, anchor); 43528 insert(target, if_block1_anchor, anchor); 43529 current = true; 43530 43531 if (!mounted) { 43532 dispose = [
43533 listen(input, "focus", function () { 43534 if (is_function(/*onFocus*/ ctx[20])) /*onFocus*/ ctx[20].apply(this, arguments); 43535 }), 43536 listen(input, "blur", function () { 43537 if (is_function(/*onBlur*/ ctx[21])) /*onBlur*/ ctx[21].apply(this, arguments); 43538 }), 43539 listen(input, "input", /*handleInputChange*/ ctx[24]), 43540 listen(input, "paste", /*handleInputChange*/ ctx[24]) 43541 ]; 43542 43543 mounted = true; 43544 } 43545 }, 43546 p(new_ctx, [dirty]) { 43547 ctx = new_ctx; 43548 43549 if (!current || dirty & /*id*/ 1) { 43550 attr(input, "id", /*id*/ ctx[0]); 43551 } 43552 43553 if (!current || dirty & /*name*/ 2) { 43554 attr(input, "name", /*name*/ ctx[1]); 43555 } 43556 43557 if (!current || dirty & /*required*/ 8) { 43558 input.required = /*required*/ ctx[3]; 43559 } 43560 43561 if (!current || dirty & /*disabled*/ 16) { 43562 input.disabled = /*disabled*/ ctx[4]; 43563 } 43564 43565 if (!current || dirty & /*type*/ 4) { 43566 attr(input, "type", /*type*/ ctx[2]); 43567 } 43568 43569 if (!current || dirty & /*value*/ 256 && input_value_value !== (input_value_value = /*value*/ ctx[8] || null) && input.value !== input_value_value) { 43570 input.value = input_value_value; 43571 } 43572 43573 if (!current || dirty & /*autocomplete*/ 524288 && input_autocomplete_value !== (input_autocomplete_value = /*autocomplete*/ ctx[19] || null)) { 43574 attr(input, "autocomplete", input_autocomplete_value); 43575 } 43576 43577 if (!current || dirty & /*checked*/ 1024 && input_checked_value !== (input_checked_value = /*checked*/ ctx[10] || null)) { 43578 input.checked = input_checked_value; 43579 } 43580 43581 if (!current || dirty & /*placeholder*/ 512 && input_placeholder_value !== (input_placeholder_value = /*placeholder*/ ctx[9] || null)) { 43582 attr(input, "placeholder", input_placeholder_value); 43583 } 43584 43585 if (!current || dirty & /*pattern*/ 2048 && input_pattern_value !== (input_pattern_value = /*pattern*/ ctx[11] || null)) { 43586 attr(input, "pattern", input_pattern_value); 43587 } 43588 43589 if (!current || dirty & /*min*/ 4096 && input_min_value !== (input_min_value = /*min*/ ctx[12] || null)) { 43590 attr(input, "min", input_min_value); 43591 } 43592 43593 if (!current || dirty & /*max*/ 8192 && input_max_value !== (input_max_value = /*max*/ ctx[13] || null)) { 43594 attr(input, "max", input_max_value); 43595 } 43596 43597 if (!current || dirty & /*maxlength*/ 32768) { 43598 attr(input, "maxlength", /*maxlength*/ ctx[15]); 43599 } 43600 43601 if (!current || dirty & /*step*/ 16384 && input_step_value !== (input_step_value = /*step*/ ctx[14] || null)) { 43602 attr(input, "step", input_step_value); 43603 } 43604 43605 if (!current || dirty & /*type, isPaymentForm*/ 132 && input_class_value !== (input_class_value = "" + (null_to_empty(`zephr-form-input ${/*type*/ ctx[2] && `zephr-form-input-${/*type*/ ctx[2]}`} ${/*isPaymentForm*/ ctx[7] && /*type*/ ctx[2] && `zephr-payment-form-input-${/*type*/ ctx[2]}`}`) + " svelte-88cmol"))) { 43606 attr(input, "class", input_class_value); 43607 } 43608 43609 if (!current || dirty & /*type, isPaymentForm, disabled*/ 148) { 43610 toggle_class(input, "disabled", /*disabled*/ ctx[4]); 43611 } 43612 43613 if (!current || dirty & /*type, isPaymentForm, hasError, errorMessage*/ 228) { 43614 toggle_class(input, "error", /*hasError*/ ctx[5] || /*errorMessage*/ ctx[6]); 43615 } 43616 43617 if (!current || dirty & /*type, isPaymentForm, fill*/ 262276) { 43618 toggle_class(input, "zephr-form-input-full-width", /*fill*/ ctx[18]); 43619 } 43620 43621 if (!current || dirty & /*type, isPaymentForm, isPaymentForm*/ 132) { 43622 toggle_class(input, "zephr-payment-form-input", /*isPaymentForm*/ ctx[7]); 43623 } 43624 43625 if (!current || dirty & /*type, isPaymentForm, isPaymentForm, fill*/ 262276) { 43626 toggle_class(input, "zephr-payment-form-input-full-width", /*isPaymentForm*/ ctx[7] && /*fill*/ ctx[18]); 43627 } 43628 43629 if (/*innerText*/ ctx[16]) { 43630 if (if_block0) { 43631 if_block0.p(ctx, dirty); 43632 } else { 43633 if_block0 = create_if_block_1$w(ctx); 43634 if_block0.c(); 43635 if_block0.m(div, null); 43636 } 43637 } else if (if_block0) { 43638 if_block0.d(1); 43639 if_block0 = null; 43640 } 43641 43642 if (!current || dirty & /*isPaymentForm*/ 128) { 43643 toggle_class(div, "zephr-payment-form-input-inner-container", /*isPaymentForm*/ ctx[7]); 43644 } 43645 43646 if (default_slot) { 43647 if (default_slot.p && (!current || dirty & /*$$scope*/ 33554432)) { 43648 update_slot_base( 43649 default_slot, 43650 default_slot_template, 43651 ctx, 43652 /*$$scope*/ ctx[25], 43653 !current 43654 ? get_all_dirty_from_scope(/*$$scope*/ ctx[25]) 43655 : get_slot_changes(default_slot_template, /*$$scope*/ ctx[25], dirty, null), 43656 null 43657 ); 43658 } 43659 } 43660 43661 if (/*errorMessage*/ ctx[6]) { 43662 if (if_block1) { 43663 if_block1.p(ctx, dirty); 43664
43665 if (dirty & /*errorMessage*/ 64) { 43666 transition_in(if_block1, 1); 43667 } 43668 } else { 43669 if_block1 = create_if_block$J(ctx); 43670 if_block1.c(); 43671 transition_in(if_block1, 1); 43672 if_block1.m(if_block1_anchor.parentNode, if_block1_anchor); 43673 } 43674 } else if (if_block1) { 43675 group_outros(); 43676 43677 transition_out(if_block1, 1, 1, () => { 43678 if_block1 = null; 43679 }); 43680 43681 check_outros(); 43682 } 43683 }, 43684 i(local) { 43685 if (current) return; 43686 transition_in(default_slot, local); 43687 transition_in(if_block1); 43688 current = true; 43689 }, 43690 o(local) { 43691 transition_out(default_slot, local); 43692 transition_out(if_block1); 43693 current = false; 43694 }, 43695 d(detaching) { 43696 if (detaching) { 43697 detach(div); 43698 detach(t1); 43699 detach(t2); 43700 detach(if_block1_anchor); 43701 } 43702 43703 /*input_binding*/ ctx[27](null); 43704 if (if_block0) if_block0.d(); 43705 if (default_slot) default_slot.d(detaching); 43706 if (if_block1) if_block1.d(detaching); 43707 mounted = false; 43708 run_all(dispose); 43709 } 43710 }; 43711 } 43712 43713 function instance$15($$self, $$props, $$invalidate) { 43714 let { $$slots: slots = {}, $$scope } = $$props; 43715 const dispatch = createEventDispatcher(); 43716 let { id } = $$props; 43717 let { name = id } = $$props; 43718 let { type = "text" } = $$props; 43719 let { required = true } = $$props; 43720 let { disabled = false } = $$props; 43721 let { hasError = false } = $$props; 43722 let { errorMessage = null } = $$props; 43723 let { isPaymentForm = false } = $$props; 43724 let { value = "" } = $$props; 43725 let { placeholder = "" } = $$props; 43726 let { checked = false } = $$props; 43727 let { pattern = "" } = $$props; 43728 let { min = 0 } = $$props; 43729 let { max = 0 } = $$props; 43730 let { step = 0 } = $$props; 43731 let { maxlength = null } = $$props; 43732 let { innerText = null } = $$props; 43733 let { innerTextOnClick = null } = $$props; 43734 let { fill = false } = $$props; 43735 let { autocomplete = "" } = $$props; 43736 let { onFocus } = $$props; 43737 let { onBlur } = $$props; 43738 let inputElement; 43739 let buttonElement; 43740 43741 const handleInputChange = e => { 43742 dispatch("change", type !== "checkbox" ? e.target.value : e.target.checked); 43743 }; 43744 43745 afterUpdate(() => { 43746 if (innerText && buttonElement && inputElement) { 43747 $$invalidate(22, inputElement.style.paddingRight = `${buttonElement.offsetWidth + 8}px`, inputElement); 43748 } 43749 }); 43750 43751 function input_binding($$value) { 43752 binding_callbacks[$$value ? 'unshift' : 'push'](() => { 43753 inputElement = $$value; 43754 $$invalidate(22, inputElement); 43755 }); 43756 } 43757 43758 function button_binding($$value) { 43759 binding_callbacks[$$value ? 'unshift' : 'push'](() => { 43760 buttonElement = $$value; 43761 $$invalidate(23, buttonElement); 43762 }); 43763 } 43764 43765 $$self.$$set = $$props => {
43766 if ('id' in $$props) $$invalidate(0, id = $$props.id); 43767 if ('name' in $$props) $$invalidate(1, name = $$props.name); 43768 if ('type' in $$props) $$invalidate(2, type = $$props.type); 43769 if ('required' in $$props) $$invalidate(3, required = $$props.required); 43770 if ('disabled' in $$props) $$invalidate(4, disabled = $$props.disabled); 43771 if ('hasError' in $$props) $$invalidate(5, hasError = $$props.hasError); 43772 if ('errorMessage' in $$props) $$invalidate(6, errorMessage = $$props.errorMessage); 43773 if ('isPaymentForm' in $$props) $$invalidate(7, isPaymentForm = $$props.isPaymentForm); 43774 if ('value' in $$props) $$invalidate(8, value = $$props.value); 43775 if ('placeholder' in $$props) $$invalidate(9, placeholder = $$props.placeholder); 43776 if ('checked' in $$props) $$invalidate(10, checked = $$props.checked); 43777 if ('pattern' in $$props) $$invalidate(11, pattern = $$props.pattern); 43778 if ('min' in $$props) $$invalidate(12, min = $$props.min); 43779 if ('max' in $$props) $$invalidate(13, max = $$props.max); 43780 if ('step' in $$props) $$invali
43780date(14, step = $$props.step); 43781 if ('maxlength' in $$props) $$invalidate(15, maxlength = $$props.maxlength); 43782 if ('innerText' in $$props) $$invalidate(16, innerText = $$props.innerText); 43783 if ('innerTextOnClick' in $$props) $$invalidate(17, innerTextOnClick = $$props.innerTextOnClick); 43784 if ('fill' in $$props) $$invalidate(18, fill = $$props.fill); 43785 if ('autocomplete' in $$props) $$invalidate(19, autocomplete = $$props.autocomplete); 43786 if ('onFocus' in $$props) $$invalidate(20, onFocus = $$props.onFocus); 43787 if ('onBlur' in $$props) $$invalidate(21, onBlur = $$props.onBlur); 43788 if ('$$scope' in $$props) $$invalidate(25, $$scope = $$props.$$scope); 43789 }; 43790 43791 return [ 43792 id, 43793 name, 43794 type, 43795 required, 43796 disabled, 43797 hasError, 43798 errorMessage, 43799 isPaymentForm, 43800 value, 43801 placeholder, 43802 checked, 43803 pattern, 43804 min, 43805 max, 43806 step, 43807 maxlength, 43808 innerText, 43809 innerTextOnClick, 43810 fill, 43811 autocomplete, 43812 onFocus, 43813 onBlur, 43814 inputElement, 43815 buttonElement, 43816 handleInputChange, 43817 $$scope, 43818 slots, 43819 input_binding, 43820 button_binding 43821 ]; 43822 } 43823 43824 class Input extends SvelteComponent { 43825 constructor(options) { 43826 super(); 43827 43828 init(this, options, instance$15, create_fragment$17, safe_not_equal, { 43829 id: 0, 43830 name: 1, 43831 type: 2, 43832 required: 3, 43833 disabled: 4, 43834 hasError: 5, 43835 errorMessage: 6, 43836 isPaymentForm: 7, 43837 value: 8, 43838 placeholder: 9, 43839 checked: 10, 43840 pattern: 11, 43841 min: 12, 43842 max: 13, 43843 step: 14, 43844 maxlength: 15, 43845 innerText: 16, 43846 innerTextOnClick: 17, 43847 fill: 18, 43848 autocomplete: 19, 43849 onFocus: 20, 43850 onBlur: 21 43851 }); 43852 } 43853 } 43854 43855 /* src/components/elements/Label.svelte generated by Svelte v4.2.12 */ 43856 43857 function create_if_block$I(ctx) { 43858 let span; 43859 let t; 43860 43861 return { 43862 c() { 43863 span = element("span"); 43864 t = text(/*sublabel*/ ctx[1]); 43865 attr(span, "class", "svelte-yaw4yg"); 43866 }, 43867 m(target, anchor) { 43868 insert(target, span, anchor); 43869 append(span, t); 43870 }, 43871 p(ctx, dirty) { 43872 if (dirty & /*sublabel*/ 2) set_data(t, /*sublabel*/ ctx[1]); 43873 }, 43874 d(detaching) { 43875 if (detaching) { 43876 detach(span); 43877 } 43878 } 43879 }; 43880 } 43881 43882 function create_fragment$16(ctx) { 43883 let label_1; 43884 let span; 43885 let t0; 43886 let t1; 43887 let t2; 43888 let current; 43889 let if_block = /*sublabel*/ ctx[1] && create_if_block$I(ctx); 43890 const default_slot_template = /*#slots*/ ctx[6].default; 43891 const default_slot = create_slot(default_slot_template, ctx, /*$$scope*/ ctx[5], null); 43892 43893 return { 43894 c() { 43895 label_1 = element("label"); 43896 span = element("span"); 43897 t0 = text(/*label*/ ctx[2]); 43898 t1 = space(); 43899 if (if_block) if_block.c(); 43900 t2 = space(); 43901 if (default_slot) default_slot.c(); 43902 attr(span, "class", "svelte-yaw4yg"); 43903 attr(label_1, "class", "zephr-form-input-label svelte-yaw4yg"); 43904 attr(label_1, "for", /*forInput*/ ctx[0]); 43905 attr(label_1, "style", /*style*/ ctx[3]); 43906 toggle_class(label_1, "zephr-payment-form-input-label", /*isPaymentForm*/ ctx[4]); 43907 }, 43908 m(target, anchor) { 43909 insert(target, label_1, anchor); 43910 append(label_1, span); 43911 append(span, t0); 43912 append(label_1, t1); 43913 if (if_block) if_block.m(label_1, null); 43914 append(label_1, t2); 43915 43916 if (default_slot) { 43917 default_slot.m(label_1, null); 43918 } 43919 43920 current = true; 43921 }, 43922 p(ctx, [dirty]) { 43923 if (!current || dirty & /*label*/ 4) set_data(t0, /*label*/ ctx[2]); 43924 43925 if (/*sublabel*/ ctx[1]) { 43926 if (if_block) { 43927 if_block.p(ctx, dirty); 43928 } else { 43929 if_block = create_if_block$I(ctx); 43930 if_block.c(); 43931 if_block.m(label_1, t2); 43932 } 43933 } else if (if_block) { 43934 if_block.d(1); 43935 if_block = null; 43936 } 43937 43938 if (default_slot) { 43939 if (default_slot.p && (!current || dirty & /*$$scope*/ 32)) { 43940 update_slot_base( 43941 default_slot, 43942 default_slot_template, 43943 ctx, 43944 /*$$scope*/ ctx[5], 43945 !current 43946 ? get_all_dirty_from_scope(/*$$scope*/ ctx[5]) 43947 : get_slot_changes(default_slot_template, /*$$scope*/ ctx[5], dirty, null), 43948 null 43949 ); 43950 } 43951 } 43952 43953 if (!current || dirty & /*forInput*/ 1) { 43954 attr(label_1, "for", /*forInput*/ ctx[0]); 43955 } 43956 43957 if (!current || dirty & /*style*/ 8) { 43958 attr(label_1, "style", /*style*/ ctx[3]); 43959 } 43960 43961 if (!current || dirty & /*isPaymentForm*/ 16) { 43962 toggle_class(label_1, "zephr-payment-form-input-label", /*isPaymentForm*/ ctx[4]); 43963 } 43964 }, 43965 i(local) { 43966 if (current) return; 43967 transition_in(default_slot, local); 43968 current = true; 43969 }, 43970 o(local) { 43971 transition_out(default_slot, local); 43972 current = false;
43973 }, 43974 d(detaching) { 43975 if (detaching) { 43976 detach(label_1); 43977 } 43978 43979 if (if_block) if_block.d(); 43980 if (default_slot) default_slot.d(detaching); 43981 } 43982 }; 43983 } 43984 43985 function instance$14($$self, $$props, $$invalidate) { 43986 let { $$slots: slots = {}, $$scope } = $$props; 43987 let { forInput } = $$props; 43988 let { sublabel = "" } = $$props; 43989 let { label = "" } = $$props; 43990 let { style = "" } = $$props; 43991 let { isPaymentForm = false } = $$props; 43992 43993 $$self.$$set = $$props => { 43994 if ('forInput' in $$props) $$invalidate(0, forInput = $$props.forInput); 43995 if ('sublabel' in $$props) $$invalidate(1, sublabel = $$props.sublabel); 43996 if ('label' in $$props) $$invalidate(2, label = $$props.label); 43997 if ('style' in $$props) $$invalidate(3, style = $$props.style); 43998 if ('isPaymentForm' in $$props) $$invalidate(4, isPaymentForm = $$props.isPaymentForm); 43999 if ('$$scope' in $$props) $$invalidate(5, $$scope = $$props.$$scope); 44000 }; 44001 44002 return [forInput, sublabel, label, style, isPaymentForm, $$scope, slots]; 44003 } 44004 44005 class Label extends SvelteComponent { 44006 constructor(options) { 44007 super(); 44008 44009 init(this, options, instance$14, create_fragment$16, safe_not_equal, { 44010 forInput: 0, 44011 sublabel: 1, 44012 label: 2, 44013 style: 3, 44014 isPaymentForm: 4 44015 }); 44016 } 44017 } 44018 44019 /* src/components/elements/password/PasswordInput.svelte generated by Svelte v4.2.12 */ 44020 44021 function create_fragment$15(ctx) { 44022 let label_1; 44023 let t; 44024 let div; 44025 let input; 44026 let current; 44027 44028 label_1 = new Label({ 44029 props: { 44030 forInput: /*inputId*/ ctx[13], 44031 label: /*label*/ ctx[1], 44032 isPaymentForm: /*isPaymentForm*/ ctx[8] 44033 } 44034 }); 44035 44036 input = new Input({ 44037 props: { 44038 disabled: /*disabled*/ ctx[0], 44039 required: true, 44040 id: /*inputId*/ ctx[13], 44041 type: /*passwordInputType*/ ctx[14], 44042 value: /*password*/ ctx[11], 44043 placeholder: /*placeholder*/ ctx[2], 44044 errorMessage: /*error*/ ctx[5], 44045 autocomplete: /*autocomplete*/ ctx[7], 44046 isPaymentForm: /*isPaymentForm*/ ctx[8], 44047 innerTextOnClick: /*func*/ ctx[16], 44048 innerText: /*showPassword*/ ctx[12] 44049 ? /*hideLabel*/ ctx[4] 44050 : /*showLabel*/ ctx[3], 44051 onFocus: /*onFocus*/ ctx[9], 44052 onBlur: /*onBlur*/ ctx[10] 44053 } 44054 }); 44055 44056 input.$on("change", /*change_handler*/ ctx[17]); 44057 44058 return { 44059 c() { 44060 create_component(label_1.$$.fragment); 44061 t = space(); 44062 div = element("div"); 44063 create_component(input.$$.fragment); 44064 attr(div, "class", "zephr-form-relative-container"); 44065 toggle_class(div, "zephr-payment-form-relative-container", /*isPaymentForm*/ ctx[8]); 44066 }, 44067 m(target, anchor) { 44068 mount_component(label_1, target, anchor); 44069 insert(target, t, anchor); 44070 insert(target, div, anchor); 44071 mount_component(input, div, null); 44072 current = true; 44073 }, 44074 p(ctx, [dirty]) { 44075 const label_1_changes = {}; 44076 if (dirty & /*inputId*/ 8192) label_1_changes.forInput = /*inputId*/ ctx[13]; 44077 if (dirty & /*label*/ 2) label_1_changes.label = /*label*/ ctx[1]; 44078 if (dirty & /*isPaymentForm*/ 256) label_1_changes.isPaymentForm = /*isPaymentForm*/ ctx[8]; 44079 label_1.$set(label_1_changes); 44080 const input_changes = {}; 44081 if (dirty & /*disabled*/ 1) input_changes.disabled = /*disabled*/ ctx[0]; 44082 if (dirty & /*inputId*/ 8192) input_changes.id = /*inputId*/ ctx[13]; 44083 if (dirty & /*passwordInputType*/ 16384) input_changes.type = /*passwordInputType*/ ctx[14]; 44084 if (dirty & /*password*/ 2048) input_changes.value = /*password*/ ctx[11]; 44085 if (dirty & /*placeholder*/ 4) input_changes.placeholder = /*placeholder*/ ctx[2]; 44086 if (dirty & /*error*/ 32) input_changes.errorMessage = /*error*/ ctx[5]; 44087 if (dirty & /*autocomplete*/ 128) input_changes.autocomplete = /*autocomplete*/ ctx[7]; 44088 if (dirty & /*isPaymentForm*/ 256) input_changes.isPaymentForm = /*isPaymentForm*/ ctx[8]; 44089 if (dirty & /*showPassword*/ 4096) input_changes.innerTextOnClick = /*func*/ ctx[16]; 44090 44091 if (dirty & /*showPassword, hideLabel, showLabel*/ 4120) input_changes.innerText = /*showPassword*/ ctx[12] 44092 ? /*hideLabel*/ ctx[4] 44093 : /*showLabel*/ ctx[3]; 44094 44095 if (dirty & /*onFocus*/ 512) input_changes.onFocus = /*onFocus*/ ctx[9];
44096 if (dirty & /*onBlur*/ 1024) input_changes.onBlur = /*onBlur*/ ctx[10]; 44097 input.$set(input_changes); 44098 44099 if (!current || dirty & /*isPaymentForm*/ 256) { 44100 toggle_class(div, "zephr-payment-form-relative-container", /*isPaymentForm*/ ctx[8]); 44101 } 44102 }, 44103 i(local) { 44104 if (current) return; 44105 transition_in(label_1.$$.fragment, local); 44106 transition_in(input.$$.fragment, local); 44107 current = true; 44108 }, 44109 o(local) { 44110 transition_out(label_1.$$.fragment, local); 44111 transition_out(input.$$.fragment, local); 44112 current = false; 44113 }, 44114 d(detaching) { 44115 if (detaching) { 44116 detach(t); 44117 detach(div); 44118 } 44119 44120 destroy_component(label_1, detaching); 44121 destroy_component(input); 44122 } 44123 }; 44124 } 44125 44126 function instance$13($$self, $$props, $$invalidate) { 44127 let passwordInputType; 44128 let inputId; 44129 let { disabled } = $$props; 44130 let { label } = $$props; 44131 let { placeholder } = $$props; 44132 let { isMainPassword } = $$props; 44133 let { showLabel } = $$props; 44134 let { hideLabel } = $$props; 44135 let { error = null } = $$props; 44136 let { onChange } = $$props; 44137 let { autocomplete } = $$props; 44138 let { isPaymentForm = false } = $$props; 44139 let { onFocus } = $$props; 44140 let { onBlur } = $$props; 44141 let { password } = $$props; 44142 let showPassword = false; 44143 const func = () =>
44143 $$invalidate(12, showPassword = !showPassword); 44144 const change_handler = ({ detail }) => onChange(detail); 44145 44146 $$self.$$set = $$props => { 44147 if ('disabled' in $$props) $$invalidate(0, disabled = $$props.disabled); 44148 if ('label' in $$props) $$invalidate(1, label = $$props.label); 44149 if ('placeholder' in $$props) $$invalidate(2, placeholder = $$props.placeholder); 44150 if ('isMainPassword' in $$props) $$invalidate(15, isMainPassword = $$props.isMainPassword); 44151 if ('showLabel' in $$props) $$invalidate(3, showLabel = $$props.showLabel); 44152 if ('hideLabel' in $$props) $$invalidate(4, hideLabel = $$props.hideLabel); 44153 if ('error' in $$props) $$invalidate(5, error = $$props.error); 44154 if ('onChange' in $$props) $$invalidate(6, onChange = $$props.onChange); 44155 if ('autocomplete' in $$props) $$invalidate(7, autocomplete = $$props.autocomplete); 44156 if ('isPaymentForm' in $$props) $$invalidate(8, isPaymentForm = $$props.isPaymentForm); 44157 if ('onFocus' in $$props) $$invalidate(9, onFocus = $$props.onFocus); 44158 if ('onBlur' in $$props) $$invali
44158date(10, onBlur = $$props.onBlur); 44159 if ('password' in $$props) $$invalidate(11, password = $$props.password); 44160 }; 44161 44162 $$self.$$.update = () => { 44163 if ($$self.$$.dirty & /*showPassword*/ 4096) { 44164 $$invalidate(14, passwordInputType = showPassword ? "text" : "password"); 44165 } 44166 44167 if ($$self.$$.dirty & /*isMainPassword*/ 32768) { 44168 $$invalidate(13, inputId = `zephr-form-${isMainPassword ? 'password' : 'confirm-password'}`); 44169 } 44170 }; 44171 44172 return [ 44173 disabled, 44174 label, 44175 placeholder, 44176 showLabel, 44177 hideLabel, 44178 error, 44179 onChange, 44180 autocomplete, 44181 isPaymentForm, 44182 onFocus, 44183 onBlur, 44184 password, 44185 showPassword, 44186 inputId, 44187 passwordInputType, 44188 isMainPassword, 44189 func, 44190 change_handler 44191 ]; 44192 } 44193 44194 class PasswordInput extends SvelteComponent { 44195 constructor(options) { 44196 super(); 44197 44198 init(this, options, instance$13, create_fragment$15, safe_not_equal, { 44199 disabled: 0, 44200 label: 1, 44201 placeholder: 2, 44202 isMainPassword: 15, 44203 showLabel: 3, 44204 hideLabel: 4, 44205 error: 5, 44206 onChange: 6, 44207 autocomplete: 7, 44208 isPaymentForm: 8, 44209 onFocus: 9, 44210 onBlur: 10, 44211 password: 11 44212 }); 44213 } 44214 } 44215 44216 function setCustomFontSize(element, size) { 44217 if (size && size !== "lg" && size !== "sm" && size !== "xs") { 44218 element.style.fontSize = size.replace("x", "em"); 44219 } 44220 else { 44221 element.style.fontSize = ""; 44222 } 44223 } 44224 function getTransform(scale, translateX, translateY, rotate, flip, translateTimes = 1, translateUnit = "", rotateUnit = "") { 44225 let flipX = 1; 44226 let flipY = 1; 44227 if (flip) { 44228 if (flip == "horizontal") { 44229 flipX = -1; 44230 } 44231 else if (flip == "vertical") { 44232 flipY = -1; 44233 } 44234 else { 44235 flipX = flipY = -1; 44236 } 44237 } 44238 if (typeof scale === "string") { 44239 scale = parseFloat(scale); 44240 } 44241 if (typeof translateX === "string") { 44242 translateX = parseFloat(translateX); 44243 } 44244 if (typeof translateY === "string") { 44245 translateY = parseFloat(translateY); 44246 } 44247 const x = `${translateX * translateTimes}${translateUnit}`; 44248 const y = `${translateY * translateTimes}${translateUnit}`; 44249 let output = `translate(${x},${y}) scale(${flipX * scale},${flipY * scale})`; 44250 if (rotate) { 44251 output += ` rotate(${rotate}${rotateUnit})`; 44252 } 44253 return output; 44254 } 44255 44256 /* node_modules/svelte-fa/dist/fa.svelte generated by Svelte v4.2.12 */ 44257 44258 function create_if_block$H(ctx) { 44259 let svg; 44260 let g1; 44261 let g0; 44262 let g1_transform_value; 44263 let g1_transform_origin_value; 44264 let svg_class_value; 44265 let svg_viewBox_value; 44266 44267 function select_block_type(ctx, dirty) { 44268 if (typeof /*i*/ ctx[16][4] == "string") return create_if_block_1$v; 44269 return create_else_block$a; 44270 } 44271 44272 let current_block_type = select_block_type(ctx); 44273 let if_block = current_block_type(ctx); 44274 44275 return { 44276 c() { 44277 svg = svg_element("svg"); 44278 g1 = svg_element("g"); 44279 g0 = svg_element("g"); 44280 if_block.c(); 44281 attr(g0, "transform", /*transform*/ ctx[15]); 44282 attr(g1, "transform", g1_transform_value = "translate(" + /*i*/ ctx[16][0] / 2 + " " + /*i*/ ctx[16][1] / 2 + ")"); 44283 attr(g1, "transform-origin", g1_transform_origin_value = "" + (/*i*/ ctx[16][0] / 4 + " 0")); 44284 attr(svg, "id", /*id*/ ctx[1]); 44285 attr(svg, "class", svg_class_value = "svelte-fa svelte-fa-base " + /*clazz*/ ctx[0] + " svelte-f5ydbn"); 44286 attr(svg, "style", /*style*/ ctx[2]); 44287 attr(svg, "viewBox", svg_viewBox_value = "0 0 " + /*i*/ ctx[16][0] + " " + /*i*/ ctx[16][1]); 44288 attr(svg, "aria-hidden", "true"); 44289 attr(svg, "role", "img"); 44290 attr(svg, "xmlns", "http://www.w3.org/2000/svg"); 44291 toggle_class(svg, "pulse", /*pulse*/ ctx[8]); 44292 toggle_class(svg, "svelte-fa-size-lg", /*size*/ ctx[3] === "lg"); 44293 toggle_class(svg, "svelte-fa-size-sm", /*size*/ ctx[3] === "sm"); 44294 toggle_class(svg, "svelte-fa-size-xs", /*size*/ ctx[3] === "xs"); 44295 toggle_class(svg, "svelte-fa-fw", /*fw*/ ctx[5]); 44296 toggle_class(svg, "svelte-fa-pull-left", /*pull*/ ctx[6] === "left"); 44297 toggle_class(svg, "svelte-fa-pull-right", /*pull*/ ctx[6] === "right"); 44298 toggle_class(svg, "spin", /*spin*/ ctx[7]); 44299 }, 44300 m(target, anchor) { 44301 insert(target, svg, anchor); 44302 append(svg, g1); 44303 append(g1, g0); 44304 if_block.m(g0, null); 44305 /*svg_binding*/ ctx[23](svg); 44306 }, 44307 p(ctx, dirty) { 44308 if (current_block_type === (current_block_type = select_block_type(ctx)) && if_block) { 44309 if_block.p(ctx, dirty); 44310 } else { 44311 if_block.d(1); 44312 if_block = current_block_type(ctx); 44313 44314 if (if_block) { 44315 if_block.c(); 44316 if_block.m(g0, null); 44317 } 44318 } 44319
44320 if (dirty & /*transform*/ 32768) { 44321 attr(g0, "transform", /*transform*/ ctx[15]); 44322 } 44323 44324 if (dirty & /*i*/ 65536 && g1_transform_value !== (g1_transform_value = "translate(" + /*i*/ ctx[16][0] / 2 + " " + /*i*/ ctx[16][1] / 2 + ")")) { 44325 attr(g1, "transform", g1_transform_value); 44326 } 44327 44328 if (dirty & /*i*/ 65536 && g1_transform_origin_value !== (g1_transform_origin_value = "" + (/*i*/ ctx[16][0] / 4 + " 0"))) { 44329 attr(g1, "transform-origin", g1_transform_origin_value); 44330 } 44331 44332 if (dirty & /*id*/ 2) { 44333 attr(svg, "id", /*id*/ ctx[1]); 44334 } 44335 44336 if (dirty & /*clazz*/ 1 && svg_class_value !== (svg_class_value = "svelte-fa svelte-fa-base " + /*clazz*/ ctx[0] + " svelte-f5ydbn")) { 44337 attr(svg, "class", svg_class_value); 44338 } 44339 44340 if (dirty & /*style*/ 4) { 44341 attr(svg, "style", /*style*/ ctx[2]); 44342 } 44343 44344 if (dirty & /*i*/ 65536 && svg_viewBox_value !== (svg_viewBox_value = "0 0 " + /*i*/ ctx[16][0] + " " + /*i*/ ctx[16][1])) { 44345 attr(svg, "viewBox", svg_viewBox_value); 44346 } 44347 44348 if (dirty & /*clazz, pulse*/ 257) { 44349 toggle_class(svg, "pulse", /*pulse*/ ctx[8]); 44350 } 44351 44352 if (dirty & /*clazz, size*/ 9) { 44353 toggle_class(svg, "svelte-fa-size-lg", /*size*/ ctx[3] === "lg"); 44354 } 44355 44356 if (dirty & /*clazz, size*/ 9) { 44357 toggle_class(svg, "svelte-fa-size-sm", /*size*/ ctx[3] === "sm"); 44358 } 44359 44360 if (dirty & /*clazz, size*/ 9) { 44361 toggle_class(svg, "svelte-fa-size-xs", /*size*/ ctx[3] === "xs"); 44362 } 44363 44364 if (dirty & /*clazz, fw*/ 33) { 44365 toggle_class(svg, "svelte-fa-fw", /*fw*/ ctx[5]); 44366 } 44367 44368 if (dirty & /*clazz, pull*/ 65) { 44369 toggle_class(svg, "svelte-fa-pull-left", /*pull*/ ctx[6] === "left"); 44370 } 44371 44372 if (dirty & /*clazz, pull*/ 65) { 44373 toggle_class(svg, "svelte-fa-pull-right", /*pull*/ ctx[6] === "right"); 44374 } 44375 44376 if (dirty & /*clazz, spin*/ 129) { 44377 toggle_class(svg, "spin", /*spin*/ ctx[7]); 44378 } 44379 }, 44380 d(detaching) { 44381 if (detaching) { 44382 detach(svg); 44383 } 44384 44385 if_block.d(); 44386 /*svg_binding*/ ctx[23](null); 44387 } 44388 }; 44389 } 44390 44391 // (61:8) {:else} 44392 function create_else_block$a(ctx) { 44393 let path0; 44394 let path0_d_value; 44395 let path0_fill_value; 44396 let path0_fill_opacity_value; 44397 let path0_transform_value; 44398 let path1; 44399 let path1_d_value; 44400 let path1_fill_value; 44401 let path1_fill_opacity_value; 44402 let path1_transform_value; 44403 44404 return { 44405 c() { 44406 path0 = svg_element("path"); 44407 path1 = svg_element("path"); 44408 attr(path0, "d", path0_d_value = /*i*/ ctx[16][4][0]); 44409 attr(path0, "fill", path0_fill_value = /*secondaryColor*/ ctx[10] || /*color*/ ctx[4] || "currentColor"); 44410 44411 attr(path0, "fill-opacity", path0_fill_opacity_value = /*swapOpacity*/ ctx[13] != false 44412 ? /*primaryOpacity*/ ctx[11] 44413 : /*secondaryOpacity*/ ctx[12]); 44414 44415 attr(path0, "transform", path0_transform_value = "translate(" + /*i*/ ctx[16][0] / -2 + " " + /*i*/ ctx[16][1] / -2 + ")"); 44416 attr(path1, "d", path1_d_value = /*i*/ ctx[16][4][1]); 44417 attr(path1, "fill", path1_fill_value = /*primaryColor*/ ctx[9] || /*color*/ ctx[4] || "currentColor"); 44418 44419 attr(path1, "fill-opacity", path1_fill_opacity_value = /*swapOpacity*/ ctx[13] != false 44420 ? /*secondaryOpacity*/ ctx[12] 44421 : /*primaryOpacity*/ ctx[11]); 44422 44423 attr(path1, "transform", path1_transform_value = "translate(" + /*i*/ ctx[16][0] / -2 + " " + /*i*/ ctx[16][1] / -2 + ")"); 44424 }, 44425 m(target, anchor) { 44426 insert(target, path0, anchor); 44427 insert(target, path1, anchor); 44428 }, 44429 p(ctx, dirty) { 44430 if (dirty & /*i*/ 65536 && path0_d_value !== (path0_d_value = /*i*/ ctx[16][4][0])) { 44431 attr(path0, "d", path0_d_value); 44432 } 44433 44434 if (dirty & /*secondaryColor, color*/ 1040 && path0_fill_value !== (path0_fill_value = /*secondaryColor*/ ctx[10] || /*color*/ ctx[4] || "currentColor")) { 44435 attr(path0, "fill", path0_fill_value); 44436 } 44437 44438 if (dirty & /*swapOpacity, primaryOpacity, secondaryOpacity*/ 14336 && path0_fill_opacity_value !== (path0_fill_opacity_value = /*swapOpacity*/ ctx[13] != false 44439 ? /*primaryOpacity*/ ctx[11] 44440 : /*secondaryOpacity*/ ctx[12])) { 44441 attr(path0, "fill-opacity", path0_fill_opacity_value); 44442 } 44443
44444 if (dirty & /*i*/ 65536 && path0_transform_value !== (path0_transform_value = "translate(" + /*i*/ ctx[16][0] / -2 + " " + /*i*/ ctx[16][1] / -2 + ")")) { 44445 attr(path0, "transform", path0_transform_value); 44446 } 44447 44448 if (dirty & /*i*/ 65536 && path1_d_value !== (path1_d_value = /*i*/ ctx[16][4][1])) { 44449 attr(path1, "d", path1_d_value); 44450 } 44451 44452 if (dirty & /*primaryColor, color*/ 528 && path1_fill_value !== (path1_fill_value = /*primaryColor*/ ctx[9] || /*color*/ ctx[4] || "currentColor")) { 44453 attr(path1, "fill", path1_fill_value); 44454 } 44455 44456 if (dirty & /*swapOpacity, secondaryOpacity, primaryOpacity*/ 14336 && path1_fill_opacity_value !== (path1_fill_opacity_value = /*swapOpacity*/ ctx[13] != false 44457 ? /*secondaryOpacity*/ ctx[12] 44458 : /*primaryOpacity*/ ctx[11])) { 44459 attr(path1, "fill-opacity", path1_fill_opacity_value); 44460 } 44461 44462 if (dirty & /*i*/ 65536 && path1_transform_value !== (path1_transform_value = "translate(" + /*i*/ ctx[16][0] / -2 + " " + /*i*/ ctx[16][1] / -2 + ")")) { 44463 attr(path1, "transform", path1_transform_value); 44464 } 44465 }, 44466 d(detaching) { 44467 if (detaching) { 44468 detach(path0); 44469 detach(path1); 44470 } 44471 } 44472 }; 44473 } 44474 44475 // (55:8) {#if typeof i[4] == "string"} 44476 function create_if_block_1$v(ctx) { 44477 let path; 44478 let path_d_value; 44479 let path_fill_value; 44480 let path_transform_value; 44481 44482 return { 44483 c() { 44484 path = svg_element("path"); 44485 attr(path, "d", path_d_value = /*i*/ ctx[16][4]); 44486 attr(path, "fill", path_fill_value = /*color*/ ctx[4] || /*primaryColor*/ ctx[9] || "currentColor"); 44487 attr(path, "transform", path_transform_value = "translate(" + /*i*/ ctx[16][0] / -2 + " " + /*i*/ ctx[16][1] / -2 + ")"); 44488 }, 44489 m(target, anchor) { 44490 insert(target, path, anchor); 44491 }, 44492 p(ctx, dirty) { 44493 if (dirty & /*i*/ 65536 && path_d_value !== (path_d_value = /*i*/ ctx[16][4])) { 44494 attr(path, "d", path_d_value); 44495 } 44496 44497 if (dirty & /*color, primaryColor*/ 528 && path_fill_value !== (path_fill_value = /*color*/ ctx[4] || /*primaryColor*/ ctx[9] || "currentColor")) { 44498 attr(path, "fill", path_fill_value); 44499 } 44500 44501 if (dirty & /*i*/ 65536 && path_transform_value !== (path_transform_value = "translate(" + /*i*/ ctx[16][0] / -2 + " " + /*i*/ ctx[16][1] / -2 + ")")) { 44502 attr(path, "transform", path_transform_value); 44503 } 44504 }, 44505 d(detaching) { 44506 if (detaching) { 44507 detach(path); 44508 } 44509 } 44510 }; 44511 } 44512 44513 function create_fragment$14(ctx) { 44514 let if_block_anchor; 44515 let if_block = /*i*/ ctx[16][4] && create_if_block$H(ctx); 44516 44517 return { 44518 c() { 44519 if (if_block) if_block.c(); 44520 if_block_anchor = empty(); 44521 }, 44522 m(target, anchor) { 44523 if (if_block) if_block.m(target, anchor); 44524 insert(target, if_block_anchor, anchor); 44525 }, 44526 p(ctx, [dirty]) { 44527 if (/*i*/ ctx[16][4]) { 44528 if (if_block) { 44529 if_block.p(ctx, dirty); 44530 } else { 44531 if_block = create_if_block$H(ctx); 44532 if_block.c(); 44533 if_block.m(if_block_anchor.parentNode, if_block_anchor); 44534 } 44535 } else if (if_block) { 44536 if_block.d(1); 44537 if_block = null; 44538 } 44539 }, 44540 i: noop, 44541 o: noop, 44542 d(detaching) { 44543 if (detaching) { 44544 detach(if_block_anchor); 44545 } 44546 44547 if (if_block) if_block.d(detaching); 44548 } 44549 }; 44550 } 44551 44552 function instance$12($$self, $$props, $$invalidate) { 44553 let i; 44554 let transform; 44555 let { class: clazz = void 0 } = $$props; 44556 let { id = void 0 } = $$props; 44557 let { style = void 0 } = $$props; 44558 let { icon } = $$props; 44559 let { size = void 0 } = $$props; 44560 let { color = void 0 } = $$props; 44561 let { fw = false } = $$props; 44562 let { pull = void 0 } = $$props; 44563 let { scale = 1 } = $$props; 44564 let { translateX = 0 } = $$props; 44565 let { translateY = 0 } = $$props; 44566 let { rotate = void 0 } = $$props; 44567 let { flip = void 0 } = $$props; 44568 let { spin = false } = $$props; 44569 let { pulse = false } = $$props; 44570 let { primaryColor = "" } = $$props; 44571 let { secondaryColor = "" } = $$props; 44572 let { primaryOpacity = 1 } = $$props; 44573 let { secondaryOpacity = 0.4 } = $$props; 44574 let { swapOpacity = false } = $$props; 44575 let svgElement; 44576 44577 function svg_binding($$value) { 44578 binding_callbacks[$$value ? 'unshift' : 'push'](() => { 44579 svgElement = $$value;
44580 $$invalidate(14, svgElement); 44581 }); 44582 } 44583 44584 $$self.$$set = $$props => { 44585 if ('class' in $$props) $$invalidate(0, clazz = $$props.class); 44586 if ('id' in $$props) $$invalidate(1, id = $$props.id); 44587 if ('style' in $$props) $$invalidate(2, style = $$props.style); 44588 if ('icon' in $$props) $$invalidate(17, icon = $$props.icon); 44589 if ('size' in $$props) $$invalidate(3, size = $$props.size); 44590 if ('color' in $$props) $$invalidate(4, color = $$props.color); 44591 if ('fw' in $$props) $$invalidate(5, fw = $$props.fw); 44592 if ('pull' in $$props) $$invalidate(6, pull = $$props.pull); 44593 if ('scale' in $$props) $$invalidate(18, scale = $$props.scale); 44594 if ('translateX' in $$props) $$invalidate(19, translateX = $$props.translateX); 44595 if ('translateY' in $$props) $$invalidate(20, translateY = $$props.translateY); 44596 if ('rotate' in $$props) $$invalidate(21, rotate = $$props.rotate); 44597 if ('flip' in $$props) $$invalidate(22, flip = $$props.flip); 44598 if ('spin' in $$props) $$invalidate(7, spin = $$props.spin); 44599 if ('pulse' in $$props) $$invali
44599date(8, pulse = $$props.pulse); 44600 if ('primaryColor' in $$props) $$invalidate(9, primaryColor = $$props.primaryColor); 44601 if ('secondaryColor' in $$props) $$invalidate(10, secondaryColor = $$props.secondaryColor); 44602 if ('primaryOpacity' in $$props) $$invalidate(11, primaryOpacity = $$props.primaryOpacity); 44603 if ('secondaryOpacity' in $$props) $$invalidate(12, secondaryOpacity = $$props.secondaryOpacity); 44604 if ('swapOpacity' in $$props) $$invalidate(13, swapOpacity = $$props.swapOpacity); 44605 }; 44606 44607 $$self.$$.update = () => { 44608 if ($$self.$$.dirty & /*svgElement, size*/ 16392) { 44609 svgElement && size && setCustomFontSize(svgElement, size); 44610 } 44611 44612 if ($$self.$$.dirty & /*icon*/ 131072) { 44613 $$invalidate(16, i = icon && icon.icon || [0, 0, "", [], ""]); 44614 } 44615 44616 if ($$self.$$.dirty & /*scale, translateX, translateY, rotate, flip*/ 8126464) { 44617 $$invalidate(15, transform = getTransform(scale, translateX, translateY, rotate, flip, 512)); 44618 } 44619 }; 44620 44621 return [ 44622 clazz, 44623 id, 44624 style, 44625 size, 44626 color, 44627 fw, 44628 pull, 44629 spin, 44630 pulse, 44631 primaryColor, 44632 secondaryColor, 44633 primaryOpacity, 44634 secondaryOpacity, 44635 swapOpacity, 44636 svgElement, 44637 transform, 44638 i, 44639 icon, 44640 scale, 44641 translateX, 44642 translateY, 44643 rotate, 44644 flip, 44645 svg_binding 44646 ]; 44647 } 44648 44649 class Fa extends SvelteComponent { 44650 constructor(options) { 44651 super(); 44652 44653 init(this, options, instance$12, create_fragment$14, safe_not_equal, { 44654 class: 0, 44655 id: 1, 44656 style: 2, 44657 icon: 17, 44658 size: 3, 44659 color: 4, 44660 fw: 5, 44661 pull: 6, 44662 scale: 18, 44663 translateX: 19, 44664 translateY: 20, 44665 rotate: 21, 44666 flip: 22, 44667 spin: 7, 44668 pulse: 8, 44669 primaryColor: 9, 44670 secondaryColor: 10, 44671 primaryOpacity: 11, 44672 secondaryOpacity: 12, 44673 swapOpacity: 13 44674 }); 44675 } 44676 } 44677 44678 var faCircleCheck = { 44679 prefix: 'fas', 44680 iconName: 'circle-check', 44681 icon: [512, 512, [61533, "check-circle"], "f058", "M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z"] 44682 }; 44683 var faCheckCircle = faCircleCheck; 44684 var faSpinner = { 44685 prefix: 'fas', 44686 iconName: 'spinner', 44687 icon: [512, 512, [], "f110", "M304 48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zm0 416a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM48 304a48 48 0 1 0 0-96 48 48 0 1 0 0 96zm464-48a48 48 0 1 0 -96 0 48 48 0 1 0 96 0zM142.9 437A48 48 0 1 0 75 369.1 48 48 0 1 0 142.9 437zm0-294.2A48 48 0 1 0 75 75a48 48 0 1 0 67.9 67.9zM369.1 437A48 48 0 1 0 437 369.1 48 48 0 1 0 369.1 437z"] 44688 }; 44689 var faCheck = { 44690 prefix: 'fas', 44691 iconName: 'check', 44692 icon: [448, 512, [10003, 10004], "f00c", "M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 338.7 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z"] 44693 }; 44694 var faCircleXmark = { 44695 prefix: 'fas', 44696 iconName: 'circle-xmark', 44697 icon: [512, 512, [61532, "times-circle", "xmark-circle"], "f057", "M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM175 175c9.4-9.4 24.6-9.4 33.9 0l47 47 47-47c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9l-47 47 47 47c9.4 9.4 9.4 24.6 0 33.9s-24.6 9.4-33.9 0l-47-47-47 47c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l47-47-47-47c-9.4-9.4-9.4-24.6 0-33.9z"] 44698 }; 44699 var faTimesCircle = faCircleXmark; 44700 44701 /* src/components/elements/password/PasswordMatchIndicator.svelte generated by Svelte v4.2.12 */ 44702 44703 function create_fragment$13(ctx) { 44704 let div1; 44705 let ul; 44706 let li; 44707 let div0; 44708 let fa; 44709 let t0; 44710 let t1; 44711 let current; 44712 44713 fa = new Fa({ 44714 props: { 44715 icon: faCheckCircle, 44716 color: /*password*/ ctx[0] && /*password*/ ctx[0] === /*confirmPassword*/ ctx[1] 44717 ? validColor$1 44718 : invalidColor$1 44719 } 44720 }); 44721 44722 return { 44723 c() { 44724 div1 = element("div"); 44725 ul = element("ul"); 44726 li = element("li"); 44727 div0 = element("div"); 44728 create_component(fa.$$.fragment); 44729 t0 = space(); 44730 t1 = text(/*passwordsMatchText*/ ctx[2]); 44731 attr(div0, "class", "zephr-form-password-requirement-icon svelte-tsrdk3"); 44732 toggle_class(div0, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[3]); 44733 attr(li, "class", "zephr-form-password-requirement svelte-tsrdk3"); 44734 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[3]); 44735 attr(ul, "class", "svelte-tsrdk3"); 44736 attr(div1, "class", "zephr-form-flex-container zephr-form-password-match svelte-tsrdk3"); 44737 toggle_class(div1, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[3]); 44738 toggle_class(div1, "zephr-payment-form-password-match", /*isPaymentForm*/ ctx[3]); 44739 }, 44740 m(target, anchor) { 44741 insert(target, div1, anchor); 44742 append(div1, ul); 44743 append(ul, li); 44744 append(li, div0); 44745 mount_component(fa, div0, null); 44746 append(li, t0); 44747 append(li, t1); 44748 current = true; 44749 }, 44750 p(ctx, [dirty]) { 44751 const fa_changes = {}; 44752
44753 if (dirty & /*password, confirmPassword*/ 3) fa_changes.color = /*password*/ ctx[0] && /*password*/ ctx[0] === /*confirmPassword*/ ctx[1] 44754 ? validColor$1 44755 : invalidColor$1; 44756 44757 fa.$set(fa_changes); 44758 44759 if (!current || dirty & /*isPaymentForm*/ 8) { 44760 toggle_class(div0, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[3]); 44761 } 44762 44763 if (!current || dirty & /*passwordsMatchText*/ 4) set_data(t1, /*passwordsMatchText*/ ctx[2]); 44764 44765 if (!current || dirty & /*isPaymentForm*/ 8) { 44766 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[3]); 44767 } 44768 44769 if (!current || dirty & /*isPaymentForm*/ 8) { 44770 toggle_class(div1, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[3]); 44771 } 44772 44773 if (!current || dirty & /*isPaymentForm*/ 8) { 44774 toggle_class(div1, "zephr-payment-form-password-match", /*isPaymentForm*/ ctx[3]); 44775 } 44776 }, 44777 i(local) { 44778 if (current) return; 44779 transition_in(fa.$$.fragment, local); 44780 current = true; 44781 }, 44782 o(local) { 44783 transition_out(fa.$$.fragment, local); 44784 current = false; 44785 }, 44786 d(detaching) { 44787 if (detaching) { 44788 detach(div1); 44789 } 44790 44791 destroy_component(fa); 44792 } 44793 }; 44794 } 44795 44796 const validColor$1 = "var(--zf-password-valid-color)"; 44797 const invalidColor$1 = "var(--zf-password-invalid-color)"; 44798 44799 function instance$11($$self, $$props, $$invalidate) { 44800 let { password } = $$props; 44801 let { confirmPassword } = $$props; 44802 let { passwordsMatchText } = $$props; 44803 let { isPaymentForm = false } = $$props; 44804 44805 $$self.$$set = $$props => {
44806 if ('password' in $$props) $$invalidate(0, password = $$props.password); 44807 if ('confirmPassword' in $$props) $$invalidate(1, confirmPassword = $$props.confirmPassword); 44808 if ('passwordsMatchText' in $$props) $$invalidate(2, passwordsMatchText = $$props.passwordsMatchText); 44809 if ('isPaymentForm' in $$props) $$invalidate(3, isPaymentForm = $$props.isPaymentForm); 44810 }; 44811 44812 return [password, confirmPassword, passwordsMatchText, isPaymentForm]; 44813 } 44814 44815 class PasswordMatchIndicator extends SvelteComponent { 44816 constructor(options) { 44817 super(); 44818 44819 init(this, options, instance$11, create_fragment$13, safe_not_equal, { 44820 password: 0, 44821 confirmPassword: 1, 44822 passwordsMatchText: 2, 44823 isPaymentForm: 3 44824 }); 44825 } 44826 } 44827 44828 /* src/components/elements/password/PasswordValidator.svelte generated by Svelte v4.2.12 */ 44829 44830 function get_each_context$f(ctx, list, i) { 44831 const child_ctx = ctx.slice(); 44832 child_ctx[12] = list[i]; 44833 child_ctx[14] = i; 44834 return child_ctx; 44835 } 44836 44837 // (43:2) {#each Array(maxScore) as _, i} 44838 function create_each_block$f(ctx) { 44839 let div; 44840 44841 return { 44842 c() { 44843 div = element("div"); 44844 attr(div, "class", "zephr-form-password-bar svelte-1bpbne4"); 44845 44846 set_style(div, "background-color", /*score*/ ctx[3] > /*i*/ ctx[14] 44847 ? validColor 44848 : invalidColor); 44849 44850 toggle_class(div, "zephr-payment-form-password-bar", /*isPaymentForm*/ ctx[2]); 44851 }, 44852 m(target, anchor) { 44853 insert(target, div, anchor); 44854 }, 44855 p(ctx, dirty) { 44856 if (dirty & /*score*/ 8) { 44857 set_style(div, "background-color", /*score*/ ctx[3] > /*i*/ ctx[14] 44858 ? validColor 44859 : invalidColor); 44860 } 44861 44862 if (dirty & /*isPaymentForm*/ 4) { 44863 toggle_class(div, "zephr-payment-form-password-bar", /*isPaymentForm*/ ctx[2]); 44864 } 44865 }, 44866 d(detaching) { 44867 if (detaching) { 44868 detach(div); 44869 } 44870 } 44871 }; 44872 } 44873 44874 // (57:4) {#if passwordRequirements.minLength} 44875 function create_if_block_3$e(ctx) { 44876 let li; 44877 let div; 44878 let fa; 44879 let t0; 44880 let t1_value = /*passwordValidationTexts*/ ctx[1].minLengthValidationText + ""; 44881 let t1; 44882 let current; 44883 44884 fa = new Fa({ 44885 props: { 44886 icon: faCheckCircle, 44887 color: /*isLong*/ ctx[4] ? validColor : invalidColor 44888 } 44889 }); 44890 44891 return { 44892 c() { 44893 li = element("li"); 44894 div = element("div"); 44895 create_component(fa.$$.fragment); 44896 t0 = space(); 44897 t1 = text(t1_value); 44898 attr(div, "class", "zephr-form-password-requirement-icon svelte-1bpbne4"); 44899 toggle_class(div, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[2]); 44900 attr(li, "class", "zephr-form-password-requirement svelte-1bpbne4"); 44901 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[2]); 44902 }, 44903 m(target, anchor) { 44904 insert(target, li, anchor); 44905 append(li, div); 44906 mount_component(fa, div, null); 44907 append(li, t0); 44908 append(li, t1); 44909 current = true; 44910 }, 44911 p(ctx, dirty) { 44912 const fa_changes = {}; 44913 if (dirty & /*isLong*/ 16) fa_changes.color = /*isLong*/ ctx[4] ? validColor : invalidColor; 44914 fa.$set(fa_changes); 44915 44916 if (!current || dirty & /*isPaymentForm*/ 4) { 44917 toggle_class(div, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[2]); 44918 } 44919 44920 if ((!current || dirty & /*passwordValidationTexts*/ 2) && t1_value !== (t1_value = /*passwordValidationTexts*/ ctx[1].minLengthValidationText + "")) set_data(t1, t1_value); 44921 44922 if (!current || dirty & /*isPaymentForm*/ 4) { 44923 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[2]); 44924 } 44925 }, 44926 i(local) { 44927 if (current) return; 44928 transition_in(fa.$$.fragment, local); 44929 current = true; 44930 }, 44931 o(local) { 44932 transition_out(fa.$$.fragment, local); 44933 current = false; 44934 }, 44935 d(detaching) { 44936 if (detaching) { 44937 detach(li); 44938 } 44939 44940 destroy_component(fa); 44941 } 44942 }; 44943 } 44944 44945 // (75:4) {#if passwordRequirements.requireUppercase} 44946 function create_if_block_2$j(ctx) { 44947 let li; 44948 let div; 44949 let fa; 44950 let t0; 44951 let t1_value = /*passwordValidationTexts*/ ctx[1].uppercaseValidationText + ""; 44952 let t1; 44953 let current; 44954 44955 fa = new Fa({ 44956 props: { 44957 icon: faCheckCircle, 44958 color: /*hasUppercaseLetter*/ ctx[7] 44959 ? validColor 44960 : invalidColor 44961 } 44962 }); 44963 44964 return { 44965 c() { 44966 li = element("li"); 44967 div = element("div"); 44968 create_component(fa.$$.fragment); 44969 t0 = space(); 44970 t1 = text(t1_value); 44971 attr(div, "class", "zephr-form-password-requirement-icon svelte-1bpbne4"); 44972 toggle_class(div, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[2]); 44973 attr(li, "class", "zephr-form-password-requirement svelte-1bpbne4"); 44974 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[2]); 44975 }, 44976 m(target, anchor) { 44977 insert(target, li, anchor); 44978 append(li, div); 44979 mount_component(fa, div, null); 44980 append(li, t0); 44981 append(li, t1); 44982 current = true; 44983 }, 44984 p(ctx, dirty) { 44985 const fa_changes = {}; 44986
44987 if (dirty & /*hasUppercaseLetter*/ 128) fa_changes.color = /*hasUppercaseLetter*/ ctx[7] 44988 ? validColor 44989 : invalidColor; 44990 44991 fa.$set(fa_changes); 44992 44993 if (!current || dirty & /*isPaymentForm*/ 4) { 44994 toggle_class(div, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[2]); 44995 } 44996 44997 if ((!current || dirty & /*passwordValidationTexts*/ 2) && t1_value !== (t1_value = /*passwordValidationTexts*/ ctx[1].uppercaseValidationText + "")) set_data(t1, t1_value); 44998 44999 if (!current || dirty & /*isPaymentForm*/ 4) { 45000 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[2]); 45001 } 45002 }, 45003 i(local) { 45004 if (current) return; 45005 transition_in(fa.$$.fragment, local); 45006 current = true; 45007 }, 45008 o(local) { 45009 transition_out(fa.$$.fragment, local); 45010 current = false; 45011 }, 45012 d(detaching) { 45013 if (detaching) { 45014 detach(li); 45015 } 45016 45017 destroy_component(fa); 45018 } 45019 }; 45020 } 45021 45022 // (93:4) {#if passwordRequirements.requireNumbers} 45023 function create_if_block_1$u(ctx) { 45024 let li; 45025 let div; 45026 let fa; 45027 let t0; 45028 let t1_value = /*passwordValidationTexts*/ ctx[1].numberValidationText + ""; 45029 let t1; 45030 let current; 45031 45032 fa = new Fa({ 45033 props: { 45034 icon: faCheckCircle, 45035 color: /*hasNumber*/ ctx[6] ? validColor : invalidColor 45036 } 45037 }); 45038 45039 return { 45040 c() { 45041 li = element("li"); 45042 div = element("div"); 45043 create_component(fa.$$.fragment); 45044 t0 = space(); 45045 t1 = text(t1_value); 45046 attr(div, "class", "zephr-form-password-requirement-icon svelte-1bpbne4"); 45047 toggle_class(div, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[2]); 45048 attr(li, "class", "zephr-form-password-requirement svelte-1bpbne4"); 45049 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[2]); 45050 }, 45051 m(target, anchor) { 45052 insert(target, li, anchor); 45053 append(li, div); 45054 mount_component(fa, div, null); 45055 append(li, t0); 45056 append(li, t1); 45057 current = true; 45058 }, 45059 p(ctx, dirty) { 45060 const fa_changes = {}; 45061 if (dirty & /*hasNumber*/ 64) fa_changes.color = /*hasNumber*/ ctx[6] ? validColor : invalidColor; 45062 fa.$set(fa_changes); 45063 45064 if (!current || dirty & /*isPaymentForm*/ 4) { 45065 toggle_class(div, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[2]); 45066 } 45067 45068 if ((!current || dirty & /*passwordValidationTexts*/ 2) && t1_value !== (t1_value = /*passwordValidationTexts*/ ctx[1].numberValidationText + "")) set_data(t1, t1_value); 45069 45070 if (!current || dirty & /*isPaymentForm*/ 4) { 45071 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[2]); 45072 } 45073 }, 45074 i(local) { 45075 if (current) return; 45076 transition_in(fa.$$.fragment, local); 45077 current = true; 45078 }, 45079 o(local) { 45080 transition_out(fa.$$.fragment, local); 45081 current = false; 45082 }, 45083 d(detaching) { 45084 if (detaching) { 45085 detach(li); 45086 } 45087 45088 destroy_component(fa); 45089 } 45090 }; 45091 } 45092 45093 // (111:4) {#if passwordRequirements.requireSpecialCharacters} 45094 function create_if_block$G(ctx) { 45095 let li; 45096 let div; 45097 let fa; 45098 let t0; 45099 let t1_value = /*passwordValidationTexts*/ ctx[1].symbolValidationText + ""; 45100 let t1; 45101 let current; 45102 45103 fa = new Fa({ 45104 props: { 45105 icon: faCheckCircle, 45106 color: /*hasSpecialCharacter*/ ctx[5] 45107 ? validColor 45108 : invalidColor 45109 } 45110 }); 45111 45112 return { 45113 c() { 45114 li = element("li"); 45115 div = element("div"); 45116 create_component(fa.$$.fragment); 45117 t0 = space(); 45118 t1 = text(t1_value); 45119 attr(div, "class", "zephr-form-password-requirement-icon svelte-1bpbne4"); 45120 toggle_class(div, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[2]); 45121 attr(li, "class", "zephr-form-password-requirement svelte-1bpbne4"); 45122 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[2]); 45123 }, 45124 m(target, anchor) { 45125 insert(target, li, anchor); 45126 append(li, div); 45127 mount_component(fa, div, null); 45128 append(li, t0); 45129 append(li, t1); 45130 current = true; 45131 }, 45132 p(ctx, dirty) { 45133 const fa_changes = {}; 45134 45135 if (dirty & /*hasSpecialCharacter*/ 32) fa_changes.color = /*hasSpecialCharacter*/ ctx[5] 45136 ? validColor 45137 : invalidColor; 45138 45139 fa.$set(fa_changes); 45140 45141 if (!current || dirty & /*isPaymentForm*/ 4) { 45142 toggle_class(div, "zephr-payment-form-password-requirement-icon", /*isPaymentForm*/ ctx[2]); 45143 } 45144 45145 if ((!current || dirty & /*passwordValidationTexts*/ 2) && t1_value !== (t1_value = /*passwordValidationTexts*/ ctx[1].symbolValidationText
45145+ "")) set_data(t1, t1_value); 45146 45147 if (!current || dirty & /*isPaymentForm*/ 4) { 45148 toggle_class(li, "zephr-payment-form-password-requirement", /*isPaymentForm*/ ctx[2]); 45149 } 45150 }, 45151 i(local) { 45152 if (current) return; 45153 transition_in(fa.$$.fragment, local); 45154 current = true; 45155 }, 45156 o(local) { 45157 transition_out(fa.$$.fragment, local); 45158 current = false; 45159 }, 45160 d(detaching) { 45161 if (detaching) { 45162 detach(li); 45163 } 45164 45165 destroy_component(fa); 45166 } 45167 }; 45168 } 45169 45170 function create_fragment$12(ctx) { 45171 let div0; 45172 let t0; 45173 let div1; 45174 let ul; 45175 let t1; 45176 let t2; 45177 let t3; 45178 let current; 45179 let each_value = ensure_array_like(Array(/*maxScore*/ ctx[8])); 45180 let each_blocks = []; 45181 45182 for (let i = 0; i < each_value.length; i += 1) { 45183 each_blocks[i] = create_each_block$f(get_each_context$f(ctx, each_value, i)); 45184 } 45185 45186 let if_block0 = /*passwordRequirements*/ ctx[0].minLength && create_if_block_3$e(ctx); 45187 let if_block1 = /*passwordRequirements*/ ctx[0].requireUppercase && create_if_block_2$j(ctx); 45188 let if_block2 = /*passwordRequirements*/ ctx[0].requireNumbers && create_if_block_1$u(ctx); 45189 let if_block3 = /*passwordRequirements*/ ctx[0].requireSpecialCharacters && create_if_block$G(ctx); 45190 45191 return { 45192 c() { 45193 div0 = element("div"); 45194 45195 for (let i = 0; i < each_blocks.length; i += 1) { 45196 each_blocks[i].c(); 45197 } 45198 45199 t0 = space(); 45200 div1 = element("div"); 45201 ul = element("ul"); 45202 if (if_block0) if_block0.c(); 45203 t1 = space(); 45204 if (if_block1) if_block1.c(); 45205 t2 = space(); 45206 if (if_block2) if_block2.c(); 45207 t3 = space(); 45208 if (if_block3) if_block3.c(); 45209 attr(div0, "class", "zephr-form-password-progress svelte-1bpbne4"); 45210 toggle_class(div0, "zephr-payment-form-password-progress", /*isPaymentForm*/ ctx[2]); 45211 attr(ul, "class", "svelte-1bpbne4"); 45212 attr(div1, "class", "zephr-form-flex-container zephr-form-password-requirements svelte-1bpbne4"); 45213 toggle_class(div1, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[2]); 45214 toggle_class(div1, "zephr-payment-form-password-requirements", /*isPaymentForm*/ ctx[2]); 45215 }, 45216 m(target, anchor) { 45217 insert(target, div0, anchor); 45218 45219 for (let i = 0; i < each_blocks.length; i += 1) { 45220 if (each_blocks[i]) { 45221 each_blocks[i].m(div0, null); 45222 } 45223 } 45224 45225 insert(target, t0, anchor); 45226 insert(target, div1, anchor); 45227 append(div1, ul); 45228 if (if_block0) if_block0.m(ul, null); 45229 append(ul, t1); 45230 if (if_block1) if_block1.m(ul, null); 45231 append(ul, t2); 45232 if (if_block2) if_block2.m(ul, null); 45233 append(ul, t3); 45234 if (if_block3) if_block3.m(ul, null); 45235 current = true; 45236 }, 45237 p(ctx, [dirty]) { 45238 if (dirty & /*score, validColor, invalidColor, isPaymentForm*/ 12) { 45239 each_value = ensure_array_like(Array(/*maxScore*/ ctx[8])); 45240 let i; 45241 45242 for (i = 0; i < each_value.length; i += 1) { 45243 const child_ctx = get_each_context$f(ctx, each_value, i); 45244 45245 if (each_blocks[i]) { 45246 each_blocks[i].p(child_ctx, dirty); 45247 } else { 45248 each_blocks[i] = create_each_block$f(child_ctx); 45249 each_blocks[i].c(); 45250 each_blocks[i].m(div0, null); 45251 } 45252 } 45253 45254 for (; i < each_blocks.length; i += 1) { 45255 each_blocks[i].d(1); 45256 } 45257 45258 each_blocks.length = each_value.length; 45259 } 45260 45261 if (!current || dirty & /*isPaymentForm*/ 4) { 45262 toggle_class(div0, "zephr-payment-form-password-progress", /*isPaymentForm*/ ctx[2]); 45263 } 45264 45265 if (/*passwordRequirements*/ ctx[0].minLength) { 45266 if (if_block0) { 45267 if_block0.p(ctx, dirty); 45268 45269 if (dirty & /*passwordRequirements*/ 1) { 45270 transition_in(if_block0, 1); 45271 } 45272 } else { 45273 if_block0 = create_if_block_3$e(ctx); 45274 if_block0.c(); 45275 transition_in(if_block0, 1); 45276 if_block0.m(ul, t1); 45277 } 45278 } else if (if_block0) { 45279 group_outros(); 45280 45281 transition_out(if_block0, 1, 1, () => { 45282 if_block0 = null; 45283 }); 45284 45285 check_outros(); 45286 } 45287 45288 if (/*passwordRequirements*/ ctx[0].requireUppercase) { 45289 if (if_block1) { 45290 if_block1.p(ctx, dirty); 45291 45292 if (dirty & /*passwordRequirements*/ 1) { 45293 transition_in(if_block1, 1); 45294 } 45295 } else { 45296 if_block1 = create_if_block_2$j(ctx); 45297 if_block1.c(); 45298 transition_in(if_block1, 1); 45299 if_block1.m(ul, t2); 45300 } 45301 } else if (if_block1) { 45302 group_outros(); 45303 45304 transition_out(if_block1, 1, 1, () => { 45305 if_block1 = null; 45306 }); 45307 45308 check_outros(); 45309 } 45310 45311 if (/*passwordRequirements*/ ctx[0].requireNumbers) { 45312 if (if_block2) { 45313 if_block2.p(ctx, dirty); 45314
45315 if (dirty & /*passwordRequirements*/ 1) { 45316 transition_in(if_block2, 1); 45317 } 45318 } else { 45319 if_block2 = create_if_block_1$u(ctx); 45320 if_block2.c(); 45321 transition_in(if_block2, 1); 45322 if_block2.m(ul, t3); 45323 } 45324 } else if (if_block2) { 45325 group_outros(); 45326 45327 transition_out(if_block2, 1, 1, () => { 45328 if_block2 = null; 45329 }); 45330 45331 check_outros(); 45332 } 45333 45334 if (/*passwordRequirements*/ ctx[0].requireSpecialCharacters) { 45335 if (if_block3) { 45336 if_block3.p(ctx, dirty); 45337 45338 if (dirty & /*passwordRequirements*/ 1) { 45339 transition_in(if_block3, 1); 45340 } 45341 } else { 45342 if_block3 = create_if_block$G(ctx); 45343 if_block3.c(); 45344 transition_in(if_block3, 1); 45345 if_block3.m(ul, null); 45346 } 45347 } else if (if_block3) { 45348 group_outros(); 45349 45350 transition_out(if_block3, 1, 1, () => { 45351 if_block3 = null; 45352 }); 45353 45354 check_outros(); 45355 } 45356 45357 if (!current || dirty & /*isPaymentForm*/ 4) { 45358 toggle_class(div1, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[2]); 45359 } 45360 45361 if (!current || dirty & /*isPaymentForm*/ 4) { 45362 toggle_class(div1, "zephr-payment-form-password-requirements", /*isPaymentForm*/ ctx[2]); 45363 } 45364 }, 45365 i(local) { 45366 if (current) return; 45367 transition_in(if_block0); 45368 transition_in(if_block1); 45369 transition_in(if_block2); 45370 transition_in(if_block3); 45371 current = true; 45372 }, 45373 o(local) { 45374 transition_out(if_block0); 45375 transition_out(if_block1); 45376 transition_out(if_block2); 45377 transition_out(if_block3); 45378 current = false; 45379 }, 45380 d(detaching) { 45381 if (detaching) { 45382 detach(div0); 45383 detach(t0); 45384 detach(div1); 45385 } 45386 45387 destroy_each(each_blocks, detaching); 45388 if (if_block0) if_block0.d(); 45389 if (if_block1) if_block1.d(); 45390 if (if_block2) if_block2.d(); 45391 if (if_block3) if_block3.d(); 45392 } 45393 }; 45394 } 45395 45396 const validColor = "var(--zf-password-valid-color)"; 45397 const invalidColor = "var(--zf-password-invalid-color)"; 45398 45399 function instance$10($$self, $$props, $$invalidate) { 45400 let hasUppercaseLetter; 45401 let hasNumber; 45402 let hasSpecialCharacter; 45403 let isLong; 45404 let { passwordRequirements } = $$props; 45405 let { passwordValidationTexts } = $$props; 45406 let { isPaymentForm = false } = $$props; 45407 let { onChange } = $$props; 45408 let { password } = $$props; 45409 let { passwordIsValid } = $$props; 45410 let score = 0; 45411 45412 let maxScore = Object.values(passwordRequirements).reduce( 45413 (acc, curr) => { 45414 return acc += curr ? 1 : 0; 45415 }, 45416 0 45417 ); 45418 45419 $$self.$$set = $$props => {
45420 if ('passwordRequirements' in $$props) $$invalidate(0, passwordRequirements = $$props.passwordRequirements); 45421 if ('passwordValidationTexts' in $$props) $$invalidate(1, passwordValidationTexts = $$props.passwordValidationTexts); 45422 if ('isPaymentForm' in $$props) $$invalidate(2, isPaymentForm = $$props.isPaymentForm); 45423 if ('onChange' in $$props) $$invalidate(9, onChange = $$props.onChange); 45424 if ('password' in $$props) $$invalidate(10, password = $$props.password); 45425 if ('passwordIsValid' in $$props) $$invalidate(11, passwordIsValid = $$props.passwordIsValid); 45426 }; 45427 45428 $$self.$$.update = () => { 45429 if ($$self.$$.dirty & /*password*/ 1024) { 45430 $$invalidate(7, hasUppercaseLetter = (/[A-Z]+/).test(password)); 45431 } 45432 45433 if ($$self.$$.dirty & /*password*/ 1024) { 45434 $$invalidate(6, hasNumber = (/[0-9]+/).test(password)); 45435 } 45436 45437 if ($$self.$$.dirty & /*password*/ 1024) { 45438 $$invalidate(5, hasSpecialCharacter = (/[^a-z0-9A-Z]+/).test(password)); 45439 } 45440 45441 if ($$self.$$.dirty & /*password, passwordRequirements*/ 1025) { 45442 $$invalidate(4, isLong = password?.length >= passwordRequirements.minLength); 45443 } 45444 45445 if ($$self.$$.dirty & /*password, passwordRequirements, score, passwordIsValid, onChange*/ 3593) { 45446 { 45447 $$invalidate(3, score = 0); 45448 45449 if ((/[A-Z]+/).test(password) && passwordRequirements.requireUppercase) { 45450 $$invalidate(3, score += 1); 45451 } 45452 45453 if ((/[0-9]+/).test(password) && passwordRequirements.requireNumbers) { 45454 $$invalidate(3, score += 1); 45455 } 45456 45457 if ((/[^a-z0-9A-Z]+/).test(password) && passwordRequirements.requireSpecialCharacters) { 45458 $$invalidate(3, score += 1); 45459 } 45460 45461 if (password?.length >= passwordRequirements.minLength && passwordRequirements.minLength) { 45462 $$invalidate(3, score += 1); 45463 } 45464 45465 score >= maxScore !== passwordIsValid && onChange(score >= maxScore); 45466 } 45467 } 45468 }; 45469 45470 return [ 45471 passwordRequirements, 45472 passwordValidationTexts, 45473 isPaymentForm, 45474 score, 45475 isLong, 45476 hasSpecialCharacter, 45477 hasNumber, 45478 hasUppercaseLetter, 45479 maxScore, 45480 onChange, 45481 password, 45482 passwordIsValid 45483 ]; 45484 } 45485 45486 class PasswordValidator extends SvelteComponent { 45487 constructor(options) { 45488 super(); 45489 45490 init(this, options, instance$10, create_fragment$12, safe_not_equal, { 45491 passwordRequirements: 0, 45492 passwordValidationTexts: 1, 45493 isPaymentForm: 2, 45494 onChange: 9, 45495 password: 10, 45496 passwordIsValid: 11 45497 }); 45498 } 45499 } 45500 45501 /* src/components/elements/password/CreatePassword.svelte generated by Svelte v4.2.12 */ 45502 45503 function create_if_block_3$d(ctx) { 45504 let passwordvalidator; 45505 let current; 45506 45507 passwordvalidator = new PasswordValidator({ 45508 props: { 45509 password: /*password*/ ctx[12], 45510 passwordIsValid: /*passwordIsValid*/ ctx[14], 45511 passwordRequirements: /*passwordRequirements*/ ctx[1], 45512 passwordValidationTexts: /*passwordValidationTexts*/ ctx[16], 45513 isPaymentForm: /*isPaymentForm*/ ctx[3], 45514 onChange: /*onPasswordIsValidChange*/ ctx[10] 45515 } 45516 }); 45517 45518 return { 45519 c() { 45520 create_component(passwordvalidator.$$.fragment); 45521 }, 45522 m(target, anchor) { 45523 mount_component(passwordvalidator, target, anchor); 45524 current = true; 45525 }, 45526 p(ctx, dirty) { 45527 const passwordvalidator_changes = {}; 45528 if (dirty & /*password*/ 4096) passwordvalidator_changes.password = /*password*/ ctx[12]; 45529 if (dirty & /*passwordIsValid*/ 16384) passwordvalidator_changes.passwordIsValid = /*passwordIsValid*/ ctx[14]; 45530 if (dirty & /*passwordRequirements*/ 2) passwordvalidator_changes.passwordRequirements = /*passwordRequirements*/ ctx[1]; 45531 if (dirty & /*isPaymentForm*/ 8) passwordvalidator_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 45532 if (dirty & /*onPasswordIsValidChange*/ 1024) passwordvalidator_changes.onChange = /*onPasswordIsValidChange*/ ctx[10]; 45533 passwordvalidator.$set(passwordvalidator_changes); 45534 }, 45535 i(local) { 45536 if (current) return; 45537 transition_in(passwordvalidator.$$.fragment, local); 45538 current = true; 45539 }, 45540 o(local) { 45541 transition_out(passwordvalidator.$$.fragment, local); 45542 current = false; 45543 }, 45544 d(detaching) { 45545 destroy_component(passwordvalidator, detaching); 45546 } 45547 }; 45548 } 45549 45550 // (58:0) {#if !hideConfirmPassword} 45551 function create_if_block_2$i(ctx) { 45552 let passwordinput; 45553 let current; 45554 45555 passwordinput = new PasswordInput({ 45556 props: { 45557 disabled: /*disabled*/ ctx[11], 45558 password: /*confirmPassword*/ ctx[13], 45559 isMainPassword: false, 45560 label: /*config*/ ctx[0].confirm, 45561 hideLabel: /*config*/ ctx[0].hide, 45562 showLabel: /*config*/ ctx[0].show, 45563 placeholder: /*config*/ ctx[0].confirmPlaceholder, 45564 isPaymentForm: /*isPaymentForm*/ ctx[3], 45565 autocomplete: "new-password", 45566 onChange: /*onConfirmPasswordChange*/ ctx[7], 45567 onFocus: /*onConfirmPasswordFocus*/ ctx[8], 45568 onBlur: /*onConfirmPasswordBlur*/ ctx[9] 45569 } 45570 }); 45571 45572 return { 45573 c() { 45574 create_component(passwordinput.$$.fragment); 45575 }, 45576 m(target, anchor) { 45577 mount_component(passwordinput, target, anchor); 45578 current = true; 45579 }, 45580 p(ctx, dirty) { 45581 const passwordinput_changes = {};
45582 if (dirty & /*disabled*/ 2048) passwordinput_changes.disabled = /*disabled*/ ctx[11]; 45583 if (dirty & /*confirmPassword*/ 8192) passwordinput_changes.password = /*confirmPassword*/ ctx[13]; 45584 if (dirty & /*config*/ 1) passwordinput_changes.label = /*config*/ ctx[0].confirm; 45585 if (dirty & /*config*/ 1) passwordinput_changes.hideLabel = /*config*/ ctx[0].hide; 45586 if (dirty & /*config*/ 1) passwordinput_changes.showLabel = /*config*/ ctx[0].show; 45587 if (dirty & /*config*/ 1) passwordinput_changes.placeholder = /*config*/ ctx[0].confirmPlaceholder; 45588 if (dirty & /*isPaymentForm*/ 8) passwordinput_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 45589 if (dirty & /*onConfirmPasswordChange*/ 128) passwordinput_changes.onChange = /*onConfirmPasswordChange*/ ctx[7]; 45590 if (dirty & /*onConfirmPasswordFocus*/ 256) passwordinput_changes.onFocus = /*onConfirmPasswordFocus*/ ctx[8]; 45591 if (dirty & /*onConfirmPasswordBlur*/ 512) passwordinput_changes.onBlur = /*onConfirmPasswordBlur*/ ctx[9]; 45592 passwordinput.$set(passwordinput_changes); 45593 }, 45594 i(local) { 45595 if (current) return; 45596 transition_in(passwordinput.$$.fragment, local); 45597 current = true; 45598 }, 45599 o(local) { 45600 transition_out(passwordinput.$$.fragment, local); 45601 current = false; 45602 }, 45603 d(detaching) { 45604 destroy_component(passwordinput, detaching); 45605 } 45606 }; 45607 } 45608 45609 // (75:0) {#if config.passwordsMatchIndicatorEnabled} 45610 function create_if_block_1$t(ctx) { 45611 let passwordmatchindicator; 45612 let current; 45613 45614 passwordmatchindicator = new PasswordMatchIndicator({ 45615 props: { 45616 password: /*password*/ ctx[12], 45617 confirmPassword: /*confirmPassword*/ ctx[13], 45618 passwordsMatchText: /*passwordValidationTexts*/ ctx[16].passwordsMatchText, 45619 isPaymentForm: /*isPaymentForm*/ ctx[3] 45620 } 45621 }); 45622 45623 return { 45624 c() { 45625 create_component(passwordmatchindicator.$$.fragment); 45626 }, 45627 m(target, anchor) { 45628 mount_component(passwordmatchindicator, target, anchor); 45629 current = true; 45630 }, 45631 p(ctx, dirty) { 45632 const passwordmatchindicator_changes = {}; 45633 if (dirty & /*password*/ 4096) passwordmatchindicator_changes.password = /*password*/ ctx[12]; 45634 if (dirty & /*confirmPassword*/ 8192) passwordmatchindicator_changes.confirmPassword = /*confirmPassword*/ ctx[13]; 45635 if (dirty & /*isPaymentForm*/ 8) passwordmatchindicator_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 45636 passwordmatchindicator.$set(passwordmatchindicator_changes); 45637 }, 45638 i(local) { 45639 if (current) return; 45640 transition_in(passwordmatchindicator.$$.fragment, local); 45641 current = true; 45642 }, 45643 o(local) { 45644 transition_out(passwordmatchindicator.$$.fragment, local); 45645 current = false; 45646 }, 45647 d(detaching) { 45648 destroy_component(passwordmatchindicator, detaching); 45649 } 45650 }; 45651 } 45652 45653 // (84:0) {#if error} 45654 function create_if_block$F(ctx) { 45655 let errormessage; 45656 let current; 45657 45658 errormessage = new ErrorMessage({ 45659 props: { 45660 error: /*error*/ ctx[15] ?? "", 45661 isPaymentForm: /*isPaymentForm*/ ctx[3] 45662 } 45663 }); 45664 45665 return { 45666 c() { 45667 create_component(errormessage.$$.fragment); 45668 }, 45669 m(target, anchor) { 45670 mount_component(errormessage, target, anchor); 45671 current = true; 45672 }, 45673 p(ctx, dirty) { 45674 const errormessage_changes = {}; 45675 if (dirty & /*error*/ 32768) errormessage_changes.error = /*error*/ ctx[15] ?? ""; 45676 if (dirty & /*isPaymentForm*/ 8) errormessage_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 45677 errormessage.$set(errormessage_changes); 45678 }, 45679 i(local) { 45680 if (current) return; 45681 transition_in(errormessage.$$.fragment, local); 45682 current = true; 45683 }, 45684 o(local) { 45685 transition_out(errormessage.$$.fragment, local); 45686 current = false; 45687 }, 45688 d(detaching) { 45689 destroy_component(errormessage, detaching); 45690 } 45691 }; 45692 } 45693 45694 function create_fragment$11(ctx) { 45695 let passwordinput; 45696 let t0; 45697 let t1; 45698 let t2; 45699 let t3; 45700 let if_block3_anchor; 45701 let current; 45702 45703 passwordinput = new PasswordInput({ 45704 props: { 45705 disabled: /*disabled*/ ctx[11], 45706 password: /*password*/ ctx[12], 45707 isMainPassword: true, 45708 label: /*config*/ ctx[0].password, 45709 hideLabel: /*config*/ ctx[0].hide, 45710 showLabel: /*config*/ ctx[0].show, 45711 placeholder: /*config*/ ctx[0].placeholder, 45712 isPaymentForm: /*isPaymentForm*/ ctx[3], 45713 autocomplete: /*hideConfirmPassword*/ ctx[2] 45714 ? "current-password" 45715 : "new-password", 45716 onChange: /*onPasswordChange*/ ctx[4], 45717 onFocus: /*onPasswordFocus*/ ctx[5], 45718 onBlur: /*onPasswordBlur*/ ctx[6] 45719 } 45720 }); 45721 45722 let if_block0 = /*config*/ ctx[0].passValidatorEnabled && create_if_block_3$d(ctx); 45723 let if_block1 = !/*hideConfirmPassword*/ ctx[2] && create_if_block_2$i(ctx); 45724 let if_block2 = /*config*/ ctx[0].passwordsMatchIndicatorEnabled && create_if_block_1$t(ctx); 45725 let if_block3 = /*error*/ ctx[15] && create_if_block$F(ctx); 45726 45727 return { 45728 c() { 45729 create_component(passwordinput.$$.fragment); 45730 t0 = space(); 45731 if (if_block0) if_block0.c(); 45732 t1 = space(); 45733 if (if_block1) if_block1.c(); 45734 t2 = space(); 45735 if (if_block2) if_block2.c(); 45736 t3 = space(); 45737 if (if_block3) if_block3.c();
45738 if_block3_anchor = empty(); 45739 }, 45740 m(target, anchor) { 45741 mount_component(passwordinput, target, anchor); 45742 insert(target, t0, anchor); 45743 if (if_block0) if_block0.m(target, anchor); 45744 insert(target, t1, anchor); 45745 if (if_block1) if_block1.m(target, anchor); 45746 insert(target, t2, anchor); 45747 if (if_block2) if_block2.m(target, anchor); 45748 insert(target, t3, anchor); 45749 if (if_block3) if_block3.m(target, anchor); 45750 insert(target, if_block3_anchor, anchor); 45751 current = true; 45752 }, 45753 p(ctx, [dirty]) { 45754 const passwordinput_changes = {}; 45755 if (dirty & /*disabled*/ 2048) passwordinput_changes.disabled = /*disabled*/ ctx[11]; 45756 if (dirty & /*password*/ 4096) passwordinput_changes.password = /*password*/ ctx[12]; 45757 if (dirty & /*config*/ 1) passwordinput_changes.label = /*config*/ ctx[0].password; 45758 if (dirty & /*config*/ 1) passwordinput_changes.hideLabel = /*config*/ ctx[0].hide; 45759 if (dirty & /*config*/ 1) passwordinput_changes.showLabel = /*config*/ ctx[0].show; 45760 if (dirty & /*config*/ 1) passwordinput_changes.placeholder = /*config*/ ctx[0].placeholder; 45761 if (dirty & /*isPaymentForm*/ 8) passwordinput_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 45762 45763 if (dirty & /*hideConfirmPassword*/ 4) passwordinput_changes.autocomplete = /*hideConfirmPassword*/ ctx[2] 45764 ? "current-password" 45765 : "new-password"; 45766 45767 if (dirty & /*onPasswordChange*/ 16) passwordinput_changes.onChange = /*onPasswordChange*/ ctx[4]; 45768 if (dirty & /*onPasswordFocus*/ 32) passwordinput_changes.onFocus = /*onPasswordFocus*/ ctx[5]; 45769 if (dirty & /*onPasswordBlur*/ 64) passwordinput_changes.onBlur = /*onPasswordBlur*/ ctx[6]; 45770 passwordinput.$set(passwordinput_changes); 45771 45772 if (/*config*/ ctx[0].passValidatorEnabled) { 45773 if (if_block0) { 45774 if_block0.p(ctx, dirty); 45775 45776 if (dirty & /*config*/ 1) { 45777 transition_in(if_block0, 1); 45778 } 45779 } else { 45780 if_block0 = create_if_block_3$d(ctx); 45781 if_block0.c(); 45782 transition_in(if_block0, 1); 45783 if_block0.m(t1.parentNode, t1); 45784 } 45785 } else if (if_block0) { 45786 group_outros(); 45787 45788 transition_out(if_block0, 1, 1, () => { 45789 if_block0 = null; 45790 }); 45791 45792 check_outros(); 45793 } 45794 45795 if (!/*hideConfirmPassword*/ ctx[2]) { 45796 if (if_block1) { 45797 if_block1.p(ctx, dirty); 45798 45799 if (dirty & /*hideConfirmPassword*/ 4) { 45800 transition_in(if_block1, 1); 45801 } 45802 } else { 45803 if_block1 = create_if_block_2$i(ctx); 45804 if_block1.c(); 45805 transition_in(if_block1, 1); 45806 if_block1.m(t2.parentNode, t2); 45807 } 45808 } else if (if_block1) { 45809 group_outros(); 45810 45811 transition_out(if_block1, 1, 1, () => { 45812 if_block1 = null; 45813 }); 45814 45815 check_outros(); 45816 } 45817 45818 if (/*config*/ ctx[0].passwordsMatchIndicatorEnabled) { 45819 if (if_block2) { 45820 if_block2.p(ctx, dirty); 45821 45822 if (dirty & /*config*/ 1) { 45823 transition_in(if_block2, 1); 45824 } 45825 } else { 45826 if_block2 = create_if_block_1$t(ctx); 45827 if_block2.c(); 45828 transition_in(if_block2, 1); 45829 if_block2.m(t3.parentNode, t3); 45830 } 45831 } else if (if_block2) { 45832 group_outros(); 45833 45834 transition_out(if_block2, 1, 1, () => { 45835 if_block2 = null; 45836 }); 45837 45838 check_outros(); 45839 } 45840 45841 if (/*error*/ ctx[15]) { 45842 if (if_block3) { 45843 if_block3.p(ctx, dirty); 45844 45845 if (dirty & /*error*/ 32768) { 45846 transition_in(if_block3, 1); 45847 } 45848 } else { 45849 if_block3 = create_if_block$F(ctx); 45850 if_block3.c(); 45851 transition_in(if_block3, 1); 45852 if_block3.m(if_block3_anchor.parentNode, if_block3_anchor); 45853 } 45854 } else if (if_block3) { 45855 group_outros(); 45856 45857 transition_out(if_block3, 1, 1, () => { 45858 if_block3 = null; 45859 }); 45860 45861 check_outros(); 45862 } 45863 }, 45864 i(local) { 45865 if (current) return; 45866 transition_in(passwordinput.$$.fragment, local); 45867 transition_in(if_block0); 45868 transition_in(if_block1); 45869 transition_in(if_block2); 45870 transition_in(if_block3); 45871 current = true; 45872 }, 45873 o(local) { 45874 transition_out(passwordinput.$$.fragment, local); 45875 transition_out(if_block0); 45876 transition_out(if_block1); 45877 transition_out(if_block2); 45878 transition_out(if_block3); 45879 current = false;
45880 }, 45881 d(detaching) { 45882 if (detaching) { 45883 detach(t0); 45884 detach(t1); 45885 detach(t2); 45886 detach(t3); 45887 detach(if_block3_anchor); 45888 } 45889 45890 destroy_component(passwordinput, detaching); 45891 if (if_block0) if_block0.d(detaching); 45892 if (if_block1) if_block1.d(detaching); 45893 if (if_block2) if_block2.d(detaching); 45894 if (if_block3) if_block3.d(detaching); 45895 } 45896 }; 45897 } 45898 45899 function instance$$($$self, $$props, $$invalidate) { 45900 let { config } = $$props; 45901 let { passwordRequirements } = $$props; 45902 let { hideConfirmPassword } = $$props; 45903 let { isPaymentForm = false } = $$props; 45904 let { onPasswordChange } = $$props; 45905 let { onPasswordFocus } = $$props; 45906 let { onPasswordBlur } = $$props; 45907 let { onConfirmPasswordChange } = $$props; 45908 let { onConfirmPasswordFocus } = $$props; 45909 let { onConfirmPasswordBlur } = $$props; 45910 let { onPasswordIsValidChange } = $$props; 45911 let { disabled } = $$props; 45912 let { password } = $$props; 45913 let { confirmPassword } = $$props; 45914 let { passwordIsValid } = $$props; 45915 let { error = null } = $$props; 45916 45917 let passwordValidationTexts = { 45918 minLengthValidationText: config.minLengthValidation || `Must include at least ${passwordRequirements.minLength} characters`, 45919 uppercaseValidationText: config.uppercaseValidation || 'Must include an uppercase letter', 45920 numberValidationText: config.numberValidation || 'Must include a number character', 45921 symbolValidationText: config.symbolValidation || 'Must include a supported symbol', 45922 passwordsMatchText: config.passwordsMatchText || 'Passwords match' 45923 }; 45924 45925 $$self.$$set = $$props => {
45926 if ('config' in $$props) $$invalidate(0, config = $$props.config); 45927 if ('passwordRequirements' in $$props) $$invalidate(1, passwordRequirements = $$props.passwordRequirements); 45928 if ('hideConfirmPassword' in $$props) $$invalidate(2, hideConfirmPassword = $$props.hideConfirmPassword); 45929 if ('isPaymentForm' in $$props) $$invalidate(3, isPaymentForm = $$props.isPaymentForm); 45930 if ('onPasswordChange' in $$props) $$invalidate(4, onPasswordChange = $$props.onPasswordChange); 45931 if ('onPasswordFocus' in $$props) $$invalidate(5, onPasswordFocus = $$props.onPasswordFocus); 45932 if ('onPasswordBlur' in $$props) $$invalidate(6, onPasswordBlur = $$props.onPasswordBlur); 45933 if ('onConfirmPasswordChange' in $$props) $$invalidate(7, onConfirmPasswordChange = $$props.onConfirmPasswordChange); 45934 if ('onConfirmPasswordFocus' in $$props) $$invalidate(8, onConfirmPasswordFocus = $$props.onConfirmPasswordFocus); 45935 if ('onConfirmPasswordBlur' in $$props) $$invalidate(9, onConfirmPasswordBlur = $$props.onConfirmPasswordBlur);
45936 if ('onPasswordIsValidChange' in $$props) $$invalidate(10, onPasswordIsValidChange = $$props.onPasswordIsValidChange); 45937 if ('disabled' in $$props) $$invalidate(11, disabled = $$props.disabled); 45938 if ('password' in $$props) $$invalidate(12, password = $$props.password); 45939 if ('confirmPassword' in $$props) $$invalidate(13, confirmPassword = $$props.confirmPassword); 45940 if ('passwordIsValid' in $$props) $$invalidate(14, passwordIsValid = $$props.passwordIsValid); 45941 if ('error' in $$props) $$invalidate(15, error = $$props.error); 45942 }; 45943 45944 return [ 45945 config, 45946 passwordRequirements, 45947 hideConfirmPassword, 45948 isPaymentForm, 45949 onPasswordChange, 45950 onPasswordFocus, 45951 onPasswordBlur, 45952 onConfirmPasswordChange, 45953 onConfirmPasswordFocus, 45954 onConfirmPasswordBlur, 45955 onPasswordIsValidChange, 45956 disabled, 45957 password, 45958 confirmPassword, 45959 passwordIsValid, 45960 error, 45961 passwordValidationTexts 45962 ]; 45963 } 45964 45965 class CreatePassword extends SvelteComponent { 45966 constructor(options) { 45967 super(); 45968 45969 init(this, options, instance$$, create_fragment$11, safe_not_equal, { 45970 config: 0, 45971 passwordRequirements: 1, 45972 hideConfirmPassword: 2, 45973 isPaymentForm: 3, 45974 onPasswordChange: 4, 45975 onPasswordFocus: 5, 45976 onPasswordBlur: 6, 45977 onConfirmPasswordChange: 7, 45978 onConfirmPasswordFocus: 8, 45979 onConfirmPasswordBlur: 9, 45980 onPasswordIsValidChange: 10, 45981 disabled: 11, 45982 password: 12, 45983 confirmPassword: 13, 45984 passwordIsValid: 14, 45985 error: 15 45986 }); 45987 } 45988 } 45989 45990 const factory$s = { 45991 matches: (sectionElement) => sectionElement.type === elementTypes.PASSWORD && sectionElement.config?.confirm != null, 45992 create: (form, formState, formActions, elementConfig) => ({ 45993 component: CreatePassword, 45994 props: { 45995 disabled: formState.isBusy, 45996 config: elementConfig, 45997 passwordRequirements: form.organisationConfiguration.passwordStrengthRequirements, 45998 hideConfirmPassword: form.organisationConfiguration.hideConfirmPasswordOnRegForm, 45999 isPaymentForm: form.formType === FormType.PAYMENT, 46000 onPasswordChange: (value) => { 46001 formActions.updateFormState({ 46002 createPassword: value 46003 }); 46004 logDataLayerEvent(form, 'zephr_form_input_change', { 46005 inputName: 'zephr-form-password', 46006 sectionId: formState.currentSection.type, 46007 field: 'create-password' 46008 }); 46009 }, 46010 onPasswordFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 46011 inputName: 'zephr-form-password', 46012 sectionId: formState.currentSection.type, 46013 field: 'create-password' 46014 }), 46015 onPasswordBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 46016 inputName: 'zephr-form-password', 46017 sectionId: formState.currentSection.type, 46018 field: 'create-password' 46019 }), 46020 onConfirmPasswordChange: (value) => { 46021 formActions.updateFormState({ 46022 confirmCreatePassword: value 46023 }); 46024 logDataLayerEvent(form, 'zephr_form_input_change', { 46025 inputName: 'zephr-form-confirm-password', 46026 sectionId: formState.currentSection.type, 46027 field: 'confirm-password' 46028 }); 46029 }, 46030 onConfirmPasswordFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 46031 inputName: 'zephr-form-confirm-password', 46032 sectionId: formState.currentSection.type, 46033 field: 'confirm-password' 46034 }), 46035 onConfirmPasswordBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 46036 inputName: 'zephr-form-confirm-password', 46037 sectionId: formState.currentSection.type, 46038 field: 'confirm-password' 46039 }), 46040 onPasswordIsValidChange: (value) => formActions.updateFormState({ 46041 passwordIsValid: value 46042 }), 46043 password: formState.createPassword, 46044 confirmPassword: formState.confirmCreatePassword, 46045 passwordIsValid: formState.passwordIsValid 46046 }, 46047 isValid: formState.password != null 46048 && (!elementConfig.passValidatorEnabled || formState.passwordIsValid) && (form.organisationConfiguration.hideConfirmPasswordOnRegForm || 46049 formState.createPassword === formState.confirmCreatePassword), 46050 }) 46051 }; 46052 46053 // TODO 46054 const isValid = (password) => password != null && password.length > 2; 46055 const factory$r = { 46056 matches: (sectionElement) => sectionElement.type === elementTypes.PASSWORD && sectionElement.config?.confirm == null, 46057 create: (form, formState, formActions, elementConfig) => { 46058 const stateKey = elementConfig.isUpdatePasswordCurrentPassword ? 'currentPassword' : 'password'; 46059 return { 46060 component: PasswordInput, 46061 props: { 46062 disabled: formState.isBusy, 46063 label: elementConfig.password, 46064 placeholder: elementConfig.placeholder, 46065 isMainPassword: true, 46066 showLabel: elementConfig.showLabel, 46067 hideLabel: elementConfig.hideLabel, 46068 password: formState[stateKey], 46069 autocomplete: 'password', 46070 onChange: (value) => { 46071 formActions.updateFormState({ [stateKey]: value }); 46072 logDataLayerEvent(form, 'zephr_form_input_change', { 46073 inputName: 'zephr-form-password', 46074 sectionId: formState.currentSection.type, 46075 field: 'password' 46076 }); 46077 }, 46078 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 46079 inputName: 'zephr-form-password', 46080 sectionId: formState.currentSection.type, 46081 field: 'password' 46082 }), 46083 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 46084 inputName: 'zephr-form-password', 46085 sectionId: formState.currentSection.type, 46086 field: 'password' 46087 }), 46088 }, 46089 isValid: isValid(formState[stateKey]) 46090 }; 46091 } 46092 }; 46093 46094 /* src/components/elements/payment/braintree/BraintreeMobilePayment.svelte generated by Svelte v4.2.12 */ 46095 46096 function create_fragment$10(ctx) { 46097 let script0; 46098 let script0_src_value; 46099 let script1; 46100 let script1_src_value; 46101 let script2; 46102 let script2_src_value; 46103 let script3; 46104 let script3_src_value; 46105 let t0; 46106 let div0; 46107 let t1; 46108 let div1; 46109 46110 return { 46111 c() { 46112 script0 = element("script"); 46113 script0.innerHTML = ``; 46114 script1 = element("script"); 46115 script1.innerHTML = ``; 46116 script2 = element("script"); 46117 script2.innerHTML = ``; 46118 script3 = element("script"); 46119 script3.innerHTML = ``; 46120 t0 = space(); 46121 div0 = element("div"); 46122 t1 = space(); 46123 div1 = element("div"); 46124 div1.innerHTML = ``; 46125 if (!src_url_equal(script0.src, script0_src_value = "https://js.braintreegateway.com/web/3.85.3/js/google-payment.min.js")) attr(script0, "src", script0_src_value); 46126 if (!src_url_equal(script1.src, script1_src_value = "https://pay.google.com/gp/p/js/pay.js")) attr(script1, "src", script1_src_value); 46127 attr(script1, "onload", "window.googlePayLoadBraintreeCallback()"); 46128 if (!src_url_equal(script2.src, script2_src_value = "https://js.braintreegateway.com/web/3.85.3/js/client.min.js")) attr(script2, "src", script2_src_value); 46129 attr(script2, "onload", "window.braintreeLoadCallback()"); 46130 if (!src_url_equal(script3.src, script3_src_value = "https://js.braintreegateway.com/web/3.85.3/js/apple-pay.min.js")) attr(script3, "src", script3_src_value); 46131 attr(script3, "onload", "window.applePayLoadBraintreeCallback()"); 46132 attr(div0, "id", "google-pay-button"); 46133 attr(div0, "class", "svelte-1drqjgk"); 46134 toggle_class(div0, "zephr-form-disabled-div", /*isDisabled*/ ctx[0]); 46135 toggle_class(div0, "zephr-payment-form-disabled-div", /*isDisabled*/ ctx[0]); 46136 attr(div1, "id", "apple_pay_button"); 46137 }, 46138 m(target, anchor) { 46139 append(document.head, script0); 46140 append(document.head, script1); 46141 append(document.head, script2); 46142 append(document.head, script3); 46143 insert(target, t0, anchor); 46144 insert(target, div0, anchor); 46145 insert(target, t1, anchor); 46146 insert(target, div1, anchor); 46147 }, 46148 p(ctx, [dirty]) {
46149 if (dirty & /*isDisabled*/ 1) { 46150 toggle_class(div0, "zephr-form-disabled-div", /*isDisabled*/ ctx[0]); 46151 } 46152 46153 if (dirty & /*isDisabled*/ 1) { 46154 toggle_class(div0, "zephr-payment-form-disabled-div", /*isDisabled*/ ctx[0]); 46155 } 46156 }, 46157 i: noop, 46158 o: noop, 46159 d(detaching) { 46160 if (detaching) { 46161 detach(t0); 46162 detach(div0); 46163 detach(t1); 46164 detach(div1); 46165 } 46166 46167 detach(script0); 46168 detach(script1); 46169 detach(script2); 46170 detach(script3); 46171 } 46172 }; 46173 } 46174 46175 function instance$_($$self, $$props, $$invalidate) { 46176 let { onMountCallback } = $$props; 46177 let { isDisabled } = $$props; 46178 let { disableCoreDependencyHeader } = $$props; 46179 onMount(onMountCallback); 46180 46181 $$self.$$set = $$props => { 46182 if ('onMountCallback' in $$props) $$invalidate(1, onMountCallback = $$props.onMountCallback); 46183 if ('isDisabled' in $$props) $$invalidate(0, isDisabled = $$props.isDisabled); 46184 if ('disableCoreDependencyHeader' in $$props) $$invalidate(2, disableCoreDependencyHeader = $$props.disableCoreDependencyHeader); 46185 }; 46186 46187 return [isDisabled, onMountCallback, disableCoreDependencyHeader]; 46188 } 46189 46190 class BraintreeMobilePayment extends SvelteComponent { 46191 constructor(options) { 46192 super(); 46193 46194 init(this, options, instance$_, create_fragment$10, safe_not_equal, { 46195 onMountCallback: 1, 46196 isDisabled: 0, 46197 disableCoreDependencyHeader: 2 46198 }); 46199 } 46200 } 46201 46202 /* src/components/elements/payment/braintree/BraintreePayment.svelte generated by Svelte v4.2.12 */ 46203 46204 function create_fragment$$(ctx) { 46205 let script; 46206 let script_src_value; 46207 let t0; 46208 let div; 46209 let t1; 46210 let errormessage; 46211 let current; 46212 46213 errormessage = new ErrorMessage({ 46214 props: { 46215 error: /*providerError*/ ctx[0]?.message ?? /*error*/ ctx[2] ?? "", 46216 isPaymentForm: true 46217 } 46218 }); 46219 46220 return { 46221 c() { 46222 script = element("script"); 46223 script.innerHTML = ``; 46224 t0 = space(); 46225 div = element("div"); 46226 t1 = space(); 46227 create_component(errormessage.$$.fragment); 46228 if (!src_url_equal(script.src, script_src_value = "https://js.braintreegateway.com/web/dropin/1.33.2/js/dropin.min.js")) attr(script, "src", script_src_value); 46229 attr(script, "onload", "window.braintreeLoadCallback()"); 46230 attr(div, "id", "braintree-dropin-container"); 46231 attr(div, "class", "svelte-w52z2j"); 46232 toggle_class(div, "zephr-form-disabled-div", /*isDisabled*/ ctx[1]); 46233 toggle_class(div, "zephr-payment-form-disabled-div", /*isDisabled*/ ctx[1]); 46234 }, 46235 m(target, anchor) { 46236 append(document.head, script); 46237 insert(target, t0, anchor); 46238 insert(target, div, anchor); 46239 insert(target, t1, anchor); 46240 mount_component(errormessage, target, anchor); 46241 current = true; 46242 }, 46243 p(ctx, [dirty]) { 46244 if (!current || dirty & /*isDisabled*/ 2) { 46245 toggle_class(div, "zephr-form-disabled-div", /*isDisabled*/ ctx[1]); 46246 } 46247 46248 if (!current || dirty & /*isDisabled*/ 2) { 46249 toggle_class(div, "zephr-payment-form-disabled-div", /*isDisabled*/ ctx[1]); 46250 } 46251 46252 const errormessage_changes = {}; 46253 if (dirty & /*providerError, error*/ 5) errormessage_changes.error = /*providerError*/ ctx[0]?.message ?? /*error*/ ctx[2] ?? ""; 46254 errormessage.$set(errormessage_changes); 46255 }, 46256 i(local) { 46257 if (current) return; 46258 transition_in(errormessage.$$.fragment, local); 46259 current = true; 46260 }, 46261 o(local) { 46262 transition_out(errormessage.$$.fragment, local); 46263 current = false; 46264 }, 46265 d(detaching) { 46266 if (detaching) { 46267 detach(t0); 46268 detach(div); 46269 detach(t1); 46270 } 46271 46272 detach(script); 46273 destroy_component(errormessage, detaching); 46274 } 46275 }; 46276 } 46277 46278 function instance$Z($$self, $$props, $$invalidate) { 46279 let { onMountCallback } = $$props; 46280 let { providerError } = $$props; 46281 let { isDisabled } = $$props; 46282 let { isLoaded } = $$props; 46283 let { error = null } = $$props; 46284 onMount(onMountCallback); 46285 46286 $$self.$$set = $$props => {
46287 if ('onMountCallback' in $$props) $$invalidate(3, onMountCallback = $$props.onMountCallback); 46288 if ('providerError' in $$props) $$invalidate(0, providerError = $$props.providerError); 46289 if ('isDisabled' in $$props) $$invalidate(1, isDisabled = $$props.isDisabled); 46290 if ('isLoaded' in $$props) $$invalidate(4, isLoaded = $$props.isLoaded); 46291 if ('error' in $$props) $$invalidate(2, error = $$props.error); 46292 }; 46293 46294 return [providerError, isDisabled, error, onMountCallback, isLoaded]; 46295 } 46296 46297 class BraintreePayment extends SvelteComponent { 46298 constructor(options) { 46299 super(); 46300 46301 init(this, options, instance$Z, create_fragment$$, safe_not_equal, { 46302 onMountCallback: 3, 46303 providerError: 0, 46304 isDisabled: 1, 46305 isLoaded: 4, 46306 error: 2 46307 }); 46308 } 46309 } 46310 46311 /* src/components/elements/payment/stripe/StripePayment.svelte generated by Svelte v4.2.12 */ 46312 46313 function create_fragment$_(ctx) { 46314 let script; 46315 let script_src_value; 46316 let t0; 46317 let div; 46318 let t1; 46319 let errormessage; 46320 let current; 46321 46322 errormessage = new ErrorMessage({ 46323 props: { 46324 error: /*providerError*/ ctx[0]?.message ?? (/*isComplete*/ ctx[2] ? /*error*/ ctx[3] : "") ?? "", 46325 isPaymentForm: true 46326 } 46327 }); 46328 46329 return { 46330 c() { 46331 script = element("script"); 46332 script.innerHTML = ``; 46333 t0 = space(); 46334 div = element("div"); 46335 t1 = space(); 46336 create_component(errormessage.$$.fragment); 46337 if (!src_url_equal(script.src, script_src_value = "https://js.stripe.com/v3/")) attr(script, "src", script_src_value); 46338 attr(script, "onload", "window.stripeLoadCallback()"); 46339 attr(div, "id", /*id*/ ctx[4]); 46340 attr(div, "class", "stripe-element svelte-1bi6tmz"); 46341 toggle_class(div, "zephr-form-disabled-div", /*isDisabled*/ ctx[1]); 46342 toggle_class(div, "zephr-payment-form-disabled-div", /*isDisabled*/ ctx[1]); 46343 }, 46344 m(target, anchor) { 46345 append(document.head, script); 46346 insert(target, t0, anchor); 46347 insert(target, div, anchor); 46348 insert(target, t1, anchor); 46349 mount_component(errormessage, target, anchor); 46350 current = true; 46351 }, 46352 p(ctx, [dirty]) { 46353 if (!current || dirty & /*isDisabled*/ 2) { 46354 toggle_class(div, "zephr-form-disabled-div", /*isDisabled*/ ctx[1]); 46355 } 46356 46357 if (!current || dirty & /*isDisabled*/ 2) { 46358 toggle_class(div, "zephr-payment-form-disabled-div", /*isDisabled*/ ctx[1]); 46359 } 46360 46361 const errormessage_changes = {}; 46362 if (dirty & /*providerError, isComplete, error*/ 13) errormessage_changes.error = /*providerError*/ ctx[0]?.message ?? (/*isComplete*/ ctx[2] ? /*error*/ ctx[3] : "") ?? ""; 46363 errormessage.$set(errormessage_changes); 46364 }, 46365 i(local) { 46366 if (current) return; 46367 transition_in(errormessage.$$.fragment, local); 46368 current = true; 46369 }, 46370 o(local) { 46371 transition_out(errormessage.$$.fragment, local); 46372 current = false; 46373 }, 46374 d(detaching) { 46375 if (detaching) { 46376 detach(t0); 46377 detach(div); 46378 detach(t1); 46379 } 46380 46381 detach(script); 46382 destroy_component(errormessage, detaching); 46383 } 46384 }; 46385 } 46386 46387 function instance$Y($$self, $$props, $$invalidate) { 46388 let { onMountCallback } = $$props; 46389 let { providerError } = $$props; 46390 let { isDisabled } = $$props; 46391 let { isComplete } = $$props; 46392 let { isLoaded } = $$props; 46393 let { error = null } = $$props; 46394 let { formKey } = $$props; 46395 const id = `stripe-element-${formKey}`; 46396 onMount(onMountCallback); 46397 46398 $$self.$$set = $$props => {
46399 if ('onMountCallback' in $$props) $$invalidate(5, onMountCallback = $$props.onMountCallback); 46400 if ('providerError' in $$props) $$invalidate(0, providerError = $$props.providerError); 46401 if ('isDisabled' in $$props) $$invalidate(1, isDisabled = $$props.isDisabled); 46402 if ('isComplete' in $$props) $$invalidate(2, isComplete = $$props.isComplete); 46403 if ('isLoaded' in $$props) $$invalidate(6, isLoaded = $$props.isLoaded); 46404 if ('error' in $$props) $$invalidate(3, error = $$props.error); 46405 if ('formKey' in $$props) $$invalidate(7, formKey = $$props.formKey); 46406 }; 46407 46408 return [ 46409 providerError, 46410 isDisabled, 46411 isComplete, 46412 error, 46413 id, 46414 onMountCallback, 46415 isLoaded, 46416 formKey 46417 ]; 46418 } 46419 46420 class StripePayment extends SvelteComponent { 46421 constructor(options) { 46422 super(); 46423 46424 init(this, options, instance$Y, create_fragment$_, safe_not_equal, { 46425 onMountCallback: 5, 46426 providerError: 0, 46427 isDisabled: 1, 46428 isComplete: 2, 46429 isLoaded: 6, 46430 error: 3, 46431 formKey: 7 46432 }); 46433 } 46434 } 46435 46436 /* src/components/elements/payment/stripe/StripeMobilePayment.svelte generated by Svelte v4.2.12 */ 46437 46438 function create_if_block$E(ctx) { 46439 let script; 46440 let script_src_value; 46441 46442 return { 46443 c() { 46444 script = element("script"); 46445 script.innerHTML = ``; 46446 if (!src_url_equal(script.src, script_src_value = "https://js.stripe.com/v3/")) attr(script, "src", script_src_value); 46447 attr(script, "onload", "window.stripeLoadCallback()"); 46448 }, 46449 m(target, anchor) {
46450 insert(target, script, anchor); 46451 }, 46452 d(detaching) { 46453 if (detaching) { 46454 detach(script); 46455 } 46456 } 46457 }; 46458 } 46459 46460 function create_fragment$Z(ctx) { 46461 let script; 46462 let script_src_value; 46463 let if_block_anchor; 46464 let t; 46465 let div; 46466 let if_block = !/*disableCoreDependencyHeader*/ ctx[1] && create_if_block$E(); 46467 46468 return { 46469 c() { 46470 script = element("script"); 46471 script.innerHTML = ``; 46472 if (if_block) if_block.c(); 46473 if_block_anchor = empty(); 46474 t = space(); 46475 div = element("div"); 46476 if (!src_url_equal(script.src, script_src_value = "https://pay.google.com/gp/p/js/pay.js")) attr(script, "src", script_src_value); 46477 attr(script, "onload", "window.googlePayLoadStripeCallback()"); 46478 attr(div, "id", "stripe-mobile-pay-button"); 46479 attr(div, "class", "svelte-12ehv8b"); 46480 toggle_class(div, "zephr-form-disabled-div", /*isDisabled*/ ctx[0]); 46481 toggle_class(div, "zephr-payment-form-disabled-div", /*isDisabled*/ ctx[0]); 46482 }, 46483 m(target, anchor) { 46484 append(document.head, script); 46485 if (if_block) if_block.m(document.head, null); 46486 append(document.head, if_block_anchor); 46487 insert(target, t, anchor); 46488 insert(target, div, anchor); 46489 }, 46490 p(ctx, [dirty]) { 46491 if (!/*disableCoreDependencyHeader*/ ctx[1]) { 46492 if (if_block) ; else { 46493 if_block = create_if_block$E(); 46494 if_block.c(); 46495 if_block.m(if_block_anchor.parentNode, if_block_anchor); 46496 } 46497 } else if (if_block) { 46498 if_block.d(1); 46499 if_block = null; 46500 } 46501 46502 if (dirty & /*isDisabled*/ 1) { 46503 toggle_class(div, "zephr-form-disabled-div", /*isDisabled*/ ctx[0]); 46504 } 46505 46506 if (dirty & /*isDisabled*/ 1) { 46507 toggle_class(div, "zephr-payment-form-disabled-div", /*isDisabled*/ ctx[0]); 46508 } 46509 }, 46510 i: noop, 46511 o: noop, 46512 d(detaching) { 46513 if (detaching) { 46514 detach(t); 46515 detach(div); 46516 } 46517 46518 detach(script); 46519 if (if_block) if_block.d(detaching); 46520 detach(if_block_anchor); 46521 } 46522 }; 46523 } 46524 46525 function instance$X($$self, $$props, $$invalidate) { 46526 let { onMountCallback } = $$props; 46527 let { isDisabled } = $$props; 46528 let { disableCoreDependencyHeader } = $$props; 46529 onMount(onMountCallback); 46530 46531 $$self.$$set = $$props => {
46532 if ('onMountCallback' in $$props) $$invalidate(2, onMountCallback = $$props.onMountCallback); 46533 if ('isDisabled' in $$props) $$invalidate(0, isDisabled = $$props.isDisabled); 46534 if ('disableCoreDependencyHeader' in $$props) $$invalidate(1, disableCoreDependencyHeader = $$props.disableCoreDependencyHeader); 46535 }; 46536 46537 return [isDisabled, disableCoreDependencyHeader, onMountCallback]; 46538 } 46539 46540 class StripeMobilePayment extends SvelteComponent { 46541 constructor(options) { 46542 super(); 46543 46544 init(this, options, instance$X, create_fragment$Z, safe_not_equal, { 46545 onMountCallback: 2, 46546 isDisabled: 0, 46547 disableCoreDependencyHeader: 1 46548 }); 46549 } 46550 } 46551 46552 /* src/components/elements/Spinner.svelte generated by Svelte v4.2.12 */ 46553 46554 function create_fragment$Y(ctx) { 46555 let div; 46556 let fa; 46557 let current; 46558 46559 fa = new Fa({ 46560 props: { size: "2x", icon: faSpinner, spin: true } 46561 }); 46562 46563 return { 46564 c() { 46565 div = element("div"); 46566 create_component(fa.$$.fragment); 46567 attr(div, "class", "spinner-container svelte-1c5ov4v"); 46568 }, 46569 m(target, anchor) { 46570 insert(target, div, anchor); 46571 mount_component(fa, div, null); 46572 current = true; 46573 }, 46574 p: noop, 46575 i(local) { 46576 if (current) return; 46577 transition_in(fa.$$.fragment, local); 46578 current = true; 46579 }, 46580 o(local) { 46581 transition_out(fa.$$.fragment, local); 46582 current = false; 46583 }, 46584 d(detaching) { 46585 if (detaching) { 46586 detach(div); 46587 } 46588 46589 destroy_component(fa); 46590 } 46591 }; 46592 } 46593 46594 class Spinner extends SvelteComponent { 46595 constructor(options) { 46596 super(); 46597 init(this, options, null, create_fragment$Y, safe_not_equal, {}); 46598 } 46599 } 46600 46601 /* src/components/elements/payment/zuora/ZuoraPayment.svelte generated by Svelte v4.2.12 */ 46602 46603 function create_if_block_1$s(ctx) { 46604 let spinner; 46605 let current; 46606 spinner = new Spinner({}); 46607 46608 return { 46609 c() { 46610 create_component(spinner.$$.fragment); 46611 }, 46612 m(target, anchor) { 46613 mount_component(spinner, target, anchor); 46614 current = true; 46615 }, 46616 i(local) { 46617 if (current) return; 46618 transition_in(spinner.$$.fragment, local); 46619 current = true; 46620 }, 46621 o(local) { 46622 transition_out(spinner.$$.fragment, local); 46623 current = false; 46624 }, 46625 d(detaching) { 46626 destroy_component(spinner, detaching); 46627 } 46628 }; 46629 } 46630 46631 // (19:4) {#if isBusy} 46632 function create_if_block$D(ctx) { 46633 let div; 46634 let spinner; 46635 let current; 46636 spinner = new Spinner({}); 46637 46638 return { 46639 c() { 46640 div = element("div"); 46641 create_component(spinner.$$.fragment); 46642 attr(div, "class", "spinner-overlay svelte-1vnsk3p"); 46643 }, 46644 m(target, anchor) { 46645 insert(target, div, anchor); 46646 mount_component(spinner, div, null); 46647 current = true; 46648 }, 46649 i(local) { 46650 if (current) return; 46651 transition_in(spinner.$$.fragment, local); 46652 current = true; 46653 }, 46654 o(local) { 46655 transition_out(spinner.$$.fragment, local); 46656 current = false; 46657 }, 46658 d(detaching) { 46659 if (detaching) { 46660 detach(div); 46661 } 46662 46663 destroy_component(spinner); 46664 } 46665 }; 46666 } 46667 46668 function create_fragment$X(ctx) { 46669 let t0; 46670 let div1; 46671 let t1; 46672 let div0; 46673 let div0_class_value; 46674 let div1_class_value; 46675 let t2; 46676 let div2; 46677 let t3; 46678 let errormessage; 46679 let current; 46680 let if_block0 = !/*isLoaded*/ ctx[2] && create_if_block_1$s(); 46681 let if_block1 = /*isBusy*/ ctx[3] && create_if_block$D(); 46682 46683 errormessage = new ErrorMessage({ 46684 props: { 46685 error: /*providerError*/ ctx[1]?.message ?? /*error*/ ctx[4] ?? "", 46686 isPaymentForm: true 46687 } 46688 }); 46689 46690 return { 46691 c() { 46692 if (if_block0) if_block0.c(); 46693 t0 = space(); 46694 div1 = element("div"); 46695 if (if_block1) if_block1.c(); 46696 t1 = space(); 46697 div0 = element("div"); 46698 t2 = space(); 46699 div2 = element("div"); 46700 t3 = space(); 46701 create_component(errormessage.$$.fragment); 46702 attr(div0, "id", "zuora_payment"); 46703 46704 attr(div0, "class", div0_class_value = "" + (null_to_empty(/*isDisabled*/ ctx[0] 46705 ? "zuora-disabled-iframe-container zuora-dynamic-form-disabled" 46706 : "") + " svelte-1vnsk3p")); 46707 46708 attr(div1, "class", div1_class_value = "" + (null_to_empty(/*isBusy*/ ctx[3] 46709 ? "zuora-dynamic-form-disabled form-wrapper" 46710 : "form-wrapper") + " svelte-1vnsk3p")); 46711 46712 attr(div2, "id", "core-style"); 46713 }, 46714 m(target, anchor) { 46715 if (if_block0) if_block0.m(target, anchor); 46716 insert(target, t0, anchor); 46717 insert(target, div1, anchor); 46718 if (if_block1) if_block1.m(div1, null); 46719 append(div1, t1); 46720 append(div1, div0); 46721 insert(target, t2, anchor); 46722 insert(target, div2, anchor);
46723 insert(target, t3, anchor); 46724 mount_component(errormessage, target, anchor); 46725 current = true; 46726 }, 46727 p(ctx, [dirty]) { 46728 if (!/*isLoaded*/ ctx[2]) { 46729 if (if_block0) { 46730 if (dirty & /*isLoaded*/ 4) { 46731 transition_in(if_block0, 1); 46732 } 46733 } else { 46734 if_block0 = create_if_block_1$s(); 46735 if_block0.c(); 46736 transition_in(if_block0, 1); 46737 if_block0.m(t0.parentNode, t0); 46738 } 46739 } else if (if_block0) { 46740 group_outros(); 46741 46742 transition_out(if_block0, 1, 1, () => { 46743 if_block0 = null; 46744 }); 46745 46746 check_outros(); 46747 } 46748 46749 if (/*isBusy*/ ctx[3]) { 46750 if (if_block1) { 46751 if (dirty & /*isBusy*/ 8) { 46752 transition_in(if_block1, 1); 46753 } 46754 } else { 46755 if_block1 = create_if_block$D(); 46756 if_block1.c(); 46757 transition_in(if_block1, 1); 46758 if_block1.m(div1, t1); 46759 } 46760 } else if (if_block1) { 46761 group_outros(); 46762 46763 transition_out(if_block1, 1, 1, () => { 46764 if_block1 = null; 46765 }); 46766 46767 check_outros(); 46768 } 46769 46770 if (!current || dirty & /*isDisabled*/ 1 && div0_class_value !== (div0_class_value = "" + (null_to_empty(/*isDisabled*/ ctx[0] 46771 ? "zuora-disabled-iframe-container zuora-dynamic-form-disabled" 46772 : "") + " svelte-1vnsk3p"))) { 46773 attr(div0, "class", div0_class_value); 46774 } 46775 46776 if (!current || dirty & /*isBusy*/ 8 && div1_class_value !== (div1_class_value = "" + (null_to_empty(/*isBusy*/ ctx[3] 46777 ? "zuora-dynamic-form-disabled form-wrapper" 46778 : "form-wrapper") + " svelte-1vnsk3p"))) { 46779 attr(div1, "class", div1_class_value); 46780 } 46781 46782 const errormessage_changes = {}; 46783 if (dirty & /*providerError, error*/ 18) errormessage_changes.error = /*providerError*/ ctx[1]?.message ?? /*error*/ ctx[4] ?? ""; 46784 errormessage.$set(errormessage_changes); 46785 }, 46786 i(local) { 46787 if (current) return; 46788 transition_in(if_block0); 46789 transition_in(if_block1); 46790 transition_in(errormessage.$$.fragment, local); 46791 current = true; 46792 }, 46793 o(local) { 46794 transition_out(if_block0); 46795 transition_out(if_block1); 46796 transition_out(errormessage.$$.fragment, local); 46797 current = false; 46798 }, 46799 d(detaching) { 46800 if (detaching) { 46801 detach(t0); 46802 detach(div1); 46803 detach(t2); 46804 detach(div2); 46805 detach(t3); 46806 } 46807 46808 if (if_block0) if_block0.d(detaching); 46809 if (if_block1) if_block1.d(); 46810 destroy_component(errormessage, detaching); 46811 } 46812 }; 46813 } 46814 46815 function instance$W($$self, $$props, $$invalidate) { 46816 let { onMountCallback } = $$props; 46817 let { isDisabled } = $$props; 46818 let { providerError } = $$props; 46819 let { isLoaded } = $$props; 46820 let { isBusy } = $$props; 46821 let { error = null } = $$props; 46822 onMount(onMountCallback); 46823 46824 $$self.$$set = $$props => {
46825 if ('onMountCallback' in $$props) $$invalidate(5, onMountCallback = $$props.onMountCallback); 46826 if ('isDisabled' in $$props) $$invalidate(0, isDisabled = $$props.isDisabled); 46827 if ('providerError' in $$props) $$invalidate(1, providerError = $$props.providerError); 46828 if ('isLoaded' in $$props) $$invalidate(2, isLoaded = $$props.isLoaded); 46829 if ('isBusy' in $$props) $$invalidate(3, isBusy = $$props.isBusy); 46830 if ('error' in $$props) $$invalidate(4, error = $$props.error); 46831 }; 46832 46833 return [isDisabled, providerError, isLoaded, isBusy, error, onMountCallback]; 46834 } 46835 46836 class ZuoraPayment extends SvelteComponent { 46837 constructor(options) { 46838 super(); 46839 46840 init(this, options, instance$W, create_fragment$X, safe_not_equal, { 46841 onMountCallback: 5, 46842 isDisabled: 0, 46843 providerError: 1, 46844 isLoaded: 2, 46845 isBusy: 3, 46846 error: 4 46847 }); 46848 } 46849 } 46850 46851 /* src/components/elements/payment/zuora/ZuoraPreLoader.svelte generated by Svelte v4.2.12 */ 46852 46853 function create_fragment$W(ctx) { 46854 let script; 46855 let script_src_value; 46856 46857 return { 46858 c() { 46859 script = element("script"); 46860 script.innerHTML = ``; 46861 attr(script, "type", "text/javascript"); 46862 if (!src_url_equal(script.src, script_src_value = "https://static.zuora.com/Resources/libs/hosted/1.3.1/zuora-min.js")) attr(script, "src", script_src_value); 46863 attr(script, "onload", "window.zuoraLoadCallback()"); 46864 }, 46865 m(target, anchor) { 46866 append(document.head, script); 46867 }, 46868 p: noop, 46869 i: noop, 46870 o: noop, 46871 d(detaching) { 46872 detach(script); 46873 } 46874 }; 46875 } 46876 46877 function instance$V($$self, $$props, $$invalidate) { 46878 let { onMountCallback } = $$props; 46879 onMount(onMountCallback); 46880 46881 $$self.$$set = $$props => {
46882 if ('onMountCallback' in $$props) $$invalidate(0, onMountCallback = $$props.onMountCallback); 46883 }; 46884 46885 return [onMountCallback]; 46886 } 46887 46888 class ZuoraPreLoader extends SvelteComponent { 46889 constructor(options) { 46890 super(); 46891 init(this, options, instance$V, create_fragment$W, safe_not_equal, { onMountCallback: 0 }); 46892 } 46893 } 46894 46895 const paymentProviders = { 46896 BRAINTREE: 'braintree', 46897 STRIPE: 'stripe', 46898 ZUORA: 'zuora-billing', 46899 }; 46900 46901 const defaultHeaders = new Headers(); 46902 defaultHeaders.append("Content-Type", "application/json"); 46903 defaultHeaders.append("Accept", "application/json"); 46904 const request = async (url, options, formActions, busyKey = null, clearFormErrors = false) => { 46905 if (!clearFormErrors) { 46906 formActions.updateFormState({ 46907 serverErrors: [] 46908 }); 46909 } 46910 formActions.incrementRequestCount(busyKey); 46911 try { 46912 return await fetch(`${formActions.apiUrlBase}/${url}`, { 46913 method: options.method, 46914 body: options.bodyObject == null ? undefined : JSON.stringify(options.bodyObject), 46915 headers: defaultHeaders, 46916 credentials: "include" 46917 }); 46918 } 46919 finally { 46920 formActions.decrementRequestCount(busyKey); 46921 } 46922 }; 46923 46924 const isOneOffPurchase = (paymentOption) => paymentOption.type === 'ONE_OFF'; 46925 const getChangeSubscriptionPaymentConfiguration = (form, formState) => { 46926 const paymentConfig = formConfigAs(form); 46927 const environmentKey = formState.paymentOption?.virtualEnvironment || 'live'; 46928 if (formState.requiresPaymentMethodSetup && paymentConfig.paymentMethodSetupFormConfig) { 46929 const setupConfig = paymentConfig.paymentMethodSetupFormConfig[environmentKey]; 46930 if (setupConfig) { 46931 return setupConfig; 46932 } 46933 } 46934 // Virtual environments for change subscription 46935 if (paymentConfig.virtualEnvironmentsPaymentProviderFormConfig && 46936 formState.paymentOption?.virtualEnvironment) { 46937 const envConfig = paymentConfig.virtualEnvironmentsPaymentProviderFormConfig[environmentKey]; 46938 if (envConfig) { 46939 return envConfig; 46940 } 46941 } 46942 // 3. Fallback to regular config 46943 return paymentConfig.paymentProviderFormConfig; 46944 }; 46945 const mapToPayRequest = (form, formState, paymentProvider, vendorFields) => { 46946 if (formState.paymentOption.pricePointId) { 46947 return { 46948 url: `blaize/payment/${paymentProvider}/buy`, 46949 body: { 46950 product_id: formState.paymentOption.productId, 46951 price_point_id: formState.paymentOption.slug, 46952 discount_code: formState.promoCodeValid ? formState.promoCode : undefined, 46953 ...vendorFields 46954 } 46955 }; 46956 } 46957 let endpoint; 46958 let method; 46959 let changeSubscriptionBodyParams = {}; 46960 if (formConfigAs(form).changeSubscriptionMode || formState.convertCancelSubscriptionToAcceptOffer) { 46961 let subscriptionExternalId; 46962 if (formState.convertCancelSubscriptionToAcceptOffer) { 46963 // For cancel save offers, use the selected subscription 46964 subscriptionExternalId = formState.selectedSubscription.externalId; 46965 } 46966 else { 46967 // For regular change subscription, find from validChangeFromPlans 46968 const changingFromSubscription = formState 46969 .validChangeFromPlans 46970 .find(plan => formState.paymentOption.slug === plan.planSlug && formState.paymentOption.productId === plan.productId) 46971 .changesFromSubscription; 46972 subscriptionExternalId = changingFromSubscription.externalId; 46973 } 46974 endpoint = `subscriptions/${subscriptionExternalId}`; 46975 method = 'PATCH'; 46976 changeSubscriptionBodyParams = { 46977 navigated_from: `ChangeForm ${window.location.href}` 46978 }; 46979 } 46980 else if (isOneOffPurchase(formState.paymentOption)) { 46981 endpoint = 'payment/buy'; 46982 method = 'POST'; 46983 } 46984 else { 46985 endpoint = 'subscribe'; 46986 method = 'POST'; 46987 } 46988 return { 46989 url: `zephr/${endpoint}`, 46990 method, 46991 body: { 46992 product_id: formState.paymentOption.productId, 46993 plan_id: formState.paymentOption.slug, 46994 discount_code: formState.promoCodeValid ? formState.promoCode : undefined, 46995 ...changeSubscriptionBodyParams, 46996 vendor_fields: vendorFields ?? {} 46997 } 46998 }; 46999 }; 47000 47001 const tokenPath = 'blaize/payment/braintree/token'; 47002 let braintreeInstance; 47003 const loadBraintree = new Promise(function (resolve) { 47004 window.braintreeLoadCallback = resolve; 47005 }); 47006 // https://braintree.github.io/braintree-web-drop-in/docs/current/module-braintree-web-drop-in.html#~paypalCreateOptions 47007 const paypalConfiguration = (formState) => ({ 47008 flow: formState.paymentOption.type === 'ONE_OFF' ? 'checkout' : 'vault', 47009 singleUse: true, 47010 buttonStyle: { 47011 shape: 'rect', 47012 size: 'medium' 47013 }, 47014 // Show 'continue' button rather than 'pay now' on the PayPal modal 47015 commit: false, 47016 currency: formState.paymentOption.currencyCode.toLowerCase(), 47017 amount: formState.paymentOptionPrices.totalPrice, 47018 }); 47019 const getBraintreeToken = (formState, formActions) => request(tokenPath, { 47020 method: "GET" 47021 }, formActions, null, true) 47022 .then(response => response.json()) 47023 .then(json => json.token); 47024 const loadBraintreeUi = (form, formState, formActions) => { 47025 const paypalEnabled = formConfigAs(form).paymentProviderFormConfig?.enablePaypal; 47026 formActions.incrementRequestCount(); 47027 void loadBraintree 47028 .then(() => getBraintreeToken(formState, formActions)) 47029 .then((braintreeToken) => {
47030 window.braintree.dropin.create({ 47031 authorization: braintreeToken, 47032 container: '#braintree-dropin-container', 47033 ...(paypalEnabled ? { 47034 paypal: paypalConfiguration(formState) 47035 } : {}) 47036 }, (createErr, instance) => { 47037 formActions.decrementRequestCount(); 47038 braintreeInstance = instance; 47039 formActions.updateFormState({ 47040 paymentProviderFormLoaded: true, 47041 }); 47042 if (createErr) { 47043 throw createErr; 47044 } 47045 // If this is an existing user, they may already have a payment option and paymentMethodRequestable won't be fired 47046 if (braintreeInstance.isPaymentMethodRequestable()) { 47047 formActions.updateFormState({ 47048 paymentFormComplete: true 47049 }); 47050 } 47051 braintreeInstance.on('paymentMethodRequestable', () => { 47052 formActions.updateFormState({ 47053 paymentFormComplete: true 47054 }); 47055 }); 47056 braintreeInstance.on('noPaymentMethodRequestable', () => { 47057 formActions.updateFormState({ 47058 paymentFormComplete: false 47059 }); 47060 }); 47061 }); 47062 }).catch(err => { 47063 console.error(err); 47064 formActions.decrementRequestCount(); 47065 }); 47066 }; 47067 const braintreePay = async (form, formState, formActions) => { 47068 formActions.incrementRequestCount(); 47069 let resolveHandle, rejectHandle; 47070 const promise = new Promise((resolve, reject) => { resolveHandle = resolve, rejectHandle = reject; }); 47071 const success = () => { 47072 formActions.decrementRequestCount(); 47073 resolveHandle(); 47074 }; 47075 const errored = (err) => { 47076 console.error(err); 47077 formActions.decrementRequestCount(); 47078 rejectHandle(); 47079 }; 47080 braintreeInstance.requestPaymentMethod((err, payload) => { 47081 if (err || !payload) { 47082 errored(`Error requesting payment method ${JSON.stringify(err)}`); 47083 } 47084 const { url, body, method } = mapToPayRequest(form, formState, paymentProviders.BRAINTREE, { 47085 payment_nonce: payload.nonce, 47086 ...(payload.type === 'PayPalAccount' ? { paypal: true } : {}) 47087 }); 47088 return request(url, { 47089 method, 47090 bodyObject: body 47091 }, formActions) 47092 .then(response => { 47093 if (response?.ok) { 47094 success(); 47095 return; 47096 } 47097 errored(response); 47098 }).catch((err) => { 47099 errored(err); 47100 }); 47101 }); 47102 return promise; 47103 }; 47104 const braintreeChangePayment = async (form, formState, formActions) => { 47105 let resolveHandle, rejectHandle; 47106 const promise = new Promise((resolve, reject) => { resolveHandle = resolve, rejectHandle = reject; }); 47107 braintreeInstance.requestPaymentMethod((err, payload) => { 47108 if (err || !payload) { 47109 console.error(`Error requesting payment method ${JSON.stringify(err)}`); 47110 } 47111 return request(`blaize/payment/braintree/subscriptions/${formState.selectedSubscription?.externalId}`, { 47112 method: 'PATCH', 47113 bodyObject: { 47114 payment_method_nonce: payload?.nonce, 47115 } 47116 }, formActions) 47117 .then(response => { 47118 console.log(response); 47119 if (response?.ok) { 47120 resolveHandle(); 47121 return; 47122 } 47123 rejectHandle(response); 47124 }).catch((err) => { 47125 rejectHandle(err); 47126 }); 47127 }); 47128 return promise; 47129 }; 47130 47131 /** 47132 * Mobile (Social) payment services 47133 * 47134 * note: Using a string-backed enum here for better debug logging. 47135 */ 47136 var MobilePaymentService; 47137 (function (MobilePaymentService) { 47138 MobilePaymentService["GOOGLE_PAY"] = "GOOGLE_PAY"; 47139 MobilePaymentService["APPLE_PAY"] = "APPLE_PAY"; 47140 })(MobilePaymentService || (MobilePaymentService = {})); 47141 47142 const loadGooglePay$1 = new Promise(function (resolve) { 47143 window.googlePayLoadBraintreeCallback = resolve; 47144 }); 47145 const loadBraintreeApplePay = new Promise(function (resolve) { 47146 window.applePayLoadBraintreeCallback = resolve; 47147 }); 47148 const braintreePayWithMobile = (form, formState, formActions) => { 47149 const { url, body, method } = mapToPayRequest(form, formState, paymentProviders.BRAINTREE, { 47150 payment_nonce: formState.mobilePaymentMethodId, 47151 vault_payment_method: true 47152 }); 47153 return request(url, { 47154 method, 47155 bodyObject: body 47156 }, formActions) 47157 .then(response => { 47158 if (!response?.ok) { 47159 throw JSON.stringify(response); 47160 } 47161 }); 47162 }; 47163 const configureBraintreeMobilePayments = async (form, formState, formActions) => { 47164 await configureBraintreeGooglePay(form, formState, formActions); 47165 await configureBraintreeApplePay(form, formState, formActions); 47166 }; 47167 const configureBraintreeGooglePay = (form, formState, formActions) => { 47168 const braintreeMobilePaymentConfig = JSON.parse(form.organisationConfiguration?.braintreeMobilePaymentConfig ?? "{}"); 47169 let googlePaymentsClient; 47170 return loadGooglePay$1 47171 .then(() => { 47172 const container = document.getElementById('google-pay-button'); 47173 // Empty the container 47174 while (container.firstChild) { 47175 container.removeChild(container.lastChild); 47176 } 47177 // No need to show the user any errors here just hide the button 47178 if (!braintreeMobilePaymentConfig?.google) { 47179 container.style.display = 'none'; 47180 console.error("Braintree Mobile payments are not configured in the console"); 47181 return; 47182 } 47183 formState = formActions.getFormState(); 47184 googlePaymentsClient = new window.google.payments.api.PaymentsClient({ 47185 environment: form.organisationConfiguration.braintreeSandboxEnv ? 'TEST' : 'PRODUCTION' 47186 }); 47187 void loadBraintree 47188 .then(() => getBraintreeToken(formState, formActions)) 47189 .then((braintreeToken) => { 47190 window.braintree.client.create({ 47191 authorization: braintreeToken 47192 }, (createErr, clientInstance) => { 47193 // Empty the container 47194 while (container.firstChild) { 47195 container.removeChild(container.lastChild); 47196 } 47197 if (createErr) { 47198 // No need to show the user any errors here just hide the button 47199 console.error("Error creating braintree client", createErr); 47200 container.style.display = 'none'; 47201 return; 47202 } 47203 window.braintree.googlePayment.create({ 47204 client: clientInstance, 47205 googlePayVersion: 2, 47206 googleMerchantId: braintreeMobilePaymentConfig.google.googleMerchantId 47207 }, (googlePaymentErr, googlePaymentInstance) => { 47208 if (googlePaymentErr) { 47209 // No need to show the user any errors here just hide the button 47210 console.error("Error creating braintree client", googlePaymentErr); 47211 container.style.display = 'none'; 47212 return; 47213 } 47214 googlePaymentsClient.isReadyToPay({ 47215 apiVersion: 2, 47216 apiVersionMinor: 0, 47217 allowedPaymentMethods: googlePaymentInstance.createPaymentDataRequest().allowedPaymentMethods, 47218 existingPaymentMethodRequired: true, 47219 }).then((response) => { 47220 if (!response.result || !response.paymentMethodPresent) { 47221 container.style.display = 'none'; 47222 console.error(response.paymentMethodPresent ? "Google Pay supp
47222ort not found" : "No payment method"); 47223 formActions.updateFormState({ 47224 serverErrors: [ServerError.MOBILE_PAYMENT_PROCESSING_ERROR] 47225 }); 47226 logDataLayerEvent(form, 'zephr_form_error', { 47227 error: ServerError[ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 47228 }); 47229 } 47230 container.appendChild(googlePaymentsClient.createButton({ 47231 buttonColor: 'default', 47232 buttonType: 'plain', 47233 buttonSizeMode: 'fill', 47234 onClick: () => { 47235 onClickPaymentButton$1(form, formState, formActions, googlePaymentInstance, googlePaymentsClient); 47236 }, 47237 })); 47238 }); 47239 }); 47240 }); 47241 }); 47242 }); 47243 }; 47244 const onClickPaymentButton$1 = (form, formState, formActions, googlePaymentInstance, googlePaymentsClient) => { 47245 formActions.updateFormState({ 47246 mobilePaymentService: MobilePaymentService.GOOGLE_PAY, 47247 serverErrors: [], 47248 }); 47249 const paymentDataRequest = googlePaymentInstance.createPaymentDataRequest({ 47250 transactionInfo: { 47251 currencyCode: formState.paymentOption.currencyCode, 47252 totalPriceStatus: 'FINAL', 47253 totalPrice: formState.paymentOptionPrices.totalPrice.toFixed(2) 47254 }, 47255 emailRequired: false, 47256 shippingAddressRequired: false 47257 }); 47258 googlePaymentsClient.loadPaymentData(paymentDataRequest).then(function (paymentData) { 47259 googlePaymentInstance.parseResponse(paymentData, (err, result) => { 47260 if (err || !result.nonce) { 47261 formActions.updateFormState({ 47262 serverErrors: [ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 47263 mobilePaymentService: null, 47264 }); 47265 console.error('Error requesting payment data', err, result); 47266 logDataLayerEvent(form, 'zephr_form_error', { 47267 error: ServerError[ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 47268 }); 47269 return; 47270 } 47271 formActions.updateFormState({ 47272 mobilePaymentMethodId: result.nonce 47273 }); 47274 formActions.completeSection(); 47275 }); 47276 }).catch(function (err) { 47277 // If we get heree, the user may have just closed the modal without paying. 47278 // Not sure if we should be showing an error in that case, but we cant distinguish 47279 // it from other failure cases https://developers.google.com/pay/api/web/reference/client#errors_1 47280 console.warn('Error requesting payment data', err); 47281 formActions.updateFormState({ 47282 mobilePaymentService: null, 47283 serverErrors: [ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 47284 }); 47285 logDataLayerEvent(form, 'zephr_form_error', { 47286 error: ServerError[ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 47287 }); 47288 }); 47289 }; 47290 const configureBraintreeApplePay = (form, formState, formActions) => { 47291 const apple_container = document.getElementById('apple_pay_button'); 47292 while (apple_container.firstChild) { 47293 apple_container.removeChild(apple_container.lastChild); 47294 } 47295 return loadBraintreeApplePay 47296 .then(() => { 47297 if (!(window.ApplePaySession && window.ApplePaySession.supportsVersion(3) && window.ApplePaySession.canMakePayments())) { 47298 apple_container.style.display = 'none'; 47299 console.log('Cannot make payments with Apple Pay'); 47300 return; 47301 } 47302 return loadBraintree 47303 .then(() => getBraintreeToken(formState, formActions)) 47304 .then((braintreeToken) => { 47305 window.braintree.client.create({ 47306 authorization: braintreeToken 47307 }, (clientErr, clientInstance) => { 47308 if (clientErr) { 47309 apple_container.style.display = 'none'; 47310 console.error('Error creating braintree client:', clientErr); 47311 return; 47312 } 47313 window.braintree.applePay.create({ 47314 client: clientInstance 47315 }, function (applePayErr, applePayInstance) { 47316 while (apple_container.firstChild) { 47317 apple_container.removeChild(apple_container.lastChild); 47318 } 47319 if (applePayErr) { 47320 apple_container.style.display = 'none'; 47321 console.error('Error creating applePayInstance:', applePayErr); 47322 return; 47323 } 47324 const paymentRequest = applePayInstance.createPaymentRequest({ 47325 total: { 47326 label: formState.paymentOption.label, 47327 amount: formState.paymentOptionPrices.totalPrice.toFixed(2) 47328 } 47329 }); 47330 const applePayDiv = document.createElement("div"); 47331 applePayDiv.classList.add("apple-pay-button"); 47332 applePayDiv.classList.add("apple-pay-button-black"); 47333 apple_container.appendChild(applePayDiv); 47334 applePayDiv.addEventListener('click', function () { 47335 onClickApplePayment(form, formState, formActions, paymentRequest, applePayInstance); 47336 }); 47337 }); 47338 }); 47339 }); 47340 }); 47341 }; 47342 const onClickApplePayment = (form, formState, formActions, paymentRequest, applePayInstance) => { 47343 formActions.updateFormState({ 47344 mobilePaymentService: MobilePaymentService.APPLE_PAY, 47345 serverErrors: [], 47346 }); 47347 const session = new ApplePaySession(3, paymentRequest); 47348 session.onvalidatemerchant = function (event) { 47349 applePayInstance.performValidation({ 47350 validationURL: event.validationURL, 47351 displayName: formState.paymentOption.label 47352 }, function (err, merchantSession) { 47353 if (err) { 47354 formActions.updateFormState({ 47355 serverErrors: [ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 47356 mobilePaymentService: null, 47357 }); 47358 console.log('err in onvalidatemerchant in apple pay configuration: ', err); 47359 logDataLayerEvent(form, 'zephr_form_error', { 47360 error: ServerError[ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 47361 }); 47362 return; 47363 } 47364 session.completeMerchantValidation(merchantSession); 47365 }); 47366 }; 47367 session.onpaymentauthorized = function (event) { 47368 applePayInstance.tokenize({ 47369 token: event.payment.token 47370 }, function (tokenizeErr, payload) { 47371 if (tokenizeErr) { 47372 formActions.updateFormState({ 47373 serverErrors: [ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 47374 mobilePaymentService: null, 47375 }); 47376 console.error('Error tokenizing Apple Pay:', tokenizeErr); 47377 logDataLayerEvent(form, 'zephr_form_error', { 47378 error: ServerError[ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 47379 }); 47380 session.completePayment(ApplePaySession.STATUS_FAILURE); 47381 return; 47382 } 47383 formActions.updateFormState({ 47384 mobilePaymentMethodId: payload.nonce 47385 }); 47386 formActions.completeSection(); 47387 session.completePayment(ApplePaySession.STATUS_SUCCESS); 47388 }); 47389 }; 47390 session.begin(); 47391 }; 47392 47393 const invalidCurrencySymbol = '¤'; 47394 const roundingErrorSmallNumber = 0.00001; 47395 const formatFromCurrencyCode = (price, currencyCode) => new Intl.NumberFormat(undefined, { 47396 style: 'currency', 47397 currency: currencyCode, 47398 minimumFractionDigits: Math.abs(price) % 1 < roundingErrorSmallNumber ? 0 : undefined, 47399 maximumFractionDigits: Math.abs(price) % 1 < roundingErrorSmallNumber ? 0 : 2, 47400 }).format(price);
47401 const formatFromCurrencySymbol = (price, currencySymbol) => currencySymbol?.length === 1 ? 47402 `${currencySymbol}${price}` : 47403 `${price} ${currencySymbol}`.trim(); 47404 /** 47405 * currency might either be a symbol ($,£,etc) or a code (GBP,EUR) 47406 */ 47407 const formatCurrency = (price, currency) => { 47408 try { 47409 if (currency?.length === 3) { 47410 const formatted = formatFromCurrencyCode(price, currency); 47411 if (!formatted.includes(invalidCurrencySymbol)) { 47412 return formatted; 47413 } 47414 } 47415 } 47416 catch (e) { 47417 console.warn(`Error formatting currency for symbol ${currency}`, e); 47418 } 47419 return formatFromCurrencySymbol(price, currency); 47420 }; 47421 47422 const getProductAddons = async (form, formState, formActions, skipMobileReload = false) => { 47423 const providerConfig = paymentProviderFor(form.organisationConfiguration.paymentProvider); 47424 if (!providerConfig.hasProductAddons || !(formState.loginRegistrationComplete || formState.userSession)) { 47425 return Promise.resolve(formState); 47426 } 47427 return request(providerConfig.productAddonPath, { 47428 method: 'POST', 47429 bodyObject: { 47430 promoCode: formState.promoCodeValid ? formState.promoCode : null, 47431 paymentOptions: formConfigAs(form).paymentOptions 47432 } 47433 }, formActions, null, true) 47434 .then(async (response) => { 47435 if (!response.ok) { 47436 console.log("error loading product addons", response); 47437 logDataLayerEvent(form, 'zephr_form_error', { 47438 error: ServerError[ServerError.UNKNOWN], 47439 }); 47440 return formActions.updateFormState({ 47441 addons: [], 47442 serverErrors: [ServerError.UNKNOWN] 47443 }); 47444 } 47445 const json = await response.json(); 47446 try { 47447 const addons = json.map(addon => ({ 47448 id: addon.id, 47449 label: addon.label, 47450 planPrices: addon.paymentOptions.map(planAddon => ({ 47451 planSlug: planAddon.slug, 47452 productId: planAddon.productId, 47453 addonPrice: planAddon.addonPrice 47454 })) 47455 })); 47456 return formActions.updateFormState({ 47457 addons 47458 }); 47459 } 47460 catch (err) { 47461 console.error("Error parsing product addons response", err, json); 47462 return formState; 47463 } 47464 }).then(async (updatedFormState) => { 47465 if (!skipMobileReload) { 47466 await afterProductAddonChange(form, updatedFormState, formActions); 47467 } 47468 return updatedFormState; 47469 }); 47470 }; 47471 /* 47472 If we're using mobile payment and we're on the payment screen, 47473 we'll need to reload the mobile payment button so it has the discounted amount 47474 and make sure they can't press the button while the button is updating 47475 */ 47476 const afterProductAddonChange = async (form, formState, formActions) => { 47477 if (formState.currentSection.elements.some(element => element.type === elementTypes.MOBILE_PAYMENT && element.config?.enabled !== false)) { 47478 formActions.incrementRequestCount(); 47479 try { 47480 // Only reload mobile payment service if the provider actually supports mobile payments 47481 if (supportsMobilePayments(form.organisationConfiguration.paymentProvider)) { 47482 await mobilePaymentServiceFor(form.organisationConfiguration.paymentProvider).loader(form, formState, formActions); 47483 } 47484 } 47485 finally { 47486 formActions.decrementRequestCount(); 47487 } 47488 } 47489 }; 47490 const addonsForPlan = (formState) => formState.addons.map(addon => { 47491 const plan = addon.planPrices 47492 .find(plan => plan.planSlug === formState.paymentOption.slug && plan.productId === formState.paymentOption.productId); 47493 return plan && { 47494 label: addon.label, 47495 addonPrice: plan.addonPrice, 47496 addonPriceFormattedString: formatCurrency(plan.addonPrice, formState.paymentOption.currencyCode) 47497 }; 47498 }).filter(o => o); 47499 47500 /** 47501 * Calculate the actual prices for a payment option, considering: 47502 * - The payment option 47503 * - Discount code 47504 * 47505 * Try not to run the calculation if the inputs have not changed from the previous calculation. 47506 */ 47507 const calculatePrices = async (form, formState, formActions) => { 47508 if (formState.paymentOptionPrices != null 47509 && formState.paymentOptionPrices.productId === formState.paymentOption.productId 47510 && formState.paymentOptionPrices.slug === formState.paymentOption.slug 47511 && formState.paymentOptionPrices.promoCode === formState.promoCode 47512 && formState.paymentOptionPrices.addonPrices == addonsForPlan(formState) 47513 && formState.paymentOptionPrices.billingAddress.country === formState.billingAddress.country 47514 && formState.paymentOptionPrices.billingAddress.postalCode === formState.billingAddress.postalCode 47515 // // This is a bit of a fudge but we know that there are only addons for braintree where the price calculation is non-io 47516 && formState.paymentOptionPrices.addonPrices.length == 0 47517 && addonsForPlan(formState).length == 0) { 47518 return formState; 47519 } 47520 formActions.updateFormState({ 47521 paymentOptionPrices: null 47522 }); 47523 const paymentOptionPrices = await paymentProviderFor(form.organisationConfiguration.paymentProvider).priceCalculator(form, formState, formActions); 47524 return formActions.updateFormState({ 47525 paymentOptionPrices 47526 }); 47527 }; 47528 47529 // See https://stripe.com/docs/currencies 47530 const currencies = [ 47531 "BIF", 47532 "CLP", 47533 "DJF", 47534 "GNF", 47535 "JPY", 47536 "KMF",
47537 "KRW", 47538 "MGA", 47539 "PYG", 47540 "RWF", 47541 "UGX", 47542 "VND", 47543 "VUV", 47544 "XAF", 47545 "XOF", 47546 "XPF", 47547 ]; 47548 const isZeroDecimalCurrency = currencyCode => currencies.includes(currencyCode); 47549 47550 const stripePaymentElementAppearance = (siteStyles) => { 47551 const stylesObj = JSON.parse(siteStyles ?? "{}"); 47552 return { 47553 variables: { 47554 color: stylesObj?.color?.text?.main ?? '#32325d', 47555 fontFamily: `${stylesObj?.typography?.body?.font}, ${stylesObj?.typography?.body?.fallbackFont}, "Helvetica Neue", Helvetica, sans-serif`, 47556 fontSmooth: 'always', 47557 fontSizeBase: '16px', 47558 colorWarningText: stylesObj?.color?.warning?.main ?? '#fa755a', 47559 colorIconCardError: stylesObj?.color?.warning?.main ?? '#fa755a', 47560 borderRadius: `${(stylesObj?.input?.borderRadius ?? '4')}px` 47561 }, 47562 rules: { 47563 '.Input::placeholder': { 47564 color: '#aab7c4' 47565 }, 47566 } 47567 }; 47568 }; 47569 const stripeCardElementStyle = { 47570 base: { 47571 color: '#32325d', 47572 fontFamily: '"Helvetica Neue", Helvetica, sans-serif', 47573 fontSmoothing: 'antialiased', 47574 fontSize: '16px', 47575 '::placeholder': { 47576 color: '#aab7c4' 47577 } 47578 }, 47579 invalid: { 47580 color: '#fa755a', 47581 iconColor: '#fa755a' 47582 } 47583 }; 47584 const createStripePaymentElement = (stripe, form, formActions) => { 47585 const formState = formActions.getFormState(); 47586 const currencyMultiplier = isZeroDecimalCurrency(formState.paymentOption.currencyCode.toUpperCase()) ? 1 : 100; 47587 const elements = stripe.elements({ 47588 mode: 'payment', 47589 currency: formState.paymentOption.currencyCode.toLowerCase(), 47590 amount: parseFloat((formState.paymentOptionPrices.totalPrice * currencyMultiplier).toFixed(2)), 47591 setup_future_usage: 'off_session', 47592 appearance: stripePaymentElementAppearance(form.organisationConfiguration.siteStyles), 47593 paymentMethodTypes: ['card'] 47594 }); 47595 return elements.create('payment', { 47596 terms: { 47597 card: 'never' 47598 }, 47599 wallets: { 47600 applePay: 'never', 47601 googlePay: 'never' 47602 } 47603 }); 47604 }; 47605 const createStripeCardElement = (stripe) => { 47606 return stripe.elements().create('card', { style: stripeCardElementStyle }); 47607 }; 47608 const createStripeElement = (stripe, form, formActions) => { 47609 if (form.organisationConfiguration.stripeAutomaticTaxEnabled && form.formType !== FormType.LIST_SUBSCRIPTIONS 47610 || formConfigAs(form).paymentProviderFormConfig?.usePaymentElement) { 47611 return createStripePaymentElement(stripe, form, formActions); 47612 } 47613 else { 47614 return createStripeCardElement(stripe); 47615 } 47616 }; 47617 47618 /*! 47619 * mustache.js - Logic-less {{mustache}} templates with JavaScript 47620 * http://github.com/janl/mustache.js 47621 */ 47622 47623 var objectToString = Object.prototype.toString; 47624 var isArray = Array.isArray || function isArrayPolyfill (object) { 47625 return objectToString.call(object) === '[object Array]'; 47626 }; 47627 47628 function isFunction (object) { 47629 return typeof object === 'function'; 47630 } 47631 47632 /** 47633 * More correct typeof string handling array 47634 * which normally returns typeof 'object' 47635 */ 47636 function typeStr (obj) { 47637 return isArray(obj) ? 'array' : typeof obj; 47638 } 47639 47640 function escapeRegExp (string) { 47641 return string.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&'); 47642 } 47643 47644 /** 47645 * Null safe way of checking whether or not an object, 47646 * including its prototype, has a given property 47647 */ 47648 function hasProperty (obj, propName) { 47649 return obj != null && typeof obj === 'object' && (propName in obj); 47650 } 47651 47652 /** 47653 * Safe way of detecting whether or not the given thing is a primitive and 47654 * whether it has the given property 47655 */ 47656 function primitiveHasOwnProperty (primitive, propName) { 47657 return ( 47658 primitive != null 47659 && typeof primitive !== 'object' 47660 && primitive.hasOwnProperty 47661 && primitive.hasOwnProperty(propName) 47662 ); 47663 } 47664 47665 // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577 47666 // See https://github.com/janl/mustache.js/issues/189 47667 var regExpTest = RegExp.prototype.test; 47668 function testRegExp (re, string) { 47669 return regExpTest.call(re, string); 47670 } 47671 47672 var nonSpaceRe = /\S/; 47673 function isWhitespace (string) { 47674 return !testRegExp(nonSpaceRe, string); 47675 } 47676 47677 var entityMap = { 47678 '&': '&', 47679 '<': '<', 47680 '>': '>', 47681 '"': '"', 47682 "'": ''', 47683 '/': '/', 47684 '`': '`', 47685 '=': '=' 47686 }; 47687 47688 function escapeHtml (string) { 47689 return String(string).replace(/[&<>
vendor: 18,467 bytes, lines 47689-48252
47689"'`=\/]/g, function fromEntityMap (s) { 47690 return entityMap[s]; 47691 }); 47692 } 47693 47694 var whiteRe = /\s*/; 47695 var spaceRe = /\s+/; 47696 var equalsRe = /\s*=/; 47697 var curlyRe = /\s*\}/; 47698 var tagRe = /#|\^|\/|>|\{|&|=|!/; 47699 47700 /** 47701 * Breaks up the given `template` string into a tree of tokens. If the `tags` 47702 * argument is given here it must be an array with two string values: the 47703 * opening and closing tags used in the template (e.g. [ "<%", "%>" ]). Of 47704 * course, the default is to use mustaches (i.e. mustache.tags). 47705 * 47706 * A token is an array with at least 4 elements. The first element is the 47707 * mustache symbol that was used inside the tag, e.g. "#" or "&". If the tag 47708 * did not contain a symbol (i.e. {{myValue}}) this element is "name". For 47709 * all text that appears outside a symbol this element is "text". 47710 * 47711 * The second element of a token is its "value". For mustache tags this is 47712 * whatever else was inside the tag besides the opening symbol. For text tokens 47713 * this is the text itself. 47714 * 47715 * The third and fourth elements of the token are the start and end indices, 47716 * respectively, of the token in the original template. 47717 * 47718 * Tokens that are the root node of a subtree contain two more elements: 1) an 47719 * array of tokens in the subtree and 2) the index in the original template at 47720 * which the closing tag for that section begins. 47721 * 47722 * Tokens for partials also contain two more elements: 1) a string value of 47723 * indendation prior to that tag and 2) the index of that tag on that line - 47724 * eg a value of 2 indicates the partial is the third tag on this line. 47725 */ 47726 function parseTemplate (template, tags) { 47727 if (!template) 47728 return []; 47729 var lineHasNonSpace = false; 47730 var sections = []; // Stack to hold section tokens 47731 var tokens = []; // Buffer to hold the tokens 47732 var spaces = []; // Indices of whitespace tokens on the current line 47733 var hasTag = false; // Is there a {{tag}} on the current line? 47734 var nonSpace = false; // Is there a non-space char on the current line? 47735 var indentation = ''; // Tracks indentation for tags that use it 47736 var tagIndex = 0; // Stores a count of number of tags encountered on a line 47737 47738 // Strips all whitespace tokens array for the current line 47739 // if there was a {{#tag}} on it and otherwise only space. 47740 function stripSpace () { 47741 if (hasTag && !nonSpace) { 47742 while (spaces.length) 47743 delete tokens[spaces.pop()]; 47744 } else { 47745 spaces = []; 47746 } 47747 47748 hasTag = false; 47749 nonSpace = false; 47750 } 47751 47752 var openingTagRe, closingTagRe, closingCurlyRe; 47753 function compileTags (tagsToCompile) { 47754 if (typeof tagsToCompile === 'string') 47755 tagsToCompile = tagsToCompile.split(spaceRe, 2); 47756 47757 if (!isArray(tagsToCompile) || tagsToCompile.length !== 2) 47758 throw new Error('Invalid tags: ' + tagsToCompile); 47759 47760 openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\s*'); 47761 closingTagRe = new RegExp('\\s*' + escapeRegExp(tagsToCompile[1])); 47762 closingCurlyRe = new RegExp('\\s*' + escapeRegExp('}' + tagsToCompile[1])); 47763 } 47764 47765 compileTags(tags || mustache.tags); 47766 47767 var scanner = new Scanner(template); 47768 47769 var start, type, value, chr, token, openSection; 47770 while (!scanner.eos()) { 47771 start = scanner.pos; 47772 47773 // Match any text between tags. 47774 value = scanner.scanUntil(openingTagRe); 47775 47776 if (value) { 47777 for (var i = 0, valueLength = value.length; i < valueLength; ++i) { 47778 chr = value.charAt(i); 47779 47780 if (isWhitespace(chr)) { 47781 spaces.push(tokens.length); 47782 indentation += chr; 47783 } else { 47784 nonSpace = true; 47785 lineHasNonSpace = true; 47786 indentation += ' '; 47787 } 47788 47789 tokens.push([ 'text', chr, start, start + 1 ]); 47790 start += 1; 47791 47792 // Check for whitespace on the current line. 47793 if (chr === '\n') { 47794 stripSpace(); 47795 indentation = ''; 47796 tagIndex = 0; 47797 lineHasNonSpace = false; 47798 } 47799 } 47800 } 47801 47802 // Match the opening tag. 47803 if (!scanner.scan(openingTagRe)) 47804 break; 47805 47806 hasTag = true; 47807 47808 // Get the tag type. 47809 type = scanner.scan(tagRe) || 'name'; 47810 scanner.scan(whiteRe); 47811 47812 // Get the tag value. 47813 if (type === '=') { 47814 value = scanner.scanUntil(equalsRe); 47815 scanner.scan(equalsRe); 47816 scanner.scanUntil(closingTagRe); 47817 } else if (type === '{') { 47818 value = scanner.scanUntil(closingCurlyRe); 47819 scanner.scan(curlyRe); 47820 scanner.scanUntil(closingTagRe); 47821 type = '&'; 47822 } else { 47823 value = scanner.scanUntil(closingTagRe); 47824 } 47825 47826 // Match the closing tag. 47827 if (!scanner.scan(closingTagRe)) 47828 throw new Error('Unclosed tag at ' + scanner.pos); 47829 47830 if (type == '>') { 47831 token = [ type, value, start, scanner.pos, indentation, tagIndex, lineHasNonSpace ]; 47832 } else { 47833 token = [ type, value, start, scanner.pos ]; 47834 } 47835 tagIndex++; 47836 tokens.push(token); 47837 47838 if (type === '#' || type === '^') { 47839 sections.push(token); 47840 } else if (type === '/') { 47841 // Check section nesting. 47842 openSection = sections.pop(); 47843 47844 if (!openSection) 47845 throw new Error('Unopened section "' + value + '" at ' + start); 47846 47847 if (openSection[1] !== value) 47848 throw new Error('Unclosed section "' + openSection[1] + '" at ' + start); 47849 } else if (type === 'name' || type === '{' || type === '&') { 47850 nonSpace = true; 47851 } else if (type === '=') { 47852 // Set the tags for the next time around. 47853 compileTags(value); 47854 } 47855 } 47856 47857 stripSpace(); 47858 47859 // Make sure there are no open sections when we're done. 47860 openSection = sections.pop(); 47861 47862 if (openSection) 47863 throw new Error('Unclosed section "' + openSection[1] + '" at ' + scanner.pos); 47864 47865 return nestTokens(squashTokens(tokens)); 47866 } 47867 47868 /** 47869 * Combines the values of consecutive text tokens in the given `tokens` array 47870 * to a single token. 47871 */ 47872 function squashTokens (tokens) { 47873 var squashedTokens = []; 47874 47875 var token, lastToken; 47876 for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) { 47877 token = tokens[i]; 47878 47879 if (token) { 47880 if (token[0] === 'text' && lastToken && lastToken[0] === 'text') { 47881 lastToken[1] += token[1]; 47882 lastToken[3] = token[3]; 47883 } else { 47884 squashedTokens.push(token); 47885 lastToken = token; 47886 } 47887 } 47888 } 47889 47890 return squashedTokens; 47891 } 47892 47893 /** 47894 * Forms the given array of `tokens` into a nested tree structure where 47895 * tokens that represent a section have two additional items: 1) an array of 47896 * all tokens that appear in that section and 2) the index in the original 47897 * template that represents the end of that section. 47898 */ 47899 function nestTokens (tokens) { 47900 var nestedTokens = []; 47901 var collector = nestedTokens; 47902 var sections = []; 47903 47904 var token, section; 47905 for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) { 47906 token = tokens[i]; 47907 47908 switch (token[0]) { 47909 case '#': 47910 case '^': 47911 collector.push(token); 47912 sections.push(token); 47913 collector = token[4] = []; 47914 break; 47915 case '/': 47916 section = sections.pop(); 47917 section[5] = token[2]; 47918 collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens; 47919 break; 47920 default: 47921 collector.push(token); 47922 } 47923 } 47924 47925 return nestedTokens; 47926 } 47927 47928 /** 47929 * A simple string scanner that is used by the template parser to find 47930 * tokens in template strings. 47931 */ 47932 function Scanner (string) { 47933 this.string = string; 47934 this.tail = string; 47935 this.pos = 0; 47936 } 47937 47938 /** 47939 * Returns `true` if the tail is empty (end of string). 47940 */ 47941 Scanner.prototype.eos = function eos () { 47942 return this.tail === ''; 47943 }; 47944 47945 /** 47946 * Tries to match the given regular expression at the current position. 47947 * Returns the matched text if it can match, the empty string otherwise. 47948 */ 47949 Scanner.prototype.scan = function scan (re) { 47950 var match = this.tail.match(re); 47951 47952 if (!match || match.index !== 0) 47953 return ''; 47954 47955 var string = match[0]; 47956 47957 this.tail = this.tail.substring(string.length); 47958 this.pos += string.length; 47959 47960 return string; 47961 }; 47962 47963 /** 47964 * Skips all text until the given regular expression can be matched. Returns 47965 * the skipped string, which is the entire tail if no match can be made. 47966 */ 47967 Scanner.prototype.scanUntil = function scanUntil (re) { 47968 var index = this.tail.search(re), match; 47969 47970 switch (index) { 47971 case -1: 47972 match = this.tail; 47973 this.tail = ''; 47974 break; 47975 case 0: 47976 match = ''; 47977 break; 47978 default: 47979 match = this.tail.substring(0, index); 47980 this.tail = this.tail.substring(index); 47981 } 47982 47983 this.pos += match.length; 47984 47985 return match; 47986 }; 47987 47988 /** 47989 * Represents a rendering context by wrapping a view object and 47990 * maintaining a reference to the parent context. 47991 */ 47992 function Context (view, parentContext) { 47993 this.view = view; 47994 this.cache = { '.': this.view }; 47995 this.parent = parentContext; 47996 } 47997 47998 /** 47999 * Creates a new context using the given view with this context 48000 * as the parent. 48001 */ 48002 Context.prototype.push = function push (view) { 48003 return new Context(view, this); 48004 }; 48005 48006 /** 48007 * Returns the value of the given name in this context, traversing 48008 * up the context hierarchy if the value is absent in this context's view. 48009 */ 48010 Context.prototype.lookup = function lookup (name) { 48011 var cache = this.cache; 48012 48013 var value; 48014 if (cache.hasOwnProperty(name)) { 48015 value = cache[name]; 48016 } else { 48017 var context = this, intermediateValue, names, index, lookupHit = false; 48018 48019 while (context) { 48020 if (name.indexOf('.') > 0) { 48021 intermediateValue = context.view; 48022 names = name.split('.'); 48023 index = 0; 48024 48025 /** 48026 * Using the dot notion path in `name`, we descend through the 48027 * nested objects. 48028 * 48029 * To be certain that the lookup has been successful, we have to 48030 * check if the last object in the path actually has the property 48031 * we are looking for. We store the result in `lookupHit`. 48032 * 48033 * This is specially necessary for when the value has been set to 48034 * `undefined` and we want to avoid looking up parent contexts. 48035 * 48036 * In the case where dot notation is used, we consider the lookup 48037 * to be successful even if the last "object" in the path is 48038 * not actually an object but a primitive (e.g., a string, or an 48039 * integer), because it is sometimes useful to access a property 48040 * of an autoboxed primitive, such as the length of a string. 48041 **/ 48042 while (intermediateValue != null && index < names.length) { 48043 if (index === names.length - 1) 48044 lookupHit = ( 48045 hasProperty(intermediateValue, names[index]) 48046 || primitiveHasOwnProperty(intermediateValue, names[index]) 48047 ); 48048 48049 intermediateValue = intermediateValue[names[index++]]; 48050 } 48051 } else { 48052 intermediateValue = context.view[name]; 48053 48054 /** 48055 * Only checking against `hasProperty`, which always returns `false` if 48056 * `context.view` is not an object. Deliberately omitting the check 48057 * against `primitiveHasOwnProperty` if dot notation is not used. 48058 * 48059 * Consider this example: 48060 * ``` 48061 * Mustache.render("The length of a football field is {{#length}}{{length}}{{/length}}.", {length: "100 yards"}) 48062 * ``` 48063 * 48064 * If we were to check also against `primitiveHasOwnProperty`, as we do 48065 * in the dot notation case, then render call would return: 48066 * 48067 * "The length of a football field is 9." 48068 * 48069 * rather than the expected: 48070 * 48071 * "The length of a football field is 100 yards." 48072 **/ 48073 lookupHit = hasProperty(context.view, name); 48074 } 48075 48076 if (lookupHit) { 48077 value = intermediateValue; 48078 break; 48079 } 48080 48081 context = context.parent; 48082 } 48083 48084 cache[name] = value; 48085 } 48086 48087 if (isFunction(value)) 48088 value = value.call(this.view); 48089 48090 return value; 48091 }; 48092 48093 /** 48094 * A Writer knows how to take a stream of tokens and render them to a 48095 * string, given a context. It also maintains a cache of templates to 48096 * avoid the need to parse the same template twice. 48097 */ 48098 function Writer () { 48099 this.templateCache = { 48100 _cache: {}, 48101 set: function set (key, value) { 48102 this._cache[key] = value; 48103 }, 48104 get: function get (key) { 48105 return this._cache[key]; 48106 }, 48107 clear: function clear () { 48108 this._cache = {}; 48109 } 48110 }; 48111 } 48112 48113 /** 48114 * Clears all cached templates in this writer. 48115 */ 48116 Writer.prototype.clearCache = function clearCache () { 48117 if (typeof this.templateCache !== 'undefined') { 48118 this.templateCache.clear(); 48119 } 48120 }; 48121 48122 /** 48123 * Parses and caches the given `template` according to the given `tags` or 48124 * `mustache.tags` if `tags` is omitted, and returns the array of tokens 48125 * that is generated from the parse. 48126 */ 48127 Writer.prototype.parse = function parse (template, tags) { 48128 var cache = this.templateCache; 48129 var cacheKey = template + ':' + (tags || mustache.tags).join(':'); 48130 var isCacheEnabled = typeof cache !== 'undefined'; 48131 var tokens = isCacheEnabled ? cache.get(cacheKey) : undefined; 48132 48133 if (tokens == undefined) { 48134 tokens = parseTemplate(template, tags); 48135 isCacheEnabled && cache.set(cacheKey, tokens); 48136 } 48137 return tokens; 48138 }; 48139 48140 /** 48141 * High-level method that is used to render the given `template` with 48142 * the given `view`. 48143 * 48144 * The optional `partials` argument may be an object that contains the 48145 * names and templates of partials that are used in the template. It may 48146 * also be a function that is used to load partial templates on the fly 48147 * that takes a single argument: the name of the partial. 48148 * 48149 * If the optional `config` argument is given here, then it should be an 48150 * object with a `tags` attribute or an `escape` attribute or both. 48151 * If an array is passed, then it will be interpreted the same way as 48152 * a `tags` attribute on a `config` object. 48153 * 48154 * The `tags` attribute of a `config` object must be an array with two 48155 * string values: the opening and closing tags used in the template (e.g. 48156 * [ "<%", "%>" ]). The default is to mustache.tags. 48157 * 48158 * The `escape` attribute of a `config` object must be a function which 48159 * accepts a string as input and outputs a safely escaped string. 48160 * If an `escape` function is not provided, then an HTML-safe string 48161 * escaping function is used as the default. 48162 */ 48163 Writer.prototype.render = function render (template, view, partials, config) { 48164 var tags = this.getConfigTags(config); 48165 var tokens = this.parse(template, tags); 48166 var context = (view instanceof Context) ? view : new Context(view, undefined); 48167 return this.renderTokens(tokens, context, partials, template, config); 48168 }; 48169 48170 /** 48171 * Low-level method that renders the given array of `tokens` using 48172 * the given `context` and `partials`. 48173 * 48174 * Note: The `originalTemplate` is only ever used to extract the portion 48175 * of the original template that was contained in a higher-order section. 48176 * If the template doesn't use higher-order sections, this argument may 48177 * be omitted. 48178 */ 48179 Writer.prototype.renderTokens = function renderTokens (tokens, context, partials, originalTemplate, config) { 48180 var buffer = ''; 48181 48182 var token, symbol, value; 48183 for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) { 48184 value = undefined; 48185 token = tokens[i]; 48186 symbol = token[0]; 48187 48188 if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate, config); 48189 else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate, config); 48190 else if (symbol === '>') value = this.renderPartial(token, context, partials, config); 48191 else if (symbol === '&') value = this.unescapedValue(token, context); 48192 else if (symbol === 'name') value = this.escapedValue(token, context, config); 48193 else if (symbol === 'text') value = this.rawValue(token); 48194 48195 if (value !== undefined) 48196 buffer += value; 48197 } 48198 48199 return buffer; 48200 }; 48201 48202 Writer.prototype.renderSection = function renderSection (token, context, partials, originalTemplate, config) { 48203 var self = this; 48204 var buffer = ''; 48205 var value = context.lookup(token[1]); 48206 48207 // This function is used to render an arbitrary template 48208 // in the current context by higher-order sections. 48209 function subRender (template) { 48210 return self.render(template, context, partials, config); 48211 } 48212 48213 if (!value) return; 48214 48215 if (isArray(value)) { 48216 for (var j = 0, valueLength = value.length; j < valueLength; ++j) { 48217 buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate, config); 48218 } 48219 } else if (typeof value === 'object' || typeof value === 'string' || typeof value === 'number') { 48220 buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate, config); 48221 } else if (isFunction(value)) { 48222 if (typeof originalTemplate !== 'string') 48223 throw new Error('Cannot use higher-order sections without the original template'); 48224 48225 // Extract the portion of the original template that the section contains. 48226 value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender); 48227 48228 if (value != null) 48229 buffer += value; 48230 } else { 48231 buffer += this.renderTokens(token[4], context, partials, originalTemplate, config); 48232 } 48233 return buffer; 48234 }; 48235 48236 Writer.prototype.renderInverted = function renderInverted (token, context, partials, originalTemplate, config) { 48237 var value = context.lookup(token[1]); 48238 48239 // Use JavaScript's definition of falsy. Include empty arrays. 48240 // See https://github.com/janl/mustache.js/issues/186 48241 if (!value || (isArray(value) && value.length === 0)) 48242 return this.renderTokens(token[4], context, partials, originalTemplate, config); 48243 }; 48244 48245 Writer.prototype.indentPartial = function indentPartial (partial, indentation, lineHasNonSpace) { 48246 var filteredIndentation = indentation.replace(/[^ \t]/g, ''); 48247 var partialByNl = partial.split('\n'); 48248 for (var i = 0; i < partialByNl.length; i++) { 48249 if (partialByNl[i].length && (i > 0 || !lineHasNonSpace)) { 48250 partialByNl[i] = filteredIndentation + partialByNl[i]; 48251 } 48252 }
48253 return partialByNl.join('\n'); 48254 }; 48255 48256 Writer.prototype.renderPartial = function renderPartial (token, context, partials, config) { 48257 if (!partials) return; 48258 var tags = this.getConfigTags(config); 48259 48260 var value = isFunction(partials) ? partials(token[1]) : partials[token[1]]; 48261 if (value != null) { 48262 var lineHasNonSpace = token[6]; 48263 var tagIndex = token[5]; 48264 var indentation = token[4]; 48265 var indentedValue = value; 48266 if (tagIndex == 0 && indentation) { 48267 indentedValue = this.indentPartial(value, indentation, lineHasNonSpace); 48268 } 48269 var tokens = this.parse(indentedValue, tags); 48270 return this.renderTokens(tokens, context, partials, indentedValue, config); 48271 } 48272 }; 48273 48274 Writer.prototype.unescapedValue = function unescapedValue (token, context) { 48275 var value = context.lookup(token[1]); 48276 if (value != null) 48277 return value; 48278 }; 48279 48280 Writer.prototype.escapedValue = function escapedValue (token, context, config) { 48281 var escape = this.getConfigEscape(config) || mustache.escape; 48282 var value = context.lookup(token[1]); 48283 if (value != null) 48284 return (typeof value === 'number' && escape === mustache.escape) ? String(value) : escape(value); 48285 }; 48286 48287 Writer.prototype.rawValue = function rawValue (token) { 48288 return token[1]; 48289 }; 48290 48291 Writer.prototype.getConfigTags = function getConfigTags (config) { 48292 if (isArray(config)) { 48293 return config; 48294 } 48295 else if (config && typeof config === 'object') { 48296 return config.tags; 48297 } 48298 else { 48299 return undefined; 48300 } 48301 }; 48302 48303 Writer.prototype.getConfigEscape = function getConfigEscape (config) { 48304 if (config && typeof config === 'object' && !isArray(config)) { 48305 return config.escape; 48306 } 48307 else { 48308 return undefined; 48309 } 48310 }; 48311 48312 var mustache = { 48313 name: 'mustache.js', 48314 version: '4.2.0', 48315 tags: [ '{{', '}}' ], 48316 clearCache: undefined, 48317 escape: undefined, 48318 parse: undefined, 48319 render: undefined, 48320 Scanner: undefined, 48321 Context: undefined, 48322 Writer: undefined, 48323 /** 48324 * Allows a user to override the default caching strategy, by providing an 48325 * object with set, get and clear methods. This can also be used to disable 48326 * the cache by setting it to the literal `undefined`. 48327 */ 48328 set templateCache (cache) { 48329 defaultWriter.templateCache = cache; 48330 }, 48331 /** 48332 * Gets the default or overridden caching object from the default writer. 48333 */ 48334 get templateCache () { 48335 return defaultWriter.templateCache; 48336 } 48337 }; 48338 48339 // All high-level mustache.* functions use this writer. 48340 var defaultWriter = new Writer(); 48341 48342 /** 48343 * Clears all cached templates in the default writer. 48344 */ 48345 mustache.clearCache = function clearCache () { 48346 return defaultWriter.clearCache(); 48347 }; 48348 48349 /** 48350 * Parses and caches the given template in the default writer and returns the 48351 * array of tokens it contains. Doing this ahead of time avoids the need to 48352 * parse templates on the fly as they are rendered. 48353 */ 48354 mustache.parse = function parse (template, tags) { 48355 return defaultWriter.parse(template, tags); 48356 }; 48357 48358 /** 48359 * Renders the `template` with the given `view`, `partials`, and `config` 48360 * using the default writer. 48361 */ 48362 mustache.render = function render (template, view, partials, config) { 48363 if (typeof template !== 'string') { 48364 throw new TypeError('Invalid template! Template should be a "string" ' + 48365 'but "' + typeStr(template) + '" was given as the first ' + 48366 'argument for mustache#render(template, view, partials)'); 48367 } 48368 48369 return defaultWriter.render(template, view, partials, config); 48370 }; 48371 48372 // Export the escaping function so that the user may override it. 48373 // See https://github.com/janl/mustache.js/issues/244 48374 mustache.escape = escapeHtml; 48375 48376 // Export these mainly for testing, but also for advanced usage. 48377 mustache.Scanner = Scanner; 48378 mustache.Context = Context; 48379 mustache.Writer = Writer; 48380 48381 const processMustacheTemplate = (template, scope) => { 48382 return mustache.render(template, scope); 48383 }; 48384 48385 const getUserAttributes = async (formActions) => { 48386 try { 48387 return await request('blaize/profile', { 48388 method: "GET" 48389 }, formActions).then(response => response.json()); 48390 } 48391 catch (error) { 48392 console.error('Failed to fetch user attributes:', error); 48393 return {}; 48394 } 48395 }; 48396 const getSessions = async (formActions) => { 48397 try { 48398 const response = await request('zephr/public/sessions/v1/sessions', { 48399 method: "GET" 48400 }, formActions, null, true); 48401 return await response.json(); 48402 } 48403 catch (error) { 48404 console.error('Failed to fetch sessions:', error); 48405 return []; 48406 } 48407 }; 48408 const getUtmParameters = () => { 48409 const params = new URLSearchParams(window.location.search); 48410 return { 48411 source: params.get('utm_source'), 48412 medium: params.get('utm_medium'), 48413 campaign: params.get('utm_campaign'), 48414 term: params.get('utm_term'), 48415 content: params.get('utm_content') 48416 }; 48417 }; 48418 const initializeSubscriptionScope = async (form, formActions) => { 48419 try { 48420 const [sessions, attributes] = await Promise.all([ 48421 getSessions(formActions), 48422 getUserAttributes(formActions) 48423 ]); 48424 const deviceSession = sessions.find(session => session.requestingSession) || null; 48425 return { 48426 page: { 48427 url: window.location.href, 48428 path: window.location.pathname, 48429 searchParameters: Object.fromEntries(new URLSearchParams(window.location.search)), 48430 utmParameters: getUtmParameters(), 48431 referrer: document.referrer || null 48432 }, 48433 user: { 48434 attributes: attributes, 48435 session: deviceSession ? { 48436 id: deviceSession.id, 48437 tenantId: deviceSession.tenantId, 48438 userId: deviceSession.userId, 48439 deviceName: deviceSession.deviceName, 48440 browser: deviceSession.browser, 48441 startDate: deviceSession.startDate, 48442 ipAddress: deviceSession.ipAddress ?? null, 48443 requestingSession: deviceSession.requestingSession 48444 } : null, 48445 geoLocation: { 48446 city: deviceSession?.city ?? "unknown", 48447 country: deviceSession?.country ?? "unknown", 48448 state: deviceSession?.geoState ?? "unknown", 48449 ipAddress: deviceSession?.ipAddress ?? null 48450 } 48451 }, 48452 form: { 48453 id: form.id, 48454 outcomeId: form.outcomeId, 48455 ruleId: form.ruleId 48456 } 48457 }; 48458 } 48459 catch (error) { 48460 console.error('Failed to initialize subscription scope:', error); 48461 throw error; 48462 } 48463 }; 48464 48465 const publicKeyPath = 'blaize/payment/stripe/publicKey'; 48466 const getStripePublicKey = (formActions) => request(publicKeyPath, { 48467 method: "GET" 48468 }, formActions, null, true) 48469 .then(response => response.text()); 48470 let loadStripePromise, stripe, stripeElement; 48471 const loadStripe = (formActions) => { 48472 if (loadStripePromise) { 48473 return loadStripePromise; 48474 } 48475 return loadStripePromise = new Promise(function (resolve) { 48476 window.stripeLoadCallback = resolve; 48477 }).then(() => getStripePublicKey(formActions)) 48478 .then(publicKey => { stripe = window.Stripe(publicKey); return stripe; }); 48479 }; 48480 const handleStripeFormChecktax = (event, form, formActions) => { 48481 // only check tax if the form is complete 48482 if (!event.complete) { 48483 return; 48484 } 48485 formActions.incrementRequestCount(); 48486 stripe 48487 .createPaymentMethod('card', stripeElement, {}) 48488 .then(({ error, paymentMethod }) => { 48489 if (error || !paymentMethod) { 48490 console.error(`Error requesting payment method ${JSON.stringify(error)}`); 48491 return null; 48492 } 48493 formActions.updateFormState({ 48494 paymentMethodId: paymentMethod.id 48495 }); 48496 return paymentMethod?.billing_details?.address; 48497 }) 48498 .catch((error) => { 48499 console.error(`Error requesting payment method ${JSON.stringify(error)}`); 48500 return null; 48501 }).then((billingAddress) => calculatePrices(form, formActions.updateFormState({ 48502 billingAddress: { 48503 country: billingAddress?.country, 48504 postalCode: billingAddress?.postal_code, 48505 } 48506 }), formActions)) 48507 .catch((error) => { 48508 console.error(`Error requesting payment method ${JSON.stringify(error)}`); 48509 }).finally(() => { 48510 formActions.decrementRequestCount(); 48511 }); 48512 }; 48513 const loadStripeUi = (form, formState, formActions) => { 48514 formActions.incrementRequestCount(); 48515 void loadStripe(formActions).then(() => {
48516 stripeElement = createStripeElement(stripe, form, formActions); 48517 const id = '#stripe-element-' + form.uniqueKey; 48518 stripeElement.mount(id); 48519 stripeElement.addEventListener('change', (event) => { 48520 formActions.updateFormState({ 48521 paymentProviderError: event.error, 48522 paymentFormComplete: event.complete, 48523 serverErrors: [] 48524 }); 48525 if (form.organisationConfiguration.stripeAutomaticTaxEnabled && form.formType !== FormType.LIST_SUBSCRIPTIONS) { 48526 handleStripeFormChecktax(event, form, formActions); 48527 } 48528 }); 48529 stripeElement.addEventListener('ready', () => { 48530 formActions.updateFormState({ 48531 paymentProviderFormLoaded: true, 48532 }); 48533 }); 48534 formActions.decrementRequestCount(); 48535 }).catch(err => { 48536 console.error(err); 48537 formActions.decrementRequestCount(); 48538 }); 48539 }; 48540 const stripePay = (form, formState, formActions) => { 48541 const paymentMethodId = formState.paymentMethodId; 48542 formActions.incrementRequestCount(); 48543 if (paymentMethodId) { 48544 return performPay(form, formState, formActions, paymentMethodId); 48545 } 48546 else { 48547 return stripe.createPaymentMethod('card', stripeElement, {}) 48548 .then(async ({ error, paymentMethod }) => { 48549 if (error || !paymentMethod) { 48550 formActions.decrementRequestCount(); 48551 throw `Error requesting payment method ${JSON.stringify(error)}`; 48552 } 48553 await performPay(form, formState, formActions, paymentMethod.id); 48554 }); 48555 } 48556 }; 48557 const stripeChangePayment = (form, formState, formActions) => { 48558 const paymentMethodId = formState.paymentMethodId; 48559 formActions.incrementRequestCount(); 48560 if (paymentMethodId) { 48561 return performChangePayment(form, formState, formActions, paymentMethodId); 48562 } 48563 else { 48564 return stripe.createPaymentMethod('card', stripeElement, {}) 48565 .then(async ({ error, paymentMethod }) => { 48566 if (error || !paymentMethod) { 48567 formActions.decrementRequestCount(); 48568 throw `Error requesting payment method ${JSON.stringify(error)}`; 48569 } 48570 await request('zephr/payment/stripe/setupIntentSecret', { 48571 method: 'POST', 48572 }, formActions) 48573 .then(async (resp) => { 48574 const json = await resp.json(); 48575 const token = json.clientSecret; 48576 return stripe.confirmCardSetup(token, { 48577 payment_method: { 48578 card: stripeElement, 48579 }, 48580 }); 48581 }).then(async (resp) => { 48582 return performChangePayment(form, formState, formActions, resp.setupIntent.payment_method); 48583 }); 48584 }); 48585 } 48586 }; 48587 const performChangePayment = (form, formState, formActions, paymentMethod) => { 48588 return request('zephr/payment/stripe/updateSubscription', { 48589 method: 'POST', 48590 bodyObject: { 48591 payment_method_id: paymentMethod, 48592 subscription_id: formState.selectedSubscription.externalId, 48593 }, 48594 }, formActions); 48595 }; 48596 const performPay = async (form, formState, formActions, paymentMethod) => { 48597 const subscriptionMetadataRaw = (formConfigAs(form).paymentProviderFormConfig?.subscriptionMetadata || {}); 48598 const subscriptionMetadata = {}; 48599 if (subscriptionMetadataRaw) { 48600 const subscriptionFormScope = await initializeSubscriptionScope(form, formActions); 48601 for (const [key, value] of Object.entries(subscriptionMetadataRaw)) { 48602 subscriptionMetadata[key] = processMustacheTemplate(value, subscriptionFormScope) || ''; 48603 } 48604 } 48605 const hasSubscriptionMetadata = !!Object.keys(subscriptionMetadata).length; 48606 const { url, body, method } = mapToPayRequest(form, formState, paymentProviders.STRIPE, { 48607 payment_method: paymentMethod, 48608 billing_address_provided: !!formState.billingAddress.country, 48609 ...(hasSubscriptionMetadata ? { subscription_metadata: JSON.stringify(subscriptionMetadata) } : {}), 48610 }); 48611 return request(url, { 48612 method, 48613 bodyObject: body 48614 }, formActions) 48615 .then(async (response) => { 48616 if (!response?.ok) { 48617 throw JSON.stringify(response); 48618 } 48619 return response.json(); 48620 }).then(responseJson => { 48621 if (responseJson.grant_id) { 48622 return; 48623 } 48624 if (responseJson.paymentIntentStatus === 'requires_action') { 48625 return stripe.confirmCardPayment(responseJson.clientSecret ?? responseJson.client_secret) 48626 .then(afterConfirmResponse => { 48627 if (afterConfirmResponse.error || !afterConfirmResponse.paymentIntent) { 48628 throw `Error requesting payment method ${JSON.stringify(afterConfirmResponse)}`; 48629 } 48630 if (isOneOffPurchase(formState.paymentOption) && responseJson.payment_intent_id) { 48631 const { url, body, method } = mapToPayRequest(form, formState, paymentProviders.STRIPE, { 48632 payment_method: paymentMethod, 48633 billing_address_provided: !!formState.billingAddress.country, 48634 payment_intent_id: responseJson.payment_intent_id, 48635 ...(hasSubscriptionMetadata ? { subscription_metadata: JSON.stringify(subscriptionMetadata) } : {}), 48636 }); 48637 return request(url, { 48638 method, 48639 bodyObject: body 48640 }, formActions).then(response => { 48641 if (response?.ok) { 48642 return; 48643 } 48644 throw response; 48645 }); 48646 } 48647 else { 48648 return request('blaize/payment/stripe/subscription/confirmation', { 48649 method: 'POST', 48650 bodyObject: { 48651 subscriptionId: responseJson.subscriptionId 48652 } 48653 }, formActions) 48654 .then(response => { 48655 if (response?.ok) { 48656 return; 48657 } 48658 throw response; 48659 }); 48660 } 48661 }); 48662 } 48663 throw JSON.stringify(responseJson); 48664 }).catch((err) => { 48665 console.error(err); 48666 // TODO 48667 throw err; 48668 }).finally(() => { 48669 formActions.decrementRequestCount(); 48670 }); 48671 }; 48672 48673 /** 48674 * See https://stripe.com/docs/stripe-js/elements/payment-request-button 48675 */ 48676 const loadGooglePay = new Promise(function (resolve) { 48677 window.googlePayLoadStripeCallback = resolve; 48678 }); 48679 const configureStripeMobilePay = async (form, formState, formActions) => { 48680 const stripeMobilePaymentConfig = JSON.parse(form.organisationConfiguration?.stripeMobilePaymentConfig ?? "{}"); 48681 const container = document.getElementById('stripe-mobile-pay-button'); 48682 // No need to show the user any errors here just hide the button 48683 if (!stripeMobilePaymentConfig?.google && !stripeMobilePaymentConfig?.apple) { 48684 container.style.display = 'none'; 48685 console.error("Stripe Mobile payments are not configured in the console"); 48686 return; 48687 } 48688 return loadGooglePay 48689 .then(async () => await loadStripe(formActions)) 48690 .then(stripe => { 48691 formState = formActions.getFormState(); 48692 const currencyMultiplier = isZeroDecimalCurrency(formState.paymentOption.currencyCode.toUpperCase()) ? 1 : 100; 48693 const paymentLabels = { 48694 country: stripeMobilePaymentConfig.google?.countryCode ?? stripeMobilePaymentConfig.apple?.countryCode, 48695 currency: formState.paymentOption.currencyCode.toLowerCase(), 48696 total: { 48697 label: formState.paymentOption.label, 48698 amount: parseFloat((formState.paymentOptionPrices.totalPrice * currencyMultiplier).toFixed(2)), 48699 },
48700 requestPayerName: true 48701 }; 48702 const paymentRequest = stripe.paymentRequest(paymentLabels); 48703 const elements = stripe.elements(); 48704 const paymentButton = elements.create('paymentRequestButton', { 48705 paymentRequest: paymentRequest, 48706 }); 48707 paymentRequest.canMakePayment().then(result => { 48708 if (!result || (!result.googlePay && !result.applePay)) { 48709 // Not an error - Google Pay or Apple Pay are not supported here 48710 console.warn("Cannot make mobile payments on this browser", result); 48711 container.style.display = 'none'; 48712 return; 48713 } 48714 paymentButton.mount('#stripe-mobile-pay-button'); 48715 paymentRequest.on('paymentmethod', (ev) => { 48716 void onClickPaymentButton(formState, formActions, stripe, ev, result, form); 48717 }); 48718 }); 48719 }).catch(err => { 48720 console.error(err); 48721 formActions.updateFormState({ 48722 serverErrors: [ServerError.UNKNOWN] 48723 }); 48724 logDataLayerEvent(form, 'zephr_form_error', { 48725 error: ServerError[ServerError.UNKNOWN], 48726 }); 48727 }); 48728 }; 48729 const onClickPaymentButton = async (formState, formActions, stripe, ev, mobilePaymentType, form) => { 48730 if (mobilePaymentType.googlePay) { 48731 formActions.updateFormState({ 48732 mobilePaymentService: MobilePaymentService.GOOGLE_PAY, 48733 serverErrors: [], 48734 }); 48735 } 48736 else if (mobilePaymentType.applePay) { 48737 formActions.updateFormState({ 48738 mobilePaymentService: MobilePaymentService.APPLE_PAY, 48739 serverErrors: [], 48740 }); 48741 } 48742 if (!ev) { 48743 ev.complete('fail'); 48744 formActions.updateFormState({ 48745 serverErrors: [ServerError.MOBILE_PAYMENT_PROCESSING_ERROR] 48746 }); 48747 logDataLayerEvent(form, 'zephr_form_error', { 48748 error: ServerError[ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 48749 }); 48750 return; 48751 } 48752 const billingAddress = ev.paymentMethod.billing_details.address; 48753 if (form.organisationConfiguration.stripeAutomaticTaxEnabled) { 48754 formState = await (calculatePrices(form, formActions.updateFormState({ 48755 billingAddress: { 48756 country: billingAddress.country, 48757 postalCode: billingAddress.postal_code, 48758 } 48759 }), formActions)); 48760 } 48761 formState = formActions.updateFormState({ 48762 paymentMethodId: ev.paymentMethod.id 48763 }); 48764 ev.complete('success'); 48765 if (formState.paymentOptionPrices.taxPrice || !formState.canAttemptSectionCompletion) { 48766 const elementId = formState.elementValidity.find((e) => !e.isValid && e.elementType != 'payment')?.elementId; 48767 const element = elementId ? document.getElementById(`zephr-form-${elementId}`) : document.getElementsByClassName('zephr-form-button')[0]; 48768 element?.scrollIntoView({ 48769 block: "center", 48770 }); 48771 } 48772 else { 48773 formActions.completeSection(); 48774 } 48775 }; 48776 48777 const calculateBraintreeStripePrice = (form, formState, _) => { 48778 const addons = addonsForPlan(formState); 48779 const paymentOption = formConfigAs(form).paymentOptions.find(opt => opt.productId == formState.paymentOption.productId && opt.slug == formState.paymentOption.slug); 48780 const planPrice = paymentOption.price; 48781 const priceAfterPromoCode = formState.discountedPlanPrices.find(discount => discount.planSlug === formState.paymentOption.slug && discount.productId === formState.paymentOption.productId) 48782 ?.discountPrice; 48783 let finalPrice = priceAfterPromoCode ?? planPrice; 48784 let discountTotal = planPrice - finalPrice; 48785 // For Braintree only, we apply discounts on top of any promo code discounts 48786 if (form.organisationConfiguration.paymentProvider === 'braintree' && 48787 paymentOption.discounts && 48788 paymentOption.discounts.length > 0) { 48789 const totalBuiltInDiscount = paymentOption.discounts.reduce((sum, discount) => { 48790 return sum + (discount.amount || 0); 48791 }, 0); 48792 finalPrice = Math.max(0, finalPrice - totalBuiltInDiscount); 48793 discountTotal = planPrice - finalPrice; 48794 }
48795 const total = addons.reduce((total, addon) => total + addon.addonPrice, finalPrice); 48796 return Promise.resolve({ 48797 slug: formState.paymentOption.slug, 48798 productId: formState.paymentOption.productId, 48799 promoCode: formState.promoCode, 48800 addonPrices: addons, 48801 billingAddress: formState.billingAddress, 48802 totalPrice: total, 48803 totalPriceFormattedString: formatCurrency(total, formState.paymentOption.currencyCode), 48804 netPrice: planPrice, 48805 netPriceFormattedString: formatCurrency(planPrice, formState.paymentOption.currencyCode), 48806 discountPrice: discountTotal, 48807 discountPriceFormattedPrice: formatCurrency(discountTotal, formState.paymentOption.currencyCode), 48808 chargeItems: [] 48809 }); 48810 }; 48811 48812 const getRelevantCurrency = (form, formState) => { 48813 const formConfig = formConfigAs(form); 48814 if (formConfig.dynamicOffer?.id) { 48815 return formState.paymentOption?.currencyCode; 48816 } 48817 return formConfigAs(form).formCurrency ?? formState.paymentOption?.currencyCode; 48818 }; 48819 48820 const getPaymentFormNumber = (form, formState) => { 48821 const paymentConfig = formConfigAs(form); 48822 if (paymentConfig.changeSubscriptionMode) { 48823 return getChangeSubscriptionPaymentConfiguration(form, formState).paymentFormNumber; 48824 } 48825 return paymentConfig.paymentProviderFormConfig?.paymentFormNumber ?? undefined; 48826 }; 48827 const loadZuoraDynamicFormKey = async (_, formActions) => { 48828 const response = await request("zephr/public/payment/v1/billing/publishable-key", { method: "GET", }, formActions); 48829 return (await response.json())?.message; 48830 }; 48831 // Helper to cast custom field values to appropriate types 48832 const castCustomFieldValue$1 = (value, type) => { 48833 const trimmedValue = value.trim(); 48834 try { 48835 switch (type.toUpperCase()) { 48836 case 'INTEGER': { 48837 const intVal = parseInt(trimmedValue, 10); 48838 if (isNaN(intVal)) 48839 throw new Error(); 48840 return intVal; 48841 } 48842 case 'NUMBER': { 48843 const floatVal = parseFloat(trimmedValue); 48844 if (isNaN(floatVal)) 48845 throw new Error(); 48846 return floatVal; 48847 } 48848 case 'BOOLEAN': 48849 return trimmedValue.toLowerCase() === 'true'; 48850 case 'TEXT': 48851 case 'LONGTEXT': 48852 case 'PICKLIST': 48853 default: 48854 return trimmedValue.toString(); 48855 } 48856 } 48857 catch (e) { 48858 console.warn(`Error casting custom field value "${trimmedValue}" to type ${type}`); 48859 return null; 48860 } 48861 }; 48862 const createPaymentSession = async (form, formActions, context, operation) => { 48863 if (formActions.getFormState().isBusy) { 48864 console.warn('Form is busy - ignoring payment request'); 48865 return; 48866 } 48867 formActions.updateFormState({ 48868 serverErrors: [], 48869 paymentProviderFormBusy: true 48870 }); 48871 formActions.incrementRequestCount(); 48872 try { 48873 const formConfig = formConfigAs(form); 48874 const formState = formActions.getFormState(); 48875 const response = await request('zephr/public/payment/v1/billing/payment-sessions', { 48876 method: "POST", 48877 bodyObject: { 48878 currency: getRelevantCurrency(form, formState) || formState.existingSubscriptions?.[0]?.currency, 48879 amount: formState.paymentOptionPrices?.totalPrice || 0.01, 48880 paymentMethodType: context?.paymentMethodType, 48881 // Only include country if it's configured and has a value 48882 ...(formConfig.countryLabel && formState.billingCountry && { 48883 country: formState.billingCountry 48884 }), 48885 // Only include state if it's configured, has a value, and country is US/CA 48886 ...(formConfig.stateLabel && formState.billingState && (formState.billingCountry === "US" || 48887 formState.billingCountry === "CA") && { 48888 state: formState.billingState 48889 }), 48890 operation: operation, 48891 ...(formState.pfToken && { 48892 pfToken: formState.pfToken 48893 }) 48894 } 48895 }, formActions); 48896 if (response.ok) { 48897 return (await response.json())?.token; 48898 } 48899 else { 48900 console.error("Error occurred while creating payment session.", response); 48901 formActions.updateFormState({ 48902 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR], 48903 paymentProviderFormBusy: false 48904 }); 48905 logDataLayerEvent(form, 'zephr_form_error', { 48906 error: ServerError[ServerError.PAYMENT_PROCESSING_ERROR], 48907 }); 48908 } 48909 } 48910 catch (error) { 48911 console.error("Error occurred while creating payment session.", error); 48912 formActions.updateFormState({ 48913 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR], 48914 paymentProviderFormBusy: false 48915 }); 48916 logDataLayerEvent(form, 'zephr_form_error', { 48917 error: ServerError[ServerError.PAYMENT_PROCESSING_ERROR], 48918 }); 48919 } 48920 }; 48921 const onComplete = async (form, formActions, result) => { 48922 if (!result?.success || !result.paymentMethodId) { 48923 formActions.decrementRequestCount(); 48924 console.warn('Non-success payment result', result); 48925 formActions.updateFormState({ 48926 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR], 48927 paymentProviderFormBusy: false 48928 }); 48929 logDataLayerEvent(form, 'zephr_form_error', { 48930 error: ServerError[ServerError.PAYMENT_PROCESSING_ERROR], 48931 }); 48932 return; 48933 } 48934 const currentFormState = formActions.getFormState(); 48935 const isPaymentMethodSetupMode = formConfigAs(form).changeSubscriptionMode && currentFormState.requiresPaymentMethodSetup === true; 48936 if (isPaymentMethodSetupMode) { 48937 formActions.updateFormState({ 48938 paymentMethodSetupComplete: true, 48939 requiresPaymentMethodSetup: false, 48940 }); 48941 } 48942 if (form.formType === FormType.LIST_SUBSCRIPTIONS || form.formType === FormType.LIST_GIFT_SUBSCRIPTIONS_SENT) { 48943 formActions.updateFormState({ 48944 paymentFormComplete: true, 48945 paymentProviderVendorFields: { 48946 detail: JSON.stringify({ 48947 creditCardCountry: result.creditCardCountry, 48948 creditCardState: result.creditCardState, 48949 refId: result.paymentMethodId, 48950 email: currentFormState.emailAddress, 48951 paymentId: result?.paymentId, 48952 paymentMethodId: result?.paymentMethodId, 48953 }), 48954 } 48955 }); 48956 } 48957 else { 48958 // Get the autoRenew value based on payment option configuration 48959 const autoRenewConfig = currentFormState.paymentOption.autoRenewConfig; 48960 let autoRenewValue; 48961 if (autoRenewConfig === 'auto_renew') { 48962 autoRenewValue = true; 48963 } 48964 else if (autoRenewConfig === 'no_auto_renew') { 48965 autoRenewValue = false;
48966 } 48967 else if (autoRenewConfig === 'custom_toggle') { 48968 // Use user's choice from the toggle 48969 const paymentOptionKey = `${currentFormState.paymentOption.productId}-${currentFormState.paymentOption.slug}`; 48970 autoRenewValue = currentFormState.paymentOptionAutoRenew?.[paymentOptionKey] ?? false; 48971 } 48972 else { 48973 // Default behavior for legacy payment options without configuration 48974 autoRenewValue = true; 48975 } 48976 // Process subscription custom fields if any 48977 const rawCustomFields = formConfigAs(form).paymentProviderFormConfig?.subscriptionCustomFields || []; 48978 const subscriptionCustomFields = {}; 48979 if (rawCustomFields?.length) { 48980 const subscriptionFormScope = await initializeSubscriptionScope(form, formActions); 48981 for (const field of rawCustomFields) { 48982 const processedTemplate = processMustacheTemplate(field.value, subscriptionFormScope) || ''; 48983 subscriptionCustomFields[field.name] = castCustomFieldValue$1(processedTemplate, field.type); 48984 } 48985 } 48986 const hasCustomFields = !!Object.keys(subscriptionCustomFields).length; 48987 formActions.updateFormState({ 48988 paymentFormComplete: true, 48989 paymentProviderVendorFields: { 48990 currency: getRelevantCurrency(form, currentFormState), 48991 detail: JSON.stringify({ 48992 creditCardCountry: result.creditCardCountry, 48993 creditCardState: result.creditCardState, 48994 refId: result.paymentMethodId, 48995 email: currentFormState.emailAddress, 48996 paymentId: result?.paymentId, 48997 paymentMethodId: result?.paymentMethodId, 48998 }), 48999 ...(currentFormState.dynamicOfferResult ? { dynamicOfferResult: JSON.stringify(currentFormState.dynamicOfferResult) } : {}), 49000 ...(currentFormState.paymentOption?.terms ? { 49001 terms: JSON.stringify({ 49002 ...currentFormState.paymentOption.terms, 49003 autoRenew: autoRenewValue 49004 }) 49005 } : {}), 49006 ...(currentFormState.paymentOption?.termsAndConditions ? { 49007 termsAndConditions: JSON.stringify({ 49008 ...currentFormState.paymentOption.termsAndConditions, 49009 autoRenew: autoRenewValue 49010 }) 49011 } : {}), 49012 ...(currentFormState.paymentOption?.triggerOffsets ? { triggerOffsets: JSON.stringify(currentFormState.paymentOption.triggerOffsets) } : {}), 49013 ...(currentFormState.paymentOption?.changeSubscriptionTriggerOffsets ? { changeSubscriptionTriggerOffsets: JSON.stringify(currentFormState.paymentOption.changeSubscriptionTriggerOffsets) } : {}), 49014 ...(hasCustomFields ? { subscriptionCustomFields: JSON.stringify(subscriptionCustomFields) } : {}) 49015 } 49016 }); 49017 } 49018 formActions.decrementRequestCount(); 49019 formActions.completeSection(); 49020 }; 49021 const loadZuoraDynamicFormUi = async (form, formState, formActions, publishableKey, operation) => { 49022 const state = formState.paymentOption && await calculatePrices(form, formState, formActions); 49023 const [locale, region] = (navigator.language ?? '').split('-'); 49024 const paymentConfig = formConfigAs(form); 49025 const requestCountry = paymentConfig?.requestCountry; 49026 const isValidCountry = requestCountry && requestCountry.toLowerCase() !== 'unknown'; 49027 const configuration = { 49028 locale: locale || "en", 49029 region: (isValidCountry ? requestCountry : region) || 'US', 49030 currency: getRelevantCurrency(form, formState) || formState.existingSubscriptions?.[0]?.currency, 49031 amount: `${state?.paymentOptionPrices?.totalPrice ?? '0.00'}`, 49032 profile: getPaymentFormNumber(form, formState), 49033 createPaymentSession: (context) => createPaymentSession(form, formActions, context, operation), 49034 onComplete: (result) => onComplete(form, formActions, result), 49035 }; 49036 // Render form 49037 const zuora = window.Zuora(publishableKey); 49038 const paymentForm = await zuora.createPaymentForm(configuration); 49039 paymentForm.mount("#zuora_payment"); 49040 formActions.updateFormState({ 49041 paymentProviderFormLoaded: true, 49042 }); 49043 }; 49044 49045 let zuoraLoadPromise; 49046 const loadZuora = () => { 49047 if (zuoraLoadPromise != null) { 49048 return zuoraLoadPromise; 49049 } 49050 return zuoraLoadPromise = new Promise(function (resolve) { 49051 window.zuoraLoadCallback = resolve; 49052 }); 49053 }; 49054 const isDynamicForm = (form, formState) => { 49055 const paymentConfig = formConfigAs(form); 49056 if (paymentConfig.changeSubscriptionMode && formState) { 49057 return getChangeSubscriptionPaymentConfiguration(form, formState).useDynamicForm; 49058 } 49059 return paymentConfig.paymentProviderFormConfig?.useDynamicForm; 49060 }; 49061 /** 49062 * Determines the autoRenew value based on payment option configuration 49063 */ 49064 const getAutoRenewValue = (formState) => { 49065 const autoRenewConfig = formState.paymentOption.autoRenewConfig; 49066 if (autoRenewConfig === 'auto_renew') { 49067 return true; 49068 } 49069 else if (autoRenewConfig === 'no_auto_renew') { 49070 return false;
49071 } 49072 else if (autoRenewConfig === 'custom_toggle') { 49073 // Use user's choice from the toggle 49074 const paymentOptionKey = `${formState.paymentOption.productId}-${formState.paymentOption.slug}`; 49075 return formState.paymentOptionAutoRenew?.[paymentOptionKey] ?? false; 49076 } 49077 else { 49078 // Default behavior for legacy payment options without configuration 49079 return true; 49080 } 49081 }; 49082 const loadZuoraFormConfiguration = (form, formActions) => { 49083 const formState = formActions.getFormState(); 49084 if (isDynamicForm(form, formState)) { 49085 return loadZuoraDynamicFormKey(form, formActions); 49086 } 49087 // Get configuration based on form type 49088 const paymentConfig = formConfigAs(form); 49089 let hostedPageConfig; 49090 if (paymentConfig.changeSubscriptionMode) { 49091 hostedPageConfig = getChangeSubscriptionPaymentConfiguration(form, formState); 49092 } 49093 else { 49094 // Use regular payment provider configuration 49095 hostedPageConfig = paymentConfig.paymentProviderFormConfig; 49096 } 49097 if (!hostedPageConfig) { 49098 throw new Error('No hosted page configuration found for payment provider'); 49099 } 49100 return request("plugins/public/zuora-billing/payment-form-token", { 49101 method: "POST", 49102 bodyObject: { 49103 hostedPageId: hostedPageConfig.hostedPageId, 49104 hostedPageUrl: hostedPageConfig.hostedPageUrl, 49105 } 49106 }, formActions).then((response) => response.json()); 49107 }; 49108 const loadZuoraUi = (form, formState, formActions) => { 49109 // Check if we're in payment method setup mode for Change Subscription 49110 const isPaymentMethodSetupMode = formConfigAs(form).changeSubscriptionMode && 49111 formState.requiresPaymentMethodSetup === true; 49112 // Don't show card form if changing a Zuora subscription (unless in payment method setup mode) 49113 if (formConfigAs(form).changeSubscriptionMode && !isPaymentMethodSetupMode) { 49114 formActions.updateFormState({ 49115 paymentFormComplete: true, 49116 }); 49117 return; 49118 } 49119 if (form.formType === FormType.LIST_SUBSCRIPTIONS || form.formType === FormType.LIST_GIFT_SUBSCRIPTIONS_SENT || isPaymentMethodSetupMode) { 49120 void loadZuora() 49121 .then(() => loadZuoraFormConfiguration(form, formActions)) 49122 .then(formToken => { 49123 if (isDynamicForm(form, formState)) { 49124 return loadZuoraDynamicFormUi(form, formState, formActions, formToken, 2); 49125 } 49126 const formConfiguration = { 49127 tenantId: formToken.tenantId, 49128 token: formToken.token, 49129 signature: formToken.signature, 49130 key: formToken.key, 49131 id: formToken.id, 49132 url: formToken.url, 49133 style: 'inline', 49134 submitEnabled: true, 49135 }; 49136 const prePopulatedFields = { 49137 email: formState.emailAddress, 49138 }; 49139 window.Z.setEventHandler("onloadCallback", () => { 49140 formActions.updateFormState({ 49141 paymentProviderFormLoaded: true, 49142 }); 49143 }); 49144 window.Z.render(formConfiguration, prePopulatedFields, (event) => { 49145 if (event.success !== "true") { 49146 console.error("Payment failed", event); 49147 formActions.updateFormState({ 49148 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR] 49149 }); 49150 logDataLayerEvent(form, 'zephr_form_error', { 49151 error: ServerError[ServerError.PAYMENT_PROCESSING_ERROR], 49152 }); 49153 return; 49154 } 49155 // Handle payment method setup completion for Change Subscription forms 49156 const isPaymentMethodSetupMode = formConfigAs(form).changeSubscriptionMode && 49157 formState.requiresPaymentMethodSetup === true; 49158 if (isPaymentMethodSetupMode) { 49159 formActions.updateFormState({ 49160 paymentFormComplete: true, 49161 paymentMethodSetupComplete: true, 49162 requiresPaymentMethodSetup: false, 49163 paymentProviderVendorFields: { 49164 detail: JSON.stringify({ 49165 creditCardCountry: event.credit
49165CardCountry, 49166 creditCardState: event.creditCardState, 49167 refId: event.refId, 49168 email: event.email, 49169 }), 49170 } 49171 }); 49172 } 49173 else { 49174 formActions.updateFormState({ 49175 paymentFormComplete: true, 49176 paymentProviderVendorFields: { 49177 detail: JSON.stringify({ 49178 creditCardCountry: event.creditCardCountry, 49179 creditCardState: event.creditCardState, 49180 refId: event.refId, 49181 email: event.email, 49182 }), 49183 } 49184 }); 49185 } 49186 formActions.completeSection(); 49187 }); 49188 }); 49189 } 49190 else { 49191 void loadZuora() 49192 .then(() => loadZuoraFormConfiguration(form, formActions)) 49193 .then(formToken => { 49194 if (!getRelevantCurrency(form, formState)) { 49195 formActions.updateFormState({ 49196 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR] 49197 }); 49198 console.error("Form currency not set"); 49199 logDataLayerEvent(form, 'zephr_form_error', { 49200 error: ServerError[ServerError.PAYMENT_PROCESSING_ERROR], 49201 }); 49202 return; 49203 } 49204 if (isDynamicForm(form, formState)) { 49205 return loadZuoraDynamicFormUi(form, formState, formActions, formToken, 1); 49206 } 49207 const formConfiguration = { 49208 tenantId: formToken.tenantId, 49209 token: formToken.token, 49210 signature: formToken.signature, 49211 key: formToken.key, 49212 id: formToken.id, 49213 url: formToken.url, 49214 style: 'inline', 49215 submitEnabled: true, 49216 }; 49217 const prePopulatedFields = { 49218 email: formState.emailAddress, 49219 }; 49220 window.Z.setEventHandler("onloadCallback", () => { 49221 formActions.updateFormState({ 49222 paymentProviderFormLoaded: true, 49223 }); 49224 }); 49225 window.Z.render(formConfiguration, prePopulatedFields, (event) => { 49226 if (event.success !== "true") { 49227 console.error("Payment failed", event); 49228 formActions.updateFormState({ 49229 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR] 49230 }); 49231 logDataLayerEvent(form, 'zephr_form_error', { 49232 error: ServerError[ServerError.PAYMENT_PROCESSING_ERROR], 49233 }); 49234 return; 49235 } 49236 const currentFormState = formActions.getFormState(); 49237 const autoRenewValue = getAutoRenewValue(currentFormState); 49238 formActions.updateFormState({ 49239 paymentFormComplete: true, 49240 paymentProviderVendorFields: { 49241 currency: getRelevantCurrency(form, currentFormState), 49242 detail: JSON.stringify({ 49243 creditCardCountry: event.creditCardCountry, 49244 creditCardState: event.creditCardState, 49245 refId: event.refId, 49246 email: event.email, 49247 }), 49248 ...(currentFormState.dynamicOfferResult ? { dynamicOfferResult: JSON.stringify(currentFormState.dynamicOfferResult) } : {}), 49249 ...(currentFormState.paymentOption?.terms ? { 49250 terms: JSON.stringify({ 49251 ...currentFormState.paymentOption.terms, 49252 autoRenew: autoRenewValue 49253 }) 49254 } : {}), 49255 ...(currentFormState.paymentOption?.termsAndConditions ? {
49256 termsAndConditions: JSON.stringify({ 49257 ...currentFormState.paymentOption.termsAndConditions, 49258 autoRenew: autoRenewValue 49259 }) 49260 } : {}), 49261 ...(currentFormState.paymentOption?.triggerOffsets ? { triggerOffsets: JSON.stringify(currentFormState.paymentOption.triggerOffsets) } : {}), 49262 ...(currentFormState.paymentOption?.changeSubscriptionTriggerOffsets ? { changeSubscriptionTriggerOffsets: JSON.stringify(currentFormState.paymentOption.changeSubscriptionTriggerOffsets) } : {}), 49263 } 49264 }); 49265 formActions.completeSection(); 49266 }); 49267 }); 49268 } 49269 }; 49270 // TODO: Remove the ability to add MULTISELECT fields in the Console (Filter it out from the listBillingCustomFields endpoint) 49271 const castCustomFieldValue = (value, type) => { 49272 const trimmedValue = value.trim(); 49273 try { 49274 switch (type.toUpperCase()) { 49275 case 'INTEGER': { 49276 const intVal = parseInt(trimmedValue, 10); 49277 if (isNaN(intVal)) 49278 throw new Error(); 49279 return intVal; 49280 } 49281 case 'NUMBER': { 49282 const floatVal = parseFloat(trimmedValue); 49283 if (isNaN(floatVal)) 49284 throw new Error(); 49285 return floatVal; 49286 } 49287 case 'BOOLEAN': 49288 return trimmedValue.toLowerCase() === 'true'; 49289 case 'TEXT': 49290 case 'LONGTEXT': 49291 case 'PICKLIST': 49292 default: 49293 return trimmedValue.toString(); 49294 } 49295 } 49296 catch (e) { 49297 console.warn(`Error casting custom field value "${trimmedValue}" to type ${type}`); 49298 return null; 49299 } 49300 }; 49301 const zuoraComplete = async (form, formState, formActions) => { 49302 const typeConfiguration = formConfigAs(form); 49303 const requires_address = typeConfiguration.requires_address; 49304 const isChangeSubscriptionMode = formConfigAs(form).changeSubscriptionMode; 49305 formActions.incrementRequestCount(); 49306 try { 49307 if (!isChangeSubscriptionMode && !formState.paymentProviderVendorFields) { 49308 console.error("Flow error - no Zuora vendor fields found"); 49309 formActions.updateFormState({ 49310 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR] 49311 }); 49312 logDataLayerEvent(form, 'zephr_form_error', { 49313 error: ServerError[ServerError.PAYMENT_PROCESSING_ERROR], 49314 }); 49315 return Promise.resolve(); 49316 } 49317 const rawCustomFields = formConfigAs(form).paymentProviderFormConfig?.subscriptionCustomFields || []; 49318 const subscriptionCustomFields = {}; 49319 if (rawCustomFields?.length) { 49320 const subscriptionFormScope = await initializeSubscriptionScope(form, formActions); 49321 for (const field of rawCustomFields) { 49322 const processedTemplate = processMustacheTemplate(field.value, subscriptionFormScope) || ''; 49323 subscriptionCustomFields[field.name] = castCustomFieldValue(processedTemplate, field.type); 49324 } 49325 } 49326 const hasCustomFields = !!Object.keys(subscriptionCustomFields).length; 49327 // For changeSubscriptionMode, create vendor fields from termsAndConditions 49328 let vendorFields; 49329 if (isChangeSubscriptionMode && formState.paymentOption?.termsAndConditions) { 49330 const autoRenewValue = getAutoRenewValue(formState); 49331 const changingFromSubscription = formState 49332 .validChangeFromPlans 49333 .find(plan => formState.paymentOption.slug === plan.planSlug && formState.paymentOption.productId === plan.productId) 49334 ?.changesFromSubscription; 49335 vendorFields = { 49336 currency: formState.paymentOption.currencyCode, 49337 detail: JSON.stringify({ 49338 refId: changingFromSubscription?.externalId || '', 49339 email: formState.emailAddress || '' 49340 }), 49341 termsAndConditions: JSON.stringify({ 49342 ...formState.paymentOption.termsAndConditions, 49343 autoRenew: autoRenewValue 49344 }), 49345 ...(hasCustomFields ? { subscriptionCustomFields: JSON.stringify(subscriptionCustomFields) } : {}) 49346 }; 49347 } 49348 else if (formState.convertCancelSubscriptionToAcceptOffer) { 49349 const changingFromSubscription = formState 49350 .validChangeFromPlans 49351 .find(plan => formState.paymentOption.slug === plan.planSlug && formState.paymentOption.productId === plan.productId) 49352 ?.changesFromSubscription; 49353 vendorFields = { 49354 currency: formState.paymentOption.currencyCode, 49355 detail: JSON.stringify({ 49356 refId: changingFromSubscription?.externalId || '', 49357 email: formState.emailAddress || '' 49358 }), 49359 ...(hasCustomFields ? { subscriptionCustomFields: JSON.stringify(subscriptionCustomFields) } : {}) 49360 }; 49361 } 49362 else { 49363 vendorFields = { 49364 ...formState.paymentProviderVendorFields, 49365 ...(hasCustomFields ? { subscriptionCustomFields: JSON.stringify(subscriptionCustomFields) } : {}) 49366 }; 49367 } 49368 const { url, body, method } = mapToPayRequest(form, formState, paymentProviders.ZUORA, vendorFields); 49369 if (form.formType === FormType.GIFT_SUBSCRIPTION) { 49370 const giftBody = { 49371 ...body, // Includes attributes mapped by mapToPayRequest 49372 plan_id: `zuora-billing_product_rate_plan-${body.plan_id}-unused`, 49373 discount_code: formState.promoCodeValid ? formState.promoCode : undefined, 49374 vendor_fields: { 49375 ...(body.vendor_fields || {}), 49376 // Only include giftDetails if isGiftForm is true (defaults to true if no gift toggle elements are present) 49377 ...(formState.isGiftForm ? { 49378 giftDetails: JSON.stringify({ 49379 recipient_email: formState.giftRecipient.email, 49380 firstName: formState.giftRecipient.firstName, 49381 lastName: formState.giftRecipient.lastName, 49382 message: formState.giftRecipient.customMessage, 49383 ...(requires_address ? { 49384 recipient_address: { 49385 addressLine1: formState.giftRecipient.recipientAddress?.addressLine1 || '', 49386 addressLine2: formState.giftRecipient.recipientAddress?.addressLine2 || '', 49387 city: formState.giftRecipient.recipientAddress?.city || '', 49388 state: formState.giftRecipient.recipientAddress?.state || '', 49389 country: formState.giftRecipient.recipientAddress?.country || '', 49390 postalCode: formState.giftRecipient.recipientAddress?.postalCode || '', 49391 } 49392 } : {}), 49393 ...(formState.giftRecipient.futureDeliveryEnabled && formState.giftRecipient.futureDeliveryDate ? { 49394 startDate: formState.giftRecipient.futureDeliveryDate 49395 } : {}) 49396 }) 49397 } : {}) 49398 } 49399 }; 49400 const giftResponse = await request('zephr/subscribe', { 49401 method: 'POST', 49402 bodyObject: { 49403 ...giftBody, 49404 ...(formState.pfToken ? { pf_token: formState.pfToken } : {}) 49405 } 49406 }, formActions); 49407 if (!giftResponse?.ok) { 49408 console.error("Error creating gift subscription", giftResponse); 49409 formActions.updateFormState({ 49410 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR] 49411 }); 49412 return Promise.reject(); 49413 } 49414 return Promise.resolve(); 49415 } 49416 else { 49417 // Regular flow for non-gift subscriptions 49418 const modifiedBody = formConfigAs(form).changeSubscriptionMode ? body : { 49419 ...body, 49420 // eslint-disable-next-line @typescript-eslint/restrict-template-expressions 49421 plan_id: `zuora-billing_product_rate_plan-${body.plan_id}-unused`, 49422 }; 49423 return await request(url, { 49424 method, 49425 bodyObject: { 49426 ...modifiedBody, 49427 ...(url === 'zephr/subscribe' && formState.pfToken ? { pf_token: formState.pfToken } : {}) 49428 } 49429 }, formActions).then(response => { 49430 if (!response?.ok) { 49431 void response.json().then(json => { 49432 console.error("Error when subscribing", json); 49433 }); 49434 return Promise.reject(); 49435 } 49436 }); 49437 } 49438 } 49439 finally { 49440 formActions.decrementRequestCount(); 49441 formActions.updateFormState({ 49442 paymentProviderFormBusy: false 49443 }); 49444 } 49445 }; 49446 const zuoraChangePayment = (form, formState, formActions) => { 49447 console.log(formState.paymentProviderVendorFields); 49448 const paymentMethodId = JSON.parse(formState.paymentProviderVendorFields?.detail).refId; 49449 return request('plugins/public/zuora-billing/update-account', { 49450 method: 'POST', 49451 bodyObject: { 49452 paymentMethodId, 49453 } 49454 }, formActions).then(response => { 49455 if (!response?.ok) { 49456 console.error("Error when changing default payment method", response); 49457 return Promise.reject(); 49458 } 49459 }); 49460 }; 49461 49462 const getDynamicOffer = async (form, formActions) => { 49463 const dynamicOfferId = formConfigAs(form).dynamicOffer?.id; 49464 const dynamicOfferPreview = formConfigAs(form).dynamicOfferPreview; 49465 if (form.environment.previewMode) { 49466 formActions.updateFormState({ dynamicOfferResult: dynamicOfferPreview }); 49467 return; 49468 } 49469 let session; 49470 let jwt; 49471 try { 49472 session = document.cookie.match(/blaize_session=[0-9a-z-]+/)[0].substring(15); 49473 } 49474 catch { 49475 session = null; 49476 } 49477 try { 49478 jwt = document.cookie.match(/(?<=blaize_jwt=)[^;]+/)[0]; 49479 } 49480 catch { 49481 jwt = null; 49482 } 49483 if (!dynamicOfferId) { 49484 throw Error('Missing Dynamic Offer id'); 49485 } 49486 const response = await request('zephr/public/decisions/v2/dynamic-offers', { 49487 method: "POST", 49488 bodyObject: { 49489 "dynamic_offer": { "slug": dynamicOfferId }, 49490 "session": session, 49491 "jwt": jwt 49492 }, 49493 }, formActions); 49494 const dynamicOfferResult = await response.json(); 49495 formActions.updateFormState({ dynamicOfferResult }); 49496 }; 49497 const mockBillingPreviewResponse = (dynamicOfferResult) => { 49498 const chargeOne = dynamicOfferResult?.products 49499 ? dynamicOfferResult.products[0].paymentPlans[0].charges[0] 49500 : { prices: [{ price: 25 }], chargeData: { name: 'Monthly Fee' } }; 49501 const amount = chargeOne.prices[0]?.price; 49502 const chargeName = chargeOne.chargeData?.name; 49503 return { 49504 "success": true, 49505 "contractedMrr": amount, 49506 "totalContractedValue": null, 49507 "amount": amount + 3, 49508 "amountWithoutTax": amount, 49509 "taxAmount": 3, 49510 "invoiceTargetDate": "2024-05-20", 49511 "documentDate": "2024-05-20", 49512 "invoiceItems": { 49513 "0": { 49514 "serviceStartDate": "2024-05-20", 49515 "serviceEndDate": "2024-06-19", 49516 "chargeAmount": amount, 49517 "taxAmount": 3, 49518 "chargeDescription": "", 49519 "chargeName": chargeName, 49520 "productName": "Product", 49521 "productRatePlanChargeId": "8ad097b48f533234018f57a8982a5a45", 49522 "quantity": 1, 49523 "unitOfMeasure": "" 49524 } 49525 } 49526 }; 49527 }; 49528 const filterChangeSubDynamicOfferResponse = (dynamicOfferResult, form, formState) => { 49529 if (!formConfigAs(form).changeSubscriptionMode || form.environment.previewMode) { 49530 return dynamicOfferResult; 49531 } 49532 return { 49533 ...dynamicOfferResult, 49534 products: dynamicOfferResult.products.map(product => ({ 49535 ...product, 49536 paymentPlans: product.paymentPlans.filter(plan => formState 49537 .validChangeFromPlans 49538 .some(changeFromPlan => changeFromPlan.planSlug === plan.planId && changeFromPlan.productId === product.id)) 49539 })) 49540 }; 49541 }; 49542 49543 function ownKeys(e, r) { 49544 var t = Object.keys(e); 49545 if (Object.getOwnPropertySymbols) { 49546 var o = Object.getOwnPropertySymbols(e); 49547 r && (o = o.filter(function (r) { 49548 return Object.getOwnPropertyDescriptor(e, r).enumerable; 49549 })), t.push.apply(t, o); 49550 } 49551 return t; 49552 }
49553 function _objectSpread2(e) { 49554 for (var r = 1; r < arguments.length; r++) { 49555 var t = null != arguments[r] ? arguments[r] : {}; 49556 r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { 49557 _defineProperty(e, r, t[r]); 49558 }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { 49559 Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); 49560 }); 49561 } 49562 return e; 49563 } 49564 function _defineProperty(obj, key, value) { 49565 key = _toPropertyKey(key); 49566 if (key in obj) { 49567 Object.defineProperty(obj, key, { 49568 value: value, 49569 enumerable: true, 49570 configurable: true, 49571 writable: true 49572 }); 49573 } else { 49574 obj[key] = value; 49575 } 49576 return obj; 49577 } 49578 function _objectWithoutPropertiesLoose(source, excluded) { 49579 if (source == null) return {}; 49580 var target = {}; 49581 var sourceKeys = Object.keys(source); 49582 var key, i; 49583 for (i = 0; i < sourceKeys.length; i++) { 49584 key = sourceKeys[i]; 49585 if (excluded.indexOf(key) >= 0) continue; 49586 target[key] = source[key]; 49587 } 49588 return target; 49589 } 49590 function _objectWithoutProperties(source, excluded) { 49591 if (source == null) return {}; 49592 var target = _objectWithoutPropertiesLoose(source, excluded); 49593 var key, i; 49594 if (Object.getOwnPropertySymbols) { 49595 var sourceSymbolKeys = Object.getOwnPropertySymbols(source); 49596 for (i = 0; i < sourceSymbolKeys.length; i++) { 49597 key = sourceSymbolKeys[i]; 49598 if (excluded.indexOf(key) >= 0) continue; 49599 if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; 49600 target[key] = source[key]; 49601 } 49602 } 49603 return target; 49604 } 49605 function _toPrimitive(input, hint) { 49606 if (typeof input !== "object" || input === null) return input; 49607 var prim = input[Symbol.toPrimitive]; 49608 if (prim !== undefined) { 49609 var res = prim.call(input, hint || "default"); 49610 if (typeof res !== "object") return res; 49611 throw new TypeError("@@toPrimitive must return a primitive value."); 49612 } 49613 return (hint === "string" ? String : Number)(input); 49614 } 49615 function _toPropertyKey(arg) { 49616 var key = _toPrimitive(arg, "string"); 49617 return typeof key === "symbol" ? key : String(key); 49618 } 49619 49620 var countries$1 = { 49621 AD: "Andorra", 49622 AE: "United Arab Emirates", 49623 AF: "Afghanistan", 49624 AG: "Antigua and Barbuda", 49625 AI: "Anguilla", 49626 AL: "Albania", 49627 AM: "Armenia", 49628 AO: "Angola", 49629 AQ: "Antarctica", 49630 AR: "Argentina", 49631 AS: "American Samoa", 49632 AT: "Austria", 49633 AU: "Australia", 49634 AW: "Aruba", 49635 AX: "à land Islands", 49636 AZ: "Azerbaijan", 49637 BA: "Bosnia and Herzegovina", 49638 BB: "Barbados", 49639 BD: "Bangladesh", 49640 BE: "Belgium", 49641 BF: "Burkina Faso", 49642 BG: "Bulgaria", 49643 BH: "Bahrain", 49644 BI: "Burundi", 49645 BJ: "Benin", 49646 BL: "Saint Barthélemy", 49647 BM: "Bermuda", 49648 BN: "Brunei", 49649 BO: "Bolivia", 49650 BQ: "Caribbean Netherlands", 49651 BR: "Brazil", 49652 BS: "Bahamas", 49653 BT: "Bhutan", 49654 BW: "Botswana", 49655 BY: "Belarus", 49656 BZ: "Belize", 49657 CA: "Canada", 49658 CC: "Cocos Islands", 49659 CD: "Democratic Republic of the Congo", 49660 CF: "Central African Republic", 49661 CG: "Republic of the Congo", 49662 CH: "Switzerland", 49663 CI: "Ivory Coast", 49664 CK: "Cook Islands", 49665 CL: "Chile", 49666 CM: "Cameroon", 49667 CN: "China", 49668 CO: "Colombia", 49669 CR: "Costa Rica", 49670 CU: "Cuba", 49671 CV: "Cabo Verde", 49672 CW: "Curaçao", 49673 CX: "Christmas Island", 49674 CY: "Cyprus", 49675 CZ: "Czechia", 49676 DE: "Germany", 49677 DJ: "Djibouti", 49678 DK: "Denmark", 49679 DM: "Dominica", 49680 DO: "Dominican Republic", 49681 DZ: "Algeria", 49682 EC: "Ecuador", 49683 EE: "Estonia", 49684 EG: "Egypt", 49685 EH: "Western Sahara", 49686 ER: "Eritrea", 49687 ES: "Spain", 49688 ET: "Ethiopia", 49689 FI: "Finland", 49690 FJ: "Fiji", 49691 FK: "Falkland Islands", 49692 FM: "Micronesia", 49693 FO: "Faroe Islands", 49694 FR: "France", 49695 GA: "Gabon", 49696 GB: "United Kingdom", 49697 GD: "Grenada", 49698 GE: "Georgia", 49699 GF: "French Guiana", 49700 GG: "Guernsey", 49701 GH: "Ghana", 49702 GI: "Gibraltar", 49703 GL: "Greenland", 49704 GM: "Gambia", 49705 GN: "Guinea", 49706 GP: "Guadeloupe", 49707 GQ: "Equatorial Guinea", 49708 GR: "Greece", 49709 GS: "South Georgia and the South Sandwich Islands", 49710 GT: "Guatemala", 49711 GU: "Guam", 49712 GW: "Guinea-Bissau", 49713 GY: "Guyana", 49714 HK: "Hong Kong", 49715 HN: "Honduras", 49716 HR: "Croatia", 49717 HT: "Haiti", 49718 HU: "Hungary", 49719 ID: "Indonesia", 49720 IE: "Ireland", 49721 IL: "Israel", 49722 IM: "Isle of Man", 49723 IN: "India", 49724 IO: "British Indian Ocean Territory", 49725 IQ: "Iraq", 49726 IR: "Iran", 49727 IS: "Iceland", 49728 IT: "Italy", 49729 JE: "Jersey", 49730 JM: "Jamaica", 49731 JO: "Jordan", 49732 JP: "Japan", 49733 KE: "Kenya", 49734 KG: "Kyrgyzstan", 49735 KH: "Cambodia",
49736 KI: "Kiribati", 49737 KM: "Comoros", 49738 KN: "Saint Kitts and Nevis", 49739 KP: "North Korea", 49740 KR: "South Korea", 49741 KW: "Kuwait", 49742 KY: "Cayman Islands", 49743 KZ: "Kazakhstan", 49744 LA: "Laos", 49745 LB: "Lebanon", 49746 LC: "Saint Lucia", 49747 LI: "Liechtenstein", 49748 LK: "Sri Lanka", 49749 LR: "Liberia", 49750 LS: "Lesotho", 49751 LT: "Lithuania", 49752 LU: "Luxembourg", 49753 LV: "Latvia", 49754 LY: "Libya", 49755 MA: "Morocco", 49756 MC: "Monaco", 49757 MD: "Moldova", 49758 ME: "Montenegro", 49759 MF: "Saint Martin", 49760 MG: "Madagascar", 49761 MH: "Marshall Islands", 49762 MK: "North Macedonia", 49763 ML: "Mali", 49764 MM: "Myanmar", 49765 MN: "Mongolia", 49766 MO: "Macao", 49767 MP: "Northern Mariana Islands", 49768 MQ: "Martinique", 49769 MR: "Mauritania", 49770 MS: "Montserrat", 49771 MT: "Malta", 49772 MU: "Mauritius", 49773 MV: "Maldives", 49774 MW: "Malawi", 49775 MX: "Mexico", 49776 MY: "Malaysia", 49777 MZ: "Mozambique", 49778 NA: "Namibia", 49779 NC: "New Caledonia", 49780 NE: "Niger", 49781 NF: "Norfolk Island", 49782 NG: "Nigeria", 49783 NI: "Nicaragua", 49784 NL: "Netherlands", 49785 NO: "Norway", 49786 NP: "Nepal", 49787 NR: "Nauru", 49788 NU: "Niue", 49789 NZ: "New Zealand", 49790 OM: "Oman", 49791 PA: "Panama", 49792 PE: "Peru", 49793 PF: "French Polynesia", 49794 PG: "Papua New Guinea", 49795 PH: "Philippines", 49796 PK: "Pakistan", 49797 PL: "Poland", 49798 PM: "Saint Pierre and Miquelon", 49799 PN: "Pitcairn", 49800 PR: "Puerto Rico", 49801 PS: "Palestine", 49802 PT: "Portugal", 49803 PW: "Palau", 49804 PY: "Paraguay", 49805 QA: "Qatar", 49806 RE: "Réunion", 49807 RO: "Romania", 49808 RS: "Serbia", 49809 RU: "Russia", 49810 RW: "Rwanda", 49811 SA: "Saudi Arabia", 49812 SB: "Solomon Islands", 49813 SC: "Seychelles", 49814 SD: "Sudan", 49815 SE: "Sweden", 49816 SG: "Singapore", 49817 SH: "Saint Helena, Ascension and Tristan da Cunha", 49818 SI: "Slovenia", 49819 SJ: "Svalbard and Jan Mayen", 49820 SK: "Slovakia", 49821 SL: "Sierra Leone", 49822 SM: "San Marino", 49823 SN: "Senegal", 49824 SO: "Somalia", 49825 SR: "Suriname", 49826 SS: "South Sudan", 49827 ST: "Sao Tome and Principe", 49828 SV: "El Salvador", 49829 SX: "Sint Maarten", 49830 SY: "Syria", 49831 SZ: "Eswatini", 49832 TC: "Turks and Caicos Islands", 49833 TD: "Chad", 49834 TF: "French Southern Territories", 49835 TG: "Togo", 49836 TH: "Thailand", 49837 TJ: "Tajikistan", 49838 TK: "Tokelau", 49839 TL: "Timor-Leste", 49840 TM: "Turkmenistan", 49841 TN: "Tunisia", 49842 TO: "Tonga", 49843 TR: "Türkiye", 49844 TT: "Trinidad and Tobago", 49845 TV: "Tuvalu", 49846 TW: "Taiwan", 49847 TZ: "Tanzania", 49848 UA: "Ukraine", 49849 UG: "Uganda", 49850 UM: "United States Minor Outlying Islands", 49851 US: "United States of America", 49852 UY: "Uruguay", 49853 UZ: "Uzbekistan", 49854 VA: "Holy See", 49855 VC: "Saint Vincent and the Grenadines", 49856 VE: "Venezuela", 49857 VG: "Virgin Islands (UK)", 49858 VI: "Virgin Islands (US)", 49859 VN: "Vietnam", 49860 VU: "Vanuatu", 49861 WF: "Wallis and Futuna", 49862 WS: "Samoa", 49863 YE: "Yemen", 49864 YT: "Mayotte", 49865 ZA: "South Africa", 49866 ZM: "Zambia", 49867 ZW: "Zimbabwe" 49868 }; 49869 var timezones$1 = { 49870 "Africa/Abidjan": { 49871 u: 0, 49872 c: [ 49873 "CI", 49874 "BF", 49875 "GH", 49876 "GM", 49877 "GN", 49878 "IS", 49879 "ML", 49880 "MR", 49881 "SH", 49882 "SL", 49883 "SN", 49884 "TG" 49885 ] 49886 }, 49887 "Africa/Accra": { 49888 a: "Africa/Abidjan", 49889 c: [ 49890 "GH" 49891 ], 49892 r: 1 49893 }, 49894 "Africa/Addis_Ababa": { 49895 a: "Africa/Nairobi", 49896 c: [ 49897 "ET" 49898 ], 49899 r: 1 49900 }, 49901 "Africa/Algiers": { 49902 u: 60, 49903 c: [ 49904 "DZ" 49905 ] 49906 }, 49907 "Africa/Asmara": { 49908 a: "Africa/Nairobi", 49909 c: [ 49910 "ER" 49911 ], 49912 r: 1 49913 }, 49914 "Africa/Asmera": { 49915 a: "Africa/Nairobi", 49916 c: [ 49917 "ER" 49918 ], 49919 r: 1 49920 }, 49921 "Africa/Bamako": { 49922 a: "Africa/Abidjan", 49923 c: [ 49924 "ML" 49925 ], 49926 r: 1 49927 }, 49928 "Africa/Bangui": { 49929 a: "Africa/Lagos", 49930 c: [ 49931 "CF" 49932 ], 49933 r: 1 49934 }, 49935 "Africa/Banjul": { 49936 a: "Africa/Abidjan", 49937 c: [ 49938 "GM" 49939 ], 49940 r: 1 49941 }, 49942 "Africa/Bissau": { 49943 u: 0, 49944 c: [ 49945 "GW" 49946 ] 49947 }, 49948 "Africa/Blantyre": { 49949 a: "Africa/Maputo", 49950 c: [ 49951 "MW" 49952 ], 49953 r: 1 49954 }, 49955 "Africa/Brazzaville": { 49956 a: "Africa/Lagos", 49957 c: [ 49958 "CG" 49959 ], 49960 r: 1 49961 }, 49962 "Africa/Bujumbura": { 49963 a: "Africa/Maputo", 49964 c: [ 49965 "BI" 49966 ], 49967 r: 1 49968 }, 49969 "Africa/Cairo": { 49970 u: 120, 49971 d: 180, 49972 c: [ 49973 "EG" 49974 ] 49975 }, 49976 "Africa/Casablanca": { 49977 u: 60, 49978 d: 0, 49979 c: [ 49980 "MA" 49981 ] 49982 }, 49983 "Africa/Ceuta": { 49984 u: 60, 49985 d: 120, 49986 c: [ 49987 "ES" 49988 ] 49989 }, 49990 "Africa/Conakry": { 49991 a: "Africa/Abidjan", 49992 c: [ 49993 "GN" 49994 ], 49995 r: 1 49996 }, 49997 "Africa/Dakar": { 49998 a: "Africa/Abidjan", 49999 c: [ 50000 "SN" 50001 ], 50002 r: 1 50003 }, 50004 "Africa/Dar_es_Salaam": { 50005 a: "Africa/Nairobi", 50006 c: [ 50007 "TZ" 50008 ], 50009 r: 1 50010 }, 50011 "Africa/Djibouti": { 50012 a: "Africa/Nairobi", 50013 c: [ 50014 "DJ" 50015 ], 50016 r: 1 50017 }, 50018 "Africa/Douala": { 50019 a: "Africa/Lagos", 50020 c: [
vendor: 38,090 bytes, lines 50021-53408
50021 "CM" 50022 ], 50023 r: 1 50024 }, 50025 "Africa/El_Aaiun": { 50026 u: 60, 50027 d: 0, 50028 c: [ 50029 "EH" 50030 ] 50031 }, 50032 "Africa/Freetown": { 50033 a: "Africa/Abidjan", 50034 c: [ 50035 "SL" 50036 ], 50037 r: 1 50038 }, 50039 "Africa/Gaborone": { 50040 a: "Africa/Maputo", 50041 c: [ 50042 "BW" 50043 ], 50044 r: 1 50045 }, 50046 "Africa/Harare": { 50047 a: "Africa/Maputo", 50048 c: [ 50049 "ZW" 50050 ], 50051 r: 1 50052 }, 50053 "Africa/Johannesburg": { 50054 u: 120, 50055 c: [ 50056 "ZA", 50057 "LS", 50058 "SZ" 50059 ] 50060 }, 50061 "Africa/Juba": { 50062 u: 120, 50063 c: [ 50064 "SS" 50065 ] 50066 }, 50067 "Africa/Kampala": { 50068 a: "Africa/Nairobi", 50069 c: [ 50070 "UG" 50071 ], 50072 r: 1 50073 }, 50074 "Africa/Khartoum": { 50075 u: 120, 50076 c: [ 50077 "SD" 50078 ] 50079 }, 50080 "Africa/Kigali": { 50081 a: "Africa/Maputo", 50082 c: [ 50083 "RW" 50084 ], 50085 r: 1 50086 }, 50087 "Africa/Kinshasa": { 50088 a: "Africa/Lagos", 50089 c: [ 50090 "CD" 50091 ], 50092 r: 1 50093 }, 50094 "Africa/Lagos": { 50095 u: 60, 50096 c: [ 50097 "NG", 50098 "AO", 50099 "BJ", 50100 "CD", 50101 "CF", 50102 "CG", 50103 "CM", 50104 "GA", 50105 "GQ", 50106 "NE" 50107 ] 50108 }, 50109 "Africa/Libreville": { 50110 a: "Africa/Lagos", 50111 c: [ 50112 "GA" 50113 ], 50114 r: 1 50115 }, 50116 "Africa/Lome": { 50117 a: "Africa/Abidjan", 50118 c: [ 50119 "TG" 50120 ], 50121 r: 1 50122 }, 50123 "Africa/Luanda": { 50124 a: "Africa/Lagos", 50125 c: [ 50126 "AO" 50127 ], 50128 r: 1 50129 }, 50130 "Africa/Lubumbashi": { 50131 a: "Africa/Maputo", 50132 c: [ 50133 "CD" 50134 ], 50135 r: 1 50136 }, 50137 "Africa/Lusaka": { 50138 a: "Africa/Maputo", 50139 c: [ 50140 "ZM" 50141 ], 50142 r: 1 50143 }, 50144 "Africa/Malabo": { 50145 a: "Africa/Lagos", 50146 c: [ 50147 "GQ" 50148 ], 50149 r: 1 50150 }, 50151 "Africa/Maputo": { 50152 u: 120, 50153 c: [ 50154 "MZ", 50155 "BI", 50156 "BW", 50157 "CD", 50158 "MW", 50159 "RW", 50160 "ZM", 50161 "ZW" 50162 ] 50163 }, 50164 "Africa/Maseru": { 50165 a: "Africa/Johannesburg", 50166 c: [ 50167 "LS" 50168 ], 50169 r: 1 50170 }, 50171 "Africa/Mbabane": { 50172 a: "Africa/Johannesburg", 50173 c: [ 50174 "SZ" 50175 ], 50176 r: 1 50177 }, 50178 "Africa/Mogadishu": { 50179 a: "Africa/Nairobi", 50180 c: [ 50181 "SO" 50182 ], 50183 r: 1 50184 }, 50185 "Africa/Monrovia": { 50186 u: 0, 50187 c: [ 50188 "LR" 50189 ] 50190 }, 50191 "Africa/Nairobi": { 50192 u: 180, 50193 c: [ 50194 "KE", 50195 "DJ", 50196 "ER", 50197 "ET", 50198 "KM", 50199 "MG", 50200 "SO", 50201 "TZ", 50202 "UG", 50203 "YT" 50204 ] 50205 }, 50206 "Africa/Ndjamena": { 50207 u: 60, 50208 c: [ 50209 "TD" 50210 ] 50211 }, 50212 "Africa/Niamey": { 50213 a: "Africa/Lagos", 50214 c: [ 50215 "NE" 50216 ], 50217 r: 1 50218 }, 50219 "Africa/Nouakchott": { 50220 a: "Africa/Abidjan", 50221 c: [ 50222 "MR" 50223 ], 50224 r: 1 50225 }, 50226 "Africa/Ouagadougou": { 50227 a: "Africa/Abidjan", 50228 c: [ 50229 "BF" 50230 ], 50231 r: 1 50232 }, 50233 "Africa/Porto-Novo": { 50234 a: "Africa/Lagos", 50235 c: [ 50236 "BJ" 50237 ], 50238 r: 1 50239 }, 50240 "Africa/Sao_Tome": { 50241 u: 0, 50242 c: [ 50243 "ST" 50244 ] 50245 }, 50246 "Africa/Timbuktu": { 50247 a: "Africa/Abidjan", 50248 c: [ 50249 "ML" 50250 ], 50251 r: 1 50252 }, 50253 "Africa/Tripoli": { 50254 u: 120, 50255 c: [ 50256 "LY" 50257 ] 50258 }, 50259 "Africa/Tunis": { 50260 u: 60, 50261 c: [ 50262 "TN" 50263 ] 50264 }, 50265 "Africa/Windhoek": { 50266 u: 120, 50267 c: [ 50268 "NA" 50269 ] 50270 }, 50271 "America/Adak": { 50272 u: -600, 50273 d: -540, 50274 c: [ 50275 "US" 50276 ] 50277 }, 50278 "America/Anchorage": { 50279 u: -540, 50280 d: -480, 50281 c: [ 50282 "US" 50283 ] 50284 }, 50285 "America/Anguilla": { 50286 a: "America/Puerto_Rico", 50287 c: [ 50288 "AI" 50289 ], 50290 r: 1 50291 }, 50292 "America/Antigua": { 50293 a: "America/Puerto_Rico", 50294 c: [ 50295 "AG" 50296 ], 50297 r: 1 50298 }, 50299 "America/Araguaina": { 50300 u: -180, 50301 c: [ 50302 "BR" 50303 ] 50304 }, 50305 "America/Argentina/Buenos_Aires": { 50306 u: -180, 50307 c: [ 50308 "AR" 50309 ] 50310 }, 50311 "America/Argentina/Catamarca": { 50312 u: -180, 50313 c: [ 50314 "AR" 50315 ] 50316 }, 50317 "America/Argentina/ComodRivadavia": { 50318 a: "America/Argentina/Catamarca", 50319 r: 1 50320 }, 50321 "America/Argentina/Cordoba": { 50322 u: -180, 50323 c: [ 50324 "AR" 50325 ] 50326 }, 50327 "America/Argentina/Jujuy": { 50328 u: -180, 50329 c: [ 50330 "AR" 50331 ] 50332 }, 50333 "America/Argentina/La_Rioja": { 50334 u: -180, 50335 c: [ 50336 "AR" 50337 ] 50338 }, 50339 "America/Argentina/Mendoza": { 50340 u: -180, 50341 c: [ 50342 "AR" 50343 ] 50344 }, 50345 "America/Argentina/Rio_Gallegos": { 50346 u: -180, 50347 c: [ 50348 "AR" 50349 ] 50350 }, 50351 "America/Argentina/Salta": { 50352 u: -180, 50353 c: [ 50354 "AR" 50355 ] 50356 }, 50357 "America/Argentina/San_Juan": { 50358 u: -180, 50359 c: [ 50360 "AR" 50361 ] 50362 }, 50363 "America/Argentina/San_Luis": { 50364 u: -180, 50365 c: [ 50366 "AR" 50367 ] 50368 }, 50369 "America/Argentina/Tucuman": { 50370 u: -180, 50371 c: [ 50372 "AR" 50373 ] 50374 }, 50375 "America/Argentina/Ushuaia": { 50376 u: -180, 50377 c: [ 50378 "AR" 50379 ] 50380 }, 50381 "America/Aruba": { 50382 a: "America/Puerto_Rico", 50383 c: [ 50384 "AW" 50385 ], 50386 r: 1 50387 }, 50388 "America/Asuncion": { 50389 u: -240, 50390 d: -180, 50391 c: [ 50392 "PY" 50393 ] 50394 }, 50395 "America/Atikokan": { 50396 a: "America/Panama", 50397 c: [ 50398 "CA" 50399 ], 50400 r: 1 50401 }, 50402 "America/Atka": { 50403 a: "America/Adak", 50404 r: 1 50405 }, 50406 "America/Bahia": { 50407 u: -180, 50408 c: [ 50409 "BR" 50410 ] 50411 }, 50412 "America/Bahia_Banderas": { 50413 u: -360, 50414 c: [ 50415 "MX" 50416 ] 50417 }, 50418 "America/Barbados": { 50419 u: -240, 50420 c: [ 50421 "BB" 50422 ] 50423 }, 50424 "America/Belem": { 50425 u: -180, 50426 c: [ 50427 "BR" 50428 ] 50429 }, 50430 "America/Belize": { 50431 u: -360, 50432 c: [ 50433 "BZ" 50434 ] 50435 }, 50436 "America/Blanc-Sablon": { 50437 a: "America/Puerto_Rico", 50438 c: [ 50439 "CA" 50440 ], 50441 r: 1 50442 }, 50443 "America/Boa_Vista": { 50444 u: -240, 50445 c: [ 50446 "BR" 50447 ] 50448 }, 50449 "America/Bogota": { 50450 u: -300, 50451 c: [ 50452 "CO" 50453 ] 50454 }, 50455 "America/Boise": { 50456 u: -420, 50457 d: -360, 50458 c: [ 50459 "US" 50460 ] 50461 }, 50462 "America/Buenos_Aires": { 50463 a: "America/Argentina/Buenos_Aires", 50464 r: 1 50465 }, 50466 "America/Cambridge_Bay": { 50467 u: -420, 50468 d: -360, 50469 c: [ 50470 "CA" 50471 ] 50472 }, 50473 "America/Campo_Grande": { 50474 u: -240, 50475 c: [ 50476 "BR" 50477 ] 50478 }, 50479 "America/Cancun": { 50480 u: -300, 50481 c: [ 50482 "MX" 50483 ] 50484 }, 50485 "America/Caracas": { 50486 u: -240, 50487 c: [ 50488 "VE" 50489 ] 50490 }, 50491 "America/Catamarca": { 50492 a: "America/Argentina/Catamarca", 50493 r: 1 50494 }, 50495 "America/Cayenne": { 50496 u: -180, 50497 c: [ 50498 "GF" 50499 ] 50500 }, 50501 "America/Cayman": { 50502 a: "America/Panama", 50503 c: [ 50504 "KY" 50505 ], 50506 r: 1 50507 }, 50508 "America/Chicago": { 50509 u: -360, 50510 d: -300, 50511 c: [ 50512 "US" 50513 ] 50514 }, 50515 "America/Chihuahua": { 50516 u: -360, 50517 c: [ 50518 "MX" 50519 ] 50520 }, 50521 "America/Ciudad_Juarez": { 50522 u: -420, 50523 d: -360, 50524 c: [ 50525 "MX" 50526 ] 50527 }, 50528 "America/Coral_Harbour": { 50529 a: "America/Panama", 50530 c: [ 50531 "CA" 50532 ], 50533 r: 1 50534 }, 50535 "America/Cordoba": { 50536 a: "America/Argentina/Cordoba", 50537 r: 1 50538 }, 50539 "America/Costa_Rica": { 50540 u: -360, 50541 c: [ 50542 "CR" 50543 ] 50544 }, 50545 "America/Creston": { 50546 a: "America/Phoenix", 50547 c: [ 50548 "CA" 50549 ], 50550 r: 1 50551 }, 50552 "America/Cuiaba": { 50553 u: -240, 50554 c: [ 50555 "BR" 50556 ] 50557 }, 50558 "America/Curacao": { 50559 a: "America/Puerto_Rico", 50560 c: [ 50561 "CW" 50562 ], 50563 r: 1 50564 }, 50565 "America/Danmarkshavn": { 50566 u: 0, 50567 c: [ 50568 "GL" 50569 ] 50570 }, 50571 "America/Dawson": { 50572 u: -420, 50573 c: [ 50574 "CA" 50575 ] 50576 }, 50577 "America/Dawson_Creek": { 50578 u: -420, 50579 c: [ 50580 "CA" 50581 ] 50582 }, 50583 "America/Denver": { 50584 u: -420, 50585 d: -360, 50586 c: [ 50587 "US" 50588 ] 50589 }, 50590 "America/Detroit": { 50591 u: -300, 50592 d: -240, 50593 c: [ 50594 "US" 50595 ] 50596 }, 50597 "America/Dominica": { 50598 a: "America/Puerto_Rico", 50599 c: [ 50600 "DM" 50601 ], 50602 r: 1 50603 }, 50604 "America/Edmonton": { 50605 u: -420, 50606 d: -360, 50607 c: [ 50608 "CA" 50609 ] 50610 }, 50611 "America/Eirunepe": { 50612 u: -300, 50613 c: [ 50614 "BR" 50615 ] 50616 }, 50617 "America/El_Salvador": { 50618 u: -360, 50619 c: [ 50620 "SV" 50621 ] 50622 }, 50623 "America/Ensenada": { 50624 a: "America/Tijuana", 50625 r: 1 50626 }, 50627 "America/Fort_Nelson": { 50628 u: -420, 50629 c: [ 50630 "CA" 50631 ] 50632 }, 50633 "America/Fort_Wayne": { 50634 a: "America/Indiana/Indianapolis", 50635 r: 1 50636 }, 50637 "America/Fortaleza": { 50638 u: -180, 50639 c: [ 50640 "BR" 50641 ] 50642 }, 50643 "America/Glace_Bay": { 50644 u: -240, 50645 d: -180, 50646 c: [ 50647 "CA" 50648 ] 50649 }, 50650 "America/Godthab": { 50651 a: "America/Nuuk", 50652 r: 1 50653 }, 50654 "America/Goose_Bay": { 50655 u: -240, 50656 d: -180, 50657 c: [ 50658 "CA" 50659 ] 50660 }, 50661 "America/Grand_Turk": { 50662 u: -300, 50663 d: -240, 50664 c: [ 50665 "TC" 50666 ] 50667 }, 50668 "America/Grenada": { 50669 a: "America/Puerto_Rico", 50670 c: [ 50671 "GD" 50672 ], 50673 r: 1 50674 }, 50675 "America/Guadeloupe": { 50676 a: "America/Puerto_Rico", 50677 c: [ 50678 "GP" 50679 ], 50680 r: 1 50681 }, 50682 "America/Guatemala": { 50683 u: -360, 50684 c: [ 50685 "GT" 50686 ] 50687 }, 50688 "America/Guayaquil": { 50689 u: -300, 50690 c: [ 50691 "EC" 50692 ] 50693 }, 50694 "America/Guyana": { 50695 u: -240, 50696 c: [ 50697 "GY" 50698 ] 50699 }, 50700 "America/Halifax": { 50701 u: -240, 50702 d: -180, 50703 c: [ 50704 "CA" 50705 ] 50706 }, 50707 "America/Havana": { 50708 u: -300, 50709 d: -240, 50710 c: [ 50711 "CU" 50712 ] 50713 }, 50714 "America/Hermosillo": { 50715 u: -420, 50716 c: [ 50717 "MX" 50718 ] 50719 }, 50720 "America/Indiana/Indianapolis": { 50721 u: -300, 50722 d: -240, 50723 c: [ 50724 "US" 50725 ] 50726 }, 50727 "America/Indiana/Knox": { 50728 u: -360, 50729 d: -300, 50730 c: [ 50731 "US" 50732 ] 50733 }, 50734 "America/Indiana/Marengo": { 50735 u: -300, 50736 d: -240, 50737 c: [ 50738 "US" 50739 ] 50740 }, 50741 "America/Indiana/Petersburg": { 50742 u: -300, 50743 d: -240, 50744 c: [ 50745 "US" 50746 ] 50747 }, 50748 "America/Indiana/Tell_City": { 50749 u: -360, 50750 d: -300, 50751 c: [ 50752 "US" 50753 ] 50754 }, 50755 "America/Indiana/Vevay": { 50756 u: -300, 50757 d: -240, 50758 c: [ 50759 "US" 50760 ] 50761 }, 50762 "America/Indiana/Vincennes": { 50763 u: -300, 50764 d: -240, 50765 c: [ 50766 "US" 50767 ] 50768 }, 50769 "America/Indiana/Winamac": { 50770 u: -300, 50771 d: -240, 50772 c: [ 50773 "US" 50774 ] 50775 }, 50776 "America/Indianapolis": { 50777 a: "America/Indiana/Indianapolis", 50778 r: 1 50779 }, 50780 "America/Inuvik": { 50781 u: -420, 50782 d: -360, 50783 c: [ 50784 "CA" 50785 ] 50786 }, 50787 "America/Iqaluit": { 50788 u: -300, 50789 d: -240, 50790 c: [ 50791 "CA" 50792 ] 50793 }, 50794 "America/Jamaica": { 50795 u: -300, 50796 c: [ 50797 "JM" 50798 ] 50799 }, 50800 "America/Jujuy": { 50801 a: "America/Argentina/Jujuy", 50802 r: 1 50803 }, 50804 "America/Juneau": { 50805 u: -540, 50806 d: -480, 50807 c: [ 50808 "US" 50809 ] 50810 }, 50811 "America/Kentucky/Louisville": { 50812 u: -300, 50813 d: -240, 50814 c: [ 50815 "US" 50816 ] 50817 }, 50818 "America/Kentucky/Monticello": { 50819 u: -300, 50820 d: -240, 50821 c: [ 50822 "US" 50823 ] 50824 }, 50825 "America/Knox_IN": { 50826 a: "America/Indiana/Knox", 50827 r: 1 50828 }, 50829 "America/Kralendijk": { 50830 a: "America/Puerto_Rico", 50831 c: [ 50832 "BQ" 50833 ], 50834 r: 1 50835 }, 50836 "America/La_Paz": { 50837 u: -240, 50838 c: [ 50839 "BO" 50840 ] 50841 }, 50842 "America/Lima": { 50843 u: -300, 50844 c: [ 50845 "PE" 50846 ] 50847 }, 50848 "America/Los_Angeles": { 50849 u: -480, 50850 d: -420, 50851 c: [ 50852 "US" 50853 ] 50854 }, 50855 "America/Louisville": { 50856 a: "America/Kentucky/Louisville", 50857 r: 1 50858 }, 50859 "America/Lower_Princes": { 50860 a: "America/Puerto_Rico", 50861 c: [ 50862 "SX" 50863 ], 50864 r: 1 50865 }, 50866 "America/Maceio": { 50867 u: -180, 50868 c: [ 50869 "BR" 50870 ] 50871 }, 50872 "America/Managua": { 50873 u: -360, 50874 c: [ 50875 "NI" 50876 ] 50877 }, 50878 "America/Manaus": { 50879 u: -240, 50880 c: [ 50881 "BR" 50882 ] 50883 }, 50884 "America/Marigot": { 50885 a: "America/Puerto_Rico", 50886 c: [ 50887 "MF" 50888 ], 50889 r: 1 50890 }, 50891 "America/Martinique": { 50892 u: -240, 50893 c: [ 50894 "MQ" 50895 ] 50896 }, 50897 "America/Matamoros": { 50898 u: -360, 50899 d: -300, 50900 c: [ 50901 "MX" 50902 ] 50903 }, 50904 "America/Mazatlan": { 50905 u: -420, 50906 c: [ 50907 "MX" 50908 ] 50909 }, 50910 "America/Mendoza": { 50911 a: "America/Argentina/Mendoza", 50912 r: 1 50913 }, 50914 "America/Menominee": { 50915 u: -360, 50916 d: -300, 50917 c: [ 50918 "US" 50919 ] 50920 }, 50921 "America/Merida": { 50922 u: -360, 50923 c: [ 50924 "MX" 50925 ] 50926 }, 50927 "America/Metlakatla": { 50928 u: -540, 50929 d: -480, 50930 c: [ 50931 "US" 50932 ] 50933 }, 50934 "America/Mexico_City": { 50935 u: -360, 50936 c: [ 50937 "MX" 50938 ] 50939 }, 50940 "America/Miquelon": { 50941 u: -180, 50942 d: -120, 50943 c: [ 50944 "PM" 50945 ] 50946 }, 50947 "America/Moncton": { 50948 u: -240, 50949 d: -180, 50950 c: [ 50951 "CA" 50952 ] 50953 }, 50954 "America/Monterrey": { 50955 u: -360, 50956 c: [ 50957 "MX" 50958 ] 50959 }, 50960 "America/Montevideo": { 50961 u: -180, 50962 c: [ 50963 "UY" 50964 ] 50965 }, 50966 "America/Montreal": { 50967 a: "America/Toronto", 50968 c: [ 50969 "CA" 50970 ], 50971 r: 1 50972 }, 50973 "America/Montserrat": { 50974 a: "America/Puerto_Rico", 50975 c: [ 50976 "MS" 50977 ], 50978 r: 1 50979 }, 50980 "America/Nassau": { 50981 a: "America/Toronto", 50982 c: [ 50983 "BS" 50984 ], 50985 r: 1 50986 }, 50987 "America/New_York": { 50988 u: -300, 50989 d: -240, 50990 c: [ 50991 "US" 50992 ] 50993 }, 50994 "America/Nipigon": { 50995 a: "America/Toronto", 50996 c: [ 50997 "CA" 50998 ], 50999 r: 1 51000 }, 51001 "America/Nome": { 51002 u: -540, 51003 d: -480, 51004 c: [ 51005 "US" 51006 ] 51007 }, 51008 "America/Noronha": { 51009 u: -120, 51010 c: [ 51011 "BR" 51012 ] 51013 }, 51014 "America/North_Dakota/Beulah": { 51015 u: -360, 51016 d: -300, 51017 c: [ 51018 "US" 51019 ] 51020 }, 51021 "America/North_Dakota/Center": { 51022 u: -360, 51023 d: -300, 51024 c: [ 51025 "US" 51026 ] 51027 }, 51028 "America/North_Dakota/New_Salem": { 51029 u: -360, 51030 d: -300, 51031 c: [ 51032 "US" 51033 ] 51034 }, 51035 "America/Nuuk": { 51036 u: -120, 51037 d: -60, 51038 c: [ 51039 "GL" 51040 ] 51041 }, 51042 "America/Ojinaga": { 51043 u: -360, 51044 d: -300, 51045 c: [ 51046 "MX" 51047 ] 51048 }, 51049 "America/Panama": { 51050 u: -300, 51051 c: [ 51052 "PA", 51053 "CA", 51054 "KY" 51055 ] 51056 }, 51057 "America/Pangnirtung": { 51058 a: "America/Iqaluit", 51059 r: 1 51060 }, 51061 "America/Paramaribo": { 51062 u: -180, 51063 c: [ 51064 "SR" 51065 ] 51066 }, 51067 "America/Phoenix": { 51068 u: -420, 51069 c: [ 51070 "US", 51071 "CA" 51072 ] 51073 }, 51074 "America/Port-au-Prince": { 51075 u: -300, 51076 d: -240, 51077 c: [ 51078 "HT" 51079 ] 51080 }, 51081 "America/Port_of_Spain": { 51082 a: "America/Puerto_Rico", 51083 c: [ 51084 "TT" 51085 ], 51086 r: 1 51087 }, 51088 "America/Porto_Acre": { 51089 a: "America/Rio_Branco", 51090 r: 1 51091 }, 51092 "America/Porto_Velho": { 51093 u: -240, 51094 c: [ 51095 "BR" 51096 ] 51097 }, 51098 "America/Puerto_Rico": { 51099 u: -240, 51100 c: [ 51101 "PR", 51102 "AG", 51103 "CA", 51104 "AI", 51105 "AW", 51106 "BL", 51107 "BQ", 51108 "CW", 51109 "DM", 51110 "GD", 51111 "GP", 51112 "KN", 51113 "LC", 51114 "MF", 51115 "MS", 51116 "SX", 51117 "TT", 51118 "VC", 51119 "VG", 51120 "VI" 51121 ] 51122 }, 51123 "America/Punta_Arenas": { 51124 u: -180, 51125 c: [ 51126 "CL" 51127 ] 51128 }, 51129 "America/Rainy_River": { 51130 a: "America/Winnipeg", 51131 r: 1 51132 }, 51133 "America/Rankin_Inlet": { 51134 u: -360, 51135 d: -300, 51136 c: [ 51137 "CA" 51138 ] 51139 }, 51140 "America/Recife": { 51141 u: -180, 51142 c: [ 51143 "BR" 51144 ] 51145 }, 51146 "America/Regina": { 51147 u: -360, 51148 c: [ 51149 "CA" 51150 ] 51151 }, 51152 "America/Resolute": { 51153 u: -360, 51154 d: -300, 51155 c: [ 51156 "CA" 51157 ] 51158 }, 51159 "America/Rio_Branco": { 51160 u: -300, 51161 c: [ 51162 "BR" 51163 ] 51164 }, 51165 "America/Rosario": { 51166 a: "America/Argentina/Cordoba", 51167 r: 1 51168 }, 51169 "America/Santa_Isabel": { 51170 a: "America/Tijuana", 51171 r: 1 51172 }, 51173 "America/Santarem": { 51174 u: -180, 51175 c: [ 51176 "BR" 51177 ] 51178 }, 51179 "America/Santiago": { 51180 u: -240, 51181 d: -180, 51182 c: [ 51183 "CL" 51184 ] 51185 }, 51186 "America/Santo_Domingo": { 51187 u: -240, 51188 c: [ 51189 "DO" 51190 ] 51191 }, 51192 "America/Sao_Paulo": { 51193 u: -180, 51194 c: [ 51195 "BR" 51196 ] 51197 }, 51198 "America/Scoresbysund": { 51199 u: -60, 51200 d: 0, 51201 c: [ 51202 "GL" 51203 ] 51204 }, 51205 "America/Shiprock": { 51206 a: "America/Denver", 51207 r: 1 51208 }, 51209 "America/Sitka": { 51210 u: -540, 51211 d: -480, 51212 c: [ 51213 "US" 51214 ] 51215 }, 51216 "America/St_Barthelemy": { 51217 a: "America/Puerto_Rico", 51218 c: [ 51219 "BL" 51220 ], 51221 r: 1 51222 }, 51223 "America/St_Johns": { 51224 u: -210, 51225 d: -150, 51226 c: [ 51227 "CA" 51228 ] 51229 }, 51230 "America/St_Kitts": { 51231 a: "America/Puerto_Rico", 51232 c: [ 51233 "KN" 51234 ], 51235 r: 1 51236 }, 51237 "America/St_Lucia": { 51238 a: "America/Puerto_Rico", 51239 c: [ 51240 "LC" 51241 ], 51242 r: 1 51243 }, 51244 "America/St_Thomas": { 51245 a: "America/Puerto_Rico", 51246 c: [ 51247 "VI" 51248 ], 51249 r: 1 51250 }, 51251 "America/St_Vincent": { 51252 a: "America/Puerto_Rico", 51253 c: [ 51254 "VC" 51255 ], 51256 r: 1 51257 }, 51258 "America/Swift_Current": { 51259 u: -360, 51260 c: [ 51261 "CA" 51262 ] 51263 }, 51264 "America/Tegucigalpa": { 51265 u: -360, 51266 c: [ 51267 "HN" 51268 ] 51269 }, 51270 "America/Thule": { 51271 u: -240, 51272 d: -180, 51273 c: [ 51274 "GL" 51275 ] 51276 }, 51277 "America/Thunder_Bay": { 51278 a: "America/Toronto", 51279 c: [ 51280 "CA" 51281 ], 51282 r: 1 51283 }, 51284 "America/Tijuana": { 51285 u: -480, 51286 d: -420, 51287 c: [ 51288 "MX" 51289 ] 51290 }, 51291 "America/Toronto": { 51292 u: -300, 51293 d: -240, 51294 c: [ 51295 "CA", 51296 "BS" 51297 ] 51298 }, 51299 "America/Tortola": { 51300 a: "America/Puerto_Rico", 51301 c: [ 51302 "VG" 51303 ], 51304 r: 1 51305 }, 51306 "America/Vancouver": { 51307 u: -480, 51308 d: -420, 51309 c: [ 51310 "CA" 51311 ] 51312 }, 51313 "America/Virgin": { 51314 a: "America/Puerto_Rico", 51315 c: [ 51316 "VI" 51317 ], 51318 r: 1 51319 }, 51320 "America/Whitehorse": { 51321 u: -420, 51322 c: [ 51323 "CA" 51324 ] 51325 }, 51326 "America/Winnipeg": { 51327 u: -360, 51328 d: -300, 51329 c: [ 51330 "CA" 51331 ] 51332 }, 51333 "America/Yakutat": { 51334 u: -540, 51335 d: -480, 51336 c: [ 51337 "US" 51338 ] 51339 }, 51340 "America/Yellowknife": { 51341 a: "America/Edmonton", 51342 r: 1 51343 }, 51344 "Antarctica/Casey": { 51345 u: 660, 51346 c: [ 51347 "AQ" 51348 ] 51349 }, 51350 "Antarctica/Davis": { 51351 u: 420, 51352 c: [ 51353 "AQ" 51354 ] 51355 }, 51356 "Antarctica/DumontDUrville": { 51357 a: "Pacific/Port_Moresby", 51358 c: [ 51359 "AQ" 51360 ], 51361 r: 1 51362 }, 51363 "Antarctica/Macquarie": { 51364 u: 600, 51365 d: 660, 51366 c: [ 51367 "AU" 51368 ] 51369 }, 51370 "Antarctica/Mawson": { 51371 u: 300, 51372 c: [ 51373 "AQ" 51374 ] 51375 }, 51376 "Antarctica/McMurdo": { 51377 a: "Pacific/Auckland", 51378 c: [ 51379 "AQ" 51380 ], 51381 r: 1 51382 }, 51383 "Antarctica/Palmer": { 51384 u: -180, 51385 c: [ 51386 "AQ" 51387 ] 51388 }, 51389 "Antarctica/Rothera": { 51390 u: -180, 51391 c: [ 51392 "AQ" 51393 ] 51394 }, 51395 "Antarctica/South_Pole": { 51396 a: "Pacific/Auckland", 51397 c: [ 51398 "AQ" 51399 ], 51400 r: 1 51401 }, 51402 "Antarctica/Syowa": { 51403 a: "Asia/Riyadh", 51404 c: [ 51405 "AQ" 51406 ], 51407 r: 1 51408 }, 51409 "Antarctica/Troll": { 51410 u: 0, 51411 d: 120, 51412 c: [ 51413 "AQ" 51414 ] 51415 }, 51416 "Antarctica/Vostok": { 51417 a: "Asia/Urumqi", 51418 c: [ 51419 "AQ" 51420 ], 51421 r: 1 51422 }, 51423 "Arctic/Longyearbyen": { 51424 a: "Europe/Berlin", 51425 c: [ 51426 "SJ" 51427 ], 51428 r: 1 51429 }, 51430 "Asia/Aden": { 51431 a: "Asia/Riyadh", 51432 c: [ 51433 "YE" 51434 ], 51435 r: 1 51436 }, 51437 "Asia/Almaty": { 51438 u: 360, 51439 c: [ 51440 "KZ" 51441 ] 51442 }, 51443 "Asia/Amman": { 51444 u: 180, 51445 c: [ 51446 "JO" 51447 ] 51448 }, 51449 "Asia/Anadyr": { 51450 u: 720, 51451 c: [ 51452 "RU" 51453 ] 51454 }, 51455 "Asia/Aqtau": { 51456 u: 300, 51457 c: [ 51458 "KZ" 51459 ] 51460 }, 51461 "Asia/Aqtobe": { 51462 u: 300, 51463 c: [ 51464 "KZ" 51465 ] 51466 }, 51467 "Asia/Ashgabat": { 51468 u: 300, 51469 c: [ 51470 "TM" 51471 ] 51472 }, 51473 "Asia/Ashkhabad": { 51474 a: "Asia/Ashgabat", 51475 r: 1 51476 }, 51477 "Asia/Atyrau": { 51478 u: 300, 51479 c: [ 51480 "KZ" 51481 ] 51482 }, 51483 "Asia/Baghdad": { 51484 u: 180, 51485 c: [ 51486 "IQ" 51487 ] 51488 }, 51489 "Asia/Bahrain": { 51490 a: "Asia/Qatar", 51491 c: [ 51492 "BH" 51493 ], 51494 r: 1 51495 }, 51496 "Asia/Baku": { 51497 u: 240, 51498 c: [ 51499 "AZ" 51500 ] 51501 }, 51502 "Asia/Bangkok": { 51503 u: 420, 51504 c: [ 51505 "TH", 51506 "CX", 51507 "KH", 51508 "LA", 51509 "VN" 51510 ] 51511 }, 51512 "Asia/Barnaul": { 51513 u: 420, 51514 c: [ 51515 "RU" 51516 ] 51517 }, 51518 "Asia/Beirut": { 51519 u: 120, 51520 d: 180, 51521 c: [ 51522 "LB" 51523 ] 51524 }, 51525 "Asia/Bishkek": { 51526 u: 360, 51527 c: [ 51528 "KG" 51529 ] 51530 }, 51531 "Asia/Brunei": { 51532 a: "Asia/Kuching", 51533 c: [ 51534 "BN" 51535 ], 51536 r: 1 51537 }, 51538 "Asia/Calcutta": { 51539 a: "Asia/Kolkata", 51540 r: 1 51541 }, 51542 "Asia/Chita": { 51543 u: 540, 51544 c: [ 51545 "RU" 51546 ] 51547 }, 51548 "Asia/Choibalsan": { 51549 u: 480, 51550 c: [ 51551 "MN" 51552 ] 51553 }, 51554 "Asia/Chongqing": { 51555 a: "Asia/Shanghai", 51556 r: 1 51557 }, 51558 "Asia/Chungking": { 51559 a: "Asia/Shanghai", 51560 r: 1 51561 }, 51562 "Asia/Colombo": { 51563 u: 330, 51564 c: [ 51565 "LK" 51566 ] 51567 }, 51568 "Asia/Dacca": { 51569 a: "Asia/Dhaka", 51570 r: 1 51571 }, 51572 "Asia/Damascus": { 51573 u: 180, 51574 c: [ 51575 "SY" 51576 ] 51577 }, 51578 "Asia/Dhaka": { 51579 u: 360, 51580 c: [ 51581 "BD" 51582 ] 51583 }, 51584 "Asia/Dili": { 51585 u: 540, 51586 c: [ 51587 "TL" 51588 ] 51589 }, 51590 "Asia/Dubai": { 51591 u: 240, 51592 c: [ 51593 "AE", 51594 "OM", 51595 "RE", 51596 "SC", 51597 "TF" 51598 ] 51599 }, 51600 "Asia/Dushanbe": { 51601 u: 300, 51602 c: [ 51603 "TJ" 51604 ] 51605 }, 51606 "Asia/Famagusta": { 51607 u: 120, 51608 d: 180, 51609 c: [ 51610 "CY" 51611 ] 51612 }, 51613 "Asia/Gaza": { 51614 u: 120, 51615 d: 180, 51616 c: [ 51617 "PS" 51618 ] 51619 }, 51620 "Asia/Harbin": { 51621 a: "Asia/Shanghai", 51622 r: 1 51623 }, 51624 "Asia/Hebron": { 51625 u: 120, 51626 d: 180, 51627 c: [ 51628 "PS" 51629 ] 51630 }, 51631 "Asia/Ho_Chi_Minh": { 51632 u: 420, 51633 c: [ 51634 "VN" 51635 ] 51636 }, 51637 "Asia/Hong_Kong": { 51638 u: 480, 51639 c: [ 51640 "HK" 51641 ] 51642 }, 51643 "Asia/Hovd": { 51644 u: 420, 51645 c: [ 51646 "MN" 51647 ] 51648 }, 51649 "Asia/Irkutsk": { 51650 u: 480, 51651 c: [ 51652 "RU" 51653 ] 51654 }, 51655 "Asia/Istanbul": { 51656 a: "Europe/Istanbul", 51657 r: 1 51658 }, 51659 "Asia/Jakarta": { 51660 u: 420, 51661 c: [ 51662 "ID" 51663 ] 51664 }, 51665 "Asia/Jayapura": { 51666 u: 540, 51667 c: [ 51668 "ID" 51669 ] 51670 }, 51671 "Asia/Jerusalem": { 51672 u: 120, 51673 d: 180, 51674 c: [ 51675 "IL" 51676 ] 51677 }, 51678 "Asia/Kabul": { 51679 u: 270, 51680 c: [ 51681 "AF" 51682 ] 51683 }, 51684 "Asia/Kamchatka": { 51685 u: 720, 51686 c: [ 51687 "RU" 51688 ] 51689 }, 51690 "Asia/Karachi": { 51691 u: 300, 51692 c: [ 51693 "PK" 51694 ] 51695 }, 51696 "Asia/Kashgar": { 51697 a: "Asia/Urumqi", 51698 c: [ 51699 "CN" 51700 ], 51701 r: 1 51702 }, 51703 "Asia/Kathmandu": { 51704 u: 345, 51705 c: [ 51706 "NP" 51707 ] 51708 }, 51709 "Asia/Katmandu": { 51710 a: "Asia/Kathmandu", 51711 r: 1 51712 }, 51713 "Asia/Khandyga": { 51714 u: 540, 51715 c: [ 51716 "RU" 51717 ] 51718 }, 51719 "Asia/Kolkata": { 51720 u: 330, 51721 c: [ 51722 "IN" 51723 ] 51724 }, 51725 "Asia/Krasnoyarsk": { 51726 u: 420, 51727 c: [ 51728 "RU" 51729 ] 51730 }, 51731 "Asia/Kuala_Lumpur": { 51732 a: "Asia/Singapore", 51733 c: [ 51734 "MY" 51735 ], 51736 r: 1 51737 }, 51738 "Asia/Kuching": { 51739 u: 480, 51740 c: [ 51741 "MY", 51742 "BN" 51743 ] 51744 }, 51745 "Asia/Kuwait": { 51746 a: "Asia/Riyadh", 51747 c: [ 51748 "KW" 51749 ], 51750 r: 1 51751 }, 51752 "Asia/Macao": { 51753 a: "Asia/Macau", 51754 r: 1 51755 }, 51756 "Asia/Macau": { 51757 u: 480, 51758 c: [ 51759 "MO" 51760 ] 51761 }, 51762 "Asia/Magadan": { 51763 u: 660, 51764 c: [ 51765 "RU" 51766 ] 51767 }, 51768 "Asia/Makassar": { 51769 u: 480, 51770 c: [ 51771 "ID" 51772 ] 51773 }, 51774 "Asia/Manila": { 51775 u: 480, 51776 c: [ 51777 "PH" 51778 ] 51779 }, 51780 "Asia/Muscat": { 51781 a: "Asia/Dubai", 51782 c: [ 51783 "OM" 51784 ], 51785 r: 1 51786 }, 51787 "Asia/Nicosia": { 51788 u: 120, 51789 d: 180, 51790 c: [ 51791 "CY" 51792 ] 51793 }, 51794 "Asia/Novokuznetsk": { 51795 u: 420, 51796 c: [ 51797 "RU" 51798 ] 51799 }, 51800 "Asia/Novosibirsk": { 51801 u: 420, 51802 c: [ 51803 "RU" 51804 ] 51805 }, 51806 "Asia/Omsk": { 51807 u: 360, 51808 c: [ 51809 "RU" 51810 ] 51811 }, 51812 "Asia/Oral": { 51813 u: 300, 51814 c: [ 51815 "KZ" 51816 ] 51817 }, 51818 "Asia/Phnom_Penh": { 51819 a: "Asia/Bangkok", 51820 c: [ 51821 "KH" 51822 ], 51823 r: 1 51824 }, 51825 "Asia/Pontianak": { 51826 u: 420, 51827 c: [ 51828 "ID" 51829 ] 51830 }, 51831 "Asia/Pyongyang": { 51832 u: 540, 51833 c: [ 51834 "KP" 51835 ] 51836 }, 51837 "Asia/Qatar": { 51838 u: 180, 51839 c: [ 51840 "QA", 51841 "BH" 51842 ] 51843 }, 51844 "Asia/Qostanay": { 51845 u: 360, 51846 c: [ 51847 "KZ" 51848 ] 51849 }, 51850 "Asia/Qyzylorda": { 51851 u: 300, 51852 c: [ 51853 "KZ" 51854 ] 51855 }, 51856 "Asia/Rangoon": { 51857 a: "Asia/Yangon", 51858 c: [ 51859 "MM" 51860 ], 51861 r: 1 51862 }, 51863 "Asia/Riyadh": { 51864 u: 180, 51865 c: [ 51866 "SA", 51867 "AQ", 51868 "KW", 51869 "YE" 51870 ] 51871 }, 51872 "Asia/Saigon": { 51873 a: "Asia/Ho_Chi_Minh", 51874 r: 1 51875 }, 51876 "Asia/Sakhalin": { 51877 u: 660, 51878 c: [ 51879 "RU" 51880 ] 51881 }, 51882 "Asia/Samarkand": { 51883 u: 300, 51884 c: [ 51885 "UZ" 51886 ] 51887 }, 51888 "Asia/Seoul": { 51889 u: 540, 51890 c: [ 51891 "KR" 51892 ] 51893 }, 51894 "Asia/Shanghai": { 51895 u: 480, 51896 c: [ 51897 "CN" 51898 ] 51899 }, 51900 "Asia/Singapore": { 51901 u: 480, 51902 c: [ 51903 "SG", 51904 "MY" 51905 ] 51906 }, 51907 "Asia/Srednekolymsk": { 51908 u: 660, 51909 c: [ 51910 "RU" 51911 ] 51912 }, 51913 "Asia/Taipei": { 51914 u: 480, 51915 c: [ 51916 "TW" 51917 ] 51918 }, 51919 "Asia/Tashkent": { 51920 u: 300, 51921 c: [ 51922 "UZ" 51923 ] 51924 }, 51925 "Asia/Tbilisi": { 51926 u: 240, 51927 c: [ 51928 "GE" 51929 ] 51930 }, 51931 "Asia/Tehran": { 51932 u: 210, 51933 c: [ 51934 "IR" 51935 ] 51936 }, 51937 "Asia/Tel_Aviv": { 51938 a: "Asia/Jerusalem", 51939 r: 1 51940 }, 51941 "Asia/Thimbu": { 51942 a: "Asia/Thimphu", 51943 r: 1 51944 }, 51945 "Asia/Thimphu": { 51946 u: 360, 51947 c: [ 51948 "BT" 51949 ] 51950 }, 51951 "Asia/Tokyo": { 51952 u: 540, 51953 c: [ 51954 "JP" 51955 ] 51956 }, 51957 "Asia/Tomsk": { 51958 u: 420, 51959 c: [ 51960 "RU" 51961 ] 51962 }, 51963 "Asia/Ujung_Pandang": { 51964 a: "Asia/Makassar", 51965 r: 1 51966 }, 51967 "Asia/Ulaanbaatar": { 51968 u: 480, 51969 c: [ 51970 "MN" 51971 ] 51972 }, 51973 "Asia/Ulan_Bator": { 51974 a: "Asia/Ulaanbaatar", 51975 r: 1 51976 }, 51977 "Asia/Urumqi": { 51978 u: 360, 51979 c: [ 51980 "CN", 51981 "AQ" 51982 ] 51983 }, 51984 "Asia/Ust-Nera": { 51985 u: 600, 51986 c: [ 51987 "RU" 51988 ] 51989 }, 51990 "Asia/Vientiane": { 51991 a: "Asia/Bangkok", 51992 c: [ 51993 "LA" 51994 ], 51995 r: 1 51996 }, 51997 "Asia/Vladivostok": { 51998 u: 600, 51999 c: [ 52000 "RU" 52001 ] 52002 }, 52003 "Asia/Yakutsk": { 52004 u: 540, 52005 c: [ 52006 "RU" 52007 ] 52008 }, 52009 "Asia/Yangon": { 52010 u: 390, 52011 c: [ 52012 "MM", 52013 "CC" 52014 ] 52015 }, 52016 "Asia/Yekaterinburg": { 52017 u: 300, 52018 c: [ 52019 "RU" 52020 ] 52021 }, 52022 "Asia/Yerevan": { 52023 u: 240, 52024 c: [ 52025 "AM" 52026 ] 52027 }, 52028 "Atlantic/Azores": { 52029 u: -60, 52030 d: 0, 52031 c: [ 52032 "PT" 52033 ] 52034 }, 52035 "Atlantic/Bermuda": { 52036 u: -240, 52037 d: -180, 52038 c: [ 52039 "BM" 52040 ] 52041 }, 52042 "Atlantic/Canary": { 52043 u: 0, 52044 d: 60, 52045 c: [ 52046 "ES" 52047 ] 52048 }, 52049 "Atlantic/Cape_Verde": { 52050 u: -60, 52051 c: [ 52052 "CV" 52053 ] 52054 }, 52055 "Atlantic/Faeroe": { 52056 a: "Atlantic/Faroe", 52057 r: 1 52058 }, 52059 "Atlantic/Faroe": { 52060 u: 0, 52061 d: 60, 52062 c: [ 52063 "FO" 52064 ] 52065 }, 52066 "Atlantic/Jan_Mayen": { 52067 a: "Europe/Berlin", 52068 c: [ 52069 "SJ" 52070 ], 52071 r: 1 52072 }, 52073 "Atlantic/Madeira": { 52074 u: 0, 52075 d: 60, 52076 c: [ 52077 "PT" 52078 ] 52079 }, 52080 "Atlantic/Reykjavik": { 52081 a: "Africa/Abidjan", 52082 c: [ 52083 "IS" 52084 ], 52085 r: 1 52086 }, 52087 "Atlantic/South_Georgia": { 52088 u: -120, 52089 c: [ 52090 "GS" 52091 ] 52092 }, 52093 "Atlantic/St_Helena": { 52094 a: "Africa/Abidjan", 52095 c: [ 52096 "SH" 52097 ], 52098 r: 1 52099 }, 52100 "Atlantic/Stanley": { 52101 u: -180, 52102 c: [ 52103 "FK" 52104 ] 52105 }, 52106 "Australia/ACT": { 52107 a: "Australia/Sydney", 52108 r: 1 52109 }, 52110 "Australia/Adelaide": { 52111 u: 570, 52112 d: 630, 52113 c: [ 52114 "AU" 52115 ] 52116 }, 52117 "Australia/Brisbane": { 52118 u: 600, 52119 c: [ 52120 "AU" 52121 ] 52122 }, 52123 "Australia/Broken_Hill": { 52124 u: 570, 52125 d: 630, 52126 c: [ 52127 "AU" 52128 ] 52129 }, 52130 "Australia/Canberra": { 52131 a: "Australia/Sydney", 52132 r: 1 52133 }, 52134 "Australia/Currie": { 52135 a: "Australia/Hobart", 52136 r: 1 52137 }, 52138 "Australia/Darwin": { 52139 u: 570, 52140 c: [ 52141 "AU" 52142 ] 52143 }, 52144 "Australia/Eucla": { 52145 u: 525, 52146 c: [ 52147 "AU" 52148 ] 52149 }, 52150 "Australia/Hobart": { 52151 u: 600, 52152 d: 660, 52153 c: [ 52154 "AU" 52155 ] 52156 }, 52157 "Australia/LHI": { 52158 a: "Australia/Lord_Howe", 52159 r: 1 52160 }, 52161 "Australia/Lindeman": { 52162 u: 600, 52163 c: [ 52164 "AU" 52165 ] 52166 }, 52167 "Australia/Lord_Howe": { 52168 u: 630, 52169 d: 660, 52170 c: [ 52171 "AU" 52172 ] 52173 }, 52174 "Australia/Melbourne": { 52175 u: 600, 52176 d: 660, 52177 c: [ 52178 "AU" 52179 ] 52180 }, 52181 "Australia/NSW": { 52182 a: "Australia/Sydney", 52183 r: 1 52184 }, 52185 "Australia/North": { 52186 a: "Australia/Darwin", 52187 r: 1 52188 }, 52189 "Australia/Perth": { 52190 u: 480, 52191 c: [ 52192 "AU" 52193 ] 52194 }, 52195 "Australia/Queensland": { 52196 a: "Australia/Brisbane", 52197 r: 1 52198 }, 52199 "Australia/South": { 52200 a: "Australia/Adelaide", 52201 r: 1 52202 }, 52203 "Australia/Sydney": { 52204 u: 600, 52205 d: 660, 52206 c: [ 52207 "AU" 52208 ] 52209 }, 52210 "Australia/Tasmania": { 52211 a: "Australia/Hobart", 52212 r: 1 52213 }, 52214 "Australia/Victoria": { 52215 a: "Australia/Melbourne", 52216 r: 1 52217 }, 52218 "Australia/West": { 52219 a: "Australia/Perth", 52220 r: 1 52221 }, 52222 "Australia/Yancowinna": { 52223 a: "Australia/Broken_Hill", 52224 r: 1 52225 }, 52226 "Brazil/Acre": { 52227 a: "America/Rio_Branco", 52228 r: 1 52229 }, 52230 "Brazil/DeNoronha": { 52231 a: "America/Noronha", 52232 r: 1 52233 }, 52234 "Brazil/East": { 52235 a: "America/Sao_Paulo", 52236 r: 1 52237 }, 52238 "Brazil/West": { 52239 a: "America/Manaus", 52240 r: 1 52241 }, 52242 CET: { 52243 u: 60, 52244 d: 120 52245 }, 52246 CST6CDT: { 52247 u: -360, 52248 d: -300 52249 }, 52250 "Canada/Atlantic": { 52251 a: "America/Halifax", 52252 r: 1 52253 }, 52254 "Canada/Central": { 52255 a: "America/Winnipeg", 52256 r: 1 52257 }, 52258 "Canada/Eastern": { 52259 a: "America/Toronto", 52260 c: [ 52261 "CA" 52262 ], 52263 r: 1 52264 }, 52265 "Canada/Mountain": { 52266 a: "America/Edmonton", 52267 r: 1 52268 }, 52269 "Canada/Newfoundland": { 52270 a: "America/St_Johns", 52271 r: 1 52272 }, 52273 "Canada/Pacific": { 52274 a: "America/Vancouver", 52275 r: 1 52276 }, 52277 "Canada/Saskatchewan": { 52278 a: "America/Regina", 52279 r: 1 52280 }, 52281 "Canada/Yukon": { 52282 a: "America/Whitehorse", 52283 r: 1 52284 }, 52285 "Chile/Continental": { 52286 a: "America/Santiago", 52287 r: 1 52288 }, 52289 "Chile/EasterIsland": { 52290 a: "Pacific/Easter", 52291 r: 1 52292 }, 52293 Cuba: { 52294 a: "America/Havana", 52295 r: 1 52296 }, 52297 EET: { 52298 u: 120, 52299 d: 180 52300 }, 52301 EST: { 52302 u: -300 52303 }, 52304 EST5EDT: { 52305 u: -300, 52306 d: -240 52307 }, 52308 Egypt: { 52309 a: "Africa/Cairo", 52310 r: 1 52311 }, 52312 Eire: { 52313 a: "Europe/Dublin", 52314 r: 1 52315 }, 52316 "Etc/GMT": { 52317 u: 0 52318 }, 52319 "Etc/GMT+0": { 52320 a: "Etc/GMT", 52321 r: 1 52322 }, 52323 "Etc/GMT+1": { 52324 u: -60 52325 }, 52326 "Etc/GMT+10": { 52327 u: -600 52328 }, 52329 "Etc/GMT+11": { 52330 u: -660 52331 }, 52332 "Etc/GMT+12": { 52333 u: -720 52334 }, 52335 "Etc/GMT+2": { 52336 u: -120 52337 }, 52338 "Etc/GMT+3": { 52339 u: -180 52340 }, 52341 "Etc/GMT+4": { 52342 u: -240 52343 }, 52344 "Etc/GMT+5": { 52345 u: -300 52346 }, 52347 "Etc/GMT+6": { 52348 u: -360 52349 }, 52350 "Etc/GMT+7": { 52351 u: -420 52352 }, 52353 "Etc/GMT+8": { 52354 u: -480 52355 }, 52356 "Etc/GMT+9": { 52357 u: -540 52358 }, 52359 "Etc/GMT-0": { 52360 a: "Etc/GMT", 52361 r: 1 52362 }, 52363 "Etc/GMT-1": { 52364 u: 60 52365 }, 52366 "Etc/GMT-10": { 52367 u: 600 52368 }, 52369 "Etc/GMT-11": { 52370 u: 660 52371 }, 52372 "Etc/GMT-12": { 52373 u: 720 52374 }, 52375 "Etc/GMT-13": { 52376 u: 780 52377 }, 52378 "Etc/GMT-14": { 52379 u: 840 52380 }, 52381 "Etc/GMT-2": { 52382 u: 120 52383 }, 52384 "Etc/GMT-3": { 52385 u: 180 52386 }, 52387 "Etc/GMT-4": { 52388 u: 240 52389 }, 52390 "Etc/GMT-5": { 52391 u: 300 52392 }, 52393 "Etc/GMT-6": { 52394 u: 360 52395 }, 52396 "Etc/GMT-7": { 52397 u: 420 52398 }, 52399 "Etc/GMT-8": { 52400 u: 480 52401 }, 52402 "Etc/GMT-9": { 52403 u: 540 52404 }, 52405 "Etc/GMT0": { 52406 a: "Etc/GMT", 52407 r: 1 52408 }, 52409 "Etc/Greenwich": { 52410 a: "Etc/GMT", 52411 r: 1 52412 }, 52413 "Etc/UCT": { 52414 a: "Etc/UTC", 52415 r: 1 52416 }, 52417 "Etc/UTC": { 52418 u: 0 52419 }, 52420 "Etc/Universal": { 52421 a: "Etc/UTC", 52422 r: 1 52423 }, 52424 "Etc/Zulu": { 52425 a: "Etc/UTC", 52426 r: 1 52427 }, 52428 "Europe/Amsterdam": { 52429 a: "Europe/Brussels", 52430 c: [ 52431 "NL" 52432 ], 52433 r: 1 52434 }, 52435 "Europe/Andorra": { 52436 u: 60, 52437 d: 120, 52438 c: [ 52439 "AD" 52440 ] 52441 }, 52442 "Europe/Astrakhan": { 52443 u: 240, 52444 c: [ 52445 "RU" 52446 ] 52447 }, 52448 "Europe/Athens": { 52449 u: 120, 52450 d: 180, 52451 c: [ 52452 "GR" 52453 ] 52454 }, 52455 "Europe/Belfast": { 52456 a: "Europe/London", 52457 c: [ 52458 "GB" 52459 ], 52460 r: 1 52461 }, 52462 "Europe/Belgrade": { 52463 u: 60, 52464 d: 120, 52465 c: [ 52466 "RS", 52467 "BA", 52468 "HR", 52469 "ME", 52470 "MK", 52471 "SI" 52472 ] 52473 }, 52474 "Europe/Berlin": { 52475 u: 60, 52476 d: 120, 52477 c: [ 52478 "DE", 52479 "DK", 52480 "NO", 52481 "SE", 52482 "SJ" 52483 ] 52484 }, 52485 "Europe/Bratislava": { 52486 a: "Europe/Prague", 52487 c: [ 52488 "SK" 52489 ], 52490 r: 1 52491 }, 52492 "Europe/Brussels": { 52493 u: 60, 52494 d: 120, 52495 c: [ 52496 "BE", 52497 "LU", 52498 "NL" 52499 ] 52500 }, 52501 "Europe/Bucharest": { 52502 u: 120, 52503 d: 180, 52504 c: [ 52505 "RO" 52506 ] 52507 }, 52508 "Europe/Budapest": { 52509 u: 60, 52510 d: 120, 52511 c: [ 52512 "HU" 52513 ] 52514 }, 52515 "Europe/Busingen": { 52516 a: "Europe/Zurich", 52517 c: [ 52518 "DE" 52519 ], 52520 r: 1 52521 }, 52522 "Europe/Chisinau": { 52523 u: 120, 52524 d: 180, 52525 c: [ 52526 "MD" 52527 ] 52528 }, 52529 "Europe/Copenhagen": { 52530 a: "Europe/Berlin", 52531 c: [ 52532 "DK" 52533 ], 52534 r: 1 52535 }, 52536 "Europe/Dublin": { 52537 u: 60, 52538 d: 0, 52539 c: [ 52540 "IE" 52541 ] 52542 }, 52543 "Europe/Gibraltar": { 52544 u: 60, 52545 d: 120, 52546 c: [ 52547 "GI" 52548 ] 52549 }, 52550 "Europe/Guernsey": { 52551 a: "Europe/London", 52552 c: [ 52553 "GG" 52554 ], 52555 r: 1 52556 }, 52557 "Europe/Helsinki": { 52558 u: 120, 52559 d: 180, 52560 c: [ 52561 "FI", 52562 "AX" 52563 ] 52564 }, 52565 "Europe/Isle_of_Man": { 52566 a: "Europe/London", 52567 c: [ 52568 "IM" 52569 ], 52570 r: 1 52571 }, 52572 "Europe/Istanbul": { 52573 u: 180, 52574 c: [ 52575 "TR" 52576 ] 52577 }, 52578 "Europe/Jersey": { 52579 a: "Europe/London", 52580 c: [ 52581 "JE" 52582 ], 52583 r: 1 52584 }, 52585 "Europe/Kaliningrad": { 52586 u: 120, 52587 c: [ 52588 "RU" 52589 ] 52590 }, 52591 "Europe/Kiev": { 52592 a: "Europe/Kyiv", 52593 r: 1 52594 }, 52595 "Europe/Kirov": { 52596 u: 180, 52597 c: [ 52598 "RU" 52599 ] 52600 }, 52601 "Europe/Kyiv": { 52602 u: 120, 52603 d: 180, 52604 c: [ 52605 "UA" 52606 ] 52607 }, 52608 "Europe/Lisbon": { 52609 u: 0, 52610 d: 60, 52611 c: [ 52612 "PT" 52613 ] 52614 }, 52615 "Europe/Ljubljana": { 52616 a: "Europe/Belgrade", 52617 c: [ 52618 "SI" 52619 ], 52620 r: 1 52621 }, 52622 "Europe/London": { 52623 u: 0, 52624 d: 60, 52625 c: [ 52626 "GB", 52627 "GG", 52628 "IM", 52629 "JE" 52630 ] 52631 }, 52632 "Europe/Luxembourg": { 52633 a: "Europe/Brussels", 52634 c: [ 52635 "LU" 52636 ], 52637 r: 1 52638 }, 52639 "Europe/Madrid": { 52640 u: 60, 52641 d: 120, 52642 c: [ 52643 "ES" 52644 ] 52645 }, 52646 "Europe/Malta": { 52647 u: 60, 52648 d: 120, 52649 c: [ 52650 "MT" 52651 ] 52652 }, 52653 "Europe/Mariehamn": { 52654 a: "Europe/Helsinki", 52655 c: [ 52656 "AX" 52657 ], 52658 r: 1 52659 }, 52660 "Europe/Minsk": { 52661 u: 180, 52662 c: [ 52663 "BY" 52664 ] 52665 }, 52666 "Europe/Monaco": { 52667 a: "Europe/Paris", 52668 c: [ 52669 "MC" 52670 ], 52671 r: 1 52672 }, 52673 "Europe/Moscow": { 52674 u: 180, 52675 c: [ 52676 "RU" 52677 ] 52678 }, 52679 "Europe/Nicosia": { 52680 a: "Asia/Nicosia", 52681 r: 1 52682 }, 52683 "Europe/Oslo": { 52684 a: "Europe/Berlin", 52685 c: [ 52686 "NO" 52687 ], 52688 r: 1 52689 }, 52690 "Europe/Paris": { 52691 u: 60, 52692 d: 120, 52693 c: [ 52694 "FR", 52695 "MC" 52696 ] 52697 }, 52698 "Europe/Podgorica": { 52699 a: "Europe/Belgrade", 52700 c: [ 52701 "ME" 52702 ], 52703 r: 1 52704 }, 52705 "Europe/Prague": { 52706 u: 60, 52707 d: 120, 52708 c: [ 52709 "CZ", 52710 "SK" 52711 ] 52712 }, 52713 "Europe/Riga": { 52714 u: 120, 52715 d: 180, 52716 c: [ 52717 "LV" 52718 ] 52719 }, 52720 "Europe/Rome": { 52721 u: 60, 52722 d: 120, 52723 c: [ 52724 "IT", 52725 "SM", 52726 "VA" 52727 ] 52728 }, 52729 "Europe/Samara": { 52730 u: 240, 52731 c: [ 52732 "RU" 52733 ] 52734 }, 52735 "Europe/San_Marino": { 52736 a: "Europe/Rome", 52737 c: [ 52738 "SM" 52739 ], 52740 r: 1 52741 }, 52742 "Europe/Sarajevo": { 52743 a: "Europe/Belgrade", 52744 c: [ 52745 "BA" 52746 ], 52747 r: 1 52748 }, 52749 "Europe/Saratov": { 52750 u: 240, 52751 c: [ 52752 "RU" 52753 ] 52754 }, 52755 "Europe/Simferopol": { 52756 u: 180, 52757 c: [ 52758 "RU", 52759 "UA" 52760 ] 52761 }, 52762 "Europe/Skopje": { 52763 a: "Europe/Belgrade", 52764 c: [ 52765 "MK" 52766 ], 52767 r: 1 52768 }, 52769 "Europe/Sofia": { 52770 u: 120, 52771 d: 180, 52772 c: [ 52773 "BG" 52774 ] 52775 }, 52776 "Europe/Stockholm": { 52777 a: "Europe/Berlin", 52778 c: [ 52779 "SE" 52780 ], 52781 r: 1 52782 }, 52783 "Europe/Tallinn": { 52784 u: 120, 52785 d: 180, 52786 c: [ 52787 "EE" 52788 ] 52789 }, 52790 "Europe/Tirane": { 52791 u: 60, 52792 d: 120, 52793 c: [ 52794 "AL" 52795 ] 52796 }, 52797 "Europe/Tiraspol": { 52798 a: "Europe/Chisinau", 52799 r: 1 52800 }, 52801 "Europe/Ulyanovsk": { 52802 u: 240, 52803 c: [ 52804 "RU" 52805 ] 52806 }, 52807 "Europe/Uzhgorod": { 52808 a: "Europe/Kyiv", 52809 r: 1 52810 }, 52811 "Europe/Vaduz": { 52812 a: "Europe/Zurich", 52813 c: [ 52814 "LI" 52815 ], 52816 r: 1 52817 }, 52818 "Europe/Vatican": { 52819 a: "Europe/Rome", 52820 c: [ 52821 "VA" 52822 ], 52823 r: 1 52824 }, 52825 "Europe/Vienna": { 52826 u: 60, 52827 d: 120, 52828 c: [ 52829 "AT" 52830 ] 52831 }, 52832 "Europe/Vilnius": { 52833 u: 120, 52834 d: 180, 52835 c: [ 52836 "LT" 52837 ] 52838 }, 52839 "Europe/Volgograd": { 52840 u: 180, 52841 c: [ 52842 "RU" 52843 ] 52844 }, 52845 "Europe/Warsaw": { 52846 u: 60, 52847 d: 120, 52848 c: [ 52849 "PL" 52850 ] 52851 }, 52852 "Europe/Zagreb": { 52853 a: "Europe/Belgrade", 52854 c: [ 52855 "HR" 52856 ], 52857 r: 1 52858 }, 52859 "Europe/Zaporozhye": { 52860 a: "Europe/Kyiv", 52861 r: 1 52862 }, 52863 "Europe/Zurich": { 52864 u: 60, 52865 d: 120, 52866 c: [ 52867 "CH", 52868 "DE", 52869 "LI" 52870 ] 52871 }, 52872 Factory: { 52873 u: 0 52874 }, 52875 GB: { 52876 a: "Europe/London", 52877 c: [ 52878 "GB" 52879 ], 52880 r: 1 52881 }, 52882 "GB-Eire": { 52883 a: "Europe/London", 52884 c: [ 52885 "GB" 52886 ], 52887 r: 1 52888 }, 52889 GMT: { 52890 a: "Etc/GMT", 52891 r: 1 52892 }, 52893 "GMT+0": { 52894 a: "Etc/GMT", 52895 r: 1 52896 }, 52897 "GMT-0": { 52898 a: "Etc/GMT", 52899 r: 1 52900 }, 52901 GMT0: { 52902 a: "Etc/GMT", 52903 r: 1 52904 }, 52905 Greenwich: { 52906 a: "Etc/GMT", 52907 r: 1 52908 }, 52909 HST: { 52910 u: -600 52911 }, 52912 Hongkong: { 52913 a: "Asia/Hong_Kong", 52914 r: 1 52915 }, 52916 Iceland: { 52917 a: "Africa/Abidjan", 52918 c: [ 52919 "IS" 52920 ], 52921 r: 1 52922 }, 52923 "Indian/Antananarivo": { 52924 a: "Africa/Nairobi", 52925 c: [ 52926 "MG" 52927 ], 52928 r: 1 52929 }, 52930 "Indian/Chagos": { 52931 u: 360, 52932 c: [ 52933 "IO" 52934 ] 52935 }, 52936 "Indian/Christmas": { 52937 a: "Asia/Bangkok", 52938 c: [ 52939 "CX" 52940 ], 52941 r: 1 52942 }, 52943 "Indian/Cocos": { 52944 a: "Asia/Yangon", 52945 c: [ 52946 "CC" 52947 ], 52948 r: 1 52949 }, 52950 "Indian/Comoro": { 52951 a: "Africa/Nairobi", 52952 c: [ 52953 "KM" 52954 ], 52955 r: 1 52956 }, 52957 "Indian/Kerguelen": { 52958 a: "Indian/Maldives", 52959 c: [ 52960 "TF" 52961 ], 52962 r: 1 52963 }, 52964 "Indian/Mahe": { 52965 a: "Asia/Dubai", 52966 c: [ 52967 "SC" 52968 ], 52969 r: 1 52970 }, 52971 "Indian/Maldives": { 52972 u: 300, 52973 c: [ 52974 "MV", 52975 "TF" 52976 ] 52977 }, 52978 "Indian/Mauritius": { 52979 u: 240, 52980 c: [ 52981 "MU" 52982 ] 52983 }, 52984 "Indian/Mayotte": { 52985 a: "Africa/Nairobi", 52986 c: [ 52987 "YT" 52988 ], 52989 r: 1 52990 }, 52991 "Indian/Reunion": { 52992 a: "Asia/Dubai", 52993 c: [ 52994 "RE" 52995 ], 52996 r: 1 52997 }, 52998 Iran: { 52999 a: "Asia/Tehran", 53000 r: 1 53001 }, 53002 Israel: { 53003 a: "Asia/Jerusalem", 53004 r: 1 53005 }, 53006 Jamaica: { 53007 a: "America/Jamaica", 53008 r: 1 53009 }, 53010 Japan: { 53011 a: "Asia/Tokyo", 53012 r: 1 53013 }, 53014 Kwajalein: { 53015 a: "Pacific/Kwajalein", 53016 r: 1 53017 }, 53018 Libya: { 53019 a: "Africa/Tripoli", 53020 r: 1 53021 }, 53022 MET: { 53023 u: 60, 53024 d: 120 53025 }, 53026 MST: { 53027 u: -420 53028 }, 53029 MST7MDT: { 53030 u: -420, 53031 d: -360 53032 }, 53033 "Mexico/BajaNorte": { 53034 a: "America/Tijuana", 53035 r: 1 53036 }, 53037 "Mexico/BajaSur": { 53038 a: "America/Mazatlan", 53039 r: 1 53040 }, 53041 "Mexico/General": { 53042 a: "America/Mexico_City", 53043 r: 1 53044 }, 53045 NZ: { 53046 a: "Pacific/Auckland", 53047 c: [ 53048 "NZ" 53049 ], 53050 r: 1 53051 }, 53052 "NZ-CHAT": { 53053 a: "Pacific/Chatham", 53054 r: 1 53055 }, 53056 Navajo: { 53057 a: "America/Denver", 53058 r: 1 53059 }, 53060 PRC: { 53061 a: "Asia/Shanghai", 53062 r: 1 53063 }, 53064 PST8PDT: { 53065 u: -480, 53066 d: -420 53067 }, 53068 "Pacific/Apia": { 53069 u: 780, 53070 c: [ 53071 "WS" 53072 ] 53073 }, 53074 "Pacific/Auckland": { 53075 u: 720, 53076 d: 780, 53077 c: [ 53078 "NZ", 53079 "AQ" 53080 ] 53081 }, 53082 "Pacific/Bougainville": { 53083 u: 660, 53084 c: [ 53085 "PG" 53086 ] 53087 }, 53088 "Pacific/Chatham": { 53089 u: 765, 53090 d: 825, 53091 c: [ 53092 "NZ" 53093 ] 53094 }, 53095 "Pacific/Chuuk": { 53096 a: "Pacific/Port_Moresby", 53097 c: [ 53098 "FM" 53099 ], 53100 r: 1 53101 }, 53102 "Pacific/Easter": { 53103 u: -360, 53104 d: -300, 53105 c: [ 53106 "CL" 53107 ] 53108 }, 53109 "Pacific/Efate": { 53110 u: 660, 53111 c: [ 53112 "VU" 53113 ] 53114 }, 53115 "Pacific/Enderbury": { 53116 a: "Pacific/Kanton", 53117 r: 1 53118 }, 53119 "Pacific/Fakaofo": { 53120 u: 780, 53121 c: [ 53122 "TK" 53123 ] 53124 }, 53125 "Pacific/Fiji": { 53126 u: 720, 53127 c: [ 53128 "FJ" 53129 ] 53130 }, 53131 "Pacific/Funafuti": { 53132 a: "Pacific/Tarawa", 53133 c: [ 53134 "TV" 53135 ], 53136 r: 1 53137 }, 53138 "Pacific/Galapagos": { 53139 u: -360, 53140 c: [ 53141 "EC" 53142 ] 53143 }, 53144 "Pacific/Gambier": { 53145 u: -540, 53146 c: [ 53147 "PF" 53148 ] 53149 }, 53150 "Pacific/Guadalcanal": { 53151 u: 660, 53152 c: [ 53153 "SB", 53154 "FM" 53155 ] 53156 }, 53157 "Pacific/Guam": { 53158 u: 600, 53159 c: [ 53160 "GU", 53161 "MP" 53162 ] 53163 }, 53164 "Pacific/Honolulu": { 53165 u: -600, 53166 c: [ 53167 "US" 53168 ] 53169 }, 53170 "Pacific/Johnston": { 53171 a: "Pacific/Honolulu", 53172 r: 1 53173 }, 53174 "Pacific/Kanton": { 53175 u: 780, 53176 c: [ 53177 "KI" 53178 ] 53179 }, 53180 "Pacific/Kiritimati": { 53181 u: 840, 53182 c: [ 53183 "KI" 53184 ] 53185 }, 53186 "Pacific/Kosrae": { 53187 u: 660, 53188 c: [ 53189 "FM" 53190 ] 53191 }, 53192 "Pacific/Kwajalein": { 53193 u: 720, 53194 c: [ 53195 "MH" 53196 ] 53197 }, 53198 "Pacific/Majuro": { 53199 a: "Pacific/Tarawa", 53200 c: [ 53201 "MH" 53202 ], 53203 r: 1 53204 }, 53205 "Pacific/Marquesas": { 53206 u: -570, 53207 c: [ 53208 "PF" 53209 ] 53210 }, 53211 "Pacific/Midway": { 53212 a: "Pacific/Pago_Pago", 53213 c: [ 53214 "UM" 53215 ], 53216 r: 1 53217 }, 53218 "Pacific/Nauru": { 53219 u: 720, 53220 c: [ 53221 "NR" 53222 ] 53223 }, 53224 "Pacific/Niue": { 53225 u: -660, 53226 c: [ 53227 "NU" 53228 ] 53229 }, 53230 "Pacific/Norfolk": { 53231 u: 660, 53232 d: 720, 53233 c: [ 53234 "NF" 53235 ] 53236 }, 53237 "Pacific/Noumea": { 53238 u: 660, 53239 c: [ 53240 "NC" 53241 ] 53242 }, 53243 "Pacific/Pago_Pago": { 53244 u: -660, 53245 c: [ 53246 "AS", 53247 "UM" 53248 ] 53249 }, 53250 "Pacific/Palau": { 53251 u: 540, 53252 c: [ 53253 "PW" 53254 ] 53255 }, 53256 "Pacific/Pitcairn": { 53257 u: -480, 53258 c: [ 53259 "PN" 53260 ] 53261 }, 53262 "Pacific/Pohnpei": { 53263 a: "Pacific/Guadalcanal", 53264 c: [ 53265 "FM" 53266 ], 53267 r: 1 53268 }, 53269 "Pacific/Ponape": { 53270 a: "Pacific/Guadalcanal", 53271 c: [ 53272 "FM" 53273 ], 53274 r: 1 53275 }, 53276 "Pacific/Port_Moresby": { 53277 u: 600, 53278 c: [ 53279 "PG", 53280 "AQ", 53281 "FM" 53282 ] 53283 }, 53284 "Pacific/Rarotonga": { 53285 u: -600, 53286 c: [ 53287 "CK" 53288 ] 53289 }, 53290 "Pacific/Saipan": { 53291 a: "Pacific/Guam", 53292 c: [ 53293 "MP" 53294 ], 53295 r: 1 53296 }, 53297 "Pacific/Samoa": { 53298 a: "Pacific/Pago_Pago", 53299 c: [ 53300 "AS" 53301 ], 53302 r: 1 53303 }, 53304 "Pacific/Tahiti": { 53305 u: -600, 53306 c: [ 53307 "PF" 53308 ] 53309 }, 53310 "Pacific/Tarawa": { 53311 u: 720, 53312 c: [ 53313 "KI", 53314 "MH", 53315 "TV", 53316 "UM", 53317 "WF" 53318 ] 53319 }, 53320 "Pacific/Tongatapu": { 53321 u: 780, 53322 c: [ 53323 "TO" 53324 ] 53325 }, 53326 "Pacific/Truk": { 53327 a: "Pacific/Port_Moresby", 53328 c: [ 53329 "FM" 53330 ], 53331 r: 1 53332 }, 53333 "Pacific/Wake": { 53334 a: "Pacific/Tarawa", 53335 c: [ 53336 "UM" 53337 ], 53338 r: 1 53339 }, 53340 "Pacific/Wallis": { 53341 a: "Pacific/Tarawa", 53342 c: [ 53343 "WF" 53344 ], 53345 r: 1 53346 }, 53347 "Pacific/Yap": { 53348 a: "Pacific/Port_Moresby", 53349 c: [ 53350 "FM" 53351 ], 53352 r: 1 53353 }, 53354 Poland: { 53355 a: "Europe/Warsaw", 53356 r: 1 53357 }, 53358 Portugal: { 53359 a: "Europe/Lisbon", 53360 r: 1 53361 }, 53362 ROC: { 53363 a: "Asia/Taipei", 53364 r: 1 53365 }, 53366 ROK: { 53367 a: "Asia/Seoul", 53368 r: 1 53369 }, 53370 Singapore: { 53371 a: "Asia/Singapore", 53372 c: [ 53373 "SG" 53374 ], 53375 r: 1 53376 }, 53377 Turkey: { 53378 a: "Europe/Istanbul", 53379 r: 1 53380 }, 53381 UCT: { 53382 a: "Etc/UTC", 53383 r: 1 53384 }, 53385 "US/Alaska": { 53386 a: "America/Anchorage", 53387 r: 1 53388 }, 53389 "US/Aleutian": { 53390 a: "America/Adak", 53391 r: 1 53392 }, 53393 "US/Arizona": { 53394 a: "America/Phoenix", 53395 c: [ 53396 "US" 53397 ], 53398 r: 1 53399 }, 53400 "US/Central": { 53401 a: "America/Chicago", 53402 r: 1 53403 }, 53404 "US/East-Indiana": { 53405 a: "America/Indiana/Indianapolis", 53406 r: 1 53407 }, 53408 "US/Eastern": {
53409 a: "America/New_York", 53410 r: 1 53411 }, 53412 "US/Hawaii": { 53413 a: "Pacific/Honolulu", 53414 r: 1 53415 }, 53416 "US/Indiana-Starke": { 53417 a: "America/Indiana/Knox", 53418 r: 1 53419 }, 53420 "US/Michigan": { 53421 a: "America/Detroit", 53422 r: 1 53423 }, 53424 "US/Mountain": { 53425 a: "America/Denver", 53426 r: 1 53427 }, 53428 "US/Pacific": { 53429 a: "America/Los_Angeles", 53430 r: 1 53431 }, 53432 "US/Samoa": { 53433 a: "Pacific/Pago_Pago", 53434 c: [ 53435 "AS" 53436 ], 53437 r: 1 53438 }, 53439 UTC: { 53440 a: "Etc/UTC", 53441 r: 1 53442 }, 53443 Universal: { 53444 a: "Etc/UTC", 53445 r: 1 53446 }, 53447 "W-SU": { 53448 a: "Europe/Moscow", 53449 r: 1 53450 }, 53451 WET: { 53452 u: 0, 53453 d: 60 53454 }, 53455 Zulu: { 53456 a: "Etc/UTC", 53457 r: 1 53458 } 53459 }; 53460 var data = { 53461 countries: countries$1, 53462 timezones: timezones$1 53463 }; 53464 53465 var timezonesMap; 53466 function buildCountry(data, id) { 53467 var name = data.countries[id]; 53468 if (!name) return null; 53469 var tzMap = getTimezonesMap(data)[id] || {}; 53470 return { 53471 id: id, 53472 name: name, 53473 timezones: tzMap.current || [], 53474 allTimezones: tzMap.all || [] 53475 }; 53476 } 53477 function getTimezonesMap(data) { 53478 if (!timezonesMap) timezonesMap = buildTimezonesMap(data); 53479 return timezonesMap; 53480 } 53481 function buildTimezonesMap(data) { 53482 return Object.keys(data.timezones).reduce(function (result, id) { 53483 var tz = data.timezones[id]; 53484 var c = tz.c, 53485 a = tz.a; 53486 var aliasTz = data.timezones[a] || {}; 53487 var countries = c || aliasTz.c; 53488 if (!countries) return result; 53489 countries.forEach(function (country) { 53490 if (!result[country]) Object.assign(result, _defineProperty({}, country, { 53491 current: [], 53492 all: [] 53493 })); 53494 if (tz.r === undefined) result[country].current.push(id); 53495 result[country].all.push(id); 53496 }); 53497 return result; 53498 }, {}); 53499 } 53500 53501 function buildTimezone(data, name) { 53502 var timezone = data.timezones[name]; 53503 if (!timezone) return null; 53504 var _timezone$a = timezone.a, 53505 aliasOf = _timezone$a === void 0 ? null : _timezone$a; 53506 var aliasTz = aliasOf ? data.timezones[aliasOf] : {}; 53507 var tz = _objectSpread2(_objectSpread2({}, aliasTz), data.timezones[name]); 53508 var countries = tz.c || []; 53509 var utcOffset = tz.u; 53510 var dstOffset = Number.isInteger(tz.d) ? tz.d : utcOffset; 53511 var result = { 53512 name: name, 53513 countries: countries, 53514 utcOffset: utcOffset, 53515 utcOffsetStr: getOffsetStr(utcOffset), 53516 dstOffset: dstOffset, 53517 dstOffsetStr: getOffsetStr(dstOffset), 53518 aliasOf: aliasOf 53519 }; 53520 if (timezone.r) result.deprecated = true; 53521 return result; 53522 } 53523 function getOffsetStr(offset) { 53524 var hours = Math.floor(Math.abs(offset) / 60); 53525 var min = offset % 60; 53526 var sign = offset < 0 ? '-' : '+'; 53527 return "".concat(sign).concat(getNumStr(hours), ":").concat(getNumStr(min)); 53528 } 53529 function getNumStr(input) { 53530 var num = Math.abs(input); 53531 var prefix = num < 10 ? '0' : ''; 53532 return "".concat(prefix).concat(num); 53533 } 53534 53535 var _excluded = ["allTimezones"]; 53536 Object.keys(data.timezones).length; 53537 var countries$2 = {}; 53538 var timezones = {}; 53539 function getCountry(id) { 53540 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 53541 if (!countries$2[id]) memoizeCountry(buildCountry(data, id)); 53542 return deliverCountry(countries$2[id], options); 53543 } 53544 function memoizeCountry(country) { 53545 if (!country) return; 53546 countries$2[country.id] = country; 53547 } 53548 function getTimezone(name) { 53549 if (!timezones[name]) memoizeTimezone(buildTimezone(data, name)); 53550 return timezones[name] ? _objectSpread2({}, timezones[name]) : null; 53551 } 53552 function memoizeTimezone(timezone) { 53553 if (!timezone) return; 53554 timezones[timezone.name] = timezone; 53555 Object.keys(timezone).length; 53556 } 53557 function getCountriesForTimezone(tzName) { 53558 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 53559 var timezone = getTimezone(tzName) || {}; 53560 var values = timezone.countries || []; 53561 return values.map(function (c) { 53562 return getCountry(c, options); 53563 }); 53564 } 53565 function deliverCountry(country, options) { 53566 if (!country) return null; 53567 var _ref2 = options || {}, 53568 deprecated = _ref2.deprecated; 53569 country.allTimezones; 53570 var other = _objectWithoutProperties(country, _excluded); 53571 var tz = deprecated ? country.allTimezones : country.timezones;
53572 return _objectSpread2(_objectSpread2({}, other), {}, { 53573 timezones: tz 53574 }); 53575 } 53576 53577 const timezoneCountryId = () => { 53578 const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone; 53579 return getCountriesForTimezone(timezone)[0]?.id ?? ''; 53580 }; 53581 53582 function buildPreviewPayload(form, formState) { 53583 const terms = formState.paymentOption.terms; 53584 return { 53585 account: { 53586 city: unknownToEmpty(formConfigAs(form).requestCity), 53587 country: unknownToEmpty(formConfigAs(form).requestCountry) || timezoneCountryId(), 53588 county: '', 53589 state: unknownToEmpty(formConfigAs(form).requestState), 53590 zipCode: unknownToEmpty(formConfigAs(form).requestZipCode) 53591 }, 53592 currency: getRelevantCurrency(form, formState), 53593 ratePlanIds: [formState.paymentOption.slug], 53594 ...(terms ? { 53595 termType: terms.initialTerm.termType, 53596 ...(terms.initialTerm.termType === 'TERMED' ? { 53597 initialTerm: terms.initialTerm.period, 53598 initialTermPeriodType: terms.initialTerm.periodType, 53599 } : {}), 53600 } : { 53601 termType: "EVERGREEN", 53602 }), 53603 ...(formState.dynamicOfferResult ? { 53604 dynamicOfferResult: JSON.stringify(formState.dynamicOfferResult), 53605 productId: formState.paymentOption.productId 53606 } : {}), 53607 }; 53608 } 53609 const calculateZuoraPrice = (form, formState, formActions) => { 53610 return loadZuora() 53611 .then(() => getPreview(form, formState, formActions)) 53612 .then((previewResponse) => { 53613 if (previewResponse.pfToken) { 53614 formActions.updateFormState({ 53615 pfToken: previewResponse.pfToken 53616 }); 53617 } 53618 return { 53619 slug: formState.paymentOption.slug, 53620 productId: formState.paymentOption.productId, 53621 promoCode: formState.promoCode, 53622 addonPrices: [], 53623 totalPrice: previewResponse.amount, 53624 totalPriceFormattedString: formatCurrency(previewResponse.amount, getRelevantCurrency(form, formState)), 53625 netPrice: previewResponse.amountWithoutTax, 53626 netPriceFormattedString: formatCurrency(previewResponse.amountWithoutTax, getRelevantCurrency(form, formState)), 53627 taxPrice: previewResponse.taxAmount || null, 53628 taxPriceFormattedString: previewResponse.taxAmount ? formatCurrency(previewResponse.taxAmount, getRelevantCurrency(form, formState)) : null, 53629 discountPrice: 0, 53630 discountPriceFormattedPrice: formatCurrency(0, getRelevantCurrency(form, formState)), 53631 chargeItems: [...Object.values(previewResponse.invoiceItems)] 53632 .filter((invoiceItem) => invoiceItem.chargeAmount) 53633 .map((invoiceItem) => ({ 53634 label: invoiceItem.chargeName, 53635 priceFormattedString: formatCurrency(invoiceItem.chargeAmount, getRelevantCurrency(form, formState)) 53636 })), 53637 billingAddress: formState.billingAddress 53638 }; 53639 }); 53640 }; 53641 const unknownToEmpty = (location) => location?.toLowerCase() === 'unknown' ? '' : location; 53642 const getPreview = (form, formState, formActions) => { 53643 if (form.environment.previewMode) { 53644 return mockBillingPreviewResponse(formConfigAs(form).dynamicOfferPreview ?? {}); 53645 } 53646 const previewBody = buildPreviewPayload(form, formState); 53647 return request("zephr/public/payment/v1/billing/preview-subscription", { 53648 method: "POST", 53649 bodyObject: previewBody 53650 }, formActions).then(response => response.json()); 53651 }; 53652 53653 const formattedDateWord = (date, locale = 'en-UK') => { 53654 if (!date) 53655 return ''; 53656 const d = new Date(date); 53657 if (Number.isNaN(d.getDate())) 53658 return 'Unknown'; 53659 return d.toLocaleDateString(locale, { day: 'numeric', month: 'short', year: 'numeric' }); 53660 }; 53661 53662 // Example key: "<<<example.key|Default value>>>" 53663 const keyDefaultRegex = /^<<<([a-z0-9\-.]+)\|(.*)>>>$/; 53664 const resolveErrorLanguagePackKey = (form, serverError) => { 53665 if (serverError == null) { 53666 return ''; 53667 } 53668 const packEntries = form.languagePack?.entries ?? {}; 53669 const error = ServerErrors[serverError]; 53670 return packEntries[error.languagePackKey] ?? error.fallbackMessage; 53671 }; 53672 const resolveLanguagePackKey = (languagePack, string) => { 53673 if (!string) { 53674 return string; 53675 } 53676 try { 53677 const match = keyDefaultRegex.exec(string); 53678 if (!match || !match[1]) { 53679 return string; 53680 } 53681 const packEntries = languagePack?.entries ?? {}; 53682 return packEntries[match[1]] ?? match[2]; 53683 } 53684 catch (e) { 53685 console.warn(`error resolving language pack key in string ${string}`, e); 53686 return string; 53687 } 53688 };
53689 const resolveLanguagePackKeyTyped = (form, key, fallback) => { 53690 try { 53691 const packEntries = form.languagePack?.entries ?? {}; 53692 return packEntries[key] ?? fallback; 53693 } 53694 catch (e) { 53695 console.warn(`error resolving language pack key in string ${key}`, e); 53696 return fallback; 53697 } 53698 }; 53699 const resolveLanguagePackLocale = (form) => resolveLanguagePackKeyTyped(form, 'pages.common.date-time-format-locale', 'en-US'); 53700 const resolveLanguagePackKeys = (languagePack, object) => { 53701 try { 53702 if (object == null) { 53703 return object; 53704 } 53705 if (typeof object !== 'object' && !Array.isArray(object)) { 53706 if (typeof object === 'string' || object instanceof String) { 53707 return resolveLanguagePackKey(languagePack, object); 53708 } 53709 return object; 53710 } 53711 if (Array.isArray(object)) { 53712 return object.map(e => resolveLanguagePackKeys(languagePack, e)); 53713 } 53714 return Object.entries(object).reduce((acc, [key, value]) => { 53715 return { 53716 ...acc, 53717 [key]: resolveLanguagePackKeys(languagePack, value) 53718 }; 53719 }, {}); 53720 } 53721 catch (e) { 53722 console.warn(`error resolving language pack entries`, e); 53723 return object; 53724 } 53725 }; 53726 53727 const getSubscriptionAmount = (form, subscription) => { 53728 try { 53729 if (subscription.isOneOff) { 53730 return ''; 53731 } 53732 const everyLabel = resolveLanguagePackKeyTyped(form, 'forms.billing.history.every', 'every'); 53733 const firstPayment = subscription['transaction-history']?.[0] ?? subscription['next-billing-time']; 53734 const str = firstPayment?.['human-readable-amount']; 53735 if (!str) 53736 return ''; 53737 const currency = subscription.currency_code?.toUpperCase() ?? str.replace(/[0-9,.]/g, ''); 53738 const { discounts_applied: discountApplied, pre_discount_price: price, billing_frequency: freq, billing_frequency_unit: freqUnit, } = subscription ?? {}; 53739 if (!discountApplied && price && freq && freqUnit) { 53740 if (freq === 1) { 53741 return `${currency} ${price}/${freqUnit.toLowerCase()}`; 53742 } 53743 return `${currency} ${price} ${everyLabel} ${freq} ${freqUnit.toLowerCase()}s`; 53744 } 53745 const num = Number(str.replace(/[^\d.-]/g, '')); 53746 const amount = Number.isInteger(num) ? num.toFixed(0) : num; 53747 if (firstPayment.cycleCount === 1) { 53748 return `${currency}${amount}/${firstPayment.cycle}`; 53749 } 53750 return `${currency} ${amount} ${everyLabel} ${firstPayment.cycleCount} ${firstPayment.cycle}s`; 53751 } 53752 catch { 53753 console.error('Failed to get subscription amount'); 53754 return ''; 53755 } 53756 }; 53757 const getPeriod = (time, cycle, cycleCount, locale) => { 53758 try { 53759 const d = new Date(time); 53760 const addCycles = (() => { 53761 switch (cycle) { 53762 case 'day': return d.setDate(d.getDate() + cycleCount); 53763 case 'week': return d.setDate(d.getDate() + cycleCount * 7); 53764 case 'month': return d.setMonth(d.getMonth() + cycleCount); 53765 case 'year': return d.setFullYear(d.getFullYear() + cycleCount); 53766 default: return null; 53767 } 53768 })(); 53769 const start = formattedDateWord(time, locale); 53770 const end = formattedDateWord(addCycles, locale); 53771 return `${start} - ${end}`; 53772 } 53773 catch { 53774 console.error('Failed to get subscription period'); 53775 return ''; 53776 } 53777 }; 53778 const buildTaxString = (inclusive, cents, name) => (`${inclusive ? '' : '+'}` 53779 + `${(cents / 100).toFixed(2)} ${name}` 53780 + `${inclusive ? ' incl.' : ''}`); 53781 const getSpecificTax = (cents, displayName, taxInclusive, taxPercent) => { 53782 try { 53783 const taxAmount = taxPercent * (cents / 100); 53784 const totalCents = cents + (taxInclusive ? 0 : taxAmount); 53785 const total = (totalCents / 100).toFixed(2); 53786 const taxes = `(${buildTaxString(taxInclusive, taxAmount, displayName)})`; 53787 return { taxes, total }; 53788 } 53789 catch { 53790 console.error('Failed to get subscription tax'); 53791 return { taxes: '', total: 0 }; 53792 } 53793 }; 53794 const getDefaultTaxes = (cents, defaultTax) => { 53795 try { 53796 const taxes = []; 53797 let totalCents = cents;
53798 defaultTax.forEach((e) => { 53799 const taxCents = e.taxPercent * (cents / 100); 53800 const tax = buildTaxString(e.taxInclusive, taxCents, e.displayName); 53801 taxes.push(tax); 53802 totalCents += e.taxInclusive ? 0 : taxCents; 53803 }); 53804 const total = (totalCents / 100).toFixed(2); 53805 return { taxes: `(${taxes.join(', ')})`, total }; 53806 } 53807 catch { 53808 console.error('Failed to get subscription default tax'); 53809 return { taxes: '', total: 0 }; 53810 } 53811 }; 53812 const getBillingHistory = (form, subscription) => { 53813 try { 53814 const defaultTax = subscription['default-tax-rates']; 53815 const managedBy = subscription['managed-by'].toLowerCase(); 53816 const isCanceled = subscription['subscription-state'].toLowerCase() === 'canceled'; 53817 const cancelDate = formattedDateWord(managedBy === 'stripe' ? subscription.ended : subscription.ends); 53818 const locale = resolveLanguagePackLocale(form); 53819 let newArr = subscription['transaction-history'].reduce((acc, e) => { 53820 const date = formattedDateWord(e.time, locale); 53821 const period = getPeriod(e.time, e.cycle, e.cycleCount, locale); 53822 const { cents, currency, taxRate, } = e; 53823 let total; 53824 let taxes; 53825 if (taxRate) { 53826 const { displayName, taxInclusive, taxPercent } = taxRate; 53827 ({ taxes, total } = getSpecificTax(cents, displayName, taxInclusive, taxPercent)); 53828 } 53829 else if (defaultTax?.length) { 53830 ({ taxes, total } = getDefaultTaxes(cents, defaultTax)); 53831 } 53832 else { 53833 total = (cents / 100).toFixed(2); 53834 taxes = null; 53835 } 53836 const subtotal = managedBy === 'stripe' 53837 ? (e.cents / 100).toFixed(2) 53838 : null; 53839 return [...acc, { 53840 date, period, subtotal, currency, taxes, total, 53841 }]; 53842 }, []); 53843 if (isCanceled) { 53844 newArr = [{ 53845 date: cancelDate, 53846 period: 'canceled', 53847 }, ...newArr]; 53848 } 53849 return newArr; 53850 } 53851 catch { 53852 console.error('Failed to get subscription billing history'); 53853 return null; 53854 } 53855 }; 53856 53857 const loadBraintreeStripeSubscriptions = (form, _, formActions, activeOnly) => { 53858 return request(`blaize/payment/${form.organisationConfiguration.paymentProvider}/subscriptions`, { 53859 method: "GET" 53860 }, formActions, null, true) 53861 .then(response => response.ok ? response.json() : []) 53862 .then(subscriptions => subscriptions 53863 .filter(subscription => !activeOnly || subscription['subscription-state']?.toLowerCase() === 'active') 53864 .map(subscription => { 53865 const locale = resolveLanguagePackLocale(form); 53866 const multiphasePlanMappings = getMultiphasePlanMappings(subscription); 53867 return { 53868 externalId: subscription['external-id'], 53869 productId: subscription['blaize-product'].id, 53870 productLabel: subscription['blaize-product'].label ?? subscription['blaize-product'].id, 53871 planId: subscription['plan_id'], 53872 planLabel: subscription['plan_name'], 53873 currency: subscription['currency_code'], 53874 status: subscription['subscription-state']?.toLowerCase() === 'active' ? 'active' : 'inactive', 53875 nextBillingTime: formattedDateWord(subscription['next-billing-time'], locale), 53876 amount: getSubscriptionAmount(form, subscription), 53877 transactionHistory: getBillingHistory(form, subscription), 53878 ...(subscription['multiphase_plan'] && { multiphasePlan: subscription['multiphase_plan'] }), 53879 ...(Object.keys(multiphasePlanMappings).length > 0 && { multiphasePlanMappings }) 53880 }; 53881 })); 53882 }; 53883 const getMultiphasePlanMappings = (subscription) => { 53884 const multiPhasedPlans = subscription['blaize-product'].mapping?.recurring?.multiPhasedPlans || []; 53885 return multiPhasedPlans.reduce((acc, plan) => { 53886 acc[plan.id] = plan; 53887 return acc; 53888 }, {}); 53889 }; 53890 53891 const calculateStripeSubscriptionProrate = (form, formState, formActions) => { 53892 const changingFromSubscription = formState 53893 .validChangeFromPlans 53894 .find(plan => formState.paymentOption.slug === plan.planSlug && formState.paymentOption.productId === plan.productId) 53895 ?.changesFromSubscription; 53896 if (!changingFromSubscription) { 53897 console.error("No valid change from subscription"); 53898 return; 53899 } 53900 return request(`zephr/payment/stripe/subscriptions/${changingFromSubscription.externalId}/change-previews`, { 53901 method: 'POST', 53902 bodyObject: { 53903 plan_id: formState.paymentOption.slug 53904 } 53905 }, formActions) 53906 .then(response => response.json()) 53907 .then(preview => { 53908 const currencyMultiplier = isZeroDecimalCurrency(formState.paymentOption.currencyCode.toUpperCase()) ? 1 : 0.01; 53909 return { 53910 totalPrice: preview.total * currencyMultiplier, 53911 totalPriceFormattedString: formatCurrency(preview.total * currencyMultiplier, formState.paymentOption.currencyCode), 53912 subTotalPrice: preview.sub_total * currencyMultiplier, 53913 subTotalPriceFormattedString: formatCurrency(preview.sub_total * currencyMultiplier, formState.paymentOption.currencyCode), 53914 }; 53915 }); 53916 }; 53917 53918 // Standalone service to load gift subscriptions without importing paymentProviderConfigurations
53919 const loadGiftSubscriptions = async (form, formState, formActions) => { 53920 try { 53921 const response = await request("zephr/public/gifts/v1/gifts", { 53922 method: "GET" 53923 }, formActions, null, true); 53924 if (response.ok) { 53925 const json = await response.json(); 53926 const rawGiftSubscriptions = json || []; 53927 // Map API response fields from camelCase to the structure consumers expect 53928 const giftSubscriptions = rawGiftSubscriptions 53929 .filter((gift) => gift.subscriptionDetails) 53930 .map((gift) => ({ 53931 gift_code: gift.giftCode, 53932 subscription_number: gift.subscriptionNumber, 53933 status: gift.status, 53934 is_purchaser: gift.isPurchaser, 53935 is_recipient: gift.isRecipient, 53936 error_reason: gift.errorReason, 53937 host: gift.host, 53938 externalId: gift.subscriptionDetails?.id, 53939 recipientFirstName: gift.subscriptionDetails?.soldToContact?.firstName, 53940 recipientLastName: gift.subscriptionDetails?.soldToContact?.lastName, 53941 subscriptionStartDate: gift.subscriptionDetails?.subscriptionStartDate, 53942 subscriptionEndDate: gift.subscriptionDetails?.termEndDate, 53943 subscriptionType: gift.subscriptionDetails?.ratePlans?.[0]?.productName, 53944 currency: gift.subscriptionDetails?.currency, 53945 })); 53946 formActions.updateFormState({ 53947 giftSubscriptions: giftSubscriptions, 53948 formPrerequisiteLoaded: true 53949 }); 53950 } 53951 else { 53952 formActions.updateFormState({ 53953 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR] 53954 }); 53955 } 53956 } 53957 catch (error) { 53958 formActions.updateFormState({ 53959 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR] 53960 }); 53961 } 53962 }; 53963 53964 const formatChargeCadence = (form, charge) => { 53965 // Early return if we don't have the required charge data 53966 if (!charge.price || !charge.currency) { 53967 return null; 53968 } 53969 const price = formatCurrency(charge.price, charge.currency); 53970 // Use listPriceBase as the primary display denominator 53971 if (charge.listPriceBase && charge.listPriceBase !== 'Per_Billing_Perio
53971d') { 53972 // Convert "Per_Month" -> "month", "Per_Year" -> "year", etc. 53973 const unit = charge.listPriceBase.replace('Per_', '').toLowerCase(); 53974 return `${price}/${unit}`; 53975 } 53976 // Fall back to billingPeriod for "Per_Billing_Period" or missing listPriceBase 53977 if (charge.billingPeriod) { 53978 const period = charge.billingPeriod.toLowerCase(); 53979 // Handle special cases 53980 if (period === 'specificmonths') { 53981 return `${price}/month`; // Default to month for specific months 53982 } 53983 return `${price}/${period}`; 53984 } 53985 // Final fallback - assume monthly 53986 return `${price}/month`; 53987 }; 53988 // Helper function to format Zuora subscription amount based on billing period 53989 const formatZuoraSubscriptionAmount = (form, subscription) => { 53990 // Early return for completely invalid inputs 53991 if (!subscription.contractedMrr || !subscription.currency) { 53992 return ''; 53993 } 53994 // Get the first active rate plan charge for accurate pricing 53995 const ratePlanList = [...Object.values(subscription.ratePlans)]; 53996 const activeRatePlans = ratePlanList.length === 1 53997 ? ratePlanList 53998 : ratePlanList.filter(ratePlan => ratePlan.lastChangeType === 'Add'); 53999 // Try to use accurate charge-level data first 54000 if (activeRatePlans[0]?.ratePlanCharges?.[0]) { 54001 const firstCharge = activeRatePlans[0].ratePlanCharges[0]; 54002 const accurateAmount = formatChargeCadence(form, firstCharge); 54003 if (accurateAmount) { 54004 return accurateAmount; 54005 } 54006 } 54007 // Fallback: display MRR per month if we don't have the required charge data 54008 const fallbackAmount = formatCurrency(subscription.contractedMrr, subscription.currency); 54009 return `${fallbackAmount}/month`; 54010 }; 54011 // Helper function to extract only custom fields (those ending with "__c") 54012 const extractCustomFields = (subscription) => { 54013 const customFields = {}; 54014 for (const [key, value] of Object.entries(subscription)) { 54015 if (key.endsWith('__c')) { 54016 customFields[key] = value; 54017 } 54018 } 54019 return customFields; 54020 }; 54021 const zuoraStatusMap = { 54022 'draft': 'pending', 54023 'pending activation': 'pending', 54024 'pending acceptance': 'pending', 54025 'active': 'active', 54026 'cancelled': 'inactive', 54027 'expired': 'inactive', 54028 'suspended': 'inactive' 54029 }; 54030 const loadZuoraSubscriptions = async (form, formState, formActions, activeOnly, isGiftSubscriptions = false) => { 54031 // Load gift subscriptions first via standalone service (no circular deps) 54032 let giftSubscriptions = []; 54033 try { 54034 await loadGiftSubscriptions(form, formState, formActions); 54035 const updatedFormState = formActions.getFormState(); 54036 giftSubscriptions = (updatedFormState.giftSubscriptions || []).map((giftSub) => ({ 54037 externalId: giftSub.externalId, 54038 accountId: '', 54039 productId: giftSub.subscriptionType || '', 54040 productLabel: giftSub.subscriptionType || '', 54041 planId: '', 54042 planLabel: null, 54043 currency: giftSub.currency, 54044 status: giftSub.status, 54045 amount: '', 54046 isGift: true, 54047 recipientFirstName: giftSub.recipientFirstName, 54048 recipientLastName: giftSub.recipientLastName, 54049 subscriptionStartDate: giftSub.subscriptionStartDate, 54050 subscriptionEndDate: giftSub.subscriptionEndDate, 54051 subscriptionType: giftSub.subscriptionType, 54052 subscriptionNumber: giftSub.subscriptionNumber, 54053 })); 54054 } 54055 catch (error) { 54056 console.error('Error loading gift subscriptions:', error); 54057 // Continue without gift subscriptions 54058 } 54059 // Load regular Zuora subscriptions 54060 const regularSubscriptions = await request('plugins/public/zuora-billing/subscriptions', { 54061 method: "GET" 54062 }, formActions, null, true) 54063 .then(response => response.json()) 54064 .then(subscriptionsResponse => [...Object.values(subscriptionsResponse.subscriptions || {})]) 54065 .then(subscriptions => subscriptions 54066 .filter(subscription => !activeOnly || subscription.status?.toLowerCase() === 'active') 54067 .map(subscription => { 54068 // Assuming that Zephr created Zuora subscriptions only have 1 active rate plan 54069 const ratePlanList = [...Object.values(subscription.ratePlans)]; 54070 const activeRatePlans = ratePlanList.length === 1 54071 ? ratePlanList 54072 : ratePlanList.filter(ratePlan => ratePlan.lastChangeType === 'Add'); 54073 if (activeRatePlans.length !== 1) { 54074 console.warn(`Subscription ${subscription.id} has ${activeRatePlans.length} active rate plans`, ratePlanList); 54075 } 54076 // Verify currency 54077 if (activeRatePlans[0] 54078 && !formConfigAs(form).dynamicOffer?.id 54079 && getRelevantCurrency(form, formState) 54080 && ![...Object.values(activeRatePlans[0].ratePlanCharges ?? {})] 54081 .every(charge => charge?.currency === getRelevantCurrency(form, formState))) { 54082 console.log(`Subscription ${subscription.id} is not in the form currency`); 54083 return null; 54084 } 54085 const amount = formatZuoraSubscriptionAmount(form, subscription); 54086 return { 54087 // Start with only custom fields from the raw subscription (those ending with "__c") 54088 ...extractCustomFields(subscription), 54089 // Override with our specific mappings 54090 externalId: subscription.id, 54091 accountId: subscription.accountId, 54092 productId: subscription['SubscriptionExperienceProductID__c'], 54093 productLabel: activeRatePlans[0]?.productName, 54094 planId: activeRatePlans[0]?.productRatePlanId, 54095 planLabel: null, 54096 currency: activeRatePlans[0]?.ratePlanCharges[0]?.currency, 54097 status: zuoraStatusMap[subscription.status?.toLowerCase()] ?? 'inactive', 54098 amount, 54099 autoRenew: subscription?.autoRenew, 54100 billToContact: subscription.billToContact, 54101 termType: subscription.termType, 54102 ...(isGiftSubscriptions ? {
54103 recipientFirstName: subscription.soldToContact?.firstName, 54104 recipientLastName: subscription.soldToContact?.lastName, 54105 recipientEmail: subscription.soldToContact?.personalEmail, 54106 subscriptionStartDate: subscription.subscriptionStartDate, 54107 subscriptionEndDate: subscription.termEndDate, 54108 subscriptionType: subscription?.ratePlans[0]?.productName, 54109 subscriptionNumber: subscription.subscriptionNumber, 54110 } : {}) 54111 }; 54112 }) 54113 .filter(existingSubscription => existingSubscription && existingSubscription.planId != null && existingSubscription.productId != null)); 54114 // Combine both lists and return 54115 return [...regularSubscriptions, ...giftSubscriptions]; 54116 }; 54117 54118 const calculateZuoraSubscriptionProrate = (form, formState, formActions) => { 54119 const changingFromSubscription = formState 54120 .validChangeFromPlans 54121 .find(plan => formState.paymentOption.slug === plan.planSlug && formState.paymentOption.productId === plan.productId) 54122 ?.changesFromSubscription; 54123 if (!changingFromSubscription) { 54124 console.error("No valid change from subscription"); 54125 return; 54126 } 54127 return request(`plugins/public/zuora-billing/subscription-change-preview`, { 54128 method: 'POST', 54129 bodyObject: { 54130 subscriptionId: changingFromSubscription.externalId, 54131 newProductRatePlanId: formState.paymentOption.slug, 54132 currency: getRelevantCurrency(form, formState), 54133 ...(formState.dynamicOfferResult ? { 54134 dynamicOfferResult: JSON.stringify(formState.dynamicOfferResult), 54135 productId: formState.paymentOption.productId 54136 } : {}), 54137 } 54138 }, formActions) 54139 .then(response => response.json()) 54140 .then(preview => { 54141 return { 54142 totalPrice: preview.amount, 54143 totalPriceFormattedString: formatCurrency(preview.amount, getRelevantCurrency(form, formState)), 54144 subTotalPrice: preview.amountWithoutTax, 54145 subTotalPriceFormattedString: formatCurrency(preview.amountWithoutTax, getRelevantCurrency(form, formState)), 54146 }; 54147 }); 54148 }; 54149 54150 const stripePriceCalculator = (form, formState, formActions) => { 54151 // Fallback to the generic price calculator if there is no billing address 54152 if (!form.organisationConfiguration.stripeAutomaticTaxEnabled 54153 || formState.billingAddress.country == null) { 54154 return calculateBraintreeStripePrice(form, formState); 54155 } 54156 return fetchStripeTaxPreview(formState, formActions) 54157 .then((taxPreview) => { 54158 if (!taxPreview.total) { 54159 return calculateBraintreeStripePrice(form, formState); 54160 } 54161 const currencyMultiplier = isZeroDecimalCurrency(formState.paymentOption.currencyCode.toUpperCase()) 54162 ? 1 54163 : 0.01; 54164 const currencyFormatter = (value) => formatCurrency(value * currencyMultiplier, formState.paymentOption.currencyCode); 54165 return { 54166 slug: formState.paymentOption.slug, 54167 productId: formState.paymentOption.productId, 54168 promoCode: formState.promoCode, 54169 billingAddress: formState.billingAddress, 54170 addonPrices: [], 54171 totalPrice: taxPreview.total * currencyMultiplier, 54172 totalPriceFormattedString: currencyFormatter(taxPreview.total), 54173 netPrice: taxPreview.sub_total * currencyMultiplier, 54174 netPriceFormattedString: currencyFormatter(taxPreview.sub_total), 54175 taxPrice: taxPreview.tax ? taxPreview.tax * currencyMultiplier : null, 54176 taxPriceFormattedString: taxPreview.tax ? currencyFormatter(taxPreview.tax) : null, 54177 discountPrice: taxPreview.discount ? taxPreview.discount * currencyMultiplier : null, 54178 discountPriceFormattedPrice: taxPreview.discount ? currencyFormatter(taxPreview.discount) : null, 54179 chargeItems: [], 54180 }; 54181 }) 54182 .catch((error) => { 54183 console.error(`Error calculating stripe tax preview ${JSON.stringify(error)}`); 54184 return calculateBraintreeStripePrice(form, formState); 54185 }); 54186 }; 54187 const fetchStripeTaxPreview = (formState, formActions) => { 54188 return request('zephr/payment/stripe/create-subscription-previews', { 54189 method: 'POST', 54190 bodyObject: { 54191 product_id: formState.paymentOption.productId, 54192 plan_id: formState.paymentOption.slug, 54193 billing_country: formState.billingAddress.country, 54194 billing_post_code: formState.billingAddress.postalCode, 54195 promo_code: formState.promoCodeValid ? formState.promoCode : undefined, 54196 }, 54197 }, formActions, null, true).then((response) => response.json()); 54198 }; 54199 54200 const verifyingPromoCodeBusyKey$1 = "promo-code"; 54201 const checkDoPromoCode = async (form, formState, formActions) => { 54202 if (form.environment.previewMode) { 54203 return; 54204 } 54205 const dynamicOfferId = formConfigAs(form).dynamicOffer?.id; 54206 if (!dynamicOfferId) { 54207 throw Error('Missing Dynamic Offer id'); 54208 } 54209 let session; 54210 try { 54211 session = document.cookie.match(/blaize_session=[0-9a-z-]+/)[0].substring(15); 54212 } 54213 catch { 54214 session = null; 54215 } 54216 const doProducts = formState?.dynamicOfferResult?.products ?? []; 54217 const promoProducts = doProducts.flatMap(p =>
54217 p.paymentPlans.map(plan => ({ 54218 id: p.id, 54219 payment_plan: { 54220 "provider": "zuora-billing", 54221 "plan_id": plan.planId, 54222 charges: plan.charges.map(c => ({ 54223 "charge_definition_id": c.chargeDefinitionData.productChargeDefinitionId, 54224 "currency": c.prices[0]?.currency, 54225 "price": c.prices[0].price 54226 })) 54227 } 54228 }))); 54229 const response = await request('zephr/public/decisions/v1/promo-codes', { 54230 method: "POST", 54231 bodyObject: { 54232 "promo_code": formState.promoCode, 54233 "session": session, 54234 "selected_products": promoProducts 54235 }, 54236 }, formActions, verifyingPromoCodeBusyKey$1); 54237 if (!response.ok) { 54238 logDataLayerEvent(form, 'zephr_form_error', { 54239 error: ServerError[ServerError.PROMO_CODE_INVALID_ERROR], 54240 }); 54241 return Promise.resolve(formActions.updateFormState({ 54242 promoCodeValid: false, 54243 serverErrors: [ServerError.PROMO_CODE_INVALID_ERROR], 54244 discountedPlanPrices: [] 54245 })); 54246 } 54247 const json = await response.json(); 54248 const matchingProduct = json?.products?.find(p => p.id === formState.paymentOption.productId && p.paymentPlans.some(plan => plan.planId === formState.paymentOption.slug)); 54249 if (!matchingProduct) { 54250 logDataLayerEvent(form, 'zephr_form_error', { 54251 error: ServerError[ServerError.PROMO_CODE_INVALID_ERROR], 54252 }); 54253 return Promise.resolve(formActions.updateFormState({ 54254 promoCodeValid: false, 54255 serverErrors: [ServerError.PROMO_CODE_INVALID_ERROR], 54256 discountedPlanPrices: [] 54257 })); 54258 } 54259 const updatedState = formActions.updateFormState({ 54260 promoCodeValid: true, 54261 serverErrors: [], 54262 discountedPlanPrices: [], 54263 originalDynamicOfferResult: formState.dynamicOfferResult, 54264 dynamicOfferResult: { 54265 ...formState.dynamicOfferResult, 54266 ...json 54267 } 54268 }); 54269 await calculatePrices(form, updatedState, formActions); 54270 }; 54271 const zuoraDoPromoCodeService = async (form, formState, formActions) => checkDoPromoCode(form, formState, formActions); 54272 54273 /* src/components/elements/payment/zuora/ZuoraDynamicFormPreLoader.svelte generated by Svelte v4.2.12 */ 54274 54275 function create_fragment$V(ctx) { 54276 let script; 54277 let script_src_value; 54278 54279 return { 54280 c() { 54281 script = element("script"); 54282 script.innerHTML = ``; 54283 attr(script, "type", "text/javascript"); 54284 if (!src_url_equal(script.src, script_src_value = "https://js.zuora.com/payment/v3/zuora.js")) attr(script, "src", script_src_value); 54285 attr(script, "onload", "window.zuoraLoadCallback()"); 54286 }, 54287 m(target, anchor) { 54288 append(document.head, script); 54289 }, 54290 p: noop, 54291 i: noop, 54292 o: noop, 54293 d(detaching) { 54294 detach(script); 54295 } 54296 }; 54297 } 54298 54299 function instance$U($$self, $$props, $$invalidate) { 54300 let { onMountCallback } = $$props; 54301 onMount(onMountCallback); 54302 54303 $$self.$$set = $$props => {
54304 if ('onMountCallback' in $$props) $$invalidate(0, onMountCallback = $$props.onMountCallback); 54305 }; 54306 54307 return [onMountCallback]; 54308 } 54309 54310 class ZuoraDynamicFormPreLoader extends SvelteComponent { 54311 constructor(options) { 54312 super(); 54313 init(this, options, instance$U, create_fragment$V, safe_not_equal, { onMountCallback: 0 }); 54314 } 54315 } 54316 54317 const paymentProviderConfigurations = { 54318 [paymentProviders.BRAINTREE]: { 54319 loader: loadBraintreeUi, 54320 preLoader: null, 54321 completer: braintreePay, 54322 changePaymentCompleter: braintreeChangePayment, 54323 component: BraintreePayment, 54324 preLoaderComponent: null, 54325 promoCodeCheckPath: 'blaize/payment/braintree/promo-code-check', 54326 productAddonPath: 'blaize/payment/braintree/addons-check', 54327 existingSubscriptionLoader: loadBraintreeStripeSubscriptions, 54328 priceCalculator: calculateBraintreeStripePrice, 54329 hasProductAddons: true, 54330 hasPromoCodes: () => true, 54331 internalSubmit: () => false, 54332 noPaymentForm: (form, formState) => false, 54333 canAttemptIncompletePaymentFormSubmission: false, 54334 }, 54335 [paymentProviders.STRIPE]: { 54336 loader: loadStripeUi, 54337 preLoader: null, 54338 completer: stripePay, 54339 changePaymentCompleter: stripeChangePayment, 54340 component: StripePayment, 54341 preLoaderComponent: null, 54342 promoCodeCheckPath: 'zephr/payment/stripe/promo-code-check', 54343 existingSubscriptionLoader: loadBraintreeStripeSubscriptions, 54344 priceCalculator: stripePriceCalculator, 54345 changeSubscriptionProrateCalculator: calculateStripeSubscriptionProrate, 54346 hasProductAddons: false, 54347 hasPromoCodes: () => true, 54348 internalSubmit: () => false, 54349 noPaymentForm: (form, formState) => false, 54350 canAttemptIncompletePaymentFormSubmission: true, 54351 }, 54352 [paymentProviders.ZUORA]: { 54353 loader: loadZuoraUi, 54354 preLoader: loadZuora, 54355 completer: zuoraComplete, 54356 changePaymentCompleter: zuoraChangePayment, 54357 component: ZuoraPayment, 54358 preLoaderComponent: (config) => config?.useDynamicForm ? ZuoraDynamicFormPreLoader : ZuoraPreLoader, 54359 promoCodeCheckPath: '', 54360 promoCodeServiceOverride: zuoraDoPromoCodeService, 54361 priceCalculator: calculateZuoraPrice, 54362 existingSubscriptionLoader: loadZuoraSubscriptions, 54363 changeSubscriptionProrateCalculator: calculateZuoraSubscriptionProrate, 54364 hasProductAddons: false, 54365 hasPromoCodes: (form) => formConfigAs(form).dynamicOffer && !formConfigAs(form).changeSubscriptionMode, 54366 internalSubmit: (form) => !formConfigAs(form).changeSubscriptionMode, 54367 noPaymentForm: (form, formState) => { 54368 const config = formConfigAs(form); 54369 const isChangeSubscriptionMode = config.changeSubscriptionMode; 54370 const requiresPaymentMethodSetup = formState?.requiresPaymentMethodSetup; 54371 // Show payment form if we're in payment method setup mode, even during change subscription 54372 return isChangeSubscriptionMode && !requiresPaymentMethodSetup; 54373 }, 54374 canAttemptIncompletePaymentFormSubmission: false, 54375 } 54376 }; 54377 const mobilePaymentServiceConfigurations = { 54378 [paymentProviders.BRAINTREE]: { 54379 loader: configureBraintreeMobilePayments, 54380 completer: braintreePayWithMobile, 54381 component: BraintreeMobilePayment, 54382 previewMode: (form) => form.environment.previewMode, 54383 }, 54384 [paymentProviders.STRIPE]: { 54385 loader: configureStripeMobilePay, 54386 completer: stripePay, 54387 component: StripeMobilePayment, 54388 previewMode: (form) => form.environment.previewMode, 54389 }, 54390 }; 54391 const paymentProviderFor = (providerName) => { 54392 const configuration = paymentProviderConfigurations[providerName]; 54393 if (!configuration) { 54394 throw `Payment provider ${providerName} not configured.`; 54395 } 54396 return configuration; 54397 }; 54398 const supportsMobilePayments = (providerName) => { 54399 return !!mobilePaymentServiceConfigurations[providerName]; 54400 }; 54401 const mobilePaymentServiceFor = (providerName) => { 54402 const configuration = mobilePaymentServiceConfigurations[providerName]; 54403 if (!configuration) { 54404 throw `Mobile payment provider ${providerName} not configured.`; 54405 } 54406 return configuration; 54407 }; 54408 54409 const factory$q = { 54410 matches: (sectionElement) => sectionElement.type === elementTypes.BUTTON && !sectionElement.config.isLogin && !sectionElement.config.isCancel, 54411 create: (form, formState, formActions, elementConfig) => { 54412 const isSubmitButton = elementConfig.isSubmit === true; 54413 const inChangePaymentSection = formState.currentSection?.type === sectionTypes.CHANGE_PAYMENT.type; 54414 const providerHandlesSubmit = inChangePaymentSection && isSubmitButton 54415 ? paymentProviderFor(form.organisationConfiguration.paymentProvider).internalSubmit(form) 54416 : false;
54417 const handleClick = () => { 54418 if (providerHandlesSubmit) { 54419 return; 54420 } 54421 logDataLayerEvent(form, 'zephr_form_button_press', { 54422 sectionId: formState.currentSection.type, 54423 buttonType: 'SUBMIT' 54424 }); 54425 formActions.attemptCompleteSection(); 54426 }; 54427 return { 54428 component: Button, 54429 props: { 54430 disabled: formState.isBusy || !formState.canAttemptSectionCompletion || providerHandlesSubmit, 54431 text: elementConfig.text, 54432 onClick: handleClick, 54433 isPaymentForm: form.formType === FormType.PAYMENT, 54434 hidden: providerHandlesSubmit, 54435 } 54436 }; 54437 } 54438 }; 54439 54440 /** 54441 * Permissive email check: requires exactly one '@' with at least one non-space character 54442 * on each side. Does not validate full email syntax (e.g., dots, domain rules), 54443 * just catches obvious typos like spaces or missing parts. 54444 * Front-end email validation should be lightweight. 54445 * @param email 54446 */ 54447 const isValidEmail = (email) => { 54448 if (!email) 54449 return false; 54450 return /^[^\s@]+@[^\s@]+$/.test(email); 54451 }; 54452 const updateElementValidity = (component, formState, sectionElement, formActions) => { 54453 if (component?.isValid !== undefined) { 54454 const validity = { 54455 partType: formState.currentPart.type, 54456 sectionType: formState.currentSection.type, 54457 sectionOrder: formState.currentSection.order, 54458 elementType: sectionElement.type, 54459 elementOrder: sectionElement.order, 54460 isValid: component.isValid, 54461 elementId: sectionElement.config?.slug, 54462 }; 54463 const existingValidity = formState.elementValidity.find((other) => other.partType === validity.partType && 54464 other.sectionType === validity.sectionType && 54465 other.sectionOrder === validity.sectionOrder && 54466 other.elementType === validity.elementType && 54467 other.elementOrder === validity.elementOrder); 54468 if (existingValidity?.isValid !== validity.isValid) { 54469 formActions.updateFormState({ 54470 elementValidity: [ 54471 ...formState.elementValidity.filter((v) => v != existingValidity), 54472 validity, 54473 ], 54474 }); 54475 } 54476 } 54477 }; 54478 54479 /* src/components/elements/email/EmailAddress.svelte generated by Svelte v4.2.12 */ 54480 54481 function create_fragment$U(ctx) { 54482 let label_1; 54483 let t; 54484 let div; 54485 let input; 54486 let current; 54487 54488 label_1 = new Label({ 54489 props: { 54490 forInput: /*id*/ ctx[11], 54491 label: /*label*/ ctx[2], 54492 isPaymentForm: /*isPaymentForm*/ ctx[6] 54493 } 54494 }); 54495 54496 input = new Input({ 54497 props: { 54498 id: /*id*/ ctx[11], 54499 autocomplete: "email", 54500 type: "email", 54501 name: "email", 54502 disabled: /*disabled*/ ctx[1], 54503 value: /*emailAddress*/ ctx[0], 54504 placeholder: /*placeholder*/ ctx[3], 54505 errorMessage: /*error*/ ctx[5], 54506 innerTextOnClick: /*onEdit*/ ctx[7], 54507 innerText: /*onEdit*/ ctx[7] && (/*editText*/ ctx[4] || 'Edit'), 54508 isPaymentForm: /*isPaymentForm*/ ctx[6], 54509 onFocus: /*onFocus*/ ctx[9], 54510 onBlur: /*onBlur*/ ctx[10] 54511 } 54512 }); 54513 54514 input.$on("change", /*change_handler*/ ctx[13]); 54515 54516 return { 54517 c() { 54518 create_component(label_1.$$.fragment); 54519 t = space(); 54520 div = element("div"); 54521 create_component(input.$$.fragment); 54522 attr(div, "class", "zephr-form-relative-container"); 54523 toggle_class(div, "zephr-payment-form-relative-container", /*isPaymentForm*/ ctx[6]); 54524 }, 54525 m(target, anchor) { 54526 mount_component(label_1, target, anchor); 54527 insert(target, t, anchor); 54528 insert(target, div, anchor); 54529 mount_component(input, div, null); 54530 current = true; 54531 }, 54532 p(ctx, [dirty]) { 54533 const label_1_changes = {}; 54534 if (dirty & /*label*/ 4) label_1_changes.label = /*label*/ ctx[2]; 54535 if (dirty & /*isPaymentForm*/ 64) label_1_changes.isPaymentForm = /*isPaymentForm*/ ctx[6]; 54536 label_1.$set(label_1_changes); 54537 const input_changes = {};
54538 if (dirty & /*disabled*/ 2) input_changes.disabled = /*disabled*/ ctx[1]; 54539 if (dirty & /*emailAddress*/ 1) input_changes.value = /*emailAddress*/ ctx[0]; 54540 if (dirty & /*placeholder*/ 8) input_changes.placeholder = /*placeholder*/ ctx[3]; 54541 if (dirty & /*error*/ 32) input_changes.errorMessage = /*error*/ ctx[5]; 54542 if (dirty & /*onEdit*/ 128) input_changes.innerTextOnClick = /*onEdit*/ ctx[7]; 54543 if (dirty & /*onEdit, editText*/ 144) input_changes.innerText = /*onEdit*/ ctx[7] && (/*editText*/ ctx[4] || 'Edit'); 54544 if (dirty & /*isPaymentForm*/ 64) input_changes.isPaymentForm = /*isPaymentForm*/ ctx[6]; 54545 if (dirty & /*onFocus*/ 512) input_changes.onFocus = /*onFocus*/ ctx[9]; 54546 if (dirty & /*onBlur*/ 1024) input_changes.onBlur = /*onBlur*/ ctx[10]; 54547 input.$set(input_changes); 54548 54549 if (!current || dirty & /*isPaymentForm*/ 64) { 54550 toggle_class(div, "zephr-payment-form-relative-container", /*isPaymentForm*/ ctx[6]); 54551 } 54552 }, 54553 i(local) { 54554 if (current) return; 54555 transition_in(label_1.$$.fragment, local); 54556 transition_in(input.$$.fragment, local); 54557 current = true; 54558 }, 54559 o(local) { 54560 transition_out(label_1.$$.fragment, local); 54561 transition_out(input.$$.fragment, local); 54562 current = false; 54563 }, 54564 d(detaching) { 54565 if (detaching) { 54566 detach(t); 54567 detach(div); 54568 } 54569 54570 destroy_component(label_1, detaching); 54571 destroy_component(input); 54572 } 54573 }; 54574 } 54575 54576 function instance$T($$self, $$props, $$invalidate) { 54577 let { formKey } = $$props; 54578 let { emailAddress } = $$props; 54579 let { disabled } = $$props; 54580 let { label } = $$props; 54581 let { placeholder } = $$props; 54582 let { editText } = $$props; 54583 let { error = null } = $$props; 54584 let { isPaymentForm = false } = $$props; 54585 let { onEdit } = $$props; 54586 let { onChange } = $$props; 54587 let { onFocus } = $$props; 54588 let { onBlur } = $$props; 54589 const id = `zephr-form-identifier-${formKey}`; 54590 const change_handler = ({ detail }) => onChange(detail); 54591 54592 $$self.$$set = $$props => {
54593 if ('formKey' in $$props) $$invalidate(12, formKey = $$props.formKey); 54594 if ('emailAddress' in $$props) $$invalidate(0, emailAddress = $$props.emailAddress); 54595 if ('disabled' in $$props) $$invalidate(1, disabled = $$props.disabled); 54596 if ('label' in $$props) $$invalidate(2, label = $$props.label); 54597 if ('placeholder' in $$props) $$invalidate(3, placeholder = $$props.placeholder); 54598 if ('editText' in $$props) $$invalidate(4, editText = $$props.editText); 54599 if ('error' in $$props) $$invalidate(5, error = $$props.error); 54600 if ('isPaymentForm' in $$props) $$invalidate(6, isPaymentForm = $$props.isPaymentForm); 54601 if ('onEdit' in $$props) $$invalidate(7, onEdit = $$props.onEdit); 54602 if ('onChange' in $$props) $$invalidate(8, onChange = $$props.onChange); 54603 if ('onFocus' in $$props) $$invalidate(9, onFocus = $$props.onFocus); 54604 if ('onBlur' in $$props) $$invalidate(10, onBlur = $$props.onBlur); 54605 }; 54606 54607 return [ 54608 emailAddress, 54609 disabled, 54610 label, 54611 placeholder, 54612 editText, 54613 error, 54614 isPaymentForm, 54615 onEdit, 54616 onChange, 54617 onFocus, 54618 onBlur, 54619 id, 54620 formKey, 54621 change_handler 54622 ]; 54623 } 54624 54625 class EmailAddress extends SvelteComponent { 54626 constructor(options) { 54627 super(); 54628 54629 init(this, options, instance$T, create_fragment$U, safe_not_equal, { 54630 formKey: 12, 54631 emailAddress: 0, 54632 disabled: 1, 54633 label: 2, 54634 placeholder: 3, 54635 editText: 4, 54636 error: 5, 54637 isPaymentForm: 6, 54638 onEdit: 7, 54639 onChange: 8, 54640 onFocus: 9, 54641 onBlur: 10 54642 }); 54643 } 54644 } 54645 54646 const factory$p = { 54647 matches: (sectionElement) => sectionElement.type === elementTypes.EMAIL_ADDRESS, 54648 create: (form, formState, formActions, elementConfig) => { 54649 const disabled = elementConfig.disabled || formState.isBusy; 54650 return ({ 54651 component: EmailAddress, 54652 props: { 54653 formKey: form.uniqueKey, 54654 disabled, 54655 emailAddress: formState.emailAddress, 54656 label: elementConfig.label, 54657 placeholder: elementConfig.placeholder, 54658 editText: elementConfig.editText, 54659 onChange: (value) => { 54660 !disabled && formActions.updateFormState({ 54661 userExists: undefined, 54662 emailIsContact: undefined, 54663 emailAddress: value, 54664 verificationCode: "", 54665 verificationCodeValid: undefined, 54666 serverErrors: [] 54667 }); 54668 logDataLayerEvent(form, 'zephr_form_input_change', { 54669 inputName: `zephr-form-identifier-${form.uniqueKey}`, 54670 sectionId: formState.currentSection.type, 54671 field: 'email' 54672 }); 54673 }, 54674 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 54675 inputName: `zephr-form-identifier-${form.uniqueKey}`, 54676 sectionId: formState.currentSection.type, 54677 field: 'email' 54678 }), 54679 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 54680 inputName: `zephr-form-identifier-${form.uniqueKey}`, 54681 sectionId: formState.currentSection.type, 54682 field: 'email' 54683 }), 54684 onEdit: elementConfig.disabled && (() => { 54685 formActions.jumpToPartStart(partTypes.ACCOUNT_VERIFICATION.type); 54686 }), 54687 isPaymentForm: form.formType === FormType.PAYMENT, 54688 }, 54689 isValid: isValidEmail(formState.emailAddress) 54690 }); 54691 } 54692 }; 54693 54694 /* src/components/elements/payment/EmptyPayment.svelte generated by Svelte v4.2.12 */ 54695 54696 function create_fragment$T(ctx) { 54697 let errormessage; 54698 let current; 54699 54700 errormessage = new ErrorMessage({ 54701 props: { 54702 error: /*providerError*/ ctx[0]?.message ?? /*error*/ ctx[1] ?? "", 54703 isPaymentForm: true 54704 } 54705 }); 54706 54707 return { 54708 c() { 54709 create_component(errormessage.$$.fragment); 54710 }, 54711 m(target, anchor) { 54712 mount_component(errormessage, target, anchor); 54713 current = true; 54714 }, 54715 p(ctx, [dirty]) { 54716 const errormessage_changes = {};
54717 if (dirty & /*providerError, error*/ 3) errormessage_changes.error = /*providerError*/ ctx[0]?.message ?? /*error*/ ctx[1] ?? ""; 54718 errormessage.$set(errormessage_changes); 54719 }, 54720 i(local) { 54721 if (current) return; 54722 transition_in(errormessage.$$.fragment, local); 54723 current = true; 54724 }, 54725 o(local) { 54726 transition_out(errormessage.$$.fragment, local); 54727 current = false; 54728 }, 54729 d(detaching) { 54730 destroy_component(errormessage, detaching); 54731 } 54732 }; 54733 } 54734 54735 function instance$S($$self, $$props, $$invalidate) { 54736 let { providerError } = $$props; 54737 let { error = null } = $$props; 54738 54739 $$self.$$set = $$props => { 54740 if ('providerError' in $$props) $$invalidate(0, providerError = $$props.providerError); 54741 if ('error' in $$props) $$invalidate(1, error = $$props.error); 54742 }; 54743 54744 return [providerError, error]; 54745 } 54746 54747 class EmptyPayment extends SvelteComponent { 54748 constructor(options) { 54749 super(); 54750 init(this, options, instance$S, create_fragment$T, safe_not_equal, { providerError: 0, error: 1 }); 54751 } 54752 } 54753 54754 const factory$o = { 54755 matches: (sectionElement) => sectionElement.type === elementTypes.PAYMENT || sectionElement.type === elementTypes.CHNAGE_PAYMENT_METHOD, 54756 create: (form, formState, formActions) => { 54757 const paymentProvider = paymentProviderFor(form.organisationConfiguration.paymentProvider); 54758 if (paymentProvider.noPaymentForm(form, formState)) { 54759 return { 54760 component: EmptyPayment, 54761 props: { 54762 providerError: formState.paymentProviderError, 54763 }, 54764 isValid: true 54765 }; 54766 } 54767 return { 54768 component: paymentProvider.component, 54769 props: { 54770 isLoaded: formState.paymentProviderFormLoaded, 54771 isBusy: formState.paymentProviderFormBusy, 54772 providerError: formState.paymentProviderError, 54773 isComplete: formState.paymentFormComplete, 54774 isDisabled: paymentProvider.internalSubmit(form) 54775 ? !formState.canAttemptSectionCompletion 54776 : (formState.isBusy || formState.mobilePaymentService != null), 54777 formKey: form.uniqueKey, 54778 onMountCallback: () => { 54779 formActions.updateFormState({ 54780 paymentProviderFormLoaded: false 54781 }); 54782 void paymentProvider.loader(form, formState, formActions); 54783 } 54784 }, 54785 isValid: paymentProvider.internalSubmit(form) ? undefined : formState.paymentFormComplete && !formState.paymentProviderError 54786 }; 54787 } 54788 }; 54789 54790 const regularPaymentElementIsPresent = form => form.parts.flatMap(part => part.sections) 54791 .flatMap(section => section.elements) 54792 .some(element => element.type === elementTypes.PAYMENT && element.config?.enabled !== false); 54793 const factory$n = { 54794 matches: (sectionElement) => sectionElement.type === elementTypes.MOBILE_PAYMENT, 54795 create: (form, formState, formActions) => { 54796 if (form.environment.previewMode) { 54797 return null; 54798 } 54799 // Check if the payment provider supports mobile payments
54800 if (!supportsMobilePayments(form.organisationConfiguration.paymentProvider)) { 54801 return null; 54802 } 54803 const paymentProvider = mobilePaymentServiceFor(form.organisationConfiguration.paymentProvider); 54804 return { 54805 component: paymentProvider.component, 54806 props: { 54807 isDisabled: formState.isBusy || formState.mobilePaymentService != null, 54808 onMountCallback: () => paymentProvider.loader(form, formState, formActions), 54809 // Minor-hack to prevent injecting the payment provider lib twice 54810 disableCoreDependencyHeader: regularPaymentElementIsPresent(form) 54811 } 54812 }; 54813 } 54814 }; 54815 54816 /* src/components/elements/Checkbox.svelte generated by Svelte v4.2.12 */ 54817 54818 function create_fragment$S(ctx) { 54819 let input; 54820 let t0; 54821 let label_1; 54822 let div; 54823 let t1; 54824 let t2; 54825 let mounted; 54826 let dispose; 54827 54828 let input_levels = [ 54829 { id: /*id*/ ctx[0] }, 54830 { name: /*name*/ ctx[1] }, 54831 { required: /*required*/ ctx[2] }, 54832 { disabled: /*disabled*/ ctx[3] }, 54833 /*conditionalProps*/ ctx[8], 54834 { type: "checkbox" }, 54835 { class: "zephr-form-checkbox" } 54836 ]; 54837 54838 let input_data = {}; 54839 54840 for (let i = 0; i < input_levels.length; i += 1) { 54841 input_data = assign(input_data, input_levels[i]); 54842 } 54843 54844 return { 54845 c() { 54846 input = element("input"); 54847 t0 = space(); 54848 label_1 = element("label"); 54849 div = element("div"); 54850 t1 = space(); 54851 t2 = text(/*label*/ ctx[6]); 54852 set_attributes(input, input_data); 54853 toggle_class(input, "disabled", /*disabled*/ ctx[3]); 54854 toggle_class(input, "error", /*hasError*/ ctx[4]); 54855 toggle_class(input, "zephr-payment-form-checkbox", /*isPaymentForm*/ ctx[5]); 54856 toggle_class(input, "svelte-ud4i0a", true); 54857 attr(div, "class", "zephr-form-checkmark svelte-ud4i0a"); 54858 toggle_class(div, "zephr-payment-form-checkmark", /*isPaymentForm*/ ctx[5]); 54859 toggle_class(div, "disabled", /*disabled*/ ctx[3]); 54860 toggle_class(div, "checked", /*checked*/ ctx[7]); 54861 toggle_class(div, "error", /*hasError*/ ctx[4]); 54862 attr(label_1, "for", /*id*/ ctx[0]); 54863 attr(label_1, "class", "zephr-form-checkbox-label svelte-ud4i0a"); 54864 toggle_class(label_1, "zephr-payment-form-checkbox-label", /*isPaymentForm*/ ctx[5]); 54865 }, 54866 m(target, anchor) { 54867 insert(target, input, anchor); 54868 if (input.autofocus) input.focus(); 54869 insert(target, t0, anchor); 54870 insert(target, label_1, anchor); 54871 append(label_1, div); 54872 append(label_1, t1); 54873 append(label_1, t2); 54874 54875 if (!mounted) { 54876 dispose = listen(input, "input", /*handleInputChange*/ ctx[9]); 54877 mounted = true; 54878 } 54879 }, 54880 p(ctx, [dirty]) { 54881 set_attributes(input, input_data = get_spread_update(input_levels, [ 54882 dirty & /*id*/ 1 && { id: /*id*/ ctx[0] }, 54883 dirty & /*name*/ 2 && { name: /*name*/ ctx[1] }, 54884 dirty & /*required*/ 4 && { required: /*required*/ ctx[2] }, 54885 dirty & /*disabled*/ 8 && { disabled: /*disabled*/ ctx[3] }, 54886 dirty & /*conditionalProps*/ 256 && /*conditionalProps*/ ctx[8], 54887 { type: "checkbox" }, 54888 { class: "zephr-form-checkbox" } 54889 ])); 54890 54891 toggle_class(input, "disabled", /*disabled*/ ctx[3]); 54892 toggle_class(input, "error", /*hasError*/ ctx[4]); 54893 toggle_class(input, "zephr-payment-form-checkbox", /*isPaymentForm*/ ctx[5]); 54894 toggle_class(input, "svelte-ud4i0a", true); 54895 54896 if (dirty & /*isPaymentForm*/ 32) { 54897 toggle_class(div, "zephr-payment-form-checkmark", /*isPaymentForm*/ ctx[5]); 54898 } 54899 54900 if (dirty & /*disabled*/ 8) { 54901 toggle_class(div, "disabled", /*disabled*/ ctx[3]); 54902 } 54903 54904 if (dirty & /*checked*/ 128) { 54905 toggle_class(div, "checked", /*checked*/ ctx[7]); 54906 } 54907 54908 if (dirty & /*hasError*/ 16) { 54909 toggle_class(div, "error", /*hasError*/ ctx[4]); 54910 } 54911 54912 if (dirty & /*label*/ 64) set_data(t2, /*label*/ ctx[6]); 54913 54914 if (dirty & /*id*/ 1) { 54915 attr(label_1, "for", /*id*/ ctx[0]); 54916 } 54917 54918 if (dirty & /*isPaymentForm*/ 32) { 54919 toggle_class(label_1, "zephr-payment-form-checkbox-label", /*isPaymentForm*/ ctx[5]); 54920 } 54921 }, 54922 i: noop, 54923 o: noop, 54924 d(detaching) { 54925 if (detaching) { 54926 detach(input); 54927 detach(t0); 54928 detach(label_1); 54929 } 54930 54931 mounted = false;
54932 dispose(); 54933 } 54934 }; 54935 } 54936 54937 function instance$R($$self, $$props, $$invalidate) { 54938 const dispatch = createEventDispatcher(); 54939 let { id } = $$props; 54940 let { name = id } = $$props; 54941 let { required = true } = $$props; 54942 let { disabled = false } = $$props; 54943 let { hasError = false } = $$props; 54944 let { isPaymentForm = false } = $$props; 54945 let { label = "" } = $$props; 54946 let { value } = $$props; 54947 let { placeholder = "" } = $$props; 54948 let { checked = false } = $$props; 54949 let { pattern = "" } = $$props; 54950 let conditionalProps = {}; 54951 if (checked) conditionalProps.checked = checked; 54952 if (placeholder) conditionalProps.placeholder = placeholder; 54953 if (pattern) conditionalProps.pattern = pattern; 54954 if (value) conditionalProps.value = value; 54955 54956 const handleInputChange = e => { 54957 dispatch("change", e.target.checked); 54958 }; 54959 54960 $$self.$$set = $$props => { 54961 if ('id' in $$props) $$invalidate(0, id = $$props.id); 54962 if ('name' in $$props) $$invalidate(1, name = $$props.name); 54963 if ('required' in $$props) $$invalidate(2, required = $$props.required);
54964 if ('disabled' in $$props) $$invalidate(3, disabled = $$props.disabled); 54965 if ('hasError' in $$props) $$invalidate(4, hasError = $$props.hasError); 54966 if ('isPaymentForm' in $$props) $$invalidate(5, isPaymentForm = $$props.isPaymentForm); 54967 if ('label' in $$props) $$invalidate(6, label = $$props.label); 54968 if ('value' in $$props) $$invalidate(10, value = $$props.value); 54969 if ('placeholder' in $$props) $$invalidate(11, placeholder = $$props.placeholder); 54970 if ('checked' in $$props) $$invalidate(7, checked = $$props.checked); 54971 if ('pattern' in $$props) $$invalidate(12, pattern = $$props.pattern); 54972 }; 54973 54974 return [ 54975 id, 54976 name, 54977 required, 54978 disabled, 54979 hasError, 54980 isPaymentForm, 54981 label, 54982 checked, 54983 conditionalProps, 54984 handleInputChange, 54985 value, 54986 placeholder, 54987 pattern 54988 ]; 54989 } 54990 54991 class Checkbox extends SvelteComponent { 54992 constructor(options) { 54993 super(); 54994 54995 init(this, options, instance$R, create_fragment$S, safe_not_equal, { 54996 id: 0, 54997 name: 1, 54998 required: 2, 54999 disabled: 3, 55000 hasError: 4, 55001 isPaymentForm: 5, 55002 label: 6, 55003 value: 10, 55004 placeholder: 11, 55005 checked: 7, 55006 pattern: 12 55007 }); 55008 } 55009 } 55010 55011 /* src/components/elements/payment/PaymentAutoRenewToggle.svelte generated by Svelte v4.2.12 */ 55012 55013 function create_if_block$C(ctx) { 55014 let div; 55015 let checkbox; 55016 let current; 55017 55018 checkbox = new Checkbox({ 55019 props: { 55020 id: "payment-auto-renew-toggle-" + /*paymentOption*/ ctx[0].productId + "-" + /*paymentOption*/ ctx[0].slug, 55021 name: "payment-auto-renew-toggle", 55022 label: /*toggleLabel*/ ctx[3], 55023 value: "true", 55024 checked: /*checked*/ ctx[1], 55025 disabled: /*disabled*/ ctx[2], 55026 required: false 55027 } 55028 }); 55029 55030 checkbox.$on("change", /*handleChange*/ ctx[5]); 55031 55032 return { 55033 c() { 55034 div = element("div"); 55035 create_component(checkbox.$$.fragment); 55036 attr(div, "class", "zephr-form-payment-auto-renew-toggle svelte-1yfwddr"); 55037 }, 55038 m(target, anchor) { 55039 insert(target, div, anchor); 55040 mount_component(checkbox, div, null); 55041 current = true; 55042 }, 55043 p(ctx, dirty) { 55044 const checkbox_changes = {}; 55045 if (dirty & /*paymentOption*/ 1) checkbox_changes.id = "payment-auto-renew-toggle-" + /*paymentOption*/ ctx[0].productId + "-" + /*paymentOption*/ ctx[0].slug; 55046 if (dirty & /*toggleLabel*/ 8) checkbox_changes.label = /*toggleLabel*/ ctx[3]; 55047 if (dirty & /*checked*/ 2) checkbox_changes.checked = /*checked*/ ctx[1]; 55048 if (dirty & /*disabled*/ 4) checkbox_changes.disabled = /*disabled*/ ctx[2]; 55049 checkbox.$set(checkbox_changes); 55050 }, 55051 i(local) { 55052 if (current) return; 55053 transition_in(checkbox.$$.fragment, local); 55054 current = true; 55055 }, 55056 o(local) { 55057 transition_out(checkbox.$$.fragment, local); 55058 current = false; 55059 }, 55060 d(detaching) { 55061 if (detaching) { 55062 detach(div); 55063 } 55064 55065 destroy_component(checkbox); 55066 } 55067 }; 55068 } 55069 55070 function create_fragment$R(ctx) { 55071 let if_block_anchor; 55072 let current; 55073 let if_block = /*shouldShow*/ ctx[4] && create_if_block$C(ctx); 55074 55075 return { 55076 c() { 55077 if (if_block) if_block.c(); 55078 if_block_anchor = empty(); 55079 }, 55080 m(target, anchor) { 55081 if (if_block) if_block.m(target, anchor); 55082 insert(target, if_block_anchor, anchor); 55083 current = true; 55084 }, 55085 p(ctx, [dirty]) { 55086 if (/*shouldShow*/ ctx[4]) { 55087 if (if_block) { 55088 if_block.p(ctx, dirty); 55089 55090 if (dirty & /*shouldShow*/ 16) { 55091 transition_in(if_block, 1); 55092 } 55093 } else { 55094 if_block = create_if_block$C(ctx); 55095 if_block.c(); 55096 transition_in(if_block, 1); 55097 if_block.m(if_block_anchor.parentNode, if_block_anchor); 55098 } 55099 } else if (if_block) { 55100 group_outros(); 55101 55102 transition_out(if_block, 1, 1, () => { 55103 if_block = null; 55104 }); 55105 55106 check_outros(); 55107 } 55108 }, 55109 i(local) { 55110 if (current) return; 55111 transition_in(if_block); 55112 current = true; 55113 }, 55114 o(local) { 55115 transition_out(if_block); 55116 current = false; 55117 }, 55118 d(detaching) { 55119 if (detaching) { 55120 detach(if_block_anchor); 55121 } 55122 55123 if (if_block) if_block.d(detaching); 55124 } 55125 }; 55126 } 55127 55128 function instance$Q($$self, $$props, $$invalidate) { 55129 let shouldShow; 55130 let toggleLabel; 55131 let { paymentOption } = $$props; 55132 let { checked = false } = $$props; 55133 let { disabled = false } = $$props; 55134 let { onChange } = $$props; 55135 55136 const handleChange = event => { 55137 const isChecked = event.detail; 55138 onChange(isChecked); 55139 }; 55140 55141 $$self.$$set = $$props => {
55142 if ('paymentOption' in $$props) $$invalidate(0, paymentOption = $$props.paymentOption); 55143 if ('checked' in $$props) $$invalidate(1, checked = $$props.checked); 55144 if ('disabled' in $$props) $$invalidate(2, disabled = $$props.disabled); 55145 if ('onChange' in $$props) $$invalidate(6, onChange = $$props.onChange); 55146 }; 55147 55148 $$self.$$.update = () => { 55149 if ($$self.$$.dirty & /*paymentOption*/ 1) { 55150 // Only show if the payment option is configured for custom toggle 55151 $$invalidate(4, shouldShow = paymentOption?.autoRenewConfig === 'custom_toggle' && paymentOption.type !== 'ONE_OFF'); 55152 } 55153 55154 if ($$self.$$.dirty & /*paymentOption*/ 1) { 55155 $$invalidate(3, toggleLabel = paymentOption?.autoRenewToggleLabel || 'Auto-renew subscription'); 55156 } 55157 }; 55158 55159 return [ 55160 paymentOption, 55161 checked, 55162 disabled, 55163 toggleLabel, 55164 shouldShow, 55165 handleChange, 55166 onChange 55167 ]; 55168 } 55169 55170 class PaymentAutoRenewToggle extends SvelteComponent { 55171 constructor(options) { 55172 super(); 55173 55174 init(this, options, instance$Q, create_fragment$R, safe_not_equal, { 55175 paymentOption: 0, 55176 checked: 1, 55177 disabled: 2, 55178 onChange: 6 55179 }); 55180 } 55181 } 55182 55183 const paymentAutoRenewToggleFactory = { 55184 matches: (sectionElement) => sectionElement.type === elementTypes.PAYMENT_AUTO_RENEW_TOGGLE, 55185 create: (form, formState, formActions) => { 55186 // Only show for Zuora billing payment forms 55187 if (form.organisationConfiguration.paymentProvider !== 'zuora-billing') { 55188 return null; 55189 } 55190 // Only show if there's a selected payment option 55191 if (!formState.paymentOption) { 55192 return null; 55193 } 55194 // Only show if the payment option is configured for custom toggle 55195 if (formState.paymentOption.autoRenewConfig !== 'custom_toggle') { 55196 return null; 55197 } 55198 // Don't show for one-off purchases 55199 if (formState.paymentOption.type === 'ONE_OFF') { 55200 return null; 55201 } 55202 const paymentOptionKey = `${formState.paymentOption.productId}-${formState.paymentOption.slug}`; 55203 const handleToggleChange = (isChecked) => { 55204 // Update the payment option specific autoRenew state 55205 const updatedAutoRenewState = { 55206 ...formState.paymentOptionAutoRenew, 55207 [paymentOptionKey]: isChecked 55208 }; 55209 formActions.updateFormState({ 55210 paymentOptionAutoRenew: updatedAutoRenewState 55211 }); 55212 logDataLayerEvent(form, 'zephr_form_input_change', { 55213 field: 'payment-auto-renew-toggle', 55214 inputName: `payment-auto-renew-toggle-${formState.paymentOption.productId}-${formState.paymentOption.slug}`, 55215 sectionId: formState.currentSection.type, 55216 }); 55217 }; 55218 // Get the current checked state for this payment option 55219 // State is now properly initialized when payment option is selected 55220 const checkedState = formState.paymentOptionAutoRenew?.[paymentOptionKey] ?? false; 55221 return { 55222 component: PaymentAutoRenewToggle, 55223 props: { 55224 paymentOption: formState.paymentOption, 55225 checked: checkedState, 55226 disabled: formState.isBusy || formState.paymentProviderFormBusy || false, 55227 onChange: handleToggleChange, 55228 }, 55229 isValid: true, 55230 }; 55231 }, 55232 }; 55233 55234 var checkMarkImageBase64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGEAAABiCAYAAABAkr0NAAAJa0lEQVR4Xu2dT28TRxTA39oGUsHBiC/giKT/LiRHpBYIUPWQEmfVD9BwrQoJpZW4JbkhtRUO9E74AO3GQTkVCLSVOGIurVRCky/QkgNIodjezoxjsrZ3Zt7Mzu7OOraEkOLZ9Zv3m3lv/rx540BWPtc2S1Cvl6DplJjITb/1f/CTc7bAgW1w/G0oFLbg+vBWFqrnWCfkwmYRXtbH4HVuDPJwwp24MBNFRu9BtUbAERjOIzjUrMH3ow+jvC+OZ+2AQFv5q+Y0gF92z0+diaOiwXd691YJCKcKh3MrNvSW9CDQFv9Pk7TyZBTPA8t6iuMswVD+YVpAkofwzbMzUPdn3InpL+Ju8arv99bvLsNQbjFpGMlBoMp/7cwnYW5Uld9dnpmrQ/5iUv4jfgjfbo7BTuOGKeUzBeWpow35NPwi+WsRcn7RPVseiwwjoZ4RHwRq87fr8+5EeU5HGS1lw1PIE1t9AGpaJoI2gCaUoEFGWw3ntG5D8NarFRgqLGnJgKh8PBCI6XE/Lq8jfr+jiLe+ugQFfwWOFGqwMLyt+jyqfASfROS7CJWRZdTvKBQyC0Gj9Sdtfzt0c3VzGhpvplUGCaxXFAuLJhuJOQhkrO+enNzENgBSmUVSmYrJymB/u6fctT9LsJNfUILxeG3YlHkyA+HqxrR7asrDKMEq5XcLrAjD+3XVhR9GVjD1FpWJDuHy83n33IUFmSDM7Bx+cxGufxA+spG9IMnvFWB49+8uwM3ji1HEiwYBC8BQi4lSUa1nv96YcU9P3ZY9GxWEPgQEANb6j+VdK+y+TJO875G9IgoIPQgoAHevwK3jFd26W/fc3DPiuMvzIrl0Qah
55234DwAD4rTqR1JQ/UViI+Y8OCDUIlzdn3XOTwtbtPf6JDN0y4Hx16RHz5J78XDgU9+79TKzA+2grgIdAlgDcjyafCLtjvwNoVx4D4ve1cfhuuIZhjYOAmIj1fQ8ImVNIewRyQoeDcGljXbT4te8AIHsEGx3eGpmQ9QY5BIkj9hS6nUyYTH4vMdMY/yCGIDFD3r0+G4bqtgLJpM6TmCUxhNlnT3ibI2wNqDIqXa7QrVfmnpt7XiGRIbNhcsvMEh+CjG75D7kpy5wmIwhMl/Ff1Nf5jZa/F8FVpFv90OeJtG8dsYyRzD88WTsatoQTDkHgjAdmSEJCsLzB010vBJkzHpghMQViltzxyRdcKxLSG3ohCHxBXHussl6eue/Jtql7ajJ0kyusN/RAEPqCQS/AtwfBBNfr0mMnhEEvwCtZVlKw4ur9QrZFf9zbFu2EoEBPJsPge6IBjj675w17EAQOeeALNJvUpedz7vkLN0IncAEHvQdB9MB+8AU0PH+IHDAxGXQmGCkFHfQehNm/yRLFZz3xmyxSuXL8omZbsP+xrgmWzs6YsJKc5YygSWpBEJmift2qpPXmzHCNml+Rg941SS0IolFRv5oiwRKDd9+rws33yMkhMx/esL8NuwVh7q/lsBDAvjVFsjUewxBk+m1B4PqDeKKQzbQvzbdg9spNb1RJLI0DIg/ebxv3GADrayT8fXhZE3H4Y4LAAI/4BQdEjqOf/EFaAHaxcP0CGfg4wJkfyHaDjLaUuF+WMgBWvcsbK+65qXJ3VekWsQO8cSw9NVMZ0TrqFLdOld5vAwA2+Anf/qSnkxwRoczHktoCgELgWRwyEiPmKDymyMv6JM0mABTCV2SP4ZPePQbvwUrNETmMzAb12gaAQviShJF+Gh5GyocQ1/A0EFTMUhq8U3BNnf1ivsJGAFQuwTA1WQicSYssOArtiG0FYBUEzjCNyhgZhM0AsgIhEgjbAVgFAXPSBRlO/tZEZQGAVRDYpAVx9gsLIisAtCGYXkkMelcTILIEgNZdYAUc7jJ2V1gGeoSCLRgFRNYACCDQNbp0ly10QGQRgHTZIu0FPBUQWQUgXcATLCyZ3GcVWikMCJKaQZbExItjQwZrXmXluIFgdCnblk0dBAhRPa0GQAQXb+rYtL2pCcJ2AMKQIra9KaIUU7qxqKYp+Lz1AKiwvDUzsowNS++O2xnyguwRmQDAnLI4pMje4C8JiMwAQFiaFgSRX0hzh40DIksAhAOf3T2bQFQ2Z5sz7Q3/LhCZAiAyRbv+gBbZgyA6dcg5+ikbGhv7np4R3iGZf02HrhsTkP8i7tA0kA1hD4LIJA3SJ+jhEoU/BraPUcel+ioQTE+dWk/xe0Fn9pdOCJywDCpB5kNgtNQY4SGFQ5joI7SD3qAGROUocu9hcpGDzmp+UzX9RS+t0As6R0ftn9ZICxBd6v56g2pylvAEIxpJMvpLjRFqo5GcJRyCrDfEuf8cof6pP6qZnEUr6RQLXzxamDB65jd1DUYXQGiGBCvS4uxdojQL9DKHyuiV6KL3yRtEZog22qXRcV5NxRAkSVi9+6szcHPkTp+oUb8akszJskxpYghULEG6BTaJ2+/+QXYcF5GwUQ6BgZAlpzV3tYl+c0zhSZkjNpacltYNkxsaG7qYgq5i+UmDqatxPYHWAhPzs19AYAAomGk8BIR/YD6i30FgACgu/atBoFpGbML37YorJrQf4Yi7zaM6BCwIA7cuxWLLdV+KucBDAwAVRw8CFkRCF4jq6hX1HLs3uuHJ7u2MkrRXHwISBPMTaQSRoTQsKYS8xC8KgGg9oS0/wke0QKRz4bQWC3ZdfeO2rPW36hU9e360ntCuoSAjbrcSrIZBTc+/TXJ5k/wGRQbA0CaXGQhUIsSELgjEKhiKym8Nxc3domUOApWMXQXcJJfChV/mEGYaGIy8XzVxkaiy6dG4sp7dGV3ML5hcxjcLoa0F5J2Voaaq0LwTW04N2kheklvK6w65g3kq9NYPEci45j/xQNg1T7BzcE6lV3SYK3Y9vP8I8k4Ncvkt7J1lHUqkDvZNg1wND2fIvxMYRxveW823/uDvxAeh/SvIC0QxpoTt6DUdem38NoETfn18wy/pKrunZ9KGMJS/otUAMBXaLRM/hLYwGvZXoR5GiyZ9ZX1yEGLoGUY1T0c8dJAQp0/iCJw8hCCM/w4QW+3P8m5kMq3kUHtPTQ44VTiWWzY54lGRPT0IQSmp33h1kKRF9sum7LlwlNNW/OHcitGEVyqaD5S1A0K38Mx/5EgGe/805IijPVvuyWavUl9mZhrwFA41a3CkUEurxfNkthNCmLR0uFmvl8AvFMFvFKHpl3qK5Zwt9recvwWFwpYNrRzTWP4HK7laSxb9gaIAAAAASUVORK5CYII="; 55235 55236 /* src/components/elements/successMessage/SuccessMessage.svelte generated by Svelte v4.2.12 */ 55237 55238 function create_fragment$Q(ctx) { 55239 let div1; 55240 let img; 55241 let img_src_value; 55242 let t0; 55243 let div0; 55244 let t1; 55245 55246 return { 55247 c() { 55248 div1 = element("div"); 55249 img = element("img"); 55250 t0 = space(); 55251 div0 = element("div"); 55252 t1 = text(/*text*/ ctx[0]); 55253 attr(img, "class", "check-image svelte-w5z6iw"); 55254 if (!src_url_equal(img.src, img_src_value = checkMarkImageBase64)) attr(img, "src", img_src_value); 55255 attr(img, "alt", "Success indicator"); 55256 attr(div0, "class", "zephr-form-success-message svelte-w5z6iw"); 55257 toggle_class(div0, "zephr-payment-form-success-message", /*isPaymentForm*/ ctx[1]); 55258 }, 55259 m(target, anchor) { 55260 insert(target, div1, anchor); 55261 append(div1, img); 55262 append(div1, t0); 55263 append(div1, div0); 55264 append(div0, t1); 55265 }, 55266 p(ctx, [dirty]) { 55267 if (dirty & /*text*/ 1) set_data(t1, /*text*/ ctx[0]); 55268 55269 if (dirty & /*isPaymentForm*/ 2) { 55270 toggle_class(div0, "zephr-payment-form-success-message", /*isPaymentForm*/ ctx[1]); 55271 } 55272 }, 55273 i: noop, 55274 o: noop, 55275 d(detaching) { 55276 if (detaching) { 55277 detach(div1); 55278 } 55279 } 55280 }; 55281 } 55282 55283 function instance$P($$self, $$props, $$invalidate) { 55284 let { text } = $$props; 55285 let { isPaymentForm = false } = $$props; 55286 55287 $$self.$$set = $$props => {
55288 if ('text' in $$props) $$invalidate(0, text = $$props.text); 55289 if ('isPaymentForm' in $$props) $$invalidate(1, isPaymentForm = $$props.isPaymentForm); 55290 }; 55291 55292 return [text, isPaymentForm]; 55293 } 55294 55295 class SuccessMessage extends SvelteComponent { 55296 constructor(options) { 55297 super(); 55298 init(this, options, instance$P, create_fragment$Q, safe_not_equal, { text: 0, isPaymentForm: 1 }); 55299 } 55300 } 55301 55302 const factory$m = { 55303 matches: (sectionElement) => sectionElement.type === elementTypes.SUCCESS_MESSAGE, 55304 create: (form, formState, formActions, elementConfig) => ({ 55305 component: SuccessMessage, 55306 props: { 55307 text: elementConfig?.text, 55308 isPaymentForm: form.formType === FormType.PAYMENT, 55309 } 55310 }) 55311 }; 55312 55313 const createTokenExchangePayload = (action, emailAddress) => { 55314 return { 55315 identifiers: { 55316 email_address: emailAddress, 55317 }, 55318 delivery: { 55319 method: 'email', 55320 destination: emailAddress, 55321 action, 55322 redirect: window.location.href.replace(window.location.origin, ''), 55323 }, 55324 }; 55325 }; 55326 const sendLink = async (form, action, emailAddress, formActions) => { 55327 try { 55328 const response = await request('blaize/token-exchange', { 55329 method: 'POST', 55330 bodyObject: createTokenExchangePayload(action, emailAddress), 55331 }, formActions); 55332 if (!response.ok) { 55333 formActions.updateFormState({ 55334 serverErrors: [ServerError.UNKNOWN], 55335 }); 55336 logDataLayerEvent(form, 'zephr_form_error', { 55337 error: ServerError[ServerError.UNKNOWN], 55338 }); 55339 } 55340 } 55341 catch (err) { 55342 formActions.updateFormState({ 55343 serverErrors: [ServerError.UNKNOWN], 55344 }); 55345 logDataLayerEvent(form, 'zephr_form_error', { 55346 error: ServerError[ServerError.UNKNOWN], 55347 }); 55348 } 55349 }; 55350 55351 const getFormIsPasswordless = (form) => { 55352 return (form.formType === FormType.REGISTRATION && 55353 formConfigAs(form).usePassword === false && 55354 form.organisationConfiguration.requireEmailVerfication === true && 55355 formConfigAs(form).useVerificationCodes === false); 55356 }; 55357 55358 const onEmailEntered = async (form, formState, formActions) => { 55359 return getUserInfo(formState, formActions) 55360 .then(async (response) => { 55361 if (response.redirected) { 55362 window.location.replace(response.url); 55363 return; 55364 } 55365 else { 55366 const existsInAnyState = response.status === 200; 55367 const formCanOtp = form.parts.flatMap(p => p.sections) 55368 .some(s => s.type === sectionTypes.VERIFICATION_CODE_REGISTRATION.type); 55369 const isContact = existsInAnyState ? ((await response.json()).contact) && formCanOtp : false; 55370 const exists = existsInAnyState && !isContact; 55371 formActions.updateFormState({ 55372 userExists: exists, 55373 emailIsContact: isContact, 55374 }); 55375 const isPasswordless = getFormIsPasswordless(form); 55376 if (isPasswordless) { 55377 if (exists) { 55378 void sendLink(form, 'login', formState.emailAddress, formActions); 55379 return jumpToSection(sectionTypes.PASSWORDLESS_VIA_LOGIN_LINK.type, form, formActions); 55380 } 55381 else { 55382 return moveToNextSection(form, formState, formActions); 55383 } 55384 } 55385 if (isContact 55386 || formConfigAs(form).useVerificationCodes 55387 || form.organisationConfiguration.twoFactorEmailAuthenticationEnabled) { 55388 void send2FaCode(form, formState, formActions); 55389 return jumpToSection(exists ? 55390 sectionTypes.VERIFICATION_CODE_LOGIN.type : sectionTypes.VERIFICATION_CODE_REGISTRATION.type, form, formActions); 55391 } 55392 return jumpToSection(exists ? 55393 sectionTypes.LOGIN_PASSWORD.type : sectionTypes.PASSWORD_SETUP.type, form, formActions); 55394 } 55395 }); 55396 }; 55397 const twoFactorPayload = (formState) => ({ 55398 identifiers: { 55399 email_address: formState.emailAddress 55400 }, 55401 delivery: { 55402 method: "email", 55403 destination: formState.emailAddress, 55404 action: formState.userExists ? "login" : "register", 55405 redirect: window.location.href.replace(window.location.origin, ""), 55406 } 55407 }); 55408 const send2FaCode = async (form, formState, formActions) => { 55409 formActions.updateFormState({ 55410 verificationCode: "", 55411 verificationCodeValid: undefined 55412 }); 55413 const response = await request('blaize/two-factor-authentication', { 55414 method: "POST", 55415 bodyObject: twoFactorPayload(formState) 55416 }, formActions); 55417 if (!response.ok) { 55418 formActions.updateFormState({ 55419 serverErrors: [ServerError.VERIFICATION_CODE_SEND_ERROR] 55420 }); 55421 logDataLayerEvent(form, 'zephr_form_error', { 55422 error: ServerError[ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 55423 }); 55424 } 55425 return response.ok; 55426 }; 55427 const getUserInfo = async (formState, formActions) => { 55428 formActions.updateFormState({ 55429 password: "", 55430 verificationCode: undefined, 55431 verificationCodeValid: undefined, 55432 forgotPassword: false 55433 }); 55434 return await request('zephr/media/user/info', { 55435 method: "POST", 55436 bodyObject: { identifiers: { email_address: formState.emailAddress } } 55437 }, formActions); 55438 }; 55439 55440 const verifyOtp = async (form, formState, formActions) => { 55441 const response = await request('zephr/media/user/otp-check', { 55442 method: "POST", 55443 bodyObject: { 55444 code: formState.verificationCode, 55445 email: formState.emailAddress 55446 } 55447 }, formActions); 55448 if (!response.ok) { 55449 formActions.updateFormState({ 55450 verificationCodeValid: false, 55451 serverErrors: [ServerError.VERIFICATION_CODE_INCORRECT] 55452 }); 55453 logDataLayerEvent(form, 'zephr_form_error', { 55454 error: ServerError[ServerError.VERIFICATION_CODE_INCORRECT], 55455 }); 55456 return; 55457 } 55458 formActions.updateFormState({ 55459 verificationCodeValid: false, 55460 serverErrors: [] 55461 }); 55462 formActions.completeSection(); 55463 }; 55464 55465 const postVerificationCodeDelaySeconds = 1.5; 55466 const waitAfterCode = async (form) => await new Promise(r => setTimeout(r, form.environment.reduceDelays ? 1 : (postVerificationCodeDelaySeconds * 1000))); 55467 55468 const verifiyPasswordResetCode = async (form, formState, formActions) => { 55469 formActions.incrementRequestCount(); 55470 formActions.updateFormState({ 55471 verificationCodeValid: undefined 55472 }); 55473 const response = await request(`zephr/users/reset/${formState.verificationCode}`, { 55474 method: "POST", 55475 bodyObject: { 55476 identifiers: { 55477 email_address: formState.emailAddress, 55478 }, 55479 } 55480 }, formActions); 55481 logDataLayerEvent(form, 'zephr_form_password_reset_code_validate', { 55482 success: response?.ok 55483 }); 55484 if (!response.ok) { 55485 formActions.updateFormState({ 55486 serverErrors: [ServerError.VERIFICATION_CODE_INCORRECT] 55487 }); 55488 logDataLayerEvent(form, 'zephr_form_error', { 55489 error: ServerError[ServerError.VERIFICATION_CODE_INCORRECT], 55490 }); 55491 formActions.decrementRequestCount(); 55492 return Promise.resolve(); 55493 } 55494 return waitAfterCode(form) 55495 .then(() => { 55496 formActions.decrementRequestCount(); 55497 formActions.jumpToSection(sectionTypes.PASSWORD_RESET.type); 55498 }); 55499 }; 55500 const sendPasswordResetCode = async (form, formState, formActions) => { 55501 formActions.updateFormState({ 55502 createPassword: "", 55503 confirmCreatePassword: "", 55504 forgotPassword: true, 55505 verificationCode: "", 55506 }); 55507 formActions.incrementRequestCount(); 55508 const response = await request('zephr/users/reset', { 55509 method: "POST", 55510 bodyObject: { 55511 identifiers: { 55512 email_address: formState.emailAddress, 55513 }, 55514 } 55515 }, formActions); 55516 logDataLayerEvent(form, 'zephr_form_password_reset_code_sent', { 55517 success: response?.ok 55518 }); 55519 if (!response.ok) { 55520 formActions.updateFormState({ 55521 serverErrors: [ServerError.PASSWORD_RESET_LINK_SEND_ERROR] 55522 }); 55523 formActions.decrementRequestCount(); 55524 logDataLayerEvent(form, 'zephr_form_error', { 55525 error: ServerError[ServerError.PASSWORD_RESET_LINK_SEND_ERROR], 55526 }); 55527 return Promise.resolve(); 55528 } 55529 return waitAfterCode(form) 55530 .then(() => { 55531 formActions.decrementRequestCount(); 55532 formActions.jumpToSection(sectionTypes.FORGOT_PASSWORD.type); 55533 }); 55534 }; 55535 const resetPassword = async (form, formState, formActions) => { 55536 const response = await request(`zephr/users/reset/${formState.verificationCode}`, { 55537 method: "POST", 55538 bodyObject: { 55539 identifiers: { 55540 email_address: formState.emailAddress, 55541 }, 55542 validators: { 55543 password: formState.createPassword 55544 } 55545 } 55546 }, formActions); 55547 logDataLayerEvent(form, 'zephr_form_password_reset', { 55548 success: response?.ok 55549 }); 55550 if (!response.ok) { 55551 formActions.updateFormState({ 55552 serverErrors: [ServerError.PASSWORD_RESET_ERROR] 55553 }); 55554 logDataLayerEvent(form, 'zephr_form_error', { 55555 error: ServerError[ServerError.MOBILE_PAYMENT_PROCESSING_ERROR], 55556 }); 55557 return Promise.resolve(); 55558 } 55559 formActions.updateFormState({ 55560 verificationCode: "", 55561 forgotPassword: false 55562 });
55563 return formActions.jumpToPartStart(partTypes.ACCOUNT_VERIFICATION.type); 55564 }; 55565 55566 /* src/components/elements/verificationCode/VerificationCode.svelte generated by Svelte v4.2.12 */ 55567 55568 function create_if_block_2$h(ctx) { 55569 let if_block_anchor; 55570 55571 function select_block_type(ctx, dirty) { 55572 if (/*showMessage*/ ctx[14] && !/*error*/ ctx[5]) return create_if_block_3$c; 55573 return create_else_block$9; 55574 } 55575 55576 let current_block_type = select_block_type(ctx); 55577 let if_block = current_block_type(ctx); 55578 55579 return { 55580 c() { 55581 if_block.c(); 55582 if_block_anchor = empty(); 55583 }, 55584 m(target, anchor) { 55585 if_block.m(target, anchor); 55586 insert(target, if_block_anchor, anchor); 55587 }, 55588 p(ctx, dirty) { 55589 if (current_block_type === (current_block_type = select_block_type(ctx)) && if_block) { 55590 if_block.p(ctx, dirty); 55591 } else { 55592 if_block.d(1); 55593 if_block = current_block_type(ctx); 55594 55595 if (if_block) { 55596 if_block.c(); 55597 if_block.m(if_block_anchor.parentNode, if_block_anchor); 55598 } 55599 } 55600 }, 55601 d(detaching) { 55602 if (detaching) { 55603 detach(if_block_anchor); 55604 } 55605 55606 if_block.d(detaching); 55607 } 55608 }; 55609 } 55610 55611 // (53:6) {:else} 55612 function create_else_block$9(ctx) { 55613 let button; 55614 let t; 55615 let mounted; 55616 let dispose; 55617 55618 return { 55619 c() { 55620 button = element("button"); 55621 t = text(/*resendText*/ ctx[3]); 55622 attr(button, "class", "zephr-form-verification-resend-link svelte-1yj9ceh"); 55623 toggle_class(button, "zephr-payment-form-verification-resend-link", /*isPaymentForm*/ ctx[9]); 55624 }, 55625 m(target, anchor) { 55626 insert(target, button, anchor); 55627 append(button, t); 55628 55629 if (!mounted) { 55630 dispose = listen(button, "click", /*click_handler*/ ctx[15]); 55631 mounted = true; 55632 } 55633 }, 55634 p(ctx, dirty) { 55635 if (dirty & /*resendText*/ 8) set_data(t, /*resendText*/ ctx[3]); 55636 55637 if (dirty & /*isPaymentForm*/ 512) { 55638 toggle_class(button, "zephr-payment-form-verification-resend-link", /*isPaymentForm*/ ctx[9]); 55639 } 55640 }, 55641 d(detaching) { 55642 if (detaching) { 55643 detach(button); 55644 } 55645 55646 mounted = false; 55647 dispose(); 55648 } 55649 }; 55650 } 55651 55652 // (46:6) {#if showMessage && !error} 55653 function create_if_block_3$c(ctx) { 55654 let div; 55655 let t; 55656 55657 return { 55658 c() { 55659 div = element("div"); 55660 t = text(/*resendMessage*/ ctx[2]); 55661 attr(div, "class", "zephr-form-verification-resend-text svelte-1yj9ceh"); 55662 toggle_class(div, "zephr-payment-form-verification-resend-text", /*isPaymentForm*/ ctx[9]); 55663 }, 55664 m(target, anchor) { 55665 insert(target, div, anchor); 55666 append(div, t); 55667 }, 55668 p(ctx, dirty) { 55669 if (dirty & /*resendMessage*/ 4) set_data(t, /*resendMessage*/ ctx[2]); 55670 55671 if (dirty & /*isPaymentForm*/ 512) { 55672 toggle_class(div, "zephr-payment-form-verification-resend-text", /*isPaymentForm*/ ctx[9]); 55673 } 55674 }, 55675 d(detaching) { 55676 if (detaching) { 55677 detach(div); 55678 } 55679 } 55680 }; 55681 } 55682 55683 // (32:2) <Input id="zephr-form-verification-code" value={code} {placeholder} maxlength={6} hasError={error != null} errorMessage={error} {isPaymentForm} {disabled} on:change={({ detail }) => !disabled && onChange(detail)} onFocus={onFocus} onBlur={onBlur} > 55684 function create_default_slot$6(ctx) { 55685 let if_block_anchor; 55686 let if_block = /*resendText*/ ctx[3] && create_if_block_2$h(ctx); 55687 55688 return { 55689 c() { 55690 if (if_block) if_block.c(); 55691 if_block_anchor = empty(); 55692 }, 55693 m(target, anchor) { 55694 if (if_block) if_block.m(target, anchor); 55695 insert(target, if_block_anchor, anchor); 55696 }, 55697 p(ctx, dirty) { 55698 if (/*resendText*/ ctx[3]) { 55699 if (if_block) { 55700 if_block.p(ctx, dirty); 55701 } else { 55702 if_block = create_if_block_2$h(ctx); 55703 if_block.c(); 55704 if_block.m(if_block_anchor.parentNode, if_block_anchor); 55705 } 55706 } else if (if_block) { 55707 if_block.d(1); 55708 if_block = null; 55709 } 55710 }, 55711 d(detaching) { 55712 if (detaching) { 55713 detach(if_block_anchor); 55714 } 55715 55716 if (if_block) if_block.d(detaching); 55717 } 55718 }; 55719 } 55720 55721 // (74:4) {#if codeValid} 55722 function create_if_block_1$r(ctx) { 55723 let fa; 55724 let current; 55725 fa = new Fa({ props: { icon: faCheck } }); 55726 55727 return { 55728 c() { 55729 create_component(fa.$$.fragment); 55730 }, 55731 m(target, anchor) { 55732 mount_component(fa, target, anchor); 55733 current = true; 55734 }, 55735 i(local) { 55736 if (current) return; 55737 transition_in(fa.$$.fragment, local); 55738 current = true; 55739 }, 55740 o(local) { 55741 transition_out(fa.$$.fragment, local); 55742 current = false;
55743 }, 55744 d(detaching) { 55745 destroy_component(fa, detaching); 55746 } 55747 }; 55748 } 55749 55750 // (77:4) {#if code && !codeValid && formBusy} 55751 function create_if_block$B(ctx) { 55752 let fa; 55753 let current; 55754 fa = new Fa({ props: { icon: faSpinner, spin: true } }); 55755 55756 return { 55757 c() { 55758 create_component(fa.$$.fragment); 55759 }, 55760 m(target, anchor) { 55761 mount_component(fa, target, anchor); 55762 current = true; 55763 }, 55764 i(local) { 55765 if (current) return; 55766 transition_in(fa.$$.fragment, local); 55767 current = true; 55768 }, 55769 o(local) { 55770 transition_out(fa.$$.fragment, local); 55771 current = false; 55772 }, 55773 d(detaching) { 55774 destroy_component(fa, detaching); 55775 } 55776 }; 55777 } 55778 55779 function create_fragment$P(ctx) { 55780 let label_1; 55781 let t0; 55782 let div1; 55783 let input; 55784 let t1; 55785 let div0; 55786 let t2; 55787 let current; 55788 55789 label_1 = new Label({ 55790 props: { 55791 forInput: "zephr-form-verification-code", 55792 label: /*label*/ ctx[0], 55793 isPaymentForm: /*isPaymentForm*/ ctx[9] 55794 } 55795 }); 55796 55797 input = new Input({ 55798 props: { 55799 id: "zephr-form-verification-code", 55800 value: /*code*/ ctx[8], 55801 placeholder: /*placeholder*/ ctx[1], 55802 maxlength: 6, 55803 hasError: /*error*/ ctx[5] != null, 55804 errorMessage: /*error*/ ctx[5], 55805 isPaymentForm: /*isPaymentForm*/ ctx[9], 55806 disabled: /*disabled*/ ctx[4], 55807 onFocus: /*onFocus*/ ctx[12], 55808 onBlur: /*onBlur*/ ctx[13], 55809 $$slots: { default: [create_default_slot$6] }, 55810 $$scope: { ctx } 55811 } 55812 }); 55813 55814 input.$on("change", /*change_handler*/ ctx[16]); 55815 let if_block0 = /*codeValid*/ ctx[6] && create_if_block_1$r(); 55816 let if_block1 = /*code*/ ctx[8] && !/*codeValid*/ ctx[6] && /*formBusy*/ ctx[7] && create_if_block$B(); 55817 55818 return { 55819 c() { 55820 create_component(label_1.$$.fragment); 55821 t0 = space(); 55822 div1 = element("div"); 55823 create_component(input.$$.fragment); 55824 t1 = space(); 55825 div0 = element("div"); 55826 if (if_block0) if_block0.c(); 55827 t2 = space(); 55828 if (if_block1) if_block1.c(); 55829 attr(div0, "class", "zephr-form-input-inner-text"); 55830 toggle_class(div0, "zephr-payment-form-input-inner-text", /*isPaymentForm*/ ctx[9]); 55831 attr(div1, "class", "zephr-form-relative-container zephr-form-verification-resend-link-container svelte-1yj9ceh"); 55832 toggle_class(div1, "zephr-payment-form-relative-container", /*isPaymentForm*/ ctx[9]); 55833 toggle_class(div1, "zephr-payment-form-verification-resend-link-container", /*isPaymentForm*/ ctx[9]); 55834 }, 55835 m(target, anchor) { 55836 mount_component(label_1, target, anchor); 55837 insert(target, t0, anchor); 55838 insert(target, div1, anchor); 55839 mount_component(input, div1, null); 55840 append(div1, t1); 55841 append(div1, div0); 55842 if (if_block0) if_block0.m(div0, null); 55843 append(div0, t2); 55844 if (if_block1) if_block1.m(div0, null); 55845 current = true; 55846 }, 55847 p(ctx, [dirty]) { 55848 const label_1_changes = {}; 55849 if (dirty & /*label*/ 1) label_1_changes.label = /*label*/ ctx[0]; 55850 if (dirty & /*isPaymentForm*/ 512) label_1_changes.isPaymentForm = /*isPaymentForm*/ ctx[9]; 55851 label_1.$set(label_1_changes); 55852 const input_changes = {}; 55853 if (dirty & /*code*/ 256) input_changes.value = /*code*/ ctx[8]; 55854 if (dirty & /*placeholder*/ 2) input_changes.placeholder = /*placeholder*/ ctx[1]; 55855 if (dirty & /*error*/ 32) input_changes.hasError = /*error*/ ctx[5] != null; 55856 if (dirty & /*error*/ 32) input_changes.errorMessage = /*error*/ ctx[5]; 55857 if (dirty & /*isPaymentForm*/ 512) input_changes.isPaymentForm = /*isPaymentForm*/ ctx[9]; 55858 if (dirty & /*disabled*/ 16) input_changes.disabled = /*disabled*/ ctx[4]; 55859 if (dirty & /*onFocus*/ 4096) input_changes.onFocus = /*onFocus*/ ctx[12]; 55860 if (dirty & /*onBlur*/ 8192) input_changes.onBlur = /*onBlur*/ ctx[13]; 55861 55862 if (dirty & /*$$scope, isPaymentForm, resendMessage, showMessage, error, onResendVerificationCode, resendText*/ 150060) { 55863 input_changes.$$scope = { dirty, ctx }; 55864 } 55865 55866 input.$set(input_changes); 55867 55868 if (/*codeValid*/ ctx[6]) { 55869 if (if_block0) { 55870 if (dirty & /*codeValid*/ 64) { 55871 transition_in(if_block0, 1); 55872 } 55873 } else { 55874 if_block0 = create_if_block_1$r(); 55875 if_block0.c(); 55876 transition_in(if_block0, 1); 55877 if_block0.m(div0, t2); 55878 } 55879 } else if (if_block0) { 55880 group_outros(); 55881 55882 transition_out(if_block0, 1, 1, () => { 55883 if_block0 = null; 55884 }); 55885 55886 check_outros(); 55887 } 55888 55889 if (/*code*/ ctx[8] && !/*codeValid*/ ctx[6] && /*formBusy*/ ctx[7]) { 55890 if (if_block1) {
55891 if (dirty & /*code, codeValid, formBusy*/ 448) { 55892 transition_in(if_block1, 1); 55893 } 55894 } else { 55895 if_block1 = create_if_block$B(); 55896 if_block1.c(); 55897 transition_in(if_block1, 1); 55898 if_block1.m(div0, null); 55899 } 55900 } else if (if_block1) { 55901 group_outros(); 55902 55903 transition_out(if_block1, 1, 1, () => { 55904 if_block1 = null; 55905 }); 55906 55907 check_outros(); 55908 } 55909 55910 if (!current || dirty & /*isPaymentForm*/ 512) { 55911 toggle_class(div0, "zephr-payment-form-input-inner-text", /*isPaymentForm*/ ctx[9]); 55912 } 55913 55914 if (!current || dirty & /*isPaymentForm*/ 512) { 55915 toggle_class(div1, "zephr-payment-form-relative-container", /*isPaymentForm*/ ctx[9]); 55916 } 55917 55918 if (!current || dirty & /*isPaymentForm*/ 512) { 55919 toggle_class(div1, "zephr-payment-form-verification-resend-link-container", /*isPaymentForm*/ ctx[9]); 55920 } 55921 }, 55922 i(local) { 55923 if (current) return; 55924 transition_in(label_1.$$.fragment, local); 55925 transition_in(input.$$.fragment, local); 55926 transition_in(if_block0); 55927 transition_in(if_block1); 55928 current = true; 55929 }, 55930 o(local) { 55931 transition_out(label_1.$$.fragment, local); 55932 transition_out(input.$$.fragment, local); 55933 transition_out(if_block0); 55934 transition_out(if_block1); 55935 current = false; 55936 }, 55937 d(detaching) { 55938 if (detaching) { 55939 detach(t0); 55940 detach(div1); 55941 } 55942 55943 destroy_component(label_1, detaching); 55944 destroy_component(input); 55945 if (if_block0) if_block0.d(); 55946 if (if_block1) if_block1.d(); 55947 } 55948 }; 55949 } 55950 55951 function instance$O($$self, $$props, $$invalidate) { 55952 let { label } = $$props; 55953 let { placeholder } = $$props; 55954 let { resendMessage = null } = $$props; 55955 let { resendText = null } = $$props; 55956 let { disabled } = $$props; 55957 let { error = null } = $$props; 55958 let { codeValid } = $$props; 55959 let { formBusy } = $$props; 55960 let { code } = $$props; 55961 let { isPaymentForm = false } = $$props; 55962 let { onChange } = $$props; 55963 let { onResendVerificationCode } = $$props; 55964 let { onFocus } = $$props; 55965 let { onBlur } = $$props; 55966 let showMessage = false; 55967 55968 const click_handler = () => { 55969 if (resendMessage) { 55970 $$invalidate(14, showMessage = true); 55971 setTimeout(() =>
55971 $$invalidate(14, showMessage = false), 2000); 55972 } 55973 55974 onResendVerificationCode(); 55975 }; 55976 55977 const change_handler = ({ detail }) => !disabled && onChange(detail); 55978 55979 $$self.$$set = $$props => { 55980 if ('label' in $$props) $$invalidate(0, label = $$props.label); 55981 if ('placeholder' in $$props) $$invalidate(1, placeholder = $$props.placeholder); 55982 if ('resendMessage' in $$props) $$invalidate(2, resendMessage = $$props.resendMessage); 55983 if ('resendText' in $$props) $$invalidate(3, resendText = $$props.resendText); 55984 if ('disabled' in $$props) $$invalidate(4, disabled = $$props.disabled); 55985 if ('error' in $$props) $$invalidate(5, error = $$props.error); 55986 if ('codeValid' in $$props) $$invalidate(6, codeValid = $$props.codeValid); 55987 if ('formBusy' in $$props) $$invalidate(7, formBusy = $$props.formBusy); 55988 if ('code' in $$props) $$invalidate(8, code = $$props.code); 55989 if ('isPaymentForm' in $$props) $$invalidate(9, isPaymentForm = $$props.isPaymentForm); 55990 if ('onChange' in $$props) $$invalidate(10, onChange = $$props.onChange);
55991 if ('onResendVerificationCode' in $$props) $$invalidate(11, onResendVerificationCode = $$props.onResendVerificationCode); 55992 if ('onFocus' in $$props) $$invalidate(12, onFocus = $$props.onFocus); 55993 if ('onBlur' in $$props) $$invalidate(13, onBlur = $$props.onBlur); 55994 }; 55995 55996 return [ 55997 label, 55998 placeholder, 55999 resendMessage, 56000 resendText, 56001 disabled, 56002 error, 56003 codeValid, 56004 formBusy, 56005 code, 56006 isPaymentForm, 56007 onChange, 56008 onResendVerificationCode, 56009 onFocus, 56010 onBlur, 56011 showMessage, 56012 click_handler, 56013 change_handler 56014 ]; 56015 } 56016 56017 class VerificationCode extends SvelteComponent { 56018 constructor(options) { 56019 super(); 56020 56021 init(this, options, instance$O, create_fragment$P, safe_not_equal, { 56022 label: 0, 56023 placeholder: 1, 56024 resendMessage: 2, 56025 resendText: 3, 56026 disabled: 4, 56027 error: 5, 56028 codeValid: 6, 56029 formBusy: 7, 56030 code: 8, 56031 isPaymentForm: 9, 56032 onChange: 10, 56033 onResendVerificationCode: 11, 56034 onFocus: 12, 56035 onBlur: 13 56036 }); 56037 } 56038 } 56039 56040 const verificationCodeLength = 6; 56041 const isPossiblyValidCode = code => code?.length === verificationCodeLength; 56042 const checkUserAttributesValid = (formState) => { 56043 return !formState.elementValidity 56044 .filter((e) => e.partType === formState.currentPart.type && 56045 e.sectionType === formState.currentSection.type && 56046 e.sectionOrder === formState.currentSection.order && 56047 e.elementType === 'user_attribute') 56048 .some((e) => !e.isValid); 56049 }; 56050 const factory$l = { 56051 matches: (sectionElement) => sectionElement.type === elementTypes.VERIFICATION_CODE, 56052 create: (form, formState, formActions, elementConfig) => ({ 56053 component: VerificationCode, 56054 props: { 56055 code: formState.verificationCode, 56056 label: elementConfig.label, 56057 placeholder: elementConfig.placeholder, 56058 resendMessage: elementConfig.message, 56059 resendText: elementConfig.resendText, 56060 disabled: formState.isBusy || formState.verificationCodeValid || !checkUserAttributesValid(formState), 56061 codeValid: formState.verificationCodeValid, 56062 formBusy: formState.isBusy, 56063 isPaymentForm: form.formType === FormType.PAYMENT, 56064 onResendVerificationCode: () => { 56065 void (formState.currentSection.type === sectionTypes.FORGOT_PASSWORD.type ? sendPasswordResetCode : send2FaCode)(form, formState, formActions); 56066 }, 56067 onChange: (value) => { 56068 const updatedState = formActions.updateFormState({ 56069 verificationCodeValid: undefined, 56070 verificationCode: value, 56071 serverErrors: [] 56072 }); 56073 const userAttributesValid = checkUserAttributesValid(formState); 56074 formActions.updateFormState({ 56075 showFieldErrors: !userAttributesValid 56076 }); 56077 if (isPossiblyValidCode(value)) { 56078 if (elementConfig.verificationEvent) { 56079 formActions.onEvent(elementConfig.verificationEvent); 56080 return; 56081 } 56082 if (formState.currentSection.type === sectionTypes.FORGOT_PASSWORD.type) { 56083 formActions.completeSection(); 56084 } 56085 else if (userAttributesValid) { 56086 void verifyOtp(form, updatedState, formActions); 56087 } 56088 } 56089 logDataLayerEvent(form, 'zephr_form_input_change', { 56090 inputName: 'zephr-form-verification-code', 56091 sectionId: formState.currentSection.type, 56092 field: 'verification-code' 56093 }); 56094 }, 56095 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 56096 inputName: 'zephr-form-verification-code', 56097 sectionId: formState.currentSection.type, 56098 field: 'verification-code' 56099 }), 56100 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 56101 inputName: 'zephr-form-verification-code', 56102 sectionId: formState.currentSection.type, 56103 field: 'verification-code' 56104 }), 56105 }, 56106 isValid: isPossiblyValidCode(formState.verificationCode) 56107 }) 56108 }; 56109 56110 /* src/components/elements/text/Text.svelte generated by Svelte v4.2.12 */ 56111 56112 function create_fragment$O(ctx) { 56113 let div; 56114 56115 return { 56116 c() { 56117 div = element("div"); 56118 attr(div, "class", "zephr-form-custom-text svelte-3sd7s2"); 56119 set_style(div, "text-align", /*centerText*/ ctx[1] ? 'center' : 'initial'); 56120 toggle_class(div, "zephr-payment-form-custom-text", /*isPaymentForm*/ ctx[2]); 56121 }, 56122 m(target, anchor) { 56123 insert(target, div, anchor); 56124 div.innerHTML = /*text*/ ctx[0]; 56125 }, 56126 p(ctx, [dirty]) {
56127 if (dirty & /*text*/ 1) div.innerHTML = /*text*/ ctx[0]; 56128 if (dirty & /*centerText*/ 2) { 56129 set_style(div, "text-align", /*centerText*/ ctx[1] ? 'center' : 'initial'); 56130 } 56131 56132 if (dirty & /*isPaymentForm*/ 4) { 56133 toggle_class(div, "zephr-payment-form-custom-text", /*isPaymentForm*/ ctx[2]); 56134 } 56135 }, 56136 i: noop, 56137 o: noop, 56138 d(detaching) { 56139 if (detaching) { 56140 detach(div); 56141 } 56142 } 56143 }; 56144 } 56145 56146 function instance$N($$self, $$props, $$invalidate) { 56147 let { text } = $$props; 56148 let { centerText = false } = $$props; 56149 let { isPaymentForm = false } = $$props; 56150 56151 $$self.$$set = $$props => { 56152 if ('text' in $$props) $$invalidate(0, text = $$props.text); 56153 if ('centerText' in $$props) $$invalidate(1, centerText = $$props.centerText); 56154 if ('isPaymentForm' in $$props) $$invalidate(2, isPaymentForm = $$props.isPaymentForm); 56155 }; 56156 56157 return [text, centerText, isPaymentForm]; 56158 } 56159 56160 class Text extends SvelteComponent { 56161 constructor(options) { 56162 super(); 56163 init(this, options, instance$N, create_fragment$O, safe_not_equal, { text: 0, centerText: 1, isPaymentForm: 2 }); 56164 } 56165 } 56166 56167 const factory$k = { 56168 matches: (sectionElement) => sectionElement.type === elementTypes.TEXT, 56169 create: (form, formState, formActions, elementConfig) => ({ 56170 component: Text, 56171 props: { 56172 text: elementConfig.text, 56173 centerText: elementConfig.centerText, 56174 isPaymentForm: form.formType === FormType.PAYMENT, 56175 } 56176 }) 56177 }; 56178 56179 /* src/components/elements/Radio.svelte generated by Svelte v4.2.12 */ 56180 56181 function create_fragment$N(ctx) { 56182 let input; 56183 let t0; 56184 let label_1; 56185 let span; 56186 let t1; 56187 let t2; 56188 let mounted; 56189 let dispose; 56190 56191 let input_levels = [ 56192 { id: /*id*/ ctx[0] }, 56193 { name: /*name*/ ctx[1] }, 56194 { required: /*required*/ ctx[2] }, 56195 { disabled: /*disabled*/ ctx[3] }, 56196 /*conditionalProps*/ ctx[8], 56197 { type: "radio" }, 56198 { class: "zephr-form-input-radio" } 56199 ]; 56200 56201 let input_data = {}; 56202 56203 for (let i = 0; i < input_levels.length; i += 1) { 56204 input_data = assign(input_data, input_levels[i]); 56205 } 56206 56207 return { 56208 c() { 56209 input = element("input"); 56210 t0 = space(); 56211 label_1 = element("label"); 56212 span = element("span"); 56213 t1 = space(); 56214 t2 = text(/*label*/ ctx[6]); 56215 set_attributes(input, input_data); 56216 toggle_class(input, "zephr-payment-form-input-radio", /*isPaymentForm*/ ctx[5]); 56217 toggle_class(input, "disabled", /*disabled*/ ctx[3]); 56218 toggle_class(input, "error", /*hasError*/ ctx[4]); 56219 toggle_class(input, "svelte-1cbmaif", true); 56220 attr(span, "class", "zephr-form-radio-dot svelte-1cbmaif"); 56221 toggle_class(span, "zephr-payment-form-radio-dot", /*isPaymentForm*/ ctx[5]); 56222 toggle_class(span, "disabled", /*disabled*/ ctx[3]); 56223 toggle_class(span, "checked", /*checked*/ ctx[7]); 56224 toggle_class(span, "error", /*hasError*/ ctx[4]); 56225 attr(label_1, "for", /*id*/ ctx[0]); 56226 attr(label_1, "class", "zephr-form-radio-label svelte-1cbmaif"); 56227 toggle_class(label_1, "zephr-payment-form-radio-label", /*isPaymentForm*/ ctx[5]); 56228 }, 56229 m(target, anchor) { 56230 insert(target, input, anchor); 56231 if (input.autofocus) input.focus(); 56232 insert(target, t0, anchor); 56233 insert(target, label_1, anchor); 56234 append(label_1, span); 56235 append(label_1, t1); 56236 append(label_1, t2); 56237 56238 if (!mounted) { 56239 dispose = listen(input, "input", /*handleInputChange*/ ctx[9]); 56240 mounted = true; 56241 } 56242 }, 56243 p(ctx, [dirty]) { 56244 set_attributes(input, input_data = get_spread_update(input_levels, [ 56245 dirty & /*id*/ 1 && { id: /*id*/ ctx[0] }, 56246 dirty & /*name*/ 2 && { name: /*name*/ ctx[1] }, 56247 dirty & /*required*/ 4 && { required: /*required*/ ctx[2] }, 56248 dirty & /*disabled*/ 8 && { disabled: /*disabled*/ ctx[3] }, 56249 dirty & /*conditionalProps*/ 256 && /*conditionalProps*/ ctx[8], 56250 { type: "radio" }, 56251 { class: "zephr-form-input-radio" } 56252 ])); 56253 56254 toggle_class(input, "zephr-payment-form-input-radio", /*isPaymentForm*/ ctx[5]); 56255 toggle_class(input, "disabled", /*disabled*/ ctx[3]); 56256 toggle_class(input, "error", /*hasError*/ ctx[4]); 56257 toggle_class(input, "svelte-1cbmaif", true); 56258
56259 if (dirty & /*isPaymentForm*/ 32) { 56260 toggle_class(span, "zephr-payment-form-radio-dot", /*isPaymentForm*/ ctx[5]); 56261 } 56262 56263 if (dirty & /*disabled*/ 8) { 56264 toggle_class(span, "disabled", /*disabled*/ ctx[3]); 56265 } 56266 56267 if (dirty & /*checked*/ 128) { 56268 toggle_class(span, "checked", /*checked*/ ctx[7]); 56269 } 56270 56271 if (dirty & /*hasError*/ 16) { 56272 toggle_class(span, "error", /*hasError*/ ctx[4]); 56273 } 56274 56275 if (dirty & /*label*/ 64) set_data(t2, /*label*/ ctx[6]); 56276 56277 if (dirty & /*id*/ 1) { 56278 attr(label_1, "for", /*id*/ ctx[0]); 56279 } 56280 56281 if (dirty & /*isPaymentForm*/ 32) { 56282 toggle_class(label_1, "zephr-payment-form-radio-label", /*isPaymentForm*/ ctx[5]); 56283 } 56284 }, 56285 i: noop, 56286 o: noop, 56287 d(detaching) { 56288 if (detaching) { 56289 detach(input); 56290 detach(t0); 56291 detach(label_1); 56292 } 56293 56294 mounted = false; 56295 dispose(); 56296 } 56297 }; 56298 } 56299 56300 function instance$M($$self, $$props, $$invalidate) { 56301 const dispatch = createEventDispatcher(); 56302 let { id } = $$props; 56303 let { name = id } = $$props; 56304 let { required = true } = $$props; 56305 let { disabled = false } = $$props; 56306 let { hasError = false } = $$props; 56307 let { isPaymentForm = false } = $$props; 56308 let { label = "" } = $$props; 56309 let { value } = $$props; 56310 let { placeholder = "" } = $$props; 56311 let { checked = false } = $$props; 56312 let { pattern = "" } = $$props; 56313 let conditionalProps = {}; 56314 if (checked) conditionalProps.checked = checked; 56315 if (placeholder) conditionalProps.placeholder = placeholder; 56316 if (pattern) conditionalProps.pattern = pattern; 56317 if (value) conditionalProps.value = value; 56318 56319 const handleInputChange = e => { 56320 dispatch("change", e.target.value); 56321 }; 56322 56323 $$self.$$set = $$props => {
56324 if ('id' in $$props) $$invalidate(0, id = $$props.id); 56325 if ('name' in $$props) $$invalidate(1, name = $$props.name); 56326 if ('required' in $$props) $$invalidate(2, required = $$props.required); 56327 if ('disabled' in $$props) $$invalidate(3, disabled = $$props.disabled); 56328 if ('hasError' in $$props) $$invalidate(4, hasError = $$props.hasError); 56329 if ('isPaymentForm' in $$props) $$invalidate(5, isPaymentForm = $$props.isPaymentForm); 56330 if ('label' in $$props) $$invalidate(6, label = $$props.label); 56331 if ('value' in $$props) $$invalidate(10, value = $$props.value); 56332 if ('placeholder' in $$props) $$invalidate(11, placeholder = $$props.placeholder); 56333 if ('checked' in $$props) $$invalidate(7, checked = $$props.checked); 56334 if ('pattern' in $$props) $$invalidate(12, pattern = $$props.pattern); 56335 }; 56336 56337 return [ 56338 id, 56339 name, 56340 required, 56341 disabled, 56342 hasError, 56343 isPaymentForm, 56344 label, 56345 checked, 56346 conditionalProps, 56347 handleInputChange, 56348 value, 56349 placeholder, 56350 pattern 56351 ]; 56352 } 56353 56354 class Radio extends SvelteComponent { 56355 constructor(options) { 56356 super(); 56357 56358 init(this, options, instance$M, create_fragment$N, safe_not_equal, { 56359 id: 0, 56360 name: 1, 56361 required: 2, 56362 disabled: 3, 56363 hasError: 4, 56364 isPaymentForm: 5, 56365 label: 6, 56366 value: 10, 56367 placeholder: 11, 56368 checked: 7, 56369 pattern: 12 56370 }); 56371 } 56372 } 56373 56374 /* src/components/elements/userAttribute/UserAttribute.svelte generated by Svelte v4.2.12 */ 56375 56376 function get_each_context_1$4(ctx, list, i) { 56377 const child_ctx = ctx.slice(); 56378 child_ctx[19] = list[i]; 56379 return child_ctx; 56380 } 56381 56382 function get_each_context$e(ctx, list, i) { 56383 const child_ctx = ctx.slice(); 56384 child_ctx[19] = list[i]; 56385 return child_ctx; 56386 } 56387 56388 // (120:2) {:else} 56389 function create_else_block$8(ctx) { 56390 let input; 56391 let current; 56392 56393 input = new Input({ 56394 props: { 56395 id: /*id*/ ctx[10], 56396 name: /*config*/ ctx[0].slug, 56397 required: /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required, 56398 type: /*attributeSchema*/ ctx[1]?.["input-type"], 56399 value: /*value*/ ctx[2], 56400 checked: /*attributeSchema*/ ctx[1]?.["input-type"] === "checkbox" && /*value*/ ctx[2], 56401 pattern: /*attributeSchema*/ ctx[1]?.["validation-expression"], 56402 placeholder: /*config*/ ctx[0].placeholder, 56403 hasError: /*hasError*/ ctx[8], 56404 isPaymentForm: /*isPaymentForm*/ ctx[3], 56405 onFocus: /*onFocus*/ ctx[5], 56406 onBlur: /*onBlur*/ ctx[6] 56407 } 56408 }); 56409 56410 input.$on("change", /*change_handler_4*/ ctx[18]); 56411 56412 return { 56413 c() { 56414 create_component(input.$$.fragment); 56415 }, 56416 m(target, anchor) { 56417 mount_component(input, target, anchor); 56418 current = true; 56419 }, 56420 p(ctx, dirty) { 56421 const input_changes = {}; 56422 if (dirty & /*config*/ 1) input_changes.name = /*config*/ ctx[0].slug; 56423 if (dirty & /*config, attributeSchema*/ 3) input_changes.required = /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required; 56424 if (dirty & /*attributeSchema*/ 2) input_changes.type = /*attributeSchema*/ ctx[1]?.["input-type"]; 56425 if (dirty & /*value*/ 4) input_changes.value = /*value*/ ctx[2]; 56426 if (dirty & /*attributeSchema, value*/ 6) input_changes.checked = /*attributeSchema*/ ctx[1]?.["input-type"] === "checkbox" && /*value*/ ctx[2]; 56427 if (dirty & /*attributeSchema*/ 2) input_changes.pattern = /*attributeSchema*/ ctx[1]?.["validation-expression"]; 56428 if (dirty & /*config*/ 1) input_changes.placeholder = /*config*/ ctx[0].placeholder; 56429 if (dirty & /*hasError*/ 256) input_changes.hasError = /*hasError*/ ctx[8]; 56430 if (dirty & /*isPaymentForm*/ 8) input_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 56431 if (dirty & /*onFocus*/ 32) input_changes.onFocus = /*onFocus*/ ctx[5]; 56432 if (dirty & /*onBlur*/ 64) input_changes.onBlur = /*onBlur*/ ctx[6]; 56433 input.$set(input_changes); 56434 }, 56435 i(local) { 56436 if (current) return; 56437 transition_in(input.$$.fragment, local); 56438 current = true; 56439 }, 56440 o(local) { 56441 transition_out(input.$$.fragment, local); 56442 current = false; 56443 }, 56444 d(detaching) { 56445 destroy_component(input, detaching); 56446 } 56447 }; 56448 } 56449 56450 // (93:56) 56451 function create_if_block_5$7(ctx) { 56452 let div; 56453 let input; 56454 let t; 56455 let current; 56456 56457 input = new Input({ 56458 props: {
56459 id: /*id*/ ctx[10], 56460 required: /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required, 56461 type: /*attributeSchema*/ ctx[1]["input-type"], 56462 value: /*value*/ ctx[2], 56463 min: /*attributeSchema*/ ctx[1]["range-start"], 56464 max: /*attributeSchema*/ ctx[1]["range-end"], 56465 step: /*attributeSchema*/ ctx[1]["range-start"], 56466 isPaymentForm: /*isPaymentForm*/ ctx[3], 56467 onFocus: /*onFocus*/ ctx[5], 56468 onBlur: /*onBlur*/ ctx[6] 56469 } 56470 }); 56471 56472 input.$on("change", /*change_handler_3*/ ctx[17]); 56473 let if_block = /*attributeSchema*/ ctx[1]["input-type"] === "range" && /*value*/ ctx[2] != null && create_if_block_6$7(ctx); 56474 56475 return { 56476 c() { 56477 div = element("div"); 56478 create_component(input.$$.fragment); 56479 t = space(); 56480 if (if_block) if_block.c(); 56481 attr(div, "class", "zephr-form-flex-container"); 56482 toggle_class(div, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[3]); 56483 }, 56484 m(target, anchor) { 56485 insert(target, div, anchor); 56486 mount_component(input, div, null); 56487 append(div, t); 56488 if (if_block) if_block.m(div, null); 56489 current = true; 56490 }, 56491 p(ctx, dirty) { 56492 const input_changes = {}; 56493 if (dirty & /*config, attributeSchema*/ 3) input_changes.required = /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required; 56494 if (dirty & /*attributeSchema*/ 2) input_changes.type = /*attributeSchema*/ ctx[1]["input-type"]; 56495 if (dirty & /*value*/ 4) input_changes.value = /*value*/ ctx[2]; 56496 if (dirty & /*attributeSchema*/ 2) input_changes.min = /*attributeSchema*/ ctx[1]["range-start"]; 56497 if (dirty & /*attributeSchema*/ 2) input_changes.max = /*attributeSchema*/ ctx[1]["range-end"]; 56498 if (dirty & /*attributeSchema*/ 2) input_changes.step = /*attributeSchema*/ ctx[1]["range-start"]; 56499 if (dirty & /*isPaymentForm*/ 8) input_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 56500 if (dirty & /*onFocus*/ 32) input_changes.onFocus = /*onFocus*/ ctx[5]; 56501 if (dirty & /*onBlur*/ 64) input_changes.onBlur = /*onBlur*/ ctx[6]; 56502 input.$set(input_changes); 56503 56504 if (/*attributeSchema*/ ctx[1]["input-type"] === "range" && /*value*/ ctx[2] != null) { 56505 if (if_block) { 56506 if_block.p(ctx, dirty); 56507 } else { 56508 if_block = create_if_block_6$7(ctx); 56509 if_block.c(); 56510 if_block.m(div, null); 56511 } 56512 } else if (if_block) { 56513 if_block.d(1); 56514 if_block = null; 56515 } 56516 56517 if (!current || dirty & /*isPaymentForm*/ 8) { 56518 toggle_class(div, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[3]); 56519 } 56520 }, 56521 i(local) { 56522 if (current) return; 56523 transition_in(input.$$.fragment, local); 56524 current = true; 56525 }, 56526 o(local) { 56527 transition_out(input.$$.fragment, local); 56528 current = false; 56529 }, 56530 d(detaching) { 56531 if (detaching) { 56532 detach(div); 56533 } 56534 56535 destroy_component(input); 56536 if (if_block) if_block.d(); 56537 } 56538 }; 56539 } 56540 56541 // (84:59) 56542 function create_if_block_4$9(ctx) { 56543 let textarea; 56544 let textarea_required_value; 56545 let textarea_placeholder_value; 56546 let mounted; 56547 let dispose; 56548 56549 return { 56550 c() { 56551 textarea = element("textarea"); 56552 attr(textarea, "id", /*id*/ ctx[10]); 56553 attr(textarea, "class", "zephr-form-input zephr-form-input-textarea svelte-wlae04"); 56554 textarea.required = textarea_required_value = /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required; 56555 attr(textarea, "placeholder", textarea_placeholder_value = /*config*/ ctx[0].placeholder); 56556 toggle_class(textarea, "zephr-payment-form-input", /*isPaymentForm*/ ctx[3]); 56557 toggle_class(textarea, "zephr-payment-form-input-textarea", /*isPaymentForm*/ ctx[3]); 56558 }, 56559 m(target, anchor) { 56560 insert(target, textarea, anchor); 56561 set_input_value(textarea, /*currentValue*/ ctx[7]); 56562 56563 if (!mounted) { 56564 dispose = listen(textarea, "input", /*textarea_input_handler*/ ctx[16]); 56565 mounted = true; 56566 } 56567 }, 56568 p(ctx, dirty) { 56569 if (dirty & /*config, attributeSchema*/ 3 && textarea_required_value !== (textarea_required_value = /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required)) { 56570 textarea.required = textarea_required_value; 56571 } 56572
56573 if (dirty & /*config*/ 1 && textarea_placeholder_value !== (textarea_placeholder_value = /*config*/ ctx[0].placeholder)) { 56574 attr(textarea, "placeholder", textarea_placeholder_value); 56575 } 56576 56577 if (dirty & /*currentValue*/ 128) { 56578 set_input_value(textarea, /*currentValue*/ ctx[7]); 56579 } 56580 56581 if (dirty & /*isPaymentForm*/ 8) { 56582 toggle_class(textarea, "zephr-payment-form-input", /*isPaymentForm*/ ctx[3]); 56583 } 56584 56585 if (dirty & /*isPaymentForm*/ 8) { 56586 toggle_class(textarea, "zephr-payment-form-input-textarea", /*isPaymentForm*/ ctx[3]); 56587 } 56588 }, 56589 i: noop, 56590 o: noop, 56591 d(detaching) { 56592 if (detaching) { 56593 detach(textarea); 56594 } 56595 56596 mounted = false; 56597 dispose(); 56598 } 56599 }; 56600 } 56601 56602 // (64:57) 56603 function create_if_block_3$b(ctx) { 56604 let select; 56605 let option_1; 56606 let t_value = (/*config*/ ctx[0].placeholder ?? "") + ""; 56607 let t; 56608 let select_name_value; 56609 let select_required_value; 56610 let select_value_value; 56611 let mounted; 56612 let dispose; 56613 let each_value_1 = ensure_array_like(/*attributeSchema*/ ctx[1]?.["select-options"]); 56614 let each_blocks = []; 56615 56616 for (let i = 0; i < each_value_1.length; i += 1) { 56617 each_blocks[i] = create_each_block_1$4(get_each_context_1$4(ctx, each_value_1, i)); 56618 } 56619 56620 return { 56621 c() { 56622 select = element("select"); 56623 option_1 = element("option"); 56624 t = text(t_value); 56625 56626 for (let i = 0; i < each_blocks.length; i += 1) { 56627 each_blocks[i].c(); 56628 } 56629 56630 option_1.disabled = true; 56631 option_1.__value = ""; 56632 set_input_value(option_1, option_1.__value); 56633 attr(select, "id", /*id*/ ctx[10]); 56634 attr(select, "name", select_name_value = /*config*/ ctx[0].slug); 56635 attr(select, "class", "zephr-form-input zephr-form-input-select svelte-wlae04"); 56636 select.required = select_required_value = /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required; 56637 toggle_class(select, "zephr-payment-form-input", /*isPaymentForm*/ ctx[3]); 56638 toggle_class(select, "zephr-payment-form-input-select", /*isPaymentForm*/ ctx[3]); 56639 toggle_class(select, "unselected", !/*value*/ ctx[2]); 56640 toggle_class(select, "error", /*hasError*/ ctx[8]); 56641 }, 56642 m(target, anchor) { 56643 insert(target, select, anchor); 56644 append(select, option_1); 56645 append(option_1, t); 56646 56647 for (let i = 0; i < each_blocks.length; i += 1) { 56648 if (each_blocks[i]) { 56649 each_blocks[i].m(select, null); 56650 } 56651 } 56652 56653 select_option(select, /*value*/ ctx[2] ?? ""); 56654 56655 if (!mounted) { 56656 dispose = listen(select, "change", /*change_handler_2*/ ctx[15]); 56657 mounted = true; 56658 } 56659 }, 56660 p(ctx, dirty) { 56661 if (dirty & /*config*/ 1 && t_value !== (t_value = (/*config*/ ctx[0].placeholder ?? "") + "")) set_data(t, t_value); 56662 56663 if (dirty & /*attributeSchema, value*/ 6) { 56664 each_value_1 = ensure_array_like(/*attributeSchema*/ ctx[1]?.["select-options"]); 56665 let i; 56666 56667 for (i = 0; i < each_value_1.length; i += 1) { 56668 const child_ctx = get_each_context_1$4(ctx, each_value_1, i); 56669 56670 if (each_blocks[i]) { 56671 each_blocks[i].p(child_ctx, dirty); 56672 } else { 56673 each_blocks[i] = create_each_block_1$4(child_ctx); 56674 each_blocks[i].c(); 56675 each_blocks[i].m(select, null); 56676 } 56677 } 56678 56679 for (; i < each_blocks.length; i += 1) { 56680 each_blocks[i].d(1); 56681 } 56682 56683 each_blocks.length = each_value_1.length; 56684 } 56685 56686 if (dirty & /*config*/ 1 && select_name_value !== (select_name_value = /*config*/ ctx[0].slug)) { 56687 attr(select, "name", select_name_value); 56688 } 56689 56690 if (dirty & /*config, attributeSchema*/ 3 && select_required_value !== (select_required_value = /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required)) { 56691 select.required = select_required_value; 56692 } 56693 56694 if (dirty & /*value, attributeSchema*/ 6 && select_value_value !== (select_value_value = /*value*/ ctx[2] ?? "")) { 56695 select_option(select, /*value*/ ctx[2] ?? ""); 56696 } 56697 56698 if (dirty & /*isPaymentForm*/ 8) { 56699 toggle_class(select, "zephr-payment-form-input", /*isPaymentForm*/ ctx[3]); 56700 } 56701 56702 if (dirty & /*isPaymentForm*/ 8) { 56703 toggle_class(select, "zephr-payment-form-input-select", /*isPaymentForm*/ ctx[3]); 56704 } 56705
56706 if (dirty & /*value*/ 4) { 56707 toggle_class(select, "unselected", !/*value*/ ctx[2]); 56708 } 56709 56710 if (dirty & /*hasError*/ 256) { 56711 toggle_class(select, "error", /*hasError*/ ctx[8]); 56712 } 56713 }, 56714 i: noop, 56715 o: noop, 56716 d(detaching) { 56717 if (detaching) { 56718 detach(select); 56719 } 56720 56721 destroy_each(each_blocks, detaching); 56722 mounted = false; 56723 dispose(); 56724 } 56725 }; 56726 } 56727 56728 // (48:59) 56729 function create_if_block_2$g(ctx) { 56730 let checkbox; 56731 let current; 56732 56733 checkbox = new Checkbox({ 56734 props: { 56735 id: /*id*/ ctx[10], 56736 name: /*config*/ ctx[0].slug, 56737 label: `${/*config*/ ctx[0].label}${/*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required 56738 ? "*" 56739 : ""}`, 56740 required: /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required, 56741 value: /*value*/ ctx[2], 56742 checked: /*value*/ ctx[2], 56743 pattern: /*attributeSchema*/ ctx[1]?.["validation-expression"], 56744 placeholder: /*config*/ ctx[0].placeholder, 56745 hasError: /*hasError*/ ctx[8], 56746 isPaymentForm: /*isPaymentForm*/ ctx[3] 56747 } 56748 }); 56749 56750 checkbox.$on("change", /*change_handler_1*/ ctx[14]); 56751 56752 return { 56753 c() { 56754 create_component(checkbox.$$.fragment); 56755 }, 56756 m(target, anchor) { 56757 mount_component(checkbox, target, anchor); 56758 current = true; 56759 }, 56760 p(ctx, dirty) { 56761 const checkbox_changes = {}; 56762 if (dirty & /*config*/ 1) checkbox_changes.name = /*config*/ ctx[0].slug; 56763 56764 if (dirty & /*config, attributeSchema*/ 3) checkbox_changes.label = `${/*config*/ ctx[0].label}${/*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required 56765 ? "*" 56766 : ""}`; 56767 56768 if (dirty & /*config, attributeSchema*/ 3) checkbox_changes.required = /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required; 56769 if (dirty & /*value*/ 4) checkbox_changes.value = /*value*/ ctx[2]; 56770 if (dirty & /*value*/ 4) checkbox_changes.checked = /*value*/ ctx[2]; 56771 if (dirty & /*attributeSchema*/ 2) checkbox_changes.pattern = /*attributeSchema*/ ctx[1]?.["validation-expression"]; 56772 if (dirty & /*config*/ 1) checkbox_changes.placeholder = /*config*/ ctx[0].placeholder; 56773 if (dirty & /*hasError*/ 256) checkbox_changes.hasError = /*hasError*/ ctx[8]; 56774 if (dirty & /*isPaymentForm*/ 8) checkbox_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 56775 checkbox.$set(checkbox_changes); 56776 }, 56777 i(local) { 56778 if (current) return; 56779 transition_in(checkbox.$$.fragment, local); 56780 current = true; 56781 }, 56782 o(local) { 56783 transition_out(checkbox.$$.fragment, local); 56784 current = false; 56785 }, 56786 d(detaching) { 56787 destroy_component(checkbox, detaching); 56788 } 56789 }; 56790 } 56791 56792 // (34:2) {#if attributeSchema?.["input-type"] === "radio"} 56793 function create_if_block_1$q(ctx) { 56794 let each_1_anchor; 56795 let current; 56796 let each_value = ensure_array_like(/*attributeSchema*/ ctx[1]?.["select-options"]); 56797 let each_blocks = []; 56798 56799 for (let i = 0; i < each_value.length; i += 1) { 56800 each_blocks[i] = create_each_block$e(get_each_context$e(ctx, each_value, i)); 56801 } 56802 56803 const out = i => transition_out(each_blocks[i], 1, 1, () => { 56804 each_blocks[i] = null; 56805 }); 56806 56807 return { 56808 c() { 56809 for (let i = 0; i < each_blocks.length; i += 1) { 56810 each_blocks[i].c(); 56811 } 56812 56813 each_1_anchor = empty(); 56814 }, 56815 m(target, anchor) { 56816 for (let i = 0; i < each_blocks.length; i += 1) { 56817 if (each_blocks[i]) { 56818 each_blocks[i].m(target, anchor); 56819 } 56820 } 56821 56822 insert(target, each_1_anchor, anchor); 56823 current = true; 56824 }, 56825 p(ctx, dirty) { 56826 if (dirty & /*id, attributeSchema, config, value, hasError, isPaymentForm, onChange*/ 1311) { 56827 each_value = ensure_array_like(/*attributeSchema*/ ctx[1]?.["select-options"]); 56828 let i; 56829 56830 for (i = 0; i < each_value.length; i += 1) { 56831 const child_ctx = get_each_context$e(ctx, each_value, i); 56832 56833 if (each_blocks[i]) { 56834 each_blocks[i].p(child_ctx, dirty); 56835 transition_in(each_blocks[i], 1); 56836 } else { 56837 each_blocks[i] = create_each_block$e(child_ctx); 56838 each_blocks[i].c(); 56839 transition_in(each_blocks[i], 1); 56840 each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); 56841 } 56842 } 56843 56844 group_outros(); 56845 56846 for (i = each_value.length; i < each_blocks.length; i += 1) { 56847 out(i); 56848 } 56849 56850 check_outros(); 56851 } 56852 }, 56853 i(local) { 56854 if (current) return; 56855 56856 for (let i = 0; i < each_value.length; i += 1) { 56857 transition_in(each_blocks[i]); 56858 } 56859 56860 current = true; 56861 }, 56862 o(local) {
56863 each_blocks = each_blocks.filter(Boolean); 56864 56865 for (let i = 0; i < each_blocks.length; i += 1) { 56866 transition_out(each_blocks[i]); 56867 } 56868 56869 current = false; 56870 }, 56871 d(detaching) { 56872 if (detaching) { 56873 detach(each_1_anchor); 56874 } 56875 56876 destroy_each(each_blocks, detaching); 56877 } 56878 }; 56879 } 56880 56881 // (111:6) {#if attributeSchema["input-type"] === "range" && value != null} 56882 function create_if_block_6$7(ctx) { 56883 let output; 56884 let t; 56885 56886 return { 56887 c() { 56888 output = element("output"); 56889 t = text(/*value*/ ctx[2]); 56890 attr(output, "class", "zephr-form-input-slider-output svelte-wlae04"); 56891 toggle_class(output, "zephr-payment-form-input-slider-output", /*isPaymentForm*/ ctx[3]); 56892 }, 56893 m(target, anchor) { 56894 insert(target, output, anchor); 56895 append(output, t); 56896 }, 56897 p(ctx, dirty) { 56898 if (dirty & /*value*/ 4) set_data(t, /*value*/ ctx[2]); 56899 56900 if (dirty & /*isPaymentForm*/ 8) { 56901 toggle_class(output, "zephr-payment-form-input-slider-output", /*isPaymentForm*/ ctx[3]); 56902 } 56903 }, 56904 d(detaching) { 56905 if (detaching) { 56906 detach(output); 56907 } 56908 } 56909 }; 56910 } 56911 56912 // (78:6) {#each attributeSchema?.["select-options"] as option} 56913 function create_each_block_1$4(ctx) { 56914 let option_1; 56915 let t0_value = /*option*/ ctx[19].label + ""; 56916 let t0; 56917 let t1; 56918 let option_1_value_value; 56919 let option_1_selected_value; 56920 56921 return { 56922 c() { 56923 option_1 = element("option"); 56924 t0 = text(t0_value); 56925 t1 = space(); 56926 option_1.__value = option_1_value_value = /*option*/ ctx[19].value; 56927 set_input_value(option_1, option_1.__value); 56928 option_1.selected = option_1_selected_value = /*value*/ ctx[2] === /*option*/ ctx[19].value; 56929 }, 56930 m(target, anchor) { 56931 insert(target, option_1, anchor); 56932 append(option_1, t0); 56933 append(option_1, t1); 56934 }, 56935 p(ctx, dirty) { 56936 if (dirty & /*attributeSchema*/ 2 && t0_value !== (t0_value = /*option*/ ctx[19].label + "")) set_data(t0, t0_value); 56937 56938 if (dirty & /*attributeSchema*/ 2 && option_1_value_value !== (option_1_value_value = /*option*/ ctx[19].value)) { 56939 option_1.__value = option_1_value_value; 56940 set_input_value(option_1, option_1.__value); 56941 } 56942 56943 if (dirty & /*value, attributeSchema*/ 6 && option_1_selected_value !== (option_1_selected_value = /*value*/ ctx[2] === /*option*/ ctx[19].value)) { 56944 option_1.selected = option_1_selected_value; 56945 } 56946 }, 56947 d(detaching) { 56948 if (detaching) { 56949 detach(option_1); 56950 } 56951 } 56952 }; 56953 } 56954 56955 // (35:4) {#each attributeSchema?.["select-options"] as option} 56956 function create_each_block$e(ctx) { 56957 let radio; 56958 let current; 56959 56960 radio = new Radio({ 56961 props: { 56962 id: "" + (/*id*/ ctx[10] + "-" + /*option*/ ctx[19].value), 56963 name: /*config*/ ctx[0].slug, 56964 label: /*option*/ ctx[19].label, 56965 required: /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required, 56966 value: /*option*/ ctx[19].value, 56967 checked: /*value*/ ctx[2] === /*option*/ ctx[19].value, 56968 hasError: /*hasError*/ ctx[8], 56969 isPaymentForm: /*isPaymentForm*/ ctx[3] 56970 } 56971 }); 56972 56973 radio.$on("change", /*change_handler*/ ctx[13]); 56974 56975 return { 56976 c() { 56977 create_component(radio.$$.fragment); 56978 }, 56979 m(target, anchor) { 56980 mount_component(radio, target, anchor); 56981 current = true; 56982 }, 56983 p(ctx, dirty) { 56984 const radio_changes = {}; 56985 if (dirty & /*attributeSchema*/ 2) radio_changes.id = "" + (/*id*/ ctx[10] + "-" + /*option*/ ctx[19].value); 56986 if (dirty & /*config*/ 1) radio_changes.name = /*config*/ ctx[0].slug; 56987 if (dirty & /*attributeSchema*/ 2) radio_changes.label = /*option*/ ctx[19].label; 56988 if (dirty & /*config, attributeSchema*/ 3) radio_changes.required = /*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required; 56989 if (dirty & /*attributeSchema*/ 2) radio_changes.value = /*option*/ ctx[19].value; 56990 if (dirty & /*value, attributeSchema*/ 6) radio_changes.checked = /*value*/ ctx[2] === /*option*/ ctx[19].value; 56991 if (dirty & /*hasError*/ 256) radio_changes.hasError = /*hasError*/ ctx[8]; 56992 if (dirty & /*isPaymentForm*/ 8) radio_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 56993 radio.$set(radio_changes); 56994 }, 56995 i(local) { 56996 if (current) return; 56997 transition_in(radio.$$.fragment, local); 56998 current = true; 56999 }, 57000 o(local) { 57001 transition_out(radio.$$.fragment, local); 57002 current = false;
57003 }, 57004 d(detaching) { 57005 destroy_component(radio, detaching); 57006 } 57007 }; 57008 } 57009 57010 // (24:0) <Label forInput={id} sublabel={attributeSchema["public-description"]} label={!/(hidden|checkbox)/.test(attributeSchema?.["input-type"] || "") ? `${config.label}${ config.required || attributeSchema?.required ? "*" : "" }` : ""} {isPaymentForm} > 57011 function create_default_slot$5(ctx) { 57012 let current_block_type_index; 57013 let if_block; 57014 let if_block_anchor; 57015 let current; 57016 57017 const if_block_creators = [ 57018 create_if_block_1$q, 57019 create_if_block_2$g, 57020 create_if_block_3$b, 57021 create_if_block_4$9, 57022 create_if_block_5$7, 57023 create_else_block$8 57024 ]; 57025 57026 const if_blocks = []; 57027 57028 function select_block_type(ctx, dirty) { 57029 if (/*attributeSchema*/ ctx[1]?.["input-type"] === "radio") return 0; 57030 if (/*attributeSchema*/ ctx[1]?.["input-type"] === "checkbox") return 1; 57031 if (/*attributeSchema*/ ctx[1]?.["input-type"] === "select") return 2; 57032 if (/*attributeSchema*/ ctx[1]?.["input-type"] === "textarea") return 3; 57033 if (/*attributeSchema*/ ctx[1]?.["input-type"] === "range") return 4; 57034 return 5; 57035 } 57036 57037 current_block_type_index = select_block_type(ctx); 57038 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 57039 57040 return { 57041 c() { 57042 if_block.c(); 57043 if_block_anchor = empty(); 57044 }, 57045 m(target, anchor) { 57046 if_blocks[current_block_type_index].m(target, anchor); 57047 insert(target, if_block_anchor, anchor); 57048 current = true; 57049 }, 57050 p(ctx, dirty) { 57051 let previous_block_index = current_block_type_index; 57052 current_block_type_index = select_block_type(ctx); 57053 57054 if (current_block_type_index === previous_block_index) { 57055 if_blocks[current_block_type_index].p(ctx, dirty); 57056 } else { 57057 group_outros(); 57058 57059 transition_out(if_blocks[previous_block_index], 1, 1, () => { 57060 if_blocks[previous_block_index] = null; 57061 }); 57062 57063 check_outros(); 57064 if_block = if_blocks[current_block_type_index]; 57065 57066 if (!if_block) { 57067 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 57068 if_block.c(); 57069 } else { 57070 if_block.p(ctx, dirty); 57071 } 57072 57073 transition_in(if_block, 1); 57074 if_block.m(if_block_anchor.parentNode, if_block_anchor); 57075 } 57076 }, 57077 i(local) { 57078 if (current) return; 57079 transition_in(if_block); 57080 current = true; 57081 }, 57082 o(local) { 57083 transition_out(if_block); 57084 current = false; 57085 }, 57086 d(detaching) { 57087 if (detaching) { 57088 detach(if_block_anchor); 57089 } 57090 57091 if_blocks[current_block_type_index].d(detaching); 57092 } 57093 }; 57094 } 57095 57096 // (138:0) {#if hasError} 57097 function create_if_block$A(ctx) { 57098 let div; 57099 57100 return { 57101 c() { 57102 div = element("div"); 57103 div.textContent = "Mandatory information must be entered"; 57104 attr(div, "class", "zephr-form-input-error-text svelte-wlae04"); 57105 toggle_class(div, "zephr-payment-form-input-error-text", /*isPaymentForm*/ ctx[3]); 57106 }, 57107 m(target, anchor) { 57108 insert(target, div, anchor); 57109 }, 57110 p(ctx, dirty) { 57111 if (dirty & /*isPaymentForm*/ 8) { 57112 toggle_class(div, "zephr-payment-form-input-error-text", /*isPaymentForm*/ ctx[3]); 57113 } 57114 }, 57115 d(detaching) { 57116 if (detaching) { 57117 detach(div); 57118 } 57119 } 57120 }; 57121 } 57122 57123 function create_fragment$M(ctx) { 57124 let label; 57125 let t; 57126 let if_block_anchor; 57127 let current; 57128 57129 label = new Label({ 57130 props: { 57131 forInput: /*id*/ ctx[10], 57132 sublabel: /*attributeSchema*/ ctx[1]["public-description"], 57133 label: !(/(hidden|checkbox)/).test(/*attributeSchema*/ ctx[1]?.["input-type"] || "") 57134 ? `${/*config*/ ctx[0].label}${/*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required 57135 ? "*" 57136 : ""}` 57137 : "", 57138 isPaymentForm: /*isPaymentForm*/ ctx[3], 57139 $$slots: { default: [create_default_slot$5] }, 57140 $$scope: { ctx } 57141 } 57142 }); 57143 57144 let if_block = /*hasError*/ ctx[8] && create_if_block$A(ctx); 57145 57146 return { 57147 c() { 57148 create_component(label.$$.fragment); 57149 t = space(); 57150 if (if_block) if_block.c(); 57151 if_block_anchor = empty(); 57152 }, 57153 m(target, anchor) { 57154 mount_component(label, target, anchor); 57155 insert(target, t, anchor); 57156 if (if_block) if_block.m(target, anchor); 57157 insert(target, if_block_anchor, anchor); 57158 current = true; 57159 }, 57160 p(ctx, [dirty]) { 57161 const label_changes = {};
57162 if (dirty & /*attributeSchema*/ 2) label_changes.sublabel = /*attributeSchema*/ ctx[1]["public-description"]; 57163 57164 if (dirty & /*attributeSchema, config*/ 3) label_changes.label = !(/(hidden|checkbox)/).test(/*attributeSchema*/ ctx[1]?.["input-type"] || "") 57165 ? `${/*config*/ ctx[0].label}${/*config*/ ctx[0].required || /*attributeSchema*/ ctx[1]?.required 57166 ? "*" 57167 : ""}` 57168 : ""; 57169 57170 if (dirty & /*isPaymentForm*/ 8) label_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 57171 57172 if (dirty & /*$$scope, attributeSchema, config, value, hasError, isPaymentForm, onChange, currentValue, onFocus, onBlur*/ 16777727) { 57173 label_changes.$$scope = { dirty, ctx }; 57174 } 57175 57176 label.$set(label_changes); 57177 57178 if (/*hasError*/ ctx[8]) { 57179 if (if_block) { 57180 if_block.p(ctx, dirty); 57181 } else { 57182 if_block = create_if_block$A(ctx); 57183 if_block.c(); 57184 if_block.m(if_block_anchor.parentNode, if_block_anchor); 57185 } 57186 } else if (if_block) { 57187 if_block.d(1); 57188 if_block = null; 57189 } 57190 }, 57191 i(local) { 57192 if (current) return; 57193 transition_in(label.$$.fragment, local); 57194 current = true; 57195 }, 57196 o(local) { 57197 transition_out(label.$$.fragment, local); 57198 current = false; 57199 }, 57200 d(detaching) { 57201 if (detaching) { 57202 detach(t); 57203 detach(if_block_anchor); 57204 } 57205 57206 destroy_component(label, detaching); 57207 if (if_block) if_block.d(detaching); 57208 } 57209 }; 57210 } 57211 57212 function instance$L($$self, $$props, $$invalidate) { 57213 let hasError; 57214 let { formKey } = $$props; 57215 let { config } = $$props; 57216 let { attributeSchema } = $$props; 57217 let { value } = $$props; 57218 let { error } = $$props; 57219 let { isPaymentForm = false } = $$props; 57220 let { onChange } = $$props; 57221 let { onFocus } = $$props; 57222 let { onBlur } = $$props; 57223 let currentValue = value; 57224 57225 // Casting functions for typescript 57226 const asSelect = target => target; 57227 57228 const id = `zephr-form-${config.slug}-${formKey}`; 57229 const change_handler = ({ detail }) => onChange(detail); 57230 const change_handler_1 = ({ detail }) => onChange(detail); 57231 const change_handler_2 = e => onChange(asSelect(e.target).value); 57232 57233 function textarea_input_handler() { 57234 currentValue = this.value; 57235 $$invalidate(7, currentValue); 57236 } 57237 57238 const change_handler_3 = ({ detail }) => onChange(detail); 57239 const change_handler_4 = ({ detail }) => onChange(detail); 57240 57241 $$self.$$set = $$props => {
57242 if ('formKey' in $$props) $$invalidate(11, formKey = $$props.formKey); 57243 if ('config' in $$props) $$invalidate(0, config = $$props.config); 57244 if ('attributeSchema' in $$props) $$invalidate(1, attributeSchema = $$props.attributeSchema); 57245 if ('value' in $$props) $$invalidate(2, value = $$props.value); 57246 if ('error' in $$props) $$invalidate(12, error = $$props.error); 57247 if ('isPaymentForm' in $$props) $$invalidate(3, isPaymentForm = $$props.isPaymentForm); 57248 if ('onChange' in $$props) $$invalidate(4, onChange = $$props.onChange); 57249 if ('onFocus' in $$props) $$invalidate(5, onFocus = $$props.onFocus); 57250 if ('onBlur' in $$props) $$invalidate(6, onBlur = $$props.onBlur); 57251 }; 57252 57253 $$self.$$.update = () => { 57254 if ($$self.$$.dirty & /*error*/ 4096) { 57255 $$invalidate(8, hasError = !!error); 57256 } 57257 57258 if ($$self.$$.dirty & /*attributeSchema, currentValue, value, onChange*/ 150) { 57259 if (attributeSchema?.["input-type"] === "textarea" && currentValue !== value) { 57260 onChange(currentValue); 57261 } 57262 } 57263 }; 57264 57265 return [ 57266 config, 57267 attributeSchema, 57268 value, 57269 isPaymentForm, 57270 onChange, 57271 onFocus, 57272 onBlur, 57273 currentValue, 57274 hasError, 57275 asSelect, 57276 id, 57277 formKey, 57278 error, 57279 change_handler, 57280 change_handler_1, 57281 change_handler_2, 57282 textarea_input_handler, 57283 change_handler_3, 57284 change_handler_4 57285 ]; 57286 } 57287 57288 class UserAttribute extends SvelteComponent { 57289 constructor(options) { 57290 super(); 57291 57292 init(this, options, instance$L, create_fragment$M, safe_not_equal, { 57293 formKey: 11, 57294 config: 0, 57295 attributeSchema: 1, 57296 value: 2, 57297 error: 12, 57298 isPaymentForm: 3, 57299 onChange: 4, 57300 onFocus: 5, 57301 onBlur: 6 57302 }); 57303 } 57304 } 57305 57306 const isEmpty = value => value == null || value === ""; 57307 const factory$j = { 57308 matches: (sectionElement) => sectionElement.type === elementTypes.USER_ATTRIBUTE, 57309 create: (form, formState, formActions, elementConfig) => { 57310 const attributeSchema = form.organisationConfiguration.schemaFields.find(s => s.slug === elementConfig.slug); 57311 const hide = formState.hideIfSetAttributes?.includes(elementConfig.slug); 57312 if (attributeSchema == undefined || hide) { 57313 return undefined; 57314 } 57315 const required = attributeSchema.required || elementConfig.required; 57316 const currentValue = (formState.userAttributes[elementConfig.slug] ?? (formState.readOnlyAttributeValues ?? {})[elementConfig.slug]); 57317 return { 57318 component: UserAttribute, 57319 props: { 57320 formKey: form.uniqueKey, 57321 config: elementConfig, 57322 value: currentValue, 57323 attributeSchema, 57324 isPaymentForm: form.formType === FormType.PAYMENT, 57325 onChange: (value) => { 57326 formActions.updateFormState({ 57327 userAttributes: { 57328 ...formState.userAttributes, 57329 [elementConfig.slug]: value 57330 } 57331 }); 57332 logDataLayerEvent(form, 'zephr_form_input_change', { 57333 inputName: `zephr-form-${elementConfig.slug}-${form.uniqueKey}`, 57334 sectionId: formState.currentSection.type, 57335 field: elementConfig.slug 57336 }); 57337 }, 57338 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 57339 inputName: `zephr-form-${elementConfig.slug}-${form.uniqueKey}`, 57340 sectionId: formState.currentSection.type, 57341 field: elementConfig.slug 57342 }), 57343 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 57344 inputName: `zephr-form-${elementConfig.slug}-${form.uniqueKey}`, 57345 sectionId: formState.currentSection.type, 57346 field: elementConfig.slug 57347 }), 57348 }, 57349 isValid: !(required && isEmpty(currentValue)) 57350 && !(required && attributeSchema["input-type"] === 'checkbox' && !currentValue) 57351 && !(attributeSchema["input-type"] === 'email' && !isEmpty(currentValue) && !isValidEmail(currentValue)) 57352 }; 57353 } 57354 }; 57355 57356 /* src/components/elements/Link.svelte generated by Svelte v4.2.12 */ 57357 57358 function create_fragment$L(ctx) { 57359 let button; 57360 let t; 57361 let mounted; 57362 let dispose; 57363 57364 return { 57365 c() { 57366 button = element("button"); 57367 t = text(/*text*/ ctx[0]); 57368 attr(button, "type", "button"); 57369 attr(button, "class", "zephr-form-link svelte-14vxk2u"); 57370 toggle_class(button, "zephr-form-link-disabled", /*disabled*/ ctx[1]); 57371 toggle_class(button, "zephr-form-link-no-underline", /*noUnderline*/ ctx[3]); 57372 }, 57373 m(target, anchor) { 57374 insert(target, button, anchor); 57375 append(button, t); 57376 57377 if (!mounted) { 57378 dispose = listen(button, "click", /*click_handler*/ ctx[5]); 57379 mounted = true; 57380 } 57381 }, 57382 p(ctx, [dirty]) {
57383 if (dirty & /*text*/ 1) set_data(t, /*text*/ ctx[0]); 57384 57385 if (dirty & /*disabled*/ 2) { 57386 toggle_class(button, "zephr-form-link-disabled", /*disabled*/ ctx[1]); 57387 } 57388 57389 if (dirty & /*noUnderline*/ 8) { 57390 toggle_class(button, "zephr-form-link-no-underline", /*noUnderline*/ ctx[3]); 57391 } 57392 }, 57393 i: noop, 57394 o: noop, 57395 d(detaching) { 57396 if (detaching) { 57397 detach(button); 57398 } 57399 57400 mounted = false; 57401 dispose(); 57402 } 57403 }; 57404 } 57405 57406 function instance$K($$self, $$props, $$invalidate) { 57407 let { text } = $$props; 57408 let { disabled = false } = $$props; 57409 57410 let { onClick = () => { 57411 57412 } } = $$props; 57413 57414 let { noUnderline = false } = $$props; 57415 const dispatch = createEventDispatcher(); 57416 57417 const click_handler = () => { 57418 onClick(); 57419 dispatch('linkClick', null); 57420 }; 57421 57422 $$self.$$set = $$props => { 57423 if ('text' in $$props) $$invalidate(0, text = $$props.text); 57424 if ('disabled' in $$props) $$invalidate(1, disabled = $$props.disabled); 57425 if ('onClick' in $$props) $$invalidate(2, onClick = $$props.onClick);
57426 if ('noUnderline' in $$props) $$invalidate(3, noUnderline = $$props.noUnderline); 57427 }; 57428 57429 return [text, disabled, onClick, noUnderline, dispatch, click_handler]; 57430 } 57431 57432 class Link extends SvelteComponent { 57433 constructor(options) { 57434 super(); 57435 57436 init(this, options, instance$K, create_fragment$L, safe_not_equal, { 57437 text: 0, 57438 disabled: 1, 57439 onClick: 2, 57440 noUnderline: 3 57441 }); 57442 } 57443 } 57444 57445 /* src/components/elements/resetPasswordLink/ResetPasswordLink.svelte generated by Svelte v4.2.12 */ 57446 57447 function create_else_block$7(ctx) { 57448 let link; 57449 let current; 57450 57451 link = new Link({ 57452 props: { 57453 text: /*text*/ ctx[0], 57454 onClick: /*onClick*/ ctx[2] 57455 } 57456 }); 57457 57458 link.$on("linkClick", /*linkClick_handler*/ ctx[7]); 57459 57460 return { 57461 c() { 57462 create_component(link.$$.fragment); 57463 }, 57464 m(target, anchor) { 57465 mount_component(link, target, anchor); 57466 current = true; 57467 }, 57468 p(ctx, dirty) { 57469 const link_changes = {}; 57470 if (dirty & /*text*/ 1) link_changes.text = /*text*/ ctx[0]; 57471 if (dirty & /*onClick*/ 4) link_changes.onClick = /*onClick*/ ctx[2]; 57472 link.$set(link_changes); 57473 }, 57474 i(local) { 57475 if (current) return; 57476 transition_in(link.$$.fragment, local); 57477 current = true; 57478 }, 57479 o(local) { 57480 transition_out(link.$$.fragment, local); 57481 current = false; 57482 }, 57483 d(detaching) { 57484 destroy_component(link, detaching); 57485 } 57486 }; 57487 } 57488 57489 // (16:2) {#if showMessage && !error} 57490 function create_if_block_1$p(ctx) { 57491 let div; 57492 let t; 57493 57494 return { 57495 c() { 57496 div = element("div"); 57497 t = text(/*message*/ ctx[1]); 57498 attr(div, "class", "zephr-form-link-message svelte-49aomy"); 57499 }, 57500 m(target, anchor) { 57501 insert(target, div, anchor); 57502 append(div, t); 57503 }, 57504 p(ctx, dirty) { 57505 if (dirty & /*message*/ 2) set_data(t, /*message*/ ctx[1]); 57506 }, 57507 i: noop, 57508 o: noop, 57509 d(detaching) { 57510 if (detaching) { 57511 detach(div); 57512 } 57513 } 57514 }; 57515 } 57516 57517 // (32:2) {#if error} 57518 function create_if_block$z(ctx) { 57519 let errormessage; 57520 let current; 57521 57522 errormessage = new ErrorMessage({ 57523 props: { 57524 error: /*error*/ ctx[3], 57525 isPaymentForm: /*isPaymentForm*/ ctx[5] 57526 } 57527 }); 57528 57529 return { 57530 c() { 57531 create_component(errormessage.$$.fragment); 57532 }, 57533 m(target, anchor) { 57534 mount_component(errormessage, target, anchor); 57535 current = true; 57536 }, 57537 p(ctx, dirty) { 57538 const errormessage_changes = {}; 57539 if (dirty & /*error*/ 8) errormessage_changes.error = /*error*/ ctx[3]; 57540 if (dirty & /*isPaymentForm*/ 32) errormessage_changes.isPaymentForm = /*isPaymentForm*/ ctx[5]; 57541 errormessage.$set(errormessage_changes); 57542 }, 57543 i(local) { 57544 if (current) return; 57545 transition_in(errormessage.$$.fragment, local); 57546 current = true; 57547 }, 57548 o(local) { 57549 transition_out(errormessage.$$.fragment, local); 57550 current = false; 57551 }, 57552 d(detaching) { 57553 destroy_component(errormessage, detaching); 57554 } 57555 }; 57556 } 57557 57558 function create_fragment$K(ctx) { 57559 let div; 57560 let current_block_type_index; 57561 let if_block0; 57562 let t; 57563 let current; 57564 const if_block_creators = [create_if_block_1$p, create_else_block$7]; 57565 const if_blocks = []; 57566 57567 function select_block_type(ctx, dirty) { 57568 if (/*showMessage*/ ctx[6] && !/*error*/ ctx[3]) return 0; 57569 return 1; 57570 } 57571 57572 current_block_type_index = select_block_type(ctx); 57573 if_block0 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 57574 let if_block1 = /*error*/ ctx[3] && create_if_block$z(ctx); 57575 57576 return { 57577 c() { 57578 div = element("div"); 57579 if_block0.c(); 57580 t = space(); 57581 if (if_block1) if_block1.c(); 57582 attr(div, "class", "zephr-form-flex-container zephr-form-reset-link-container svelte-49aomy"); 57583 toggle_class(div, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[5]); 57584 }, 57585 m(target, anchor) { 57586 insert(target, div, anchor); 57587 if_blocks[current_block_type_index].m(div, null); 57588 append(div, t); 57589 if (if_block1) if_block1.m(div, null); 57590 current = true; 57591 }, 57592 p(ctx, [dirty]) { 57593 let previous_block_index = current_block_type_index; 57594 current_block_type_index = select_block_type(ctx); 57595 57596 if (current_block_type_index === previous_block_index) { 57597 if_blocks[current_block_type_index].p(ctx, dirty); 57598 } else { 57599 group_outros(); 57600 57601 transition_out(if_blocks[previous_block_index], 1, 1, () => { 57602 if_blocks[previous_block_index] = null; 57603 }); 57604 57605 check_outros(); 57606 if_block0 = if_blocks[current_block_type_index]; 57607 57608 if (!if_block0) { 57609 if_block0 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 57610 if_block0.c(); 57611 } else { 57612 if_block0.p(ctx, dirty); 57613 } 57614 57615 transition_in(if_block0, 1); 57616 if_block0.m(div, t); 57617 } 57618 57619 if (/*error*/ ctx[3]) { 57620 if (if_block1) { 57621 if_block1.p(ctx, dirty); 57622
57623 if (dirty & /*error*/ 8) { 57624 transition_in(if_block1, 1); 57625 } 57626 } else { 57627 if_block1 = create_if_block$z(ctx); 57628 if_block1.c(); 57629 transition_in(if_block1, 1); 57630 if_block1.m(div, null); 57631 } 57632 } else if (if_block1) { 57633 group_outros(); 57634 57635 transition_out(if_block1, 1, 1, () => { 57636 if_block1 = null; 57637 }); 57638 57639 check_outros(); 57640 } 57641 57642 if (!current || dirty & /*isPaymentForm*/ 32) { 57643 toggle_class(div, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[5]); 57644 } 57645 }, 57646 i(local) { 57647 if (current) return; 57648 transition_in(if_block0); 57649 transition_in(if_block1); 57650 current = true; 57651 }, 57652 o(local) { 57653 transition_out(if_block0); 57654 transition_out(if_block1); 57655 current = false; 57656 }, 57657 d(detaching) { 57658 if (detaching) { 57659 detach(div); 57660 } 57661 57662 if_blocks[current_block_type_index].d(); 57663 if (if_block1) if_block1.d(); 57664 } 57665 }; 57666 } 57667 57668 function instance$J($$self, $$props, $$invalidate) { 57669 let { text } = $$props; 57670 let { message } = $$props; 57671 let { onClick } = $$props; 57672 let { error = null } = $$props; 57673 let { delayMs } = $$props; 57674 let { isPaymentForm = false } = $$props; 57675 let showMessage = false; 57676 57677 const linkClick_handler = () => { 57678 if (message) { 57679 $$invalidate(6, showMessage = true); 57680 setTimeout(() =>
57680 $$invalidate(6, showMessage = false), delayMs); 57681 } 57682 }; 57683 57684 $$self.$$set = $$props => { 57685 if ('text' in $$props) $$invalidate(0, text = $$props.text); 57686 if ('message' in $$props) $$invalidate(1, message = $$props.message); 57687 if ('onClick' in $$props) $$invalidate(2, onClick = $$props.onClick); 57688 if ('error' in $$props) $$invalidate(3, error = $$props.error); 57689 if ('delayMs' in $$props) $$invalidate(4, delayMs = $$props.delayMs); 57690 if ('isPaymentForm' in $$props) $$invalidate(5, isPaymentForm = $$props.isPaymentForm); 57691 }; 57692 57693 return [ 57694 text, 57695 message, 57696 onClick, 57697 error, 57698 delayMs, 57699 isPaymentForm, 57700 showMessage, 57701 linkClick_handler 57702 ]; 57703 } 57704 57705 class ResetPasswordLink extends SvelteComponent { 57706 constructor(options) { 57707 super(); 57708 57709 init(this, options, instance$J, create_fragment$K, safe_not_equal, { 57710 text: 0, 57711 message: 1, 57712 onClick: 2, 57713 error: 3, 57714 delayMs: 4, 57715 isPaymentForm: 5 57716 }); 57717 } 57718 } 57719 57720 const factory$i = { 57721 matches: (sectionElement) => sectionElement.type === elementTypes.RESET_PASSWORD_LINK, 57722 create: (form, formState, formActions, elementConfig) => ({ 57723 component: ResetPasswordLink, 57724 props: { 57725 text: elementConfig.text, 57726 message: elementConfig.message, 57727 delayMs: form.environment.reduceDelays ? 1 : 3000, 57728 isPaymentForm: form.formType === FormType.PAYMENT, 57729 onClick: async () => { 57730 logDataLayerEvent(form, 'zephr_form_button_press', { 57731 sectionId: formState.currentSection.type, 57732 buttonType: 'RESET_PASSWORD_LINK' 57733 }); 57734 await sendPasswordResetCode(form, formState, formActions); 57735 } 57736 } 57737 }) 57738 }; 57739 57740 /* src/components/elements/resendLoginLink/ResendLoginLink.svelte generated by Svelte v4.2.12 */ 57741 57742 function create_else_block$6(ctx) { 57743 let link; 57744 let current; 57745 57746 link = new Link({ 57747 props: { 57748 text: /*text*/ ctx[0], 57749 onClick: /*onClick*/ ctx[2] 57750 } 57751 }); 57752 57753 link.$on("linkClick", /*linkClick_handler*/ ctx[7]); 57754 57755 return { 57756 c() { 57757 create_component(link.$$.fragment); 57758 }, 57759 m(target, anchor) { 57760 mount_component(link, target, anchor); 57761 current = true; 57762 }, 57763 p(ctx, dirty) { 57764 const link_changes = {}; 57765 if (dirty & /*text*/ 1) link_changes.text = /*text*/ ctx[0]; 57766 if (dirty & /*onClick*/ 4) link_changes.onClick = /*onClick*/ ctx[2]; 57767 link.$set(link_changes); 57768 }, 57769 i(local) { 57770 if (current) return; 57771 transition_in(link.$$.fragment, local); 57772 current = true; 57773 }, 57774 o(local) { 57775 transition_out(link.$$.fragment, local); 57776 current = false; 57777 }, 57778 d(detaching) { 57779 destroy_component(link, detaching); 57780 } 57781 }; 57782 } 57783 57784 // (16:2) {#if showMessage && !error} 57785 function create_if_block_1$o(ctx) { 57786 let div; 57787 let t; 57788 57789 return { 57790 c() { 57791 div = element("div"); 57792 t = text(/*message*/ ctx[1]); 57793 attr(div, "class", "zephr-form-link-message svelte-49aomy"); 57794 }, 57795 m(target, anchor) { 57796 insert(target, div, anchor); 57797 append(div, t); 57798 }, 57799 p(ctx, dirty) { 57800 if (dirty & /*message*/ 2) set_data(t, /*message*/ ctx[1]); 57801 }, 57802 i: noop, 57803 o: noop, 57804 d(detaching) { 57805 if (detaching) { 57806 detach(div); 57807 } 57808 } 57809 }; 57810 } 57811 57812 // (32:2) {#if error} 57813 function create_if_block$y(ctx) { 57814 let errormessage; 57815 let current; 57816 57817 errormessage = new ErrorMessage({ 57818 props: { 57819 error: /*error*/ ctx[3], 57820 isPaymentForm: /*isPaymentForm*/ ctx[5] 57821 } 57822 }); 57823 57824 return { 57825 c() { 57826 create_component(errormessage.$$.fragment); 57827 }, 57828 m(target, anchor) { 57829 mount_component(errormessage, target, anchor); 57830 current = true; 57831 }, 57832 p(ctx, dirty) { 57833 const errormessage_changes = {}; 57834 if (dirty & /*error*/ 8) errormessage_changes.error = /*error*/ ctx[3]; 57835 if (dirty & /*isPaymentForm*/ 32) errormessage_changes.isPaymentForm = /*isPaymentForm*/ ctx[5]; 57836 errormessage.$set(errormessage_changes); 57837 }, 57838 i(local) { 57839 if (current) return; 57840 transition_in(errormessage.$$.fragment, local); 57841 current = true; 57842 }, 57843 o(local) { 57844 transition_out(errormessage.$$.fragment, local); 57845 current = false;
57846 }, 57847 d(detaching) { 57848 destroy_component(errormessage, detaching); 57849 } 57850 }; 57851 } 57852 57853 function create_fragment$J(ctx) { 57854 let div; 57855 let current_block_type_index; 57856 let if_block0; 57857 let t; 57858 let current; 57859 const if_block_creators = [create_if_block_1$o, create_else_block$6]; 57860 const if_blocks = []; 57861 57862 function select_block_type(ctx, dirty) { 57863 if (/*showMessage*/ ctx[6] && !/*error*/ ctx[3]) return 0; 57864 return 1; 57865 } 57866 57867 current_block_type_index = select_block_type(ctx); 57868 if_block0 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 57869 let if_block1 = /*error*/ ctx[3] && create_if_block$y(ctx); 57870 57871 return { 57872 c() { 57873 div = element("div"); 57874 if_block0.c(); 57875 t = space(); 57876 if (if_block1) if_block1.c(); 57877 attr(div, "class", "zephr-form-flex-container zephr-form-reset-link-container svelte-49aomy"); 57878 toggle_class(div, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[5]); 57879 }, 57880 m(target, anchor) { 57881 insert(target, div, anchor); 57882 if_blocks[current_block_type_index].m(div, null); 57883 append(div, t); 57884 if (if_block1) if_block1.m(div, null); 57885 current = true; 57886 }, 57887 p(ctx, [dirty]) { 57888 let previous_block_index = current_block_type_index; 57889 current_block_type_index = select_block_type(ctx); 57890 57891 if (current_block_type_index === previous_block_index) { 57892 if_blocks[current_block_type_index].p(ctx, dirty); 57893 } else { 57894 group_outros(); 57895 57896 transition_out(if_blocks[previous_block_index], 1, 1, () => { 57897 if_blocks[previous_block_index] = null; 57898 }); 57899 57900 check_outros(); 57901 if_block0 = if_blocks[current_block_type_index]; 57902 57903 if (!if_block0) { 57904 if_block0 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 57905 if_block0.c(); 57906 } else { 57907 if_block0.p(ctx, dirty); 57908 } 57909 57910 transition_in(if_block0, 1); 57911 if_block0.m(div, t); 57912 } 57913 57914 if (/*error*/ ctx[3]) { 57915 if (if_block1) { 57916 if_block1.p(ctx, dirty); 57917 57918 if (dirty & /*error*/ 8) { 57919 transition_in(if_block1, 1); 57920 } 57921 } else { 57922 if_block1 = create_if_block$y(ctx); 57923 if_block1.c(); 57924 transition_in(if_block1, 1); 57925 if_block1.m(div, null); 57926 } 57927 } else if (if_block1) { 57928 group_outros(); 57929 57930 transition_out(if_block1, 1, 1, () => { 57931 if_block1 = null; 57932 }); 57933 57934 check_outros(); 57935 } 57936 57937 if (!current || dirty & /*isPaymentForm*/ 32) { 57938 toggle_class(div, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[5]); 57939 } 57940 }, 57941 i(local) { 57942 if (current) return; 57943 transition_in(if_block0); 57944 transition_in(if_block1); 57945 current = true; 57946 }, 57947 o(local) { 57948 transition_out(if_block0); 57949 transition_out(if_block1); 57950 current = false; 57951 }, 57952 d(detaching) { 57953 if (detaching) { 57954 detach(div); 57955 } 57956 57957 if_blocks[current_block_type_index].d(); 57958 if (if_block1) if_block1.d(); 57959 } 57960 }; 57961 } 57962 57963 function instance$I($$self, $$props, $$invalidate) { 57964 let { text } = $$props; 57965 let { message } = $$props; 57966 let { onClick } = $$props; 57967 let { error = null } = $$props; 57968 let { delayMs } = $$props; 57969 let { isPaymentForm = false } = $$props; 57970 let showMessage = false; 57971 57972 const linkClick_handler = () => { 57973 if (message) { 57974 $$invalidate(6, showMessage = true); 57975 setTimeout(() =>
57975 $$invalidate(6, showMessage = false), delayMs); 57976 } 57977 }; 57978 57979 $$self.$$set = $$props => { 57980 if ('text' in $$props) $$invalidate(0, text = $$props.text); 57981 if ('message' in $$props) $$invalidate(1, message = $$props.message); 57982 if ('onClick' in $$props) $$invalidate(2, onClick = $$props.onClick); 57983 if ('error' in $$props) $$invalidate(3, error = $$props.error); 57984 if ('delayMs' in $$props) $$invalidate(4, delayMs = $$props.delayMs); 57985 if ('isPaymentForm' in $$props) $$invalidate(5, isPaymentForm = $$props.isPaymentForm); 57986 }; 57987 57988 return [ 57989 text, 57990 message, 57991 onClick, 57992 error, 57993 delayMs, 57994 isPaymentForm, 57995 showMessage, 57996 linkClick_handler 57997 ]; 57998 } 57999 58000 class ResendLoginLink extends SvelteComponent { 58001 constructor(options) { 58002 super(); 58003 58004 init(this, options, instance$I, create_fragment$J, safe_not_equal, { 58005 text: 0, 58006 message: 1, 58007 onClick: 2, 58008 error: 3, 58009 delayMs: 4, 58010 isPaymentForm: 5 58011 }); 58012 } 58013 } 58014 58015 const factory$h = { 58016 matches: (sectionElement) => sectionElement.type === elementTypes.RESEND_LOGIN_LINK, 58017 create: (form, formState, formActions, elementConfig) => ({ 58018 component: ResendLoginLink, 58019 props: { 58020 text: elementConfig.text, 58021 message: elementConfig.message, 58022 delayMs: form.environment.reduceDelays ? 1 : 3000, 58023 isPaymentForm: form.formType === FormType.PAYMENT, 58024 onClick: async () => { 58025 logDataLayerEvent(form, 'zephr_form_button_press', { 58026 sectionId: formState.currentSection.type, 58027 buttonType: 'RESEND_LOGIN_LINK' 58028 }); 58029 await sendLink(form, 'login', formState.emailAddress, formActions); 58030 } 58031 } 58032 }) 58033 }; 58034 58035 const oauthProviderWindowFeatures = "menubar=no,location=yes,resizable=no,scrollbars=no,status=no,width=500,height=600"; 58036 const useOAuthProvider = (provider, form, formActions) => { 58037 formActions.updateFormState({ 58038 socialSigninError: undefined 58039 }); 58040 window.open(`${form.environment.apiUrlBase ?? ""}/blaize/oauth/${provider}`, provider + " sign-in", oauthProviderWindowFeatures); 58041 const listener = messageAction(form, formActions); 58042 window.zephrOAuthListener = listener; 58043 window.addEventListener("message", listener); 58044 }; 58045 const messageAction = (form, formActions) => (message) => { 58046 if (!message?.data?.fromZephr) { 58047 return; 58048 } 58049 window.removeEventListener("message", window.zephrOAuthListener); 58050 form.environment.debugLogging && console.log("Social signin message:", message); 58051 if (message.data.action === "register") { 58052 // This is a fresh user who is registering, they may need to add some required attributes first. 58053 // If not, register immediately. 58054 const newFormState = formActions.updateFormState({ 58055 emailAddress: message.data.identifier, 58056 socialSigninToken: message.data.stateKey, 58057 userAttributes: message.data.userAttributes ?? {}, 58058 socialSignin: true, 58059 userExists: false, 58060 emailIsContact: undefined 58061 }); 58062 if (formConfigAs(form).useVerificationCodes) { 58063 void send2FaCode(form, newFormState, formActions); 58064 } 58065 void moveToNextSection(form, newFormState, formActions); 58066 } 58067 else if (message.data.action == "otp") { 58068 // Already registered user and verification via OTP is needed 58069 formActions.updateFormState({ 58070 emailAddress: message.data.identifier, 58071 socialSigninToken: message.data.stateKey, 58072 userAttributes: message.data.userAttributes ?? {}, 58073 socialSignin: true, 58074 userExists: true, 58075 emailIsContact: false 58076 }); 58077 formActions.jumpToSection(sectionTypes.VERIFICATION_CODE_LOGIN.type); 58078 } 58079 else if (message.data.action === "login") { 58080 // Already registered user who is now logged in. 58081 document.cookie = message.data.cookie; 58082 formActions.updateFormState({ 58083 socialSignin: true, 58084 userExists: true, 58085 loginRegistrationComplete: true, 58086 emailIsContact: false 58087 }); 58088 void formActions.onEvent(FormEvent.LOGIN_REGISTRATION_COMPLETE); 58089 } 58090 else { 58091 // Failure 58092 formActions.updateFormState({ 58093 socialSigninError: message.data.message ?? "Something went wrong. Please try again later!" 58094 }); 58095 } 58096 }; 58097 58098 var faMicrosoft = { 58099 prefix: 'fab', 58100 iconName: 'microsoft', 58101 icon: [448, 512, [], "f3ca", "M0 32h214.6v214.6H0V32zm233.4 0H448v214.6H233.4V32zM0 265.4h214.6V480H0V265.4zm233.4 0H448V480H233.4V265.4z"] 58102 }; 58103 var faApple = { 58104 prefix: 'fab', 58105 iconName: 'apple', 58106 icon: [384, 512, [], "f179", "M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"] 58107 }; 58108 var faLinkedin = { 58109 prefix: 'fab', 58110 iconName: 'linkedin', 58111 icon: [448, 512, [], "f08c", "M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"] 58112 }; 58113 var faFacebook = { 58114 prefix: 'fab', 58115 iconName: 'facebook', 58116 icon: [512, 512, [62000], "f09a", "M512 256C512 114.6 397.4 0 256 0S0 114.6 0 256C0 376 82.7 476.8 194.2 504.5V334.2H141.4V256h52.8V222.3c0-87.1 39.4-127.5 125-127.5c16.2 0 44.2 3.2 55.7 6.4V172c-6-.6-16.5-1-29.6-1c-42 0-58.2 15.9-58.2 57.2V256h83.6l-14.4 78.2H287V510.1C413.8 494.8 512 386.9 512 256h0z"] 58117 }; 58118 var faTwitter = { 58119 prefix: 'fab', 58120 iconName: 'twitter', 58121 icon: [512, 512, [], "f099", "M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"] 58122 }; 58123 58124 /* src/components/elements/socialSignIn/GoogleLogo.svelte generated by Svelte v4.2.12 */ 58125 58126 function create_fragment$I(ctx) { 58127 let svg; 58128 let path0; 58129 let path1; 58130 let path2; 58131 let path3; 58132 58133 return { 58134 c() {
58135 svg = svg_element("svg"); 58136 path0 = svg_element("path"); 58137 path1 = svg_element("path"); 58138 path2 = svg_element("path"); 58139 path3 = svg_element("path"); 58140 attr(path0, "d", "M533.5 278.4c0-18.5-1.5-37.1-4.7-55.3H272.1v104.8h147c-6.1 33.8-25.7 63.7-54.4 82.7v68h87.7c51.5-47.4 81.1-117.4 81.1-200.2z"); 58141 attr(path0, "fill", "#4285f4"); 58142 attr(path1, "d", "M272.1 544.3c73.4 0 135.3-24.1 180.4-65.7l-87.7-68c-24.4 16.6-55.9 26-92.6 26-71 0-131.2-47.9-152.8-112.3H28.9v70.1c46.2 91.9 140.3 149.9 243.2 149.9z"); 58143 attr(path1, "fill", "#34a853"); 58144 attr(path2, "d", "M119.3 324.3c-11.4-33.8-11.4-70.4 0-104.2V150H28.9c-38.6 76.9-38.6 167.5 0 244.4l90.4-70.1z"); 58145 attr(path2, "fill", "#fbbc04"); 58146 attr(path3, "d", "M272.1 107.7c38.8-.6 76.3 14 104.4 40.8l77.7-77.7C405 24.6 339.7-.8 272.1 0 169.2 0 75.1 58 28.9 150l90.4 70.1c21.5-64.5 81.8-112.4 152.8-112.4z"); 58147 attr(path3, "fill", "#ea4335"); 58148 attr(svg, "class", "zephr-form-social-sign-in-icon zephr-form-google-icon svelte-aktnoc"); 58149 attr(svg, "viewBox", "0 0 533.5 544.3"); 58150 attr(svg, "xmlns", "http://www.w3.org/2000/svg"); 58151 }, 58152 m(target, anchor) { 58153 insert(target, svg, anchor); 58154 append(svg, path0); 58155 append(svg, path1); 58156 append(svg, path2); 58157 append(svg, path3); 58158 }, 58159 p: noop, 58160 i: noop, 58161 o: noop, 58162 d(detaching) { 58163 if (detaching) { 58164 detach(svg); 58165 } 58166 } 58167 }; 58168 } 58169 58170 class GoogleLogo extends SvelteComponent { 58171 constructor(options) { 58172 super(); 58173 init(this, options, null, create_fragment$I, safe_not_equal, {}); 58174 } 58175 } 58176 58177 /* src/components/elements/socialSignIn/SocialSignIn.svelte generated by Svelte v4.2.12 */ 58178 58179 function get_each_context$d(ctx, list, i) { 58180 const child_ctx = ctx.slice(); 58181 child_ctx[8] = list[i]; 58182 return child_ctx; 58183 } 58184 58185 // (30:2) {#if config[option] === true && option !== 'labelText' && option !== 'allowEmptyLabel'} 58186 function create_if_block_1$n(ctx) { 58187 let button; 58188 let span1; 58189 let span0; 58190 let current_block_type_index; 58191 let if_block; 58192 let t0; 58193 let t1; 58194 let t2; 58195 let t3_value = /*option*/ ctx[8] + ""; 58196 let t3; 58197 let current; 58198 let mounted; 58199 let dispose; 58200 const if_block_creators = [create_if_block_2$f, create_else_block$5]; 58201 const if_blocks = []; 58202 58203 function select_block_type(ctx, dirty) { 58204 if (/*option*/ ctx[8] === "Google") return 0; 58205 return 1; 58206 } 58207 58208 current_block_type_index = select_block_type(ctx); 58209 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 58210 58211 function click_handler() { 58212 return /*click_handler*/ ctx[6](/*option*/ ctx[8]); 58213 } 58214 58215 return { 58216 c() { 58217 button = element("button"); 58218 span1 = element("span"); 58219 span0 = element("span"); 58220 if_block.c(); 58221 t0 = space(); 58222 t1 = text(/*labelText*/ ctx[4]); 58223 t2 = space(); 58224 t3 = text(t3_value); 58225 attr(span0, "class", "zephr-form-social-sign-in-icon svelte-1e2xtn4"); 58226 toggle_class(span0, "zephr-payment-form-social-sign-in-icon", /*isPaymentForm*/ ctx[3]); 58227 attr(span1, "class", "zephr-form-flex-container zephr-form-social-sign-in svelte-1e2xtn4"); 58228 toggle_class(span1, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[3]); 58229 toggle_class(span1, "zephr-payment-form-social-sign-in", /*isPaymentForm*/ ctx[3]); 58230 attr(button, "type", "button"); 58231 attr(button, "class", "zephr-form-button zephr-form-social-sign-in-button svelte-1e2xtn4"); 58232 toggle_class(button, "zephr-payment-form-button", /*isPaymentForm*/ ctx[3]); 58233 toggle_class(button, "zephr-payment-form-social-sign-in-button", /*isPaymentForm*/ ctx[3]); 58234 }, 58235 m(target, anchor) { 58236 insert(target, button, anchor); 58237 append(button, span1); 58238 append(span1, span0); 58239 if_blocks[current_block_type_index].m(span0, null); 58240 append(span1, t0); 58241 append(span1, t1); 58242 append(span1, t2); 58243 append(span1, t3); 58244 current = true; 58245 58246 if (!mounted) { 58247 dispose = listen(button, "click", prevent_default(click_handler)); 58248 mounted = true; 58249 } 58250 }, 58251 p(new_ctx, dirty) { 58252 ctx = new_ctx; 58253 let previous_block_index = current_block_type_index; 58254 current_block_type_index = select_block_type(ctx); 58255 58256 if (current_block_type_index === previous_block_index) { 58257 if_blocks[current_block_type_index].p(ctx, dirty); 58258 } else { 58259 group_outros(); 58260 58261 transition_out(if_blocks[previous_block_index], 1, 1, () => { 58262 if_blocks[previous_block_index] = null; 58263 }); 58264 58265 check_outros(); 58266 if_block = if_blocks[current_block_type_index]; 58267 58268 if (!if_block) { 58269 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 58270 if_block.c(); 58271 } else { 58272 if_block.p(ctx, dirty); 58273 } 58274 58275 transition_in(if_block, 1); 58276 if_block.m(span0, null); 58277 } 58278 58279 if (!current || dirty & /*isPaymentForm*/ 8) { 58280 toggle_class(span0, "zephr-payment-form-social-sign-in-icon", /*isPaymentForm*/ ctx[3]); 58281 } 58282 58283 if ((!current || dirty & /*config*/ 1) && t3_value !== (t3_value = /*option*/ ctx[8] + "")) set_data(t3, t3_value); 58284 58285 if (!current || dirty & /*isPaymentForm*/ 8) { 58286 toggle_class(span1, "zephr-payment-form-flex-container", /*isPaymentForm*/ ctx[3]); 58287 } 58288 58289 if (!current || dirty & /*isPaymentForm*/ 8) { 58290 toggle_class(span1, "zephr-payment-form-social-sign-in", /*isPaymentForm*/ ctx[3]); 58291 } 58292 58293 if (!current || dirty & /*isPaymentForm*/ 8) { 58294 toggle_class(button, "zephr-payment-form-button", /*isPaymentForm*/ ctx[3]); 58295 } 58296 58297 if (!current || dirty & /*isPaymentForm*/ 8) { 58298 toggle_class(button, "zephr-payment-form-social-sign-in-button", /*isPaymentForm*/ ctx[3]); 58299 } 58300 }, 58301 i(local) { 58302 if (current) return; 58303 transition_in(if_block); 58304 current = true; 58305 }, 58306 o(local) { 58307 transition_out(if_block); 58308 current = false;
58309 }, 58310 d(detaching) { 58311 if (detaching) { 58312 detach(button); 58313 } 58314 58315 if_blocks[current_block_type_index].d(); 58316 mounted = false; 58317 dispose(); 58318 } 58319 }; 58320 } 58321 58322 // (49:10) {:else} 58323 function create_else_block$5(ctx) { 58324 let fa; 58325 let current; 58326 const fa_spread_levels = [/*getProviderIcon*/ ctx[5](/*option*/ ctx[8])]; 58327 let fa_props = {}; 58328 58329 for (let i = 0; i < fa_spread_levels.length; i += 1) { 58330 fa_props = assign(fa_props, fa_spread_levels[i]); 58331 } 58332 58333 fa = new Fa({ props: fa_props }); 58334 58335 return { 58336 c() { 58337 create_component(fa.$$.fragment); 58338 }, 58339 m(target, anchor) { 58340 mount_component(fa, target, anchor); 58341 current = true; 58342 }, 58343 p(ctx, dirty) { 58344 const fa_changes = (dirty & /*getProviderIcon, Object, config*/ 33) 58345 ? get_spread_update(fa_spread_levels, [get_spread_object(/*getProviderIcon*/ ctx[5](/*option*/ ctx[8]))]) 58346 : {}; 58347 58348 fa.$set(fa_changes); 58349 }, 58350 i(local) { 58351 if (current) return; 58352 transition_in(fa.$$.fragment, local); 58353 current = true; 58354 }, 58355 o(local) { 58356 transition_out(fa.$$.fragment, local); 58357 current = false; 58358 }, 58359 d(detaching) { 58360 destroy_component(fa, detaching); 58361 } 58362 }; 58363 } 58364 58365 // (47:10) {#if option === "Google"} 58366 function create_if_block_2$f(ctx) { 58367 let googlelogo; 58368 let current; 58369 googlelogo = new GoogleLogo({}); 58370 58371 return { 58372 c() { 58373 create_component(googlelogo.$$.fragment); 58374 }, 58375 m(target, anchor) { 58376 mount_component(googlelogo, target, anchor); 58377 current = true; 58378 }, 58379 p: noop, 58380 i(local) { 58381 if (current) return; 58382 transition_in(googlelogo.$$.fragment, local); 58383 current = true; 58384 }, 58385 o(local) { 58386 transition_out(googlelogo.$$.fragment, local); 58387 current = false; 58388 }, 58389 d(detaching) { 58390 destroy_component(googlelogo, detaching); 58391 } 58392 }; 58393 } 58394 58395 // (29:0) {#each Object.keys(config) as option} 58396 function create_each_block$d(ctx) { 58397 let if_block_anchor; 58398 let current; 58399 let if_block = /*config*/ ctx[0][/*option*/ ctx[8]] === true && /*option*/ ctx[8] !== 'labelText' && /*option*/ ctx[8] !== 'allowEmptyLabel' && create_if_block_1$n(ctx); 58400 58401 return { 58402 c() { 58403 if (if_block) if_block.c(); 58404 if_block_anchor = empty(); 58405 }, 58406 m(target, anchor) { 58407 if (if_block) if_block.m(target, anchor); 58408 insert(target, if_block_anchor, anchor); 58409 current = true; 58410 }, 58411 p(ctx, dirty) { 58412 if (/*config*/ ctx[0][/*option*/ ctx[8]] === true && /*option*/ ctx[8] !== 'labelText' && /*option*/ ctx[8] !== 'allowEmptyLabel') { 58413 if (if_block) { 58414 if_block.p(ctx, dirty); 58415 58416 if (dirty & /*config*/ 1) { 58417 transition_in(if_block, 1); 58418 } 58419 } else { 58420 if_block = create_if_block_1$n(ctx); 58421 if_block.c(); 58422 transition_in(if_block, 1); 58423 if_block.m(if_block_anchor.parentNode, if_block_anchor); 58424 } 58425 } else if (if_block) { 58426 group_outros(); 58427 58428 transition_out(if_block, 1, 1, () => { 58429 if_block = null; 58430 }); 58431 58432 check_outros(); 58433 } 58434 }, 58435 i(local) { 58436 if (current) return; 58437 transition_in(if_block); 58438 current = true; 58439 }, 58440 o(local) { 58441 transition_out(if_block); 58442 current = false; 58443 }, 58444 d(detaching) { 58445 if (detaching) { 58446 detach(if_block_anchor); 58447 } 58448 58449 if (if_block) if_block.d(detaching); 58450 } 58451 }; 58452 } 58453 58454 // (58:0) {#if error} 58455 function create_if_block$x(ctx) { 58456 let errormessage; 58457 let current; 58458 58459 errormessage = new ErrorMessage({ 58460 props: { 58461 error: /*error*/ ctx[2], 58462 isPaymentForm: /*isPaymentForm*/ ctx[3] 58463 } 58464 }); 58465 58466 return { 58467 c() { 58468 create_component(errormessage.$$.fragment); 58469 }, 58470 m(target, anchor) { 58471 mount_component(errormessage, target, anchor); 58472 current = true; 58473 }, 58474 p(ctx, dirty) { 58475 const errormessage_changes = {}; 58476 if (dirty & /*error*/ 4) errormessage_changes.error = /*error*/ ctx[2]; 58477 if (dirty & /*isPaymentForm*/ 8) errormessage_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 58478 errormessage.$set(errormessage_changes); 58479 }, 58480 i(local) { 58481 if (current) return; 58482 transition_in(errormessage.$$.fragment, local); 58483 current = true; 58484 }, 58485 o(local) { 58486 transition_out(errormessage.$$.fragment, local); 58487 current = false;
58488 }, 58489 d(detaching) { 58490 destroy_component(errormessage, detaching); 58491 } 58492 }; 58493 } 58494 58495 function create_fragment$H(ctx) { 58496 let t; 58497 let if_block_anchor; 58498 let current; 58499 let each_value = ensure_array_like(Object.keys(/*config*/ ctx[0])); 58500 let each_blocks = []; 58501 58502 for (let i = 0; i < each_value.length; i += 1) { 58503 each_blocks[i] = create_each_block$d(get_each_context$d(ctx, each_value, i)); 58504 } 58505 58506 const out = i => transition_out(each_blocks[i], 1, 1, () => { 58507 each_blocks[i] = null; 58508 }); 58509 58510 let if_block = /*error*/ ctx[2] && create_if_block$x(ctx); 58511 58512 return { 58513 c() { 58514 for (let i = 0; i < each_blocks.length; i += 1) { 58515 each_blocks[i].c(); 58516 } 58517 58518 t = space(); 58519 if (if_block) if_block.c(); 58520 if_block_anchor = empty(); 58521 }, 58522 m(target, anchor) { 58523 for (let i = 0; i < each_blocks.length; i += 1) { 58524 if (each_blocks[i]) { 58525 each_blocks[i].m(target, anchor); 58526 } 58527 } 58528 58529 insert(target, t, anchor); 58530 if (if_block) if_block.m(target, anchor); 58531 insert(target, if_block_anchor, anchor); 58532 current = true; 58533 }, 58534 p(ctx, [dirty]) { 58535 if (dirty & /*isPaymentForm, onSelectProvider, Object, config, labelText, getProviderIcon*/ 59) { 58536 each_value = ensure_array_like(Object.keys(/*config*/ ctx[0])); 58537 let i; 58538 58539 for (i = 0; i < each_value.length; i += 1) { 58540 const child_ctx = get_each_context$d(ctx, each_value, i); 58541 58542 if (each_blocks[i]) { 58543 each_blocks[i].p(child_ctx, dirty); 58544 transition_in(each_blocks[i], 1); 58545 } else { 58546 each_blocks[i] = create_each_block$d(child_ctx); 58547 each_blocks[i].c(); 58548 transition_in(each_blocks[i], 1); 58549 each_blocks[i].m(t.parentNode, t); 58550 } 58551 } 58552 58553 group_outros(); 58554 58555 for (i = each_value.length; i < each_blocks.length; i += 1) { 58556 out(i); 58557 } 58558 58559 check_outros(); 58560 } 58561 58562 if (/*error*/ ctx[2]) { 58563 if (if_block) { 58564 if_block.p(ctx, dirty); 58565 58566 if (dirty & /*error*/ 4) { 58567 transition_in(if_block, 1); 58568 } 58569 } else { 58570 if_block = create_if_block$x(ctx); 58571 if_block.c(); 58572 transition_in(if_block, 1); 58573 if_block.m(if_block_anchor.parentNode, if_block_anchor); 58574 } 58575 } else if (if_block) { 58576 group_outros(); 58577 58578 transition_out(if_block, 1, 1, () => { 58579 if_block = null; 58580 }); 58581 58582 check_outros(); 58583 } 58584 }, 58585 i(local) { 58586 if (current) return; 58587 58588 for (let i = 0; i < each_value.length; i += 1) { 58589 transition_in(each_blocks[i]); 58590 } 58591 58592 transition_in(if_block); 58593 current = true; 58594 }, 58595 o(local) {
58596 each_blocks = each_blocks.filter(Boolean); 58597 58598 for (let i = 0; i < each_blocks.length; i += 1) { 58599 transition_out(each_blocks[i]); 58600 } 58601 58602 transition_out(if_block); 58603 current = false; 58604 }, 58605 d(detaching) { 58606 if (detaching) { 58607 detach(t); 58608 detach(if_block_anchor); 58609 } 58610 58611 destroy_each(each_blocks, detaching); 58612 if (if_block) if_block.d(detaching); 58613 } 58614 }; 58615 } 58616 58617 function instance$H($$self, $$props, $$invalidate) { 58618 let { config } = $$props; 58619 let { onSelectProvider } = $$props; 58620 let { error = null } = $$props; 58621 let { isPaymentForm = false } = $$props; 58622 const defaultLabelText = config.allowEmptyLabel ? "" : "Continue with"; 58623 const labelText = config.labelText ? config.labelText : defaultLabelText; 58624 58625 const getProviderIcon = provider => { 58626 switch (provider) { 58627 case "Facebook": 58628 return { 58629 icon: faFacebook, 58630 color: "#1877f2", 58631 size: "lg" 58632 }; 58633 case "LinkedIn": 58634 return { 58635 icon: faLinkedin, 58636 color: "#0a66c2", 58637 size: "lg" 58638 }; 58639 case "Apple": 58640 return { icon: faApple, color: "#000", size: "lg" }; 58641 case "Microsoft": 58642 return { 58643 icon: faMicrosoft, 58644 color: "#00a4ef", 58645 size: "lg" 58646 }; 58647 case "Twitter": 58648 return { 58649 icon: faTwitter, 58650 color: "#08a0e9", 58651 size: "lg" 58652 }; 58653 default: 58654 return { 58655 icon: faFacebook, 58656 color: "#1877f2", 58657 size: "lg" 58658 }; 58659 } 58660 }; 58661 58662 const click_handler = option => onSelectProvider(option.toLowerCase()); 58663 58664 $$self.$$set = $$props => {
58665 if ('config' in $$props) $$invalidate(0, config = $$props.config); 58666 if ('onSelectProvider' in $$props) $$invalidate(1, onSelectProvider = $$props.onSelectProvider); 58667 if ('error' in $$props) $$invalidate(2, error = $$props.error); 58668 if ('isPaymentForm' in $$props) $$invalidate(3, isPaymentForm = $$props.isPaymentForm); 58669 }; 58670 58671 return [ 58672 config, 58673 onSelectProvider, 58674 error, 58675 isPaymentForm, 58676 labelText, 58677 getProviderIcon, 58678 click_handler 58679 ]; 58680 } 58681 58682 class SocialSignIn extends SvelteComponent { 58683 constructor(options) { 58684 super(); 58685 58686 init(this, options, instance$H, create_fragment$H, safe_not_equal, { 58687 config: 0, 58688 onSelectProvider: 1, 58689 error: 2, 58690 isPaymentForm: 3 58691 }); 58692 } 58693 } 58694 58695 const factory$g = { 58696 matches: (sectionElement) => sectionElement.type === elementTypes.SOCIAL_SIGNIN, 58697 create: (form, _, formActions, elementConfig) => { 58698 const { enabled: __, hide: ___, show: ____, ...cleanedConfig } = elementConfig ?? {}; 58699 return ({ 58700 component: SocialSignIn, 58701 props: { 58702 config: cleanedConfig, 58703 isPaymentForm: form.formType === FormType.PAYMENT, 58704 onSelectProvider: (provider) => useOAuthProvider(provider, form, formActions) 58705 } 58706 }); 58707 } 58708 }; 58709 58710 const verifyingPromoCodeBusyKey = "promo-code"; 58711 const runPromoCodeValidation = async (form, formState, formActions) => { 58712 formActions.updateFormState({ 58713 promoCodeValid: undefined, 58714 serverErrors: [], 58715 discountedPlanPrices: [] 58716 }); 58717 const providerConfig = paymentProviderFor(form.organisationConfiguration.paymentProvider); 58718 const response = await request(providerConfig.promoCodeCheckPath, { 58719 method: 'POST', 58720 bodyObject: { 58721 promoCode: formState.promoCode, 58722 paymentOptions: formConfigAs(form).paymentOptions 58723 } 58724 }, formActions, verifyingPromoCodeBusyKey); 58725 if (!response.ok) { 58726 let serverError; 58727 if (response.status === 403) { 58728 const json = await response.json(); 58729 if (json?.code === 2 || json?.code === 3) { 58730 serverError = ServerError.PROMO_CODE_EXPIRED_ERROR; 58731 } 58732 else { 58733 serverError = ServerError.PROMO_CODE_INVALID_ERROR; 58734 } 58735 } 58736 else { 58737 serverError = ServerError.PROMO_CODE_INVALID_ERROR; 58738 console.error("Unknown error evaluating promo code", response); 58739 } 58740 logDataLayerEvent(form, 'zephr_form_error', { 58741 error: ServerError[serverError], 58742 }); 58743 return Promise.resolve(formActions.updateFormState({ 58744 promoCodeValid: false, 58745 serverErrors: [serverError], 58746 discountedPlanPrices: [] 58747 })); 58748 } 58749 const json = await response.json(); 58750 const discountedPlanPrices = json.paymentOptions.map(p => ({ 58751 planSlug: p.slug, 58752 productId: p.productId, 58753 discountPrice: p.discountPrice 58754 })); 58755 if (!discountedPlanPrices.find(discount => discount.planSlug === formState.paymentOption.slug && discount.productId === formState.paymentOption.productId)) { 58756 logDataLayerEvent(form, 'zephr_form_error', { 58757 error: ServerError[ServerError.PROMO_CODE_NOT_VALID_FOR_PLAN_ERROR], 58758 }); 58759 return Promise.resolve(formActions.updateFormState({ 58760 promoCodeValid: false, 58761 serverErrors: [ServerError.PROMO_CODE_NOT_VALID_FOR_PLAN_ERROR], 58762 discountedPlanPrices: discountedPlanPrices 58763 })); 58764 } 58765 return Promise.resolve(formActions.updateFormState({ 58766 promoCodeValid: true, 58767 serverErrors: [], 58768 discountedPlanPrices: discountedPlanPrices 58769 })); 58770 }; 58771 /* 58772 If we're using mobile payment and we're on the payment screen, 58773 we'll need to reload the mobile payment button so it has the discounted amount 58774 and make sure they can't press the button while the button is updating 58775 */ 58776 const afterPromoCodeChange = async (form, formState, formActions) => { 58777 const formStateWithAddons = await getProductAddons(form, formState, formActions, true); 58778 const formStateWithPrices = await calculatePrices(form, formStateWithAddons, formActions); 58779 if (formState.currentSection.elements.some(element => element.type === elementTypes.MOBILE_PAYMENT && element.config?.enabled !== false)) { 58780 formActions.incrementRequestCount(); 58781 try { 58782 // Only reload mobile payment service if the provider actually supports mobile payments
58783 if (supportsMobilePayments(form.organisationConfiguration.paymentProvider)) { 58784 await mobilePaymentServiceFor(form.organisationConfiguration.paymentProvider).loader(form, formStateWithPrices, formActions); 58785 } 58786 } 58787 finally { 58788 formActions.decrementRequestCount(); 58789 } 58790 } 58791 }; 58792 const validatePromoCode = async (form, formState, formActions) => { 58793 const providerConfig = paymentProviderFor(form.organisationConfiguration.paymentProvider); 58794 if (!providerConfig.hasPromoCodes(form)) { 58795 return formState; 58796 } 58797 if (providerConfig?.promoCodeServiceOverride) { 58798 return providerConfig.promoCodeServiceOverride(form, formState, formActions); 58799 } 58800 return runPromoCodeValidation(form, formState, formActions) 58801 .then((updatedFormState) => afterPromoCodeChange(form, updatedFormState, formActions)); 58802 }; 58803 58804 /* src/components/elements/paymentSummary/PaymentSummary.svelte generated by Svelte v4.2.12 */ 58805 58806 function get_each_context$c(ctx, list, i) { 58807 const child_ctx = ctx.slice(); 58808 child_ctx[36] = list[i]; 58809 return child_ctx; 58810 } 58811 58812 function get_each_context_1$3(ctx, list, i) { 58813 const child_ctx = ctx.slice(); 58814 child_ctx[39] = list[i]; 58815 return child_ctx; 58816 } 58817 58818 function get_each_context_2(ctx, list, i) { 58819 const child_ctx = ctx.slice(); 58820 child_ctx[42] = list[i]; 58821 return child_ctx; 58822 } 58823 58824 // (52:2) {#each chargeItems as chargeItem} 58825 function create_each_block_2(ctx) { 58826 let div1; 58827 let span0; 58828 let t0_value = /*chargeItem*/ ctx[42].label + ""; 58829 let t0; 58830 let t1; 58831 let div0; 58832 let span1; 58833 let t2_value = /*chargeItem*/ ctx[42].priceFormattedString + ""; 58834 let t2; 58835 58836 return { 58837 c() { 58838 div1 = element("div"); 58839 span0 = element("span"); 58840 t0 = text(t0_value); 58841 t1 = space(); 58842 div0 = element("div"); 58843 span1 = element("span"); 58844 t2 = text(t2_value); 58845 attr(span0, "class", "zephr-form-summary-charge-description zephr-payment-form-summary-charge-description svelte-xf8v79"); 58846 attr(div0, "class", "zephr-form-summary-line-right zephr-payment-form-summary-line-right svelte-xf8v79"); 58847 attr(div1, "class", "zephr-form-charge-line zephr-payment-form-charge-line svelte-xf8v79"); 58848 }, 58849 m(target, anchor) { 58850 insert(target, div1, anchor); 58851 append(div1, span0); 58852 append(span0, t0); 58853 append(div1, t1); 58854 append(div1, div0); 58855 append(div0, span1); 58856 append(span1, t2); 58857 }, 58858 p(ctx, dirty) { 58859 if (dirty[0] & /*chargeItems*/ 524288 && t0_value !== (t0_value = /*chargeItem*/ ctx[42].label + "")) set_data(t0, t0_value); 58860 if (dirty[0] & /*chargeItems*/ 524288 && t2_value !== (t2_value = /*chargeItem*/ ctx[42].priceFormattedString + "")) set_data(t2, t2_value); 58861 }, 58862 d(detaching) { 58863 if (detaching) { 58864 detach(div1); 58865 } 58866 } 58867 }; 58868 } 58869 58870 // (65:2) {#if paymentProvider === 'braintree' && discounts.length > 0} 58871 function create_if_block_14$2(ctx) { 58872 let each_1_anchor; 58873 let each_value_1 = ensure_array_like(/*discounts*/ ctx[23]); 58874 let each_blocks = []; 58875 58876 for (let i = 0; i < each_value_1.length; i += 1) { 58877 each_blocks[i] = create_each_block_1$3(get_each_context_1$3(ctx, each_value_1, i)); 58878 } 58879 58880 return { 58881 c() { 58882 for (let i = 0; i < each_blocks.length; i += 1) { 58883 each_blocks[i].c(); 58884 } 58885 58886 each_1_anchor = empty(); 58887 }, 58888 m(target, anchor) { 58889 for (let i = 0; i < each_blocks.length; i += 1) { 58890 if (each_blocks[i]) { 58891 each_blocks[i].m(target, anchor); 58892 } 58893 } 58894 58895 insert(target, each_1_anchor, anchor); 58896 }, 58897 p(ctx, dirty) { 58898 if (dirty[0] & /*discounts*/ 8388608) { 58899 each_value_1 = ensure_array_like(/*discounts*/ ctx[23]); 58900 let i; 58901 58902 for (i = 0; i < each_value_1.length; i += 1) { 58903 const child_ctx = get_each_context_1$3(ctx, each_value_1, i); 58904 58905 if (each_blocks[i]) { 58906 each_blocks[i].p(child_ctx, dirty); 58907 } else { 58908 each_blocks[i] = create_each_block_1$3(child_ctx); 58909 each_blocks[i].c(); 58910 each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); 58911 } 58912 } 58913 58914 for (; i < each_blocks.length; i += 1) { 58915 each_blocks[i].d(1); 58916 } 58917 58918 each_blocks.length = each_value_1.length; 58919 } 58920 }, 58921 d(detaching) { 58922 if (detaching) { 58923 detach(each_1_anchor); 58924 } 58925 58926 destroy_each(each_blocks, detaching); 58927 } 58928 }; 58929 } 58930 58931 // (66:4) {#each discounts as discount} 58932 function create_each_block_1$3(ctx) { 58933 let div2; 58934 let div0; 58935 let t0_value = /*discount*/ ctx[39].description + ""; 58936 let t0; 58937 let t1; 58938 let div1; 58939 let t2_value = /*discount*/ ctx[39].formattedAmount + ""; 58940 let t2; 58941 let t3; 58942 58943 return { 58944 c() { 58945 div2 = element("div"); 58946 div0 = element("div"); 58947 t0 = text(t0_value); 58948 t1 = space(); 58949 div1 = element("div"); 58950 t2 = text(t2_value); 58951 t3 = space(); 58952 attr(div0, "class", "zephr-payment-form-summary-discount-description"); 58953 attr(div1, "class", "zephr-form-summary-line-right zephr-payment-form-summary-line-right discount-value svelte-xf8v79"); 58954 attr(div2, "class", "zephr-form-discount-line zephr-payment-form-discount-line svelte-xf8v79"); 58955 }, 58956 m(target, anchor) { 58957 insert(target, div2, anchor); 58958 append(div2, div0); 58959 append(div0, t0); 58960 append(div2, t1); 58961 append(div2, div1); 58962 append(div1, t2); 58963 append(div2, t3); 58964 }, 58965 p(ctx, dirty) {
58966 if (dirty[0] & /*discounts*/ 8388608 && t0_value !== (t0_value = /*discount*/ ctx[39].description + "")) set_data(t0, t0_value); 58967 if (dirty[0] & /*discounts*/ 8388608 && t2_value !== (t2_value = /*discount*/ ctx[39].formattedAmount + "")) set_data(t2, t2_value); 58968 }, 58969 d(detaching) { 58970 if (detaching) { 58971 detach(div2); 58972 } 58973 } 58974 }; 58975 } 58976 58977 // (78:2) {#if tax} 58978 function create_if_block_13$2(ctx) { 58979 let div2; 58980 let div0; 58981 let t0; 58982 let t1; 58983 let div1; 58984 let t2; 58985 58986 return { 58987 c() { 58988 div2 = element("div"); 58989 div0 = element("div"); 58990 t0 = text(/*taxLabel*/ ctx[22]); 58991 t1 = space(); 58992 div1 = element("div"); 58993 t2 = text(/*tax*/ ctx[21]); 58994 attr(div0, "class", "zephr-form-summary-charge-description zephr-payment-form-summary-charge-description svelte-xf8v79"); 58995 attr(div1, "class", "zephr-form-summary-line-right zephr-payment-form-summary-line-right svelte-xf8v79"); 58996 attr(div2, "class", "zephr-form-charge-line zephr-payment-form-charge-line svelte-xf8v79"); 58997 }, 58998 m(target, anchor) { 58999 insert(target, div2, anchor); 59000 append(div2, div0); 59001 append(div0, t0); 59002 append(div2, t1); 59003 append(div2, div1); 59004 append(div1, t2); 59005 }, 59006 p(ctx, dirty) { 59007 if (dirty[0] & /*taxLabel*/ 4194304) set_data(t0, /*taxLabel*/ ctx[22]); 59008 if (dirty[0] & /*tax*/ 2097152) set_data(t2, /*tax*/ ctx[21]); 59009 }, 59010 d(detaching) { 59011 if (detaching) { 59012 detach(div2); 59013 } 59014 } 59015 }; 59016 } 59017 59018 // (88:2) {#each addons as addon} 59019 function create_each_block$c(ctx) { 59020 let div1; 59021 let span0; 59022 let t0_value = /*addon*/ ctx[36].label + ""; 59023 let t0; 59024 let t1; 59025 let div0; 59026 let span1; 59027 let t2_value = /*addon*/ ctx[36].addonPrice + ""; 59028 let t2; 59029 59030 return { 59031 c() { 59032 div1 = element("div"); 59033 span0 = element("span"); 59034 t0 = text(t0_value); 59035 t1 = space(); 59036 div0 = element("div"); 59037 span1 = element("span"); 59038 t2 = text(t2_value); 59039 attr(div0, "class", "zephr-form-summary-line-right zephr-payment-form-summary-line-right svelte-xf8v79"); 59040 attr(div1, "class", "zephr-form-addon-line zephr-payment-form-addon-line svelte-xf8v79"); 59041 }, 59042 m(target, anchor) { 59043 insert(target, div1, anchor); 59044 append(div1, span0); 59045 append(span0, t0); 59046 append(div1, t1); 59047 append(div1, div0); 59048 append(div0, span1); 59049 append(span1, t2); 59050 }, 59051 p(ctx, dirty) { 59052 if (dirty[0] & /*addons*/ 262144 && t0_value !== (t0_value = /*addon*/ ctx[36].label + "")) set_data(t0, t0_value); 59053 if (dirty[0] & /*addons*/ 262144 && t2_value !== (t2_value = /*addon*/ ctx[36].addonPrice + "")) set_data(t2, t2_value); 59054 }, 59055 d(detaching) { 59056 if (detaching) { 59057 detach(div1); 59058 } 59059 } 59060 }; 59061 } 59062 59063 // (100:2) {#if allowPromoCodes} 59064 function create_if_block_2$e(ctx) { 59065 let t; 59066 let if_block1_anchor; 59067 let current; 59068 let if_block0 = !/*paymentProcessed*/ ctx[17] && !(/*showPromoCode*/ ctx[29] || /*promoCode*/ ctx[11]) && create_if_block_12$2(ctx); 59069 let if_block1 = (/*showPromoCode*/ ctx[29] || /*promoCode*/ ctx[11]) && create_if_block_3$a(ctx); 59070 59071 return { 59072 c() { 59073 if (if_block0) if_block0.c(); 59074 t = space(); 59075 if (if_block1) if_block1.c(); 59076 if_block1_anchor = empty(); 59077 }, 59078 m(target, anchor) { 59079 if (if_block0) if_block0.m(target, anchor); 59080 insert(target, t, anchor); 59081 if (if_block1) if_block1.m(target, anchor); 59082 insert(target, if_block1_anchor, anchor); 59083 current = true; 59084 }, 59085 p(ctx, dirty) { 59086 if (!/*paymentProcessed*/ ctx[17] && !(/*showPromoCode*/ ctx[29] || /*promoCode*/ ctx[11])) { 59087 if (if_block0) { 59088 if_block0.p(ctx, dirty); 59089 } else { 59090 if_block0 = create_if_block_12$2(ctx); 59091 if_block0.c(); 59092 if_block0.m(t.parentNode, t); 59093 } 59094 } else if (if_block0) { 59095 if_block0.d(1); 59096 if_block0 = null; 59097 } 59098 59099 if (/*showPromoCode*/ ctx[29] || /*promoCode*/ ctx[11]) { 59100 if (if_block1) { 59101 if_block1.p(ctx, dirty); 59102 59103 if (dirty[0] & /*showPromoCode, promoCode*/ 536872960) { 59104 transition_in(if_block1, 1); 59105 } 59106 } else { 59107 if_block1 = create_if_block_3$a(ctx); 59108 if_block1.c(); 59109 transition_in(if_block1, 1); 59110 if_block1.m(if_block1_anchor.parentNode, if_block1_anchor); 59111 } 59112 } else if (if_block1) { 59113 group_outros(); 59114 59115 transition_out(if_block1, 1, 1, () => { 59116 if_block1 = null; 59117 }); 59118 59119 check_outros(); 59120 } 59121 }, 59122 i(local) { 59123 if (current) return; 59124 transition_in(if_block1); 59125 current = true; 59126 }, 59127 o(local) { 59128 transition_out(if_block1); 59129 current = false;
59130 }, 59131 d(detaching) { 59132 if (detaching) { 59133 detach(t); 59134 detach(if_block1_anchor); 59135 } 59136 59137 if (if_block0) if_block0.d(detaching); 59138 if (if_block1) if_block1.d(detaching); 59139 } 59140 }; 59141 } 59142 59143 // (101:4) {#if !paymentProcessed && !(showPromoCode || promoCode)} 59144 function create_if_block_12$2(ctx) { 59145 let button; 59146 let span; 59147 let t; 59148 let mounted; 59149 let dispose; 59150 59151 return { 59152 c() { 59153 button = element("button"); 59154 span = element("span"); 59155 t = text(/*promoCodeLinkText*/ ctx[4]); 59156 attr(button, "type", "button"); 59157 attr(button, "class", "zephr-form-promo-activate-line zephr-payment-form-promo-activate-line svelte-xf8v79"); 59158 }, 59159 m(target, anchor) { 59160 insert(target, button, anchor); 59161 append(button, span); 59162 append(span, t); 59163 59164 if (!mounted) { 59165 dispose = listen(button, "click", /*click_handler*/ ctx[34]); 59166 mounted = true; 59167 } 59168 }, 59169 p(ctx, dirty) { 59170 if (dirty[0] & /*promoCodeLinkText*/ 16) set_data(t, /*promoCodeLinkText*/ ctx[4]); 59171 }, 59172 d(detaching) { 59173 if (detaching) { 59174 detach(button); 59175 } 59176 59177 mounted = false; 59178 dispose(); 59179 } 59180 }; 59181 } 59182 59183 // (110:4) {#if showPromoCode || promoCode} 59184 function create_if_block_3$a(ctx) { 59185 let div2; 59186 let div0; 59187 let current_block_type_index; 59188 let if_block0; 59189 let t0; 59190 let div1; 59191 let current_block_type_index_1; 59192 let if_block1; 59193 let div1_class_value; 59194 let t1; 59195 let if_block2_anchor; 59196 let current; 59197 const if_block_creators = [create_if_block_8$2, create_if_block_9$2]; 59198 const if_blocks = []; 59199 59200 function select_block_type(ctx, dirty) { 59201 if (/*paymentProcessed*/ ctx[17] && /*promoCode*/ ctx[11]) return 0; 59202 if (!/*paymentProcessed*/ ctx[17]) return 1; 59203 return -1; 59204 } 59205 59206 if (~(current_block_type_index = select_block_type(ctx))) { 59207 if_block0 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 59208 } 59209 59210 const if_block_creators_1 = [create_if_block_5$6, create_if_block_7$2]; 59211 const if_blocks_1 = []; 59212 59213 function select_block_type_2(ctx, dirty) { 59214 if (/*promoCodeValid*/ ctx[12]) return 0; 59215 if (!/*paymentProcessed*/ ctx[17]) return 1; 59216 return -1; 59217 } 59218 59219 if (~(current_block_type_index_1 = select_block_type_2(ctx))) { 59220 if_block1 = if_blocks_1[current_block_type_index_1] = if_block_creators_1[current_block_type_index_1](ctx); 59221 } 59222 59223 let if_block2 = /*error*/ ctx[14] && create_if_block_4$8(ctx); 59224 59225 return { 59226 c() { 59227 div2 = element("div"); 59228 div0 = element("div"); 59229 if (if_block0) if_block0.c(); 59230 t0 = space(); 59231 div1 = element("div"); 59232 if (if_block1) if_block1.c(); 59233 t1 = space(); 59234 if (if_block2) if_block2.c(); 59235 if_block2_anchor = empty(); 59236 attr(div0, "class", "zephr-form-promo-input-container zephr-payment-form-promo-input-container svelte-xf8v79"); 59237 59238 attr(div1, "class", div1_class_value = "" + (null_to_empty(/*promoCodeValid*/ ctx[12] 59239 ? "zephr-form-summary-line-right zephr-payment-form-summary-line-right" 59240 : "zephr-form-summary-line-left zephr-payment-form-summary-line-left") + " svelte-xf8v79")); 59241 59242 attr(div2, "class", "zephr-form-promo-line zephr-payment-form-promo-line svelte-xf8v79"); 59243 }, 59244 m(target, anchor) { 59245 insert(target, div2, anchor); 59246 append(div2, div0); 59247 59248 if (~current_block_type_index) { 59249 if_blocks[current_block_type_index].m(div0, null); 59250 } 59251 59252 append(div2, t0); 59253 append(div2, div1); 59254 59255 if (~current_block_type_index_1) { 59256 if_blocks_1[current_block_type_index_1].m(div1, null); 59257 } 59258 59259 insert(target, t1, anchor); 59260 if (if_block2) if_block2.m(target, anchor); 59261 insert(target, if_block2_anchor, anchor); 59262 current = true; 59263 }, 59264 p(ctx, dirty) { 59265 let previous_block_index = current_block_type_index; 59266 current_block_type_index = select_block_type(ctx); 59267 59268 if (current_block_type_index === previous_block_index) { 59269 if (~current_block_type_index) { 59270 if_blocks[current_block_type_index].p(ctx, dirty); 59271 } 59272 } else { 59273 if (if_block0) { 59274 group_outros(); 59275 59276 transition_out(if_blocks[previous_block_index], 1, 1, () => { 59277 if_blocks[previous_block_index] = null; 59278 }); 59279 59280 check_outros(); 59281 } 59282 59283 if (~current_block_type_index) { 59284 if_block0 = if_blocks[current_block_type_index]; 59285 59286 if (!if_block0) { 59287 if_block0 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 59288 if_block0.c(); 59289 } else { 59290 if_block0.p(ctx, dirty); 59291 } 59292 59293 transition_in(if_block0, 1); 59294 if_block0.m(div0, null); 59295 } else { 59296 if_block0 = null; 59297 } 59298 } 59299 59300 let previous_block_index_1 = current_block_type_index_1; 59301 current_block_type_index_1 = select_block_type_2(ctx); 59302 59303 if (current_block_type_index_1 === previous_block_index_1) { 59304 if (~current_block_type_index_1) { 59305 if_blocks_1[current_block_type_index_1].p(ctx, dirty); 59306 } 59307 } else { 59308 if (if_block1) { 59309 group_outros(); 59310 59311 transition_out(if_blocks_1[previous_block_index_1], 1, 1, () => { 59312 if_blocks_1[previous_block_index_1] = null; 59313 }); 59314 59315 check_outros(); 59316 } 59317 59318 if (~current_block_type_index_1) { 59319 if_block1 = if_blocks_1[current_block_type_index_1]; 59320 59321 if (!if_block1) { 59322 if_block1 = if_blocks_1[current_block_type_index_1] = if_block_creators_1[current_block_type_index_1](ctx); 59323 if_block1.c(); 59324 } else { 59325 if_block1.p(ctx, dirty); 59326 } 59327 59328 transition_in(if_block1, 1); 59329 if_block1.m(div1, null); 59330 } else { 59331 if_block1 = null; 59332 } 59333 } 59334 59335 if (!current || dirty[0] & /*promoCodeValid*/ 4096 && div1_class_value !== (div1_class_value = "" + (null_to_empty(/*promoCodeValid*/ ctx[12] 59336 ? "zephr-form-summary-line-right zephr-payment-form-summary-line-right" 59337 : "zephr-form-summary-line-left zephr-payment-form-summary-line-left") + " svelte-xf8v79"))) { 59338 attr(div1, "class", div1_class_value); 59339 } 59340 59341 if (/*error*/ ctx[14]) { 59342 if (if_block2) { 59343 if_block2.p(ctx, dirty); 59344
59345 if (dirty[0] & /*error*/ 16384) { 59346 transition_in(if_block2, 1); 59347 } 59348 } else { 59349 if_block2 = create_if_block_4$8(ctx); 59350 if_block2.c(); 59351 transition_in(if_block2, 1); 59352 if_block2.m(if_block2_anchor.parentNode, if_block2_anchor); 59353 } 59354 } else if (if_block2) { 59355 group_outros(); 59356 59357 transition_out(if_block2, 1, 1, () => { 59358 if_block2 = null; 59359 }); 59360 59361 check_outros(); 59362 } 59363 }, 59364 i(local) { 59365 if (current) return; 59366 transition_in(if_block0); 59367 transition_in(if_block1); 59368 transition_in(if_block2); 59369 current = true; 59370 }, 59371 o(local) { 59372 transition_out(if_block0); 59373 transition_out(if_block1); 59374 transition_out(if_block2); 59375 current = false; 59376 }, 59377 d(detaching) { 59378 if (detaching) { 59379 detach(div2); 59380 detach(t1); 59381 detach(if_block2_anchor); 59382 } 59383 59384 if (~current_block_type_index) { 59385 if_blocks[current_block_type_index].d(); 59386 } 59387 59388 if (~current_block_type_index_1) { 59389 if_blocks_1[current_block_type_index_1].d(); 59390 } 59391 59392 if (if_block2) if_block2.d(detaching); 59393 } 59394 }; 59395 } 59396 59397 // (117:38) 59398 function create_if_block_9$2(ctx) { 59399 let div; 59400 let input; 59401 let current; 59402 59403 input = new Input({ 59404 props: { 59405 id: "zephr-form-promo-code", 59406 value: /*promoCode*/ ctx[11], 59407 placeholder: /*promoCodePlaceholder*/ ctx[5], 59408 maxlength: 50, 59409 hasError: /*error*/ ctx[14] != null, 59410 fill: true, 59411 isPaymentForm: true, 59412 onFocus: /*onFocus*/ ctx[27], 59413 onBlur: /*onBlur*/ ctx[28], 59414 $$slots: { default: [create_default_slot$4] }, 59415 $$scope: { ctx } 59416 } 59417 }); 59418 59419 input.$on("change", /*change_handler*/ ctx[35]); 59420 59421 return { 59422 c() { 59423 div = element("div"); 59424 create_component(input.$$.fragment); 59425 attr(div, "class", "zephr-form-relative-container zephr-form-promo-input zephr-form-relative-container zephr-payment-form-promo-input"); 59426 }, 59427 m(target, anchor) { 59428 insert(target, div, anchor); 59429 mount_component(input, div, null); 59430 current = true; 59431 }, 59432 p(ctx, dirty) { 59433 const input_changes = {}; 59434 if (dirty[0] & /*promoCode*/ 2048) input_changes.value = /*promoCode*/ ctx[11]; 59435 if (dirty[0] & /*promoCodePlaceholder*/ 32) input_changes.placeholder = /*promoCodePlaceholder*/ ctx[5]; 59436 if (dirty[0] & /*error*/ 16384) input_changes.hasError = /*error*/ ctx[14] != null; 59437 if (dirty[0] & /*onFocus*/ 134217728) input_changes.onFocus = /*onFocus*/ ctx[27]; 59438 if (dirty[0] & /*onBlur*/ 268435456) input_changes.onBlur = /*onBlur*/ ctx[28]; 59439 59440 if (dirty[0] & /*promoCodeValid, busy, error*/ 53248 | dirty[1] & /*$$scope*/ 16384) { 59441 input_changes.$$scope = { dirty, ctx }; 59442 } 59443 59444 input.$set(input_changes); 59445 }, 59446 i(local) { 59447 if (current) return; 59448 transition_in(input.$$.fragment, local); 59449 current = true; 59450 }, 59451 o(local) { 59452 transition_out(input.$$.fragment, local); 59453 current = false; 59454 }, 59455 d(detaching) { 59456 if (detaching) { 59457 detach(div); 59458 } 59459 59460 destroy_component(input); 59461 } 59462 }; 59463 } 59464 59465 // (113:10) {#if paymentProcessed && promoCode} 59466 function create_if_block_8$2(ctx) { 59467 let span; 59468 let t; 59469 59470 return { 59471 c() { 59472 span = element("span"); 59473 t = text(/*promoCode*/ ctx[11]); 59474 attr(span, "class", "zephr-form-summary-promo-middle zephr-payment-form-summary-promo-middle svelte-xf8v79"); 59475 }, 59476 m(target, anchor) { 59477 insert(target, span, anchor); 59478 append(span, t); 59479 }, 59480 p(ctx, dirty) { 59481 if (dirty[0] & /*promoCode*/ 2048) set_data(t, /*promoCode*/ ctx[11]); 59482 }, 59483 i: noop, 59484 o: noop, 59485 d(detaching) { 59486 if (detaching) { 59487 detach(span); 59488 } 59489 } 59490 }; 59491 } 59492 59493 // (136:43) 59494 function create_if_block_11$2(ctx) { 59495 let fa; 59496 let current; 59497 fa = new Fa({ props: { icon: faSpinner, spin: true } }); 59498 59499 return { 59500 c() { 59501 create_component(fa.$$.fragment); 59502 }, 59503 m(target, anchor) { 59504 mount_component(fa, target, anchor); 59505 current = true; 59506 }, 59507 i(local) { 59508 if (current) return; 59509 transition_in(fa.$$.fragment, local); 59510 current = true; 59511 }, 59512 o(local) { 59513 transition_out(fa.$$.fragment, local); 59514 current = false; 59515 }, 59516 d(detaching) { 59517 destroy_component(fa, detaching); 59518 } 59519 }; 59520 } 59521 59522 // (134:18) {#if promoCodeValid} 59523 function create_if_block_10$2(ctx) { 59524 let fa; 59525 let current; 59526 fa = new Fa({ props: { icon: faCheck } }); 59527 59528 return { 59529 c() { 59530 create_component(fa.$$.fragment); 59531 }, 59532 m(target, anchor) { 59533 mount_component(fa, target, anchor); 59534 current = true; 59535 }, 59536 i(local) { 59537 if (current) return; 59538 transition_in(fa.$$.fragment, local); 59539 current = true; 59540 }, 59541 o(local) { 59542 transition_out(fa.$$.fragment, local); 59543 current = false;
59544 }, 59545 d(detaching) { 59546 destroy_component(fa, detaching); 59547 } 59548 }; 59549 } 59550 59551 // (121:14) <Input id="zephr-form-promo-code" value={promoCode} placeholder={promoCodePlaceholder} maxlength={50} hasError={error != null} fill isPaymentForm on:change={({ detail }) => onChangePromoCode(detail)} onFocus={onFocus} onBlur={onBlur} > 59552 function create_default_slot$4(ctx) { 59553 let div; 59554 let current_block_type_index; 59555 let if_block; 59556 let current; 59557 const if_block_creators = [create_if_block_10$2, create_if_block_11$2]; 59558 const if_blocks = []; 59559 59560 function select_block_type_1(ctx, dirty) { 59561 if (/*promoCodeValid*/ ctx[12]) return 0; 59562 if (/*busy*/ ctx[15] && !/*error*/ ctx[14]) return 1; 59563 return -1; 59564 } 59565 59566 if (~(current_block_type_index = select_block_type_1(ctx))) { 59567 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 59568 } 59569 59570 return { 59571 c() { 59572 div = element("div"); 59573 if (if_block) if_block.c(); 59574 attr(div, "class", "zephr-form-input-inner-text zephr-payment-form-input-inner-text zephr-form-input-inner-button"); 59575 }, 59576 m(target, anchor) { 59577 insert(target, div, anchor); 59578 59579 if (~current_block_type_index) { 59580 if_blocks[current_block_type_index].m(div, null); 59581 } 59582 59583 current = true; 59584 }, 59585 p(ctx, dirty) { 59586 let previous_block_index = current_block_type_index; 59587 current_block_type_index = select_block_type_1(ctx); 59588 59589 if (current_block_type_index !== previous_block_index) { 59590 if (if_block) { 59591 group_outros(); 59592 59593 transition_out(if_blocks[previous_block_index], 1, 1, () => { 59594 if_blocks[previous_block_index] = null; 59595 }); 59596 59597 check_outros(); 59598 } 59599 59600 if (~current_block_type_index) { 59601 if_block = if_blocks[current_block_type_index]; 59602 59603 if (!if_block) { 59604 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 59605 if_block.c(); 59606 } 59607 59608 transition_in(if_block, 1); 59609 if_block.m(div, null); 59610 } else { 59611 if_block = null; 59612 } 59613 } 59614 }, 59615 i(local) { 59616 if (current) return; 59617 transition_in(if_block); 59618 current = true; 59619 }, 59620 o(local) { 59621 transition_out(if_block); 59622 current = false; 59623 }, 59624 d(detaching) { 59625 if (detaching) { 59626 detach(div); 59627 } 59628 59629 if (~current_block_type_index) { 59630 if_blocks[current_block_type_index].d(); 59631 } 59632 } 59633 }; 59634 } 59635 59636 // (155:38) 59637 function create_if_block_7$2(ctx) { 59638 let button; 59639 let current; 59640 59641 button = new Button({ 59642 props: { 59643 disabled: /*promoCodeDisabled*/ ctx[16], 59644 text: /*promoCodeButtonText*/ ctx[6], 59645 onClick: /*verifyPromoCode*/ ctx[26], 59646 noMargin: true, 59647 inputHeight: true, 59648 isPaymentForm: true 59649 } 59650 }); 59651 59652 return { 59653 c() { 59654 create_component(button.$$.fragment); 59655 }, 59656 m(target, anchor) { 59657 mount_component(button, target, anchor); 59658 current = true; 59659 }, 59660 p(ctx, dirty) { 59661 const button_changes = {}; 59662 if (dirty[0] & /*promoCodeDisabled*/ 65536) button_changes.disabled = /*promoCodeDisabled*/ ctx[16]; 59663 if (dirty[0] & /*promoCodeButtonText*/ 64) button_changes.text = /*promoCodeButtonText*/ ctx[6]; 59664 if (dirty[0] & /*verifyPromoCode*/ 67108864) button_changes.onClick = /*verifyPromoCode*/ ctx[26]; 59665 button.$set(button_changes); 59666 }, 59667 i(local) { 59668 if (current) return; 59669 transition_in(button.$$.fragment, local); 59670 current = true; 59671 }, 59672 o(local) { 59673 transition_out(button.$$.fragment, local); 59674 current = false; 59675 }, 59676 d(detaching) { 59677 destroy_component(button, detaching); 59678 } 59679 }; 59680 } 59681 59682 // (149:10) {#if promoCodeValid} 59683 function create_if_block_5$6(ctx) { 59684 let span; 59685 let if_block = /*showPromoCodeDiscountAmount*/ ctx[0] && create_if_block_6$6(ctx); 59686 59687 return { 59688 c() { 59689 span = element("span"); 59690 if (if_block) if_block.c(); 59691 attr(span, "class", "zephr-form-summary-promo-middle zephr-payment-form-summary-promo-middle svelte-xf8v79"); 59692 }, 59693 m(target, anchor) { 59694 insert(target, span, anchor); 59695 if (if_block) if_block.m(span, null); 59696 }, 59697 p(ctx, dirty) { 59698 if (/*showPromoCodeDiscountAmount*/ ctx[0]) { 59699 if (if_block) { 59700 if_block.p(ctx, dirty); 59701 } else { 59702 if_block = create_if_block_6$6(ctx); 59703 if_block.c(); 59704 if_block.m(span, null); 59705 } 59706 } else if (if_block) { 59707 if_block.d(1); 59708 if_block = null; 59709 } 59710 }, 59711 i: noop, 59712 o: noop, 59713 d(detaching) { 59714 if (detaching) { 59715 detach(span); 59716 } 59717 59718 if (if_block) if_block.d(); 59719 } 59720 }; 59721 } 59722 59723 // (151:14) {#if showPromoCodeDiscountAmount} 59724 function create_if_block_6$6(ctx) { 59725 let t0; 59726 let t1; 59727 59728 return { 59729 c() { 59730 t0 = text("- "); 59731 t1 = text(/*discountAmount*/ ctx[13]); 59732 }, 59733 m(target, anchor) { 59734 insert(target, t0, anchor); 59735 insert(target, t1, anchor); 59736 }, 59737 p(ctx, dirty) {
59738 if (dirty[0] & /*discountAmount*/ 8192) set_data(t1, /*discountAmount*/ ctx[13]); 59739 }, 59740 d(detaching) { 59741 if (detaching) { 59742 detach(t0); 59743 detach(t1); 59744 } 59745 } 59746 }; 59747 } 59748 59749 // (167:6) {#if error} 59750 function create_if_block_4$8(ctx) { 59751 let errormessage; 59752 let current; 59753 59754 errormessage = new ErrorMessage({ 59755 props: { 59756 error: /*error*/ ctx[14], 59757 isPaymentForm: true 59758 } 59759 }); 59760 59761 return { 59762 c() { 59763 create_component(errormessage.$$.fragment); 59764 }, 59765 m(target, anchor) { 59766 mount_component(errormessage, target, anchor); 59767 current = true; 59768 }, 59769 p(ctx, dirty) { 59770 const errormessage_changes = {}; 59771 if (dirty[0] & /*error*/ 16384) errormessage_changes.error = /*error*/ ctx[14]; 59772 errormessage.$set(errormessage_changes); 59773 }, 59774 i(local) { 59775 if (current) return; 59776 transition_in(errormessage.$$.fragment, local); 59777 current = true; 59778 }, 59779 o(local) { 59780 transition_out(errormessage.$$.fragment, local); 59781 current = false; 59782 }, 59783 d(detaching) { 59784 destroy_component(errormessage, detaching); 59785 } 59786 }; 59787 } 59788 59789 // (180:2) {#if prorateDisclaimer} 59790 function create_if_block_1$m(ctx) { 59791 let div; 59792 let t; 59793 59794 return { 59795 c() { 59796 div = element("div"); 59797 t = text(/*prorateDisclaimer*/ ctx[10]); 59798 attr(div, "class", "zephr-form-summary-prorate-disclaimer zephr-payment-form-summary-prorate-disclaimer svelte-xf8v79"); 59799 }, 59800 m(target, anchor) { 59801 insert(target, div, anchor); 59802 append(div, t); 59803 }, 59804 p(ctx, dirty) { 59805 if (dirty[0] & /*prorateDisclaimer*/ 1024) set_data(t, /*prorateDisclaimer*/ ctx[10]); 59806 }, 59807 d(detaching) { 59808 if (detaching) { 59809 detach(div); 59810 } 59811 } 59812 }; 59813 } 59814 59815 // (185:2) {#if changeSubscriptionProrate} 59816 function create_if_block$w(ctx) { 59817 let div2; 59818 let div0; 59819 let t0_value = (/*prorateLabel*/ ctx[9] ?? "DUE TODAY") + ""; 59820 let t0; 59821 let t1; 59822 let div1; 59823 let t2_value = /*changeSubscriptionProrate*/ ctx[20].totalPriceFormattedString + ""; 59824 let t2; 59825 59826 return { 59827 c() { 59828 div2 = element("div"); 59829 div0 = element("div"); 59830 t0 = text(t0_value); 59831 t1 = space(); 59832 div1 = element("div"); 59833 t2 = text(t2_value); 59834 attr(div0, "class", "zephr-form-summary-line-total-title zephr-payment-form-summary-line-total-title"); 59835 attr(div1, "class", "zephr-form-summary-line-price zephr-payment-form-summary-line-price svelte-xf8v79"); 59836 attr(div2, "class", "zephr-form-summary-line zephr-form-summary-price-line zephr-payment-form-summary-line zephr-payment-form-summary-price-line svelte-xf8v79"); 59837 }, 59838 m(target, anchor) { 59839 insert(target, div2, anchor); 59840 append(div2, div0); 59841 append(div0, t0); 59842 append(div2, t1); 59843 append(div2, div1); 59844 append(div1, t2); 59845 }, 59846 p(ctx, dirty) { 59847 if (dirty[0] & /*prorateLabel*/ 512 && t0_value !== (t0_value = (/*prorateLabel*/ ctx[9] ?? "DUE TODAY") + "")) set_data(t0, t0_value); 59848 if (dirty[0] & /*changeSubscriptionProrate*/ 1048576 && t2_value !== (t2_value = /*changeSubscriptionProrate*/ ctx[20].totalPriceFormattedString + "")) set_data(t2, t2_value); 59849 }, 59850 d(detaching) { 59851 if (detaching) { 59852 detach(div2); 59853 } 59854 } 59855 }; 59856 } 59857 59858 function create_fragment$G(ctx) { 59859 let div7; 59860 let div0; 59861 let t0; 59862 let t1; 59863 let div3; 59864 let div1; 59865 let t2; 59866 let t3; 59867 let div2; 59868 let t4; 59869 let t5; 59870 let t6; 59871 let t7; 59872 let t8; 59873 let t9; 59874 let t10; 59875 let div6; 59876 let div4; 59877 let t11; 59878 let t12; 59879 let div5; 59880 let t13; 59881 let t14; 59882 let t15; 59883 let current; 59884 let each_value_2 = ensure_array_like(/*chargeItems*/ ctx[19]); 59885 let each_blocks_1 = []; 59886 59887 for (let i = 0; i < each_value_2.length; i += 1) { 59888 each_blocks_1[i] = create_each_block_2(get_each_context_2(ctx, each_value_2, i)); 59889 } 59890 59891 let if_block0 = /*paymentProvider*/ ctx[24] === 'braintree' && /*discounts*/ ctx[23].length > 0 && create_if_block_14$2(ctx); 59892 let if_block1 = /*tax*/ ctx[21] && create_if_block_13$2(ctx); 59893 let each_value = ensure_array_like(/*addons*/ ctx[18]); 59894 let each_blocks = []; 59895 59896 for (let i = 0; i < each_value.length; i += 1) { 59897 each_blocks[i] = create_each_block$c(get_each_context$c(ctx, each_value, i)); 59898 } 59899 59900 let if_block2 = /*allowPromoCodes*/ ctx[3] && create_if_block_2$e(ctx); 59901 let if_block3 = /*prorateDisclaimer*/ ctx[10] && create_if_block_1$m(ctx); 59902 let if_block4 = /*changeSubscriptionProrate*/ ctx[20] && create_if_block$w(ctx); 59903 59904 return { 59905 c() { 59906 div7 = element("div"); 59907 div0 = element("div"); 59908 t0 = text(/*title*/ ctx[7]); 59909 t1 = space(); 59910 div3 = element("div"); 59911 div1 = element("div"); 59912 t2 = text(/*planTitle*/ ctx[1]); 59913 t3 = space(); 59914 div2 = element("div"); 59915 t4 = text(/*displayPrice*/ ctx[30]); 59916 t5 = space(); 59917 59918 for (let i = 0; i < each_blocks_1.length; i += 1) { 59919 each_blocks_1[i].c(); 59920 } 59921 59922 t6 = space(); 59923 if (if_block0) if_block0.c(); 59924 t7 = space(); 59925 if (if_block1) if_block1.c(); 59926 t8 = space(); 59927 59928 for (let i = 0; i < each_blocks.length; i += 1) { 59929 each_blocks[i].c(); 59930 } 59931 59932 t9 = space(); 59933 if (if_block2) if_block2.c(); 59934 t10 = space(); 59935 div6 = element("div"); 59936 div4 = element("div"); 59937 t11 = text(/*totalLabel*/ ctx[8]); 59938 t12 = space(); 59939 div5 = element("div"); 59940 t13 = text(/*totalPrice*/ ctx[2]); 59941 t14 = space(); 59942 if (if_block3) if_block3.c(); 59943 t15 = space(); 59944 if (if_block4) if_block4.c(); 59945 attr(div0, "class", "zephr-form-summary-title zephr-payment-form-summary-title svelte-xf8v79"); 59946 attr(div1, "class", "zephr-form-summary-line-title zephr-payment-form-summary-line-title svelte-xf8v79"); 59947 attr(div2, "class", "zephr-form-summary-line-price zephr-payment-form-summary-line-price svelte-xf8v79"); 59948 attr(div3, "class", "zephr-form-summary-line zephr-payment-form-summary-line svelte-xf8v79"); 59949 attr(div4, "class", "zephr-form-summary-line-total-title zephr-payment-form-summary-line-total-title"); 59950 attr(div5, "class", "zephr-form-summary-line-price zephr-payment-form-summary-line-price svelte-xf8v79"); 59951 attr(div6, "class", "zephr-form-summary-line zephr-form-summary-price-line zephr-form-summary-price-line-upper zephr-payment-form-summary-line zephr-payment-form-summary-price-line zephr-payment-form-summary-price-line-upper svelte-xf8v79"); 59952 attr(div7, "class", "zephr-form-summary zephr-payment-form-summary svelte-xf8v79"); 59953 }, 59954 m(target, anchor) { 59955 insert(target, div7, anchor); 59956 append(div7, div0); 59957 append(div0, t0); 59958 append(div7, t1); 59959 append(div7, div3); 59960 append(div3, div1); 59961 append(div1, t2); 59962 append(div3, t3); 59963 append(div3, div2); 59964 append(div2, t4); 59965 append(div7, t5); 59966 59967 for (let i = 0; i < each_blocks_1.length; i += 1) { 59968 if (each_blocks_1[i]) { 59969 each_blocks_1[i].m(div7, null); 59970 } 59971 } 59972 59973 append(div7, t6); 59974 if (if_block0) if_block0.m(div7, null); 59975 append(div7, t7); 59976 if (if_block1) if_block1.m(div7, null); 59977 append(div7, t8); 59978 59979 for (let i = 0; i < each_blocks.length; i += 1) { 59980 if (each_blocks[i]) { 59981 each_blocks[i].m(div7, null); 59982 } 59983 } 59984 59985 append(div7, t9); 59986 if (if_block2) if_block2.m(div7, null); 59987 append(div7, t10); 59988 append(div7, div6); 59989 append(div6, div4); 59990 append(div4, t11); 59991 append(div6, t12); 59992 append(div6, div5); 59993 append(div5, t13); 59994 append(div7, t14); 59995 if (if_block3) if_block3.m(div7, null); 59996 append(div7, t15); 59997 if (if_block4) if_block4.m(div7, null); 59998 current = true; 59999 }, 60000 p(ctx, dirty) { 60001 if (!current || dirty[0] & /*title*/ 128) set_data(t0, /*title*/ ctx[7]); 60002 if (!current || dirty[0] & /*planTitle*/ 2) set_data(t2, /*planTitle*/ ctx[1]); 60003 if (!current || dirty[0] & /*displayPrice*/ 1073741824) set_data(t4, /*displayPrice*/ ctx[30]); 60004
60005 if (dirty[0] & /*chargeItems*/ 524288) { 60006 each_value_2 = ensure_array_like(/*chargeItems*/ ctx[19]); 60007 let i; 60008 60009 for (i = 0; i < each_value_2.length; i += 1) { 60010 const child_ctx = get_each_context_2(ctx, each_value_2, i); 60011 60012 if (each_blocks_1[i]) { 60013 each_blocks_1[i].p(child_ctx, dirty); 60014 } else { 60015 each_blocks_1[i] = create_each_block_2(child_ctx); 60016 each_blocks_1[i].c(); 60017 each_blocks_1[i].m(div7, t6); 60018 } 60019 } 60020 60021 for (; i < each_blocks_1.length; i += 1) { 60022 each_blocks_1[i].d(1); 60023 } 60024 60025 each_blocks_1.length = each_value_2.length; 60026 } 60027 60028 if (/*paymentProvider*/ ctx[24] === 'braintree' && /*discounts*/ ctx[23].length > 0) { 60029 if (if_block0) { 60030 if_block0.p(ctx, dirty); 60031 } else { 60032 if_block0 = create_if_block_14$2(ctx); 60033 if_block0.c(); 60034 if_block0.m(div7, t7); 60035 } 60036 } else if (if_block0) { 60037 if_block0.d(1); 60038 if_block0 = null; 60039 } 60040 60041 if (/*tax*/ ctx[21]) { 60042 if (if_block1) { 60043 if_block1.p(ctx, dirty); 60044 } else { 60045 if_block1 = create_if_block_13$2(ctx); 60046 if_block1.c(); 60047 if_block1.m(div7, t8); 60048 } 60049 } else if (if_block1) { 60050 if_block1.d(1); 60051 if_block1 = null; 60052 } 60053 60054 if (dirty[0] & /*addons*/ 262144) { 60055 each_value = ensure_array_like(/*addons*/ ctx[18]); 60056 let i; 60057 60058 for (i = 0; i < each_value.length; i += 1) { 60059 const child_ctx = get_each_context$c(ctx, each_value, i); 60060 60061 if (each_blocks[i]) { 60062 each_blocks[i].p(child_ctx, dirty); 60063 } else { 60064 each_blocks[i] = create_each_block$c(child_ctx); 60065 each_blocks[i].c(); 60066 each_blocks[i].m(div7, t9); 60067 } 60068 } 60069 60070 for (; i < each_blocks.length; i += 1) { 60071 each_blocks[i].d(1); 60072 } 60073 60074 each_blocks.length = each_value.length; 60075 } 60076 60077 if (/*allowPromoCodes*/ ctx[3]) { 60078 if (if_block2) { 60079 if_block2.p(ctx, dirty); 60080 60081 if (dirty[0] & /*allowPromoCodes*/ 8) { 60082 transition_in(if_block2, 1); 60083 } 60084 } else { 60085 if_block2 = create_if_block_2$e(ctx); 60086 if_block2.c(); 60087 transition_in(if_block2, 1); 60088 if_block2.m(div7, t10); 60089 } 60090 } else if (if_block2) { 60091 group_outros(); 60092 60093 transition_out(if_block2, 1, 1, () => { 60094 if_block2 = null; 60095 }); 60096 60097 check_outros(); 60098 } 60099 60100 if (!current || dirty[0] & /*totalLabel*/ 256) set_data(t11, /*totalLabel*/ ctx[8]); 60101 if (!current || dirty[0] & /*totalPrice*/ 4) set_data(t13, /*totalPrice*/ ctx[2]); 60102 60103 if (/*prorateDisclaimer*/ ctx[10]) { 60104 if (if_block3) { 60105 if_block3.p(ctx, dirty); 60106 } else { 60107 if_block3 = create_if_block_1$m(ctx); 60108 if_block3.c(); 60109 if_block3.m(div7, t15); 60110 } 60111 } else if (if_block3) { 60112 if_block3.d(1); 60113 if_block3 = null; 60114 } 60115 60116 if (/*changeSubscriptionProrate*/ ctx[20]) { 60117 if (if_block4) { 60118 if_block4.p(ctx, dirty); 60119 } else { 60120 if_block4 = create_if_block$w(ctx); 60121 if_block4.c(); 60122 if_block4.m(div7, null); 60123 } 60124 } else if (if_block4) { 60125 if_block4.d(1); 60126 if_block4 = null; 60127 } 60128 }, 60129 i(local) { 60130 if (current) return; 60131 transition_in(if_block2); 60132 current = true; 60133 }, 60134 o(local) { 60135 transition_out(if_block2); 60136 current = false; 60137 }, 60138 d(detaching) { 60139 if (detaching) { 60140 detach(div7); 60141 } 60142 60143 destroy_each(each_blocks_1, detaching); 60144 if (if_block0) if_block0.d(); 60145 if (if_block1) if_block1.d(); 60146 destroy_each(each_blocks, detaching); 60147 if (if_block2) if_block2.d(); 60148 if (if_block3) if_block3.d(); 60149 if (if_block4) if_block4.d(); 60150 } 60151 }; 60152 } 60153 60154 function instance$G($$self, $$props, $$invalidate) { 60155 let displayPrice; 60156 let { showPromoCodeDiscountAmount = true } = $$props; 60157 let { planTitle } = $$props; 60158 let { price } = $$props; 60159 let { totalPrice } = $$props; 60160 let { allowPromoCodes } = $$props; 60161 let { promoCodeLinkText } = $$props; 60162 let { promoCodePlaceholder } = $$props; 60163 let { promoCodeButtonText } = $$props; 60164 let { title } = $$props; 60165 let { totalLabel } = $$props; 60166 let { prorateLabel } = $$props; 60167 let { prorateDisclaimer } = $$props; 60168 let { promoCode } = $$props; 60169 let { promoCodeValid } = $$props; 60170 let { discountAmount } = $$props; 60171 let { error = null } = $$props; 60172 let { busy } = $$props; 60173 let { promoCodeDisabled } = $$props; 60174 let { paymentProcessed } = $$props; 60175 let { addons } = $$props; 60176 let { chargeItems } = $$props; 60177 let { changeSubscriptionProrate } = $$props; 60178 let { tax } = $$props; 60179 let { taxLabel } = $$props; 60180 let { subTotal } = $$props; 60181 let { discounts = [] } = $$props; 60182 let { paymentProvider = '' } = $$props; 60183 let { onChangePromoCode } = $$props; 60184 let { verifyPromoCode } = $$props; 60185 let { onFocus } = $$props; 60186 let { onBlur } = $$props; 60187 let { logBeginCheckout } = $$props; 60188 let showPromoCode = false;
60189 logBeginCheckout(); 60190 const click_handler = () => $$invalidate(29, showPromoCode = true); 60191 const change_handler = ({ detail }) => onChangePromoCode(detail); 60192 60193 $$self.$$set = $$props => { 60194 if ('showPromoCodeDiscountAmount' in $$props) $$invalidate(0, showPromoCodeDiscountAmount = $$props.showPromoCodeDiscountAmount); 60195 if ('planTitle' in $$props) $$invalidate(1, planTitle = $$props.planTitle); 60196 if ('price' in $$props) $$invalidate(31, price = $$props.price); 60197 if ('totalPrice' in $$props) $$invalidate(2, totalPrice = $$props.totalPrice); 60198 if ('allowPromoCodes' in $$props) $$invalidate(3, allowPromoCodes = $$props.allowPromoCodes); 60199 if ('promoCodeLinkText' in $$props) $$invalidate(4, promoCodeLinkText = $$props.promoCodeLinkText); 60200 if ('promoCodePlaceholder' in $$props) $$invalidate(5, promoCodePlaceholder = $$props.promoCodePlaceholder); 60201 if ('promoCodeButtonText' in $$props) $$invalidate(6, promoCodeButtonText = $$props.promoCodeButtonText); 60202 if ('title' in $$props) $$invalidate(7, title = $$props.title);
60203 if ('totalLabel' in $$props) $$invalidate(8, totalLabel = $$props.totalLabel); 60204 if ('prorateLabel' in $$props) $$invalidate(9, prorateLabel = $$props.prorateLabel); 60205 if ('prorateDisclaimer' in $$props) $$invalidate(10, prorateDisclaimer = $$props.prorateDisclaimer); 60206 if ('promoCode' in $$props) $$invalidate(11, promoCode = $$props.promoCode); 60207 if ('promoCodeValid' in $$props) $$invalidate(12, promoCodeValid = $$props.promoCodeValid); 60208 if ('discountAmount' in $$props) $$invalidate(13, discountAmount = $$props.discountAmount); 60209 if ('error' in $$props) $$invalidate(14, error = $$props.error); 60210 if ('busy' in $$props) $$invalidate(15, busy = $$props.busy); 60211 if ('promoCodeDisabled' in $$props) $$invalidate(16, promoCodeDisabled = $$props.promoCodeDisabled); 60212 if ('paymentProcessed' in $$props) $$invalidate(17, paymentProcessed = $$props.paymentProcessed); 60213 if ('addons' in $$props) $$invalidate(18, addons = $$props.addons); 60214 if ('chargeItems' in $$props) $$invalidate(19, chargeItems = $$props.chargeItems);
60215 if ('changeSubscriptionProrate' in $$props) $$invalidate(20, changeSubscriptionProrate = $$props.changeSubscriptionProrate); 60216 if ('tax' in $$props) $$invalidate(21, tax = $$props.tax); 60217 if ('taxLabel' in $$props) $$invalidate(22, taxLabel = $$props.taxLabel); 60218 if ('subTotal' in $$props) $$invalidate(32, subTotal = $$props.subTotal); 60219 if ('discounts' in $$props) $$invalidate(23, discounts = $$props.discounts); 60220 if ('paymentProvider' in $$props) $$invalidate(24, paymentProvider = $$props.paymentProvider); 60221 if ('onChangePromoCode' in $$props) $$invalidate(25, onChangePromoCode = $$props.onChangePromoCode); 60222 if ('verifyPromoCode' in $$props) $$invalidate(26, verifyPromoCode = $$props.verifyPromoCode); 60223 if ('onFocus' in $$props) $$invalidate(27, onFocus = $$props.onFocus); 60224 if ('onBlur' in $$props) $$invalidate(28, onBlur = $$props.onBlur); 60225 if ('logBeginCheckout' in $$props) $$invalidate(33, logBeginCheckout = $$props.logBeginCheckout); 60226 }; 60227 60228 $$self.$$.update = () => { 60229 if ($$self.$$.dirty[0] & /*chargeItems*/ 524288 | $$self.$$.dirty[1] & /*subTotal, price*/ 3) { 60230 $$invalidate(30, displayPrice = chargeItems.length ? "" : subTotal || price); 60231 } 60232 }; 60233 60234 return [ 60235 showPromoCodeDiscountAmount, 60236 planTitle, 60237 totalPrice, 60238 allowPromoCodes, 60239 promoCodeLinkText, 60240 promoCodePlaceholder, 60241 promoCodeButtonText, 60242 title, 60243 totalLabel, 60244 prorateLabel, 60245 prorateDisclaimer, 60246 promoCode, 60247 promoCodeValid, 60248 discountAmount, 60249 error, 60250 busy, 60251 promoCodeDisabled, 60252 paymentProcessed, 60253 addons, 60254 chargeItems, 60255 changeSubscriptionProrate, 60256 tax, 60257 taxLabel, 60258 discounts, 60259 paymentProvider, 60260 onChangePromoCode, 60261 verifyPromoCode, 60262 onFocus, 60263 onBlur, 60264 showPromoCode, 60265 displayPrice, 60266 price, 60267 subTotal, 60268 logBeginCheckout, 60269 click_handler, 60270 change_handler 60271 ]; 60272 } 60273 60274 class PaymentSummary extends SvelteComponent { 60275 constructor(options) { 60276 super(); 60277 60278 init( 60279 this, 60280 options, 60281 instance$G, 60282 create_fragment$G, 60283 safe_not_equal, 60284 { 60285 showPromoCodeDiscountAmount: 0, 60286 planTitle: 1, 60287 price: 31, 60288 totalPrice: 2, 60289 allowPromoCodes: 3, 60290 promoCodeLinkText: 4, 60291 promoCodePlaceholder: 5, 60292 promoCodeButtonText: 6, 60293 title: 7, 60294 totalLabel: 8, 60295 prorateLabel: 9, 60296 prorateDisclaimer: 10, 60297 promoCode: 11, 60298 promoCodeValid: 12, 60299 discountAmount: 13, 60300 error: 14, 60301 busy: 15, 60302 promoCodeDisabled: 16, 60303 paymentProcessed: 17, 60304 addons: 18, 60305 chargeItems: 19, 60306 changeSubscriptionProrate: 20, 60307 tax: 21, 60308 taxLabel: 22, 60309 subTotal: 32, 60310 discounts: 23, 60311 paymentProvider: 24, 60312 onChangePromoCode: 25, 60313 verifyPromoCode: 26, 60314 onFocus: 27, 60315 onBlur: 28, 60316 logBeginCheckout: 33 60317 }, 60318 null, 60319 [-1, -1] 60320 ); 60321 } 60322 } 60323 60324 const factory$f = { 60325 matches: (sectionElement) => sectionElement.type === elementTypes.PAYMENT_SUMMARY, 60326 create: (form, formState, formActions, elementConfig) => { 60327 const paymentProviderConfig = paymentProviderFor(form.organisationConfiguration.paymentProvider); 60328 return { 60329 component: PaymentSummary, 60330 props: { 60331 showPromoCodeDiscountAmount: !formConfigAs(form).dynamicOffer, 60332 price: formState.paymentOptionPrices?.netPriceFormattedString ?? '-', 60333 totalPrice: formState.paymentOptionPrices?.totalPriceFormattedString ?? '-', 60334 tax: formState.paymentOptionPrices?.taxPriceFormattedString, 60335 taxLabel: elementConfig.taxLabel ?? "Tax", 60336 subTotal: formState.paymentOptionPrices?.netPriceFormattedString, 60337 planTitle: formState.paymentOption.label, 60338 paymentProvider: form.organisationConfiguration.paymentProvider, 60339 // If we're using braintree we will need the full discounts array to display each discount 60340 discounts: form.organisationConfiguration.paymentProvider === 'braintree' ? 60341 (formConfigAs(form).paymentOptions 60342 .find(opt => opt.productId === formState.paymentOption.productId && opt.slug === formState.paymentOption.slug) 60343 ?.discounts || []) 60344 .map(discount => ({
60345 description: discount.description || discount.name, 60346 formattedAmount: `- ${formatCurrency(discount.amount || 0, formState.paymentOption.currencyCode)}` 60347 })) : [], 60348 allowPromoCodes: (formConfigAs(form).promoCodeConfig?.promoCodeAllowed 60349 || formConfigAs(form).dynamicOffer /* TODO temp just for customer demo */) && paymentProviderConfig.hasPromoCodes(form), 60350 promoCodeLinkText: formConfigAs(form).promoCodeConfig?.promoCodeText, 60351 promoCodePlaceholder: formConfigAs(form).promoCodeConfig?.promoCodePlaceholder, 60352 promoCodeButtonText: formConfigAs(form).promoCodeConfig?.promoCodeButtonText, 60353 totalLabel: elementConfig.total, 60354 prorateLabel: elementConfig.prorateLabel, 60355 prorateDisclaimer: (!formConfigAs(form).changeSubscriptionMode || paymentProviderConfig.changeSubscriptionProrateCalculator) ? null : elementConfig.prorateDisclaimer, 60356 title: elementConfig.title, 60357 promoCode: formState.promoCode, 60358 busy: formState.isBusyByKey[verifyingPromoCodeBusyKey], 60359 promoCodeDisabled: formState.isBusy || formState.promoCode?.length === 0, 60360 paymentProcessed: formState.paymentProcessed, 60361 discountAmount: formState.paymentOptionPrices?.discountPriceFormattedPrice ?? '-', 60362 addons: addonsForPlan(formState) 60363 .map(addon => ({ 60364 label: addon.label, 60365 addonPrice: formatCurrency(addon.addonPrice, formState.paymentOption.currencyCode) 60366 })), 60367 chargeItems: formState.paymentOptionPrices?.chargeItems ?? [], 60368 promoCodeValid: formState.promoCodeValid, 60369 changeSubscriptionProrate: formState.changeSubscriptionProrate, 60370 onChangePromoCode: (value) => { 60371 let updateFormState = formActions.updateFormState({ 60372 promoCode: value, 60373 promoCodeValid: undefined, 60374 discountedPlanPrices: [] 60375 }); 60376 // If we're going from a valid promo code -> incomplete promo code, the mobile payment button needs resetting 60377 if (formState.promoCodeValid) { 60378 if (formState.originalDynamicOfferResult) { 60379 updateFormState = formActions.updateFormState({ 60380 dynamicOfferResult: formState.originalDynamicOfferResult 60381 }); 60382 } 60383 void afterPromoCodeChange(form, updateFormState, formActions); 60384 } 60385 logDataLayerEvent(form, 'zephr_form_input_change', { 60386 inputName: 'zephr-form-promo-code', 60387 sectionId: formState.currentSection.type, 60388 field: 'promo-code' 60389 }); 60390 }, 60391 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 60392 inputName: 'zephr-form-promo-code', 60393 sectionId: formState.currentSection.type, 60394 field: 'promo-code' 60395 }), 60396 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 60397 inputName: 'zephr-form-promo-code', 60398 sectionId: formState.currentSection.type, 60399 field: 'promo-code' 60400 }), 60401 verifyPromoCode: () => { 60402 void validatePromoCode(form, formState, formActions); 60403 }, 60404 logBeginCheckout: async () => { 60405 if (formState.currentPart.type === partTypes.PAYMENT.type) { 60406 if (form.organisationConfiguration.trackFormDataLayerEvents) { 60407 await calculatePrices(form, formState, formActions); 60408 } 60409 logDataLayerEvent(form, 'begin_checkout', { 60410 ecommerce: { 60411 currency: getRelevantCurrency(form, formState), 60412 value: formActions.getFormState().paymentOptionPrices?.totalPrice, 60413 items: [{ 60414 item_id: formState.paymentOption.slug, 60415 item_name: formState.paymentOption.productId, 60416 price: formActions.getFormState().paymentOptionPrices?.totalPrice, 60417 quantity: 1 60418 }] 60419 } 60420 }); 60421 } 60422 } 60423 } 60424 }; 60425 } 60426 }; 60427 60428 /* src/components/elements/divider/Divider.svelte generated by Svelte v4.2.12 */ 60429 60430 function create_if_block$v(ctx) { 60431 let div; 60432 let t0; 60433 let t1; 60434 let if_block0 = /*showLine*/ ctx[1] && create_if_block_3$9(ctx); 60435 let if_block1 = /*text*/ ctx[0] && create_if_block_2$d(ctx); 60436 let if_block2 = /*showLine*/ ctx[1] && /*text*/ ctx[0] && create_if_block_1$l(ctx); 60437 60438 return { 60439 c() { 60440 div = element("div"); 60441 if (if_block0) if_block0.c(); 60442 t0 = space(); 60443 if (if_block1) if_block1.c(); 60444 t1 = space(); 60445 if (if_block2) if_block2.c(); 60446 attr(div, "class", "zephr-form-divider-container svelte-1jhhsfx"); 60447 toggle_class(div, "zephr-payment-form-divider-container", /*isPaymentForm*/ ctx[3]); 60448 }, 60449 m(target, anchor) { 60450 insert(target, div, anchor); 60451 if (if_block0) if_block0.m(div, null); 60452 append(div, t0); 60453 if (if_block1) if_block1.m(div, null); 60454 append(div, t1); 60455 if (if_block2) if_block2.m(div, null); 60456 }, 60457 p(ctx, dirty) { 60458 if (/*showLine*/ ctx[1]) { 60459 if (if_block0) { 60460 if_block0.p(ctx, dirty); 60461 } else { 60462 if_block0 = create_if_block_3$9(ctx); 60463 if_block0.c(); 60464 if_block0.m(div, t0); 60465 } 60466 } else if (if_block0) { 60467 if_block0.d(1); 60468 if_block0 = null; 60469 } 60470 60471 if (/*text*/ ctx[0]) { 60472 if (if_block1) { 60473 if_block1.p(ctx, dirty); 60474 } else { 60475 if_block1 = create_if_block_2$d(ctx); 60476 if_block1.c(); 60477 if_block1.m(div, t1); 60478 } 60479 } else if (if_block1) { 60480 if_block1.d(1); 60481 if_block1 = null; 60482 } 60483 60484 if (/*showLine*/ ctx[1] && /*text*/ ctx[0]) { 60485 if (if_block2) { 60486 if_block2.p(ctx, dirty); 60487 } else { 60488 if_block2 = create_if_block_1$l(ctx); 60489 if_block2.c(); 60490 if_block2.m(div, null); 60491 } 60492 } else if (if_block2) { 60493 if_block2.d(1); 60494 if_block2 = null; 60495 } 60496
60497 if (dirty & /*isPaymentForm*/ 8) { 60498 toggle_class(div, "zephr-payment-form-divider-container", /*isPaymentForm*/ ctx[3]); 60499 } 60500 }, 60501 d(detaching) { 60502 if (detaching) { 60503 detach(div); 60504 } 60505 60506 if (if_block0) if_block0.d(); 60507 if (if_block1) if_block1.d(); 60508 if (if_block2) if_block2.d(); 60509 } 60510 }; 60511 } 60512 60513 // (12:4) {#if showLine} 60514 function create_if_block_3$9(ctx) { 60515 let if_block_anchor; 60516 60517 function select_block_type(ctx, dirty) { 60518 if (/*text*/ ctx[0]) return create_if_block_4$7; 60519 return create_else_block$4; 60520 } 60521 60522 let current_block_type = select_block_type(ctx); 60523 let if_block = current_block_type(ctx); 60524 60525 return { 60526 c() { 60527 if_block.c(); 60528 if_block_anchor = empty(); 60529 }, 60530 m(target, anchor) { 60531 if_block.m(target, anchor); 60532 insert(target, if_block_anchor, anchor); 60533 }, 60534 p(ctx, dirty) { 60535 if (current_block_type === (current_block_type = select_block_type(ctx)) && if_block) { 60536 if_block.p(ctx, dirty); 60537 } else { 60538 if_block.d(1); 60539 if_block = current_block_type(ctx); 60540 60541 if (if_block) { 60542 if_block.c(); 60543 if_block.m(if_block_anchor.parentNode, if_block_anchor); 60544 } 60545 } 60546 }, 60547 d(detaching) { 60548 if (detaching) { 60549 detach(if_block_anchor); 60550 } 60551 60552 if_block.d(detaching); 60553 } 60554 }; 60555 } 60556 60557 // (18:8) {:else} 60558 function create_else_block$4(ctx) { 60559 let div; 60560 60561 return { 60562 c() { 60563 div = element("div"); 60564 attr(div, "class", "zephr-form-divider-line-complete svelte-1jhhsfx"); 60565 }, 60566 m(target, anchor) { 60567 insert(target, div, anchor); 60568 }, 60569 p: noop, 60570 d(detaching) { 60571 if (detaching) { 60572 detach(div); 60573 } 60574 } 60575 }; 60576 } 60577 60578 // (13:6) {#if text} 60579 function create_if_block_4$7(ctx) { 60580 let div; 60581 60582 return { 60583 c() { 60584 div = element("div"); 60585 attr(div, "class", "zephr-form-divider-line svelte-1jhhsfx"); 60586 toggle_class(div, "zephr-payment-form-divider-line", /*isPaymentForm*/ ctx[3]); 60587 }, 60588 m(target, anchor) { 60589 insert(target, div, anchor); 60590 }, 60591 p(ctx, dirty) { 60592 if (dirty & /*isPaymentForm*/ 8) { 60593 toggle_class(div, "zephr-payment-form-divider-line", /*isPaymentForm*/ ctx[3]); 60594 } 60595 }, 60596 d(detaching) { 60597 if (detaching) { 60598 detach(div); 60599 } 60600 } 60601 }; 60602 } 60603 60604 // (22:4) {#if text} 60605 function create_if_block_2$d(ctx) { 60606 let span; 60607 let t; 60608 60609 return { 60610 c() { 60611 span = element("span"); 60612 t = text(/*text*/ ctx[0]); 60613 attr(span, "class", "zephr-form-divider-text svelte-1jhhsfx"); 60614 toggle_class(span, "zephr-payment-form-divider-text", /*isPaymentForm*/ ctx[3]); 60615 }, 60616 m(target, anchor) { 60617 insert(target, span, anchor); 60618 append(span, t); 60619 }, 60620 p(ctx, dirty) { 60621 if (dirty & /*text*/ 1) set_data(t, /*text*/ ctx[0]); 60622 60623 if (dirty & /*isPaymentForm*/ 8) { 60624 toggle_class(span, "zephr-payment-form-divider-text", /*isPaymentForm*/ ctx[3]); 60625 } 60626 }, 60627 d(detaching) { 60628 if (detaching) { 60629 detach(span); 60630 } 60631 } 60632 }; 60633 } 60634 60635 // (30:4) {#if showLine && text} 60636 function create_if_block_1$l(ctx) { 60637 let div; 60638 60639 return { 60640 c() { 60641 div = element("div"); 60642 attr(div, "class", "zephr-form-divider-line svelte-1jhhsfx"); 60643 toggle_class(div, "zephr-payment-form-divider-line", /*isPaymentForm*/ ctx[3]); 60644 }, 60645 m(target, anchor) { 60646 insert(target, div, anchor); 60647 }, 60648 p(ctx, dirty) { 60649 if (dirty & /*isPaymentForm*/ 8) { 60650 toggle_class(div, "zephr-payment-form-divider-line", /*isPaymentForm*/ ctx[3]); 60651 } 60652 }, 60653 d(detaching) { 60654 if (detaching) { 60655 detach(div); 60656 } 60657 } 60658 }; 60659 } 60660 60661 function create_fragment$F(ctx) { 60662 let if_block_anchor; 60663 let if_block = /*show*/ ctx[2] && create_if_block$v(ctx); 60664 60665 return { 60666 c() { 60667 if (if_block) if_block.c(); 60668 if_block_anchor = empty(); 60669 }, 60670 m(target, anchor) { 60671 if (if_block) if_block.m(target, anchor); 60672 insert(target, if_block_anchor, anchor); 60673 }, 60674 p(ctx, [dirty]) { 60675 if (/*show*/ ctx[2]) { 60676 if (if_block) { 60677 if_block.p(ctx, dirty); 60678 } else { 60679 if_block = create_if_block$v(ctx); 60680 if_block.c(); 60681 if_block.m(if_block_anchor.parentNode, if_block_anchor); 60682 } 60683 } else if (if_block) { 60684 if_block.d(1); 60685 if_block = null; 60686 } 60687 }, 60688 i: noop, 60689 o: noop, 60690 d(detaching) { 60691 if (detaching) { 60692 detach(if_block_anchor); 60693 } 60694 60695 if (if_block) if_block.d(detaching); 60696 } 60697 }; 60698 } 60699
60700 function instance$F($$self, $$props, $$invalidate) { 60701 let { text } = $$props; 60702 let { showLine } = $$props; 60703 let { show } = $$props; 60704 let { isPaymentForm = false } = $$props; 60705 60706 $$self.$$set = $$props => { 60707 if ('text' in $$props) $$invalidate(0, text = $$props.text); 60708 if ('showLine' in $$props) $$invalidate(1, showLine = $$props.showLine); 60709 if ('show' in $$props) $$invalidate(2, show = $$props.show); 60710 if ('isPaymentForm' in $$props) $$invalidate(3, isPaymentForm = $$props.isPaymentForm); 60711 }; 60712 60713 return [text, showLine, show, isPaymentForm]; 60714 } 60715 60716 class Divider extends SvelteComponent { 60717 constructor(options) { 60718 super(); 60719 60720 init(this, options, instance$F, create_fragment$F, safe_not_equal, { 60721 text: 0, 60722 showLine: 1, 60723 show: 2, 60724 isPaymentForm: 3 60725 }); 60726 } 60727 } 60728 60729 const factory$e = { 60730 matches: (sectionElement) => sectionElement.type === elementTypes.DIVIDER, 60731 create: (form, formState, formActions, elementConfig) => ({ 60732 component: Divider, 60733 props: { 60734 text: elementConfig.text, 60735 showLine: elementConfig.showLine, 60736 show: elementConfig.show, 60737 isPaymentForm: form.formType === FormType.PAYMENT, 60738 } 60739 }) 60740 }; 60741 60742 /* src/components/elements/loginLink/LoginLink.svelte generated by Svelte v4.2.12 */ 60743 60744 function create_fragment$E(ctx) { 60745 let div; 60746 let t0; 60747 let t1; 60748 let a; 60749 let t2; 60750 60751 return { 60752 c() { 60753 div = element("div"); 60754 t0 = text(/*text*/ ctx[0]); 60755 t1 = space(); 60756 a = element("a"); 60757 t2 = text(/*linkText*/ ctx[1]); 60758 attr(a, "href", /*url*/ ctx[2]); 60759 attr(a, "class", "svelte-1jmemom"); 60760 attr(div, "class", "zephr-form-login-link svelte-1jmemom"); 60761 toggle_class(div, "zephr-payment-login-link", /*isPaymentForm*/ ctx[3]); 60762 }, 60763 m(target, anchor) { 60764 insert(target, div, anchor); 60765 append(div, t0); 60766 append(div, t1); 60767 append(div, a); 60768 append(a, t2); 60769 }, 60770 p(ctx, [dirty]) { 60771 if (dirty & /*text*/ 1) set_data(t0, /*text*/ ctx[0]); 60772 if (dirty & /*linkText*/ 2) set_data(t2, /*linkText*/ ctx[1]); 60773 60774 if (dirty & /*url*/ 4) { 60775 attr(a, "href", /*url*/ ctx[2]); 60776 } 60777 60778 if (dirty & /*isPaymentForm*/ 8) { 60779 toggle_class(div, "zephr-payment-login-link", /*isPaymentForm*/ ctx[3]); 60780 } 60781 }, 60782 i: noop, 60783 o: noop, 60784 d(detaching) { 60785 if (detaching) { 60786 detach(div); 60787 } 60788 } 60789 }; 60790 } 60791 60792 function instance$E($$self, $$props, $$invalidate) { 60793 let { text } = $$props; 60794 let { linkText } = $$props; 60795 let { url } = $$props; 60796 let { isPaymentForm = false } = $$props; 60797 60798 $$self.$$set = $$props => {
60799 if ('text' in $$props) $$invalidate(0, text = $$props.text); 60800 if ('linkText' in $$props) $$invalidate(1, linkText = $$props.linkText); 60801 if ('url' in $$props) $$invalidate(2, url = $$props.url); 60802 if ('isPaymentForm' in $$props) $$invalidate(3, isPaymentForm = $$props.isPaymentForm); 60803 }; 60804 60805 return [text, linkText, url, isPaymentForm]; 60806 } 60807 60808 class LoginLink extends SvelteComponent { 60809 constructor(options) { 60810 super(); 60811 60812 init(this, options, instance$E, create_fragment$E, safe_not_equal, { 60813 text: 0, 60814 linkText: 1, 60815 url: 2, 60816 isPaymentForm: 3 60817 }); 60818 } 60819 } 60820 60821 const factory$d = { 60822 matches: (sectionElement) => sectionElement.type === elementTypes.LOGIN_LINK, 60823 create: (form, formState, formActions, elementConfig) => ({ 60824 component: LoginLink, 60825 props: { 60826 text: elementConfig.alreadyRegText, 60827 linkText: elementConfig.loginText, 60828 url: elementConfig.url, 60829 isPaymentForm: form.formType === FormType.PAYMENT, 60830 } 60831 }) 60832 }; 60833 60834 const factory$c = { 60835 matches: (sectionElement) => sectionElement.type === elementTypes.BUTTON && sectionElement.config.isLogin, 60836 create: (form, formState, formActions, elementConfig) => ({ 60837 component: Button, 60838 props: { 60839 disabled: formState.isBusy, 60840 text: elementConfig.text, 60841 onClick: () => { 60842 logDataLayerEvent(form, 'zephr_form_button_press', { 60843 sectionId: formState.currentSection.type, 60844 buttonType: 'SUBMIT' 60845 }); 60846 formActions.updateFormState({ 60847 forgotPassword: false, 60848 }); 60849 formActions.jumpToPartStart(partTypes.ACCOUNT_VERIFICATION.type); 60850 }, 60851 isPaymentForm: form.formType === FormType.PAYMENT, 60852 } 60853 }) 60854 }; 60855 60856 const factory$b = { 60857 matches: (sectionElement) => sectionElement.type === elementTypes.BUTTON && sectionElement.config.isCancel, 60858 create: (form, formState, formActions, elementConfig) => ({ 60859 component: Button, 60860 props: { 60861 text: elementConfig.text, 60862 onClick: () => { 60863 logDataLayerEvent(form, 'zephr_form_button_press', { 60864 sectionId: formState.currentSection.type, 60865 buttonType: 'SUBMIT' 60866 }); 60867 formActions.updateFormState({ 60868 confirmCancel: true, 60869 }); 60870 formActions.completeSection(); 60871 }, 60872 } 60873 }) 60874 }; 60875 60876 /* src/components/elements/accountMembershipCode/AccountMembershipCode.svelte generated by Svelte v4.2.12 */ 60877 60878 function create_if_block_1$k(ctx) { 60879 let link; 60880 let current; 60881 link = new Link({ props: { text: /*label*/ ctx[0] } }); 60882 link.$on("linkClick", /*linkClick_handler*/ ctx[10]); 60883 60884 return { 60885 c() { 60886 create_component(link.$$.fragment); 60887 }, 60888 m(target, anchor) { 60889 mount_component(link, target, anchor); 60890 current = true; 60891 }, 60892 p(ctx, dirty) { 60893 const link_changes = {}; 60894 if (dirty & /*label*/ 1) link_changes.text = /*label*/ ctx[0]; 60895 link.$set(link_changes); 60896 }, 60897 i(local) { 60898 if (current) return; 60899 transition_in(link.$$.fragment, local); 60900 current = true; 60901 }, 60902 o(local) { 60903 transition_out(link.$$.fragment, local); 60904 current = false; 60905 }, 60906 d(detaching) { 60907 destroy_component(link, detaching); 60908 } 60909 }; 60910 } 60911 60912 // (23:2) {#if accountMembershipCode || showInput} 60913 function create_if_block$u(ctx) { 60914 let label_1; 60915 let t; 60916 let input; 60917 let current; 60918 60919 label_1 = new Label({ 60920 props: { 60921 forInput: /*id*/ ctx[8], 60922 label: /*label*/ ctx[0] 60923 } 60924 }); 60925 60926 input = new Input({ 60927 props: { 60928 id: /*id*/ ctx[8], 60929 value: /*accountMembershipCode*/ ctx[2], 60930 errorMessage: /*error*/ ctx[3], 60931 placeholder: /*placeholder*/ ctx[1], 60932 onFocus: /*onFocus*/ ctx[5], 60933 onBlur: /*onBlur*/ ctx[6] 60934 } 60935 }); 60936 60937 input.$on("change", /*change_handler*/ ctx[11]); 60938 60939 return { 60940 c() { 60941 create_component(label_1.$$.fragment); 60942 t = space(); 60943 create_component(input.$$.fragment); 60944 }, 60945 m(target, anchor) { 60946 mount_component(label_1, target, anchor); 60947 insert(target, t, anchor); 60948 mount_component(input, target, anchor); 60949 current = true; 60950 }, 60951 p(ctx, dirty) { 60952 const label_1_changes = {};
60953 if (dirty & /*label*/ 1) label_1_changes.label = /*label*/ ctx[0]; 60954 label_1.$set(label_1_changes); 60955 const input_changes = {}; 60956 if (dirty & /*accountMembershipCode*/ 4) input_changes.value = /*accountMembershipCode*/ ctx[2]; 60957 if (dirty & /*error*/ 8) input_changes.errorMessage = /*error*/ ctx[3]; 60958 if (dirty & /*placeholder*/ 2) input_changes.placeholder = /*placeholder*/ ctx[1]; 60959 if (dirty & /*onFocus*/ 32) input_changes.onFocus = /*onFocus*/ ctx[5]; 60960 if (dirty & /*onBlur*/ 64) input_changes.onBlur = /*onBlur*/ ctx[6]; 60961 input.$set(input_changes); 60962 }, 60963 i(local) { 60964 if (current) return; 60965 transition_in(label_1.$$.fragment, local); 60966 transition_in(input.$$.fragment, local); 60967 current = true; 60968 }, 60969 o(local) { 60970 transition_out(label_1.$$.fragment, local); 60971 transition_out(input.$$.fragment, local); 60972 current = false; 60973 }, 60974 d(detaching) { 60975 if (detaching) { 60976 detach(t); 60977 } 60978 60979 destroy_component(label_1, detaching); 60980 destroy_component(input, detaching); 60981 } 60982 }; 60983 } 60984 60985 function create_fragment$D(ctx) { 60986 let div; 60987 let t; 60988 let current; 60989 let if_block0 = !/*showInput*/ ctx[7] && create_if_block_1$k(ctx); 60990 let if_block1 = (/*accountMembershipCode*/ ctx[2] || /*showInput*/ ctx[7]) && create_if_block$u(ctx); 60991 60992 return { 60993 c() { 60994 div = element("div"); 60995 if (if_block0) if_block0.c(); 60996 t = space(); 60997 if (if_block1) if_block1.c(); 60998 attr(div, "class", "zephr-form-account-code-container svelte-1hhep92"); 60999 }, 61000 m(target, anchor) { 61001 insert(target, div, anchor); 61002 if (if_block0) if_block0.m(div, null); 61003 append(div, t); 61004 if (if_block1) if_block1.m(div, null); 61005 current = true; 61006 }, 61007 p(ctx, [dirty]) { 61008 if (!/*showInput*/ ctx[7]) { 61009 if (if_block0) { 61010 if_block0.p(ctx, dirty); 61011 61012 if (dirty & /*showInput*/ 128) { 61013 transition_in(if_block0, 1); 61014 } 61015 } else { 61016 if_block0 = create_if_block_1$k(ctx); 61017 if_block0.c(); 61018 transition_in(if_block0, 1); 61019 if_block0.m(div, t); 61020 } 61021 } else if (if_block0) { 61022 group_outros(); 61023 61024 transition_out(if_block0, 1, 1, () => { 61025 if_block0 = null; 61026 }); 61027 61028 check_outros(); 61029 } 61030 61031 if (/*accountMembershipCode*/ ctx[2] || /*showInput*/ ctx[7]) { 61032 if (if_block1) { 61033 if_block1.p(ctx, dirty); 61034 61035 if (dirty & /*accountMembershipCode, showInput*/ 132) { 61036 transition_in(if_block1, 1); 61037 } 61038 } else { 61039 if_block1 = create_if_block$u(ctx); 61040 if_block1.c(); 61041 transition_in(if_block1, 1); 61042 if_block1.m(div, null); 61043 } 61044 } else if (if_block1) { 61045 group_outros(); 61046 61047 transition_out(if_block1, 1, 1, () => { 61048 if_block1 = null; 61049 }); 61050 61051 check_outros(); 61052 } 61053 }, 61054 i(local) { 61055 if (current) return; 61056 transition_in(if_block0); 61057 transition_in(if_block1); 61058 current = true; 61059 }, 61060 o(local) { 61061 transition_out(if_block0); 61062 transition_out(if_block1); 61063 current = false; 61064 }, 61065 d(detaching) { 61066 if (detaching) { 61067 detach(div); 61068 } 61069 61070 if (if_block0) if_block0.d(); 61071 if (if_block1) if_block1.d(); 61072 } 61073 }; 61074 } 61075 61076 function instance$D($$self, $$props, $$invalidate) { 61077 let { formKey } = $$props; 61078 let { label } = $$props; 61079 let { placeholder } = $$props; 61080 let { accountMembershipCode } = $$props; 61081 let { error = null } = $$props; 61082 let { onChange } = $$props; 61083 let { onFocus } = $$props; 61084 let { onBlur } = $$props; 61085 let showInput = false; 61086 const id = `zephr-form-account-code-${formKey}`; 61087 const linkClick_handler = () =>
61087 $$invalidate(7, showInput = true); 61088 const change_handler = value => onChange(value.detail); 61089 61090 $$self.$$set = $$props => { 61091 if ('formKey' in $$props) $$invalidate(9, formKey = $$props.formKey); 61092 if ('label' in $$props) $$invalidate(0, label = $$props.label); 61093 if ('placeholder' in $$props) $$invalidate(1, placeholder = $$props.placeholder); 61094 if ('accountMembershipCode' in $$props) $$invalidate(2, accountMembershipCode = $$props.accountMembershipCode); 61095 if ('error' in $$props) $$invalidate(3, error = $$props.error); 61096 if ('onChange' in $$props) $$invalidate(4, onChange = $$props.onChange); 61097 if ('onFocus' in $$props) $$invalidate(5, onFocus = $$props.onFocus); 61098 if ('onBlur' in $$props) $$invalidate(6, onBlur = $$props.onBlur); 61099 }; 61100 61101 return [ 61102 label, 61103 placeholder, 61104 accountMembershipCode, 61105 error, 61106 onChange, 61107 onFocus, 61108 onBlur, 61109 showInput, 61110 id, 61111 formKey, 61112 linkClick_handler, 61113 change_handler 61114 ]; 61115 } 61116 61117 class AccountMembershipCode extends SvelteComponent { 61118 constructor(options) { 61119 super(); 61120 61121 init(this, options, instance$D, create_fragment$D, safe_not_equal, { 61122 formKey: 9, 61123 label: 0, 61124 placeholder: 1, 61125 accountMembershipCode: 2, 61126 error: 3, 61127 onChange: 4, 61128 onFocus: 5, 61129 onBlur: 6 61130 }); 61131 } 61132 } 61133 61134 const factory$a = { 61135 matches: (sectionElement) => sectionElement.type === elementTypes.ACCOUNT_MEMBERSHIP_CODE, 61136 create: (form, formState, formActions, elementConfig) => ({ 61137 component: AccountMembershipCode, 61138 props: { 61139 formKey: form.uniqueKey, 61140 label: elementConfig.label, 61141 placeholder: elementConfig.placeholder, 61142 accountMembershipCode: formState.accountMembershipCode, 61143 onChange: (value) => { 61144 formActions.updateFormState({ 61145 accountMembershipCode: value, 61146 serverErrors: [], 61147 }); 61148 logDataLayerEvent(form, 'zephr_form_input_change', { 61149 inputName: `zephr-form-account-code-${form.uniqueKey}`, 61150 sectionId: formState.currentSection.type, 61151 field: 'account-code' 61152 }); 61153 }, 61154 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 61155 inputName: `zephr-form-account-code-${form.uniqueKey}`, 61156 sectionId: formState.currentSection.type, 61157 field: 'account-code' 61158 }), 61159 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 61160 inputName: `zephr-form-account-code-${form.uniqueKey}`, 61161 sectionId: formState.currentSection.type, 61162 field: 'account-code' 61163 }), 61164 } 61165 }) 61166 }; 61167 61168 /* src/components/elements/invitation/Invitation.svelte generated by Svelte v4.2.12 */ 61169 61170 function create_if_block$t(ctx) { 61171 let div; 61172 let successmessage; 61173 let current; 61174 successmessage = new SuccessMessage({ props: { text: /*linkSentText*/ ctx[4] } }); 61175 61176 return { 61177 c() { 61178 div = element("div"); 61179 create_component(successmessage.$$.fragment); 61180 attr(div, "class", "zephr-form-invitation-success-message svelte-1qkv7d3"); 61181 }, 61182 m(target, anchor) { 61183 insert(target, div, anchor); 61184 mount_component(successmessage, div, null); 61185 current = true; 61186 }, 61187 p(ctx, dirty) { 61188 const successmessage_changes = {}; 61189 if (dirty & /*linkSentText*/ 16) successmessage_changes.text = /*linkSentText*/ ctx[4]; 61190 successmessage.$set(successmessage_changes); 61191 }, 61192 i(local) { 61193 if (current) return; 61194 transition_in(successmessage.$$.fragment, local); 61195 current = true; 61196 }, 61197 o(local) { 61198 transition_out(successmessage.$$.fragment, local); 61199 current = false; 61200 }, 61201 d(detaching) { 61202 if (detaching) { 61203 detach(div); 61204 } 61205 61206 destroy_component(successmessage); 61207 } 61208 }; 61209 } 61210 61211 function create_fragment$C(ctx) { 61212 let div4; 61213 let div0; 61214 let t0; 61215 let t1; 61216 let div1; 61217 let t2; 61218 let t3; 61219 let label_1; 61220 let t4; 61221 let div3; 61222 let div2; 61223 let input; 61224 let t5; 61225 let button; 61226 let t6; 61227 let current; 61228
61229 label_1 = new Label({ 61230 props: { 61231 forInput: /*id*/ ctx[14], 61232 label: /*label*/ ctx[2], 61233 isPaymentForm: /*isPaymentForm*/ ctx[11] 61234 } 61235 }); 61236 61237 input = new Input({ 61238 props: { 61239 disabled: /*isBusy*/ ctx[10], 61240 required: true, 61241 id: /*id*/ ctx[14], 61242 value: /*invitationEmail*/ ctx[7] ?? '', 61243 errorMessage: /*error*/ ctx[9], 61244 isPaymentForm: /*isPaymentForm*/ ctx[11], 61245 onFocus: /*onFocus*/ ctx[12], 61246 onBlur: /*onBlur*/ ctx[13] 61247 } 61248 }); 61249 61250 input.$on("change", /*change_handler*/ ctx[16]); 61251 61252 button = new Button({ 61253 props: { 61254 disabled: !isValidEmail(/*invitationEmail*/ ctx[7]) || /*isBusy*/ ctx[10], 61255 text: /*btnText*/ ctx[3], 61256 onClick: /*onSendInviteClick*/ ctx[5], 61257 noMargin: true, 61258 inputHeight: true, 61259 aside: true, 61260 isPaymentForm: /*isPaymentForm*/ ctx[11] 61261 } 61262 }); 61263 61264 let if_block = /*invitationSent*/ ctx[8] && create_if_block$t(ctx); 61265 61266 return { 61267 c() { 61268 div4 = element("div"); 61269 div0 = element("div"); 61270 t0 = text(/*title*/ ctx[0]); 61271 t1 = space(); 61272 div1 = element("div"); 61273 t2 = text(/*description*/ ctx[1]); 61274 t3 = space(); 61275 create_component(label_1.$$.fragment); 61276 t4 = space(); 61277 div3 = element("div"); 61278 div2 = element("div"); 61279 create_component(input.$$.fragment); 61280 t5 = space(); 61281 create_component(button.$$.fragment); 61282 t6 = space(); 61283 if (if_block) if_block.c(); 61284 attr(div0, "class", "zephr-form-invitation-title svelte-1qkv7d3"); 61285 attr(div1, "class", "zephr-form-invitation-description"); 61286 attr(div2, "class", "zephr-form-invitation-input-container svelte-1qkv7d3"); 61287 attr(div3, "class", "zephr-form-relative-container zephr-form-invitation-email svelte-1qkv7d3"); 61288 toggle_class(div3, "zephr-payment-form-relative-container", /*isPaymentForm*/ ctx[11]); 61289 attr(div4, "class", "zephr-form-invitation-container svelte-1qkv7d3"); 61290 }, 61291 m(target, anchor) { 61292 insert(target, div4, anchor); 61293 append(div4, div0); 61294 append(div0, t0); 61295 append(div4, t1); 61296 append(div4, div1); 61297 append(div1, t2); 61298 append(div4, t3); 61299 mount_component(label_1, div4, null); 61300 append(div4, t4); 61301 append(div4, div3); 61302 append(div3, div2); 61303 mount_component(input, div2, null); 61304 append(div3, t5); 61305 mount_component(button, div3, null); 61306 append(div4, t6); 61307 if (if_block) if_block.m(div4, null); 61308 current = true; 61309 }, 61310 p(ctx, [dirty]) { 61311 if (!current || dirty & /*title*/ 1) set_data(t0, /*title*/ ctx[0]); 61312 if (!current || dirty & /*description*/ 2) set_data(t2, /*description*/ ctx[1]); 61313 const label_1_changes = {}; 61314 if (dirty & /*label*/ 4) label_1_changes.label = /*label*/ ctx[2]; 61315 if (dirty & /*isPaymentForm*/ 2048) label_1_changes.isPaymentForm = /*isPaymentForm*/ ctx[11]; 61316 label_1.$set(label_1_changes); 61317 const input_changes = {}; 61318 if (dirty & /*isBusy*/ 1024) input_changes.disabled = /*isBusy*/ ctx[10]; 61319 if (dirty & /*invitationEmail*/ 128) input_changes.value = /*invitationEmail*/ ctx[7] ?? ''; 61320 if (dirty & /*error*/ 512) input_changes.errorMessage = /*error*/ ctx[9]; 61321 if (dirty & /*isPaymentForm*/ 2048) input_changes.isPaymentForm = /*isPaymentForm*/ ctx[11]; 61322 if (dirty & /*onFocus*/ 4096) input_changes.onFocus = /*onFocus*/ ctx[12]; 61323 if (dirty & /*onBlur*/ 8192) input_changes.onBlur = /*onBlur*/ ctx[13]; 61324 input.$set(input_changes); 61325 const button_changes = {}; 61326 if (dirty & /*invitationEmail, isBusy*/ 1152) button_changes.disabled = !isValidEmail(/*invitationEmail*/ ctx[7]) || /*isBusy*/ ctx[10]; 61327 if (dirty & /*btnText*/ 8) button_changes.text = /*btnText*/ ctx[3]; 61328 if (dirty & /*onSendInviteClick*/ 32) button_changes.onClick = /*onSendInviteClick*/ ctx[5]; 61329 if (dirty & /*isPaymentForm*/ 2048) button_changes.isPaymentForm = /*isPaymentForm*/ ctx[11]; 61330 button.$set(button_changes); 61331 61332 if (!current || dirty & /*isPaymentForm*/ 2048) { 61333 toggle_class(div3, "zephr-payment-form-relative-container", /*isPaymentForm*/ ctx[11]); 61334 } 61335 61336 if (/*invitationSent*/ ctx[8]) { 61337 if (if_block) { 61338 if_block.p(ctx, dirty); 61339
61340 if (dirty & /*invitationSent*/ 256) { 61341 transition_in(if_block, 1); 61342 } 61343 } else { 61344 if_block = create_if_block$t(ctx); 61345 if_block.c(); 61346 transition_in(if_block, 1); 61347 if_block.m(div4, null); 61348 } 61349 } else if (if_block) { 61350 group_outros(); 61351 61352 transition_out(if_block, 1, 1, () => { 61353 if_block = null; 61354 }); 61355 61356 check_outros(); 61357 } 61358 }, 61359 i(local) { 61360 if (current) return; 61361 transition_in(label_1.$$.fragment, local); 61362 transition_in(input.$$.fragment, local); 61363 transition_in(button.$$.fragment, local); 61364 transition_in(if_block); 61365 current = true; 61366 }, 61367 o(local) { 61368 transition_out(label_1.$$.fragment, local); 61369 transition_out(input.$$.fragment, local); 61370 transition_out(button.$$.fragment, local); 61371 transition_out(if_block); 61372 current = false; 61373 }, 61374 d(detaching) { 61375 if (detaching) { 61376 detach(div4); 61377 } 61378 61379 destroy_component(label_1); 61380 destroy_component(input); 61381 destroy_component(button); 61382 if (if_block) if_block.d(); 61383 } 61384 }; 61385 } 61386 61387 function instance$C($$self, $$props, $$invalidate) { 61388 let { formKey } = $$props; 61389 let { title } = $$props; 61390 let { description } = $$props; 61391 let { label } = $$props; 61392 let { btnText } = $$props; 61393 let { linkSentText } = $$props; 61394 let { onSendInviteClick } = $$props; 61395 let { onChange } = $$props; 61396 let { invitationEmail } = $$props; 61397 let { invitationSent } = $$props; 61398 let { error = null } = $$props; 61399 let { isBusy } = $$props; 61400 let { isPaymentForm = false } = $$props; 61401 let { onFocus } = $$props; 61402 let { onBlur } = $$props; 61403 const id = `zephr-form-invitation-email-${formKey}`; 61404 const change_handler = ({ detail }) => onChange(detail); 61405 61406 $$self.$$set = $$props => {
61407 if ('formKey' in $$props) $$invalidate(15, formKey = $$props.formKey); 61408 if ('title' in $$props) $$invalidate(0, title = $$props.title); 61409 if ('description' in $$props) $$invalidate(1, description = $$props.description); 61410 if ('label' in $$props) $$invalidate(2, label = $$props.label); 61411 if ('btnText' in $$props) $$invalidate(3, btnText = $$props.btnText); 61412 if ('linkSentText' in $$props) $$invalidate(4, linkSentText = $$props.linkSentText); 61413 if ('onSendInviteClick' in $$props) $$invalidate(5, onSendInviteClick = $$props.onSendInviteClick); 61414 if ('onChange' in $$props) $$invalidate(6, onChange = $$props.onChange); 61415 if ('invitationEmail' in $$props) $$invalidate(7, invitationEmail = $$props.invitationEmail); 61416 if ('invitationSent' in $$props) $$invalidate(8, invitationSent = $$props.invitationSent); 61417 if ('error' in $$props) $$invalidate(9, error = $$props.error); 61418 if ('isBusy' in $$props) $$invalidate(10, isBusy = $$props.isBusy); 61419 if ('isPaymentForm' in $$props) $$invalidate(11, isPaymentForm = $$props.isPaymentForm);
61420 if ('onFocus' in $$props) $$invalidate(12, onFocus = $$props.onFocus); 61421 if ('onBlur' in $$props) $$invalidate(13, onBlur = $$props.onBlur); 61422 }; 61423 61424 return [ 61425 title, 61426 description, 61427 label, 61428 btnText, 61429 linkSentText, 61430 onSendInviteClick, 61431 onChange, 61432 invitationEmail, 61433 invitationSent, 61434 error, 61435 isBusy, 61436 isPaymentForm, 61437 onFocus, 61438 onBlur, 61439 id, 61440 formKey, 61441 change_handler 61442 ]; 61443 } 61444 61445 class Invitation extends SvelteComponent { 61446 constructor(options) { 61447 super(); 61448 61449 init(this, options, instance$C, create_fragment$C, safe_not_equal, { 61450 formKey: 15, 61451 title: 0, 61452 description: 1, 61453 label: 2, 61454 btnText: 3, 61455 linkSentText: 4, 61456 onSendInviteClick: 5, 61457 onChange: 6, 61458 invitationEmail: 7, 61459 invitationSent: 8, 61460 error: 9, 61461 isBusy: 10, 61462 isPaymentForm: 11, 61463 onFocus: 12, 61464 onBlur: 13 61465 }); 61466 } 61467 } 61468 61469 const mapToError = (e) => { 61470 if (e?.status === 403 && e?.message?.includes('you do not have access to')) { 61471 return ServerError.INVITATION_FAILED_NO_PRODUCT_ACCESS; 61472 } 61473 if (e?.status === 400 && e?.message?.includes('Invalid recipient email')) { 61474 return ServerError.INVITATION_FAILED_INVALID_EMAIL; 61475 } 61476 if (e?.status === 400 && e?.message?.includes('reached the configured limit')) { 61477 return ServerError.INVITATION_FAILED_LIMIT_REACHED; 61478 } 61479 if (e?.status === 409) { 61480 return ServerError.INVITATION_FAILED_DUPLICATE_EMAIL; 61481 } 61482 return ServerError.INVITATION_FAILED_UNKNOWN; 61483 }; 61484 const getUserProfile = (formActions) => request('blaize/profile', { 61485 method: "GET" 61486 }, formActions) 61487 .then(response => response.json()); 61488 const convertMapping = (mapping, profile) => (mapping ?? []).reduce((acc, curr) => { 61489 const value = profile[curr.attrSlug]; 61490 return { ...acc, [curr.fieldName]: value }; 61491 }, {}); 61492 const sendInvitationEmail = async (form, formState, formActions) => { 61493 let profile; 61494 if (formState.userExists) { 61495 profile = await getUserProfile(formActions); 61496 } 61497 else { 61498 profile = formState.userAttributes; 61499 } 61500 const profileConverted = convertMapping(formConfigAs(form).invitationMetadata.mapping, profile); 61501 const response = await request('zephr/public/products/v1/shares/invitations/emails', { 61502 method: "POST", 61503 bodyObject: { 61504 product_id: formState.paymentOption.productId, 61505 email_address: formState.invitationEmail, 61506 base_url: formConfigAs(form).invitationMetadata.url, 61507 meta_data: profileConverted, 61508 } 61509 }, formActions); 61510 const responseJson = (await response.json()); 61511 if (response.ok) { 61512 formActions.updateFormState({ 61513 invitationSent: true, 61514 invitationEmail: '', 61515 }); 61516 setTimeout(() => { 61517 formActions.updateFormState({ 61518 invitationSent: false, 61519 }); 61520 }, 3000); 61521 } 61522 else { 61523 const serverError = mapToError(responseJson); 61524 logDataLayerEvent(form, 'zephr_form_error', { 61525 error: ServerError[serverError], 61526 }); 61527 formActions.updateFormState({ 61528 invitationSent: false, 61529 serverErrors: [serverError], 61530 }); 61531 } 61532 }; 61533 61534 const factory$9 = { 61535 matches: (sectionElement) => sectionElement.type === elementTypes.INVITATION, 61536 create: (form, formState, formActions, elementConfig) => { 61537 if (formState.paymentOption?.product_sharing_limit > 0) { 61538 return { 61539 component: Invitation, 61540 props: { 61541 formKey: form.uniqueKey, 61542 title: elementConfig.title, 61543 description: elementConfig.description, 61544 label: elementConfig.label, 61545 btnText: elementConfig.btnText, 61546 linkSentText: elementConfig.linkSentText, 61547 onSendInviteClick: () => { 61548 logDataLayerEvent(form, 'zephr_form_button_press', { 61549 sectionId: formState.currentSection.type, 61550 buttonType: 'SUBMIT' 61551 }); 61552 void sendInvitationEmail(form, formState, formActions); 61553 }, 61554 onChange: (value) => { 61555 formActions.updateFormState({
61556 invitationEmail: value, 61557 serverErrors: [], 61558 }); 61559 logDataLayerEvent(form, 'zephr_form_input_change', { 61560 inputName: `zephr-form-invitation-email-${form.uniqueKey}`, 61561 sectionId: formState.currentSection.type, 61562 field: 'invitation-email' 61563 }); 61564 }, 61565 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 61566 inputName: `zephr-form-invitation-email-${form.uniqueKey}`, 61567 sectionId: formState.currentSection.type, 61568 field: 'invitation-email' 61569 }), 61570 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 61571 inputName: `zephr-form-invitation-email-${form.uniqueKey}`, 61572 sectionId: formState.currentSection.type, 61573 field: 'invitation-email' 61574 }), 61575 invitationEmail: formState.invitationEmail, 61576 invitationSent: formState.invitationSent, 61577 isBusy: formState.isBusy, 61578 isPaymentForm: form.formType === FormType.PAYMENT, 61579 } 61580 }; 61581 } 61582 return { 61583 component: null, 61584 props: {}, 61585 }; 61586 } 61587 }; 61588 61589 /* src/components/elements/payment/EmptyPreLoader.svelte generated by Svelte v4.2.12 */ 61590 61591 class EmptyPreLoader extends SvelteComponent { 61592 constructor(options) { 61593 super(); 61594 init(this, options, null, null, safe_not_equal, {}); 61595 } 61596 } 61597 61598 const factory$8 = { 61599 matches: (sectionElement) => sectionElement.type === elementTypes.PAYMENT_PRE_LOADER, 61600 create: (form, _, __) => { 61601 const paymentProvider = paymentProviderFor(form.organisationConfiguration.paymentProvider); 61602 if (paymentProvider.preLoaderComponent == null) { 61603 return { 61604 component: EmptyPreLoader, 61605 props: {}, 61606 }; 61607 } 61608 let component; 61609 const formConfig = formConfigAs(form); 61610 if (form.formType === FormType.CHANGE_SUBSCRIPTION && formConfig.allowNoPaymentMethodUpgrade) { 61611 const environment = formConfig.paymentOptions?.[0]?.virtualEnvironment || 'live'; 61612 component = paymentProvider.preLoaderComponent(formConfig.paymentMethodSetupFormConfig[environment]); 61613 } 61614 else { 61615 component = paymentProvider.preLoaderComponent(formConfig.paymentProviderFormConfig); 61616 } 61617 return { 61618 component, 61619 props: { 61620 onMountCallback: () => paymentProvider.preLoader() 61621 }, 61622 }; 61623 } 61624 }; 61625 61626 /* src/components/elements/templateComponent/TemplateComponent.svelte generated by Svelte v4.2.12 */ 61627 61628 function create_fragment$B(ctx) { 61629 let div; 61630 61631 return { 61632 c() { 61633 div = element("div"); 61634 }, 61635 m(target, anchor) { 61636 insert(target, div, anchor); 61637 div.innerHTML = /*html*/ ctx[0]; 61638 }, 61639 p(ctx, [dirty]) { 61640 if (dirty & /*html*/ 1) div.innerHTML = /*html*/ ctx[0]; }, 61641 i: noop, 61642 o: noop, 61643 d(detaching) { 61644 if (detaching) { 61645 detach(div); 61646 } 61647 } 61648 }; 61649 } 61650 61651 function instance$B($$self, $$props, $$invalidate) { 61652 let { html } = $$props; 61653 61654 $$self.$$set = $$props => {
61655 if ('html' in $$props) $$invalidate(0, html = $$props.html); 61656 }; 61657 61658 return [html]; 61659 } 61660 61661 class TemplateComponent extends SvelteComponent { 61662 constructor(options) { 61663 super(); 61664 init(this, options, instance$B, create_fragment$B, safe_not_equal, { html: 0 }); 61665 } 61666 } 61667 61668 const randomId = () => (Math.random() + 1).toString(36).substring(7); 61669 61670 // Unique ID for this instance of this form being rendered. 61671 const formInstanceId = randomId(); 61672 // Flatten the extra scope variables from DO and remove null values, as for null values the default 61673 // should be used 61674 const extractDoScopeVariables = (formState) => { 61675 if (!formState.dynamicOfferResult) { 61676 return {}; 61677 } 61678 return Object.entries({ 61679 tagline: formState.dynamicOfferResult.tagline, 61680 ...(formState.dynamicOfferResult.custom ?? {}) 61681 }).reduce((acc, [key, value]) => { 61682 if (key && value != null) { 61683 acc[key] = value; 61684 } 61685 return acc; 61686 }, {}); 61687 }; 61688 const renderTemplateComponent = (form, formState, formActions, templateElement) => { 61689 // Load the resolved template values 61690 const templateContent = (form.resolvedComponentTemplates ?? []).find(c => c.id === templateElement.templateId); 61691 if (!templateContent) { 61692 console.warn(`No component template found for id '${templateElement.templateId}'`); 61693 return ''; 61694 } 61695 // Pre-render 61696 const templateForm = prepareForm(form, formState, formActions, templateElement, templateContent); 61697 const preRenderScope = { 61698 ...(templateDefaultVariableScope(templateContent, false)), 61699 ...(templateElement.templateValues ?? {}), 61700 ...(extractDoScopeVariables(formState)), 61701 zephrForm: templateForm, 61702 zephrOutcomeId: form.outcomeId, 61703 zephrRuleId: form.ruleId, 61704 }; 61705 const scriptResult = runTemplateScript(form, formState, templateElement, templateForm, templateContent.preRenderScript, preRenderScope); 61706 // Assemble pre-render results for template rendering 61707 const scope = { 61708 ...preRenderScope, 61709 ...(scriptResult.scope ?? {}) 61710 }; 61711 templateForm.actions = scriptResult.actions ?? {}; 61712 attachFormRefToWindow(templateForm); 61713 // Render the template 61714 try { 61715 const html = mustache.render(` 61716 ${templateContent.css ? `<style>${templateContent.css}</style>` : ''} 61717 ${templateContent.html ?? ""} 61718 `, scope); 61719 return html; 61720 } 61721 catch (e) { 61722 console.error('Error rendering mustache template', e); 61723 return ''; 61724 } 61725 }; 61726 const templateDefaultVariableScope = (template, paymentOptionLevel) => (template.templateVariables ?? []).reduce((prev, variable) => (variable.defaultValue == null || variable.paymentOptionLevel != paymentOptionLevel ? prev : { 61727 ...prev, 61728 [variable.key]: variable.defaultValue 61729 }), {}); 61730 const attachFormRefToWindow = (templateForm) => { 61731 if (!window.Zephr) { 61732 window.Zephr = {}; 61733 } 61734 if (!window.Zephr.forms) { 61735 window.Zephr.forms = {}; 61736 } 61737 window.Zephr.forms[templateForm.formInstanceId] = templateForm; 61738 }; 61739 const runTemplateScript = (form, formState, templateElement, templateForm, script, scope) => { 61740 if (!script) { 61741 return { 61742 scope: {}, 61743 actions: {} 61744 }; 61745 } 61746 try { 61747 // eslint-disable-next-line @typescript-eslint/no-implied-eval 61748 const templateScript = new Function('state', 'form', 'scope', script); 61749 const customState = (formState.customComponentState ?? {})[templateElement.id ?? '_']; 61750 const customStateWithDo = formState.dynamicOfferResult ? { 61751 ...(customState ?? {}), 61752 dynamicOfferResult: filterChangeSubDynamicOfferResponse(formState.dynamicOfferResult, form, formState) 61753 } : customState; 61754 return templateScript(customStateWithDo, templateForm, scope); 61755 } 61756 catch (e) { 61757 console.error('Error evaluating pre-render script', e); 61758 return { 61759 scope: { 61760 'error': e 61761 }, 61762 actions: {} 61763 }; 61764 } 61765 }; 61766 const setState = (formState, formActions, elementId) => (state) => { 61767 formActions.updateFormState({ 61768 customComponentState: { 61769 ...(formState.customComponentState ?? {}), 61770 [elementId]: { 61771 ...((formState.customComponentState ?? {})[elementId] ?? {}), 61772 ...(state ?? {}) 61773 } 61774 } 61775 }); 61776 }; 61777 const selectPaymentOption = (form, formActions, formState, isDynamicOffer) => (productId, slug) => { 61778 let paymentOption; 61779 if (isDynamicOffer) { 61780 const product = formState 61781 .dynamicOfferResult.products.find((prod) => prod.id === productId); 61782 const paymentPlan = product 61783 ?.paymentPlans.find(plan => plan.planId === slug); 61784 paymentOption = { 61785 slug: paymentPlan.planId, 61786 productId: product.id, 61787 label: product.label,
61788 currencyCode: paymentPlan.charges[0].prices[0].currency, 61789 terms: paymentPlan.additionalPlanData?.terms, 61790 termsAndConditions: paymentPlan.additionalPlanData?.termsAndConditions, 61791 triggerOffsets: paymentPlan.additionalPlanData?.triggerOffsets, 61792 changeSubscriptionTriggerOffsets: paymentPlan.additionalPlanData?.changeSubscriptionTriggerOffsets, 61793 autoRenewConfig: paymentPlan.additionalPlanData?.autoRenewConfig || 'auto_renew', 61794 autoRenewToggleLabel: paymentPlan.additionalPlanData?.autoRenewToggleLabel 61795 }; 61796 } 61797 else { 61798 paymentOption = formConfigAs(form) 61799 .paymentOptions 61800 ?.find(o => o.productId === productId && o.slug === slug); 61801 } 61802 if (!paymentOption) { 61803 console.warn(`No payment option exists for ${productId} ${slug}.`); 61804 return; 61805 } 61806 const paymentOptionKey = `${paymentOption.productId}-${paymentOption.slug}`; 61807 const updateState = { 61808 paymentOption: paymentOption, 61809 serverErrors: [], 61810 billingAddress: { 61811 country: null, 61812 postalCode: null, 61813 } 61814 }; 61815 // Only initialize auto-renew state for payment options with custom_toggle config 61816 if (paymentOption.autoRenewConfig === 'custom_toggle') { 61817 updateState.paymentOptionAutoRenew = { 61818 ...formState.paymentOptionAutoRenew, 61819 [paymentOptionKey]: paymentOption.terms?.autoRenew ?? false 61820 }; 61821 } 61822 formActions.updateFormState(updateState); 61823 if (form.organisationConfiguration.trackFormDataLayerEvents) { 61824 logDataLayerEvent(form, 'zephr_form_button_press', { 61825 sectionId: formState.currentSection.type, 61826 buttonType: 'SUBMIT' 61827 }); 61828 } 61829 formActions.completeSection(); 61830 }; 61831 const prepareForm = (form, formState, formActions, templateElement, template) => { 61832 const isDynamicOffer = !!formConfigAs(form).dynamicOffer?.id; 61833 const paymentOptions = (formConfigAs(form).paymentOptions ?? []).map((p, i) => ({ 61834 slug: p.slug, 61835 productId: p.productId, 61836 label: p.label, 61837 price: p.price, 61838 currencyCode: p.currencyCode, 61839 formattedPrice: formatCurrency(p.price, p.currencyCode), 61840 index: i, 61841 ...(templateDefaultVariableScope(template, true)), 61842 ...(p.templateValues ?? {}), 61843 })); 61844 return { 61845 formId: form.id, 61846 formInstanceId, 61847 paymentOptions: paymentOptions, 61848 ref: `window.Zephr.forms['${formInstanceId}']`, 61849 setState: setState(formState, formActions, templateElement.id ?? '_'), 61850 getState: () => formActions.getFormState(), 61851 selectPaymentOption: selectPaymentOption(form, formActions, formState, isDynamicOffer) 61852 }; 61853 }; 61854 61855 const factory$7 = { 61856 matches: (sectionElement) => sectionElement.type === elementTypes.TEMPLATE_COMPONENT, 61857 create: (form, formState, formActions, elementConfig) => { 61858 const renderedHtml = renderTemplateComponent(form, formState, formActions, elementConfig); 61859 return { 61860 component: TemplateComponent, 61861 props: { 61862 html: renderedHtml 61863 } 61864 }; 61865 } 61866 }; 61867 61868 /* src/components/elements/subscriptionSelect/SubscriptionOption.svelte generated by Svelte v4.2.12 */ 61869 61870 function create_if_block_3$8(ctx) { 61871 let div; 61872 let h3; 61873 let t_value = /*subscription*/ ctx[0].planLabel + ""; 61874 let t; 61875 61876 return { 61877 c() { 61878 div = element("div"); 61879 h3 = element("h3"); 61880 t = text(t_value); 61881 attr(div, "class", "plan-label"); 61882 }, 61883 m(target, anchor) { 61884 insert(target, div, anchor); 61885 append(div, h3); 61886 append(h3, t); 61887 }, 61888 p(ctx, dirty) { 61889 if (dirty & /*subscription*/ 1 && t_value !== (t_value = /*subscription*/ ctx[0].planLabel + "")) set_data(t, t_value); 61890 }, 61891 d(detaching) { 61892 if (detaching) { 61893 detach(div); 61894 } 61895 } 61896 }; 61897 } 61898 61899 // (26:6) {#if subscription.amount && amountLabel} 61900 function create_if_block_2$c(ctx) { 61901 let hr; 61902 let t0; 61903 let div2; 61904 let div0; 61905 let t1; 61906 let t2; 61907 let div1; 61908 let t3_value = /*subscription*/ ctx[0].amount + ""; 61909 let t3; 61910 61911 return { 61912 c() { 61913 hr = element("hr"); 61914 t0 = space(); 61915 div2 = element("div"); 61916 div0 = element("div"); 61917 t1 = text(/*amountLabel*/ ctx[2]); 61918 t2 = space(); 61919 div1 = element("div"); 61920 t3 = text(t3_value); 61921 attr(hr, "class", "svelte-1gr56ov"); 61922 attr(div0, "class", "info-label svelte-1gr56ov"); 61923 attr(div1, "class", "info svelte-1gr56ov"); 61924 attr(div2, "class", "info-row svelte-1gr56ov"); 61925 }, 61926 m(target, anchor) {
61927 insert(target, hr, anchor); 61928 insert(target, t0, anchor); 61929 insert(target, div2, anchor); 61930 append(div2, div0); 61931 append(div0, t1); 61932 append(div2, t2); 61933 append(div2, div1); 61934 append(div1, t3); 61935 }, 61936 p(ctx, dirty) { 61937 if (dirty & /*amountLabel*/ 4) set_data(t1, /*amountLabel*/ ctx[2]); 61938 if (dirty & /*subscription*/ 1 && t3_value !== (t3_value = /*subscription*/ ctx[0].amount + "")) set_data(t3, t3_value); 61939 }, 61940 d(detaching) { 61941 if (detaching) { 61942 detach(hr); 61943 detach(t0); 61944 detach(div2); 61945 } 61946 } 61947 }; 61948 } 61949 61950 // (37:4) {#if subscription.nextBillingTime && nextBillingDateLabel} 61951 function create_if_block_1$j(ctx) { 61952 let hr; 61953 let t0; 61954 let div2; 61955 let div0; 61956 let t1; 61957 let t2; 61958 let div1; 61959 let t3_value = /*subscription*/ ctx[0].nextBillingTime + ""; 61960 let t3; 61961 61962 return { 61963 c() { 61964 hr = element("hr"); 61965 t0 = space(); 61966 div2 = element("div"); 61967 div0 = element("div"); 61968 t1 = text(/*nextBillingDateLabel*/ ctx[3]); 61969 t2 = space(); 61970 div1 = element("div"); 61971 t3 = text(t3_value); 61972 attr(hr, "class", "svelte-1gr56ov"); 61973 attr(div0, "class", "info-label svelte-1gr56ov"); 61974 attr(div1, "class", "info svelte-1gr56ov"); 61975 attr(div2, "class", "info-row svelte-1gr56ov"); 61976 }, 61977 m(target, anchor) { 61978 insert(target, hr, anchor); 61979 insert(target, t0, anchor); 61980 insert(target, div2, anchor); 61981 append(div2, div0); 61982 append(div0, t1); 61983 append(div2, t2); 61984 append(div2, div1); 61985 append(div1, t3); 61986 }, 61987 p(ctx, dirty) { 61988 if (dirty & /*nextBillingDateLabel*/ 8) set_data(t1, /*nextBillingDateLabel*/ ctx[3]); 61989 if (dirty & /*subscription*/ 1 && t3_value !== (t3_value = /*subscription*/ ctx[0].nextBillingTime + "")) set_data(t3, t3_value); 61990 }, 61991 d(detaching) { 61992 if (detaching) { 61993 detach(hr); 61994 detach(t0); 61995 detach(div2); 61996 } 61997 } 61998 }; 61999 } 62000 62001 // (53:6) {#if subscription.cannotBeChanged} 62002 function create_if_block$s(ctx) { 62003 let div; 62004 62005 return { 62006 c() { 62007 div = element("div"); 62008 attr(div, "class", "change-disabled-label svelte-1gr56ov"); 62009 }, 62010 m(target, anchor) { 62011 insert(target, div, anchor); 62012 div.innerHTML = /*noChangePlanMappingMessage*/ ctx[4]; 62013 }, 62014 p(ctx, dirty) { 62015 if (dirty & /*noChangePlanMappingMessage*/ 16) div.innerHTML = /*noChangePlanMappingMessage*/ ctx[4]; }, 62016 d(detaching) { 62017 if (detaching) { 62018 detach(div); 62019 } 62020 } 62021 }; 62022 } 62023 62024 function create_fragment$A(ctx) { 62025 let div3; 62026 let div2; 62027 let div1; 62028 let div0; 62029 let h2; 62030 let t0_value = /*subscription*/ ctx[0].productLabel + ""; 62031 let t0; 62032 let t1; 62033 let t2; 62034 let t3; 62035 let t4; 62036 let button; 62037 let t5; 62038 let div2_style_value; 62039 let current; 62040 let mounted; 62041 let dispose; 62042 let if_block0 = /*subscription*/ ctx[0].planLabel && create_if_block_3$8(ctx); 62043 let if_block1 = /*subscription*/ ctx[0].amount && /*amountLabel*/ ctx[2] && create_if_block_2$c(ctx); 62044 let if_block2 = /*subscription*/ ctx[0].nextBillingTime && /*nextBillingDateLabel*/ ctx[3] && create_if_block_1$j(ctx); 62045 62046 button = new Button({ 62047 props: { 62048 disabled: /*subscription*/ ctx[0].cannotBeChanged, 62049 text: /*selectButtonText*/ ctx[1] ?? "Select", 62050 onClick: /*onSelect*/ ctx[5] 62051 } 62052 }); 62053 62054 let if_block3 = /*subscription*/ ctx[0].cannotBeChanged && create_if_block$s(ctx); 62055 62056 return { 62057 c() { 62058 div3 = element("div"); 62059 div2 = element("div"); 62060 div1 = element("div"); 62061 div0 = element("div"); 62062 h2 = element("h2"); 62063 t0 = text(t0_value); 62064 t1 = space(); 62065 if (if_block0) if_block0.c(); 62066 t2 = space(); 62067 if (if_block1) if_block1.c(); 62068 t3 = space(); 62069 if (if_block2) if_block2.c(); 62070 t4 = space(); 62071 create_component(button.$$.fragment); 62072 t5 = space(); 62073 if (if_block3) if_block3.c(); 62074 attr(div0, "class", "subscription-option-product-label"); 62075 attr(div1, "class", "inner-box svelte-1gr56ov"); 62076 attr(div2, "class", "subscription-option-box"); 62077 attr(div2, "aria-hidden", "true"); 62078 62079 attr(div2, "style", div2_style_value = /*subscription*/ ctx[0].cannotBeChanged 62080 ? "" 62081 : "cursor: pointer;"); 62082 62083 attr(div3, "class", "subscription-option-wrapper svelte-1gr56ov"); 62084 }, 62085 m(target, anchor) {
62086 insert(target, div3, anchor); 62087 append(div3, div2); 62088 append(div2, div1); 62089 append(div1, div0); 62090 append(div0, h2); 62091 append(h2, t0); 62092 append(div1, t1); 62093 if (if_block0) if_block0.m(div1, null); 62094 append(div1, t2); 62095 if (if_block1) if_block1.m(div1, null); 62096 append(div1, t3); 62097 if (if_block2) if_block2.m(div1, null); 62098 append(div1, t4); 62099 mount_component(button, div1, null); 62100 append(div1, t5); 62101 if (if_block3) if_block3.m(div1, null); 62102 current = true; 62103 62104 if (!mounted) { 62105 dispose = listen(div2, "click", self(prevent_default(function () { 62106 if (is_function(/*onSelect*/ ctx[5])) /*onSelect*/ ctx[5].apply(this, arguments); 62107 }))); 62108 62109 mounted = true; 62110 } 62111 }, 62112 p(new_ctx, [dirty]) { 62113 ctx = new_ctx; 62114 if ((!current || dirty & /*subscription*/ 1) && t0_value !== (t0_value = /*subscription*/ ctx[0].productLabel + "")) set_data(t0, t0_value); 62115 62116 if (/*subscription*/ ctx[0].planLabel) { 62117 if (if_block0) { 62118 if_block0.p(ctx, dirty); 62119 } else { 62120 if_block0 = create_if_block_3$8(ctx); 62121 if_block0.c(); 62122 if_block0.m(div1, t2); 62123 } 62124 } else if (if_block0) { 62125 if_block0.d(1); 62126 if_block0 = null; 62127 } 62128 62129 if (/*subscription*/ ctx[0].amount && /*amountLabel*/ ctx[2]) { 62130 if (if_block1) { 62131 if_block1.p(ctx, dirty); 62132 } else { 62133 if_block1 = create_if_block_2$c(ctx); 62134 if_block1.c(); 62135 if_block1.m(div1, t3); 62136 } 62137 } else if (if_block1) { 62138 if_block1.d(1); 62139 if_block1 = null; 62140 } 62141 62142 if (/*subscription*/ ctx[0].nextBillingTime && /*nextBillingDateLabel*/ ctx[3]) { 62143 if (if_block2) { 62144 if_block2.p(ctx, dirty); 62145 } else { 62146 if_block2 = create_if_block_1$j(ctx); 62147 if_block2.c(); 62148 if_block2.m(div1, t4); 62149 } 62150 } else if (if_block2) { 62151 if_block2.d(1); 62152 if_block2 = null; 62153 } 62154 62155 const button_changes = {}; 62156 if (dirty & /*subscription*/ 1) button_changes.disabled = /*subscription*/ ctx[0].cannotBeChanged; 62157 if (dirty & /*selectButtonText*/ 2) button_changes.text = /*selectButtonText*/ ctx[1] ?? "Select"; 62158 if (dirty & /*onSelect*/ 32) button_changes.onClick = /*onSelect*/ ctx[5]; 62159 button.$set(button_changes); 62160 62161 if (/*subscription*/ ctx[0].cannotBeChanged) { 62162 if (if_block3) { 62163 if_block3.p(ctx, dirty); 62164 } else { 62165 if_block3 = create_if_block$s(ctx); 62166 if_block3.c(); 62167 if_block3.m(div1, null); 62168 } 62169 } else if (if_block3) { 62170 if_block3.d(1); 62171 if_block3 = null; 62172 } 62173 62174 if (!current || dirty & /*subscription*/ 1 && div2_style_value !== (div2_style_value = /*subscription*/ ctx[0].cannotBeChanged 62175 ? "" 62176 : "cursor: pointer;")) { 62177 attr(div2, "style", div2_style_value); 62178 } 62179 }, 62180 i(local) { 62181 if (current) return; 62182 transition_in(button.$$.fragment, local); 62183 current = true; 62184 }, 62185 o(local) { 62186 transition_out(button.$$.fragment, local); 62187 current = false; 62188 }, 62189 d(detaching) { 62190 if (detaching) { 62191 detach(div3); 62192 } 62193 62194 if (if_block0) if_block0.d(); 62195 if (if_block1) if_block1.d(); 62196 if (if_block2) if_block2.d(); 62197 destroy_component(button); 62198 if (if_block3) if_block3.d(); 62199 mounted = false; 62200 dispose(); 62201 } 62202 }; 62203 } 62204 62205 function instance$A($$self, $$props, $$invalidate) { 62206 let { subscription } = $$props; 62207 let { selectButtonText } = $$props; 62208 let { amountLabel } = $$props; 62209 let { nextBillingDateLabel } = $$props; 62210 let { noChangePlanMappingMessage } = $$props; 62211 let { onSelect } = $$props; 62212 62213 $$self.$$set = $$props => {
62214 if ('subscription' in $$props) $$invalidate(0, subscription = $$props.subscription); 62215 if ('selectButtonText' in $$props) $$invalidate(1, selectButtonText = $$props.selectButtonText); 62216 if ('amountLabel' in $$props) $$invalidate(2, amountLabel = $$props.amountLabel); 62217 if ('nextBillingDateLabel' in $$props) $$invalidate(3, nextBillingDateLabel = $$props.nextBillingDateLabel); 62218 if ('noChangePlanMappingMessage' in $$props) $$invalidate(4, noChangePlanMappingMessage = $$props.noChangePlanMappingMessage); 62219 if ('onSelect' in $$props) $$invalidate(5, onSelect = $$props.onSelect); 62220 }; 62221 62222 return [ 62223 subscription, 62224 selectButtonText, 62225 amountLabel, 62226 nextBillingDateLabel, 62227 noChangePlanMappingMessage, 62228 onSelect 62229 ]; 62230 } 62231 62232 class SubscriptionOption extends SvelteComponent { 62233 constructor(options) { 62234 super(); 62235 62236 init(this, options, instance$A, create_fragment$A, safe_not_equal, { 62237 subscription: 0, 62238 selectButtonText: 1, 62239 amountLabel: 2, 62240 nextBillingDateLabel: 3, 62241 noChangePlanMappingMessage: 4, 62242 onSelect: 5 62243 }); 62244 } 62245 } 62246 62247 /* src/components/elements/subscriptionSelect/SubscriptionSelect.svelte generated by Svelte v4.2.12 */ 62248 62249 function get_each_context$b(ctx, list, i) { 62250 const child_ctx = ctx.slice(); 62251 child_ctx[8] = list[i]; 62252 return child_ctx; 62253 } 62254 62255 // (13:2) {#if subscriptions == null} 62256 function create_if_block_1$i(ctx) { 62257 let spinner; 62258 let current; 62259 spinner = new Spinner({}); 62260 62261 return { 62262 c() { 62263 create_component(spinner.$$.fragment); 62264 }, 62265 m(target, anchor) { 62266 mount_component(spinner, target, anchor); 62267 current = true; 62268 }, 62269 i(local) { 62270 if (current) return; 62271 transition_in(spinner.$$.fragment, local); 62272 current = true; 62273 }, 62274 o(local) { 62275 transition_out(spinner.$$.fragment, local); 62276 current = false; 62277 }, 62278 d(detaching) { 62279 destroy_component(spinner, detaching); 62280 } 62281 }; 62282 } 62283 62284 // (16:2) {#if subscriptions != null && !subscriptions.length} 62285 function create_if_block$r(ctx) { 62286 let div; 62287 62288 return { 62289 c() { 62290 div = element("div"); 62291 }, 62292 m(target, anchor) { 62293 insert(target, div, anchor); 62294 div.innerHTML = /*noSubscriptionsMessage*/ ctx[0]; 62295 }, 62296 p(ctx, dirty) { 62297 if (dirty & /*noSubscriptionsMessage*/ 1) div.innerHTML = /*noSubscriptionsMessage*/ ctx[0]; }, 62298 d(detaching) { 62299 if (detaching) { 62300 detach(div); 62301 } 62302 } 62303 }; 62304 } 62305 62306 // (21:2) {#each subscriptions ?? [] as subscription} 62307 function create_each_block$b(ctx) { 62308 let subscriptionoption; 62309 let current; 62310 62311 function func() { 62312 return /*func*/ ctx[7](/*subscription*/ ctx[8]); 62313 } 62314 62315 subscriptionoption = new SubscriptionOption({ 62316 props: { 62317 subscription: /*subscription*/ ctx[8], 62318 selectButtonText: /*selectButtonText*/ ctx[5], 62319 noChangePlanMappingMessage: /*noChangePlanMappingMessage*/ ctx[1], 62320 amountLabel: /*amountLabel*/ ctx[3], 62321 nextBillingDateLabel: /*nextBillingDateLabel*/ ctx[4], 62322 onSelect: func 62323 } 62324 }); 62325 62326 return { 62327 c() { 62328 create_component(subscriptionoption.$$.fragment); 62329 }, 62330 m(target, anchor) { 62331 mount_component(subscriptionoption, target, anchor); 62332 current = true; 62333 }, 62334 p(new_ctx, dirty) { 62335 ctx = new_ctx; 62336 const subscriptionoption_changes = {}; 62337 if (dirty & /*subscriptions*/ 4) subscriptionoption_changes.subscription = /*subscription*/ ctx[8]; 62338 if (dirty & /*selectButtonText*/ 32) subscriptionoption_changes.selectButtonText = /*selectButtonText*/ ctx[5]; 62339 if (dirty & /*noChangePlanMappingMessage*/ 2) subscriptionoption_changes.noChangePlanMappingMessage = /*noChangePlanMappingMessage*/ ctx[1]; 62340 if (dirty & /*amountLabel*/ 8) subscriptionoption_changes.amountLabel = /*amountLabel*/ ctx[3]; 62341 if (dirty & /*nextBillingDateLabel*/ 16) subscriptionoption_changes.nextBillingDateLabel = /*nextBillingDateLabel*/ ctx[4]; 62342 if (dirty & /*onSelect, subscriptions*/ 68) subscriptionoption_changes.onSelect = func; 62343 subscriptionoption.$set(subscriptionoption_changes); 62344 }, 62345 i(local) { 62346 if (current) return; 62347 transition_in(subscriptionoption.$$.fragment, local); 62348 current = true; 62349 }, 62350 o(local) { 62351 transition_out(subscriptionoption.$$.fragment, local); 62352 current = false;
62353 }, 62354 d(detaching) { 62355 destroy_component(subscriptionoption, detaching); 62356 } 62357 }; 62358 } 62359 62360 function create_fragment$z(ctx) { 62361 let div; 62362 let t0; 62363 let t1; 62364 let current; 62365 let if_block0 = /*subscriptions*/ ctx[2] == null && create_if_block_1$i(); 62366 let if_block1 = /*subscriptions*/ ctx[2] != null && !/*subscriptions*/ ctx[2].length && create_if_block$r(ctx); 62367 let each_value = ensure_array_like(/*subscriptions*/ ctx[2] ?? []); 62368 let each_blocks = []; 62369 62370 for (let i = 0; i < each_value.length; i += 1) { 62371 each_blocks[i] = create_each_block$b(get_each_context$b(ctx, each_value, i)); 62372 } 62373 62374 const out = i => transition_out(each_blocks[i], 1, 1, () => { 62375 each_blocks[i] = null; 62376 }); 62377 62378 return { 62379 c() { 62380 div = element("div"); 62381 if (if_block0) if_block0.c(); 62382 t0 = space(); 62383 if (if_block1) if_block1.c(); 62384 t1 = space(); 62385 62386 for (let i = 0; i < each_blocks.length; i += 1) { 62387 each_blocks[i].c(); 62388 } 62389 62390 attr(div, "class", "subscription-options-container svelte-bnxnvq"); 62391 }, 62392 m(target, anchor) { 62393 insert(target, div, anchor); 62394 if (if_block0) if_block0.m(div, null); 62395 append(div, t0); 62396 if (if_block1) if_block1.m(div, null); 62397 append(div, t1); 62398 62399 for (let i = 0; i < each_blocks.length; i += 1) { 62400 if (each_blocks[i]) { 62401 each_blocks[i].m(div, null); 62402 } 62403 } 62404 62405 current = true; 62406 }, 62407 p(ctx, [dirty]) { 62408 if (/*subscriptions*/ ctx[2] == null) { 62409 if (if_block0) { 62410 if (dirty & /*subscriptions*/ 4) { 62411 transition_in(if_block0, 1); 62412 } 62413 } else { 62414 if_block0 = create_if_block_1$i(); 62415 if_block0.c(); 62416 transition_in(if_block0, 1); 62417 if_block0.m(div, t0); 62418 } 62419 } else if (if_block0) { 62420 group_outros(); 62421 62422 transition_out(if_block0, 1, 1, () => { 62423 if_block0 = null; 62424 }); 62425 62426 check_outros(); 62427 } 62428 62429 if (/*subscriptions*/ ctx[2] != null && !/*subscriptions*/ ctx[2].length) { 62430 if (if_block1) { 62431 if_block1.p(ctx, dirty); 62432 } else { 62433 if_block1 = create_if_block$r(ctx); 62434 if_block1.c(); 62435 if_block1.m(div, t1); 62436 } 62437 } else if (if_block1) { 62438 if_block1.d(1); 62439 if_block1 = null; 62440 } 62441 62442 if (dirty & /*subscriptions, selectButtonText, noChangePlanMappingMessage, amountLabel, nextBillingDateLabel, onSelect*/ 126) { 62443 each_value = ensure_array_like(/*subscriptions*/ ctx[2] ?? []); 62444 let i; 62445 62446 for (i = 0; i < each_value.length; i += 1) { 62447 const child_ctx = get_each_context$b(ctx, each_value, i); 62448 62449 if (each_blocks[i]) { 62450 each_blocks[i].p(child_ctx, dirty); 62451 transition_in(each_blocks[i], 1); 62452 } else { 62453 each_blocks[i] = create_each_block$b(child_ctx); 62454 each_blocks[i].c(); 62455 transition_in(each_blocks[i], 1); 62456 each_blocks[i].m(div, null); 62457 } 62458 } 62459 62460 group_outros(); 62461 62462 for (i = each_value.length; i < each_blocks.length; i += 1) { 62463 out(i); 62464 } 62465 62466 check_outros(); 62467 } 62468 }, 62469 i(local) { 62470 if (current) return; 62471 transition_in(if_block0); 62472 62473 for (let i = 0; i < each_value.length; i += 1) { 62474 transition_in(each_blocks[i]); 62475 } 62476 62477 current = true; 62478 }, 62479 o(local) { 62480 transition_out(if_block0);
62481 each_blocks = each_blocks.filter(Boolean); 62482 62483 for (let i = 0; i < each_blocks.length; i += 1) { 62484 transition_out(each_blocks[i]); 62485 } 62486 62487 current = false; 62488 }, 62489 d(detaching) { 62490 if (detaching) { 62491 detach(div); 62492 } 62493 62494 if (if_block0) if_block0.d(); 62495 if (if_block1) if_block1.d(); 62496 destroy_each(each_blocks, detaching); 62497 } 62498 }; 62499 } 62500 62501 function instance$z($$self, $$props, $$invalidate) { 62502 let { noSubscriptionsMessage } = $$props; 62503 let { noChangePlanMappingMessage } = $$props; 62504 let { subscriptions } = $$props; 62505 let { amountLabel } = $$props; 62506 let { nextBillingDateLabel } = $$props; 62507 let { selectButtonText } = $$props; 62508 let { onSelect } = $$props; 62509 const func = subscription => onSelect(subscription); 62510 62511 $$self.$$set = $$props => { 62512 if ('noSubscriptionsMessage' in $$props) $$invalidate(0, noSubscriptionsMessage = $$props.noSubscriptionsMessage); 62513 if ('noChangePlanMappingMessage' in $$props) $$invalidate(1, noChangePlanMappingMessage = $$props.noChangePlanMappingMessage); 62514 if ('subscriptions' in $$props) $$invali
62514date(2, subscriptions = $$props.subscriptions); 62515 if ('amountLabel' in $$props) $$invalidate(3, amountLabel = $$props.amountLabel); 62516 if ('nextBillingDateLabel' in $$props) $$invalidate(4, nextBillingDateLabel = $$props.nextBillingDateLabel); 62517 if ('selectButtonText' in $$props) $$invalidate(5, selectButtonText = $$props.selectButtonText); 62518 if ('onSelect' in $$props) $$invalidate(6, onSelect = $$props.onSelect); 62519 }; 62520 62521 return [ 62522 noSubscriptionsMessage, 62523 noChangePlanMappingMessage, 62524 subscriptions, 62525 amountLabel, 62526 nextBillingDateLabel, 62527 selectButtonText, 62528 onSelect, 62529 func 62530 ]; 62531 } 62532 62533 class SubscriptionSelect extends SvelteComponent { 62534 constructor(options) { 62535 super(); 62536 62537 init(this, options, instance$z, create_fragment$z, safe_not_equal, { 62538 noSubscriptionsMessage: 0, 62539 noChangePlanMappingMessage: 1, 62540 subscriptions: 2, 62541 amountLabel: 3, 62542 nextBillingDateLabel: 4, 62543 selectButtonText: 5, 62544 onSelect: 6 62545 }); 62546 } 62547 } 62548 62549 const subscriptionSelectFactory = { 62550 matches: (sectionElement) => sectionElement.type === elementTypes.SUBSCRIPTION_SELECT, 62551 create: (form, formState, formActions, elementConfig) => ({ 62552 component: SubscriptionSelect, 62553 props: { 62554 noSubscriptionsMessage: elementConfig.noSubscriptionsMessage, 62555 selectButtonText: elementConfig.selectButtonText, 62556 noChangePlanMappingMessage: elementConfig.noChangePlanMappingMessage, 62557 amountLabel: elementConfig.amountLabel, 62558 nextBillingDateLabel: elementConfig.nextBillingDateLabel, 62559 subscriptions: formState.existingSubscriptions 62560 ? formState.existingSubscriptions.filter(s => s.status !== 'inactive') 62561 : null, 62562 onSelect: (subscription) => { 62563 formActions.updateFormState({ 62564 selectedSubscription: subscription 62565 }); 62566 logDataLayerEvent(form, 'zephr_form_button_press', { 62567 sectionId: formState.currentSection.type, 62568 buttonType: 'SUBMIT' 62569 }); 62570 formActions.completeSection(); 62571 } 62572 } 62573 }) 62574 }; 62575 62576 /* src/components/elements/subscriptionsList/SubscriptionsListItem.svelte generated by Svelte v4.2.12 */ 62577 62578 function create_if_block_4$6(ctx) { 62579 let span; 62580 let t; 62581 62582 return { 62583 c() { 62584 span = element("span"); 62585 t = text(/*giftPillText*/ ctx[7]); 62586 attr(span, "class", "gift-pill svelte-1qhs7yc"); 62587 }, 62588 m(target, anchor) { 62589 insert(target, span, anchor); 62590 append(span, t); 62591 }, 62592 p(ctx, dirty) { 62593 if (dirty & /*giftPillText*/ 128) set_data(t, /*giftPillText*/ ctx[7]); 62594 }, 62595 d(detaching) { 62596 if (detaching) { 62597 detach(span); 62598 } 62599 } 62600 }; 62601 } 62602 62603 // (23:4) {#if showBillingHistory} 62604 function create_if_block_2$b(ctx) { 62605 let div1; 62606 let div0; 62607 let t0; 62608 let t1; 62609 let t2; 62610 let hr; 62611 let current; 62612 let if_block = /*billingHistoryLink*/ ctx[4] && create_if_block_3$7(ctx); 62613 62614 return { 62615 c() { 62616 div1 = element("div"); 62617 div0 = element("div"); 62618 t0 = text(/*billingHistoryText*/ ctx[3]); 62619 t1 = space(); 62620 if (if_block) if_block.c(); 62621 t2 = space(); 62622 hr = element("hr"); 62623 attr(div0, "class", "information"); 62624 attr(div1, "class", "section"); 62625 attr(hr, "class", "svelte-1qhs7yc"); 62626 }, 62627 m(target, anchor) { 62628 insert(target, div1, anchor); 62629 append(div1, div0); 62630 append(div0, t0); 62631 append(div0, t1); 62632 if (if_block) if_block.m(div0, null); 62633 insert(target, t2, anchor); 62634 insert(target, hr, anchor); 62635 current = true; 62636 }, 62637 p(ctx, dirty) { 62638 if (!current || dirty & /*billingHistoryText*/ 8) set_data(t0, /*billingHistoryText*/ ctx[3]); 62639 62640 if (/*billingHistoryLink*/ ctx[4]) { 62641 if (if_block) { 62642 if_block.p(ctx, dirty); 62643 62644 if (dirty & /*billingHistoryLink*/ 16) { 62645 transition_in(if_block, 1); 62646 } 62647 } else { 62648 if_block = create_if_block_3$7(ctx); 62649 if_block.c(); 62650 transition_in(if_block, 1); 62651 if_block.m(div0, null); 62652 } 62653 } else if (if_block) { 62654 group_outros(); 62655 62656 transition_out(if_block, 1, 1, () => { 62657 if_block = null; 62658 }); 62659 62660 check_outros(); 62661 } 62662 }, 62663 i(local) { 62664 if (current) return; 62665 transition_in(if_block); 62666 current = true; 62667 }, 62668 o(local) { 62669 transition_out(if_block); 62670 current = false;
62671 }, 62672 d(detaching) { 62673 if (detaching) { 62674 detach(div1); 62675 detach(t2); 62676 detach(hr); 62677 } 62678 62679 if (if_block) if_block.d(); 62680 } 62681 }; 62682 } 62683 62684 // (27:10) {#if billingHistoryLink} 62685 function create_if_block_3$7(ctx) { 62686 let link; 62687 let current; 62688 62689 link = new Link({ 62690 props: { text: /*billingHistoryLink*/ ctx[4] } 62691 }); 62692 62693 link.$on("linkClick", /*linkClick_handler*/ ctx[8]); 62694 62695 return { 62696 c() { 62697 create_component(link.$$.fragment); 62698 }, 62699 m(target, anchor) { 62700 mount_component(link, target, anchor); 62701 current = true; 62702 }, 62703 p(ctx, dirty) { 62704 const link_changes = {}; 62705 if (dirty & /*billingHistoryLink*/ 16) link_changes.text = /*billingHistoryLink*/ ctx[4]; 62706 link.$set(link_changes); 62707 }, 62708 i(local) { 62709 if (current) return; 62710 transition_in(link.$$.fragment, local); 62711 current = true; 62712 }, 62713 o(local) { 62714 transition_out(link.$$.fragment, local); 62715 current = false; 62716 }, 62717 d(detaching) { 62718 destroy_component(link, detaching); 62719 } 62720 }; 62721 } 62722 62723 // (34:4) {#if subscription.status === 'active' && subscription.nextBillingTime} 62724 function create_if_block_1$h(ctx) { 62725 let div1; 62726 let h3; 62727 let t0; 62728 let t1; 62729 let div0; 62730 let t2_value = /*subscription*/ ctx[0].nextBillingTime + ""; 62731 let t2; 62732 let t3; 62733 let hr; 62734 62735 return { 62736 c() { 62737 div1 = element("div"); 62738 h3 = element("h3"); 62739 t0 = text(/*nextPaymentDateText*/ ctx[1]); 62740 t1 = space(); 62741 div0 = element("div"); 62742 t2 = text(t2_value); 62743 t3 = space(); 62744 hr = element("hr"); 62745 attr(h3, "class", "svelte-1qhs7yc"); 62746 attr(div0, "class", "information"); 62747 attr(div1, "class", "section"); 62748 attr(hr, "class", "svelte-1qhs7yc"); 62749 }, 62750 m(target, anchor) { 62751 insert(target, div1, anchor); 62752 append(div1, h3); 62753 append(h3, t0); 62754 append(div1, t1); 62755 append(div1, div0); 62756 append(div0, t2); 62757 insert(target, t3, anchor); 62758 insert(target, hr, anchor); 62759 }, 62760 p(ctx, dirty) { 62761 if (dirty & /*nextPaymentDateText*/ 2) set_data(t0, /*nextPaymentDateText*/ ctx[1]); 62762 if (dirty & /*subscription*/ 1 && t2_value !== (t2_value = /*subscription*/ ctx[0].nextBillingTime + "")) set_data(t2, t2_value); 62763 }, 62764 d(detaching) { 62765 if (detaching) { 62766 detach(div1); 62767 detach(t3); 62768 detach(hr); 62769 } 62770 } 62771 }; 62772 } 62773 62774 // (41:4) {#if subscription.amount} 62775 function create_if_block$q(ctx) { 62776 let div1; 62777 let h3; 62778 let t0; 62779 let t1; 62780 let div0; 62781 let t2_value = /*subscription*/ ctx[0].amount + ""; 62782 let t2; 62783 let t3; 62784 let hr; 62785 62786 return { 62787 c() { 62788 div1 = element("div"); 62789 h3 = element("h3"); 62790 t0 = text(/*subscriptionRateText*/ ctx[2]); 62791 t1 = space(); 62792 div0 = element("div"); 62793 t2 = text(t2_value); 62794 t3 = space(); 62795 hr = element("hr"); 62796 attr(h3, "class", "svelte-1qhs7yc"); 62797 attr(div0, "class", "information"); 62798 attr(div1, "class", "section"); 62799 attr(hr, "class", "svelte-1qhs7yc"); 62800 }, 62801 m(target, anchor) { 62802 insert(target, div1, anchor); 62803 append(div1, h3); 62804 append(h3, t0); 62805 append(div1, t1); 62806 append(div1, div0); 62807 append(div0, t2); 62808 insert(target, t3, anchor); 62809 insert(target, hr, anchor); 62810 }, 62811 p(ctx, dirty) { 62812 if (dirty & /*subscriptionRateText*/ 4) set_data(t0, /*subscriptionRateText*/ ctx[2]); 62813 if (dirty & /*subscription*/ 1 && t2_value !== (t2_value = /*subscription*/ ctx[0].amount + "")) set_data(t2, t2_value); 62814 }, 62815 d(detaching) { 62816 if (detaching) { 62817 detach(div1); 62818 detach(t3); 62819 detach(hr); 62820 } 62821 } 62822 }; 62823 } 62824 62825 function create_fragment$y(ctx) { 62826 let div2; 62827 let div1; 62828 let div0; 62829 let h2; 62830 let t0_value = /*subscription*/ ctx[0].productLabel + ""; 62831 let t0; 62832 let t1; 62833 let h2_class_value; 62834 let t2; 62835 let hr; 62836 let t3; 62837 let t4; 62838 let t5; 62839 let current; 62840 let if_block0 = /*subscription*/ ctx[0].isGift && create_if_block_4$6(ctx); 62841 let if_block1 = /*showBillingHistory*/ ctx[6] && create_if_block_2$b(ctx); 62842 let if_block2 = /*subscription*/ ctx[0].status === 'active' && /*subscription*/ ctx[0].nextBillingTime && create_if_block_1$h(ctx); 62843 let if_block3 = /*subscription*/ ctx[0].amount && create_if_block$q(ctx); 62844 62845 return { 62846 c() { 62847 div2 = element("div"); 62848 div1 = element("div"); 62849 div0 = element("div"); 62850 h2 = element("h2"); 62851 t0 = text(t0_value); 62852 t1 = space(); 62853 if (if_block0) if_block0.c(); 62854 t2 = space(); 62855 hr = element("hr"); 62856 t3 = space(); 62857 if (if_block1) if_block1.c(); 62858 t4 = space(); 62859 if (if_block2) if_block2.c(); 62860 t5 = space(); 62861 if (if_block3) if_block3.c(); 62862 62863 attr(h2, "class", h2_class_value = "" + (null_to_empty(/*sub
62863scription*/ ctx[0].status === 'inactive' 62864 ? 'inactive' 62865 : '') + " svelte-1qhs7yc")); 62866 62867 attr(div0, "class", "section"); 62868 attr(hr, "class", "svelte-1qhs7yc"); 62869 attr(div1, "class", "inner-box svelte-1qhs7yc"); 62870 attr(div2, "class", "subscription-list-item svelte-1qhs7yc"); 62871 }, 62872 m(target, anchor) { 62873 insert(target, div2, anchor); 62874 append(div2, div1); 62875 append(div1, div0); 62876 append(div0, h2); 62877 append(h2, t0); 62878 append(h2, t1); 62879 if (if_block0) if_block0.m(h2, null); 62880 append(div1, t2); 62881 append(div1, hr); 62882 append(div1, t3); 62883 if (if_block1) if_block1.m(div1, null); 62884 append(div1, t4); 62885 if (if_block2) if_block2.m(div1, null); 62886 append(div1, t5); 62887 if (if_block3) if_block3.m(div1, null); 62888 current = true; 62889 }, 62890 p(ctx, [dirty]) { 62891 if ((!current || dirty & /*subscription*/ 1) && t0_value !== (t0_value = /*subscription*/ ctx[0].productLabel + "")) set_data(t0, t0_value); 62892 62893 if (/*subscription*/ ctx[0].isGift) { 62894 if (if_block0) { 62895 if_block0.p(ctx, dirty); 62896 } else { 62897 if_block0 = create_if_block_4$6(ctx); 62898 if_block0.c(); 62899 if_block0.m(h2, null); 62900 } 62901 } else if (if_block0) { 62902 if_block0.d(1); 62903 if_block0 = null; 62904 } 62905 62906 if (!current || dirty & /*subscription*/ 1 && h2_class_value !== (h2_class_value = "" + (null_to_empty(/*subscription*/ ctx[0].status === 'inactive' 62907 ? 'inactive' 62908 : '') + " svelte-1qhs7yc"))) { 62909 attr(h2, "class", h2_class_value); 62910 } 62911 62912 if (/*showBillingHistory*/ ctx[6]) { 62913 if (if_block1) { 62914 if_block1.p(ctx, dirty); 62915 62916 if (dirty & /*showBillingHistory*/ 64) { 62917 transition_in(if_block1, 1); 62918 } 62919 } else { 62920 if_block1 = create_if_block_2$b(ctx); 62921 if_block1.c(); 62922 transition_in(if_block1, 1); 62923 if_block1.m(div1, t4); 62924 } 62925 } else if (if_block1) { 62926 group_outros(); 62927 62928 transition_out(if_block1, 1, 1, () => { 62929 if_block1 = null; 62930 }); 62931 62932 check_outros(); 62933 } 62934 62935 if (/*subscription*/ ctx[0].status === 'active' && /*subscription*/ ctx[0].nextBillingTime) { 62936 if (if_block2) { 62937 if_block2.p(ctx, dirty); 62938 } else { 62939 if_block2 = create_if_block_1$h(ctx); 62940 if_block2.c(); 62941 if_block2.m(div1, t5); 62942 } 62943 } else if (if_block2) { 62944 if_block2.d(1); 62945 if_block2 = null; 62946 } 62947 62948 if (/*subscription*/ ctx[0].amount) { 62949 if (if_block3) { 62950 if_block3.p(ctx, dirty); 62951 } else { 62952 if_block3 = create_if_block$q(ctx); 62953 if_block3.c(); 62954 if_block3.m(div1, null); 62955 } 62956 } else if (if_block3) { 62957 if_block3.d(1); 62958 if_block3 = null; 62959 } 62960 }, 62961 i(local) { 62962 if (current) return; 62963 transition_in(if_block1); 62964 current = true; 62965 }, 62966 o(local) { 62967 transition_out(if_block1); 62968 current = false; 62969 }, 62970 d(detaching) { 62971 if (detaching) { 62972 detach(div2); 62973 } 62974 62975 if (if_block0) if_block0.d(); 62976 if (if_block1) if_block1.d(); 62977 if (if_block2) if_block2.d(); 62978 if (if_block3) if_block3.d(); 62979 } 62980 }; 62981 } 62982 62983 function instance$y($$self, $$props, $$invalidate) { 62984 let { subscription } = $$props; 62985 let { nextPaymentDateText } = $$props; 62986 let { subscriptionRateText } = $$props; 62987 let { billingHistoryText } = $$props; 62988 let { billingHistoryLink } = $$props; 62989 let { onViewHistory } = $$props; 62990 let { showBillingHistory } = $$props; 62991 let { giftPillText = 'Gift' } = $$props; 62992 const linkClick_handler = () => onViewHistory(subscription); 62993 62994 $$self.$$set = $$props => {
62995 if ('subscription' in $$props) $$invalidate(0, subscription = $$props.subscription); 62996 if ('nextPaymentDateText' in $$props) $$invalidate(1, nextPaymentDateText = $$props.nextPaymentDateText); 62997 if ('subscriptionRateText' in $$props) $$invalidate(2, subscriptionRateText = $$props.subscriptionRateText); 62998 if ('billingHistoryText' in $$props) $$invalidate(3, billingHistoryText = $$props.billingHistoryText); 62999 if ('billingHistoryLink' in $$props) $$invalidate(4, billingHistoryLink = $$props.billingHistoryLink); 63000 if ('onViewHistory' in $$props) $$invalidate(5, onViewHistory = $$props.onViewHistory); 63001 if ('showBillingHistory' in $$props) $$invalidate(6, showBillingHistory = $$props.showBillingHistory); 63002 if ('giftPillText' in $$props) $$invalidate(7, giftPillText = $$props.giftPillText); 63003 }; 63004 63005 return [ 63006 subscription, 63007 nextPaymentDateText, 63008 subscriptionRateText, 63009 billingHistoryText, 63010 billingHistoryLink, 63011 onViewHistory, 63012 showBillingHistory, 63013 giftPillText, 63014 linkClick_handler 63015 ]; 63016 } 63017 63018 class SubscriptionsListItem extends SvelteComponent { 63019 constructor(options) { 63020 super(); 63021 63022 init(this, options, instance$y, create_fragment$y, safe_not_equal, { 63023 subscription: 0, 63024 nextPaymentDateText: 1, 63025 subscriptionRateText: 2, 63026 billingHistoryText: 3, 63027 billingHistoryLink: 4, 63028 onViewHistory: 5, 63029 showBillingHistory: 6, 63030 giftPillText: 7 63031 }); 63032 } 63033 } 63034 63035 /* src/components/elements/Tablink.svelte generated by Svelte v4.2.12 */ 63036 63037 function create_fragment$x(ctx) { 63038 let a; 63039 let span; 63040 let t0; 63041 let t1; 63042 let svg; 63043 let path_1; 63044 let a_href_value; 63045 let mounted; 63046 let dispose; 63047 63048 return { 63049 c() { 63050 a = element("a"); 63051 span = element("span"); 63052 t0 = text(/*text*/ ctx[0]); 63053 t1 = space(); 63054 svg = svg_element("svg"); 63055 path_1 = svg_element("path"); 63056 attr(path_1, "fill", "currentColor"); 63057 attr(path_1, "d", "M305 239c9.4 9.4 9.4 24.6 0 33.9L113 465c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9l175-175L79 81c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0L305 239z"); 63058 attr(svg, "aria-hidden", "true"); 63059 attr(svg, "focusable", "false"); 63060 attr(svg, "data-prefix", "far"); 63061 attr(svg, "data-icon", "chevron-right"); 63062 attr(svg, "class", "svg-inline--fa fa-chevron-right sc-egTsrv kzAurc"); 63063 attr(svg, "role", "img"); 63064 attr(svg, "xmlns", "http://www.w3.org/2000/svg"); 63065 attr(svg, "viewBox", "0 0 320 512"); 63066 attr(svg, "width", "16"); 63067 attr(svg, "height", "16"); 63068 attr(a, "class", "zephr-form-tablink svelte-py0ruk"); 63069 63070 attr(a, "href", a_href_value = /*path*/ ctx[1] && (!window.Zephr || !window.Zephr.isCustomPage || !/*path*/ ctx[1].startsWith(window.Zephr.customPagePath)) 63071 ? /*path*/ ctx[1] 63072 : "javascript: void(0)"); 63073 }, 63074 m(target, anchor) { 63075 insert(target, a, anchor); 63076 append(a, span); 63077 append(span, t0); 63078 append(a, t1); 63079 append(a, svg); 63080 append(svg, path_1); 63081 63082 if (!mounted) { 63083 dispose = listen(a, "click", /*click_handler*/ ctx[4]); 63084 mounted = true; 63085 } 63086 }, 63087 p(ctx, [dirty]) { 63088 if (dirty & /*text*/ 1) set_data(t0, /*text*/ ctx[0]); 63089 63090 if (dirty & /*path*/ 2 && a_href_value !== (a_href_value = /*path*/ ctx[1] && (!window.Zephr || !window.Zephr.isCustomPage || !/*path*/ ctx[1].startsWith(window.Zephr.customPagePath)) 63091 ? /*path*/ ctx[1] 63092 : "javascript: void(0)")) { 63093 attr(a, "href", a_href_value); 63094 } 63095 }, 63096 i: noop, 63097 o: noop, 63098 d(detaching) { 63099 if (detaching) { 63100 detach(a); 63101 } 63102 63103 mounted = false; 63104 dispose(); 63105 } 63106 }; 63107 } 63108 63109 function instance$x($$self, $$props, $$invalidate) { 63110 let { text } = $$props; 63111 let { path = '' } = $$props; 63112 63113 let { onClick = () => { 63114 63115 } } = $$props; 63116 63117 let { logDlEvent = () => { 63118 63119 } } = $$props; 63120 63121 const click_handler = () => { 63122 logDlEvent?.(); 63123 63124 if (window.Zephr && window.Zephr.isCustomPage && path.startsWith(window.Zephr.customPagePath)) { 63125 window.history.pushState({}, '', path); 63126 } else { 63127 onClick(); 63128 } 63129 }; 63130 63131 $$self.$$set = $$props => {
63132 if ('text' in $$props) $$invalidate(0, text = $$props.text); 63133 if ('path' in $$props) $$invalidate(1, path = $$props.path); 63134 if ('onClick' in $$props) $$invalidate(2, onClick = $$props.onClick); 63135 if ('logDlEvent' in $$props) $$invalidate(3, logDlEvent = $$props.logDlEvent); 63136 }; 63137 63138 return [text, path, onClick, logDlEvent, click_handler]; 63139 } 63140 63141 class Tablink extends SvelteComponent { 63142 constructor(options) { 63143 super(); 63144 63145 init(this, options, instance$x, create_fragment$x, safe_not_equal, { 63146 text: 0, 63147 path: 1, 63148 onClick: 2, 63149 logDlEvent: 3 63150 }); 63151 } 63152 } 63153 63154 /* src/components/elements/subscriptionsList/SubscriptionsListBoxItem.svelte generated by Svelte v4.2.12 */ 63155 63156 function get_each_context$a(ctx, list, i) { 63157 const child_ctx = ctx.slice(); 63158 child_ctx[48] = list[i]; 63159 child_ctx[50] = i; 63160 return child_ctx; 63161 } 63162 63163 function get_each_context_1$2(ctx, list, i) { 63164 const child_ctx = ctx.slice(); 63165 child_ctx[51] = list[i]; 63166 return child_ctx; 63167 } 63168 63169 // (123:8) {#if subscription.isGift} 63170 function create_if_block_23(ctx) { 63171 let span; 63172 let t; 63173 63174 return { 63175 c() { 63176 span = element("span"); 63177 t = text(/*giftPillText*/ ctx[24]); 63178 attr(span, "class", "gift-pill svelte-xxnasy"); 63179 }, 63180 m(target, anchor) { 63181 insert(target, span, anchor); 63182 append(span, t); 63183 }, 63184 p(ctx, dirty) { 63185 if (dirty[0] & /*giftPillText*/ 16777216) set_data(t, /*giftPillText*/ ctx[24]); 63186 }, 63187 d(detaching) { 63188 if (detaching) { 63189 detach(span); 63190 } 63191 } 63192 }; 63193 } 63194 63195 // (135:4) {:else} 63196 function create_else_block$3(ctx) { 63197 let each_1_anchor; 63198 let current; 63199 let each_value = ensure_array_like(/*elementsOrder*/ ctx[21]); 63200 let each_blocks = []; 63201 63202 for (let i = 0; i < each_value.length; i += 1) { 63203 each_blocks[i] = create_each_block$a(get_each_context$a(ctx, each_value, i)); 63204 } 63205 63206 const out = i => transition_out(each_blocks[i], 1, 1, () => { 63207 each_blocks[i] = null; 63208 }); 63209 63210 return { 63211 c() { 63212 for (let i = 0; i < each_blocks.length; i += 1) { 63213 each_blocks[i].c(); 63214 } 63215 63216 each_1_anchor = empty(); 63217 }, 63218 m(target, anchor) { 63219 for (let i = 0; i < each_blocks.length; i += 1) { 63220 if (each_blocks[i]) { 63221 each_blocks[i].m(target, anchor); 63222 } 63223 } 63224 63225 insert(target, each_1_anchor, anchor); 63226 current = true; 63227 }, 63228 p(ctx, dirty) { 63229 if (dirty[0] & /*elementsOrder, updateBillToContactText, updateBillToContactPath, subscription, logUpdateBillToContact, elementsHide, paymentProvider, subscriptionCustomFieldsText, onUpdateSubscriptionCustomFields, suspendResumeSubscriptionText, suspendResumeSubscriptionPath, logSuspendResumeSubscription, cancelSubscriptionText, cancelSubscriptionPath, logCancelSubscription, changeSubscriptionText, changeSubscriptionPath, logChangeSubscription, changePaymentMethodText, onChangePayment, billingHistoryLink, onViewHistory, statusType, statusMessage, isUpdatingAutoRenew, autoRenewToggleText, autoRenewToggleEnabled, nextPaymentDateText, subscriptionRateText*/ 2122317823 | dirty[1] & /*displayedFields, withSubscriptionParam, autoRenewValue, handleAutoRenewChange*/ 15) { 63230 each_value = ensure_array_like(/*elementsOrder*/ ctx[21]); 63231 let i; 63232 63233 for (i = 0; i < each_value.length; i += 1) { 63234 const child_ctx = get_each_context$a(ctx, each_value, i); 63235 63236 if (each_blocks[i]) { 63237 each_blocks[i].p(child_ctx, dirty); 63238 transition_in(each_blocks[i], 1); 63239 } else { 63240 each_blocks[i] = create_each_block$a(child_ctx); 63241 each_blocks[i].c(); 63242 transition_in(each_blocks[i], 1); 63243 each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); 63244 } 63245 } 63246 63247 group_outros(); 63248 63249 for (i = each_value.length; i < each_blocks.length; i += 1) { 63250 out(i); 63251 } 63252 63253 check_outros(); 63254 } 63255 }, 63256 i(local) { 63257 if (current) return; 63258 63259 for (let i = 0; i < each_value.length; i += 1) { 63260 transition_in(each_blocks[i]); 63261 } 63262 63263 current = true; 63264 }, 63265 o(local) {
63266 each_blocks = each_blocks.filter(Boolean); 63267 63268 for (let i = 0; i < each_blocks.length; i += 1) { 63269 transition_out(each_blocks[i]); 63270 } 63271 63272 current = false; 63273 }, 63274 d(detaching) { 63275 if (detaching) { 63276 detach(each_1_anchor); 63277 } 63278 63279 destroy_each(each_blocks, detaching); 63280 } 63281 }; 63282 } 63283 63284 // (128:4) {#if isInactive} 63285 function create_if_block$p(ctx) { 63286 let if_block_anchor; 63287 let if_block = /*subscription*/ ctx[0].amount && create_if_block_1$g(ctx); 63288 63289 return { 63290 c() { 63291 if (if_block) if_block.c(); 63292 if_block_anchor = empty(); 63293 }, 63294 m(target, anchor) { 63295 if (if_block) if_block.m(target, anchor); 63296 insert(target, if_block_anchor, anchor); 63297 }, 63298 p(ctx, dirty) { 63299 if (/*subscription*/ ctx[0].amount) { 63300 if (if_block) { 63301 if_block.p(ctx, dirty); 63302 } else { 63303 if_block = create_if_block_1$g(ctx); 63304 if_block.c(); 63305 if_block.m(if_block_anchor.parentNode, if_block_anchor); 63306 } 63307 } else if (if_block) { 63308 if_block.d(1); 63309 if_block = null; 63310 } 63311 }, 63312 i: noop, 63313 o: noop, 63314 d(detaching) { 63315 if (detaching) { 63316 detach(if_block_anchor); 63317 } 63318 63319 if (if_block) if_block.d(detaching); 63320 } 63321 }; 63322 } 63323 63324 // (137:8) {#if element === 'subscription_information' && !elementsHide.subscriptionInformation} 63325 function create_if_block_20(ctx) { 63326 let t; 63327 let if_block1_anchor; 63328 let if_block0 = /*subscription*/ ctx[0].amount && create_if_block_22(ctx); 63329 let if_block1 = /*subscription*/ ctx[0].status === 'active' && /*subscription*/ ctx[0].nextBillingTime && create_if_block_21(ctx); 63330 63331 return { 63332 c() { 63333 if (if_block0) if_block0.c(); 63334 t = space(); 63335 if (if_block1) if_block1.c(); 63336 if_block1_anchor = empty(); 63337 }, 63338 m(target, anchor) { 63339 if (if_block0) if_block0.m(target, anchor); 63340 insert(target, t, anchor); 63341 if (if_block1) if_block1.m(target, anchor); 63342 insert(target, if_block1_anchor, anchor); 63343 }, 63344 p(ctx, dirty) { 63345 if (/*subscription*/ ctx[0].amount) { 63346 if (if_block0) { 63347 if_block0.p(ctx, dirty); 63348 } else { 63349 if_block0 = create_if_block_22(ctx); 63350 if_block0.c(); 63351 if_block0.m(t.parentNode, t); 63352 } 63353 } else if (if_block0) { 63354 if_block0.d(1); 63355 if_block0 = null; 63356 } 63357 63358 if (/*subscription*/ ctx[0].status === 'active' && /*subscription*/ ctx[0].nextBillingTime) { 63359 if (if_block1) { 63360 if_block1.p(ctx, dirty); 63361 } else { 63362 if_block1 = create_if_block_21(ctx); 63363 if_block1.c(); 63364 if_block1.m(if_block1_anchor.parentNode, if_block1_anchor); 63365 } 63366 } else if (if_block1) { 63367 if_block1.d(1); 63368 if_block1 = null; 63369 } 63370 }, 63371 d(detaching) { 63372 if (detaching) { 63373 detach(t); 63374 detach(if_block1_anchor); 63375 } 63376 63377 if (if_block0) if_block0.d(detaching); 63378 if (if_block1) if_block1.d(detaching); 63379 } 63380 }; 63381 } 63382 63383 // (138:10) {#if subscription.amount} 63384 function create_if_block_22(ctx) { 63385 let div1; 63386 let span; 63387 let t0; 63388 let t1; 63389 let div0; 63390 let t2_value = /*subscription*/ ctx[0].amount + ""; 63391 let t2; 63392 63393 return { 63394 c() { 63395 div1 = element("div"); 63396 span = element("span"); 63397 t0 = text(/*subscriptionRateText*/ ctx[2]); 63398 t1 = space(); 63399 div0 = element("div"); 63400 t2 = text(t2_value); 63401 attr(span, "class", "svelte-xxnasy"); 63402 attr(div0, "class", "zephr-box-item-information svelte-xxnasy"); 63403 attr(div1, "class", "zephr-section svelte-xxnasy"); 63404 }, 63405 m(target, anchor) { 63406 insert(target, div1, anchor); 63407 append(div1, span); 63408 append(span, t0); 63409 append(div1, t1); 63410 append(div1, div0); 63411 append(div0, t2); 63412 }, 63413 p(ctx, dirty) { 63414 if (dirty[0] & /*subscriptionRateText*/ 4) set_data(t0, /*subscriptionRateText*/ ctx[2]); 63415 if (dirty[0] & /*subscription*/ 1 && t2_value !== (t2_value = /*subscription*/ ctx[0].amount + "")) set_data(t2, t2_value); 63416 }, 63417 d(detaching) { 63418 if (detaching) { 63419 detach(div1); 63420 } 63421 } 63422 }; 63423 } 63424 63425 // (146:10) {#if subscription.status === 'active' && subscription.nextBillingTime} 63426 function create_if_block_21(ctx) { 63427 let div1; 63428 let span; 63429 let t0; 63430 let t1; 63431 let div0; 63432 let t2_value = /*subscription*/ ctx[0].nextBillingTime + ""; 63433 let t2; 63434 63435 return { 63436 c() { 63437 div1 = element("div"); 63438 span = element("span"); 63439 t0 = text(/*nextPaymentDateText*/ ctx[1]); 63440 t1 = space(); 63441 div0 = element("div"); 63442 t2 = text(t2_value); 63443 attr(span, "class", "svelte-xxnasy"); 63444 attr(div0, "class", "zephr-box-item-information svelte-xxnasy"); 63445 attr(div1, "class", "zephr-section svelte-xxnasy"); 63446 }, 63447 m(target, anchor) { 63448 insert(target, div1, anchor); 63449 append(div1, span); 63450 append(span, t0); 63451 append(div1, t1); 63452 append(div1, div0); 63453 append(div0, t2); 63454 }, 63455 p(ctx, dirty) {
63456 if (dirty[0] & /*nextPaymentDateText*/ 2) set_data(t0, /*nextPaymentDateText*/ ctx[1]); 63457 if (dirty[0] & /*subscription*/ 1 && t2_value !== (t2_value = /*subscription*/ ctx[0].nextBillingTime + "")) set_data(t2, t2_value); 63458 }, 63459 d(detaching) { 63460 if (detaching) { 63461 detach(div1); 63462 } 63463 } 63464 }; 63465 } 63466 63467 // (155:8) {#if element === 'payment_auto_renew_toggle' && autoRenewToggleEnabled && paymentProvider === 'zuora-billing' && subscription.status === 'active' && !subscription.isGift && subscription.termType === 'TERMED'} 63468 function create_if_block_17(ctx) { 63469 let div1; 63470 let div0; 63471 let checkbox; 63472 let t0; 63473 let t1; 63474 let current; 63475 63476 checkbox = new Checkbox({ 63477 props: { 63478 id: "auto-renew-" + /*subscription*/ ctx[0].externalId, 63479 label: /*autoRenewToggleText*/ ctx[27], 63480 value: "auto-renew", 63481 checked: /*autoRenewValue*/ ctx[31], 63482 disabled: /*isUpdatingAutoRenew*/ ctx[28] 63483 } 63484 }); 63485 63486 checkbox.$on("change", /*handleAutoRenewChange*/ ctx[34]); 63487 let if_block0 = /*isUpdatingAutoRenew*/ ctx[28] && create_if_block_19(); 63488 let if_block1 = /*statusMessage*/ ctx[29] && create_if_block_18(ctx); 63489 63490 return { 63491 c() { 63492 div1 = element("div"); 63493 div0 = element("div"); 63494 create_component(checkbox.$$.fragment); 63495 t0 = space(); 63496 if (if_block0) if_block0.c(); 63497 t1 = space(); 63498 if (if_block1) if_block1.c(); 63499 attr(div0, "class", "auto-renew-toggle-container svelte-xxnasy"); 63500 attr(div1, "class", "zephr-section svelte-xxnasy"); 63501 }, 63502 m(target, anchor) { 63503 insert(target, div1, anchor); 63504 append(div1, div0); 63505 mount_component(checkbox, div0, null); 63506 append(div0, t0); 63507 if (if_block0) if_block0.m(div0, null); 63508 append(div1, t1); 63509 if (if_block1) if_block1.m(div1, null); 63510 current = true; 63511 }, 63512 p(ctx, dirty) { 63513 const checkbox_changes = {}; 63514 if (dirty[0] & /*subscription*/ 1) checkbox_changes.id = "auto-renew-" + /*subscription*/ ctx[0].externalId; 63515 if (dirty[0] & /*autoRenewToggleText*/ 134217728) checkbox_changes.label = /*autoRenewToggleText*/ ctx[27]; 63516 if (dirty[1] & /*autoRenewValue*/ 1) checkbox_changes.checked = /*autoRenewValue*/ ctx[31]; 63517 if (dirty[0] & /*isUpdatingAutoRenew*/ 268435456) checkbox_changes.disabled = /*isUpdatingAutoRenew*/ ctx[28]; 63518 checkbox.$set(checkbox_changes); 63519 63520 if (/*isUpdatingAutoRenew*/ ctx[28]) { 63521 if (if_block0) ; else { 63522 if_block0 = create_if_block_19(); 63523 if_block0.c(); 63524 if_block0.m(div0, null); 63525 } 63526 } else if (if_block0) { 63527 if_block0.d(1); 63528 if_block0 = null; 63529 } 63530 63531 if (/*statusMessage*/ ctx[29]) { 63532 if (if_block1) { 63533 if_block1.p(ctx, dirty); 63534 } else { 63535 if_block1 = create_if_block_18(ctx); 63536 if_block1.c(); 63537 if_block1.m(div1, null); 63538 } 63539 } else if (if_block1) { 63540 if_block1.d(1); 63541 if_block1 = null; 63542 } 63543 }, 63544 i(local) { 63545 if (current) return; 63546 transition_in(checkbox.$$.fragment, local); 63547 current = true; 63548 }, 63549 o(local) { 63550 transition_out(checkbox.$$.fragment, local); 63551 current = false; 63552 }, 63553 d(detaching) { 63554 if (detaching) { 63555 detach(div1); 63556 } 63557 63558 destroy_component(checkbox); 63559 if (if_block0) if_block0.d(); 63560 if (if_block1) if_block1.d(); 63561 } 63562 }; 63563 } 63564 63565 // (166:14) {#if isUpdatingAutoRenew} 63566 function create_if_block_19(ctx) { 63567 let span; 63568 63569 return { 63570 c() { 63571 span = element("span"); 63572 span.textContent = "Updating..."; 63573 attr(span, "class", "updating-indicator svelte-xxnasy"); 63574 }, 63575 m(target, anchor) { 63576 insert(target, span, anchor); 63577 }, 63578 d(detaching) { 63579 if (detaching) { 63580 detach(span); 63581 } 63582 } 63583 }; 63584 } 63585 63586 // (170:12) {#if statusMessage} 63587 function create_if_block_18(ctx) { 63588 let div; 63589 let t; 63590 let div_class_value; 63591 63592 return { 63593 c() { 63594 div = element("div"); 63595 t = text(/*statusMessage*/ ctx[29]); 63596 attr(div, "class", div_class_value = "status-message " + /*statusType*/ ctx[30] + " svelte-xxnasy"); 63597 }, 63598 m(target, anchor) { 63599 insert(target, div, anchor); 63600 append(div, t); 63601 }, 63602 p(ctx, dirty) { 63603 if (dirty[0] & /*statusMessage*/ 536870912) set_data(t, /*statusMessage*/ ctx[29]); 63604
63605 if (dirty[0] & /*statusType*/ 1073741824 && div_class_value !== (div_class_value = "status-message " + /*statusType*/ ctx[30] + " svelte-xxnasy")) { 63606 attr(div, "class", div_class_value); 63607 } 63608 }, 63609 d(detaching) { 63610 if (detaching) { 63611 detach(div); 63612 } 63613 } 63614 }; 63615 } 63616 63617 // (177:8) {#if element === 'billing_history' && !elementsHide.billingHistory} 63618 function create_if_block_15(ctx) { 63619 let if_block_anchor; 63620 let current; 63621 let if_block = /*billingHistoryLink*/ ctx[3] && create_if_block_16(ctx); 63622 63623 return { 63624 c() { 63625 if (if_block) if_block.c(); 63626 if_block_anchor = empty(); 63627 }, 63628 m(target, anchor) { 63629 if (if_block) if_block.m(target, anchor); 63630 insert(target, if_block_anchor, anchor); 63631 current = true; 63632 }, 63633 p(ctx, dirty) { 63634 if (/*billingHistoryLink*/ ctx[3]) { 63635 if (if_block) { 63636 if_block.p(ctx, dirty); 63637 63638 if (dirty[0] & /*billingHistoryLink*/ 8) { 63639 transition_in(if_block, 1); 63640 } 63641 } else { 63642 if_block = create_if_block_16(ctx); 63643 if_block.c(); 63644 transition_in(if_block, 1); 63645 if_block.m(if_block_anchor.parentNode, if_block_anchor); 63646 } 63647 } else if (if_block) { 63648 group_outros(); 63649 63650 transition_out(if_block, 1, 1, () => { 63651 if_block = null; 63652 }); 63653 63654 check_outros(); 63655 } 63656 }, 63657 i(local) { 63658 if (current) return; 63659 transition_in(if_block); 63660 current = true; 63661 }, 63662 o(local) { 63663 transition_out(if_block); 63664 current = false; 63665 }, 63666 d(detaching) { 63667 if (detaching) { 63668 detach(if_block_anchor); 63669 } 63670 63671 if (if_block) if_block.d(detaching); 63672 } 63673 }; 63674 } 63675 63676 // (178:10) {#if billingHistoryLink} 63677 function create_if_block_16(ctx) { 63678 let tablink; 63679 let current; 63680 63681 tablink = new Tablink({ 63682 props: { 63683 text: /*billingHistoryLink*/ ctx[3], 63684 onClick: /*func*/ ctx[39] 63685 } 63686 }); 63687 63688 return { 63689 c() { 63690 create_component(tablink.$$.fragment); 63691 }, 63692 m(target, anchor) { 63693 mount_component(tablink, target, anchor); 63694 current = true; 63695 }, 63696 p(ctx, dirty) { 63697 const tablink_changes = {}; 63698 if (dirty[0] & /*billingHistoryLink*/ 8) tablink_changes.text = /*billingHistoryLink*/ ctx[3]; 63699 if (dirty[0] & /*onViewHistory, subscription*/ 17) tablink_changes.onClick = /*func*/ ctx[39]; 63700 tablink.$set(tablink_changes); 63701 }, 63702 i(local) { 63703 if (current) return; 63704 transition_in(tablink.$$.fragment, local); 63705 current = true; 63706 }, 63707 o(local) { 63708 transition_out(tablink.$$.fragment, local); 63709 current = false; 63710 }, 63711 d(detaching) { 63712 destroy_component(tablink, detaching); 63713 } 63714 }; 63715 } 63716 63717 // (185:8) {#if element === 'change_payment' && !elementsHide.changePayment && !subscription.isGift} 63718 function create_if_block_13$1(ctx) { 63719 let if_block_anchor; 63720 let current; 63721 let if_block = /*changePaymentMethodText*/ ctx[10] && create_if_block_14$1(ctx); 63722 63723 return { 63724 c() { 63725 if (if_block) if_block.c(); 63726 if_block_anchor = empty(); 63727 }, 63728 m(target, anchor) { 63729 if (if_block) if_block.m(target, anchor); 63730 insert(target, if_block_anchor, anchor); 63731 current = true; 63732 }, 63733 p(ctx, dirty) { 63734 if (/*changePaymentMethodText*/ ctx[10]) { 63735 if (if_block) { 63736 if_block.p(ctx, dirty); 63737 63738 if (dirty[0] & /*changePaymentMethodText*/ 1024) { 63739 transition_in(if_block, 1); 63740 } 63741 } else { 63742 if_block = create_if_block_14$1(ctx); 63743 if_block.c(); 63744 transition_in(if_block, 1); 63745 if_block.m(if_block_anchor.parentNode, if_block_anchor); 63746 } 63747 } else if (if_block) { 63748 group_outros(); 63749 63750 transition_out(if_block, 1, 1, () => { 63751 if_block = null; 63752 }); 63753 63754 check_outros(); 63755 } 63756 }, 63757 i(local) { 63758 if (current) return; 63759 transition_in(if_block); 63760 current = true; 63761 }, 63762 o(local) { 63763 transition_out(if_block); 63764 current = false; 63765 }, 63766 d(detaching) { 63767 if (detaching) { 63768 detach(if_block_anchor); 63769 } 63770 63771 if (if_block) if_block.d(detaching); 63772 } 63773 }; 63774 } 63775 63776 // (186:10) {#if changePaymentMethodText} 63777 function create_if_block_14$1(ctx) { 63778 let tablink; 63779 let current; 63780 63781 tablink = new Tablink({ 63782 props: { 63783 text: /*changePaymentMethodText*/ ctx[10], 63784 onClick: /*func_1*/ ctx[40] 63785 } 63786 }); 63787 63788 return { 63789 c() { 63790 create_component(tablink.$$.fragment); 63791 }, 63792 m(target, anchor) { 63793 mount_component(tablink, target, anchor); 63794 current = true; 63795 }, 63796 p(ctx, dirty) { 63797 const tablink_changes = {};
63798 if (dirty[0] & /*changePaymentMethodText*/ 1024) tablink_changes.text = /*changePaymentMethodText*/ ctx[10]; 63799 if (dirty[0] & /*onChangePayment, subscription*/ 33) tablink_changes.onClick = /*func_1*/ ctx[40]; 63800 tablink.$set(tablink_changes); 63801 }, 63802 i(local) { 63803 if (current) return; 63804 transition_in(tablink.$$.fragment, local); 63805 current = true; 63806 }, 63807 o(local) { 63808 transition_out(tablink.$$.fragment, local); 63809 current = false; 63810 }, 63811 d(detaching) { 63812 destroy_component(tablink, detaching); 63813 } 63814 }; 63815 } 63816 63817 // (193:8) {#if element === 'change_subscription' && !elementsHide.changeSubscription} 63818 function create_if_block_11$1(ctx) { 63819 let if_block_anchor; 63820 let current; 63821 let if_block = /*changeSubscriptionText*/ ctx[11] && create_if_block_12$1(ctx); 63822 63823 return { 63824 c() { 63825 if (if_block) if_block.c(); 63826 if_block_anchor = empty(); 63827 }, 63828 m(target, anchor) { 63829 if (if_block) if_block.m(target, anchor); 63830 insert(target, if_block_anchor, anchor); 63831 current = true; 63832 }, 63833 p(ctx, dirty) { 63834 if (/*changeSubscriptionText*/ ctx[11]) { 63835 if (if_block) { 63836 if_block.p(ctx, dirty); 63837 63838 if (dirty[0] & /*changeSubscriptionText*/ 2048) { 63839 transition_in(if_block, 1); 63840 } 63841 } else { 63842 if_block = create_if_block_12$1(ctx); 63843 if_block.c(); 63844 transition_in(if_block, 1); 63845 if_block.m(if_block_anchor.parentNode, if_block_anchor); 63846 } 63847 } else if (if_block) { 63848 group_outros(); 63849 63850 transition_out(if_block, 1, 1, () => { 63851 if_block = null; 63852 }); 63853 63854 check_outros(); 63855 } 63856 }, 63857 i(local) { 63858 if (current) return; 63859 transition_in(if_block); 63860 current = true; 63861 }, 63862 o(local) { 63863 transition_out(if_block); 63864 current = false; 63865 }, 63866 d(detaching) { 63867 if (detaching) { 63868 detach(if_block_anchor); 63869 } 63870 63871 if (if_block) if_block.d(detaching); 63872 } 63873 }; 63874 } 63875 63876 // (194:10) {#if changeSubscriptionText} 63877 function create_if_block_12$1(ctx) { 63878 let tablink; 63879 let current; 63880 63881 tablink = new Tablink({ 63882 props: { 63883 text: /*changeSubscriptionText*/ ctx[11], 63884 path: /*withSubscriptionParam*/ ctx[33](/*changeSubscriptionPath*/ ctx[13], /*subscription*/ ctx[0].externalId), 63885 logDlEvent: /*func_2*/ ctx[41] 63886 } 63887 }); 63888 63889 return { 63890 c() { 63891 create_component(tablink.$$.fragment); 63892 }, 63893 m(target, anchor) { 63894 mount_component(tablink, target, anchor); 63895 current = true; 63896 }, 63897 p(ctx, dirty) { 63898 const tablink_changes = {}; 63899 if (dirty[0] & /*changeSubscriptionText*/ 2048) tablink_changes.text = /*changeSubscriptionText*/ ctx[11]; 63900 if (dirty[0] & /*changeSubscriptionPath, subscription*/ 8193) tablink_changes.path = /*withSubscriptionParam*/ ctx[33](/*changeSubscriptionPath*/ ctx[13], /*subscription*/ ctx[0].externalId); 63901 if (dirty[0] & /*logChangeSubscription, subscription*/ 65) tablink_changes.logDlEvent = /*func_2*/ ctx[41]; 63902 tablink.$set(tablink_changes); 63903 }, 63904 i(local) { 63905 if (current) return; 63906 transition_in(tablink.$$.fragment, local); 63907 current = true; 63908 }, 63909 o(local) { 63910 transition_out(tablink.$$.fragment, local); 63911 current = false; 63912 }, 63913 d(detaching) { 63914 destroy_component(tablink, detaching); 63915 } 63916 }; 63917 } 63918 63919 // (202:8) {#if element === 'cancel_subscription' && !elementsHide.cancelSubscription && !subscription.isGift} 63920 function create_if_block_9$1(ctx) { 63921 let if_block_anchor; 63922 let current; 63923 let if_block = /*cancelSubscriptionText*/ ctx[12] && create_if_block_10$1(ctx); 63924 63925 return { 63926 c() { 63927 if (if_block) if_block.c(); 63928 if_block_anchor = empty(); 63929 }, 63930 m(target, anchor) { 63931 if (if_block) if_block.m(target, anchor); 63932 insert(target, if_block_anchor, anchor); 63933 current = true; 63934 }, 63935 p(ctx, dirty) { 63936 if (/*cancelSubscriptionText*/ ctx[12]) { 63937 if (if_block) { 63938 if_block.p(ctx, dirty); 63939 63940 if (dirty[0] & /*cancelSubscriptionText*/ 4096) { 63941 transition_in(if_block, 1); 63942 } 63943 } else { 63944 if_block = create_if_block_10$1(ctx); 63945 if_block.c(); 63946 transition_in(if_block, 1); 63947 if_block.m(if_block_anchor.parentNode, if_block_anchor); 63948 } 63949 } else if (if_block) { 63950 group_outros(); 63951 63952 transition_out(if_block, 1, 1, () => { 63953 if_block = null; 63954 }); 63955 63956 check_outros(); 63957 } 63958 }, 63959 i(local) { 63960 if (current) return; 63961 transition_in(if_block); 63962 current = true; 63963 }, 63964 o(local) { 63965 transition_out(if_block); 63966 current = false;
63967 }, 63968 d(detaching) { 63969 if (detaching) { 63970 detach(if_block_anchor); 63971 } 63972 63973 if (if_block) if_block.d(detaching); 63974 } 63975 }; 63976 } 63977 63978 // (203:10) {#if cancelSubscriptionText} 63979 function create_if_block_10$1(ctx) { 63980 let tablink; 63981 let current; 63982 63983 tablink = new Tablink({ 63984 props: { 63985 text: /*cancelSubscriptionText*/ ctx[12], 63986 path: /*withSubscriptionParam*/ ctx[33](/*cancelSubscriptionPath*/ ctx[14], /*subscription*/ ctx[0].externalId), 63987 logDlEvent: /*func_3*/ ctx[42] 63988 } 63989 }); 63990 63991 return { 63992 c() { 63993 create_component(tablink.$$.fragment); 63994 }, 63995 m(target, anchor) { 63996 mount_component(tablink, target, anchor); 63997 current = true; 63998 }, 63999 p(ctx, dirty) { 64000 const tablink_changes = {}; 64001 if (dirty[0] & /*cancelSubscriptionText*/ 4096) tablink_changes.text = /*cancelSubscriptionText*/ ctx[12]; 64002 if (dirty[0] & /*cancelSubscriptionPath, subscription*/ 16385) tablink_changes.path = /*withSubscriptionParam*/ ctx[33](/*cancelSubscriptionPath*/ ctx[14], /*subscription*/ ctx[0].externalId); 64003 if (dirty[0] & /*logCancelSubscription, subscription*/ 129) tablink_changes.logDlEvent = /*func_3*/ ctx[42]; 64004 tablink.$set(tablink_changes); 64005 }, 64006 i(local) { 64007 if (current) return; 64008 transition_in(tablink.$$.fragment, local); 64009 current = true; 64010 }, 64011 o(local) { 64012 transition_out(tablink.$$.fragment, local); 64013 current = false; 64014 }, 64015 d(detaching) { 64016 destroy_component(tablink, detaching); 64017 } 64018 }; 64019 } 64020 64021 // (211:8) {#if element === 'suspend_resume_subscription' && !elementsHide.suspendResumeSubscription && paymentProvider === 'zuora-billing'} 64022 function create_if_block_7$1(ctx) { 64023 let if_block_anchor; 64024 let current; 64025 let if_block = /*suspendResumeSubscriptionText*/ ctx[15] && create_if_block_8$1(ctx); 64026 64027 return { 64028 c() { 64029 if (if_block) if_block.c(); 64030 if_block_anchor = empty(); 64031 }, 64032 m(target, anchor) { 64033 if (if_block) if_block.m(target, anchor); 64034 insert(target, if_block_anchor, anchor); 64035 current = true; 64036 }, 64037 p(ctx, dirty) { 64038 if (/*suspendResumeSubscriptionText*/ ctx[15]) { 64039 if (if_block) { 64040 if_block.p(ctx, dirty); 64041 64042 if (dirty[0] & /*suspendResumeSubscriptionText*/ 32768) { 64043 transition_in(if_block, 1); 64044 } 64045 } else { 64046 if_block = create_if_block_8$1(ctx); 64047 if_block.c(); 64048 transition_in(if_block, 1); 64049 if_block.m(if_block_anchor.parentNode, if_block_anchor); 64050 } 64051 } else if (if_block) { 64052 group_outros(); 64053 64054 transition_out(if_block, 1, 1, () => { 64055 if_block = null; 64056 }); 64057 64058 check_outros(); 64059 } 64060 }, 64061 i(local) { 64062 if (current) return; 64063 transition_in(if_block); 64064 current = true; 64065 }, 64066 o(local) { 64067 transition_out(if_block); 64068 current = false; 64069 }, 64070 d(detaching) { 64071 if (detaching) { 64072 detach(if_block_anchor); 64073 } 64074 64075 if (if_block) if_block.d(detaching); 64076 } 64077 }; 64078 } 64079 64080 // (212:10) {#if suspendResumeSubscriptionText} 64081 function create_if_block_8$1(ctx) { 64082 let tablink; 64083 let current; 64084 64085 tablink = new Tablink({ 64086 props: { 64087 text: /*suspendResumeSubscriptionText*/ ctx[15], 64088 path: /*withSubscriptionParam*/ ctx[33](/*suspendResumeSubscriptionPath*/ ctx[16], /*subscription*/ ctx[0].externalId), 64089 logDlEvent: /*func_4*/ ctx[43] 64090 } 64091 }); 64092 64093 return { 64094 c() { 64095 create_component(tablink.$$.fragment); 64096 }, 64097 m(target, anchor) { 64098 mount_component(tablink, target, anchor); 64099 current = true; 64100 }, 64101 p(ctx, dirty) { 64102 const tablink_changes = {}; 64103 if (dirty[0] & /*suspendResumeSubscriptionText*/ 32768) tablink_changes.text = /*suspendResumeSubscriptionText*/ ctx[15]; 64104 if (dirty[0] & /*suspendResumeSubscriptionPath, subscription*/ 65537) tablink_changes.path = /*withSubscriptionParam*/ ctx[33](/*suspendResumeSubscriptionPath*/ ctx[16], /*subscription*/ ctx[0].externalId); 64105 if (dirty[0] & /*logSuspendResumeSubscription, subscription*/ 257) tablink_changes.logDlEvent = /*func_4*/ ctx[43]; 64106 tablink.$set(tablink_changes); 64107 }, 64108 i(local) { 64109 if (current) return; 64110 transition_in(tablink.$$.fragment, local); 64111 current = true; 64112 }, 64113 o(local) { 64114 transition_out(tablink.$$.fragment, local); 64115 current = false;
64116 }, 64117 d(detaching) { 64118 destroy_component(tablink, detaching); 64119 } 64120 }; 64121 } 64122 64123 // (220:8) {#if element === 'subscription_custom_fields_list' && !elementsHide.subscriptionCustomFields} 64124 function create_if_block_5$5(ctx) { 64125 let if_block_anchor; 64126 let current; 64127 let if_block = /*subscriptionCustomFieldsText*/ ctx[17] && create_if_block_6$5(ctx); 64128 64129 return { 64130 c() { 64131 if (if_block) if_block.c(); 64132 if_block_anchor = empty(); 64133 }, 64134 m(target, anchor) { 64135 if (if_block) if_block.m(target, anchor); 64136 insert(target, if_block_anchor, anchor); 64137 current = true; 64138 }, 64139 p(ctx, dirty) { 64140 if (/*subscriptionCustomFieldsText*/ ctx[17]) { 64141 if (if_block) { 64142 if_block.p(ctx, dirty); 64143 64144 if (dirty[0] & /*subscriptionCustomFieldsText*/ 131072) { 64145 transition_in(if_block, 1); 64146 } 64147 } else { 64148 if_block = create_if_block_6$5(ctx); 64149 if_block.c(); 64150 transition_in(if_block, 1); 64151 if_block.m(if_block_anchor.parentNode, if_block_anchor); 64152 } 64153 } else if (if_block) { 64154 group_outros(); 64155 64156 transition_out(if_block, 1, 1, () => { 64157 if_block = null; 64158 }); 64159 64160 check_outros(); 64161 } 64162 }, 64163 i(local) { 64164 if (current) return; 64165 transition_in(if_block); 64166 current = true; 64167 }, 64168 o(local) { 64169 transition_out(if_block); 64170 current = false; 64171 }, 64172 d(detaching) { 64173 if (detaching) { 64174 detach(if_block_anchor); 64175 } 64176 64177 if (if_block) if_block.d(detaching); 64178 } 64179 }; 64180 } 64181 64182 // (221:10) {#if subscriptionCustomFieldsText} 64183 function create_if_block_6$5(ctx) { 64184 let tablink; 64185 let current; 64186 64187 tablink = new Tablink({ 64188 props: { 64189 text: /*subscriptionCustomFieldsText*/ ctx[17], 64190 onClick: /*func_5*/ ctx[44] 64191 } 64192 }); 64193 64194 return { 64195 c() { 64196 create_component(tablink.$$.fragment); 64197 }, 64198 m(target, anchor) { 64199 mount_component(tablink, target, anchor); 64200 current = true; 64201 }, 64202 p(ctx, dirty) { 64203 const tablink_changes = {}; 64204 if (dirty[0] & /*subscriptionCustomFieldsText*/ 131072) tablink_changes.text = /*subscriptionCustomFieldsText*/ ctx[17]; 64205 if (dirty[0] & /*onUpdateSubscriptionCustomFields, subscription*/ 262145) tablink_changes.onClick = /*func_5*/ ctx[44]; 64206 tablink.$set(tablink_changes); 64207 }, 64208 i(local) { 64209 if (current) return; 64210 transition_in(tablink.$$.fragment, local); 64211 current = true; 64212 }, 64213 o(local) { 64214 transition_out(tablink.$$.fragment, local); 64215 current = false; 64216 }, 64217 d(detaching) { 64218 destroy_component(tablink, detaching); 64219 } 64220 }; 64221 } 64222 64223 // (228:8) {#if element === 'bill_to_contact' && !elementsHide.updateBillToContact && paymentProvider === 'zuora-billing'} 64224 function create_if_block_3$6(ctx) { 64225 let if_block_anchor; 64226 let current; 64227 let if_block = /*updateBillToContactText*/ ctx[19] && create_if_block_4$5(ctx); 64228 64229 return { 64230 c() { 64231 if (if_block) if_block.c(); 64232 if_block_anchor = empty(); 64233 }, 64234 m(target, anchor) { 64235 if (if_block) if_block.m(target, anchor); 64236 insert(target, if_block_anchor, anchor); 64237 current = true; 64238 }, 64239 p(ctx, dirty) { 64240 if (/*updateBillToContactText*/ ctx[19]) { 64241 if (if_block) { 64242 if_block.p(ctx, dirty); 64243 64244 if (dirty[0] & /*updateBillToContactText*/ 524288) { 64245 transition_in(if_block, 1); 64246 } 64247 } else { 64248 if_block = create_if_block_4$5(ctx); 64249 if_block.c(); 64250 transition_in(if_block, 1); 64251 if_block.m(if_block_anchor.parentNode, if_block_anchor); 64252 } 64253 } else if (if_block) { 64254 group_outros(); 64255 64256 transition_out(if_block, 1, 1, () => { 64257 if_block = null; 64258 }); 64259 64260 check_outros(); 64261 } 64262 }, 64263 i(local) { 64264 if (current) return; 64265 transition_in(if_block); 64266 current = true; 64267 }, 64268 o(local) { 64269 transition_out(if_block); 64270 current = false; 64271 }, 64272 d(detaching) { 64273 if (detaching) { 64274 detach(if_block_anchor); 64275 } 64276 64277 if (if_block) if_block.d(detaching); 64278 } 64279 }; 64280 } 64281 64282 // (229:10) {#if updateBillToContactText} 64283 function create_if_block_4$5(ctx) { 64284 let tablink; 64285 let current; 64286 64287 tablink = new Tablink({ 64288 props: { 64289 text: /*updateBillToContactText*/ ctx[19], 64290 path: /*withSubscriptionParam*/ ctx[33](/*updateBillToContactPath*/ ctx[20], /*subscription*/ ctx[0].externalId), 64291 logDlEvent: /*func_6*/ ctx[45] 64292 } 64293 }); 64294 64295 return { 64296 c() { 64297 create_component(tablink.$$.fragment); 64298 }, 64299 m(target, anchor) { 64300 mount_component(tablink, target, anchor); 64301 current = true; 64302 }, 64303 p(ctx, dirty) { 64304 const tablink_changes = {};
64305 if (dirty[0] & /*updateBillToContactText*/ 524288) tablink_changes.text = /*updateBillToContactText*/ ctx[19]; 64306 if (dirty[0] & /*updateBillToContactPath, subscription*/ 1048577) tablink_changes.path = /*withSubscriptionParam*/ ctx[33](/*updateBillToContactPath*/ ctx[20], /*subscription*/ ctx[0].externalId); 64307 if (dirty[0] & /*logUpdateBillToContact, subscription*/ 513) tablink_changes.logDlEvent = /*func_6*/ ctx[45]; 64308 tablink.$set(tablink_changes); 64309 }, 64310 i(local) { 64311 if (current) return; 64312 transition_in(tablink.$$.fragment, local); 64313 current = true; 64314 }, 64315 o(local) { 64316 transition_out(tablink.$$.fragment, local); 64317 current = false; 64318 }, 64319 d(detaching) { 64320 destroy_component(tablink, detaching); 64321 } 64322 }; 64323 } 64324 64325 // (237:8) {#if element === 'subscription_custom_fields_list' && displayedFields.length > 0} 64326 function create_if_block_2$a(ctx) { 64327 let each_1_anchor; 64328 let each_value_1 = ensure_array_like(/*displayedFields*/ ctx[32]); 64329 let each_blocks = []; 64330 64331 for (let i = 0; i < each_value_1.length; i += 1) { 64332 each_blocks[i] = create_each_block_1$2(get_each_context_1$2(ctx, each_value_1, i)); 64333 } 64334 64335 return { 64336 c() { 64337 for (let i = 0; i < each_blocks.length; i += 1) { 64338 each_blocks[i].c(); 64339 } 64340 64341 each_1_anchor = empty(); 64342 }, 64343 m(target, anchor) { 64344 for (let i = 0; i < each_blocks.length; i += 1) { 64345 if (each_blocks[i]) { 64346 each_blocks[i].m(target, anchor); 64347 } 64348 } 64349 64350 insert(target, each_1_anchor, anchor); 64351 }, 64352 p(ctx, dirty) { 64353 if (dirty[1] & /*displayedFields*/ 2) { 64354 each_value_1 = ensure_array_like(/*displayedFields*/ ctx[32]); 64355 let i; 64356 64357 for (i = 0; i < each_value_1.length; i += 1) { 64358 const child_ctx = get_each_context_1$2(ctx, each_value_1, i); 64359 64360 if (each_blocks[i]) { 64361 each_blocks[i].p(child_ctx, dirty); 64362 } else { 64363 each_blocks[i] = create_each_block_1$2(child_ctx); 64364 each_blocks[i].c(); 64365 each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); 64366 } 64367 } 64368 64369 for (; i < each_blocks.length; i += 1) { 64370 each_blocks[i].d(1); 64371 } 64372 64373 each_blocks.length = each_value_1.length; 64374 } 64375 }, 64376 d(detaching) { 64377 if (detaching) { 64378 detach(each_1_anchor); 64379 } 64380 64381 destroy_each(each_blocks, detaching); 64382 } 64383 }; 64384 } 64385 64386 // (238:10) {#each displayedFields as field} 64387 function create_each_block_1$2(ctx) { 64388 let div1; 64389 let span; 64390 let t0_value = /*field*/ ctx[51].label + ""; 64391 let t0; 64392 let t1; 64393 let div0; 64394 let t2_value = /*field*/ ctx[51].value + ""; 64395 let t2; 64396 let t3; 64397 64398 return { 64399 c() { 64400 div1 = element("div"); 64401 span = element("span"); 64402 t0 = text(t0_value); 64403 t1 = space(); 64404 div0 = element("div"); 64405 t2 = text(t2_value); 64406 t3 = space(); 64407 attr(span, "class", "svelte-xxnasy"); 64408 attr(div0, "class", "zephr-box-item-information svelte-xxnasy"); 64409 attr(div1, "class", "zephr-section svelte-xxnasy"); 64410 }, 64411 m(target, anchor) { 64412 insert(target, div1, anchor); 64413 append(div1, span); 64414 append(span, t0); 64415 append(div1, t1); 64416 append(div1, div0); 64417 append(div0, t2); 64418 append(div1, t3); 64419 }, 64420 p(ctx, dirty) { 64421 if (dirty[1] & /*displayedFields*/ 2 && t0_value !== (t0_value = /*field*/ ctx[51].label + "")) set_data(t0, t0_value); 64422 if (dirty[1] & /*displayedFields*/ 2 && t2_value !== (t2_value = /*field*/ ctx[51].value + "")) set_data(t2, t2_value); 64423 }, 64424 d(detaching) { 64425 if (detaching) { 64426 detach(div1); 64427 } 64428 } 64429 }; 64430 } 64431 64432 // (136:6) {#each elementsOrder as element, _index} 64433 function create_each_block$a(ctx) { 64434 let t0; 64435 let t1; 64436 let t2; 64437 let t3; 64438 let t4; 64439 let t5; 64440 let t6; 64441 let t7; 64442 let t8; 64443 let if_block9_anchor; 64444 let current; 64445 let if_block0 = /*element*/ ctx[48] === 'subscription_information' && !/*elementsHide*/ ctx[22].subscriptionInformation && create_if_block_20(ctx); 64446 let if_block1 = /*element*/ ctx[48] === 'payment_auto_renew_toggle' && /*autoRenewToggleEnabled*/ ctx[26] && /*paymentProvider*/ ctx[25] === 'zuora-billing' && /*subscription*/ ctx[0].status === 'active' && !/*subscription*/ ctx[0].isGift && /*subscription*/ ctx[0].termType === 'TERMED' && create_if_block_17(ctx); 64447 let if_block2 = /*element*/ ctx[48] === 'billing_history' && !/*elementsHide*/ ctx[22].billingHistory && create_if_block_15(ctx); 64448 let if_block3 = /*element*/ ctx[48] === 'change_payment' && !/*elementsHide*/ ctx[22].changePayment && !/*subscription*/ ctx[0].isGift && create_if_block_13$1(ctx); 64449 let if_block4 = /*element*/ ctx[48] === 'change_subscription' && !/*elementsHide*/ ctx[22].changeSubscription && create_if_block_11$1(ctx); 64450 let if_block5 = /*element*/ ctx[48] === 'cancel_subscription' && !/*elementsHide*/ ctx[22].cancelSubscription && !/*subscription*/ ctx[0].isGift && create_if_block_9$1(ctx); 64451 let if_block6 = /*element*/ ctx[48] === 'suspend_resume_subscription' && !/*elementsHide*/ ctx[22].suspendResumeSubscription && /*paymentProvider*/ ctx[25] === 'zuora-billing' && create_if_block_7$1(ctx); 64452 let if_block7 = /*element*/ ctx[48] === 'subscription_custom_fields_list' && !/*elementsHide*/ ctx[22].subscriptionCustomFields && create_if_block_5$5(ctx); 64453 let if_block8 = /*element*/ ctx[48] === 'bill_to_contact' && !/*elementsHide*/ ctx[22].updateBillToContact && /*paymentProvider*/ ctx[25] === 'zuora-billing' && create_if_block_3$6(ctx); 64454 let if_block9 = /*element*/ ctx[48] === 'subscription_custom_fields_list' && /*displayedFields*/ ctx[32].length > 0 && create_if_block_2$a(ctx); 64455 64456 return { 64457 c() { 64458 if (if_block0) if_block0.c(); 64459 t0 = space(); 64460 if (if_block1) if_block1.c(); 64461 t1 = space(); 64462 if (if_block2) if_block2.c(); 64463 t2 = space(); 64464 if (if_block3) if_block3.c(); 64465 t3 = space(); 64466 if (if_block4) if_block4.c(); 64467 t4 = space(); 64468 if (if_block5) if_block5.c(); 64469 t5 = space(); 64470 if (if_block6) if_block6.c(); 64471 t6 = space(); 64472 if (if_block7) if_block7.c(); 64473 t7 = space(); 64474 if (if_block8) if_block8.c(); 64475 t8 = space(); 64476 if (if_block9) if_block9.c(); 64477 if_block9_anchor = empty(); 64478 }, 64479 m(target, anchor) { 64480 if (if_block0) if_block0.m(target, anchor); 64481 insert(target, t0, anchor); 64482 if (if_block1) if_block1.m(target, anchor); 64483 insert(target, t1, anchor); 64484 if (if_block2) if_block2.m(target, anchor); 64485 insert(target, t2, anchor); 64486 if (if_block3) if_block3.m(target, anchor);
64487 insert(target, t3, anchor); 64488 if (if_block4) if_block4.m(target, anchor); 64489 insert(target, t4, anchor); 64490 if (if_block5) if_block5.m(target, anchor); 64491 insert(target, t5, anchor); 64492 if (if_block6) if_block6.m(target, anchor); 64493 insert(target, t6, anchor); 64494 if (if_block7) if_block7.m(target, anchor); 64495 insert(target, t7, anchor); 64496 if (if_block8) if_block8.m(target, anchor); 64497 insert(target, t8, anchor); 64498 if (if_block9) if_block9.m(target, anchor); 64499 insert(target, if_block9_anchor, anchor); 64500 current = true; 64501 }, 64502 p(ctx, dirty) { 64503 if (/*element*/ ctx[48] === 'subscription_information' && !/*elementsHide*/ ctx[22].subscriptionInformation) { 64504 if (if_block0) { 64505 if_block0.p(ctx, dirty); 64506 } else { 64507 if_block0 = create_if_block_20(ctx); 64508 if_block0.c(); 64509 if_block0.m(t0.parentNode, t0); 64510 } 64511 } else if (if_block0) { 64512 if_block0.d(1); 64513 if_block0 = null; 64514 } 64515 64516 if (/*element*/ ctx[48] === 'payment_auto_renew_toggle' && /*autoRenewToggleEnabled*/ ctx[26] && /*paymentProvider*/ ctx[25] === 'zuora-billing' && /*subscription*/ ctx[0].status === 'active' && !/*subscription*/ ctx[0].isGift && /*subscription*/ ctx[0].termType === 'TERMED') { 64517 if (if_block1) { 64518 if_block1.p(ctx, dirty); 64519 64520 if (dirty[0] & /*elementsOrder, autoRenewToggleEnabled, paymentProvider, subscription*/ 102760449) { 64521 transition_in(if_block1, 1); 64522 } 64523 } else { 64524 if_block1 = create_if_block_17(ctx); 64525 if_block1.c(); 64526 transition_in(if_block1, 1); 64527 if_block1.m(t1.parentNode, t1); 64528 } 64529 } else if (if_block1) { 64530 group_outros(); 64531 64532 transition_out(if_block1, 1, 1, () => { 64533 if_block1 = null; 64534 }); 64535 64536 check_outros(); 64537 } 64538 64539 if (/*element*/ ctx[48] === 'billing_history' && !/*elementsHide*/ ctx[22].billingHistory) { 64540 if (if_block2) { 64541 if_block2.p(ctx, dirty); 64542 64543 if (dirty[0] & /*elementsOrder, elementsHide*/ 6291456) { 64544 transition_in(if_block2, 1); 64545 } 64546 } else { 64547 if_block2 = create_if_block_15(ctx); 64548 if_block2.c(); 64549 transition_in(if_block2, 1); 64550 if_block2.m(t2.parentNode, t2); 64551 } 64552 } else if (if_block2) { 64553 group_outros(); 64554 64555 transition_out(if_block2, 1, 1, () => { 64556 if_block2 = null; 64557 }); 64558 64559 check_outros(); 64560 } 64561 64562 if (/*element*/ ctx[48] === 'change_payment' && !/*elementsHide*/ ctx[22].changePayment && !/*subscription*/ ctx[0].isGift) { 64563 if (if_block3) { 64564 if_block3.p(ctx, dirty); 64565 64566 if (dirty[0] & /*elementsOrder, elementsHide, subscription*/ 6291457) { 64567 transition_in(if_block3, 1); 64568 } 64569 } else { 64570 if_block3 = create_if_block_13$1(ctx); 64571 if_block3.c(); 64572 transition_in(if_block3, 1); 64573 if_block3.m(t3.parentNode, t3); 64574 } 64575 } else if (if_block3) { 64576 group_outros(); 64577 64578 transition_out(if_block3, 1, 1, () => { 64579 if_block3 = null; 64580 }); 64581 64582 check_outros(); 64583 } 64584 64585 if (/*element*/ ctx[48] === 'change_subscription' && !/*elementsHide*/ ctx[22].changeSubscription) { 64586 if (if_block4) { 64587 if_block4.p(ctx, dirty); 64588 64589 if (dirty[0] & /*elementsOrder, elementsHide*/ 6291456) { 64590 transition_in(if_block4, 1); 64591 } 64592 } else { 64593 if_block4 = create_if_block_11$1(ctx); 64594 if_block4.c(); 64595 transition_in(if_block4, 1); 64596 if_block4.m(t4.parentNode, t4); 64597 } 64598 } else if (if_block4) { 64599 group_outros(); 64600 64601 transition_out(if_block4, 1, 1, () => { 64602 if_block4 = null; 64603 }); 64604 64605 check_outros(); 64606 } 64607 64608 if (/*element*/ ctx[48] === 'cancel_subscription' && !/*elementsHide*/ ctx[22].cancelSubscription && !/*subscription*/ ctx[0].isGift) { 64609 if (if_block5) { 64610 if_block5.p(ctx, dirty); 64611 64612 if (dirty[0] & /*elementsOrder, elementsHide, subscription*/ 6291457) { 64613 transition_in(if_block5, 1); 64614 } 64615 } else { 64616 if_block5 = create_if_block_9$1(ctx); 64617 if_block5.c(); 64618 transition_in(if_block5, 1); 64619 if_block5.m(t5.parentNode, t5); 64620 } 64621 } else if (if_block5) { 64622 group_outros(); 64623 64624 transition_out(if_block5, 1, 1, () => { 64625 if_block5 = null; 64626 }); 64627 64628 check_outros(); 64629 } 64630 64631 if (/*element*/ ctx[48] === 'suspend_resume_subscription' && !/*elementsHide*/ ctx[22].suspendResumeSubscription && /*paymentProvider*/ ctx[25] === 'zuora-billing') { 64632 if (if_block6) { 64633 if_block6.p(ctx, dirty); 64634
64635 if (dirty[0] & /*elementsOrder, elementsHide, paymentProvider*/ 39845888) { 64636 transition_in(if_block6, 1); 64637 } 64638 } else { 64639 if_block6 = create_if_block_7$1(ctx); 64640 if_block6.c(); 64641 transition_in(if_block6, 1); 64642 if_block6.m(t6.parentNode, t6); 64643 } 64644 } else if (if_block6) { 64645 group_outros(); 64646 64647 transition_out(if_block6, 1, 1, () => { 64648 if_block6 = null; 64649 }); 64650 64651 check_outros(); 64652 } 64653 64654 if (/*element*/ ctx[48] === 'subscription_custom_fields_list' && !/*elementsHide*/ ctx[22].subscriptionCustomFields) { 64655 if (if_block7) { 64656 if_block7.p(ctx, dirty); 64657 64658 if (dirty[0] & /*elementsOrder, elementsHide*/ 6291456) { 64659 transition_in(if_block7, 1); 64660 } 64661 } else { 64662 if_block7 = create_if_block_5$5(ctx); 64663 if_block7.c(); 64664 transition_in(if_block7, 1); 64665 if_block7.m(t7.parentNode, t7); 64666 } 64667 } else if (if_block7) { 64668 group_outros(); 64669 64670 transition_out(if_block7, 1, 1, () => { 64671 if_block7 = null; 64672 }); 64673 64674 check_outros(); 64675 } 64676 64677 if (/*element*/ ctx[48] === 'bill_to_contact' && !/*elementsHide*/ ctx[22].updateBillToContact && /*paymentProvider*/ ctx[25] === 'zuora-billing') { 64678 if (if_block8) { 64679 if_block8.p(ctx, dirty); 64680 64681 if (dirty[0] & /*elementsOrder, elementsHide, paymentProvider*/ 39845888) { 64682 transition_in(if_block8, 1); 64683 } 64684 } else { 64685 if_block8 = create_if_block_3$6(ctx); 64686 if_block8.c(); 64687 transition_in(if_block8, 1); 64688 if_block8.m(t8.parentNode, t8); 64689 } 64690 } else if (if_block8) { 64691 group_outros(); 64692 64693 transition_out(if_block8, 1, 1, () => { 64694 if_block8 = null; 64695 }); 64696 64697 check_outros(); 64698 } 64699 64700 if (/*element*/ ctx[48] === 'subscription_custom_fields_list' && /*displayedFields*/ ctx[32].length > 0) { 64701 if (if_block9) { 64702 if_block9.p(ctx, dirty); 64703 } else { 64704 if_block9 = create_if_block_2$a(ctx); 64705 if_block9.c(); 64706 if_block9.m(if_block9_anchor.parentNode, if_block9_anchor); 64707 } 64708 } else if (if_block9) { 64709 if_block9.d(1); 64710 if_block9 = null; 64711 } 64712 }, 64713 i(local) { 64714 if (current) return; 64715 transition_in(if_block1); 64716 transition_in(if_block2); 64717 transition_in(if_block3); 64718 transition_in(if_block4); 64719 transition_in(if_block5); 64720 transition_in(if_block6); 64721 transition_in(if_block7); 64722 transition_in(if_block8); 64723 current = true; 64724 }, 64725 o(local) { 64726 transition_out(if_block1); 64727 transition_out(if_block2); 64728 transition_out(if_block3); 64729 transition_out(if_block4); 64730 transition_out(if_block5); 64731 transition_out(if_block6); 64732 transition_out(if_block7); 64733 transition_out(if_block8); 64734 current = false; 64735 }, 64736 d(detaching) { 64737 if (detaching) { 64738 detach(t0); 64739 detach(t1); 64740 detach(t2); 64741 detach(t3); 64742 detach(t4); 64743 detach(t5); 64744 detach(t6); 64745 detach(t7); 64746 detach(t8); 64747 detach(if_block9_anchor); 64748 } 64749 64750 if (if_block0) if_block0.d(detaching); 64751 if (if_block1) if_block1.d(detaching); 64752 if (if_block2) if_block2.d(detaching); 64753 if (if_block3) if_block3.d(detaching); 64754 if (if_block4) if_block4.d(detaching); 64755 if (if_block5) if_block5.d(detaching); 64756 if (if_block6) if_block6.d(detaching); 64757 if (if_block7) if_block7.d(detaching); 64758 if (if_block8) if_block8.d(detaching); 64759 if (if_block9) if_block9.d(detaching); 64760 } 64761 }; 64762 } 64763 64764 // (129:6) {#if subscription.amount} 64765 function create_if_block_1$g(ctx) { 64766 let div1; 64767 let span; 64768 let t0; 64769 let t1; 64770 let div0; 64771 let t2_value = /*subscription*/ ctx[0].amount + ""; 64772 let t2; 64773 64774 return { 64775 c() { 64776 div1 = element("div"); 64777 span = element("span"); 64778 t0 = text(/*subscriptionRateText*/ ctx[2]); 64779 t1 = space(); 64780 div0 = element("div"); 64781 t2 = text(t2_value); 64782 attr(span, "class", "svelte-xxnasy"); 64783 attr(div0, "class", "zephr-box-item-information svelte-xxnasy"); 64784 attr(div1, "class", "zephr-section svelte-xxnasy"); 64785 }, 64786 m(target, anchor) { 64787 insert(target, div1, anchor); 64788 append(div1, span); 64789 append(span, t0); 64790 append(div1, t1); 64791 append(div1, div0); 64792 append(div0, t2); 64793 }, 64794 p(ctx, dirty) {
64795 if (dirty[0] & /*subscriptionRateText*/ 4) set_data(t0, /*subscriptionRateText*/ ctx[2]); 64796 if (dirty[0] & /*subscription*/ 1 && t2_value !== (t2_value = /*subscription*/ ctx[0].amount + "")) set_data(t2, t2_value); 64797 }, 64798 d(detaching) { 64799 if (detaching) { 64800 detach(div1); 64801 } 64802 } 64803 }; 64804 } 64805 64806 function create_fragment$w(ctx) { 64807 let div2; 64808 let div1; 64809 let div0; 64810 let h2; 64811 let t0_value = /*subscription*/ ctx[0].productLabel + ""; 64812 let t0; 64813 let t1; 64814 let t2; 64815 let current_block_type_index; 64816 let if_block1; 64817 let current; 64818 let if_block0 = /*subscription*/ ctx[0].isGift && create_if_block_23(ctx); 64819 const if_block_creators = [create_if_block$p, create_else_block$3]; 64820 const if_blocks = []; 64821 64822 function select_block_type(ctx, dirty) { 64823 if (/*isInactive*/ ctx[23]) return 0; 64824 return 1; 64825 } 64826 64827 current_block_type_index = select_block_type(ctx); 64828 if_block1 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 64829 64830 return { 64831 c() { 64832 div2 = element("div"); 64833 div1 = element("div"); 64834 div0 = element("div"); 64835 h2 = element("h2"); 64836 t0 = text(t0_value); 64837 t1 = space(); 64838 if (if_block0) if_block0.c(); 64839 t2 = space(); 64840 if_block1.c(); 64841 attr(h2, "class", "svelte-xxnasy"); 64842 attr(div0, "class", "zephr-section svelte-xxnasy"); 64843 attr(div1, "class", "zephr-inner-box svelte-xxnasy"); 64844 attr(div2, "class", "zephr-subscription-list-box-item svelte-xxnasy"); 64845 }, 64846 m(target, anchor) { 64847 insert(target, div2, anchor); 64848 append(div2, div1); 64849 append(div1, div0); 64850 append(div0, h2); 64851 append(h2, t0); 64852 append(h2, t1); 64853 if (if_block0) if_block0.m(h2, null); 64854 append(div1, t2); 64855 if_blocks[current_block_type_index].m(div1, null); 64856 current = true; 64857 }, 64858 p(ctx, dirty) { 64859 if ((!current || dirty[0] & /*subscription*/ 1) && t0_value !== (t0_value = /*subscription*/ ctx[0].productLabel + "")) set_data(t0, t0_value); 64860 64861 if (/*subscription*/ ctx[0].isGift) { 64862 if (if_block0) { 64863 if_block0.p(ctx, dirty); 64864 } else { 64865 if_block0 = create_if_block_23(ctx); 64866 if_block0.c(); 64867 if_block0.m(h2, null); 64868 } 64869 } else if (if_block0) { 64870 if_block0.d(1); 64871 if_block0 = null; 64872 } 64873 64874 let previous_block_index = current_block_type_index; 64875 current_block_type_index = select_block_type(ctx); 64876 64877 if (current_block_type_index === previous_block_index) { 64878 if_blocks[current_block_type_index].p(ctx, dirty); 64879 } else { 64880 group_outros(); 64881 64882 transition_out(if_blocks[previous_block_index], 1, 1, () => { 64883 if_blocks[previous_block_index] = null; 64884 }); 64885 64886 check_outros(); 64887 if_block1 = if_blocks[current_block_type_index]; 64888 64889 if (!if_block1) { 64890 if_block1 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 64891 if_block1.c(); 64892 } else { 64893 if_block1.p(ctx, dirty); 64894 } 64895 64896 transition_in(if_block1, 1); 64897 if_block1.m(div1, null); 64898 } 64899 }, 64900 i(local) { 64901 if (current) return; 64902 transition_in(if_block1); 64903 current = true; 64904 }, 64905 o(local) { 64906 transition_out(if_block1); 64907 current = false; 64908 }, 64909 d(detaching) { 64910 if (detaching) { 64911 detach(div2); 64912 } 64913 64914 if (if_block0) if_block0.d(); 64915 if_blocks[current_block_type_index].d(); 64916 } 64917 }; 64918 } 64919 64920 function instance$w($$self, $$props, $$invalidate) { 64921 let displayedFields; 64922 let { subscription } = $$props; 64923 let { nextPaymentDateText = '' } = $$props; 64924 let { subscriptionRateText } = $$props; 64925 let { billingHistoryLink = '' } = $$props; 64926 64927 let { onViewHistory = () => { 64928 64929 } } = $$props; 64930 64931 let { onChangePayment = () => { 64932 64933 } } = $$props; 64934 64935 let { logChangeSubscription = () => { 64936 64937 } } = $$props; 64938 64939 let { logCancelSubscription = () => { 64940 64941 } } = $$props; 64942 64943 let { logSuspendResumeSubscription = () => { 64944 64945 } } = $$props; 64946 64947 let { logUpdateBillToContact = () => { 64948 64949 } } = $$props; 64950 64951 let { changePaymentMethodText = '' } = $$props; 64952 let { changeSubscriptionText = '' } = $$props; 64953 let { cancelSubscriptionText = '' } = $$props; 64954 let { changeSubscriptionPath = '' } = $$props; 64955 let { cancelSubscriptionPath = '' } = $$props; 64956 let { suspendResumeSubscriptionText = '' } = $$props; 64957 let { suspendResumeSubscriptionPath = '' } = $$props; 64958 let { subscriptionCustomFieldsText } = $$props;
64959 let { onUpdateSubscriptionCustomFields } = $$props; 64960 let { updateBillToContactText } = $$props; 64961 let { updateBillToContactPath } = $$props; 64962 let { elementsOrder = [] } = $$props; 64963 64964 let { elementsHide = { 64965 subscriptionInformation: false, 64966 changePayment: true, 64967 changeSubscription: true, 64968 cancelSubscription: true, 64969 billingHistory: true, 64970 suspendResumeSubscription: true, 64971 subscriptionCustomFields: true, 64972 updateBillToContact: true 64973 } } = $$props; 64974 64975 let { isInactive = false } = $$props; 64976 let { displayedCustomFields = {} } = $$props; 64977 let { giftPillText = 'Gift' } = $$props; 64978 let { paymentProvider = '' } = $$props; 64979 let { autoRenewToggleEnabled = false } = $$props; 64980 let { autoRenewToggleText = 'Auto-renew subscription' } = $$props; 64981 let { autoRenewSuccessMessage = 'Preferences updated' } = $$props; 64982 let { autoRenewErrorMessage = 'Something went wrong. Please try again later' } = $$props; 64983 let { onAutoRenewToggle = async () => ({ success: false }) } = $$props; 64984 let isUpdatingAutoRenew = false; 64985 let statusMessage = ''; 64986 let statusType = ''; 64987 let statusTimeout = null; 64988 let autoRenewValue = subscription.autoRenew ?? false; // Local checkbox state 64989 64990 // Ensures we append the subscription id correctly whether or not the base path already has query params 64991 const withSubscriptionParam = (basePath, subscriptionId) => { 64992 if (!basePath) return ''; 64993 const hasQuery = basePath.includes('?'); 64994 const separator = hasQuery ? '&' : '?'; 64995 return `${basePath}${separator}subscription=${encodeURIComponent(subscriptionId)}`; 64996 }; 64997 64998 const handleAutoRenewChange = async event => { 64999 const newAutoRenewValue = event.detail; 65000 65001 // Clear any existing status message 65002 clearStatusMessage(); 65003 65004 // Revert checkbox to previous state immediately (will update on success) 65005 $$invalidate(31, autoRenewValue = subscription.autoRenew ?? false); 65006 65007 $$invalidate(28, isUpdatingAutoRenew = true); 65008 65009 try { 65010 const result = await onAutoRenewToggle(subscription, newAutoRenewValue); 65011 65012 if (result.success) { 65013 // Update local subscription state (this will trigger checkbox update via reactive statement) 65014 $$invalidate(0, subscription.autoRenew = newAutoRenewValue, subscription); 65015 65016 // Show success message for 5 seconds 65017 $$invalidate(29, statusMessage = autoRenewSuccessMessage); 65018 65019 $$invalidate(30, statusType = 'success'); 65020 65021 statusTimeout = setTimeout( 65022 () => { 65023 clearStatusMessage(); 65024 }, 65025 5000 65026 ); 65027 } else { 65028 // Show error message persistently (checkbox already reverted) 65029 $$invalidate(29, statusMessage = autoRenewErrorMessage); 65030 65031 $$invalidate(30, statusType = 'error'); 65032 } 65033 } catch(error) { 65034 console.error('Failed to update auto-renewal:', error); 65035 65036 // Show error message persistently (checkbox already reverted) 65037 $$invalidate(29, statusMessage = autoRenewErrorMessage); 65038 65039 $$invalidate(30, statusType = 'error'); 65040 } finally { 65041 $$invalidate(28, isUpdatingAutoRenew = false); 65042 } 65043 }; 65044 65045 const clearStatusMessage = () => { 65046 if (statusTimeout) { 65047 clearTimeout(statusTimeout); 65048 statusTimeout = null; 65049 } 65050 65051 $$invalidate(29, statusMessage = ''); 65052 $$invalidate(30, statusType = ''); 65053 }; 65054 65055 // Clean up timeout on component destroy 65056 onDestroy(() => { 65057 if (statusTimeout) { 65058 clearTimeout(statusTimeout); 65059 } 65060 }); 65061 65062 const func = () => onViewHistory(subscription); 65063 const func_1 = () => onChangePayment(subscription); 65064 const func_2 = () => logChangeSubscription(subscription); 65065 const func_3 = () => logCancelSubscription(subscription); 65066 const func_4 = () => logSuspendResumeSubscription(subscription); 65067 const func_5 = () => onUpdateSubscriptionCustomFields(subscription); 65068 const func_6 = () => logUpdateBillToContact(subscription); 65069 65070 $$self.$$set = $$props => {
65071 if ('subscription' in $$props) $$invalidate(0, subscription = $$props.subscription); 65072 if ('nextPaymentDateText' in $$props) $$invalidate(1, nextPaymentDateText = $$props.nextPaymentDateText); 65073 if ('subscriptionRateText' in $$props) $$invalidate(2, subscriptionRateText = $$props.subscriptionRateText); 65074 if ('billingHistoryLink' in $$props) $$invalidate(3, billingHistoryLink = $$props.billingHistoryLink); 65075 if ('onViewHistory' in $$props) $$invalidate(4, onViewHistory = $$props.onViewHistory); 65076 if ('onChangePayment' in $$props) $$invalidate(5, onChangePayment = $$props.onChangePayment); 65077 if ('logChangeSubscription' in $$props) $$invalidate(6, logChangeSubscription = $$props.logChangeSubscription); 65078 if ('logCancelSubscription' in $$props) $$invalidate(7, logCancelSubscription = $$props.logCancelSubscription); 65079 if ('logSuspendResumeSubscription' in $$props) $$invalidate(8, logSuspendResumeSubscription = $$props.logSuspendResumeSubscription); 65080 if ('logUpdateBillToContact' in $$props) $$invalidate(9, logUpdateBillToContact = $$props.logUpdateBillToContact);
65081 if ('changePaymentMethodText' in $$props) $$invalidate(10, changePaymentMethodText = $$props.changePaymentMethodText); 65082 if ('changeSubscriptionText' in $$props) $$invalidate(11, changeSubscriptionText = $$props.changeSubscriptionText); 65083 if ('cancelSubscriptionText' in $$props) $$invalidate(12, cancelSubscriptionText = $$props.cancelSubscriptionText); 65084 if ('changeSubscriptionPath' in $$props) $$invalidate(13, changeSubscriptionPath = $$props.changeSubscriptionPath); 65085 if ('cancelSubscriptionPath' in $$props) $$invalidate(14, cancelSubscriptionPath = $$props.cancelSubscriptionPath); 65086 if ('suspendResumeSubscriptionText' in $$props) $$invalidate(15, suspendResumeSubscriptionText = $$props.suspendResumeSubscriptionText); 65087 if ('suspendResumeSubscriptionPath' in $$props) $$invalidate(16, suspendResumeSubscriptionPath = $$props.suspendResumeSubscriptionPath); 65088 if ('subscriptionCustomFieldsText' in $$props) $$invalidate(17, subscriptionCustomFieldsText = $$props.subscriptionCustomFieldsText); 65089 if ('onUpdateSubscriptionCustomFields' in $$props) $$invali
65089date(18, onUpdateSubscriptionCustomFields = $$props.onUpdateSubscriptionCustomFields); 65090 if ('updateBillToContactText' in $$props) $$invalidate(19, updateBillToContactText = $$props.updateBillToContactText); 65091 if ('updateBillToContactPath' in $$props) $$invalidate(20, updateBillToContactPath = $$props.updateBillToContactPath); 65092 if ('elementsOrder' in $$props) $$invalidate(21, elementsOrder = $$props.elementsOrder); 65093 if ('elementsHide' in $$props) $$invalidate(22, elementsHide = $$props.elementsHide); 65094 if ('isInactive' in $$props) $$invalidate(23, isInactive = $$props.isInactive); 65095 if ('displayedCustomFields' in $$props) $$invalidate(35, displayedCustomFields = $$props.displayedCustomFields); 65096 if ('giftPillText' in $$props) $$invalidate(24, giftPillText = $$props.giftPillText); 65097 if ('paymentProvider' in $$props) $$invalidate(25, paymentProvider = $$props.paymentProvider); 65098 if ('autoRenewToggleEnabled' in $$props) $$invalidate(26, autoRenewToggleEnabled = $$props.autoRenewToggleEnabled); 65099 if ('autoRenewToggleText' in $$props) $$invali
65099date(27, autoRenewToggleText = $$props.autoRenewToggleText); 65100 if ('autoRenewSuccessMessage' in $$props) $$invalidate(36, autoRenewSuccessMessage = $$props.autoRenewSuccessMessage); 65101 if ('autoRenewErrorMessage' in $$props) $$invalidate(37, autoRenewErrorMessage = $$props.autoRenewErrorMessage); 65102 if ('onAutoRenewToggle' in $$props) $$invalidate(38, onAutoRenewToggle = $$props.onAutoRenewToggle); 65103 }; 65104 65105 $$self.$$.update = () => { 65106 if ($$self.$$.dirty[0] & /*subscription*/ 1 | $$self.$$.dirty[1] & /*displayedCustomFields*/ 16) { 65107 // Compute displayed custom fields 65108 $$invalidate(32, displayedFields = Object.entries(displayedCustomFields).filter(([fieldId, fieldConfig]) => fieldConfig.enabled && subscription[fieldId]).map(([fieldId, fieldConfig]) => ({ 65109 label: fieldConfig.label, 65110 value: subscription[fieldId] 65111 }))); 65112 } 65113 65114 if ($$self.$$.dirty[0] & /*subscription*/ 1) { 65115 // Update local checkbox state when subscription changes 65116 $$invalidate(31, autoRenewValue = subscription.autoRenew ?? false); 65117 } 65118 }; 65119 65120 return [ 65121 subscription, 65122 nextPaymentDateText, 65123 subscriptionRateText, 65124 billingHistoryLink, 65125 onViewHistory, 65126 onChangePayment, 65127 logChangeSubscription, 65128 logCancelSubscription, 65129 logSuspendResumeSubscription, 65130 logUpdateBillToContact, 65131 changePaymentMethodText, 65132 changeSubscriptionText, 65133 cancelSubscriptionText, 65134 changeSubscriptionPath, 65135 cancelSubscriptionPath, 65136 suspendResumeSubscriptionText, 65137 suspendResumeSubscriptionPath, 65138 subscriptionCustomFieldsText,
65139 onUpdateSubscriptionCustomFields, 65140 updateBillToContactText, 65141 updateBillToContactPath, 65142 elementsOrder, 65143 elementsHide, 65144 isInactive, 65145 giftPillText, 65146 paymentProvider, 65147 autoRenewToggleEnabled, 65148 autoRenewToggleText, 65149 isUpdatingAutoRenew, 65150 statusMessage, 65151 statusType, 65152 autoRenewValue, 65153 displayedFields, 65154 withSubscriptionParam, 65155 handleAutoRenewChange, 65156 displayedCustomFields, 65157 autoRenewSuccessMessage, 65158 autoRenewErrorMessage, 65159 onAutoRenewToggle, 65160 func, 65161 func_1, 65162 func_2, 65163 func_3, 65164 func_4, 65165 func_5, 65166 func_6 65167 ]; 65168 } 65169 65170 class SubscriptionsListBoxItem extends SvelteComponent { 65171 constructor(options) { 65172 super(); 65173 65174 init( 65175 this, 65176 options, 65177 instance$w, 65178 create_fragment$w, 65179 safe_not_equal, 65180 { 65181 subscription: 0, 65182 nextPaymentDateText: 1, 65183 subscriptionRateText: 2, 65184 billingHistoryLink: 3, 65185 onViewHistory: 4, 65186 onChangePayment: 5, 65187 logChangeSubscription: 6, 65188 logCancelSubscription: 7, 65189 logSuspendResumeSubscription: 8, 65190 logUpdateBillToContact: 9, 65191 changePaymentMethodText: 10, 65192 changeSubscriptionText: 11, 65193 cancelSubscriptionText: 12, 65194 changeSubscriptionPath: 13, 65195 cancelSubscriptionPath: 14, 65196 suspendResumeSubscriptionText: 15, 65197 suspendResumeSubscriptionPath: 16, 65198 subscriptionCustomFieldsText: 17, 65199 onUpdateSubscriptionCustomFields: 18, 65200 updateBillToContactText: 19, 65201 updateBillToContactPath: 20, 65202 elementsOrder: 21, 65203 elementsHide: 22, 65204 isInactive: 23, 65205 displayedCustomFields: 35, 65206 giftPillText: 24, 65207 paymentProvider: 25, 65208 autoRenewToggleEnabled: 26, 65209 autoRenewToggleText: 27, 65210 autoRenewSuccessMessage: 36, 65211 autoRenewErrorMessage: 37, 65212 onAutoRenewToggle: 38 65213 }, 65214 null, 65215 [-1, -1] 65216 ); 65217 } 65218 } 65219 65220 /* src/components/elements/subscriptionsList/SubscriptionsList.svelte generated by Svelte v4.2.12 */ 65221 65222 function get_each_context$9(ctx, list, i) { 65223 const child_ctx = ctx.slice(); 65224 child_ctx[34] = list[i]; 65225 return child_ctx; 65226 } 65227 65228 function get_each_context_1$1(ctx, list, i) { 65229 const child_ctx = ctx.slice(); 65230 child_ctx[34] = list[i]; 65231 return child_ctx; 65232 } 65233 65234 // (44:2) {#if loading} 65235 function create_if_block_6$4(ctx) { 65236 let spinner; 65237 let current; 65238 spinner = new Spinner({}); 65239 65240 return { 65241 c() { 65242 create_component(spinner.$$.fragment); 65243 }, 65244 m(target, anchor) { 65245 mount_component(spinner, target, anchor); 65246 current = true; 65247 }, 65248 i(local) { 65249 if (current) return; 65250 transition_in(spinner.$$.fragment, local); 65251 current = true; 65252 }, 65253 o(local) { 65254 transition_out(spinner.$$.fragment, local); 65255 current = false; 65256 }, 65257 d(detaching) { 65258 destroy_component(spinner, detaching); 65259 } 65260 }; 65261 } 65262 65263 // (47:2) {#if !isPastSubscriptions} 65264 function create_if_block_2$9(ctx) { 65265 let t; 65266 let each_1_anchor; 65267 let current; 65268 let if_block = !/*loading*/ ctx[10] && !/*subscriptions*/ ctx[6].length && create_if_block_5$4(ctx); 65269 let each_value_1 = ensure_array_like(/*subscriptions*/ ctx[6]); 65270 let each_blocks = []; 65271 65272 for (let i = 0; i < each_value_1.length; i += 1) { 65273 each_blocks[i] = create_each_block_1$1(get_each_context_1$1(ctx, each_value_1, i)); 65274 } 65275 65276 const out = i => transition_out(each_blocks[i], 1, 1, () => { 65277 each_blocks[i] = null; 65278 }); 65279 65280 return { 65281 c() { 65282 if (if_block) if_block.c(); 65283 t = space(); 65284 65285 for (let i = 0; i < each_blocks.length; i += 1) { 65286 each_blocks[i].c(); 65287 } 65288 65289 each_1_anchor = empty(); 65290 }, 65291 m(target, anchor) { 65292 if (if_block) if_block.m(target, anchor); 65293 insert(target, t, anchor); 65294 65295 for (let i = 0; i < each_blocks.length; i += 1) { 65296 if (each_blocks[i]) { 65297 each_blocks[i].m(target, anchor); 65298 } 65299 } 65300 65301 insert(target, each_1_anchor, anchor); 65302 current = true; 65303 }, 65304 p(ctx, dirty) { 65305 if (!/*loading*/ ctx[10] && !/*subscriptions*/ ctx[6].length) { 65306 if (if_block) { 65307 if_block.p(ctx, dirty); 65308 } else { 65309 if_block = create_if_block_5$4(ctx); 65310 if_block.c(); 65311 if_block.m(t.parentNode, t); 65312 } 65313 } else if (if_block) { 65314 if_block.d(1); 65315 if_block = null; 65316 } 65317
65318 if (dirty[0] & /*subscriptions, nextPaymentDateText, subscriptionRateText, billingHistoryLink, onViewHistory, onChangePayment, logChangeSubscription, logCancelSubscription, logSuspendResumeSubscription, changePaymentMethodText, changeSubscriptionText, cancelSubscriptionText, changeSubscriptionPath, cancelSubscriptionPath, suspendResumeSubscriptionText, suspendResumeSubscriptionPath, subscriptionCustomFieldsText, onUpdateSubscriptionCustomFields, updateBillToContactText, updateBillToContactPath, elementsOrder, elementsHide, giftPillText, paymentProvider, autoRenewToggleEnabled, autoRenewToggleText, billingHistoryText*/ 2147482492 | dirty[1] & /*onAutoRenewToggle, displayedCustomFields*/ 3) { 65319 each_value_1 = ensure_array_like(/*subscriptions*/ ctx[6]); 65320 let i; 65321 65322 for (i = 0; i < each_value_1.length; i += 1) { 65323 const child_ctx = get_each_context_1$1(ctx, each_value_1, i); 65324 65325 if (each_blocks[i]) { 65326 each_blocks[i].p(child_ctx, dirty); 65327 transition_in(each_blocks[i], 1); 65328 } else { 65329 each_blocks[i] = create_each_block_1$1(child_ctx); 65330 each_blocks[i].c(); 65331 transition_in(each_blocks[i], 1); 65332 each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); 65333 } 65334 } 65335 65336 group_outros(); 65337 65338 for (i = each_value_1.length; i < each_blocks.length; i += 1) { 65339 out(i); 65340 } 65341 65342 check_outros(); 65343 } 65344 }, 65345 i(local) { 65346 if (current) return; 65347 65348 for (let i = 0; i < each_value_1.length; i += 1) { 65349 transition_in(each_blocks[i]); 65350 } 65351 65352 current = true; 65353 }, 65354 o(local) {
65355 each_blocks = each_blocks.filter(Boolean); 65356 65357 for (let i = 0; i < each_blocks.length; i += 1) { 65358 transition_out(each_blocks[i]); 65359 } 65360 65361 current = false; 65362 }, 65363 d(detaching) { 65364 if (detaching) { 65365 detach(t); 65366 detach(each_1_anchor); 65367 } 65368 65369 if (if_block) if_block.d(detaching); 65370 destroy_each(each_blocks, detaching); 65371 } 65372 }; 65373 } 65374 65375 // (48:4) {#if !loading && !subscriptions.length} 65376 function create_if_block_5$4(ctx) { 65377 let div; 65378 65379 return { 65380 c() { 65381 div = element("div"); 65382 }, 65383 m(target, anchor) { 65384 insert(target, div, anchor); 65385 div.innerHTML = /*noSubscriptionsMessage*/ ctx[1]; 65386 }, 65387 p(ctx, dirty) { 65388 if (dirty[0] & /*noSubscriptionsMessage*/ 2) div.innerHTML = /*noSubscriptionsMessage*/ ctx[1]; }, 65389 d(detaching) { 65390 if (detaching) { 65391 detach(div); 65392 } 65393 } 65394 }; 65395 } 65396 65397 // (85:6) {:else} 65398 function create_else_block$2(ctx) { 65399 let subscriptionslistitem; 65400 let t; 65401 let if_block_anchor; 65402 let current; 65403 65404 subscriptionslistitem = new SubscriptionsListItem({ 65405 props: { 65406 subscription: /*subscription*/ ctx[34], 65407 nextPaymentDateText: /*nextPaymentDateText*/ ctx[4], 65408 subscriptionRateText: /*subscriptionRateText*/ ctx[5], 65409 billingHistoryText: /*billingHistoryText*/ ctx[2], 65410 billingHistoryLink: /*billingHistoryLink*/ ctx[3], 65411 onViewHistory: /*onViewHistory*/ ctx[15], 65412 showBillingHistory: /*paymentProvider*/ ctx[8] !== "zuora-billing", 65413 giftPillText: /*giftPillText*/ ctx[28] 65414 } 65415 }); 65416 65417 let if_block = /*paymentProvider*/ ctx[8] !== "zuora-billing" && /*subscription*/ ctx[34].status === "active" && !/*subscription*/ ctx[34].isGift && create_if_block_4$4(ctx); 65418 65419 return { 65420 c() { 65421 create_component(subscriptionslistitem.$$.fragment); 65422 t = space(); 65423 if (if_block) if_block.c(); 65424 if_block_anchor = empty(); 65425 }, 65426 m(target, anchor) { 65427 mount_component(subscriptionslistitem, target, anchor); 65428 insert(target, t, anchor); 65429 if (if_block) if_block.m(target, anchor); 65430 insert(target, if_block_anchor, anchor); 65431 current = true; 65432 }, 65433 p(ctx, dirty) { 65434 const subscriptionslistitem_changes = {}; 65435 if (dirty[0] & /*subscriptions*/ 64) subscriptionslistitem_changes.subscription = /*subscription*/ ctx[34]; 65436 if (dirty[0] & /*nextPaymentDateText*/ 16) subscriptionslistitem_changes.nextPaymentDateText = /*nextPaymentDateText*/ ctx[4]; 65437 if (dirty[0] & /*subscriptionRateText*/ 32) subscriptionslistitem_changes.subscriptionRateText = /*subscriptionRateText*/ ctx[5]; 65438 if (dirty[0] & /*billingHistoryText*/ 4) subscriptionslistitem_changes.billingHistoryText = /*billingHistoryText*/ ctx[2]; 65439 if (dirty[0] & /*billingHistoryLink*/ 8) subscriptionslistitem_changes.billingHistoryLink = /*billingHistoryLink*/ ctx[3]; 65440 if (dirty[0] & /*onViewHistory*/ 32768) subscriptionslistitem_changes.onViewHistory = /*onViewHistory*/ ctx[15]; 65441 if (dirty[0] & /*paymentProvider*/ 256) subscriptionslistitem_changes.showBillingHistory = /*paymentProvider*/ ctx[8] !== "zuora-billing"; 65442 if (dirty[0] & /*giftPillText*/ 268435456) subscriptionslistitem_changes.giftPillText = /*giftPillText*/ ctx[28]; 65443 subscriptionslistitem.$set(subscriptionslistitem_changes); 65444 65445 if (/*paymentProvider*/ ctx[8] !== "zuora-billing" && /*subscription*/ ctx[34].status === "active" && !/*subscription*/ ctx[34].isGift) { 65446 if (if_block) { 65447 if_block.p(ctx, dirty); 65448 65449 if (dirty[0] & /*paymentProvider, subscriptions*/ 320) { 65450 transition_in(if_block, 1); 65451 } 65452 } else { 65453 if_block = create_if_block_4$4(ctx); 65454 if_block.c(); 65455 transition_in(if_block, 1); 65456 if_block.m(if_block_anchor.parentNode, if_block_anchor); 65457 } 65458 } else if (if_block) { 65459 group_outros(); 65460 65461 transition_out(if_block, 1, 1, () => { 65462 if_block = null; 65463 }); 65464 65465 check_outros(); 65466 } 65467 }, 65468 i(local) { 65469 if (current) return; 65470 transition_in(subscriptionslistitem.$$.fragment, local); 65471 transition_in(if_block); 65472 current = true; 65473 }, 65474 o(local) { 65475 transition_out(subscriptionslistitem.$$.fragment, local); 65476 transition_out(if_block); 65477 current = false;
65478 }, 65479 d(detaching) { 65480 if (detaching) { 65481 detach(t); 65482 detach(if_block_anchor); 65483 } 65484 65485 destroy_component(subscriptionslistitem, detaching); 65486 if (if_block) if_block.d(detaching); 65487 } 65488 }; 65489 } 65490 65491 // (54:6) {#if elementsOrder} 65492 function create_if_block_3$5(ctx) { 65493 let subscriptionslistboxitem; 65494 let current; 65495 65496 subscriptionslistboxitem = new SubscriptionsListBoxItem({ 65497 props: { 65498 subscription: /*subscription*/ ctx[34], 65499 nextPaymentDateText: /*nextPaymentDateText*/ ctx[4], 65500 subscriptionRateText: /*subscriptionRateText*/ ctx[5], 65501 billingHistoryLink: /*billingHistoryLink*/ ctx[3], 65502 onViewHistory: /*onViewHistory*/ ctx[15], 65503 onChangePayment: /*onChangePayment*/ ctx[11], 65504 logChangeSubscription: /*logChangeSubscription*/ ctx[12], 65505 logCancelSubscription: /*logCancelSubscription*/ ctx[13], 65506 logSuspendResumeSubscription: /*logSuspendResumeSubscription*/ ctx[14], 65507 changePaymentMethodText: /*changePaymentMethodText*/ ctx[9], 65508 changeSubscriptionText: /*changeSubscriptionText*/ ctx[16], 65509 cancelSubscriptionText: /*cancelSubscriptionText*/ ctx[17], 65510 changeSubscriptionPath: /*changeSubscriptionPath*/ ctx[18], 65511 cancelSubscriptionPath: /*cancelSubscriptionPath*/ ctx[19], 65512 suspendResumeSubscriptionText: /*suspendResumeSubscriptionText*/ ctx[20],
65513 suspendResumeSubscriptionPath: /*suspendResumeSubscriptionPath*/ ctx[21], 65514 subscriptionCustomFieldsText: /*subscriptionCustomFieldsText*/ ctx[22], 65515 onUpdateSubscriptionCustomFields: /*onUpdateSubscriptionCustomFields*/ ctx[23], 65516 updateBillToContactText: /*updateBillToContactText*/ ctx[24], 65517 updateBillToContactPath: /*updateBillToContactPath*/ ctx[25], 65518 elementsOrder: /*elementsOrder*/ ctx[26], 65519 elementsHide: /*elementsHide*/ ctx[27], 65520 giftPillText: /*giftPillText*/ ctx[28], 65521 paymentProvider: /*paymentProvider*/ ctx[8], 65522 autoRenewToggleEnabled: /*autoRenewToggleEnabled*/ ctx[29], 65523 autoRenewToggleText: /*autoRenewToggleText*/ ctx[30], 65524 onAutoRenewToggle: /*onAutoRenewToggle*/ ctx[31], 65525 displayedCustomFields: /*displayedCustomFields*/ ctx[32] 65526 } 65527 }); 65528 65529 return { 65530 c() { 65531 create_component(subscriptionslistboxitem.$$.fragment); 65532 }, 65533 m(target, anchor) { 65534 mount_component(subscriptionslistboxitem, target, anchor); 65535 current = true; 65536 }, 65537 p(ctx, dirty) { 65538 const subscriptionslistboxitem_changes = {}; 65539 if (dirty[0] & /*subscriptions*/ 64) subscriptionslistboxitem_changes.subscription = /*subscription*/ ctx[34]; 65540 if (dirty[0] & /*nextPaymentDateText*/ 16) subscriptionslistboxitem_changes.nextPaymentDateText = /*nextPaymentDateText*/ ctx[4]; 65541 if (dirty[0] & /*subscriptionRateText*/ 32) subscriptionslistboxitem_changes.subscriptionRateText = /*subscriptionRateText*/ ctx[5]; 65542 if (dirty[0] & /*billingHistoryLink*/ 8) subscriptionslistboxitem_changes.billingHistoryLink = /*billingHistoryLink*/ ctx[3]; 65543 if (dirty[0] & /*onViewHistory*/ 32768) subscriptionslistboxitem_changes.onViewHistory = /*onViewHistory*/ ctx[15]; 65544 if (dirty[0] & /*onChangePayment*/ 2048) subscriptionslistboxitem_changes.onChangePayment = /*onChangePayment*/ ctx[11]; 65545 if (dirty[0] & /*logChangeSubscription*/ 4096) subscriptionslistboxitem_changes.logChangeSubscription = /*logChangeSubscription*/ ctx[12]; 65546 if (dirty[0] & /*logCancelSubscription*/ 8192) subscriptionslistboxitem_changes.logCancelSubscription = /*logCancelSubscription*/ ctx[13]; 65547 if (dirty[0] & /*logSuspendResumeSubscription*/ 16384) subscriptionslistboxitem_changes.logSuspendResumeSubscription = /*logSuspendResumeSubscription*/ ctx[14]; 65548 if (dirty[0] & /*changePaymentMethodText*/ 512) subscriptionslistboxitem_changes.changePaymentMethodText = /*changePaymentMethodText*/ ctx[9]; 65549 if (dirty[0] & /*changeSubscriptionText*/ 65536) subscriptionslistboxitem_changes.changeSubscriptionText = /*changeSubscriptionText*/ ctx[16]; 65550 if (dirty[0] & /*cancelSubscriptionText*/ 131072) subscriptionslistboxitem_changes.cancelSubscriptionText = /*cancelSubscriptionText*/ ctx[17]; 65551 if (dirty[0] & /*changeSubscriptionPath*/ 262144) subscriptionslistboxitem_changes.changeSubscriptionPath = /*changeSubscriptionPath*/ ctx[18]; 65552 if (dirty[0] & /*cancelSubscriptionPath*/ 524288) subscriptionslistboxitem_changes.cancelSubscriptionPath = /*cancelSubscriptionPath*/ ctx[19]; 65553 if (dirty[0] & /*suspendResumeSubscriptionText*/ 1048576) subscriptionslistboxitem_changes.suspendResumeSubscriptionText = /*suspendResumeSubscriptionText*/ ctx[20]; 65554 if (dirty[0] & /*suspendResumeSubscriptionPath*/ 2097152) subscriptionslistboxitem_changes.suspendResumeSubscriptionPath = /*suspendResumeSubscriptionPath*/ ctx[21]; 65555 if (dirty[0] & /*subscriptionCustomFieldsText*/ 4194304) subscriptionslistboxitem_changes.subscriptionCustomFieldsText = /*subscriptionCustomFieldsText*/ ctx[22]; 65556 if (dirty[0] & /*onUpdateSubscriptionCustomFields*/ 8388608) subscriptionslistboxitem_changes.onUpdateSubscriptionCustomFields = /*onUpdateSubscriptionCustomFields*/ ctx[23]; 65557 if (dirty[0] & /*updateBillToContactText*/ 16777216) subscriptionslistboxitem_changes.updateBillToContactText = /*updateBillToContactText*/ ctx[24]; 65558 if (dirty[0] & /*updateBillToContactPath*/ 33554432) subscriptionslistboxitem_changes.updateBillToContactPath = /*updateBillToContactPath*/ ctx[25]; 65559 if (dirty[0] & /*elementsOrder*/ 67108864) subscriptionslistboxitem_changes.elementsOrder = /*elementsOrder*/ ctx[26];
65560 if (dirty[0] & /*elementsHide*/ 134217728) subscriptionslistboxitem_changes.elementsHide = /*elementsHide*/ ctx[27]; 65561 if (dirty[0] & /*giftPillText*/ 268435456) subscriptionslistboxitem_changes.giftPillText = /*giftPillText*/ ctx[28]; 65562 if (dirty[0] & /*paymentProvider*/ 256) subscriptionslistboxitem_changes.paymentProvider = /*paymentProvider*/ ctx[8]; 65563 if (dirty[0] & /*autoRenewToggleEnabled*/ 536870912) subscriptionslistboxitem_changes.autoRenewToggleEnabled = /*autoRenewToggleEnabled*/ ctx[29]; 65564 if (dirty[0] & /*autoRenewToggleText*/ 1073741824) subscriptionslistboxitem_changes.autoRenewToggleText = /*autoRenewToggleText*/ ctx[30]; 65565 if (dirty[1] & /*onAutoRenewToggle*/ 1) subscriptionslistboxitem_changes.onAutoRenewToggle = /*onAutoRenewToggle*/ ctx[31]; 65566 if (dirty[1] & /*displayedCustomFields*/ 2) subscriptionslistboxitem_changes.displayedCustomFields = /*displayedCustomFields*/ ctx[32]; 65567 subscriptionslistboxitem.$set(subscriptionslistboxitem_changes); 65568 }, 65569 i(local) { 65570 if (current) return; 65571 transition_in(subscriptionslistboxitem.$$.fragment, local); 65572 current = true; 65573 }, 65574 o(local) { 65575 transition_out(subscriptionslistboxitem.$$.fragment, local); 65576 current = false; 65577 }, 65578 d(detaching) { 65579 destroy_component(subscriptionslistboxitem, detaching); 65580 } 65581 }; 65582 } 65583 65584 // (96:8) {#if paymentProvider !== "zuora-billing" && subscription.status === "active" && !subscription.isGift} 65585 function create_if_block_4$4(ctx) { 65586 let button; 65587 let current; 65588 65589 function func() { 65590 return /*func*/ ctx[33](/*subscription*/ ctx[34]); 65591 } 65592 65593 button = new Button({ 65594 props: { 65595 disabled: false, 65596 text: /*changePaymentMethodText*/ ctx[9], 65597 onClick: func, 65598 noMargin: true 65599 } 65600 }); 65601 65602 return { 65603 c() { 65604 create_component(button.$$.fragment); 65605 }, 65606 m(target, anchor) { 65607 mount_component(button, target, anchor); 65608 current = true; 65609 }, 65610 p(new_ctx, dirty) { 65611 ctx = new_ctx; 65612 const button_changes = {}; 65613 if (dirty[0] & /*changePaymentMethodText*/ 512) button_changes.text = /*changePaymentMethodText*/ ctx[9]; 65614 if (dirty[0] & /*onChangePayment, subscriptions*/ 2112) button_changes.onClick = func; 65615 button.$set(button_changes); 65616 }, 65617 i(local) { 65618 if (current) return; 65619 transition_in(button.$$.fragment, local); 65620 current = true; 65621 }, 65622 o(local) { 65623 transition_out(button.$$.fragment, local); 65624 current = false; 65625 }, 65626 d(detaching) { 65627 destroy_component(button, detaching); 65628 } 65629 }; 65630 } 65631 65632 // (53:4) {#each subscriptions as subscription} 65633 function create_each_block_1$1(ctx) { 65634 let current_block_type_index; 65635 let if_block; 65636 let if_block_anchor; 65637 let current; 65638 const if_block_creators = [create_if_block_3$5, create_else_block$2]; 65639 const if_blocks = []; 65640 65641 function select_block_type(ctx, dirty) { 65642 if (/*elementsOrder*/ ctx[26]) return 0; 65643 return 1; 65644 } 65645 65646 current_block_type_index = select_block_type(ctx); 65647 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 65648 65649 return { 65650 c() { 65651 if_block.c(); 65652 if_block_anchor = empty(); 65653 }, 65654 m(target, anchor) { 65655 if_blocks[current_block_type_index].m(target, anchor); 65656 insert(target, if_block_anchor, anchor); 65657 current = true; 65658 }, 65659 p(ctx, dirty) { 65660 let previous_block_index = current_block_type_index; 65661 current_block_type_index = select_block_type(ctx); 65662 65663 if (current_block_type_index === previous_block_index) { 65664 if_blocks[current_block_type_index].p(ctx, dirty); 65665 } else { 65666 group_outros(); 65667 65668 transition_out(if_blocks[previous_block_index], 1, 1, () => { 65669 if_blocks[previous_block_index] = null; 65670 }); 65671 65672 check_outros(); 65673 if_block = if_blocks[current_block_type_index]; 65674 65675 if (!if_block) { 65676 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 65677 if_block.c(); 65678 } else { 65679 if_block.p(ctx, dirty); 65680 } 65681 65682 transition_in(if_block, 1); 65683 if_block.m(if_block_anchor.parentNode, if_block_anchor); 65684 } 65685 }, 65686 i(local) { 65687 if (current) return; 65688 transition_in(if_block); 65689 current = true; 65690 }, 65691 o(local) { 65692 transition_out(if_block); 65693 current = false;
65694 }, 65695 d(detaching) { 65696 if (detaching) { 65697 detach(if_block_anchor); 65698 } 65699 65700 if_blocks[current_block_type_index].d(detaching); 65701 } 65702 }; 65703 } 65704 65705 // (107:2) {#if isPastSubscriptions} 65706 function create_if_block$o(ctx) { 65707 let t; 65708 let each_1_anchor; 65709 let current; 65710 let if_block = !/*loading*/ ctx[10] && !/*inactiveSubscriptions*/ ctx[7].length && create_if_block_1$f(ctx); 65711 let each_value = ensure_array_like(/*inactiveSubscriptions*/ ctx[7]); 65712 let each_blocks = []; 65713 65714 for (let i = 0; i < each_value.length; i += 1) { 65715 each_blocks[i] = create_each_block$9(get_each_context$9(ctx, each_value, i)); 65716 } 65717 65718 const out = i => transition_out(each_blocks[i], 1, 1, () => { 65719 each_blocks[i] = null; 65720 }); 65721 65722 return { 65723 c() { 65724 if (if_block) if_block.c(); 65725 t = space(); 65726 65727 for (let i = 0; i < each_blocks.length; i += 1) { 65728 each_blocks[i].c(); 65729 } 65730 65731 each_1_anchor = empty(); 65732 }, 65733 m(target, anchor) { 65734 if (if_block) if_block.m(target, anchor); 65735 insert(target, t, anchor); 65736 65737 for (let i = 0; i < each_blocks.length; i += 1) { 65738 if (each_blocks[i]) { 65739 each_blocks[i].m(target, anchor); 65740 } 65741 } 65742 65743 insert(target, each_1_anchor, anchor); 65744 current = true; 65745 }, 65746 p(ctx, dirty) { 65747 if (!/*loading*/ ctx[10] && !/*inactiveSubscriptions*/ ctx[7].length) { 65748 if (if_block) { 65749 if_block.p(ctx, dirty); 65750 } else { 65751 if_block = create_if_block_1$f(ctx); 65752 if_block.c(); 65753 if_block.m(t.parentNode, t); 65754 } 65755 } else if (if_block) { 65756 if_block.d(1); 65757 if_block = null; 65758 } 65759 65760 if (dirty[0] & /*inactiveSubscriptions, subscriptionRateText, giftPillText*/ 268435616 | dirty[1] & /*displayedCustomFields*/ 2) { 65761 each_value = ensure_array_like(/*inactiveSubscriptions*/ ctx[7]); 65762 let i; 65763 65764 for (i = 0; i < each_value.length; i += 1) { 65765 const child_ctx = get_each_context$9(ctx, each_value, i); 65766 65767 if (each_blocks[i]) { 65768 each_blocks[i].p(child_ctx, dirty); 65769 transition_in(each_blocks[i], 1); 65770 } else { 65771 each_blocks[i] = create_each_block$9(child_ctx); 65772 each_blocks[i].c(); 65773 transition_in(each_blocks[i], 1); 65774 each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); 65775 } 65776 } 65777 65778 group_outros(); 65779 65780 for (i = each_value.length; i < each_blocks.length; i += 1) { 65781 out(i); 65782 } 65783 65784 check_outros(); 65785 } 65786 }, 65787 i(local) { 65788 if (current) return; 65789 65790 for (let i = 0; i < each_value.length; i += 1) { 65791 transition_in(each_blocks[i]); 65792 } 65793 65794 current = true; 65795 }, 65796 o(local) {
65797 each_blocks = each_blocks.filter(Boolean); 65798 65799 for (let i = 0; i < each_blocks.length; i += 1) { 65800 transition_out(each_blocks[i]); 65801 } 65802 65803 current = false; 65804 }, 65805 d(detaching) { 65806 if (detaching) { 65807 detach(t); 65808 detach(each_1_anchor); 65809 } 65810 65811 if (if_block) if_block.d(detaching); 65812 destroy_each(each_blocks, detaching); 65813 } 65814 }; 65815 } 65816 65817 // (108:4) {#if !loading && !inactiveSubscriptions.length} 65818 function create_if_block_1$f(ctx) { 65819 let div; 65820 65821 return { 65822 c() { 65823 div = element("div"); 65824 }, 65825 m(target, anchor) { 65826 insert(target, div, anchor); 65827 div.innerHTML = /*noSubscriptionsMessage*/ ctx[1]; 65828 }, 65829 p(ctx, dirty) { 65830 if (dirty[0] & /*noSubscriptionsMessage*/ 2) div.innerHTML = /*noSubscriptionsMessage*/ ctx[1]; }, 65831 d(detaching) { 65832 if (detaching) { 65833 detach(div); 65834 } 65835 } 65836 }; 65837 } 65838 65839 // (113:4) {#each inactiveSubscriptions as subscription} 65840 function create_each_block$9(ctx) { 65841 let subscriptionslistboxitem; 65842 let current; 65843 65844 subscriptionslistboxitem = new SubscriptionsListBoxItem({ 65845 props: { 65846 subscription: /*subscription*/ ctx[34], 65847 isInactive: true, 65848 subscriptionRateText: /*subscriptionRateText*/ ctx[5], 65849 giftPillText: /*giftPillText*/ ctx[28], 65850 displayedCustomFields: /*displayedCustomFields*/ ctx[32], 65851 subscriptionCustomFieldsText: "", 65852 onUpdateSubscriptionCustomFields: func_1$1, 65853 updateBillToContactText: "", 65854 updateBillToContactPath: "" 65855 } 65856 }); 65857 65858 return { 65859 c() { 65860 create_component(subscriptionslistboxitem.$$.fragment); 65861 }, 65862 m(target, anchor) { 65863 mount_component(subscriptionslistboxitem, target, anchor); 65864 current = true; 65865 }, 65866 p(ctx, dirty) { 65867 const subscriptionslistboxitem_changes = {}; 65868 if (dirty[0] & /*inactiveSubscriptions*/ 128) subscriptionslistboxitem_changes.subscription = /*subscription*/ ctx[34]; 65869 if (dirty[0] & /*subscriptionRateText*/ 32) subscriptionslistboxitem_changes.subscriptionRateText = /*subscriptionRateText*/ ctx[5]; 65870 if (dirty[0] & /*giftPillText*/ 268435456) subscriptionslistboxitem_changes.giftPillText = /*giftPillText*/ ctx[28]; 65871 if (dirty[1] & /*displayedCustomFields*/ 2) subscriptionslistboxitem_changes.displayedCustomFields = /*displayedCustomFields*/ ctx[32]; 65872 subscriptionslistboxitem.$set(subscriptionslistboxitem_changes); 65873 }, 65874 i(local) { 65875 if (current) return; 65876 transition_in(subscriptionslistboxitem.$$.fragment, local); 65877 current = true; 65878 }, 65879 o(local) { 65880 transition_out(subscriptionslistboxitem.$$.fragment, local); 65881 current = false; 65882 }, 65883 d(detaching) { 65884 destroy_component(subscriptionslistboxitem, detaching); 65885 } 65886 }; 65887 } 65888 65889 function create_fragment$v(ctx) { 65890 let div; 65891 let t0; 65892 let t1; 65893 let current; 65894 let if_block0 = /*loading*/ ctx[10] && create_if_block_6$4(); 65895 let if_block1 = !/*isPastSubscriptions*/ ctx[0] && create_if_block_2$9(ctx); 65896 let if_block2 = /*isPastSubscriptions*/ ctx[0] && create_if_block$o(ctx); 65897 65898 return { 65899 c() { 65900 div = element("div"); 65901 if (if_block0) if_block0.c(); 65902 t0 = space(); 65903 if (if_block1) if_block1.c(); 65904 t1 = space(); 65905 if (if_block2) if_block2.c(); 65906 attr(div, "class", "subscriptions-list-container svelte-ldb1rq"); 65907 }, 65908 m(target, anchor) { 65909 insert(target, div, anchor); 65910 if (if_block0) if_block0.m(div, null); 65911 append(div, t0); 65912 if (if_block1) if_block1.m(div, null); 65913 append(div, t1); 65914 if (if_block2) if_block2.m(div, null); 65915 current = true; 65916 }, 65917 p(ctx, dirty) { 65918 if (/*loading*/ ctx[10]) { 65919 if (if_block0) { 65920 if (dirty[0] & /*loading*/ 1024) { 65921 transition_in(if_block0, 1); 65922 } 65923 } else { 65924 if_block0 = create_if_block_6$4(); 65925 if_block0.c(); 65926 transition_in(if_block0, 1); 65927 if_block0.m(div, t0); 65928 } 65929 } else if (if_block0) { 65930 group_outros(); 65931 65932 transition_out(if_block0, 1, 1, () => { 65933 if_block0 = null; 65934 }); 65935 65936 check_outros(); 65937 } 65938 65939 if (!/*isPastSubscriptions*/ ctx[0]) { 65940 if (if_block1) { 65941 if_block1.p(ctx, dirty); 65942 65943 if (dirty[0] & /*isPastSubscriptions*/ 1) { 65944 transition_in(if_block1, 1); 65945 } 65946 } else { 65947 if_block1 = create_if_block_2$9(ctx); 65948 if_block1.c(); 65949 transition_in(if_block1, 1); 65950 if_block1.m(div, t1); 65951 } 65952 } else if (if_block1) { 65953 group_outros(); 65954 65955 transition_out(if_block1, 1, 1, () => { 65956 if_block1 = null; 65957 }); 65958 65959 check_outros(); 65960 } 65961 65962 if (/*isPastSubscriptions*/ ctx[0]) { 65963 if (if_block2) { 65964 if_block2.p(ctx, dirty); 65965
65966 if (dirty[0] & /*isPastSubscriptions*/ 1) { 65967 transition_in(if_block2, 1); 65968 } 65969 } else { 65970 if_block2 = create_if_block$o(ctx); 65971 if_block2.c(); 65972 transition_in(if_block2, 1); 65973 if_block2.m(div, null); 65974 } 65975 } else if (if_block2) { 65976 group_outros(); 65977 65978 transition_out(if_block2, 1, 1, () => { 65979 if_block2 = null; 65980 }); 65981 65982 check_outros(); 65983 } 65984 }, 65985 i(local) { 65986 if (current) return; 65987 transition_in(if_block0); 65988 transition_in(if_block1); 65989 transition_in(if_block2); 65990 current = true; 65991 }, 65992 o(local) { 65993 transition_out(if_block0); 65994 transition_out(if_block1); 65995 transition_out(if_block2); 65996 current = false; 65997 }, 65998 d(detaching) { 65999 if (detaching) { 66000 detach(div); 66001 } 66002 66003 if (if_block0) if_block0.d(); 66004 if (if_block1) if_block1.d(); 66005 if (if_block2) if_block2.d(); 66006 } 66007 }; 66008 } 66009 66010 const func_1$1 = () => { 66011 66012 }; 66013 66014 function instance$v($$self, $$props, $$invalidate) { 66015 let { isPastSubscriptions } = $$props; 66016 let { noSubscriptionsMessage } = $$props; 66017 let { billingHistoryText } = $$props; 66018 let { billingHistoryLink } = $$props; 66019 let { nextPaymentDateText } = $$props; 66020 let { subscriptionRateText } = $$props; 66021 let { subscriptions } = $$props; 66022 let { inactiveSubscriptions } = $$props; 66023 let { paymentProvider } = $$props; 66024 let { changePaymentMethodText } = $$props; 66025 let { loading } = $$props; 66026 let { onChangePayment } = $$props; 66027 let { logChangeSubscription } = $$props; 66028 let { logCancelSubscription } = $$props; 66029 let { logSuspendResumeSubscription } = $$props; 66030 let { onViewHistory } = $$props; 66031 let { changeSubscriptionText } = $$props; 66032 let { cancelSubscriptionText } = $$props; 66033 let { changeSubscriptionPath } = $$props; 66034 let { cancelSubscriptionPath } = $$props; 66035 let { suspendResumeSubscriptionText } = $$props; 66036 let { suspendResumeSubscriptionPath } = $$props; 66037 let { subscriptionCustomFieldsText } = $$props; 66038 let { onUpdateSubscriptionCustomFields } = $$props; 66039 let { updateBillToContactText } = $$props; 66040 let { updateBillToContactPath } = $$props; 66041 let { elementsOrder } = $$props; 66042 let { elementsHide } = $$props; 66043 let { giftPillText = 'Gift' } = $$props; 66044 let { autoRenewToggleEnabled = false } = $$props; 66045 let { autoRenewToggleText = 'Auto-renew subscription' } = $$props; 66046 let { onAutoRenewToggle = async () => ({ success: false }) } = $$props; 66047 let { displayedCustomFields = {} } = $$props; 66048 66049 onMount(() => { 66050 66051 }); 66052 66053 const func = subscription => onChangePayment(subscription); 66054 66055 $$self.$$set = $$props => {
66056 if ('isPastSubscriptions' in $$props) $$invalidate(0, isPastSubscriptions = $$props.isPastSubscriptions); 66057 if ('noSubscriptionsMessage' in $$props) $$invalidate(1, noSubscriptionsMessage = $$props.noSubscriptionsMessage); 66058 if ('billingHistoryText' in $$props) $$invalidate(2, billingHistoryText = $$props.billingHistoryText); 66059 if ('billingHistoryLink' in $$props) $$invalidate(3, billingHistoryLink = $$props.billingHistoryLink); 66060 if ('nextPaymentDateText' in $$props) $$invalidate(4, nextPaymentDateText = $$props.nextPaymentDateText); 66061 if ('subscriptionRateText' in $$props) $$invalidate(5, subscriptionRateText = $$props.subscriptionRateText); 66062 if ('subscriptions' in $$props) $$invalidate(6, subscriptions = $$props.subscriptions); 66063 if ('inactiveSubscriptions' in $$props) $$invalidate(7, inactiveSubscriptions = $$props.inactiveSubscriptions); 66064 if ('paymentProvider' in $$props) $$invalidate(8, paymentProvider = $$props.paymentProvider); 66065 if ('changePaymentMethodText' in $$props) $$invalidate(9, changePaymentMethodText = $$props.changePaymentMethodText);
66066 if ('loading' in $$props) $$invalidate(10, loading = $$props.loading); 66067 if ('onChangePayment' in $$props) $$invalidate(11, onChangePayment = $$props.onChangePayment); 66068 if ('logChangeSubscription' in $$props) $$invalidate(12, logChangeSubscription = $$props.logChangeSubscription); 66069 if ('logCancelSubscription' in $$props) $$invalidate(13, logCancelSubscription = $$props.logCancelSubscription); 66070 if ('logSuspendResumeSubscription' in $$props) $$invalidate(14, logSuspendResumeSubscription = $$props.logSuspendResumeSubscription); 66071 if ('onViewHistory' in $$props) $$invalidate(15, onViewHistory = $$props.onViewHistory); 66072 if ('changeSubscriptionText' in $$props) $$invalidate(16, changeSubscriptionText = $$props.changeSubscriptionText); 66073 if ('cancelSubscriptionText' in $$props) $$invalidate(17, cancelSubscriptionText = $$props.cancelSubscriptionText); 66074 if ('changeSubscriptionPath' in $$props) $$invalidate(18, changeSubscriptionPath = $$props.changeSubscriptionPath); 66075 if ('cancelSubscriptionPath' in $$props) $$invali
66075date(19, cancelSubscriptionPath = $$props.cancelSubscriptionPath); 66076 if ('suspendResumeSubscriptionText' in $$props) $$invalidate(20, suspendResumeSubscriptionText = $$props.suspendResumeSubscriptionText); 66077 if ('suspendResumeSubscriptionPath' in $$props) $$invalidate(21, suspendResumeSubscriptionPath = $$props.suspendResumeSubscriptionPath); 66078 if ('subscriptionCustomFieldsText' in $$props) $$invalidate(22, subscriptionCustomFieldsText = $$props.subscriptionCustomFieldsText); 66079 if ('onUpdateSubscriptionCustomFields' in $$props) $$invalidate(23, onUpdateSubscriptionCustomFields = $$props.onUpdateSubscriptionCustomFields); 66080 if ('updateBillToContactText' in $$props) $$invalidate(24, updateBillToContactText = $$props.updateBillToContactText); 66081 if ('updateBillToContactPath' in $$props) $$invalidate(25, updateBillToContactPath = $$props.updateBillToContactPath); 66082 if ('elementsOrder' in $$props) $$invalidate(26, elementsOrder = $$props.elementsOrder); 66083 if ('elementsHide' in $$props) $$invalidate(27, elementsHide = $$props.elementsHide);
66084 if ('giftPillText' in $$props) $$invalidate(28, giftPillText = $$props.giftPillText); 66085 if ('autoRenewToggleEnabled' in $$props) $$invalidate(29, autoRenewToggleEnabled = $$props.autoRenewToggleEnabled); 66086 if ('autoRenewToggleText' in $$props) $$invalidate(30, autoRenewToggleText = $$props.autoRenewToggleText); 66087 if ('onAutoRenewToggle' in $$props) $$invalidate(31, onAutoRenewToggle = $$props.onAutoRenewToggle); 66088 if ('displayedCustomFields' in $$props) $$invalidate(32, displayedCustomFields = $$props.displayedCustomFields); 66089 }; 66090 66091 return [ 66092 isPastSubscriptions, 66093 noSubscriptionsMessage, 66094 billingHistoryText, 66095 billingHistoryLink, 66096 nextPaymentDateText, 66097 subscriptionRateText, 66098 subscriptions, 66099 inactiveSubscriptions, 66100 paymentProvider, 66101 changePaymentMethodText, 66102 loading, 66103 onChangePayment, 66104 logChangeSubscription, 66105 logCancelSubscription, 66106 logSuspendResumeSubscription, 66107 onViewHistory, 66108 changeSubscriptionText, 66109 cancelSubscriptionText, 66110 changeSubscriptionPath, 66111 cancelSubscriptionPath, 66112 suspendResumeSubscriptionText, 66113 suspendResumeSubscriptionPath, 66114 subscriptionCustomFieldsText,
66115 onUpdateSubscriptionCustomFields, 66116 updateBillToContactText, 66117 updateBillToContactPath, 66118 elementsOrder, 66119 elementsHide, 66120 giftPillText, 66121 autoRenewToggleEnabled, 66122 autoRenewToggleText, 66123 onAutoRenewToggle, 66124 displayedCustomFields, 66125 func 66126 ]; 66127 } 66128 66129 class SubscriptionsList extends SvelteComponent { 66130 constructor(options) { 66131 super(); 66132 66133 init( 66134 this, 66135 options, 66136 instance$v, 66137 create_fragment$v, 66138 safe_not_equal, 66139 { 66140 isPastSubscriptions: 0, 66141 noSubscriptionsMessage: 1, 66142 billingHistoryText: 2, 66143 billingHistoryLink: 3, 66144 nextPaymentDateText: 4, 66145 subscriptionRateText: 5, 66146 subscriptions: 6, 66147 inactiveSubscriptions: 7, 66148 paymentProvider: 8, 66149 changePaymentMethodText: 9, 66150 loading: 10, 66151 onChangePayment: 11, 66152 logChangeSubscription: 12, 66153 logCancelSubscription: 13, 66154 logSuspendResumeSubscription: 14, 66155 onViewHistory: 15, 66156 changeSubscriptionText: 16, 66157 cancelSubscriptionText: 17, 66158 changeSubscriptionPath: 18, 66159 cancelSubscriptionPath: 19, 66160 suspendResumeSubscriptionText: 20, 66161 suspendResumeSubscriptionPath: 21, 66162 subscriptionCustomFieldsText: 22, 66163 onUpdateSubscriptionCustomFields: 23, 66164 updateBillToContactText: 24, 66165 updateBillToContactPath: 25, 66166 elementsOrder: 26, 66167 elementsHide: 27, 66168 giftPillText: 28, 66169 autoRenewToggleEnabled: 29, 66170 autoRenewToggleText: 30, 66171 onAutoRenewToggle: 31, 66172 displayedCustomFields: 32 66173 }, 66174 null, 66175 [-1, -1] 66176 ); 66177 } 66178 } 66179 66180 const updateZuoraSubscriptionAutoRenew = async (subscription, autoRenew, formActions) => { 66181 try { 66182 const order = { 66183 subscription: { 66184 orderActions: [{ 66185 type: "TermsAndConditions", 66186 termsAndConditions: { 66187 autoRenew 66188 } 66189 }] 66190 } 66191 }; 66192 const requestBody = { 66193 vendor_fields: { 66194 order: JSON.stringify(order) 66195 } 66196 }; 66197 const response = await request(`zephr/subscriptions/${subscription.externalId}/manage`, { 66198 method: 'POST', 66199 bodyObject: requestBody 66200 }, formActions); 66201 if (!response?.ok) { 66202 const errorText = await response?.text() || 'Unknown error occurred'; 66203 console.error('Error updating subscription auto-renewal:', response); 66204 return { 66205 success: false, 66206 error: `HTTP ${response?.status}: ${errorText}` 66207 }; 66208 } 66209 const result = await response.json(); 66210 if (result.error) { 66211 console.error('API error updating subscription auto-renewal:', result.error); 66212 return { 66213 success: false, 66214 error: result.error 66215 }; 66216 } 66217 return { 66218 success: true, 66219 message: 'Settings updated' 66220 }; 66221 } 66222 catch (error) { 66223 console.error('Exception updating subscription auto-renewal:', error); 66224 return { 66225 success: false, 66226 error: error instanceof Error ? error.message : 'An unexpected error occurred' 66227 }; 66228 } 66229 }; 66230 66231 // Temporarily disable this feature 66232 const shouldShowSubscriptionCustomFields = false; 66233 const subscriptionCustomFieldsUpdateFactory = { 66234 matches: (sectionElement) => sectionElement.type === elementTypes.SUBSCRIPTION_CUSTOM_FIELDS_UPDATE, 66235 create: (form, formState, formActions, elementConfig) => { 66236 // Return null component to prevent rendering 66237 { 66238 return { 66239 component: null, 66240 props: {} 66241 }; 66242 } 66243 } 66244 }; 66245 66246 const subscriptionsListFactory = { 66247 matches: (sectionElement) => sectionElement.type === elementTypes.SUBSCRIPTIONS_LIST, 66248 create: (form, formState, formActions, elementConfig) => { 66249 // Get existing regular subscriptions and gift subscriptions 66250 const existingSubscriptions = formState.existingSubscriptions || []; 66251 const giftSubscriptions = formState.giftSubscriptions || []; 66252 // Default gift pill settings if not provided in config 66253 const giftPillText = elementConfig.giftPillText || 'Gift'; 66254 // Convert received gift subscriptions to ExistingSubscription format for display 66255 // Only include gift subscriptions where the current user is the recipient (is_re
66255cipient === true) 66256 const receivedGiftSubscriptions = giftSubscriptions 66257 .filter(gift => gift.is_recipient === true) 66258 .map(gift => { 66259 return { 66260 externalId: gift.subscription_number || gift.gift_code || '', 66261 productId: gift.subscription_type || 'gift', 66262 productLabel: gift.subscription_type || 'Subscription', 66263 planId: gift.subscription_number || gift.gift_code || '', 66264 planLabel: `Valid until ${gift.subscription_end_date || 'N/A'}`, 66265 status: gift.status === 'REDEEMED' ? 'active' : 'pending', 66266 ...gift, 66267 // Add a flag to identify this as a gift subscription 66268 isGift: true 66269 }; 66270 }); 66271 // Combine regular subscriptions with received gift subscriptions 66272 const allActiveSubscriptions = [ 66273 ...existingSubscriptions.filter(s => s.status === 'active'), 66274 ...receivedGiftSubscriptions.filter(s => s.status === 'active') 66275 ]; 66276 const allInactiveSubscriptions = [ 66277 ...existingSubscriptions.filter(s => s.status !== 'active'), 66278 ...receivedGiftSubscriptions.filter(s => s.status !== 'active') 66279 ]; 66280 // Auto-renew toggle handler for Zuora billing subscriptions 66281 const onAutoRenewToggle = async (subscription, autoRenew) => { 66282 try { 66283 let result; 66284 // Mock API call in preview mode 66285 if (form.environment?.previewMode) { 66286 // Simulate API delay 66287 await new Promise(resolve => setTimeout(resolve, 1000)); 66288 // Mock successful response (you could add logic to simulate failures occasionally) 66289 result = { 66290 success: true, 66291 message: 'Preferences updated' 66292 }; 66293 } 66294 else { 66295 result = await updateZuoraSubscriptionAutoRenew(subscription, autoRenew, formActions); 66296 } 66297 if (result.success) { 66298 // Update the subscription in the local state 66299 const updatedSubscriptions = existingSubscriptions.map(sub => sub.externalId === subscription.externalId 66300 ? { ...sub, autoRenew } 66301 : sub); 66302 formActions.updateFormState({ 66303 existingSubscriptions: updatedSubscriptions 66304 }); 66305 // Log the change 66306 logDataLayerEvent(form, 'zephr_form_button_press', { 66307 sectionId: formState.currentSection.type, 66308 buttonType: 'AUTO_RENEW_TOGGLE' 66309 }); 66310 return { success: true, message: result.message }; 66311 } 66312 else { 66313 return { success: false, error: result.error }; 66314 } 66315 } 66316 catch (error) { 66317 console.error('Error updating auto-renewal:', error); 66318 return { 66319 success: false, 66320 error: error instanceof Error ? error.message : 'An unexpected error occurred' 66321 }; 66322 } 66323 }; 66324 return { 66325 component: SubscriptionsList, 66326 props: { 66327 isPastSubscriptions: elementConfig.isPastSubscriptions, 66328 subscriptionTitle: elementConfig.subscriptionTitle, 66329 billingHistoryText: elementConfig.billingHistoryText, 66330 billingHistoryLink: elementConfig.billingHistoryLink, 66331 noSubscriptionsMessage: elementConfig.noSubscriptionsMessage, 66332 nextPaymentDateText: elementConfig.nextPaymentDateText, 66333 subscriptionRateText: elementConfig.subscriptionRateText, 66334 loading: (!formState.existingSubscriptions || formState.loadingSubscriptions) || 66335 (!formState.giftSubscriptions && formState.loadingGiftSubscriptions), 66336 subscriptions: allActiveSubscriptions, 66337 inactiveSubscriptions: allInactiveSubscriptions, 66338 paymentProvider: form.organisationConfiguration.paymentProvider, 66339 changePaymentMethodText: elementConfig.changePaymentMethodText, 66340 onChangePayment: (subscription) => { 66341 formActions.updateFormState({ 66342 selectedSubscription: subscription 66343 }); 66344 logDataLayerEvent(form, 'zephr_form_button_press', { 66345 sectionId: formState.currentSection.type, 66346 buttonType: 'SUBMIT' 66347 }); 66348 formActions.completeSection(); 66349 }, 66350 onViewHistory: (subscription) => { 66351 formActions.updateFormState({ 66352 selectedSubscription: subscription 66353 });
66354 formActions.jumpToPartStart('billing-history'); 66355 logDataLayerEvent(form, 'zephr_form_billing_history_view', null); 66356 }, 66357 logChangeSubscription: (subscription) => { 66358 logDataLayerEvent(form, 'zephr_form_subscription_change_clicked', { 66359 productId: subscription.productId, 66360 planId: subscription.externalId 66361 }); 66362 }, 66363 logCancelSubscription: (subscription) => { 66364 logDataLayerEvent(form, 'zephr_form_cancel_subscription_clicked', { 66365 productId: subscription.productId, 66366 planId: subscription.externalId 66367 }); 66368 }, 66369 logSuspendResumeSubscription: (subscription) => { 66370 logDataLayerEvent(form, 'zephr_form_suspend_resume_subscription_clicked', { 66371 productId: subscription.productId, 66372 planId: subscription.externalId, 66373 status: subscription.status 66374 }); 66375 }, 66376 changeSubscriptionText: elementConfig.changeSubscriptionText, 66377 cancelSubscriptionText: elementConfig.cancelSubscriptionText, 66378 changeSubscriptionPath: elementConfig.changeSubscriptionPath, 66379 cancelSubscriptionPath: elementConfig.cancelSubscriptionPath, 66380 suspendResumeSubscriptionText: elementConfig.suspendResumeSubscriptionText, 66381 suspendResumeSubscriptionPath: elementConfig.suspendResumeSubscriptionPath, 66382 updateBillToContactText: elementConfig.updateBillToContactText, 66383 updateBillToContactPath: elementConfig.updateBillToContactPath, 66384 elementsOrder: elementConfig.elementsOrder, 66385 subscriptionCustomFieldsText: elementConfig.subscriptionCustomFieldsText || 'Update subscription details', 66386 onUpdateSubscriptionCustomFields: (subscription) => { 66387 formActions.updateFormState({ 66388 selectedSubscription: subscription 66389 }); 66390 formActions.jumpToPartStart('subscription-custom-fields'); 66391 logDataLayerEvent(form, 'zephr_form_subscription_custom_fields_clicked', { 66392 productId: subscription.productId, 66393 planId: subscription.externalId 66394 }); 66395 }, 66396 elementsHide: { 66397 subscriptionInformation: elementConfig?.hideSubscriptionInformation, 66398 changePayment: elementConfig?.hideChangePayment, 66399 changeSubscription: elementConfig?.hideChangeSubscription, 66400 cancelSubscription: elementConfig?.hideCancelSubscription, 66401 billingHistory: elementConfig?.hideBillingHistory, 66402 suspendResumeSubscription: elementConfig?.hideSuspendResumeSubscription, 66403 // elementConfig?.hideSubscriptionCustomFields, 66404 subscriptionCustomFields: !shouldShowSubscriptionCustomFields, 66405 updateBillToContact: elementConfig?.hideUpdateBillToContact 66406 }, 66407 giftPillText, 66408 autoRenewToggleEnabled: elementConfig.autoRenewToggleEnabled || false, 66409 autoRenewToggleText: elementConfig.autoRenewToggleText || 'Auto-renew subscription', 66410 onAutoRenewToggle: onAutoRenewToggle, 66411 displayedCustomFields: elementConfig.displayedCustomFields || {} 66412 } 66413 }; 66414 } 66415 }; 66416 66417 /* src/components/elements/pastSubscriptionsLink/PastSubscriptionsLink.svelte generated by Svelte v4.2.12 */ 66418 66419 function create_if_block$n(ctx) { 66420 let div; 66421 let link; 66422 let current; 66423 link = new Link({ props: { text: /*linkText*/ ctx[2] } }); 66424 66425 link.$on("linkClick", function () { 66426 if (is_function(/*onClick*/ ctx[3])) /*onClick*/ ctx[3].apply(this, arguments); 66427 }); 66428 66429 return { 66430 c() { 66431 div = element("div"); 66432 create_component(link.$$.fragment); 66433 attr(div, "class", "past-subscriptions-link-wrapper svelte-zpa2t"); 66434 }, 66435 m(target, anchor) { 66436 insert(target, div, anchor); 66437 mount_component(link, div, null); 66438 current = true; 66439 }, 66440 p(new_ctx, dirty) { 66441 ctx = new_ctx; 66442 const link_changes = {};
66443 if (dirty & /*linkText*/ 4) link_changes.text = /*linkText*/ ctx[2]; 66444 link.$set(link_changes); 66445 }, 66446 i(local) { 66447 if (current) return; 66448 transition_in(link.$$.fragment, local); 66449 current = true; 66450 }, 66451 o(local) { 66452 transition_out(link.$$.fragment, local); 66453 current = false; 66454 }, 66455 d(detaching) { 66456 if (detaching) { 66457 detach(div); 66458 } 66459 66460 destroy_component(link); 66461 } 66462 }; 66463 } 66464 66465 function create_fragment$u(ctx) { 66466 let if_block_anchor; 66467 let current; 66468 let if_block = /*show*/ ctx[1] && !/*loading*/ ctx[0] && create_if_block$n(ctx); 66469 66470 return { 66471 c() { 66472 if (if_block) if_block.c(); 66473 if_block_anchor = empty(); 66474 }, 66475 m(target, anchor) { 66476 if (if_block) if_block.m(target, anchor); 66477 insert(target, if_block_anchor, anchor); 66478 current = true; 66479 }, 66480 p(ctx, [dirty]) { 66481 if (/*show*/ ctx[1] && !/*loading*/ ctx[0]) { 66482 if (if_block) { 66483 if_block.p(ctx, dirty); 66484 66485 if (dirty & /*show, loading*/ 3) { 66486 transition_in(if_block, 1); 66487 } 66488 } else { 66489 if_block = create_if_block$n(ctx); 66490 if_block.c(); 66491 transition_in(if_block, 1); 66492 if_block.m(if_block_anchor.parentNode, if_block_anchor); 66493 } 66494 } else if (if_block) { 66495 group_outros(); 66496 66497 transition_out(if_block, 1, 1, () => { 66498 if_block = null; 66499 }); 66500 66501 check_outros(); 66502 } 66503 }, 66504 i(local) { 66505 if (current) return; 66506 transition_in(if_block); 66507 current = true; 66508 }, 66509 o(local) { 66510 transition_out(if_block); 66511 current = false; 66512 }, 66513 d(detaching) { 66514 if (detaching) { 66515 detach(if_block_anchor); 66516 } 66517 66518 if (if_block) if_block.d(detaching); 66519 } 66520 }; 66521 } 66522 66523 function instance$u($$self, $$props, $$invalidate) { 66524 let { loading } = $$props; 66525 let { show } = $$props; 66526 let { linkText } = $$props; 66527 let { onClick } = $$props; 66528 66529 $$self.$$set = $$props => {
66530 if ('loading' in $$props) $$invalidate(0, loading = $$props.loading); 66531 if ('show' in $$props) $$invalidate(1, show = $$props.show); 66532 if ('linkText' in $$props) $$invalidate(2, linkText = $$props.linkText); 66533 if ('onClick' in $$props) $$invalidate(3, onClick = $$props.onClick); 66534 }; 66535 66536 return [loading, show, linkText, onClick]; 66537 } 66538 66539 class PastSubscriptionsLink extends SvelteComponent { 66540 constructor(options) { 66541 super(); 66542 66543 init(this, options, instance$u, create_fragment$u, safe_not_equal, { 66544 loading: 0, 66545 show: 1, 66546 linkText: 2, 66547 onClick: 3 66548 }); 66549 } 66550 } 66551 66552 const pastSubscriptionsLinkFactory = { 66553 matches: (sectionElement) => sectionElement.type === elementTypes.PAST_SUBSCRIPTIONS_LINK, 66554 create: (form, formState, formActions, elementConfig) => ({ 66555 component: PastSubscriptionsLink, 66556 props: { 66557 loading: !formState.existingSubscriptions || formState.loadingSubscriptions, 66558 show: elementConfig.show, 66559 linkText: elementConfig.linkText, 66560 onClick: () => { 66561 logDataLayerEvent(form, 'zephr_form_button_press', { 66562 sectionId: formState.currentSection.type, 66563 buttonType: 'PAST_SUBSCRIPTIONS_LINK' 66564 }); 66565 formActions.jumpToPartStart('past-subscriptions'); 66566 } 66567 } 66568 }) 66569 }; 66570 66571 /* src/components/elements/changePaymentMethodButton/ChangePaymentMethodButton.svelte generated by Svelte v4.2.12 */ 66572 66573 function create_fragment$t(ctx) { 66574 let div; 66575 let button; 66576 let current; 66577 66578 button = new Button({ 66579 props: { 66580 disabled: false, 66581 text: /*text*/ ctx[0], 66582 onClick: /*func*/ ctx[2] 66583 } 66584 }); 66585 66586 return { 66587 c() { 66588 div = element("div"); 66589 create_component(button.$$.fragment); 66590 attr(div, "class", "change-payment-method-button-container"); 66591 }, 66592 m(target, anchor) { 66593 insert(target, div, anchor); 66594 mount_component(button, div, null); 66595 current = true; 66596 }, 66597 p(ctx, [dirty]) { 66598 const button_changes = {}; 66599 if (dirty & /*text*/ 1) button_changes.text = /*text*/ ctx[0]; 66600 if (dirty & /*onChangePayment*/ 2) button_changes.onClick = /*func*/ ctx[2]; 66601 button.$set(button_changes); 66602 }, 66603 i(local) { 66604 if (current) return; 66605 transition_in(button.$$.fragment, local); 66606 current = true; 66607 }, 66608 o(local) { 66609 transition_out(button.$$.fragment, local); 66610 current = false; 66611 }, 66612 d(detaching) { 66613 if (detaching) { 66614 detach(div); 66615 } 66616 66617 destroy_component(button); 66618 } 66619 }; 66620 } 66621 66622 function instance$t($$self, $$props, $$invalidate) { 66623 let { text } = $$props; 66624 let { onChangePayment } = $$props; 66625 const func = () => onChangePayment(); 66626 66627 $$self.$$set = $$props => {
66628 if ('text' in $$props) $$invalidate(0, text = $$props.text); 66629 if ('onChangePayment' in $$props) $$invalidate(1, onChangePayment = $$props.onChangePayment); 66630 }; 66631 66632 return [text, onChangePayment, func]; 66633 } 66634 66635 class ChangePaymentMethodButton extends SvelteComponent { 66636 constructor(options) { 66637 super(); 66638 init(this, options, instance$t, create_fragment$t, safe_not_equal, { text: 0, onChangePayment: 1 }); 66639 } 66640 } 66641 66642 const changePaymentMethodButtonFactory = { 66643 matches: (sectionElement) => sectionElement.type === elementTypes.CHNAGE_PAYMENT_METHOD_BUTTON, 66644 create: (form, formState, formActions, elementConfig) => ({ 66645 component: ChangePaymentMethodButton, 66646 props: { 66647 text: elementConfig.text, 66648 onChangePayment: () => { 66649 logDataLayerEvent(form, 'zephr_form_button_press', { 66650 sectionId: formState.currentSection.type, 66651 buttonType: 'SUBMIT' 66652 }); 66653 formActions.completeSection(); 66654 } 66655 } 66656 }) 66657 }; 66658 66659 /* src/components/elements/eventLink/EventLink.svelte generated by Svelte v4.2.12 */ 66660 66661 function create_fragment$s(ctx) { 66662 let div; 66663 let link; 66664 let div_class_value; 66665 let current; 66666 66667 link = new Link({ 66668 props: { 66669 text: /*text*/ ctx[0], 66670 onClick: /*onClick*/ ctx[2] 66671 } 66672 }); 66673 66674 link.$on("linkClick", function () { 66675 if (is_function(/*onClick*/ ctx[2])) /*onClick*/ ctx[2].apply(this, arguments); 66676 }); 66677 66678 return { 66679 c() { 66680 div = element("div"); 66681 create_component(link.$$.fragment); 66682 attr(div, "class", div_class_value = "" + (null_to_empty(`event-link-wrapper ${/*floatRight*/ ctx[1] ? "float-right" : ""}`) + " svelte-3cxpfz")); 66683 }, 66684 m(target, anchor) { 66685 insert(target, div, anchor); 66686 mount_component(link, div, null); 66687 current = true; 66688 }, 66689 p(new_ctx, [dirty]) { 66690 ctx = new_ctx; 66691 const link_changes = {}; 66692 if (dirty & /*text*/ 1) link_changes.text = /*text*/ ctx[0]; 66693 if (dirty & /*onClick*/ 4) link_changes.onClick = /*onClick*/ ctx[2]; 66694 link.$set(link_changes); 66695 66696 if (!current || dirty & /*floatRight*/ 2 && div_class_value !== (div_class_value = "" + (null_to_empty(`event-link-wrapper ${/*floatRight*/ ctx[1] ? "float-right" : ""}`) + " svelte-3cxpfz"))) { 66697 attr(div, "class", div_class_value); 66698 } 66699 }, 66700 i(local) { 66701 if (current) return; 66702 transition_in(link.$$.fragment, local); 66703 current = true; 66704 }, 66705 o(local) { 66706 transition_out(link.$$.fragment, local); 66707 current = false; 66708 }, 66709 d(detaching) { 66710 if (detaching) { 66711 detach(div); 66712 } 66713 66714 destroy_component(link); 66715 } 66716 }; 66717 } 66718 66719 function instance$s($$self, $$props, $$invalidate) { 66720 let { text } = $$props; 66721 let { floatRight } = $$props; 66722 let { onClick } = $$props; 66723 66724 $$self.$$set = $$props => {
66725 if ('text' in $$props) $$invalidate(0, text = $$props.text); 66726 if ('floatRight' in $$props) $$invalidate(1, floatRight = $$props.floatRight); 66727 if ('onClick' in $$props) $$invalidate(2, onClick = $$props.onClick); 66728 }; 66729 66730 return [text, floatRight, onClick]; 66731 } 66732 66733 class EventLink extends SvelteComponent { 66734 constructor(options) { 66735 super(); 66736 init(this, options, instance$s, create_fragment$s, safe_not_equal, { text: 0, floatRight: 1, onClick: 2 }); 66737 } 66738 } 66739 66740 const eventLinkFactory = { 66741 matches: (sectionElement) => sectionElement.type === elementTypes.EVENT_LINK, 66742 create: (form, formState, formActions, elementConfig) => ({ 66743 component: EventLink, 66744 props: { 66745 text: elementConfig.text, 66746 floatRight: elementConfig.floatRight, 66747 onClick: () => { 66748 console.log({ 66749 sectionId: formState.currentSection.type, 66750 buttonType: 'EVENT_LINK' 66751 }); 66752 logDataLayerEvent(form, 'zephr_form_button_press', { 66753 sectionId: formState.currentSection.type, 66754 buttonType: 'EVENT_LINK' 66755 }); 66756 formActions.onEvent(elementConfig.event); 66757 } 66758 } 66759 }) 66760 }; 66761 66762 /* src/components/elements/email/ReadOnlyEmailAddress.svelte generated by Svelte v4.2.12 */ 66763 66764 function create_if_block$m(ctx) { 66765 let link; 66766 let current; 66767 link = new Link({ props: { text: /*updateLabel*/ ctx[2] } }); 66768 66769 link.$on("linkClick", function () { 66770 if (is_function(/*onUpdate*/ ctx[4])) /*onUpdate*/ ctx[4].apply(this, arguments); 66771 }); 66772 66773 return { 66774 c() { 66775 create_component(link.$$.fragment); 66776 }, 66777 m(target, anchor) { 66778 mount_component(link, target, anchor); 66779 current = true; 66780 }, 66781 p(new_ctx, dirty) { 66782 ctx = new_ctx; 66783 const link_changes = {}; 66784 if (dirty & /*updateLabel*/ 4) link_changes.text = /*updateLabel*/ ctx[2]; 66785 link.$set(link_changes); 66786 }, 66787 i(local) { 66788 if (current) return; 66789 transition_in(link.$$.fragment, local); 66790 current = true; 66791 }, 66792 o(local) { 66793 transition_out(link.$$.fragment, local); 66794 current = false; 66795 }, 66796 d(detaching) { 66797 destroy_component(link, detaching); 66798 } 66799 }; 66800 } 66801 66802 function create_fragment$r(ctx) { 66803 let div0; 66804 let label_1; 66805 let t0; 66806 let div1; 66807 let input; 66808 let t1; 66809 let current; 66810 66811 label_1 = new Label({ 66812 props: { 66813 forInput: /*id*/ ctx[5], 66814 label: /*label*/ ctx[0] 66815 } 66816 }); 66817 66818 let if_block = /*updateEnabled*/ ctx[3] && create_if_block$m(ctx); 66819 66820 return { 66821 c() { 66822 div0 = element("div"); 66823 create_component(label_1.$$.fragment); 66824 t0 = space(); 66825 div1 = element("div"); 66826 input = element("input"); 66827 t1 = space(); 66828 if (if_block) if_block.c(); 66829 attr(div0, "class", "bold-label svelte-nx4w5y"); 66830 attr(input, "id", /*id*/ ctx[5]); 66831 attr(input, "type", "email"); 66832 attr(input, "name", "email"); 66833 input.value = /*emailAddress*/ ctx[1]; 66834 input.readOnly = true; 66835 attr(input, "class", "read-only-input svelte-nx4w5y"); 66836 attr(div1, "class", "zephr-form-relative-container svelte-nx4w5y"); 66837 }, 66838 m(target, anchor) { 66839 insert(target, div0, anchor); 66840 mount_component(label_1, div0, null); 66841 insert(target, t0, anchor); 66842 insert(target, div1, anchor); 66843 append(div1, input); 66844 append(div1, t1); 66845 if (if_block) if_block.m(div1, null); 66846 current = true; 66847 }, 66848 p(ctx, [dirty]) { 66849 const label_1_changes = {}; 66850 if (dirty & /*label*/ 1) label_1_changes.label = /*label*/ ctx[0]; 66851 label_1.$set(label_1_changes); 66852 66853 if (!current || dirty & /*emailAddress*/ 2 && input.value !== /*emailAddress*/ ctx[1]) { 66854 input.value = /*emailAddress*/ ctx[1]; 66855 } 66856 66857 if (/*updateEnabled*/ ctx[3]) { 66858 if (if_block) { 66859 if_block.p(ctx, dirty); 66860 66861 if (dirty & /*updateEnabled*/ 8) { 66862 transition_in(if_block, 1); 66863 } 66864 } else { 66865 if_block = create_if_block$m(ctx); 66866 if_block.c(); 66867 transition_in(if_block, 1); 66868 if_block.m(div1, null); 66869 } 66870 } else if (if_block) { 66871 group_outros(); 66872 66873 transition_out(if_block, 1, 1, () => { 66874 if_block = null; 66875 }); 66876 66877 check_outros(); 66878 } 66879 }, 66880 i(local) { 66881 if (current) return; 66882 transition_in(label_1.$$.fragment, local); 66883 transition_in(if_block); 66884 current = true; 66885 }, 66886 o(local) { 66887 transition_out(label_1.$$.fragment, local); 66888 transition_out(if_block); 66889 current = false;
66890 }, 66891 d(detaching) { 66892 if (detaching) { 66893 detach(div0); 66894 detach(t0); 66895 detach(div1); 66896 } 66897 66898 destroy_component(label_1); 66899 if (if_block) if_block.d(); 66900 } 66901 }; 66902 } 66903 66904 function instance$r($$self, $$props, $$invalidate) { 66905 let { formKey } = $$props; 66906 let { label } = $$props; 66907 let { emailAddress } = $$props; 66908 let { updateLabel } = $$props; 66909 let { updateEnabled } = $$props; 66910 let { onUpdate } = $$props; 66911 const id = `zephr-form-read-only-email-address-${formKey}`; 66912 66913 $$self.$$set = $$props => { 66914 if ('formKey' in $$props) $$invalidate(6, formKey = $$props.formKey); 66915 if ('label' in $$props) $$invalidate(0, label = $$props.label); 66916 if ('emailAddress' in $$props) $$invalidate(1, emailAddress = $$props.emailAddress); 66917 if ('updateLabel' in $$props) $$invalidate(2, updateLabel = $$props.updateLabel); 66918 if ('updateEnabled' in $$props) $$invalidate(3, updateEnabled = $$props.updateEnabled); 66919 if ('onUpdate' in $$props) $$invalidate(4, onUpdate = $$props.onUpdate); 66920 }; 66921 66922 return [label, emailAddress, updateLabel, updateEnabled, onUpdate, id, formKey]; 66923 } 66924 66925 class ReadOnlyEmailAddress extends SvelteComponent { 66926 constructor(options) { 66927 super(); 66928 66929 init(this, options, instance$r, create_fragment$r, safe_not_equal, { 66930 formKey: 6, 66931 label: 0, 66932 emailAddress: 1, 66933 updateLabel: 2, 66934 updateEnabled: 3, 66935 onUpdate: 4 66936 }); 66937 } 66938 } 66939 66940 const factory$6 = { 66941 matches: (sectionElement) => sectionElement.type === elementTypes.READ_ONLY_EMAIL_ADDRESS, 66942 create: (form, formState, formActions, elementConfig) => { 66943 return { 66944 component: ReadOnlyEmailAddress, 66945 props: { 66946 formKey: form.uniqueKey, 66947 emailAddress: formState.readOnlyEmail ?? '', 66948 label: elementConfig.label, 66949 updateLabel: elementConfig.updateLinkLabel, 66950 updateEnabled: elementConfig.updateLinkEnabled, 66951 onUpdate: () => formActions.jumpToPartStart('email-update') 66952 } 66953 }; 66954 } 66955 }; 66956 66957 /* src/components/elements/password/ReadOnlyPassword.svelte generated by Svelte v4.2.12 */ 66958 66959 function create_if_block$l(ctx) { 66960 let link; 66961 let current; 66962 link = new Link({ props: { text: /*updateLabel*/ ctx[1] } }); 66963 66964 link.$on("linkClick", function () { 66965 if (is_function(/*onUpdate*/ ctx[3])) /*onUpdate*/ ctx[3].apply(this, arguments); 66966 }); 66967 66968 return { 66969 c() { 66970 create_component(link.$$.fragment); 66971 }, 66972 m(target, anchor) { 66973 mount_component(link, target, anchor); 66974 current = true; 66975 }, 66976 p(new_ctx, dirty) { 66977 ctx = new_ctx; 66978 const link_changes = {}; 66979 if (dirty & /*updateLabel*/ 2) link_changes.text = /*updateLabel*/ ctx[1]; 66980 link.$set(link_changes); 66981 }, 66982 i(local) { 66983 if (current) return; 66984 transition_in(link.$$.fragment, local); 66985 current = true; 66986 }, 66987 o(local) { 66988 transition_out(link.$$.fragment, local); 66989 current = false; 66990 }, 66991 d(detaching) { 66992 destroy_component(link, detaching); 66993 } 66994 }; 66995 } 66996 66997 function create_fragment$q(ctx) { 66998 let div0; 66999 let label_1; 67000 let t0; 67001 let div1; 67002 let input; 67003 let t1; 67004 let current; 67005 67006 label_1 = new Label({ 67007 props: { 67008 forInput: /*id*/ ctx[4], 67009 label: /*label*/ ctx[0] 67010 } 67011 }); 67012 67013 let if_block = /*updateEnabled*/ ctx[2] && create_if_block$l(ctx); 67014 67015 return { 67016 c() { 67017 div0 = element("div"); 67018 create_component(label_1.$$.fragment); 67019 t0 = space(); 67020 div1 = element("div"); 67021 input = element("input"); 67022 t1 = space(); 67023 if (if_block) if_block.c(); 67024 attr(div0, "class", "bold-label svelte-nx4w5y"); 67025 attr(input, "id", /*id*/ ctx[4]); 67026 attr(input, "type", "password"); 67027 input.value = "â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢"; 67028 input.readOnly = true; 67029 attr(input, "class", "read-only-input svelte-nx4w5y"); 67030 attr(div1, "class", "zephr-form-relative-container svelte-nx4w5y"); 67031 }, 67032 m(target, anchor) { 67033 insert(target, div0, anchor); 67034 mount_component(label_1, div0, null); 67035 insert(target, t0, anchor); 67036 insert(target, div1, anchor); 67037 append(div1, input); 67038 append(div1, t1); 67039 if (if_block) if_block.m(div1, null); 67040 current = true; 67041 }, 67042 p(ctx, [dirty]) { 67043 const label_1_changes = {};
67044 if (dirty & /*label*/ 1) label_1_changes.label = /*label*/ ctx[0]; 67045 label_1.$set(label_1_changes); 67046 67047 if (/*updateEnabled*/ ctx[2]) { 67048 if (if_block) { 67049 if_block.p(ctx, dirty); 67050 67051 if (dirty & /*updateEnabled*/ 4) { 67052 transition_in(if_block, 1); 67053 } 67054 } else { 67055 if_block = create_if_block$l(ctx); 67056 if_block.c(); 67057 transition_in(if_block, 1); 67058 if_block.m(div1, null); 67059 } 67060 } else if (if_block) { 67061 group_outros(); 67062 67063 transition_out(if_block, 1, 1, () => { 67064 if_block = null; 67065 }); 67066 67067 check_outros(); 67068 } 67069 }, 67070 i(local) { 67071 if (current) return; 67072 transition_in(label_1.$$.fragment, local); 67073 transition_in(if_block); 67074 current = true; 67075 }, 67076 o(local) { 67077 transition_out(label_1.$$.fragment, local); 67078 transition_out(if_block); 67079 current = false; 67080 }, 67081 d(detaching) { 67082 if (detaching) { 67083 detach(div0); 67084 detach(t0); 67085 detach(div1); 67086 } 67087 67088 destroy_component(label_1); 67089 if (if_block) if_block.d(); 67090 } 67091 }; 67092 } 67093 67094 function instance$q($$self, $$props, $$invalidate) { 67095 let { formKey } = $$props; 67096 let { label } = $$props; 67097 let { updateLabel } = $$props; 67098 let { updateEnabled } = $$props; 67099 let { onUpdate } = $$props; 67100 const id = `zephr-form-read-only-password-${formKey}`; 67101 67102 $$self.$$set = $$props => {
67103 if ('formKey' in $$props) $$invalidate(5, formKey = $$props.formKey); 67104 if ('label' in $$props) $$invalidate(0, label = $$props.label); 67105 if ('updateLabel' in $$props) $$invalidate(1, updateLabel = $$props.updateLabel); 67106 if ('updateEnabled' in $$props) $$invalidate(2, updateEnabled = $$props.updateEnabled); 67107 if ('onUpdate' in $$props) $$invalidate(3, onUpdate = $$props.onUpdate); 67108 }; 67109 67110 return [label, updateLabel, updateEnabled, onUpdate, id, formKey]; 67111 } 67112 67113 class ReadOnlyPassword extends SvelteComponent { 67114 constructor(options) { 67115 super(); 67116 67117 init(this, options, instance$q, create_fragment$q, safe_not_equal, { 67118 formKey: 5, 67119 label: 0, 67120 updateLabel: 1, 67121 updateEnabled: 2, 67122 onUpdate: 3 67123 }); 67124 } 67125 } 67126 67127 const factory$5 = { 67128 matches: (sectionElement) => sectionElement.type === elementTypes.READ_ONLY_PASSWORD, 67129 create: (form, formState, formActions, elementConfig) => { 67130 return { 67131 component: ReadOnlyPassword, 67132 props: { 67133 formKey: form.uniqueKey, 67134 label: elementConfig.label, 67135 updateLabel: elementConfig.updateLinkLabel, 67136 updateEnabled: elementConfig.updateLinkEnabled, 67137 onUpdate: () => formActions.jumpToPartStart('password-update') 67138 } 67139 }; 67140 } 67141 }; 67142 67143 /* src/components/elements/userAttribute/ReadOnlyUserAttribute.svelte generated by Svelte v4.2.12 */ 67144 67145 function create_else_block$1(ctx) { 67146 let div2; 67147 let div0; 67148 let t0; 67149 let t1; 67150 let div1; 67151 let t2; 67152 67153 return { 67154 c() { 67155 div2 = element("div"); 67156 div0 = element("div"); 67157 t0 = text(/*label*/ ctx[3]); 67158 t1 = space(); 67159 div1 = element("div"); 67160 t2 = text(/*value*/ ctx[2]); 67161 attr(div0, "class", "zephr-form-ro-attribute-label"); 67162 attr(div1, "class", "zephr-form-ro-attribute-value"); 67163 attr(div2, "class", "zephr-form-ro-attribute"); 67164 }, 67165 m(target, anchor) { 67166 insert(target, div2, anchor); 67167 append(div2, div0); 67168 append(div0, t0); 67169 append(div2, t1); 67170 append(div2, div1); 67171 append(div1, t2); 67172 }, 67173 p(ctx, dirty) { 67174 if (dirty & /*label*/ 8) set_data(t0, /*label*/ ctx[3]); 67175 if (dirty & /*value*/ 4) set_data(t2, /*value*/ ctx[2]); 67176 }, 67177 i: noop, 67178 o: noop, 67179 d(detaching) { 67180 if (detaching) { 67181 detach(div2); 67182 } 67183 } 67184 }; 67185 } 67186 67187 // (8:0) {#if isCheckbox} 67188 function create_if_block$k(ctx) { 67189 let div; 67190 let checkbox; 67191 let current; 67192 67193 checkbox = new Checkbox({ 67194 props: { 67195 id: `zephr-form-ro-checkbox-${/*slug*/ ctx[1]}`, 67196 name: /*slug*/ ctx[1], 67197 label: /*label*/ ctx[3], 67198 required: false, 67199 value: /*value*/ ctx[2], 67200 checked: /*value*/ ctx[2], 67201 disabled: true 67202 } 67203 }); 67204 67205 return { 67206 c() { 67207 div = element("div"); 67208 create_component(checkbox.$$.fragment); 67209 attr(div, "class", "zephr-form-ro-attribute"); 67210 }, 67211 m(target, anchor) { 67212 insert(target, div, anchor); 67213 mount_component(checkbox, div, null); 67214 current = true; 67215 }, 67216 p(ctx, dirty) { 67217 const checkbox_changes = {}; 67218 if (dirty & /*slug*/ 2) checkbox_changes.id = `zephr-form-ro-checkbox-${/*slug*/ ctx[1]}`; 67219 if (dirty & /*slug*/ 2) checkbox_changes.name = /*slug*/ ctx[1]; 67220 if (dirty & /*label*/ 8) checkbox_changes.label = /*label*/ ctx[3]; 67221 if (dirty & /*value*/ 4) checkbox_changes.value = /*value*/ ctx[2]; 67222 if (dirty & /*value*/ 4) checkbox_changes.checked = /*value*/ ctx[2]; 67223 checkbox.$set(checkbox_changes); 67224 }, 67225 i(local) { 67226 if (current) return; 67227 transition_in(checkbox.$$.fragment, local); 67228 current = true; 67229 }, 67230 o(local) { 67231 transition_out(checkbox.$$.fragment, local); 67232 current = false; 67233 }, 67234 d(detaching) { 67235 if (detaching) { 67236 detach(div); 67237 } 67238 67239 destroy_component(checkbox); 67240 } 67241 }; 67242 } 67243 67244 function create_fragment$p(ctx) { 67245 let current_block_type_index; 67246 let if_block; 67247 let if_block_anchor; 67248 let current; 67249 const if_block_creators = [create_if_block$k, create_else_block$1]; 67250 const if_blocks = []; 67251 67252 function select_block_type(ctx, dirty) { 67253 if (/*isCheckbox*/ ctx[0]) return 0; 67254 return 1; 67255 } 67256 67257 current_block_type_index = select_block_type(ctx); 67258 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 67259 67260 return { 67261 c() { 67262 if_block.c(); 67263 if_block_anchor = empty(); 67264 }, 67265 m(target, anchor) { 67266 if_blocks[current_block_type_index].m(target, anchor); 67267 insert(target, if_block_anchor, anchor); 67268 current = true; 67269 }, 67270 p(ctx, [dirty]) { 67271 let previous_block_index = current_block_type_index; 67272 current_block_type_index = select_block_type(ctx); 67273 67274 if (current_block_type_index === previous_block_index) { 67275 if_blocks[current_block_type_index].p(ctx, dirty); 67276 } else { 67277 group_outros(); 67278 67279 transition_out(if_blocks[previous_block_index], 1, 1, () => { 67280 if_blocks[previous_block_index] = null; 67281 }); 67282 67283 check_outros(); 67284 if_block = if_blocks[current_block_type_index]; 67285 67286 if (!if_block) { 67287 if_block = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 67288 if_block.c(); 67289 } else { 67290 if_block.p(ctx, dirty); 67291 } 67292 67293 transition_in(if_block, 1); 67294 if_block.m(if_block_anchor.parentNode, if_block_anchor); 67295 } 67296 }, 67297 i(local) { 67298 if (current) return; 67299 transition_in(if_block); 67300 current = true; 67301 }, 67302 o(local) { 67303 transition_out(if_block); 67304 current = false;
67305 }, 67306 d(detaching) { 67307 if (detaching) { 67308 detach(if_block_anchor); 67309 } 67310 67311 if_blocks[current_block_type_index].d(detaching); 67312 } 67313 }; 67314 } 67315 67316 function instance$p($$self, $$props, $$invalidate) { 67317 let { isCheckbox } = $$props; 67318 let { slug } = $$props; 67319 let { value } = $$props; 67320 let { label } = $$props; 67321 67322 $$self.$$set = $$props => { 67323 if ('isCheckbox' in $$props) $$invalidate(0, isCheckbox = $$props.isCheckbox); 67324 if ('slug' in $$props) $$invalidate(1, slug = $$props.slug); 67325 if ('value' in $$props) $$invalidate(2, value = $$props.value); 67326 if ('label' in $$props) $$invalidate(3, label = $$props.label); 67327 }; 67328 67329 return [isCheckbox, slug, value, label]; 67330 } 67331 67332 class ReadOnlyUserAttribute extends SvelteComponent { 67333 constructor(options) { 67334 super(); 67335 67336 init(this, options, instance$p, create_fragment$p, safe_not_equal, { 67337 isCheckbox: 0, 67338 slug: 1, 67339 value: 2, 67340 label: 3 67341 }); 67342 } 67343 } 67344 67345 const selectAttributeTypes = ['radio', 'select']; 67346 const readOnlyUserAttributeFactory = { 67347 matches: (sectionElement) => sectionElement.type === elementTypes.READ_ONLY_USER_ATTRIBUTE, 67348 create: (form, formState, _, elementConfig) => { 67349 const attributeSchema = form.organisationConfiguration.schemaFields.find(s => s.slug === elementConfig.slug); 67350 let value = (formState.readOnlyAttributeValues ?? {})[elementConfig.slug] ?? ''; 67351 if (value && selectAttributeTypes.includes(attributeSchema?.["input-type"])) { 67352 value = (attributeSchema?.["select-options"] ?? []).find(o => o.value === value)?.label ?? value; 67353 } 67354 const isCheckbox = attributeSchema?.["input-type"] === 'checkbox'; 67355 return { 67356 component: ReadOnlyUserAttribute, 67357 props: { 67358 value, 67359 slug: elementConfig.slug, 67360 label: elementConfig.label, 67361 isCheckbox, 67362 } 67363 }; 67364 } 67365 }; 67366 67367 /* src/components/elements/devices/DeviceSessionWrapper.svelte generated by Svelte v4.2.12 */ 67368 67369 function create_if_block_1$e(ctx) { 67370 let span; 67371 let t; 67372 67373 return { 67374 c() { 67375 span = element("span"); 67376 t = text(/*currentDeviceLabel*/ ctx[2]); 67377 attr(span, "class", "current-device svelte-jmotet"); 67378 }, 67379 m(target, anchor) { 67380 insert(target, span, anchor); 67381 append(span, t); 67382 }, 67383 p(ctx, dirty) { 67384 if (dirty & /*currentDeviceLabel*/ 4) set_data(t, /*currentDeviceLabel*/ ctx[2]); 67385 }, 67386 d(detaching) { 67387 if (detaching) { 67388 detach(span); 67389 } 67390 } 67391 }; 67392 } 67393 67394 // (22:4) {#if !deviceSession.requestingSession} 67395 function create_if_block$j(ctx) { 67396 let button; 67397 let current; 67398 67399 button = new Button({ 67400 props: { 67401 disabled: false, 67402 text: /*signOutLabel*/ ctx[4], 67403 onClick: /*func*/ ctx[5] 67404 } 67405 }); 67406 67407 return { 67408 c() { 67409 create_component(button.$$.fragment); 67410 }, 67411 m(target, anchor) { 67412 mount_component(button, target, anchor); 67413 current = true; 67414 }, 67415 p(ctx, dirty) { 67416 const button_changes = {}; 67417 if (dirty & /*signOutLabel*/ 16) button_changes.text = /*signOutLabel*/ ctx[4]; 67418 if (dirty & /*onDeviceSignOut, deviceSession*/ 3) button_changes.onClick = /*func*/ ctx[5]; 67419 button.$set(button_changes); 67420 }, 67421 i(local) { 67422 if (current) return; 67423 transition_in(button.$$.fragment, local); 67424 current = true; 67425 }, 67426 o(local) { 67427 transition_out(button.$$.fragment, local); 67428 current = false; 67429 }, 67430 d(detaching) { 67431 destroy_component(button, detaching); 67432 } 67433 }; 67434 } 67435 67436 function create_fragment$o(ctx) { 67437 let div4; 67438 let div0; 67439 let t0_value = /*deviceSession*/ ctx[0].deviceName + ""; 67440 let t0; 67441 let t1; 67442 let t2; 67443 let div1; 67444 let t3; 67445 let t4; 67446 let t5_value = /*deviceSession*/ ctx[0].startDate + ""; 67447 let t5; 67448 let t6; 67449 let div2; 67450 let t7_value = /*deviceSession*/ ctx[0].browser + ""; 67451 let t7; 67452 let t8; 67453 let div3; 67454 let t9_value = /*deviceSession*/ ctx[0].country + ""; 67455 let t9; 67456 let t10; 67457 let t11; 67458 let hr; 67459 let current; 67460 let if_block0 = /*deviceSession*/ ctx[0].requestingSession && create_if_block_1$e(ctx); 67461 let if_block1 = !/*deviceSession*/ ctx[0].requestingSession && create_if_block$j(ctx); 67462 67463 return { 67464 c() { 67465 div4 = element("div"); 67466 div0 = element("div"); 67467 t0 = text(t0_value); 67468 t1 = space(); 67469 if (if_block0) if_block0.c(); 67470 t2 = space(); 67471 div1 = element("div"); 67472 t3 = text(/*loginTimeLabel*/ ctx[3]); 67473 t4 = text(": "); 67474 t5 = text(t5_value); 67475 t6 = space(); 67476 div2 = element("div"); 67477 t7 = text(t7_value); 67478 t8 = space(); 67479 div3 = element("div"); 67480 t9 = text(t9_value); 67481 t10 = space(); 67482 if (if_block1) if_block1.c(); 67483 t11 = space(); 67484 hr = element("hr"); 67485 attr(div0, "class", "device-title svelte-jmotet"); 67486 attr(div1, "class", "login-time svelte-jmotet"); 67487 attr(div2, "class", "browser svelte-jmotet"); 67488 attr(div3, "class", "country svelte-jmotet"); 67489 attr(hr, "class", "svelte-jmotet"); 67490 attr(div4, "class", "session-container svelte-jmotet"); 67491 }, 67492 m(target, anchor) { 67493 insert(target, div4, anchor); 67494 append(div4, div0); 67495 append(div0, t0); 67496 append(div0, t1); 67497 if (if_block0) if_block0.m(div0, null); 67498 append(div4, t2); 67499 append(div4, div1); 67500 append(div1, t3); 67501 append(div1, t4); 67502 append(div1, t5); 67503 append(div4, t6); 67504 append(div4, div2); 67505 append(div2, t7); 67506 append(div4, t8); 67507 append(div4, div3); 67508 append(div3, t9); 67509 append(div4, t10); 67510 if (if_block1) if_block1.m(div4, null); 67511 append(div4, t11); 67512 append(div4, hr); 67513 current = true; 67514 }, 67515 p(ctx, [dirty]) { 67516 if ((!current || dirty & /*deviceSession*/ 1) && t0_value !== (t0_value = /*deviceSession*/ ctx[0].deviceName + "")) set_data(t0, t0_value); 67517 67518 if (/*deviceSession*/ ctx[0].requestingSession) { 67519 if (if_block0) { 67520 if_block0.p(ctx, dirty); 67521 } else { 67522 if_block0 = create_if_block_1$e(ctx); 67523 if_block0.c(); 67524 if_block0.m(div0, null); 67525 } 67526 } else if (if_block0) { 67527 if_block0.d(1); 67528 if_block0 = null; 67529 } 67530 67531 if (!current || dirty & /*loginTimeLabel*/ 8) set_data(t3, /*loginTimeLabel*/ ctx[3]); 67532 if ((!current || dirty & /*deviceSession*/ 1) && t5_value !== (t5_value = /*deviceSession*/ ctx[0].startDate + "")) set_data(t5, t5_value); 67533 if ((!current || dirty & /*deviceSession*/ 1) && t7_value !== (t7_value = /*deviceSession*/ ctx[0].browser + "")) set_data(t7, t7_value); 67534 if ((!current || dirty & /*deviceSession*/ 1) && t9_value !== (t9_value = /*deviceSession*/ ctx[0].country + "")) set_data(t9, t9_value); 67535 67536 if (!/*deviceSession*/ ctx[0].requestingSession) { 67537 if (if_block1) { 67538 if_block1.p(ctx, dirty); 67539
67540 if (dirty & /*deviceSession*/ 1) { 67541 transition_in(if_block1, 1); 67542 } 67543 } else { 67544 if_block1 = create_if_block$j(ctx); 67545 if_block1.c(); 67546 transition_in(if_block1, 1); 67547 if_block1.m(div4, t11); 67548 } 67549 } else if (if_block1) { 67550 group_outros(); 67551 67552 transition_out(if_block1, 1, 1, () => { 67553 if_block1 = null; 67554 }); 67555 67556 check_outros(); 67557 } 67558 }, 67559 i(local) { 67560 if (current) return; 67561 transition_in(if_block1); 67562 current = true; 67563 }, 67564 o(local) { 67565 transition_out(if_block1); 67566 current = false; 67567 }, 67568 d(detaching) { 67569 if (detaching) { 67570 detach(div4); 67571 } 67572 67573 if (if_block0) if_block0.d(); 67574 if (if_block1) if_block1.d(); 67575 } 67576 }; 67577 } 67578 67579 function instance$o($$self, $$props, $$invalidate) { 67580 let { deviceSession } = $$props; 67581 let { onDeviceSignOut } = $$props; 67582 let { currentDeviceLabel } = $$props; 67583 let { loginTimeLabel } = $$props; 67584 let { signOutLabel } = $$props; 67585 const func = () => onDeviceSignOut(deviceSession.id); 67586 67587 $$self.$$set = $$props => {
67588 if ('deviceSession' in $$props) $$invalidate(0, deviceSession = $$props.deviceSession); 67589 if ('onDeviceSignOut' in $$props) $$invalidate(1, onDeviceSignOut = $$props.onDeviceSignOut); 67590 if ('currentDeviceLabel' in $$props) $$invalidate(2, currentDeviceLabel = $$props.currentDeviceLabel); 67591 if ('loginTimeLabel' in $$props) $$invalidate(3, loginTimeLabel = $$props.loginTimeLabel); 67592 if ('signOutLabel' in $$props) $$invalidate(4, signOutLabel = $$props.signOutLabel); 67593 }; 67594 67595 return [ 67596 deviceSession, 67597 onDeviceSignOut, 67598 currentDeviceLabel, 67599 loginTimeLabel, 67600 signOutLabel, 67601 func 67602 ]; 67603 } 67604 67605 class DeviceSessionWrapper extends SvelteComponent { 67606 constructor(options) { 67607 super(); 67608 67609 init(this, options, instance$o, create_fragment$o, safe_not_equal, { 67610 deviceSession: 0, 67611 onDeviceSignOut: 1, 67612 currentDeviceLabel: 2, 67613 loginTimeLabel: 3, 67614 signOutLabel: 4 67615 }); 67616 } 67617 } 67618 67619 /* src/components/elements/devices/DevicesSessionList.svelte generated by Svelte v4.2.12 */ 67620 67621 function get_each_context$8(ctx, list, i) { 67622 const child_ctx = ctx.slice(); 67623 child_ctx[7] = list[i]; 67624 return child_ctx; 67625 } 67626 67627 // (33:4) {#if devicesSessions == null} 67628 function create_if_block_1$d(ctx) { 67629 let fa; 67630 let current; 67631 67632 fa = new Fa({ 67633 props: { icon: faSpinner, spin: true, size: "lg" } 67634 }); 67635 67636 return { 67637 c() { 67638 create_component(fa.$$.fragment); 67639 }, 67640 m(target, anchor) { 67641 mount_component(fa, target, anchor); 67642 current = true; 67643 }, 67644 i(local) { 67645 if (current) return; 67646 transition_in(fa.$$.fragment, local); 67647 current = true; 67648 }, 67649 o(local) { 67650 transition_out(fa.$$.fragment, local); 67651 current = false; 67652 }, 67653 d(detaching) { 67654 destroy_component(fa, detaching); 67655 } 67656 }; 67657 } 67658 67659 // (36:4) {#if devicesSessions != null && !devicesSessions.length} 67660 function create_if_block$i(ctx) { 67661 let div; 67662 67663 return { 67664 c() { 67665 div = element("div"); 67666 }, 67667 m(target, anchor) { 67668 insert(target, div, anchor); 67669 div.innerHTML = /*noDeviceSessionsMessage*/ ctx[1]; 67670 }, 67671 p(ctx, dirty) { 67672 if (dirty & /*noDeviceSessionsMessage*/ 2) div.innerHTML = /*noDeviceSessionsMessage*/ ctx[1]; }, 67673 d(detaching) { 67674 if (detaching) { 67675 detach(div); 67676 } 67677 } 67678 }; 67679 } 67680 67681 // (41:4) {#each devicesSessions ?? [] as deviceSession} 67682 function create_each_block$8(ctx) { 67683 let devicesessionwrapper; 67684 let current; 67685 67686 devicesessionwrapper = new DeviceSessionWrapper({ 67687 props: { 67688 deviceSession: /*deviceSession*/ ctx[7], 67689 currentDeviceLabel: /*currentDeviceLabel*/ ctx[3], 67690 loginTimeLabel: /*loginTimeLabel*/ ctx[4], 67691 signOutLabel: /*signOutLabel*/ ctx[5], 67692 onDeviceSignOut: /*onDeviceSignOut*/ ctx[6] 67693 } 67694 }); 67695 67696 return { 67697 c() { 67698 create_component(devicesessionwrapper.$$.fragment); 67699 }, 67700 m(target, anchor) { 67701 mount_component(devicesessionwrapper, target, anchor); 67702 current = true; 67703 }, 67704 p(ctx, dirty) { 67705 const devicesessionwrapper_changes = {}; 67706 if (dirty & /*devicesSessions*/ 1) devicesessionwrapper_changes.deviceSession = /*deviceSession*/ ctx[7]; 67707 if (dirty & /*currentDeviceLabel*/ 8) devicesessionwrapper_changes.currentDeviceLabel = /*currentDeviceLabel*/ ctx[3]; 67708 if (dirty & /*loginTimeLabel*/ 16) devicesessionwrapper_changes.loginTimeLabel = /*loginTimeLabel*/ ctx[4]; 67709 if (dirty & /*signOutLabel*/ 32) devicesessionwrapper_changes.signOutLabel = /*signOutLabel*/ ctx[5]; 67710 if (dirty & /*onDeviceSignOut*/ 64) devicesessionwrapper_changes.onDeviceSignOut = /*onDeviceSignOut*/ ctx[6]; 67711 devicesessionwrapper.$set(devicesessionwrapper_changes); 67712 }, 67713 i(local) { 67714 if (current) return; 67715 transition_in(devicesessionwrapper.$$.fragment, local); 67716 current = true; 67717 }, 67718 o(local) { 67719 transition_out(devicesessionwrapper.$$.fragment, local); 67720 current = false; 67721 }, 67722 d(detaching) { 67723 destroy_component(devicesessionwrapper, detaching); 67724 } 67725 }; 67726 } 67727 67728 function create_fragment$n(ctx) { 67729 let div1; 67730 let div0; 67731 let h1; 67732 let t0; 67733 let t1; 67734 let t2; 67735 let t3; 67736 let current; 67737 let if_block0 = /*devicesSessions*/ ctx[0] == null && create_if_block_1$d(); 67738 let if_block1 = /*devicesSessions*/ ctx[0] != null && !/*devicesSessions*/ ctx[0].length && create_if_block$i(ctx); 67739 let each_value = ensure_array_like(/*devicesSessions*/ ctx[0] ?? []); 67740 let each_blocks = []; 67741 67742 for (let i = 0; i < each_value.length; i += 1) { 67743 each_blocks[i] = create_each_block$8(get_each_context$8(ctx, each_value, i)); 67744 } 67745 67746 const out = i => transition_out(each_blocks[i], 1, 1, () => { 67747 each_blocks[i] = null; 67748 }); 67749 67750 return { 67751 c() { 67752 div1 = element("div"); 67753 div0 = element("div"); 67754 h1 = element("h1"); 67755 t0 = text(/*yourDevicesLabel*/ ctx[2]); 67756 t1 = space(); 67757 if (if_block0) if_block0.c(); 67758 t2 = space(); 67759 if (if_block1) if_block1.c(); 67760 t3 = space(); 67761 67762 for (let i = 0; i < each_blocks.length; i += 1) { 67763 each_blocks[i].c(); 67764 } 67765 67766 attr(h1, "class", "current-device"); 67767 attr(div0, "class", "your-devices"); 67768 attr(div1, "class", "devices-sessions-container"); 67769 }, 67770 m(target, anchor) { 67771 insert(target, div1, anchor); 67772 append(div1, div0); 67773 append(div0, h1); 67774 append(h1, t0); 67775 append(div1, t1); 67776 if (if_block0) if_block0.m(div1, null); 67777 append(div1, t2); 67778 if (if_block1) if_block1.m(div1, null); 67779 append(div1, t3); 67780 67781 for (let i = 0; i < each_blocks.length; i += 1) { 67782 if (each_blocks[i]) { 67783 each_blocks[i].m(div1, null); 67784 } 67785 } 67786 67787 current = true; 67788 }, 67789 p(ctx, [dirty]) { 67790 if (!current || dirty & /*yourDevicesLabel*/ 4) set_data(t0, /*yourDevicesLabel*/ ctx[2]); 67791 67792 if (/*devicesSessions*/ ctx[0] == null) { 67793 if (if_block0) {
67794 if (dirty & /*devicesSessions*/ 1) { 67795 transition_in(if_block0, 1); 67796 } 67797 } else { 67798 if_block0 = create_if_block_1$d(); 67799 if_block0.c(); 67800 transition_in(if_block0, 1); 67801 if_block0.m(div1, t2); 67802 } 67803 } else if (if_block0) { 67804 group_outros(); 67805 67806 transition_out(if_block0, 1, 1, () => { 67807 if_block0 = null; 67808 }); 67809 67810 check_outros(); 67811 } 67812 67813 if (/*devicesSessions*/ ctx[0] != null && !/*devicesSessions*/ ctx[0].length) { 67814 if (if_block1) { 67815 if_block1.p(ctx, dirty); 67816 } else { 67817 if_block1 = create_if_block$i(ctx); 67818 if_block1.c(); 67819 if_block1.m(div1, t3); 67820 } 67821 } else if (if_block1) { 67822 if_block1.d(1); 67823 if_block1 = null; 67824 } 67825 67826 if (dirty & /*devicesSessions, currentDeviceLabel, loginTimeLabel, signOutLabel, onDeviceSignOut*/ 121) { 67827 each_value = ensure_array_like(/*devicesSessions*/ ctx[0] ?? []); 67828 let i; 67829 67830 for (i = 0; i < each_value.length; i += 1) { 67831 const child_ctx = get_each_context$8(ctx, each_value, i); 67832 67833 if (each_blocks[i]) { 67834 each_blocks[i].p(child_ctx, dirty); 67835 transition_in(each_blocks[i], 1); 67836 } else { 67837 each_blocks[i] = create_each_block$8(child_ctx); 67838 each_blocks[i].c(); 67839 transition_in(each_blocks[i], 1); 67840 each_blocks[i].m(div1, null); 67841 } 67842 } 67843 67844 group_outros(); 67845 67846 for (i = each_value.length; i < each_blocks.length; i += 1) { 67847 out(i); 67848 } 67849 67850 check_outros(); 67851 } 67852 }, 67853 i(local) { 67854 if (current) return; 67855 transition_in(if_block0); 67856 67857 for (let i = 0; i < each_value.length; i += 1) { 67858 transition_in(each_blocks[i]); 67859 } 67860 67861 current = true; 67862 }, 67863 o(local) { 67864 transition_out(if_block0);
67865 each_blocks = each_blocks.filter(Boolean); 67866 67867 for (let i = 0; i < each_blocks.length; i += 1) { 67868 transition_out(each_blocks[i]); 67869 } 67870 67871 current = false; 67872 }, 67873 d(detaching) { 67874 if (detaching) { 67875 detach(div1); 67876 } 67877 67878 if (if_block0) if_block0.d(); 67879 if (if_block1) if_block1.d(); 67880 destroy_each(each_blocks, detaching); 67881 } 67882 }; 67883 } 67884 67885 function instance$n($$self, $$props, $$invalidate) { 67886 let { devicesSessions } = $$props; 67887 let { noDeviceSessionsMessage } = $$props; 67888 let { yourDevicesLabel } = $$props; 67889 let { currentDeviceLabel } = $$props; 67890 let { loginTimeLabel } = $$props; 67891 let { signOutLabel } = $$props; 67892 let { onDeviceSignOut } = $$props; 67893 67894 $$self.$$set = $$props => { 67895 if ('devicesSessions' in $$props) $$invalidate(0, devicesSessions = $$props.devicesSessions); 67896 if ('noDeviceSessionsMessage' in $$props) $$invalidate(1, noDeviceSessionsMessage = $$props.noDeviceSessionsMessage); 67897 if ('yourDevicesLabel' in $$props) $$invalidate(2, yourDevicesLabel = $$props.yourDevicesLabel);
67898 if ('currentDeviceLabel' in $$props) $$invalidate(3, currentDeviceLabel = $$props.currentDeviceLabel); 67899 if ('loginTimeLabel' in $$props) $$invalidate(4, loginTimeLabel = $$props.loginTimeLabel); 67900 if ('signOutLabel' in $$props) $$invalidate(5, signOutLabel = $$props.signOutLabel); 67901 if ('onDeviceSignOut' in $$props) $$invalidate(6, onDeviceSignOut = $$props.onDeviceSignOut); 67902 }; 67903 67904 return [ 67905 devicesSessions, 67906 noDeviceSessionsMessage, 67907 yourDevicesLabel, 67908 currentDeviceLabel, 67909 loginTimeLabel, 67910 signOutLabel, 67911 onDeviceSignOut 67912 ]; 67913 } 67914 67915 class DevicesSessionList extends SvelteComponent { 67916 constructor(options) { 67917 super(); 67918 67919 init(this, options, instance$n, create_fragment$n, safe_not_equal, { 67920 devicesSessions: 0, 67921 noDeviceSessionsMessage: 1, 67922 yourDevicesLabel: 2, 67923 currentDeviceLabel: 3, 67924 loginTimeLabel: 4, 67925 signOutLabel: 5, 67926 onDeviceSignOut: 6 67927 }); 67928 } 67929 } 67930 67931 const loadDeviceSessions = async (form, formState, formActions) => { 67932 const availableDeviceSessions = await getAvailableDeviceSessions(form, formState, formActions); 67933 formActions.updateFormState({ 67934 availableDeviceSessions 67935 }); 67936 return availableDeviceSessions; 67937 }; 67938 const getAvailableDeviceSessions = (form, _, formActions) => { 67939 return request(`zephr/public/sessions/v1/sessions`, { 67940 method: "GET" 67941 }, formActions, null, true) 67942 .then(response => response.ok ? response.json() : []) 67943 .then(sessions => sessions 67944 .map(session => ({ 67945 tenantId: session['tenantId'], 67946 userId: session['userId'], 67947 id: session['id'], 67948 startDate: new Date(session['startDate']).toLocaleString(resolveLanguagePackLocale(form), { 67949 year: 'numeric', 67950 month: 'long', 67951 day: 'numeric', 67952 hour: '2-digit', 67953 minute: '2-digit', 67954 second: '2-digit', 67955 hour12: true 67956 }), 67957 deviceName: session['deviceName'], 67958 browser: session['browser'], 67959 requestingSession: session['requestingSession'], 67960 city: session['city'] ?? null, 67961 country: session['country'] ?? null, 67962 geoState: session['geoState'] ?? null, 67963 ipAddress: session['ipAddress'] ?? null, 67964 }))); 67965 }; 67966 67967 const signOutSingleDevice = async (form, formState, formActions, deviceId) => { 67968 const success = await signOutDevice(form, formState, formActions, deviceId); 67969 if (success) { 67970 console.log("Successfully signed out device."); 67971 return loadDeviceSessions(form, formState, formActions); 67972 } 67973 else { 67974 console.error("Failed to sign out device."); 67975 } 67976 }; 67977 const signOutDevice = async (form, formState, formActions, deviceId) => { 67978 try { 67979 const response = await request(`zephr/public/sessions/v1/sessions/${deviceId}`, { 67980 method: "DELETE" 67981 }, formActions, null, true); 67982 return response.status === 200; 67983 } 67984 catch (error) { 67985 console.error("Error occurred while signing out device:", error); 67986 return false; 67987 } 67988 }; 67989 67990 const deviceSessionsFactory = { 67991 matches: (sectionElement) => sectionElement.type === elementTypes.DEVICES_SESSIONS_LIST, 67992 create: (form, formState, formActions, elementConfig) => ({ 67993 component: DevicesSessionList, 67994 props: { 67995 yourDevicesLabel: elementConfig.yourDevicesLabel, 67996 noDeviceSessionsMessage: elementConfig.noDeviceSessionsMessage, 67997 devicesSessions: formState.availableDeviceSessions, 67998 currentDeviceLabel: elementConfig.currentDeviceLabel, 67999 loginTimeLabel: elementConfig.loginTimeLabel, 68000 signOutLabel: elementConfig.signOutLabel, 68001 onDeviceSignOut: (value) => { 68002 logDataLayerEvent(form, 'zephr_form_button_press', { 68003 sectionId: formState.currentSection.type, 68004 buttonType: 'SUBMIT' 68005 }); 68006 logDataLayerEvent(form, 'zephr_form_device_logout', { deviceId: value }); 68007 void signOutSingleDevice(form, formState, formActions, value); 68008 } 68009 } 68010 }) 68011 }; 68012 68013 /* src/components/elements/devices/DeviceSessionsSignOutAllWrapper.svelte generated by Svelte v4.2.12 */ 68014 68015 function create_if_block$h(ctx) { 68016 let div; 68017 let t; 68018 let mounted; 68019 let dispose; 68020 68021 return { 68022 c() { 68023 div = element("div"); 68024 t = text(/*text*/ ctx[2]); 68025 attr(div, "class", "sign-out-all svelte-1ogdv39"); 68026 }, 68027 m(target, anchor) { 68028 insert(target, div, anchor); 68029 append(div, t); 68030 68031 if (!mounted) { 68032 dispose = listen(div, "click", function () { 68033 if (is_function(/*onSignOutAllDevices*/ ctx[0])) /*onSignOutAllDevices*/ ctx[0].apply(this, arguments); 68034 }); 68035 68036 mounted = true; 68037 } 68038 }, 68039 p(new_ctx, dirty) { 68040 ctx = new_ctx;
68041 if (dirty & /*text*/ 4) set_data(t, /*text*/ ctx[2]); 68042 }, 68043 d(detaching) { 68044 if (detaching) { 68045 detach(div); 68046 } 68047 68048 mounted = false; 68049 dispose(); 68050 } 68051 }; 68052 } 68053 68054 function create_fragment$m(ctx) { 68055 let if_block_anchor; 68056 let if_block = !/*hidden*/ ctx[1] && create_if_block$h(ctx); 68057 68058 return { 68059 c() { 68060 if (if_block) if_block.c(); 68061 if_block_anchor = empty(); 68062 }, 68063 m(target, anchor) { 68064 if (if_block) if_block.m(target, anchor); 68065 insert(target, if_block_anchor, anchor); 68066 }, 68067 p(ctx, [dirty]) { 68068 if (!/*hidden*/ ctx[1]) { 68069 if (if_block) { 68070 if_block.p(ctx, dirty); 68071 } else { 68072 if_block = create_if_block$h(ctx); 68073 if_block.c(); 68074 if_block.m(if_block_anchor.parentNode, if_block_anchor); 68075 } 68076 } else if (if_block) { 68077 if_block.d(1); 68078 if_block = null; 68079 } 68080 }, 68081 i: noop, 68082 o: noop, 68083 d(detaching) { 68084 if (detaching) { 68085 detach(if_block_anchor); 68086 } 68087 68088 if (if_block) if_block.d(detaching); 68089 } 68090 }; 68091 } 68092 68093 function instance$m($$self, $$props, $$invalidate) { 68094 let { onSignOutAllDevices } = $$props; 68095 let { hidden } = $$props; 68096 let { text } = $$props; 68097 68098 $$self.$$set = $$props => {
68099 if ('onSignOutAllDevices' in $$props) $$invalidate(0, onSignOutAllDevices = $$props.onSignOutAllDevices); 68100 if ('hidden' in $$props) $$invalidate(1, hidden = $$props.hidden); 68101 if ('text' in $$props) $$invalidate(2, text = $$props.text); 68102 }; 68103 68104 return [onSignOutAllDevices, hidden, text]; 68105 } 68106 68107 class DeviceSessionsSignOutAllWrapper extends SvelteComponent { 68108 constructor(options) { 68109 super(); 68110 68111 init(this, options, instance$m, create_fragment$m, safe_not_equal, { 68112 onSignOutAllDevices: 0, 68113 hidden: 1, 68114 text: 2 68115 }); 68116 } 68117 } 68118 68119 const signOutOfAllDevices = async (form, formState, formActions) => { 68120 const success = await signOutDevices(form, formState, formActions); 68121 if (success) { 68122 console.log("Successfully signed out of all devices."); 68123 return loadDeviceSessions(form, formState, formActions); 68124 } 68125 else { 68126 console.error("Failed to sign out of all devices."); 68127 } 68128 }; 68129 const signOutDevices = async (form, _, formActions) => { 68130 try { 68131 const response = await request(`zephr/public/sessions/v1/sessions?except-current`, { 68132 method: "DELETE" 68133 }, formActions, null, true); 68134 return response.status === 200; 68135 } 68136 catch (error) { 68137 console.error("Error occurred while signing out devices:", error); 68138 return false; 68139 } 68140 }; 68141 68142 const deviceSessionsSignOutAll = { 68143 matches: (sectionElement) => sectionElement.type === elementTypes.SIGN_OUT_ALL_OTHER_DEVICES, 68144 create: (form, formState, formActions, elementConfig) => ({ 68145 component: DeviceSessionsSignOutAllWrapper, 68146 props: { 68147 hidden: formState.availableDeviceSessions?.length <= 1, 68148 text: elementConfig.text, 68149 onSignOutAllDevices: () => { 68150 logDataLayerEvent(form, 'zephr_form_sign_out_all_devices', null); 68151 void signOutOfAllDevices(form, formState, formActions); 68152 } 68153 } 68154 }) 68155 }; 68156 68157 /* src/components/elements/billingHistory/BillingHistory.svelte generated by Svelte v4.2.12 */ 68158 68159 function get_each_context$7(ctx, list, i) { 68160 const child_ctx = ctx.slice(); 68161 child_ctx[5] = list[i]; 68162 return child_ctx; 68163 } 68164 68165 // (30:10) {#if e.subtotal} 68166 function create_if_block_1$c(ctx) { 68167 let t0_value = /*e*/ ctx[5].currency + ""; 68168 let t0; 68169 let t1; 68170 let t2_value = /*e*/ ctx[5].subtotal + ""; 68171 let t2; 68172 let t3; 68173 let if_block_anchor; 68174 let if_block = /*e*/ ctx[5].taxes && create_if_block_2$8(ctx); 68175 68176 return { 68177 c() { 68178 t0 = text(t0_value); 68179 t1 = space(); 68180 t2 = text(t2_value); 68181 t3 = space(); 68182 if (if_block) if_block.c(); 68183 if_block_anchor = empty(); 68184 }, 68185 m(target, anchor) { 68186 insert(target, t0, anchor); 68187 insert(target, t1, anchor); 68188 insert(target, t2, anchor); 68189 insert(target, t3, anchor); 68190 if (if_block) if_block.m(target, anchor); 68191 insert(target, if_block_anchor, anchor); 68192 }, 68193 p(ctx, dirty) { 68194 if (dirty & /*historyItems*/ 1 && t0_value !== (t0_value = /*e*/ ctx[5].currency + "")) set_data(t0, t0_value); 68195 if (dirty & /*historyItems*/ 1 && t2_value !== (t2_value = /*e*/ ctx[5].subtotal + "")) set_data(t2, t2_value); 68196 68197 if (/*e*/ ctx[5].taxes) { 68198 if (if_block) { 68199 if_block.p(ctx, dirty); 68200 } else { 68201 if_block = create_if_block_2$8(ctx); 68202 if_block.c(); 68203 if_block.m(if_block_anchor.parentNode, if_block_anchor); 68204 } 68205 } else if (if_block) { 68206 if_block.d(1); 68207 if_block = null; 68208 } 68209 }, 68210 d(detaching) { 68211 if (detaching) { 68212 detach(t0); 68213 detach(t1); 68214 detach(t2); 68215 detach(t3); 68216 detach(if_block_anchor); 68217 } 68218 68219 if (if_block) if_block.d(detaching); 68220 } 68221 }; 68222 } 68223 68224 // (32:12) {#if e.taxes} 68225 function create_if_block_2$8(ctx) { 68226 let span; 68227 let t_value = ` ${/*e*/ ctx[5].taxes}` + ""; 68228 let t; 68229 68230 return { 68231 c() { 68232 span = element("span"); 68233 t = text(t_value); 68234 attr(span, "class", "taxes svelte-7sscau"); 68235 }, 68236 m(target, anchor) { 68237 insert(target, span, anchor); 68238 append(span, t); 68239 }, 68240 p(ctx, dirty) { 68241 if (dirty & /*historyItems*/ 1 && t_value !== (t_value = ` ${/*e*/ ctx[5].taxes}` + "")) set_data(t, t_value); 68242 }, 68243 d(detaching) { 68244 if (detaching) { 68245 detach(span); 68246 } 68247 } 68248 }; 68249 } 68250 68251 // (38:10) {#if e.total} 68252 function create_if_block$g(ctx) { 68253 let t0_value = /*e*/ ctx[5].currency + ""; 68254 let t0; 68255 let t1; 68256 let t2_value = /*e*/ ctx[5].total + ""; 68257 let t2; 68258 68259 return { 68260 c() { 68261 t0 = text(t0_value); 68262 t1 = space(); 68263 t2 = text(t2_value); 68264 }, 68265 m(target, anchor) { 68266 insert(target, t0, anchor); 68267 insert(target, t1, anchor); 68268 insert(target, t2, anchor); 68269 }, 68270 p(ctx, dirty) {
68271 if (dirty & /*historyItems*/ 1 && t0_value !== (t0_value = /*e*/ ctx[5].currency + "")) set_data(t0, t0_value); 68272 if (dirty & /*historyItems*/ 1 && t2_value !== (t2_value = /*e*/ ctx[5].total + "")) set_data(t2, t2_value); 68273 }, 68274 d(detaching) { 68275 if (detaching) { 68276 detach(t0); 68277 detach(t1); 68278 detach(t2); 68279 } 68280 } 68281 }; 68282 } 68283 68284 // (25:4) {#each historyItems ?? [] as e} 68285 function create_each_block$7(ctx) { 68286 let div4; 68287 let div0; 68288 let t0_value = /*e*/ ctx[5].date + ""; 68289 let t0; 68290 let t1; 68291 let div1; 68292 let t2_value = /*e*/ ctx[5].period + ""; 68293 let t2; 68294 let t3; 68295 let div2; 68296 let t4; 68297 let div3; 68298 let t5; 68299 let if_block0 = /*e*/ ctx[5].subtotal && create_if_block_1$c(ctx); 68300 let if_block1 = /*e*/ ctx[5].total && create_if_block$g(ctx); 68301 68302 return { 68303 c() { 68304 div4 = element("div"); 68305 div0 = element("div"); 68306 t0 = text(t0_value); 68307 t1 = space(); 68308 div1 = element("div"); 68309 t2 = text(t2_value); 68310 t3 = space(); 68311 div2 = element("div"); 68312 if (if_block0) if_block0.c(); 68313 t4 = space(); 68314 div3 = element("div"); 68315 if (if_block1) if_block1.c(); 68316 t5 = space(); 68317 attr(div0, "class", "svelte-7sscau"); 68318 attr(div1, "class", "svelte-7sscau"); 68319 attr(div2, "class", "svelte-7sscau"); 68320 attr(div3, "class", "svelte-7sscau"); 68321 attr(div4, "class", "table-row svelte-7sscau"); 68322 }, 68323 m(target, anchor) { 68324 insert(target, div4, anchor); 68325 append(div4, div0); 68326 append(div0, t0); 68327 append(div4, t1); 68328 append(div4, div1); 68329 append(div1, t2); 68330 append(div4, t3); 68331 append(div4, div2); 68332 if (if_block0) if_block0.m(div2, null); 68333 append(div4, t4); 68334 append(div4, div3); 68335 if (if_block1) if_block1.m(div3, null); 68336 append(div4, t5); 68337 }, 68338 p(ctx, dirty) { 68339 if (dirty & /*historyItems*/ 1 && t0_value !== (t0_value = /*e*/ ctx[5].date + "")) set_data(t0, t0_value); 68340 if (dirty & /*historyItems*/ 1 && t2_value !== (t2_value = /*e*/ ctx[5].period + "")) set_data(t2, t2_value); 68341 68342 if (/*e*/ ctx[5].subtotal) { 68343 if (if_block0) { 68344 if_block0.p(ctx, dirty); 68345 } else { 68346 if_block0 = create_if_block_1$c(ctx); 68347 if_block0.c(); 68348 if_block0.m(div2, null); 68349 } 68350 } else if (if_block0) { 68351 if_block0.d(1); 68352 if_block0 = null; 68353 } 68354 68355 if (/*e*/ ctx[5].total) { 68356 if (if_block1) { 68357 if_block1.p(ctx, dirty); 68358 } else { 68359 if_block1 = create_if_block$g(ctx); 68360 if_block1.c(); 68361 if_block1.m(div3, null); 68362 } 68363 } else if (if_block1) { 68364 if_block1.d(1); 68365 if_block1 = null; 68366 } 68367 }, 68368 d(detaching) { 68369 if (detaching) { 68370 detach(div4); 68371 } 68372 68373 if (if_block0) if_block0.d(); 68374 if (if_block1) if_block1.d(); 68375 } 68376 }; 68377 } 68378 68379 function create_fragment$l(ctx) { 68380 let div6; 68381 let div5; 68382 let div4; 68383 let div0; 68384 let t0; 68385 let t1; 68386 let div1; 68387 let t2; 68388 let t3; 68389 let div2; 68390 let t4; 68391 let t5; 68392 let div3; 68393 let t6; 68394 let t7; 68395 let each_value = ensure_array_like(/*historyItems*/ ctx[0] ?? []); 68396 let each_blocks = []; 68397 68398 for (let i = 0; i < each_value.length; i += 1) { 68399 each_blocks[i] = create_each_block$7(get_each_context$7(ctx, each_value, i)); 68400 } 68401 68402 return { 68403 c() { 68404 div6 = element("div"); 68405 div5 = element("div"); 68406 div4 = element("div"); 68407 div0 = element("div"); 68408 t0 = text(/*dateLabel*/ ctx[1]); 68409 t1 = space(); 68410 div1 = element("div"); 68411 t2 = text(/*periodLabel*/ ctx[2]); 68412 t3 = space(); 68413 div2 = element("div"); 68414 t4 = text(/*subtotalLabel*/ ctx[3]); 68415 t5 = space(); 68416 div3 = element("div"); 68417 t6 = text(/*totalLabel*/ ctx[4]); 68418 t7 = space(); 68419 68420 for (let i = 0; i < each_blocks.length; i += 1) { 68421 each_blocks[i].c(); 68422 } 68423 68424 attr(div0, "class", "svelte-7sscau"); 68425 attr(div1, "class", "svelte-7sscau"); 68426 attr(div2, "class", "svelte-7sscau"); 68427 attr(div3, "class", "svelte-7sscau"); 68428 attr(div4, "class", "table-head svelte-7sscau"); 68429 attr(div5, "class", "table svelte-7sscau"); 68430 attr(div6, "class", "billing-history-container"); 68431 }, 68432 m(target, anchor) { 68433 insert(target, div6, anchor); 68434 append(div6, div5); 68435 append(div5, div4); 68436 append(div4, div0); 68437 append(div0, t0); 68438 append(div4, t1); 68439 append(div4, div1); 68440 append(div1, t2); 68441 append(div4, t3); 68442 append(div4, div2); 68443 append(div2, t4); 68444 append(div4, t5); 68445 append(div4, div3); 68446 append(div3, t6); 68447 append(div5, t7); 68448 68449 for (let i = 0; i < each_blocks.length; i += 1) { 68450 if (each_blocks[i]) { 68451 each_blocks[i].m(div5, null); 68452 } 68453 } 68454 }, 68455 p(ctx, [dirty]) {
68456 if (dirty & /*dateLabel*/ 2) set_data(t0, /*dateLabel*/ ctx[1]); 68457 if (dirty & /*periodLabel*/ 4) set_data(t2, /*periodLabel*/ ctx[2]); 68458 if (dirty & /*subtotalLabel*/ 8) set_data(t4, /*subtotalLabel*/ ctx[3]); 68459 if (dirty & /*totalLabel*/ 16) set_data(t6, /*totalLabel*/ ctx[4]); 68460 68461 if (dirty & /*historyItems*/ 1) { 68462 each_value = ensure_array_like(/*historyItems*/ ctx[0] ?? []); 68463 let i; 68464 68465 for (i = 0; i < each_value.length; i += 1) { 68466 const child_ctx = get_each_context$7(ctx, each_value, i); 68467 68468 if (each_blocks[i]) { 68469 each_blocks[i].p(child_ctx, dirty); 68470 } else { 68471 each_blocks[i] = create_each_block$7(child_ctx); 68472 each_blocks[i].c(); 68473 each_blocks[i].m(div5, null); 68474 } 68475 } 68476 68477 for (; i < each_blocks.length; i += 1) { 68478 each_blocks[i].d(1); 68479 } 68480 68481 each_blocks.length = each_value.length; 68482 } 68483 }, 68484 i: noop, 68485 o: noop, 68486 d(detaching) { 68487 if (detaching) { 68488 detach(div6); 68489 } 68490 68491 destroy_each(each_blocks, detaching); 68492 } 68493 }; 68494 } 68495 68496 function instance$l($$self, $$props, $$invalidate) { 68497 let { historyItems } = $$props; 68498 let { dateLabel } = $$props; 68499 let { periodLabel } = $$props; 68500 let { subtotalLabel } = $$props; 68501 let { totalLabel } = $$props; 68502 68503 $$self.$$set = $$props => {
68504 if ('historyItems' in $$props) $$invalidate(0, historyItems = $$props.historyItems); 68505 if ('dateLabel' in $$props) $$invalidate(1, dateLabel = $$props.dateLabel); 68506 if ('periodLabel' in $$props) $$invalidate(2, periodLabel = $$props.periodLabel); 68507 if ('subtotalLabel' in $$props) $$invalidate(3, subtotalLabel = $$props.subtotalLabel); 68508 if ('totalLabel' in $$props) $$invalidate(4, totalLabel = $$props.totalLabel); 68509 }; 68510 68511 return [historyItems, dateLabel, periodLabel, subtotalLabel, totalLabel]; 68512 } 68513 68514 class BillingHistory extends SvelteComponent { 68515 constructor(options) { 68516 super(); 68517 68518 init(this, options, instance$l, create_fragment$l, safe_not_equal, { 68519 historyItems: 0, 68520 dateLabel: 1, 68521 periodLabel: 2, 68522 subtotalLabel: 3, 68523 totalLabel: 4 68524 }); 68525 } 68526 } 68527 68528 const billingHistoryFactory = { 68529 matches: (sectionElement) => sectionElement.type === elementTypes.BILLING_HISTORY, 68530 create: (form, formState, __) => ({ 68531 component: BillingHistory, 68532 props: { 68533 historyItems: formState.selectedSubscription?.transactionHistory, 68534 dateLabel: resolveLanguagePackKeyTyped(form, 'forms.billing.history.date', 'Date'), 68535 periodLabel: resolveLanguagePackKeyTyped(form, 'forms.billing.history.period', 'Period'), 68536 subtotalLabel: resolveLanguagePackKeyTyped(form, 'forms.billing.history.subtotal', 'Subtotal'), 68537 totalLabel: resolveLanguagePackKeyTyped(form, 'forms.billing.history.total', 'Total'), 68538 } 68539 }) 68540 }; 68541 68542 /* src/components/elements/buttonGroup/ButtonGroup.svelte generated by Svelte v4.2.12 */ 68543 68544 function create_if_block$f(ctx) { 68545 let button; 68546 let t; 68547 let mounted; 68548 let dispose; 68549 68550 return { 68551 c() { 68552 button = element("button"); 68553 t = text(/*backText*/ ctx[1]); 68554 attr(button, "class", "zephr-form-back-button svelte-5uv9ua"); 68555 attr(button, "type", "submit"); 68556 }, 68557 m(target, anchor) { 68558 insert(target, button, anchor); 68559 append(button, t); 68560 68561 if (!mounted) { 68562 dispose = listen(button, "click", prevent_default(function () { 68563 if (is_function(/*onBack*/ ctx[3])) /*onBack*/ ctx[3].apply(this, arguments); 68564 })); 68565 68566 mounted = true; 68567 } 68568 }, 68569 p(new_ctx, dirty) { 68570 ctx = new_ctx; 68571 if (dirty & /*backText*/ 2) set_data(t, /*backText*/ ctx[1]); 68572 }, 68573 d(detaching) { 68574 if (detaching) { 68575 detach(button); 68576 } 68577 68578 mounted = false; 68579 dispose(); 68580 } 68581 }; 68582 } 68583 68584 function create_fragment$k(ctx) { 68585 let div; 68586 let t0; 68587 let button; 68588 let t1; 68589 let mounted; 68590 let dispose; 68591 let if_block = /*backEnabled*/ ctx[2] && create_if_block$f(ctx); 68592 68593 return { 68594 c() { 68595 div = element("div"); 68596 if (if_block) if_block.c(); 68597 t0 = space(); 68598 button = element("button"); 68599 t1 = text(/*continueText*/ ctx[0]); 68600 attr(button, "class", "zephr-form-continue-button svelte-5uv9ua"); 68601 attr(button, "type", "submit"); 68602 attr(div, "class", "zephr-form-button-group zephr-form-max-width svelte-5uv9ua"); 68603 }, 68604 m(target, anchor) { 68605 insert(target, div, anchor); 68606 if (if_block) if_block.m(div, null); 68607 append(div, t0); 68608 append(div, button); 68609 append(button, t1); 68610 68611 if (!mounted) { 68612 dispose = listen(button, "click", prevent_default(function () { 68613 if (is_function(/*onClick*/ ctx[4])) /*onClick*/ ctx[4].apply(this, arguments); 68614 })); 68615 68616 mounted = true; 68617 } 68618 }, 68619 p(new_ctx, [dirty]) { 68620 ctx = new_ctx; 68621 68622 if (/*backEnabled*/ ctx[2]) { 68623 if (if_block) { 68624 if_block.p(ctx, dirty); 68625 } else { 68626 if_block = create_if_block$f(ctx); 68627 if_block.c(); 68628 if_block.m(div, t0); 68629 } 68630 } else if (if_block) { 68631 if_block.d(1); 68632 if_block = null; 68633 } 68634 68635 if (dirty & /*continueText*/ 1) set_data(t1, /*continueText*/ ctx[0]); 68636 }, 68637 i: noop, 68638 o: noop, 68639 d(detaching) { 68640 if (detaching) { 68641 detach(div); 68642 } 68643 68644 if (if_block) if_block.d(); 68645 mounted = false; 68646 dispose(); 68647 } 68648 }; 68649 } 68650 68651 function instance$k($$self, $$props, $$invalidate) { 68652 let { continueText } = $$props; 68653 let { backText } = $$props; 68654 let { backEnabled } = $$props; 68655 let { onBack } = $$props; 68656 let { onClick } = $$props; 68657 68658 $$self.$$set = $$props => {
68659 if ('continueText' in $$props) $$invalidate(0, continueText = $$props.continueText); 68660 if ('backText' in $$props) $$invalidate(1, backText = $$props.backText); 68661 if ('backEnabled' in $$props) $$invalidate(2, backEnabled = $$props.backEnabled); 68662 if ('onBack' in $$props) $$invalidate(3, onBack = $$props.onBack); 68663 if ('onClick' in $$props) $$invalidate(4, onClick = $$props.onClick); 68664 }; 68665 68666 return [continueText, backText, backEnabled, onBack, onClick]; 68667 } 68668 68669 class ButtonGroup extends SvelteComponent { 68670 constructor(options) { 68671 super(); 68672 68673 init(this, options, instance$k, create_fragment$k, safe_not_equal, { 68674 continueText: 0, 68675 backText: 1, 68676 backEnabled: 2, 68677 onBack: 3, 68678 onClick: 4 68679 }); 68680 } 68681 } 68682 68683 const factory$4 = { 68684 matches: (sectionElement) => sectionElement.type === elementTypes.BUTTON_GROUP, 68685 create: (form, formState, formActions, elementConfig) => ({ 68686 component: ButtonGroup, 68687 props: { 68688 continueText: elementConfig.continueText, 68689 backText: elementConfig.backText, 68690 backEnabled: elementConfig.backEnabled, 68691 onClick: () => { 68692 logDataLayerEvent(form, 'zephr_form_button_press', { 68693 sectionId: formState.currentSection.type, 68694 buttonType: 'CONTINUE' 68695 }); 68696 if (elementConfig.isCancel) { 68697 formActions.updateFormState({ 68698 confirmCancel: true, 68699 }); 68700 } 68701 formActions.updateFormState({ 68702 isExternalReferrer: false, 68703 }); 68704 formActions.attemptCompleteSection(); 68705 }, 68706 onBack: () => { 68707 logDataLayerEvent(form, 'zephr_form_button_press', { 68708 sectionId: formState.currentSection.type, 68709 buttonType: 'BACK' 68710 }); 68711 if (elementConfig.backToURL) { 68712 window.location.pathname = elementConfig.backURL; 68713 } 68714 else if (formState.isExternalReferrer) { 68715 window.history.back(); 68716 } 68717 else { 68718 formActions.onEvent(elementConfig.event); 68719 } 68720 } 68721 } 68722 }) 68723 }; 68724 68725 /* src/components/elements/linkButton/LinkButton.svelte generated by Svelte v4.2.12 */ 68726 68727 function create_fragment$j(ctx) { 68728 let a; 68729 let t; 68730 let mounted; 68731 let dispose; 68732 68733 return { 68734 c() { 68735 a = element("a"); 68736 t = text(/*text*/ ctx[0]); 68737 attr(a, "class", "zephr-form-button zephr-form-button-top-margin svelte-1uaz0r"); 68738 attr(a, "href", /*href*/ ctx[1]); 68739 }, 68740 m(target, anchor) { 68741 insert(target, a, anchor); 68742 append(a, t); 68743 68744 if (!mounted) { 68745 dispose = listen(a, "click", function () { 68746 if (is_function(/*onClick*/ ctx[2])) /*onClick*/ ctx[2].apply(this, arguments); 68747 }); 68748 68749 mounted = true; 68750 } 68751 }, 68752 p(new_ctx, [dirty]) { 68753 ctx = new_ctx; 68754 if (dirty & /*text*/ 1) set_data(t, /*text*/ ctx[0]); 68755 68756 if (dirty & /*href*/ 2) { 68757 attr(a, "href", /*href*/ ctx[1]); 68758 } 68759 }, 68760 i: noop, 68761 o: noop, 68762 d(detaching) { 68763 if (detaching) { 68764 detach(a); 68765 } 68766 68767 mounted = false; 68768 dispose(); 68769 } 68770 }; 68771 } 68772 68773 function instance$j($$self, $$props, $$invalidate) { 68774 let { text } = $$props; 68775 let { href } = $$props; 68776 68777 let { onClick = () => { 68778 68779 } } = $$props; 68780 68781 $$self.$$set = $$props => {
68782 if ('text' in $$props) $$invalidate(0, text = $$props.text); 68783 if ('href' in $$props) $$invalidate(1, href = $$props.href); 68784 if ('onClick' in $$props) $$invalidate(2, onClick = $$props.onClick); 68785 }; 68786 68787 return [text, href, onClick]; 68788 } 68789 68790 class LinkButton extends SvelteComponent { 68791 constructor(options) { 68792 super(); 68793 init(this, options, instance$j, create_fragment$j, safe_not_equal, { text: 0, href: 1, onClick: 2 }); 68794 } 68795 } 68796 68797 const factory$3 = { 68798 matches: (sectionElement) => sectionElement.type === elementTypes.LINK_BUTTON, 68799 create: (form, formState, formActions, elementConfig) => ({ 68800 component: LinkButton, 68801 props: { 68802 text: elementConfig.text, 68803 href: elementConfig.href, 68804 onClick: () => { 68805 logDataLayerEvent(form, 'zephr_form_button_press', { 68806 sectionId: formState.currentSection.type, 68807 buttonType: 'LINK_BUTTON' 68808 }); 68809 }, 68810 }, 68811 }) 68812 }; 68813 68814 /* src/components/elements/recipientName/RecipientName.svelte generated by Svelte v4.2.12 */ 68815 68816 function create_if_block_1$b(ctx) { 68817 let div; 68818 let t; 68819 68820 return { 68821 c() { 68822 div = element("div"); 68823 t = text(/*firstNameError*/ ctx[3]); 68824 attr(div, "class", "error-text svelte-hvl7z2"); 68825 }, 68826 m(target, anchor) { 68827 insert(target, div, anchor); 68828 append(div, t); 68829 }, 68830 p(ctx, dirty) { 68831 if (dirty & /*firstNameError*/ 8) set_data(t, /*firstNameError*/ ctx[3]); 68832 }, 68833 d(detaching) { 68834 if (detaching) { 68835 detach(div); 68836 } 68837 } 68838 }; 68839 } 68840 68841 // (71:4) {#if lastNameError} 68842 function create_if_block$e(ctx) { 68843 let div; 68844 let t; 68845 68846 return { 68847 c() { 68848 div = element("div"); 68849 t = text(/*lastNameError*/ ctx[4]); 68850 attr(div, "class", "error-text svelte-hvl7z2"); 68851 }, 68852 m(target, anchor) { 68853 insert(target, div, anchor); 68854 append(div, t); 68855 }, 68856 p(ctx, dirty) { 68857 if (dirty & /*lastNameError*/ 16) set_data(t, /*lastNameError*/ ctx[4]); 68858 }, 68859 d(detaching) { 68860 if (detaching) { 68861 detach(div); 68862 } 68863 } 68864 }; 68865 } 68866 68867 function create_fragment$i(ctx) { 68868 let div2; 68869 let div0; 68870 let label0; 68871 let t0_value = /*config*/ ctx[0].firstNameLabel + ""; 68872 let t0; 68873 let t1; 68874 let input0; 68875 let input0_placeholder_value; 68876 let t2; 68877 let t3; 68878 let div1; 68879 let label1; 68880 let t4_value = /*config*/ ctx[0].lastNameLabel + ""; 68881 let t4; 68882 let t5; 68883 let input1; 68884 let input1_placeholder_value; 68885 let t6; 68886 let mounted; 68887 let dispose; 68888 let if_block0 = /*firstNameError*/ ctx[3] && create_if_block_1$b(ctx); 68889 let if_block1 = /*lastNameError*/ ctx[4] && create_if_block$e(ctx); 68890 68891 return { 68892 c() { 68893 div2 = element("div"); 68894 div0 = element("div"); 68895 label0 = element("label"); 68896 t0 = text(t0_value); 68897 t1 = space(); 68898 input0 = element("input"); 68899 t2 = space(); 68900 if (if_block0) if_block0.c(); 68901 t3 = space(); 68902 div1 = element("div"); 68903 label1 = element("label"); 68904 t4 = text(t4_value); 68905 t5 = space(); 68906 input1 = element("input"); 68907 t6 = space(); 68908 if (if_block1) if_block1.c(); 68909 attr(label0, "for", "firstName"); 68910 attr(label0, "class", "svelte-hvl7z2"); 68911 attr(input0, "id", "firstName"); 68912 attr(input0, "type", "text"); 68913 input0.required = true; 68914 attr(input0, "placeholder", input0_placeholder_value = /*config*/ ctx[0].firstNamePlaceholder); 68915 attr(input0, "class", "svelte-hvl7z2"); 68916 toggle_class(input0, "error", !!/*firstNameError*/ ctx[3]); 68917 attr(div0, "class", "field svelte-hvl7z2"); 68918 attr(label1, "for", "lastName"); 68919 attr(label1, "class", "svelte-hvl7z2"); 68920 attr(input1, "id", "lastName"); 68921 attr(input1, "type", "text"); 68922 input1.required = true; 68923 attr(input1, "placeholder", input1_placeholder_value = /*config*/ ctx[0].lastNamePlaceholder); 68924 attr(input1, "class", "svelte-hvl7z2"); 68925 toggle_class(input1, "error", !!/*lastNameError*/ ctx[4]); 68926 attr(div1, "class", "field svelte-hvl7z2"); 68927 attr(div2, "class", "recipient-name-section svelte-hvl7z2"); 68928 }, 68929 m(target, anchor) { 68930 insert(target, div2, anchor); 68931 append(div2, div0); 68932 append(div0, label0); 68933 append(label0, t0); 68934 append(div0, t1); 68935 append(div0, input0); 68936 set_input_value(input0, /*firstName*/ ctx[1]); 68937 append(div0, t2); 68938 if (if_block0) if_block0.m(div0, null); 68939 append(div2, t3); 68940 append(div2, div1); 68941 append(div1, label1); 68942 append(label1, t4); 68943 append(div1, t5); 68944 append(div1, input1); 68945 set_input_value(input1, /*lastName*/ ctx[2]); 68946 append(div1, t6); 68947 if (if_block1) if_block1.m(div1, null); 68948 68949 if (!mounted) { 68950 dispose = [ 68951 listen(input0, "input", /*input0_input_handler*/ ctx[8]), 68952 listen(input0, "input", /*updateGiftRecipient*/ ctx[5]), 68953 listen(input1, "input", /*input1_input_handler*/ ctx[9]), 68954 listen(input1, "input", /*updateGiftRecipient*/ ctx[5]) 68955 ]; 68956 68957 mounted = true; 68958 } 68959 }, 68960 p(ctx, [dirty]) {
68961 if (dirty & /*config*/ 1 && t0_value !== (t0_value = /*config*/ ctx[0].firstNameLabel + "")) set_data(t0, t0_value); 68962 68963 if (dirty & /*config*/ 1 && input0_placeholder_value !== (input0_placeholder_value = /*config*/ ctx[0].firstNamePlaceholder)) { 68964 attr(input0, "placeholder", input0_placeholder_value); 68965 } 68966 68967 if (dirty & /*firstName*/ 2 && input0.value !== /*firstName*/ ctx[1]) { 68968 set_input_value(input0, /*firstName*/ ctx[1]); 68969 } 68970 68971 if (dirty & /*firstNameError*/ 8) { 68972 toggle_class(input0, "error", !!/*firstNameError*/ ctx[3]); 68973 } 68974 68975 if (/*firstNameError*/ ctx[3]) { 68976 if (if_block0) { 68977 if_block0.p(ctx, dirty); 68978 } else { 68979 if_block0 = create_if_block_1$b(ctx); 68980 if_block0.c(); 68981 if_block0.m(div0, null); 68982 } 68983 } else if (if_block0) { 68984 if_block0.d(1); 68985 if_block0 = null; 68986 } 68987 68988 if (dirty & /*config*/ 1 && t4_value !== (t4_value = /*config*/ ctx[0].lastNameLabel + "")) set_data(t4, t4_value); 68989 68990 if (dirty & /*config*/ 1 && input1_placeholder_value !== (input1_placeholder_value = /*config*/ ctx[0].lastNamePlaceholder)) { 68991 attr(input1, "placeholder", input1_placeholder_value); 68992 } 68993 68994 if (dirty & /*lastName*/ 4 && input1.value !== /*lastName*/ ctx[2]) { 68995 set_input_value(input1, /*lastName*/ ctx[2]); 68996 } 68997 68998 if (dirty & /*lastNameError*/ 16) { 68999 toggle_class(input1, "error", !!/*lastNameError*/ ctx[4]); 69000 } 69001 69002 if (/*lastNameError*/ ctx[4]) { 69003 if (if_block1) { 69004 if_block1.p(ctx, dirty); 69005 } else { 69006 if_block1 = create_if_block$e(ctx); 69007 if_block1.c(); 69008 if_block1.m(div1, null); 69009 } 69010 } else if (if_block1) { 69011 if_block1.d(1); 69012 if_block1 = null; 69013 } 69014 }, 69015 i: noop, 69016 o: noop, 69017 d(detaching) { 69018 if (detaching) { 69019 detach(div2); 69020 } 69021 69022 if (if_block0) if_block0.d(); 69023 if (if_block1) if_block1.d(); 69024 mounted = false; 69025 run_all(dispose); 69026 } 69027 }; 69028 } 69029 69030 function instance$i($$self, $$props, $$invalidate) { 69031 let { formState } = $$props; 69032 let { formActions } = $$props; 69033 let { config } = $$props; 69034 const dispatch = createEventDispatcher(); 69035 let firstName = formState.giftRecipient?.firstName || ''; 69036 let lastName = formState.giftRecipient?.lastName || ''; 69037 let firstNameError = ''; 69038 let lastNameError = ''; 69039 69040 // Update form state when input changes 69041 const updateGiftRecipient = () => { 69042 const updatedGiftRecipient = { 69043 ...formState.giftRecipient || {}, 69044 firstName, 69045 lastName 69046 }; 69047 69048 formActions.updateFormState({ giftRecipient: updatedGiftRecipient }); 69049 validateForm(); 69050 }; 69051 69052 const validateForm = () => { 69053 const hasValidFirstName = !!firstName.trim(); 69054 const hasValidLastName = !!lastName.trim(); 69055 69056 if (!hasValidFirstName) { 69057 $$invalidate(3, firstNameError = 'First name is required'); 69058 } else { 69059 $$invalidate(3, firstNameError = ''); 69060 } 69061 69062 if (!hasValidLastName) { 69063 $$invalidate(4, lastNameError = 'Last name is required'); 69064 } else { 69065 $$invalidate(4, lastNameError = ''); 69066 } 69067 69068 // Dispatch event for form validity 69069 dispatch('validity', { 69070 isValid: hasValidFirstName && hasValidLastName 69071 }); 69072 }; 69073 69074 function input0_input_handler() { 69075 firstName = this.value; 69076 $$invalidate(1, firstName); 69077 } 69078 69079 function input1_input_handler() { 69080 lastName = this.value; 69081 $$invalidate(2, lastName); 69082 } 69083 69084 $$self.$$set = $$props => {
69085 if ('formState' in $$props) $$invalidate(6, formState = $$props.formState); 69086 if ('formActions' in $$props) $$invalidate(7, formActions = $$props.formActions); 69087 if ('config' in $$props) $$invalidate(0, config = $$props.config); 69088 }; 69089 69090 return [ 69091 config, 69092 firstName, 69093 lastName, 69094 firstNameError, 69095 lastNameError, 69096 updateGiftRecipient, 69097 formState, 69098 formActions, 69099 input0_input_handler, 69100 input1_input_handler 69101 ]; 69102 } 69103 69104 class RecipientName extends SvelteComponent { 69105 constructor(options) { 69106 super(); 69107 init(this, options, instance$i, create_fragment$i, safe_not_equal, { formState: 6, formActions: 7, config: 0 }); 69108 } 69109 } 69110 69111 const recipientNameFactory = { 69112 matches: (sectionElement) => sectionElement.type === elementTypes.RECIPIENT_NAME, 69113 create: (form, formState, formActions, elementConfig) => { 69114 // Resolve all labels through language pack service 69115 const resolvedConfig = { 69116 firstNameLabel: resolveLanguagePackKeyTyped(form, 'forms.gift.recipient-first-name', elementConfig.firstNameLabel), 69117 lastNameLabel: resolveLanguagePackKeyTyped(form, 'forms.gift.recipient-last-name', elementConfig.lastNameLabel), 69118 firstNamePlaceholder: resolveLanguagePackKeyTyped(form, 'forms.gift.first-name-placeholder', elementConfig.firstNamePlaceholder), 69119 lastNamePlaceholder: resolveLanguagePackKeyTyped(form, 'forms.gift.last-name-placeholder', elementConfig.lastNamePlaceholder), 69120 }; 69121 // Determine if the input is valid 69122 const giftRecipient = (formState.giftRecipient || {}); 69123 const hasValidFirstName = !!giftRecipient.firstName?.trim(); 69124 const hasValidLastName = !!giftRecipient.lastName?.trim(); 69125 const isValid = hasValidFirstName && hasValidLastName; 69126 return { 69127 component: RecipientName, 69128 props: { 69129 config: resolvedConfig, 69130 form, 69131 formState, 69132 formActions, 69133 }, 69134 isValid 69135 }; 69136 } 69137 }; 69138 69139 /* src/components/elements/recipientEmail/RecipientEmail.svelte generated by Svelte v4.2.12 */ 69140 69141 function create_if_block$d(ctx) { 69142 let div; 69143 let t; 69144 69145 return { 69146 c() { 69147 div = element("div"); 69148 t = text(/*emailError*/ ctx[2]); 69149 attr(div, "class", "error-text svelte-1odylgp"); 69150 }, 69151 m(target, anchor) { 69152 insert(target, div, anchor); 69153 append(div, t); 69154 }, 69155 p(ctx, dirty) { 69156 if (dirty & /*emailError*/ 4) set_data(t, /*emailError*/ ctx[2]); 69157 }, 69158 d(detaching) { 69159 if (detaching) { 69160 detach(div); 69161 } 69162 } 69163 }; 69164 } 69165 69166 function create_fragment$h(ctx) { 69167 let div1; 69168 let div0; 69169 let label; 69170 let t0_value = /*config*/ ctx[0].emailLabel + ""; 69171 let t0; 69172 let t1; 69173 let input; 69174 let input_placeholder_value; 69175 let t2; 69176 let mounted; 69177 let dispose; 69178 let if_block = /*emailError*/ ctx[2] && create_if_block$d(ctx); 69179 69180 return { 69181 c() { 69182 div1 = element("div"); 69183 div0 = element("div"); 69184 label = element("label"); 69185 t0 = text(t0_value); 69186 t1 = space(); 69187 input = element("input"); 69188 t2 = space(); 69189 if (if_block) if_block.c(); 69190 attr(label, "for", "recipientEmail"); 69191 attr(label, "class", "svelte-1odylgp"); 69192 attr(input, "id", "recipientEmail"); 69193 attr(input, "type", "email"); 69194 input.required = true; 69195 attr(input, "placeholder", input_placeholder_value = /*config*/ ctx[0].emailPlaceholder); 69196 attr(input, "class", "svelte-1odylgp"); 69197 toggle_class(input, "error", !!/*emailError*/ ctx[2]); 69198 attr(div0, "class", "field svelte-1odylgp"); 69199 attr(div1, "class", "recipient-email-section svelte-1odylgp"); 69200 }, 69201 m(target, anchor) { 69202 insert(target, div1, anchor); 69203 append(div1, div0); 69204 append(div0, label); 69205 append(label, t0); 69206 append(div0, t1); 69207 append(div0, input); 69208 set_input_value(input, /*recipientEmail*/ ctx[1]); 69209 append(div0, t2); 69210 if (if_block) if_block.m(div0, null); 69211 69212 if (!mounted) { 69213 dispose = [ 69214 listen(input, "input", /*input_input_handler*/ ctx[7]), 69215 listen(input, "input", /*updateGiftRecipient*/ ctx[3]) 69216 ]; 69217 69218 mounted = true; 69219 } 69220 }, 69221 p(ctx, [dirty]) {
69222 if (dirty & /*config*/ 1 && t0_value !== (t0_value = /*config*/ ctx[0].emailLabel + "")) set_data(t0, t0_value); 69223 69224 if (dirty & /*config*/ 1 && input_placeholder_value !== (input_placeholder_value = /*config*/ ctx[0].emailPlaceholder)) { 69225 attr(input, "placeholder", input_placeholder_value); 69226 } 69227 69228 if (dirty & /*recipientEmail*/ 2 && input.value !== /*recipientEmail*/ ctx[1]) { 69229 set_input_value(input, /*recipientEmail*/ ctx[1]); 69230 } 69231 69232 if (dirty & /*emailError*/ 4) { 69233 toggle_class(input, "error", !!/*emailError*/ ctx[2]); 69234 } 69235 69236 if (/*emailError*/ ctx[2]) { 69237 if (if_block) { 69238 if_block.p(ctx, dirty); 69239 } else { 69240 if_block = create_if_block$d(ctx); 69241 if_block.c(); 69242 if_block.m(div0, null); 69243 } 69244 } else if (if_block) { 69245 if_block.d(1); 69246 if_block = null; 69247 } 69248 }, 69249 i: noop, 69250 o: noop, 69251 d(detaching) { 69252 if (detaching) { 69253 detach(div1); 69254 } 69255 69256 if (if_block) if_block.d(); 69257 mounted = false; 69258 run_all(dispose); 69259 } 69260 }; 69261 } 69262 69263 function instance$h($$self, $$props, $$invalidate) { 69264 let { formState } = $$props; 69265 let { formActions } = $$props; 69266 let { config } = $$props; 69267 let { form } = $$props; 69268 const dispatch = createEventDispatcher(); 69269 let recipientEmail = formState.giftRecipient?.email || ''; 69270 let emailError = ''; 69271 69272 // Update form state when input changes 69273 const updateGiftRecipient = () => { 69274 const updatedGiftRecipient = { 69275 ...formState.giftRecipient || {}, 69276 email: recipientEmail 69277 }; 69278 69279 formActions.updateFormState({ giftRecipient: updatedGiftRecipient }); 69280 validateForm(); 69281 }; 69282 69283 const validateForm = () => { 69284 const hasValidEmail = isValidEmail(recipientEmail); 69285 69286 if (recipientEmail && !hasValidEmail) { 69287 $$invalidate(2, emailError = resolveLanguagePackKeyTyped(form, 'forms.errors.email-invalid', 'Please enter a valid email address')); 69288 } else if (!recipientEmail) { 69289 $$invalidate(2, emailError = 'Recipient email is required'); 69290 } else { 69291 $$invalidate(2, emailError = ''); 69292 } 69293 69294 // Dispatch event for form validity 69295 dispatch('validity', { isValid: hasValidEmail }); 69296 }; 69297 69298 function input_input_handler() { 69299 recipientEmail = this.value; 69300 $$invalidate(1, recipientEmail); 69301 } 69302 69303 $$self.$$set = $$props => {
69304 if ('formState' in $$props) $$invalidate(4, formState = $$props.formState); 69305 if ('formActions' in $$props) $$invalidate(5, formActions = $$props.formActions); 69306 if ('config' in $$props) $$invalidate(0, config = $$props.config); 69307 if ('form' in $$props) $$invalidate(6, form = $$props.form); 69308 }; 69309 69310 return [ 69311 config, 69312 recipientEmail, 69313 emailError, 69314 updateGiftRecipient, 69315 formState, 69316 formActions, 69317 form, 69318 input_input_handler 69319 ]; 69320 } 69321 69322 class RecipientEmail extends SvelteComponent { 69323 constructor(options) { 69324 super(); 69325 69326 init(this, options, instance$h, create_fragment$h, safe_not_equal, { 69327 formState: 4, 69328 formActions: 5, 69329 config: 0, 69330 form: 6 69331 }); 69332 } 69333 } 69334 69335 const recipientEmailFactory = { 69336 matches: (sectionElement) => sectionElement.type === elementTypes.RECIPIENT_EMAIL, 69337 create: (form, formState, formActions, elementConfig) => { 69338 // Resolve all labels through language pack service 69339 const resolvedConfig = { 69340 emailLabel: resolveLanguagePackKeyTyped(form, 'forms.gift.recipient-email', elementConfig.emailLabel), 69341 emailPlaceholder: resolveLanguagePackKeyTyped(form, 'forms.gift.email-placeholder', elementConfig.emailPlaceholder), 69342 }; 69343 // Determine if the input is valid 69344 const giftRecipient = (formState.giftRecipient || {}); 69345 const hasValidEmail = isValidEmail(giftRecipient.email); 69346 const isValid = hasValidEmail; 69347 return { 69348 component: RecipientEmail, 69349 props: { 69350 config: resolvedConfig, 69351 form, 69352 formState, 69353 formActions, 69354 }, 69355 isValid 69356 }; 69357 } 69358 }; 69359 69360 const countries = { 69361 AF: "Afghanistan", 69362 AL: "Albania", 69363 DZ: "Algeria", 69364 AX: "à land Islands", 69365 AS: "American Samoa", 69366 AD: "Andorra", 69367 AO: "Angola", 69368 AI: "Anguilla", 69369 AQ: "Antarctica", 69370 AG: "Antigua and Barbuda", 69371 AR: "Argentina", 69372 AM: "Armenia", 69373 AW: "Aruba", 69374 AU: "Australia", 69375 AT: "Austria", 69376 AZ: "Azerbaijan", 69377 BS: "Bahamas (the)", 69378 BH: "Bahrain", 69379 BD: "Bangladesh", 69380 BB: "Barbados", 69381 BY: "Belarus", 69382 BE: "Belgium", 69383 BZ: "Belize", 69384 BJ: "Benin", 69385 BM: "Bermuda", 69386 BT: "Bhutan", 69387 BO: "Bolivia (Plurinational State of)", 69388 BQ: "Bonaire, Sint Eustatius and Saba", 69389 BA: "Bosnia and Herzegovina", 69390 BW: "Botswana", 69391 BV: "Bouvet Island", 69392 BR: "Brazil", 69393 IO: "British Indian Ocean Territory (the)", 69394 BN: "Brunei Darussalam", 69395 BG: "Bulgaria", 69396 BF: "Burkina Faso", 69397 BI: "Burundi", 69398 CV: "Cabo Verde", 69399 KH: "Cambodia", 69400 CM: "Cameroon", 69401 CA: "Canada", 69402 KY: "Cayman Islands (the)", 69403 CF: "Central African Republic (the)", 69404 TD: "Chad", 69405 CL: "Chile", 69406 CN: "China", 69407 CX: "Christmas Island", 69408 CC: "Cocos (Keeling) Islands (the)", 69409 CO: "Colombia", 69410 KM: "Comoros (the)", 69411 CD: "Congo (the Democratic Republic of the)", 69412 CG: "Congo (the)", 69413 CK: "Cook Islands (the)", 69414 CR: "Costa Rica", 69415 CI: "Côte d'Ivoire", 69416 HR: "Croatia", 69417 CU: "Cuba", 69418 CW: "Curaçao", 69419 CY: "Cyprus", 69420 CZ: "Czechia", 69421 DK: "Denmark", 69422 DJ: "Djibouti", 69423 DM: "Dominica", 69424 DO: "Dominican Republic (the)", 69425 EC: "Ecuador", 69426 EG: "Egypt", 69427 SV: "El Salvador", 69428 GQ: "Equatorial Guinea", 69429 ER: "Eritrea", 69430 EE: "Estonia", 69431 SZ: "Eswatini", 69432 ET: "Ethiopia", 69433 FK: "Falkland Islands (the) [Malvinas]", 69434 FO: "Faroe Islands (the)", 69435 FJ: "Fiji", 69436 FI: "Finland", 69437 FR: "France", 69438 GF: "French Guiana", 69439 PF: "French Polynesia", 69440 TF: "French Southern Territories (the)", 69441 GA: "Gabon", 69442 GM: "Gambia (the)", 69443 GE: "Georgia", 69444 DE: "Germany", 69445 GH: "Ghana", 69446 GI: "Gibraltar", 69447 GR: "Greece", 69448 GL: "Greenland", 69449 GD: "Grenada", 69450 GP: "Guadeloupe", 69451 GU: "Guam", 69452 GT: "Guatemala", 69453 GG: "Guernsey", 69454 GN: "Guinea", 69455 GW: "Guinea-Bissau", 69456 GY: "Guyana", 69457 HT: "Haiti", 69458 HM: "Heard Island and McDonald Islands", 69459 VA: "Holy See (the)", 69460 HN: "Honduras", 69461 HK: "Hong Kong", 69462 HU: "Hungary", 69463 IS: "Iceland", 69464 IN: "India", 69465 ID: "Indonesia", 69466 IR: "Iran (Islamic Republic of)", 69467 IQ: "Iraq", 69468 IE: "Ireland", 69469 IM: "Isle of Man", 69470 IL: "Israel", 69471 IT: "Italy", 69472 JM: "Jamaica", 69473 JP: "Japan", 69474 JE: "Jersey", 69475 JO: "Jordan", 69476 KZ: "Kazakhstan", 69477 KE: "Kenya", 69478 KI: "Kiribati", 69479 KP: "Korea (the Democratic People's Republic of)",
69480 KR: "Korea (the Republic of)", 69481 KW: "Kuwait", 69482 KG: "Kyrgyzstan", 69483 LA: "Lao People's Democratic Republic (the)", 69484 LV: "Latvia", 69485 LB: "Lebanon", 69486 LS: "Lesotho", 69487 LR: "Liberia", 69488 LY: "Libya", 69489 LI: "Liechtenstein", 69490 LT: "Lithuania", 69491 LU: "Luxembourg", 69492 MO: "Macao", 69493 MG: "Madagascar", 69494 MW: "Malawi", 69495 MY: "Malaysia", 69496 MV: "Maldives", 69497 ML: "Mali", 69498 MT: "Malta", 69499 MH: "Marshall Islands (the)", 69500 MQ: "Martinique", 69501 MR: "Mauritania", 69502 MU: "Mauritius", 69503 YT: "Mayotte", 69504 MX: "Mexico", 69505 FM: "Micronesia (Federated States of)", 69506 MD: "Moldova (the Republic of)", 69507 MC: "Monaco", 69508 MN: "Mongolia", 69509 ME: "Montenegro", 69510 MS: "Montserrat", 69511 MA: "Morocco", 69512 MZ: "Mozambique", 69513 MM: "Myanmar", 69514 NA: "Namibia", 69515 NR: "Nauru", 69516 NP: "Nepal", 69517 NL: "Netherlands (the)", 69518 NC: "New Caledonia", 69519 NZ: "New Zealand", 69520 NI: "Nicaragua", 69521 NE: "Niger (the)", 69522 NG: "Nigeria", 69523 NU: "Niue", 69524 NF: "Norfolk Island", 69525 MK: "North Macedonia", 69526 MP: "Northern Mariana Islands (the)", 69527 NO: "Norway", 69528 OM: "Oman", 69529 PK: "Pakistan", 69530 PW: "Palau", 69531 PS: "Palestine, State of", 69532 PA: "Panama", 69533 PG: "Papua New Guinea", 69534 PY: "Paraguay", 69535 PE: "Peru", 69536 PH: "Philippines (the)", 69537 PN: "Pitcairn", 69538 PL: "Poland", 69539 PT: "Portugal", 69540 PR: "Puerto Rico", 69541 QA: "Qatar", 69542 RE: "Réunion", 69543 RO: "Romania", 69544 RU: "Russian Federation (the)", 69545 RW: "Rwanda", 69546 BL: "Saint Barthélemy", 69547 SH: "Saint Helena, Ascension and Tristan da Cunha", 69548 KN: "Saint Kitts and Nevis", 69549 LC: "Saint Lucia", 69550 MF: "Saint Martin (French part)", 69551 PM: "Saint Pierre and Miquelon", 69552 VC: "Saint Vincent and the Grenadines", 69553 WS: "Samoa", 69554 SM: "San Marino", 69555 ST: "Sao Tome and Principe", 69556 SA: "Saudi Arabia", 69557 SN: "Senegal", 69558 RS: "Serbia", 69559 SC: "Seychelles", 69560 SL: "Sierra Leone", 69561 SG: "Singapore", 69562 SX: "Sint Maarten (Dutch part)", 69563 SK: "Slovakia", 69564 SI: "Slovenia", 69565 SB: "Solomon Islands", 69566 SO: "Somalia", 69567 ZA: "South Africa", 69568 GS: "South Georgia and the South Sandwich Islands", 69569 SS: "South Sudan", 69570 ES: "Spain", 69571 LK: "Sri Lanka", 69572 SD: "Sudan (the)", 69573 SR: "Suriname", 69574 SJ: "Svalbard and Jan Mayen", 69575 SE: "Sweden", 69576 CH: "Switzerland", 69577 SY: "Syrian Arab Republic", 69578 TW: "Taiwan (Province of China)", 69579 TJ: "Tajikistan", 69580 TZ: "Tanzania, United Republic of", 69581 TH: "Thailand", 69582 TL: "Timor-Leste", 69583 TG: "Togo", 69584 TK: "Tokelau", 69585 TO: "Tonga", 69586 TT: "Trinidad and Tobago", 69587 TN: "Tunisia", 69588 TR: "Turkey", 69589 TM: "Turkmenistan", 69590 TC: "Turks and Caicos Islands (the)", 69591 TV: "Tuvalu", 69592 UG: "Uganda", 69593 UA: "Ukraine", 69594 AE: "United Arab Emirates (the)", 69595 GB: "United Kingdom of Great Britain and Northern Ireland (the)", 69596 US: "United States of America (the)", 69597 UM: "United States Minor Outlying Islands (the)", 69598 UY: "Uruguay", 69599 UZ: "Uzbekistan", 69600 VU: "Vanuatu", 69601 VE: "Venezuela (Bolivarian Republic of)", 69602 VN: "Viet Nam", 69603 VG: "Virgin Islands (British)", 69604 VI: "Virgin Islands (U.S.)", 69605 WF: "Wallis and Futuna", 69606 EH: "Western Sahara", 69607 YE: "Yemen", 69608 ZM: "Zambia", 69609 ZW: "Zimbabwe", 69610 }; 69611 const statesForUS = { 69612 AK: "Alaska", 69613 AL: "Alabama", 69614 AR: "Arkansas", 69615 AZ: "Arizona", 69616 CA: "California", 69617 CO: "Colorado", 69618 CT: "Connecticut", 69619 DC: "District of Columbia", 69620 DE: "Delaware", 69621 FL: "Florida", 69622 GA: "Georgia", 69623 GU: "Guam", 69624 HI: "Hawaii", 69625 IA: "Iowa", 69626 ID: "Idaho", 69627 IL: "Illinois", 69628 IN: "Indiana", 69629 KS: "Kansas", 69630 KY: "Kentucky", 69631 LA: "Louisiana", 69632 MA: "Massachusetts", 69633 MD: "Maryland", 69634 ME: "Maine", 69635 MI: "Michigan", 69636 MN: "Minnesota", 69637 MO: "Missouri", 69638 MS: "Mississippi", 69639 MT: "Montana", 69640 NC: "North Carolina", 69641 ND: "North Dakota", 69642 NE: "Nebraska", 69643 NH: "New Hampshire", 69644 NJ: "New Jersey", 69645 NM: "New Mexico", 69646 NV: "Nevada", 69647 NY: "New York", 69648 OH: "Ohio", 69649 OK: "Oklahoma", 69650 OR: "Oregon", 69651 PA: "Pennsylvania", 69652 PR: "Puerto Rico", 69653 RI: "Rhode Island", 69654 SC: "South Carolina", 69655 SD: "South Dakota", 69656 TN: "Tennessee", 69657 TX: "Texas", 69658 UT: "Utah", 69659 VA: "Virginia", 69660 VI: "Virgin Islands", 69661 VT: "Vermont", 69662 WA: "Washington", 69663 WI: "Wisconsin", 69664 WV: "West Virginia", 69665 WY: "Wyoming" 69666 }; 69667 const provincesForCanada = { 69668 AB: "Alberta", 69669 BC: "British Columbia", 69670 MB: "Manitoba", 69671 NB: "New Brunswick", 69672 NL: "Newfoundland and Labrador", 69673 NT: "Northwest Territories", 69674 NS: "Nova Scotia", 69675 NU: "Nunavut", 69676 ON: "Ontario", 69677 PE: "Prince Edward Island", 69678 QC: "Quebec", 69679 SK: "Saskatchewan", 69680 YT: "Yukon" 69681 }; 69682 69683 /* src/components/elements/billingCountry/BillingCountry.svelte generated by Svelte v4.2.12 */ 69684 69685 function get_each_context$6(ctx, list, i) { 69686 const child_ctx = ctx.slice(); 69687 child_ctx[14] = list[i]; 69688 return child_ctx; 69689 } 69690 69691 // (47:4) {#each countryOptions as option} 69692 function create_each_block$6(ctx) { 69693 let option_1; 69694 let t0_value = /*option*/ ctx[14].label + ""; 69695 let t0; 69696 let t1; 69697 let option_1_value_value; 69698 let option_1_selected_value; 69699 69700 return { 69701 c() { 69702 option_1 = element("option"); 69703 t0 = text(t0_value); 69704 t1 = space(); 69705 option_1.__value = option_1_value_value = /*option*/ ctx[14].value; 69706 set_input_value(option_1, option_1.__value); 69707 option_1.selected = option_1_selected_value = /*value*/ ctx[1] === /*option*/ ctx[14].value; 69708 }, 69709 m(target, anchor) { 69710 insert(target, option_1, anchor); 69711 append(option_1, t0); 69712 append(option_1, t1); 69713 }, 69714 p(ctx, dirty) {
69715 if (dirty & /*countryOptions*/ 64 && t0_value !== (t0_value = /*option*/ ctx[14].label + "")) set_data(t0, t0_value); 69716 69717 if (dirty & /*countryOptions*/ 64 && option_1_value_value !== (option_1_value_value = /*option*/ ctx[14].value)) { 69718 option_1.__value = option_1_value_value; 69719 set_input_value(option_1, option_1.__value); 69720 } 69721 69722 if (dirty & /*value, countryOptions*/ 66 && option_1_selected_value !== (option_1_selected_value = /*value*/ ctx[1] === /*option*/ ctx[14].value)) { 69723 option_1.selected = option_1_selected_value; 69724 } 69725 }, 69726 d(detaching) { 69727 if (detaching) { 69728 detach(option_1); 69729 } 69730 } 69731 }; 69732 } 69733 69734 // (26:0) <Label forInput={id} label={label + (config.required ? "*" : "")} {isPaymentForm} > 69735 function create_default_slot$3(ctx) { 69736 let select; 69737 let option_1; 69738 let t; 69739 let select_required_value; 69740 let select_value_value; 69741 let select_disabled_value; 69742 let mounted; 69743 let dispose; 69744 let each_value = ensure_array_like(/*countryOptions*/ ctx[6]); 69745 let each_blocks = []; 69746 69747 for (let i = 0; i < each_value.length; i += 1) { 69748 each_blocks[i] = create_each_block$6(get_each_context$6(ctx, each_value, i)); 69749 } 69750 69751 return { 69752 c() { 69753 select = element("select"); 69754 option_1 = element("option"); 69755 t = text(/*placeholder*/ ctx[7]); 69756 69757 for (let i = 0; i < each_blocks.length; i += 1) { 69758 each_blocks[i].c(); 69759 } 69760 69761 option_1.disabled = true; 69762 option_1.__value = ""; 69763 set_input_value(option_1, option_1.__value); 69764 attr(select, "id", /*id*/ ctx[10]); 69765 attr(select, "name", "billing-country"); 69766 attr(select, "class", "zephr-form-input zephr-form-input-select svelte-dxm1g8"); 69767 select.required = select_required_value = /*config*/ ctx[0].required; 69768 select.disabled = select_disabled_value = /*config*/ ctx[0].disabled; 69769 toggle_class(select, "zephr-payment-form-input", /*isPaymentForm*/ ctx[3]); 69770 toggle_class(select, "zephr-payment-form-input-select", /*isPaymentForm*/ ctx[3]); 69771 toggle_class(select, "unselected", !/*value*/ ctx[1]); 69772 toggle_class(select, "error", /*hasError*/ ctx[9]); 69773 }, 69774 m(target, anchor) { 69775 insert(target, select, anchor); 69776 append(select, option_1); 69777 append(option_1, t); 69778 69779 for (let i = 0; i < each_blocks.length; i += 1) { 69780 if (each_blocks[i]) { 69781 each_blocks[i].m(select, null); 69782 } 69783 } 69784 69785 select_option(select, /*value*/ ctx[1] || ""); 69786 69787 if (!mounted) { 69788 dispose = [ 69789 listen(select, "change", /*handleChange*/ ctx[11]), 69790 listen(select, "focus", function () { 69791 if (is_function(/*onFocus*/ ctx[4])) /*onFocus*/ ctx[4].apply(this, arguments); 69792 }), 69793 listen(select, "blur", function () { 69794 if (is_function(/*onBlur*/ ctx[5])) /*onBlur*/ ctx[5].apply(this, arguments); 69795 }) 69796 ]; 69797 69798 mounted = true; 69799 } 69800 }, 69801 p(new_ctx, dirty) { 69802 ctx = new_ctx; 69803 if (dirty & /*placeholder*/ 128) set_data(t, /*placeholder*/ ctx[7]); 69804 69805 if (dirty & /*countryOptions, value*/ 66) { 69806 each_value = ensure_array_like(/*countryOptions*/ ctx[6]); 69807 let i; 69808 69809 for (i = 0; i < each_value.length; i += 1) { 69810 const child_ctx = get_each_context$6(ctx, each_value, i); 69811 69812 if (each_blocks[i]) { 69813 each_blocks[i].p(child_ctx, dirty); 69814 } else { 69815 each_blocks[i] = create_each_block$6(child_ctx); 69816 each_blocks[i].c(); 69817 each_blocks[i].m(select, null); 69818 } 69819 } 69820 69821 for (; i < each_blocks.length; i += 1) { 69822 each_blocks[i].d(1); 69823 } 69824 69825 each_blocks.length = each_value.length; 69826 } 69827 69828 if (dirty & /*config*/ 1 && select_required_value !== (select_required_value = /*config*/ ctx[0].required)) { 69829 select.required = select_required_value; 69830 } 69831 69832 if (dirty & /*value, countryOptions*/ 66 && select_value_value !== (select_value_value = /*value*/ ctx[1] || "")) { 69833 select_option(select, /*value*/ ctx[1] || ""); 69834 } 69835 69836 if (dirty & /*config*/ 1 && select_disabled_value !== (select_disabled_value = /*config*/ ctx[0].disabled)) { 69837 select.disabled = select_disabled_value; 69838 } 69839 69840 if (dirty & /*isPaymentForm*/ 8) { 69841 toggle_class(select, "zephr-payment-form-input", /*isPaymentForm*/ ctx[3]); 69842 } 69843
69844 if (dirty & /*isPaymentForm*/ 8) { 69845 toggle_class(select, "zephr-payment-form-input-select", /*isPaymentForm*/ ctx[3]); 69846 } 69847 69848 if (dirty & /*value*/ 2) { 69849 toggle_class(select, "unselected", !/*value*/ ctx[1]); 69850 } 69851 69852 if (dirty & /*hasError*/ 512) { 69853 toggle_class(select, "error", /*hasError*/ ctx[9]); 69854 } 69855 }, 69856 d(detaching) { 69857 if (detaching) { 69858 detach(select); 69859 } 69860 69861 destroy_each(each_blocks, detaching); 69862 mounted = false; 69863 run_all(dispose); 69864 } 69865 }; 69866 } 69867 69868 // (55:0) {#if hasError} 69869 function create_if_block$c(ctx) { 69870 let div; 69871 let t; 69872 69873 return { 69874 c() { 69875 div = element("div"); 69876 t = text(/*error*/ ctx[2]); 69877 attr(div, "class", "zephr-form-input-error-text svelte-dxm1g8"); 69878 toggle_class(div, "zephr-payment-form-input-error-text", /*isPaymentForm*/ ctx[3]); 69879 }, 69880 m(target, anchor) { 69881 insert(target, div, anchor); 69882 append(div, t); 69883 }, 69884 p(ctx, dirty) { 69885 if (dirty & /*error*/ 4) set_data(t, /*error*/ ctx[2]); 69886 69887 if (dirty & /*isPaymentForm*/ 8) { 69888 toggle_class(div, "zephr-payment-form-input-error-text", /*isPaymentForm*/ ctx[3]); 69889 } 69890 }, 69891 d(detaching) { 69892 if (detaching) { 69893 detach(div); 69894 } 69895 } 69896 }; 69897 } 69898 69899 function create_fragment$g(ctx) { 69900 let label_1; 69901 let t; 69902 let if_block_anchor; 69903 let current; 69904 69905 label_1 = new Label({ 69906 props: { 69907 forInput: /*id*/ ctx[10], 69908 label: /*label*/ ctx[8] + (/*config*/ ctx[0].required ? "*" : ""), 69909 isPaymentForm: /*isPaymentForm*/ ctx[3], 69910 $$slots: { default: [create_default_slot$3] }, 69911 $$scope: { ctx } 69912 } 69913 }); 69914 69915 let if_block = /*hasError*/ ctx[9] && create_if_block$c(ctx); 69916 69917 return { 69918 c() { 69919 create_component(label_1.$$.fragment); 69920 t = space(); 69921 if (if_block) if_block.c(); 69922 if_block_anchor = empty(); 69923 }, 69924 m(target, anchor) { 69925 mount_component(label_1, target, anchor); 69926 insert(target, t, anchor); 69927 if (if_block) if_block.m(target, anchor); 69928 insert(target, if_block_anchor, anchor); 69929 current = true; 69930 }, 69931 p(ctx, [dirty]) { 69932 const label_1_changes = {}; 69933 if (dirty & /*label, config*/ 257) label_1_changes.label = /*label*/ ctx[8] + (/*config*/ ctx[0].required ? "*" : ""); 69934 if (dirty & /*isPaymentForm*/ 8) label_1_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 69935 69936 if (dirty & /*$$scope, config, value, isPaymentForm, hasError, onFocus, onBlur, countryOptions, placeholder*/ 131835) { 69937 label_1_changes.$$scope = { dirty, ctx }; 69938 } 69939 69940 label_1.$set(label_1_changes); 69941 69942 if (/*hasError*/ ctx[9]) { 69943 if (if_block) { 69944 if_block.p(ctx, dirty); 69945 } else { 69946 if_block = create_if_block$c(ctx); 69947 if_block.c(); 69948 if_block.m(if_block_anchor.parentNode, if_block_anchor); 69949 } 69950 } else if (if_block) { 69951 if_block.d(1); 69952 if_block = null; 69953 } 69954 }, 69955 i(local) { 69956 if (current) return; 69957 transition_in(label_1.$$.fragment, local); 69958 current = true; 69959 }, 69960 o(local) { 69961 transition_out(label_1.$$.fragment, local); 69962 current = false; 69963 }, 69964 d(detaching) { 69965 if (detaching) { 69966 detach(t); 69967 detach(if_block_anchor); 69968 } 69969 69970 destroy_component(label_1, detaching); 69971 if (if_block) if_block.d(detaching); 69972 } 69973 }; 69974 } 69975 69976 function instance$g($$self, $$props, $$invalidate) { 69977 let hasError; 69978 let label; 69979 let placeholder; 69980 let countryOptions; 69981 let { formKey } = $$props; 69982 let { config } = $$props; 69983 let { value } = $$props; 69984 let { error = "" } = $$props; 69985 let { isPaymentForm = false } = $$props; 69986 let { onChange } = $$props; 69987 let { onFocus } = $$props; 69988 let { onBlur } = $$props; 69989 const id = `zephr-form-billing-country-${formKey}`; 69990 69991 const handleChange = e => { 69992 const target = e.target; 69993 onChange(target.value); 69994 }; 69995 69996 $$self.$$set = $$props => {
69997 if ('formKey' in $$props) $$invalidate(12, formKey = $$props.formKey); 69998 if ('config' in $$props) $$invalidate(0, config = $$props.config); 69999 if ('value' in $$props) $$invalidate(1, value = $$props.value); 70000 if ('error' in $$props) $$invalidate(2, error = $$props.error); 70001 if ('isPaymentForm' in $$props) $$invalidate(3, isPaymentForm = $$props.isPaymentForm); 70002 if ('onChange' in $$props) $$invalidate(13, onChange = $$props.onChange); 70003 if ('onFocus' in $$props) $$invalidate(4, onFocus = $$props.onFocus); 70004 if ('onBlur' in $$props) $$invalidate(5, onBlur = $$props.onBlur); 70005 }; 70006 70007 $$self.$$.update = () => { 70008 if ($$self.$$.dirty & /*error*/ 4) { 70009 $$invalidate(9, hasError = !!error); 70010 } 70011 70012 if ($$self.$$.dirty & /*config*/ 1) { 70013 $$invalidate(8, label = config.label || "Country"); 70014 } 70015 70016 if ($$self.$$.dirty & /*config*/ 1) { 70017 $$invalidate(7, placeholder = config.placeholder || "Select your country"); 70018 } 70019 }; 70020 70021 $$invalidate(6, countryOptions = Object.entries(countries).map(([code, name]) => ({ value: code, label: name }))); 70022 70023 return [ 70024 config, 70025 value, 70026 error, 70027 isPaymentForm, 70028 onFocus, 70029 onBlur, 70030 countryOptions, 70031 placeholder, 70032 label, 70033 hasError, 70034 id, 70035 handleChange, 70036 formKey, 70037 onChange 70038 ]; 70039 } 70040 70041 class BillingCountry extends SvelteComponent { 70042 constructor(options) { 70043 super(); 70044 70045 init(this, options, instance$g, create_fragment$g, safe_not_equal, { 70046 formKey: 12, 70047 config: 0, 70048 value: 1, 70049 error: 2, 70050 isPaymentForm: 3, 70051 onChange: 13, 70052 onFocus: 4, 70053 onBlur: 5 70054 }); 70055 } 70056 } 70057 70058 /* src/components/elements/billingState/BillingState.svelte generated by Svelte v4.2.12 */ 70059 70060 function get_each_context$5(ctx, list, i) { 70061 const child_ctx = ctx.slice(); 70062 child_ctx[16] = list[i]; 70063 return child_ctx; 70064 } 70065 70066 // (44:0) {#if shouldShow} 70067 function create_if_block$b(ctx) { 70068 let label_1; 70069 let t; 70070 let if_block_anchor; 70071 let current; 70072 70073 label_1 = new Label({ 70074 props: { 70075 forInput: /*id*/ ctx[11], 70076 label: /*label*/ ctx[9] + (/*config*/ ctx[0].required ? "*" : ""), 70077 isPaymentForm: /*isPaymentForm*/ ctx[3], 70078 $$slots: { default: [create_default_slot$2] }, 70079 $$scope: { ctx } 70080 } 70081 }); 70082 70083 let if_block = /*hasError*/ ctx[10] && create_if_block_1$a(ctx); 70084 70085 return { 70086 c() { 70087 create_component(label_1.$$.fragment); 70088 t = space(); 70089 if (if_block) if_block.c(); 70090 if_block_anchor = empty(); 70091 }, 70092 m(target, anchor) { 70093 mount_component(label_1, target, anchor); 70094 insert(target, t, anchor); 70095 if (if_block) if_block.m(target, anchor); 70096 insert(target, if_block_anchor, anchor); 70097 current = true; 70098 }, 70099 p(ctx, dirty) { 70100 const label_1_changes = {}; 70101 if (dirty & /*label, config*/ 513) label_1_changes.label = /*label*/ ctx[9] + (/*config*/ ctx[0].required ? "*" : ""); 70102 if (dirty & /*isPaymentForm*/ 8) label_1_changes.isPaymentForm = /*isPaymentForm*/ ctx[3]; 70103 70104 if (dirty & /*$$scope, config, value, isPaymentForm, hasError, onFocus, onBlur, stateOptions, placeholder*/ 525755) { 70105 label_1_changes.$$scope = { dirty, ctx }; 70106 } 70107 70108 label_1.$set(label_1_changes); 70109 70110 if (/*hasError*/ ctx[10]) { 70111 if (if_block) { 70112 if_block.p(ctx, dirty); 70113 } else { 70114 if_block = create_if_block_1$a(ctx); 70115 if_block.c(); 70116 if_block.m(if_block_anchor.parentNode, if_block_anchor); 70117 } 70118 } else if (if_block) { 70119 if_block.d(1); 70120 if_block = null; 70121 } 70122 }, 70123 i(local) { 70124 if (current) return; 70125 transition_in(label_1.$$.fragment, local); 70126 current = true; 70127 }, 70128 o(local) { 70129 transition_out(label_1.$$.fragment, local); 70130 current = false; 70131 }, 70132 d(detaching) { 70133 if (detaching) { 70134 detach(t); 70135 detach(if_block_anchor); 70136 } 70137 70138 destroy_component(label_1, detaching); 70139 if (if_block) if_block.d(detaching); 70140 } 70141 }; 70142 } 70143 70144 // (66:6) {#each stateOptions as option} 70145 function create_each_block$5(ctx) { 70146 let option_1; 70147 let t0_value = /*option*/ ctx[16].label + ""; 70148 let t0; 70149 let t1; 70150 let option_1_value_value; 70151 let option_1_selected_value; 70152 70153 return { 70154 c() { 70155 option_1 = element("option"); 70156 t0 = text(t0_value); 70157 t1 = space(); 70158 option_1.__value = option_1_value_value = /*option*/ ctx[16].value; 70159 set_input_value(option_1, option_1.__value); 70160 option_1.selected = option_1_selected_value = /*value*/ ctx[1] === /*option*/ ctx[16].value; 70161 }, 70162 m(target, anchor) { 70163 insert(target, option_1, anchor); 70164 append(option_1, t0); 70165 append(option_1, t1); 70166 }, 70167 p(ctx, dirty) {
70168 if (dirty & /*stateOptions*/ 128 && t0_value !== (t0_value = /*option*/ ctx[16].label + "")) set_data(t0, t0_value); 70169 70170 if (dirty & /*stateOptions*/ 128 && option_1_value_value !== (option_1_value_value = /*option*/ ctx[16].value)) { 70171 option_1.__value = option_1_value_value; 70172 set_input_value(option_1, option_1.__value); 70173 } 70174 70175 if (dirty & /*value, stateOptions*/ 130 && option_1_selected_value !== (option_1_selected_value = /*value*/ ctx[1] === /*option*/ ctx[16].value)) { 70176 option_1.selected = option_1_selected_value; 70177 } 70178 }, 70179 d(detaching) { 70180 if (detaching) { 70181 detach(option_1); 70182 } 70183 } 70184 }; 70185 } 70186 70187 // (45:2) <Label forInput={id} label={label + (config.required ? "*" : "")} {isPaymentForm} > 70188 function create_default_slot$2(ctx) { 70189 let select; 70190 let option_1; 70191 let t; 70192 let select_required_value; 70193 let select_value_value; 70194 let select_disabled_value; 70195 let mounted; 70196 let dispose; 70197 let each_value = ensure_array_like(/*stateOptions*/ ctx[7]); 70198 let each_blocks = []; 70199 70200 for (let i = 0; i < each_value.length; i += 1) { 70201 each_blocks[i] = create_each_block$5(get_each_context$5(ctx, each_value, i)); 70202 } 70203 70204 return { 70205 c() { 70206 select = element("select"); 70207 option_1 = element("option"); 70208 t = text(/*placeholder*/ ctx[8]); 70209 70210 for (let i = 0; i < each_blocks.length; i += 1) { 70211 each_blocks[i].c(); 70212 } 70213 70214 option_1.disabled = true; 70215 option_1.__value = ""; 70216 set_input_value(option_1, option_1.__value); 70217 attr(select, "id", /*id*/ ctx[11]); 70218 attr(select, "name", "billing-state"); 70219 attr(select, "class", "zephr-form-input zephr-form-input-select svelte-dxm1g8"); 70220 select.required = select_required_value = /*config*/ ctx[0].required; 70221 select.disabled = select_disabled_value = /*config*/ ctx[0].disabled; 70222 toggle_class(select, "zephr-payment-form-input", /*isPaymentForm*/ ctx[3]); 70223 toggle_class(select, "zephr-payment-form-input-select", /*isPaymentForm*/ ctx[3]); 70224 toggle_class(select, "unselected", !/*value*/ ctx[1]); 70225 toggle_class(select, "error", /*hasError*/ ctx[10]); 70226 }, 70227 m(target, anchor) { 70228 insert(target, select, anchor); 70229 append(select, option_1); 70230 append(option_1, t); 70231 70232 for (let i = 0; i < each_blocks.length; i += 1) { 70233 if (each_blocks[i]) { 70234 each_blocks[i].m(select, null); 70235 } 70236 } 70237 70238 select_option(select, /*value*/ ctx[1] || ""); 70239 70240 if (!mounted) { 70241 dispose = [ 70242 listen(select, "change", /*handleChange*/ ctx[12]), 70243 listen(select, "focus", function () { 70244 if (is_function(/*onFocus*/ ctx[4])) /*onFocus*/ ctx[4].apply(this, arguments); 70245 }), 70246 listen(select, "blur", function () { 70247 if (is_function(/*onBlur*/ ctx[5])) /*onBlur*/ ctx[5].apply(this, arguments); 70248 }) 70249 ]; 70250 70251 mounted = true; 70252 } 70253 }, 70254 p(new_ctx, dirty) { 70255 ctx = new_ctx; 70256 if (dirty & /*placeholder*/ 256) set_data(t, /*placeholder*/ ctx[8]); 70257 70258 if (dirty & /*stateOptions, value*/ 130) { 70259 each_value = ensure_array_like(/*stateOptions*/ ctx[7]); 70260 let i; 70261 70262 for (i = 0; i < each_value.length; i += 1) { 70263 const child_ctx = get_each_context$5(ctx, each_value, i); 70264 70265 if (each_blocks[i]) { 70266 each_blocks[i].p(child_ctx, dirty); 70267 } else { 70268 each_blocks[i] = create_each_block$5(child_ctx); 70269 each_blocks[i].c(); 70270 each_blocks[i].m(select, null); 70271 } 70272 } 70273 70274 for (; i < each_blocks.length; i += 1) { 70275 each_blocks[i].d(1); 70276 } 70277 70278 each_blocks.length = each_value.length; 70279 } 70280 70281 if (dirty & /*config*/ 1 && select_required_value !== (select_required_value = /*config*/ ctx[0].required)) { 70282 select.required = select_required_value; 70283 } 70284 70285 if (dirty & /*value, stateOptions*/ 130 && select_value_value !== (select_value_value = /*value*/ ctx[1] || "")) { 70286 select_option(select, /*value*/ ctx[1] || ""); 70287 } 70288 70289 if (dirty & /*config*/ 1 && select_disabled_value !== (select_disabled_value = /*config*/ ctx[0].disabled)) { 70290 select.disabled = select_disabled_value; 70291 } 70292 70293 if (dirty & /*isPaymentForm*/ 8) { 70294 toggle_class(select, "zephr-payment-form-input", /*isPaymentForm*/ ctx[3]); 70295 } 70296
70297 if (dirty & /*isPaymentForm*/ 8) { 70298 toggle_class(select, "zephr-payment-form-input-select", /*isPaymentForm*/ ctx[3]); 70299 } 70300 70301 if (dirty & /*value*/ 2) { 70302 toggle_class(select, "unselected", !/*value*/ ctx[1]); 70303 } 70304 70305 if (dirty & /*hasError*/ 1024) { 70306 toggle_class(select, "error", /*hasError*/ ctx[10]); 70307 } 70308 }, 70309 d(detaching) { 70310 if (detaching) { 70311 detach(select); 70312 } 70313 70314 destroy_each(each_blocks, detaching); 70315 mounted = false; 70316 run_all(dispose); 70317 } 70318 }; 70319 } 70320 70321 // (74:2) {#if hasError} 70322 function create_if_block_1$a(ctx) { 70323 let div; 70324 let t; 70325 70326 return { 70327 c() { 70328 div = element("div"); 70329 t = text(/*error*/ ctx[2]); 70330 attr(div, "class", "zephr-form-input-error-text svelte-dxm1g8"); 70331 toggle_class(div, "zephr-payment-form-input-error-text", /*isPaymentForm*/ ctx[3]); 70332 }, 70333 m(target, anchor) { 70334 insert(target, div, anchor); 70335 append(div, t); 70336 }, 70337 p(ctx, dirty) { 70338 if (dirty & /*error*/ 4) set_data(t, /*error*/ ctx[2]); 70339 70340 if (dirty & /*isPaymentForm*/ 8) { 70341 toggle_class(div, "zephr-payment-form-input-error-text", /*isPaymentForm*/ ctx[3]); 70342 } 70343 }, 70344 d(detaching) { 70345 if (detaching) { 70346 detach(div); 70347 } 70348 } 70349 }; 70350 } 70351 70352 function create_fragment$f(ctx) { 70353 let if_block_anchor; 70354 let current; 70355 let if_block = /*shouldShow*/ ctx[6] && create_if_block$b(ctx); 70356 70357 return { 70358 c() { 70359 if (if_block) if_block.c(); 70360 if_block_anchor = empty(); 70361 }, 70362 m(target, anchor) { 70363 if (if_block) if_block.m(target, anchor); 70364 insert(target, if_block_anchor, anchor); 70365 current = true; 70366 }, 70367 p(ctx, [dirty]) { 70368 if (/*shouldShow*/ ctx[6]) { 70369 if (if_block) { 70370 if_block.p(ctx, dirty); 70371 70372 if (dirty & /*shouldShow*/ 64) { 70373 transition_in(if_block, 1); 70374 } 70375 } else { 70376 if_block = create_if_block$b(ctx); 70377 if_block.c(); 70378 transition_in(if_block, 1); 70379 if_block.m(if_block_anchor.parentNode, if_block_anchor); 70380 } 70381 } else if (if_block) { 70382 group_outros(); 70383 70384 transition_out(if_block, 1, 1, () => { 70385 if_block = null; 70386 }); 70387 70388 check_outros(); 70389 } 70390 }, 70391 i(local) { 70392 if (current) return; 70393 transition_in(if_block); 70394 current = true; 70395 }, 70396 o(local) { 70397 transition_out(if_block); 70398 current = false; 70399 }, 70400 d(detaching) { 70401 if (detaching) { 70402 detach(if_block_anchor); 70403 } 70404 70405 if (if_block) if_block.d(detaching); 70406 } 70407 }; 70408 } 70409 70410 function instance$f($$self, $$props, $$invalidate) { 70411 let hasError; 70412 let label; 70413 let placeholder; 70414 let shouldShow; 70415 let stateOptions; 70416 let { formKey } = $$props; 70417 let { config } = $$props; 70418 let { value } = $$props; 70419 let { error = "" } = $$props; 70420 let { isPaymentForm = false } = $$props; 70421 let { billingCountry } = $$props; 70422 let { onChange } = $$props; 70423 let { onFocus } = $$props; 70424 let { onBlur } = $$props; 70425 const id = `zephr-form-billing-state-${formKey}`; 70426 70427 const handleChange = e => { 70428 const target = e.target; 70429 onChange(target.value); 70430 }; 70431 70432 $$self.$$set = $$props => {
70433 if ('formKey' in $$props) $$invalidate(13, formKey = $$props.formKey); 70434 if ('config' in $$props) $$invalidate(0, config = $$props.config); 70435 if ('value' in $$props) $$invalidate(1, value = $$props.value); 70436 if ('error' in $$props) $$invalidate(2, error = $$props.error); 70437 if ('isPaymentForm' in $$props) $$invalidate(3, isPaymentForm = $$props.isPaymentForm); 70438 if ('billingCountry' in $$props) $$invalidate(14, billingCountry = $$props.billingCountry); 70439 if ('onChange' in $$props) $$invalidate(15, onChange = $$props.onChange); 70440 if ('onFocus' in $$props) $$invalidate(4, onFocus = $$props.onFocus); 70441 if ('onBlur' in $$props) $$invalidate(5, onBlur = $$props.onBlur); 70442 }; 70443 70444 $$self.$$.update = () => { 70445 if ($$self.$$.dirty & /*error*/ 4) { 70446 $$invalidate(10, hasError = !!error); 70447 } 70448 70449 if ($$self.$$.dirty & /*config*/ 1) { 70450 $$invalidate(9, label = config.label || "State/Province"); 70451 } 70452 70453 if ($$self.$$.dirty & /*config*/ 1) { 70454 $$invalidate(8, placeholder = config.placeholder || "Select your state/province"); 70455 } 70456 70457 if ($$self.$$.dirty & /*billingCountry*/ 16384) { 70458 // Only show when country is US or Canada 70459 $$invalidate(6, shouldShow = billingCountry === "US" || billingCountry === "CA"); 70460 } 70461 70462 if ($$self.$$.dirty & /*billingCountry*/ 16384) { 70463 // Get appropriate state/province options based on country 70464 $$invalidate(7, stateOptions = (() => { 70465 if (billingCountry === "US") { 70466 return Object.entries(statesForUS).map(([code, name]) => ({ value: code, label: name })); 70467 } else if (billingCountry === "CA") { 70468 return Object.entries(provincesForCanada).map(([code, name]) => ({ value: code, label: name })); 70469 } 70470 70471 return []; 70472 })()); 70473 } 70474 70475 if ($$self.$$.dirty & /*shouldShow, value, onChange*/ 32834) { 70476 // Clear value when country changes to non-US/CA 70477 if (!shouldShow && value) { 70478 onChange(""); 70479 } 70480 } 70481 }; 70482 70483 return [ 70484 config, 70485 value, 70486 error, 70487 isPaymentForm, 70488 onFocus, 70489 onBlur, 70490 shouldShow, 70491 stateOptions, 70492 placeholder, 70493 label, 70494 hasError, 70495 id, 70496 handleChange, 70497 formKey, 70498 billingCountry, 70499 onChange 70500 ]; 70501 } 70502 70503 class BillingState extends SvelteComponent { 70504 constructor(options) { 70505 super(); 70506 70507 init(this, options, instance$f, create_fragment$f, safe_not_equal, { 70508 formKey: 13, 70509 config: 0, 70510 value: 1, 70511 error: 2, 70512 isPaymentForm: 3, 70513 billingCountry: 14, 70514 onChange: 15, 70515 onFocus: 4, 70516 onBlur: 5 70517 }); 70518 } 70519 } 70520 70521 /* src/components/elements/recipientAddress/RecipientAddress.svelte generated by Svelte v4.2.12 */ 70522 70523 function create_if_block$a(ctx) { 70524 let div1; 70525 let label; 70526 let t0_value = /*config*/ ctx[0].label + ""; 70527 let t0; 70528 let t1; 70529 let div0; 70530 let t2; 70531 let t3; 70532 let t4; 70533 let t5; 70534 let t6; 70535 let current; 70536 let if_block0 = /*showAddress*/ ctx[3] && create_if_block_6$3(ctx); 70537 let if_block1 = /*showCity*/ ctx[5] && create_if_block_5$3(ctx); 70538 let if_block2 = /*showCountry*/ ctx[7] && create_if_block_4$3(ctx); 70539 let if_block3 = /*showState*/ ctx[6] && create_if_block_3$4(ctx); 70540 let if_block4 = /*showPostalCode*/ ctx[4] && create_if_block_2$7(ctx); 70541 let if_block5 = /*addressError*/ ctx[1] && create_if_block_1$9(ctx); 70542 70543 return { 70544 c() { 70545 div1 = element("div"); 70546 label = element("label"); 70547 t0 = text(t0_value); 70548 t1 = space(); 70549 div0 = element("div"); 70550 if (if_block0) if_block0.c(); 70551 t2 = space(); 70552 if (if_block1) if_block1.c(); 70553 t3 = space(); 70554 if (if_block2) if_block2.c(); 70555 t4 = space(); 70556 if (if_block3) if_block3.c(); 70557 t5 = space(); 70558 if (if_block4) if_block4.c(); 70559 t6 = space(); 70560 if (if_block5) if_block5.c(); 70561 attr(label, "class", "address-main-label svelte-1lcs5wj"); 70562 attr(div0, "class", "address-fields svelte-1lcs5wj"); 70563 attr(div1, "class", "recipient-address-section svelte-1lcs5wj"); 70564 }, 70565 m(target, anchor) { 70566 insert(target, div1, anchor); 70567 append(div1, label); 70568 append(label, t0); 70569 append(div1, t1); 70570 append(div1, div0); 70571 if (if_block0) if_block0.m(div0, null); 70572 append(div0, t2); 70573 if (if_block1) if_block1.m(div0, null); 70574 append(div0, t3); 70575 if (if_block2) if_block2.m(div0, null); 70576 append(div0, t4); 70577 if (if_block3) if_block3.m(div0, null); 70578 append(div0, t5); 70579 if (if_block4) if_block4.m(div0, null); 70580 append(div1, t6); 70581 if (if_block5) if_block5.m(div1, null); 70582 current = true; 70583 }, 70584 p(ctx, dirty) { 70585 if ((!current || dirty & /*config*/ 1) && t0_value !== (t0_value = /*config*/ ctx[0].label + "")) set_data(t0, t0_value); 70586 70587 if (/*showAddress*/ ctx[3]) { 70588 if (if_block0) { 70589 if_block0.p(ctx, dirty); 70590 } else { 70591 if_block0 = create_if_block_6$3(ctx); 70592 if_block0.c(); 70593 if_block0.m(div0, t2); 70594 } 70595 } else if (if_block0) { 70596 if_block0.d(1); 70597 if_block0 = null; 70598 } 70599 70600 if (/*showCity*/ ctx[5]) { 70601 if (if_block1) { 70602 if_block1.p(ctx, dirty); 70603 } else { 70604 if_block1 = create_if_block_5$3(ctx); 70605 if_block1.c(); 70606 if_block1.m(div0, t3); 70607 } 70608 } else if (if_block1) { 70609 if_block1.d(1); 70610 if_block1 = null; 70611 } 70612 70613 if (/*showCountry*/ ctx[7]) { 70614 if (if_block2) { 70615 if_block2.p(ctx, dirty); 70616
70617 if (dirty & /*showCountry*/ 128) { 70618 transition_in(if_block2, 1); 70619 } 70620 } else { 70621 if_block2 = create_if_block_4$3(ctx); 70622 if_block2.c(); 70623 transition_in(if_block2, 1); 70624 if_block2.m(div0, t4); 70625 } 70626 } else if (if_block2) { 70627 group_outros(); 70628 70629 transition_out(if_block2, 1, 1, () => { 70630 if_block2 = null; 70631 }); 70632 70633 check_outros(); 70634 } 70635 70636 if (/*showState*/ ctx[6]) { 70637 if (if_block3) { 70638 if_block3.p(ctx, dirty); 70639 70640 if (dirty & /*showState*/ 64) { 70641 transition_in(if_block3, 1); 70642 } 70643 } else { 70644 if_block3 = create_if_block_3$4(ctx); 70645 if_block3.c(); 70646 transition_in(if_block3, 1); 70647 if_block3.m(div0, t5); 70648 } 70649 } else if (if_block3) { 70650 group_outros(); 70651 70652 transition_out(if_block3, 1, 1, () => { 70653 if_block3 = null; 70654 }); 70655 70656 check_outros(); 70657 } 70658 70659 if (/*showPostalCode*/ ctx[4]) { 70660 if (if_block4) { 70661 if_block4.p(ctx, dirty); 70662 } else { 70663 if_block4 = create_if_block_2$7(ctx); 70664 if_block4.c(); 70665 if_block4.m(div0, null); 70666 } 70667 } else if (if_block4) { 70668 if_block4.d(1); 70669 if_block4 = null; 70670 } 70671 70672 if (/*addressError*/ ctx[1]) { 70673 if (if_block5) { 70674 if_block5.p(ctx, dirty); 70675 } else { 70676 if_block5 = create_if_block_1$9(ctx); 70677 if_block5.c(); 70678 if_block5.m(div1, null); 70679 } 70680 } else if (if_block5) { 70681 if_block5.d(1); 70682 if_block5 = null; 70683 } 70684 }, 70685 i(local) { 70686 if (current) return; 70687 transition_in(if_block2); 70688 transition_in(if_block3); 70689 current = true; 70690 }, 70691 o(local) { 70692 transition_out(if_block2); 70693 transition_out(if_block3); 70694 current = false; 70695 }, 70696 d(detaching) { 70697 if (detaching) { 70698 detach(div1); 70699 } 70700 70701 if (if_block0) if_block0.d(); 70702 if (if_block1) if_block1.d(); 70703 if (if_block2) if_block2.d(); 70704 if (if_block3) if_block3.d(); 70705 if (if_block4) if_block4.d(); 70706 if (if_block5) if_block5.d(); 70707 } 70708 }; 70709 } 70710 70711 // (80:6) {#if showAddress} 70712 function create_if_block_6$3(ctx) { 70713 let div0; 70714 let label0; 70715 let t0_value = /*config*/ ctx[0].addressLine1Label + ""; 70716 let t0; 70717 let t1; 70718 let input0; 70719 let input0_placeholder_value; 70720 let t2; 70721 let div1; 70722 let label1; 70723 let t3_value = /*config*/ ctx[0].addressLine2Label + ""; 70724 let t3; 70725 let t4; 70726 let input1; 70727 let input1_placeholder_value; 70728 let mounted; 70729 let dispose; 70730 70731 return { 70732 c() { 70733 div0 = element("div"); 70734 label0 = element("label"); 70735 t0 = text(t0_value); 70736 t1 = space(); 70737 input0 = element("input"); 70738 t2 = space(); 70739 div1 = element("div"); 70740 label1 = element("label"); 70741 t3 = text(t3_value); 70742 t4 = space(); 70743 input1 = element("input"); 70744 attr(label0, "for", "addressLine1"); 70745 attr(label0, "class", "svelte-1lcs5wj"); 70746 attr(input0, "id", "addressLine1"); 70747 attr(input0, "type", "text"); 70748 input0.required = /*showAddress*/ ctx[3]; 70749 attr(input0, "placeholder", input0_placeholder_value = /*config*/ ctx[0].addressLine1Placeholder); 70750 attr(input0, "class", "svelte-1lcs5wj"); 70751 attr(div0, "class", "field svelte-1lcs5wj"); 70752 attr(label1, "for", "addressLine2"); 70753 attr(label1, "class", "svelte-1lcs5wj"); 70754 attr(input1, "id", "addressLine2"); 70755 attr(input1, "type", "text"); 70756 attr(input1, "placeholder", input1_placeholder_value = /*config*/ ctx[0].addressLine2Placeholder); 70757 attr(input1, "class", "svelte-1lcs5wj"); 70758 attr(div1, "class", "field svelte-1lcs5wj"); 70759 }, 70760 m(target, anchor) { 70761 insert(target, div0, anchor); 70762 append(div0, label0); 70763 append(label0, t0); 70764 append(div0, t1); 70765 append(div0, input0); 70766 set_input_value(input0, /*recipientAddress*/ ctx[2].addressLine1); 70767 insert(target, t2, anchor); 70768 insert(target, div1, anchor); 70769 append(div1, label1); 70770 append(label1, t3); 70771 append(div1, t4); 70772 append(div1, input1); 70773 set_input_value(input1, /*recipientAddress*/ ctx[2].addressLine2); 70774 70775 if (!mounted) { 70776 dispose = [ 70777 listen(input0, "input", /*input0_input_handler*/ ctx[13]), 70778 listen(input0, "input", /*updateGiftRecipient*/ ctx[9]), 70779 listen(input1, "input", /*input1_input_handler*/ ctx[14]), 70780 listen(input1, "input", /*updateGiftRecipient*/ ctx[9]) 70781 ]; 70782 70783 mounted = true; 70784 } 70785 }, 70786 p(ctx, dirty) {
70787 if (dirty & /*config*/ 1 && t0_value !== (t0_value = /*config*/ ctx[0].addressLine1Label + "")) set_data(t0, t0_value); 70788 70789 if (dirty & /*showAddress*/ 8) { 70790 input0.required = /*showAddress*/ ctx[3]; 70791 } 70792 70793 if (dirty & /*config*/ 1 && input0_placeholder_value !== (input0_placeholder_value = /*config*/ ctx[0].addressLine1Placeholder)) { 70794 attr(input0, "placeholder", input0_placeholder_value); 70795 } 70796 70797 if (dirty & /*recipientAddress*/ 4 && input0.value !== /*recipientAddress*/ ctx[2].addressLine1) { 70798 set_input_value(input0, /*recipientAddress*/ ctx[2].addressLine1); 70799 } 70800 70801 if (dirty & /*config*/ 1 && t3_value !== (t3_value = /*config*/ ctx[0].addressLine2Label + "")) set_data(t3, t3_value); 70802 70803 if (dirty & /*config*/ 1 && input1_placeholder_value !== (input1_placeholder_value = /*config*/ ctx[0].addressLine2Placeholder)) { 70804 attr(input1, "placeholder", input1_placeholder_value); 70805 } 70806 70807 if (dirty & /*recipientAddress*/ 4 && input1.value !== /*recipientAddress*/ ctx[2].addressLine2) { 70808 set_input_value(input1, /*recipientAddress*/ ctx[2].addressLine2); 70809 } 70810 }, 70811 d(detaching) { 70812 if (detaching) { 70813 detach(div0); 70814 detach(t2); 70815 detach(div1); 70816 } 70817 70818 mounted = false; 70819 run_all(dispose); 70820 } 70821 }; 70822 } 70823 70824 // (105:6) {#if showCity} 70825 function create_if_block_5$3(ctx) { 70826 let div; 70827 let label; 70828 let t0_value = /*config*/ ctx[0].cityLabel + ""; 70829 let t0; 70830 let t1; 70831 let input; 70832 let input_placeholder_value; 70833 let mounted; 70834 let dispose; 70835 70836 return { 70837 c() { 70838 div = element("div"); 70839 label = element("label"); 70840 t0 = text(t0_value); 70841 t1 = space(); 70842 input = element("input"); 70843 attr(label, "for", "city"); 70844 attr(label, "class", "svelte-1lcs5wj"); 70845 attr(input, "id", "city"); 70846 attr(input, "type", "text"); 70847 input.required = /*showCity*/ ctx[5]; 70848 attr(input, "placeholder", input_placeholder_value = /*config*/ ctx[0].cityPlaceholder); 70849 attr(input, "class", "svelte-1lcs5wj"); 70850 attr(div, "class", "field svelte-1lcs5wj"); 70851 }, 70852 m(target, anchor) { 70853 insert(target, div, anchor); 70854 append(div, label); 70855 append(label, t0); 70856 append(div, t1); 70857 append(div, input); 70858 set_input_value(input, /*recipientAddress*/ ctx[2].city); 70859 70860 if (!mounted) { 70861 dispose = [ 70862 listen(input, "input", /*input_input_handler*/ ctx[15]), 70863 listen(input, "input", /*updateGiftRecipient*/ ctx[9]) 70864 ]; 70865 70866 mounted = true; 70867 } 70868 }, 70869 p(ctx, dirty) { 70870 if (dirty & /*config*/ 1 && t0_value !== (t0_value = /*config*/ ctx[0].cityLabel + "")) set_data(t0, t0_value); 70871 70872 if (dirty & /*showCity*/ 32) { 70873 input.required = /*showCity*/ ctx[5]; 70874 } 70875 70876 if (dirty & /*config*/ 1 && input_placeholder_value !== (input_placeholder_value = /*config*/ ctx[0].cityPlaceholder)) { 70877 attr(input, "placeholder", input_placeholder_value); 70878 } 70879 70880 if (dirty & /*recipientAddress*/ 4 && input.value !== /*recipientAddress*/ ctx[2].city) { 70881 set_input_value(input, /*recipientAddress*/ ctx[2].city); 70882 } 70883 }, 70884 d(detaching) { 70885 if (detaching) { 70886 detach(div); 70887 } 70888 70889 mounted = false; 70890 run_all(dispose); 70891 } 70892 }; 70893 } 70894 70895 // (119:6) {#if showCountry} 70896 function create_if_block_4$3(ctx) { 70897 let div; 70898 let billingcountry; 70899 let current; 70900 70901 billingcountry = new BillingCountry({ 70902 props: { 70903 formKey: "gift-recipient", 70904 config: { 70905 label: /*config*/ ctx[0].countryLabel, 70906 placeholder: /*config*/ ctx[0].countryPlaceholder, 70907 required: /*showCountry*/ ctx[7] 70908 }, 70909 value: /*recipientAddress*/ ctx[2].country, 70910 error: "", 70911 isPaymentForm: false, 70912 onChange: /*func*/ ctx[16], 70913 onFocus: func_1, 70914 onBlur: func_2 70915 } 70916 }); 70917 70918 return { 70919 c() { 70920 div = element("div"); 70921 create_component(billingcountry.$$.fragment); 70922 attr(div, "class", "field svelte-1lcs5wj"); 70923 }, 70924 m(target, anchor) { 70925 insert(target, div, anchor); 70926 mount_component(billingcountry, div, null); 70927 current = true; 70928 }, 70929 p(ctx, dirty) { 70930 const billingcountry_changes = {}; 70931 70932 if (dirty & /*config, showCountry*/ 129) billingcountry_changes.config = { 70933 label: /*config*/ ctx[0].countryLabel, 70934 placeholder: /*config*/ ctx[0].countryPlaceholder, 70935 required: /*showCountry*/ ctx[7] 70936 }; 70937
70938 if (dirty & /*recipientAddress*/ 4) billingcountry_changes.value = /*recipientAddress*/ ctx[2].country; 70939 if (dirty & /*recipientAddress*/ 4) billingcountry_changes.onChange = /*func*/ ctx[16]; 70940 billingcountry.$set(billingcountry_changes); 70941 }, 70942 i(local) { 70943 if (current) return; 70944 transition_in(billingcountry.$$.fragment, local); 70945 current = true; 70946 }, 70947 o(local) { 70948 transition_out(billingcountry.$$.fragment, local); 70949 current = false; 70950 }, 70951 d(detaching) { 70952 if (detaching) { 70953 detach(div); 70954 } 70955 70956 destroy_component(billingcountry); 70957 } 70958 }; 70959 } 70960 70961 // (141:6) {#if showState} 70962 function create_if_block_3$4(ctx) { 70963 let div; 70964 let billingstate; 70965 let current; 70966 70967 billingstate = new BillingState({ 70968 props: { 70969 formKey: "gift-recipient", 70970 config: { 70971 label: /*config*/ ctx[0].stateLabel, 70972 placeholder: /*config*/ ctx[0].statePlaceholder, 70973 required: /*showState*/ ctx[6] && (/*recipientAddress*/ ctx[2].country === 'US' || /*recipientAddress*/ ctx[2].country === 'CA') 70974 }, 70975 value: /*recipientAddress*/ ctx[2].state, 70976 error: "", 70977 isPaymentForm: false, 70978 billingCountry: /*recipientAddress*/ ctx[2].country, 70979 onChange: /*func_3*/ ctx[17], 70980 onFocus: func_4, 70981 onBlur: func_5 70982 } 70983 }); 70984 70985 return { 70986 c() { 70987 div = element("div"); 70988 create_component(billingstate.$$.fragment); 70989 attr(div, "class", "field svelte-1lcs5wj"); 70990 }, 70991 m(target, anchor) { 70992 insert(target, div, anchor); 70993 mount_component(billingstate, div, null); 70994 current = true; 70995 }, 70996 p(ctx, dirty) { 70997 const billingstate_changes = {}; 70998 70999 if (dirty & /*config, showState, recipientAddress*/ 69) billingstate_changes.config = { 71000 label: /*config*/ ctx[0].stateLabel, 71001 placeholder: /*config*/ ctx[0].statePlaceholder, 71002 required: /*showState*/ ctx[6] && (/*recipientAddress*/ ctx[2].country === 'US' || /*recipientAddress*/ ctx[2].country === 'CA') 71003 }; 71004 71005 if (dirty & /*recipientAddress*/ 4) billingstate_changes.value = /*recipientAddress*/ ctx[2].state; 71006 if (dirty & /*recipientAddress*/ 4) billingstate_changes.billingCountry = /*recipientAddress*/ ctx[2].country; 71007 if (dirty & /*recipientAddress*/ 4) billingstate_changes.onChange = /*func_3*/ ctx[17]; 71008 billingstate.$set(billingstate_changes); 71009 }, 71010 i(local) { 71011 if (current) return; 71012 transition_in(billingstate.$$.fragment, local); 71013 current = true; 71014 }, 71015 o(local) { 71016 transition_out(billingstate.$$.fragment, local); 71017 current = false; 71018 }, 71019 d(detaching) { 71020 if (detaching) { 71021 detach(div); 71022 } 71023 71024 destroy_component(billingstate); 71025 } 71026 }; 71027 } 71028 71029 // (164:6) {#if showPostalCode} 71030 function create_if_block_2$7(ctx) { 71031 let div; 71032 let label; 71033 let t0_value = /*config*/ ctx[0].postalCodeLabel + ""; 71034 let t0; 71035 let t1; 71036 let input; 71037 let input_placeholder_value; 71038 let mounted; 71039 let dispose; 71040 71041 return { 71042 c() { 71043 div = element("div"); 71044 label = element("label"); 71045 t0 = text(t0_value); 71046 t1 = space(); 71047 input = element("input"); 71048 attr(label, "for", "postalCode"); 71049 attr(label, "class", "svelte-1lcs5wj"); 71050 attr(input, "id", "postalCode"); 71051 attr(input, "type", "text"); 71052 input.required = /*showPostalCode*/ ctx[4]; 71053 attr(input, "placeholder", input_placeholder_value = /*config*/ ctx[0].postalCodePlaceholder); 71054 attr(input, "class", "svelte-1lcs5wj"); 71055 attr(div, "class", "field svelte-1lcs5wj"); 71056 }, 71057 m(target, anchor) { 71058 insert(target, div, anchor); 71059 append(div, label); 71060 append(label, t0); 71061 append(div, t1); 71062 append(div, input); 71063 set_input_value(input, /*recipientAddress*/ ctx[2].postalCode); 71064 71065 if (!mounted) { 71066 dispose = [ 71067 listen(input, "input", /*input_input_handler_1*/ ctx[18]), 71068 listen(input, "input", /*updateGiftRecipient*/ ctx[9]) 71069 ]; 71070 71071 mounted = true; 71072 } 71073 }, 71074 p(ctx, dirty) { 71075 if (dirty & /*config*/ 1 && t0_value !== (t0_value = /*config*/ ctx[0].postalCodeLabel + "")) set_data(t0, t0_value); 71076 71077 if (dirty & /*showPostalCode*/ 16) { 71078 input.required = /*showPostalCode*/ ctx[4]; 71079 } 71080 71081 if (dirty & /*config*/ 1 && input_placeholder_value !== (input_placeholder_value = /*config*/ ctx[0].postalCodePlaceholder)) { 71082 attr(input, "placeholder", input_placeholder_value); 71083 } 71084
71085 if (dirty & /*recipientAddress*/ 4 && input.value !== /*recipientAddress*/ ctx[2].postalCode) { 71086 set_input_value(input, /*recipientAddress*/ ctx[2].postalCode); 71087 } 71088 }, 71089 d(detaching) { 71090 if (detaching) { 71091 detach(div); 71092 } 71093 71094 mounted = false; 71095 run_all(dispose); 71096 } 71097 }; 71098 } 71099 71100 // (178:4) {#if addressError} 71101 function create_if_block_1$9(ctx) { 71102 let div; 71103 let t; 71104 71105 return { 71106 c() { 71107 div = element("div"); 71108 t = text(/*addressError*/ ctx[1]); 71109 attr(div, "class", "error-text svelte-1lcs5wj"); 71110 }, 71111 m(target, anchor) { 71112 insert(target, div, anchor); 71113 append(div, t); 71114 }, 71115 p(ctx, dirty) { 71116 if (dirty & /*addressError*/ 2) set_data(t, /*addressError*/ ctx[1]); 71117 }, 71118 d(detaching) { 71119 if (detaching) { 71120 detach(div); 71121 } 71122 } 71123 }; 71124 } 71125 71126 function create_fragment$e(ctx) { 71127 let if_block_anchor; 71128 let current; 71129 let if_block = /*showAnyAddress*/ ctx[8] && create_if_block$a(ctx); 71130 71131 return { 71132 c() { 71133 if (if_block) if_block.c(); 71134 if_block_anchor = empty(); 71135 }, 71136 m(target, anchor) { 71137 if (if_block) if_block.m(target, anchor); 71138 insert(target, if_block_anchor, anchor); 71139 current = true; 71140 }, 71141 p(ctx, [dirty]) { 71142 if (/*showAnyAddress*/ ctx[8]) { 71143 if (if_block) { 71144 if_block.p(ctx, dirty); 71145 71146 if (dirty & /*showAnyAddress*/ 256) { 71147 transition_in(if_block, 1); 71148 } 71149 } else { 71150 if_block = create_if_block$a(ctx); 71151 if_block.c(); 71152 transition_in(if_block, 1); 71153 if_block.m(if_block_anchor.parentNode, if_block_anchor); 71154 } 71155 } else if (if_block) { 71156 group_outros(); 71157 71158 transition_out(if_block, 1, 1, () => { 71159 if_block = null; 71160 }); 71161 71162 check_outros(); 71163 } 71164 }, 71165 i(local) { 71166 if (current) return; 71167 transition_in(if_block); 71168 current = true; 71169 }, 71170 o(local) { 71171 transition_out(if_block); 71172 current = false; 71173 }, 71174 d(detaching) { 71175 if (detaching) { 71176 detach(if_block_anchor); 71177 } 71178 71179 if (if_block) if_block.d(detaching); 71180 } 71181 }; 71182 } 71183 71184 const func_1 = () => { 71185 71186 }; 71187 71188 const func_2 = () => { 71189 71190 }; 71191 71192 const func_4 = () => { 71193 71194 }; 71195 71196 const func_5 = () => { 71197 71198 }; 71199 71200 function instance$e($$self, $$props, $$invalidate) { 71201 let showAddress; 71202 let showPostalCode; 71203 let showCountry; 71204 let showState; 71205 let showCity; 71206 let showAnyAddress; 71207 let { formState } = $$props; 71208 let { formActions } = $$props; 71209 let { config } = $$props; 71210 let { form } = $$props; 71211 const dispatch = createEventDispatcher(); 71212 let addressError = ''; 71213 71214 // Initialize recipient address fields 71215 let recipientAddress = { 71216 addressLine1: formState.giftRecipient?.recipientAddress?.addressLine1 || '', 71217 addressLine2: formState.giftRecipient?.recipientAddress?.addressLine2 || '', 71218 city: formState.giftRecipient?.recipientAddress?.city || '', 71219 state: formState.giftRecipient?.recipientAddress?.state || '', 71220 country: formState.giftRecipient?.recipientAddress?.country || '', 71221 postalCode: formState.giftRecipient?.recipientAddress?.postalCode || '' 71222 }; 71223 71224 // Update form state when inputs change 71225 const updateGiftRecipient = () => { 71226 const updatedGiftRecipient = { 71227 ...formState.giftRecipient || {}, 71228 recipientAddress 71229 }; 71230 71231 formActions.updateFormState({ giftRecipient: updatedGiftRecipient }); 71232 validateForm(); 71233 }; 71234 71235 const validateForm = () => { 71236 let isValid = true; 71237 let errorMessage = ''; 71238 71239 // Validate country if shown 71240 if (showCountry && !recipientAddress.country.trim()) { 71241 isValid = false; 71242 errorMessage = config.countryRequiredError; 71243 } 71244 71245 // Validate state if shown and country requires it 71246 if (showState && (recipientAddress.country === 'US' || recipientAddress.country === 'CA') && !recipientAddress.state.trim()) { 71247 isValid = false; 71248 errorMessage = config.stateRequiredError; 71249 } 71250 71251 // Validate city if shown 71252 if (showCity && !recipientAddress.city.trim()) { 71253 isValid = false; 71254 errorMessage = config.cityRequiredError; 71255 } 71256 71257 // Validate postal code if shown 71258 if (showPostalCode && !errorMessage) { 71259 if (!recipientAddress.postalCode.trim()) { 71260 isValid = false; 71261 errorMessage = config.postalCodeRequiredError; 71262 } 71263 } 71264 71265 // Validate street address if shown 71266 if (showAddress && !errorMessage) { 71267 if (!recipientAddress.addressLine1.trim()) { 71268 isValid = false;
71269 errorMessage = config.addressRequiredError; 71270 } 71271 } 71272 71273 $$invalidate(1, addressError = errorMessage); 71274 71275 // Dispatch event for form validity 71276 dispatch('validity', { isValid }); 71277 }; 71278 71279 function input0_input_handler() { 71280 recipientAddress.addressLine1 = this.value; 71281 $$invalidate(2, recipientAddress); 71282 } 71283 71284 function input1_input_handler() { 71285 recipientAddress.addressLine2 = this.value; 71286 $$invalidate(2, recipientAddress); 71287 } 71288 71289 function input_input_handler() { 71290 recipientAddress.city = this.value; 71291 $$invalidate(2, recipientAddress); 71292 } 71293 71294 const func = value => { 71295 $$invalidate(2, recipientAddress.country = value, recipientAddress); 71296 updateGiftRecipient(); 71297 }; 71298 71299 const func_3 = value => { 71300 $$invalidate(2, recipientAddress.state = value, recipientAddress); 71301 updateGiftRecipient(); 71302 }; 71303 71304 function input_input_handler_1() { 71305 recipientAddress.postalCode = this.value; 71306 $$invalidate(2, recipientAddress); 71307 } 71308 71309 $$self.$$set = $$props => { 71310 if ('formState' in $$props) $$invalidate(10, formState = $$props.formState);
71311 if ('formActions' in $$props) $$invalidate(11, formActions = $$props.formActions); 71312 if ('config' in $$props) $$invalidate(0, config = $$props.config); 71313 if ('form' in $$props) $$invalidate(12, form = $$props.form); 71314 }; 71315 71316 $$self.$$.update = () => { 71317 if ($$self.$$.dirty & /*config*/ 1) { 71318 // Use config values directly - they are reactive props 71319 $$invalidate(3, showAddress = config?.showAddress ?? false); 71320 } 71321 71322 if ($$self.$$.dirty & /*config*/ 1) { 71323 $$invalidate(4, showPostalCode = config?.showPostalCode ?? false); 71324 } 71325 71326 if ($$self.$$.dirty & /*config*/ 1) { 71327 $$invalidate(7, showCountry = config?.showCountry ?? false); 71328 } 71329 71330 if ($$self.$$.dirty & /*config*/ 1) { 71331 $$invalidate(6, showState = config?.showState ?? false); 71332 } 71333 71334 if ($$self.$$.dirty & /*config*/ 1) { 71335 $$invalidate(5, showCity = config?.showCity ?? false); 71336 } 71337 }; 71338 71339 $$invalidate(8, showAnyAddress = true); 71340 71341 return [ 71342 config, 71343 addressError, 71344 recipientAddress, 71345 showAddress, 71346 showPostalCode, 71347 showCity, 71348 showState, 71349 showCountry, 71350 showAnyAddress, 71351 updateGiftRecipient, 71352 formState, 71353 formActions, 71354 form, 71355 input0_input_handler, 71356 input1_input_handler, 71357 input_input_handler, 71358 func, 71359 func_3, 71360 input_input_handler_1 71361 ]; 71362 } 71363 71364 class RecipientAddress extends SvelteComponent { 71365 constructor(options) { 71366 super(); 71367 71368 init(this, options, instance$e, create_fragment$e, safe_not_equal, { 71369 formState: 10, 71370 formActions: 11, 71371 config: 0, 71372 form: 12 71373 }); 71374 } 71375 } 71376 71377 const recipientAddressFactory = { 71378 matches: (sectionElement) => sectionElement.type === elementTypes.RECIPIENT_ADDRESS, 71379 create: (form, formState, formActions, elementConfig) => { 71380 // Determine if address is required from form configuration 71381 const typeConfiguration = formConfigAs(form); 71382 const requires_address = typeConfiguration.requires_address; 71383 // If requires_address is false, don't render the component at all 71384 if (requires_address === false) { 71385 return { 71386 component: null, 71387 props: {}, 71388 isValid: true 71389 }; 71390 } 71391 // Resolve all labels and error messages through language pack service 71392 const resolvedConfig = { 71393 label: resolveLanguagePackKeyTyped(form, 'forms.gift.recipient-address', elementConfig.label), 71394 addressLine1Label: resolveLanguagePackKeyTyped(form, 'forms.gift.address-line1', elementConfig.addressLine1Label), 71395 addressLine2Label: resolveLanguagePackKeyTyped(form, 'forms.gift.address-line2', elementConfig.addressLine2Label), 71396 cityLabel: resolveLanguagePackKeyTyped(form, 'forms.gift.city', elementConfig.cityLabel), 71397 stateLabel: resolveLanguagePackKeyTyped(form, 'forms.gift.state', elementConfig.stateLabel), 71398 countryLabel: resolveLanguagePackKeyTyped(form, 'forms.gift.country', elementConfig.countryLabel), 71399 postalCodeLabel: resolveLanguagePackKeyTyped(form, 'forms.gift.postal-code', elementConfig.postalCodeLabel), 71400 addressRequiredError: resolveLanguagePackKeyTyped(form, 'forms.gift.address-required', elementConfig.addressRequiredError), 71401 countryRequiredError: resolveLanguagePackKeyTyped(form, 'forms.gift.country-required', elementConfig.countryRequiredError), 71402 stateRequiredError: resolveLanguagePackKeyTyped(form, 'forms.gift.state-required', elementConfig.stateRequiredError), 71403 cityRequiredError: resolveLanguagePackKeyTyped(form, 'forms.gift.city-required', elementConfig.cityRequiredError), 71404 postalCodeRequiredError: resolveLanguagePackKeyTyped(form, 'forms.gift.postal-code-required', elementConfig.postalCodeRequiredError), 71405 addressLine1Placeholder: resolveLanguagePackKeyTyped(form, 'forms.gift.address-line1-placeholder', elementConfig.addressLine1Placeholder), 71406 addressLine2Placeholder: resolveLanguagePackKeyTyped(form, 'forms.gift.address-line2-placeholder', elementConfig.addressLine2Placeholder),
71407 cityPlaceholder: resolveLanguagePackKeyTyped(form, 'forms.gift.city-placeholder', elementConfig.cityPlaceholder), 71408 statePlaceholder: resolveLanguagePackKeyTyped(form, 'forms.gift.state-placeholder', elementConfig.statePlaceholder), 71409 countryPlaceholder: resolveLanguagePackKeyTyped(form, 'forms.gift.country-placeholder', elementConfig.countryPlaceholder), 71410 postalCodePlaceholder: resolveLanguagePackKeyTyped(form, 'forms.gift.postal-code-placeholder', elementConfig.postalCodePlaceholder), 71411 // Field visibility controls - pass through from element config 71412 showAddress: elementConfig.showAddress, 71413 showPostalCode: elementConfig.showPostalCode, 71414 showCountry: elementConfig.showCountry, 71415 showState: elementConfig.showState, 71416 showCity: elementConfig.showCity, 71417 }; 71418 // Determine if the input is valid based on granular field requirements 71419 const giftRecipient = (formState.giftRecipient || {}); 71420 const recipientAddress = giftRecipient.recipientAddress || {}; 71421 let isValid = true; 71422 // Calculate which fields are shown (same logic as component) 71423 const showAddress = elementConfig.showAddress ?? false; 71424 const showPostalCode = elementConfig.showPostalCode ?? false; 71425 const showCountry = elementConfig.showCountry ?? false; 71426 const showState = elementConfig.showState ?? false; 71427 const showCity = elementConfig.showCity ?? false; 71428 // Validate address if required 71429 if (showAddress && !recipientAddress.addressLine1?.trim()) { 71430 isValid = false; 71431 } 71432 // Validate postal code if required 71433 if (showPostalCode && !recipientAddress.postalCode?.trim()) { 71434 isValid = false; 71435 } 71436 // Validate country if required 71437 if (showCountry && !recipientAddress.country?.trim()) { 71438 isValid = false; 71439 } 71440 // Validate state if required (only for US/CA when showState is enabled) 71441 if (showState && (recipientAddress.country === 'US' || recipientAddress.country === 'CA') && !recipientAddress.state?.trim()) { 71442 isValid = false; 71443 } 71444 // Validate city if required 71445 if (showCity && !recipientAddress.city?.trim()) { 71446 isValid = false; 71447 } 71448 return { 71449 component: RecipientAddress, 71450 props: { 71451 config: resolvedConfig, 71452 form, 71453 formState, 71454 formActions, 71455 }, 71456 isValid 71457 }; 71458 } 71459 }; 71460 71461 /* src/components/elements/recipientMessage/RecipientMessage.svelte generated by Svelte v4.2.12 */ 71462 71463 function create_fragment$d(ctx) { 71464 let div1; 71465 let div0; 71466 let label; 71467 let t0_value = /*config*/ ctx[0].messageLabel + ""; 71468 let t0; 71469 let t1; 71470 let textarea; 71471 let textarea_placeholder_value; 71472 let mounted; 71473 let dispose; 71474 71475 return { 71476 c() { 71477 div1 = element("div"); 71478 div0 = element("div"); 71479 label = element("label"); 71480 t0 = text(t0_value); 71481 t1 = space(); 71482 textarea = element("textarea"); 71483 attr(label, "for", "customMessage"); 71484 attr(label, "class", "svelte-h6tpk7"); 71485 attr(textarea, "id", "customMessage"); 71486 attr(textarea, "placeholder", textarea_placeholder_value = /*config*/ ctx[0].messagePlaceholder); 71487 attr(textarea, "class", "svelte-h6tpk7"); 71488 attr(div0, "class", "field svelte-h6tpk7"); 71489 attr(div1, "class", "recipient-message-section svelte-h6tpk7"); 71490 }, 71491 m(target, anchor) { 71492 insert(target, div1, anchor); 71493 append(div1, div0); 71494 append(div0, label); 71495 append(label, t0); 71496 append(div0, t1); 71497 append(div0, textarea); 71498 set_input_value(textarea, /*customMessage*/ ctx[1]); 71499 71500 if (!mounted) { 71501 dispose = [ 71502 listen(textarea, "input", /*textarea_input_handler*/ ctx[5]), 71503 listen(textarea, "input", /*updateGiftRecipient*/ ctx[2]) 71504 ]; 71505 71506 mounted = true; 71507 } 71508 }, 71509 p(ctx, [dirty]) { 71510 if (dirty & /*config*/ 1 && t0_value !== (t0_value = /*config*/ ctx[0].messageLabel + "")) set_data(t0, t0_value); 71511
71512 if (dirty & /*config*/ 1 && textarea_placeholder_value !== (textarea_placeholder_value = /*config*/ ctx[0].messagePlaceholder)) { 71513 attr(textarea, "placeholder", textarea_placeholder_value); 71514 } 71515 71516 if (dirty & /*customMessage*/ 2) { 71517 set_input_value(textarea, /*customMessage*/ ctx[1]); 71518 } 71519 }, 71520 i: noop, 71521 o: noop, 71522 d(detaching) { 71523 if (detaching) { 71524 detach(div1); 71525 } 71526 71527 mounted = false; 71528 run_all(dispose); 71529 } 71530 }; 71531 } 71532 71533 function instance$d($$self, $$props, $$invalidate) { 71534 let { formState } = $$props; 71535 let { formActions } = $$props; 71536 let { config } = $$props; 71537 const dispatch = createEventDispatcher(); 71538 let customMessage = formState.giftRecipient?.customMessage || ''; 71539 71540 // Update form state when input changes 71541 const updateGiftRecipient = () => { 71542 const updatedGiftRecipient = { 71543 ...formState.giftRecipient || {}, 71544 customMessage 71545 }; 71546 71547 formActions.updateFormState({ giftRecipient: updatedGiftRecipient }); 71548 }; 71549 71550 // Initial validation 71551 onMount(() => { 71552 // Message is always valid as it's optional 71553 dispatch('validity', { isValid: true }); 71554 }); 71555 71556 function textarea_input_handler() { 71557 customMessage = this.value; 71558 $$invalidate(1, customMessage); 71559 } 71560 71561 $$self.$$set = $$props => {
71562 if ('formState' in $$props) $$invalidate(3, formState = $$props.formState); 71563 if ('formActions' in $$props) $$invalidate(4, formActions = $$props.formActions); 71564 if ('config' in $$props) $$invalidate(0, config = $$props.config); 71565 }; 71566 71567 return [ 71568 config, 71569 customMessage, 71570 updateGiftRecipient, 71571 formState, 71572 formActions, 71573 textarea_input_handler 71574 ]; 71575 } 71576 71577 class RecipientMessage extends SvelteComponent { 71578 constructor(options) { 71579 super(); 71580 init(this, options, instance$d, create_fragment$d, safe_not_equal, { formState: 3, formActions: 4, config: 0 }); 71581 } 71582 } 71583 71584 const recipientMessageFactory = { 71585 matches: (sectionElement) => sectionElement.type === elementTypes.RECIPIENT_MESSAGE, 71586 create: (form, formState, formActions, elementConfig) => { 71587 // Resolve all labels through language pack service 71588 const resolvedConfig = { 71589 messageLabel: resolveLanguagePackKeyTyped(form, 'forms.gift.custom-message', elementConfig.messageLabel), 71590 messagePlaceholder: resolveLanguagePackKeyTyped(form, 'forms.gift.message-placeholder', elementConfig.messagePlaceholder), 71591 }; 71592 // Message is always valid as it's optional 71593 const isValid = true; 71594 return { 71595 component: RecipientMessage, 71596 props: { 71597 config: resolvedConfig, 71598 form, 71599 formState, 71600 formActions, 71601 }, 71602 isValid 71603 }; 71604 } 71605 }; 71606 71607 /* src/components/elements/giftCode/GiftCode.svelte generated by Svelte v4.2.12 */ 71608 71609 function create_if_block_1$8(ctx) { 71610 let label_1; 71611 let t0; 71612 let t1; 71613 let if_block = /*required*/ ctx[3] && create_if_block_2$6(); 71614 71615 return { 71616 c() { 71617 label_1 = element("label"); 71618 t0 = text(/*label*/ ctx[1]); 71619 t1 = space(); 71620 if (if_block) if_block.c(); 71621 attr(label_1, "for", "zephr-form-gift-code"); 71622 attr(label_1, "class", "svelte-764k6k"); 71623 }, 71624 m(target, anchor) { 71625 insert(target, label_1, anchor); 71626 append(label_1, t0); 71627 append(label_1, t1); 71628 if (if_block) if_block.m(label_1, null); 71629 }, 71630 p(ctx, dirty) { 71631 if (dirty & /*label*/ 2) set_data(t0, /*label*/ ctx[1]); 71632 71633 if (/*required*/ ctx[3]) { 71634 if (if_block) ; else { 71635 if_block = create_if_block_2$6(); 71636 if_block.c(); 71637 if_block.m(label_1, null); 71638 } 71639 } else if (if_block) { 71640 if_block.d(1); 71641 if_block = null; 71642 } 71643 }, 71644 d(detaching) { 71645 if (detaching) { 71646 detach(label_1); 71647 } 71648 71649 if (if_block) if_block.d(); 71650 } 71651 }; 71652 } 71653 71654 // (22:6) {#if required} 71655 function create_if_block_2$6(ctx) { 71656 let span; 71657 71658 return { 71659 c() { 71660 span = element("span"); 71661 span.textContent = "*"; 71662 attr(span, "class", "required svelte-764k6k"); 71663 }, 71664 m(target, anchor) { 71665 insert(target, span, anchor); 71666 }, 71667 d(detaching) { 71668 if (detaching) { 71669 detach(span); 71670 } 71671 } 71672 }; 71673 } 71674 71675 // (40:2) {#if errorMessage} 71676 function create_if_block$9(ctx) { 71677 let div; 71678 let t; 71679 71680 return { 71681 c() { 71682 div = element("div"); 71683 t = text(/*errorMessage*/ ctx[7]); 71684 attr(div, "class", "error-message svelte-764k6k"); 71685 }, 71686 m(target, anchor) { 71687 insert(target, div, anchor); 71688 append(div, t); 71689 }, 71690 p(ctx, dirty) { 71691 if (dirty & /*errorMessage*/ 128) set_data(t, /*errorMessage*/ ctx[7]); 71692 }, 71693 d(detaching) { 71694 if (detaching) { 71695 detach(div); 71696 } 71697 } 71698 }; 71699 } 71700 71701 function create_fragment$c(ctx) { 71702 let div; 71703 let t0; 71704 let input; 71705 let t1; 71706 let mounted; 71707 let dispose; 71708 let if_block0 = /*label*/ ctx[1] && create_if_block_1$8(ctx); 71709 let if_block1 = /*errorMessage*/ ctx[7] && create_if_block$9(ctx); 71710 71711 return { 71712 c() { 71713 div = element("div"); 71714 if (if_block0) if_block0.c(); 71715 t0 = space(); 71716 input = element("input"); 71717 t1 = space(); 71718 if (if_block1) if_block1.c(); 71719 attr(input, "id", "zephr-form-gift-code"); 71720 attr(input, "type", "text"); 71721 attr(input, "placeholder", /*placeholder*/ ctx[2]); 71722 input.disabled = /*disabled*/ ctx[4]; 71723 input.required = /*required*/ ctx[3]; 71724 input.value = /*value*/ ctx[0]; 71725 attr(input, "maxlength", "16"); 71726 attr(input, "class", "svelte-764k6k"); 71727 toggle_class(input, "error", !!/*errorMessage*/ ctx[7]); 71728 attr(div, "class", "zephr-form-input-wrapper svelte-764k6k"); 71729 }, 71730 m(target, anchor) { 71731 insert(target, div, anchor); 71732 if (if_block0) if_block0.m(div, null); 71733 append(div, t0); 71734 append(div, input); 71735 append(div, t1); 71736 if (if_block1) if_block1.m(div, null); 71737 71738 if (!mounted) { 71739 dispose = [ 71740 listen(input, "input", /*handleChange*/ ctx[8]),
71741 listen(input, "focus", function () { 71742 if (is_function(/*onFocus*/ ctx[5])) /*onFocus*/ ctx[5].apply(this, arguments); 71743 }), 71744 listen(input, "blur", function () { 71745 if (is_function(/*onBlur*/ ctx[6])) /*onBlur*/ ctx[6].apply(this, arguments); 71746 }) 71747 ]; 71748 71749 mounted = true; 71750 } 71751 }, 71752 p(new_ctx, [dirty]) { 71753 ctx = new_ctx; 71754 71755 if (/*label*/ ctx[1]) { 71756 if (if_block0) { 71757 if_block0.p(ctx, dirty); 71758 } else { 71759 if_block0 = create_if_block_1$8(ctx); 71760 if_block0.c(); 71761 if_block0.m(div, t0); 71762 } 71763 } else if (if_block0) { 71764 if_block0.d(1); 71765 if_block0 = null; 71766 } 71767 71768 if (dirty & /*placeholder*/ 4) { 71769 attr(input, "placeholder", /*placeholder*/ ctx[2]); 71770 } 71771 71772 if (dirty & /*disabled*/ 16) { 71773 input.disabled = /*disabled*/ ctx[4]; 71774 } 71775 71776 if (dirty & /*required*/ 8) { 71777 input.required = /*required*/ ctx[3]; 71778 } 71779 71780 if (dirty & /*value*/ 1 && input.value !== /*value*/ ctx[0]) { 71781 input.value = /*value*/ ctx[0]; 71782 } 71783 71784 if (dirty & /*errorMessage*/ 128) { 71785 toggle_class(input, "error", !!/*errorMessage*/ ctx[7]); 71786 } 71787 71788 if (/*errorMessage*/ ctx[7]) { 71789 if (if_block1) { 71790 if_block1.p(ctx, dirty); 71791 } else { 71792 if_block1 = create_if_block$9(ctx); 71793 if_block1.c(); 71794 if_block1.m(div, null); 71795 } 71796 } else if (if_block1) { 71797 if_block1.d(1); 71798 if_block1 = null; 71799 } 71800 }, 71801 i: noop, 71802 o: noop, 71803 d(detaching) { 71804 if (detaching) { 71805 detach(div); 71806 } 71807 71808 if (if_block0) if_block0.d(); 71809 if (if_block1) if_block1.d(); 71810 mounted = false; 71811 run_all(dispose); 71812 } 71813 }; 71814 } 71815 71816 function instance$c($$self, $$props, $$invalidate) { 71817 let errorMessage; 71818 let { value = "" } = $$props; 71819 let { label = "" } = $$props; 71820 let { placeholder = "" } = $$props; 71821 let { required = false } = $$props; 71822 let { disabled = false } = $$props; 71823 let { hasError = false } = $$props; 71824 let { error = false } = $$props; 71825 71826 let { onChange = _value => { 71827 71828 } } = $$props; 71829 71830 let { onFocus = () => { 71831 71832 } } = $$props; 71833 71834 let { onBlur = () => { 71835 71836 } } = $$props; 71837 71838 const handleChange = event => { 71839 const newValue = event.target.value; 71840 onChange(newValue); 71841 }; 71842 71843 $$self.$$set = $$props => {
71844 if ('value' in $$props) $$invalidate(0, value = $$props.value); 71845 if ('label' in $$props) $$invalidate(1, label = $$props.label); 71846 if ('placeholder' in $$props) $$invalidate(2, placeholder = $$props.placeholder); 71847 if ('required' in $$props) $$invalidate(3, required = $$props.required); 71848 if ('disabled' in $$props) $$invalidate(4, disabled = $$props.disabled); 71849 if ('hasError' in $$props) $$invalidate(9, hasError = $$props.hasError); 71850 if ('error' in $$props) $$invalidate(10, error = $$props.error); 71851 if ('onChange' in $$props) $$invalidate(11, onChange = $$props.onChange); 71852 if ('onFocus' in $$props) $$invalidate(5, onFocus = $$props.onFocus); 71853 if ('onBlur' in $$props) $$invalidate(6, onBlur = $$props.onBlur); 71854 }; 71855 71856 $$self.$$.update = () => { 71857 if ($$self.$$.dirty & /*hasError, error*/ 1536) { 71858 $$invalidate(7, errorMessage = hasError || error); 71859 } 71860 }; 71861 71862 return [ 71863 value, 71864 label, 71865 placeholder, 71866 required, 71867 disabled, 71868 onFocus, 71869 onBlur, 71870 errorMessage, 71871 handleChange, 71872 hasError, 71873 error, 71874 onChange 71875 ]; 71876 } 71877 71878 class GiftCode extends SvelteComponent { 71879 constructor(options) { 71880 super(); 71881 71882 init(this, options, instance$c, create_fragment$c, safe_not_equal, { 71883 value: 0, 71884 label: 1, 71885 placeholder: 2, 71886 required: 3, 71887 disabled: 4, 71888 hasError: 9, 71889 error: 10, 71890 onChange: 11, 71891 onFocus: 5, 71892 onBlur: 6 71893 }); 71894 } 71895 } 71896 71897 const factory$2 = { 71898 matches: (sectionElement) => sectionElement.type === elementTypes.GIFT_CODE, 71899 create: (form, formState, formActions, config) => { 71900 const { disabled, label, placeholder, required } = config; 71901 const error = serverErrorForElement(elementTypes.GIFT_CODE, formState); 71902 const onChange = (value) => { 71903 formActions.updateFormState({ 71904 giftCode: value, 71905 giftCodeError: undefined, 71906 }); 71907 logDataLayerEvent(form, 'zephr_form_input_change', { 71908 field: 'gift-code', 71909 inputName: `zephr-form-gift-code-${form.uniqueKey}`, 71910 sectionId: formState.currentSection.type, 71911 }); 71912 }; 71913 const onFocus = () => logDataLayerEvent(form, 'zephr_form_input_focus', { 71914 field: 'gift-code', 71915 inputName: `zephr-form-gift-code-${form.uniqueKey}`, 71916 sectionId: formState.currentSection.type, 71917 }); 71918 const onBlur = () => logDataLayerEvent(form, 'zephr_form_input_blur', { 71919 field: 'gift-code', 71920 inputName: `zephr-form-gift-code-${form.uniqueKey}`, 71921 sectionId: formState.currentSection.type, 71922 }); 71923 const giftCode = formState.giftCode || ''; 71924 const isValid = (!required || !!giftCode) && giftCode.length === 16; 71925 const errorMessage = error 71926 ? resolveErrorLanguagePackKey(form, error) 71927 : formState.giftCodeError; 71928 return { 71929 component: GiftCode, 71930 props: { 71931 hasError: errorMessage, 71932 label, 71933 placeholder, 71934 required, 71935 disabled, 71936 onChange, 71937 onFocus, 71938 onBlur, 71939 value: formState.giftCode || '', 71940 }, 71941 isValid, 71942 }; 71943 }, 71944 }; 71945 71946 /* src/components/elements/giftSubscriptionsList/GiftSubscriptionsListBoxItem.svelte generated by Svelte v4.2.12 */ 71947 71948 function get_each_context$4(ctx, list, i) { 71949 const child_ctx = ctx.slice(); 71950 child_ctx[25] = list[i]; 71951 return child_ctx; 71952 } 71953 71954 // (30:39) 71955 function create_if_block_14(ctx) { 71956 let div; 71957 let t; 71958 71959 return { 71960 c() { 71961 div = element("div"); 71962 t = text(/*redeemedBannerText*/ ctx[5]); 71963 attr(div, "class", "zephr-banner-top svelte-srvimy"); 71964 }, 71965 m(target, anchor) { 71966 insert(target, div, anchor); 71967 append(div, t); 71968 }, 71969 p(ctx, dirty) { 71970 if (dirty & /*redeemedBannerText*/ 32) set_data(t, /*redeemedBannerText*/ ctx[5]); 71971 }, 71972 d(detaching) { 71973 if (detaching) { 71974 detach(div); 71975 } 71976 } 71977 }; 71978 } 71979 71980 // (26:2) {#if gift.status === 'PENDING'} 71981 function create_if_block_13(ctx) { 71982 let div; 71983 let t0; 71984 let t1; 71985 let t2_value = /*gift*/ ctx[0].subscriptionStartDate + ""; 71986 let t2; 71987 71988 return { 71989 c() { 71990 div = element("div"); 71991 t0 = text(/*pendingBannerText*/ ctx[4]); 71992 t1 = space(); 71993 t2 = text(t2_value); 71994 attr(div, "class", "zephr-banner-top svelte-srvimy"); 71995 }, 71996 m(target, anchor) { 71997 insert(target, div, anchor); 71998 append(div, t0); 71999 append(div, t1); 72000 append(div, t2); 72001 }, 72002 p(ctx, dirty) {
72003 if (dirty & /*pendingBannerText*/ 16) set_data(t0, /*pendingBannerText*/ ctx[4]); 72004 if (dirty & /*gift*/ 1 && t2_value !== (t2_value = /*gift*/ ctx[0].subscriptionStartDate + "")) set_data(t2, t2_value); 72005 }, 72006 d(detaching) { 72007 if (detaching) { 72008 detach(div); 72009 } 72010 } 72011 }; 72012 } 72013 72014 // (38:6) {#if element === 'subscription_information' && !elementsHide.subscriptionInformation} 72015 function create_if_block_8(ctx) { 72016 let t0; 72017 let t1; 72018 let t2; 72019 let if_block3_anchor; 72020 let if_block0 = (/*gift*/ ctx[0].recipientFirstName || /*gift*/ ctx[0].recipientLastName || /*gift*/ ctx[0].is_recipient) && create_if_block_12(ctx); 72021 let if_block1 = /*gift*/ ctx[0].subscriptionType && create_if_block_11(ctx); 72022 let if_block2 = /*gift*/ ctx[0].subscriptionStartDate && create_if_block_10(ctx); 72023 let if_block3 = /*gift*/ ctx[0].subscriptionEndDate && create_if_block_9(ctx); 72024 72025 return { 72026 c() { 72027 if (if_block0) if_block0.c(); 72028 t0 = space(); 72029 if (if_block1) if_block1.c(); 72030 t1 = space(); 72031 if (if_block2) if_block2.c(); 72032 t2 = space(); 72033 if (if_block3) if_block3.c(); 72034 if_block3_anchor = empty(); 72035 }, 72036 m(target, anchor) { 72037 if (if_block0) if_block0.m(target, anchor); 72038 insert(target, t0, anchor); 72039 if (if_block1) if_block1.m(target, anchor); 72040 insert(target, t1, anchor); 72041 if (if_block2) if_block2.m(target, anchor); 72042 insert(target, t2, anchor); 72043 if (if_block3) if_block3.m(target, anchor); 72044 insert(target, if_block3_anchor, anchor); 72045 }, 72046 p(ctx, dirty) { 72047 if (/*gift*/ ctx[0].recipientFirstName || /*gift*/ ctx[0].recipientLastName || /*gift*/ ctx[0].is_recipient) { 72048 if (if_block0) { 72049 if_block0.p(ctx, dirty); 72050 } else { 72051 if_block0 = create_if_block_12(ctx); 72052 if_block0.c(); 72053 if_block0.m(t0.parentNode, t0); 72054 } 72055 } else if (if_block0) { 72056 if_block0.d(1); 72057 if_block0 = null; 72058 } 72059 72060 if (/*gift*/ ctx[0].subscriptionType) { 72061 if (if_block1) { 72062 if_block1.p(ctx, dirty); 72063 } else { 72064 if_block1 = create_if_block_11(ctx); 72065 if_block1.c(); 72066 if_block1.m(t1.parentNode, t1); 72067 } 72068 } else if (if_block1) { 72069 if_block1.d(1); 72070 if_block1 = null; 72071 } 72072 72073 if (/*gift*/ ctx[0].subscriptionStartDate) { 72074 if (if_block2) { 72075 if_block2.p(ctx, dirty); 72076 } else { 72077 if_block2 = create_if_block_10(ctx); 72078 if_block2.c(); 72079 if_block2.m(t2.parentNode, t2); 72080 } 72081 } else if (if_block2) { 72082 if_block2.d(1); 72083 if_block2 = null; 72084 } 72085 72086 if (/*gift*/ ctx[0].subscriptionEndDate) { 72087 if (if_block3) { 72088 if_block3.p(ctx, dirty); 72089 } else { 72090 if_block3 = create_if_block_9(ctx); 72091 if_block3.c(); 72092 if_block3.m(if_block3_anchor.parentNode, if_block3_anchor); 72093 } 72094 } else if (if_block3) { 72095 if_block3.d(1); 72096 if_block3 = null; 72097 } 72098 }, 72099 d(detaching) { 72100 if (detaching) { 72101 detach(t0); 72102 detach(t1); 72103 detach(t2); 72104 detach(if_block3_anchor); 72105 } 72106 72107 if (if_block0) if_block0.d(detaching); 72108 if (if_block1) if_block1.d(detaching); 72109 if (if_block2) if_block2.d(detaching); 72110 if (if_block3) if_block3.d(detaching); 72111 } 72112 }; 72113 } 72114 72115 // (39:8) {#if gift.recipientFirstName || gift.recipientLastName || gift.is_recipient} 72116 function create_if_block_12(ctx) { 72117 let div2; 72118 let span; 72119 let t0; 72120 let t1; 72121 let div0; 72122 let t2_value = (/*gift*/ ctx[0].recipientFirstName || '') + ""; 72123 let t2; 72124 let t3; 72125 let t4_value = (/*gift*/ ctx[0].recipientLastName || '') + ""; 72126 let t4; 72127 let t5; 72128 let div1; 72129 72130 let t6_value = (/*gift*/ ctx[0].status === 'REDEEMED' 72131 ? /*activeStatusText*/ ctx[6] 72132 : /*pendingStatusText*/ ctx[7]) + ""; 72133 72134 let t6; 72135 72136 return { 72137 c() { 72138 div2 = element("div"); 72139 span = element("span"); 72140 t0 = text(/*giftRecipientText*/ ctx[1]); 72141 t1 = space(); 72142 div0 = element("div"); 72143 t2 = text(t2_value); 72144 t3 = space(); 72145 t4 = text(t4_value); 72146 t5 = space(); 72147 div1 = element("div"); 72148 t6 = text(t6_value); 72149 attr(span, "class", "svelte-srvimy"); 72150 attr(div0, "class", "zephr-box-item-information svelte-srvimy"); 72151 attr(div1, "class", "zephr-status-pill svelte-srvimy"); 72152 attr(div2, "class", "zephr-section zephr-header-section svelte-srvimy"); 72153 }, 72154 m(target, anchor) { 72155 insert(target, div2, anchor); 72156 append(div2, span); 72157 append(span, t0); 72158 append(div2, t1); 72159 append(div2, div0); 72160 append(div0, t2); 72161 append(div0, t3); 72162 append(div0, t4); 72163 append(div2, t5); 72164 append(div2, div1); 72165 append(div1, t6); 72166 }, 72167 p(ctx, dirty) {
72168 if (dirty & /*giftRecipientText*/ 2) set_data(t0, /*giftRecipientText*/ ctx[1]); 72169 if (dirty & /*gift*/ 1 && t2_value !== (t2_value = (/*gift*/ ctx[0].recipientFirstName || '') + "")) set_data(t2, t2_value); 72170 if (dirty & /*gift*/ 1 && t4_value !== (t4_value = (/*gift*/ ctx[0].recipientLastName || '') + "")) set_data(t4, t4_value); 72171 72172 if (dirty & /*gift, activeStatusText, pendingStatusText*/ 193 && t6_value !== (t6_value = (/*gift*/ ctx[0].status === 'REDEEMED' 72173 ? /*activeStatusText*/ ctx[6] 72174 : /*pendingStatusText*/ ctx[7]) + "")) set_data(t6, t6_value); 72175 }, 72176 d(detaching) { 72177 if (detaching) { 72178 detach(div2); 72179 } 72180 } 72181 }; 72182 } 72183 72184 // (51:8) {#if gift.subscriptionType} 72185 function create_if_block_11(ctx) { 72186 let div1; 72187 let span; 72188 let t0; 72189 let t1; 72190 let div0; 72191 let t2_value = /*gift*/ ctx[0].subscriptionType + ""; 72192 let t2; 72193 72194 return { 72195 c() { 72196 div1 = element("div"); 72197 span = element("span"); 72198 t0 = text(/*subscriptionTypeText*/ ctx[13]); 72199 t1 = space(); 72200 div0 = element("div"); 72201 t2 = text(t2_value); 72202 attr(span, "class", "svelte-srvimy"); 72203 attr(div0, "class", ""); 72204 attr(div1, "class", "zephr-section svelte-srvimy"); 72205 }, 72206 m(target, anchor) { 72207 insert(target, div1, anchor); 72208 append(div1, span); 72209 append(span, t0); 72210 append(div1, t1); 72211 append(div1, div0); 72212 append(div0, t2); 72213 }, 72214 p(ctx, dirty) { 72215 if (dirty & /*subscriptionTypeText*/ 8192) set_data(t0, /*subscriptionTypeText*/ ctx[13]); 72216 if (dirty & /*gift*/ 1 && t2_value !== (t2_value = /*gift*/ ctx[0].subscriptionType + "")) set_data(t2, t2_value); 72217 }, 72218 d(detaching) { 72219 if (detaching) { 72220 detach(div1); 72221 } 72222 } 72223 }; 72224 } 72225 72226 // (60:8) {#if gift.subscriptionStartDate} 72227 function create_if_block_10(ctx) { 72228 let div1; 72229 let span; 72230 let t0; 72231 let t1; 72232 let div0; 72233 let t2_value = /*gift*/ ctx[0].subscriptionStartDate + ""; 72234 let t2; 72235 72236 return { 72237 c() { 72238 div1 = element("div"); 72239 span = element("span"); 72240 t0 = text(/*startDateText*/ ctx[2]); 72241 t1 = space(); 72242 div0 = element("div"); 72243 t2 = text(t2_value); 72244 attr(span, "class", "svelte-srvimy"); 72245 attr(div0, "class", ""); 72246 attr(div1, "class", "zephr-section svelte-srvimy"); 72247 }, 72248 m(target, anchor) { 72249 insert(target, div1, anchor); 72250 append(div1, span); 72251 append(span, t0); 72252 append(div1, t1); 72253 append(div1, div0); 72254 append(div0, t2); 72255 }, 72256 p(ctx, dirty) { 72257 if (dirty & /*startDateText*/ 4) set_data(t0, /*startDateText*/ ctx[2]); 72258 if (dirty & /*gift*/ 1 && t2_value !== (t2_value = /*gift*/ ctx[0].subscriptionStartDate + "")) set_data(t2, t2_value); 72259 }, 72260 d(detaching) { 72261 if (detaching) { 72262 detach(div1); 72263 } 72264 } 72265 }; 72266 } 72267 72268 // (69:8) {#if gift.subscriptionEndDate} 72269 function create_if_block_9(ctx) { 72270 let div1; 72271 let span; 72272 let t0; 72273 let t1; 72274 let div0; 72275 let t2_value = /*gift*/ ctx[0].subscriptionEndDate + ""; 72276 let t2; 72277 72278 return { 72279 c() { 72280 div1 = element("div"); 72281 span = element("span"); 72282 t0 = text(/*endDateText*/ ctx[3]); 72283 t1 = space(); 72284 div0 = element("div"); 72285 t2 = text(t2_value); 72286 attr(span, "class", "svelte-srvimy"); 72287 attr(div0, "class", ""); 72288 attr(div1, "class", "zephr-section svelte-srvimy"); 72289 }, 72290 m(target, anchor) { 72291 insert(target, div1, anchor); 72292 append(div1, span); 72293 append(span, t0); 72294 append(div1, t1); 72295 append(div1, div0); 72296 append(div0, t2); 72297 }, 72298 p(ctx, dirty) { 72299 if (dirty & /*endDateText*/ 8) set_data(t0, /*endDateText*/ ctx[3]); 72300 if (dirty & /*gift*/ 1 && t2_value !== (t2_value = /*gift*/ ctx[0].subscriptionEndDate + "")) set_data(t2, t2_value); 72301 }, 72302 d(detaching) { 72303 if (detaching) { 72304 detach(div1); 72305 } 72306 } 72307 }; 72308 } 72309 72310 // (78:6) {#if element === 'billing_history' && !elementsHide.billingHistory && gift.status === "PENDING"} 72311 function create_if_block_6$2(ctx) { 72312 let if_block_anchor; 72313 let current; 72314 let if_block = /*billingHistoryLink*/ ctx[16] && create_if_block_7(ctx); 72315 72316 return { 72317 c() { 72318 if (if_block) if_block.c(); 72319 if_block_anchor = empty(); 72320 }, 72321 m(target, anchor) { 72322 if (if_block) if_block.m(target, anchor); 72323 insert(target, if_block_anchor, anchor); 72324 current = true; 72325 }, 72326 p(ctx, dirty) { 72327 if (/*billingHistoryLink*/ ctx[16]) { 72328 if (if_block) { 72329 if_block.p(ctx, dirty); 72330
72331 if (dirty & /*billingHistoryLink*/ 65536) { 72332 transition_in(if_block, 1); 72333 } 72334 } else { 72335 if_block = create_if_block_7(ctx); 72336 if_block.c(); 72337 transition_in(if_block, 1); 72338 if_block.m(if_block_anchor.parentNode, if_block_anchor); 72339 } 72340 } else if (if_block) { 72341 group_outros(); 72342 72343 transition_out(if_block, 1, 1, () => { 72344 if_block = null; 72345 }); 72346 72347 check_outros(); 72348 } 72349 }, 72350 i(local) { 72351 if (current) return; 72352 transition_in(if_block); 72353 current = true; 72354 }, 72355 o(local) { 72356 transition_out(if_block); 72357 current = false; 72358 }, 72359 d(detaching) { 72360 if (detaching) { 72361 detach(if_block_anchor); 72362 } 72363 72364 if (if_block) if_block.d(detaching); 72365 } 72366 }; 72367 } 72368 72369 // (79:6) {#if billingHistoryLink} 72370 function create_if_block_7(ctx) { 72371 let tablink; 72372 let current; 72373 72374 tablink = new Tablink({ 72375 props: { 72376 text: /*billingHistoryLink*/ ctx[16], 72377 onClick: /*func*/ ctx[21] 72378 } 72379 }); 72380 72381 return { 72382 c() { 72383 create_component(tablink.$$.fragment); 72384 }, 72385 m(target, anchor) { 72386 mount_component(tablink, target, anchor); 72387 current = true; 72388 }, 72389 p(ctx, dirty) { 72390 const tablink_changes = {}; 72391 if (dirty & /*billingHistoryLink*/ 65536) tablink_changes.text = /*billingHistoryLink*/ ctx[16]; 72392 if (dirty & /*onViewHistory, gift*/ 131073) tablink_changes.onClick = /*func*/ ctx[21]; 72393 tablink.$set(tablink_changes); 72394 }, 72395 i(local) { 72396 if (current) return; 72397 transition_in(tablink.$$.fragment, local); 72398 current = true; 72399 }, 72400 o(local) { 72401 transition_out(tablink.$$.fragment, local); 72402 current = false; 72403 }, 72404 d(detaching) { 72405 destroy_component(tablink, detaching); 72406 } 72407 }; 72408 } 72409 72410 // (83:4) {#if element === 'change_payment' && !elementsHide.changePayment && gift.status === "PENDING"} 72411 function create_if_block_4$2(ctx) { 72412 let if_block_anchor; 72413 let current; 72414 let if_block = /*changePaymentMethodText*/ ctx[9] && create_if_block_5$2(ctx); 72415 72416 return { 72417 c() { 72418 if (if_block) if_block.c(); 72419 if_block_anchor = empty(); 72420 }, 72421 m(target, anchor) { 72422 if (if_block) if_block.m(target, anchor); 72423 insert(target, if_block_anchor, anchor); 72424 current = true; 72425 }, 72426 p(ctx, dirty) { 72427 if (/*changePaymentMethodText*/ ctx[9]) { 72428 if (if_block) { 72429 if_block.p(ctx, dirty); 72430 72431 if (dirty & /*changePaymentMethodText*/ 512) { 72432 transition_in(if_block, 1); 72433 } 72434 } else { 72435 if_block = create_if_block_5$2(ctx); 72436 if_block.c(); 72437 transition_in(if_block, 1); 72438 if_block.m(if_block_anchor.parentNode, if_block_anchor); 72439 } 72440 } else if (if_block) { 72441 group_outros(); 72442 72443 transition_out(if_block, 1, 1, () => { 72444 if_block = null; 72445 }); 72446 72447 check_outros(); 72448 } 72449 }, 72450 i(local) { 72451 if (current) return; 72452 transition_in(if_block); 72453 current = true; 72454 }, 72455 o(local) { 72456 transition_out(if_block); 72457 current = false; 72458 }, 72459 d(detaching) { 72460 if (detaching) { 72461 detach(if_block_anchor); 72462 } 72463 72464 if (if_block) if_block.d(detaching); 72465 } 72466 }; 72467 } 72468 72469 // (84:6) {#if changePaymentMethodText} 72470 function create_if_block_5$2(ctx) { 72471 let tablink; 72472 let current; 72473 72474 tablink = new Tablink({ 72475 props: { 72476 text: /*changePaymentMethodText*/ ctx[9], 72477 onClick: /*func_1*/ ctx[22] 72478 } 72479 }); 72480 72481 return { 72482 c() { 72483 create_component(tablink.$$.fragment); 72484 }, 72485 m(target, anchor) { 72486 mount_component(tablink, target, anchor); 72487 current = true; 72488 }, 72489 p(ctx, dirty) { 72490 const tablink_changes = {}; 72491 if (dirty & /*changePaymentMethodText*/ 512) tablink_changes.text = /*changePaymentMethodText*/ ctx[9]; 72492 if (dirty & /*onChangePayment, gift*/ 262145) tablink_changes.onClick = /*func_1*/ ctx[22]; 72493 tablink.$set(tablink_changes); 72494 }, 72495 i(local) { 72496 if (current) return; 72497 transition_in(tablink.$$.fragment, local); 72498 current = true; 72499 }, 72500 o(local) { 72501 transition_out(tablink.$$.fragment, local); 72502 current = false; 72503 }, 72504 d(detaching) { 72505 destroy_component(tablink, detaching); 72506 } 72507 }; 72508 } 72509 72510 // (88:4) {#if element === 'change_subscription' && !elementsHide.changeSubscription && gift.status === "PENDING"} 72511 function create_if_block_2$5(ctx) { 72512 let if_block_anchor; 72513 let current; 72514 let if_block = /*changeSubscriptionText*/ ctx[10] && create_if_block_3$3(ctx); 72515 72516 return { 72517 c() { 72518 if (if_block) if_block.c(); 72519 if_block_anchor = empty(); 72520 }, 72521 m(target, anchor) { 72522 if (if_block) if_block.m(target, anchor); 72523 insert(target, if_block_anchor, anchor); 72524 current = true; 72525 }, 72526 p(ctx, dirty) { 72527 if (/*changeSubscriptionText*/ ctx[10]) { 72528 if (if_block) { 72529 if_block.p(ctx, dirty); 72530
72531 if (dirty & /*changeSubscriptionText*/ 1024) { 72532 transition_in(if_block, 1); 72533 } 72534 } else { 72535 if_block = create_if_block_3$3(ctx); 72536 if_block.c(); 72537 transition_in(if_block, 1); 72538 if_block.m(if_block_anchor.parentNode, if_block_anchor); 72539 } 72540 } else if (if_block) { 72541 group_outros(); 72542 72543 transition_out(if_block, 1, 1, () => { 72544 if_block = null; 72545 }); 72546 72547 check_outros(); 72548 } 72549 }, 72550 i(local) { 72551 if (current) return; 72552 transition_in(if_block); 72553 current = true; 72554 }, 72555 o(local) { 72556 transition_out(if_block); 72557 current = false; 72558 }, 72559 d(detaching) { 72560 if (detaching) { 72561 detach(if_block_anchor); 72562 } 72563 72564 if (if_block) if_block.d(detaching); 72565 } 72566 }; 72567 } 72568 72569 // (89:6) {#if changeSubscriptionText} 72570 function create_if_block_3$3(ctx) { 72571 let tablink; 72572 let current; 72573 72574 tablink = new Tablink({ 72575 props: { 72576 text: /*changeSubscriptionText*/ ctx[10], 72577 path: `${/*changeSubscriptionPath*/ ctx[8]}?subscription=${/*gift*/ ctx[0].externalId}`, 72578 logDlEvent: /*func_2*/ ctx[23] 72579 } 72580 }); 72581 72582 return { 72583 c() { 72584 create_component(tablink.$$.fragment); 72585 }, 72586 m(target, anchor) { 72587 mount_component(tablink, target, anchor); 72588 current = true; 72589 }, 72590 p(ctx, dirty) { 72591 const tablink_changes = {}; 72592 if (dirty & /*changeSubscriptionText*/ 1024) tablink_changes.text = /*changeSubscriptionText*/ ctx[10]; 72593 if (dirty & /*changeSubscriptionPath, gift*/ 257) tablink_changes.path = `${/*changeSubscriptionPath*/ ctx[8]}?subscription=${/*gift*/ ctx[0].externalId}`; 72594 if (dirty & /*logChangeSubscription, gift*/ 524289) tablink_changes.logDlEvent = /*func_2*/ ctx[23]; 72595 tablink.$set(tablink_changes); 72596 }, 72597 i(local) { 72598 if (current) return; 72599 transition_in(tablink.$$.fragment, local); 72600 current = true; 72601 }, 72602 o(local) { 72603 transition_out(tablink.$$.fragment, local); 72604 current = false; 72605 }, 72606 d(detaching) { 72607 destroy_component(tablink, detaching); 72608 } 72609 }; 72610 } 72611 72612 // (93:4) {#if element === 'cancel_subscription' && !elementsHide.cancelSubscription && gift.status === "PENDING"} 72613 function create_if_block$8(ctx) { 72614 let if_block_anchor; 72615 let current; 72616 let if_block = /*cancelSubscriptionText*/ ctx[11] && create_if_block_1$7(ctx); 72617 72618 return { 72619 c() { 72620 if (if_block) if_block.c(); 72621 if_block_anchor = empty(); 72622 }, 72623 m(target, anchor) { 72624 if (if_block) if_block.m(target, anchor); 72625 insert(target, if_block_anchor, anchor); 72626 current = true; 72627 }, 72628 p(ctx, dirty) { 72629 if (/*cancelSubscriptionText*/ ctx[11]) { 72630 if (if_block) { 72631 if_block.p(ctx, dirty); 72632 72633 if (dirty & /*cancelSubscriptionText*/ 2048) { 72634 transition_in(if_block, 1); 72635 } 72636 } else { 72637 if_block = create_if_block_1$7(ctx); 72638 if_block.c(); 72639 transition_in(if_block, 1); 72640 if_block.m(if_block_anchor.parentNode, if_block_anchor); 72641 } 72642 } else if (if_block) { 72643 group_outros(); 72644 72645 transition_out(if_block, 1, 1, () => { 72646 if_block = null; 72647 }); 72648 72649 check_outros(); 72650 } 72651 }, 72652 i(local) { 72653 if (current) return; 72654 transition_in(if_block); 72655 current = true; 72656 }, 72657 o(local) { 72658 transition_out(if_block); 72659 current = false; 72660 }, 72661 d(detaching) { 72662 if (detaching) { 72663 detach(if_block_anchor); 72664 } 72665 72666 if (if_block) if_block.d(detaching); 72667 } 72668 }; 72669 } 72670 72671 // (94:6) {#if cancelSubscriptionText} 72672 function create_if_block_1$7(ctx) { 72673 let tablink; 72674 let current; 72675 72676 tablink = new Tablink({ 72677 props: { 72678 text: /*cancelSubscriptionText*/ ctx[11], 72679 path: `${/*cancelSubscriptionPath*/ ctx[12]}?subscription=${/*gift*/ ctx[0].externalId}`, 72680 logDlEvent: /*func_3*/ ctx[24] 72681 } 72682 }); 72683 72684 return { 72685 c() { 72686 create_component(tablink.$$.fragment); 72687 }, 72688 m(target, anchor) { 72689 mount_component(tablink, target, anchor); 72690 current = true; 72691 }, 72692 p(ctx, dirty) { 72693 const tablink_changes = {}; 72694 if (dirty & /*cancelSubscriptionText*/ 2048) tablink_changes.text = /*cancelSubscriptionText*/ ctx[11]; 72695 if (dirty & /*cancelSubscriptionPath, gift*/ 4097) tablink_changes.path = `${/*cancelSubscriptionPath*/ ctx[12]}?subscription=${/*gift*/ ctx[0].externalId}`;
72696 if (dirty & /*logCancelSubscription, gift*/ 1048577) tablink_changes.logDlEvent = /*func_3*/ ctx[24]; 72697 tablink.$set(tablink_changes); 72698 }, 72699 i(local) { 72700 if (current) return; 72701 transition_in(tablink.$$.fragment, local); 72702 current = true; 72703 }, 72704 o(local) { 72705 transition_out(tablink.$$.fragment, local); 72706 current = false; 72707 }, 72708 d(detaching) { 72709 destroy_component(tablink, detaching); 72710 } 72711 }; 72712 } 72713 72714 // (37:4) {#each elementsOrder as element} 72715 function create_each_block$4(ctx) { 72716 let t0; 72717 let t1; 72718 let t2; 72719 let t3; 72720 let if_block4_anchor; 72721 let current; 72722 let if_block0 = /*element*/ ctx[25] === 'subscription_information' && !/*elementsHide*/ ctx[14].subscriptionInformation && create_if_block_8(ctx); 72723 let if_block1 = /*element*/ ctx[25] === 'billing_history' && !/*elementsHide*/ ctx[14].billingHistory && /*gift*/ ctx[0].status === "PENDING" && create_if_block_6$2(ctx); 72724 let if_block2 = /*element*/ ctx[25] === 'change_payment' && !/*elementsHide*/ ctx[14].changePayment && /*gift*/ ctx[0].status === "PENDING" && create_if_block_4$2(ctx); 72725 let if_block3 = /*element*/ ctx[25] === 'change_subscription' && !/*elementsHide*/ ctx[14].changeSubscription && /*gift*/ ctx[0].status === "PENDING" && create_if_block_2$5(ctx); 72726 let if_block4 = /*element*/ ctx[25] === 'cancel_subscription' && !/*elementsHide*/ ctx[14].cancelSubscription && /*gift*/ ctx[0].status === "PENDING" && create_if_block$8(ctx); 72727 72728 return { 72729 c() { 72730 if (if_block0) if_block0.c(); 72731 t0 = space(); 72732 if (if_block1) if_block1.c(); 72733 t1 = space(); 72734 if (if_block2) if_block2.c(); 72735 t2 = space(); 72736 if (if_block3) if_block3.c(); 72737 t3 = space(); 72738 if (if_block4) if_block4.c(); 72739 if_block4_anchor = empty(); 72740 }, 72741 m(target, anchor) { 72742 if (if_block0) if_block0.m(target, anchor); 72743 insert(target, t0, anchor); 72744 if (if_block1) if_block1.m(target, anchor); 72745 insert(target, t1, anchor); 72746 if (if_block2) if_block2.m(target, anchor); 72747 insert(target, t2, anchor); 72748 if (if_block3) if_block3.m(target, anchor); 72749 insert(target, t3, anchor); 72750 if (if_block4) if_block4.m(target, anchor); 72751 insert(target, if_block4_anchor, anchor); 72752 current = true; 72753 }, 72754 p(ctx, dirty) { 72755 if (/*element*/ ctx[25] === 'subscription_information' && !/*elementsHide*/ ctx[14].subscriptionInformation) { 72756 if (if_block0) { 72757 if_block0.p(ctx, dirty); 72758 } else { 72759 if_block0 = create_if_block_8(ctx); 72760 if_block0.c(); 72761 if_block0.m(t0.parentNode, t0); 72762 } 72763 } else if (if_block0) { 72764 if_block0.d(1); 72765 if_block0 = null; 72766 } 72767 72768 if (/*element*/ ctx[25] === 'billing_history' && !/*elementsHide*/ ctx[14].billingHistory && /*gift*/ ctx[0].status === "PENDING") { 72769 if (if_block1) { 72770 if_block1.p(ctx, dirty); 72771 72772 if (dirty & /*elementsOrder, elementsHide, gift*/ 49153) { 72773 transition_in(if_block1, 1); 72774 } 72775 } else { 72776 if_block1 = create_if_block_6$2(ctx); 72777 if_block1.c(); 72778 transition_in(if_block1, 1); 72779 if_block1.m(t1.parentNode, t1); 72780 } 72781 } else if (if_block1) { 72782 group_outros(); 72783 72784 transition_out(if_block1, 1, 1, () => { 72785 if_block1 = null; 72786 }); 72787 72788 check_outros(); 72789 } 72790 72791 if (/*element*/ ctx[25] === 'change_payment' && !/*elementsHide*/ ctx[14].changePayment && /*gift*/ ctx[0].status === "PENDING") { 72792 if (if_block2) { 72793 if_block2.p(ctx, dirty); 72794 72795 if (dirty & /*elementsOrder, elementsHide, gift*/ 49153) { 72796 transition_in(if_block2, 1); 72797 } 72798 } else { 72799 if_block2 = create_if_block_4$2(ctx); 72800 if_block2.c(); 72801 transition_in(if_block2, 1); 72802 if_block2.m(t2.parentNode, t2); 72803 } 72804 } else if (if_block2) { 72805 group_outros(); 72806 72807 transition_out(if_block2, 1, 1, () => { 72808 if_block2 = null; 72809 }); 72810 72811 check_outros(); 72812 } 72813 72814 if (/*element*/ ctx[25] === 'change_subscription' && !/*elementsHide*/ ctx[14].changeSubscription && /*gift*/ ctx[0].status === "PENDING") { 72815 if (if_block3) { 72816 if_block3.p(ctx, dirty); 72817 72818 if (dirty & /*elementsOrder, elementsHide, gift*/ 49153) { 72819 transition_in(if_block3, 1); 72820 } 72821 } else { 72822 if_block3 = create_if_block_2$5(ctx); 72823 if_block3.c(); 72824 transition_in(if_block3, 1); 72825 if_block3.m(t3.parentNode, t3); 72826 } 72827 } else if (if_block3) { 72828 group_outros(); 72829 72830 transition_out(if_block3, 1, 1, () => { 72831 if_block3 = null; 72832 }); 72833 72834 check_outros(); 72835 } 72836 72837 if (/*element*/ ctx[25] === 'cancel_subscription' && !/*elementsHide*/ ctx[14].cancelSubscription && /*gift*/ ctx[0].status === "PENDING") { 72838 if (if_block4) { 72839 if_block4.p(ctx, dirty); 72840
72841 if (dirty & /*elementsOrder, elementsHide, gift*/ 49153) { 72842 transition_in(if_block4, 1); 72843 } 72844 } else { 72845 if_block4 = create_if_block$8(ctx); 72846 if_block4.c(); 72847 transition_in(if_block4, 1); 72848 if_block4.m(if_block4_anchor.parentNode, if_block4_anchor); 72849 } 72850 } else if (if_block4) { 72851 group_outros(); 72852 72853 transition_out(if_block4, 1, 1, () => { 72854 if_block4 = null; 72855 }); 72856 72857 check_outros(); 72858 } 72859 }, 72860 i(local) { 72861 if (current) return; 72862 transition_in(if_block1); 72863 transition_in(if_block2); 72864 transition_in(if_block3); 72865 transition_in(if_block4); 72866 current = true; 72867 }, 72868 o(local) { 72869 transition_out(if_block1); 72870 transition_out(if_block2); 72871 transition_out(if_block3); 72872 transition_out(if_block4); 72873 current = false; 72874 }, 72875 d(detaching) { 72876 if (detaching) { 72877 detach(t0); 72878 detach(t1); 72879 detach(t2); 72880 detach(t3); 72881 detach(if_block4_anchor); 72882 } 72883 72884 if (if_block0) if_block0.d(detaching); 72885 if (if_block1) if_block1.d(detaching); 72886 if (if_block2) if_block2.d(detaching); 72887 if (if_block3) if_block3.d(detaching); 72888 if (if_block4) if_block4.d(detaching); 72889 } 72890 }; 72891 } 72892 72893 function create_fragment$b(ctx) { 72894 let div1; 72895 let t; 72896 let div0; 72897 let current; 72898 72899 function select_block_type(ctx, dirty) { 72900 if (/*gift*/ ctx[0].status === 'PENDING') return create_if_block_13; 72901 if (/*gift*/ ctx[0].status === 'REDEEMED') return create_if_block_14; 72902 } 72903 72904 let current_block_type = select_block_type(ctx); 72905 let if_block = current_block_type && current_block_type(ctx); 72906 let each_value = ensure_array_like(/*elementsOrder*/ ctx[15]); 72907 let each_blocks = []; 72908 72909 for (let i = 0; i < each_value.length; i += 1) { 72910 each_blocks[i] = create_each_block$4(get_each_context$4(ctx, each_value, i)); 72911 } 72912 72913 const out = i => transition_out(each_blocks[i], 1, 1, () => { 72914 each_blocks[i] = null; 72915 }); 72916 72917 return { 72918 c() { 72919 div1 = element("div"); 72920 if (if_block) if_block.c(); 72921 t = space(); 72922 div0 = element("div"); 72923 72924 for (let i = 0; i < each_blocks.length; i += 1) { 72925 each_blocks[i].c(); 72926 } 72927 72928 attr(div0, "class", "zephr-inner-box svelte-srvimy"); 72929 attr(div1, "class", "zephr-gift-list-box-item svelte-srvimy"); 72930 }, 72931 m(target, anchor) { 72932 insert(target, div1, anchor); 72933 if (if_block) if_block.m(div1, null); 72934 append(div1, t); 72935 append(div1, div0); 72936 72937 for (let i = 0; i < each_blocks.length; i += 1) { 72938 if (each_blocks[i]) { 72939 each_blocks[i].m(div0, null); 72940 } 72941 } 72942 72943 current = true; 72944 }, 72945 p(ctx, [dirty]) { 72946 if (current_block_type === (current_block_type = select_block_type(ctx)) && if_block) { 72947 if_block.p(ctx, dirty); 72948 } else { 72949 if (if_block) if_block.d(1); 72950 if_block = current_block_type && current_block_type(ctx); 72951 72952 if (if_block) { 72953 if_block.c(); 72954 if_block.m(div1, t); 72955 } 72956 } 72957 72958 if (dirty & /*cancelSubscriptionText, cancelSubscriptionPath, gift, logCancelSubscription, elementsOrder, elementsHide, changeSubscriptionText, changeSubscriptionPath, logChangeSubscription, changePaymentMethodText, onChangePayment, billingHistoryLink, onViewHistory, endDateText, startDateText, subscriptionTypeText, activeStatusText, pendingStatusText, giftRecipientText*/ 2097103) { 72959 each_value = ensure_array_like(/*elementsOrder*/ ctx[15]); 72960 let i; 72961 72962 for (i = 0; i < each_value.length; i += 1) { 72963 const child_ctx = get_each_context$4(ctx, each_value, i); 72964 72965 if (each_blocks[i]) { 72966 each_blocks[i].p(child_ctx, dirty); 72967 transition_in(each_blocks[i], 1); 72968 } else { 72969 each_blocks[i] = create_each_block$4(child_ctx); 72970 each_blocks[i].c(); 72971 transition_in(each_blocks[i], 1); 72972 each_blocks[i].m(div0, null); 72973 } 72974 } 72975 72976 group_outros(); 72977 72978 for (i = each_value.length; i < each_blocks.length; i += 1) { 72979 out(i); 72980 } 72981 72982 check_outros(); 72983 } 72984 }, 72985 i(local) { 72986 if (current) return; 72987 72988 for (let i = 0; i < each_value.length; i += 1) { 72989 transition_in(each_blocks[i]); 72990 } 72991 72992 current = true; 72993 }, 72994 o(local) {
72995 each_blocks = each_blocks.filter(Boolean); 72996 72997 for (let i = 0; i < each_blocks.length; i += 1) { 72998 transition_out(each_blocks[i]); 72999 } 73000 73001 current = false; 73002 }, 73003 d(detaching) { 73004 if (detaching) { 73005 detach(div1); 73006 } 73007 73008 if (if_block) { 73009 if_block.d(); 73010 } 73011 73012 destroy_each(each_blocks, detaching); 73013 } 73014 }; 73015 } 73016 73017 function instance$b($$self, $$props, $$invalidate) { 73018 let { gift } = $$props; 73019 let { giftRecipientText } = $$props; 73020 let { startDateText } = $$props; 73021 let { endDateText } = $$props; 73022 let { pendingBannerText } = $$props; 73023 let { redeemedBannerText } = $$props; 73024 let { activeStatusText } = $$props; 73025 let { pendingStatusText } = $$props; 73026 let { changeSubscriptionPath } = $$props; 73027 let { changePaymentMethodText } = $$props; 73028 let { changeSubscriptionText } = $$props; 73029 let { cancelSubscriptionText } = $$props; 73030 let { cancelSubscriptionPath } = $$props; 73031 let { subscriptionTypeText } = $$props; 73032 let { elementsHide } = $$props; 73033 let { elementsOrder = [] } = $$props; 73034 let { billingHistoryLink } = $$props; 73035 let { onViewHistory } = $$props; 73036 let { onChangePayment } = $$props; 73037 let { logChangeSubscription } = $$props; 73038 let { logCancelSubscription } = $$props; 73039 const func = () => onViewHistory(gift); 73040 const func_1 = () => onChangePayment(gift); 73041 const func_2 = () => logChangeSubscription(gift); 73042 const func_3 = () => logCancelSubscription(gift); 73043 73044 $$self.$$set = $$props => {
73045 if ('gift' in $$props) $$invalidate(0, gift = $$props.gift); 73046 if ('giftRecipientText' in $$props) $$invalidate(1, giftRecipientText = $$props.giftRecipientText); 73047 if ('startDateText' in $$props) $$invalidate(2, startDateText = $$props.startDateText); 73048 if ('endDateText' in $$props) $$invalidate(3, endDateText = $$props.endDateText); 73049 if ('pendingBannerText' in $$props) $$invalidate(4, pendingBannerText = $$props.pendingBannerText); 73050 if ('redeemedBannerText' in $$props) $$invalidate(5, redeemedBannerText = $$props.redeemedBannerText); 73051 if ('activeStatusText' in $$props) $$invalidate(6, activeStatusText = $$props.activeStatusText); 73052 if ('pendingStatusText' in $$props) $$invalidate(7, pendingStatusText = $$props.pendingStatusText); 73053 if ('changeSubscriptionPath' in $$props) $$invalidate(8, changeSubscriptionPath = $$props.changeSubscriptionPath); 73054 if ('changePaymentMethodText' in $$props) $$invalidate(9, changePaymentMethodText = $$props.changePaymentMethodText); 73055 if ('changeSubscriptionText' in $$props) $$invali
73055date(10, changeSubscriptionText = $$props.changeSubscriptionText); 73056 if ('cancelSubscriptionText' in $$props) $$invalidate(11, cancelSubscriptionText = $$props.cancelSubscriptionText); 73057 if ('cancelSubscriptionPath' in $$props) $$invalidate(12, cancelSubscriptionPath = $$props.cancelSubscriptionPath); 73058 if ('subscriptionTypeText' in $$props) $$invalidate(13, subscriptionTypeText = $$props.subscriptionTypeText); 73059 if ('elementsHide' in $$props) $$invalidate(14, elementsHide = $$props.elementsHide); 73060 if ('elementsOrder' in $$props) $$invalidate(15, elementsOrder = $$props.elementsOrder); 73061 if ('billingHistoryLink' in $$props) $$invalidate(16, billingHistoryLink = $$props.billingHistoryLink); 73062 if ('onViewHistory' in $$props) $$invalidate(17, onViewHistory = $$props.onViewHistory); 73063 if ('onChangePayment' in $$props) $$invalidate(18, onChangePayment = $$props.onChangePayment); 73064 if ('logChangeSubscription' in $$props) $$invalidate(19, logChangeSubscription = $$props.logChangeSubscription); 73065 if ('logCancelSubscription' in $$props) $$invali
73065date(20, logCancelSubscription = $$props.logCancelSubscription); 73066 }; 73067 73068 return [ 73069 gift, 73070 giftRecipientText, 73071 startDateText, 73072 endDateText, 73073 pendingBannerText, 73074 redeemedBannerText, 73075 activeStatusText, 73076 pendingStatusText, 73077 changeSubscriptionPath, 73078 changePaymentMethodText, 73079 changeSubscriptionText, 73080 cancelSubscriptionText, 73081 cancelSubscriptionPath, 73082 subscriptionTypeText, 73083 elementsHide, 73084 elementsOrder, 73085 billingHistoryLink, 73086 onViewHistory, 73087 onChangePayment, 73088 logChangeSubscription, 73089 logCancelSubscription, 73090 func, 73091 func_1, 73092 func_2, 73093 func_3 73094 ]; 73095 } 73096 73097 class GiftSubscriptionsListBoxItem extends SvelteComponent { 73098 constructor(options) { 73099 super(); 73100 73101 init(this, options, instance$b, create_fragment$b, safe_not_equal, { 73102 gift: 0, 73103 giftRecipientText: 1, 73104 startDateText: 2, 73105 endDateText: 3, 73106 pendingBannerText: 4, 73107 redeemedBannerText: 5, 73108 activeStatusText: 6, 73109 pendingStatusText: 7, 73110 changeSubscriptionPath: 8, 73111 changePaymentMethodText: 9, 73112 changeSubscriptionText: 10, 73113 cancelSubscriptionText: 11, 73114 cancelSubscriptionPath: 12, 73115 subscriptionTypeText: 13, 73116 elementsHide: 14, 73117 elementsOrder: 15, 73118 billingHistoryLink: 16, 73119 onViewHistory: 17, 73120 onChangePayment: 18, 73121 logChangeSubscription: 19, 73122 logCancelSubscription: 20 73123 }); 73124 } 73125 } 73126 73127 /* src/components/elements/giftSubscriptionsList/GiftSubscriptionsList.svelte generated by Svelte v4.2.12 */ 73128 73129 function get_each_context$3(ctx, list, i) { 73130 const child_ctx = ctx.slice(); 73131 child_ctx[24] = list[i]; 73132 return child_ctx; 73133 } 73134 73135 // (36:2) {#if loading} 73136 function create_if_block_2$4(ctx) { 73137 let spinner; 73138 let current; 73139 spinner = new Spinner({}); 73140 73141 return { 73142 c() { 73143 create_component(spinner.$$.fragment); 73144 }, 73145 m(target, anchor) { 73146 mount_component(spinner, target, anchor); 73147 current = true; 73148 }, 73149 i(local) { 73150 if (current) return; 73151 transition_in(spinner.$$.fragment, local); 73152 current = true; 73153 }, 73154 o(local) { 73155 transition_out(spinner.$$.fragment, local); 73156 current = false; 73157 }, 73158 d(detaching) { 73159 destroy_component(spinner, detaching); 73160 } 73161 }; 73162 } 73163 73164 // (40:2) {#if !loading && !gifts.length} 73165 function create_if_block_1$6(ctx) { 73166 let div; 73167 let raw_value = (/*noSubscriptionsMessage*/ ctx[1] || /*emptyMessage*/ ctx[0]) + ""; 73168 73169 return { 73170 c() { 73171 div = element("div"); 73172 }, 73173 m(target, anchor) { 73174 insert(target, div, anchor); 73175 div.innerHTML = raw_value; 73176 }, 73177 p(ctx, dirty) { 73178 if (dirty & /*noSubscriptionsMessage, emptyMessage*/ 3 && raw_value !== (raw_value = (/*noSubscriptionsMessage*/ ctx[1] || /*emptyMessage*/ ctx[0]) + "")) div.innerHTML = raw_value; }, 73179 d(detaching) { 73180 if (detaching) { 73181 detach(div); 73182 } 73183 } 73184 }; 73185 } 73186 73187 // (46:2) {#if !loading && gifts.length > 0} 73188 function create_if_block$7(ctx) { 73189 let each_1_anchor; 73190 let current; 73191 let each_value = ensure_array_like(/*gifts*/ ctx[3]); 73192 let each_blocks = []; 73193 73194 for (let i = 0; i < each_value.length; i += 1) { 73195 each_blocks[i] = create_each_block$3(get_each_context$3(ctx, each_value, i)); 73196 } 73197 73198 const out = i => transition_out(each_blocks[i], 1, 1, () => { 73199 each_blocks[i] = null; 73200 }); 73201 73202 return { 73203 c() { 73204 for (let i = 0; i < each_blocks.length; i += 1) { 73205 each_blocks[i].c(); 73206 } 73207 73208 each_1_anchor = empty(); 73209 }, 73210 m(target, anchor) { 73211 for (let i = 0; i < each_blocks.length; i += 1) { 73212 if (each_blocks[i]) { 73213 each_blocks[i].m(target, anchor); 73214 } 73215 } 73216 73217 insert(target, each_1_anchor, anchor); 73218 current = true; 73219 }, 73220 p(ctx, dirty) { 73221 if (dirty & /*gifts, giftRecipientText, startDateText, endDateText, pendingBannerText, redeemedBannerText, activeStatusText, pendingStatusText, onChangePayment, logChangeSubscription, logCancelSubscription, onViewHistory, changePaymentMethodText, changeSubscriptionText, cancelSubscriptionText, changeSubscriptionPath, cancelSubscriptionPath, elementsHide, subscriptionTypeText, elementsOrder, billingHistoryLink*/ 16777208) { 73222 each_value = ensure_array_like(/*gifts*/ ctx[3]); 73223 let i; 73224 73225 for (i = 0; i < each_value.length; i += 1) { 73226 const child_ctx = get_each_context$3(ctx, each_value, i); 73227 73228 if (each_blocks[i]) { 73229 each_blocks[i].p(child_ctx, dirty); 73230 transition_in(each_blocks[i], 1); 73231 } else { 73232 each_blocks[i] = create_each_block$3(child_ctx); 73233 each_blocks[i].c(); 73234 transition_in(each_blocks[i], 1); 73235 each_blocks[i].m(each_1_anchor.parentNode, each_1_anchor); 73236 } 73237 } 73238 73239 group_outros(); 73240 73241 for (i = each_value.length; i < each_blocks.length; i += 1) { 73242 out(i); 73243 } 73244 73245 check_outros(); 73246 } 73247 }, 73248 i(local) { 73249 if (current) return; 73250 73251 for (let i = 0; i < each_value.length; i += 1) { 73252 transition_in(each_blocks[i]); 73253 } 73254 73255 current = true; 73256 }, 73257 o(local) {
73258 each_blocks = each_blocks.filter(Boolean); 73259 73260 for (let i = 0; i < each_blocks.length; i += 1) { 73261 transition_out(each_blocks[i]); 73262 } 73263 73264 current = false; 73265 }, 73266 d(detaching) { 73267 if (detaching) { 73268 detach(each_1_anchor); 73269 } 73270 73271 destroy_each(each_blocks, detaching); 73272 } 73273 }; 73274 } 73275 73276 // (47:4) {#each gifts as gift} 73277 function create_each_block$3(ctx) { 73278 let giftsubscriptionslistboxitem; 73279 let current; 73280 73281 giftsubscriptionslistboxitem = new GiftSubscriptionsListBoxItem({ 73282 props: { 73283 gift: /*gift*/ ctx[24], 73284 giftRecipientText: /*giftRecipientText*/ ctx[14], 73285 startDateText: /*startDateText*/ ctx[15], 73286 endDateText: /*endDateText*/ ctx[16], 73287 pendingBannerText: /*pendingBannerText*/ ctx[18], 73288 redeemedBannerText: /*redeemedBannerText*/ ctx[19], 73289 activeStatusText: /*activeStatusText*/ ctx[20], 73290 pendingStatusText: /*pendingStatusText*/ ctx[21], 73291 onChangePayment: /*onChangePayment*/ ctx[6], 73292 logChangeSubscription: /*logChangeSubscription*/ ctx[7], 73293 logCancelSubscription: /*logCancelSubscription*/ ctx[8], 73294 onViewHistory: /*onViewHistory*/ ctx[9], 73295 changePaymentMethodText: /*changePaymentMethodText*/ ctx[10], 73296 changeSubscriptionText: /*changeSubscriptionText*/ ctx[11], 73297 cancelSubscriptionText: /*cancelSubscriptionText*/ ctx[12], 73298 changeSubscriptionPath: /*changeSubscriptionPath*/ ctx[5], 73299 cancelSubscriptionPath: /*cancelSubscriptionPath*/ ctx[4], 73300 elementsHide: /*elementsHide*/ ctx[23], 73301 subscriptionTypeText: /*subscriptionTypeText*/ ctx[17], 73302 elementsOrder: /*elementsOrder*/ ctx[22], 73303 billingHistoryLink: /*billingHistoryLink*/ ctx[13] 73304 } 73305 }); 73306 73307 return { 73308 c() { 73309 create_component(giftsubscriptionslistboxitem.$$.fragment); 73310 }, 73311 m(target, anchor) { 73312 mount_component(giftsubscriptionslistboxitem, target, anchor); 73313 current = true; 73314 }, 73315 p(ctx, dirty) { 73316 const giftsubscriptionslistboxitem_changes = {}; 73317 if (dirty & /*gifts*/ 8) giftsubscriptionslistboxitem_changes.gift = /*gift*/ ctx[24]; 73318 if (dirty & /*giftRecipientText*/ 16384) giftsubscriptionslistboxitem_changes.giftRecipientText = /*giftRecipientText*/ ctx[14]; 73319 if (dirty & /*startDateText*/ 32768) giftsubscriptionslistboxitem_changes.startDateText = /*startDateText*/ ctx[15]; 73320 if (dirty & /*endDateText*/ 65536) giftsubscriptionslistboxitem_changes.endDateText = /*endDateText*/ ctx[16]; 73321 if (dirty & /*pendingBannerText*/ 262144) giftsubscriptionslistboxitem_changes.pendingBannerText = /*pendingBannerText*/ ctx[18]; 73322 if (dirty & /*redeemedBannerText*/ 524288) giftsubscriptionslistboxitem_changes.redeemedBannerText = /*redeemedBannerText*/ ctx[19]; 73323 if (dirty & /*activeStatusText*/ 1048576) giftsubscriptionslistboxitem_changes.activeStatusText = /*activeStatusText*/ ctx[20]; 73324 if (dirty & /*pendingStatusText*/ 2097152) giftsubscriptionslistboxitem_changes.pendingStatusText = /*pendingStatusText*/ ctx[21]; 73325 if (dirty & /*onChangePayment*/ 64) giftsubscriptionslistboxitem_changes.onChangePayment = /*onChangePayment*/ ctx[6]; 73326 if (dirty & /*logChangeSubscription*/ 128) giftsubscriptionslistboxitem_changes.logChangeSubscription = /*logChangeSubscription*/ ctx[7]; 73327 if (dirty & /*logCancelSubscription*/ 256) giftsubscriptionslistboxitem_changes.logCancelSubscription = /*logCancelSubscription*/ ctx[8]; 73328 if (dirty & /*onViewHistory*/ 512) giftsubscriptionslistboxitem_changes.onViewHistory = /*onViewHistory*/ ctx[9]; 73329 if (dirty & /*changePaymentMethodText*/ 1024) giftsubscriptionslistboxitem_changes.changePaymentMethodText = /*changePaymentMethodText*/ ctx[10]; 73330 if (dirty & /*changeSubscriptionText*/ 2048) giftsubscriptionslistboxitem_changes.changeSubscriptionText = /*changeSubscriptionText*/ ctx[11]; 73331 if (dirty & /*cancelSubscriptionText*/ 4096) giftsubscriptionslistboxitem_changes.cancelSubscriptionText = /*cancelSubscriptionText*/ ctx[12]; 73332 if (dirty & /*changeSubscriptionPath*/ 32) giftsubscriptionslistboxitem_changes.changeSubscriptionPath = /*changeSubscriptionPath*/ ctx[5]; 73333 if (dirty & /*cancelSubscriptionPath*/ 16) giftsubscriptionslistboxitem_changes.cancelSubscriptionPath = /*cancelSubscriptionPath*/ ctx[4];
73334 if (dirty & /*elementsHide*/ 8388608) giftsubscriptionslistboxitem_changes.elementsHide = /*elementsHide*/ ctx[23]; 73335 if (dirty & /*subscriptionTypeText*/ 131072) giftsubscriptionslistboxitem_changes.subscriptionTypeText = /*subscriptionTypeText*/ ctx[17]; 73336 if (dirty & /*elementsOrder*/ 4194304) giftsubscriptionslistboxitem_changes.elementsOrder = /*elementsOrder*/ ctx[22]; 73337 if (dirty & /*billingHistoryLink*/ 8192) giftsubscriptionslistboxitem_changes.billingHistoryLink = /*billingHistoryLink*/ ctx[13]; 73338 giftsubscriptionslistboxitem.$set(giftsubscriptionslistboxitem_changes); 73339 }, 73340 i(local) { 73341 if (current) return; 73342 transition_in(giftsubscriptionslistboxitem.$$.fragment, local); 73343 current = true; 73344 }, 73345 o(local) { 73346 transition_out(giftsubscriptionslistboxitem.$$.fragment, local); 73347 current = false; 73348 }, 73349 d(detaching) { 73350 destroy_component(giftsubscriptionslistboxitem, detaching); 73351 } 73352 }; 73353 } 73354 73355 function create_fragment$a(ctx) { 73356 let div; 73357 let t0; 73358 let t1; 73359 let current; 73360 let if_block0 = /*loading*/ ctx[2] && create_if_block_2$4(); 73361 let if_block1 = !/*loading*/ ctx[2] && !/*gifts*/ ctx[3].length && create_if_block_1$6(ctx); 73362 let if_block2 = !/*loading*/ ctx[2] && /*gifts*/ ctx[3].length > 0 && create_if_block$7(ctx); 73363 73364 return { 73365 c() { 73366 div = element("div"); 73367 if (if_block0) if_block0.c(); 73368 t0 = space(); 73369 if (if_block1) if_block1.c(); 73370 t1 = space(); 73371 if (if_block2) if_block2.c(); 73372 attr(div, "class", "subscriptions-list-container svelte-ldb1rq"); 73373 }, 73374 m(target, anchor) { 73375 insert(target, div, anchor); 73376 if (if_block0) if_block0.m(div, null); 73377 append(div, t0); 73378 if (if_block1) if_block1.m(div, null); 73379 append(div, t1); 73380 if (if_block2) if_block2.m(div, null); 73381 current = true; 73382 }, 73383 p(ctx, [dirty]) { 73384 if (/*loading*/ ctx[2]) { 73385 if (if_block0) { 73386 if (dirty & /*loading*/ 4) { 73387 transition_in(if_block0, 1); 73388 } 73389 } else { 73390 if_block0 = create_if_block_2$4(); 73391 if_block0.c(); 73392 transition_in(if_block0, 1); 73393 if_block0.m(div, t0); 73394 } 73395 } else if (if_block0) { 73396 group_outros(); 73397 73398 transition_out(if_block0, 1, 1, () => { 73399 if_block0 = null; 73400 }); 73401 73402 check_outros(); 73403 } 73404 73405 if (!/*loading*/ ctx[2] && !/*gifts*/ ctx[3].length) { 73406 if (if_block1) { 73407 if_block1.p(ctx, dirty); 73408 } else { 73409 if_block1 = create_if_block_1$6(ctx); 73410 if_block1.c(); 73411 if_block1.m(div, t1); 73412 } 73413 } else if (if_block1) { 73414 if_block1.d(1); 73415 if_block1 = null; 73416 } 73417 73418 if (!/*loading*/ ctx[2] && /*gifts*/ ctx[3].length > 0) { 73419 if (if_block2) { 73420 if_block2.p(ctx, dirty); 73421 73422 if (dirty & /*loading, gifts*/ 12) { 73423 transition_in(if_block2, 1); 73424 } 73425 } else { 73426 if_block2 = create_if_block$7(ctx); 73427 if_block2.c(); 73428 transition_in(if_block2, 1); 73429 if_block2.m(div, null); 73430 } 73431 } else if (if_block2) { 73432 group_outros(); 73433 73434 transition_out(if_block2, 1, 1, () => { 73435 if_block2 = null; 73436 }); 73437 73438 check_outros(); 73439 } 73440 }, 73441 i(local) { 73442 if (current) return; 73443 transition_in(if_block0); 73444 transition_in(if_block2); 73445 current = true; 73446 }, 73447 o(local) { 73448 transition_out(if_block0); 73449 transition_out(if_block2); 73450 current = false; 73451 }, 73452 d(detaching) { 73453 if (detaching) { 73454 detach(div); 73455 } 73456 73457 if (if_block0) if_block0.d(); 73458 if (if_block1) if_block1.d(); 73459 if (if_block2) if_block2.d(); 73460 } 73461 }; 73462 } 73463 73464 function instance$a($$self, $$props, $$invalidate) { 73465 let { emptyMessage } = $$props; 73466 let { noSubscriptionsMessage } = $$props; 73467 let { loading } = $$props; 73468 let { gifts = [] } = $$props; 73469 let { cancelSubscriptionPath } = $$props; 73470 let { changeSubscriptionPath } = $$props; 73471 let { onChangePayment } = $$props; 73472 let { logChangeSubscription } = $$props; 73473 let { logCancelSubscription } = $$props; 73474 let { onViewHistory } = $$props; 73475 let { changePaymentMethodText } = $$props; 73476 let { changeSubscriptionText } = $$props; 73477 let { cancelSubscriptionText } = $$props; 73478 let { billingHistoryLink } = $$props; 73479 let { giftRecipientText } = $$props; 73480 let { startDateText } = $$props; 73481 let { endDateText } = $$props; 73482 let { subscriptionTypeText } = $$props; 73483 let { pendingBannerText } = $$props; 73484 let { redeemedBannerText } = $$props; 73485 let { activeStatusText } = $$props; 73486 let { pendingStatusText } = $$props; 73487 let { elementsOrder = [] } = $$props; 73488 73489 let { elementsHide = { 73490 subscriptionInformation: undefined, 73491 changePayment: undefined, 73492 changeSubscription: undefined, 73493 cancelSubscription: undefined, 73494 billingHistory: undefined 73495 } } = $$props; 73496 73497 $$self.$$set = $$props => {
73498 if ('emptyMessage' in $$props) $$invalidate(0, emptyMessage = $$props.emptyMessage); 73499 if ('noSubscriptionsMessage' in $$props) $$invalidate(1, noSubscriptionsMessage = $$props.noSubscriptionsMessage); 73500 if ('loading' in $$props) $$invalidate(2, loading = $$props.loading); 73501 if ('gifts' in $$props) $$invalidate(3, gifts = $$props.gifts); 73502 if ('cancelSubscriptionPath' in $$props) $$invalidate(4, cancelSubscriptionPath = $$props.cancelSubscriptionPath); 73503 if ('changeSubscriptionPath' in $$props) $$invalidate(5, changeSubscriptionPath = $$props.changeSubscriptionPath); 73504 if ('onChangePayment' in $$props) $$invalidate(6, onChangePayment = $$props.onChangePayment); 73505 if ('logChangeSubscription' in $$props) $$invalidate(7, logChangeSubscription = $$props.logChangeSubscription); 73506 if ('logCancelSubscription' in $$props) $$invalidate(8, logCancelSubscription = $$props.logCancelSubscription); 73507 if ('onViewHistory' in $$props) $$invalidate(9, onViewHistory = $$props.onViewHistory); 73508 if ('changePaymentMethodText' in $$props) $$invali
73508date(10, changePaymentMethodText = $$props.changePaymentMethodText); 73509 if ('changeSubscriptionText' in $$props) $$invalidate(11, changeSubscriptionText = $$props.changeSubscriptionText); 73510 if ('cancelSubscriptionText' in $$props) $$invalidate(12, cancelSubscriptionText = $$props.cancelSubscriptionText); 73511 if ('billingHistoryLink' in $$props) $$invalidate(13, billingHistoryLink = $$props.billingHistoryLink); 73512 if ('giftRecipientText' in $$props) $$invalidate(14, giftRecipientText = $$props.giftRecipientText); 73513 if ('startDateText' in $$props) $$invalidate(15, startDateText = $$props.startDateText); 73514 if ('endDateText' in $$props) $$invalidate(16, endDateText = $$props.endDateText); 73515 if ('subscriptionTypeText' in $$props) $$invalidate(17, subscriptionTypeText = $$props.subscriptionTypeText); 73516 if ('pendingBannerText' in $$props) $$invalidate(18, pendingBannerText = $$props.pendingBannerText); 73517 if ('redeemedBannerText' in $$props) $$invalidate(19, redeemedBannerText = $$props.redeemedBannerText); 73518 if ('activeStatusText' in $$props) $$invali
73518date(20, activeStatusText = $$props.activeStatusText); 73519 if ('pendingStatusText' in $$props) $$invalidate(21, pendingStatusText = $$props.pendingStatusText); 73520 if ('elementsOrder' in $$props) $$invalidate(22, elementsOrder = $$props.elementsOrder); 73521 if ('elementsHide' in $$props) $$invalidate(23, elementsHide = $$props.elementsHide); 73522 }; 73523 73524 return [ 73525 emptyMessage, 73526 noSubscriptionsMessage, 73527 loading, 73528 gifts, 73529 cancelSubscriptionPath, 73530 changeSubscriptionPath, 73531 onChangePayment, 73532 logChangeSubscription, 73533 logCancelSubscription, 73534 onViewHistory, 73535 changePaymentMethodText, 73536 changeSubscriptionText, 73537 cancelSubscriptionText, 73538 billingHistoryLink, 73539 giftRecipientText, 73540 startDateText, 73541 endDateText, 73542 subscriptionTypeText, 73543 pendingBannerText, 73544 redeemedBannerText, 73545 activeStatusText, 73546 pendingStatusText, 73547 elementsOrder, 73548 elementsHide 73549 ]; 73550 } 73551 73552 class GiftSubscriptionsList extends SvelteComponent { 73553 constructor(options) { 73554 super(); 73555 73556 init(this, options, instance$a, create_fragment$a, safe_not_equal, { 73557 emptyMessage: 0, 73558 noSubscriptionsMessage: 1, 73559 loading: 2, 73560 gifts: 3, 73561 cancelSubscriptionPath: 4, 73562 changeSubscriptionPath: 5, 73563 onChangePayment: 6, 73564 logChangeSubscription: 7, 73565 logCancelSubscription: 8, 73566 onViewHistory: 9, 73567 changePaymentMethodText: 10, 73568 changeSubscriptionText: 11, 73569 cancelSubscriptionText: 12, 73570 billingHistoryLink: 13, 73571 giftRecipientText: 14, 73572 startDateText: 15, 73573 endDateText: 16, 73574 subscriptionTypeText: 17, 73575 pendingBannerText: 18, 73576 redeemedBannerText: 19, 73577 activeStatusText: 20, 73578 pendingStatusText: 21, 73579 elementsOrder: 22, 73580 elementsHide: 23 73581 }); 73582 } 73583 } 73584 73585 const giftSubscriptionsListFactory = { 73586 matches: (sectionElement, _form, _currentPart, _currentSection) => sectionElement.type === elementTypes.GIFT_SUBSCRIPTIONS_LIST, 73587 create: (form, formState, formActions, elementConfig) => { 73588 // Get all gift subscriptions from form state 73589 const giftSubscriptions = formState.giftSubscriptions || []; 73590 // filter to only show sent gifts (where user is purchaser) 73591 const activeGifts = giftSubscriptions.filter(gift => gift.is_purchaser === true); 73592 const logEditSubscription = (gift) => { 73593 logDataLayerEvent(form, 'zephr_form_subscription_change_clicked', { 73594 productId: gift.subscription_type || 'gift', 73595 planId: gift.subscription_number || gift.gift_code || '' 73596 }); 73597 }; 73598 const logCancelSubscription = (gift) => { 73599 logDataLayerEvent(form, 'zephr_form_cancel_subscription_clicked', { 73600 productId: gift.subscription_type || 'gift', 73601 planId: gift.subscription_number || gift.gift_code || '' 73602 }); 73603 }; 73604 // Create elements hide object to match SubscriptionElementsHide 73605 const elementsHide = { 73606 subscriptionInformation: elementConfig?.hideSubscriptionInformation, 73607 changePayment: elementConfig?.hideChangePayment, 73608 changeSubscription: elementConfig?.hideChangeSubscription, 73609 cancelSubscription: elementConfig?.hideCancelSubscription, 73610 suspendResumeSubscription: elementConfig?.hideSuspendResumeSubscription, 73611 billingHistory: elementConfig?.hideBillingHistory, 73612 subscriptionCustomFields: elementConfig?.hideSubscriptionCustomFields, 73613 updateBillToContact: elementConfig?.hideUpdateBillToContact 73614 }; 73615 const cancelSubscriptionPath = elementConfig.cancelSubscriptionPath || ''; 73616 const changePaymentPath = ''; // Default empty string if not available in config 73617 return { 73618 component: GiftSubscriptionsList, 73619 props: { 73620 isPastSubscriptions: elementConfig.isPastSubscriptions, 73621 billingHistoryText: elementConfig.billingHistoryText, 73622 billingHistoryLink: elementConfig.billingHistoryLink, 73623 changeSubscriptionPath: elementConfig.changeSubscriptionPath, 73624 noSubscriptionsMessage: elementConfig.noSubscriptionsMessage || elementConfig.emptyMessage, 73625 emptyMessage: elementConfig.emptyMessage, 73626 loading: !formState.giftSubscriptions || formState.loadingGiftSubscriptions, 73627 gifts: activeGifts, 73628 changePaymentPath, 73629 cancelSubscriptionPath, 73630 changePaymentMethodText: elementConfig.changePaymentMethodText, 73631 changeSubscriptionText: elementConfig.changeSubscriptionText, 73632 cancelSubscriptionText: elementConfig.cancelSubscriptionText, 73633 giftRecipientText: elementConfig.giftRecipientText, 73634 startDateText: elementConfig.startDateText, 73635 endDateText: elementConfig.endDateText,
73636 pendingBannerText: elementConfig.pendingBannerText, 73637 redeemedBannerText: elementConfig.redeemedBannerText, 73638 activeStatusText: elementConfig.activeStatusText, 73639 pendingStatusText: elementConfig.pendingStatusText, 73640 subscriptionTypeText: elementConfig.subscriptionTypeText, 73641 elementsOrder: elementConfig.elementsOrder, 73642 elementsHide, 73643 onSelectGift: (gift) => { 73644 formActions.updateFormState({ 73645 selectedGiftSubscription: gift 73646 }); 73647 formActions.jumpToPartStart('gift-details'); 73648 }, 73649 onEditSubscription: logEditSubscription, 73650 onViewHistory: (subscription) => { 73651 formActions.updateFormState({ 73652 selectedSubscription: subscription, 73653 selectedGiftSubscription: subscription 73654 }); 73655 formActions.jumpToPartStart('billing-history'); 73656 logDataLayerEvent(form, 'zephr_form_billing_history_view', null); 73657 }, 73658 onCancelSubscription: logCancelSubscription, 73659 onChangePayment: (subscription) => { 73660 formActions.updateFormState({ 73661 selectedSubscription: subscription, 73662 selectedGiftSubscription: subscription 73663 }); 73664 logDataLayerEvent(form, 'zephr_form_button_press', { 73665 sectionId: formState.currentSection.type, 73666 buttonType: 'SUBMIT' 73667 }); 73668 formActions.completeSection(); 73669 }, 73670 logChangeSubscription: (subscription) => { 73671 logDataLayerEvent(form, 'zephr_form_subscription_change_clicked', { 73672 productId: subscription.productId, 73673 planId: subscription.externalId 73674 }); 73675 }, 73676 logCancelSubscription: (subscription) => { 73677 logDataLayerEvent(form, 'zephr_form_cancel_subscription_clicked', { 73678 productId: subscription.productId, 73679 planId: subscription.externalId 73680 }); 73681 }, 73682 } 73683 }; 73684 } 73685 }; 73686 73687 /* src/components/elements/giftToggle/GiftToggle.svelte generated by Svelte v4.2.12 */ 73688 73689 function create_fragment$9(ctx) { 73690 let div; 73691 let checkbox; 73692 let current; 73693 73694 checkbox = new Checkbox({ 73695 props: { 73696 id: "gift-toggle-checkbox", 73697 name: "gift-toggle", 73698 label: /*config*/ ctx[0]?.label || '', 73699 value: "true", 73700 checked: /*checked*/ ctx[1], 73701 disabled: /*disabled*/ ctx[2], 73702 required: false 73703 } 73704 }); 73705 73706 checkbox.$on("change", /*handleChange*/ ctx[3]); 73707 73708 return { 73709 c() { 73710 div = element("div"); 73711 create_component(checkbox.$$.fragment); 73712 attr(div, "class", "zephr-form-gift-toggle svelte-93167f"); 73713 }, 73714 m(target, anchor) { 73715 insert(target, div, anchor); 73716 mount_component(checkbox, div, null); 73717 current = true; 73718 }, 73719 p(ctx, [dirty]) { 73720 const checkbox_changes = {}; 73721 if (dirty & /*config*/ 1) checkbox_changes.label = /*config*/ ctx[0]?.label || ''; 73722 if (dirty & /*checked*/ 2) checkbox_changes.checked = /*checked*/ ctx[1]; 73723 if (dirty & /*disabled*/ 4) checkbox_changes.disabled = /*disabled*/ ctx[2]; 73724 checkbox.$set(checkbox_changes); 73725 }, 73726 i(local) { 73727 if (current) return; 73728 transition_in(checkbox.$$.fragment, local); 73729 current = true; 73730 }, 73731 o(local) { 73732 transition_out(checkbox.$$.fragment, local); 73733 current = false; 73734 }, 73735 d(detaching) { 73736 if (detaching) { 73737 detach(div); 73738 } 73739 73740 destroy_component(checkbox); 73741 } 73742 }; 73743 } 73744 73745 function instance$9($$self, $$props, $$invalidate) { 73746 let { config } = $$props; 73747 let { checked = false } = $$props; 73748 let { disabled = false } = $$props; 73749 let { onChange } = $$props; 73750 73751 const handleChange = event => { 73752 const isChecked = event.detail; 73753 onChange(isChecked); 73754 }; 73755 73756 $$self.$$set = $$props => {
73757 if ('config' in $$props) $$invalidate(0, config = $$props.config); 73758 if ('checked' in $$props) $$invalidate(1, checked = $$props.checked); 73759 if ('disabled' in $$props) $$invalidate(2, disabled = $$props.disabled); 73760 if ('onChange' in $$props) $$invalidate(4, onChange = $$props.onChange); 73761 }; 73762 73763 return [config, checked, disabled, handleChange, onChange]; 73764 } 73765 73766 class GiftToggle extends SvelteComponent { 73767 constructor(options) { 73768 super(); 73769 73770 init(this, options, instance$9, create_fragment$9, safe_not_equal, { 73771 config: 0, 73772 checked: 1, 73773 disabled: 2, 73774 onChange: 4 73775 }); 73776 } 73777 } 73778 73779 const giftToggleFactory = { 73780 matches: (sectionElement) => sectionElement.type === elementTypes.GIFT_TOGGLE, 73781 create: (form, formState, formActions, elementConfig) => { 73782 // Only show if enabled 73783 if (!elementConfig.enabled) { 73784 return null; 73785 } 73786 const handleToggleChange = (isChecked) => { 73787 const previousIsGiftForm = formState.isGiftForm; 73788 formActions.updateFormState({ 73789 isGiftForm: isChecked 73790 }); 73791 if (!isChecked && previousIsGiftForm) { 73792 // When deselecting gift mode, only navigate if we're on gift-specific sections 73793 if (formState.currentSection.type === 'recipient_details' && formState.giftTogglePreviousSection) { 73794 // If on recipient details, go back to where they were before enabling gift mode 73795 formActions.jumpToSection(formState.giftTogglePreviousSection); 73796 } 73797 // If on any other section (email, password, payment), stay on current section 73798 // Clear the stored section 73799 formActions.updateFormState({ 73800 giftTogglePreviousSection: undefined 73801 }); 73802 } 73803 else if (isChecked && !previousIsGiftForm) { 73804 // When enabling gift mode, always store current section (update it each time) 73805 formActions.updateFormState({ 73806 giftTogglePreviousSection: formState.currentSection.type 73807 }); 73808 // Check if recipient details are valid before jumping 73809 const recipientDetailsElementTypes = [ 73810 elementTypes.RECIPIENT_NAME, 73811 elementTypes.RECIPIENT_EMAIL, 73812 elementTypes.RECIPIENT_ADDRESS, 73813 elementTypes.RECIPIENT_MESSAGE 73814 ]; 73815 // Check if all recipient details elements are valid 73816 const recipientDetailsValid = recipientDetailsElementTypes.every(elementType => { 73817 const elementValidity = formState.elementValidity.find(e => e.elementType === elementType && 73818 e.sectionType === 'recipient_details'); 73819 return elementValidity ? elementValidity.isValid : false; 73820 }); 73821 // Only jump to recipient details if they are not valid 73822 if (!recipientDetailsValid) { 73823 formActions.jumpToSection('recipient_details'); 73824 } 73825 // If recipient details are valid, stay on current step 73826 } 73827 logDataLayerEvent(form, 'zephr_form_input_change', { 73828 field: 'gift-toggle', 73829 inputName: 'gift-toggle-checkbox', 73830 sectionId: formState.currentSection.type, 73831 }); 73832 }; 73833 return { 73834 component: GiftToggle, 73835 props: { 73836 config: elementConfig, 73837 checked: formState.isGiftForm || false, 73838 disabled: formState.isBusy || formState.paymentProviderFormBusy || false, 73839 onChange: handleToggleChange, 73840 }, 73841 isValid: true, 73842 }; 73843 }, 73844 }; 73845 73846 /* src/components/elements/giftFutureDateToggle/GiftFutureDateToggle.svelte generated by Svelte v4.2.12 */ 73847 73848 function create_if_block$6(ctx) { 73849 let p; 73850 let t_value = /*config*/ ctx[0].description + ""; 73851 let t; 73852 73853 return { 73854 c() { 73855 p = element("p"); 73856 t = text(t_value); 73857 attr(p, "class", "zephr-form-gift-future-date-toggle-description svelte-c9nudz"); 73858 }, 73859 m(target, anchor) { 73860 insert(target, p, anchor); 73861 append(p, t); 73862 }, 73863 p(ctx, dirty) {
73864 if (dirty & /*config*/ 1 && t_value !== (t_value = /*config*/ ctx[0].description + "")) set_data(t, t_value); 73865 }, 73866 d(detaching) { 73867 if (detaching) { 73868 detach(p); 73869 } 73870 } 73871 }; 73872 } 73873 73874 function create_fragment$8(ctx) { 73875 let div; 73876 let checkbox; 73877 let t; 73878 let current; 73879 73880 checkbox = new Checkbox({ 73881 props: { 73882 id: "gift-future-date-toggle-checkbox", 73883 name: "gift-future-date-toggle", 73884 label: /*config*/ ctx[0]?.label || '', 73885 value: "true", 73886 checked: /*checked*/ ctx[1], 73887 disabled: /*disabled*/ ctx[2], 73888 required: false 73889 } 73890 }); 73891 73892 checkbox.$on("change", /*handleChange*/ ctx[3]); 73893 let if_block = /*config*/ ctx[0]?.description && create_if_block$6(ctx); 73894 73895 return { 73896 c() { 73897 div = element("div"); 73898 create_component(checkbox.$$.fragment); 73899 t = space(); 73900 if (if_block) if_block.c(); 73901 attr(div, "class", "zephr-form-gift-future-date-toggle svelte-c9nudz"); 73902 }, 73903 m(target, anchor) { 73904 insert(target, div, anchor); 73905 mount_component(checkbox, div, null); 73906 append(div, t); 73907 if (if_block) if_block.m(div, null); 73908 current = true; 73909 }, 73910 p(ctx, [dirty]) { 73911 const checkbox_changes = {}; 73912 if (dirty & /*config*/ 1) checkbox_changes.label = /*config*/ ctx[0]?.label || ''; 73913 if (dirty & /*checked*/ 2) checkbox_changes.checked = /*checked*/ ctx[1]; 73914 if (dirty & /*disabled*/ 4) checkbox_changes.disabled = /*disabled*/ ctx[2]; 73915 checkbox.$set(checkbox_changes); 73916 73917 if (/*config*/ ctx[0]?.description) { 73918 if (if_block) { 73919 if_block.p(ctx, dirty); 73920 } else { 73921 if_block = create_if_block$6(ctx); 73922 if_block.c(); 73923 if_block.m(div, null); 73924 } 73925 } else if (if_block) { 73926 if_block.d(1); 73927 if_block = null; 73928 } 73929 }, 73930 i(local) { 73931 if (current) return; 73932 transition_in(checkbox.$$.fragment, local); 73933 current = true; 73934 }, 73935 o(local) { 73936 transition_out(checkbox.$$.fragment, local); 73937 current = false; 73938 }, 73939 d(detaching) { 73940 if (detaching) { 73941 detach(div); 73942 } 73943 73944 destroy_component(checkbox); 73945 if (if_block) if_block.d(); 73946 } 73947 }; 73948 } 73949 73950 function instance$8($$self, $$props, $$invalidate) { 73951 let { config } = $$props; 73952 let { checked = false } = $$props; 73953 let { disabled = false } = $$props; 73954 let { onChange } = $$props; 73955 73956 const handleChange = event => { 73957 const isChecked = event.detail; 73958 onChange(isChecked); 73959 }; 73960 73961 $$self.$$set = $$props => {
73962 if ('config' in $$props) $$invalidate(0, config = $$props.config); 73963 if ('checked' in $$props) $$invalidate(1, checked = $$props.checked); 73964 if ('disabled' in $$props) $$invalidate(2, disabled = $$props.disabled); 73965 if ('onChange' in $$props) $$invalidate(4, onChange = $$props.onChange); 73966 }; 73967 73968 return [config, checked, disabled, handleChange, onChange]; 73969 } 73970 73971 class GiftFutureDateToggle extends SvelteComponent { 73972 constructor(options) { 73973 super(); 73974 73975 init(this, options, instance$8, create_fragment$8, safe_not_equal, { 73976 config: 0, 73977 checked: 1, 73978 disabled: 2, 73979 onChange: 4 73980 }); 73981 } 73982 } 73983 73984 const giftFutureDateToggleFactory = { 73985 matches: (sectionElement) => sectionElement.type === elementTypes.GIFT_FUTURE_DATE_TOGGLE, 73986 create: (form, formState, formActions, elementConfig) => { 73987 // Only show if enabled and in gift mode 73988 if (!elementConfig.enabled || !formState.isGiftForm) { 73989 return null; 73990 } 73991 const handleToggleChange = (isChecked) => { 73992 formActions.updateFormState({ 73993 giftRecipient: { 73994 ...formState.giftRecipient, 73995 futureDeliveryEnabled: isChecked, 73996 // Clear the date if toggling off 73997 futureDeliveryDate: isChecked ? formState.giftRecipient?.futureDeliveryDate || '' : '' 73998 } 73999 }); 74000 logDataLayerEvent(form, 'zephr_form_input_change', { 74001 field: 'gift-future-date-toggle', 74002 inputName: 'gift-future-date-toggle-checkbox', 74003 sectionId: formState.currentSection.type, 74004 }); 74005 }; 74006 return { 74007 component: GiftFutureDateToggle, 74008 props: { 74009 config: elementConfig, 74010 checked: formState.giftRecipient?.futureDeliveryEnabled || false, 74011 disabled: formState.isBusy || formState.paymentProviderFormBusy || false, 74012 onChange: handleToggleChange, 74013 }, 74014 isValid: true, 74015 }; 74016 }, 74017 }; 74018 74019 /* src/components/elements/giftFutureDateInput/GiftFutureDateInput.svelte generated by Svelte v4.2.12 */ 74020 74021 function create_if_block_1$5(ctx) { 74022 let label; 74023 let current; 74024 74025 label = new Label({ 74026 props: { 74027 for: "gift-future-date-input", 74028 required: /*config*/ ctx[0].required || false, 74029 $$slots: { default: [create_default_slot$1] }, 74030 $$scope: { ctx } 74031 } 74032 }); 74033 74034 return { 74035 c() { 74036 create_component(label.$$.fragment); 74037 }, 74038 m(target, anchor) { 74039 mount_component(label, target, anchor); 74040 current = true; 74041 }, 74042 p(ctx, dirty) { 74043 const label_changes = {}; 74044 if (dirty & /*config*/ 1) label_changes.required = /*config*/ ctx[0].required || false; 74045 74046 if (dirty & /*$$scope, config*/ 513) { 74047 label_changes.$$scope = { dirty, ctx }; 74048 } 74049 74050 label.$set(label_changes); 74051 }, 74052 i(local) { 74053 if (current) return; 74054 transition_in(label.$$.fragment, local); 74055 current = true; 74056 }, 74057 o(local) { 74058 transition_out(label.$$.fragment, local); 74059 current = false; 74060 }, 74061 d(detaching) { 74062 destroy_component(label, detaching); 74063 } 74064 }; 74065 } 74066 74067 // (25:4) <Label for="gift-future-date-input" required={config.required || false} > 74068 function create_default_slot$1(ctx) { 74069 let t_value = /*config*/ ctx[0].label + ""; 74070 let t; 74071 74072 return { 74073 c() { 74074 t = text(t_value); 74075 }, 74076 m(target, anchor) { 74077 insert(target, t, anchor); 74078 }, 74079 p(ctx, dirty) { 74080 if (dirty & /*config*/ 1 && t_value !== (t_value = /*config*/ ctx[0].label + "")) set_data(t, t_value); 74081 }, 74082 d(detaching) { 74083 if (detaching) { 74084 detach(t); 74085 } 74086 } 74087 }; 74088 } 74089 74090 // (47:2) {#if config?.description} 74091 function create_if_block$5(ctx) { 74092 let p; 74093 let t_value = /*config*/ ctx[0].description + ""; 74094 let t; 74095 74096 return { 74097 c() { 74098 p = element("p"); 74099 t = text(t_value); 74100 attr(p, "class", "zephr-form-gift-future-date-input-description svelte-1vykgtl"); 74101 }, 74102 m(target, anchor) { 74103 insert(target, p, anchor); 74104 append(p, t); 74105 }, 74106 p(ctx, dirty) { 74107 if (dirty & /*config*/ 1 && t_value !== (t_value = /*config*/ ctx[0].description + "")) set_data(t, t_value); 74108 }, 74109 d(detaching) { 74110 if (detaching) { 74111 detach(p); 74112 } 74113 } 74114 }; 74115 } 74116 74117 function create_fragment$7(ctx) { 74118 let div; 74119 let t0; 74120 let input; 74121 let t1; 74122 let current; 74123 let if_block0 = /*config*/ ctx[0]?.label && create_if_block_1$5(ctx); 74124 74125 input = new Input({ 74126 props: { 74127 id: "gift-future-date-input", 74128 name: "gift-future-date", 74129 type: "date", 74130 value: /*value*/ ctx[1], 74131 disabled: /*disabled*/ ctx[2], 74132 hasError: /*hasError*/ ctx[3], 74133 errorMessage: /*errorMessage*/ ctx[4], 74134 placeholder: /*config*/ ctx[0]?.placeholder || '', 74135 required: /*config*/ ctx[0]?.required || false, 74136 min: /*minDate*/ ctx[6] 74137 } 74138 }); 74139 74140 input.$on("change", /*handleChange*/ ctx[5]); 74141 let if_block1 = /*config*/ ctx[0]?.description && create_if_block$5(ctx); 74142 74143 return { 74144 c() { 74145 div = element("div"); 74146 if (if_block0) if_block0.c(); 74147 t0 = space(); 74148 create_component(input.$$.fragment); 74149 t1 = space(); 74150 if (if_block1) if_block1.c(); 74151 attr(div, "class", "zephr-form-gift-future-date-input svelte-1vykgtl"); 74152 }, 74153 m(target, anchor) { 74154 insert(target, div, anchor); 74155 if (if_block0) if_block0.m(div, null); 74156 append(div, t0); 74157 mount_component(input, div, null); 74158 append(div, t1); 74159 if (if_block1) if_block1.m(div, null); 74160 current = true; 74161 }, 74162 p(ctx, [dirty]) { 74163 if (/*config*/ ctx[0]?.label) { 74164 if (if_block0) { 74165 if_block0.p(ctx, dirty); 74166
74167 if (dirty & /*config*/ 1) { 74168 transition_in(if_block0, 1); 74169 } 74170 } else { 74171 if_block0 = create_if_block_1$5(ctx); 74172 if_block0.c(); 74173 transition_in(if_block0, 1); 74174 if_block0.m(div, t0); 74175 } 74176 } else if (if_block0) { 74177 group_outros(); 74178 74179 transition_out(if_block0, 1, 1, () => { 74180 if_block0 = null; 74181 }); 74182 74183 check_outros(); 74184 } 74185 74186 const input_changes = {}; 74187 if (dirty & /*value*/ 2) input_changes.value = /*value*/ ctx[1]; 74188 if (dirty & /*disabled*/ 4) input_changes.disabled = /*disabled*/ ctx[2]; 74189 if (dirty & /*hasError*/ 8) input_changes.hasError = /*hasError*/ ctx[3]; 74190 if (dirty & /*errorMessage*/ 16) input_changes.errorMessage = /*errorMessage*/ ctx[4]; 74191 if (dirty & /*config*/ 1) input_changes.placeholder = /*config*/ ctx[0]?.placeholder || ''; 74192 if (dirty & /*config*/ 1) input_changes.required = /*config*/ ctx[0]?.required || false; 74193 input.$set(input_changes); 74194 74195 if (/*config*/ ctx[0]?.description) { 74196 if (if_block1) { 74197 if_block1.p(ctx, dirty); 74198 } else { 74199 if_block1 = create_if_block$5(ctx); 74200 if_block1.c(); 74201 if_block1.m(div, null); 74202 } 74203 } else if (if_block1) { 74204 if_block1.d(1); 74205 if_block1 = null; 74206 } 74207 }, 74208 i(local) { 74209 if (current) return; 74210 transition_in(if_block0); 74211 transition_in(input.$$.fragment, local); 74212 current = true; 74213 }, 74214 o(local) { 74215 transition_out(if_block0); 74216 transition_out(input.$$.fragment, local); 74217 current = false; 74218 }, 74219 d(detaching) { 74220 if (detaching) { 74221 detach(div); 74222 } 74223 74224 if (if_block0) if_block0.d(); 74225 destroy_component(input); 74226 if (if_block1) if_block1.d(); 74227 } 74228 }; 74229 } 74230 74231 function instance$7($$self, $$props, $$invalidate) { 74232 let { config } = $$props; 74233 let { value = '' } = $$props; 74234 let { disabled = false } = $$props; 74235 let { hasError = false } = $$props; 74236 let { errorMessage = '' } = $$props; 74237 let { onChange } = $$props; 74238 74239 // Calculate tomorrow's date in YYYY-MM-DD format 74240 const getTomorrowDate = () => { 74241 const tomorrow = new Date(); 74242 tomorrow.setDate(tomorrow.getDate() + 1); 74243 return tomorrow.toISOString().split('T')[0]; 74244 }; 74245 74246 const handleChange = event => { 74247 const inputValue = event.detail; 74248 onChange(inputValue); 74249 }; 74250 74251 // Set minimum date to tomorrow 74252 const minDate = getTomorrowDate(); 74253 74254 $$self.$$set = $$props => {
74255 if ('config' in $$props) $$invalidate(0, config = $$props.config); 74256 if ('value' in $$props) $$invalidate(1, value = $$props.value); 74257 if ('disabled' in $$props) $$invalidate(2, disabled = $$props.disabled); 74258 if ('hasError' in $$props) $$invalidate(3, hasError = $$props.hasError); 74259 if ('errorMessage' in $$props) $$invalidate(4, errorMessage = $$props.errorMessage); 74260 if ('onChange' in $$props) $$invalidate(7, onChange = $$props.onChange); 74261 }; 74262 74263 return [ 74264 config, 74265 value, 74266 disabled, 74267 hasError, 74268 errorMessage, 74269 handleChange, 74270 minDate, 74271 onChange 74272 ]; 74273 } 74274 74275 class GiftFutureDateInput extends SvelteComponent { 74276 constructor(options) { 74277 super(); 74278 74279 init(this, options, instance$7, create_fragment$7, safe_not_equal, { 74280 config: 0, 74281 value: 1, 74282 disabled: 2, 74283 hasError: 3, 74284 errorMessage: 4, 74285 onChange: 7 74286 }); 74287 } 74288 } 74289 74290 const giftFutureDateInputFactory = { 74291 matches: (sectionElement) => sectionElement.type === elementTypes.GIFT_FUTURE_DATE_INPUT, 74292 create: (form, formState, formActions, elementConfig) => { 74293 // Only show if enabled, in gift mode, and future delivery is enabled 74294 if (!elementConfig.enabled || !formState.isGiftForm || !formState.giftRecipient?.futureDeliveryEnabled) { 74295 return null; 74296 } 74297 // Validation function 74298 const validateDate = (value) => { 74299 if (!value) { 74300 return resolveLanguagePackKeyTyped(form, 'forms.errors.future-delivery-date-required', 'Please select a future delivery date'); 74301 } 74302 if (value) { 74303 const selectedDate = new Date(value); 74304 const tomorrow = new Date(); 74305 tomorrow.setDate(tomorrow.getDate() + 1); 74306 tomorrow.setHours(0, 0, 0, 0); // Reset time for date comparison 74307 if (selectedDate < tomorrow) { 74308 return resolveLanguagePackKeyTyped(form, 'forms.errors.future-delivery-date-too-early', 'Delivery date must be at least 24 hours in the future'); 74309 } 74310 } 74311 return null; 74312 }; 74313 const handleChange = (value) => { 74314 formActions.updateFormState({ 74315 giftRecipient: { 74316 ...formState.giftRecipient, 74317 futureDeliveryDate: value 74318 } 74319 }); 74320 logDataLayerEvent(form, 'zephr_form_input_change', { 74321 field: 'gift-future-date', 74322 inputName: 'gift-future-date-input', 74323 sectionId: formState.currentSection.type, 74324 }); 74325 }; 74326 const currentValue = formState.giftRecipient?.futureDeliveryDate || ''; 74327 const errorMessage = validateDate(currentValue); 74328 const isValid = !errorMessage; 74329 return { 74330 component: GiftFutureDateInput, 74331 props: { 74332 config: elementConfig, 74333 value: currentValue, 74334 disabled: formState.isBusy || formState.paymentProviderFormBusy || false, 74335 hasError: !isValid, 74336 errorMessage: errorMessage || '', 74337 onChange: handleChange, 74338 }, 74339 isValid, 74340 }; 74341 }, 74342 }; 74343 74344 /* src/components/elements/suspendResumeSubscription/SuspendResumeSubscription.svelte generated by Svelte v4.2.12 */ 74345 74346 function create_if_block_2$3(ctx) { 74347 let div; 74348 let t; 74349 74350 return { 74351 c() { 74352 div = element("div"); 74353 t = text(/*suspensionDateError*/ ctx[3]); 74354 attr(div, "class", "error-text svelte-1hog2jr"); 74355 }, 74356 m(target, anchor) { 74357 insert(target, div, anchor); 74358 append(div, t); 74359 }, 74360 p(ctx, dirty) { 74361 if (dirty & /*suspensionDateError*/ 8) set_data(t, /*suspensionDateError*/ ctx[3]); 74362 }, 74363 d(detaching) { 74364 if (detaching) { 74365 detach(div); 74366 } 74367 } 74368 }; 74369 } 74370 74371 // (88:6) {#if resumeDateError} 74372 function create_if_block_1$4(ctx) { 74373 let div; 74374 let t; 74375 74376 return { 74377 c() { 74378 div = element("div"); 74379 t = text(/*resumeDateError*/ ctx[4]); 74380 attr(div, "class", "error-text svelte-1hog2jr"); 74381 }, 74382 m(target, anchor) { 74383 insert(target, div, anchor); 74384 append(div, t); 74385 }, 74386 p(ctx, dirty) {
74387 if (dirty & /*resumeDateError*/ 16) set_data(t, /*resumeDateError*/ ctx[4]); 74388 }, 74389 d(detaching) { 74390 if (detaching) { 74391 detach(div); 74392 } 74393 } 74394 }; 74395 } 74396 74397 // (92:4) {#if generalError} 74398 function create_if_block$4(ctx) { 74399 let div; 74400 let t; 74401 74402 return { 74403 c() { 74404 div = element("div"); 74405 t = text(/*generalError*/ ctx[5]); 74406 attr(div, "class", "error-text svelte-1hog2jr"); 74407 }, 74408 m(target, anchor) { 74409 insert(target, div, anchor); 74410 append(div, t); 74411 }, 74412 p(ctx, dirty) { 74413 if (dirty & /*generalError*/ 32) set_data(t, /*generalError*/ ctx[5]); 74414 }, 74415 d(detaching) { 74416 if (detaching) { 74417 detach(div); 74418 } 74419 } 74420 }; 74421 } 74422 74423 function create_fragment$6(ctx) { 74424 let div2; 74425 let div0; 74426 let label0; 74427 let t0_value = /*config*/ ctx[0].suspensionDateLabel + ""; 74428 let t0; 74429 let t1; 74430 let input0; 74431 let t2; 74432 let t3; 74433 let div1; 74434 let label1; 74435 let t4_value = /*config*/ ctx[0].resumeDateLabel + ""; 74436 let t4; 74437 let t5; 74438 let input1; 74439 let t6; 74440 let t7; 74441 let mounted; 74442 let dispose; 74443 let if_block0 = /*suspensionDateError*/ ctx[3] && create_if_block_2$3(ctx); 74444 let if_block1 = /*resumeDateError*/ ctx[4] && create_if_block_1$4(ctx); 74445 let if_block2 = /*generalError*/ ctx[5] && create_if_block$4(ctx); 74446 74447 return { 74448 c() { 74449 div2 = element("div"); 74450 div0 = element("div"); 74451 label0 = element("label"); 74452 t0 = text(t0_value); 74453 t1 = space(); 74454 input0 = element("input"); 74455 t2 = space(); 74456 if (if_block0) if_block0.c(); 74457 t3 = space(); 74458 div1 = element("div"); 74459 label1 = element("label"); 74460 t4 = text(t4_value); 74461 t5 = space(); 74462 input1 = element("input"); 74463 t6 = space(); 74464 if (if_block1) if_block1.c(); 74465 t7 = space(); 74466 if (if_block2) if_block2.c(); 74467 attr(label0, "for", "suspensionDate"); 74468 attr(label0, "class", "svelte-1hog2jr"); 74469 attr(input0, "id", "suspensionDate"); 74470 attr(input0, "type", "date"); 74471 input0.required = true; 74472 attr(input0, "class", "svelte-1hog2jr"); 74473 toggle_class(input0, "error", !!/*suspensionDateError*/ ctx[3]); 74474 attr(div0, "class", "field svelte-1hog2jr"); 74475 attr(label1, "for", "resumeDate"); 74476 attr(label1, "class", "svelte-1hog2jr"); 74477 attr(input1, "id", "resumeDate"); 74478 attr(input1, "type", "date"); 74479 input1.required = true; 74480 attr(input1, "class", "svelte-1hog2jr"); 74481 toggle_class(input1, "error", !!/*resumeDateError*/ ctx[4]); 74482 attr(div1, "class", "field svelte-1hog2jr"); 74483 attr(div2, "class", "suspend-resume-subscription-section svelte-1hog2jr"); 74484 }, 74485 m(target, anchor) { 74486 insert(target, div2, anchor); 74487 append(div2, div0); 74488 append(div0, label0); 74489 append(label0, t0); 74490 append(div0, t1); 74491 append(div0, input0); 74492 set_input_value(input0, /*suspensionDate*/ ctx[1]); 74493 append(div0, t2); 74494 if (if_block0) if_block0.m(div0, null); 74495 append(div2, t3); 74496 append(div2, div1); 74497 append(div1, label1); 74498 append(label1, t4); 74499 append(div1, t5); 74500 append(div1, input1); 74501 set_input_value(input1, /*resumeDate*/ ctx[2]); 74502 append(div1, t6); 74503 if (if_block1) if_block1.m(div1, null); 74504 append(div2, t7); 74505 if (if_block2) if_block2.m(div2, null); 74506 74507 if (!mounted) { 74508 dispose = [ 74509 listen(input0, "input", /*input0_input_handler*/ ctx[9]), 74510 listen(input0, "input", /*updateSuspendResumeSubscription*/ ctx[6]), 74511 listen(input1, "input", /*input1_input_handler*/ ctx[10]), 74512 listen(input1, "input", /*updateSuspendResumeSubscription*/ ctx[6]) 74513 ]; 74514 74515 mounted = true; 74516 } 74517 }, 74518 p(ctx, [dirty]) { 74519 if (dirty & /*config*/ 1 && t0_value !== (t0_value = /*config*/ ctx[0].suspensionDateLabel + "")) set_data(t0, t0_value); 74520 74521 if (dirty & /*suspensionDate*/ 2) { 74522 set_input_value(input0, /*suspensionDate*/ ctx[1]); 74523 } 74524 74525 if (dirty & /*suspensionDateError*/ 8) { 74526 toggle_class(input0, "error", !!/*suspensionDateError*/ ctx[3]); 74527 } 74528 74529 if (/*suspensionDateError*/ ctx[3]) { 74530 if (if_block0) { 74531 if_block0.p(ctx, dirty); 74532 } else { 74533 if_block0 = create_if_block_2$3(ctx); 74534 if_block0.c(); 74535 if_block0.m(div0, null); 74536 } 74537 } else if (if_block0) { 74538 if_block0.d(1); 74539 if_block0 = null; 74540 } 74541
74542 if (dirty & /*config*/ 1 && t4_value !== (t4_value = /*config*/ ctx[0].resumeDateLabel + "")) set_data(t4, t4_value); 74543 74544 if (dirty & /*resumeDate*/ 4) { 74545 set_input_value(input1, /*resumeDate*/ ctx[2]); 74546 } 74547 74548 if (dirty & /*resumeDateError*/ 16) { 74549 toggle_class(input1, "error", !!/*resumeDateError*/ ctx[4]); 74550 } 74551 74552 if (/*resumeDateError*/ ctx[4]) { 74553 if (if_block1) { 74554 if_block1.p(ctx, dirty); 74555 } else { 74556 if_block1 = create_if_block_1$4(ctx); 74557 if_block1.c(); 74558 if_block1.m(div1, null); 74559 } 74560 } else if (if_block1) { 74561 if_block1.d(1); 74562 if_block1 = null; 74563 } 74564 74565 if (/*generalError*/ ctx[5]) { 74566 if (if_block2) { 74567 if_block2.p(ctx, dirty); 74568 } else { 74569 if_block2 = create_if_block$4(ctx); 74570 if_block2.c(); 74571 if_block2.m(div2, null); 74572 } 74573 } else if (if_block2) { 74574 if_block2.d(1); 74575 if_block2 = null; 74576 } 74577 }, 74578 i: noop, 74579 o: noop, 74580 d(detaching) { 74581 if (detaching) { 74582 detach(div2); 74583 } 74584 74585 if (if_block0) if_block0.d(); 74586 if (if_block1) if_block1.d(); 74587 if (if_block2) if_block2.d(); 74588 mounted = false; 74589 run_all(dispose); 74590 } 74591 }; 74592 } 74593 74594 function instance$6($$self, $$props, $$invalidate) { 74595 let { formState } = $$props; 74596 let { formActions } = $$props; 74597 let { config } = $$props; 74598 const dispatch = createEventDispatcher(); 74599 let suspensionDate = formState.suspendResumeSubscription?.suspensionDate || ''; 74600 let resumeDate = formState.suspendResumeSubscription?.resumeDate || ''; 74601 let suspensionDateError = ''; 74602 let resumeDateError = ''; 74603 let generalError = ''; 74604 74605 // Update form state when input changes 74606 const updateSuspendResumeSubscription = () => { 74607 const updatedSuspendResumeSubscription = { 74608 ...formState.suspendResumeSubscription || {}, 74609 suspensionDate, 74610 resumeDate 74611 }; 74612 74613 formActions.updateFormState({ 74614 suspendResumeSubscription: updatedSuspendResumeSubscription 74615 }); 74616 74617 validateForm(); 74618 }; 74619 74620 const validateForm = () => { 74621 const hasValidSuspensionDate = !!suspensionDate.trim(); 74622 const hasValidResumeDate = !!resumeDate.trim(); 74623 const today = new Date(); 74624 today.setHours(0, 0, 0, 0); // Reset time to start of day for accurate comparison 74625 const suspensionDateObj = new Date(suspensionDate); 74626 const resumeDateObj = new Date(resumeDate); 74627 const isSuspensionDateInPast = hasValidSuspensionDate && suspensionDateObj < today; 74628 const isSuspensionDateBeforeResumeDate = hasValidSuspensionDate && hasValidResumeDate && suspensionDateObj < resumeDateObj; 74629 74630 // Reset errors 74631 $$invalidate(3, suspensionDateError = ''); 74632 74633 $$invalidate(4, resumeDateError = ''); 74634 $$invalidate(5, generalError = ''); 74635 74636 if (!hasValidSuspensionDate) { 74637 $$invalidate(3, suspensionDateError = 'Suspension date is required'); 74638 } else if (isSuspensionDateInPast) { 74639 $$invalidate(3, suspensionDateError = 'Suspension date cannot be in the past'); 74640 } 74641 74642 if (!hasValidResumeDate) { 74643 $$invalidate(4, resumeDateError = 'Resume date is required'); 74644 } 74645 74646 if (hasValidSuspensionDate && hasValidResumeDate && !isSuspensionDateBeforeResumeDate) { 74647 $$invalidate(5, generalError = 'Resume date must be after suspension date'); 74648 } 74649 74650 // Dispatch event for form validity 74651 const isValid = hasValidSuspensionDate && hasValidResumeDate && !isSuspensionDateInPast && isSuspensionDateBeforeResumeDate; 74652 74653 dispatch('validity', { isValid }); 74654 }; 74655 74656 // Run validation on mount to ensure initial state is validated 74657 onMount(() => { 74658 validateForm(); 74659 }); 74660 74661 function input0_input_handler() { 74662 suspensionDate = this.value; 74663 $$invalidate(1, suspensionDate); 74664 } 74665 74666 function input1_input_handler() { 74667 resumeDate = this.value; 74668 $$invalidate(2, resumeDate); 74669 } 74670 74671 $$self.$$set = $$props => {
74672 if ('formState' in $$props) $$invalidate(7, formState = $$props.formState); 74673 if ('formActions' in $$props) $$invalidate(8, formActions = $$props.formActions); 74674 if ('config' in $$props) $$invalidate(0, config = $$props.config); 74675 }; 74676 74677 return [ 74678 config, 74679 suspensionDate, 74680 resumeDate, 74681 suspensionDateError, 74682 resumeDateError, 74683 generalError, 74684 updateSuspendResumeSubscription, 74685 formState, 74686 formActions, 74687 input0_input_handler, 74688 input1_input_handler 74689 ]; 74690 } 74691 74692 class SuspendResumeSubscription extends SvelteComponent { 74693 constructor(options) { 74694 super(); 74695 init(this, options, instance$6, create_fragment$6, safe_not_equal, { formState: 7, formActions: 8, config: 0 }); 74696 } 74697 } 74698 74699 const suspendResumeSubscriptionFactory = { 74700 matches: (sectionElement) => sectionElement.type === elementTypes.SUSPEND_RESUME_SUBSCRIPTION, 74701 create: (form, formState, formActions, elementConfig) => { 74702 // Resolve all labels through language pack service 74703 const resolvedConfig = { 74704 suspensionDateLabel: resolveLanguagePackKeyTyped(form, 'forms.suspend-resume-subscription.suspension-date-label', elementConfig.suspensionDateLabel), 74705 resumeDateLabel: resolveLanguagePackKeyTyped(form, 'forms.suspend-resume-subscription.resume-date-label', elementConfig.resumeDateLabel), 74706 }; 74707 // Determine if the input is valid 74708 const suspendResumeSubscription = (formState.suspendResumeSubscription || {}); 74709 const hasValidSuspensionDate = !!suspendResumeSubscription.suspensionDate?.trim(); 74710 const hasValidResumeDate = !!suspendResumeSubscription.resumeDate?.trim(); 74711 // Check if suspension date is in the past 74712 const today = new Date(); 74713 today.setHours(0, 0, 0, 0); // Reset time to start of day for accurate comparison 74714 const suspensionDateObj = new Date(suspendResumeSubscription.suspensionDate); 74715 const isSuspensionDateInPast = hasValidSuspensionDate && suspensionDateObj < today; 74716 const resumeDateObj = new Date(suspendResumeSubscription.resumeDate); 74717 const isSuspensionDateBeforeResumeDate = hasValidSuspensionDate && hasValidResumeDate && suspensionDateObj < resumeDateObj; 74718 const isValid = hasValidSuspensionDate && 74719 hasValidResumeDate && 74720 !isSuspensionDateInPast && 74721 isSuspensionDateBeforeResumeDate; 74722 return { 74723 component: SuspendResumeSubscription, 74724 props: { 74725 config: resolvedConfig, 74726 form, 74727 formState, 74728 formActions, 74729 }, 74730 isValid 74731 }; 74732 } 74733 }; 74734 74735 /* src/components/elements/subscriptionCustomFieldsList/SubscriptionCustomFieldsList.svelte generated by Svelte v4.2.12 */ 74736 74737 function get_each_context$2(ctx, list, i) { 74738 const child_ctx = ctx.slice(); 74739 child_ctx[30] = list[i][0]; 74740 child_ctx[31] = list[i][1]; 74741 return child_ctx; 74742 } 74743 74744 function get_each_context_1(ctx, list, i) { 74745 const child_ctx = ctx.slice(); 74746 child_ctx[34] = list[i]; 74747 return child_ctx; 74748 } 74749 74750 // (142:2) {#if formTitle} 74751 function create_if_block_6$1(ctx) { 74752 let h2; 74753 let t; 74754 74755 return { 74756 c() { 74757 h2 = element("h2"); 74758 t = text(/*formTitle*/ ctx[2]); 74759 attr(h2, "class", "form-title svelte-uox0m2"); 74760 }, 74761 m(target, anchor) { 74762 insert(target, h2, anchor); 74763 append(h2, t); 74764 }, 74765 p(ctx, dirty) { 74766 if (dirty[0] & /*formTitle*/ 4) set_data(t, /*formTitle*/ ctx[2]); 74767 }, 74768 d(detaching) { 74769 if (detaching) { 74770 detach(h2); 74771 } 74772 } 74773 }; 74774 } 74775 74776 // (146:2) {#if formDescription} 74777 function create_if_block_5$1(ctx) { 74778 let p; 74779 let t; 74780 74781 return { 74782 c() { 74783 p = element("p"); 74784 t = text(/*formDescription*/ ctx[3]); 74785 attr(p, "class", "form-description svelte-uox0m2"); 74786 }, 74787 m(target, anchor) { 74788 insert(target, p, anchor); 74789 append(p, t); 74790 }, 74791 p(ctx, dirty) { 74792 if (dirty[0] & /*formDescription*/ 8) set_data(t, /*formDescription*/ ctx[3]); 74793 }, 74794 d(detaching) { 74795 if (detaching) { 74796 detach(p); 74797 } 74798 } 74799 }; 74800 } 74801 74802 // (152:52) 74803 function create_if_block_1$3(ctx) { 74804 let form; 74805 let t0; 74806 let t1; 74807 let t2; 74808 let mounted; 74809 let dispose; 74810 let each_value = ensure_array_like(/*activeFieldGroups*/ ctx[9]); 74811 let each_blocks = []; 74812 74813 for (let i = 0; i < each_value.length; i += 1) { 74814 each_blocks[i] = create_each_block$2(get_each_context$2(ctx, each_value, i)); 74815 } 74816 74817 let if_block0 = /*successMessage*/ ctx[6] && create_if_block_4$1(ctx); 74818 let if_block1 = /*errorMessage*/ ctx[7] && create_if_block_3$2(ctx); 74819 let if_block2 = /*editableFieldNames*/ ctx[1].length > 0 && create_if_block_2$2(ctx); 74820 74821 return { 74822 c() { 74823 form = element("form"); 74824 74825 for (let i = 0; i < each_blocks.length; i += 1) { 74826 each_blocks[i].c(); 74827 } 74828 74829 t0 = space(); 74830 if (if_block0) if_block0.c(); 74831 t1 = space(); 74832 if (if_block1) if_block1.c(); 74833 t2 = space(); 74834 if (if_block2) if_block2.c(); 74835 attr(form, "class", "custom-fields-form svelte-uox0m2"); 74836 }, 74837 m(target, anchor) { 74838 insert(target, form, anchor); 74839 74840 for (let i = 0; i < each_blocks.length; i += 1) { 74841 if (each_blocks[i]) { 74842 each_blocks[i].m(form, null); 74843 } 74844 } 74845 74846 append(form, t0); 74847 if (if_block0) if_block0.m(form, null); 74848 append(form, t1); 74849 if (if_block1) if_block1.m(form, null); 74850 append(form, t2); 74851 if (if_block2) if_block2.m(form, null); 74852 74853 if (!mounted) { 74854 dispose = listen(form, "submit", prevent_default(/*handleSubmit*/ ctx[13])); 74855 mounted = true; 74856 } 74857 }, 74858 p(ctx, dirty) {
74859 if (dirty[0] & /*activeFieldGroups, fieldValues, isFieldEditable, handleInputEvent*/ 21248) { 74860 each_value = ensure_array_like(/*activeFieldGroups*/ ctx[9]); 74861 let i; 74862 74863 for (i = 0; i < each_value.length; i += 1) { 74864 const child_ctx = get_each_context$2(ctx, each_value, i); 74865 74866 if (each_blocks[i]) { 74867 each_blocks[i].p(child_ctx, dirty); 74868 } else { 74869 each_blocks[i] = create_each_block$2(child_ctx); 74870 each_blocks[i].c(); 74871 each_blocks[i].m(form, t0); 74872 } 74873 } 74874 74875 for (; i < each_blocks.length; i += 1) { 74876 each_blocks[i].d(1); 74877 } 74878 74879 each_blocks.length = each_value.length; 74880 } 74881 74882 if (/*successMessage*/ ctx[6]) { 74883 if (if_block0) { 74884 if_block0.p(ctx, dirty); 74885 } else { 74886 if_block0 = create_if_block_4$1(ctx); 74887 if_block0.c(); 74888 if_block0.m(form, t1); 74889 } 74890 } else if (if_block0) { 74891 if_block0.d(1); 74892 if_block0 = null; 74893 } 74894 74895 if (/*errorMessage*/ ctx[7]) { 74896 if (if_block1) { 74897 if_block1.p(ctx, dirty); 74898 } else { 74899 if_block1 = create_if_block_3$2(ctx); 74900 if_block1.c(); 74901 if_block1.m(form, t2); 74902 } 74903 } else if (if_block1) { 74904 if_block1.d(1); 74905 if_block1 = null; 74906 } 74907 74908 if (/*editableFieldNames*/ ctx[1].length > 0) { 74909 if (if_block2) { 74910 if_block2.p(ctx, dirty); 74911 } else { 74912 if_block2 = create_if_block_2$2(ctx); 74913 if_block2.c(); 74914 if_block2.m(form, null); 74915 } 74916 } else if (if_block2) { 74917 if_block2.d(1); 74918 if_block2 = null; 74919 } 74920 }, 74921 d(detaching) { 74922 if (detaching) { 74923 detach(form); 74924 } 74925 74926 destroy_each(each_blocks, detaching); 74927 if (if_block0) if_block0.d(); 74928 if (if_block1) if_block1.d(); 74929 if (if_block2) if_block2.d(); 74930 mounted = false; 74931 dispose(); 74932 } 74933 }; 74934 } 74935 74936 // (150:2) {#if loading} 74937 function create_if_block$3(ctx) { 74938 let div; 74939 74940 return { 74941 c() { 74942 div = element("div"); 74943 div.textContent = "Loading custom fields..."; 74944 attr(div, "class", "loading svelte-uox0m2"); 74945 }, 74946 m(target, anchor) { 74947 insert(target, div, anchor); 74948 }, 74949 p: noop, 74950 d(detaching) { 74951 if (detaching) { 74952 detach(div); 74953 } 74954 } 74955 }; 74956 } 74957 74958 // (158:10) {#each group.fields as field} 74959 function create_each_block_1(ctx) { 74960 let div; 74961 let label; 74962 let t0_value = /*field*/ ctx[34].label + ""; 74963 let t0; 74964 let label_for_value; 74965 let t1; 74966 let input; 74967 let input_id_value; 74968 let input_name_value; 74969 let input_value_value; 74970 let input_disabled_value; 74971 let mounted; 74972 let dispose; 74973 74974 function input_handler(...args) { 74975 return /*input_handler*/ ctx[20](/*field*/ ctx[34], ...args); 74976 } 74977 74978 return { 74979 c() { 74980 div = element("div"); 74981 label = element("label"); 74982 t0 = text(t0_value); 74983 t1 = space(); 74984 input = element("input"); 74985 attr(label, "for", label_for_value = /*field*/ ctx[34].name); 74986 attr(label, "class", "field-label svelte-uox0m2"); 74987 attr(input, "id", input_id_value = /*field*/ ctx[34].name); 74988 attr(input, "name", input_name_value = /*field*/ ctx[34].name); 74989 attr(input, "type", "text"); 74990 input.value = input_value_value = /*fieldValues*/ ctx[8][/*field*/ ctx[34].name]; 74991 input.disabled = input_disabled_value = !/*isFieldEditable*/ ctx[12](/*field*/ ctx[34].name); 74992 attr(input, "class", "field-input svelte-uox0m2"); 74993 attr(div, "class", "field-item svelte-uox0m2"); 74994 }, 74995 m(target, anchor) { 74996 insert(target, div, anchor); 74997 append(div, label); 74998 append(label, t0); 74999 append(div, t1); 75000 append(div, input); 75001 75002 if (!mounted) { 75003 dispose = listen(input, "input", input_handler); 75004 mounted = true; 75005 } 75006 }, 75007 p(new_ctx, dirty) { 75008 ctx = new_ctx; 75009 if (dirty[0] & /*activeFieldGroups*/ 512 && t0_value !== (t0_value = /*field*/ ctx[34].label + "")) set_data(t0, t0_value); 75010 75011 if (dirty[0] & /*activeFieldGroups*/ 512 && label_for_value !== (label_for_value = /*field*/ ctx[34].name)) { 75012 attr(label, "for", label_for_value); 75013 } 75014 75015 if (dirty[0] & /*activeFieldGroups*/ 512 && input_id_value !== (input_id_value = /*field*/ ctx[34].name)) { 75016 attr(input, "id", input_id_value); 75017 } 75018 75019 if (dirty[0] & /*activeFieldGroups*/ 512 && input_name_value !== (input_name_value = /*field*/ ctx[34].name)) { 75020 attr(input, "name", input_name_value); 75021 } 75022
75023 if (dirty[0] & /*fieldValues, activeFieldGroups*/ 768 && input_value_value !== (input_value_value = /*fieldValues*/ ctx[8][/*field*/ ctx[34].name]) && input.value !== input_value_value) { 75024 input.value = input_value_value; 75025 } 75026 75027 if (dirty[0] & /*activeFieldGroups*/ 512 && input_disabled_value !== (input_disabled_value = !/*isFieldEditable*/ ctx[12](/*field*/ ctx[34].name))) { 75028 input.disabled = input_disabled_value; 75029 } 75030 }, 75031 d(detaching) { 75032 if (detaching) { 75033 detach(div); 75034 } 75035 75036 mounted = false; 75037 dispose(); 75038 } 75039 }; 75040 } 75041 75042 // (156:6) {#each activeFieldGroups as [_groupKey, group]} 75043 function create_each_block$2(ctx) { 75044 let div; 75045 let t; 75046 let each_value_1 = ensure_array_like(/*group*/ ctx[31].fields); 75047 let each_blocks = []; 75048 75049 for (let i = 0; i < each_value_1.length; i += 1) { 75050 each_blocks[i] = create_each_block_1(get_each_context_1(ctx, each_value_1, i)); 75051 } 75052 75053 return { 75054 c() { 75055 div = element("div"); 75056 75057 for (let i = 0; i < each_blocks.length; i += 1) { 75058 each_blocks[i].c(); 75059 } 75060 75061 t = space(); 75062 attr(div, "class", "simple-field-group svelte-uox0m2"); 75063 }, 75064 m(target, anchor) { 75065 insert(target, div, anchor); 75066 75067 for (let i = 0; i < each_blocks.length; i += 1) { 75068 if (each_blocks[i]) { 75069 each_blocks[i].m(div, null); 75070 } 75071 } 75072 75073 append(div, t); 75074 }, 75075 p(ctx, dirty) { 75076 if (dirty[0] & /*activeFieldGroups, fieldValues, isFieldEditable, handleInputEvent*/ 21248) { 75077 each_value_1 = ensure_array_like(/*group*/ ctx[31].fields); 75078 let i; 75079 75080 for (i = 0; i < each_value_1.length; i += 1) { 75081 const child_ctx = get_each_context_1(ctx, each_value_1, i); 75082 75083 if (each_blocks[i]) { 75084 each_blocks[i].p(child_ctx, dirty); 75085 } else { 75086 each_blocks[i] = create_each_block_1(child_ctx); 75087 each_blocks[i].c(); 75088 each_blocks[i].m(div, t); 75089 } 75090 } 75091 75092 for (; i < each_blocks.length; i += 1) { 75093 each_blocks[i].d(1); 75094 } 75095 75096 each_blocks.length = each_value_1.length; 75097 } 75098 }, 75099 d(detaching) { 75100 if (detaching) { 75101 detach(div); 75102 } 75103 75104 destroy_each(each_blocks, detaching); 75105 } 75106 }; 75107 } 75108 75109 // (179:6) {#if successMessage} 75110 function create_if_block_4$1(ctx) { 75111 let div; 75112 let t0; 75113 let t1; 75114 75115 return { 75116 c() { 75117 div = element("div"); 75118 t0 = text("â "); 75119 t1 = text(/*successMessage*/ ctx[6]); 75120 attr(div, "class", "success-message svelte-uox0m2"); 75121 }, 75122 m(target, anchor) { 75123 insert(target, div, anchor); 75124 append(div, t0); 75125 append(div, t1); 75126 }, 75127 p(ctx, dirty) { 75128 if (dirty[0] & /*successMessage*/ 64) set_data(t1, /*successMessage*/ ctx[6]); 75129 }, 75130 d(detaching) { 75131 if (detaching) { 75132 detach(div); 75133 } 75134 } 75135 }; 75136 } 75137 75138 // (185:6) {#if errorMessage} 75139 function create_if_block_3$2(ctx) { 75140 let div; 75141 let t0; 75142 let t1; 75143 75144 return { 75145 c() { 75146 div = element("div"); 75147 t0 = text("â "); 75148 t1 = text(/*errorMessage*/ ctx[7]); 75149 attr(div, "class", "error-message svelte-uox0m2"); 75150 }, 75151 m(target, anchor) { 75152 insert(target, div, anchor); 75153 append(div, t0); 75154 append(div, t1); 75155 }, 75156 p(ctx, dirty) { 75157 if (dirty[0] & /*errorMessage*/ 128) set_data(t1, /*errorMessage*/ ctx[7]); 75158 }, 75159 d(detaching) { 75160 if (detaching) { 75161 detach(div); 75162 } 75163 } 75164 }; 75165 } 75166 75167 // (192:6) {#if editableFieldNames.length > 0} 75168 function create_if_block_2$2(ctx) { 75169 let div; 75170 let button; 75171 75172 let t_value = (/*submitting*/ ctx[11] 75173 ? 'Updating...' 75174 : /*loading*/ ctx[5] 75175 ? 'Loading...' 75176 : /*submitButtonText*/ ctx[4]) + ""; 75177 75178 let t; 75179 let button_disabled_value; 75180 75181 return { 75182 c() { 75183 div = element("div"); 75184 button = element("button"); 75185 t = text(t_value); 75186 attr(button, "type", "submit"); 75187 attr(button, "class", "submit-button svelte-uox0m2"); 75188 button.disabled = button_disabled_value = /*loading*/ ctx[5] || /*submitting*/ ctx[11] || !/*hasChanges*/ ctx[10]; 75189 attr(div, "class", "form-actions svelte-uox0m2"); 75190 }, 75191 m(target, anchor) { 75192 insert(target, div, anchor); 75193 append(div, button); 75194 append(button, t); 75195 }, 75196 p(ctx, dirty) { 75197 if (dirty[0] & /*submitting, loading, submitButtonText*/ 2096 && t_value !== (t_value = (/*submitting*/ ctx[11] 75198 ? 'Updating...' 75199 : /*loading*/ ctx[5] 75200 ? 'Loading...' 75201 : /*submitButtonText*/ ctx[4]) + "")) set_data(t, t_value); 75202
75203 if (dirty[0] & /*loading, submitting, hasChanges*/ 3104 && button_disabled_value !== (button_disabled_value = /*loading*/ ctx[5] || /*submitting*/ ctx[11] || !/*hasChanges*/ ctx[10])) { 75204 button.disabled = button_disabled_value; 75205 } 75206 }, 75207 d(detaching) { 75208 if (detaching) { 75209 detach(div); 75210 } 75211 } 75212 }; 75213 } 75214 75215 function create_fragment$5(ctx) { 75216 let div; 75217 let t0; 75218 let t1; 75219 let if_block0 = /*formTitle*/ ctx[2] && create_if_block_6$1(ctx); 75220 let if_block1 = /*formDescription*/ ctx[3] && create_if_block_5$1(ctx); 75221 75222 function select_block_type(ctx, dirty) { 75223 if (/*loading*/ ctx[5]) return create_if_block$3; 75224 if (/*customFields*/ ctx[0] && /*customFields*/ ctx[0].length > 0) return create_if_block_1$3; 75225 } 75226 75227 let current_block_type = select_block_type(ctx); 75228 let if_block2 = current_block_type && current_block_type(ctx); 75229 75230 return { 75231 c() { 75232 div = element("div"); 75233 if (if_block0) if_block0.c(); 75234 t0 = space(); 75235 if (if_block1) if_block1.c(); 75236 t1 = space(); 75237 if (if_block2) if_block2.c(); 75238 attr(div, "class", "subscription-custom-fields-container svelte-uox0m2"); 75239 }, 75240 m(target, anchor) { 75241 insert(target, div, anchor); 75242 if (if_block0) if_block0.m(div, null); 75243 append(div, t0); 75244 if (if_block1) if_block1.m(div, null); 75245 append(div, t1); 75246 if (if_block2) if_block2.m(div, null); 75247 }, 75248 p(ctx, dirty) { 75249 if (/*formTitle*/ ctx[2]) { 75250 if (if_block0) { 75251 if_block0.p(ctx, dirty); 75252 } else { 75253 if_block0 = create_if_block_6$1(ctx); 75254 if_block0.c(); 75255 if_block0.m(div, t0); 75256 } 75257 } else if (if_block0) { 75258 if_block0.d(1); 75259 if_block0 = null; 75260 } 75261 75262 if (/*formDescription*/ ctx[3]) { 75263 if (if_block1) { 75264 if_block1.p(ctx, dirty); 75265 } else { 75266 if_block1 = create_if_block_5$1(ctx); 75267 if_block1.c(); 75268 if_block1.m(div, t1); 75269 } 75270 } else if (if_block1) { 75271 if_block1.d(1); 75272 if_block1 = null; 75273 } 75274 75275 if (current_block_type === (current_block_type = select_block_type(ctx)) && if_block2) { 75276 if_block2.p(ctx, dirty); 75277 } else { 75278 if (if_block2) if_block2.d(1); 75279 if_block2 = current_block_type && current_block_type(ctx); 75280 75281 if (if_block2) { 75282 if_block2.c(); 75283 if_block2.m(div, null); 75284 } 75285 } 75286 }, 75287 i: noop, 75288 o: noop, 75289 d(detaching) { 75290 if (detaching) { 75291 detach(div); 75292 } 75293 75294 if (if_block0) if_block0.d(); 75295 if (if_block1) if_block1.d(); 75296 75297 if (if_block2) { 75298 if_block2.d(); 75299 } 75300 } 75301 }; 75302 } 75303 75304 function instance$5($$self, $$props, $$invalidate) { 75305 let hasChanges; 75306 let changedFields; 75307 let fieldGroups; 75308 let activeFieldGroups; 75309 let { customFields } = $$props; 75310 let { editableFieldNames } = $$props; 75311 let { formTitle } = $$props; 75312 let { formDescription } = $$props; 75313 let { submitButtonText } = $$props; 75314 let { onUpdateCustomFields } = $$props; 75315 let { loading = false } = $$props; 75316 75317 // New props for API call states 75318 let submitting = false; 75319 75320 let successMessage = ''; 75321 let errorMessage = ''; 75322 let fieldValues = {}; 75323 let originalFieldValues = {}; // Track original values to detect changes 75324 75325 // Custom validation function that only validates sections with changes 75326 const validateChangedSections = () => { 75327 // Custom fields don't have validation requirements 75328 return []; 75329 }; 75330 75331 // Initialize/reset form values when component mounts or custom fields change 75332 let lastCustomFieldsLength = 0; 75333 75334 // eslint-disable-next-line no-inner-declarations 75335 function initializeFormValues() { 75336 // Reset/initialize field values to original values 75337 $$invalidate(8, fieldValues = {}); 75338 75339 $$invalidate(16, originalFieldValues = {}); 75340 75341 customFields.forEach(field => { 75342 const originalValue = field.value || ''; 75343 $$invalidate(8, fieldValues[field.name] = originalValue, fieldValues); 75344 $$invalidate(16, originalFieldValues[field.name] = originalValue, originalFieldValues); 75345 }); 75346 75347 // Clear any messages and states 75348 $$invalidate(6, successMessage = ''); 75349 75350 $$invalidate(7, errorMessage = ''); 75351 $$invalidate(11, submitting = false); 75352 } 75353 75354 // Check if a field is editable 75355 const isFieldEditable = fieldName => { 75356 return editableFieldNames.includes(fieldName); 75357 }; 75358 75359 const handleSubmit = async () => { 75360 // Validate only the sections that have changes 75361 const validationErrors = validateChangedSections(); 75362 75363 if (validationErrors.length > 0) {
75364 $$invalidate(7, errorMessage = validationErrors.join(', ')); 75365 return; 75366 } 75367 75368 $$invalidate(11, submitting = true); 75369 $$invalidate(6, successMessage = ''); 75370 $$invalidate(7, errorMessage = ''); 75371 75372 try { 75373 // Only send the fields that have actually changed 75374 const changedFieldValues = {}; 75375 75376 changedFields.forEach(fieldName => { 75377 changedFieldValues[fieldName] = fieldValues[fieldName]; 75378 }); 75379 75380 await onUpdateCustomFields(changedFieldValues); 75381 $$invalidate(6, successMessage = 'Successfully updated subscription details!'); 75382 75383 // Clear all input boxes after successful update 75384 Object.keys(fieldValues).forEach(fieldName => { 75385 $$invalidate(8, fieldValues[fieldName] = '', fieldValues); 75386 $$invalidate(16, originalFieldValues[fieldName] = '', originalFieldValues); 75387 }); 75388 75389 // Clear success message after 5 seconds 75390 setTimeout( 75391 () => { 75392 $$invalidate(6, successMessage = ''); 75393 }, 75394 5000 75395 ); 75396 } catch(error) { 75397 $$invalidate(7, errorMessage = error.message || 'Failed to update subscription details. Please try again.'); 75398 } finally { 75399 $$invalidate(11, submitting = false); 75400 } 75401 }; 75402 75403 const handleFieldChange = (fieldName, value) => { 75404 $$invalidate(8, fieldValues[fieldName] = value, fieldValues); 75405 }; 75406 75407 const handleInputEvent = (fieldName, event) => { 75408 handleFieldChange(fieldName, event.target.value); 75409 }; 75410 75411 const addressFieldNames = [ 75412 'DeliveryAddressLine1__c', 75413 'DeliveryAddressLine2__c', 75414 'DeliveryCity__c', 75415 'DeliveryPostcode__c', 75416 'DeliveryZipcode__c', 75417 'DeliveryState__c', 75418 'DeliveryCountry__c' 75419 ]; 75420 75421 addressFieldNames.some(name => isFieldEditable(name)); 75422 addressFieldNames.some(name => fieldValues[name]); 75423 const input_handler = (field, e) => handleInputEvent(field.name, e); 75424 75425 $$self.$$set = $$props => {
75426 if ('customFields' in $$props) $$invalidate(0, customFields = $$props.customFields); 75427 if ('editableFieldNames' in $$props) $$invalidate(1, editableFieldNames = $$props.editableFieldNames); 75428 if ('formTitle' in $$props) $$invalidate(2, formTitle = $$props.formTitle); 75429 if ('formDescription' in $$props) $$invalidate(3, formDescription = $$props.formDescription); 75430 if ('submitButtonText' in $$props) $$invalidate(4, submitButtonText = $$props.submitButtonText); 75431 if ('onUpdateCustomFields' in $$props) $$invalidate(15, onUpdateCustomFields = $$props.onUpdateCustomFields); 75432 if ('loading' in $$props) $$invalidate(5, loading = $$props.loading); 75433 }; 75434 75435 $$self.$$.update = () => { 75436 if ($$self.$$.dirty[0] & /*fieldValues, originalFieldValues*/ 65792) { 75437 // Check if any field values have been modified 75438 $$invalidate(10, hasChanges = Object.keys(fieldValues).some(key => { 75439 const current = fieldValues[key]; 75440 const original = originalFieldValues[key]; 75441 75442 // Handle array values (multiselect) 75443 if (Array.isArray(current) && Array.isArray(original)) { 75444 return JSON.stringify(current.sort()) !== JSON.stringify(original.sort()); 75445 } 75446 75447 // Handle regular values 75448 return current !== original; 75449 })); 75450 } 75451 75452 if ($$self.$$.dirty[0] & /*fieldValues, originalFieldValues*/ 65792) { 75453 // Get the fields that have been changed (and thus the sections that should be validated) 75454 $$invalidate(19, changedFields = Object.keys(fieldValues).filter(key => { 75455 const current = fieldValues[key]; 75456 const original = originalFieldValues[key]; 75457 75458 // Handle array values (multiselect) 75459 if (Array.isArray(current) && Array.isArray(original)) { 75460 return JSON.stringify(current.sort()) !== JSON.stringify(original.sort()); 75461 } 75462 75463 // Handle regular values 75464 return current !== original; 75465 })); 75466 } 75467 75468 if ($$self.$$.dirty[0] & /*customFields*/ 1) { 75469 // Group fields by category - include all fields for display 75470 $$invalidate(18, fieldGroups = { all: { fields: customFields || [] } }); 75471 } 75472 75473 if ($$self.$$.dirty[0] & /*fieldGroups*/ 262144) { 75474 // Get only field groups that have fields 75475 $$invalidate(9, activeFieldGroups = Object.entries(fieldGroups).filter(([_key, group]) => group.fields.length > 0)); 75476 } 75477 75478 if ($$self.$$.dirty[0] & /*activeFieldGroups, changedFields*/ 524800) { 75479 // Get the sections that have changes and need validation 75480 activeFieldGroups.filter(([_groupKey, group]) => { 75481 return group.fields.some(field => changedFields.includes(field.name)); 75482 }); 75483 } 75484 75485 if ($$self.$$.dirty[0] & /*hasChanges, successMessage, errorMessage*/ 1216) { 75486 // Clear messages when user starts making changes 75487 if (hasChanges && (successMessage || errorMessage)) { 75488 $$invalidate(6, successMessage = ''); 75489 $$invalidate(7, errorMessage = ''); 75490 } 75491 } 75492 75493 if ($$self.$$.dirty[0] & /*customFields, lastCustomFieldsLength*/ 131073) { 75494 if (customFields && customFields.length !== lastCustomFieldsLength) { 75495 initializeFormValues(); 75496 $$invalidate(17, lastCustomFieldsLength = customFields.length); 75497 } 75498 } 75499 }; 75500 75501 return [ 75502 customFields, 75503 editableFieldNames, 75504 formTitle, 75505 formDescription, 75506 submitButtonText, 75507 loading, 75508 successMessage, 75509 errorMessage, 75510 fieldValues, 75511 activeFieldGroups, 75512 hasChanges, 75513 submitting, 75514 isFieldEditable, 75515 handleSubmit, 75516 handleInputEvent, 75517 onUpdateCustomFields, 75518 originalFieldValues, 75519 lastCustomFieldsLength, 75520 fieldGroups, 75521 changedFields, 75522 input_handler 75523 ]; 75524 } 75525 75526 class SubscriptionCustomFieldsList extends SvelteComponent { 75527 constructor(options) { 75528 super(); 75529 75530 init( 75531 this, 75532 options, 75533 instance$5, 75534 create_fragment$5, 75535 safe_not_equal, 75536 { 75537 customFields: 0, 75538 editableFieldNames: 1, 75539 formTitle: 2, 75540 formDescription: 3, 75541 submitButtonText: 4, 75542 onUpdateCustomFields: 15, 75543 loading: 5 75544 }, 75545 null, 75546 [-1, -1] 75547 ); 75548 } 75549 } 75550 75551 const subscriptionCustomFieldsListFactory = { 75552 matches: (sectionElement) => sectionElement.type === elementTypes.SUBSCRIPTION_CUSTOM_FIELDS_LIST, 75553 create: (form, formState, formActions, elementConfig) => { 75554 // Get the selected subscription's custom fields data 75555 const selectedSubscription = formState.selectedSubscription || formState.existingSubscriptions?.[0]; 75556 // Create custom fields array from field definitions and subscription data 75557 // Include all field definitions so both read-only and editable fields are available 75558 const customFields = (elementConfig.customFieldDefinitions || []).map(fieldDef => ({ 75559 ...fieldDef, 75560 value: selectedSubscription?.[fieldDef.name] || '' 75561 })); 75562 return { 75563 component: SubscriptionCustomFieldsList, 75564 props: { 75565 customFields, 75566 editableFieldNames: elementConfig.enabledCustomFields || [], 75567 formTitle: elementConfig.formTitle || 'Update Subscription Details', 75568 formDescription: elementConfig.formDescription || 'Update your subscription information below', 75569 submitButtonText: elementConfig.submitButtonText || 'Update Details', 75570 loading: formState.loadingSubscriptionCustomFields || false, 75571 onBack: () => { 75572 // Navigate back to the main subscription list
75573 formActions.jumpToPartStart(partTypes.LIST_SUBSCRIPTIONS.type); 75574 }, 75575 onUpdateCustomFields: async (fieldValues) => { 75576 // Check if we have a selected subscription with ID 75577 if (!selectedSubscription?.externalId) { 75578 throw new Error('No subscription selected for update'); 75579 } 75580 // Check if we have accountId for ownership verification 75581 if (!selectedSubscription?.accountId) { 75582 throw new Error('Subscription account information is missing. Please try again.'); 75583 } 75584 const subscriptionId = selectedSubscription.externalId; 75585 const accountId = selectedSubscription.accountId; 75586 // Set loading state 75587 formActions.updateFormState({ 75588 loadingSubscriptionCustomFields: true 75589 }); 75590 // Handle preview mode with mock API response 75591 if (form.environment?.previewMode) { 75592 // Simulate API delay 75593 await new Promise(resolve => setTimeout(resolve, 1000)); 75594 // Update form state with the new values 75595 formActions.updateFormState({ 75596 selectedSubscription: { 75597 ...selectedSubscription, 75598 ...fieldValues 75599 }, 75600 loadingSubscriptionCustomFields: false 75601 }); 75602 // Return mock success response 75603 return { success: true, message: 'Custom fields updated successfully (preview mode)' }; 75604 } 75605 try { 75606 // Make real API call to update subscription custom fields 75607 const response = await fetch(`/zephr/subscriptions/${subscriptionId}/custom-fields`, { 75608 method: 'PATCH', 75609 headers: { 75610 'Content-Type': 'application/json', 75611 }, 75612 body: JSON.stringify({ 75613 accountId: accountId, // Required for backend ownership verification 75614 customFields: fieldValues 75615 }) 75616 }); 75617 if (!response.ok) { 75618 const errorData = await response.json().catch(() => ({})); 75619 throw new Error(errorData.message || `Failed to update subscription: ${response.status} ${response.statusText}`); 75620 } 75621 const result = await response.json(); 75622 // Update form state with the new values 75623 formActions.updateFormState({ 75624 selectedSubscription: { 75625 ...selectedSubscription, 75626 ...fieldValues 75627 }, 75628 loadingSubscriptionCustomFields: false 75629 }); 75630 // Return success - the component will handle showing success message 75631 return result; 75632 } 75633 catch (error) { 75634 console.error('Error updating subscription custom fields:', error); 75635 // Clear loading state on error 75636 formActions.updateFormState({ 75637 loadingSubscriptionCustomFields: false 75638 }); 75639 throw error; // Re-throw so component can handle it 75640 } 75641 } 75642 } 75643 }; 75644 } 75645 }; 75646 75647 // TODO: This is a temporary list of countries that are accepted by Zuora. 75648 // We need to get this from the Contact metadata endpoint. 75649 const ZUORA_BILLING_COUNTRIES = [ 75650 "Afghanistan", 75651 "Aland Islands", 75652 "Albania", 75653 "Algeria", 75654 "American Samoa", 75655 "Andorra", 75656 "Angola", 75657 "Anguilla", 75658 "Antarctica", 75659 "Antigua And Barbuda", 75660 "Argentina", 75661 "Armenia", 75662 "Aruba", 75663 "Australia", 75664 "Austria", 75665 "Azerbaijan", 75666 "Bahamas", 75667 "Bahrain", 75668 "Bangladesh", 75669 "Barbados", 75670 "Belarus", 75671 "Belgium", 75672 "Belize", 75673 "Benin", 75674 "Bermuda", 75675 "Bhutan", 75676 "Bolivia", 75677 "Bonaire, Saint Eustatius and Saba", 75678 "Bosnia and Herzegovina", 75679 "Botswana", 75680 "Bouvet Island", 75681 "Brazil", 75682 "British Indian Ocean Territory", 75683 "Brunei Darussalam", 75684 "Bulgaria", 75685 "Burkina Faso", 75686 "Burundi", 75687 "Cambodia", 75688 "Cameroon", 75689 "Canada", 75690 "Cape Verde", 75691 "Cayman Islands", 75692 "Central African Republic", 75693 "Chad", 75694 "Chile", 75695 "China", 75696 "Christmas Island", 75697 "Cocos (Keeling) Islands", 75698 "Colombia", 75699 "Comoros", 75700 "Congo", 75701 "Congo, the Democratic Republic of the", 75702 "Cook Islands", 75703 "Costa Rica", 75704 "Cote d'Ivoire", 75705 "Croatia", 75706 "Cuba", 75707 "Curacao", 75708 "Cyprus", 75709 "Czech Republic", 75710 "Denmark", 75711 "Djibouti", 75712 "Dominica", 75713 "Dominican Republic", 75714 "Ecuador", 75715 "Egypt", 75716 "El Salvador", 75717 "Equatorial Guinea", 75718 "Eritrea", 75719 "Estonia", 75720 "Ethiopia", 75721 "Falkland Islands (Malvinas)", 75722 "Faroe Islands", 75723 "Fiji", 75724 "Finland", 75725 "France", 75726 "French Guiana", 75727 "French Polynesia", 75728 "French Southern Territories", 75729 "Gabon", 75730 "Gambia", 75731 "Georgia", 75732 "Germany", 75733 "Ghana", 75734 "Gibraltar", 75735 "Greece", 75736 "Greenland", 75737 "Grenada", 75738 "Guadeloupe", 75739 "Guam", 75740 "Guatemala", 75741 "Guernsey", 75742 "Guinea", 75743 "Guinea-Bissau", 75744 "Guyana", 75745 "Haiti", 75746 "Heard Island and McDonald Islands", 75747 "Holy See (Vatican City State)", 75748 "Honduras", 75749 "Hong Kong", 75750 "Hungary", 75751 "Iceland", 75752 "India", 75753 "Indonesia",
75754 "Iran, Islamic Republic of", 75755 "Iraq", 75756 "Ireland", 75757 "Isle of Man", 75758 "Israel", 75759 "Italy", 75760 "Jamaica", 75761 "Japan", 75762 "Jersey", 75763 "Jordan", 75764 "Kazakhstan", 75765 "Kenya", 75766 "Kiribati", 75767 "Korea, Democratic People's Republic of", 75768 "Korea, Republic of", 75769 "Kosovo", 75770 "Kuwait", 75771 "Kyrgyzstan", 75772 "Lao People's Democratic Republic", 75773 "Latvia", 75774 "Lebanon", 75775 "Lesotho", 75776 "Liberia", 75777 "Libyan Arab Jamahiriya", 75778 "Liechtenstein", 75779 "Lithuania", 75780 "Luxembourg", 75781 "Macao", 75782 "Macedonia, the former Yugoslav Republic of", 75783 "Madagascar", 75784 "Malawi", 75785 "Malaysia", 75786 "Maldives", 75787 "Mali", 75788 "Malta", 75789 "Marshall Islands", 75790 "Martinique", 75791 "Mauritania", 75792 "Mauritius", 75793 "Mayotte", 75794 "Mexico", 75795 "Micronesia, Federated States of", 75796 "Moldova, Republic of", 75797 "Monaco", 75798 "Mongolia", 75799 "Montenegro", 75800 "Montserrat", 75801 "Morocco", 75802 "Mozambique", 75803 "Myanmar", 75804 "Namibia", 75805 "Nauru", 75806 "Nepal", 75807 "Netherlands", 75808 "Netherlands Antilles", 75809 "New Caledonia", 75810 "New Zealand", 75811 "Nicaragua", 75812 "Niger", 75813 "Nigeria", 75814 "Niue", 75815 "Norfolk Island", 75816 "Northern Mariana Islands", 75817 "Norway", 75818 "Oman", 75819 "Pakistan", 75820 "Palau", 75821 "Palestinian Territory, Occupied", 75822 "Panama", 75823 "Papua New Guinea", 75824 "Paraguay", 75825 "Peru", 75826 "Philippines", 75827 "Pitcairn", 75828 "Poland", 75829 "Portugal", 75830 "Puerto Rico", 75831 "Qatar", 75832 "Reunion", 75833 "Romania", 75834 "Russian Federation", 75835 "Rwanda", 75836 "Saint Barthelemy", 75837 "Saint Helena", 75838 "Saint Kitts and Nevis", 75839 "Saint Lucia", 75840 "Saint Martin (French part)", 75841 "Saint Pierre and Miquelon", 75842 "Saint Vincent and the Grenadines", 75843 "Samoa", 75844 "San Marino", 75845 "Sao Tome and Principe", 75846 "Saudi Arabia", 75847 "Senegal", 75848 "Serbia", 75849 "Seychelles", 75850 "Sierra Leone", 75851 "Singapore", 75852 "Sint Maarten", 75853 "Slovakia", 75854 "Slovenia", 75855 "Solomon Islands", 75856 "Somalia", 75857 "South Africa", 75858 "South Georgia and the South Sandwich Islands", 75859 "South Sudan", 75860 "Spain", 75861 "Sri Lanka", 75862 "Sudan", 75863 "Suriname", 75864 "Svalbard and Jan Mayen", 75865 "Swaziland", 75866 "Sweden", 75867 "Switzerland", 75868 "Syrian Arab Republic", 75869 "Taiwan", 75870 "Tajikistan", 75871 "Tanzania, United Republic of", 75872 "Thailand", 75873 "Timor-Leste", 75874 "Togo", 75875 "Tokelau", 75876 "Tonga", 75877 "Trinidad and Tobago", 75878 "Tunisia", 75879 "Turkey", 75880 "Turkmenistan", 75881 "Turks and Caicos Islands", 75882 "Tuvalu", 75883 "Uganda", 75884 "Ukraine", 75885 "United Arab Emirates", 75886 "United Kingdom", 75887 "United States", 75888 "United States Minor Outlying Islands", 75889 "Uruguay", 75890 "Uzbekistan", 75891 "Vanuatu", 75892 "Venezuela", 75893 "Viet Nam", 75894 "Virgin Islands, British", 75895 "Virgin Islands, U.S.", 75896 "Wallis and Futuna", 75897 "Western Sahara", 75898 "Yemen", 75899 "Zambia", 75900 "Zimbabwe" 75901 ]; 75902 75903 /* src/components/elements/billToContact/BillToContact.svelte generated by Svelte v4.2.12 */ 75904 75905 function get_each_context$1(ctx, list, i) { 75906 const child_ctx = ctx.slice(); 75907 child_ctx[17] = list[i]; 75908 return child_ctx; 75909 } 75910 75911 // (63:6) {#each ZUORA_BILLING_COUNTRIES as country} 75912 function create_each_block$1(ctx) { 75913 let option; 75914 let t0; 75915 let t1; 75916 let option_selected_value; 75917 75918 return { 75919 c() { 75920 option = element("option"); 75921 t0 = text(/*country*/ ctx[17]); 75922 t1 = space(); 75923 option.__value = /*country*/ ctx[17]; 75924 set_input_value(option, option.__value); 75925 option.selected = option_selected_value = /*billToContact*/ ctx[0].country === /*country*/ ctx[17]; 75926 }, 75927 m(target, anchor) { 75928 insert(target, option, anchor); 75929 append(option, t0); 75930 append(option, t1); 75931 }, 75932 p(ctx, dirty) { 75933 if (dirty & /*billToContact*/ 1 && option_selected_value !== (option_selected_value = /*billToContact*/ ctx[0].country === /*country*/ ctx[17])) { 75934 option.selected = option_selected_value; 75935 } 75936 }, 75937 d(detaching) { 75938 if (detaching) { 75939 detach(option); 75940 } 75941 } 75942 }; 75943 } 75944 75945 // (83:4) {#if errors["address1"]} 75946 function create_if_block_6(ctx) { 75947 let div; 75948 let t_value = /*errors*/ ctx[1]["address1"] + ""; 75949 let t; 75950 75951 return { 75952 c() { 75953 div = element("div"); 75954 t = text(t_value); 75955 attr(div, "class", "error-text svelte-z564ap"); 75956 }, 75957 m(target, anchor) { 75958 insert(target, div, anchor); 75959 append(div, t); 75960 }, 75961 p(ctx, dirty) {
75962 if (dirty & /*errors*/ 2 && t_value !== (t_value = /*errors*/ ctx[1]["address1"] + "")) set_data(t, t_value); 75963 }, 75964 d(detaching) { 75965 if (detaching) { 75966 detach(div); 75967 } 75968 } 75969 }; 75970 } 75971 75972 // (97:4) {#if errors["address2"]} 75973 function create_if_block_5(ctx) { 75974 let div; 75975 let t_value = /*errors*/ ctx[1]["address2"] + ""; 75976 let t; 75977 75978 return { 75979 c() { 75980 div = element("div"); 75981 t = text(t_value); 75982 attr(div, "class", "error-text svelte-z564ap"); 75983 }, 75984 m(target, anchor) { 75985 insert(target, div, anchor); 75986 append(div, t); 75987 }, 75988 p(ctx, dirty) { 75989 if (dirty & /*errors*/ 2 && t_value !== (t_value = /*errors*/ ctx[1]["address2"] + "")) set_data(t, t_value); 75990 }, 75991 d(detaching) { 75992 if (detaching) { 75993 detach(div); 75994 } 75995 } 75996 }; 75997 } 75998 75999 // (111:4) {#if errors["city"]} 76000 function create_if_block_4(ctx) { 76001 let div; 76002 let t_value = /*errors*/ ctx[1]["city"] + ""; 76003 let t; 76004 76005 return { 76006 c() { 76007 div = element("div"); 76008 t = text(t_value); 76009 attr(div, "class", "error-text svelte-z564ap"); 76010 }, 76011 m(target, anchor) { 76012 insert(target, div, anchor); 76013 append(div, t); 76014 }, 76015 p(ctx, dirty) { 76016 if (dirty & /*errors*/ 2 && t_value !== (t_value = /*errors*/ ctx[1]["city"] + "")) set_data(t, t_value); 76017 }, 76018 d(detaching) { 76019 if (detaching) { 76020 detach(div); 76021 } 76022 } 76023 }; 76024 } 76025 76026 // (125:4) {#if errors["state"]} 76027 function create_if_block_3$1(ctx) { 76028 let div; 76029 let t_value = /*errors*/ ctx[1]["state"] + ""; 76030 let t; 76031 76032 return { 76033 c() { 76034 div = element("div"); 76035 t = text(t_value); 76036 attr(div, "class", "error-text svelte-z564ap"); 76037 }, 76038 m(target, anchor) { 76039 insert(target, div, anchor); 76040 append(div, t); 76041 }, 76042 p(ctx, dirty) { 76043 if (dirty & /*errors*/ 2 && t_value !== (t_value = /*errors*/ ctx[1]["state"] + "")) set_data(t, t_value); 76044 }, 76045 d(detaching) { 76046 if (detaching) { 76047 detach(div); 76048 } 76049 } 76050 }; 76051 } 76052 76053 // (139:4) {#if errors["zipCode"]} 76054 function create_if_block_2$1(ctx) { 76055 let div; 76056 let t_value = /*errors*/ ctx[1]["zipCode"] + ""; 76057 let t; 76058 76059 return { 76060 c() { 76061 div = element("div"); 76062 t = text(t_value); 76063 attr(div, "class", "error-text svelte-z564ap"); 76064 }, 76065 m(target, anchor) { 76066 insert(target, div, anchor); 76067 append(div, t); 76068 }, 76069 p(ctx, dirty) { 76070 if (dirty & /*errors*/ 2 && t_value !== (t_value = /*errors*/ ctx[1]["zipCode"] + "")) set_data(t, t_value); 76071 }, 76072 d(detaching) { 76073 if (detaching) { 76074 detach(div); 76075 } 76076 } 76077 }; 76078 } 76079 76080 // (153:4) {#if errors["county"]} 76081 function create_if_block_1$2(ctx) { 76082 let div; 76083 let t_value = /*errors*/ ctx[1]["county"] + ""; 76084 let t; 76085 76086 return { 76087 c() { 76088 div = element("div"); 76089 t = text(t_value); 76090 attr(div, "class", "error-text svelte-z564ap"); 76091 }, 76092 m(target, anchor) { 76093 insert(target, div, anchor); 76094 append(div, t); 76095 }, 76096 p(ctx, dirty) { 76097 if (dirty & /*errors*/ 2 && t_value !== (t_value = /*errors*/ ctx[1]["county"] + "")) set_data(t, t_value); 76098 }, 76099 d(detaching) { 76100 if (detaching) { 76101 detach(div); 76102 } 76103 } 76104 }; 76105 } 76106 76107 // (167:4) {#if errors["taxRegion"]} 76108 function create_if_block$2(ctx) { 76109 let div; 76110 let t_value = /*errors*/ ctx[1]["taxRegion"] + ""; 76111 let t; 76112 76113 return { 76114 c() { 76115 div = element("div"); 76116 t = text(t_value); 76117 attr(div, "class", "error-text svelte-z564ap"); 76118 }, 76119 m(target, anchor) { 76120 insert(target, div, anchor); 76121 append(div, t); 76122 }, 76123 p(ctx, dirty) { 76124 if (dirty & /*errors*/ 2 && t_value !== (t_value = /*errors*/ ctx[1]["taxRegion"] + "")) set_data(t, t_value); 76125 }, 76126 d(detaching) { 76127 if (detaching) { 76128 detach(div); 76129 } 76130 } 76131 }; 76132 } 76133 76134 function create_fragment$4(ctx) { 76135 let div8; 76136 let div0; 76137 let label0; 76138 let t1; 76139 let select; 76140 let option; 76141 let select_value_value; 76142 let t3; 76143 let div1; 76144 let label1; 76145 let t5; 76146 let input0; 76147 let t6; 76148 let t7; 76149 let div2; 76150 let label2; 76151 let t9; 76152 let input1; 76153 let t10; 76154 let t11; 76155 let div3; 76156 let label3; 76157 let t13; 76158 let input2; 76159 let t14; 76160 let t15; 76161 let div4; 76162 let label4; 76163 let t17; 76164 let input3; 76165 let t18; 76166 let t19; 76167 let div5; 76168 let label5; 76169 let t21; 76170 let input4; 76171 let t22; 76172 let t23; 76173 let div6; 76174 let label6; 76175 let t25; 76176 let input5; 76177 let t26; 76178 let t27; 76179 let div7; 76180 let label7; 76181 let t29; 76182 let input6; 76183 let t30; 76184 let mounted; 76185 let dispose; 76186 let each_value = ensure_array_like(ZUORA_BILLING_COUNTRIES); 76187 let each_blocks = []; 76188 76189 for (let i = 0; i < each_value.length; i += 1) { 76190 each_blocks[i] = create_each_block$1(get_each_context$1(ctx, each_value, i)); 76191 } 76192 76193 let if_block0 = /*errors*/ ctx[1]["address1"] && create_if_block_6(ctx); 76194 let if_block1 = /*errors*/ ctx[1]["address2"] && create_if_block_5(ctx); 76195 let if_block2 = /*errors*/ ctx[1]["city"] && create_if_block_4(ctx); 76196 let if_block3 = /*errors*/ ctx[1]["state"] && create_if_block_3$1(ctx); 76197 let if_block4 = /*errors*/ ctx[1]["zipCode"] && create_if_block_2$1(ctx); 76198 let if_block5 = /*errors*/ ctx[1]["county"] && create_if_block_1$2(ctx); 76199 let if_block6 = /*errors*/ ctx[1]["taxRegion"] && create_if_block$2(ctx); 76200 76201 return { 76202 c() { 76203 div8 = element("div"); 76204 div0 = element("div"); 76205 label0 = element("label"); 76206 label0.textContent = "Country"; 76207 t1 = space(); 76208 select = element("select"); 76209 option = element("option"); 76210 option.textContent = "Select a Country"; 76211 76212 for (let i = 0; i < each_blocks.length; i += 1) { 76213 each_blocks[i].c(); 76214 } 76215 76216 t3 = space(); 76217 div1 = element("div"); 76218 label1 = element("label"); 76219 label1.textContent = "Address 1"; 76220 t5 = space(); 76221 input0 = element("input"); 76222 t6 = space(); 76223 if (if_block0) if_block0.c(); 76224 t7 = space(); 76225 div2 = element("div"); 76226 label2 = element("label"); 76227 label2.textContent = "Address 2"; 76228 t9 = space(); 76229 input1 = element("input"); 76230 t10 = space(); 76231 if (if_block1) if_block1.c(); 76232 t11 = space(); 76233 div3 = element("div"); 76234 label3 = element("label"); 76235 label3.textContent = "City"; 76236 t13 = space(); 76237 input2 = element("input"); 76238 t14 = space(); 76239 if (if_block2) if_block2.c(); 76240 t15 = space(); 76241 div4 = element("div"); 76242 label4 = element("label"); 76243 label4.textContent = "State/Province"; 76244 t17 = space(); 76245 input3 = element("input"); 76246 t18 = space(); 76247 if (if_block3) if_block3.c(); 76248 t19 = space(); 76249 div5 = element("div"); 76250 label5 = element("label"); 76251 label5.textContent = "Postal Code"; 76252 t21 = space(); 76253 input4 = element("input"); 76254 t22 = space(); 76255 if (if_block4) if_block4.c(); 76256 t23 = space(); 76257 div6 = element("div"); 76258 label6 = element("label"); 76259 label6.textContent = "County"; 76260 t25 = space(); 76261 input5 = element("input"); 76262 t26 = space(); 76263 if (if_block5) if_block5.c(); 76264 t27 = space(); 76265 div7 = element("div"); 76266 label7 = element("label"); 76267 label7.textContent = "Tax Region"; 76268 t29 = space(); 76269 input6 = element("input"); 76270 t30 = space(); 76271 if (if_block6) if_block6.c(); 76272 attr(label0, "for", "address1"); 76273 attr(label0, "class", "svelte-z564ap"); 76274 option.disabled = true; 76275 option.__value = ""; 76276 set_input_value(option, option.__value); 76277 attr(select, "name", "country"); 76278 attr(select, "class", "zephr-form-input zephr-form-input-select svelte-z564ap"); 76279 toggle_class(select, "unselected", !/*billToContact*/ ctx[0].country); 76280 attr(div0, "class", "field svelte-z564ap"); 76281 attr(label1, "for", "address1"); 76282 attr(label1, "class", "svelte-z564ap"); 76283 attr(input0, "id", "address1"); 76284 attr(input0, "type", "text"); 76285 input0.required = true; 76286 attr(input0, "class", "svelte-z564ap"); 76287 toggle_class(input0, "error", !!/*errors*/ ctx[1]["address1"]); 76288 attr(div1, "class", "field svelte-z564ap"); 76289 attr(label2, "for", "address2"); 76290 attr(label2, "class", "svelte-z564ap"); 76291 attr(input1, "id", "address2"); 76292 attr(input1, "type", "text"); 76293 input1.required = true; 76294 attr(input1, "class", "svelte-z564ap"); 76295 toggle_class(input1, "error", !!/*errors*/ ctx[1]["address2"]); 76296 attr(div2, "class", "field svelte-z564ap"); 76297 attr(label3, "for", "city"); 76298 attr(label3, "class", "svelte-z564ap"); 76299 attr(input2, "id", "city"); 76300 attr(input2, "type", "text"); 76301 input2.required = true; 76302 attr(input2, "class", "svelte-z564ap"); 76303 toggle_class(input2, "error", !!/*errors*/ ctx[1]["city"]); 76304 attr(div3, "class", "field svelte-z564ap"); 76305 attr(label4, "for", "state"); 76306 attr(label4, "class", "svelte-z564ap"); 76307 attr(input3, "id", "state"); 76308 attr(input3, "type", "text"); 76309 input3.required = true; 76310 attr(input3, "class", "svelte-z564ap"); 76311 toggle_class(input3, "error", !!/*errors*/ ctx[1]["state"]); 76312 attr(div4, "class", "field svelte-z564ap"); 76313 attr(label5, "for", "zipCode"); 76314 attr(label5, "class", "svelte-z564ap"); 76315 attr(input4, "id", "zipCode"); 76316 attr(input4, "type", "text"); 76317 input4.required = true; 76318 attr(input4, "class", "svelte-z564ap"); 76319 toggle_class(input4, "error", !!/*errors*/ ctx[1]["zipCode"]); 76320 attr(div5, "class", "field svelte-z564ap"); 76321 attr(label6, "for", "county"); 76322 attr(label6, "class", "svelte-z564ap"); 76323 attr(input5, "id", "county"); 76324 attr(input5, "type", "text"); 76325 input5.required = true; 76326 attr(input5, "class", "svelte-z564ap"); 76327 toggle_class(input5, "error", !!/*errors*/ ctx[1]["county"]); 76328 attr(div6, "class", "field svelte-z564ap"); 76329 attr(label7, "for", "taxRegion"); 76330 attr(label7, "class", "svelte-z564ap"); 76331 attr(input6, "id", "taxRegion"); 76332 attr(input6, "type", "text"); 76333 input6.required = true; 76334 attr(input6, "class", "svelte-z564ap"); 76335 toggle_class(input6, "error", !!/*errors*/ ctx[1]["taxRegion"]); 76336 attr(div7, "class", "field svelte-z564ap"); 76337 attr(div8, "class", "bill-to-contact-section svelte-z564ap"); 76338 }, 76339 m(target, anchor) {
76340 insert(target, div8, anchor); 76341 append(div8, div0); 76342 append(div0, label0); 76343 append(div0, t1); 76344 append(div0, select); 76345 append(select, option); 76346 76347 for (let i = 0; i < each_blocks.length; i += 1) { 76348 if (each_blocks[i]) { 76349 each_blocks[i].m(select, null); 76350 } 76351 } 76352 76353 select_option(select, /*billToContact*/ ctx[0].country ?? ""); 76354 append(div8, t3); 76355 append(div8, div1); 76356 append(div1, label1); 76357 append(div1, t5); 76358 append(div1, input0); 76359 set_input_value(input0, /*billToContact*/ ctx[0].address1); 76360 append(div1, t6); 76361 if (if_block0) if_block0.m(div1, null); 76362 append(div8, t7); 76363 append(div8, div2); 76364 append(div2, label2); 76365 append(div2, t9); 76366 append(div2, input1); 76367 set_input_value(input1, /*billToContact*/ ctx[0].address2); 76368 append(div2, t10); 76369 if (if_block1) if_block1.m(div2, null); 76370 append(div8, t11); 76371 append(div8, div3); 76372 append(div3, label3); 76373 append(div3, t13); 76374 append(div3, input2); 76375 set_input_value(input2, /*billToContact*/ ctx[0].city); 76376 append(div3, t14); 76377 if (if_block2) if_block2.m(div3, null); 76378 append(div8, t15); 76379 append(div8, div4); 76380 append(div4, label4); 76381 append(div4, t17); 76382 append(div4, input3); 76383 set_input_value(input3, /*billToContact*/ ctx[0].state); 76384 append(div4, t18); 76385 if (if_block3) if_block3.m(div4, null); 76386 append(div8, t19); 76387 append(div8, div5); 76388 append(div5, label5); 76389 append(div5, t21); 76390 append(div5, input4); 76391 set_input_value(input4, /*billToContact*/ ctx[0].zipCode); 76392 append(div5, t22); 76393 if (if_block4) if_block4.m(div5, null); 76394 append(div8, t23); 76395 append(div8, div6); 76396 append(div6, label6); 76397 append(div6, t25); 76398 append(div6, input5); 76399 set_input_value(input5, /*billToContact*/ ctx[0].county); 76400 append(div6, t26); 76401 if (if_block5) if_block5.m(div6, null); 76402 append(div8, t27); 76403 append(div8, div7); 76404 append(div7, label7); 76405 append(div7, t29); 76406 append(div7, input6); 76407 set_input_value(input6, /*billToContact*/ ctx[0].taxRegion); 76408 append(div7, t30); 76409 if (if_block6) if_block6.m(div7, null); 76410 76411 if (!mounted) { 76412 dispose = [ 76413 listen(select, "change", /*onCountrySelect*/ ctx[3]), 76414 listen(input0, "input", /*input0_input_handler*/ ctx[6]), 76415 listen(input0, "input", /*updateSuspendResumeSubscription*/ ctx[2]), 76416 listen(input1, "input", /*input1_input_handler*/ ctx[7]), 76417 listen(input1, "input", /*updateSuspendResumeSubscription*/ ctx[2]), 76418 listen(input2, "input", /*input2_input_handler*/ ctx[8]), 76419 listen(input2, "input", /*updateSuspendResumeSubscription*/ ctx[2]), 76420 listen(input3, "input", /*input3_input_handler*/ ctx[9]), 76421 listen(input3, "input", /*updateSuspendResumeSubscription*/ ctx[2]), 76422 listen(input4, "input", /*input4_input_handler*/ ctx[10]), 76423 listen(input4, "input", /*updateSuspendResumeSubscription*/ ctx[2]), 76424 listen(input5, "input", /*input5_input_handler*/ ctx[11]), 76425 listen(input5, "input", /*updateSuspendResumeSubscription*/ ctx[2]), 76426 listen(input6, "input", /*input6_input_handler*/ ctx[12]), 76427 listen(input6, "input", /*updateSuspendResumeSubscription*/ ctx[2]) 76428 ]; 76429 76430 mounted = true; 76431 } 76432 }, 76433 p(ctx, [dirty]) { 76434 if (dirty & /*billToContact*/ 1) { 76435 each_value = ensure_array_like(ZUORA_BILLING_COUNTRIES); 76436 let i; 76437 76438 for (i = 0; i < each_value.length; i += 1) { 76439 const child_ctx = get_each_context$1(ctx, each_value, i); 76440 76441 if (each_blocks[i]) { 76442 each_blocks[i].p(child_ctx, dirty); 76443 } else { 76444 each_blocks[i] = create_each_block$1(child_ctx); 76445 each_blocks[i].c(); 76446 each_blocks[i].m(select, null); 76447 } 76448 } 76449 76450 for (; i < each_blocks.length; i += 1) { 76451 each_blocks[i].d(1); 76452 } 76453 76454 each_blocks.length = each_value.length; 76455 } 76456 76457 if (dirty & /*billToContact*/ 1 && select_value_value !== (select_value_value = /*billToContact*/ ctx[0].country ?? "")) { 76458 select_option(select, /*billToContact*/ ctx[0].country ?? ""); 76459 } 76460 76461 if (dirty & /*billToContact*/ 1) { 76462 toggle_class(select, "unselected", !/*billToContact*/ ctx[0].country); 76463 } 76464
76465 if (dirty & /*billToContact*/ 1 && input0.value !== /*billToContact*/ ctx[0].address1) { 76466 set_input_value(input0, /*billToContact*/ ctx[0].address1); 76467 } 76468 76469 if (dirty & /*errors*/ 2) { 76470 toggle_class(input0, "error", !!/*errors*/ ctx[1]["address1"]); 76471 } 76472 76473 if (/*errors*/ ctx[1]["address1"]) { 76474 if (if_block0) { 76475 if_block0.p(ctx, dirty); 76476 } else { 76477 if_block0 = create_if_block_6(ctx); 76478 if_block0.c(); 76479 if_block0.m(div1, null); 76480 } 76481 } else if (if_block0) { 76482 if_block0.d(1); 76483 if_block0 = null; 76484 } 76485 76486 if (dirty & /*billToContact*/ 1 && input1.value !== /*billToContact*/ ctx[0].address2) { 76487 set_input_value(input1, /*billToContact*/ ctx[0].address2); 76488 } 76489 76490 if (dirty & /*errors*/ 2) { 76491 toggle_class(input1, "error", !!/*errors*/ ctx[1]["address2"]); 76492 } 76493 76494 if (/*errors*/ ctx[1]["address2"]) { 76495 if (if_block1) { 76496 if_block1.p(ctx, dirty); 76497 } else { 76498 if_block1 = create_if_block_5(ctx); 76499 if_block1.c(); 76500 if_block1.m(div2, null); 76501 } 76502 } else if (if_block1) { 76503 if_block1.d(1); 76504 if_block1 = null; 76505 } 76506 76507 if (dirty & /*billToContact*/ 1 && input2.value !== /*billToContact*/ ctx[0].city) { 76508 set_input_value(input2, /*billToContact*/ ctx[0].city); 76509 } 76510 76511 if (dirty & /*errors*/ 2) { 76512 toggle_class(input2, "error", !!/*errors*/ ctx[1]["city"]); 76513 } 76514 76515 if (/*errors*/ ctx[1]["city"]) { 76516 if (if_block2) { 76517 if_block2.p(ctx, dirty); 76518 } else { 76519 if_block2 = create_if_block_4(ctx); 76520 if_block2.c(); 76521 if_block2.m(div3, null); 76522 } 76523 } else if (if_block2) { 76524 if_block2.d(1); 76525 if_block2 = null; 76526 } 76527 76528 if (dirty & /*billToContact*/ 1 && input3.value !== /*billToContact*/ ctx[0].state) { 76529 set_input_value(input3, /*billToContact*/ ctx[0].state); 76530 } 76531 76532 if (dirty & /*errors*/ 2) { 76533 toggle_class(input3, "error", !!/*errors*/ ctx[1]["state"]); 76534 } 76535 76536 if (/*errors*/ ctx[1]["state"]) { 76537 if (if_block3) { 76538 if_block3.p(ctx, dirty); 76539 } else { 76540 if_block3 = create_if_block_3$1(ctx); 76541 if_block3.c(); 76542 if_block3.m(div4, null); 76543 } 76544 } else if (if_block3) { 76545 if_block3.d(1); 76546 if_block3 = null; 76547 } 76548 76549 if (dirty & /*billToContact*/ 1 && input4.value !== /*billToContact*/ ctx[0].zipCode) { 76550 set_input_value(input4, /*billToContact*/ ctx[0].zipCode); 76551 } 76552 76553 if (dirty & /*errors*/ 2) { 76554 toggle_class(input4, "error", !!/*errors*/ ctx[1]["zipCode"]); 76555 } 76556 76557 if (/*errors*/ ctx[1]["zipCode"]) { 76558 if (if_block4) { 76559 if_block4.p(ctx, dirty); 76560 } else { 76561 if_block4 = create_if_block_2$1(ctx); 76562 if_block4.c(); 76563 if_block4.m(div5, null); 76564 } 76565 } else if (if_block4) { 76566 if_block4.d(1); 76567 if_block4 = null; 76568 } 76569 76570 if (dirty & /*billToContact*/ 1 && input5.value !== /*billToContact*/ ctx[0].county) { 76571 set_input_value(input5, /*billToContact*/ ctx[0].county); 76572 } 76573 76574 if (dirty & /*errors*/ 2) { 76575 toggle_class(input5, "error", !!/*errors*/ ctx[1]["county"]); 76576 } 76577 76578 if (/*errors*/ ctx[1]["county"]) { 76579 if (if_block5) { 76580 if_block5.p(ctx, dirty); 76581 } else { 76582 if_block5 = create_if_block_1$2(ctx); 76583 if_block5.c(); 76584 if_block5.m(div6, null); 76585 } 76586 } else if (if_block5) { 76587 if_block5.d(1); 76588 if_block5 = null; 76589 } 76590 76591 if (dirty & /*billToContact*/ 1 && input6.value !== /*billToContact*/ ctx[0].taxRegion) { 76592 set_input_value(input6, /*billToContact*/ ctx[0].taxRegion); 76593 } 76594 76595 if (dirty & /*errors*/ 2) { 76596 toggle_class(input6, "error", !!/*errors*/ ctx[1]["taxRegion"]); 76597 } 76598 76599 if (/*errors*/ ctx[1]["taxRegion"]) { 76600 if (if_block6) { 76601 if_block6.p(ctx, dirty); 76602 } else { 76603 if_block6 = create_if_block$2(ctx); 76604 if_block6.c(); 76605 if_block6.m(div7, null); 76606 } 76607 } else if (if_block6) { 76608 if_block6.d(1); 76609 if_block6 = null; 76610 } 76611 }, 76612 i: noop, 76613 o: noop, 76614 d(detaching) { 76615 if (detaching) { 76616 detach(div8); 76617 } 76618 76619 destroy_each(each_blocks, detaching); 76620 if (if_block0) if_block0.d(); 76621 if (if_block1) if_block1.d(); 76622 if (if_block2) if_block2.d(); 76623 if (if_block3) if_block3.d(); 76624 if (if_block4) if_block4.d(); 76625 if (if_block5) if_block5.d(); 76626 if (if_block6) if_block6.d(); 76627 mounted = false;
76628 run_all(dispose); 76629 } 76630 }; 76631 } 76632 76633 function instance$4($$self, $$props, $$invalidate) { 76634 let { formState } = $$props; 76635 let { formActions } = $$props; 76636 const dispatch = createEventDispatcher(); 76637 let billToContact = {}; 76638 const sourceContact = formState.selectedSubscription?.billToContact || {}; 76639 76640 const fieldsToExtract = [ 76641 'country', 76642 'address1', 76643 'address2', 76644 'city', 76645 'state', 76646 'zipCode', 76647 'county', 76648 'taxRegion' 76649 ]; 76650 76651 for (const field of fieldsToExtract) { 76652 if (sourceContact[field] != null) { 76653 billToContact[field] = sourceContact[field]; 76654 } 76655 } 76656 76657 let errors = {}; 76658 76659 // Update form state when input changes 76660 const updateSuspendResumeSubscription = () => { 76661 formActions.updateFormState({ billToContact }); 76662 validateForm(); 76663 }; 76664 76665 const onCountrySelect = e => { 76666 $$invalidate(0, billToContact.country = e.target.value, billToContact); 76667 updateSuspendResumeSubscription(); 76668 }; 76669 76670 const validateForm = () => { 76671 // Reset errors 76672 $$invalidate(1, errors = {}); 76673 76674 if (!!billToContact.address1 && billToContact.address1.length > 255) { 76675 $$invalidate(1, errors["address1"] = "Address 1 should be 255 characters or less", errors); 76676 } 76677 76678 if (!!billToContact.address2 && billToContact.address2.length > 255) { 76679 $$invalidate(1, errors["address2"] = "Address 2 should be 255 characters or less", errors); 76680 } 76681 76682 if (!!billToContact.city && billToContact.city.length > 40) { 76683 $$invalidate(1, errors["city"] = "City should be 40 characters or less", errors); 76684 } 76685 76686 if (!!billToContact.county && billToContact.county.length > 32) { 76687 $$invalidate(1, errors["county"] = "County should be 32 characters or less", errors); 76688 } 76689 76690 if (!!billToContact.zipCode && billToContact.zipCode.length > 20) { 76691 $$invalidate(1, errors["zipCode"] = "Postal code should be 20 characters or less", errors); 76692 } 76693 76694 // Dispatch event for form validity 76695 const isValid = Object.keys(errors).length === 0; 76696 76697 dispatch("validity", { isValid }); 76698 }; 76699 76700 function input0_input_handler() { 76701 billToContact.address1 = this.value; 76702 $$invalidate(0, billToContact); 76703 } 76704 76705 function input1_input_handler() { 76706 billToContact.address2 = this.value; 76707 $$invalidate(0, billToContact); 76708 } 76709 76710 function input2_input_handler() { 76711 billToContact.city = this.value; 76712 $$invalidate(0, billToContact); 76713 } 76714 76715 function input3_input_handler() { 76716 billToContact.state = this.value; 76717 $$invalidate(0, billToContact); 76718 } 76719 76720 function input4_input_handler() { 76721 billToContact.zipCode = this.value; 76722 $$invalidate(0, billToContact); 76723 } 76724 76725 function input5_input_handler() { 76726 billToContact.county = this.value; 76727 $$invalidate(0, billToContact); 76728 } 76729 76730 function input6_input_handler() { 76731 billToContact.taxRegion = this.value; 76732 $$invalidate(0, billToContact); 76733 } 76734 76735 $$self.$$set = $$props => {
76736 if ('formState' in $$props) $$invalidate(4, formState = $$props.formState); 76737 if ('formActions' in $$props) $$invalidate(5, formActions = $$props.formActions); 76738 }; 76739 76740 return [ 76741 billToContact, 76742 errors, 76743 updateSuspendResumeSubscription, 76744 onCountrySelect, 76745 formState, 76746 formActions, 76747 input0_input_handler, 76748 input1_input_handler, 76749 input2_input_handler, 76750 input3_input_handler, 76751 input4_input_handler, 76752 input5_input_handler, 76753 input6_input_handler 76754 ]; 76755 } 76756 76757 class BillToContact extends SvelteComponent { 76758 constructor(options) { 76759 super(); 76760 init(this, options, instance$4, create_fragment$4, safe_not_equal, { formState: 4, formActions: 5 }); 76761 } 76762 } 76763 76764 const billToContactFactory = { 76765 matches: (sectionElement) => sectionElement.type === elementTypes.BILL_TO_CONTACT, 76766 create: (form, formState, formActions) => { 76767 return { 76768 component: BillToContact, 76769 props: { 76770 form, 76771 formState, 76772 formActions, 76773 } 76774 }; 76775 } 76776 }; 76777 76778 const factory$1 = { 76779 matches: (sectionElement) => sectionElement.type === elementTypes.BILLING_COUNTRY, 76780 create: (form, formState, formActions, elementConfig) => { 76781 const disabled = elementConfig.disabled || formState.isBusy; 76782 // Only show for zuora-billing payment provider AND when countryLabel is configured 76783 if (form.organisationConfiguration.paymentProvider !== 'zuora-billing') { 76784 return null; 76785 } 76786 const paymentConfig = formConfigAs(form); 76787 // Don't render if countryLabel is not configured in admin console 76788 if (!paymentConfig.countryLabel) { 76789 return null; 76790 } 76791 const configuredLabel = paymentConfig.countryLabel || elementConfig.label || "Country"; 76792 return ({ 76793 component: BillingCountry, 76794 props: { 76795 formKey: form.uniqueKey, 76796 config: { 76797 ...elementConfig, 76798 label: configuredLabel 76799 }, 76800 value: formState.billingCountry || "", 76801 disabled, 76802 onChange: (value) => { 76803 if (!disabled) { 76804 formActions.updateFormState({ 76805 billingCountry: value, 76806 // Clear state when country changes (always clear to avoid US/CA state conflicts) 76807 billingState: "", 76808 serverErrors: [] 76809 }); 76810 logDataLayerEvent(form, 'zephr_form_input_change', { 76811 inputName: `zephr-form-billing-country-${form.uniqueKey}`, 76812 sectionId: formState.currentSection.type, 76813 field: 'billing_country' 76814 }); 76815 } 76816 }, 76817 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 76818 inputName: `zephr-form-billing-country-${form.uniqueKey}`, 76819 sectionId: formState.currentSection.type, 76820 field: 'billing_country' 76821 }), 76822 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 76823 inputName: `zephr-form-billing-country-${form.uniqueKey}`, 76824 sectionId: formState.currentSection.type, 76825 field: 'billing_country' 76826 }), 76827 isPaymentForm: form.formType === FormType.PAYMENT, 76828 }, 76829 isValid: !elementConfig.required || !!formState.billingCountry 76830 }); 76831 } 76832 }; 76833 76834 const factory = { 76835 matches: (sectionElement) => sectionElement.type === elementTypes.BILLING_STATE, 76836 create: (form, formState, formActions, elementConfig) => { 76837 const disabled = elementConfig.disabled || formState.isBusy; 76838 // Only show for zuora-billing payment provider AND when stateLabel is configured 76839 if (form.organisationConfiguration.paymentProvider !== 'zuora-billing') { 76840 return null; 76841 } 76842 const paymentConfig = formConfigAs(form); 76843 // Don't render if stateLabel is not configured in admin console 76844 if (!paymentConfig.stateLabel) { 76845 return null; 76846 } 76847 const configuredLabel = paymentConfig.stateLabel || elementConfig.label || "State"; 76848 return ({ 76849 component: BillingState, 76850 props: { 76851 formKey: form.uniqueKey, 76852 config: { 76853 ...elementConfig, 76854 label: configuredLabel 76855 }, 76856 value: formState.billingState || "", 76857 billingCountry: formState.billingCountry || "", 76858 disabled, 76859 onChange: (value) => { 76860 if (!disabled) { 76861 formActions.updateFormState({ 76862 billingState: value, 76863 serverErrors: [] 76864 }); 76865 logDataLayerEvent(form, 'zephr_form_input_change', { 76866 inputName: `zephr-form-billing-state-${form.uniqueKey}`, 76867 sectionId: formState.currentSection.type, 76868 field: 'billing_state' 76869 }); 76870 } 76871 }, 76872 onFocus: () => logDataLayerEvent(form, 'zephr_form_input_focus', { 76873 inputName: `zephr-form-billing-state-${form.uniqueKey}`, 76874 sectionId: formState.currentSection.type, 76875 field: 'billing_state' 76876 }), 76877 onBlur: () => logDataLayerEvent(form, 'zephr_form_input_blur', { 76878 inputName: `zephr-form-billing-state-${form.uniqueKey}`, 76879 sectionId: formState.currentSection.type, 76880 field: 'billing_state' 76881 }), 76882 isPaymentForm: form.formType === FormType.PAYMENT, 76883 }, 76884 isValid: !elementConfig.required || 76885 (formState.billingCountry === "US" || formState.billingCountry === "CA" 76886 ? !!formState.billingState 76887 : true) // Not required if country is not US or CA 76888 }); 76889 } 76890 }; 76891 76892 const elementFactories = [ 76893 factory$u, 76894 factory$t, 76895 factory$s, 76896 factory$r, 76897 factory$q, 76898 factory$p, 76899 factory$o, 76900 factory$n, 76901 paymentAutoRenewToggleFactory, 76902 factory$m, 76903 factory$l, 76904 factory$k, 76905 factory$j, 76906 factory$i, 76907 factory$h, 76908 factory$g, 76909 factory$f, 76910 factory$e, 76911 factory$d, 76912 factory$c, 76913 factory$b, 76914 factory$a, 76915 factory$9, 76916 factory$8, 76917 factory$7, 76918 subscriptionSelectFactory, 76919 subscriptionsListFactory,
76920 pastSubscriptionsLinkFactory, 76921 changePaymentMethodButtonFactory, 76922 eventLinkFactory, 76923 factory$6, 76924 factory$5, 76925 readOnlyUserAttributeFactory, 76926 deviceSessionsFactory, 76927 deviceSessionsSignOutAll, 76928 billingHistoryFactory, 76929 factory$4, 76930 factory$3, 76931 recipientNameFactory, 76932 recipientEmailFactory, 76933 recipientAddressFactory, 76934 recipientMessageFactory, 76935 factory$2, 76936 giftSubscriptionsListFactory, 76937 giftToggleFactory, 76938 giftFutureDateToggleFactory, 76939 giftFutureDateInputFactory, 76940 suspendResumeSubscriptionFactory, 76941 subscriptionCustomFieldsUpdateFactory, 76942 subscriptionCustomFieldsListFactory, 76943 billToContactFactory, 76944 factory$1, 76945 factory, 76946 ]; 76947 76948 /* src/components/ElementResolver.svelte generated by Svelte v4.2.12 */ 76949 76950 function create_if_block$1(ctx) { 76951 let switch_instance; 76952 let t; 76953 let if_block_anchor; 76954 let current; 76955 76956 const switch_instance_spread_levels = [ 76957 /*enrichPropsWithServerError*/ ctx[4](/*element*/ ctx[2].props, /*formState*/ ctx[0], /*sectionElement*/ ctx[1]) 76958 ]; 76959 76960 var switch_value = /*element*/ ctx[2].component; 76961 76962 function switch_props(ctx, dirty) { 76963 let switch_instance_props = {}; 76964 76965 for (let i = 0; i < switch_instance_spread_levels.length; i += 1) { 76966 switch_instance_props = assign(switch_instance_props, switch_instance_spread_levels[i]); 76967 } 76968 76969 if (dirty !== undefined && dirty & /*enrichPropsWithServerError, element, formState, sectionElement*/ 23) { 76970 switch_instance_props = assign(switch_instance_props, get_spread_update(switch_instance_spread_levels, [ 76971 get_spread_object(/*enrichPropsWithServerError*/ ctx[4](/*element*/ ctx[2].props, /*formState*/ ctx[0], /*sectionElement*/ ctx[1])) 76972 ])); 76973 } 76974 76975 return { props: switch_instance_props }; 76976 } 76977 76978 if (switch_value) { 76979 switch_instance = construct_svelte_component(switch_value, switch_props(ctx)); 76980 } 76981 76982 let if_block = /*element*/ ctx[2].isValid === false && /*formState*/ ctx[0].showFieldErrors && create_if_block_1$1(ctx); 76983 76984 return { 76985 c() { 76986 if (switch_instance) create_component(switch_instance.$$.fragment); 76987 t = space(); 76988 if (if_block) if_block.c(); 76989 if_block_anchor = empty(); 76990 }, 76991 m(target, anchor) { 76992 if (switch_instance) mount_component(switch_instance, target, anchor); 76993 insert(target, t, anchor); 76994 if (if_block) if_block.m(target, anchor); 76995 insert(target, if_block_anchor, anchor); 76996 current = true; 76997 }, 76998 p(ctx, dirty) { 76999 if (dirty & /*element*/ 4 && switch_value !== (switch_value = /*element*/ ctx[2].component)) { 77000 if (switch_instance) { 77001 group_outros(); 77002 const old_component = switch_instance; 77003 77004 transition_out(old_component.$$.fragment, 1, 0, () => { 77005 destroy_component(old_component, 1); 77006 }); 77007 77008 check_outros(); 77009 } 77010 77011 if (switch_value) { 77012 switch_instance = construct_svelte_component(switch_value, switch_props(ctx, dirty)); 77013 create_component(switch_instance.$$.fragment); 77014 transition_in(switch_instance.$$.fragment, 1); 77015 mount_component(switch_instance, t.parentNode, t); 77016 } else { 77017 switch_instance = null; 77018 } 77019 } else if (switch_value) { 77020 const switch_instance_changes = (dirty & /*enrichPropsWithServerError, element, formState, sectionElement*/ 23) 77021 ? get_spread_update(switch_instance_spread_levels, [ 77022 get_spread_object(/*enrichPropsWithServerError*/ ctx[4](/*element*/ ctx[2].props, /*formState*/ ctx[0], /*sectionElement*/ ctx[1])) 77023 ]) 77024 : {}; 77025 77026 switch_instance.$set(switch_instance_changes); 77027 } 77028 77029 if (/*element*/ ctx[2].isValid === false && /*formState*/ ctx[0].showFieldErrors) { 77030 if (if_block) { 77031 if_block.p(ctx, dirty); 77032 77033 if (dirty & /*element, formState*/ 5) { 77034 transition_in(if_block, 1); 77035 } 77036 } else { 77037 if_block = create_if_block_1$1(ctx); 77038 if_block.c(); 77039 transition_in(if_block, 1); 77040 if_block.m(if_block_anchor.parentNode, if_block_anchor); 77041 } 77042 } else if (if_block) { 77043 group_outros(); 77044 77045 transition_out(if_block, 1, 1, () => { 77046 if_block = null; 77047 }); 77048 77049 check_outros(); 77050 } 77051 }, 77052 i(local) { 77053 if (current) return; 77054 if (switch_instance) transition_in(switch_instance.$$.fragment, local); 77055 transition_in(if_block); 77056 current = true; 77057 }, 77058 o(local) { 77059 if (switch_instance) transition_out(switch_instance.$$.fragment, local); 77060 transition_out(if_block); 77061 current = false;
77062 }, 77063 d(detaching) { 77064 if (detaching) { 77065 detach(t); 77066 detach(if_block_anchor); 77067 } 77068 77069 if (switch_instance) destroy_component(switch_instance, detaching); 77070 if (if_block) if_block.d(detaching); 77071 } 77072 }; 77073 } 77074 77075 // (61:2) {#if element.isValid === false && formState.showFieldErrors} 77076 function create_if_block_1$1(ctx) { 77077 let errormessage; 77078 let current; 77079 77080 errormessage = new ErrorMessage({ 77081 props: { 77082 error: "Field is invalid", 77083 isPaymentForm: /*isPaymentForm*/ ctx[3] 77084 } 77085 }); 77086 77087 return { 77088 c() { 77089 create_component(errormessage.$$.fragment); 77090 }, 77091 m(target, anchor) { 77092 mount_component(errormessage, target, anchor); 77093 current = true; 77094 }, 77095 p: noop, 77096 i(local) { 77097 if (current) return; 77098 transition_in(errormessage.$$.fragment, local); 77099 current = true; 77100 }, 77101 o(local) { 77102 transition_out(errormessage.$$.fragment, local); 77103 current = false; 77104 }, 77105 d(detaching) { 77106 destroy_component(errormessage, detaching); 77107 } 77108 }; 77109 } 77110 77111 function create_fragment$3(ctx) { 77112 let if_block_anchor; 77113 let current; 77114 let if_block = /*element*/ ctx[2] && create_if_block$1(ctx); 77115 77116 return { 77117 c() { 77118 if (if_block) if_block.c(); 77119 if_block_anchor = empty(); 77120 }, 77121 m(target, anchor) { 77122 if (if_block) if_block.m(target, anchor); 77123 insert(target, if_block_anchor, anchor); 77124 current = true; 77125 }, 77126 p(ctx, [dirty]) { 77127 if (/*element*/ ctx[2]) { 77128 if (if_block) { 77129 if_block.p(ctx, dirty); 77130 77131 if (dirty & /*element*/ 4) { 77132 transition_in(if_block, 1); 77133 } 77134 } else { 77135 if_block = create_if_block$1(ctx); 77136 if_block.c(); 77137 transition_in(if_block, 1); 77138 if_block.m(if_block_anchor.parentNode, if_block_anchor); 77139 } 77140 } else if (if_block) { 77141 group_outros(); 77142 77143 transition_out(if_block, 1, 1, () => { 77144 if_block = null; 77145 }); 77146 77147 check_outros(); 77148 } 77149 }, 77150 i(local) { 77151 if (current) return; 77152 transition_in(if_block); 77153 current = true; 77154 }, 77155 o(local) { 77156 transition_out(if_block); 77157 current = false; 77158 }, 77159 d(detaching) { 77160 if (detaching) { 77161 detach(if_block_anchor); 77162 } 77163 77164 if (if_block) if_block.d(detaching); 77165 } 77166 }; 77167 } 77168 77169 function instance$3($$self, $$props, $$invalidate) { 77170 let element; 77171 let { form } = $$props; 77172 let { formActions } = $$props; 77173 let isPaymentForm = form.formType === "PAYMENT"; 77174 let { formState } = $$props; 77175 let { sectionElement } = $$props; 77176 77177 const enrichPropsWithServerError = (props, _formState, _sectionElement) => { 77178 const serverErrorForElementValue = serverErrorForElement(_sectionElement.type, _formState); 77179 const error = ServerErrors[serverErrorForElementValue]; 77180 77181 if (error) { 77182 // send message to app saying payment form has errored 77183 const formErrorMessage = { 77184 error: ServerError[serverErrorForElementValue], 77185 errorMessage: resolveErrorLanguagePackKey(form, serverErrorForElementValue), 77186 success: false, 77187 formSlug: form.id 77188 }; 77189 77190 const formEventPayload = JSON.stringify(formErrorMessage); 77191 77192 // handle ios message 77193 window?.webkit?.messageHandlers?.messageHandler?.postMessage(formEventPayload); 77194 77195 // handle android message 77196 window?.AndroidFormEventListener?.processFormEvent(formEventPayload); 77197 } 77198 77199 return error 77200 ? { 77201 ...element.props, 77202 error: element.props.error ?? (error.useDymamicMessage 77203 ? _formState.dynamicServerErrorMessage 77204 : resolveErrorLanguagePackKey(form, serverErrorForElementValue)) 77205 } 77206 : props; 77207 }; 77208 77209 const buildElement = (_formState, _sectionElement) => { 77210 if (_sectionElement.config?.enabled === false || _sectionElement.hidden === true) { 77211 return null; 77212 } 77213 77214 const factory = elementFactories.find(f => f.matches(_sectionElement, form, _formState.currentPart, _formState.currentSection)); 77215 77216 if (!factory) { 77217 throw `Unknown element ${JSON.stringify(_sectionElement)}`; 77218 } 77219 77220 const element = factory.create(form, _formState, formActions, _sectionElement.config); 77221 updateElementValidity(element, _formState, _sectionElement, formActions); 77222 return element; 77223 }; 77224 77225 $$self.$$set = $$props => {
77226 if ('form' in $$props) $$invalidate(5, form = $$props.form); 77227 if ('formActions' in $$props) $$invalidate(6, formActions = $$props.formActions); 77228 if ('formState' in $$props) $$invalidate(0, formState = $$props.formState); 77229 if ('sectionElement' in $$props) $$invalidate(1, sectionElement = $$props.sectionElement); 77230 }; 77231 77232 $$self.$$.update = () => { 77233 if ($$self.$$.dirty & /*formState, sectionElement*/ 3) { 77234 $$invalidate(2, element = buildElement(formState, sectionElement)); 77235 } 77236 }; 77237 77238 return [ 77239 formState, 77240 sectionElement, 77241 element, 77242 isPaymentForm, 77243 enrichPropsWithServerError, 77244 form, 77245 formActions 77246 ]; 77247 } 77248 77249 class ElementResolver extends SvelteComponent { 77250 constructor(options) { 77251 super(); 77252 77253 init(this, options, instance$3, create_fragment$3, safe_not_equal, { 77254 form: 5, 77255 formActions: 6, 77256 formState: 0, 77257 sectionElement: 1 77258 }); 77259 } 77260 } 77261 77262 const extractDefaultUserAttributes = (form) => form.parts 77263 .flatMap((p) => p.sections) 77264 .flatMap((s) => s.elements) 77265 .filter((e) => e.type === elementTypes.USER_ATTRIBUTE) 77266 .map(e => e.config) 77267 .reduce((attributes, config) => { 77268 const schemafield = form.organisationConfiguration.schemaFields.find(s => s.slug === config.slug); 77269 if (schemafield) { 77270 return { 77271 ...attributes, 77272 [config.slug]: (config.defaultValue || (schemafield["select-options"]?.find(o => o.default)?.value)) ?? undefined 77273 }; 77274 } 77275 else { 77276 return { 77277 ...attributes 77278 }; 77279 } 77280 }, {}); 77281 77282 /** 77283 * Sort all items in the Form by their order properties 77284 */ 77285 const sortForm = (form) => ({ 77286 ...form, 77287 parts: form.parts 77288 .sort((a, b) => partTypeFor(a.type).order - partTypeFor(b.type).order) 77289 .map((p) => ({ 77290 ...p, 77291 sections: p.sections 77292 .sort((a, b) => a.order - b.order) 77293 .map((s) => ({ 77294 ...s, 77295 elements: s.elements.sort((a, b) => a.order - b.order), 77296 })), 77297 })) 77298 }); 77299 77300 const addFormProcessorsToWindow = () => { 77301 if (!window.Blaize) { 77302 window.Blaize = { 77303 formPreProcessors: {}, 77304 formPostProcessors: {}, 77305 registerFormPreProcessor: function (formSlug, processor) { 77306 if (!window.Blaize.formPreProcessors[formSlug]) 77307 window.Blaize.formPreProcessors[formSlug] = []; 77308 if (typeof processor === "function") { 77309 window.Blaize.formPreProcessors[formSlug].push(processor); 77310 } 77311 }, 77312 registerFormPostProcessor: function (formSlug, processor) { 77313 if (!window.Blaize.formPostProcessors[formSlug]) 77314 window.Blaize.formPostProcessors[formSlug] = []; 77315 if (typeof processor === "function") { 77316 window.Blaize.formPostProcessors[formSlug].push(processor); 77317 } 77318 }, 77319 preProcessFormData: function (formSlug, formData) { 77320 if (window.Blaize.formPreProcessors[formSlug] || 77321 window.Blaize.formPreProcessors["*"]) { 77322 const processors = []; 77323 if (window.Blaize.formPreProcessors["*"]) { 77324 window.Blaize.formPreProcessors["*"].forEach(function (processor) { 77325 processors.push(processor); 77326 }); 77327 } 77328 if (window.Blaize.formPreProcessors[formSlug]) { 77329 window.Blaize.formPreProcessors[formSlug].forEach(function (processor) { 77330 processors.push(processor); 77331 }); 77332 } 77333 processors.forEach(function (processor) { 77334 const processedFormData = processor(formData); 77335 if (processedFormData != undefined) { 77336 formData = processedFormData; 77337 } 77338 }); 77339 } 77340 return formData; 77341 }, 77342 postProcessFormData: function (formSlug, formData, response) { 77343 if (window.Blaize.formPostProcessors[formSlug] || 77344 window.Blaize.formPostProcessors["*"]) { 77345 const processors = []; 77346 if (window.Blaize.formPostProcessors["*"]) { 77347 window.Blaize.formPostProcessors["*"].forEach(function (processor) { 77348 processors.push(processor); 77349 }); 77350 } 77351 if (window.Blaize.formPostProcessors[formSlug]) { 77352 window.Blaize.formPostProcessors[formSlug].forEach(function (processor) { 77353 processors.push(processor); 77354 }); 77355 }
77356 processors.forEach(function (processor) { 77357 processor(formData, response); 77358 }); 77359 } 77360 }, 77361 }; 77362 } 77363 }; 77364 77365 /* src/components/FormViewedDetect.svelte generated by Svelte v4.2.12 */ 77366 77367 function create_fragment$2(ctx) { 77368 let div; 77369 let current; 77370 const default_slot_template = /*#slots*/ ctx[3].default; 77371 const default_slot = create_slot(default_slot_template, ctx, /*$$scope*/ ctx[2], null); 77372 77373 return { 77374 c() { 77375 div = element("div"); 77376 if (default_slot) default_slot.c(); 77377 }, 77378 m(target, anchor) { 77379 insert(target, div, anchor); 77380 77381 if (default_slot) { 77382 default_slot.m(div, null); 77383 } 77384 77385 /*div_binding*/ ctx[4](div); 77386 current = true; 77387 }, 77388 p(ctx, [dirty]) { 77389 if (default_slot) { 77390 if (default_slot.p && (!current || dirty & /*$$scope*/ 4)) { 77391 update_slot_base( 77392 default_slot, 77393 default_slot_template, 77394 ctx, 77395 /*$$scope*/ ctx[2], 77396 !current 77397 ? get_all_dirty_from_scope(/*$$scope*/ ctx[2]) 77398 : get_slot_changes(default_slot_template, /*$$scope*/ ctx[2], dirty, null), 77399 null 77400 ); 77401 } 77402 } 77403 }, 77404 i(local) { 77405 if (current) return; 77406 transition_in(default_slot, local); 77407 current = true; 77408 }, 77409 o(local) { 77410 transition_out(default_slot, local); 77411 current = false; 77412 }, 77413 d(detaching) { 77414 if (detaching) { 77415 detach(div); 77416 } 77417 77418 if (default_slot) default_slot.d(detaching); 77419 /*div_binding*/ ctx[4](null); 77420 } 77421 }; 77422 } 77423 77424 function instance$2($$self, $$props, $$invalidate) { 77425 let { $$slots: slots = {}, $$scope } = $$props; 77426 let { form } = $$props; 77427 let intersecting = false; 77428 let element; 77429 let observer; 77430 const dispatch = createEventDispatcher(); 77431 77432 onMount(() => { 77433 if (typeof IntersectionObserver !== 'undefined') { 77434 observer = new IntersectionObserver(entries => { 77435 const entry = entries[0]; 77436 intersecting = entry?.isIntersecting; 77437 dispatch('observe', entry); 77438 77439 if (intersecting && form) { 77440 logDataLayerEvent(form, 'zephr_form_view', null); 77441 observer.unobserve(element); 77442 } 77443 }, 77444 { threshold: 0.75 }); 77445 77446 if (element) { 77447 observer.observe(element); 77448 } 77449 } 77450 77451 return () => { 77452 if (observer) { 77453 observer.disconnect(); 77454 } 77455 }; 77456 }); 77457 77458 function div_binding($$value) { 77459 binding_callbacks[$$value ? 'unshift' : 'push'](() => { 77460 element = $$value; 77461 $$invalidate(0, element); 77462 }); 77463 } 77464 77465 $$self.$$set = $$props => {
77466 if ('form' in $$props) $$invalidate(1, form = $$props.form); 77467 if ('$$scope' in $$props) $$invalidate(2, $$scope = $$props.$$scope); 77468 }; 77469 77470 return [element, form, $$scope, slots, div_binding]; 77471 } 77472 77473 class FormViewedDetect extends SvelteComponent { 77474 constructor(options) { 77475 super(); 77476 init(this, options, instance$2, create_fragment$2, safe_not_equal, { form: 1 }); 77477 } 77478 } 77479 77480 const checkForRegisteredUser = async (formActions) => { 77481 if (!document.cookie?.includes("blaize_session")) { 77482 formActions.updateFormState({ 77483 userSession: false, 77484 }); 77485 return false; 77486 } 77487 let response; 77488 try { 77489 response = await request('blaize/account', { method: "GET" }, formActions); 77490 } 77491 catch (err) { 77492 console.error(err); 77493 } 77494 if (response?.ok) { 77495 const responseJson = await response.json(); 77496 formActions.updateFormState({ 77497 userExists: true, 77498 emailIsContact: false, 77499 emailAddress: responseJson.identifiers?.email_address, 77500 userSession: true, 77501 loginRegistrationComplete: true 77502 }); 77503 } 77504 else { 77505 formActions.updateFormState({ 77506 userSession: false, 77507 }); 77508 } 77509 return response?.ok; 77510 }; 77511 77512 /* src/components/FormRoot.svelte generated by Svelte v4.2.12 */ 77513 77514 function get_each_context(ctx, list, i) { 77515 const child_ctx = ctx.slice(); 77516 child_ctx[21] = list[i]; 77517 return child_ctx; 77518 } 77519 77520 // (206:2) {#if formCanBeManuallyClosed} 77521 function create_if_block_3(ctx) { 77522 let div; 77523 let button; 77524 let fa; 77525 let current; 77526 let mounted; 77527 let dispose; 77528 fa = new Fa({ props: { icon: faTimesCircle } }); 77529 77530 return { 77531 c() { 77532 div = element("div"); 77533 button = element("button"); 77534 create_component(fa.$$.fragment); 77535 attr(button, "type", "button"); 77536 attr(button, "class", "close-button svelte-j7lu48"); 77537 attr(div, "class", "close-button-container svelte-j7lu48"); 77538 }, 77539 m(target, anchor) { 77540 insert(target, div, anchor); 77541 append(div, button); 77542 mount_component(fa, button, null); 77543 current = true; 77544 77545 if (!mounted) { 77546 dispose = listen(button, "click", /*closeForm*/ ctx[8]); 77547 mounted = true; 77548 } 77549 }, 77550 p: noop, 77551 i(local) { 77552 if (current) return; 77553 transition_in(fa.$$.fragment, local); 77554 current = true; 77555 }, 77556 o(local) { 77557 transition_out(fa.$$.fragment, local); 77558 current = false; 77559 }, 77560 d(detaching) { 77561 if (detaching) { 77562 detach(div); 77563 } 77564 77565 destroy_component(fa); 77566 mounted = false; 77567 dispose(); 77568 } 77569 }; 77570 } 77571 77572 // (219:2) {:else} 77573 function create_else_block(ctx) { 77574 let formvieweddetect; 77575 let t; 77576 let if_block_anchor; 77577 let current; 77578 77579 formvieweddetect = new FormViewedDetect({ 77580 props: { 77581 form: /*form*/ ctx[5], 77582 $$slots: { default: [create_default_slot] }, 77583 $$scope: { ctx } 77584 } 77585 }); 77586 77587 let if_block = /*topLevelError*/ ctx[3] && create_if_block_2(ctx); 77588 77589 return { 77590 c() { 77591 create_component(formvieweddetect.$$.fragment); 77592 t = space(); 77593 if (if_block) if_block.c(); 77594 if_block_anchor = empty(); 77595 }, 77596 m(target, anchor) { 77597 mount_component(formvieweddetect, target, anchor); 77598 insert(target, t, anchor); 77599 if (if_block) if_block.m(target, anchor); 77600 insert(target, if_block_anchor, anchor); 77601 current = true; 77602 }, 77603 p(ctx, dirty) { 77604 const formvieweddetect_changes = {}; 77605 77606 if (dirty & /*$$scope, isFullWidth, formState*/ 16777221) { 77607 formvieweddetect_changes.$$scope = { dirty, ctx }; 77608 } 77609 77610 formvieweddetect.$set(formvieweddetect_changes); 77611 77612 if (/*topLevelError*/ ctx[3]) { 77613 if (if_block) { 77614 if_block.p(ctx, dirty); 77615 77616 if (dirty & /*topLevelError*/ 8) { 77617 transition_in(if_block, 1); 77618 } 77619 } else { 77620 if_block = create_if_block_2(ctx); 77621 if_block.c(); 77622 transition_in(if_block, 1); 77623 if_block.m(if_block_anchor.parentNode, if_block_anchor); 77624 } 77625 } else if (if_block) { 77626 group_outros(); 77627 77628 transition_out(if_block, 1, 1, () => { 77629 if_block = null; 77630 }); 77631 77632 check_outros(); 77633 } 77634 }, 77635 i(local) { 77636 if (current) return; 77637 transition_in(formvieweddetect.$$.fragment, local); 77638 transition_in(if_block); 77639 current = true; 77640 }, 77641 o(local) { 77642 transition_out(formvieweddetect.$$.fragment, local); 77643 transition_out(if_block); 77644 current = false;
77645 }, 77646 d(detaching) { 77647 if (detaching) { 77648 detach(t); 77649 detach(if_block_anchor); 77650 } 77651 77652 destroy_component(formvieweddetect, detaching); 77653 if (if_block) if_block.d(detaching); 77654 } 77655 }; 77656 } 77657 77658 // (215:69) 77659 function create_if_block_1(ctx) { 77660 let div; 77661 let spinner; 77662 let current; 77663 spinner = new Spinner({}); 77664 77665 return { 77666 c() { 77667 div = element("div"); 77668 create_component(spinner.$$.fragment); 77669 attr(div, "class", "loading-placeholder svelte-j7lu48"); 77670 }, 77671 m(target, anchor) { 77672 insert(target, div, anchor); 77673 mount_component(spinner, div, null); 77674 current = true; 77675 }, 77676 p: noop, 77677 i(local) { 77678 if (current) return; 77679 transition_in(spinner.$$.fragment, local); 77680 current = true; 77681 }, 77682 o(local) { 77683 transition_out(spinner.$$.fragment, local); 77684 current = false; 77685 }, 77686 d(detaching) { 77687 if (detaching) { 77688 detach(div); 77689 } 77690 77691 destroy_component(spinner); 77692 } 77693 }; 77694 } 77695 77696 // (213:2) {#if formHasCrashed} 77697 function create_if_block(ctx) { 77698 let div; 77699 77700 return { 77701 c() { 77702 div = element("div"); 77703 div.textContent = `${resolveErrorLanguagePackKey(/*form*/ ctx[5], ServerError.UNKNOWN)}`; 77704 }, 77705 m(target, anchor) { 77706 insert(target, div, anchor); 77707 }, 77708 p: noop, 77709 i: noop, 77710 o: noop, 77711 d(detaching) { 77712 if (detaching) { 77713 detach(div); 77714 } 77715 } 77716 }; 77717 } 77718 77719 // (226:8) {#each form.sectionFlow.extraElements.concat(formState.currentSection.elements || []) as element} 77720 function create_each_block(ctx) { 77721 let elementresolver; 77722 let current; 77723 77724 elementresolver = new ElementResolver({ 77725 props: { 77726 form: /*form*/ ctx[5], 77727 formState: /*formState*/ ctx[0], 77728 formActions: /*formActions*/ ctx[7], 77729 sectionElement: /*element*/ ctx[21] 77730 } 77731 }); 77732 77733 return { 77734 c() { 77735 create_component(elementresolver.$$.fragment); 77736 }, 77737 m(target, anchor) { 77738 mount_component(elementresolver, target, anchor); 77739 current = true; 77740 }, 77741 p(ctx, dirty) { 77742 const elementresolver_changes = {}; 77743 if (dirty & /*formState*/ 1) elementresolver_changes.formState = /*formState*/ ctx[0]; 77744 if (dirty & /*formState*/ 1) elementresolver_changes.sectionElement = /*element*/ ctx[21]; 77745 elementresolver.$set(elementresolver_changes); 77746 }, 77747 i(local) { 77748 if (current) return; 77749 transition_in(elementresolver.$$.fragment, local); 77750 current = true; 77751 }, 77752 o(local) { 77753 transition_out(elementresolver.$$.fragment, local); 77754 current = false; 77755 }, 77756 d(detaching) { 77757 destroy_component(elementresolver, detaching); 77758 } 77759 }; 77760 } 77761 77762 // (220:4) <FormViewedDetect form={form}> 77763 function create_default_slot(ctx) { 77764 let form_1; 77765 let current; 77766 let mounted; 77767 let dispose; 77768 let each_value = ensure_array_like(/*form*/ ctx[5].sectionFlow.extraElements.concat(/*formState*/ ctx[0].currentSection.elements || [])); 77769 let each_blocks = []; 77770 77771 for (let i = 0; i < each_value.length; i += 1) { 77772 each_blocks[i] = create_each_block(get_each_context(ctx, each_value, i)); 77773 } 77774 77775 const out = i => transition_out(each_blocks[i], 1, 1, () => { 77776 each_blocks[i] = null; 77777 }); 77778 77779 return { 77780 c() { 77781 form_1 = element("form"); 77782 77783 for (let i = 0; i < each_blocks.length; i += 1) { 77784 each_blocks[i].c(); 77785 } 77786 77787 attr(form_1, "class", "zephr-form-content svelte-j7lu48"); 77788 toggle_class(form_1, "zephr-payment-options-content", /*isFullWidth*/ ctx[2]); 77789 }, 77790 m(target, anchor) { 77791 insert(target, form_1, anchor); 77792 77793 for (let i = 0; i < each_blocks.length; i += 1) { 77794 if (each_blocks[i]) { 77795 each_blocks[i].m(form_1, null); 77796 } 77797 } 77798 77799 current = true; 77800 77801 if (!mounted) { 77802 dispose = listen(form_1, "submit", submit_handler); 77803 mounted = true; 77804 } 77805 }, 77806 p(ctx, dirty) { 77807 if (dirty & /*form, formState, formActions*/ 161) { 77808 each_value = ensure_array_like(/*form*/ ctx[5].sectionFlow.extraElements.concat(/*formState*/ ctx[0].currentSection.elements || [])); 77809 let i; 77810 77811 for (i = 0; i < each_value.length; i += 1) { 77812 const child_ctx = get_each_context(ctx, each_value, i); 77813 77814 if (each_blocks[i]) { 77815 each_blocks[i].p(child_ctx, dirty); 77816 transition_in(each_blocks[i], 1); 77817 } else { 77818 each_blocks[i] = create_each_block(child_ctx); 77819 each_blocks[i].c(); 77820 transition_in(each_blocks[i], 1); 77821 each_blocks[i].m(form_1, null); 77822 } 77823 } 77824 77825 group_outros(); 77826 77827 for (i = each_value.length; i < each_blocks.length; i += 1) { 77828 out(i); 77829 } 77830 77831 check_outros(); 77832 } 77833 77834 if (!current || dirty & /*isFullWidth*/ 4) { 77835 toggle_class(form_1, "zephr-payment-options-content", /*isFullWidth*/ ctx[2]); 77836 } 77837 }, 77838 i(local) { 77839 if (current) return; 77840 77841 for (let i = 0; i < each_value.length; i += 1) { 77842 transition_in(each_blocks[i]); 77843 } 77844 77845 current = true; 77846 }, 77847 o(local) {
77848 each_blocks = each_blocks.filter(Boolean); 77849 77850 for (let i = 0; i < each_blocks.length; i += 1) { 77851 transition_out(each_blocks[i]); 77852 } 77853 77854 current = false; 77855 }, 77856 d(detaching) { 77857 if (detaching) { 77858 detach(form_1); 77859 } 77860 77861 destroy_each(each_blocks, detaching); 77862 mounted = false; 77863 dispose(); 77864 } 77865 }; 77866 } 77867 77868 // (236:4) {#if topLevelError} 77869 function create_if_block_2(ctx) { 77870 let errormessage; 77871 let current; 77872 77873 errormessage = new ErrorMessage({ 77874 props: { 77875 error: resolveErrorLanguagePackKey(/*form*/ ctx[5], /*topLevelError*/ ctx[3]), 77876 isPaymentForm: /*isPaymentForm*/ ctx[6] 77877 } 77878 }); 77879 77880 return { 77881 c() { 77882 create_component(errormessage.$$.fragment); 77883 }, 77884 m(target, anchor) { 77885 mount_component(errormessage, target, anchor); 77886 current = true; 77887 }, 77888 p(ctx, dirty) { 77889 const errormessage_changes = {}; 77890 if (dirty & /*topLevelError*/ 8) errormessage_changes.error = resolveErrorLanguagePackKey(/*form*/ ctx[5], /*topLevelError*/ ctx[3]); 77891 errormessage.$set(errormessage_changes); 77892 }, 77893 i(local) { 77894 if (current) return; 77895 transition_in(errormessage.$$.fragment, local); 77896 current = true; 77897 }, 77898 o(local) { 77899 transition_out(errormessage.$$.fragment, local); 77900 current = false; 77901 }, 77902 d(detaching) { 77903 destroy_component(errormessage, detaching); 77904 } 77905 }; 77906 } 77907 77908 function create_fragment$1(ctx) { 77909 let div; 77910 let t; 77911 let current_block_type_index; 77912 let if_block1; 77913 let accordion_action; 77914 let current; 77915 let mounted; 77916 let dispose; 77917 let if_block0 = /*formCanBeManuallyClosed*/ ctx[9] && create_if_block_3(ctx); 77918 const if_block_creators = [create_if_block, create_if_block_1, create_else_block]; 77919 const if_blocks = []; 77920 77921 function select_block_type(ctx, dirty) { 77922 if (/*form*/ ctx[5].formType === "GIFT_REDEMPTION" && !/*isSessionChecked*/ ctx[1]) return 1; 77923 return 2; 77924 } 77925 77926 current_block_type_index = select_block_type(ctx); 77927 if_block1 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 77928 77929 return { 77930 c() { 77931 div = element("div"); 77932 if (if_block0) if_block0.c(); 77933 t = space(); 77934 if_block1.c(); 77935 toggle_class(div, "zephr-form-max-width", !/*isFullWidth*/ ctx[2]); 77936 toggle_class(div, "zephr-payment-form-max-width", !/*isFullWidth*/ ctx[2]); 77937 }, 77938 m(target, anchor) { 77939 insert(target, div, anchor); 77940 if (if_block0) if_block0.m(div, null); 77941 append(div, t); 77942 if_blocks[current_block_type_index].m(div, null); 77943 current = true; 77944 77945 if (!mounted) { 77946 dispose = action_destroyer(accordion_action = accordion.call(null, div, /*formIsOpen*/ ctx[4])); 77947 mounted = true; 77948 } 77949 }, 77950 p(ctx, [dirty]) { 77951 if (/*formCanBeManuallyClosed*/ ctx[9]) if_block0.p(ctx, dirty); 77952 let previous_block_index = current_block_type_index; 77953 current_block_type_index = select_block_type(ctx); 77954 77955 if (current_block_type_index === previous_block_index) { 77956 if_blocks[current_block_type_index].p(ctx, dirty); 77957 } else { 77958 group_outros(); 77959 77960 transition_out(if_blocks[previous_block_index], 1, 1, () => { 77961 if_blocks[previous_block_index] = null; 77962 }); 77963 77964 check_outros(); 77965 if_block1 = if_blocks[current_block_type_index]; 77966 77967 if (!if_block1) { 77968 if_block1 = if_blocks[current_block_type_index] = if_block_creators[current_block_type_index](ctx); 77969 if_block1.c(); 77970 } else { 77971 if_block1.p(ctx, dirty); 77972 } 77973 77974 transition_in(if_block1, 1); 77975 if_block1.m(div, null); 77976 } 77977 77978 if (accordion_action && is_function(accordion_action.update) && dirty & /*formIsOpen*/ 16) accordion_action.update.call(null, /*formIsOpen*/ ctx[4]); 77979 77980 if (!current || dirty & /*isFullWidth*/ 4) { 77981 toggle_class(div, "zephr-form-max-width", !/*isFullWidth*/ ctx[2]); 77982 } 77983 77984 if (!current || dirty & /*isFullWidth*/ 4) { 77985 toggle_class(div, "zephr-payment-form-max-width", !/*isFullWidth*/ ctx[2]); 77986 } 77987 }, 77988 i(local) { 77989 if (current) return; 77990 transition_in(if_block0); 77991 transition_in(if_block1); 77992 current = true; 77993 }, 77994 o(local) { 77995 transition_out(if_block0); 77996 transition_out(if_block1); 77997 current = false;
77998 }, 77999 d(detaching) { 78000 if (detaching) { 78001 detach(div); 78002 } 78003 78004 if (if_block0) if_block0.d(); 78005 if_blocks[current_block_type_index].d(); 78006 mounted = false; 78007 dispose(); 78008 } 78009 }; 78010 } 78011 const defaultBusyKey = "default"; 78012 const submit_handler = e => e?.preventDefault(); 78013 78014 function instance$1($$self, $$props, $$invalidate) { 78015 let formIsOpen; 78016 let topLevelError; 78017 let isFullWidth; 78018 onMount(addFormProcessorsToWindow); 78019 let { formConfiguration } = $$props; 78020 let form = sortForm(formConfiguration); 78021 78022 if (form.environment.debugLogging) { 78023 console.log(form); 78024 } 78025 78026 // variable 78027 let isPaymentForm = form.formType === "PAYMENT"; 78028 78029 let requestCountByKey = {}; 78030 let isSessionChecked = false; 78031 78032 const previewSection = form.environment.previewMode && form.environment.previewInitialState 78033 ? findSectionByAddress(form.environment.previewInitialState, form) 78034 : null; 78035 78036 let formState = Object.freeze({ 78037 currentPart: previewSection?.part ?? form.parts[0], 78038 currentSection: previewSection?.section ?? form.parts[0].sections[0], 78039 paymentOption: null, 78040 paymentOptionPrices: null, 78041 emailAddress: "", 78042 billingCountry: "", 78043 billingState: "", 78044 createPassword: "", 78045 password: "", 78046 confirmCreatePassword: "", 78047 accountMembershipCode: "", 78048 passwordIsValid: false, 78049 elementValidity: [], 78050 canAttemptSectionCompletion: true, 78051 showFieldErrors: false, 78052 loginRegistrationComplete: false, 78053 serverErrors: [], 78054 isBusy: false, 78055 isBusyByKey: [], 78056 formCannotBeActioned: false, 78057 forgotPassword: false, 78058 promoCode: "", 78059 addons: [], 78060 discountedPlanPrices: [], 78061 paymentProviderFormLoaded: false, 78062 paymentProviderError: null, 78063 paymentFormComplete: false, 78064 paymentProviderVendorFields: null, 78065 verificationCode: "", 78066 userAttributes: extractDefaultUserAttributes(form), 78067 socialSignin: false, 78068 paymentProcessed: false, 78069 invitationEmail: "", 78070 invitationSent: false, 78071 validChangeFromPlans: [], 78072 taxCalculations: {}, 78073 billingAddress: { country: null, postalCode: null }, 78074 formPrerequisiteLoaded: !form.sectionFlow.formRequiresPrerequisiteLoading(form), 78075 dynamicOfferResult: null, 78076 originalDynamicOfferResult: null, 78077 giftCode: new URLSearchParams(window.location.search).get('giftCode') || '', 78078 giftRecipient: { 78079 name: '', 78080 email: '', 78081 customMessage: '', 78082 recipientAddress: { 78083 addressLine1: '', 78084 addressLine2: '', 78085 city: '', 78086 state: '', 78087 country: '', 78088 postalCode: '' 78089 } 78090 } 78091 }); 78092 78093 // actions 78094 const updateFormState = update => { 78095 $$invalidate(0, formState = Object.freeze({ ...formState, ...update })); 78096 form.environment.debugLogging && console.log(formState); 78097 form.environment.onStateChanged(update, formState); 78098 return formState; 78099 }; 78100 78101 const _attemptCompleteSection = () => { 78102 void attemptCompleteSection(form, formState, formActions); 78103 }; 78104 78105 const _completeSection = () => { 78106 void completeSection(form, formState, formActions); 78107 }; 78108 78109 const jumpToPartStart = partType => { 78110 void jumpToPart(partType, form, formActions); 78111 }; 78112 78113 const _jumpToSection = sectionType => { 78114 void jumpToSection(sectionType, form, formActions); 78115 }; 78116 78117 const onEvent = formEvent => { 78118 if (form.environment.previewMode) { 78119 return; 78120 } 78121 78122 void form.sectionFlow.eventHandlers[formEvent]?.(form, formState, formActions); 78123 }; 78124 78125 const modifyRequestCount = (by, busyKey) => { 78126 const key = busyKey ?? defaultBusyKey; 78127 78128 if (requestCountByKey[key] === undefined) { 78129 requestCountByKey[key] = 0; 78130 } 78131 78132 requestCountByKey[key] += by; 78133 78134 if (requestCountByKey[key] < 0) { 78135 throw "Negative request count"; 78136 } 78137 78138 const isBusy = Object.values(requestCountByKey).some(v => v > 0); 78139 78140 if (isBusy !== formState.isBusy) { 78141 updateFormState({ isBusy }); 78142 } 78143 78144 const isBusyByKey = requestCountByKey[key] > 0; 78145 78146 if (isBusyByKey !== formState.isBusyByKey[key]) { 78147 updateFormState({ 78148 isBusyByKey: { 78149 ...formState.isBusyByKey, 78150 [key]: isBusyByKey 78151 } 78152 }); 78153 } 78154 }; 78155 78156 const formActions = { 78157 updateFormState, 78158 attemptCompleteSection: _attemptCompleteSection, 78159 completeSection: _completeSection,
78160 jumpToPartStart, 78161 jumpToSection: _jumpToSection, 78162 onEvent, 78163 incrementRequestCount: (busyKey = null) => modifyRequestCount(+1, busyKey), 78164 decrementRequestCount: (busyKey = null) => modifyRequestCount(-1, busyKey), 78165 getFormState: () => formState, 78166 apiUrlBase: form.environment.apiUrlBase 78167 }; 78168 78169 // Preview 78170 if (form.environment.previewMode) { 78171 form.environment.previewBundle?.setupPreviewMode(form, formActions); 78172 } 78173 78174 // When the form first loads, check if this is a currently-registered user 78175 onMount(async () => { 78176 if (form.formType === "GIFT_REDEMPTION") { 78177 // Check user session before triggering form start 78178 await checkForRegisteredUser(formActions); 78179 78180 $$invalidate(1, isSessionChecked = true); 78181 } 78182 78183 formActions.onEvent(FormEvent.FORM_START); 78184 logDataLayerEvent(form, 'zephr_form_render', null); 78185 }); 78186 78187 let formManuallyClosed = false; 78188 const closeForm = () => $$invalidate(11, formManuallyClosed = true); 78189 const formCanBeManuallyClosed = form.sectionFlow.canDismissFormManually(form) && form.formType !== 'CHANGE_SUBSCRIPTION'; 78190 78191 $$self.$$set = $$props => {
78192 if ('formConfiguration' in $$props) $$invalidate(10, formConfiguration = $$props.formConfiguration); 78193 }; 78194 78195 $$self.$$.update = () => { 78196 if ($$self.$$.dirty & /*formState*/ 1) { 78197 { 78198 const canAttemptSectionCompletion = form.sectionFlow.canAttemptSectionCompletion(form, formState); 78199 78200 if (canAttemptSectionCompletion != formState.canAttemptSectionCompletion) { 78201 updateFormState({ canAttemptSectionCompletion }); 78202 } 78203 } 78204 } 78205 78206 if ($$self.$$.dirty & /*formManuallyClosed, formState*/ 2049) { 78207 $$invalidate(4, formIsOpen = !formManuallyClosed && formState.formPrerequisiteLoaded && !formState.formCannotBeActioned); 78208 } 78209 78210 if ($$self.$$.dirty & /*formState*/ 1) { 78211 // Unshown errors 78212 $$invalidate(3, topLevelError = formState.serverErrors[0] && (formState.currentSection.elements || []).filter(e => serverErrorForElement(e.type, formState)).length === 0 78213 ? formState.serverErrors[0] 78214 : null); 78215 } 78216 78217 if ($$self.$$.dirty & /*formState*/ 1) { 78218 $$invalidate(2, isFullWidth = [...Object.values(sectionTypes)].find(s => s.type === formState.currentSection.type)?.fullWidth); 78219 } 78220 }; 78221 78222 return [ 78223 formState, 78224 isSessionChecked, 78225 isFullWidth, 78226 topLevelError, 78227 formIsOpen, 78228 form, 78229 isPaymentForm, 78230 formActions, 78231 closeForm, 78232 formCanBeManuallyClosed, 78233 formConfiguration, 78234 formManuallyClosed 78235 ]; 78236 } 78237 78238 class FormRoot extends SvelteComponent { 78239 constructor(options) { 78240 super(); 78241 init(this, options, instance$1, create_fragment$1, safe_not_equal, { formConfiguration: 10 }); 78242 } 78243 } 78244 78245 const defaultCssVariables = { 78246 "--zephr-button-borderRadius": "9", 78247 "--zephr-button-borderWidth": "0", 78248 "--zephr-button-fontSize": "16", 78249 "--zephr-button-fontWeight": "normal", 78250 "--zephr-button-height": "50", 78251 "--zephr-color-accent-main": "#dcf1fb", 78252 "--zephr-color-accent-tinted": "#81cdf1", 78253 "--zephr-color-action-main": "#006edb", 78254 "--zephr-color-action-tinted": "#0f87ff", 78255 "--zephr-color-background-main": "#fff", 78256 "--zephr-color-background-tinted": "#ccc", 78257 "--zephr-color-text-main": "#000", 78258 "--zephr-color-text-tinted": "#333", 78259 "--zephr-color-warning-main": "#d90b00", 78260 "--zephr-color-warning-tinted": "#ff190d", 78261 "--zephr-input-borderColor": "#333", 78262 "--zephr-input-borderRadius": "5", 78263 "--zephr-input-borderWidth": "1", 78264 "--zephr-input-height": "50", 78265 "--zephr-typography-title-fallbackFont": "sans-serif", 78266 "--zephr-typography-title-font": "Roboto", 78267 "--zephr-typography-body-fallbackFont": "sans-serif", 78268 "--zephr-typography-body-font": "Roboto", 78269 }; 78270 /* eslint-disable @typescript-eslint/restrict-template-expressions */ 78271 const convertSiteStylesToCssVariables = (siteStyles) => { 78272 const styles = {}; 78273 const convertToCssVariables = (styleGuide, variablePrefix) => { 78274 if (styleGuide !== null && typeof styleGuide == "object") { 78275 Object.entries(styleGuide).forEach(([key, value]) => { 78276 convertToCssVariables(value, variablePrefix.concat(`${variablePrefix ? "-" : ""}${key}`)); 78277 }); 78278 } 78279 else { 78280 styles[`--zephr-${variablePrefix}`] = styleGuide; 78281 } 78282 }; 78283 convertToCssVariables(siteStyles, ""); 78284 return Object.entries({ ...defaultCssVariables, ...styles }) 78285 .map(([key, value]) => `${key}: ${value}`) 78286 .join(';\n'); 78287 }; 78288 78289 function formTypeClass(formType) { 78290 switch (formType) { 78291 case FormType.CHANGE_SUBSCRIPTION: 78292 case FormType.PAYMENT: 78293 case FormType.GIFT_SUBSCRIPTION: 78294 return "zephr-payment-form"; 78295 case FormType.REGISTRATION: 78296 case FormType.COMPLETE_REGISTRATION: 78297 case FormType.GIFT_REDEMPTION: 78298 return "zephr-registration-form"; 78299 case FormType.CONTACT: 78300 return "zephr-contact-form"; 78301 case FormType.DATA_CAPTURE: 78302 return "zephr-data-capture-form"; 78303 default: 78304 return ""; 78305 } 78306 } 78307 78308 const userAttributesValuesForPart = (partType, form, formState) => form.parts.find(p => p.type === partType) 78309 .sections.flatMap(s => s.elements) 78310 .filter(e => e.type === elementTypes.USER_ATTRIBUTE) 78311 .map(e => e.config) 78312 .reduce((current, elementConfig) => { 78313 if (formState.userAttributes) { 78314 return ({ 78315 ...current, 78316 [elementConfig.slug]: formState.userAttributes[elementConfig.slug] 78317 }); 78318 } 78319 else { 78320 return ({ 78321 ...current 78322 }); 78323 } 78324 }, {}); 78325 78326 const mapToServerError = (responseCode, responseMessage, formState) => { 78327 if (responseCode === 401) { 78328 if (responseMessage.indexOf("verification is required") > -1) { 78329 return ServerError.EMAIL_VERIFICATION_REQUIRED; 78330 } 78331 if (responseMessage.indexOf("session must be authenticated") > -1) { 78332 return ServerError.NO_AUTHENTICATED_SESSION; 78333 } 78334 if (formState.verificationCode) { 78335 return ServerError.VERIFICATION_CODE_OR_PASSWORD_INCORRECT; 78336 } 78337 return ServerError.LOGIN_FAILED; 78338 } 78339 if (responseCode === 402 && responseMessage?.includes('this domain is not supported.')) { 78340 return ServerError.BLOCKED_EMAIL_DOMAIN; 78341 } 78342 if (responseCode === 409) { 78343 return ServerError.USER_ALREADY_EXISTS; 78344 } 78345 if (responseCode === 400 && responseMessage?.includes("The provided password is not strong enough")) { 78346 return ServerError.PASSWORD_NOT_STRONG_ENOUGH; 78347 } 78348 if (responseCode === 404 && responseMessage?.includes("account")) { 78349 return ServerError.ACCOUNT_NOT_FOUND; 78350 } 78351 if (responseCode === 404) 78352 return ServerError.USER_DOES_NOT_EXIST; 78353 if (responseCode === 429 && responseMessage?.includes("sessions limit reached")) { 78354 return ServerError.TOO_MANY_SESSIONS; 78355 } 78356 if (responseCode === 429) 78357 return ServerError.NO_ACCOUNT_ACCESS; 78358 if (formState.socialSignin) 78359 return ServerError.SOCIAL_SIGNIN_REGISTRATION_LOGIN_ERROR; 78360 if (responseCode === 403 && responseMessage?.includes("Contact creation not enabled")) { 78361 return ServerError.CONTACT_CREATION_NOT_ENABLED; 78362 }
78363 return ServerError.UNKNOWN_LOGIN_REGISTER_ERROR; 78364 }; 78365 78366 const logConversion = (conversion, form, formActions) => { 78367 if (!form.organisationConfiguration.ruleAnalyticsEnabled) { 78368 return; 78369 } 78370 void request('zephr/public/rule-outcomes/v1/conversions', { 78371 method: 'POST', 78372 bodyObject: { 78373 "conversion": conversion, 78374 "ruleId": form.ruleId, 78375 "outcomeId": form.outcomeId 78376 } 78377 }, formActions); 78378 }; 78379 78380 const logConversionAfterRegistration = (form, formActions) => logConversion("REGISTERED", form, formActions); 78381 78382 const PATH_PARAM_NAME = "sharing_id"; 78383 /** 78384 * Extract a sharing ID from the page URL. 78385 */ 78386 const getProductSharingInvite = () => { 78387 try { 78388 const sharingId = new URLSearchParams(window.location.search).get(PATH_PARAM_NAME); 78389 return sharingId ? { product_sharing_id: sharingId } : null; 78390 } 78391 catch { 78392 // If there is any browser compatibility issue, ignore it 78393 return null; 78394 } 78395 }; 78396 const removeSharingInviteFromUrl = (url) => { 78397 try { 78398 const r = new URL(url); 78399 if (!r.searchParams.has(PATH_PARAM_NAME)) { 78400 return url; 78401 } 78402 r.searchParams.delete(PATH_PARAM_NAME); 78403 return r.href; 78404 } 78405 catch { 78406 // If there is any browser compatibility issue, ignore it 78407 return url; 78408 } 78409 }; 78410 78411 const toLoginPayload = (formState) => ({ 78412 identifiers: { email_address: formState.emailAddress }, 78413 validators: { 78414 password: formState.password || undefined, 78415 email_otp: formState.verificationCode || undefined, 78416 token_exchange: formState.socialSigninToken || undefined 78417 } 78418 }); 78419 const preprocessorIdentity$2 = (slug, t) => t; 78420 const toRegistrationPayload = (form, formState) => { 78421 const autoAppliedAttributes = formConfigAs(form).autoApplyAttributes ?? {}; 78422 const preprocessor = window.Blaize?.preProcessFormData ?? preprocessorIdentity$2; 78423 const attributes = userAttributesValuesForPart(partTypes.ACCOUNT_VERIFICATION.type, form, formState); 78424 const attributesWithAutoApplied = { 78425 ...attributes, 78426 ...autoAppliedAttributes 78427 }; 78428 const productSharingData = getProductSharingInvite(); 78429 return preprocessor(form.id, { 78430 identifiers: formState.socialSignin ? {} : { email_address: formState.emailAddress }, 78431 validators: { 78432 password: formState.createPassword || undefined, 78433 email_otp: formState.verificationCode || undefined, 78434 token_exchange: formState.socialSigninToken || undefined 78435 }, 78436 attributes: Object.keys(attributesWithAutoApplied).length ? attributesWithAutoApplied : undefined, 78437 account_membership_code: formState.accountMembershipCode || undefined, 78438 ...(productSharingData ?? {}) 78439 }); 78440 }; 78441 const register = async (form, formState, formActions) => { 78442 const payload = toRegistrationPayload(form, formState); 78443 const response = await request('blaize/register', { 78444 method: "POST", 78445 bodyObject: payload 78446 }, formActions); 78447 return processResponse$2(payload, response, form, formState, formActions); 78448 }; 78449 const login = async (form, formState, formActions) => { 78450 const payload = toLoginPayload(formState); 78451 const response = await request('blaize/login', { 78452 method: "POST", 78453 bodyObject: payload 78454 }, formActions); 78455 return processResponse$2(null, response, form, formState, formActions); 78456 }; 78457 const processResponse$2 = async (registrationPayload, response, form, formState, formActions) => { 78458 registrationPayload ? 78459 logDataLayerEvent(form, 'zephr_form_register', { 78460 success: response?.ok 78461 }) : 78462 logDataLayerEvent(form, 'zephr_form_login', { 78463 success: response?.ok 78464 }); 78465 if (!response?.ok) { 78466 if (formState.verificationCode) { 78467 formActions.updateFormState({ 78468 verificationCodeValid: false 78469 }); 78470 } 78471 const responseMessage = (await response.json())?.message; 78472 const serverError = mapToServerError(response.status, responseMessage, formState); 78473 logDataLayerEvent(form, 'zephr_form_error', { 78474 error: ServerError[serverError], 78475 }); 78476 if (serverError === ServerError.PASSWORD_NOT_STRONG_ENOUGH) { 78477 formActions.updateFormState({ 78478 dynamicServerErrorMessage: responseMessage, 78479 }); 78480 } 78481 formActions.updateFormState({ 78482 serverErrors: [serverError] 78483 }); 78484 if (ServerErrors[serverError].jumpToPart) {
78485 formActions.jumpToPartStart(ServerErrors[serverError].jumpToPart); 78486 } 78487 return Promise.resolve(); 78488 } 78489 if (!formState.userExists) { 78490 logConversionAfterRegistration(form, formActions); 78491 } 78492 return response.json() 78493 .then(async (json) => { 78494 const cookieInResponse = json.cookie?.includes("blaize_session"); 78495 if (cookieInResponse) { 78496 document.cookie = json.cookie; 78497 } 78498 else { 78499 if (!form.sectionFlow.canPartiallyRegister) { 78500 console.warn("No cookie returned from login/register endpoint - most likely incorrect form configuration."); 78501 formActions.updateFormState({ 78502 serverErrors: [ServerError.NO_COOKIE_FROM_LOGIN_REGISTER_ERROR], 78503 }); 78504 return Promise.resolve(); 78505 } 78506 } 78507 registrationPayload && window.Blaize?.postProcessFormData && window.Blaize.postProcessFormData(form.id, registrationPayload, json); 78508 if (formState.verificationCode && formState.currentSection.elements.some(e => e.type === elementTypes.VERIFICATION_CODE)) { 78509 formActions.updateFormState({ 78510 verificationCodeValid: true 78511 }); 78512 await waitAfterCode(form); 78513 } 78514 formActions.updateFormState({ 78515 loginRegistrationComplete: true 78516 }); 78517 return formActions.onEvent(FormEvent.LOGIN_REGISTRATION_COMPLETE); 78518 }); 78519 }; 78520 78521 /** 78522 * Submit user attributes in sections that are not part of registration. 78523 */ 78524 const submitUserAttributesForPart = async (partType, form, formState, formActions) => { 78525 const attributes = userAttributesValuesForPart(partType, form, formState); 78526 if (Object.keys(attributes).length === 0) { 78527 return Promise.resolve(); 78528 } 78529 const response = await request('blaize/profile', { 78530 method: "PATCH", 78531 bodyObject: attributes 78532 }, formActions); 78533 if (!response.ok) { 78534 formActions.updateFormState({ 78535 serverErrors: [ServerError.INVALID_USER_ATTRIBUTES] 78536 }); 78537 logDataLayerEvent(form, 'zephr_form_error', { 78538 error: ServerError[ServerError.INVALID_USER_ATTRIBUTES], 78539 }); 78540 throw `Error submitting user attributes ${JSON.stringify(response)}`; 78541 } 78542 return Promise.resolve(); 78543 }; 78544 78545 const CHANGE_SUBSCRIPTION_DEFAULT_CONVERSION_NAME = "CHANGE_SUBSCRIPTION"; 78546 const logConversionAfterPurchase = (form, formActions) => logConversion(formConfigAs(form).changeSubscriptionMode 78547 ? (formConfigAs(form).changeSubscriptionConversionName ?? CHANGE_SUBSCRIPTION_DEFAULT_CONVERSION_NAME) 78548 : "CUSTOMER", form, formActions); 78549 78550 // Unique ID creation requires a high quality random # generator. In the browser we therefore 78551 // require the crypto API and do not support built-in fallback to lower quality random number 78552 // generators (like Math.random()). 78553 let getRandomValues; 78554 const rnds8 = new Uint8Array(16); 78555 function rng() { 78556 // lazy load so that environments that need to polyfill have a chance to do so 78557 if (!getRandomValues) { 78558 // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. 78559 getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto); 78560 78561 if (!getRandomValues) { 78562 throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); 78563 } 78564 } 78565 78566 return getRandomValues(rnds8); 78567 } 78568 78569 /** 78570 * Convert array of 16 byte values to UUID string format of the form: 78571 * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 78572 */ 78573 78574 const byteToHex = []; 78575 78576 for (let i = 0; i < 256; ++i) { 78577 byteToHex.push((i + 0x100).toString(16).slice(1)); 78578 } 78579 78580 function unsafeStringify(arr, offset = 0) { 78581 // Note: Be careful editing this code! It's been tuned for performance 78582 // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 78583 return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]; 78584 } 78585 78586 const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto); 78587 var native = { 78588 randomUUID 78589 }; 78590 78591 function v4(options, buf, offset) { 78592 if (native.randomUUID && !buf && !options) { 78593 return native.randomUUID(); 78594 } 78595 78596 options = options || {}; 78597 const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` 78598 78599 rnds[6] = rnds[6] & 0x0f | 0x40; 78600 rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided 78601 78602 if (buf) { 78603 offset = offset || 0; 78604 78605 for (let i = 0; i < 16; ++i) { 78606 buf[offset + i] = rnds[i]; 78607 } 78608 78609 return buf; 78610 } 78611 78612 return unsafeStringify(rnds); 78613 } 78614 78615 const pay = (form, formState, formActions) => submitUserAttributesForPart(partTypes.PAYMENT.type, form, formState, formActions) 78616 .then(() => { 78617 const completer = formState.mobilePaymentService == null 78618 ? paymentProviderFor(form.organisationConfiguration.paymentProvider).completer 78619 : mobilePaymentServiceFor(form.organisationConfiguration.paymentProvider).completer; 78620 return completer(form, formState, formActions) 78621 .then(() => { 78622 const postFormSubmitMessage = { 78623 error: null, 78624 errorMessage: "", 78625 success: true, 78626 formSlug: form.id 78627 }; 78628 const formEventPayload = JSON.stringify(postFormSubmitMessage); 78629 // handle ios message 78630 window?.webkit?.messageHandlers?.messageHandler?.postMessage(formEventPayload); 78631 // handle android message
78632 window?.AndroidFormEventListener?.processFormEvent(formEventPayload); 78633 logConversionAfterPurchase(form, formActions); 78634 formActions.updateFormState({ 78635 paymentProcessed: true 78636 }); 78637 logDataLayerEvent(form, 'zephr_form_purchase', { 78638 productId: formState.paymentOption.productId, 78639 planId: formState.paymentOption.slug, 78640 price: formState.paymentOptionPrices?.totalPrice 78641 }); 78642 logDataLayerEvent(form, 'purchase', { 78643 ecommerce: { 78644 transaction_id: v4(), 78645 value: formState.paymentOptionPrices?.totalPrice, 78646 tax: formState.paymentOptionPrices?.taxPrice, 78647 currency: getRelevantCurrency(form, formState), 78648 coupon: formState.promoCode, 78649 items: [{ 78650 item_id: formState.paymentOption.slug, 78651 item_name: formState.paymentOption.productId, 78652 price: formState.paymentOptionPrices?.totalPrice, 78653 quantity: 1 78654 }] 78655 } 78656 }); 78657 if (formState.convertCancelSubscriptionToAcceptOffer) { 78658 logDataLayerEvent(form, 'zephr_form_subscription_cancel_accept_offer', { 78659 canceledProductId: formState.selectedSubscription.productId, 78660 acceptedProductId: formState.paymentOption.productId, 78661 productLabel: formState.paymentOption.label, 78662 currency: formState.paymentOption.currencyCode, 78663 amount: formState.paymentOptionPrices?.totalPrice 78664 }); 78665 } 78666 formActions.jumpToPartStart(partTypes.SUCCESS.type); 78667 if (formConfigAs(form).changeSubscriptionMode) { 78668 const changingFromSubscription = formState 78669 .validChangeFromPlans 78670 .find(plan => formState.paymentOption.slug === plan.planSlug && formState.paymentOption.productId === plan.productId) 78671 .changesFromSubscription; 78672 logDataLayerEvent(form, 'zephr_form_subscription_change', { 78673 fromProductId: changingFromSubscription.productId, 78674 fromProductAmount: changingFromSubscription.amount, 78675 toProductId: formState.paymentOption.productId, 78676 toProductAmount: formState.paymentOptionPrices.netPriceFormattedString, 78677 }); 78678 } 78679 }).catch(err => { 78680 const serverError = formState.mobilePaymentService == null 78681 ? ServerError.PAYMENT_PROCESSING_ERROR 78682 : ServerError.MOBILE_PAYMENT_PROCESSING_ERROR; 78683 console.error("Error completing payment", err); 78684 logDataLayerEvent(form, 'zephr_form_payment_failure', { 78685 reason: err 78686 }); 78687 formActions.updateFormState({ 78688 mobilePaymentService: null, 78689 serverErrors: [serverError] 78690 }); 78691 logDataLayerEvent(form, 'zephr_form_error', { 78692 error: ServerError[serverError], 78693 }); 78694 }); 78695 }); 78696 78697 const calculateChangeSubscriptionProrate = async (form, formState, formActions) => { 78698 if (!formConfigAs(form).changeSubscriptionMode) { 78699 return; 78700 } 78701 formActions.updateFormState({ 78702 changeSubscriptionProrate: null 78703 }); 78704 const prorateCalculator = paymentProviderFor(form.organisationConfiguration.paymentProvider) 78705 .changeSubscriptionProrateCalculator; 78706 if (!prorateCalculator) { 78707 return; 78708 } 78709 const prorate = await prorateCalculator(form, formState, formActions); 78710 formActions.updateFormState({ 78711 changeSubscriptionProrate: prorate 78712 }); 78713 }; 78714 78715 const getSubscriptionParam = (url) => { 78716 const urlObj = new URL(url); 78717 return urlObj.searchParams.get("subscription"); 78718 }; 78719 78720 /** 78721 * Checks if the current user has payment methods stored in their Zuora billing account 78722 * Only runs for zuora-billing payment provider 78723 */ 78724 const checkUserHasPaymentMethods = async (form, formActions) => { 78725 // Only check for zuora-billing provider 78726 if (form.organisationConfiguration.paymentProvider !== 'zuora-billing') { 78727 return true; // Assume other providers have payment methods or don't need this check 78728 } 78729 try { 78730 const response = await request('plugins/public/zuora-billing/payment-methods', { 78731 method: 'GET' 78732 }, formActions); 78733 const data = await response.json(); 78734 // Check if user has any credit cards stored 78735 return data.creditCards && data.creditCards[0]?.id; 78736 } 78737 catch (error) { 78738 console.warn('Unable to check payment methods, assuming user has payment methods:', error); 78739 // If we can't check, assume they have payment methods to avoid blocking the flow 78740 return true; 78741 } 78742 }; 78743 78744 const getChangeFromPlans = (subscriptions, form) => { 78745 return subscriptions.length === 0 ? [] : 78746 formConfigAs(form).paymentOptions.map(paymentOption => { 78747 const mapping = (formConfigAs(form).changeSubscriptionPlanMappings ?? []) 78748 .find(mapping => mapping.toPlan.planSlug === paymentOption.slug 78749 && mapping.toPlan.productId === paymentOption.productId); 78750 if (!mapping) { 78751 return; 78752 } 78753 const validSubscriptions = subscriptions.filter(subscription => 78754 // Ignore if subscription is for the destination payment option 78755 !(subscription.planId === paymentOption.slug && subscription.productId === paymentOption.productId) 78756 && 78757 ( 78758 // Ignore if subscription plan is not in 'fromPlans', unless allowing any plan 78759 mapping.fromAnyPlan || 78760 mapping.fromPlans.some(fromPlan => ((!subscription.multiphasePlan && fromPlan.planSlug === subscription.planId) || 78761 subscriptionMatchesMultiphasePlan(fromPlan, subscription)) 78762 && fromPlan.productId === subscription.productId))); 78763 if (validSubscriptions.length === 0) { 78764 return; 78765 } 78766 if (validSubscriptions.length > 1) { 78767 console.log("Found multiple valid subscriptions to move to payment option, selecting the first", paymentOption); 78768 } 78769 return { 78770 planSlug: paymentOption.slug, 78771 productId: paymentOption.productId, 78772 changesFromSubscription: subscriptions[0], 78773 }; 78774 }
78774).filter(Boolean); 78775 }; 78776 const subscriptionMatchesMultiphasePlan = (fromPlan, subscription) => { 78777 if (!subscription.multiphasePlan) { 78778 return false; 78779 } 78780 const planSlug = fromPlan.planSlug; 78781 const multiphasePlan = subscription.multiphasePlanMappings?.[planSlug]; 78782 if (!multiphasePlan) { 78783 return false; 78784 } 78785 return multiphasePlan.phases.some(phase => phase.planId === subscription.planId); 78786 }; 78787 const loadExistingSubscriptions$1 = async (form, formState, formActions, hasDynamicOfferAttached, validPlansRequired) => { 78788 const subscriptionLoader = paymentProviderFor(form.organisationConfiguration.paymentProvider).existingSubscriptionLoader; 78789 if (!subscriptionLoader) { 78790 console.error(`Existing subscription loader not configured for ${form.organisationConfiguration.paymentProvider}`); 78791 formActions.updateFormState({ 78792 formCannotBeActioned: true 78793 }); 78794 return; 78795 } 78796 let subscriptions; 78797 try { 78798 subscriptions = await subscriptionLoader(form, formState, formActions, true); 78799 } 78800 catch (err) { 78801 console.error("Unable to load subscriptions", err); 78802 formActions.updateFormState({ 78803 formCannotBeActioned: true 78804 }); 78805 return; 78806 } 78807 // Check if payment method setup is required 78808 const paymentConfig = formConfigAs(form); 78809 let requiresPaymentMethodSetup = false; 78810 if (paymentConfig.allowNoPaymentMethodUpgrade && form.organisationConfiguration.paymentProvider === 'zuora-billing') { 78811 const hasPaymentMethods = await checkUserHasPaymentMethods(form, formActions); 78812 if (!hasPaymentMethods) { 78813 requiresPaymentMethodSetup = true; 78814 } 78815 } 78816 const subscriptionQueryParamId = getSubscriptionParam(window.location.href); 78817 if (subscriptionQueryParamId) { 78818 const subscriptionMatched = subscriptions.filter(sub => sub.externalId === subscriptionQueryParamId); 78819 if (subscriptionMatched.length && getChangeFromPlans(subscriptionMatched, form).length) { 78820 subscriptions = subscriptionMatched; 78821 } 78822 } 78823 if (hasDynamicOfferAttached) { 78824 filterDynamicOfferChangeFromPlans(subscriptions, formState, formActions, requiresPaymentMethodSetup); 78825 return subscriptions; 78826 } 78827 const changeFromPlans = getChangeFromPlans(subscriptions, form); 78828 const selectionMode = formConfigAs(form).subscriptionSelectionMode; 78829 if (subscriptions.length === 0) { 78830 console.warn("Not showing form as user has no active subscriptions"); 78831 } 78832 else if (changeFromPlans.length === 0 && !selectionMode && validPlansRequired) { 78833 console.warn("Not showing form as no payment options can be actioned with the user's current subscriptions"); 78834 } 78835 if (selectionMode) { 78836 subscriptions = subscriptions.map(subscription => { 78837 if (formConfigAs(form).changeSubscriptionPlanMappings.some(m => m.fromAnyPlan || m.fromPlans.some(fromPlan => ((!subscription.multiphasePlan && fromPlan.planSlug === subscription.planId) || 78838 subscriptionMatchesMultiphasePlan(fromPlan, subscription)) 78839 && fromPlan.productId === subscription.productId))) { 78840 subscription.cannotBeChanged = false; 78841 } 78842 else { 78843 subscription.cannotBeChanged = true; 78844 } 78845 return subscription; 78846 }); 78847 } 78848 formActions.updateFormState({ 78849 existingSubscriptions: subscriptions, 78850 formCannotBeActioned: changeFromPlans.length === 0 && !selectionMode && validPlansRequired && !requiresPaymentMethodSetup, 78851 validChangeFromPlans: changeFromPlans, 78852 formPrerequisiteLoaded: true, 78853 requiresPaymentMethodSetup, 78854 showPaymentMethodFlowFirst: requiresPaymentMethodSetup, 78855 }); 78856 return subscriptions; 78857 }; 78858 const filterDynamicOfferChangeFromPlans = (subscriptions, formState, formActions, requiresPaymentMethodSetup) => { 78859 if (subscriptions.length === 0) { 78860 console.log("No subscriptions available."); 78861 formActions.updateFormState({ 78862 existingSubscriptions: [], 78863 formCannotBeActioned: true, 78864 validChangeFromPlans: [], 78865 formPrerequisiteLoaded: true, 78866 requiresPaymentMethodSetup, 78867 showPaymentMethodFlowFirst: requiresPaymentMethodSetup, 78868 }); 78869 return; 78870 } 78871 const dynamicOffer = formState.dynamicOfferResult; 78872 if (!dynamicOffer) { 78873 console.log("No dynamic offer result available."); 78874 } 78875 // Filter payment plans from dynamic offers that the user is not already subscribed to and matches the currency of existing subscriptions. 78876 const changeFromPlans = dynamicOffer?.products?.flatMap(product => product.paymentPlans.filter(plan => { 78877 const isSubscribed = subscriptions.some(sub => sub.planId === plan.planId && sub.productId === product.id); 78878 const currencyMatch = subscriptions.every(sub => plan.charges.every(charge => charge.prices?.some(price => price.currency === sub.currency))); 78879 return !isSubscribed && currencyMatch; 78880 }
78880).map(plan => ({ 78881 planSlug: plan.planId, 78882 productId: product.id, 78883 changesFromSubscription: subscriptions.find(sub => plan.charges.every(charge => charge.prices?.some(price => price.currency === sub.currency))) 78884 })).filter(plan => { 78885 const hasChangesFromSubscription = !!plan.changesFromSubscription; 78886 return hasChangesFromSubscription; 78887 })) ?? []; 78888 formActions.updateFormState({ 78889 existingSubscriptions: subscriptions, 78890 formCannotBeActioned: changeFromPlans.length === 0 && !requiresPaymentMethodSetup, 78891 validChangeFromPlans: changeFromPlans, 78892 formPrerequisiteLoaded: true, 78893 requiresPaymentMethodSetup, 78894 showPaymentMethodFlowFirst: requiresPaymentMethodSetup, 78895 }); 78896 }; 78897 78898 const loadExistingSubscriptions = async (form, formState, formActions, activeOnly) => { 78899 const provider = form.organisationConfiguration.paymentProvider; 78900 const loader = paymentProviderFor(provider)?.existingSubscriptionLoader; 78901 if (!loader) { 78902 console.error(`â [loadExistingSubscriptions] Existing subscription loader not configured for ${provider}`); 78903 return []; 78904 } 78905 const existingSubscriptions = loader ? await loader(form, formState, formActions, activeOnly) : []; 78906 formActions.updateFormState({ 78907 existingSubscriptions 78908 }); 78909 return existingSubscriptions; 78910 }; 78911 78912 const formStartAction$9 = async (form, formState, formActions) => { 78913 const hasGifts = form.formType === FormType.LIST_GIFT_SUBSCRIPTIONS_SENT 78914 || (form.formType === FormType.LIST_SUBSCRIPTIONS && form.organisationConfiguration.paymentProvider.includes('zuora-billing')); 78915 // Load gift subscriptions if applicable (for sent gifts or regular subscriptions that need to show received gifts) 78916 if (hasGifts) { 78917 // Set loading state to true first 78918 formActions.updateFormState({ 78919 loadingGiftSubscriptions: true 78920 }); 78921 // Get the mock data outside the try block so it's accessible in the catch block 78922 let allGiftSubscriptionsData = []; 78923 // For preview mode, we can skip the API call and use the mock data directly 78924 if (form.environment?.previewMode) { 78925 allGiftSubscriptionsData = [ 78926 // Received gift (current user is recipient) 78927 { 78928 gift_code: "GIFT-PREVIEW-1", 78929 subscription_number: "gift-sub-preview-1", 78930 status: "REDEEMED", 78931 is_purchaser: false, 78932 is_recipient: true, 78933 amount: "GBP 99/year", 78934 currency: "GBP", 78935 currentTermPeriodType: "Year", 78936 tenant_id: "organization_tenant_id", 78937 purchaser_user_id: "user_sender_12345", 78938 recipient_user_id: "user_current", 78939 recipient_email: "[email protected]", 78940 recipientFirstName: "John", 78941 recipientLastName: "Smith", 78942 message: "Enjoy your premium gift subscription!", 78943 subscriptionType: "Premium Digital", 78944 subscriptionStartDate: "January 1, 2025", 78945 subscriptionEndDate: "January 1, 2026", 78946 error_reason: null, 78947 host: "example.com", 78948 recipient_zuora_account_id: "account_123" 78949 }, 78950 // Sent gift (current user is purchaser) 78951 { 78952 gift_code: "GIFT-PREVIEW-2", 78953 subscription_number: "gift-sub-preview-2", 78954 status: "REDEEMED", 78955 is_purchaser: true, 78956 is_recipient: false, 78957 amount: "GBP 50/year", 78958 currency: "GBP", 78959 currentTermPeriodType: "Year", 78960 tenant_id: "organization_tenant_id", 78961 purchaser_user_id: "user_current", 78962 recipient_user_id: "user_recipient_12345", 78963 recipient_email: "[email protected]", 78964 recipientFirstName: "Jane", 78965 recipientLastName: "Doe", 78966 message: "Here's your gift subscription!", 78967 subscriptionType: "Basic Digital", 78968 subscriptionStartDate: "February 15, 2025", 78969 subscriptionEndDate: "February 15, 2026", 78970 error_reason: null, 78971 host: "example.com", 78972 recipient_zuora_account_id: "account_456" 78973 }, 78974 // Pending gift (not yet redeemed) 78975 { 78976 gift_code: "GIFT-PREVIEW-3", 78977 subscription_number: "gift-sub-preview-3", 78978 status: "PENDING", 78979 is_purchaser: true, 78980 is_recipient: false, 78981 amount: "GBP 50/year", 78982 currency: "GBP", 78983 currentTermPeriodType: "Year", 78984 tenant_id: "organization_tenant_id", 78985 purchaser_user_id: "user_current", 78986 recipient_user_id: null, 78987 recipient_email: "[email protected]", 78988 recipientFirstName: "", 78989 recipientLastName: "", 78990 message: "A gift subscription for you!", 78991 subscriptionType: "Basic Digital", 78992 subscriptionStartDate: "March 1, 2025", 78993 subscriptionEndDate: "March 1, 2026", 78994 error_reason: null, 78995 host: "example.com", 78996 recipient_zuora_account_id: null 78997 } 78998 ]; 78999 formActions.updateFormState({ 79000 giftSubscriptions: allGiftSubscriptionsData, 79001 formPrerequisiteLoaded: true, 79002 loadingGiftSubscriptions: false 79003 }); 79004 } 79005 else { 79006 try { 79007 formActions.updateFormState({ 79008 loadingSubscriptions: true 79009 }); 79010 // loads in subscriptions and gift data
79011 await loadGiftSubscriptions(form, formState, formActions); 79012 formActions.updateFormState({ 79013 formPrerequisiteLoaded: true, 79014 loadingGiftSubscriptions: false 79015 }); 79016 } 79017 catch (error) { 79018 console.error('â [LIST_SUBSCRIPTIONS] Error loading gift subscriptions:', error); 79019 formActions.updateFormState({ 79020 formPrerequisiteLoaded: true, 79021 serverErrors: [ 79022 ServerError.UNKNOWN 79023 ] 79024 }); 79025 } 79026 } 79027 formActions.updateFormState({ 79028 loadingGiftSubscriptions: false, 79029 loadingSubscriptions: false 79030 }); 79031 } 79032 // Load regular subscriptions for the standard list view 79033 try { 79034 formActions.updateFormState({ 79035 loadingSubscriptions: true 79036 }); 79037 await loadExistingSubscriptions(form, formState, formActions, false); 79038 } 79039 catch (error) { 79040 console.error("â [LIST_SUBSCRIPTIONS] Error loading subscriptions", error); 79041 formActions.updateFormState({ 79042 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR], 79043 }); 79044 } 79045 finally { 79046 formActions.updateFormState({ 79047 loadingSubscriptions: false, 79048 loadingGiftSubscriptions: false, 79049 }); 79050 } 79051 }; 79052 const goBack$2 = async (_, __, formActions) => { 79053 formActions.jumpToPartStart(partTypes.LIST_SUBSCRIPTIONS.type); 79054 return Promise.resolve(); 79055 }; 79056 const changePayment = async (form, formState, formActions) => { 79057 const completer = paymentProviderFor(form.organisationConfiguration.paymentProvider).changePaymentCompleter; 79058 await completer(form, formState, formActions) 79059 .then(async () => { 79060 formActions.updateFormState({ 79061 paymentProviderFormBusy: false 79062 }); 79063 const paymentConfig = formConfigAs(form); 79064 if (paymentConfig.changeSubscriptionMode && formState.paymentMethodSetupComplete) { 79065 const subscriptionCompleter = paymentProviderFor(form.organisationConfiguration.paymentProvider).completer; 79066 await subscriptionCompleter(form, formState, formActions) 79067 .then(() => { 79068 formActions.jumpToPartStart(partTypes.SUCCESS.type); 79069 logDataLayerEvent(form, 'zephr_form_subscription_change', null); 79070 }) 79071 .catch(err => { 79072 console.error("Error changing subscription after adding payment method:", err); 79073 formActions.updateFormState({ 79074 serverErrors: [ServerError.PAYMENT_PROCESSING_ERROR] 79075 }); 79076 }); 79077 } 79078 else { 79079 formActions.jumpToPartStart(partTypes.SUCCESS.type); 79080 logDataLayerEvent(form, 'zephr_form_payment_method_changed', null); 79081 } 79082 }).catch(err => { 79083 const serverError = formState.mobilePaymentService == null 79084 ? ServerError.PAYMENT_PROCESSING_ERROR 79085 : ServerError.MOBILE_PAYMENT_PROCESSING_ERROR; 79086 console.error("Error completing payment change", err); 79087 formActions.updateFormState({ 79088 mobilePaymentService: null, 79089 paymentProviderFormBusy: false, 79090 serverErrors: [serverError] 79091 }); 79092 logDataLayerEvent(form, 'zephr_form_error', { 79093 error: ServerError[serverError], 79094 }); 79095 }); 79096 }; 79097 // NB: If you change these event handlers, you must also consider updating the event handlers in giftSubscriptionsListSectionFlow.ts 79098 const eventHandlers$b = { 79099 [FormEvent.FORM_START]: formStartAction$9, 79100 [FormEvent.GO_BACK]: goBack$2, 79101 [FormEvent.PART_CHANGE_PAYMENT_COMPLETE]: changePayment, 79102 }; 79103 const sectionVisibilities$9 = []; 79104 const canAttemptSectionCompletion$a = (_, formState) => { 79105 return !formState.elementValidity 79106 .filter((e) => e.partType === formState.currentPart.type && 79107 e.sectionType === formState.currentSection.type && 79108 e.sectionOrder === formState.currentSection.order) 79109 .some((e) => !e.isValid); 79110 }; 79111 const extraElements$2 = [ 79112 { 79113 type: elementTypes.PAYMENT_PRE_LOADER, 79114 order: -1, 79115 }, 79116 ]; 79117 const listSubscriptionsSectionFlow = { 79118 extraElements: extraElements$2, 79119 eventHandlers: eventHandlers$b, 79120 sectionVisibilities: sectionVisibilities$9, 79121 canAttemptSectionCompletion: canAttemptSectionCompletion$a,
79122 canDismissFormManually: () => false, 79123 formRequiresPrerequisiteLoading: () => false, 79124 }; 79125 79126 /** 79127 * Map of possible movements through the form sections. 79128 */ 79129 let checkForRegisteredUserResolve; 79130 const checkForRegisteredUserPromise = new Promise(function (resolve) { 79131 checkForRegisteredUserResolve = resolve; 79132 }); 79133 const formStartAction$8 = async (form, _, formActions) => { 79134 const hasDynamicOfferAttached = !!formConfigAs(form).dynamicOffer?.id 79135 || !!formConfigAs(form).dynamicOfferPreview; 79136 if (hasDynamicOfferAttached) { 79137 await getDynamicOffer(form, formActions).catch((e) => { console.error('Error loading Dynamic Offer', e); }); 79138 } 79139 return checkForRegisteredUser(formActions) 79140 .then(async (alreadyRegistered) => { 79141 checkForRegisteredUserResolve(checkForRegisteredUserResolve); 79142 if (formConfigAs(form).changeSubscriptionMode) { 79143 formActions.updateFormState({ formCannotBeActioned: !alreadyRegistered }); 79144 await loadExistingSubscriptions$1(form, formActions.getFormState(), formActions, hasDynamicOfferAttached, true); 79145 const subscriptionQueryParam = getSubscriptionParam(window.location.href); 79146 if (subscriptionQueryParam && formActions.getFormState().existingSubscriptions.length === 1) { 79147 formActions.jumpToPartStart(partTypes.PLAN_SELECT.type); 79148 } 79149 } 79150 }); 79151 }; 79152 const onPlanSelectComplete$2 = (form, formState, formActions) => 79153 // After plan select, wait to see if the user is already logged in 79154 checkForRegisteredUserPromise 79155 .then(async () => { 79156 const state = formActions.getFormState(); 79157 if (state.userSession || state.loginRegistrationComplete) { 79158 const updatedState = await getProductAddons(form, state, formActions); 79159 void calculatePrices(form, updatedState, formActions) 79160 .then(formState => logDataLayerEvents(form, formState)); 79161 void calculateChangeSubscriptionProrate(form, updatedState, formActions); 79162 // If payment method setup is required, go to change-payment part first 79163 if (updatedState.requiresPaymentMethodSetup && !updatedState.paymentMethodSetupComplete) { 79164 formActions.jumpToPartStart(partTypes.CHANGE_PAYMENT.type); 79165 } 79166 else { 79167 formActions.jumpToPartStart(partTypes.PAYMENT.type); 79168 } 79169 } 79170 else { 79171 void calculatePrices(form, formState, formActions) 79172 .then(formState => logDataLayerEvents(form, formState)); 79173 void calculateChangeSubscriptionProrate(form, formState, formActions); 79174 formActions.jumpToPartStart(partTypes.ACCOUNT_VERIFICATION.type); 79175 } 79176 }); 79177 const logDataLayerEvents = (form, formState) => { 79178 // don't trigger data layer events for other form types that override this flow (i.e. gift subscription form) 79179 if (form.organisationConfiguration.trackFormDataLayerEvents && form.formType == FormType.PAYMENT) { 79180 const paymentOption = formState.paymentOption; 79181 // await calculatePrices(form, formActions.getFormState(), formActions); 79182 const paymentOptionPrice = formState.paymentOptionPrices?.totalPrice; 79183 logDataLayerEvent(form, 'zephr_form_payment_option_selected', { 79184 productId: paymentOption.productId, 79185 planId: paymentOption.slug, 79186 price: paymentOptionPrice, 79187 }); 79188 logDataLayerEvent(form, 'select_item', { 79189 ecommerce: { 79190 items: [{ 79191 item_id: paymentOption.slug, 79192 item_name: paymentOption.productId, 79193 price: paymentOptionPrice, 79194 quantity: 1 79195 }] 79196 } 79197 }); 79198 logDataLayerEvent(form, 'add_to_cart', { 79199 ecommerce: { 79200 currency: formConfigAs(form).formCurrency ?? paymentOption?.currencyCode, 79201 value: paymentOptionPrice, 79202 items: [{ 79203 item_id: paymentOption.slug, 79204 item_name: paymentOption.productId, 79205 price: paymentOptionPrice, 79206 quantity: 1 79207 }] 79208 } 79209 }); 79210 } 79211 }; 79212 const onAccountVerificationComplete$1 = (form, formState, formActions) => (formState.userExists ? login : register)(form, formState, formActions); 79213 const onSuccessComplete$1 = (form, formState, formActions) => submitUserAttributesForPart(partTypes.SUCCESS.type, form, formState, formActions) 79214 .then(() => { 79215 window.location.reload(); 79216 }); 79217 const onLoginRegister = (form, _, formActions) => getProductAddons(form, formActions.getFormState(), formActions) 79218 .then(() => calculatePrices(form, formActions.getFormState(), formActions)) 79219 .then(() =>
79219 formActions.jumpToPartStart(partTypes.PAYMENT.type)); 79220 const onSubscriptionSelectComplete$3 = (form, formState, formActions) => { 79221 const changeFromPlans = getChangeFromPlans([formState.selectedSubscription], form); 79222 formActions.updateFormState({ 79223 existingSubscriptions: [formState.selectedSubscription], 79224 formCannotBeActioned: changeFromPlans.length === 0, 79225 validChangeFromPlans: changeFromPlans, 79226 formPrerequisiteLoaded: true, 79227 }); 79228 formActions.jumpToPartStart(partTypes.PLAN_SELECT.type); 79229 }; 79230 const eventHandlers$a = { 79231 [FormEvent.FORM_START]: formStartAction$8, 79232 [FormEvent.LOGIN_REGISTRATION_COMPLETE]: onLoginRegister, 79233 [FormEvent.SECTION_EMAIL_COMPLETE]: onEmailEntered, 79234 [FormEvent.SECTION_PASSWORD_RESET_COMPLETE]: resetPassword, 79235 [FormEvent.SECTION_FORGOT_PASSWORD_COMPLETE]: verifiyPasswordResetCode, 79236 [FormEvent.PART_PLAN_SELECT_COMPLETE]: onPlanSelectComplete$2, 79237 [FormEvent.PART_ACCOUNT_VERIFICATION_COMPLETE]: onAccountVerificationComplete$1, 79238 [FormEvent.PART_PAYMENT_COMPLETE]: pay, 79239 [FormEvent.PART_SUCCESS_COMPLETE]: onSuccessComplete$1, 79240 [FormEvent.SELECT_SUBSCRIPTION_COMPLETE]: onSubscriptionSelectComplete$3, 79241 [FormEvent.PART_CHANGE_PAYMENT_COMPLETE]: changePayment, 79242 }; 79243 const sectionVisibilities$8 = [ 79244 { 79245 type: sectionTypes.EMAIL.type, 79246 isDisplayedInProgressBar: true, 79247 isVisible: (form) => !formConfigAs(form).changeSubscriptionMode 79248 }, 79249 { 79250 type: sectionTypes.LOGIN_PASSWORD.type, 79251 isDisplayedInProgressBar: false, 79252 isVisible: (form, formState) => formConfigAs(form).usePassword && formState.userExists && !formState.socialSignin 79253 }, 79254 { 79255 type: sectionTypes.PASSWORD_SETUP.type, 79256 isDisplayedInProgressBar: false, 79257 isVisible: (form, formState) => formConfigAs(form).usePassword && !formState.userExists && !formState.socialSignin 79258 }, 79259 { 79260 type: sectionTypes.SUCCESS.type, 79261 isDisplayedInProgressBar: false, 79262 isVisible: () => true 79263 }, 79264 { 79265 type: sectionTypes.PASSWORD_RESET.type, 79266 isDisplayedInProgressBar: false, 79267 isVisible: (form, formState) => formConfigAs(form).usePassword && formState.forgotPassword 79268 }, 79269 { 79270 type: sectionTypes.FORGOT_PASSWORD.type, 79271 isDisplayedInProgressBar: false, 79272 isVisible: (form, formState) => formConfigAs(form).usePassword && formState.forgotPassword 79273 }, 79274 { 79275 type: sectionTypes.VERIFICATION_CODE_LOGIN.type, 79276 isDisplayedInProgressBar: false, 79277 isVisible: (form, formState) => (formState.userExists && (formConfigAs(form).useVerificationCodes || formState.socialSignin)) ?? false 79278 }, 79279 { 79280 type: sectionTypes.VERIFICATION_CODE_REGISTRATION.type, 79281 isDisplayedInProgressBar: false, 79282 isVisible: (form, formState) => (!formState.userExists && (formConfigAs(form).useVerificationCodes || formState.emailIsContact)) ?? false 79283 }, 79284 { 79285 type: sectionTypes.REGISTRATION_CUSTOM.type, 79286 isDisplayedInProgressBar: true, 79287 isVisible: (form, formState) => !formState.userExists 79288 }, 79289 { 79290 type: sectionTypes.CHANGE_PAYMENT.type, 79291 isDisplayedInProgressBar: false, 79292 isVisible: (form, formState) => { 79293 const paymentConfig = formConfigAs(form); 79294 return paymentConfig.changeSubscriptionMode && 79295 paymentConfig.allowNoPaymentMethodUpgrade && 79296 formState.requiresPaymentMethodSetup === true && 79297 !formState.paymentMethodSetupComplete; 79298 } 79299 } 79300 ]; 79301 const canAttemptSectionCompletion$9 = (form, formState) => { 79302 const providerConfig = paymentProviderFor(form.organisationConfiguration.paymentProvider); 79303 return !formState.elementValidity.filter(e => e.partType === formState.currentPart.type && 79304 e.sectionType === formState.currentSection.type && 79305 e.sectionOrder === formState.currentSection.order) 79306 .filter(e => !(e.elementType === elementTypes.PAYMENT 79307 && providerConfig.canAttemptIncompletePaymentFormSubmission 79308 && formState.paymentProviderFormLoaded)) 79309 .some(e => !e.isValid); 79310 }; 79311 const canDismissFormManually = (form) => formConfigAs(form).changeSubscriptionMode; 79312 const formRequiresPrerequisiteLoading = (form) => formConfigAs(form).changeSubscriptionMode; 79313 const extraElements$1 = [ 79314 { 79315 type: elementTypes.PAYMENT_PRE_LOADER, 79316 order: -1, 79317 }, 79318 ]; 79319 const sectionFlow$9 = { 79320 extraElements: extraElements$1, 79321 sectionVisibilities: sectionVisibilities$8, 79322 eventHandlers: eventHandlers$a,
79323 canAttemptSectionCompletion: canAttemptSectionCompletion$9, 79324 canDismissFormManually, 79325 formRequiresPrerequisiteLoading 79326 }; 79327 79328 /** 79329 * Map of possible movements through the form sections for reg forms. 79330 */ 79331 const onAccountVerificationComplete = (form, formState, formActions) => (formState.userExists ? login : register)(form, formState, formActions); 79332 const onLoginRegisterComplete$1 = async (form, formState, formActions) => { 79333 const config = formConfigAs(form); 79334 const isPasswordless = getFormIsPasswordless(form); 79335 if (!formState.userExists && (isPasswordless || (form.organisationConfiguration.requireEmailVerfication && !config.useVerificationCodes && !formState.socialSignin))) { 79336 await sendLink(form, 'register', formState.emailAddress, formActions); 79337 await jumpToSection(sectionTypes.EMAIL_VERIFIED.type, form, formActions); 79338 return Promise.resolve(); 79339 } 79340 if (config.showSuccessOnFormCompletion && !formState.userExists) { 79341 await jumpToSection(sectionTypes.SUCCESS.type, form, formActions); 79342 } 79343 else { 79344 window.location.href = removeSharingInviteFromUrl(window.location.href); 79345 if (window.flowpoint) { 79346 window.flowpoint.track("Registration/Login Form Submitted"); 79347 } 79348 } 79349 return Promise.resolve(); 79350 }; 79351 const onSuccessComplete = () => { 79352 window.location.href = removeSharingInviteFromUrl(window.location.href); 79353 if (window.flowpoint) { 79354 window.flowpoint.track("Registration/Login Form Submitted"); 79355 } 79356 return Promise.resolve(); 79357 }; 79358 const eventHandlers$9 = { 79359 [FormEvent.LOGIN_REGISTRATION_COMPLETE]: onLoginRegisterComplete$1, 79360 [FormEvent.SECTION_EMAIL_COMPLETE]: onEmailEntered, 79361 [FormEvent.SECTION_PASSWORD_RESET_COMPLETE]: resetPassword, 79362 [FormEvent.SECTION_FORGOT_PASSWORD_COMPLETE]: verifiyPasswordResetCode, 79363 [FormEvent.PART_ACCOUNT_VERIFICATION_COMPLETE]: onAccountVerificationComplete, 79364 [FormEvent.PART_SUCCESS_COMPLETE]: onSuccessComplete, 79365 }; 79366 const sectionVisibilities$7 = [ 79367 { 79368 type: sectionTypes.EMAIL.type, 79369 isDisplayedInProgressBar: true, 79370 isVisible: () => true 79371 }, 79372 { 79373 type: sectionTypes.LOGIN_PASSWORD.type, 79374 isDisplayedInProgressBar: true, 79375 isVisible: (form, formState) => formConfigAs(form).usePassword && formState.userExists && !formState.socialSignin 79376 }, 79377 { 79378 type: sectionTypes.PASSWORD_SETUP.type, 79379 isDisplayedInProgressBar: true, 79380 isVisible: (form, formState) => formConfigAs(form).usePassword && !formState.userExists && !formState.socialSignin 79381 }, 79382 { 79383 type: sectionTypes.PASSWORD_RESET.type, 79384 isDisplayedInProgressBar: false, 79385 isVisible: (form, formState) => formConfigAs(form).usePassword && formState.forgotPassword 79386 }, 79387 { 79388 type: sectionTypes.FORGOT_PASSWORD.type, 79389 isDisplayedInProgressBar: false, 79390 isVisible: (form, formState) => formConfigAs(form).usePassword && formState.forgotPassword 79391 }, 79392 { 79393 type: sectionTypes.VERIFICATION_CODE_LOGIN.type, 79394 isDisplayedInProgressBar: false, 79395 isVisible: (form, formState) => (formState.userExists && (formConfigAs(form).useVerificationCodes || formState.socialSignin)) ?? false 79396 }, 79397 { 79398 type: sectionTypes.VERIFICATION_CODE_REGISTRATION.type, 79399 isDisplayedInProgressBar: false, 79400 isVisible: (form, formState) => (!formState.userExists && (formConfigAs(form).useVerificationCodes || formState.emailIsContact)) ?? false 79401 }, 79402 { 79403 type: sectionTypes.REGISTRATION_CUSTOM.type, 79404 isDisplayedInProgressBar: true, 79405 isVisible: (_, formState) => !formState.userExists 79406 }, 79407 { 79408 type: sectionTypes.SUCCESS.type, 79409 isDisplayedInProgressBar: false, 79410 isVisible: () => true 79411 }, 79412 { 79413 type: sectionTypes.EMAIL_VERIFIED.type, 79414 isDisplayedInProgressBar: false, 79415 isVisible: (form, formState) => form.organisationConfiguration.requireEmailVerfication && 79416 !(formConfigAs(form).useVerificationCodes) && 79417 !formState.socialSignin 79418 }, 79419 { 79420 type: sectionTypes.PASSWORDLESS_VIA_LOGIN_LINK.type, 79421 isDisplayedInProgressBar: false, 79422 isVisible: (form, formState) => formState.userExists && getFormIsPasswordless(form) 79423 } 79424 ]; 79425 const canAttemptSectionCompletion$8 = (_, formState) => { 79426 return !formState.elementValidity.filter(e => e.partType === formState.currentPart.type && 79427 e.sectionType === formState.currentSection.type && 79428 e.sectionOrder === formState.currentSection.order) 79429 .some(e => !e.isValid); 79430 }; 79431 const sectionFlow$8 = { 79432 extraElements: [], 79433 eventHandlers: eventHandlers$9, 79434 sectionVisibilities: sectionVisibilities$7,
79435 canAttemptSectionCompletion: canAttemptSectionCompletion$8, 79436 canDismissFormManually: () => false, 79437 formRequiresPrerequisiteLoading: () => false, 79438 canPartiallyRegister: true 79439 }; 79440 79441 const processResponse$1 = async (payload, response, form, formState, formActions) => { 79442 const json = await response.json(); 79443 if (response?.ok) { 79444 logConversion('CONTACT', form, formActions); 79445 window.Blaize?.postProcessFormData && window.Blaize.postProcessFormData(form.id, payload, json); 79446 return Promise.resolve(true); 79447 } 79448 // Handle errors 79449 const serverError = mapToServerError(response.status, json?.message, formState); 79450 formActions.updateFormState({ 79451 serverErrors: [serverError] 79452 }); 79453 logDataLayerEvent(form, 'zephr_form_error', { 79454 error: ServerError[serverError], 79455 }); 79456 if (ServerErrors[serverError].jumpToPart) { 79457 formActions.jumpToPartStart(ServerErrors[serverError].jumpToPart); 79458 } 79459 return Promise.resolve(false); 79460 }; 79461 const preprocessorIdentity$1 = (_, t) => t; 79462 const toContactCreeatePayload = (form, formState) => { 79463 const autoAppliedAttributes = formConfigAs(form).autoApplyAttributes ?? {}; 79464 const preprocessor = window.Blaize?.preProcessFormData ?? preprocessorIdentity$1; 79465 const attributes = userAttributesValuesForPart(partTypes.CONTACT_VERIFICATION.type, form, formState); 79466 const attributesWithAutoApplied = { 79467 ...attributes, 79468 ...autoAppliedAttributes 79469 }; 79470 return preprocessor(form.id, { 79471 identifiers: { email_address: formState.emailAddress }, 79472 attributes: Object.keys(attributesWithAutoApplied).length ? attributesWithAutoApplied : undefined, 79473 }); 79474 }; 79475 const registerContact = async (form, formState, formActions) => { 79476 const payload = toContactCreeatePayload(form, formState); 79477 const response = await request('zephr/createContact', { 79478 method: "POST", 79479 bodyObject: payload 79480 }, formActions); 79481 return processResponse$1(payload, response, form, formState, formActions); 79482 }; 79483 79484 /** 79485 * Map of possible movements through the form sections for contact forms. 79486 */ 79487 const formStartAction$7 = async (_, __, formActions) => { 79488 await checkForRegisteredUser(formActions); 79489 }; 79490 // handle submit of email on first step or after additional attributes preferences provided 79491 const onContactVerificationComplete = async (form, formState, formActions) => { 79492 const config = formConfigAs(form); 79493 try { 79494 await registerContact(form, formState, formActions); 79495 if (config.showSuccessOnFormCompletion) { 79496 await jumpToPart(partTypes.SUCCESS.type, form, formActions); 79497 } 79498 else { 79499 window.location.reload(); 79500 } 79501 } 79502 catch (error) { 79503 console.error(error); 79504 await jumpToSection(sectionTypes.EMAIL.type, form, formActions); 79505 } 79506 }; 79507 const eventHandlers$8 = { 79508 [FormEvent.FORM_START]: formStartAction$7, 79509 [FormEvent.PART_CONTACT_VERIFICATION_COMPLETE]: onContactVerificationComplete, 79510 }; 79511 const sectionVisibilities$6 = [ 79512 { 79513 type: sectionTypes.EMAIL.type, 79514 isDisplayedInProgressBar: false, 79515 isVisible: () => true, 79516 }, 79517 { 79518 type: sectionTypes.REGISTRATION_CUSTOM.type, 79519 isDisplayedInProgressBar: false, 79520 isVisible: (_, formState) => !formState.userExists, 79521 }, 79522 ]; 79523 const canAttemptSectionCompletion$7 = (_, formState) => { 79524 return !formState.elementValidity 79525 .filter((e) => e.partType === formState.currentPart.type && 79526 e.sectionType === formState.currentSection.type && 79527 e.sectionOrder === formState.currentSection.order) 79528 .some((e) => !e.isValid); 79529 }; 79530 const sectionFlow$7 = { 79531 extraElements: [], 79532 eventHandlers: eventHandlers$8, 79533 sectionVisibilities: sectionVisibilities$6, 79534 canAttemptSectionCompletion: canAttemptSectionCompletion$7, 79535 canDismissFormManually: () => false, 79536 formRequiresPrerequisiteLoading: () => false, 79537 }; 79538 79539 const processResponse = async (payload, response, attributes, form, formState, formActions) => { 79540 if (response?.ok) { 79541 if (form.formType == FormType.UPDATE_PROFILE) { 79542 logDataLayerEvent(form, 'zephr_form_profile_update', { 79543 success: response?.ok, 79544 ...Object.entries(attributes).reduce((acc, [key, value]) => ({ ...acc, [`attr_${key}`]: value }), {}) 79545 }); 79546 } 79547 if (form.formType == FormType.DATA_CAPTURE) { 79548 logConversion('Data Captured', form, formActions); 79549 logDataLayerEvent(form, 'zephr_form_data_capture', { 79550 success: response?.ok, 79551 ...Object.entries(attributes).reduce((acc, [key, value]) => ({ ...acc, [`attr_${key}`]: value }), {}) 79552 }); 79553 } 79554 if (form.formType == FormType.COMPLETE_REGISTRATION) { 79555 logConversion('Completed Registration', form, formActions); 79556 logDataLayerEvent(form, 'zephr_form_complete_registration', { 79557 success: response?.ok, 79558 ...Object.entries(attributes).reduce((acc, [key, value]) => ({ ...acc, [`attr_${key}`]: value }), {}) 79559 }); 79560 } 79561 const json = await response.json(); 79562 payload && window.Blaize?.postProcessFormData && window.Blaize.postProcessFormData(form.id, payload, json); 79563 return Promise.resolve(true); 79564 } 79565 const responseMessage = (await response.json())?.message; 79566 const serverError = mapToServerError(response.status, responseMessage, formState); 79567 formActions.updateFormState({ 79568 serverErrors: [serverError] 79569 }); 79570 logDataLayerEvent(form, 'zephr_form_error', { 79571 error: ServerError[serverError], 79572 }); 79573 return Promise.resolve(false); 79574 }; 79575 const preprocessorIdentity = (_, t) => t; 79576 const toUpdateUserPayload = (form, formState, partType) => { 79577 const preprocessor = window.Blaize?.preProcessFormData ?? preprocessorIdentity; 79578 const attributes = userAttributesValuesForPart(partType, form, formState); 79579 const autoAppliedAttributes = formConfigAs(form).autoApplyAttributes ?? {}; 79580 return preprocessor(form.id, { 79581 ...attributes, 79582 ...autoAppliedAttributes, 79583 ...(formState.createPassword && { 'blaize-validator': formState.createPassword }), 79584 }); 79585 }; 79586 const updateUser = async (form, formState, formActions, partType) => { 79587 const payload = toUpdateUserPayload(form, formState, partType); 79588 if (formState.fireCancelationReasonEvent) { 79589 formActions.updateFormState({ 79590 cancelationReasonAttributes: payload 79591 }); 79592 } 79593 const response = await request('blaize/profile', { 79594 method: "PATCH", 79595 bodyObject: payload 79596 }, formActions); 79597 const attributes = userAttributesValuesForPart(partType, form, formState); 79598 return processResponse(payload, response, attributes, form, formState, formActions); 79599 }; 79600 79601 const formStartAction$6 = async (form, formState, formActions) => { 79602 const hideIfSet = form.parts 79603 .map(e => e.sections) 79604 .reduce((acc, curr) => { 79605 const attrToHide = curr.map(e => e.elements 79606 .filter(e => e.type == "user_attribute" && e.config?.hideIfSet) 79607 .map(e => e.config?.slug) 79608 .filter(slug => slug != null)); 79609 return acc.concat(attrToHide); 79610 }, []) 79611 .flat(); 79612 const toRemove = []; 79613 try { 79614 const response = await request('blaize/profile', { method: "GET" }, formActions); 79615 if (response?.ok) { 79616 const responseJson = await response.json(); 79617 formConfigAs(form).autoApplyAttributes && 79618 Object.keys(formConfigAs(form).autoApplyAttributes).forEac
79618h(a => { 79619 if (Object.prototype.hasOwnProperty.call(responseJson, a)) { 79620 delete responseJson[a]; 79621 } 79622 }); 79623 hideIfSet.forEach(a => { 79624 if (Object.prototype.hasOwnProperty.call(responseJson, a)) { 79625 toRemove.push(a); 79626 } 79627 }); 79628 if (toRemove.length == Object.keys(formState.userAttributes).length && form.formType != FormType.COMPLETE_REGISTRATION) { 79629 console.warn("Not showing form as user has no attributes to update"); 79630 } 79631 else { 79632 formActions.updateFormState({ 79633 formPrerequisiteLoaded: true, 79634 hideIfSetAttributes: toRemove, 79635 userAttributes: { ...responseJson }, 79636 }); 79637 } 79638 } 79639 } 79640 catch (err) { 79641 console.error(err); 79642 } 79643 }; 79644 const onUpdateProfileComplete = async (form, formState, formActions) => { 79645 const config = formConfigAs(form); 79646 try { 79647 await updateUser(form, formState, formActions, partTypes.PROFILE_UPDATE.type) 79648 .then(async (success) => { 79649 if (success && config.showSuccessOnFormCompletion) { 79650 await jumpToPart(partTypes.SUCCESS.type, form, formActions); 79651 } 79652 else if (success) { 79653 window.location.reload(); 79654 } 79655 }); 79656 } 79657 catch (error) { 79658 console.error(error); 79659 } 79660 }; 79661 const eventHandlers$7 = { 79662 [FormEvent.FORM_START]: formStartAction$6, 79663 [FormEvent.PART_PROFILE_UPDATE_COMPLETE]: onUpdateProfileComplete, 79664 }; 79665 const sectionVisibilities$5 = []; 79666 const canAttemptSectionCompletion$6 = (_, formState) => { 79667 return !formState.elementValidity 79668 .filter((e) => e.partType === formState.currentPart.type && 79669 e.sectionType === formState.currentSection.type && 79670 e.sectionOrder === formState.currentSection.order) 79671 .some((e) => !e.isValid); 79672 }; 79673 const sectionFlow$6 = { 79674 extraElements: [], 79675 eventHandlers: eventHandlers$7, 79676 sectionVisibilities: sectionVisibilities$5, 79677 canAttemptSectionCompletion: canAttemptSectionCompletion$6, 79678 canDismissFormManually: () => false, 79679 formRequiresPrerequisiteLoading: () => true, 79680 }; 79681 79682 const startUpdateEmailFlow = async (form, formState, formActions) => { 79683 try { 79684 const updateEmailWithoutPassword = !formState.password; 79685 const payload = { 79686 current_identifiers: { 79687 email_address: formState.readOnlyEmail, 79688 }, 79689 new_identifiers: { 79690 email_address: formState.emailAddress, 79691 }, 79692 ...(updateEmailWithoutPassword ? {} : { 79693 validators: { 79694 password: formState.password, 79695 }, 79696 }), 79697 }; 79698 const response = await request(updateEmailWithoutPassword ? 'blaize/users/update-email' : 'zephr/users/update-email', { 79699 method: 'POST', 79700 bodyObject: payload, 79701 }, formActions); 79702 logDataLayerEvent(form, 'zephr_form_email_update_code_sent', { 79703 success: response?.ok 79704 }); 79705 if (!response.ok) { 79706 formActions.updateFormState({ 79707 serverErrors: [ServerError.UNKNOWN], 79708 }); 79709 logDataLayerEvent(form, 'zephr_form_error', { 79710 error: ServerError[ServerError.UNKNOWN], 79711 }); 79712 return { success: false, isLinkBased: updateEmailWithoutPassword }; 79713 } 79714 return { success: true, isLinkBased: updateEmailWithoutPassword }; 79715 } 79716 catch (err) { 79717 formActions.updateFormState({ 79718 serverErrors: [ServerError.UNKNOWN], 79719 }); 79720 logDataLayerEvent(form, 'zephr_form_error', { 79721 error: ServerError[ServerError.UNKNOWN], 79722 }); 79723 return { success: false, isLinkBased: !formState.password }; 79724 } 79725 }; 79726 const endEmailUpdateFlow = async (form, formState, formActions) => { 79727 formActions.incrementRequestCount(); 79728 formActions.updateFormState({ 79729 verificationCodeValid: undefined 79730 }); 79731 const response = await request(`zephr/users/update-email/${formState.verificationCode}`, { 79732 method: "POST", 79733 bodyObject: { 79734 current_identifiers: { 79735 email_address: formState.readOnlyEmail, 79736 }, 79737 } 79738 }, formActions); 79739 logDataLayerEvent(form, 'zephr_form_password_reset_code_validate', { 79740 success: response?.ok 79741 }); 79742 if (!response.ok) { 79743 formActions.updateFormState({ 79744 serverErrors: [ServerError.VERIFICATION_CODE_INCORRECT] 79745 }); 79746 logDataLayerEvent(form, 'zephr_form_error', { 79747 error: ServerError[ServerError.VERIFICATION_CODE_INCORRECT], 79748 }); 79749 formActions.decrementRequestCount(); 79750 return false;
79751 } 79752 await waitAfterCode(form); 79753 formActions.decrementRequestCount(); 79754 return true; 79755 }; 79756 79757 const startPasswordUpdateFlow = async (form, formState, formActions) => { 79758 try { 79759 const payload = { 79760 current_validators: { 79761 password: formState.currentPassword, 79762 }, 79763 new_validators: { 79764 password: formState.createPassword, 79765 }, 79766 }; 79767 const response = await request('zephr/users/change-password', { 79768 method: 'POST', 79769 bodyObject: payload, 79770 }, formActions); 79771 logDataLayerEvent(form, 'zephr_form_password_update_code_sent', { 79772 success: response?.ok 79773 }); 79774 if (!response.ok) { 79775 formActions.updateFormState({ 79776 serverErrors: [ServerError.UNKNOWN], 79777 }); 79778 return false; 79779 } 79780 return true; 79781 } 79782 catch (err) { 79783 formActions.updateFormState({ 79784 serverErrors: [ServerError.UNKNOWN], 79785 }); 79786 return false; 79787 } 79788 }; 79789 const endPasswordUpdateFlow = async (form, formState, formActions) => { 79790 formActions.incrementRequestCount(); 79791 formActions.updateFormState({ 79792 verificationCodeValid: undefined 79793 }); 79794 const response = await request(`zephr/users/change-password/${formState.verificationCode}`, { 79795 method: "GET", 79796 }, formActions); 79797 logDataLayerEvent(form, 'zephr_form_password_update_code_validate', { 79798 success: response?.ok 79799 }); 79800 if (!response.ok) { 79801 formActions.updateFormState({ 79802 serverErrors: [ServerError.VERIFICATION_CODE_INCORRECT] 79803 }); 79804 logDataLayerEvent(form, 'zephr_form_error', { 79805 error: ServerError[ServerError.VERIFICATION_CODE_INCORRECT], 79806 }); 79807 formActions.decrementRequestCount(); 79808 return false; 79809 } 79810 await waitAfterCode(form); 79811 formActions.decrementRequestCount(); 79812 return true; 79813 }; 79814 79815 const formStartAction$5 = async (_, __, formActions) => { 79816 formActions.incrementRequestCount(); 79817 try { 79818 await Promise.all([fetchProfile(formActions), fetchEmail(formActions)]); 79819 } 79820 finally { 79821 formActions.decrementRequestCount(); 79822 } 79823 }; 79824 const startEmailUpdate = async (form, formState, formActions) => { 79825 const result = await startUpdateEmailFlow(form, formState, formActions); 79826 if (result.success) { 79827 if (result.isLinkBased) { 79828 // Passwordless flow - show confirmation message to check email for link 79829 // Check if confirmation part exists in form config (defensive guard for legacy forms) 79830 const hasConfirmationPart = form.parts.some(p => p.type === partTypes.EMAIL_UPDATE_CONFIRMATION.type); 79831 if (hasConfirmationPart) { 79832 await jumpToPart(partTypes.EMAIL_UPDATE_CONFIRMATION.type, form, formActions); 79833 } 79834 else { 79835 // Fallback: show OTP screen for legacy forms without confirmation part 79836 await jumpToPart(partTypes.EMAIL_UPDATE_OTP.type, form, formActions); 79837 } 79838 } 79839 else { 79840 // Password-protected flow - show OTP code input screen 79841 await jumpToPart(partTypes.EMAIL_UPDATE_OTP.type, form, formActions); 79842 } 79843 } 79844 }; 79845 const endEmailUpdate = async (form, formState, formActions) => { 79846 const success = await endEmailUpdateFlow(form, formState, formActions); 79847 if (success) { 79848 await reset(form, formState, formActions, true); 79849 } 79850 }; 79851 const startPasswordUpdate = async (form, formState, formActions) => { 79852 const success = await startPasswordUpdateFlow(form, formState, formActions); 79853 if (success) { 79854 await jumpToPart(partTypes.PASSWORD_UPDATE_OTP.type, form, formActions); 79855 } 79856 }; 79857 const endPasswordUpdate = async (form, formState, formActions) => { 79858 const success = await endPasswordUpdateFlow(form, formState, formActions); 79859 if (success) { 79860 await reset(form, formState, formActions, true); 79861 } 79862 }; 79863 const onUpdateAttributes$1 = async (form, formState, formActions) => { 79864 const submitSuccess = await updateUser(form, formState, formActions, partTypes.ATTRIBUTES_UPDATE.type); 79865 if (submitSuccess) { 79866 await reset(form, formState, formActions, true); 79867 } 79868 }; 79869 const goBack$1 = async (form, formState, formActions) => reset(form, formState, formActions, false); 79870 const jumpToUserAttributeUpdate = async (form, _, formActions) => { 79871 await jumpToPart(partTypes.ATTRIBUTES_UPDATE.type, form, formActions); 79872 }; 79873 const reset = async (form, formState, formActions, wait) => { 79874 formActions.updateFormState({ 79875 emailAddress: null, 79876 password: null, 79877 createPassword: null, 79878 passwordIsValid: null, 79879 verificationCode: null, 79880 currentPassword: null, 79881 serverErrors: [], 79882 }); 79883 if (wait) { 79884 await formStartAction$5(form, formState, formActions); 79885 } 79886 else { 79887 void formStartAction$5(form, formState, formActions); 79888 } 79889 await jumpToPart(partTypes.PROFILE_UPDATE.type, form, formActions); 79890 }; 79891 const fetchProfile = async (formActions) => { 79892 try { 79893 const response = await request('blaize/profile', { method: "GET" }, formActions); 79894 const json = await response.json(); 79895 formActions.updateFormState({ 79896 readOnlyAttributeValues: json, 79897 }); 79898 } 79899 catch (err) { 79900 console.error("Unable to load user profile", err); 79901 } 79902 }; 79903 const fetchEmail = async (formActions) => { 79904 try { 79905 const response = await request('blaize/account', { method: "GET" }, formActions); 79906 const email = (await response.json())?.identifiers.email_address; 79907 formActions.updateFormState({ 79908 readOnlyEmail: email 79909 }); 79910 } 79911 catch (err) { 79912 console.error("Unable to load user email", err); 79913 } 79914 }; 79915 const eventHandlers$6 = {
79916 [FormEvent.FORM_START]: formStartAction$5, 79917 [FormEvent.GO_BACK]: goBack$1, 79918 [FormEvent.UPDATE]: jumpToUserAttributeUpdate, 79919 [FormEvent.PART_EMAIL_UPDATE_COMPLETE]: startEmailUpdate, 79920 [FormEvent.VERIFY_EMAIL_UPDATE_OTP]: endEmailUpdate, 79921 [FormEvent.PART_PASSWORD_UPDATE_COMPLETE]: startPasswordUpdate, 79922 [FormEvent.VERIFY_PASSWORD_UPDATE_OTP]: endPasswordUpdate, 79923 [FormEvent.PART_ATTRIBUTES_UPDATE_COMPLETE]: onUpdateAttributes$1, 79924 }; 79925 const canAttemptSectionCompletion$5 = (_, formState) => { 79926 return !formState.elementValidity 79927 .filter((e) => e.partType === formState.currentPart.type && 79928 e.sectionType === formState.currentSection.type && 79929 e.sectionOrder === formState.currentSection.order) 79930 .some((e) => !e.isValid); 79931 }; 79932 const sectionFlow$5 = { 79933 extraElements: [], 79934 eventHandlers: eventHandlers$6, 79935 sectionVisibilities: [], 79936 canAttemptSectionCompletion: canAttemptSectionCompletion$5, 79937 canDismissFormManually: () => false, 79938 formRequiresPrerequisiteLoading: () => false, 79939 }; 79940 79941 const formStartAction$4 = async (form, formState, formActions) => { 79942 const hasDynamicOfferAttached = !!formConfigAs(form).dynamicOffer?.id; 79943 const hasCancelReason = formConfigAs(form).hasCancelReason; 79944 const hasSaveOffer = formConfigAs(form).hasSaveOffer; 79945 // Skip Dynamic Offer fetch if we need to capture cancellation reason first 79946 // This ensures the cancellation reason is available as a user attribute for Dynamic Offer filtering 79947 const shouldFetchDynamicOfferNow = hasDynamicOfferAttached && !(hasSaveOffer && hasCancelReason); 79948 if (shouldFetchDynamicOfferNow) { 79949 await getDynamicOffer(form, formActions).catch((e) => { console.error('Error loading Dynamic Offer', e); }); 79950 formState = formActions.getFormState(); 79951 } 79952 const existingSubscriptions = formConfigAs(form).hasSaveOffer ? 79953 await loadExistingSubscriptions$1(form, formState, formActions, shouldFetchDynamicOfferNow, false) : await loadExistingSubscriptions(form, formState, formActions, true); 79954 const subscriptionQueryParam = getSubscriptionParam(window.location.href); 79955 if (!subscriptionQueryParam) { 79956 return; 79957 } 79958 const queryParamSubscription = existingSubscriptions.find(subscription => subscription.externalId === subscriptionQueryParam); 79959 if (queryParamSubscription) { 79960 formActions.updateFormState({ 79961 selectedSubscription: queryParamSubscription, 79962 isExternalReferrer: true, 79963 }); 79964 formActions.completeSection(); 79965 } 79966 }; 79967 const cancel = async (form, formActions) => { 79968 const formState = formActions.getFormState(); 79969 try { 79970 const response = await request(`zephr/subscriptions/${formState.selectedSubscription.externalId}`, { 79971 method: 'DELETE', 79972 }, formActions); 79973 if (response.ok) { 79974 if (formState.fireCancelationReasonEvent) { 79975 logDataLayerEvent(form, 'zephr_form_subscription_cancel_reason', { 79976 productId: formState.selectedSubscription.productId, 79977 ...Object.entries(formState.cancelationReasonAttributes).reduce((acc, [key, value]) => ({ ...acc, [`attr_${key}`]: value }), {}) 79978 }); 79979 } 79980 logDataLayerEvent(form, 'zephr_form_subscription_cancel', { 79981 productId: formState.selectedSubscription.productId, 79982 productLabel: formState.selectedSubscription.productLabel, 79983 currency: formState.selectedSubscription.currency, 79984 amount: formState.selectedSubscription.amount, 79985 }); 79986 if (form.parts.some(e => e.type == partTypes.CANCEL_SUCCESS.type)) { 79987 formActions.jumpToPartStart(partTypes.CANCEL_SUCCESS.type); 79988 } 79989 else { 79990 formActions.jumpToPartStart(partTypes.SUCCESS.type); 79991 } 79992 } 79993 else { 79994 formActions.updateFormState({ 79995 serverErrors: [ServerError.UNKNOWN], 79996 }); 79997 logDataLayerEvent(form, 'zephr_form_error', { 79998 error: ServerError[ServerError.UNKNOWN], 79999 }); 80000 } 80001 } 80002 catch (error) { 80003 console.error("Error occurred while cancelling subscription.", error); 80004 formActions.updateFormState({ 80005 serverErrors: [ServerError.UNKNOWN], 80006 }); 80007 logDataLayerEvent(form, 'zephr_form_error', { 80008 error: ServerError[ServerError.UNKNOWN], 80009 }); 80010 } 80011 }; 80012 const onSubscriptionSelectComplete$2 = async (form, formState, formActions) => { 80013 if (formConfigAs(form).hasCancelReason) { 80014 formActions.updateFormState({ 80015 fireCancelationReasonEvent: true, 80016 cancelFlowSubscriptionSelectedId: formState.selectedSubscription.externalId, 80017 });
80018 formActions.jumpToPartStart(partTypes.ATTRIBUTES_UPDATE.type); 80019 } 80020 else if (formState.validChangeFromPlans.length === 0) { 80021 await cancel(form, formActions); 80022 } 80023 else if (formConfigAs(form).hasSaveOffer) { 80024 formActions.updateFormState({ 80025 cancelFlowSubscriptionSelectedId: formState.selectedSubscription.externalId, 80026 }); 80027 formActions.jumpToPartStart(partTypes.PLAN_SELECT.type); 80028 } 80029 else { 80030 await cancel(form, formActions); 80031 } 80032 }; 80033 const onPlanSelectComplete$1 = async (form, formState, formActions) => { 80034 if (formState.confirmCancel) { 80035 await cancel(form, formActions); 80036 } 80037 else { 80038 const state = formActions.getFormState(); 80039 const updatedState = await getProductAddons(form, state, formActions); 80040 void calculatePrices(form, updatedState, formActions); 80041 void calculateChangeSubscriptionProrate(form, updatedState, formActions); 80042 formActions.updateFormState({ 80043 convertCancelSubscriptionToAcceptOffer: true, 80044 }); 80045 formActions.jumpToPartStart(partTypes.PAYMENT.type); 80046 } 80047 }; 80048 const onUpdateAttributes = async (form, formState, formActions) => { 80049 const submitSuccess = await updateUser(form, formState, formActions, partTypes.ATTRIBUTES_UPDATE.type); 80050 if (!submitSuccess) { 80051 return; 80052 } 80053 // Fetch Dynamic Offer now that cancellation reason is available as a user attribute 80054 const hasDynamicOfferAttached = !!formConfigAs(form).dynamicOffer?.id; 80055 const hasSaveOffer = formConfigAs(form).hasSaveOffer; 80056 if (hasDynamicOfferAttached && hasSaveOffer) { 80057 await getDynamicOffer(form, formActions).catch((e) => { console.error('Error loading Dynamic Offer', e); }); 80058 // Filter subscriptions with the newly fetched Dynamic Offer result 80059 const updatedFormState = formActions.getFormState(); 80060 const existingSubscriptions = updatedFormState.existingSubscriptions || []; 80061 if (existingSubscriptions.length > 0) { 80062 filterDynamicOfferChangeFromPlans(existingSubscriptions, updatedFormState, formActions, updatedFormState.requiresPaymentMethodSetup || false); 80063 } 80064 formState = formActions.getFormState(); 80065 } 80066 if (formState.validChangeFromPlans.length === 0) { 80067 await cancel(form, formActions); 80068 } 80069 else if (hasSaveOffer) { 80070 formActions.jumpToPartStart(partTypes.PLAN_SELECT.type); 80071 } 80072 else { 80073 await cancel(form, formActions); 80074 } 80075 }; 80076 const goBack = async (_, __, formActions) => { 80077 formActions.jumpToPartStart(partTypes.SELECT_SUBSCRIPTION.type); 80078 return Promise.resolve(); 80079 }; 80080 const eventHandlers$5 = { 80081 [FormEvent.FORM_START]: formStartAction$4, 80082 [FormEvent.SELECT_SUBSCRIPTION_COMPLETE]: onSubscriptionSelectComplete$2, 80083 [FormEvent.GO_BACK]: goBack, 80084 [FormEvent.PART_PLAN_SELECT_COMPLETE]: onPlanSelectComplete$1, 80085 [FormEvent.PART_PAYMENT_COMPLETE]: pay, 80086 [FormEvent.PART_ATTRIBUTES_UPDATE_COMPLETE]: onUpdateAttributes, 80087 }; 80088 const extraElements = [ 80089 { 80090 type: elementTypes.PAYMENT_PRE_LOADER, 80091 order: -1, 80092 }, 80093 ]; 80094 const cancelSubscriptionSectionFlow = { 80095 extraElements, 80096 eventHandlers: eventHandlers$5, 80097 sectionVisibilities: [], 80098 canAttemptSectionCompletion: () => true, 80099 canDismissFormManually: () => false, 80100 formRequiresPrerequisiteLoading: () => false, 80101 }; 80102 80103 const formStartAction$3 = async (form, formState, formActions) => { 80104 const existingSubscriptions = await loadExistingSubscriptions(form, formState, formActions, true); 80105 const subscriptionQueryParam = getSubscriptionParam(window.location.href); 80106 if (!subscriptionQueryParam) { 80107 return; 80108 } 80109 const queryParamSubscription = existingSubscriptions.find(subscription => subscription.externalId === subscriptionQueryParam); 80110 if (queryParamSubscription) { 80111 formActions.updateFormState({ 80112 selectedSubscription: queryParamSubscription, 80113 isExternalReferrer: true, 80114 }); 80115 formActions.completeSection(); 80116 } 80117 }; 80118 const onSubscriptionSelectComplete$1 = (form, formState, formActions) => { 80119 formActions.updateFormState({ 80120 suspendResumeFlowSubscriptionSelectedId: formState.selectedSubscription.externalId, 80121 });
80122 formActions.jumpToPartStart(partTypes.SUSPEND_RESUME_SUBSCRIPTION.type); 80123 }; 80124 const suspendResumeSubscriptionComplete = async (form, formState, formActions) => { 80125 try { 80126 const response = await request(`zephr/subscriptions/${formState.selectedSubscription.externalId}/manage`, { 80127 method: 'POST', 80128 bodyObject: { 80129 vendor_fields: { 80130 order: JSON.stringify({ 80131 subscription: { 80132 orderActions: [ 80133 { 80134 type: 'Suspend', 80135 suspend: { 80136 suspendPolicy: 'SpecificDate', 80137 suspendSpecificDate: formState.suspendResumeSubscription.suspensionDate, 80138 } 80139 }, 80140 { 80141 type: 'Resume', 80142 resume: { 80143 resumePolicy: 'SpecificDate', 80144 resumeSpecificDate: formState.suspendResumeSubscription.resumeDate, 80145 extendsTerm: true, 80146 } 80147 } 80148 ] 80149 } 80150 }) 80151 } 80152 } 80153 }, formActions); 80154 if (response.ok) { 80155 logDataLayerEvent(form, 'zephr_form_subscription_suspend', { 80156 productId: formState.selectedSubscription.productId, 80157 productLabel: formState.selectedSubscription.productLabel, 80158 currency: formState.selectedSubscription.currency, 80159 amount: formState.selectedSubscription.amount, 80160 }); 80161 formActions.jumpToPartStart(partTypes.SUCCESS.type); 80162 } 80163 else { 80164 formActions.updateFormState({ 80165 serverErrors: [ServerError.UNKNOWN], 80166 }); 80167 logDataLayerEvent(form, 'zephr_form_error', { 80168 error: ServerError[ServerError.UNKNOWN], 80169 }); 80170 } 80171 } 80172 catch (error) { 80173 console.error("Error occurred while suspending subscription.", error); 80174 formActions.updateFormState({ 80175 serverErrors: [ServerError.UNKNOWN], 80176 }); 80177 logDataLayerEvent(form, 'zephr_form_error', { 80178 error: ServerError[ServerError.UNKNOWN], 80179 }); 80180 } 80181 }; 80182 const eventHandlers$4 = { 80183 [FormEvent.FORM_START]: formStartAction$3, 80184 [FormEvent.SELECT_SUBSCRIPTION_COMPLETE]: onSubscriptionSelectComplete$1, 80185 [FormEvent.SUSPEND_RESUME_SUBSCRIPTION_COMPLETE]: suspendResumeSubscriptionComplete, 80186 }; 80187 const sectionVisibilities$4 = []; 80188 const canAttemptSectionCompletion$4 = (_, formState) => { 80189 return !formState.elementValidity 80190 .filter((e) => e.partType === formState.currentPart.type && 80191 e.sectionType === formState.currentSection.type && 80192 e.sectionOrder === formState.currentSection.order) 80193 .some((e) => !e.isValid); 80194 }; 80195 const sectionFlow$4 = { 80196 extraElements: [], 80197 eventHandlers: eventHandlers$4, 80198 sectionVisibilities: sectionVisibilities$4, 80199 canAttemptSectionCompletion: canAttemptSectionCompletion$4, 80200 canDismissFormManually: () => false, 80201 formRequiresPrerequisiteLoading: () => false, 80202 }; 80203 80204 const formStartAction$2 = async (form, formState, formActions) => { 80205 await loadDeviceSessions(form, formState, formActions); 80206 }; 80207 const eventHandlers$3 = { 80208 [FormEvent.FORM_START]: formStartAction$2, 80209 }; 80210 const sectionVisibilities$3 = []; 80211 const canAttemptSectionCompletion$3 = (_, formState) => { 80212 return !formState.elementValidity 80213 .filter((e) => e.partType === formState.currentPart.type && 80214 e.sectionType === formState.currentSection.type && 80215 e.sectionOrder === formState.currentSection.order) 80216 .some((e) => !e.isValid); 80217 }; 80218 const sectionFlow$3 = { 80219 extraElements: [], 80220 eventHandlers: eventHandlers$3, 80221 sectionVisibilities: sectionVisibilities$3, 80222 canAttemptSectionCompletion: canAttemptSectionCompletion$3, 80223 canDismissFormManually: () => false, 80224 formRequiresPrerequisiteLoading: () => false, 80225 }; 80226 80227 /** 80228 * Map of possible movements through the form sections for gift subscription forms. 80229 */ 80230 // Handle the completion of the recipient details section 80231 const onGiftRecipientComplete = async (form, formState, formActions) => { 80232 // Check if user is logged in using existing session state 80233 if (formState.loginRegistrationComplete) { 80234 // If logged in, jump directly to payment section 80235 await jumpToPart(partTypes.PAYMENT.type, form, formActions); 80236 } 80237 else { 80238 // If not logged in, continue with normal flow to account verification
80239 await jumpToSection(sectionTypes.EMAIL.type, form, formActions); 80240 } 80241 }; 80242 // Modified pay service for gift subscription 80243 const payWithGiftInfo = async (form, formState, formActions) => { 80244 try { 80245 // Add gift recipient info to the payment metadata 80246 const giftRecipient = formState.giftRecipient; 80247 if (!giftRecipient) { 80248 throw new Error("Gift recipient information is missing"); 80249 } 80250 // Call the standard payment flow - the gift-specific logic is handled in zuoraService.ts 80251 // which will make the actual API call to create the gift subscription 80252 return await pay(form, formState, formActions); 80253 } 80254 catch (error) { 80255 console.error("Error in gift subscription payment:", error); 80256 // Use the language pack for error message 80257 const errorMessage = resolveLanguagePackKeyTyped(form, 'forms.errors.unknown-payment-error', "Payment failed"); 80258 // Display the error message 80259 formActions.updateFormState({ 80260 dynamicServerErrorMessage: errorMessage 80261 }); 80262 throw error; 80263 } 80264 }; 80265 // Customize the payment flow's PART_PLAN_SELECT_COMPLETE handler to add our gift recipient step 80266 const onPlanSelectComplete = async (form, formState, formActions) => { 80267 // Check gift form mode FIRST, before calling payment flow handler 80268 if (formState.isGiftForm) { 80269 // If gift mode is enabled, check if recipient details are valid before jumping 80270 const recipientDetailsElementTypes = [ 80271 'recipient_name', 80272 'recipient_email', 80273 'recipient_address', 80274 'recipient_message' 80275 ]; 80276 // Check if all recipient details elements are valid 80277 const recipientDetailsValid = recipientDetailsElementTypes.every(elementType => { 80278 const elementValidity = formState.elementValidity.find(e => e.elementType === elementType && 80279 e.sectionType === 'recipient_details'); 80280 return elementValidity ? elementValidity.isValid : false; 80281 }); 80282 // Calculate prices first (from payment form flow) 80283 await sectionFlow$9.eventHandlers[FormEvent.PART_PLAN_SELECT_COMPLETE](form, formState, formActions); 80284 // Then navigate to recipient details if they are not valid 80285 if (!recipientDetailsValid) { 80286 await jumpToSection('recipient_details', form, formActions); 80287 } 80288 // If recipient details are valid, the payment handler already navigated correctly 80289 } 80290 else { 80291 // If gift mode is disabled, just run the standard payment flow 80292 await sectionFlow$9.eventHandlers[FormEvent.PART_PLAN_SELECT_COMPLETE](form, formState, formActions); 80293 } 80294 }; 80295 // Starting with the payment form handlers, override only what we need 80296 const eventHandlers$2 = { 80297 ...sectionFlow$9.eventHandlers, 80298 [FormEvent.FORM_START]: async (form, formState, formActions) => { 80299 // Execute the standard payment form start handler 80300 await sectionFlow$9.eventHandlers[FormEvent.FORM_START](form, formState, formActions); 80301 // Check if the form has any gift toggle elements 80302 const hasGiftToggleElements = form.parts 80303 .flatMap(part => part.sections) 80304 .flatMap(section => section.elements) 80305 .some(element => element.type === elementTypes.GIFT_TOGGLE); 80306 // Initialize the gift form state based on whether gift toggle elements are present 80307 // If no gift toggle elements are found, assume this is a dedicated gift form (isGiftForm = true) 80308 // If gift toggle elements are present, default to regular subscription mode (isGiftForm = false) 80309 formActions.updateFormState({ 80310 isGiftForm: !hasGiftToggleElements, // true if no toggles (dedicated gift form), false if toggles exist 80311 giftRecipient: { 80312 firstName: '', 80313 lastName: '', 80314 email: '', 80315 recipientAddress: { 80316 addressLine1: '', 80317 addressLine2: '', 80318 city: '', 80319 state: '', 80320 country: '', 80321 postalCode: '' 80322 }, 80323 customMessage: '', 80324 futureDeliveryEnabled: false, 80325 futureDeliveryDate: '' 80326 } 80327 }); 80328 }, 80329 // Override plan select to redirect to gift recipient conditionally 80330 [FormEvent.PART_PLAN_SELECT_COMPLETE]: onPlanSelectComplete, 80331 // Add gift recipient handler 80332 [FormEvent.PART_GIFT_RECIPIENT_COMPLETE]: onGiftRecipientComplete, 80333 // Override payment complete to include gift logic 80334 [FormEvent.PART_PAYMENT_COMPLETE]: payWithGiftInfo, 80335 }; 80336 // Add our new section visibility for recipient details 80337 const sectionVisibilities$2 = [ 80338 ...sectionFlow$9.sectionVisibilities, 80339 { 80340 type: sectionTypes.RECIPIENT_DETAILS.type, 80341 isDisplayedInProgressBar: true, 80342 isVisible: (form, formState) => { 80343 // Only show recipient details section if gift form mode is enabled 80344 return formState.isGiftForm === true; 80345 } 80346 } 80347 ]; 80348 const canAttemptSectionCompletion$2 = (form, formState) => { 80349 return !formState.elementValidity 80350 .filter((e) => e.partType === formState.currentPart.type && 80351 e.sectionType === formState.currentSection.type && 80352 e.sectionOrder === formState.currentSection.order) 80353 .some((e) => !e.isValid); 80354 }; 80355 // Inherit other properties from payment flow 80356 const sectionFlow$2 = { 80357 extraElements: sectionFlow$9.extraElements, 80358 sectionVisibilities: sectionVisibilities$2, 80359 eventHandlers: eventHandlers$2, 80360 canAttemptSectionCompletion: canAttemptSectionCompletion$2, 80361 canDismissFormManually: sectionFlow$9.canDismissFormManually, 80362 formRequiresPrerequisiteLoading: sectionFlow$9.formRequiresPrerequisiteLoading, 80363 canPartiallyRegister: true 80364 }; 80365 80366 const validateGiftCode = async (form, formState, formActions) => { 80367 const giftCode = formState.giftCode; 80368 try {
80369 // First check locally if gift code is valid length 80370 if (!giftCode || giftCode.length !== 16) { 80371 formActions.updateFormState({ 80372 giftCodeError: resolveLanguagePackKeyTyped(form, 'forms.errors.gift-code-invalid-length', 'Gift code must be 16 characters long') 80373 }); 80374 return false; 80375 } 80376 formActions.incrementRequestCount(); 80377 const response = await request('zephr/public/gifts/v1/redeem', { 80378 method: 'POST', 80379 bodyObject: { 80380 giftCode: giftCode, 80381 }, 80382 }, formActions); 80383 // Log event for gift redemption attempt 80384 logDataLayerEvent(form, 'zephr_form_gift_redeem', { 80385 success: response.ok, 80386 }); 80387 if (!response.ok) { 80388 formActions.updateFormState({ 80389 serverErrors: [ServerError.GIFT_CODE_INVALID], 80390 giftCodeError: resolveLanguagePackKeyTyped(form, 'forms.errors.gift-code-invalid', 'The gift code you entered is invalid'), 80391 }); 80392 formActions.decrementRequestCount(); 80393 return false; 80394 } 80395 formActions.decrementRequestCount(); 80396 await jumpToSection(sectionTypes.GIFT_REDEEMED.type, form, formActions); 80397 return true; 80398 } 80399 catch (error) { 80400 formActions.updateFormState({ 80401 serverErrors: [ServerError.GIFT_CODE_SERVER_ERROR], 80402 giftCodeError: resolveLanguagePackKeyTyped(form, 'forms.errors.gift-code-server-error', 'An error occurred processing your gift code'), 80403 }); 80404 formActions.decrementRequestCount(); 80405 return false; 80406 } 80407 }; 80408 80409 const GIFT_REDEMPTION_PART = "gift_redemption"; 80410 const onGiftRedemptionComplete = async (form, formState, formActions) => { 80411 await validateGiftCode(form, formState, formActions); 80412 }; 80413 const formStartAction$1 = async (form, formState, formActions) => { 80414 // If user session is already set, we don't need to check again 80415 if (formState.userSession) { 80416 // Skip registration and go straight to gift redemption if user is logged in 80417 const giftRedemptionPart = form.parts.find(part => part.type === "gift_redemption"); 80418 if (giftRedemptionPart) { 80419 formActions.updateFormState({ 80420 currentPart: giftRedemptionPart, 80421 currentSection: giftRedemptionPart.sections[0], 80422 userSession: true, 80423 loginRegistrationComplete: true 80424 }); 80425 } 80426 return; 80427 } 80428 // Otherwise check for user session 80429 const userSession = await checkForRegisteredUser(formActions); 80430 if (userSession) { 80431 // Skip registration and go straight to gift redemption if user is logged in 80432 const giftRedemptionPart = form.parts.find(part => part.type === "gift_redemption"); 80433 if (giftRedemptionPart) { 80434 formActions.updateFormState({ 80435 currentPart: giftRedemptionPart, 80436 currentSection: giftRedemptionPart.sections[0], 80437 userSession: true, 80438 loginRegistrationComplete: true 80439 }); 80440 } 80441 } 80442 }; 80443 const onLoginRegisterComplete = async (form, formState, formActions) => { 80444 // Instead of reloading page or showing success, go straight to gift redemption 80445 await jumpToPart(GIFT_REDEMPTION_PART, form, formActions); 80446 return Promise.resolve(); 80447 }; 80448 const canAttemptSectionCompletion$1 = (form, formState) => { 80449 // Check if we're in the gift redemption section and enforce validation 80450 if (formState.currentSection.type === sectionTypes.GIFT_REDEMPTION.type) { 80451 const giftCodeElement = formState.elementValidity.find(e => e.elementType === elementTypes.GIFT_CODE && 80452 e.sectionType === formState.currentSection.type); 80453 if (giftCodeElement && !giftCodeElement.isValid) { 80454 return false; 80455 } 80456 if (formState.giftCode?.length !== 16) { 80457 return false; 80458 } 80459 } 80460 // For other sections, use the default registration flow validation 80461 return sectionFlow$8.canAttemptSectionCompletion(form, formState); 80462 }; 80463 const eventHandlers$1 = { 80464 ...sectionFlow$8.eventHandlers,
80465 [FormEvent.FORM_START]: formStartAction$1, 80466 [FormEvent.GIFT_REDEMPTION_COMPLETE]: onGiftRedemptionComplete, 80467 [FormEvent.LOGIN_REGISTRATION_COMPLETE]: onLoginRegisterComplete, // Override the registration flow handler 80468 }; 80469 // Add gift redemption specific section visibilities while inheriting registration ones 80470 const sectionVisibilities$1 = [ 80471 { 80472 type: sectionTypes.EMAIL.type, 80473 isDisplayedInProgressBar: true, 80474 isVisible: (form, formState) => !formState.userSession 80475 }, 80476 { 80477 type: sectionTypes.LOGIN_PASSWORD.type, 80478 isDisplayedInProgressBar: true, 80479 isVisible: (form, formState) => !formState.userSession && 80480 formConfigAs(form).usePassword && 80481 formState.userExists && 80482 !formState.socialSignin 80483 }, 80484 { 80485 type: sectionTypes.PASSWORD_SETUP.type, 80486 isDisplayedInProgressBar: true, 80487 isVisible: (form, formState) => !formState.userSession && 80488 formConfigAs(form).usePassword && 80489 !formState.userExists && 80490 !formState.socialSignin 80491 }, 80492 { 80493 type: sectionTypes.PASSWORD_RESET.type, 80494 isDisplayedInProgressBar: false, 80495 isVisible: (form, formState) => !formState.userSession && 80496 formConfigAs(form).usePassword && 80497 formState.forgotPassword 80498 }, 80499 { 80500 type: sectionTypes.FORGOT_PASSWORD.type, 80501 isDisplayedInProgressBar: false, 80502 isVisible: (form, formState) => !formState.userSession && 80503 formConfigAs(form).usePassword && 80504 formState.forgotPassword 80505 }, 80506 { 80507 type: sectionTypes.GIFT_REDEMPTION.type, 80508 isDisplayedInProgressBar: true, 80509 isVisible: (form, formState) => { 80510 // Show after registration is complete or if user is logged in 80511 return formState.loginRegistrationComplete || formState.userSession; 80512 } 80513 }, 80514 { 80515 type: sectionTypes.GIFT_REDEEMED.type, 80516 isDisplayedInProgressBar: false, 80517 isVisible: () => true 80518 } 80519 ]; 80520 const sectionFlow$1 = { 80521 ...sectionFlow$8, 80522 eventHandlers: eventHandlers$1, 80523 sectionVisibilities: sectionVisibilities$1, 80524 canAttemptSectionCompletion: canAttemptSectionCompletion$1, 80525 canDismissFormManually: () => false, 80526 formRequiresPrerequisiteLoading: () => false, 80527 canPartiallyRegister: true 80528 }; 80529 80530 const formStartAction = async (form, formState, formActions) => { 80531 const existingSubscriptions = await loadExistingSubscriptions(form, formState, formActions, true); 80532 const subscriptionQueryParam = getSubscriptionParam(window.location.href); 80533 if (!subscriptionQueryParam) { 80534 return; 80535 } 80536 const queryParamSubscription = existingSubscriptions.find(subscription => subscription.externalId === subscriptionQueryParam); 80537 if (queryParamSubscription) { 80538 formActions.updateFormState({ 80539 selectedSubscription: queryParamSubscription, 80540 isExternalReferrer: true, 80541 }); 80542 formActions.completeSection(); 80543 } 80544 }; 80545 const onSubscriptionSelectComplete = (form, formState, formActions) => { 80546 formActions.jumpToPartStart(partTypes.BILL_TO_CONTACT.type); 80547 }; 80548 const onBillToContactComplete = async (form, formState, formActions) => { 80549 try { 80550 const response = await request(`zephr/accounts/${formState.selectedSubscription.accountId}/update`, { 80551 method: 'PATCH', 80552 bodyObject: { 80553 vendor_fields: { 80554 account: JSON.stringify({ 80555 billToContact: formState.billToContact 80556 }) 80557 } 80558 } 80559 }, formActions); 80560 if (response.ok) { 80561 logDataLayerEvent(form, 'zephr_form_bill_to_contact_change', { 80562 accountId: formState.selectedSubscription.accountId, 80563 billToContact: formState.billToContact 80564 }); 80565 formActions.jumpToPartStart(partTypes.SUCCESS.type); 80566 } 80567 else { 80568 formActions.updateFormState({ 80569 serverErrors: [ServerError.UNKNOWN], 80570 }); 80571 logDataLayerEvent(form, 'zephr_form_error', { 80572 error: ServerError[ServerError.UNKNOWN], 80573 }); 80574 } 80575 } 80576 catch (error) { 80577 console.error("Error occurred while updating bill to contact address.", error); 80578 formActions.updateFormState({ 80579 serverErrors: [ServerError.UNKNOWN], 80580 }); 80581 logDataLayerEvent(form, 'zephr_form_error', { 80582 error: ServerError[ServerError.UNKNOWN], 80583 }); 80584 } 80585 }; 80586 const eventHandlers = {
80587 [FormEvent.FORM_START]: formStartAction, 80588 [FormEvent.SELECT_SUBSCRIPTION_COMPLETE]: onSubscriptionSelectComplete, 80589 [FormEvent.BILL_TO_CONTACT_COMPLETE]: onBillToContactComplete, 80590 }; 80591 const sectionVisibilities = []; 80592 const canAttemptSectionCompletion = (_, formState) => { 80593 return !formState.elementValidity 80594 .filter((e) => e.partType === formState.currentPart.type && 80595 e.sectionType === formState.currentSection.type && 80596 e.sectionOrder === formState.currentSection.order) 80597 .some((e) => !e.isValid); 80598 }; 80599 const sectionFlow = { 80600 extraElements: [], 80601 eventHandlers, 80602 sectionVisibilities, 80603 canAttemptSectionCompletion, 80604 canDismissFormManually: () => false, 80605 formRequiresPrerequisiteLoading: () => false, 80606 }; 80607 80608 const sectionFlows = { 80609 [FormType.PAYMENT]: sectionFlow$9, 80610 [FormType.CHANGE_SUBSCRIPTION]: sectionFlow$9, 80611 [FormType.REGISTRATION]: sectionFlow$8, 80612 [FormType.CONTACT]: sectionFlow$7, 80613 [FormType.DATA_CAPTURE]: sectionFlow$6, 80614 [FormType.COMPLETE_REGISTRATION]: sectionFlow$6, 80615 [FormType.UPDATE_PROFILE]: sectionFlow$5, 80616 [FormType.CANCEL_SUBSCRIPTION]: cancelSubscriptionSectionFlow, 80617 [FormType.LIST_SUBSCRIPTIONS]: listSubscriptionsSectionFlow, 80618 [FormType.LIST_GIFT_SUBSCRIPTIONS_SENT]: listSubscriptionsSectionFlow, 80619 [FormType.DEVICES]: sectionFlow$3, 80620 [FormType.GIFT_SUBSCRIPTION]: sectionFlow$2, 80621 [FormType.GIFT_REDEMPTION]: sectionFlow$1, 80622 [FormType.SUSPEND_RESUME_SUBSCRIPTION]: sectionFlow$4, 80623 [FormType.BILL_TO_CONTACT]: sectionFlow, 80624 [FormType.EMPTY]: { 80625 extraElements: [], 80626 sectionVisibilities: [], 80627 eventHandlers: {}, 80628 canAttemptSectionCompletion: () => true, 80629 canDismissFormManually: () => false, 80630 formRequiresPrerequisiteLoading: () => false, 80631 } 80632 }; 80633 const sectionFlowFor = (formType) => { 80634 const flow = sectionFlows[formType]; 80635 if (!flow) { 80636 throw `No flow for form type ${formType}`; 80637 } 80638 return flow; 80639 }; 80640 80641 const baselineCssVariablesTimestamp = Date.parse("2024-04-19T00:00:00Z"); 80642 const baselineCssVariables = { 80643 "--zf-container-color": "unset", 80644 "--zf-container-bgColor": "#fff", 80645 "--zf-container-borderRadius": "0", 80646 "--zf-input-bgColor": "#fff", 80647 "--zf-payment-options-border": "1px solid #000", 80648 "--zf-payment-options-color": "#000", 80649 "--zf-payment-options-bgColor": "#fff", 80650 "--zf-payment-summary-border": "1px solid #000", 80651 "--zf-payment-summary-borderRadius": "0", 80652 "--zf-payment-summary-color": "unset", 80653 "--zf-payment-summary-bgColor": "transparent", 80654 }; 80655 const appendCssVariables = (cssVariablesStyle, additionalCssVariables) => { 80656 const additionalCssVariablesStyle = Object.entries(additionalCssVariables) 80657 .map(([key, value]) => `${key}: ${value}`) 80658 .join(';\n'); 80659 return `${cssVariablesStyle};\n${additionalCssVariablesStyle}`; 80660 }; 80661 const addBackwardsCompatibilityCssVariables = (cssVariablesStyle, formConfigTimestamp) => (formConfigTimestamp || 0) < baselineCssVariablesTimestamp 80662 ? appendCssVariables(cssVariablesStyle, baselineCssVariables) 80663 : cssVariablesStyle; 80664 80665 /* src/FormApp.svelte generated by Svelte v4.2.12 */ 80666 80667 function create_fragment(ctx) { 80668 let div; 80669 let formroot; 80670 let div_class_value; 80671 let current; 80672 80673 formroot = new FormRoot({ 80674 props: { 80675 formConfiguration: /*formConfiguration*/ ctx[2] 80676 } 80677 }); 80678 80679 return { 80680 c() { 80681 div = element("div"); 80682 create_component(formroot.$$.fragment); 80683 attr(div, "id", /*formConfiguration*/ ctx[2].formId); 80684 attr(div, "class", div_class_value = "" + (null_to_empty(`zephr-form ${formTypeClass(/
80684*formType*/ ctx[0])}`) + " svelte-789zog")); 80685 attr(div, "style", /*cssVariables*/ ctx[1]); 80686 }, 80687 m(target, anchor) { 80688 insert(target, div, anchor); 80689 mount_component(formroot, div, null); 80690 current = true; 80691 }, 80692 p(ctx, [dirty]) { 80693 if (!current || dirty & /*formType*/ 1 && div_class_value !== (div_class_value = "" + (null_to_empty(`zephr-form ${formTypeClass(/*formType*/ ctx[0])}`) + " svelte-789zog"))) { 80694 attr(div, "class", div_class_value); 80695 } 80696 }, 80697 i(local) { 80698 if (current) return; 80699 transition_in(formroot.$$.fragment, local); 80700 current = true; 80701 }, 80702 o(local) { 80703 transition_out(formroot.$$.fragment, local); 80704 current = false; 80705 }, 80706 d(detaching) { 80707 if (detaching) { 80708 detach(div); 80709 } 80710 80711 destroy_component(formroot); 80712 } 80713 }; 80714 } 80715 80716 function instance($$self, $$props, $$invalidate) { 80717 const defaultEnvironment = { 80718 apiUrlBase: "", 80719 onStateChanged: () => { 80720 80721 }, 80722 debugLogging: false, 80723 reduceDelays: false, 80724 previewMode: false 80725 }; 80726 80727 let { formType } = $$props; 80728 let { formConfig } = $$props; 80729 let { formTypeConfig } = $$props; 80730 let { organisationConfig } = $$props; 80731 let { environment = {} } = $$props; 80732 80733 const mergedEnvironment = { 80734 ...defaultEnvironment, 80735 ...environment, 80736 ...(formConfig?._spikeApiUrl) 80737 ? { apiUrlBase: formConfig._spikeApiUrl } 80738 : {} 80739 }; 80740 80741 // Styles 80742 const styleGuideObj = JSON.parse(organisationConfig.siteStyles ?? "{}"); 80743 80744 const cssVariables = addBackwardsCompatibilityCssVariables(convertSiteStylesToCssVariables(styleGuideObj), formConfig.timestamp); 80745 80746 // Section flow 80747 const sectionFlow = sectionFlowFor(formType); 80748 80749 // Language pack resolving 80750 const formConfigResolved = resolveLanguagePackKeys(formConfig.languagePack, formConfig); 80751 80752 const typeConfigResolved = resolveLanguagePackKeys(formConfig.languagePack, formTypeConfig); 80753 const orgConfigResolved = resolveLanguagePackKeys(formConfig.languagePack, organisationConfig); 80754 const uniqueKey = randomId(); 80755 const isPaymentForm = formType === FormType.PAYMENT; 80756 80757 const formConfiguration = { 80758 environment: mergedEnvironment, 80759 formType, 80760 ...formConfigResolved, 80761 organisationConfiguration: orgConfigResolved, 80762 typeConfiguration: typeConfigResolved, 80763 sectionFlow, 80764 uniqueKey, 80765 formId: isPaymentForm 80766 ? "zephr-payment-form-root" 80767 : `zephr-form-root-${uniqueKey}` 80768 }; 80769 80770 $$self.$$set = $$props => {
80771 if ('formType' in $$props) $$invalidate(0, formType = $$props.formType); 80772 if ('formConfig' in $$props) $$invalidate(3, formConfig = $$props.formConfig); 80773 if ('formTypeConfig' in $$props) $$invalidate(4, formTypeConfig = $$props.formTypeConfig); 80774 if ('organisationConfig' in $$props) $$invalidate(5, organisationConfig = $$props.organisationConfig); 80775 if ('environment' in $$props) $$invalidate(6, environment = $$props.environment); 80776 }; 80777 80778 return [ 80779 formType, 80780 cssVariables, 80781 formConfiguration, 80782 formConfig, 80783 formTypeConfig, 80784 organisationConfig, 80785 environment 80786 ]; 80787 } 80788 80789 class FormApp extends SvelteComponent { 80790 constructor(options) { 80791 super(); 80792 80793 init(this, options, instance, create_fragment, safe_not_equal, { 80794 formType: 0, 80795 formConfig: 3, 80796 formTypeConfig: 4, 80797 organisationConfig: 5, 80798 environment: 6 80799 }); 80800 } 80801 } 80802 80803 // TODO Parameter version translation 80804 // TODO remove circular deps 80805 const currentPropsVersion = "main:1"; 80806 const translateFormProps = (propsVersion, props) => { 80807 if (propsVersion === currentPropsVersion) { 80808 return props; 80809 } 80810 // Knowledge of other prop versions goes here once some backwards-incompatible changes 80811 // have been made to the props schema. 80812 throw `Unknown props version ${propsVersion}`; 80813 }; 80814 const renderForm = (container, props) => { 80815 const target = (typeof container === 'string' || container instanceof String) 80816 ? document.getElementById(container) 80817 : container; 80818 return new FormApp({ target, props }); 80819 }; 80820 // Public API entrypoint 80821 if (window.Zephr == null) { 80822 window.Zephr = {}; 80823 } 80824 window.Zephr.renderForm = renderForm; 80825 window.Zephr.translateFormProps = translateFormProps; 80826 80827})(); 80828//# sourceMappingURL=bundle.js.map 80829</script>
80829 80830 <style></style> 80831 <div id="zephr-form-19iuln" class="zephr-form-container"> 80832 </div> 80833
80833<script data-cmp-ab="2"> 80834 var element = document.currentScript; 80835 while(!(element.classList && element.classList.contains('zephr-form-container'))){ 80836 element = element.previousSibling; 80837 } 80838 window.Zephr.renderForm(element, window.Zephr.translateFormProps("main:1", {"formType":"REGISTRATION","formConfig":{"parts":[{"type":"account-verification","label":"<<<forms.registration.account-verification-section|Account Verification>>>","sections":[{"type":"email","order":0,"elements":[{"type":"text","order":0,"id":"28f060c1-625f-49b7-a7c4-9b5e3d4be04c","config":{"text":"<h2>Login or Register</h2>\n<h3>Enter your email to start</h3>\n<hr />","centerText":true},"hidden":false},{"type":"email_address","id":"23e4942d-9917-4173-a82e-8a6e9888a002","config":{"label":"<<<forms.common.email|Email>>>","placeholder":"[email protected]"},"order":1,"hidden":false},{"type":"account_code","id":"a392308a-cc18-4483-a5bf-eff8429e21ad","config":{"label":"<<<forms.common.account-code.label|Have an account registration code? Enter it here>>>","placeholder":"<<<forms.common.account-code.placeholder|e.g. ACCOUNT001>>>","enabled":false,"hidden":true},"order":2,"hidden":false},{"type":"divider","id":"0f41d61b-4521-4df5-b3b1-34454cbdc3f2","config":{"show":false,"text":"OR USE","showLine":true,"enabled":false,"hidden":true},"order":3,"hidden":false},{"type":"social_sign_in","id":"4680165a-8bf4-4de6-8fd8-5bce8ee4c854","config":{"labelText":"<<<forms.common.social-sign-in-label|Continue with>>>","enabled":false,"allowEmptyLabel":true,"hidden":true},"order":4,"hidden":false},{"type":"button","id":"26da6627-87c1-4219-bdfb-5d313a7c9cec","config":{"text":"<<<forms.common.continue|Continue>>>","isSubmit":false},"order":5,"hidden":false},{"type":"text","order":6,"id":"fb31a359-7ed1-457e-92e4-962c099f8cb4","config":{"text":"<p>You will receive a one time passcode to this email address.</p>","centerText":true}},{"type":"text","order":7,"id":"e0f3ecbb-4f2b-40aa-8d7c-a1063181185b","config":{"text":"<p style=\"font-size: 11px;\">By continuing you agree to our <a href=\"/terms-of-use\">terms and conditions</a> and acknowledge our <a href=\"/privacy-policy\">privacy policy</a>.</p>","centerText":true}}]},{"type":"verification_code_registration","order":1,"label":"OTP Verification","elements":[{"type":"progress_bar","id":"076d7bbb-3769-4f67-b40e-de62c7fa2b8f","config":{"enabled":false,"hidden":true},"order":0,"hidden":false},{"type":"text","order":1,"id":"66d72e1b-8194-43c1-bd50-ab2b3a67f438","config":{"text":"<h2>Register</h2>\n<h3>Enter code to register</h3>\n<hr />","centerText":true},"hidden":false},{"type":"email_address","id":"f982f2ea-31f0-4625-8a9f-fee3a990ba36","config":{"label":"<<<forms.common.email|Email>>>","editText":"<<<forms.common.email-edit|Edit>>>","disabled":true},"order":2,"hidden":false},{"type":"otp_code","id":"5c98f09e-cb7c-4449-b7a0-7e120878f743","config":{"label":"<<<forms.common.otp.label|Code>>>","placeholder":"<<<forms.common.otp.placeholder|e.g. 350271>>>","resendText":"<<<forms.common.otp.resend|Didn't get a code?>>>","message":"<<<forms.common.otp.resent|Resent!>>>"},"order":3,"hidden":false}]},{"type":"password_setup","order":2,"label":"<<<forms.registration.password-setup-section|Password Setup>>>","elements":[{"type":"progress_bar","id":"a73c1373-3496-4df1-a9b4-d59278688cc1","config":{"enabled":false,"hidden":true}},{"type":"text","id":"aed60673-d037-409a-90d1-9e8df17423b5","config":{"text":"<<<forms.registration.password-setup-text|Create an account>>>"}},{"type":"email_address","id":"51fe6911-ae51-48f7-a328-de1eb96c7d36","config":{"label":"<<<forms.common.email|Email>>>","editText":"<<<forms.common.email-edit|Edit>>>","disabled":true}},{"type":"password","id":"3593ba37-a0a3-4a25-ae73-69c0b3e9d9cf","config":{"password":"<<<forms.common.password|Password>>>","show":"<<<forms.common.password-show|Show>>>","hide":"<<<forms.common.password-hide|Hide>>>","passValidatorEnabled":true,"placeholder":"<<<forms.common.password-placeholder|password...>>>","confirm":"<<<forms.common.password-confirm|Confirm Password>>>","confirmPlaceholder":"<<<forms.common.password-confirm-placeholder|confirm password...>>>","passwordsMatchIndicatorEnabled":true,"minLengthValidation":"<<<forms.common.password-validator.length|Must include at least 8 characters>>>","uppercaseValidation":"<<<forms.common.password-validator.uppercase|Must include an uppercase letter>>>","numberValidation":"<<<forms.common.password-validator.number|Must include a number character>>>","symbolValidation":"<<<forms.common.password-validator.symbol|Must include a supported symbol>>>","passwordsMatchText":"<<<forms.common.password-validator.match|Passwords match>>>"}},{"type":"button","id":"f86e29f8-2717-4b64-9bc1-64a6003e99c7","config":{"text":"<<<forms.common.continue|Continue>>>","isSubmit":false}}]},{"type":"verification_code_login","order":3,"label":"Passwordless Login via Login Code","elements":[{"type":"progress_bar","id":"0da34152-a835-4c05-a009-f9510a221678","config":{"enabled":false,"hidden":true},"order":0,"hidden":false},{"type":"text","order":1,"id":"d435c818-a98f-42a2-b5a5-dfac166dafa3","config":{"text":"<h2>Welcome back</h2>\n<h3>Enter code to log in</h3>\n<hr />","centerText":true},"hidden":false},{"type":"email_address","id":"1a371d45-b6db-4b5c-b462-a6893c262451","config":{"label":"<<<forms.common.email|Email>>>","editText":"<<<forms.common.email-edit|Edit>>>","disabled":true},"order":2,"hidden":false},{"type":"otp_code","id":"4678ce12-dd4d-4340-a657-d34f9d38ff87","config":{"label":"<<<forms.common.otp.label|Code>>>","placeholder":"<<<forms.common.otp.placeholder|e.g. 350271>>>","resendText":"<<<forms.common.otp.resend|Didn't get a code?>>>","message":"<<<forms.common.otp.resent|Resent!>>>"},"order":3,"hidden":false}]},{"type":"login_password","order":4,"label":"Login with Password","elements":[{"id":"31ee5cfe-36ea-43fb-91cc-0225b03fcc1c","config":{"enabled":false,"hidden":true},"type":"progress_bar"},{"type":"password","id":"dc705dfc-2f9a-409d-877b-d06fc28f33f0","config":{"password":"<<<forms.common.password|Password>>>","placeholder":"<<<forms.common.password-placeholder|password...>>>","isLogin":true}},{"type":"link","id":"793325e9-fdfd-4b53-92ca-5748ed7ef911","config":{"text":"<<<forms.common.otp.forgot-password|Forgot Password?>>>","message":"<<<forms.common.otp.forgot-password-code-sent|Code sent!>>>"}},{"type":"button","id":"76f11c51-367e-483b-8152-fcc00dcbb333","config":{"isSubmit":false,"text":"<<<forms.common.continue|Continue>>>"}}]},{"type":"passwordless_login_via_link","order":5,"label":"Passwordless Login","elements":[{"type":"text","id":"a25adc84-1477-4f04-8637-16813c93781a","config":{"text":"<<<forms.registration.login-link-text|A login link has been sent to>>>"}},{"type":"email_address","id":"fe5345ad-51ac-4de8-a684-359214a04b74","config":{"label":"<<<forms.common.email|Email>>>","editText":"<<<forms.common.email-edit|Edit>>>","disabled":true}},{"type":"resend_login_link","id":"7233076d-df77-4481-8043-6f4e12cf9
808381a3","config":{"text":"<<<forms.registration.resend-login-link|Didn't get a link?>>>","message":"<<<forms.registration.resend-login-link-resent|Resent!>>>"}}]},{"type":"forgot_password","order":6,"label":"Password Reset Code","elements":[{"type":"text","id":"fae3aabd-64c1-4158-ab95-8405a38ae4d5","config":{"text":"<<<forms.registration.reset-password-text|Reset your password>>>"}},{"type":"text","id":"068950e7-a317-4779-ad95-d2135ff52683","config":{"text":"<<<forms.common.otp.code-sent-to|A message with a code has been sent to>>>"}},{"type":"email_address","id":"df8d043b-ebab-4a45-bea1-1f32ddf83813","config":{"label":"<<<forms.common.email|Email>>>","editText":"<<<forms.common.email-edit|Edit>>>","disabled":true}},{"type":"text","id":"88797ea0-e3fe-43e0-8128-bb108cef36d9","config":{"text":"<<<forms.common.otp.enter-code|Enter the code in the box below.>>>"}},{"type":"otp_code","id":"4d18e49a-d9fe-456b-8283-5cf0b405e0b0","config":{"label":"<<<forms.common.otp.label|Code>>>","placeholder":"<<<forms.common.otp.placeholder|e.g. 350271>>>","resendText":"<<<forms.common.otp.resend|Didn't get a code?>>>","message":"<<<forms.common.otp.resent|Resent!>>>"}},{"type":"divider","id":"5d1cd9a2-502c-47e9-9f16-8695f2dad00a","config":{"text":"<<<forms.common.divider-text|or use>>>","showLine":true,"show":true}},{"type":"button","id":"f1235a31-cbf2-462b-a5f0-cea89f0ca005","config":{"isSubmit":false,"isLogin":true,"text":"<<<forms.registration.login|Login>>>"}}]},{"type":"reset_password","order":7,"label":"Reset Password","elements":[{"type":"email_address","id":"40fdea0a-4115-4eb7-9c71-5038cf82cf1d","config":{"label":"<<<forms.common.email|Email>>>","editText":"<<<forms.common.email-edit|Edit>>>","disabled":true}},{"type":"password","id":"b144c9f4-a085-4ca6-a597-1fddca446f36","config":{"password":"<<<forms.common.password|Password>>>","show":"<<<forms.common.password-show|Show>>>","hide":"<<<forms.common.password-hide|Hide>>>","passValidatorEnabled":true,"placeholder":"<<<forms.common.password-placeholder|password...>>>","confirm":"<<<forms.common.password-confirm|Confirm Password>>>","confirmPlaceholder":"<<<forms.common.password-confirm-placeholder|confirm password...>>>","passwordsMatchIndicatorEnabled":true,"minLengthValidation":"<<<forms.common.password-validator.length|Must include at least 8 characters>>>","uppercaseValidation":"<<<forms.common.password-validator.uppercase|Must include an uppercase letter>>>","numberValidation":"<<<forms.common.password-validator.number|Must include a number character>>>","symbolValidation":"<<<forms.common.password-validator.symbol|Must include a supported symbol>>>","passwordsMatchText":"<<<forms.common.password-validator.match|Passwords match>>>"}},{"type":"button","id":"555843e1-6b8f-4153-b1c3-ad6570c55cf8","config":{"text":"<<<forms.registration.reset|Reset!>>>","isSubmit":false}}]},{"type":"custom_69d7686c-deb1-4d0f-ad81-16f66e1bd423","label":"Create your account","order":8,"elements":[{"type":"progress_bar","order":0,"id":"4b9c4219-9766-413e-a7c9-bc0709f940ff","config":{"enabled":false,"hidden":true},"hidden":false},{"type":"text","order":1,"id":"48502c22-359c-43c5-af19-644b135923bf","config":{"text":"<h2>Create your account</h2>\n<h3>Join over 150K members who use Sifted to stay up to speed on latest developments across Startup Europe</h3>\n<hr />","centerText":true},"hidden":false},{"type":"user_attribute","order":2,"id":"aa413ab8-0c27-4f08-bbb4-2129b4dda733","config":{"slug":"first_name","label":"First name","hasCondition":false,"required":true},"hidden":false},{"type":"user_attribute","order":3,"id":"a103adde-5608-49e8-9afd-bd2c43968d85","config":{"slug":"last_name","label":"Last name","hasCondition":false,"required":true},"hidden":false}
80838,{"type":"user_attribute","order":4,"id":"f8a22532-e393-4025-b15c-377d4d1a5f47","config":{"slug":"form_role_at_business","label":"Job role","hasCondition":false,"required":true,"placeholder":"Select..."},"hidden":false},{"type":"user_attribute","order":5,"id":"f05e5418-207e-47e1-a5ad-e66e58354190","config":{"slug":"form_company_name","label":"Company name","hasCondition":false,"required":true},"hidden":false},{"type":"user_attribute","order":6,"id":"e500fd49-f6e3-4fd5-9f00-5786e98881aa","config":{"slug":"agree_to_have_data_stored","label":"I agree to have my data stored and processed by Sifted.","hasCondition":false,"required":true},"hidden":false},{"type":"button","order":7,"id":"9c5dac75-8bf4-49ea-83ea-45d3caeccf56","config":{"isSubmit":true,"text":"Create account"},"hidden":false},{"type":"text","order":8,"id":"f35e521e-6366-4175-9a50-e098e262d2c8","config":{"text":"<p style=\"font-size: 12px;\">Your account registration includes access to a limited number of articles each month and the Sifted Daily newsletter. By signing up you agree to our <a href=\"/privacy-policy\" target=\"_blank\" rel=\"noopener noreferrer\">privacy policy</a> and <a href=\"/cookie-policy\" target=\"_blank\" rel=\"noopener noreferrer\">cookie policy</a> and to receive marketing and account-related emails from Sifted, as well as the Sifted Daily newsletter. You can unsubscribe at any time. This site is protected by reCAPTCHA and the Google <a href=\"https://policies.google.com/privacy\" target=\"_blank\" rel=\"noopener noreferrer\">Privacy Policy</a> and <a href=\"https://policies.google.com/terms\" target=\"_blank\" rel=\"noopener noreferrer\">Terms of Service</a> apply.</p>","centerText":true},"hidden":false}]}]},{"type":"success","sections":[{"type":"success","order":1,"label":"Successful Registration","elements":[{"type":"text","id":"7ac39017-c217-4a87-9e05-3c9677563be3","config":{"text":"<<<forms.registration.success-message|You have signed up successfully!>>>"}},{"type":"button","id":"cb503d01-3609-4664-bb91-949a0ddc2981","config":{"text":"Continue"}}]},{"type":"email_verified","order":2,"label":"Email Verification","elements":[{"type":"text","id":"f20f8e40-fecd-412e-8c91-3a613235107d","config":{"text":"<p>A link has been sent to you. Please check your Email. (Registration)</p>"},"order":0}]}]}],"timestamp":1789634112517,"id":"U-ReMprg","outcomeId":"graph/1#2,graph/1#4,graph/2#1,graph/2#2,transformation/1","ruleId":"H-checkout-registration-form-1","resolvedComponentTemplates":[],"languagePack":{"entries":{"forms.billing.history.date":"Date","forms.billing.history.every":"every","forms.billing.history.period":"Period","forms.billing.history.subtotal":"Subtotal","forms.billing.history.total":"Total","forms.buttons.back-button":"Back","forms.common.account-code.label":"Have an account registration code? Enter it here","forms.common.account-code.placeholder":"e.g. ACCOUNT001","forms.common.additional-section":"Additional Section","forms.common.continue":"Continue","forms.common.current-password":"Current Password","forms.common.divider-text":"or use","forms.common.email":"Email","forms.common.email-edit":"Edit","forms.common.email-placeholder":"Your email address","forms.common.otp.code-sent-to":"A message with a code has been sent to","forms.common.otp.enter-code":"Enter the code in the box below.","forms.common.otp.forgot-password":"Forgot Password?","forms.common.otp.forgot-password-code-sent":"Code sent!","forms.common.otp.label":"Code","forms.common.otp.placeholder":"e.g. 350271","forms.common.otp.resend":"Didn't get a code?","forms.common.otp.resent":"Resent!","forms.common.password":"Password","forms.common.password-confirm":"Confirm Password","forms.common.password-confirm-placeholder":"confirm password...","forms.common.password-hide":"Hide","forms.common.password-placeholder":"password...","forms.common.password-show":"Show","forms.common.password-validator.length":"Must include at least 8 characters","forms.common.password-validator.match":"Passwords match","forms.common.password-validator.number":"Mu
80838st include a number character","forms.common.password-validator.symbol":"Must include a supported symbol","forms.common.password-validator.uppercase":"Must include an uppercase letter","forms.common.social-sign-in-label":"Continue with","forms.common.submit":"Submit","forms.common.update":"Update","forms.complete-registration-form.default-intro-text":"Set up your password","forms.complete-registration-form.default-success-message":"Thank you for updating your profile.","forms.contact-form.default-intro-text-1":"Stay in touch","forms.contact-form.default-intro-text-2":"Subscribe to our newsletter today","forms.contact-form.default-success-message":"Thank you for submitting your contact information.","forms.data-capture-form.default-intro-text":"Tell us more about you!","forms.data-capture-form.default-success-message":"Thank you for updating your profile.","forms.devices.current-device-label":"Current Device","forms.devices.login-time-label":"Login Time","forms.devices.no-session-message":"No Device sessions recorded","forms.devices.sign-out-button":"Sign Out","forms.devices.sign-out-of-other-devices-button":"Sign Out of Other Devices","forms.devices.your-devices-label":"Your Devices","forms.errors.company-account-not-found":"Account not found","forms.errors.contact-creation-disabled":"This operation is not possible at the moment, please try again later","forms.errors.email-domain-blocked":"Please use a different email address, this domain is not supported","forms.errors.email-taken":"This email address is already registered. Please log in to continue","forms.errors.email-verification-required":"Email verification is required","forms.errors.future-delivery-date-invalid":"Please select a valid future date","forms.errors.future-delivery-date-required":"Please select a future delivery date","forms.errors.future-delivery-date-too-early":"Delivery date must be at least 24 hours in the future","forms.errors.invitation-failed-duplicate-email":"An invite has already been created for this email","forms.errors.invitation-failed-invalid-email":"Invalid email address","forms.errors.invitation-failed-limit-reached":"You have reached the sharing limit for this product","forms.errors.invitation-failed-no-product-access":"You do not currently have access to this product","forms.errors.login-failed":"The email address or password you entered is incorrect","forms.errors.no-authenticated-session":"Please login to update your profile","forms.errors.otp-incorrect":"The code you entered is incorrect","forms.errors.otp-or-password-incorrect":"The password or code you entered is incorrect","forms.errors.otp-send-failed":"Unable to send a verification code. Please try again later","forms.errors.password-reset-failed":"Unable to reset your password. Please try again later","forms.errors.password-reset-link-send-failed":"Unable to send a password reset link. Please try again later","forms.errors.promo-code-expired":"Promo code expired","forms.errors.promo-code-invalid":"Invalid promo code","forms.errors.promo-code-invalid-for-payment-option":"Promo code cannot be applied to selected option","forms.errors.session-limit-reached":"You have reached the session limit. Please log out from another device to access this content","forms.errors.too-many-requests":"To gain login access, please contact your administrator","forms.errors.unknown-error":"Something went wrong. Please try again later","forms.errors.unknown-payment-error":"Something went wrong when processing your payment. Please try again later","forms.errors.user-attribute-invalid":"Invalid user attribute","forms.errors.user-not-found":"User not found","forms.gift-subscription.enable-future-delivery-toggle-description":"Schedule this gift subscription to start on a specific date","forms.gift-subscription.enable-future-delivery-toggle-label":"Schedule for future date","forms.gift-subscription.future-delivery-date-description":"Choose when the gift subscription should start","forms.gift-subscription.future-delivery-date-label":"Start date","forms.gift-subscription.future-delivery-date-placeholder":"Select start date","forms.list-subscriptions.billing-history-link":"Billing history","forms.list-subscriptions.billing-history-text":"To see previous invoices visit","forms.list-subscriptions.cancel-subscription-text":"Cancel subscription","forms.list-subscriptions.change-default-payment-method-button":"Change Default Payment Method","forms.list-subscriptions.change-payment-method-button":"Change Payment Method","forms.list-subscriptions.change-payment-success-text":"Payment successfully changed","forms.list-subscriptions.change-subscription-text":"Change subscription","forms.list-subscriptions.custom-fields-section-description":"Update your subscription information below","forms.list-subscriptions.custom-fields-section-title":"Update Subscription Details","forms.list-subscriptions.custom-fields-submit-button-text":"Update Details","forms.list-subscriptions.delivery-address-line-1-label":"Delivery Address Line 1","forms.list-subscriptions.delivery-address-line-1-placeholder":"Enter delivery address line 1","forms.list-subscriptions.delivery-address-line-2-label":"Delivery Address Line 2","forms.list-subscriptions.delivery-address-line-2-placeholder":"Enter delivery address line 2","forms.list-subscriptions.delivery-city-label":"Delivery City","forms.list-subscriptions.delivery-city-placeholder":"Enter delivery city","forms.list-subscriptions.delivery-country-label":"Delivery Country","forms.list-subscriptions.delivery-country-placeholder":"Enter delivery country","forms.list-subscriptions.delivery-information-description":"Manage your delivery address and preferences","forms.list-subscriptions.delivery-information-title":"Delivery Information","forms.list-subscriptions.delivery-postcode-label":"Delivery Postc
80838ode","forms.list-subscriptions.delivery-postcode-placeholder":"Enter delivery postcode","forms.list-subscriptions.next-payment-date":"Next payment date","forms.list-subscriptions.no-subscriptions-message":"You don't have any subscriptions","forms.list-subscriptions.subscription-rate-label":"Subscription rate","forms.list-subscriptions.suspend-resume-subscription-text":"Suspend/Resume subscription","forms.list-subscriptions.view-past-subscriptions-link":"View past subscriptions","forms.payment.account-verification-section":"Account Verification","forms.payment.invitation-button":"Send Invite","forms.payment.invitation-description":"You can invite people by entering their email","forms.payment.invitation-label":"Email Address","forms.payment.invitation-link-sent":"Invite sent!","forms.payment.invitation-title":"Invite people to your sharable plan","forms.payment.login":"Login","forms.payment.login-link":"Login","forms.payment.login-link-message":"Already a registered user?","forms.payment.password-setup-text":"Create an account","forms.payment.payment-button":"Confirm and process payment","forms.payment.payment-option-select-button":"Select Plan","forms.payment.payment-section":"Payment Details","forms.payment.payment-summary-disclaimer":"Today's payment may vary","forms.payment.payment-summary-prorate":"DUE TODAY","forms.payment.payment-summary-tax":"Tax","forms.payment.payment-summary-title":"Subscription","forms.payment.payment-summary-total":"TOTAL","forms.payment.plan-select-section":"Plan Select","forms.payment.promo-code-button":"Verify","forms.payment.promo-code-placeholder":"Promo code","forms.payment.promo-code-text":"Have a promo code?","forms.payment.reset-password-text":"Reset your password","forms.payment.success-button":"Continue Reading","forms.payment.success-message":"Payment processed successfully","forms.registration.account-verification-section":"Account Verification","forms.registration.default-intro-text":"You've reached the limit of free articles","forms.registration.email-verification-required-message":"A link has been sent to you. Please check your Email.","forms.registration.login":"Login","forms.registration.login-link-text":"A login link has been sent to","forms.registration.password-setup-section":"Password Setup","forms.registration.password-setup-text":"Create an account","forms.registration.resend-login-link":"Didn't get a link?","forms.registration.resend-login-link-resent":"Resent!","forms.registration.reset":"Reset!","forms.registration.reset-password-text":"Reset your password","forms.registration.success-button":"Continue Reading","forms.registration.success-message":"You have signed up successfully!","forms.subscription-cancel.back-button":"Back","forms.subscription-cancel.back-cancellation-button":"Back","forms.subscription-cancel.cancel-button":"Cancel Subscription","forms.subscription-cancel.confirm-text":"Are you sure you want to cancel?","forms.subscription-cancel.continue-cancel-button":"Continue Cancellation","forms.subscription-cancel.intro-text":"Select a subscription to cancel","forms.subscription-cancel.offer-text":"<h2>We are sorry to see you go</h2>Here is a special offer just for you.","forms.subscription-cancel.payment-option-select-button":"Accept Offer","forms.subscription-cancel.reason-text":"<h2>We would like to hear your feedback</h2>We'd appreciate it if you could to take a moment to let us know why you are cancelling.","forms.subscription-cancel.success-text":"Your subscription has been cancelled","forms.subscription-select.amount-label":"Amount:","forms.subscription-select.intro-text":"Select a subscription to upgrade","forms.subscription-select.next-billing-date-label":"Next billing date:","forms.subscription-select.no-change-plan-mapping-message":"No upgrade options are available for this subscription","forms.subscription-select.no-subscriptions-message":"No subscriptions available","forms.subscription-select.select-button":"Select","forms.suspend-resume-subscription.back-button":"Back to Home","forms.suspend-resume-subscription.intro-text":"Select a subscription to suspend or resume","forms.suspend-resume-subscription.resume-d
80838ate-label":"Resume date:","forms.suspend-resume-subscription.success-text":"Your subscription has been suspended","forms.suspend-resume-subscription.suspension-date-label":"Suspension date:","forms.update-profile.update-email-title":"<h2>Update Email Address</h2>","forms.update-profile.update-password-title":"<h2>Update Password</h2>","forms.update-profile.your-profile":"Your Profile","forms.update-profile.your-profile-title":"<h2>Your Profile</h2>","hidden.example-key":"Hello world","hidden.form-preview.locale":"en-US","hidden.forms-preview.example-payment-option-description":"Example Payment Option","hidden.forms-preview.example-payment-option-label":"Example Offer","interstitial-page.password-reset.new-password":"New password:","interstitial-page.password-reset.password-mismatch-error":"You did not enter the same password twice","interstitial-page.password-reset.repeat-password":"Repeat password:","interstitial-page.password-reset.reset-button":"Reset","interstitial-page.password-reset.return-home-link":"Go back to the site","interstitial-page.password-reset.success-message":"Your password has been reset successfully!","interstitial-page.password-reset.title":"Change your password","interstitial-page.password-reset.unknown-error":"Something went wrong! Please try again later.","interstitial-page.passwordless-login.title":"Welcome","interstitial-page.update-email.enter-password":"Please enter your current password to complete the email update request.","interstitial-page.update-email.incorrect-password-error":"Incorrect password.","interstitial-page.update-email.password":"Password:","interstitial-page.update-email.return-home-link":"Go back to the site","interstitial-page.update-email.submit-button":"Update","interstitial-page.update-email.title":"Changing your email","interstitial-page.update-email.unknown-error":"Something went wrong! Please try again later.","interstitial-page.update-email-passwordless.message":"Please check the inbox of your new email for further instructions.","interstitial-page.update-email-passwordless.title":"Changing your email","interstitial-page.update-email-passwordless-success.message":"You have successfully changed your email address.","interstitial-page.update-email-passwordless-success.title":"Changing your email","interstitial-page.update-email-success.message":"Your email has been updated successfully!","pages.account-management.account-select-dropdown":"Select account","pages.account-management.delete-link":"Delete","pages.account-management.delete-modal-body":"Are you sure you want to delete this user?","pages.account-management.delete-modal-button":"Yes Delete","pages.account-management.delete-modal-title":"You are about to delete user","pages.account-management.delete-success-modal-body":"has been successfully deleted.","pages.account-management.delete-success-modal-title":"User Deleted","pages.account-management.errors.already-exists":"already exists","pages.account-management.errors.delete-fail":"Failed to delete","pages.account-management.errors.invite-fail":"Could not invite user","pages.account-management.invite-button-text":"Invite a User","pages.account-management.invite-modal-cancel-button":"Cancel","pages.account-management.invite-modal-confirm-button":"Invite User","pages.account-management.invite-modal-email-label":"Email Address","pages.account-management.invite-modal-email-placeholder":"Enter Email Address","pages.account-management.invite-modal-title":"Invite User","pages.account-management.invite-success-modal-body":"An invite has been sent to","pages.account-management.no-users":"No users found","pages.account-management.owner":"Owner","pages.account-management.search-button-text":"Search","pages.account-management.search-placeholder-text":"Search for a user","pages.account-management.success-modal-button":"Close","pages.account-management.title":"Manage Your Users","pages.cancel.back-to-subscriptions":"Back to Subscriptions","pages.cancel.cancel-subscription":"Cancel Subscription","pages.cancel.cancelled":"Cancelled","pages.cancel.continue-subscription":"Continue Subscription","pages.cancel.days-left":"DAYS LEFT:","pages.cancel.plan-frequency":"Frequency","pages.cancel.plan-name":"Name","pages.cancel.plan-next-billing":"Next Billing","pages.cancel.plan-period":"Period","pages.cancel.plan-price":"Price","pages.cancel.plan-type":"Type","pages.cancel.select-plans":"Select the plans you wish to cancel","pages.cancel.status-active":"Active","pages.cancel.status-cancelled":"Cancelled","pages.cancel.status-draft":"Draft","pages.cancel.status-expired":"Expired","pages.cancel.status-pending-acceptance":"Pending Acceptance","pages.cancel.status-pending-activation":"Pending Activation","pages.cancel.status-suspended":"Suspended","pages.cancel.status-unknown":"Unknown","pages.cancel.subscription-ends-on":"Subscription ends on","pages.cancel.subscription-will-end-on":"Your subscription will end on","pages.cancel.success":"You've cancelled your subscription","pages.cancel.until-cancelled":"Until Cancelled","pages.common.collapsible-content-text":"See details","pages.common.confirmation-modal-cancel-button":"Cancel","pages.common.confirmation-modal-confirm-button":"Confirm","pages.common.confirmation-primary-error-message":"Something went wrong!","pages.common.confirmation-secondary-error-message":"Try again later.","pages.common.date-time-format-locale":"en-US","pages.common.input-errors-invalid-email":"Please enter a valid email","pages.common.input-errors-invalid-url":"Please enter a valid URL","pages.common.input-errors-missing-value":"Please enter a value","pages.common.loading":"Loading...","pages.common.no-access-back-link":"Go Back","pages.common.no-access-body":"Sorry, you are not allowed to access this page. Click the button to go back.","pages.common.no-access-title":"No access.","pages.common.password-hide":"Hide","pages.common.password-show":"Show","pages.login-reg.already-registered-sign-in":"Already registered? Sign in","pages.login-reg.cancel":"Cancel","pages.login-reg.complete-registration-button":"Complete Registration","pages.login-reg.continue-with-apple":"Continue with Apple","pages.login-reg.continue-with-facebook":"Continue with Facebook","pages.login-reg.continue-with-google":"Continue with Google","pages.login-reg.continue-with-linkedin":"Continue with Linkedin","pages.login-reg.continue-with-microsoft":"Continue with Microsoft","pages.login-reg.continue-with-open-id-connect":"Continue with Open ID Connect","pages.login-reg.continue-with-twitter":"Continue with X","pages.login-reg.create-account":"Create an account","pages.login-reg.email-me-login-link":"Email me login link","pages.login-reg.email-me-reset-code":"Email me reset code","pages.login-reg.email-placeholder":"Email Address","pages.login-reg.enter-account-reg-code-here":"Enter an account registration code here","pages.login-reg.errors.contact-admin":"Please contact the administrator","pages.login-reg.errors.email-already-taken":"Email already taken","pages.login-reg.errors.email-verification-required":"Email verification is required","pages.login-reg.errors.password-incorrect":"The password you entered is incorrect","pages.login-reg.errors.password-not-strong-enough":"Password is not strong enough","pages.login-reg.errors.seat-capacity":"Your registration request couldn't be completed due to account seat capacity issue.","pages.login-reg.errors.something-went-wrong":"Something went wrong!","pages.login-reg.errors.to-gain-access-contact-admin":"To gain login access, please contact your administrator","pages.login-reg.errors.try-again-later":"Please try again later.","pages.login-reg.errors.user-not-found":"User not found","pages.login-reg.errors.username-already-taken":"Username already taken","pages.login-reg.forgotten-password":"Forgotten Password?","pages.login-reg.logging-in":"Logging in...","pages.login-reg.login-button":"Login","pages.login-reg.login-to-account":"Login to your account","pages.login-reg.or":"Or","pages.login-reg.password-placeholder":"Password","pages.login-reg.password-requirement":"Password must be a minimum of 8 characters and contain uppercase and lowercase, numbers and at least 1 special character.","pages.login-reg.register-button":"Register","pages.login-reg.register-for-account":"Register for an account","pages.login-reg.reset-your-password":"Reset your password","pages.login-reg.wait":"Please wait...","pages.pref-center.devices.current-device":"Current Device","pages.pref-center.devices.error-loading":"There was an error getting the device list","pages.pref-center.devices.sign-in-time":"Login date and time:","pages.pref-center.devices.sign-out":"Sign out","pages.pref-center.devices.sign-out-all":"Sign out of all other devices","pages.pref-center.devices.sign-out-all-success":"All other devices are now signed out","pages.pref-center.devices.sign-out-fail":"Signing out failed","pages.pref-center.devices.sign-out-success":"is now signed out.","pages.pref-center.devices.title":"Your Devices","pages.pref-center.devices.unknown-device":"Unknown","pages.pref-center.email-update-passwordless-message":"A link has been sent to your current email. Please check your inbox.","pages.pref-center.email-update-passwordless-title":"Check Your Inbox","pages.pref-center.general-error":"Something went wrong - please try again later","pages.pref-center.profile.attributes-select-list-placeholder":"Select One","pages.pref-center.profile.attributes-update-save":"Save","pages.pref-center.profile.attributes-update-title":"Your profile","pages.pref-center.profile.email":"Email Address","pages.pref-center.profile.email-update-email-label":"New Email","pages.pref-center.profile.email-update-email-placeholder":"Enter Email","pages.pref-center.profile.email-update-password-label":"Your Password","pages.pref-center.profile.email-update-password-placeholder":"Enter password","pages.pref-center.profile.email-update-save":"Save","pages.pref-center.profile.email-update-step-2-title":"Update Email Address","pages.pref-center.profile.email-update-title":"Update Email Address","pages.pref-center.profile.errors.change-email-error":"Sorry but your email address has not been changed. Please try again.","pages.pref-center.profile.errors.change-password-error":"Sorry but we were unable to reset your password. Please try again.","pages.pref-center.profile.errors.email-already-taken-error":"This email address is already taken.","pages.pref-center.profile.errors.incorrect-code":"Entered code is incorrect","pages.pref-center.profile.errors.incorrect-password":"The password you entered is incorrect","pages.pref-center.profile.errors.password-validation-error":"Password is not strong enough","pages.pref-center.profile.errors.unsuccessful":"Unsuccessful","pages.pref-center.profile.errors.update-profile-error":"Sorry but we were unable to update your profile. Please try again.","pages.pref-center.profile.password":"Password","pages.pref-center.profile.password-update-current-password-label":"Current Password","pages.pref-center.profile.password-update-current-password-placeholder":"Enter your password","pages.pref-center.profile.password-update-new-password-label":"New Password","pages.pref-center.profile.password-update-new-password-placeholder":"Enter a password","pages.pref-center.profile.password-update-save":"Continue","pages.pref-center.profile.password-update-step-2-title":"Reset your password","pages.pref-center.profile.password-update-title":"Update Password","pages.pref-center.profile.title":"Your Profile","pages.pref-center.profile.update":"Update","pages.pref-center.profile.update-email-successful":"Your email address has been changed.","pages.pref-center.profile.update-password-successful":"Your password has been reset.","pages.pref-center.profile.update-profile-successful":"Your profile has been updated.","pages.pref-center.profile.update-return-text":"Return to Personal Information","pages.pref-center.profile.update-step-2-code-label":"Code","pages.pref-center.profile.update-step-2-code-placeholder":"e.g. 350271","pages.pref-center.profile.update-step-2-enter-code":"Enter the code in the box below.","pages.pref-center.profile.update-step-2-message-sent":"A message with a code has been sent to email address:","pages.pref-center.profile.update-step-2-ne
80838w-code-modal-body":"Would you like to send a new verification code to","pages.pref-center.profile.update-step-2-new-code-modal-button":"Resend Code","pages.pref-center.profile.update-step-2-new-code-modal-title":"Get a new verification code","pages.pref-center.profile.update-step-2-resend-code-link-text":"Didn't get a code?","pages.pref-center.profile.update-step-2-save":"Submit","pages.pref-center.profile.update-successful":"Success","pages.pref-center.share-product.modal-body":"You can invite people by entering their email. Available seats:","pages.pref-center.share-product.modal-email-label":"Email Address","pages.pref-center.share-product.modal-email-placeholder":"Enter Email Address","pages.pref-center.share-product.modal-send-button-text":"Send Invite","pages.pref-center.share-product.modal-title":"Invite people to your sharable subscription","pages.pref-center.shared-members.done-button":"Done","pages.pref-center.shared-members.invite-button-text":"Invite new members","pages.pref-center.shared-members.manage-shared-members-title":"Manage shared members","pages.pref-center.shared-members.no-members":"This product is not currently shared with anyone.","pages.pref-center.shared-members.seats-used":"seats used","pages.pref-center.shared-members.status-active":"Active","pages.pref-center.shared-members.status-inactive":"Inactive","pages.pref-center.shared-members.status-pending":"Pending","pages.pref-center.shared-members.table-header-date":"Date Shared","pages.pref-center.shared-members.table-header-email":"Email Address","pages.pref-center.shared-members.table-header-status":"Status","pages.pref-center.shared-members.table-remove-member":"Remove member","pages.pref-center.shared-members.title":"Shared Members","pages.pref-center.shared-products.errors.existing-invite-error":"An invite has already been created for this email","pages.pref-center.shared-products.errors.invalid-email-error":"Invalid email address","pages.pref-center.shared-products.errors.limit-reached-error":"You have reached the sharing limit for this product","pages.pref-center.shared-products.errors.no-access-error":"You do not currently have access to this product","pages.pref-center.shared-products.leave-product-body":"Are you sure you want to leave this shared product?","pages.pref-center.shared-products.leave-product-title":"Leave Product","pages.pref-center.shared-products.no-subscriptions":"You do not currently have any products shared with you.","pages.pref-center.shared-products.remove-invite-body":"Are you sure you want to remove this pending invite from your subscription?","pages.pref-center.shared-products.remove-invite-title":"Remove Invite","pages.pref-center.shared-products.remove-member-body":"Are you sure you want to remove this user from your subscription?","pages.pref-center.shared-products.remove-member-title":"Remove Member","pages.pref-center.shared-products.remove-subscription":"Leave shared subscription","pages.pref-center.shared-products.shared-by":"Shared by","pages.pref-center.subscriptions.billing-history-link":"Billing History.","pages.pref-center.subscriptions.billing-history-table-canceled":"Subscription canceled","pages.pref-center.subscriptions.billing-history-table-header-date":"Date","pages.pref-center.subscriptions.billing-history-table-header-period":"Subscription Period","pages.pref-center.subscriptions.billing-history-table-header-subtotal":"Subtotal","pages.pref-center.subscriptions.billing-history-table-header-total":"Total","pages.pref-center.subscriptions.billing-history-title":"Billing History","pages.pref-center.subscriptions.cancel-subscription-confirm-modal-body":"Your subscription has been canceled.","pages.pref-center.subscriptions.cancel-subscription-confirm-modal-button":"Close","pages.pref-center.subscriptions.cancel-subscription-confirm-modal-title":"Subscription canceled","pages.pref-center.subscriptions.cancel-subscription-modal-body":"Are you sure you want to cancel the subscription","pages.pref-center.subscriptions.cancel-subscription-modal-button":"Cancel Subscription","pages.pref-center.subscriptions.cancel-subscription-modal-title":"Cancel your subscription","pages.pref-center.subscriptions.cancel-subscription-title":"Cancel your subscription","pages.pref-center.subscriptions.canceled-date":"Canceled on","pages.pref-center.subscriptions.change-multi-subscription-screen-active-subscription":"active","pages.pref-center.subscriptions.change-multi-subscription-screen-best-value":"best value","pages.pref-center.subscriptions.change-multi-subscription-screen-cancel-subscriptions-confirm-modal-body":"Your subscriptions have been canceled.","pages.pref-center.subscriptions.change-multi-subscription-screen-cancel-subscriptions-confirm-modal-title":"Subscriptions canceled","pages.pref-center.subscriptions.change-multi-subscription-screen-cancel-subscriptions-modal-title":"Cancel your subscriptions","pages.pref-center.subscriptions.change-multi-subscription-screen-cancel-subscriptions-text":"Cancel Subscriptions","pages.pref-center.subscriptions.change-multi-subscription-screen-current-subscription":"current subscription","pages.pref-center.subscriptions.change-multi-subscription-screen-current-subscriptions-title":"Current Subscriptions","pages.pref-center.subscriptions.change-multi-subscription-screen-edit-subscription-text":"Edit","pages.pref-center.subscriptions.change-multi-subscription-screen-new-subscriptions-title":"New Subscriptions","pages.pref-center.subscriptions.change-multi-subscription-screen-review-button":"Review Changes","pages.pref-center.subscriptions.change-multi-subscription-screen-title":"Manage Subscriptions","pages.pref-center.subscriptions.change-payment-method-description":"Adjust how you pay for the product.","pages.pref-center.subscriptions.change-payment-method-screen-description":"This credit card will be used as the payment method for the following subscription:","pages.pref-center.subscriptions.change-payment-method-screen-save-button":"Save","pages.pref-center.subscriptions.change-payment-method-screen-title":"Enter Payment Detail","pages.pref-center.subscriptions.change-payment-method-title":"Change payment method","pages.pref-center.subscriptions.change-single-subscription-screen-add-new":"Add a new card","pages.pref-center.subscriptions.change-single-subscription-screen-best-value":"Best Value","pages.pref-center.subscriptions.change-single-subscription-screen-confirm-button":"CONFIRM & PROCESS PAYMENT","pages.pref-center.subscriptions.change-single-subscription-screen-current-subscription-title":"Current Subscription","pages.pref-center.subscriptions.change-single-subscription-screen-existing-payment":"Use existing payment method","pages.pref-center.subscriptions.change-single-subscription-screen-new-subscription-description":"Change your current subscription for another.","pages.pref-center.subscriptions.change-single-subscription-screen-new-subscription-title":"Change Subscription","pages.pref-center.subscriptions.change-single-subscription-screen-payment-method-selection":"Payment Method","pages.pref-center.subscriptions.change-single-subscription-screen-review-button":"Review Changes","pages.pref-center.subscriptions.change-single-subscription-screen-select-plan":"Select Plan","pages.pref-center.subscriptions.change-single-subscription-screen-selected-plan":"Selected Plan","pages.pref-center.subscriptions.change-single-subscription-screen-title":"Manage Subscription","pages.pref-center.subscriptions.change-single-subscription-title":"Change your subscription","pages.pref-center.subscriptions.change-subscription-description":"Adjust what products you have access to.","pages.pref-center.subscriptions.change-subscriptions-title":"Change your subscriptions","pages.pref-center.subscriptions.invoices-text":"To see previous invoices visit","pages.pref-center.subscriptions.manage-single-subscription-title":"Manage Subscription","pages.pref-center.subscriptions.manage-subscriptions-title":"Manage Subscriptions","pages.pref-center.subscriptions.next-payment-title":"Next payment date","pages.pref-center.subscriptions.no-subscriptions":"You don't have any subscriptions.","pages.pref-center.subscriptions.one-off-expiry-date":"Expiry Date","pages.pref-center.subscriptions.one-off-price-title":"Price","pages.pref-center.subscriptions.payment-information-title":"Payment Information","pages.pref-center.subscriptions.payment-processing-text":"(payment processing)","pages.pref-center.subscriptions.product-canceled":"Product canceled","pages.pref-center.subscriptions.return-to-subscription-text":"Return to Subscription","pages.pref-center.subscriptions.return-to-subscriptions-text":"Return to Subscriptions","pages.pref-center.subscriptions.subscription-rate-title":"Subscription rate","pages.pref-center.subscriptions.update-success":"Update success"}}},"formTypeConfig":{"allowAccountRegistrationCodes":false,"usePasswordlessAuthentication":false,"twoFactorEmailAuthentication":true,"usePassword":false,"useVerificationCodes":true,"showSuccessOnFormCompletion":false,"autoApplyAttributes":{"email_verified":"true","wants_main_newsletter":"true","would-like-member-newsletter":"false"},"version":1,"requestCountry":"US","requestState":"Illinois","requestCity":"Chicago","requestZipCode":"60602"},"organisationConfig":{"schemaFields":[{"slug":"agree_to_have_data_stored","visibility":"PUBLIC","label":"I agree to have my data stored and processed by Sifted.","required":false,"public-description":"","validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"articles-gift-given","visibility":"PUBLIC","label":"Articles gift given","required":false,"public-description":"","validation-expression":null,"input-type":"number","select-options":null,"range-start":null,"range-end":null,"range-step":null},{"slug":"breakfastRsvp","visibility":"PUBLIC","label":"breakfastRsvp","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"company","visibility":"PUBLIC","label":"Company","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"complete_profile_submitted","visibility":"PUBLIC","label":"Complete profile submitted","required":false,"public-description":"","validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"cookiebot_user_hash","visibility":"PUBLIC","label":"Cookiebot User Hash","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"date-of-current-gifting-cycle-started","visibility":"PUBLIC","label":"Date of current gifting cycle started","required":false,"public-description":"","validation-expression":null,"input-type":"date","select-options":null,"range-start":null,"range-end":null,"range-step":null},{"slug":"department","visibility":"PUBLIC","label":"Department","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"âï¸ Engineering","value":"âï¸ Engineering","default":false},{"label":"ð¥ HR","value":"ð¥ HR","default":false},{"label":"ð Product","value":"ð Product","default":false},{"label":"ð¨ Design","value":"ð¨ Design","default":false},{"label":"ð¤ Sales","value":"ð¤ Sales","default":false},{"label":"ð Marketing","value":"ð Marketing","default":false},{"label":"âï¸ Legal","value":"âï¸ Legal","default":false},{"label":"ð¼ Business Development","value":"ð¼ Business Development","default":false},{"label":"ð¦ Leadership","value":"ð¦ Leadership","default":false},{"label":"ð¸ Finance","value":"ð¸ Finance","default":false},{"label":"ð Other","value":"ð Other","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"email_verified","visibility":"PUBLIC","label":"email verified","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"legacy","value":"legacy","default":false},{"label":"true","value":"true","default":false},{"label":"false","value":"false","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"expressed_interest","visibility":"PUBLIC","label":"Expressed Interest (Subscriber Events)","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"first_name","visibility":"PUBLIC","label":"First name","required":true,"public-description":"","validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"form_advisory_firm_type","visibility":"PUBLIC","label":"form_advisory_firm_type","required":false,"public-description":"","validation-expression":null,"input-type":"select","select-options":[{"label":"Law Firm","value":"Law Firm","default":false},{"label":"Consultancy Firm","value":"Consultancy Firm","default":false},{"label":"Financial Advisory","value":"Financial Advisory","default":false}],"range-start":null,"range-end":null,"range-step":null},{"slug":"form_aum","visibility":"PUBLIC","label":"form_aum","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Less than $1 million","value":"Less than $1 million","default":false},{"label":"$1 million - $10 million","value":"$1 million - $10 million","default":false},{"label":"$10 million - $50 million","value":"$10 million - $50 million","default":false},{"label":"$50 million - $100 million","value":"$50 million - $100 million","default":false},{"label":"$100 million - $500 million","value":"$100 million - $500 million","default":false},{"label":"$500 million - $1 billion","value":"$500 million - $1 billion","default":false},{"label":"Over $1 billion","value":"Over $1 billion","default":false},{"label":"Prefer not to disclose","value":"Prefer not to disclose","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_b2b_or_b2c","visibility":"PUBLIC","label":"form_b2b_or_b2c","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"B2B","value":"B2B","default":false},{"label":"B2C","value":"B2C","default":false},{"label":"Both","value":"Both","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_company_founded","visibility":"PUBLIC","label":"form_company_founded","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"form_company_hq_country","visibility":"PUBLIC","label":"form_company_hq_country","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Antilles","value":"Antilles","default":false},{"label":"Antigua and Barbuda","value":"Antigua and Barbuda","default":false},{"label":"Angola","value":"Angola","default":false},{"label":"Afghanistan","value":"Afghanistan","default":false},{"label":"Armenia","value":"Armenia","default":false},{"label":"Antarctica","value":"Antarctica","default":false},{"label":"Albania","value":"Albania","default":false},{"label":"Argentina","value":"Argentina","default":false},{"label":"Austria","value":"Austria","default":false},{"label":"American Samoa","value":"American Samoa","default":false},{"label":"Canada","value":"Canada","default":false},{"label":"Burkina Faso","value":"Burkina Faso","default":false},{"label":"Switzerland","value":"Switzerland","default":false},{"label":"Ã
land Islands","value":"Ã
land Islands","default":false},{"label":"France","value":"France","default":false},{"label":"Aruba","value":"Aruba","default":false},{"label":"Azerbaijan","value":"Azerbaijan","default":false},{"label":"Bahrain","value":"Bahrain","default":false},{"label":"Bosnia and Herzegovina","value":"Bosnia and Herzegovina","default":false},{"label":"Australia","value":"Australia","default":false},{"label":"Barbados","value":"Barbados","default
80838":false},{"label":"Belgium","value":"Belgium","default":false},{"label":"Bulgaria","value":"Bulgaria","default":false},{"label":"Burundi","value":"Burundi","default":false},{"label":"Benin","value":"Benin","default":false},{"label":"Brunei Darussalam","value":"Brunei Darussalam","default":false},{"label":"Bermuda","value":"Bermuda","default":false},{"label":"Bolivia, Plurinational State of","value":"Bolivia, Plurinational State of","default":false},{"label":"Bonaire, Sint Eustatius and Saba","value":"Bonaire, Sint Eustatius and Saba","default":false},{"label":"Brazil","value":"Brazil","default":false},{"label":"Germany","value":"Germany","default":false},{"label":"Saint Barthélemy","value":"Saint Barthélemy","default":false},{"label":"Bahamas","value":"Bahamas","default":false},{"label":"Botswana","value":"Botswana","default":false},{"label":"Bouvet Island","value":"Bouvet Island","default":false},{"label":"Belarus","value":"Belarus","default":false},{"label":"Belize","value":"Belize","default":false},{"label":"Cocos (Keeling) Islands","value":"Cocos (Keeling) Islands","default":false},{"label":"Congo, the Democratic Republic of the","value":"Congo, the Democratic Republic of the","default":false},{"label":"Congo","value":"Congo","default":false},{"label":"Central African Republic","value":"Central African Republic","default":false},{"label":"Cabo Verde","value":"Cabo Verde","default":false},{"label":"Colombia","value":"Colombia","default":false},{"label":"Cameroon","value":"Cameroon","default":false},{"label":"Czech Republic","value":"Czech Republic","default":false},{"label":"Costa Rica","value":"Costa Rica","default":false},{"label":"China","value":"China","default":false},{"label":"Christmas Island","value":"Christmas Island","default":false},{"label":"Cyprus","value":"Cyprus","default":false},{"label":"Côte d'Ivoire","value":"Côte d'Ivoire","default":false},{"label":"Cuba","value":"Cuba","default":false},{"label":"Cook Islands","value":"Cook Islands","default":false},{"label":"Serbia and Montenegro","value":"Serbia and Montenegro","default":false},{"label":"Curaçao","value":"Curaçao","default":false},{"label":"Denmark","value":"Denmark","default":false},{"label":"Djibouti","value":"Djibouti","default":false},{"label":"Dominican Republic","value":"Dominican Republic","default":false},{"label":"Algeria","value":"Algeria","default":false},{"label":"Ethiopia","value":"Ethiopia","default":false},{"label":"Chile","value":"Chile","default":false},{"label":"Faroe Islands","value":"Faroe Islands","default":false},{"label":"Ecuador","value":"Ecuador","default":false},{"label":"Dominica","value":"Dominica","default":false},{"label":"Bangladesh","value":"Bangladesh","default":false},{"label":"Egypt","value":"Egypt","default":false},{"label":"Micronesia, Federated States of","value":"Micronesia, Federated States of","default":false},{"label":"Spain","value":"Spain","default":false},{"label":"Falkland Islands (Malvinas)","value":"Falkland Islands (Malvinas)","default":false},{"label":"Finland","value":"Finland","default":false},{"label":"Estonia","value":"Estonia","default":false},{"label":"Gabon","value":"Gabon","default":false},{"label":"Bhutan","value":"Bhutan","default":false},{"label":"Western Sahara","value":"Western Sahara","default":false},{"label":"Fiji","value":"Fiji","default":false},{"label":"Eritrea","value":"Eritrea","default":false},{"label":"Andorra","value":"Andorra","default":false},{"label":"United Kingdom","value":"United Kingdom","default":false},{"label":"Grenada","value":"Grenada","default":false},{"label":"Georgia","value":"Georgia","default":false},{"label":"French Guiana","value":"French Guiana","default":false},{"label":"Guernsey","value":"Guernsey","default":false},{"label":"Ghana","value":"Ghana","default":false},{"label":"Gibraltar","value":"Gibraltar","default":false},{"label":"Greenland","value":"Greenland","default":false},{"label":"Gambia","value":"Gambia","default":false},{"label":"Guinea","value":"Guinea","default":false},{"label":"Guadeloupe","value":"Guadeloupe","default":false},{"label":"Equatorial Guinea","value":"Equatorial Guinea","default":false},{"label":"Greece","value":"Greece","default":false},{"label":"South Georgia and the South Sandwich Islands","value":"South Georgia and the South Sandwich Islands","default":false},{"label":"Guatemala","value":"Guatemala","default":false},{"label":"Guam","value":"Guam","default":false},{"label":"Guinea-Bissau","value":"Guinea-Bissau","default":false},{"label":"Guyana","value":"Guyana","default":false},{"label":"Hong Kong","value":"Hong Kong","default":false},{"label":"Heard Island and McDonald Islands","value":"Heard Island and McDonald Islands","default":false},{"label":"Honduras","value":"Honduras","default":false},{"label":"Croatia","value":"Croatia","default":false},{"label":"Haiti","value":"Haiti","default":false},{"label":"Hungary","value":"Hungary","default":false},{"label":"Indonesia","value":"Indonesia","default":false},{"label":"Ireland","value":"Ireland","default":false},{"label":"Israel","value":"Israel","default":false},{"label":"Isle of Man","value":"Isle of Man","default":false},{"label":"India","value":"India","default":false},{"label":"British Indian Ocean Territory","value":"British Indian Ocean Territory","default":false},{"label":"Iraq","value":"Iraq","default":false}
80838,{"label":"Iran, Islamic Republic of","value":"Iran, Islamic Republic of","default":false},{"label":"Iceland","value":"Iceland","default":false},{"label":"Italy","value":"Italy","default":false},{"label":"Jersey","value":"Jersey","default":false},{"label":"Jamaica","value":"Jamaica","default":false},{"label":"Jordan","value":"Jordan","default":false},{"label":"Japan","value":"Japan","default":false},{"label":"Kenya","value":"Kenya","default":false},{"label":"Kyrgyzstan","value":"Kyrgyzstan","default":false},{"label":"Cambodia","value":"Cambodia","default":false},{"label":"Kiribati","value":"Kiribati","default":false},{"label":"Comoros","value":"Comoros","default":false},{"label":"Saint Kitts and Nevis","value":"Saint Kitts and Nevis","default":false},{"label":"Korea, Democratic People's Republic of","value":"Korea, Democratic People's Republic of","default":false},{"label":"Korea, Republic of","value":"Korea, Republic of","default":false},{"label":"Kuwait","value":"Kuwait","default":false},{"label":"Cayman Islands","value":"Cayman Islands","default":false},{"label":"Kazakhstan","value":"Kazakhstan","default":false},{"label":"Lao People's Democratic Republic","value":"Lao People's Democratic Republic","default":false},{"label":"Lebanon","value":"Lebanon","default":false},{"label":"Saint Lucia","value":"Saint Lucia","default":false},{"label":"Liechtenstein","value":"Liechtenstein","default":false},{"label":"Sri Lanka","value":"Sri Lanka","default":false},{"label":"Liberia","value":"Liberia","default":false},{"label":"Lesotho","value":"Lesotho","default":false},{"label":"Lithuania","value":"Lithuania","default":false},{"label":"Luxembourg","value":"Luxembourg","default":false},{"label":"Latvia","value":"Latvia","default":false},{"label":"Libya","value":"Libya","default":false},{"label":"Morocco","value":"Morocco","default":false},{"label":"Monaco","value":"Monaco","default":false},{"label":"Moldova, Republic of","value":"Moldova, Republic of","default":false},{"label":"Montenegro","value":"Montenegro","default":false},{"label":"Saint Martin (French part)","value":"Saint Martin (French part)","default":false},{"label":"Madagascar","value":"Madagascar","default":false},{"label":"Marshall Islands","value":"Marshall Islands","default":false},{"label":"Macedonia","value":"Macedonia","default":false},{"label":"Mali","value":"Mali","default":false},{"label":"Myanmar","value":"Myanmar","default":false},{"label":"Mongolia","value":"Mongolia","default":false},{"label":"Macao","value":"Macao","default":false},{"label":"Northern Mariana Islands","value":"Northern Mariana Islands","default":false},{"label":"Martinique","value":"Martinique","default":false},{"label":"Mauritania","value":"Mauritania","default":false},{"label":"Montserrat","value":"Montserrat","default":false},{"label":"Malta","value":"Malta","default":false},{"label":"Mauritius","value":"Mauritius","default":false},{"label":"Maldives","value":"Maldives","default":false},{"label":"Malawi","value":"Malawi","default":false},{"label":"Mexico","value":"Mexico","default":false},{"label":"Malaysia","value":"Malaysia","default":false},{"label":"Mozambique","value":"Mozambique","default":false},{"label":"Namibia","value":"Namibia","default":false},{"label":"New Caledonia","value":"New Caledonia","default":false},{"label":"Niger","value":"Niger","default":false},{"label":"Norfolk Island","value":"Norfolk Island","default":false},{"label":"Nigeria","value":"Nigeria","default":false},{"label":"Nicaragua","value":"Nicaragua","default":false},{"label":"Netherlands","value":"Netherlands","default":false},{"label":"Norway","value":"Norway","default":false},{"label":"Nepal","value":"Nepal","default":false},{"label":"Nauru","value":"Nauru","default":false},{"label":"Niue","value":"Niue","default":false},{"label":"New Zealand","value":"New Zealand","default":false},{"label":"Oman","value":"Oman","default":false},{"label":"Panama","value":"Panama","default":false},{"label":"Peru","value":"Peru","default":false},{"label":"French Polynesia","value":"French Polynesia","default":false},{"label":"Papua New Guinea","value":"Papua New Guinea","default":false},{"label":"Philippines","value":"Philippines","default":false},{"label":"Pakistan","value":"Pakistan","default":false},{"label":"Poland","value":"Poland","default":false},{"label":"Saint Pierre and Miquelon","value":"Saint Pierre and Miquelon","default":false},{"label":"Pitcairn","value":"Pitcairn","default":false},{"label":"Puerto Rico","value":"Puerto Rico","default":false},{"label":"Palestine, State of","value":"Palestine, State of","default":false},{"label":"Portugal","value":"Portugal","default":false},{"label":"Palau","value":"Palau","default":false},{"label":"Paraguay","value":"Paraguay","default":false},{"label":"Qatar","value":"Qatar","default":false},{"label":"Réunion","value":"Réunion","default":false},{"label":"Romania","value":"Romania","default":false},{"label":"Serbia","value":"Serbia","default":false},{"label":"Russian Federation","value":"Russian Federation","default":false},{"label":"Rwanda","value":"Rwanda","default":false},{"label":"Saudi Arabia","value":"Saudi Arabia","default":false},{"label":"Solomon Islands","value":"Solomon Islands","default":false},{"label":"Seychelles","value":"Seychelles","default":false},{"label":"Sudan","value":"Sudan","default":false},{"label":"Sweden","value":"Sweden","default":false},{"label":"Singapore","value":"Singapore","default":false},{"label":"Saint Helena, Ascension and Tristan da Cunha","value":"Saint Helena, Ascension and Tristan da Cunha","default":false},{"label":"Slovenia","value":"Slovenia","default":false},{"label":"Svalbard and Jan Mayen","value":"Svalbard and Jan Mayen","default":false},{"label":"Slovakia","value":"Slovakia","default":false},{"label":"Sierra Leone","value":"Sierra Leone","default":false},{"label":"San Marino","value":"San Marino","default":false},{"label":"Senegal","value":"Senegal","default":false},{"label":"Somalia","value":"Somalia","default":false},{"label":"Suriname","value":"Suriname","default":false},{"label":"South Sudan","value":"South Sudan","default":false},{"label":"Sao Tome and Principe","value":"Sao Tome and Principe","default":false},{"label":"El Salvador","value":"El Salvador","default":false},{"label":"Sint Maarten (Dutch part)","value":"Sint Maarten (Dutch part)","default":false},{"label":"Syrian Arab Republic","value":"Syrian Arab Republic","default":false},{"label":"Swaziland","value":"Swaziland","default":false},{"label":"Turks and Caicos Islands","value":"Turks and Caicos Islands","default":false},{"label":"Chad","value":"Chad","default":false},{"label":"French Southern Territories","value":"French Southern Territories","default":false},{"label":"Togo","value":"Togo","default":false},{"label":"Thailand","value":"Thailand","default":false},{"label":"Tajikistan","value":"Tajikistan","default":false},{"label":"Tokelau","value":"Tokelau","default":false},{"label":"Timor-Leste","value":"Timor-Leste","default":false},{"label":"Turkmenistan","value":"Turkmenistan","default":false},{"label":"Tunisia","value":"Tunisia","default":false},{"label":"Tonga","value":"Tonga","default":false},{"label":"Turkey","value":"Turkey","default":false},{"label":"Trinidad and Tobago","value":"Trinidad and Tobago","default":false},{"label":"Tuvalu","value":"Tuvalu","default":false},{"label":"Taiwan, Province of China","value":"Taiwan, Province of China","default":false},{"label":"Tanzania, United Republic of","value":"Tanzania, United Republic of","default":false},{"label":"Ukraine","value":"Ukraine","default":false},{"label":"Uganda","value":"Uganda","default":false},{"label":"United Arab Emirates","value":"United Arab Emirates","default":false},{"label":"United States Minor Outlying Islands","value":"United States Minor Outlying Islands","default":false},{"label":"United States","value":"United States","default":false},{"label":"Uruguay","value":"Uruguay","default":false},{"label":"Uzbekistan","value":"Uzbekistan","default":false},{"label":"Holy See (Vatican City State)","value":"Holy See (Vatican City State)","default":false},{"label":"Saint Vincent and the Grenadines","value":"Saint Vincent and the Grenadines","default":false},{"label":"Venezuela, Bolivarian Republic of","value":"Venezuela, Bolivarian Republic of","default":false},{"label":"Virgin Islands, British","value":"Virgin Islands, British","default":false},{"label":"Virgin Islands, U.S.","value":"Virgin Islands, U.S.","default":false},{"label":"Viet Nam","value":"Viet Nam","default":false},{"label":"Vanuatu","value":"Vanuatu","default":false},{"label":"Wallis and Futuna","value":"Wallis and Futuna","default":false},{"label":"Samoa","value":"Samoa","default":false},{"label":"Kosovo","value":"Kosovo","default":false},{"label":"Yemen","value":"Yemen","default":false},{"label":"Mayotte","value":"Mayotte","default":false},{"label":"South Africa","value":"South Africa","default":false},{"label":"Zambia","value":"Zambia","default":false},{"label":"Zimbabwe","value":"Zimbabwe","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_company_name","visibility":"PUBLIC","label":"form_company_name","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5}
80838,{"slug":"form_company_size","visibility":"PUBLIC","label":"form_company_size","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"1-10","value":"1-10","default":false},{"label":"11-50","value":"11-50","default":false},{"label":"51-200","value":"51-200","default":false},{"label":"201-500","value":"201-500","default":false},{"label":"501-1000","value":"501-1000","default":false},{"label":"1001-5000","value":"1001-5000","default":false},{"label":"5001-10,000","value":"5001-10,000","default":false},{"label":"10,001+","value":"10,001+","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_company_type","visibility":"PUBLIC","label":"form_company_type","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Startup (up to Series A)","value":"Startup","default":false},{"label":"Scaleup (Series B+)","value":"Scaleup","default":false},{"label":"Professional Services","value":"Professional Services","default":false},{"label":"Investment Firm","value":"Investment Firm","default":false},{"label":"Non-profit","value":"Non-profit","default":false},{"label":"Academic Institution","value":"Academic Institution","default":false},{"label":"Media & Publishing","value":"Media & Publishing","default":false},{"label":"Research & Data Platform","value":"Research & Data Platform","default":false},{"label":"Government","value":"Government","default":false},{"label":"Tech & SaaS","value":"Tech & SaaS","default":false},{"label":"Advisory Firm","value":"Advisory Firm","default":false},{"label":"Other","value":"other","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_country","visibility":"PUBLIC","label":"form_country","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"United Kingdom","value":"United Kingdom","default":false},{"label":"Afghanistan","value":"Afghanistan","default":false},{"label":"Ã
land Islands","value":"Ã
land Islands","default":false},{"label":"Albania","value":"Albania","default":false},{"label":"Algeria","value":"Algeria","default":false},{"label":"American Samoa","value":"American Samoa","default":false},{"label":"Andorra","value":"Andorra","default":false},{"label":"Angola","value":"Angola","default":false},{"label":"Antarctica","value":"Antarctica","default":false},{"label":"Antigua and Barbuda","value":"Antigua and Barbuda","default":false},{"label":"Antilles","value":"Antilles","default":false},{"label":"Argentina","value":"Argentina","default":false},{"label":"Armenia","value":"Armenia","default":false},{"label":"Aruba","value":"Aruba","default":false},{"label":"Australia","value":"Australia","default":false},{"label":"Austria","value":"Austria","default":false},{"label":"Azerbaijan","value":"Azerbaijan","default":false},{"label":"Bahamas","value":"Bahamas","default":false},{"label":"Bahrain","value":"Bahrain","default":false},{"label":"Bangladesh","value":"Bangladesh","default":false},{"label":"Barbados","value":"Barbados","default":false},{"label":"Belarus","value":"Belarus","default":false},{"label":"Belgium","value":"Belgium","default":false},{"label":"Belize","value":"Belize","default":false},{"label":"Benin","value":"Benin","default":false},{"label":"Bermuda","value":"Bermuda","default":false},{"label":"Bhutan","value":"Bhutan","default":false},{"label":"Bolivia, Plurinational State of","value":"Bolivia, Plurinational State of","default":false},{"label":"Bonaire, Sint Eustatius and Saba","value":"Bonaire, Sint Eustatius and Saba","default":false},{"label":"Bosnia and Herzegovina","value":"Bosnia and Herzegovina","default":false},{"label":"Botswana","value":"Botswana","default":false},{"label":"Bouvet Island","value":"Bouvet Island","default":false},{"label":"Brazil","value":"Brazil","default":false},{"label":"British Indian Ocean Territory","value":"British Indian Ocean Territory","default":false},{"label":"Brunei Darussalam","value":"Brunei Darussalam","default":false},{"label":"Bulgaria","value":"Bulgaria","default":false},{"label":"Burkina Faso","value":"Burkina Faso","default":false},{"label":"Burundi","value":"Burundi","default":false},{"label":"Cabo Verde","value":"Cabo Verde","default":false},{"label":"Cambodia","value":"Cambodia","default":false},{"label":"Cameroon","value":"Cameroon","default":false},{"label":"Canada","value":"Canada","default":false},{"label":"Cayman Islands","value":"Cayman Islands","default":false},{"label":"Central African Republic","value":"Central African Republic","default":false},{"label":"Chad","value":"Chad","default":false},{"label":"Chile","value":"Chile","default":false},{"label":"China","value":"China","default":false},{"label":"Christmas Island","value":"Christmas Island","default":false},{"label":"Cocos (Keeling) Islands","value":"Cocos (Keeling) Islands","default":false},{"label":"Colombia","value":"Colombia","default":false},{"label":"Comoros","value":"Comoros","default":false},{"label":"Congo, the Democratic Republic of the","value":"Congo, the Democratic Republic of the","default":false},{"label":"Congo","value":"Congo","default":false},{"label":"Cook Islands","value":"Cook Islands","default":false},{"label":"Costa Rica","value":"Costa Rica","default":false},{"label":"Côte d'Ivoire","value":"Côte d'Ivoire","default":false},{"label":"Croatia","value":"Croatia","default":false},{"label":"Cuba","value":"Cuba","default":false},{"label":"Curaçao","value":"Curaçao","default":false},{"label":"Cyprus","value":"Cyprus","default":false},{"label":"Czech Republic","value":"Czech Republic","default":false},{"label":"Denmark","value":"Denmark","default":false},{"label":"Djibouti","value":"Djibouti","default":false},{"label":"Dominica","value":"Dominica","default":false},{"label":"Dominican Republic","value":"Dominican Republic","default":false},{"label":"Ecuador","value":"Ecuador","default":false},{"label":"Egypt","value":"Egypt","default":false},{"label":"El Salvador","value":"El Salvador","default":false},{"label":"Equatorial Guinea","value":"Equatorial Guinea","default":false},{"label":"Eritrea","value":"Eritrea","default":false},{"label":"Estonia","value":"Estonia","default":false},{"label":"Ethiopia","value":"Ethiopia","default":false},{"label":"Falkland Islands (Malvinas)","value":"Falkland Islands (Malvinas)","default":false},{"label":"Faroe Islands","value":"Faroe Islands","default":false},{"label":"Fiji","value":"Fiji","default":false},{"label":"Finland","value":"Finland","default":false},{"label":"France","value":"France","default":false},{"label":"French Guiana","value":"French Guiana","default":false},{"label":"French Polynesia","value":"French Polynesia","default":false},{"label":"French Southern Territories","value":"French Southern Territories","default":false},{"label":"Gabon","value":"Gabon","default":false},{"label":"Gambia","value":"Gambia","default":false},{"label":"Georgia","value":"Georgia","default":false},{"label":"Germany","value":"Germany","default":false},{"label":"Ghana","value":"Ghana","default":false},{"label":"Gibraltar","value":"Gibraltar","default":false},{"label":"Greece","value":"Greece","default":false},{"label":"Greenland","value":"Greenland","default":false},{"label":"Grenada","value":"Grenada","default":false},{"label":"Guadeloupe","value":"Guadeloupe","default":false},{"label":"Guam","value":"Guam","default":false},{"label":"Guatemala","value":"Guatemala","default":false},{"label":"Guernsey","value":"Guernsey","default":false},{"label":"Guinea-Bissau","value":"Guinea-Bissau","default":false},{"label":"Guinea","value":"Guinea","default":false},{"label":"Guyana","value":"Guyana","default":false},{"label":"Haiti","value":"Haiti","default":false},{"label":"Heard Island and McDonald Islands","value":"Heard Island and McDonald Islands","default":false},{"label":"Holy See (Vatican City State)","value":"Holy See (Vatican City State)","default":false},{"label":"Honduras","value":"Honduras","default":false},{"label":"Hong Kong","value":"Hong Kong","default":false},{"label":"Hungary","value":"Hungary","default":false},{"label":"Iceland","value":"Iceland","default":false},{"label":"India","value":"India","default":false},{"label":"Indonesia","value":"Indonesia","default":false}
80838,{"label":"Iran, Islamic Republic of","value":"Iran, Islamic Republic of","default":false},{"label":"Iraq","value":"Iraq","default":false},{"label":"Ireland","value":"Ireland","default":false},{"label":"Isle of Man","value":"Isle of Man","default":false},{"label":"Israel","value":"Israel","default":false},{"label":"Italy","value":"Italy","default":false},{"label":"Jamaica","value":"Jamaica","default":false},{"label":"Japan","value":"Japan","default":false},{"label":"Jersey","value":"Jersey","default":false},{"label":"Jordan","value":"Jordan","default":false},{"label":"Kazakhstan","value":"Kazakhstan","default":false},{"label":"Kenya","value":"Kenya","default":false},{"label":"Kiribati","value":"Kiribati","default":false},{"label":"Korea, Democratic People's Republic of","value":"Korea, Democratic People's Republic of","default":false},{"label":"Korea, Republic of","value":"Korea, Republic of","default":false},{"label":"Kosovo","value":"Kosovo","default":false},{"label":"Kuwait","value":"Kuwait","default":false},{"label":"Kyrgyzstan","value":"Kyrgyzstan","default":false},{"label":"Lao People's Democratic Republic","value":"Lao People's Democratic Republic","default":false},{"label":"Latvia","value":"Latvia","default":false},{"label":"Lebanon","value":"Lebanon","default":false},{"label":"Lesotho","value":"Lesotho","default":false},{"label":"Liberia","value":"Liberia","default":false},{"label":"Libya","value":"Libya","default":false},{"label":"Liechtenstein","value":"Liechtenstein","default":false},{"label":"Lithuania","value":"Lithuania","default":false},{"label":"Luxembourg","value":"Luxembourg","default":false},{"label":"Macao","value":"Macao","default":false},{"label":"Macedonia","value":"Macedonia","default":false},{"label":"Madagascar","value":"Madagascar","default":false},{"label":"Malawi","value":"Malawi","default":false},{"label":"Malaysia","value":"Malaysia","default":false},{"label":"Maldives","value":"Maldives","default":false},{"label":"Mali","value":"Mali","default":false},{"label":"Malta","value":"Malta","default":false},{"label":"Marshall Islands","value":"Marshall Islands","default":false},{"label":"Martinique","value":"Martinique","default":false},{"label":"Mauritania","value":"Mauritania","default":false},{"label":"Mauritius","value":"Mauritius","default":false},{"label":"Mayotte","value":"Mayotte","default":false},{"label":"Mexico","value":"Mexico","default":false},{"label":"Micronesia, Federated States of","value":"Micronesia, Federated States of","default":false},{"label":"Moldova, Republic of","value":"Moldova, Republic of","default":false},{"label":"Monaco","value":"Monaco","default":false},{"label":"Mongolia","value":"Mongolia","default":false},{"label":"Montenegro","value":"Montenegro","default":false},{"label":"Montserrat","value":"Montserrat","default":false},{"label":"Morocco","value":"Morocco","default":false},{"label":"Mozambique","value":"Mozambique","default":false},{"label":"Myanmar","value":"Myanmar","default":false},{"label":"Namibia","value":"Namibia","default":false},{"label":"Nauru","value":"Nauru","default":false},{"label":"Nepal","value":"Nepal","default":false},{"label":"Netherlands","value":"Netherlands","default":false},{"label":"New Caledonia","value":"New Caledonia","default":false},{"label":"New Zealand","value":"New Zealand","default":false},{"label":"Nicaragua","value":"Nicaragua","default":false},{"label":"Niger","value":"Niger","default":false},{"label":"Nigeria","value":"Nigeria","default":false},{"label":"Niue","value":"Niue","default":false},{"label":"Norfolk Island","value":"Norfolk Island","default":false},{"label":"Northern Mariana Islands","value":"Northern Mariana Islands","default":false},{"label":"Norway","value":"Norway","default":false},{"label":"Oman","value":"Oman","default":false},{"label":"Pakistan","value":"Pakistan","default":false},{"label":"Palau","value":"Palau","default":false},{"label":"Palestine, State of","value":"Palestine, State of","default":false},{"label":"Panama","value":"Panama","default":false},{"label":"Papua New Guinea","value":"Papua New Guinea","default":false},{"label":"Paraguay","value":"Paraguay","default":false},{"label":"Peru","value":"Peru","default":false},{"label":"Philippines","value":"Philippines","default":false},{"label":"Pitcairn","value":"Pitcairn","default":false},{"label":"Poland","value":"Poland","default":false},{"label":"Portugal","value":"Portugal","default":false},{"label":"Puerto Rico","value":"Puerto Rico","default":false},{"label":"Qatar","value":"Qatar","default":false},{"label":"Réunion","value":"Réunion","default":false},{"label":"Romania","value":"Romania","default":false},{"label":"Russian Federation","value":"Russian Federation","default":false},{"label":"Rwanda","value":"Rwanda","default":false},{"label":"Saint Barthélemy","value":"Saint Barthélemy","default":false},{"label":"Saint Helena, Ascension and Tristan da Cunha","value":"Saint Helena, Ascension and Tristan da Cunha","default":false},{"label":"Saint Kitts and Nevis","value":"Saint Kitts and Nevis","default":false},{"label":"Saint Lucia","value":"Saint Lucia","default":false},{"label":"Saint Martin (French part)","value":"Saint Martin (French part)","default":false},{"label":"Saint Pierre and Miquelon","value":"Saint Pierre and Miquelon","default":false},{"label":"Saint Vincent and the Grenadines","value":"Saint Vincent and the Grenadines","default":false},{"label":"Samoa","value":"Samoa","default":false},{"label":"San Marino","value":"San Marino","default":false},{"label":"Sao Tome and Principe","value":"Sao Tome and Principe","default":false},{"label":"Saudi Arabia","value":"Saudi Arabia","default":false},{"label":"Senegal","value":"Senegal","default":false},{"label":"Serbia and Montenegro","value":"Serbia and Montenegro","default":false},{"label":"Serbia","value":"Serbia","default":false},{"label":"Seychelles","value":"Seychelles","default":false},{"label":"Sierra Leone","value":"Sierra Leone","default":false},{"label":"Singapore","value":"Singapore","default":false},{"label":"Sint Maarten (Dutch part)","value":"Sint Maarten (Dutch part)","default":false},{"label":"Slovakia","value":"Slovakia","default":false},{"label":"Slovenia","value":"Slovenia","default":false},{"label":"Solomon Islands","value":"Solomon Islands","default":false},{"label":"Somalia","value":"Somalia","default":false},{"label":"South Africa","value":"South Africa","default":false},{"label":"South Georgia and the South Sandwich Islands","value":"South Georgia and the South Sandwich Islands","default":false},{"label":"South Sudan","value":"South Sudan","default":false},{"label":"Spain","value":"Spain","default":false},{"label":"Sri Lanka","value":"Sri Lanka","default":false},{"label":"Sudan","value":"Sudan","default":false},{"label":"Suriname","value":"Suriname","default":false},{"label":"Svalbard and Jan Mayen","value":"Svalbard and Jan Mayen","default":false},{"label":"Swaziland","value":"Swaziland","default":false},{"label":"Sweden","value":"Sweden","default":false},{"label":"Switzerland","value":"Switzerland","default":false},{"label":"Syrian Arab Republic","value":"Syrian Arab Republic","default":false},{"label":"Taiwan, Province of China","value":"Taiwan, Province of China","default":false},{"label":"Tajikistan","value":"Tajikistan","default":false},{"label":"Tanzania, United Republic of","value":"Tanzania, United Republic of","default":false},{"label":"Thailand","value":"Thailand","default":false},{"label":"Timor-Leste","value":"Timor-Leste","default":false},{"label":"Togo","value":"Togo","default":false},{"label":"Tokelau","value":"Tokelau","default":false},{"label":"Tonga","value":"Tonga","default":false},{"label":"Trinidad and Tobago","value":"Trinidad and Tobago","default":false},{"label":"Tunisia","value":"Tunisia","default":false},{"label":"Turkey","value":"Turkey","default":false},{"label":"Turkmenistan","value":"Turkmenistan","default":false},{"label":"Turks and Caicos Islands","value":"Turks and Caicos Islands","default":false},{"label":"Tuvalu","value":"Tuvalu","default":false},{"label":"Uganda","value":"Uganda","default":false},{"label":"Ukraine","value":"Ukraine","default":false},{"label":"United Arab Emirates","value":"United Arab Emirates","default":false},{"label":"United States Minor Outlying Islands","value":"United States Minor Outlying Islands","default":false},{"label":"United States","value":"United States","default":false},{"label":"Uruguay","value":"Uruguay","default":false},{"label":"Uzbekistan","value":"Uzbekistan","default":false},{"label":"Vanuatu","value":"Vanuatu","default":false},{"label":"Venezuela, Bolivarian Republic of","value":"Venezuela, Bolivarian Republic of","default":false},{"label":"Viet Nam","value":"Viet Nam","default":false},{"label":"Virgin Islands, British","value":"Virgin Islands, British","default":false},{"label":"Virgin Islands, U.S.","value":"Virgin Islands, U.S.","default":false},{"label":"Wallis and Futuna","value":"Wallis and Futuna","default":false},{"label":"Western Sahara","value":"Western Sahara","default":false},{"label":"Yemen","value":"Yemen","default":false},{"label":"Zambia","value":"Zambia","default":false},{"label":"Zimbabwe","value":"Zimbabwe","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_department","visibility":"PUBLIC","label":"form_department","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Sales, Business Development or Partnerships","value":"Sales, Business Development or Partnerships","default":false},{"label":"Marketing","value":"Marketing","default":false},{"label":"Product","value":"Product","default":false},{"label":"HR, People & Talent","value":"HR, People & Talent","default":false},{"label":"Data","value":"Data","default":false},{"label":"Technology & Engineering","value":"Technology & Engineering","default":false},{"label":"Legal","value":"Legal","default":false},{"label":"Finance","value":"Finance","default":false},{"label":"Operations","value":"Operations","default":false},{"label":"Innovation","value":"Innovation","default":false},{"label":"PR & Communications","value":"PR & Communications","default":false},{"label":"Investor Relations","value":"Investor Relations","default":false},{"label":"Senior Leadership","value":"Senior Leadership","default":false},{"label":"Other","value":"Other","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_events_consent","visibility":"PUBLIC","label":"form_events_consent","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"form_funding_stages_invested","visibility":"PUBLIC","label":"form_funding_stages_invested","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Pre-Series A","value":"Pre-Series A","default":false},{"label":"Series A","value":"Series A","default":false},{"label":"Growth","value":"Growth","default":false},{"label":"Late","value":"Late","default":false},{"label":"Venture Debt","value":"Venture Debt","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_investment_firm_type","visibility":"PUBLIC","label":"form_investment_firm_type","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Venture Capital","value":"Venture Capital","default":false},{"label":"Private Equity","value":"Private Equity","default":false},{"label":"Family Office","value":"Family Office","default":false},{"label":"Fund of Funds & LPs","value":"Fund of Funds & LPs","default":false},{"label":"Accelerator","value":"Accelerator","default":false},{"label":"Corporate Venture Capital","value":"Corporate Venture Capital","default":false},{"label":"Public Fund","value":"Public Fund","default":false},{"label":"Pension Fund","value":"Pension Fund","default":false},{"label":"Institutional Investor","value":"Institutional Investor","default":false},{"label":"Angel Network","value":"Angel Network","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_job_title","visibility":"PUBLIC","label":"form_job_title","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"form_last_asked_for_optional_data","visibility":"PUBLIC","label":"form_last_asked_for_optional_data","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"form_latest_funding_stage","visibility":"PUBLIC","label":"form_latest_funding_stage","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Bootstrapped","value":"Bootstrapped","default":false},{"label":"Pre-Series A","value":"Pre-Series A","default":false},{"label":"Series A","value":"Series A","default":false},{"label":"Growth","value":"Growth","default":false},{"label":"Late","value":"Late","default":false},{"label":"Public Company","value":"Public Company","default":false},{"label":"Acquired","value":"Acquired","default":false},{"label":"I don't know","value":"I don't know","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_professional_service_type","visibility":"PUBLIC","label":"form_professional_service_type","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Accountancy or Audit Firm","value":"Accountancy or Audit Firm","default":false},{"label":"Asset/Investment Manager","value":"Asset/Investment Manager","default":false},{"label":"Business Bank","value":"Business Bank","default":false},{"label":"Commercial Real Estate or Co-working Space","value":"Commercial Real Estate or Co-working Space","default":false},{"label":"Fintech","value":"Fintech","default":false},{"label":"IT Consulting & Services","value":"IT Consulting & Services","default":false},{"label":"Insurance","value":"Insurance","default":false},{"label":"Investment Bank","value":"Investment Bank","default":false},{"label":"Marketing, Advertising or Design Agency","value":"Marketing, Advertising or Design Agency","default":false},{"label":"Other","value":"Other","default":false},{"label":"PR & Communications Agency","value":"PR & Communications Agency","default":false}
80838,{"label":"Professional Training and Coaching","value":"Professional Training and Coaching","default":false},{"label":"Staffing & Recruitment","value":"Staffing & Recruitment","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_role_at_business","visibility":"PUBLIC","label":"form_role_at_business","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"(Co) founder","value":"(Co) founder","default":false},{"label":"C-Suite","value":"C-Suite","default":false},{"label":"VP","value":"VP","default":false},{"label":"Director","value":"Director","default":false},{"label":"Senior manager","value":"Senior manager","default":false},{"label":"Manager","value":"Manager","default":false},{"label":"Junior","value":"Junior","default":false},{"label":"General Partner","value":"General Partner","default":false},{"label":"Partner","value":"Partner","default":false},{"label":"Principal","value":"Principal","default":false},{"label":"Associate","value":"Associate","default":false},{"label":"Analyst","value":"Analyst","default":false},{"label":"Researcher","value":"Researcher","default":false},{"label":"Angel Investor","value":"Angel Investor","default":false},{"label":"Other","value":"Other","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_sector","visibility":"PUBLIC","label":"form_sector","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"B2B SaaS","value":"B2B SaaS","default":false},{"label":"Fintech","value":"Fintech","default":false},{"label":"Deeptech","value":"Deeptech","default":false},{"label":"Climate tech","value":"Climate tech","default":false},{"label":"Healthtech","value":"Healthtech","default":false},{"label":"Consumer","value":"Consumer","default":false},{"label":"Other","value":"Other","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_sectors","visibility":"PUBLIC","label":"form_sectors","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"B2B SaaS","value":"B2B SaaS","default":false},{"label":"Fintech","value":"Fintech","default":false},{"label":"Deeptech","value":"Deeptech","default":false},{"label":"Climate tech","value":"Climate tech","default":false},{"label":"Healthtech","value":"Healthtech","default":false},{"label":"Consumer","value":"Consumer","default":false},{"label":"Other","value":"Other","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"form_work_in_startup_ecosystem","visibility":"PUBLIC","label":"form_work_in_startup_ecosystem","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Service provider","value":"Service provider","default":false},{"label":"Venture arm","value":"Venture arm","default":false},{"label":"Accelerator / incubator / open innovation","value":"Accelerator / incubator / open innovation","default":false},{"label":"Corporate innovation","value":"Corporate innovation","default":false},{"label":"Other","value":"Other","default":false},{"label":"Do not work with startup ecosystem","value":"Do not work with startup ecosystem","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"is_academic_user","visibility":"PUBLIC","label":"is_academic_user","required":false,"public-description":"Does user is academic user","validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":null,"range-end":null,"range-step":null},{"slug":"is-migrated-from-hubspot","visibility":"PUBLIC","label":"Is migrated from Hubspot","required":false,"public-description":"","validation-expression":null,"input-type":"hidden","select-options":null,"range-start":null,"range-end":null,"range-step":null},{"slug":"last_name","visibility":"PUBLIC","label":"Last name","required":true,"public-description":"","validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"newsletter_preferences_seen","visibility":"PUBLIC","label":"Newsletter preferences seen","required":false,"public-description":"","validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"nudges","visibility":"PUBLIC","label":"nudges","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"organisation_type","visibility":"PUBLIC","label":"Organisation Type","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Pre-seed Startup","value":"Pre-seed Startup","default":false},{"label":"Seed Startup","value":"Seed Startup","default":false},{"label":"Series A Startup","value":"Series A Startup","default":false},{"label":"Series B+ Startup","value":"Series B+ Startup","default":false},{"label":"Corporate","value":"Corporate","default":false},{"label":"Service provider to Startups","value":"Service provider to Startups","default":false},{"label":"Investment firm","value":"Investment firm","default":false},{"label":"Other","value":"Other","default":false},{"label":"I don't work at the moment","value":"I don't work at the moment","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"paywallCounter","visibility":"PUBLIC","label":"paywallCounter","required":false,"public-description":null,"validation-expression":null,"input-type":"number","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"paywallHitsList","visibility":"PUBLIC","label":"paywallHitsList","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"position","visibility":"PUBLIC","label":"Job Title","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"pql-test","visibility":"PUBLIC","label":"Also interested in...","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Our Sifted Pro product (investment-grade research on the early-stage startup ecosystem)","value":"Our Sifted Pro product (investment-grade research on the early-stage startup ecosystem)","default":false},{"label":"Sponsorship and advertising opportunities (reaching Siftedâs audie
80838nce)","value":"Sponsorship and advertising opportunities (reaching Siftedâs audience)","default":false},{"label":"None of the above","value":"None of the above","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"reports_downloaded","visibility":"PUBLIC","label":"Reports Downloaded","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"role","visibility":"PUBLIC","label":"Role","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"(Co) Founder","value":"(Co) Founder","default":false},{"label":"Partner","value":"Partner","default":false},{"label":"Director","value":"Director","default":false},{"label":"Senior manager","value":"Senior manager","default":false},{"label":"Manager","value":"Manager","default":false},{"label":"Associate","value":"Associate","default":false},{"label":"Junior","value":"Junior","default":false},{"label":"Senior","value":"Senior","default":false},{"label":"Student","value":"Student","default":false},{"label":"Academic","value":"Academic","default":false},{"label":"Other","value":"Other","default":false},{"label":"Staff","value":"Staff","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"roundtableRsvp","visibility":"PUBLIC","label":"Roundtable RSVP","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"sector_preference","visibility":"PUBLIC","label":"Sector of interest","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"ð Fintech","value":"ð Fintech","default":false},{"label":"ð Venture Capital","value":"ð Venture Capital","default":false},{"label":"ð± Sustainability","value":"ð± Sustainability","default":false},{"label":"ð Public & Academia","value":"ð Public & Academia","default":false},{"label":"ð¦ Startup Life","value":"ð¦ Startup Life","default":false},{"label":"ð± Consumer","value":"ð± Consumer","default":false},{"label":"ð¾ Deeptech","value":"ð¾ Deeptech","default":false},{"label":"ð Mobility","value":"ð Mobility","default":false},{"label":"ð¥ Healthtech","value":"ð¥ Healthtech","default":false},{"label":"ð¡ Corporate Innovation","value":"ð¡ Corporate Innovation","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_address_line_1","visibility":"PUBLIC","label":"self_serve_address_line_1","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_address_line_2","visibility":"PUBLIC","label":"self_serve_address_line_2","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_address_line_3","visibility":"PUBLIC","label":"self_serve_address_line_3","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_city","visibility":"PUBLIC","label":"self_serve_city","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_country","visibility":"PUBLIC","label":"self_serve_country","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Afghanistan","value":"Afghanistan","default":false},{"label":"Albania","value":"Albania","default":false},{"label":"Algeria","value":"Algeria","default":false},{"label":"American Samoa","value":"American Samoa","default":false},{"label":"Andorra","value":"Andorra","default":false},{"label":"Angola","value":"Angola","default":false},{"label":"Antarctica","value":"Antarctica","default":false},{"label":"Antigua and Barbuda","value":"Antigua and Barbuda","default":false},{"label":"Antilles","value":"Antilles","default":false},{"label":"Argentina","value":"Argentina","default":false},{"label":"Armenia","value":"Armenia","default":false},{"label":"Aruba","value":"Aruba","default":false},{"label":"Australia","value":"Australia","default":false},{"label":"Austria","value":"Austria","default":false},{"label":"Azerbaijan","value":"Azerbaijan","default":false},{"label":"Bahamas","value":"Bahamas","default":false},{"label":"Bahrain","value":"Bahrain","default":false},{"label":"Bangladesh","value":"Bangladesh","default":false},{"label":"Barbados","value":"Barbados","default":false},{"label":"Belarus","value":"Belarus","default":false},{"label":"Belgium","value":"Belgium","default":false},{"label":"Belize","value":"Belize","default":false},{"label":"Benin","value":"Benin","default":false},{"label":"Bermuda","value":"Bermuda","default":false},{"label":"Bhutan","value":"Bhutan","default":false},{"label":"Bolivia, Plurinational State of","value":"Bolivia, Plurinational State of","default":false},{"label":"Bonaire, Sint Eustatius and Saba","value":"Bonaire, Sint Eustatius and Saba","default":false},{"label":"Bosnia and Herzegovina","value":"Bosnia and Herzegovina","default":false},{"label":"Botswana","value":"Botswana","default":false},{"label":"Bouvet Island","value":"Bouvet Island","default":false},{"label":"Brazil","value":"Brazil","default":false},{"label":"British Indian Ocean Territory","value":"British Indian Ocean Territory","default":false},{"label":"Brunei Darussalam","value":"Brunei Darussalam","default":false},{"label":"Bulgaria","value":"Bulgaria","default":false},{"label":"Burkina Faso","value":"Burkina Faso","default":false},{"label":"Burundi","value":"Burundi","default":false},{"label":"Cabo Verde","value":"Cabo Verde","default":false},{"label":"Cambodia","value":"Cambodia","default":false},{"label":"Cameroon","value":"Cameroon","default":false},{"label":"Canada","value":"Canada","default":false},{"label":"Cayman Islands","value":"Cayman Islands","default":false},{"label":"Central African Republic","value":"Central African Republic","default":false},{"label":"Chad","value":"Chad","default":false},{"label":"Chile","value":"Chile","default":false},{"label":"China","value":"China","default":false},{"label":"Christmas Island","value":"Christmas Island","default":false},{"label":"Cocos (Keeling) Islands","value":"Cocos (Keeling) Islands","default":false},{"label":"Colombia","value":"Colombia","default":false},{"label":"Comoros","value":"Comoros","default":false},{"label":"Congo","value":"Congo","default":false},{"label":"Congo, the Democratic Republic of the","value":"Congo, the Democratic Republic of the","default":false},{"label":"Cook Islands","value":"Cook Islands","default":false},{"label":"Costa Rica","value":"Costa Rica","default":false},{"label":"Croatia","value":"Croatia","default":false},{"label":"Cuba","value":"Cuba","default":false},{"label":"Curaçao","value":"Curaçao","default":false},{"label":"Cyprus","value":"Cyprus","default":false},{"label":"Czech Republic","value":"Czech Republic","default":false},{"label":"Côte d'Ivoire","value":"Côte d'Ivoire","default":false},{"label":"Denmark","value":"Denmark","default":false},{"label":"Djibouti","value":"Djibouti","default":false},{"label":"Dominica","value":"Dominica","default":false},{"label":"Dominican Republic","value":"Dominican Republic","default":false},{"label":"Ecuador","value":"Ecuador","default":false},{"label":"Egypt","value":"Egypt","default":false},{"label":"El Salvador","value":"El Salvador","default":false},{"label":"Equatorial Guinea","value":"Equatorial Guinea","default":false},{"label":"Eritrea","value":"Eritrea","default":false},{"label":"Estonia","value":"Estonia","default":false},{"label":"Ethiopia","value":"Ethiopia","default":false},{"label":"Falkland Islands (Malvinas)","value":"Falkland Islands (Malvinas)","default":false},{"label":"Faroe Islands","value":"Faroe Islands","default":false},{"label":"Fiji","value":"Fiji","default":false},{"label":"Finland","value":"Finland","default":false},{"label":"France","value":"France","default":false},{"label":"French Guiana","value":"French Guiana","default":false},{"label":"French Polynesia","value":"French Polynesia","default":false},{"label":"French Southern Territories","value":"French Southern Territories","default":false},{"label":"Gabon","value":"Gabon","default":false},{"label":"Gambia","value":"Gambia","default":false},{"label":"Georgia","value":"Georgia","default":false},{"label":"Germany","value":"Germany","default":false},{"label":"Ghana","value":"Ghana","default":false},{"label":"Gibraltar","value":"Gibraltar","default":false},{"label":"Greece","value":"Greece","default":false},{"label":"Greenland","value":"Greenland","default":false},{"label":"Grenada","value":"Grenada","default":false},{"label":"Guadeloupe","value":"Guadeloupe","default":false},{"label":"Guam","value":"Guam","default":false},{"label":"Guatemala","value":"Guatemala","default":false},{"label":"Guernsey","value":"Guernsey","default":false},{"label":"Guinea","value":"Guinea","default":false},{"label":"Guinea-Bissau","value":"Guinea-Bissau","default":false},{"label":"Guyana","value":"Guyana","default":false},{"label":"Haiti","value":"Haiti","default":false},{"label":"Heard Island and McDonald Islands","value":"Heard Island and McDonald Islands","default":false},{"label":"Holy See (Vatican City State)","value":"Holy See (Vatican City State)","default":false},{"label":"Honduras","value":"Honduras","default":false},{"label":"Hong Kong","value":"Hong Kong","default":false},{"label":"Hungary","value":"Hungary","default":false},{"label":"Iceland","value":"Iceland","default":false},{"label":"India","value":"India","default":false},{"label":"Indonesia","value":"Indonesia","default":false}
80838,{"label":"Iran, Islamic Republic of","value":"Iran, Islamic Republic of","default":false},{"label":"Iraq","value":"Iraq","default":false},{"label":"Ireland","value":"Ireland","default":false},{"label":"Isle of Man","value":"Isle of Man","default":false},{"label":"Israel","value":"Israel","default":false},{"label":"Italy","value":"Italy","default":false},{"label":"Jamaica","value":"Jamaica","default":false},{"label":"Japan","value":"Japan","default":false},{"label":"Jersey","value":"Jersey","default":false},{"label":"Jordan","value":"Jordan","default":false},{"label":"Kazakhstan","value":"Kazakhstan","default":false},{"label":"Kenya","value":"Kenya","default":false},{"label":"Kiribati","value":"Kiribati","default":false},{"label":"Korea, Democratic People's Republic of","value":"Korea, Democratic People's Republic of","default":false},{"label":"Korea, Republic of","value":"Korea, Republic of","default":false},{"label":"Kosovo","value":"Kosovo","default":false},{"label":"Kuwait","value":"Kuwait","default":false},{"label":"Kyrgyzstan","value":"Kyrgyzstan","default":false},{"label":"Lao People's Democratic Republic","value":"Lao People's Democratic Republic","default":false},{"label":"Latvia","value":"Latvia","default":false},{"label":"Lebanon","value":"Lebanon","default":false},{"label":"Lesotho","value":"Lesotho","default":false},{"label":"Liberia","value":"Liberia","default":false},{"label":"Libya","value":"Libya","default":false},{"label":"Liechtenstein","value":"Liechtenstein","default":false},{"label":"Lithuania","value":"Lithuania","default":false},{"label":"Luxembourg","value":"Luxembourg","default":false},{"label":"Macao","value":"Macao","default":false},{"label":"Macedonia","value":"Macedonia","default":false},{"label":"Madagascar","value":"Madagascar","default":false},{"label":"Malawi","value":"Malawi","default":false},{"label":"Malaysia","value":"Malaysia","default":false},{"label":"Maldives","value":"Maldives","default":false},{"label":"Mali","value":"Mali","default":false},{"label":"Malta","value":"Malta","default":false},{"label":"Marshall Islands","value":"Marshall Islands","default":false},{"label":"Martinique","value":"Martinique","default":false},{"label":"Mauritania","value":"Mauritania","default":false},{"label":"Mauritius","value":"Mauritius","default":false},{"label":"Mayotte","value":"Mayotte","default":false},{"label":"Mexico","value":"Mexico","default":false},{"label":"Micronesia, Federated States of","value":"Micronesia, Federated States of","default":false},{"label":"Moldova, Republic of","value":"Moldova, Republic of","default":false},{"label":"Monaco","value":"Monaco","default":false},{"label":"Mongolia","value":"Mongolia","default":false},{"label":"Montenegro","value":"Montenegro","default":false},{"label":"Montserrat","value":"Montserrat","default":false},{"label":"Morocco","value":"Morocco","default":false},{"label":"Mozambique","value":"Mozambique","default":false},{"label":"Myanmar","value":"Myanmar","default":false},{"label":"Namibia","value":"Namibia","default":false},{"label":"Nauru","value":"Nauru","default":false},{"label":"Nepal","value":"Nepal","default":false},{"label":"Netherlands","value":"Netherlands","default":false},{"label":"New Caledonia","value":"New Caledonia","default":false},{"label":"New Zealand","value":"New Zealand","default":false},{"label":"Nicaragua","value":"Nicaragua","default":false},{"label":"Niger","value":"Niger","default":false},{"label":"Nigeria","value":"Nigeria","default":false},{"label":"Niue","value":"Niue","default":false},{"label":"Norfolk Island","value":"Norfolk Island","default":false},{"label":"Northern Mariana Islands","value":"Northern Mariana Islands","default":false},{"label":"Norway","value":"Norway","default":false},{"label":"Oman","value":"Oman","default":false},{"label":"Pakistan","value":"Pakistan","default":false},{"label":"Palau","value":"Palau","default":false},{"label":"Palestine, State of","value":"Palestine, State of","default":false},{"label":"Panama","value":"Panama","default":false},{"label":"Papua New Guinea","value":"Papua New Guinea","default":false},{"label":"Paraguay","value":"Paraguay","default":false},{"label":"Peru","value":"Peru","default":false},{"label":"Philippines","value":"Philippines","default":false},{"label":"Pitcairn","value":"Pitcairn","default":false},{"label":"Poland","value":"Poland","default":false},{"label":"Portugal","value":"Portugal","default":false},{"label":"Puerto Rico","value":"Puerto Rico","default":false},{"label":"Qatar","value":"Qatar","default":false},{"label":"Romania","value":"Romania","default":false},{"label":"Russian Federation","value":"Russian Federation","default":false},{"label":"Rwanda","value":"Rwanda","default":false},{"label":"Réunion","value":"Réunion","default":false},{"label":"Saint Barthélemy","value":"Saint Barthélemy","default":false},{"label":"Saint Helena, Ascension and Tristan da Cunha","value":"Saint Helena, Ascension and Tristan da Cunha","default":false},{"label":"Saint Kitts and Nevis","value":"Saint Kitts and Nevis","default":false},{"label":"Saint Lucia","value":"Saint Lucia","default":false},{"label":"Saint Martin (French part)","value":"Saint Martin (French part)","default":false},{"label":"Saint Pierre and Miquelon","value":"Saint Pierre and Miquelon","default":false},{"label":"Saint Vincent and the Grenadines","value":"Saint Vincent and the Grenadines","default":false},{"label":"Samoa","value":"Samoa","default":false},{"label":"San Marino","value":"San Marino","default":false},{"label":"Sao Tome and Principe","value":"Sao Tome and Principe","default":false},{"label":"Saudi Arabia","value":"Saudi Arabia","default":false},{"label":"Senegal","value":"Senegal","default":false},{"label":"Serbia","value":"Serbia","default":false},{"label":"Serbia and Montenegro","value":"Serbia and Montenegro","default":false},{"label":"Seychelles","value":"Seychelles","default":false},{"label":"Sierra Leone","value":"Sierra Leone","default":false},{"label":"Singapore","value":"Singapore","default":false},{"label":"Sint Maarten (Dutch part)","value":"Sint Maarten (Dutch part)","default":false},{"label":"Slovakia","value":"Slovakia","default":false},{"label":"Slovenia","value":"Slovenia","default":false},{"label":"Solomon Islands","value":"Solomon Islands","default":false},{"label":"Somalia","value":"Somalia","default":false},{"label":"South Africa","value":"South Africa","default":false},{"label":"South Georgia and the South Sandwich Islands","value":"South Georgia and the South Sandwich Islands","default":false},{"label":"South Sudan","value":"South Sudan","default":false},{"label":"Spain","value":"Spain","default":false},{"label":"Sri Lanka","value":"Sri Lanka","default":false},{"label":"Sudan","value":"Sudan","default":false},{"label":"Suriname","value":"Suriname","default":false},{"label":"Svalbard and Jan Mayen","value":"Svalbard and Jan Mayen","default":false},{"label":"Swaziland","value":"Swaziland","default":false},{"label":"Sweden","value":"Sweden","default":false},{"label":"Switzerland","value":"Switzerland","default":false},{"label":"Syrian Arab Republic","value":"Syrian Arab Republic","default":false},{"label":"Taiwan, Province of China","value":"Taiwan, Province of China","default":false},{"label":"Tajikistan","value":"Tajikistan","default":false},{"label":"Tanzania, United Republic of","value":"Tanzania, United Republic of","default":false},{"label":"Thailand","value":"Thailand","default":false},{"label":"Timor-Leste","value":"Timor-Leste","default":false},{"label":"Togo","value":"Togo","default":false},{"label":"Tokelau","value":"Tokelau","default":false},{"label":"Tonga","value":"Tonga","default":false},{"label":"Trinidad and Tobago","value":"Trinidad and Tobago","default":false},{"label":"Tunisia","value":"Tunisia","default":false},{"label":"Turkey","value":"Turkey","default":false},{"label":"Turkmenistan","value":"Turkmenistan","default":false},{"label":"Turks and Caicos Islands","value":"Turks and Caicos Islands","default":false},{"label":"Tuvalu","value":"Tuvalu","default":false},{"label":"Uganda","value":"Uganda","default":false},{"label":"Ukraine","value":"Ukraine","default":false},{"label":"United Arab Emirates","value":"United Arab Emirates","default":false},{"label":"United Kingdom","value":"United Kingdom","default":false},{"label":"United States","value":"United States","default":false},{"label":"United States Minor Outlying Islands","value":"United States Minor Outlying Islands","default":false},{"label":"Uruguay","value":"Uruguay","default":false},{"label":"Uzbekistan","value":"Uzbekistan","default":false},{"label":"Vanuatu","value":"Vanuatu","default":false},{"label":"Venezuela, Bolivarian Republic of","value":"Venezuela, Bolivarian Republic of","default":false},{"label":"Viet Nam","value":"Viet Nam","default":false},{"label":"Virgin Islands, British","value":"Virgin Islands, British","default":false},{"label":"Virgin Islands, U.S.","value":"Virgin Islands, U.S.","default":false},{"label":"Wallis and Futuna","value":"Wallis and Futuna","default":false},{"label":"Western Sahara","value":"Western Sahara","default":false},{"label":"Yemen","value":"Yemen","default":false},{"label":"Zambia","value":"Zambia","default":false},{"label":"Zimbabwe","value":"Zimbabwe","default":false},{"label":"Ã
land Islands","value":"Ã
land Islands","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_name","visibility":"PUBLIC","label":"self_serve_name","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_need_an_invoice","visibility":"PUBLIC","label":"Do you need an invoice?","required":false,"public-description":"","validation-expression":null,"input-type":"radio","select-options":[{"label":"Yes","value":"yes","default":false},{"label":"No","value":"no","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_personal_or_business","visibility":"PUBLIC","label":"self_serve_personal_or_business","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Personal","value":"Personal","default":false},{"label":"Business","value":"Business","default":false}],"range-start":0,"range-end":100,"range-step":5}
80838,{"slug":"self_serve_phone_number","visibility":"PUBLIC","label":"self_serve_phone_number","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_postcode","visibility":"PUBLIC","label":"self_serve_postcode","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"self_serve_vat_number","visibility":"PUBLIC","label":"self_serve_vat_number","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"show_angel_onboard","visibility":"PUBLIC","label":"show angel onboard ","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"show_pro_onboard","visibility":"PUBLIC","label":"show pro onboard","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"show_pro_trial_onboard","visibility":"PUBLIC","label":"show pro trial onboard","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"show_reg_onboard","visibility":"PUBLIC","label":"show reg onboard","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"show_startup_onboard","visibility":"PUBLIC","label":"show startup onboard","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"sifted12","visibility":"PUBLIC","label":"Profession","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Founder / cofounder","value":"Founder / cofounder","default":false},{"label":"C-suite","value":"C-suite","default":false},{"label":"Investor (VC/private equity/angel etc)","value":"Investor (VC/private equity/angel etc)","default":false},{"label":"Corporate consultant","value":"Corporate consultant","default":false},{"label":"Startup service provider (e.g. brand agency etc)","value":"Startup service provider (e.g. brand agency etc)","default":false},{"label":"Student","value":"Student","default":false},{"label":"Academia","value":"Academia","default":false},{"label":"Startup employee (e.g. operations etc)","value":"Startup employee (e.g. operations etc)","default":false},{"label":"Policy / government","value":"Policy / government","default":false},{"label":"Media","value":"Media","default":false},{"label":"Unemployed / looking for work","value":"Unemployed / looking for work","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"sifted13","visibility":"PUBLIC","label":"Primary reason for joining","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Stay ahead of the competition","value":"Stay ahead of the competition","default":false},{"label":"Find actionable data insights","value":"Find actionable data insights","default":false},{"label":"Hear the views of those in similar roles","value":"Hear the views of those in similar roles","default":false},{"label":"Find a community of like-minded people","value":"Find a community of like-minded people","default":false},{"label":"Support quality tech journalism","value":"Support quality tech journalism","default":false},{"label":"Understand business best practices","value":"Understand business best practices","default":false},{"label":"Understand industry/sector trends","value":"Understand industry/sector trends","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"subscriberEventCheckIn","visibility":"PUBLIC","label":"Subscriber Event Check-in","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"talkcheckin","visibility":"PUBLIC","label":"talkCheckIn","required":false,"public-description":"","validation-expression":null,"input-type":"textarea","select-options":null,"range-start":null,"range-end":null,"range-step":null},{"slug":"talks_rsvp","visibility":"PUBLIC","label":"talksRsvp","required":false,"public-description":"","validation-expression":null,"input-type":"textarea","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"top_banner_dismissed_at","visibility":"PUBLIC","label":"Top_banner_dismissed_at","required":false,"public-description":"Top banner dismissal timestamp","validation-expression":null,"input-type":"text","select-options":null,"range-start":null,"range-end":null,"range-step":null},{"slug":"validation_last_timestamp","visibility":"PUBLIC","label":"validation_last_timestamp","required":false,"public-description":"JISC Student verification timestamp","validation-expression":null,"input-type":"text","select-options":null,"range-start":null,"range-end":null,"range-step":null},{"slug":"wants_main_newsletter","visibility":"PUBLIC","label":"Daily Newsletter","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"work_country","visibility":"PUBLIC","label":"Work Country","required":false,"public-description":null,"validation-expression":null,"input-type":"select","select-options":[{"label":"Antilles","value":"Antilles","default":false},{"label":"Antigua and Barbuda","value":"Antigua and Barbuda","default":false},{"label":"Angola","value":"Angola","default":false},{"label":"Afghanistan","value":"Afghanistan","default":false},{"label":"Armenia","value":"Armenia","default":false},{"label":"Antarctica","value":"Antarctica","default":false},{"label":"Albania","value":"Albania","default":false},{"label":"Argentina","value":"Argentina","default":false},{"label":"Austria","value":"Austria","default":false},{"label":"American Samoa","value":"American Samoa","default":false},{"label":"Canada","value":"Canada","default":false},{"label":"Burkina Faso","value":"Burkina Faso","default":false},{"label":"Switzerland","value":"Switzerland","default":false},{"label":"Ã
land Islands","value":"Ã
land Islands","default":false},{"label":"France","value":"France","default":false},{"label":"Aruba","value":"Aruba","default":false},{"label":"Azerbaijan","value":"Azerbaijan","default":false},{"label":"Bahrain","value":"Bahrain","default":false},{"label":"Bosnia and Herzegovina","value":"Bosnia and Herzegovina","default":false},{"label":"Australia","value":"Australia","default":false},{"label":"Barbados","value":"Barbados","default":false},{"label":"Belgium","value":"Belgium","default":false},{"label":"Bulgaria","value":"Bulgaria","default":false},{"label":"Burundi","value":"Burundi","default":false},{"label":"Benin","value":"Benin","default":false},{"label":"Brunei Darussalam","value":"Brunei Darussalam","default":false},{"label":"Bermuda","value":"Bermuda","default":false},{"label":"Bolivia, Plurinational State of","value":"Bolivia, Plurinational State of","default":false},{"label":"Bonaire, Sint Eustatius and Saba","value":"Bonaire, Sint Eustatius and Saba","default":false},{"label":"Brazil","value":"Brazil","default":false},{"label":"Germany","value":"Germany","default":false},{"label":"Saint Barthélemy","value":"Saint Barthélemy","default":false},{"label":"Bahamas","value":"Bahamas","default":false},{"label":"Botswana","value":"Botswana","default":false},{"label":"Bouvet Island","value":"Bouvet Island","default":false},{"label":"Belarus","value":"Belarus","default":false},{"label":"Belize","value":"Belize","default":false},{"label":"Cocos (Keeling) Islands","value":"Cocos (Keeling) Islands","default":false},{"label":"Congo, the Democratic Republic of the","value":"Congo, the Democratic Republic of the","default":false},{"label":"Congo","value":"Congo","default":false},{"label":"Central African Republic","value":"Central African Republic","default":false},{"label":"Cabo Verde","value":"Cabo Verde","default":false},{"label":"Colombia","value":"Colombia","default":false},{"label":"Cameroon","value":"Cameroon","default":false},{"label":"Czech Republic","value":"Czech Republic","default":false},{"label":"Costa Rica","value":"Costa Rica","default":false},{"label":"China","value":"China","default":false},{"label":"Christmas Island","value":"Christmas Island","default":false},{"label":"Cyprus","value":"Cyprus","default":false},{"label":"Côte d'Ivoire","value":"Côte d'Ivoire","default":false},{"label":"Cuba","value":"Cuba","default":false},{"label":"Cook Islands","value":"Cook Islands","default":false},{"label":"Serbia and Montenegro","value":"Serbia and Montenegro","default":false},{"label":"Curaçao","value":"Curaçao","default":false},{"label":"Denmark","value":"Denmark","default":false},{"label":"Djibouti","value":"Djibouti","default":false},{"label":"Dominican Republic","value":"Dominican Republic","default":false},{"label":"Algeria","value":"Algeria","default":false},{"label":"Ethiopia","value":"Ethiopia","default":false},{"label":"Chile","value":"Chile","default":false},{"label":"Faroe Islands","value":"Faroe Islands","default":false},{"label":"Ecuador","value":"Ecuador","default":false},{"label":"Dominica","value":"Dominica","default":false},{"label":"Bangladesh","value":"Bangladesh","default":false},{"label":"Egypt","value":"Egypt","default":false},{"label":"Micronesia, Federated States of","value":"Micronesia, Federated States of","default":false},{"label":"Spain","value":"Spain","default":false},{"label":"Falkland Islands (Malvinas)","value":"Falkland Islands (Malvinas)","default":false},{"label":"Finland","value":"Finland","default":false},{"label":"Estonia","value":"Estonia","default":false},{"label":"Gabon","value":"Gabon","default":false},{"label":"Bhutan","value":"Bhutan","default":false},{"label":"Western Sahara","value":"Western Sahara","default":false},{"label":"Fiji","value":"Fiji","default":false},{"label":"Eritrea","value":"Eritrea","default":false},{"label":"Andorra","value":"Andorra","default":false},{"label":"United Kingdom","value":"United Kingdom","default":false},{"label":"Grenada","value":"Grenada","default":false},{"label":"Georgia","value":"Georgia","default":false},{"label":"French Guiana","value":"French Guiana","default":false},{"label":"Guernsey","value":"Guernsey","default":false},{"label":"Ghana","value":"Ghana","default":false},{"label":"Gibraltar","value":"Gibraltar","default":false},{"label":"Greenland","value":"Greenland","default":false},{"label":"Gambia","value":"Gambia","default":false},{"label":"Guinea","value":"Guinea","default":false},{"label":"Guadeloupe","value":"Guadeloupe","default":false},{"label":"Equatorial Guinea","value":"Equatorial Guinea","default":false},{"label":"Greece","value":"Greece","default":false},{"label":"South Georgia and the South Sandwich Islands","value":"South Georgia and the South Sandwich Islands","default":false},{"label":"Guatemala","value":"Guatemala","default":false},{"label":"Guam","value":"Guam","default":false},{"label":"Guinea-Bissau","value":"Guinea-Bissau","default":false},{"label":"Guyana","value":"Guyana","default":false},{"label":"Hong Kong","value":"Hong Kong","default":false},{"label":"Heard Island and McDonald Islands","value":"Heard Island and McDonald Islands","default":false},{"label":"Honduras","value":"Honduras","default":false},{"label":"Croatia","value":"Croatia","default":false},{"label":"Haiti","value":"Haiti","default":false},{"label":"Hungary","value":"Hungary","default":false},{"label":"Indonesia","value":"Indonesia","default":false},{"label":"Ireland","value":"Ireland","default":false},{"label":"Israel","value":"Israel","default":false},{"label":"Isle of Man","value":"Isle of Man","default":false},{"label":"India","value":"India","default":false},{"label":"British Indian Ocean Territory","value":"British Indian Ocean Territory","default":false},{"label":"Iraq","value":"Iraq","default":false}
80838,{"label":"Iran, Islamic Republic of","value":"Iran, Islamic Republic of","default":false},{"label":"Iceland","value":"Iceland","default":false},{"label":"Italy","value":"Italy","default":false},{"label":"Jersey","value":"Jersey","default":false},{"label":"Jamaica","value":"Jamaica","default":false},{"label":"Jordan","value":"Jordan","default":false},{"label":"Japan","value":"Japan","default":false},{"label":"Kenya","value":"Kenya","default":false},{"label":"Kyrgyzstan","value":"Kyrgyzstan","default":false},{"label":"Cambodia","value":"Cambodia","default":false},{"label":"Kiribati","value":"Kiribati","default":false},{"label":"Comoros","value":"Comoros","default":false},{"label":"Saint Kitts and Nevis","value":"Saint Kitts and Nevis","default":false},{"label":"Korea, Democratic People's Republic of","value":"Korea, Democratic People's Republic of","default":false},{"label":"Korea, Republic of","value":"Korea, Republic of","default":false},{"label":"Kuwait","value":"Kuwait","default":false},{"label":"Cayman Islands","value":"Cayman Islands","default":false},{"label":"Kazakhstan","value":"Kazakhstan","default":false},{"label":"Lao People's Democratic Republic","value":"Lao People's Democratic Republic","default":false},{"label":"Lebanon","value":"Lebanon","default":false},{"label":"Saint Lucia","value":"Saint Lucia","default":false},{"label":"Liechtenstein","value":"Liechtenstein","default":false},{"label":"Sri Lanka","value":"Sri Lanka","default":false},{"label":"Liberia","value":"Liberia","default":false},{"label":"Lesotho","value":"Lesotho","default":false},{"label":"Lithuania","value":"Lithuania","default":false},{"label":"Luxembourg","value":"Luxembourg","default":false},{"label":"Latvia","value":"Latvia","default":false},{"label":"Libya","value":"Libya","default":false},{"label":"Morocco","value":"Morocco","default":false},{"label":"Monaco","value":"Monaco","default":false},{"label":"Moldova, Republic of","value":"Moldova, Republic of","default":false},{"label":"Montenegro","value":"Montenegro","default":false},{"label":"Saint Martin (French part)","value":"Saint Martin (French part)","default":false},{"label":"Madagascar","value":"Madagascar","default":false},{"label":"Marshall Islands","value":"Marshall Islands","default":false},{"label":"Macedonia, the former Yugoslav Republic of","value":"Macedonia, the former Yugoslav Republic of","default":false},{"label":"Mali","value":"Mali","default":false},{"label":"Myanmar","value":"Myanmar","default":false},{"label":"Mongolia","value":"Mongolia","default":false},{"label":"Macao","value":"Macao","default":false},{"label":"Northern Mariana Islands","value":"Northern Mariana Islands","default":false},{"label":"Martinique","value":"Martinique","default":false},{"label":"Mauritania","value":"Mauritania","default":false},{"label":"Montserrat","value":"Montserrat","default":false},{"label":"Malta","value":"Malta","default":false},{"label":"Mauritius","value":"Mauritius","default":false},{"label":"Maldives","value":"Maldives","default":false},{"label":"Malawi","value":"Malawi","default":false},{"label":"Mexico","value":"Mexico","default":false},{"label":"Malaysia","value":"Malaysia","default":false},{"label":"Mozambique","value":"Mozambique","default":false},{"label":"Namibia","value":"Namibia","default":false},{"label":"New Caledonia","value":"New Caledonia","default":false},{"label":"Niger","value":"Niger","default":false},{"label":"Norfolk Island","value":"Norfolk Island","default":false},{"label":"Nigeria","value":"Nigeria","default":false},{"label":"Nicaragua","value":"Nicaragua","default":false},{"label":"Netherlands","value":"Netherlands","default":false},{"label":"Norway","value":"Norway","default":false},{"label":"Nepal","value":"Nepal","default":false},{"label":"Nauru","value":"Nauru","default":false},{"label":"Niue","value":"Niue","default":false},{"label":"New Zealand","value":"New Zealand","default":false},{"label":"Oman","value":"Oman","default":false},{"label":"Panama","value":"Panama","default":false},{"label":"Peru","value":"Peru","default":false},{"label":"French Polynesia","value":"French Polynesia","default":false},{"label":"Papua New Guinea","value":"Papua New Guinea","default":false},{"label":"Philippines","value":"Philippines","default":false},{"label":"Pakistan","value":"Pakistan","default":false},{"label":"Poland","value":"Poland","default":false},{"label":"Saint Pierre and Miquelon","value":"Saint Pierre and Miquelon","default":false},{"label":"Pitcairn","value":"Pitcairn","default":false},{"label":"Puerto Rico","value":"Puerto Rico","default":false},{"label":"Palestine, State of","value":"Palestine, State of","default":false},{"label":"Portugal","value":"Portugal","default":false},{"label":"Palau","value":"Palau","default":false},{"label":"Paraguay","value":"Paraguay","default":false},{"label":"Qatar","value":"Qatar","default":false},{"label":"Réunion","value":"Réunion","default":false},{"label":"Romania","value":"Romania","default":false},{"label":"Serbia","value":"Serbia","default":false},{"label":"Russian Federation","value":"Russian Federation","default":false},{"label":"Rwanda","value":"Rwanda","default":false},{"label":"Saudi Arabia","value":"Saudi Arabia","default":false},{"label":"Solomon Islands","value":"Solomon Islands","default":false},{"label":"Seychelles","value":"Seychelles","default":false},{"label":"Sudan","value":"Sudan","default":false},{"label":"Sweden","value":"Sweden","default":false},{"label":"Singapore","value":"Singapore","default":false},{"label":"Saint Helena, Ascension and Tristan da Cunha","value":"Saint Helena, Ascension and Tristan da Cunha","default":false},{"label":"Slovenia","value":"Slovenia","default":false},{"label":"Svalbard and Jan Mayen","value":"Svalbard and Jan Mayen","default":false},{"label":"Slovakia","value":"Slovakia","default":false},{"label":"Sierra Leone","value":"Sierra Leone","default":false},{"label":"San Marino","value":"San Marino","default":false},{"label":"Senegal","value":"Senegal","default":false},{"label":"Somalia","value":"Somalia","default":false},{"label":"Suriname","value":"Suriname","default":false},{"label":"South Sudan","value":"South Sudan","default":false},{"label":"Sao Tome and Principe","value":"Sao Tome and Principe","default":false},{"label":"El Salvador","value":"El Salvador","default":false},{"label":"Sint Maarten (Dutch part)","value":"Sint Maarten (Dutch part)","default":false},{"label":"Syrian Arab Republic","value":"Syrian Arab Republic","default":false},{"label":"Swaziland","value":"Swaziland","default":false},{"label":"Turks and Caicos Islands","value":"Turks and Caicos Islands","default":false},{"label":"Chad","value":"Chad","default":false},{"label":"French Southern Territories","value":"French Southern Territories","default":false},{"label":"Togo","value":"Togo","default":false},{"label":"Thailand","value":"Thailand","default":false},{"label":"Tajikistan","value":"Tajikistan","default":false},{"label":"Tokelau","value":"Tokelau","default":false},{"label":"Timor-Leste","value":"Timor-Leste","default":false},{"label":"Turkmenistan","value":"Turkmenistan","default":false},{"label":"Tunisia","value":"Tunisia","default":false},{"label":"Tonga","value":"Tonga","default":false},{"label":"Turkey","value":"Turkey","default":false},{"label":"Trinidad and Tobago","value":"Trinidad and Tobago","default":false},{"label":"Tuvalu","value":"Tuvalu","default":false},{"label":"Taiwan, Province of China","value":"Taiwan, Province of China","default":false},{"label":"Tanzania, United Republic of","value":"Tanzania, United Republic of","default":false},{"label":"Ukraine","value":"Ukraine","default":false},{"label":"Uganda","value":"Uganda","default":false},{"label":"United Arab Emirates","value":"United Arab Emirates","default":false},{"label":"United States Minor Outlying Islands","value":"United States Minor Outlying Islands","default":false},{"label":"United States","value":"United States","default":false},{"label":"Uruguay","value":"Uruguay","default":false},{"label":"Uzbekistan","value":"Uzbekistan","default":false},{"label":"Holy See (Vatican City State)","value":"Holy See (Vatican City State)","default":false},{"label":"Saint Vincent and the Grenadines","value":"Saint Vincent and the Grenadines","default":false},{"label":"Venezuela, Bolivarian Republic of","value":"Venezuela, Bolivarian Republic of","default":false},{"label":"Virgin Islands, British","value":"Virgin Islands, British","default":false},{"label":"Virgin Islands, U.S.","value":"Virgin Islands, U.S.","default":false},{"label":"Viet Nam","value":"Viet Nam","default":false},{"label":"Vanuatu","value":"Vanuatu","default":false},{"label":"Wallis and Futuna","value":"Wallis and Futuna","default":false},{"label":"Samoa","value":"Samoa","default":false},{"label":"Kosovo","value":"Kosovo","default":false},{"label":"Yemen","value":"Yemen","default":false},{"label":"Mayotte","value":"Mayotte","default":false},{"label":"South Africa","value":"South Africa","default":false},{"label":"Zambia","value":"Zambia","default":false},{"label":"Zimbabwe","value":"Zimbabwe","default":false}],"range-start":0,"range-end":100,"range-step":5},{"slug":"would_like_digital_event","visibility":"PUBLIC","label":"would like digital event","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"would_like_in_person_event","visibility":"PUBLIC","label":"would like in-person event","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"would-like-deeptech-newsletter","visibility":"PUBLIC","label":"AI & Deeptech Newsletter","required":false,"public-description":"","validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"would-like-event-newsletter","visibility":"PUBLIC","label":"Sifted Updates","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"would-like-fintech-newsletter","visibility":"PUBLIC","label":"Fintech Newsletter","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"would-like-futureproof-newsletter","visibility":"PUBLIC","label":"Up Round Newsletter","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"would-like-member-newsletter","visibility":"PUBLIC","label":"Sifted Members","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"would-like-scoop-newsletter","visibility":"PUBLIC","label":"The Scoop","required":false,"public-description":"","validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5}
80838,{"slug":"would-like-startup-life-newsletter","visibility":"PUBLIC","label":"Startup Life Newsletter","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"would-like-sustainability-newsletter","visibility":"PUBLIC","label":"Climate Tech Newsletter","required":false,"public-description":null,"validation-expression":null,"input-type":"checkbox","select-options":null,"range-start":0,"range-end":100,"range-step":5},{"slug":"wp_username","visibility":"PUBLIC","label":"wp_username","required":false,"public-description":null,"validation-expression":null,"input-type":"text","select-options":null,"range-start":0,"range-end":100,"range-step":5}],"siteStyles":"{\"color\":{\"text\":{\"main\":\"#000000\",\"tinted\":\"#333333\"},\"background\":{\"main\":\"#FFFFFF\",\"tinted\":\"#cccccc\"},\"accent\":{\"main\":\"#d81c5f\",\"tinted\":\"#e6417b\"},\"action\":{\"main\":\"#2322ff\",\"tinted\":\"#0000ee\"},\"warning\":{\"main\":\"#D90B00\",\"tinted\":\"#ff190d\"}},\"typography\":{\"title\":{\"font\":\"Roboto\",\"fallbackFont\":\"sans-serif\"},\"body\":{\"font\":\"Roboto\",\"fallbackFont\":\"sans-serif\"}},\"button\":{\"fontWeight\":\"normal\",\"fontSize\":\"16\",\"borderWidth\":\"0\",\"borderRadius\":\"9\",\"height\":\"50\"},\"input\":{\"borderColor\":\"#333333\",\"borderWidth\":\"1\",\"borderRadius\":\"5\",\"height\":\"50\"}}","twoFactorEmailAuthenticationEnabled":false,"requireEmailVerfication":true,"hideConfirmPasswordOnRegForm":false,"passwordStrengthRequirements":{"minLength":8,"requireUppercase":false,"requireNumbers":false,"requireSpecialCharacters":false},"ruleAnalyticsEnabled":true,"paymentProvider":"stripe","braintreeSandboxEnv":true,"braintreeMobilePaymentConfig":null,"stripeMobilePaymentConfig":"{\"apple\":{\"countryCode\":\"GB\"},\"google\":{\"countryCode\":\"GB\"}}","stripeAutomaticTaxEnabled":false,"dataLayerName":"ZephrDataLayer","trackFormDataLayerEvents":false,"recaptchaV2Enabled":false,"recaptchaV2SiteKey":null}})); 80839 </script>
80839<script type="text/javascript"> 80840 if (!window.Zephr) window.Zephr = {}; 80841 if (!window.Zephr.outcomes) window.Zephr.outcomes = {}; 80842 window.Zephr.outcomes["checkout-registration-form"] = { 80843 featureLabel: "Checkout registration form", 80844 outcomeId: "transformation/1", 80845 outcomeLabel: "Show checkout registration form" 80846 }; 80847 </script>
80847</div></div></div></div></div></div></div><div class="overflow-x-hidden"><div class="flex h-[60px] w-full items-center border-b border-black-rock bg-[#F4F4F6] md:hidden"><div class="flex w-full items-center justify-between px-5"><div class="flex items-center gap-[10px]"><div class="h-[24px] w-[24px] animate-pulse rounded bg-gray-200"></div><div class="flex h-[40px] w-auto items-center"><a aria-label="Go to Homepage" class="ga-nav-logo m-0 flex focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cerise focus-visible:ring-offset-4 focus-visible:ring-offset-[#F6F6F6]" href="/"><span class="text-black-rock"><svg width="135" height="36" viewBox="0 0 135 36" fill="none" xmlns="http://www.w3.org/2000/svg" class="h-full w-full"><path d="M0 0L13.7259 36H16.2535L2.5276 0H0Z" fill="#DA145E"></path><path d="M29.2884 18.0037C30.1066 18.2756 30.8562 18.5533 31.5372 18.8369C32.1747 19.0957 32.7747 19.4382 33.3213 19.8552C33.8184 20.2372 34.2247 20.7239 34.511 21.2805C34.81 21.8984 34.9567 22.5784 34.9388 23.2641V23.3009C34.9813 24.1293 34.8345 24.9564 34.5093 25.72C34.1841 26.4837 33.6892 27.1637 33.0617 27.709C31.8098 28.7699 30.0564 29.3006 27.8014 29.3011C26.3818 29.2997 24.9732 29.0533 23.6379 28.573C22.263 28.0809 20.9718 27.382 19.8093 26.5005L19.7717 26.463L19.8093 26.4255L22.3369 22.4508L22.3745 22.4876C23.0834 23.2538 23.944 23.8655 24.9021 24.2839C25.8524 24.6928 26.8776 24.9007 27.9128 24.8944C29.3747 24.8944 30.1058 24.4264 30.1063 23.4904C30.1051 23.2723 30.0367 23.0598 29.9103 22.8816C29.784 22.7034 29.6057 22.5682 29.3997 22.4942C28.8578 22.2454 28.2988 22.0352 27.7269 21.8653C27.6135 21.8201 27.4948 21.7893 27.3737 21.7735C27.2524 21.7592 27.1337 21.728 27.0211 21.6809C26.2777 21.485 25.5342 21.2697 24.7907 21.0351C24.0774 20.8159 23.4008 20.4923 22.7831 20.0748C22.1879 19.6669 21.6874 19.1365 21.3154 18.5195C20.9034 17.7812 20.7041 16.944 20.7393 16.1001V16.0267C20.7292 15.2133 20.8939 14.4072 21.2224 13.6624C21.5403 12.9542 22.0098 12.3238 22.598 11.8154C23.2298 11.2773 23.9626 10.8695 24.7539 10.6157C25.6536 10.3231 26.5954 10.1794 27.5418 10.1903C28.7635 10.1951 29.9781 10.376 31.1477 10.7273C32.3482 11.0795 33.4885 11.6101 34.5302 12.301V12.3745L32.2629 16.4844L32.226 16.4477C31.6202 15.8572 30.8989 15.397 30.107 15.0958C29.2549 14.7611 28.3464 14.5916 27.4305 14.5962C27.2318 14.5978 27.0333 14.6103 26.836 14.6337C26.6215 14.6554 26.4131 14.718 26.2223 14.8181C26.0413 14.9131 25.8829 15.0456 25.7577 15.2068C25.6215 15.4086 25.5562 15.6496 25.5718 15.8922C25.5747 16.0091 25.6026 16.124 25.6534 16.2294C25.7043 16.3348 25.777 16.4282 25.8668 16.5035C26.0962 16.7096 26.3525 16.8838 26.6287 17.0215C26.967 17.1951 27.3147 17.3498 27.6702 17.485C28.0537 17.632 28.4316 17.7677 28.8038 17.8921C28.8855 17.8933 28.9666 17.9057 29.045 17.9288C29.132 17.9538 29.2124 17.9788 29.2869 18.0023" fill="#DA145E"></path><path d="M36.7967 10.487H41.7383V29.0013H36.7967V10.487ZM36.7967 3.0813H41.7383V7.41599H36.7967V3.0813Z" fill="#DA145E"></path><path d="M51.8141 13.6712H57.2786V17.7796H54.0821L51.8141 13.6712ZM57.2786 3.08061V7.4153H53.2265C52.9359 7.40203 52.6467 7.46305 52.3864 7.59255C52.1262 7.72204 51.9035 7.91571 51.7396 8.15514C51.3609 8.76492 51.1794 9.47582 51.2196 10.1917V28.9999H46.278V17.7796H43.5992V13.6712H46.2758V9.96836C46.2712 9.05239 46.4544 8.14513 46.8142 7.30216C47.5164 5.6397 48.8441 4.31716 50.513 3.61767C51.3715 3.25693 52.2948 3.07419 53.2265 3.08061H57.2786Z" fill="#DA145E"></path><path d="M72.0733 12.4164V16.5262H69.3229L67.0181 12.4164H72.0733ZM66.386 22.6698C66.3813 22.9397 66.4335 23.2077 66.5392 23.4564C66.6449 23.705 66.8018 23.9289 66.9996 24.1134C67.192 24.3051 67.421 24.4563 67.6731 24.5582C67.9252 24.66 68.1953 24.7104 68.4674 24.7063H72.0733V29.0013H68.4674C67.5307 29.0069 66.6026 28.8242 65.7384 28.4643C64.9031 28.1214 64.1438 27.6181 63.5036 26.9831C62.8681 26.3485 62.3575 25.6009 61.9983 24.7791C61.6236 23.9272 61.4336 23.0061 61.4407 22.0761V16.5218H58.7656V12.4164H61.4422V5.71008H66.3838L66.386 22.6698Z" fill="#DA145E"></path><path d="M82.2958 10.1901C83.5744 10.1833 84.8404 10.442 86.0131 10.9498C88.3102 11.9295 90.1405 13.7525 91.1243 16.0405C91.6361 17.2211 91.8956 18.4949 91.8862 19.7808C91.8886 20.4779 91.8144 21.1732 91.665 21.8541L91.6273 21.9276H82.1866L79.8036 18.1513H86.8664C86.5453 17.1533 85.9457 16.2671 85.1376 15.596C84.3414 14.933 83.3319 14.5782 82.2943 14.5968C81.6401 14.5935 80.993 14.7321 80.3981 15.0031C79.8182 15.263 79.2944 15.6326 78.8558 16.
808470912C78.4123 16.5611 78.0651 17.1126 77.8336 17.7149C77.5819 18.3681 77.4568 19.0629 77.4648 19.7625C77.471 20.3617 77.5844 20.9551 77.7996 21.5147C78.0207 22.1151 78.348 22.6712 78.7658 23.1567C79.196 23.6556 79.712 24.0741 80.2896 24.3925C80.904 24.7295 81.596 24.9011 82.2973 24.8906C82.9229 24.8979 83.5456 24.8041 84.1412 24.6129C84.7803 24.3657 85.3306 23.9335 85.721 23.372L85.7579 23.3353L85.8316 23.372L90.1434 25.2639L90.0696 25.3373C89.192 26.5704 88.0243 27.5704 86.6688 28.2496C85.3177 28.9411 83.8199 29.2999 82.3009 29.2959C81.0059 29.3042 79.7225 29.0521 78.5276 28.5545C77.3814 28.0821 76.3395 27.3902 75.4609 26.518C74.586 25.6452 73.8852 24.6151 73.3957 23.4822C72.886 22.3141 72.6265 21.053 72.6338 19.7794C72.6242 18.4934 72.8837 17.2196 73.3957 16.039C74.3795 13.7446 76.2184 11.9198 78.5254 10.9483C79.7172 10.439 81.0019 10.1804 82.2987 10.1887" fill="#DA145E"></path><path d="M113.744 3.08057V29.0006H108.762L108.8 19.7067C108.803 19.0293 108.657 18.3596 108.372 17.7443C108.1 17.1456 107.722 16.6002 107.257 16.1339C106.789 15.6709 106.233 15.3054 105.622 15.059C104.979 14.798 104.29 14.666 103.596 14.6704C102.907 14.6647 102.224 14.7969 101.588 15.059C100.981 15.3106 100.431 15.6823 99.9713 16.1515C99.5101 16.6244 99.1385 17.1764 98.8746 17.7811C98.605 18.4134 98.466 19.0935 98.466 19.7805C98.466 20.4676 98.605 21.1476 98.8746 21.78C99.3986 22.9936 100.37 23.9609 101.588 24.4829C102.221 24.7579 102.905 24.8969 103.596 24.8907C103.944 24.8911 104.292 24.8665 104.636 24.8172C104.972 24.7721 105.299 24.6729 105.603 24.5233H105.676L107.498 27.8559L107.46 27.8926C106.178 28.8538 104.604 29.3504 103 29.3003C101.738 29.3079 100.487 29.0663 99.3194 28.5895C98.1518 28.1127 97.0907 27.4102 96.1973 26.5224C95.3224 25.6497 94.6216 24.6196 94.1321 23.4867C93.6294 22.3164 93.3702 21.0567 93.3702 19.7838C93.3702 18.5109 93.6294 17.2513 94.1321 16.081C94.6218 14.948 95.3226 13.9177 96.1973 13.0445C97.0906 12.1567 98.1517 11.4542 99.3194 10.9775C100.487 10.5008 101.738 10.2594 103 10.2673C104.126 10.2101 105.249 10.4382 106.263 10.9303C107.277 11.4223 108.15 12.1623 108.799 13.0812V3.08057H113.744Z" fill="#DA145E"></path><path d="M132.472 0L118.747 36H121.274L135 0H132.472Z" fill="#DA145E"></path></svg></span></a></div></div><div class="flex items-center"><div class="flex items-center gap-3"><div class="h-[24px] w-[24px] animate-pulse rounded bg-gray-200"></div><div class="bg-black-rock/20 h-4 w-[2px]"></div><div class="flex flex-shrink-0 items-center"><div class="flex"><div class="hidden md:flex"><div class="h-[30px] w-[80px] animate-pulse rounded bg-gray-200"></div></div><div class="ml-[10px] hidden md:flex"><div class="h-[30px] w-[60px] animate-pulse rounded bg-gray-200"></div></div><div class="flex md:hidden"><div class="h-[30px] w-[60px] animate-pulse rounded bg-gray-200"></div></div></div></div></div></div></div></div><div class="hidden h-[100px] w-full flex-col border-b border-black-rock bg-[#F4F4F6] md:flex lg:hidden"><div class="relative flex h-[60px] items-center justify-between px-5"><div class="flex flex-shrink-0 items-center gap-2"><div class="h-[24px] w-[24px] animate-pulse rounded bg-gray-200"></div><div class="h-[24px] w-[24px] animate-pulse rounded bg-gray-200"></div></div><div class="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 pt-2"><a aria-label="Go to Homepage" class="ga-nav-logo m-0 flex focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cerise focus-visible:ring-offset-4 focus-visible:ring-offset-[#F6F6F6]" href="/"><span class="text-black-rock"><svg width="150" height="40" viewBox="0 0 150 40" fill="none" xmlns="http://www.w3.org/2000/svg" class="h-full w-full"><path d="M0 0L15.251 40H18.0595L2.80845 0H0Z" fill="#DA145E"></path><path d="M32.5426 20.004C33.4517 20.3061 34.2846 20.6147 35.0413 20.9298C35.7497 21.2173 36.4164 21.5978 37.0237 22.0612C37.576 22.4857 38.0274 23.0264 38.3455 23.6449C38.6778 24.3314 38.8407 25.087 38.8208 25.8489V25.8898C38.8681 26.8102 38.7049 27.7293 38.3436 28.5777C37.9824 29.4262 37.4324 30.1818 36.7352 30.7877C35.3442 31.9665 33.396 32.5562 30.8905 32.5567C29.3131 32.5551 27.748 32.2814 26.2644 31.7477C24.7366 31.2009 23.302 30.4243 22.0103 29.4449L21.9685 29.4032L22.0103 29.3616L24.8188 24.9453L24.8605 24.9861C25.6482 25.8375 26.6045 26.5171 27.669 26.982C28.7249 27.4363 29.864 27.6673 31.0142 27.
808476604C32.6385 27.6604 33.4509 27.1404 33.4514 26.1004C33.4501 25.858 33.3741 25.6219 33.2337 25.4239C33.0933 25.2259 32.8952 25.0757 32.6664 24.9934C32.0642 24.717 31.4431 24.4835 30.8077 24.2947C30.6816 24.2445 30.5498 24.2102 30.4152 24.1926C30.2804 24.1768 30.1485 24.1421 30.0234 24.0898C29.1974 23.8721 28.3713 23.6329 27.5453 23.3722C26.7527 23.1287 26.0009 22.7691 25.3146 22.3053C24.6532 21.852 24.0971 21.2627 23.6837 20.5771C23.226 19.7568 23.0045 18.8266 23.0437 17.8889V17.8073C23.0324 16.9035 23.2154 16.0078 23.5805 15.1804C23.9336 14.3935 24.4553 13.693 25.1089 13.1281C25.8109 12.5302 26.6251 12.0771 27.5043 11.7951C28.504 11.47 29.5504 11.3103 30.602 11.3224C31.9594 11.3278 33.3089 11.5288 34.6086 11.9191C35.9425 12.3105 37.2095 12.9 38.3668 13.6677V13.7494L35.8477 18.3159L35.8067 18.2751C35.1335 17.619 34.3321 17.1077 33.4523 16.773C32.5054 16.4011 31.496 16.2127 30.4783 16.2179C30.2575 16.2196 30.037 16.2335 29.8177 16.2596C29.5794 16.2837 29.3479 16.3532 29.1359 16.4645C28.9348 16.57 28.7588 16.7172 28.6196 16.8963C28.4683 17.1205 28.3957 17.3883 28.4131 17.6579C28.4164 17.7878 28.4473 17.9155 28.5038 18.0326C28.5603 18.1497 28.6411 18.2535 28.7409 18.3371C28.9957 18.5661 29.2805 18.7597 29.5875 18.9126C29.9633 19.1055 30.3496 19.2775 30.7446 19.4277C31.1707 19.591 31.5906 19.7417 32.0042 19.88C32.095 19.8813 32.1851 19.8951 32.2722 19.9208C32.3689 19.9485 32.4582 19.9763 32.541 20.0024" fill="#DA145E"></path><path d="M40.8852 11.6523H46.3759V32.2237H40.8852V11.6523ZM40.8852 3.42371H46.3759V8.24003H40.8852V3.42371Z" fill="#DA145E"></path><path d="M57.5712 15.1903H63.6429V19.7552H60.0912L57.5712 15.1903ZM63.6429 3.42291V8.23924H59.1406C58.8177 8.22449 58.4963 8.29229 58.2072 8.43618C57.918 8.58006 57.6706 8.79525 57.4884 9.06128C57.0677 9.73881 56.866 10.5287 56.9107 11.3241V32.2221H51.42V19.7552H48.4435V15.1903H51.4175V11.076C51.4125 10.0582 51.616 9.05015 52.0158 8.11352C52.796 6.26635 54.2712 4.79686 56.1256 4.01965C57.0795 3.61882 58.1053 3.41578 59.1406 3.42291H63.6429Z" fill="#DA145E"></path><path d="M80.0814 13.7959V18.3624H77.0255L74.4645 13.7959H80.0814ZM73.7622 25.1886C73.757 25.4886 73.815 25.7863 73.9324 26.0626C74.0499 26.3389 74.2241 26.5876 74.444 26.7926C74.6577 27.0056 74.9122 27.1737 75.1923 27.2868C75.4725 27.4 75.7726 27.456 76.0748 27.4514H80.0814V32.2237H76.0748C75.0341 32.2298 74.0028 32.0268 73.0427 31.6269C72.1146 31.246 71.2708 30.6868 70.5596 29.9812C69.8534 29.276 69.2861 28.4454 68.8869 27.5322C68.4707 26.5857 68.2596 25.5623 68.2674 24.529V18.3575H65.295V13.7959H68.269V6.34448H73.7597L73.7622 25.1886Z" fill="#DA145E"></path><path d="M91.4397 11.3224C92.8604 11.3148 94.2671 11.6022 95.5701 12.1665C98.1224 13.255 100.156 15.2805 101.249 17.8228C101.818 19.1346 102.106 20.5499 102.096 21.9787C102.098 22.7533 102.016 23.5257 101.85 24.2824L101.808 24.364H91.3185L88.6706 20.1681H96.5182C96.1614 19.0593 95.4952 18.0745 94.5973 17.3289C93.7127 16.5922 92.591 16.198 91.4381 16.2187C90.7112 16.215 89.9922 16.369 89.3311 16.6702C88.6868 16.959 88.1049 17.3695 87.6176 17.8791C87.1248 18.4012 86.739 19.014 86.4817 19.6832C86.2021 20.409 86.0631 21.181 86.072 21.9583C86.0788 22.6242 86.2048 23.2835 86.444 23.9053C86.6897 24.5724 87.0533 25.1903 87.5176 25.7297C87.9955 26.284 88.5689 26.749 89.2107 27.1028C89.8934 27.4772 90.6622 27.668 91.4414 27.6563C92.1366 27.6643 92.8284 27.5601 93.4901 27.3477C94.2004 27.073 94.8117 26.5928 95.2455 25.9689L95.2865 25.9281L95.3685 25.9689L100.159 28.071L100.077 28.1526C99.1023 29.5227 97.8048 30.6338 96.2986 31.3885C94.7974 32.1568 93.1332 32.5555 91.4455 32.551C90.0065 32.5602 88.5805 32.2801 87.2529 31.7273C85.9793 31.2024 84.8216 30.4336 83.8454 29.4644C82.8733 28.4947 82.0947 27.3501 81.5508 26.0914C80.9844 24.7935 80.6961 23.3922 80.7042 21.9771C80.6935 20.5483 80.9818 19.1329 81.5508 17.8212C82.6439 15.2718 84.6871 13.2442 87.2504 12.1649C88.5747 11.5989 90.002 11.3116 91.443 11.3208" fill="#DA145E"></path><path d="M126.382 3.42285V32.2228H120.847L120.889 21.8963C120.892 21.1437 120.73 20.3995 120.413 19.7159C120.111 19.0507 119.691 18.4447 119.174 17.9265C118.654 17.4121 118.037 17.0061 117.358 16.7322C116.643 16.4423 115.878 16.2955 115.106 16.3004C114.341 16.2941 113.583 16.4409 112.876 16.7322C112.201 17.0118 111.59 17.4247 111.079 17.9461C110.567 18.4715 110.154 19.0849 109.861 19.7567C109.561 20.4594 109.407 21.215 109.407 21.9784C109.407 22.7418 109.561 23.4973 109.861 24.2C110.443 25.5484 111.522 26.6232 112.876 27.2033C113.579 27.5088 114.339 27.6632 115.106 27.6563C115.493 27.6567 115.88 27.6294 116.263 27.5747C116.636 27.5246 116.999 27.4143 11
808477.336 27.2482H117.418L119.442 30.951L119.401 30.9918C117.975 32.0598 116.227 32.6115 114.444 32.5559C113.042 32.5643 111.652 32.2959 110.355 31.7661C109.058 31.2364 107.879 30.4557 106.886 29.4694C105.914 28.4996 105.135 27.3551 104.591 26.0963C104.033 24.796 103.745 23.3964 103.745 21.982C103.745 20.5677 104.033 19.1681 104.591 17.8677C105.135 16.6089 105.914 15.4641 106.886 14.4939C107.878 13.5074 109.058 12.7268 110.355 12.1972C111.652 11.6675 113.042 11.3994 114.444 11.4082C115.696 11.3446 116.943 11.598 118.07 12.1447C119.197 12.6915 120.167 13.5137 120.888 14.5347V3.42285H126.382Z" fill="#DA145E"></path><path d="M147.191 0L131.941 40H134.749L150 0H147.191Z" fill="#DA145E"></path></svg></span></a></div><div class="flex flex-shrink-0 items-center gap-4"><div class="flex flex-shrink-0 items-center"><div class="flex"><div class="hidden md:flex"><div class="h-[30px] w-[80px] animate-pulse rounded bg-gray-200"></div></div><div class="ml-[10px] hidden md:flex"><div class="h-[30px] w-[60px] animate-pulse rounded bg-gray-200"></div></div><div class="flex md:hidden"><div class="h-[30px] w-[60px] animate-pulse rounded bg-gray-200"></div></div></div></div></div></div><div class="flex h-[40px] items-center justify-center"><div class="flex justify-center space-x-6"><div class="h-4 w-16 animate-pulse rounded bg-gray-200"></div><div class="h-4 w-16 animate-pulse rounded bg-gray-200"></div><div class="h-4 w-16 animate-pulse rounded bg-gray-200"></div><div class="h-4 w-16 animate-pulse rounded bg-gray-200"></div><div class="h-4 w-16 animate-pulse rounded bg-gray-200"></div><div class="h-4 w-16 animate-pulse rounded bg-gray-200"></div><div class="h-4 w-16 animate-pulse rounded bg-gray-200"></div><div class="h-4 w-16 animate-pulse rounded bg-gray-200"></div></div></div></div><div class="hidden w-full border-b border-black-rock bg-[#F4F6F6] lg:block"><div class="container relative z-10 m-auto flex h-[106px] w-full max-w-full flex-col px-5 lg:max-w-[1260px]"><div class="flex w-full items-center justify-between pt-4"><div class="flex items-center gap-[10px]"><div class="h-[24px] w-[24px] animate-pulse rounded bg-gray-200"></div><div class="h-[24px] w-[24px] animate-pulse rounded bg-gray-200"></div></div><div class="absolute left-1/2 top-[10px] -translate-x-1/2"><a aria-label="Go to Homepage" class="ga-nav-logo m-0 flex focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cerise focus-visible:ring-offset-4 focus-visible:ring-offset-[#F6F6F6]" href="/"><span class="text-black-rock"><svg width="180" height="48" viewBox="0 0 180 48" fill="none" xmlns="http://www.w3.org/2000/svg" class="h-full w-full"><path d="M0 0L18.3012 48H21.6714L3.37014 0H0Z" fill="#DA145E"></path><path d="M39.0511 24.0049C40.1421 24.3674 41.1415 24.7376 42.0496 25.1158C42.8996 25.4609 43.6997 25.9175 44.4284 26.4735C45.0912 26.9828 45.6329 27.6318 46.0147 28.3739C46.4133 29.1977 46.6089 30.1045 46.585 31.0188V31.0678C46.6417 32.1723 46.4459 33.2752 46.0124 34.2933C45.5789 35.3115 44.9189 36.2183 44.0823 36.9453C42.4131 38.3598 40.0752 39.0674 37.0686 39.0681C35.1758 39.0661 33.2976 38.7377 31.5173 38.0973C29.684 37.4412 27.9624 36.5092 26.4124 35.3339L26.3622 35.2839L26.4124 35.234L29.7825 29.9344L29.8327 29.9834C30.7779 31.005 31.9254 31.8206 33.2028 32.3785C34.4699 32.9236 35.8369 33.2008 37.2171 33.1925C39.1662 33.1925 40.1411 32.5685 40.1417 31.3205C40.1401 31.0296 40.0489 30.7463 39.8804 30.5087C39.712 30.2712 39.4743 30.0909 39.1996 29.9922C38.477 29.6604 37.7317 29.3802 36.9693 29.1536C36.818 29.0934 36.6597 29.0523 36.4982 29.0312C36.3365 29.0122 36.1783 28.9706 36.0282 28.9078C35.0369 28.6465 34.0456 28.3595 33.0543 28.0467C32.1033 27.7545 31.2011 27.323 30.3775 26.7664C29.5838 26.2224 28.9165 25.5152 28.4205 24.6926C27.8713 23.7082 27.6055 22.592 27.6525 21.4668V21.3688C27.6389 20.2843 27.8585 19.2095 28.2966 18.2165C28.7204 17.2722 29.3464 16.4317 30.1307 15.7538C30.9731 15.0363 31.9501 14.4925 33.0052 14.1541C34.2048 13.7641 35.4606 13.5725 36.7224 13.5869C38.3513 13.5934 39.9707 13.8346 41.5303 14.303C43.131 14.7726 44.6514 15.48 46.0402 16.4013V16.4993L43.0172 21.9791L42.9681 21.9301C42.1602 21.1428 41.1985 20.5293 40.1427 20.1277C39.0065 19.6814 37.7953 19.4553 36.5739 19.4616C36.309 19.4636 36.0444 19.4803 35.7813 19.5115C35.4953 19.5405 35.2175 19.6239 34.9631 19.7574C34.7218 19.884 34.5105 20.0607 34.3436 20.2756C34.162 20.5447 34.0749 20.866 34.0958 21.1896C34.0997 21.3454 34.1367 21.4986 34.2046 21.6391C34.2724 21.7797 34.3694 21.9042 34.4891 22.0046C34.7949 22.2794 35.1366 22.5117 35.505 22.6952C35.956 22.9267 36.4196 23.133 36.8935 23.3133C37.4049 23.5092 37.9088 23.6901 38.4051 23.856C38.514 23.8577 38.6222 23.8741 38.7266 23.905C38.8427 23.9383 38.9499 23.9716 39.0492 24.0029" fill="#DA145E"></path><path d="M49.0622 13.9827H55.6511V38.6684H49.0622V13.9827ZM49.0622 4.10843H55.6511V9.88802H49.0622V4.10843Z" fill="#DA145E"></path><path d="M69.0854 18.2282H76.3715V23.7061H72.1094L69.0854 18.2282ZM76.3715 4.10743V9.88703H70.9686C70.5812 9.86933 70.1956 9.95069 69.8486 10.1234C69.5015 10.296 69.2046 10.5542 68.9861 10.8735C68.4812 11.6865 68.2392 12.6344 68.2928 13.5889V38.6665H61.704V23.7061H58.1322V18.2282H61.701V13.2911C61.6949 12.0698 61.9392 10.8601 62.4189 9.73617C63.3552 7.51956 65.1254 5.75617 67.3507 4.82352C68.4953 4.34253 69.7264 4.09888 70.9686 4.10743H76.3715Z" fill="#DA145E"></path><path d="M96.0977 16.5551V22.0349H92.4306L89.3574 16.5551H96.0977ZM88.5146 30.2263C88.5084 30.5863 88.578 30.9436 88.7189 31.2751C88.8599 31.6066 89.069 31.9051 89.3328 32.1512C89.5893 32.4067 89.8946 32.6084 90.2308 32.7442C90.567 32.88 90.9271 32.9472 91.2898 32.9417H96.0977V38.6684H91.2898C90.041 38.6758 88.8034 38.4322 87.6512 37.9523C86.5375 37.4952 85.525 36.8241 84.6715 35.9775C83.8241 35.1313 83.1434 34.1345 82.6643 33.0387C82.1648 31.9028 81.9115 30.6748 81.9209 29.4348V22.0291H78.3541V16.5551H81.9229V7.61338H88.5117L88.5146 30.2263Z" fill="#DA145E"></path><path d="M109.728 13.5869C111.433 13.5778 113.121 13.9227 114.684 14.5998C117.747 15.9061 120.187 18.3367 121.499 21.3874C122.181 22.9616 122.527 24.6599 122.515 26.3745C122.518 27.304 122.419 28.2309 122.22 29.1389L122.17 29.23
8084769H109.582L106.405 24.2018H115.822C115.394 22.8712 114.594 21.6895 113.517 20.7948C112.455 19.9107 111.109 19.4377 109.726 19.4625C108.853 19.458 107.991 19.6429 107.197 20.0042C106.424 20.3508 105.726 20.8435 105.141 21.455C104.55 22.0815 104.087 22.8168 103.778 23.6199C103.443 24.4908 103.276 25.4172 103.286 26.35C103.295 27.1491 103.446 27.9402 103.733 28.6864C104.028 29.4869 104.464 30.2284 105.021 30.8757C105.595 31.5409 106.283 32.0989 107.053 32.5234C107.872 32.9727 108.795 33.2016 109.73 33.1876C110.564 33.1972 111.394 33.0722 112.188 32.8173C113.04 32.4877 113.774 31.9114 114.295 31.1628L114.344 31.1138L114.442 31.1628L120.191 33.6852L120.093 33.7832C118.923 35.4273 117.366 36.7606 115.558 37.6663C113.757 38.5883 111.76 39.0666 109.735 39.0612C108.008 39.0723 106.297 38.7362 104.703 38.0728C103.175 37.4429 101.786 36.5204 100.614 35.3574C99.448 34.1937 98.5137 32.8202 97.8609 31.3097C97.1813 29.7523 96.8353 28.0707 96.8451 26.3726C96.8323 24.658 97.1782 22.9595 97.8609 21.3855C99.1727 18.3263 101.625 15.8931 104.701 14.5979C106.29 13.9188 108.002 13.5739 109.732 13.585" fill="#DA145E"></path><path d="M151.658 4.10742V38.6674H145.016L145.067 26.2756C145.07 25.3724 144.875 24.4794 144.496 23.6591C144.133 22.8608 143.629 22.1336 143.009 21.5118C142.385 20.8945 141.644 20.4073 140.829 20.0787C139.971 19.7307 139.053 19.5546 138.128 19.5605C137.209 19.5529 136.299 19.7291 135.451 20.0787C134.641 20.4141 133.907 20.9097 133.295 21.5353C132.68 22.1658 132.185 22.9019 131.833 23.7081C131.473 24.5513 131.288 25.458 131.288 26.374C131.288 27.2901 131.473 28.1968 131.833 29.04C132.532 30.6581 133.826 31.9479 135.451 32.6439C136.295 33.0106 137.207 33.1958 138.128 33.1876C138.592 33.1881 139.056 33.1553 139.515 33.0896C139.963 33.0295 140.398 32.8971 140.803 32.6978H140.902L143.331 37.1412L143.281 37.1902C141.57 38.4718 139.472 39.1338 137.333 39.0671C135.65 39.0772 133.983 38.7551 132.426 38.1194C130.869 37.4836 129.454 36.5469 128.263 35.3633C127.097 34.1996 126.162 32.8261 125.509 31.3156C124.839 29.7552 124.494 28.0756 124.494 26.3784C124.494 24.6812 124.839 23.0017 125.509 21.4413C126.162 19.9306 127.097 18.5569 128.263 17.3926C129.454 16.2089 130.869 15.2722 132.426 14.6366C133.983 14.001 135.651 13.6792 137.333 13.6898C138.835 13.6135 140.332 13.9176 141.684 14.5737C143.037 15.2298 144.2 16.2165 145.066 17.4416V4.10742H151.658Z" fill="#DA145E"></path><path d="M176.629 0L158.329 48H161.699L180 0H176.629Z" fill="#DA145E"></path></svg></span></a></div><div class="flex items-center"><div class="flex flex-shrink-0 items-center"><div class="flex"><div class="hidden md:flex"><div class="h-[30px] w-[80px] animate-pulse rounded bg-gray-200"></div></div><div class="ml-[10px] hidden md:flex"><div class="h-[30px] w-[60px] animate-pulse rounded bg-gray-200"></div></div><div class="flex md:hidden"><div class="h-[30px] w-[60px] animate-pulse rounded bg-gray-200"></div></div></div></div></div></div><div class="flex flex-1 items-end justify-center pb-1"><div class="flex justify-center space-x-6"><div class="h-4 w-16 animate-pulse rounded bg-gray-200"></div><div class="h-4 w-16 animate-pulse rounded bg-gray-200"></div><div class="h-4 w-16 animate-pulse rounded bg-gray-200"></div><div class="h-4 w-16 animate-pulse rounded bg-gray-200"></div><div class="h-4 w-16 animate-pulse rounded bg-gray-200"></div><div class="h-4 w-16 animate-pulse rounded bg-gray-200"></div><div class="h-4 w-16 animate-pulse rounded bg-gray-200"></div><div class="h-4 w-16 animate-pulse rounded bg-gray-200"></div></div></div></div></div><main class="w-100 overflow-x-hidden bg-mono-05 pt-[65px] text-black-rock"><section data-homepage-section="topBanner"></section><section data-homepage-section="hero" class="pb-16"><section class="w-full bg-mono-05 px-5 pt-10"><div class="mx-auto flex w-full max-w-content-mobile flex-wrap gap-4 md:max-w-content md:gap-4 lg:max-w-container mdDesktop:max-w-container"><div class="order-1 w-full md:order-2 md:w-[calc(50%-8px)] md:flex-none lg:w-auto lg:min-w-[316px] lg:flex-1 lg:basis-0 mdDesktop:w-auto mdDesktop:min-w-[316px] mdDesktop:flex-1 mdDesktop:basis-0"><article class="group flex w-full flex-col items-center gap-4 text-center"><div class="flex w-full flex-col items-center gap-2"><div class="flex flex-wrap items-center justify-center gap-1"><div class="flex items-center justify-center bg-pro-blue py-1 rounded-[12px] px-2 h-[20px] w-[36px]" data-testid="pro-tag"><p class="text-white font-bold text-[12px] leading-[1.3]">Pro</p></div><a class="pointer-events-auto text-brand-neutral underline decoration-current underline-offset-2 transition-colors font-emphasis-14 hover:bg-mono-10 hover:underline shrink-0 whitespace-nowrap" href="https://sifted.eu/sector/fintech/">Fintech</a><span class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-brand-neutral font-emphasis-14">Exclusive</span></div><a aria-label="Exclusive: Revolut customers hit by fresh security breach" class="flex w-full flex-col items-center gap-4" href="https://sifted.eu/articles/exclusive-revolut-customers-fresh-hack/"><div><div class="transition-colors group-hover:bg-pro-10"><h1 class="font-recklessBold text-accent-26 leading-tight text-brand-neutral transition-colors text-center">Exclusive: Revolut customers hit by fresh security breach</h1></div><p class="mt-2 text-center text-regular-16 leading-[1.3] text-black-rock">The broker the fintech uses to trade US stocks suffered a security incident, emails seen by Sifted show</p></div><div class="relative aspect-[4/3] w-full overflow-hidden bg-gray-200"><img alt="revolut hack" fetchpriority="high" width="400" height="300" decoding="async" data-nimg="1" class="h-full w-full object-cover transition-opacity group-hover:opacity-90" style="color:transparent;background-size:cover;background-position:50% 50%;background-repeat:no-repeat;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 400 300'%3E%3Cfilter id='b' color-interpolation-filters='
80847sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='none' style='filter: url(%23b);' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII'/%3E%3C/svg%3E")" sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw" srcSet="https://images.sifted.eu/cdn-cgi/image/width=256,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 256w, https://images.sifted.eu/cdn-cgi/image/width=384,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 384w, https://images.sifted.eu/cdn-cgi/image/width=640,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 640w, https://images.sifted.eu/cdn-cgi/image/width=750,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 750w, https://images.sifted.eu/cdn-cgi/image/width=828,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 828w, https://images.sifted.eu/cdn-cgi/image/width=1080,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 1080w, https://images.sifted.eu/cdn-cgi/image/width=1200,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 1200w, https://images.sifted.eu/cdn-cgi/image/width=1920,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 1920w, https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 2048w, https://images.sifted.eu/cdn-cgi/image/width=3840,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png 3840w" src="https://images.sifted.eu/cdn-cgi/image/width=3840,quality=75,fit=cover,format=auto,gravity=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png"/></div></a></div></article></div><div class="order-2 w-full md:order-1 md:w-[calc(50%-8px)] md:flex-none lg:w-auto lg:min-w-[316px] lg:flex-1 lg:basis-0 mdDesktop:w-auto mdDesktop:min-w-[316px] mdDesktop:flex-1 mdDesktop:basis-0"><div class="flex w-full flex-col gap-2"><article class="group"><div class="flex flex-col gap-2 border-l-[1px] border-sifted h-[152px] p-4 transition-colors"><div class="flex flex-wrap items-center gap-1"><a class="pointer-events-auto text-brand-neutral underline decoration-current underline-offset-2 transition-colors font-emphasis-14 hover:bg-mono-10 hover:underline shrink-0 whitespace-nowrap" href="https://sifted.eu/sector/venture-capital/">Venture capital</a><span class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-brand-neutral font-emphasis-14">Podcast</span></div><a aria-label="Is New York warming to European tech?" class="flex flex-col gap-2" href="https://sifted.eu/articles/new-york-podcast/"><div class="transition-colors group-hover:bg-sifted-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors">Is New York warming to European tech?</h3></div><p class="line-clamp-2 text-regular-16 text-brand-neutral">Anne Sraders joins host Freya Pratty on this week's Sifted podcast</p></a></div></article><article class="group"><div class="flex flex-col gap-2 border-l-[1px] border-pro h-[152px] p-4 transition-colors"><div class="flex flex-wrap items-center gap-1"><div class="flex items-center justify-center bg-pro-blue py-1 rounded-[12px] px-2 h-[20px] w-[36px]" data-testid="pro-tag"><p class="text-white font-bold text-[12px] leading-[1.3]">Pro</p></div><a class="pointer-events-auto text-brand-neutral underline decoration-current underline-offset-2 transition-colors font-emphasis-14 hover:bg-mono-10 hover:underline shrink-0 whitespace-nowrap" href="https://sifted.eu/sector/venture-capital/">Venture capital</a><span class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-brand-neutral font-emphasis-14">Interview</span></div><a aria-label="Northern Gritstone CEO: Exiting to US acquirers isnât a failure" class="flex flex-col gap-2" href="https://sifted.eu/articles/northern-gritstone-ceo-exiting-to-us-acquirers-isnt-a-failure/"><div class="transition-colors group-hover:bg-pro-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors">Northern Gritstone CEO: Exiting to US acquirers isnât a failure</h3></div><p class="line-clamp-2 text-regular-16 text-brand-neutral">Duncan Johnson talks scaling the north of England tech ecosystem, Gritstoneâs new San Francisco office and why portfolio exits are coming</p></a></div></article><div class="flex flex-col gap-2 border-l p-4 border-sifted bg-sifted-10 h-[152px] justify-center" data-testid="callout"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral">Meet DACH & CEEâs top 100</h3><p class="line-clamp-2 text-regular-16 text-brand-neutral">Explore the 100 fastest-growing startups scaling across DACH and Central & Eastern Europe.</p><a href="https://sifted.eu/intelligence/reports/sifted-100-dach-cee-2026" class="inline-flex items-center gap-1 font-emphasis-14 text-sifted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sifted transition-colors" aria-label="See the ranking"><span class="inline-flex items-center gap-1 px-1 py-0.5 underline transition-colors hover:bg-sifted-opacity-10 active:bg-sifted-20 hover:underline"><span>See the ranking</span></span></a></div></div></div><div class="order-3 flex w-full flex-col justify-between gap-4 md:flex-row lg:w-auto lg:min-w-[316px] lg:flex-1 lg:basis-0 lg:flex-col mdDesktop:w-auto mdDesktop:min-w-[316px] mdDesktop:flex-1 mdDesktop:basis-0 mdDesktop:flex-col"><div class="order-2 w-full md:order-1 md:w-auto md:flex-1 lg:w-full mdDesktop:w-full"><div class="flex w-full flex-col gap-2"><a class="group block" href="https://sifted.eu/articles/browse-sifteds-company-coverage/"><div class="flex flex-col gap-1 border-l-[1px] border-pro pl-[8px] transition-colors"><div class="transition-colors group-hover:bg-pro-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors flex-1">Browse Sifted'
80847s company coverage</h3></div></div></a><a class="group block" href="https://sifted.eu/articles/dtcp-first-close-defence-fund-invest-europe-growth/"><div class="flex flex-col gap-1 border-l-[1px] border-sifted pl-[8px] transition-colors"><div class="transition-colors group-hover:bg-sifted-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors flex-1">Growth investor DTCP raises â¬455m first close for defence fund, plots future funds</h3></div></div></a><a class="group block" href="https://sifted.eu/articles/simon-kohl-latent-labs-deepmind-founders-factory/"><div class="flex flex-col gap-1 border-l-[1px] border-pro pl-[8px] transition-colors"><div class="transition-colors group-hover:bg-pro-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors flex-1">âPushing the frontier is best done outsideâ: DeepMind alum Simon Kohl on leaving Big Tech</h3></div></div></a><a class="group block" href="https://sifted.eu/articles/claude-founder-house-london/"><div class="flex flex-col gap-1 border-l-[1px] border-sifted pl-[8px] transition-colors"><div class="transition-colors group-hover:bg-sifted-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors flex-1">Anthropic: We're not trying to eat startups' lunch</h3></div></div></a></div></div><div class="relative order-1 mx-auto flex w-fit max-w-full shrink-0 flex-col items-center justify-end gap-0 p-2 md:order-2 md:mx-0 lg:mx-auto lg:w-full lg:max-w-[316px] mdDesktop:mx-auto mdDesktop:w-full mdDesktop:max-w-[316px]"><div class="flex items-center justify-center"></div></div></div></div></section></section><section data-homepage-section="pro"><section class="w-full bg-mono-05 px-5 pb-16 pt-0 md:px-5 lg:px-0 mdDesktop:px-5"><div class="mx-auto w-full max-w-content-mobile md:max-w-content lg:max-w-container mdDesktop:max-w-container"><div class="flex flex-col items-center justify-start border-b pb-4 border-brand-pro mb-4"><div class="flex w-full flex-row flex-wrap items-center justify-between gap-4"><h3 class="font-emphasis-18 text-brand-pro">Sifted Pro</h3><div>
80847<a href="/sifted-pro" class="inline-flex items-center gap-1 font-emphasis-14 text-pro focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-pro transition-colors ga-briefing-pro-link w-fit" aria-label="Find out more"><span class="inline-flex items-center gap-1 px-1 py-0.5 underline transition-colors hover:bg-pro-opacity-10 active:bg-pro-20 hover:underline"><span>Find out more</span></span></a></div></div></div><div class="-mx-5 flex snap-x snap-mandatory gap-4 overflow-x-auto px-5 scrollbar-hide md:mx-0 md:grid md:snap-none md:grid-cols-2 md:overflow-visible md:px-0 mdDesktop:grid-cols-4 lg:grid-cols-4"><div class="flex-shrink-0 snap-start w-[calc(100vw-80px)] md:w-auto md:flex-shrink h-full"><div class="flex flex-col items-start justify-between gap-4 bg-[radial-gradient(50%_50%_at_50%_50%,rgba(189,189,255,0.95)_0%,rgba(244,244,246,0.95)_100%)] p-4 h-full" data-testid="pro-card-0"><div class="flex w-full flex-col gap-[14px]"><h3 class="font-recklessBold text-accent-18 text-brand-neutral">Intelligence Briefings</h3><p class="text-regular-16 text-brand-neutral">Access investment grade research on Europeâs most exciting tech sectors and high-growth startups.</p></div><div class="flex w-full flex-col gap-4"><div class="relative aspect-[2/1] w-full overflow-hidden rounded-lg"><img alt="Intelligence Briefings" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent;background-size:cover;background-position:50% 50%;background-repeat:no-repeat;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' %3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='none' style='filter: url(%23b);' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAMCAYAAAB4MH11AAACDUlEQVR42k2T227cMAxERUq+bNC3/v/39bEJ2mZ3bUvsGclO1sBAlkzOcEi5xB5pB4/HM93vj/QAz21PrUVyL2me57Qut7SsYPGUc+pPrYk8YQM7+4NT5RgxGXgy81QiOA77QhOadQEliKi2xH6Qmtht7K+zWkecnsEXHe7tEhAyQQ5sJFEQBZxVDdhJrPXbwYBEFGum2NSddgck3IDXmoHn4/C87+bHoTrjdIIngznlKKWbcOVAnLetryZBqg5pe45G9RWxkIOfCoYiI1IgLyRlJSmlViSikd4qsRWBOJ2oCCe2SEjv6kp3bNSDZcWVl176Wb0EQJj6WIqImyi1rdOUqC4FOQ1SxRtAwDJnEzETxBl+x4FdM7DRJi8ETgjMz2dTRek4usB2jT/CK/3tc1QbKYrVWa0wv4X2rWBGpACXwA1IfSFgJQnEsu9NZwyrUmN9Zm+Z3mrwiKS9D6YJjhuaTo+Rhy9mSl4hZ7VcCJQtCS0krNyGG1WfApqBuwZWCkFHaAYbyXewyyEkEzOn6rxBfOD2GGta1CoJfAIJtPiaB1Ot9KI22lEfCP7h/R3B33z/GMTjug7kdN4yteUHLt7OVhUJ/DoFVvLe+Mi1jVneAa2IT/Yi/xg/0De53oeA9TvPYA/F8uU9nY8Enif+QSAwk5h0pXGku/SX9/36IV8fs1cn+itb/82vcz3/AW4k8Mu9XQ3WAAAAAElFTkSuQmCC'/%3E%3C/svg%3E")" sizes="(max-width: 640px) calc(100vw - 40px), (max-width: 768px) calc(50vw - 20px), (max-width: 1024px) calc(33.33vw - 16px), calc(25vw - 8px)" srcSet="https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=16,height=8/60124/1776343929-briefings-1.png 16w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=32,height=16/60124/1776343929-briefings-1.png 32w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=48,height=24/60124/1776343929-briefings-1.png 48w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=64,height=32/60124/1776343929-briefings-1.png 64w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=96,height=48/60124/1776343929-briefings-1.png 96w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=128,height=64/60124/1776343929-briefings-1.png 128w, https://images-datocm
80847s.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=256,height=128/60124/1776343929-briefings-1.png 256w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=384,height=192/60124/1776343929-briefings-1.png 384w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=640,height=320/60124/1776343929-briefings-1.png 640w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=750,height=375/60124/1776343929-briefings-1.png 750w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=828,height=414/60124/1776343929-briefings-1.png 828w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=1080,height=540/60124/1776343929-briefings-1.png 1080w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=1200,height=600/60124/1776343929-briefings-1.png 1200w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=1920,height=960/60124/1776343929-briefings-1.png 1920w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=2048,height=1024/60124/1776343929-briefings-1.png 2048w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=3840,height=1920/60124/1776343929-briefings-1.png 3840w" src="https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=3840,height=1920/60124/1776343929-briefings-1.png"/></div><a href="https://sifted.eu/pro/briefings" class="inline-flex items-center gap-1 font-emphasis-14 text-black-rock focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-black-rock transition-colors" aria-label="Explore sector research"><span class="inline-flex items-center gap-1 px-1 py-0.5 underline transition-colors hover:bg-black-rock-opacity-10 active:bg-mono-20 hover:underline"><span>Explore sector research</span></span></a></div></div></div><div class="flex-shrink-0 snap-start w-[calc(100vw-80px)] md:w-auto md:flex-shrink h-full"><div class="flex flex-col items-start justify-between gap-4 bg-[radial-gradient(50%_50%_at_50%_50%,rgba(189,189,255,0.95)_0%,rgba(244,244,246,0.95)_100%)] p-4 h-full" data-testid="pro-card-1"><div class="flex w-full flex-col gap-[14px]"><h3 class="font-recklessBold text-accent-18 text-brand-neutral">Deals Tracker</h3><p class="text-regular-16 text-brand-neutral">Track Europeâs dealmaking in real-time to identify investment opportunities and potential clients.</p></div><div class="flex w-full flex-col gap-4"><div class="relative aspect-[2/1] w-full overflow-hidden rounded-lg"><img alt="Deals Tracker" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent;background-size:cover;background-position:50% 50%;background-repeat:no-repeat;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' %3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='none' style='filter: url(%23b);' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAMCAMAAABP7o1HAAAC4lBMVEWvq/Svq/WwrPSwrPexrfmxrfqyrvqyrvuzrvWzr/uzr/y0sPO0sPS0sP21sfO1sfa2svi2svm2sv63s/W3s/q3s/u3s/+4tPq4tPu4tP+5tfq5tfy6tve7t/28uP+9ufK9ufO9uf29uf++uvK+uvW+uvq/u/jAvPPAvPfAvPjAvPnAvP/BvfjBvfnBvfnBvfrBvf3Bvf/Dv/XDv/vEwPzEwP/GwvjGwv7Gwv/Hw/7JxfHJxfHJxfLKxvTKxvvLx/LLx/XLx/bLx/fLx/fMyPfMyPjNyPjNyfjNyf3OyvTOyvnOyv/QzPvRzfbSzvzTz/3U0O/U0PnV0e/V0fHW0vLW0vTW0vXX0vDX0/TX0/XX0/XX0/vY1PbY1PbY1PbY1PfY1PfZ1PzZ1fLa1vfc2PTc2Pne2vrf2u/f2+7f2/Df2/ff2/vg3O/g3PHg3PLg3PPh3fPh3fPh3fTi3vTi3vXi3vnj3+7j3/Hj3/Xj3/rk4O7k4O/k4PXl4e7l4fDm4e/m4u7m4u7m4vDm4vPm4vfn4+/n4/Dn4/Hn4/Lo5O7o5O/o5O/o5PLo5PPo5PTo5Pnp5fDp5fDp5fHp5fLp5fPp5fTp5fXp5fnq5e/q5u7q5u/q5u/q5u/q5vDq5vDq5vDq5vDq5vHq5vLq5vLq5vTq5vXq5vbr5vDr5+/r5+/r5/Dr5/Dr5/Hr5/Hr5/Lr5/Lr5/Pr5/Tr5/Xr5/js5/Hs5/Hs6PDs6PDs6PHs6PHs6PLs6PPs6PPs6PPs6PTs6PTs6PTs6Pnt6PLt6fLt6fLt6fPt6fPt6fPt6fTt6fTt6fTt6fXt6fXt6fbu6fDu6fLu6fPu6vHu6vHu6vLu6vTu6vTu6vTu6vXv6vfv6/Tv6/Xv6/jw7PLw7PPw7PTw7PTw7PXx7Pfx7fPx
808477fXx7fny7vXy7vby7vby7vfy7vrz7vnz7/Xz7/Xz7/bz7/j08Pj08Pr18ff18fn28vf28vj38/gOfrPgAAAA9nRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyMAACMjACMiIiMjACIhIiIAACAgHgAeHQAcLzAwMBwuLy8uLy8vLS4aLCsZKiooJx0nHB0cGRkbGxgZJhYZGhkaJRgVFhMSBAMDExECAgAAAAEAAAARAAAAEAAAAAAAAAABAAAAAAAAAAkACAAAAAAABwAAAAAAAAoUFBUWAAYHFRUABwAAABMTJAokBxYAEwAAAAARFBUjBSIWAAgRAAgOAAATIAAPFwkKDQkLABEKHRUhBAAZGwAACgAADxUDEAoAHxQAFAIOAAAADB0CAAwACgsbCRmjN+qLAAAA8ElEQVR42g2OP0/DMBDF784Xp22atgIJECA2xMTAt+D7jzDCQIegJm2MY9+d8fae9P78+C2FJcRkSEgOFQyAfMOOW25mcl7RITNoUQDPVPW1Bt/PIlVWX0TAsUdHfJPWIiEjomMHZgY1QrVyJ3OyOVtd8lRMpbBrCRt+n76Gy0YKcT0UMC3k1qtuxa/p5edzCIhNj4dTiRlg+/TY1SPnaPsxYt9fcSmX07nA/UO3arnye94j7bqNL5OhYCUoGlk162h/FUW2JR5/k4FcnjctW04xDhOe590E0zEt5iTy7Z6XnEIYkzTjdDhFiZpZ8ZuWf+gzgmshlcapAAAAAElFTkSuQmCC'/%3E%3C/svg%3E")" sizes="(max-width: 640px) calc(100vw - 40px), (max-width: 768px) calc(50vw - 20px), (max-width: 1024px) calc(33.33vw - 16px), calc(25vw - 8px)" srcSet="https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=16,height=8/60124/1776343990-deals.png 16w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=32,height=16/60124/1776343990-deals.png 32w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=48,height=24/60124/1776343990-deals.png 48w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=64,height=32/60124/1776343990-deals.png 64w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=96,height=48/60124/1776343990-deals.png 96w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=128,height=64/60124/1776343990-deals.png 128w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=256,height=128/60124/1776343990-deals.png 256w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=384,height=192/60124/1776343990-deals.png 384w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=640,height=320/60124/1776343990-deals.png 640w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=750,height=375/60124/1776343990-deals.png 750w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=828,height=414/60124/1776343990-deals.png 828w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=1080,height=540/60124/1776343990-deals.png 1080w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=1200,height=600/60124/1776343990-deals.png 1200w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=1920,height=960/60124/1776343990-deals.png 1920w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=2048,height=1024/60124/1776343990-deals.png 2048w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=3840,height=1920/60124/1776343990-deals.png 3840w" src="https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=3840,height=1920/60124/1776343990-deals.png"/></div><a href="https://sifted.eu/deals-tracker" class="inline-flex items-center gap-1 font-emphasis-14 text-black-rock focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-black-rock transition-colors" aria-label="Track the latest deals"><span class="inline-flex items-center gap-1 px-1 py-0.5 underline transition-colors hover:bg-black-rock-opacity-10 active:bg-mono-20 hover:underline"><span>Track the latest deals</span></span></a></div></div></div><div class="flex-shrink-0 snap-start w-[calc(100vw-80px)] md:w-auto md:flex-shrink h-full"><div class="flex flex-col items-start justify-between gap-4 bg-[radial-gradient(50%_50%_at_50%_50%,rgba(189,189,255,0.95)_0%,rgba(244,244,246,0.95)_100%)] p-4 h-full" data-testid="pro-card-2"><div class="flex w-full flex-col gap-[14px]"><h3 class="font-recklessBold text-accent-18 text-brand-neutral">Investor rankings</h3><p class="text-regular-16 text-brand-neutral">Benchmark investor activity and identify active investors for relationship-building.</p></div><div class="flex w-full flex-col gap-4"><div class="relative aspect-[2/1] w-full overflow-hidden rounded-lg"><img alt="Investor rankings" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent;background-size:cover;background-position:50% 50%;background-repeat:no-repeat;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' %3E%3Cfilter id='b' color-interpolation-filters='
80847sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='none' style='filter: url(%23b);' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAMCAMAAABP7o1HAAACf1BMVEWxrfCxrfGyrvKyrvOzr/Czr/Ozr/S0sPO1sfG1sfO3s/C3s/G3s/K3s/O3s/S4tPO4tPS5tPG5tfO6tvO6tva7t/K8uPS8uPa+uvS+uvm/u/a/u/nBvfHBvfLBvfPCvffCvvPCvvTCvvvCvvzDv/LDv/nDv/zEv/PFwfPFwfTFwfnFwf/Hw/zIxPXIxPbIxPvIxP/Jxf3Kxv/Lxv/MyPjNyfPNyfTNyf/OyvPOyvTOyvXPy/PPy/rPy//QzPvRzfTSzfzSzvTTz/3U0PXU0P7V0fbX0v/X0/jY1PnY1P/a1fTa1vPa1vTa1vXa1vbb1/Tb1/vc2PTc2PXe2vbe2v3f2/Xf2/7f2//h3Pbh3fbh3fji3vji3vni3vvi3v/j3/Tj3/Xj3/bj3/jj3/vj3/zj3//k3/bk4PPk4Pbk4Pfk4Pnk4Prk4Pvl4fTl4fbl4fvl4fzm4fzm4vbm4vjm4vrm4vvn4vfn4/Xn4/nn4/vn4/zn4/3o5PXo5Pfo5Prp5fPp5fTp5fXp5frp5fvp5fzp5f7q5vTq5vbq5vjq5vrq5v7q5v/r5vjr5/Tr5/Xr5/br5/fr5/jr5/nr5/vr5//s5/rs6PXs6Pfs6Pjs6Pns6Prs6P7s6P/t6Pjt6fTt6fft6fnt6fzt6f/u6vXu6vbu6vju6vvu6v3u6v/v6vjv6/nv6/rv6//w6/vw7Pbw7P3w7P7w7P/x7Pnx7fjx7frx7fzx7f7x7f/y7vny7v/z7/jz7/vz7/3z7/707//08Pz08P308P/18fv18f/28vz28v328v/38/v38//49P/59f759f/69v/79v/79/779//8+P/9+f/++v//+////P8tiwk+AAAA1XRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGUGwwAAAA4UlEQVR42hXPWU5DMQyFYTtxpobhVoInYBNsgv3vASHUQWpvxVUSJzHu86dfR4c+J5eNG8+JMEQEiEKkQJSbRfNnnMAEmSqBbMjO0MOYbUs8KyBoAhLJaWLovZaWeu8DVWSItZ5sJEtf2+/xp/UGYjURBQz7ZUn0Md4ux+9rKxCsAnjKry9LdJQmOZ8PK6LHdJfnXc7JGjKgY3kPiNFrAs7F4JGQROaYW6nsB0eFGtA6bJZG72U9nZjJeKcgYffEKRriUW/H86ob0SHqc+eu7TF5GlzKebtVMQ3DfTwxHrD5f1E/cwRyA1rkAAAAAElFTkSuQmCC'/%3E%3C/svg%3E")" sizes="(max-width: 640px) calc(100vw - 40px), (max-width: 768px) calc(50vw - 20px), (max-width: 1024px) calc(33.33vw - 16px), calc(25vw - 8px)" srcSet="https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=16,height=8/60124/1776344024-ranmkings.png 16w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=32,height=16/60124/1776344024-ranmkings.png 32w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=48,height=24/60124/1776344024-ranmkings.png 48w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=64,height=32/60124/1776344024-ranmkings.png 64w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=96,height=48/60124/1776344024-ranmkings.png 96w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=128,height=64/60124/1776344024-ranmkings.png 128w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=256,height=128/60124/1776344024-ranmkings.png 256w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=384,height=192/60124/1776344024-ranmkings.png 384w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=640,height=320/60124/1776344024-ranmkings.png 640w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=750,height=375/60124/1776344024-ranmkings.png 750w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=828,height=414/60124/1776344024-ranmkings.png 828w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=1080,height=540/60124/1776344024-ranmkings.png 1080w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=1200,height=600/60124/1776344024-ranmkings.png 1200w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=1920,height=960/60124/1776344024-ranmkings.png 1920w, https://images-datocm
80847s.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=2048,height=1024/60124/1776344024-ranmkings.png 2048w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=3840,height=1920/60124/1776344024-ranmkings.png 3840w" src="https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=3840,height=1920/60124/1776344024-ranmkings.png"/></div><a href="https://sifted.eu/rankings" class="inline-flex items-center gap-1 font-emphasis-14 text-black-rock focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-black-rock transition-colors" aria-label="Find active investors"><span class="inline-flex items-center gap-1 px-1 py-0.5 underline transition-colors hover:bg-black-rock-opacity-10 active:bg-mono-20 hover:underline"><span>Find active investors</span></span></a></div></div></div><div class="flex-shrink-0 snap-start w-[calc(100vw-80px)] md:w-auto md:flex-shrink h-full"><div class="flex flex-col items-start justify-between gap-4 bg-[radial-gradient(50%_50%_at_50%_50%,rgba(189,189,255,0.95)_0%,rgba(244,244,246,0.95)_100%)] p-4 h-full" data-testid="pro-card-3"><div class="flex w-full flex-col gap-[14px]"><h3 class="font-recklessBold text-accent-18 text-brand-neutral">Market maps</h3><p class="text-regular-16 text-brand-neutral"> Understand sector landscapes, key players and competitive dynamics to uncover market opportunities & risks.</p></div><div class="flex w-full flex-col gap-4"><div class="relative aspect-[2/1] w-full overflow-hidden rounded-lg"><img alt="Market maps" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent;background-size:cover;background-position:50% 50%;background-repeat:no-repeat;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' %3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='none' style='filter: url(%23b);' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAMCAMAAABP7o1HAAACN1BMVEXW0unX0+nX0+rY1OrZ1erZ1eva1uva1uzb1uvb1+zc2Ovc2O3d2ezd2e3e2e3e2uze2u3e2u7f2+zf2+3f2+7g3Ovg3Ozg3O/h3evh3ezh3e3h3e7i3fDi3uvi3vDj3+rj3+vj3+3j3+7j3+/j3/Dj3/Hk3+nk3+rk4Ojk4Onk4Ovk4O3k4PHl4erl4evl4ezl4e3l4e/l4fDl4fHl4fLm4enm4unm4urm4vDm4vPn4+zn4+/n4/Ho5Ovo5Ozo5O7o5PPo5PTp5PTp5evp5e/p5fTq5vLq5vPq5vXr5+7r5/Pr5/Ts6O3s6O7s6O/s6PDs6PHs6PLs6PXt6e3t6fTt6fbu6ffu6vHu6vbu6vfv6/Hv6/Tv6/bv6/fw7PXw7Pfx7e/x7fDx7fHx7fPx7fTx7fjy7u/y7vDy7vfz7/Tz7/jz7/nz7/r08Pf08Pn08Pr18Pr18fP18fj18fr28fL28vL28vP28vT28vX28vf28vr38/L38/r49Pb49Pr49Pv49P359P359fr59fv59f369vT69vX69vb69vr69v379/X79/b79/j79/n79/v79/z8+PX8+Pz8+P/9+PT9+fj9+fz9+f39+f/++vj++vz++v3++v//+/b/+/f/+/j/+/r/+/v/+/z/+/3/+/7/+////Pf//Pz//P3//P7//P///fb//fr//f3//f7//f///vf//vj//vn//v3//v7//v////j///n///r///v///z///3///7////QMF8fAAAAvXRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+3qL3AAAAyUlEQVR42jXN3W7CMAwFYLukHbsoaBrS3v8p9kqgaRK0JPFvvBR1vvTn45O+AyLfrj+/93WB+Xi+XD6+PieEBBgADgiACHTEfSBhIKioiBZ/rYYRpxcAyOrKZs64B4Z/sEKuZdXRbAfADpTZVOrDvNVZhHWr2BKS87PmwuwHFm+mTO8dgKuJcllYmg/Lid0sb0BC1GqtxNYOQuz9Sh5nSKKmpUl/ZBGDapn5OY33twSqHmbUqwOakzdVW06QFCDcQzz6NGdXa24Sf48LrfT1SbRyAAAAAElFTkSuQmCC'/%3E%3C/svg%3E")" sizes="(max-width: 640px) calc(100vw - 40px), (max-width: 768px) calc(50vw - 20px), (max-width: 1024px) calc(33.33vw - 16px), calc(25vw - 8px)" srcSet="https://images-datocm
80847s.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=16,height=8/60124/1776344084-maps.png 16w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=32,height=16/60124/1776344084-maps.png 32w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=48,height=24/60124/1776344084-maps.png 48w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=64,height=32/60124/1776344084-maps.png 64w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=96,height=48/60124/1776344084-maps.png 96w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=128,height=64/60124/1776344084-maps.png 128w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=256,height=128/60124/1776344084-maps.png 256w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=384,height=192/60124/1776344084-maps.png 384w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=640,height=320/60124/1776344084-maps.png 640w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=750,height=375/60124/1776344084-maps.png 750w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=828,height=414/60124/1776344084-maps.png 828w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=1080,height=540/60124/1776344084-maps.png 1080w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=1200,height=600/60124/1776344084-maps.png 1200w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=1920,height=960/60124/1776344084-maps.png 1920w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=2048,height=1024/60124/1776344084-maps.png 2048w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=3840,height=1920/60124/1776344084-maps.png 3840w" src="https://images-datocms.sifted.eu/cdn-cgi/image/fit=cover,format=auto,width=3840,height=1920/60124/1776344084-maps.png"/></div><a href="https://sifted.eu/categories/market-map" class="inline-flex items-center gap-1 font-emphasis-14 text-black-rock focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-black-rock transition-colors" aria-label="Browse market maps"><span class="inline-flex items-center gap-1 px-1 py-0.5 underline transition-colors hover:bg-black-rock-opacity-10 active:bg-mono-20 hover:underline"><span>Browse market maps</span></span></a></div></div></div></div></div></section></section><section data-homepage-section="feedsAndPodcast" class="pb-16"><div class="mx-auto w-full max-w-content-mobile px-5 md:max-w-content lg:max-w-container lg:px-0 mdDesktop:max-w-container mdDesktop:px-5"><div class="flex flex-col gap-6 lg:flex-row mdDesktop:flex-row"><div class="h-full w-full lg:w-1/2 mdDesktop:w-1/2"><div class="w-full pb-0 pt-0"><div class="w-full md:mx-auto md:max-w-[800px]"><div class="no-scrollbar relative h-[53px] w-full overflow-x-auto overflow-y-hidden" role="tablist" aria-label="Article feed tabs"><div class="mx-auto flex h-[51px] w-max min-w-max items-center justify-center gap-[11px] lg:w-full mdDesktop:w-full"><button id="tab-popular" type="button" role="tab" aria-selected="true" aria-controls="panel-popular" class="relative flex h-[51px] shrink-0 items-center justify-center px-[16px] py-[11px] text-center transition-colors duration-200 cursor-default font-bold text-brand-neutral font-emphasis-18"><span class="whitespace-nowrap lg:truncate mdDesktop:truncate">Popular</span><div class="absolute -bottom-px left-0 right-0 h-[3px] bg-brand-neutral" aria-hidden="true"></div></button><button id="tab-free" type="button" role="tab" aria-selected="false" aria-controls="panel-free" class="relative flex h-[51px] shrink-0 items-center justify-center px-[16px] py-[11px] text-center transition-colors duration-200 cursor-pointer text-[18px] font-normal text-brand-neutral hover:text-brand-neutral"><span class="whitespace-nowrap lg:truncate mdDesktop:truncate">Free to read</span></button><button id="tab-collaborations" type="button" role="tab" aria-selected="false" aria-controls="panel-collaborations" class="relative flex h-[51px] shrink-0 items-center justify-center px-[16px] py-[11px] text-center transition-colors duration-200 cursor-pointer text-[18px] font-normal text-brand-neutral hover:text-brand-neutral"><span class="whitespace-nowrap lg:truncate mdDesktop:truncate">Collaborations</span></button></div><div class="absolute bottom-0 left-0 right-0 h-[1px] bg-brand-neutral" aria-hidden="true"></div></div><div class="w-full"><div role="tabpanel" id="panel-popular" aria-labelledby="tab-popular" class="flex flex-col"><div class=" 80848 group flex w-full flex-col gap-2 80849 border-b-[1px] border-pro 80850 px-0 py-4 80851 transition-colors 80852 " data-article-id="140710"><div class="flex h-5 items-center gap-1 overflow-x-auto"><div class="flex items-center justify-center bg-pro-blue py-1 rounded-[12px] px-2 h-[20px] w-[36px]" data-testid="pro-tag"><p class="text-white font-bold text-[12px] leading-[1.3]">Pro</p></div><a class="pointer-events-auto text-brand-neutral underline decoration-current underline-offset-2 transition-colors font-emphasis-14 hover:bg-mono-10 hover:underline shrink-0 whitespace-nowrap" href="https://sifted.eu/sector/venture-capital/">Venture capital</a><span class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-brand-neutral font-emphasis-14">Interview</span></div><a aria-label="A16z wants to back more European startups â but wonât reopen European office anytime soon" class="flex flex-col gap-2" href="https://sifted.eu/articles/a16z-andreessen-horowitz-euro
80852pe-ai-investing-consumer/"><div class="transition-colors group-hover:bg-pro-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors md:line-clamp-2 md:[overflow-wrap:anywhere]">A16z wants to back more European startups â but wonât reopen European office anytime soon</h3></div></a></div><div class=" 80853 group flex w-full flex-col gap-2 80854 border-b-[1px] border-pro 80855 px-0 py-4 80856 transition-colors 80857 " data-article-id="140290"><div class="flex h-5 items-center gap-1 overflow-x-auto"><div class="flex items-center justify-center bg-pro-blue py-1 rounded-[12px] px-2 h-[20px] w-[36px]" data-testid="pro-tag"><p class="text-white font-bold text-[12px] leading-[1.3]">Pro</p></div><a class="pointer-events-auto text-brand-neutral underline decoration-current underline-offset-2 transition-colors font-emphasis-14 hover:bg-mono-10 hover:underline shrink-0 whitespace-nowrap" href="https://sifted.eu/sector/venture-capital/">Venture capital</a><span class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-brand-neutral font-emphasis-14">Interview</span></div><a aria-label="US VC FirstMark: âEurope is underratedâ right now among American investors" class="flex flex-col gap-2" href="https://sifted.eu/articles/europe-underrated-us-vc-firstmark-capital/"><div class="transition-colors group-hover:bg-pro-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors md:line-clamp-2 md:[overflow-wrap:anywhere]">US VC FirstMark: âEurope is underratedâ right now among American investors</h3></div></a></div><div class=" 80858 group flex w-full flex-col gap-2 80859 border-b-[1px] border-pro 80860 px-0 py-4 80861 transition-colors 80862 " data-article-id="140425"><div class="flex h-5 items-center gap-1 overflow-x-auto"><div class="flex items-center justify-center bg-pro-blue py-1 rounded-[12px] px-2 h-[20px] w-[36px]" data-testid="pro-tag"><p class="text-white font-bold text-[12px] leading-[1.3]">Pro</p></div><a class="pointer-events-auto text-brand-neutral underline decoration-current underline-offset-2 transition-colors font-emphasis-14 hover:bg-mono-10 hover:underline shrink-0 whitespace-nowrap" href="https://sifted.eu/sector/venture-capital/">Venture capital</a><span class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-brand-neutral font-emphasis-14">Leaderboard</span></div><a aria-label="The top 10 investors across DACH & CEE" class="flex flex-col gap-2" href="https://sifted.eu/articles/the-top-10-investors-across-dach-cee/"><div class="transition-colors group-hover:bg-pro-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors md:line-clamp-2 md:[overflow-wrap:anywhere]">The top 10 investors across DACH & CEE</h3></div></a></div><div class=" 80863 group flex w-full flex-col gap-2 80864 border-b-[1px] border-brand-sifted 80865 px-0 py-4 80866 transition-colors 80867 " data-article-id="140419"><div class="flex h-5 items-center gap-1 overflow-x-auto"><a class="pointer-events-auto text-brand-neutral underline decoration-current underline-offset-2 transition-colors font-emphasis-14 hover:bg-mono-10 hover:underline shrink-0 whitespace-nowrap" href="https://sifted.eu/sector/deeptech/">Deeptech</a><span class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-brand-neutral font-emphasis-14">News</span></div><a aria-label="ETH Zurich students build âfirst Swiss humanoidâ, eye fundraising" class="flex flex-col gap-2" href="https://sifted.eu/articles/eth-zurich-students-humanoid-xalun/"><div class="transition-colors group-hover:bg-sifted-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors md:line-clamp-2 md:[overflow-wrap:anywhere]">ETH Zurich students build âfirst Swiss humanoidâ, eye fundraising</h3></div></a></div><div class=" 80868 group flex w-full flex-col gap-2 80869 border-b-[1px] border-pro 80870 px-0 py-4 80871 transition-colors 80872 " data-article-id="140609"><div class="flex h-5 items-center gap-1 overflow-x-auto"><div class="flex items-center justify-center bg-pro-blue py-1 rounded-[12px] px-2 h-[20px] w-[36px]" data-testid="pro-tag"><p class="text-white font-bold text-[12px] leading-[1.3]">Pro</p></div><a class="pointer-events-auto text-brand-neutral underline decoration-current underline-offset-2 transition-colors font-emphasis-14 hover:bg-mono-10 hover:underline shrink-0 whitespace-nowrap" href="https://sifted.eu/sector/ai-agents/">AI agents</a><span class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-brand-neutral font-emphasis-14">Interview</span></div><a aria-label="Inside London'
80872s weirdest neolab" class="flex flex-col gap-2" href="https://sifted.eu/articles/inside-londons-weirdest-neolab/"><div class="transition-colors group-hover:bg-pro-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors md:line-clamp-2 md:[overflow-wrap:anywhere]">Inside London's weirdest neolab</h3></div></a></div><div class=" 80873 group flex w-full flex-col gap-2 80874 border-b-[1px] border-pro 80875 px-0 py-4 80876 transition-colors 80877 " data-article-id="140540"><div class="flex h-5 items-center gap-1 overflow-x-auto"><div class="flex items-center justify-center bg-pro-blue py-1 rounded-[12px] px-2 h-[20px] w-[36px]" data-testid="pro-tag"><p class="text-white font-bold text-[12px] leading-[1.3]">Pro</p></div><span class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-brand-neutral font-emphasis-14">Interview</span></div><a aria-label="Why Polish startups are growing faster than ever" class="flex flex-col gap-2" href="https://sifted.eu/articles/why-polish-startups-are-growing-faster-than-ever/"><div class="transition-colors group-hover:bg-pro-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors md:line-clamp-2 md:[overflow-wrap:anywhere]">Why Polish startups are growing faster than ever</h3></div></a></div></div><div class="mt-4 flex w-full justify-start"><a class="relative inline-flex items-center justify-center rounded-full text-center font-bold font-neutral leading-[1.3] focus:outline-none focus-visible:outline-none transition-all duration-150 disabled:cursor-not-allowed disabled:opacity-50 bg-mono-00 [font-size:16px] h-9 px-5 py-2 min-w-[96px] text-brand-neutral shadow-[inset_0_0_0_2px_rgb(2,2,49)] hover:bg-brand-neutral-10 active:bg-brand-neutral-20 focus-visible:bg-brand-neutral-20 focus-visible:shadow-[inset_0_0_0_2px_rgb(2,2,49)]" href="https://sifted.eu/latest">Read more</a></div></div></div></div></div><div class="w-full lg:w-1/2 mdDesktop:w-1/2"><div class="flex w-full flex-col gap-10" data-testid="podcast-episodes-section"><div class="flex w-full flex-col gap-4"><div class="flex flex-col items-center justify-start border-b pb-4 border-black-rock h-[53px] justify-center pb-0 pt-4"><div class="flex w-full flex-row flex-wrap items-center justify-between gap-4"><h3 class="font-emphasis-18 text-black-rock">Podcast</h3><div><a href="https://sifted.eu/categories/podcast " class="inline-flex items-center gap-1 font-emphasis-14 text-black-rock focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-black-rock transition-colors ga-briefing-pro-link w-fit" aria-label="See all podcast episodes"><span class="inline-flex items-center gap-1 px-1 py-0.5 underline transition-colors hover:bg-black-rock-opacity-10 active:bg-mono-20 hover:underline"><span>See all podcast episodes</span></span></a></div></div></div><div class="grid grid-cols-1 gap-x-4 gap-y-8 md:grid-cols-2 md:gap-y-4 mdDesktop:grid-cols-2 mdDesktop:gap-y-4"><div class="flex flex-col gap-4" data-testid="podcast-column-latest"><div class="flex items-center justify-between"><h2 class="text-brand-neutral font-emphasis-18">Latest episodes</h2></div><div class="flex flex-col gap-4"><div class="flex w-full flex-col bg-mono-05" data-testid="podcast-card-I7zCK-eoQOWEVBGWsqEeNA"><h3 class="line-clamp-2 font-recklessBold text-accent-16">What the Anthropic shutdown means for Europe</h3><div class="mt-auto flex items-center gap-[0.2rem]"><span class="whitespace-nowrap text-assist-14">15:47</span><div class="ml-1 h-1 w-1 shrink-0 rounded-full bg-mono-30"></div><div class="flex items-center"><a target="_blank" rel="noopener noreferrer" class="inline-flex h-11 w-11 items-center justify-center transition-opacity duration-200 hover:opacity-80" aria-label="Listen on Podcast platform" href="https://podcasts.apple.com/gb/podcast/what-the-anthropic-shutdown-means-for-europe/id1592525862?i=1000772960763"><img src="https://www.datocms-assets.com/60124/1776344514-applepodcasts-logo-svg.svg" alt="Listen on Podcast platform" class="h-6 w-6" width="24" height="24" data-testid="podcast-icon-Podcast platform"/></a><a target="_blank" rel="noopener noreferrer" class="inline-flex h-11 w-11 items-center justify-center transition-opacity duration-200 hover:opacity-80" aria-label="Listen on Podcast platform" href="https://open.spotify.com/episode/1OhJW71yYA89unX9XR4u3J?si=6CQhYjmrS5S6N4WNawKctg"><img src="https://www.datocms-assets.com/60124/1776344533-spotify-logo.svg" alt="Listen on Podcast platform" class="h-6 w-6" width="24" height="24" data-testid="podcast-icon-Podcast platform"/></a></div></div></div><div class="flex w-full flex-col bg-mono-05" data-testid="podcast-card-UsbiPdkCTdm-c36MB7sXAw"><h3 class="line-clamp-2 font-recklessBold text-accent-16">Newton Venture Program CEO Anu Adebajo on Europeâs âzombie fundsâ</h3><div class="mt-auto flex items-center gap-[0.2rem]"><span class="whitespace-nowrap text-assist-14">44:51</span><div class="ml-1 h-1 w-1 shrink-0 rounded-full bg-mono-30"></div><div class="flex items-center"><a target="_blank" rel="noopener noreferrer" class="inline-flex h-11 w-11 items-center justify-center transition-opacity duration-200 hover:opacity-80" aria-label="Listen on Podcast platform" href="https://podcasts.apple.com/gb/podcast/newton-venture-program-ceo-anu-adebajo-on-europes-zombie/id1592525862?i=1000772227073"><img src="https://www.datocms-assets.com/60124/1776344514-applepodcasts-logo-svg.svg" alt="Listen on Podcast platform" class="h-6 w-6" width="24" height="24" data-testid="podcast-icon-Podcast platform"/></a><a target="_blank" rel="noopener noreferrer" class="inline-flex h-11 w-11 items-center justify-center transition-opacity duration-200 hover:opacity-80" aria-label="Listen on Podcast platform" href="https://open.spotify.com/episode/0LKIayura2LZP21w3gXSXO?si=QOUJyHbFQMCKPr9xRNsNnQ"><img src="https://www.datocms-assets.com/60124/1776344533-spotify-logo.svg" alt="Listen on Podcast platform" class="h-6 w-6" width="24" height="24" data-testid="podcast-icon-Podcast platform"/></a><a target="_blank" rel="noopener noreferrer" class="inline-flex h-11 w-11 items-center justify-center transition-opacity duration-200 hover:opacity-80" aria-label="Listen on Podcast platform" href="https://www.youtube.com/watch?v=wsyx0gzD7TU"><img src="https://www.datocms-assets.com/60124/1776344548-youtube-logo.svg" alt="Listen on Podcast platform" class="h-6 w-6" width="24" height="24" data-testid="podcast-icon-Podcast platform"/></a></div></div></div></div></div><div class="flex flex-col gap-4" data-testid="podcast-column-top"><div class="flex items-center justify-between"><h2 class="text-brand-neutral font-emphasis-18">Top episodes</h2></div><div class="flex flex-col gap-4"><div class="flex w-full flex-col bg-mono-05" data-testid="podcast-card-WB1V4z86QemMK2zOycCZxQ"><h3 class="line-clamp-2 font-recklessBold text-accent-16">Judith Dada, general partner at Visionaries Club: 'I'm deeply troubled by what lies ahead for Europe'</h3><div class="mt-auto flex items-center gap-[0.2rem]"><span class="whitespace-nowrap text-assist-14">53:32</span><div class="ml-1 h-1 w-1 shrink-0 rounded-full bg-mono-30"></div><div class="flex items-center"><a target="_blank" rel="noopener noreferrer" class="inline-flex h-11 w-11 items-center justify-center transition-opacity duration-200 hover:opacity-80" aria-label="Listen on Podcast platform" href="https://podcasts.apple.com/gb/podcast/judith-dada-general-partner-at-visionaries-fund-im/id1592525862?i=1000750506499"><img src="https://www.datocms-assets.com/60124/1776344514-applepodcasts-logo-svg.svg" alt="Listen on Podcast platform" class="h-6 w-6" width="24" height="24" data-testid="podcast-icon-Podcast platform"/></a><a target="_blank" rel="noopener noreferrer" class="inline-flex h-11 w-11 items-center justify-center transition-opacity duration-200 hover:opacity-80" aria-label="Listen on Podcast platform" href="https://open.spotify.com/episode/4wTjaJfyOJWuw04GpCNSp0?si=5v4RGH79Qd-Wm5Gu-8KYMw"><img src="https://www.datocms-assets.com/60124/1776344533-spotify-logo.svg" alt="Listen on Podcast platform" class="h-6 w-6" width="24" height="24" data-testid="podcast-icon-Podcast platform"/></a></div></div></div><div class="flex w-full flex-col bg-mono-05" data-testid="podcast-card-V_zQ-NtsRCSrdnNiP06Qxg"><h3 class="line-clamp-2 font-recklessBold text-accent-16">James Wise on why the Sovereign AI Unit criticism is wrong â and the one company he wishes heâd backed</h3><div class="mt-auto flex items-center gap-[0.2rem]"><span class="whitespace-nowrap text-assist-14">39:27</span><div class="ml-1 h-1 w-1 shrink-0 rounded-full bg-mono-30"></div><div class="flex items-center"><a target="_blank" rel="noopener noreferrer" class="inline-flex h-11 w-11 items-center justify-center transition-opacity duration-200 hover:opacity-80" aria-label="Listen on Podcast platform" href="https://podcasts.apple.com/gb/podcast/james-wise-on-why-the-sovereign-ai-unit-criticism-is/id1592525862?i=1000767985683"><img src="https://www.datocms-assets.com/60124/1776344514-applepodcasts-logo-svg.svg" alt="Listen on Podcast platform" class="h-6 w-6" width="24" height="24" data-testid="podcast-icon-Podcast platform"/></a><a target="_blank" rel="noopener noreferrer" class="inline-flex h-11 w-11 items-center justify-center transition-opacity duration-200 hover:opacity-80" aria-label="Listen on Podcast platform" href="https://open.spotify.com/episode/17o78DKIRirs2sPnHD63KE?si=7b7b382f6259457b"><img src="https://www.datocms-assets.com/60124/1776344533-spotify-logo.svg" alt="Listen on Podcast platform" class="h-6 w-6" width="24" height="24" data-testid="podcast-icon-Podcast platform"/></a></div></div></div></div></div></div></div><div class="flex flex-col gap-2 border-l p-4 border-pro bg-pro-10" data-testid="callout"><h3 class="font-recklessBold text-accent-26 leading-tight text-brand-neutral">Be the first to see exclusive leaderboard data</h3><div class="text-regular-16 text-brand-neutral [&_li]:leading-tight [&_ul]:ml-6 [&_ul]:list-inside [&_ul]:list-disc"><p class="markdown_container__3rlf4">The Nordics' top 100 is live. Unlock the full dataset behind the ranking â funding and revenue data, plus in-depth reporting and market intelligence showing where momentum is building. Get complete access to Sifted Pro from as little as £4.79/day.</p></div>
80877<a href="https://sifted.eu/sifted-pro" class="inline-flex items-center gap-1 font-emphasis-14 text-pro focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-pro transition-colors mt-2" aria-label="Explore Pro"><span class="inline-flex items-center gap-1 px-1 py-0.5 underline transition-colors hover:bg-pro-opacity-10 active:bg-pro-20 hover:underline"><span>Explore Pro</span></span></a></div></div></div></div></div></section><section data-homepage-section="newsletters" class="pb-16"><div class="flex h-auto flex-col items-center bg-gray-100"><div class="mx-auto w-full max-w-content-mobile px-5 md:max-w-content lg:max-w-container lg:px-0 mdDesktop:max-w-container mdDesktop:px-5"><div class="flex flex-col items-center justify-start border-b pb-4 border-black-rock mb-4"><div class="flex w-full flex-row flex-wrap items-center justify-between gap-4"><h3 class="font-emphasis-18 text-black-rock">Sign up to Sifted Newsletters</h3><div><a href="/newsletters" class="inline-flex items-center gap-1 font-emphasis-14 text-black-rock focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-black-rock transition-colors inline-flex items-center border-r-brand-neutral font-bold text-brand-neutral" aria-label="Explore more newsletters"><span class="inline-flex items-center gap-1 px-1 py-0.5 underline transition-colors hover:bg-black-rock-opacity-10 active:bg-mono-20 hover:underline"><span>Explore more newsletters</span></span></a></div></div></div></div></div></section><section data-homepage-section="latest"></section><section data-homepage-section="siftedInsights"><section class="bg-mono-05 pb-16 pt-0"><div class="mx-auto w-full max-w-content-mobile px-5 md:max-w-content lg:max-w-container lg:px-0 mdDesktop:max-w-container mdDesktop:px-5"><div class="mb-4 flex flex-col gap-4"><h2 class="text-black-rock font-emphasis-18">Intelligence</h2><div class="h-[1px] w-full bg-mono-20"></div></div><div class="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3 mdDesktop:grid-cols-[1fr_1fr_258px]"><div class="h-[435px] md:h-[405px]"><article class="group relative block h-full w-full overflow-hidden text-left bg-mono-15 focus-visible:outline-none" data-testid="insights-feature-card"><div class="absolute inset-0 h-full w-full bg-mono-00"><img alt="" loading="lazy" width="595" height="841" decoding="async" data-nimg="1" class="pointer-events-none h-100 w-100 object-cover will-change-[filter] [transition:filter_0.25s]" style="color:transparent;background-size:cover;background-position:50% 50%;background-repeat:no-repeat;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 595 841'%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='none' style='filter: url(%23b);' href='data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHBwgHBgoICAgLDQoVDhgVDg0NGhsaDQ0VFx8ZGBYVFiEmHysjGh0oHRUiJDUlKC0vMjIyGSI4PTcwPCsxMi8BCgsLDg0OFxAQHC8cFhwvLy8vLy81Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL//AABEIABkAEQMBIgACEQEDEQH/xAAYAAACAwAAAAAAAAAAAAAAAAAEBQABBv/EACQQAAEDAgQHAAAAAAAAAAAAAAACBAUBAxJBUWERFCElNDVS/8QAGAEAAwEBAAAAAAAAAAAAAAAAAQQFAgD/xAAZEQACAwEAAAAAAAAAAAAAAAAAAQIREiH/2gAMAwEAAhEDEQA/AEsG2RZYjKSX2ZVKUyA4q9bWyGL263TDqxaFZSVCLbswWNWhYXzDXYsG0d0OhHjdLLqoMkndi7FqpRWRlonwQ5x65RO26HHFWKuNn6IBEM7YcI//2Q=='/%3E%3C/svg%3E")" sizes="290px" srcSet="https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=16,quality=75/60124/1781881381-the-rise-of-ai-agents.jpg 16w, https://images-datocm
80877s.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=32,quality=75/60124/1781881381-the-rise-of-ai-agents.jpg 32w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=48,quality=75/60124/1781881381-the-rise-of-ai-agents.jpg 48w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=64,quality=75/60124/1781881381-the-rise-of-ai-agents.jpg 64w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=96,quality=75/60124/1781881381-the-rise-of-ai-agents.jpg 96w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=128,quality=75/60124/1781881381-the-rise-of-ai-agents.jpg 128w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=256,quality=75/60124/1781881381-the-rise-of-ai-agents.jpg 256w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=384,quality=75/60124/1781881381-the-rise-of-ai-agents.jpg 384w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=640,quality=75/60124/1781881381-the-rise-of-ai-agents.jpg 640w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=750,quality=75/60124/1781881381-the-rise-of-ai-agents.jpg 750w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=828,quality=75/60124/1781881381-the-rise-of-ai-agents.jpg 828w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=1080,quality=75/60124/1781881381-the-rise-of-ai-agents.jpg 1080w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=1200,quality=75/60124/1781881381-the-rise-of-ai-agents.jpg 1200w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=1920,quality=75/60124/1781881381-the-rise-of-ai-agents.jpg 1920w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=2048,quality=75/60124/1781881381-the-rise-of-ai-agents.jpg 2048w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=3840,quality=75/60124/1781881381-the-rise-of-ai-agents.jpg 3840w" src="https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=3840,quality=75/60124/1781881381-the-rise-of-ai-agents.jpg"/></div><div class="relative flex h-full p-3 items-end"><div class="flex w-full flex-col bg-mono-00 gap-[6px] p-[14px]"><div class="flex min-h-[18px] w-full items-start justify-between gap-3" data-testid="insights-feature-card__topMeta"><div class="text-assist-14 text-mono-40">2026-06-25</div><div class="text-assist-14 text-sifted"></div></div><div class="flex flex-col gap-[14px]"><a class="w-fit focus-visible:outline-none" href="https://sifted.eu/intelligence/reports/the-rise-of-ai-agents-2026"><p class="font-recklessBold text-accent-22 text-black-rock">The rise of AI agents</p></a><p class="text-regular-16 text-mono-70 line-clamp-3">The age of agentic work has arrived. How should companies navigate it?</p><div class="w-full pt-[2px]"><a class="relative inline-flex items-center justify-center rounded-full text-center font-bold font-neutral leading-[1.3] focus:outline-none focus-visible:outline-none transition-all duration-150 disabled:cursor-not-allowed disabled:opacity-50 text-mono-00 [font-size:16px] h-9 px-4 py-2 min-w-[96px] bg-sifted hover:bg-sifted-hover active:bg-sifted-active focus-visible:shadow-[inset_0_0_0_2px_rgb(255,255,255)] w-full" href="https://sifted.eu/intelligence/reports/the-rise-of-ai-agents-2026">Read the report</a></div></div></div></div><div data-testid="insights-feature-card__interactiveBorder" class="pointer-events-none absolute inset-0 z-10 border-[3px] border-solid opacity-0 transition-opacity group-hover:opacity-100 group-focus-visible:opacity-100 border-sifted"></div></article></div><div class="h-[435px] md:h-[405px]"><article class="group relative block h-full w-full overflow-hidden text-left bg-mono-15 focus-visible:outline-none" data-testid="insights-feature-card"><div class="absolute inset-0 h-full w-full bg-mono-00"><img alt="" loading="lazy" width="870" height="1305" decoding="async" data-nimg="1" class="pointer-events-none h-100 w-100 object-cover will-change-[filter] [transition:filter_0.25s]" style="color:transparent;background-size:cover;background-position:50% 50%;background-repeat:no-repeat;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 870 1305'%3E%3Cfilter id='b' color-interpolation-filters='
80877sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='none' style='filter: url(%23b);' href='data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHBwgHBgoICAgLCgoLDhgZFRUNFRsVDg4NFxYeGBYfIhUaHyslHR0oHRUiJDUlKC0vMjIyGSI4PTcwPCsxMi8BCgsLDg0OFQ0OHC8cFhwvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL//AABEIABgAEAMBIgACEQEDEQH/xAAXAAADAQAAAAAAAAAAAAAAAAAABAUG/8QAGxAAAwEBAQEBAAAAAAAAAAAAAQIEAAMSFBH/xAAWAQEBAQAAAAAAAAAAAAAAAAADAgH/xAAaEQACAgMAAAAAAAAAAAAAAAAAQiEiAQIS/9oADAMBAAIRAxEAPwCHSIzQAc008g5Arl6PjoqBTXOaQc5195FM7kz3FpJ39NnTTNUv4pxjXtiobH//2Q=='/%3E%3C/svg%3E")" sizes="290px" srcSet="https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=16,quality=75/60124/1721888609-advanced-materials-2024.png 16w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=32,quality=75/60124/1721888609-advanced-materials-2024.png 32w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=48,quality=75/60124/1721888609-advanced-materials-2024.png 48w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=64,quality=75/60124/1721888609-advanced-materials-2024.png 64w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=96,quality=75/60124/1721888609-advanced-materials-2024.png 96w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=128,quality=75/60124/1721888609-advanced-materials-2024.png 128w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=256,quality=75/60124/1721888609-advanced-materials-2024.png 256w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=384,quality=75/60124/1721888609-advanced-materials-2024.png 384w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=640,quality=75/60124/1721888609-advanced-materials-2024.png 640w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=750,quality=75/60124/1721888609-advanced-materials-2024.png 750w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=828,quality=75/60124/1721888609-advanced-materials-2024.png 828w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=1080,quality=75/60124/1721888609-advanced-materials-2024.png 1080w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=1200,quality=75/60124/1721888609-advanced-materials-2024.png 1200w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=1920,quality=75/60124/1721888609-advanced-materials-2024.png 1920w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=2048,quality=75/60124/1721888609-advanced-materials-2024.png 2048w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=3840,quality=75/60124/1721888609-advanced-materials-2024.png 3840w" src="https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=3840,quality=75/60124/1721888609-advanced-materials-2024.png"/></div><div class="relative flex h-full p-3 items-end"><div class="flex w-full flex-col bg-mono-00 gap-[6px] p-[14px]"><div class="flex min-h-[18px] w-full items-start justify-between gap-3" data-testid="insights-feature-card__topMeta"><div class="text-assist-14 text-mono-40">2026-07-06</div><div class="text-assist-14 text-pro"></div></div><div class="flex flex-col gap-[14px]"><a class="w-fit focus-visible:outline-none" href="https://sifted.eu/pro/briefings/advanced-materials-2026"><p class="font-recklessBold text-accent-22 text-black-rock">Advanced materials</p></a><p class="text-regular-16 text-mono-70 line-clamp-3">
80877Will AI unearth the next breakthrough material?</p><div class="w-full pt-[2px]"><a class="relative inline-flex items-center justify-center rounded-full text-center font-bold font-neutral leading-[1.3] focus:outline-none focus-visible:outline-none transition-all duration-150 disabled:cursor-not-allowed disabled:opacity-50 text-mono-00 [font-size:16px] h-9 px-4 py-2 min-w-[96px] bg-pro hover:bg-pro-hover active:bg-pro-active focus-visible:shadow-[inset_0_0_0_2px_rgb(255,255,255)] w-full" href="https://sifted.eu/pro/briefings/advanced-materials-2026">Explore our latest sector research</a></div></div></div></div><div data-testid="insights-feature-card__interactiveBorder" class="pointer-events-none absolute inset-0 z-10 border-[3px] border-solid opacity-0 transition-opacity group-hover:opacity-100 group-focus-visible:opacity-100 border-pro"></div></article></div><div class="hidden lg:block mdDesktop:block"><div><div class="flex flex-col"><div class=" 80878 group flex w-full flex-col gap-2 80879 border-b-[1px] border-pro 80880 px-0 py-4 80881 transition-colors 80882 " data-article-id="138073"><div class="flex h-5 items-center gap-1 overflow-x-auto"><div class="flex items-center justify-center bg-pro-blue py-1 rounded-[12px] px-2 h-[20px] w-[36px]" data-testid="pro-tag"><p class="text-white font-bold text-[12px] leading-[1.3]">Pro</p></div><a class="pointer-events-auto text-brand-neutral underline decoration-current underline-offset-2 transition-colors font-emphasis-14 hover:bg-mono-10 hover:underline shrink-0 whitespace-nowrap" href="https://sifted.eu/sector/startup-life/">Startup life</a><span class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-brand-neutral font-emphasis-14">Fastest-growing startups</span></div><a aria-label="The 50 fastest-growing European startup teams in H1 2026" class="flex flex-col gap-2" href="https://sifted.eu/articles/the-50-fastest-growing-european-startup-teams-in-h1-2026/"><div class="transition-colors group-hover:bg-pro-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors md:line-clamp-2 md:[overflow-wrap:anywhere]">The 50 fastest-growing European startup teams in H1 2026</h3></div></a></div><div class=" 80883 group flex w-full flex-col gap-2 80884 border-b-[1px] border-pro 80885 px-0 py-4 80886 transition-colors 80887 " data-article-id="138075"><div class="flex h-5 items-center gap-1 overflow-x-auto"><div class="flex items-center justify-center bg-pro-blue py-1 rounded-[12px] px-2 h-[20px] w-[36px]" data-testid="pro-tag"><p class="text-white font-bold text-[12px] leading-[1.3]">Pro</p></div><a class="pointer-events-auto text-brand-neutral underline decoration-current underline-offset-2 transition-colors font-emphasis-14 hover:bg-mono-10 hover:underline shrink-0 whitespace-nowrap" href="https://sifted.eu/sector/venture-capital/">Venture capital</a><span class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-brand-neutral font-emphasis-14">List</span></div><a aria-label="Europeâs biggest new funds in H1 2026" class="flex flex-col gap-2" href="https://sifted.eu/articles/europes-biggest-new-funds-in-h1-2026/"><div class="transition-colors group-hover:bg-pro-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors md:line-clamp-2 md:[overflow-wrap:anywhere]">Europeâs biggest new funds in H1 2026</h3></div></a></div><div class=" 80888 group flex w-full flex-col gap-2 80889 border-b-[1px] border-pro 80890 px-0 py-4 80891 transition-colors 80892 " data-article-id="138087"><div class="flex h-5 items-center gap-1 overflow-x-auto"><div class="flex items-center justify-center bg-pro-blue py-1 rounded-[12px] px-2 h-[20px] w-[36px]" data-testid="pro-tag"><p class="text-white font-bold text-[12px] leading-[1.3]">Pro</p></div><a class="pointer-events-auto text-brand-neutral underline decoration-current underline-offset-2 transition-colors font-emphasis-14 hover:bg-mono-10 hover:underline shrink-0 whitespace-nowrap" href="https://sifted.eu/sector/startup-life/">Startup life</a><span class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-brand-neutral font-emphasis-14">Stealth founders</span></div><a aria-label="8 stealth founders using AI to take on the industries they used to work in" class="flex flex-col gap-2" href="https://sifted.eu/articles/8-stealth-founders-using-ai-to-take-on-the-industries-they-u
80892sed-to-work-in/"><div class="transition-colors group-hover:bg-pro-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors md:line-clamp-2 md:[overflow-wrap:anywhere]">8 stealth founders using AI to take on the industries they used to work in</h3></div></a></div><div class=" 80893 group flex w-full flex-col gap-2 80894 border-b-[1px] border-pro 80895 px-0 py-4 80896 transition-colors 80897 " data-article-id="138026"><div class="flex h-5 items-center gap-1 overflow-x-auto"><div class="flex items-center justify-center bg-pro-blue py-1 rounded-[12px] px-2 h-[20px] w-[36px]" data-testid="pro-tag"><p class="text-white font-bold text-[12px] leading-[1.3]">Pro</p></div><span class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-brand-neutral font-emphasis-14">Sifted data</span></div><a aria-label="The 25 companies Europeâs startup insiders watched most closely in H1" class="flex flex-col gap-2" href="https://sifted.eu/articles/the-25-companies-most-watched-insiders-h1-2026/"><div class="transition-colors group-hover:bg-pro-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors md:line-clamp-2 md:[overflow-wrap:anywhere]">The 25 companies Europeâs startup insiders watched most closely in H1</h3></div></a></div></div></div></div></div><div class="w-full md:mx-auto md:max-w-[800px] lg:hidden mdDesktop:hidden"><div><div class="flex flex-col"><div class=" 80898 group flex w-full flex-col gap-2 80899 border-b-[1px] border-pro 80900 px-0 py-4 80901 transition-colors 80902 " data-article-id="138073"><div class="flex h-5 items-center gap-1 overflow-x-auto"><div class="flex items-center justify-center bg-pro-blue py-1 rounded-[12px] px-2 h-[20px] w-[36px]" data-testid="pro-tag"><p class="text-white font-bold text-[12px] leading-[1.3]">Pro</p></div><a class="pointer-events-auto text-brand-neutral underline decoration-current underline-offset-2 transition-colors font-emphasis-14 hover:bg-mono-10 hover:underline shrink-0 whitespace-nowrap" href="https://sifted.eu/sector/startup-life/">Startup life</a><span class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-brand-neutral font-emphasis-14">Fastest-growing startups</span></div><a aria-label="The 50 fastest-growing European startup teams in H1 2026" class="flex flex-col gap-2" href="https://sifted.eu/articles/the-50-fastest-growing-european-startup-teams-in-h1-2026/"><div class="transition-colors group-hover:bg-pro-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors md:line-clamp-2 md:[overflow-wrap:anywhere]">The 50 fastest-growing European startup teams in H1 2026</h3></div></a></div><div class=" 80903 group flex w-full flex-col gap-2 80904 border-b-[1px] border-pro 80905 px-0 py-4 80906 transition-colors 80907 " data-article-id="138075"><div class="flex h-5 items-center gap-1 overflow-x-auto"><div class="flex items-center justify-center bg-pro-blue py-1 rounded-[12px] px-2 h-[20px] w-[36px]" data-testid="pro-tag"><p class="text-white font-bold text-[12px] leading-[1.3]">Pro</p></div><a class="pointer-events-auto text-brand-neutral underline decoration-current underline-offset-2 transition-colors font-emphasis-14 hover:bg-mono-10 hover:underline shrink-0 whitespace-nowrap" href="https://sifted.eu/sector/venture-capital/">Venture capital</a><span class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-brand-neutral font-emphasis-14">List</span></div><a aria-label="Europeâs biggest new funds in H1 2026" class="flex flex-col gap-2" href="https://sifted.eu/articles/europes-biggest-new-funds-in-h1-2026/"><div class="transition-colors group-hover:bg-pro-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors md:line-clamp-2 md:[overflow-wrap:anywhere]">Europeâs biggest new funds in H1 2026</h3></div></a></div><div class=" 80908 group flex w-full flex-col gap-2 80909 border-b-[1px] border-pro 80910 px-0 py-4 80911 transition-colors 80912 " data-article-id="138087"><div class="flex h-5 items-center gap-1 overflow-x-auto"><div class="flex items-center justify-center bg-pro-blue py-1 rounded-[12px] px-2 h-[20px] w-[36px]" data-testid="pro-tag"><p class="text-white font-bold text-[12px] leading-[1.3]">Pro</p></div><a class="pointer-events-auto text-brand-neutral underline decoration-current underline-offset-2 transition-colors font-emphasis-14 hover:bg-mono-10 hover:underline shrink-0 whitespace-nowrap" href="https://sifted.eu/sector/startup-life/">Startup life</a><span class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-brand-neutral font-emphasis-14">Stealth founders</span></div><a aria-label="8 stealth founders using AI to take on the industries they used to work in" class="flex flex-col gap-2" href="https://sifted.eu/articles/8-stealth-founders-using-ai-to-take-on-the-industries-they-u
80912sed-to-work-in/"><div class="transition-colors group-hover:bg-pro-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors md:line-clamp-2 md:[overflow-wrap:anywhere]">8 stealth founders using AI to take on the industries they used to work in</h3></div></a></div><div class=" 80913 group flex w-full flex-col gap-2 80914 border-b-[1px] border-pro 80915 px-0 py-4 80916 transition-colors 80917 " data-article-id="138026"><div class="flex h-5 items-center gap-1 overflow-x-auto"><div class="flex items-center justify-center bg-pro-blue py-1 rounded-[12px] px-2 h-[20px] w-[36px]" data-testid="pro-tag"><p class="text-white font-bold text-[12px] leading-[1.3]">Pro</p></div><span class="min-w-0 flex-1 overflow-hidden text-ellipsis whitespace-nowrap text-brand-neutral font-emphasis-14">Sifted data</span></div><a aria-label="The 25 companies Europeâs startup insiders watched most closely in H1" class="flex flex-col gap-2" href="https://sifted.eu/articles/the-25-companies-most-watched-insiders-h1-2026/"><div class="transition-colors group-hover:bg-pro-10"><h3 class="font-recklessBold text-accent-16 leading-tight text-brand-neutral transition-colors md:line-clamp-2 md:[overflow-wrap:anywhere]">The 25 companies Europeâs startup insiders watched most closely in H1</h3></div></a></div></div></div></div></div></section></section><section data-homepage-section="events"><div class="mx-auto w-full max-w-content-mobile px-5 md:max-w-content lg:max-w-container lg:px-0 mdDesktop:max-w-container mdDesktop:px-5"></div></section><section data-homepage-section="talks"><div class="mx-auto w-full max-w-content-mobile px-5 md:max-w-content lg:max-w-container lg:px-0 mdDesktop:max-w-container mdDesktop:px-5"><section class="w-full pb-16"><div class="w-full"><div class="flex flex-col items-center justify-start border-b pb-4 border-black-rock mb-4"><div class="flex w-full flex-row flex-wrap items-center justify-between gap-4"><h3 class="font-emphasis-18 text-black-rock">Upcoming Talks</h3><div><a href="https://sifted.eu/talks" class="inline-flex items-center gap-1 font-emphasis-14 text-black-rock focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-black-rock transition-colors ga-briefing-pro-link w-fit" aria-label="Explore more"><span class="inline-flex items-center gap-1 px-1 py-0.5 underline transition-colors hover:bg-black-rock-opacity-10 active:bg-mono-20 hover:underline"><span>Explore more</span></span></a></div></div></div><div data-testid="event-card" class="relative bg-white" data-variant="talk"><div data-testid="event-card__container" class="flex justify-between gap-x-6 p-4 lg:min-h-[324px]"><div class="flex flex-col hidden lg:block"><a class="block outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-black-rock" href="/talks/autonomous-but-accountable-how-to-deploy-agents-safely"><div class="pointer-events-none"><div class="w-[210px]"><img alt="Box" loading="lazy" width="2160" height="2160" decoding="async" data-nimg="1" class="h-[210px] w-full object-cover will-change-[filter] [transition:filter_0.25s]" style="color:transparent;background-size:cover;background-position:50% 50%;background-repeat:no-repeat;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 2160 2160'%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='none' style='filter: url(%23b);' href='data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHBwgHBhQICA8XERUKFxMNFQ0VDiYV
80917DxUYFxogGBcVFhUmHysvGh0oHRUWMDUlKC0vMjIyGSI4PTcwPCsxMi8BCgsLDg0OHBAQHDsoIig7OzU7Oy81Oy8vOy87Oy81LzU1Ly87LzUvNS81NS8vLy8vLy8vLy81LzUvNTUvLy8vL//AABEIABgAGAMBIgACEQEDEQH/xAAZAAEAAwEBAAAAAAAAAAAAAAAAAwQFBwH/xAAcEAABBQEBAQAAAAAAAAAAAAAAAQIDBBEFIRT/xAAWAQEBAQAAAAAAAAAAAAAAAAADAgH/xAAZEQACAwEAAAAAAAAAAAAAAAABAgADEQT/2gAMAwEAAhEDEQA/AOp0akD49QmWhXV+EXGVFreE+J9QddYyLbYwaU73NgRmgvXmtdB6AHqGx0uIWY/G6MSRYhpNtROl0AupjkroRd2e2rMbmYAAmY7MVRk//9k='/%3E%3C/svg%3E")" sizes="min(400px, 100vw)" srcSet="https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=640,quality=75/60124/1787583684-hero-image-generic-talks-1080x1080px-4.png 640w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=750,quality=75/60124/1787583684-hero-image-generic-talks-1080x1080px-4.png 750w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=828,quality=75/60124/1787583684-hero-image-generic-talks-1080x1080px-4.png 828w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=1080,quality=75/60124/1787583684-hero-image-generic-talks-1080x1080px-4.png 1080w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=1200,quality=75/60124/1787583684-hero-image-generic-talks-1080x1080px-4.png 1200w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=1920,quality=75/60124/1787583684-hero-image-generic-talks-1080x1080px-4.png 1920w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=2048,quality=75/60124/1787583684-hero-image-generic-talks-1080x1080px-4.png 2048w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=3840,quality=75/60124/1787583684-hero-image-generic-talks-1080x1080px-4.png 3840w" src="https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=3840,quality=75/60124/1787583684-hero-image-generic-talks-1080x1080px-4.png"/></div><div data-testid="sponsorLogoAndText" class="flex flex-row items-center justify-between md:flex-col lg:mb-[14px] lg:mt-[30px] lg:flex-row"><p class="inline-flex items-center font-bold text-[14px] leading-[130%] text-mono-40 md:mb-[9px] lg:mb-0">Sponsored by</p><div class="h-[42px] w-[105px]"><img alt="Sponsor logo" loading="lazy" width="1200" height="644" decoding="async" data-nimg="1" class="h-full w-full object-contain self-end will-change-[filter] [transition:filter_0.25s]" style="color:transparent;background-size:cover;background-position:50% 50%;background-repeat:no-repeat;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1200 644'%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='20'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='none' style='filter: url(%23b);' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII'/%3E%3C/svg%3E")" sizes="50vw" srcSet="https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=384,quality=100/60124/1742315382-box-logo.png 384w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=640,quality=100/60124/1742315382-box-logo.png 640w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=750,quality=100/60124/1742315382-box-logo.png 750w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=828,quality=100/60124/1742315382-box-logo.png 828w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=1080,quality=100/60124/1742315382-box-logo.png 1080w, https://images-datocm
80917s.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=1200,quality=100/60124/1742315382-box-logo.png 1200w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=1920,quality=100/60124/1742315382-box-logo.png 1920w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=2048,quality=100/60124/1742315382-box-logo.png 2048w, https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=3840,quality=100/60124/1742315382-box-logo.png 3840w" src="https://images-datocms.sifted.eu/cdn-cgi/image/fit=scale-down,format=auto,width=3840,quality=100/60124/1742315382-box-logo.png"/></div></div></div></a></div><div class="flex h-auto flex-auto flex-col justify-between"><div><div class="mb-2 flex items-start justify-between gap-4"><div class="min-w-0 flex-1"><div class="flex items-center"><p class="font-bold text-[16px] text-cerise">Startup Life</p><div class="hidden items-center md:flex"><div class="mx-2 text-mono-30">â¢</div><p data-testid="event-time" class="font-bold text-[16px] text-mono-40">Wed 28 Oct 2026 / 12:00 (GMT)</p></div></div></div><div class="hidden shrink-0 md:block"><div class="text-secondary-cta [&>span]:ml-md space-x-2xl flex items-center"><span><a href="https://outlook.live.com/owa/?rru=addevent&startdt=20261028T120000Z&enddt=20261028T130000Z&location=Zoom%20virtual%20event&subject=Autonomous%2C%20but%20accountable%3A%20How%20to%20deploy%20agents%20safely&body=Thank%20you%20for%20registering%20for%20our%20upcoming%20Sifted%20Talks%2C%20Autonomous%2C%20but%20accountable%3A%20How%20to%20deploy%20agents%20safely.%0A%0ADate%3A%20Wednesday%2C%2028%20October%202026%0ATime%3A%2012%3A00%E2%86%9213%3A00%20GMT%20%2F%2013%3A00%E2%86%9214%3A00%20CET%0A%0AAI%20agents%20take%20on%20real%20work%20inside%20businesses%20but%20handing%20over%20more%20responsibility%20also%20raises%20some%20questions%3A%20what%20should%20an%20agent%20be%20allowed%20to%20access%3F%20Who%20is%20accountable%20when%20something%20is%20wrong%3F%20And%20how%20do%20you%20know%20what%20it%20has%20done%3F%0AFor%20growing%20businesses%2C%20scattered%20content%20infrastructure%2C%20legacy%20systems%20and%20unclear%20permissions%20can%20quickly%20become%20a%20blocker.%20Simultaneously%2C%20locking%20everything%20down%20can%20make%20AI%20too%20cumbersome%20to%20be%20useful.%20This%20Sifted%20Talks%20will%20look%20at%20how%20companies%20can%20find%20the%20balance%3A%20putting%20practical%20guardrails%20around%20AI%20agents%20without%20slowing%20teams%20down.%0A%0A%0AUse%20the%20link%20below%20to%20join%20the%20discussion.%0Ahttps%3A%2F%2Fsifted.eu%2Ftalks%2Fautonomous-but-accountable-how-to-deploy-agents-safely%0A%0AHave%20any%20questions%20for%20our%20panellists%3F%20You%20can%20submit%20these%20ahead%20of%20time%20by%20emailing%20talks%40sifted.eu.%0A%0AWe%20look%20forward%20to%20seeing%20you%20for%20this%20Sifted%20Talks.%0A&allday=false&path=/calendar/view/Month" target="_blank" rel="noreferrer" data-testid="outlookCalendarLink"><svg width="22" height="22" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"><title>Add to Outlook Calendar</title><path d="M8.67188 3.15625H13.2031C13.2865 3.15625 13.3802 3.20833 13.4844 3.3125C13.6094 3.41667 13.6719 3.54167 13.6719 3.6875L9.70312 6.34375C9.66146 6.34375 9.61979 6.34375 9.57812 6.34375L8.67188 5.78125V3.15625ZM8.67188 6.75L9.51562 7.3125C9.55729 7.33333 9.59896 7.34375 9.64062 7.34375C9.68229 7.34375 9.71354 7.34375 9.73438 7.34375L9.76562 7.3125C9.72396 7.33333 10.026 7.13542 10.6719 6.71875C11.3177 6.28125 11.9844 5.84375 12.6719 5.40625L13.6719 4.75V9.53125C13.6719 9.78125 13.599 9.96875 13.4531 10.0938C13.3281 10.2188 13.1615 10.2812 12.9531 10.2812H8.67188V6.75ZM4.32812 5.53125C4.59896 5.53125 4.80729 5.66667 4.95312 5.9375C5.11979 6.1875 5.20312 6.54167 5.20312 7C5.20312 7.45833 5.11979 7.8125 4.95312 8.0625C4.80729 8.3125 4.58854 8.4375 4.29688 8.4375C4.02604 8.4375 3.80729 8.3125 3.64062 8.0625C3.47396 7.79167 3.39062 7.4375 3.39062 7C3.39062 6.5625 3.47396 6.20833 3.64062 5.9375C3.80729 5.66667 4.03646 5.53125 4.32812 5.53125ZM0.328125 1.84375L8.17188 0.34375V13.6562L0.328125 12.0312V1.84375ZM4.29688 9.3125C4.81771 9.3125 5.24479 9.09375 5.57812 8.65625C5.91146 8.21875 6.07812 7.65625 6.07812 6.96875C6.07812 6.28125 5.91146 5.72917 5.57812 5.3125C5.26562 4.875 4.84896 4.65625 4.32812 4.65625C3.78646 4.65625 3.34896 4.875 3.01562 5.3125C2.68229 5.75 2.51562 6.33333 2.51562 7.
809170625C2.51562 7.72917 2.68229 8.27083 3.01562 8.6875C3.34896 9.10417 3.77604 9.3125 4.29688 9.3125Z" fill="currentColor"></path></svg></a></span><span><a href="https://calendar.google.com/calendar/render?action=TEMPLATE&dates=20261028T120000Z/20261028T130000Z&location=Zoom%20virtual%20event&text=Autonomous%2C%20but%20accountable%3A%20How%20to%20deploy%20agents%20safely&details=Thank%20you%20for%20registering%20for%20our%20upcoming%20Sifted%20Talks%2C%20Autonomous%2C%20but%20accountable%3A%20How%20to%20deploy%20agents%20safely.%0A%0ADate%3A%20Wednesday%2C%2028%20October%202026%0ATime%3A%2012%3A00%E2%86%9213%3A00%20GMT%20%2F%2013%3A00%E2%86%9214%3A00%20CET%0A%0AAI%20agents%20take%20on%20real%20work%20inside%20businesses%20but%20handing%20over%20more%20responsibility%20also%20raises%20some%20questions%3A%20what%20should%20an%20agent%20be%20allowed%20to%20access%3F%20Who%20is%20accountable%20when%20something%20is%20wrong%3F%20And%20how%20do%20you%20know%20what%20it%20has%20done%3F%0AFor%20growing%20businesses%2C%20scattered%20content%20infrastructure%2C%20legacy%20systems%20and%20unclear%20permissions%20can%20quickly%20become%20a%20blocker.%20Simultaneously%2C%20locking%20everything%20down%20can%20make%20AI%20too%20cumbersome%20to%20be%20useful.%20This%20Sifted%20Talks%20will%20look%20at%20how%20companies%20can%20find%20the%20balance%3A%20putting%20practical%20guardrails%20around%20AI%20agents%20without%20slowing%20teams%20down.%0A%0A%0AUse%20the%20link%20below%20to%20join%20the%20discussion.%0Ahttps%3A%2F%2Fsifted.eu%2Ftalks%2Fautonomous-but-accountable-how-to-deploy-agents-safely%0A%0AHave%20any%20questions%20for%20our%20panellists%3F%20You%20can%20submit%20these%20ahead%20of%20time%20by%20emailing%20talks%40sifted.eu.%0A%0AWe%20look%20forward%20to%20seeing%20you%20for%20this%20Sifted%20Talks.%0A" target="_blank" rel="noreferrer" data-testid="googleCalendarLink"><svg width="22" height="22" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"><title>Add to Google Calendar</title><path d="M7.15625 6.0625V6.03125H13.4375C13.5 6.28125 13.5312 6.65625 13.5312 7.15625C13.5312 9.09375 12.9375 10.6667 11.75 11.875C10.5833 13.0625 9.04167 13.6562 7.125 13.6562C5.29167 13.6562 3.71875 13.0104 2.40625 11.7188C1.11458 10.4271 0.46875 8.85417 0.46875 7C0.46875 5.14583 1.11458 3.57292 2.40625 2.28125C3.69792 0.989583 5.27083 0.34375 7.125 0.34375C8.9375 0.34375 10.4375 0.9375 11.625 2.125L9.84375 3.875C9.15625 3.1875 8.26042 2.84375 7.15625 2.84375C6.03125 2.84375 5.0625 3.26042 4.25 4.09375C3.45833 4.90625 3.0625 5.89583 3.0625 7.0625C3.0625 8.20833 3.45833 9.1875 4.25 10C5.0625 10.8125 6.03125 11.2188 7.15625 11.2188C7.80208 11.2188 8.375 11.125 8.875 10.9375C9.375 10.7292 9.76042 10.4688 10.0312 10.1562C10.3229 9.84375 10.5417 9.54167 10.6875 9.25C10.8333 8.9375 10.9375 8.64583 11 8.375H7.15625V6.0625Z" fill="currentColor"></path></svg></a></span></div></div></div><a class="group relative block outline-none pr-[34px] focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-black-rock [&_.chevron]:group-hover:right-0 [&_.chevron]:group-focus-visible:right-0" href="/talks/autonomous-but-accountable-how-to-deploy-agents-safely"><h3 class="mb-2 font-bold text-[22px] leading-[130%]">Autonomous, but accountable: How to deploy agents safely</h3><div class="pointer-events-none inline-block lg:grid lg:grid-cols-3 lg:gap-y-2"><div class="hidden gap-x-[10px] lg:flex" data-testid="person"><div class="text-[14px]"><p><span class="font-bold">Mick McNeil</span>, Founder & CEO</p><p class="">@ <!-- -->Deliverance AI</p></div></div><span class="text-[14px] text-mono-70 lg:hidden"><span class="font-bold">Mick McNeil</span><span class="hidden md:inline">, <!-- -->Founder & CEO</span> @ Deliverance AI<!-- --> |<!-- --> </span><div class="hidden gap-x-[10px] lg:flex" data-testid="person"><div class="text-[14px]"><p><span class="font-bold">Eléonore Hébrard</span>, Staff Solutions Engineer</p><p class="">@ <!-- -->Box</p></div></div><span class="text-[14px] text-mono-70 lg:hidden"><span class="font-bold">Eléonore Hébrard</span><span class="hidden md:inline">, <!-- -->Staff Solutions Engineer</span> @ Box<!-- --> </span></div><div data-testid="event-card__chevron" class="pointer-events-none absolute right-0 top-0 flex h-full w-[34px] items-center justify-end text-[28px]"><span class="chevron relative right-[10px] text-black-rock transition-[right]"></span></div></a><div class="mt-3 flex items-center justify-between gap-4 md:hidden"><p data-testid="event-time" class="font-bold text-[16px] text-mono-40">Wed 28 Oct 2026 / 12:00 (GMT)</p><div class="shrink-0"><div class="text-secondary-cta [&>span]:ml-md space-x-2xl flex items-center"><span><a href="https://outlook.live.com/owa/?rru=addevent&startdt=20261028T120000Z&enddt=20261028T130000Z&location=Zoom%20virtual%20event&subject=Autonomous%2C%20but%20accountable%3A%20How%20to%20deploy%20agents%20safely&body=Thank%20you%20for%20registering%20for%20our%20upcoming%20Sifted%20Talks%2C%20Autonomous%2C%20but%20accountable%3A%20How%20to%20deploy%20agents%20safely.%0A%0ADate%3A%20Wednesday%2C%2028%20October%202026%0ATime%3A%2012%3A00%E2%86%9213%3A00%20GMT%20%2F%2013%3A00%E2%86%9214%3A00%20CET%0A%0AAI%20agents%20take%20on%20real%20work%20inside%20businesses%20but%20handing%20over%20more%20responsibility%20also%20raises%20some%20questions%3A%20what%20should%20an%20
80917agent%20be%20allowed%20to%20access%3F%20Who%20is%20accountable%20when%20something%20is%20wrong%3F%20And%20how%20do%20you%20know%20what%20it%20has%20done%3F%0AFor%20growing%20businesses%2C%20scattered%20content%20infrastructure%2C%20legacy%20systems%20and%20unclear%20permissions%20can%20quickly%20become%20a%20blocker.%20Simultaneously%2C%20locking%20everything%20down%20can%20make%20AI%20too%20cumbersome%20to%20be%20useful.%20This%20Sifted%20Talks%20will%20look%20at%20how%20companies%20can%20find%20the%20balance%3A%20putting%20practical%20guardrails%20around%20AI%20agents%20without%20slowing%20teams%20down.%0A%0A%0AUse%20the%20link%20below%20to%20join%20the%20discussion.%0Ahttps%3A%2F%2Fsifted.eu%2Ftalks%2Fautonomous-but-accountable-how-to-deploy-agents-safely%0A%0AHave%20any%20questions%20for%20our%20panellists%3F%20You%20can%20submit%20these%20ahead%20of%20time%20by%20emailing%20talks%40sifted.eu.%0A%0AWe%20look%20forward%20to%20seeing%20you%20for%20this%20Sifted%20Talks.%0A&allday=false&path=/calendar/view/Month" target="_blank" rel="noreferrer" data-testid="outlookCalendarLink"><svg width="22" height="22" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"><title>Add to Outlook Calendar</title><path d="M8.67188 3.15625H13.2031C13.2865 3.15625 13.3802 3.20833 13.4844 3.3125C13.6094 3.41667 13.6719 3.54167 13.6719 3.6875L9.70312 6.34375C9.66146 6.34375 9.61979 6.34375 9.57812 6.34375L8.67188 5.78125V3.15625ZM8.67188 6.75L9.51562 7.3125C9.55729 7.33333 9.59896 7.34375 9.64062 7.34375C9.68229 7.34375 9.71354 7.34375 9.73438 7.34375L9.76562 7.3125C9.72396 7.33333 10.026 7.13542 10.6719 6.71875C11.3177 6.28125 11.9844 5.84375 12.6719 5.40625L13.6719 4.75V9.53125C13.6719 9.78125 13.599 9.96875 13.4531 10.0938C13.3281 10.2188 13.1615 10.2812 12.9531 10.2812H8.67188V6.75ZM4.32812 5.53125C4.59896 5.53125 4.80729 5.66667 4.95312 5.9375C5.11979 6.1875 5.20312 6.54167 5.20312 7C5.20312 7.45833 5.11979 7.8125 4.95312 8.0625C4.80729 8.3125 4.58854 8.4375 4.29688 8.4375C4.02604 8.4375 3.80729 8.3125 3.64062 8.0625C3.47396 7.79167 3.39062 7.4375 3.39062 7C3.39062 6.5625 3.47396 6.20833 3.64062 5.9375C3.80729 5.66667 4.03646 5.53125 4.32812 5.53125ZM0.328125 1.84375L8.17188 0.34375V13.6562L0.328125 12.0312V1.84375ZM4.29688 9.3125C4.81771 9.3125 5.24479 9.09375 5.57812 8.65625C5.91146 8.21875 6.07812 7.65625 6.07812 6.96875C6.07812 6.28125 5.91146 5.72917 5.57812 5.3125C5.26562 4.875 4.84896 4.65625 4.32812 4.65625C3.78646 4.65625 3.34896 4.875 3.01562 5.3125C2.68229 5.75 2.51562 6.33333 2.51562 7.0625C2.51562 7.72917 2.68229 8.27083 3.01562 8.6875C3.34896 9.10417 3.77604 9.3125 4.29688 9.3125Z" fill="currentColor"></path></svg></a></span><span><a href="https://calendar.google.com/calendar/render?action=TEMPLATE&dates=20261028T120000Z/20261028T130000Z&location=Zoom%20virtual%20event&text=Autonomous%2C%20but%20accountable%3A%20How%20to%20deploy%20agents%20safely&details=Thank%20you%20for%20registering%20for%20our%20upcoming%20Sifted%20Talks%2C%20Autonomous%2C%20but%20accountable%3A%20How%20to%20deploy%20agents%20safely.%0A%0ADate%3A%20Wednesday%2C%2028%20October%202026%0ATime%3A%2012%3A00%E2%86%9213%3A00%20GMT%20%2F%2013%3A00%E2%86%9214%3A00%20CET%0A%0AAI%20agents%20take%20on%20real%20work%20inside%20businesses%20but%20handing%20over%20more%20responsibility%20also%20raises%20some%20questions%3A%20what%20should%20an%20agent%20be%20allowed%20to%20access%3F%20Who%20is%20accountable%20when%20something%20is%20wrong%3F%20And%20how%20do%20you%20know%20what%20it%20has%20done%3F%0AFor%20growing%20businesses%2C%20scattered%20content%20infrastructure%2C%20legacy%20systems%20and%20unclear%20permissions%20can%20quickly%20become%20a%20blocker.%20Simultaneously%2C%20locking%20everything%20down%20can%20make%20AI%20too%20cumbersome%20to%20be%20useful.%20This%20Sifted%20Talks%20will%20look%20at%20how%20companies%20can%20find%20the%20balance%3A%20putting%20practical%20guardrails%20around%20AI%20agents%20without%20slowing%20teams%20down.%0A%0A%0AUse%20the%20link%20below%20to%20join%20the%20discussion.%0Ahttps%3A%2F%2Fsifted.eu%2Ftalks%2Fautonomous-but-accountable-how-to-deploy-agents-safely%0A%0AHave%20any%20questions%20for%20our%20panellists%3F%20You%20can%20submit%20these%20ahead%20of%20time%20by%20emailing%20talks%40sifted.eu.%0A%0AWe%20look%20forward%20to%20seeing%20you%20for%20this%20Sifted%20Talks.%0A" target="_blank" rel="noreferrer" data-testid="googleCalendarLink"><svg width="22" height="22" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"><title>Add to Google Calendar</title><path d="M7.15625 6.0625V6.03125H13.4375C13.5 6.28125 13.5312 6.65625 13.5312 7.15625C13.5312 9.09375 12.9375 10.6667 11.75 11.875C10.5833 13.0625 9.04167 13.6562 7.125 13.6562C5.29167 13.6562 3.71875 13.0104 2.40625 11.7188C1.11458 10.4271 0.46875 8.85417 0.46875 7C0.46875 5.14583 1.11458 3.57292 2.40625 2.28125C3.69792 0.989583 5.27083 0.34375 7.125 0.34375C8.9375 0.34375 10.4375 0.9375 11.625 2.125L9.84375 3.875C9.15625 3.1875 8.26042 2.84375 7.15625 2.84375C6.03125 2.84375 5.0625 3.26042 4.25 4.09375C3.45833 4.90625 3.0625 5.89583 3.0625 7.0625C3.0625 8.20833 3.45833 9.1875 4.25 10C5.0625 10.8125 6.03125 11.2188 7.15625 11.2188C7.80208 11.2188 8.375 11.125 8.875 10.9375C9.375 10.7292 9.76042 10.4688 10.0312 10.1562C10.3229 9.84375 10.5417 9.54167 10.6875 9.25C10.8333 8.9375 10.9375 8.64583 11 8.375H7.15625V6.0625Z" fill="currentColor"></path></svg></a></span></div></div></div></div><div class="flex w-full justify-end self-end"></div></div></div></div></div></section></div></section></main><footer class="group w-full bg-[#C8C8CC] py-[50px] text-black-rock js-footer-gap"><div class="container m-auto w-full px-5 md:px-[40px] lg:px-0 max-w-[1220px] [.isMobileView_&]:px-5"><div class="flex flex-col justify-between lg:flex-row [.isMobileView_&]:flex-col" data-testid="footer-main-layout"><div class="mb-6 flex w-full flex-col items-start py-[10px] md:mb-[50px] lg:mb-0 lg:w-[394px] lg:py-0 [@media_(orientation:landscape)_and_(max-width:735px)]:py-0 [.isMobileView_&]:mb-6 [.isMobileView_&]:w-full [.isMobileView_&]:py-[10px]"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 226 49" class="h-[32px] w-auto shrink-0 md:h-[49px] [.isMobileView_&]:h-[32px] [@media_(orientation:landscape)_and_(max-width:735px)]:h-[49px]"><g clip-path="url(#footerLogoClip)"><path d="M0 0L19.0585 49H22.568L3.50958 0H0Z" fill="currentColor"></path><path d="M40.6668 24.5047C41.8029 24.8747 42.8437 25.2527 43.7893 25.6387C44.6746 25.991 45.5077 26.4571 46.2666 27.0247C46.9568 27.5447 47.5209 28.2072 47.9185 28.9647C48.3336 29.8058 48.5373 30.7314 48.5124 31.6647V31.7147C48.5715 32.8423 48.3676 33.9681 47.9161 35.0075C47.4646 36.0469 46.7773 36.9725 45.9061 37.7147C44.1679 39.1587 41.7333 39.8811 38.6022 39.8817C36.6311 39.8797 34.6752 39.5445 32.8212 38.8907C30.9121 38.2209 29.1193 37.2696 27.5051 36.0697L27.4529 36.0187L27.5051 35.9677L31.0147 30.5577L31.0669 30.6077C32.0513 31.6507 33.2462 32.4832 34.5765 33.0527C35.896 33.6093 37.3195 33.8923 38.7569 33.8837C40.7866 33.8837 41.8019 33.2467 41.8025 31.9727C41.8009 31.6758 41.7059 31.3866 41.5304 31.1441C41.355 30.9015 41.1075 30.7175 40.8215 30.6167C40.069 30.2781 39.2928 29.9921 38.4988 29.7607C38.3413 29.6993 38.1765 29.6573 38.0083 29.6357C37.8399 29.6163 37.6751 29.5739 37.5187 29.5097C36.4865 29.2431 35.4542 28.9501 34.4219 28.6307C33.4315 28.3324 32.492 27.8919 31.6343 27.3237C30.8078 26.7684 30.1128 26.0465 29.5963 25.2067C29.0243 24.2019 28.7476 23.0624 28.7965 21.9137V21.8137C28.7824 20.7066 29.0111 19.6094 29.4673 18.5957C29.9086 17.6318 30.5605 16.7737 31.3772 16.0817C32.2545 15.3493 33.272 14.7942 34.3707 14.4487C35.62 14.0505 36.9277 13.855 38.2418 13.8697C39.9381 13.8764 41.6245 14.1226 43.2486 14.6007C44.9155 15.0801 46.4988 15.8022 47.9451 16.7427V16.8427L44.797 22.4367L44.7458 22.3867C43.9045 21.583 42.9031 20.9567 41.8036 20.5467C40.6204 20.0912 39.359 19.8604 38.0871 19.8667C37.8112 19.8688 37.5357 19.8858 37.2617 19.9177C36.9638 19.9473 36.6746 20.0325 36.4096 20.1687C36.1583 20.298 35.9383 20.4784 35.7645 20.6977C35.5754 20.9724 35.4847 21.3005 35.5064 21.6307C35.5105 21.7898 35.5491 21.9463 35.6197 22.0897C35.6903 22.2331 35.7913 22.3603 35.916 22.4627C36.2345 22.7433 36.5903 22.9804 36.9739 23.1677C37.4436 23.404 37.9264 23.6147 38.42 23.7987C38.9525 23.9987 39.4772 24.1834 39.994 24.3527C40.1074 24.3544 40.2201 24.3713 40.3289 24.4027C40.4497 24.4367 40.5613 24.4707 40.6648 24.5027" fill="currentColor"></path><path d="M51.09 14.2743H57.9514V39.4743H51.09V14.2743ZM51.09 4.19434H57.9514V10.0943H51.09V4.19434Z" fill="currentColor"></path><path d="M71.9462 18.6096H79.5337V24.2016H75.0953L71.9462 18.6096ZM79.5337 4.19456V10.0946H73.9073C73.5038 10.0765 73.1023 10.1595 72.7409 10.3358C72.3795 10.5121 72.0703 10.7757 71.8428 11.1016C71.317 11.9315 71.065 12.8992 71.1208 13.8736V39.4736H64.2593V24.2016H60.5398V18.6096H64.2562V13.5696C64.2499 12.3228 64.5043 11.0879 65.0038 9.94056C65.9789 7.67777 67.8224 5.87764 70.1397 4.92556C71.3317 4.43455 72.6137 4.18582 73.9073 4.19456H79.5337Z" fill="currentColor"></path><path d="M100.076 16.8997V22.4937H96.2568L93.0565 16.8997H100.076ZM92.1789 30.8557C92.1724 31.2232 92.2449 31.5879 92.3916 31.9264C92.5384 32.2649 92.7562 32.5695 93.0309 32.8207C93.298 33.0816 93.616 33.2875 93.9661 33.4261C94.3161 33.5647 94.6912 33.6333 95.0689 33.6277H100.076V39.4737H95.0689C93.7684 39.4812 92.4796 39.2326 91.2797 38.7427C90.1199 38.276 89.0656 37.591 88.1767 36.7267C87.2943 35.8629 86.5854 34.8454 86.0865 33.7267C85.5663 32.5672 85.3025 31.3136 85.3123 30.0477V22.4877H81.5979V16.8997H85.3143V7.77173H92.1758L92.1789 30.8557Z" fill="currentColor"></path>
80917<path d="M114.266 13.868C116.042 13.8587 117.8 14.2108 119.428 14.902C122.617 16.2355 125.159 18.7168 126.525 21.831C127.235 23.438 127.596 25.1717 127.583 26.922C127.586 27.8708 127.483 28.8171 127.275 29.744L127.223 29.844H114.115L110.806 24.704H120.613C120.167 23.3457 119.334 22.1394 118.212 21.226C117.107 20.3236 115.705 19.8407 114.264 19.866C113.356 19.8614 112.457 20.0502 111.631 20.419C110.826 20.7728 110.099 21.2758 109.49 21.9C108.874 22.5396 108.392 23.2902 108.07 24.11C107.721 24.9991 107.547 25.9448 107.558 26.897C107.567 27.7127 107.724 28.5203 108.023 29.282C108.33 30.0993 108.785 30.8562 109.365 31.517C109.962 32.196 110.679 32.7656 111.481 33.199C112.334 33.6577 113.295 33.8914 114.268 33.877C115.137 33.8869 116.002 33.7592 116.829 33.499C117.716 33.1626 118.48 32.5743 119.022 31.81L119.073 31.76L119.176 31.81L125.163 34.385L125.06 34.485C123.842 36.1634 122.22 37.5245 120.338 38.449C118.462 39.3902 116.382 39.8785 114.273 39.873C112.475 39.8844 110.693 39.5412 109.034 38.864C107.443 38.221 105.996 37.2792 104.776 36.092C103.561 34.9041 102.588 33.502 101.908 31.96C101.201 30.3702 100.84 28.6536 100.851 26.92C100.837 25.1697 101.198 23.4359 101.908 21.829C103.275 18.7061 105.828 16.2223 109.031 14.9C110.686 14.2068 112.47 13.8548 114.27 13.866" fill="currentColor"></path><path d="M157.934 4.19434V39.4743H151.017L151.069 26.8243C151.073 25.9024 150.87 24.9908 150.475 24.1533C150.097 23.3384 149.573 22.5961 148.927 21.9613C148.277 21.3311 147.505 20.8338 146.656 20.4983C145.763 20.1431 144.807 19.9634 143.843 19.9693C142.887 19.9616 141.939 20.1415 141.056 20.4983C140.212 20.8408
80917139.448 21.3466 138.811 21.9853C138.17 22.6289 137.654 23.3804 137.288 24.2033C136.914 25.0641 136.721 25.9897 136.721 26.9248C136.721 27.86 136.914 28.7856 137.288 29.6463C138.016 31.2982 139.364 32.6148 141.056 33.3253C141.935 33.6996 142.884 33.8888 143.843 33.8803C144.327 33.8808 144.81 33.8474 145.288 33.7803C145.755 33.7189 146.208 33.5838 146.63 33.3803H146.732L149.262 37.9163L149.209 37.9663C147.428 39.2746 145.243 39.9505 143.016 39.8823C141.264 39.8927 139.527 39.5638 137.906 38.9148C136.284 38.2659 134.811 37.3096 133.57 36.1013C132.356 34.9134 131.383 33.5113 130.703 31.9693C130.005 30.3765 129.645 28.6619 129.645 26.9293C129.645 25.1968 130.005 23.4822 130.703 21.8893C131.383 20.3472 132.356 18.9448 133.57 17.7563C134.811 16.548 136.284 15.5917 137.906 14.9429C139.527 14.2941 141.264 13.9656 143.016 13.9763C144.58 13.8985 146.139 14.2089 147.547 14.8787C148.955 15.5484 150.167 16.5556 151.068 17.8063V4.19434H157.934Z" fill="currentColor"></path><path d="M183.939 6.10352e-05L164.881 49.0001H168.391L187.449 6.10352e-05H183.939Z" fill="currentColor"></path></g><defs><clipPath id="footerLogoClip"><rect width="226" height="49" fill="white"></rect></clipPath></defs></svg></div><div class="grid w-full max-w-full grid-cols-2 gap-x-0 gap-y-[30px] pr-1 md:w-fit md:grid-cols-[max-content_max-content_max-content_max-content] md:gap-x-[clamp(48px,7vw,80px)] lg:flex lg:w-auto lg:justify-end lg:gap-x-[80px] [@media_(min-width:420px)_and_(max-width:735px)]:w-fit [@media_(min-width:420px)_and_(max-width:735px)]:grid-cols-[max-content_max-content] [@media_(min-width:420px)_and_(max-width:735px)]:gap-x-[80px] [.isMobileView_&]:flex [.isMobileView_&]:flex-row [.isMobileView_&]:flex-wrap [.isMobileView_&]:justify-start [.isMobileView_&]:gap-x-0 [.isMobileView_&]:gap-y-[30px]" data-testid="footer-link-columns"><div class="flex min-w-0 flex-col text-black-rock lg:w-auto [.isMobileView_&]:w-[50%]" data-testid="footer-link-column"><h3 class="mb-3 font-bold text-[16px] leading-[130%]">Company</h3><ul class="flex flex-col gap-[20px] md:gap-[11px] [.isMobileView_&]:gap-[20px]"><li class="inline-flex"><a href="/about" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">About</a></li><li class="inline-flex"><a href="/careers" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Careers</a></li><li class="inline-flex"><a href="/advertising" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Advertising</a></li><li class="inline-flex"><a href="/cookie-policy" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Cookie Policy</a></li><li class="inline-flex"><a href="/privacy-policy" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Privacy Policy</a></li><li class="inline-flex"><a href="/ai-code-of-conduct" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">AI Code of Conduct</a></li><li class="inline-flex"><a href="/terms-of-use" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Terms of Use</a></li><li class="inline-flex"><a href="/contact-us" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Contact Us</a></li></ul></div><div class="flex min-w-0 flex-col text-black-rock lg:w-auto [.isMobileView_&]:w-[50%]" data-testid="footer-link-column"><h3 class="mb-3 font-bold text-[16px] leading-[130%]">Sifted Pro</h3><ul class="flex flex-col gap-[20px] md:gap-[11px] [.isMobileView_&]:gap-[20px]"><li class="inline-flex"><a href="/subscribe" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Subscribe</a></li><li class="inline-flex"><a href="/pro/briefings/about" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Briefings</a></li><li class="inline-flex"><a href="https://info.sifted.eu/pro-deals-newsletter" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Deals Newsletter</a></li></ul></div><div class="flex min-w-0 flex-col text-black-rock lg:w-auto [.isMobileView_&]:w-[50%]" data-testid="footer-link-column"><h3 class="mb-3 font-bold text-[16px] leading-[130%]">Products</h3><ul class="flex flex-col gap-[20px] md:gap-[11px] [.isMobileView_&]:gap-[20px]"><li class="inline-flex"><a href="/newsletters" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Newsletters</a></li><li class="inline-flex"><a href="/rankings" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Rankings</a></li><li class="inline-flex"><a href="/intelligence/reports" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Reports</a></li><li class="inline-flex"><a href="/leaderboards" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Leaderboards</a></li><li class="inline-flex"><a href="/deals-tracker" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Deals Tracker</a></li><li class="inline-flex"><a href="/investor-tracker" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Investor Tracker</a></li><li class="inline-flex"><a href="/market-tracker" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Market Tracker</a></li><li class="inline-flex"><a href="/ma-tracker" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">M&A Tracker </a></li></ul></div><div class="flex min-w-0 flex-col text-black-rock lg:w-auto [.isMobileView_&]:w-[50%]" data-testid="footer-link-column"><h3 class="mb-3 font-bold text-[16px] leading-[130%]">Community</h3><ul class="flex flex-col gap-[20px] md:gap-[11px] [.isMobileView_&]:gap-[20px]"><li class="inline-flex"><a href="/talks" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Talks</a></li><li class="inline-flex"><a href="/podcasts" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Podcasts</a></li><li class="inline-flex"><a href="https://summit.sifted.eu/" class="ga-footer-link text-[16px] leading-[130%] transition-[color] hover:text-cerise focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-cerise">Sifted Summit</a></li></ul></div></div></div></div><div class="mt-[24px] border-t border-[#AAAAB2] pt-[24px]"><div class="container m-auto w-full px-5 md:px-[40px] lg:px-0 max-w-[1220px] [.isMobileView_&]:px-5"><div class="flex flex-col items-start justify-between gap-[14px] md:flex-row md:items-end md:gap-[24px] [.isMobileView_&]:flex-col [.isMobileView_&]:items-start [.isMobileView_&]:gap-[14px]"><ul class="flex gap-5"><li class="flex"><a href="https://www.linkedin.com/company/siftedeu/" referrerPolicy="str
80917ict-origin-when-cross-origin" class="relative inline-flex items-center justify-center leading-[100%] duration-200 ease-in-out transition-[background-color,box-shadow,color,border-color] after:pointer-events-none after:bg-black-rock after:absolute after:bottom-0 after:left-0 after:right-0 after:top-0 after:opacity-0 after:duration-200 after:ease-in-out after:transition-opacity after:content-[''] disabled:pointer-events-none disabled:text-mono-20 disabled:user-select-none focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-inset rounded-none bg-transparent focus-visible:ring-black text-black-rock hover:after:opacity-[10%] active:after:opacity-[15%] focus-visible:ring-black w-[36px] h-[36px] p-[6px] ga-footer-link-social" aria-label="LinkedIn" target="_blank" rel="external noopener"><div class="inline-flex h-[24px] w-[24px] items-center justify-center"><img src="https://www.datocms-assets.com/60124/1689076682-linkedin.svg" alt="LinkedIn Logo" title="LinkedIn Logo" class="h-[24] w-[24]" loading="lazy"/></div></a></li><li class="flex"><a href="https://whatsapp.com/channel/0029VbD54jc4SpkF4lq81j41" referrerPolicy="strict-origin-when-cross-origin" class="relative inline-flex items-center justify-center leading-[100%] duration-200 ease-in-out transition-[background-color,box-shadow,color,border-color] after:pointer-events-none after:bg-black-rock after:absolute after:bottom-0 after:left-0 after:right-0 after:top-0 after:opacity-0 after:duration-200 after:ease-in-out after:transition-opacity after:content-[''] disabled:pointer-events-none disabled:text-mono-20 disabled:user-select-none focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-inset rounded-none bg-transparent focus-visible:ring-black text-black-rock hover:after:opacity-[10%] active:after:opacity-[15%] focus-visible:ring-black w-[36px] h-[36px] p-[6px] ga-footer-link-social" aria-label="Whatsapp" target="_blank" rel="external noopener"><div class="inline-flex h-[24px] w-[24px] items-center justify-center"><img src="https://www.datocms-assets.com/60124/1781185911-whatsapp.svg" class="h-[24] w-[24]" loading="lazy"/></div></a></li><li class="flex"><a href="https://www.instagram.com/siftedeu/" referrerPolicy="strict-origin-when-cross-origin" class="relative inline-flex items-center justify-center leading-[100%] duration-200 ease-in-out transition-[background-color,box-shadow,color,border-color] after:pointer-events-none after:bg-black-rock after:absolute after:bottom-0 after:left-0 after:right-0 after:top-0 after:opacity-0 after:duration-200 after:ease-in-out after:transition-opacity after:content-[''] disabled:pointer-events-none disabled:text-mono-20 disabled:user-select-none focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-inset rounded-none bg-transparent focus-visible:ring-black text-black-rock hover:after:opacity-[10%] active:after:opacity-[15%] focus-visible:ring-black w-[36px] h-[36px] p-[6px] ga-footer-link-social" aria-label="Instagram" target="_blank" rel="external noopener"><div class="inline-flex h-[24px] w-[24px] items-center justify-center"><img src="https://www.datocms-assets.com/60124/1729688606-instagram.svg" class="h-[24] w-[24]" loading="lazy"/></div></a></li><li class="flex"><a href="https://www.facebook.com/siftedeu" referrerPolicy="strict-origin-when-cross-origin" class="relative inline-flex items-center justify-center leading-[100%] duration-200 ease-in-out transition-[background-color,box-shadow,color,border-color] after:pointer-events-none after:bg-black-rock after:absolute after:bottom-0 after:left-0 after:right-0 after:top-0 after:opacity-0 after:duration-200 after:ease-in-out after:transition-opacity after:content-[''] disabled:pointer-events-none disabled:text-mono-20 disabled:user-select-none focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-inset rounded-none bg-transparent focus-visible:ring-black text-black-rock hover:after:opacity-[10%] active:after:opacity-[15%] focus-visible:ring-black w-[36px] h-[36px] p-[6px] ga-footer-link-social" aria-label="Facebook" target="_blank" rel="external noopener"><div class="inline-flex h-[24px] w-[24px] items-center justify-center"><img src="https://www.datocms-assets.com/60124/1689076874-facebook.svg" alt="Facebook Logo" title="Facebook Logo" class="h-[24] w-[24]" loading="lazy"/></div></a></li><li class="flex"><a href="https://sifted.eu/feed/?post_type=article" referrerPolicy="str
80917ict-origin-when-cross-origin" class="relative inline-flex items-center justify-center leading-[100%] duration-200 ease-in-out transition-[background-color,box-shadow,color,border-color] after:pointer-events-none after:bg-black-rock after:absolute after:bottom-0 after:left-0 after:right-0 after:top-0 after:opacity-0 after:duration-200 after:ease-in-out after:transition-opacity after:content-[''] disabled:pointer-events-none disabled:text-mono-20 disabled:user-select-none focus:outline-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring focus-visible:ring-inset rounded-none bg-transparent focus-visible:ring-black text-black-rock hover:after:opacity-[10%] active:after:opacity-[15%] focus-visible:ring-black w-[36px] h-[36px] p-[6px] ga-footer-link-social" aria-label="Feed" target="_blank" rel="external noopener"><div class="inline-flex h-[24px] w-[24px] items-center justify-center"><img src="https://www.datocms-assets.com/60124/1689076939-rss-feed.svg" alt="RSS Feed Logo" title="RSS Feed Logo" class="h-[24] w-[24]" loading="lazy"/></div></a></li></ul><div><p class="markdown_container__3rlf4 text-[14px] leading-[130%] text-mono-70">© 2026 Sifted EU Ltd. All Rights Reserved.</p></div></div></div></div></footer></div><div>
80917<script type="text/javascript"> 80918 if (!window.Zephr) window.Zephr = {}; 80919 if (!window.Zephr.outcomes) window.Zephr.outcomes = {}; 80920 window.Zephr.outcomes["display-banner"] = { 80921 featureLabel: "Banner", 80922 outcomeId: "transformation/2#1", 80923 outcomeLabel: "Remove" 80924 }; 80925 </script>
80925</div><div><div class="zephr-feature show-bottom-banner-alt"></div></div></div></div>
80925<script type="text/javascript"> 80926 if (!window.Zephr) window.Zephr = {}; 80927 if (!window.Zephr.outcomes) window.Zephr.outcomes = {}; 80928 window.Zephr.outcomes["sifted-user"] = { 80929 featureLabel: "window.Sifted.user", 80930 outcomeId: "transformation/1", 80931 outcomeLabel: "Anonymous" 80932 }; 80933 </script>
80933<script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"__initialState":{"homepage":{"sectors":[],"latestNews":[],"latest":[{"id":140908,"url":"https://sifted.eu/articles/browse-sifteds-company-coverage/","slug":"browse-sifteds-company-coverage","title":"Browse Sifted's company coverage","excerpt":"Search our article directory of Europe's startups and scaleups â growing every week as we cover more.","comments":{"count":"0","enabled":false},"publishTimestamp":1790260898000,"author":{"name":"Jonathan Sinclair","url":"https://sifted.eu/author/jonathansinclair/"},"authors":[{"id":8734,"type":"wpuser","name":"Jonathan Sinclair","twitter":"","bio":"Jonathan Sinclair is head of research at Sifted. Find him on \u003ca href=\"https://www.linkedin.com/in/jonathan-sinclair-98a019137/\"\u003e LinkedIn \u003c/a\u003e","niceName":"jonathansinclair","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","articleFormat":"standard","layout":"long_form","sector":{"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"category":{"name":"List","slug":"list","url":"https://sifted.eu/categories/list/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":41674,"name":"List","slug":"list","url":"https://sifted.eu/categories/list/"}]},"sectors":{"primary":{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"all":[{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":null,"all":[]},"practices":{"primary":null,"all":[]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":43560,"name":"Company coverage","slug":"company-coverage","url":"https://sifted.eu/tag/company-coverage/"}]}},"tagList":[{"name":"Venture capital","link":"https://sifted.eu/sector/venture-capital/"},{"name":"Company coverage","link":"https://sifted.eu/tag/company-coverage/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2025/10/10165112/sifted2.jpg","full":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2025/10/10165112/sifted2.jpg","fullWidth":2048,"fullHeight":1365,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2025/10/10165112/sifted2.jpg","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2025/10/10165112/sifted2.jpg","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2025/10/10165112/sifted2.jpg","caption":"The Sifted Summit 2025 team ","placeholder":false,"alt":"The Sifted Summit 2025 team"},"cardImage":{"caption":"The Sifted Summit 2025 team ","alt":"The Sifted Summit 2025 team","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2025/10/10165112/sifted2.jpg","fullWidth":2048,"fullHeight":1365,"placeholder":false},"longFormMobileImage":{"caption":"The Sifted Summit 2025 team ","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2025/10/10165112/sifted2.jpg","fullWidth":2048,"fullHeight":1365,"placeholder":false}},{"id":140872,"url":"https://sifted.eu/articles/new-york-podcast/","slug":"new-york-podcast","title":"Is New York warming to European tech?","excerpt":"Anne Sraders joins host Freya Pratty on this week's Sifted podcast","comments":{"count":"0","enabled":false},"publishTimestamp":1790255114000,"author":{"name":"Anne Sraders","url":"https://sifted.eu/author/anne-sraders/"},"authors":[{"id":9088,"type":"wpuser","name":"Anne Sraders","twitter":"https://x.com/AnneSraders","bio":"Anne Sraders is a senior reporter at Sifted, based in Berlin. She covers the VC industry and deeptech startups. She also writes Sifted's weekly VC newsletter \u003ca href=\"https://sifted.eu/newsletters\"\u003e Up Round\u003c/a\u003e. Follow her on \u003ca href=\"https://x.com/AnneSraders\"\u003e X\u003c/a\u003e and \u003ca href=\"https://www.linkedin.com/in/anne-sraders-54222b95//\"\u003e LinkedIn\u003c/a\u003e","niceN
80933ame":"anne-sraders","image":false},{"id":8525,"type":"wpuser","name":"Freya Pratty","twitter":"FPratty","bio":"Freya Pratty is Sifted's associate editor. She covers UK tech and leads Sifted's investigations. Follow her on \u003ca href=\"https://twitter.com/FPratty\"\u003e X \u003c/a\u003e, \u003ca href=\"https://www.linkedin.com/in/freyapratty111/\"\u003e LinkedIn \u003c/a\u003e and \u003ca href=\"https://bsky.app/profile/freyapratty.bsky.social\"\u003e Bluesky\u003c/a\u003e","niceName":"freya-williams","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"standard","layout":"short_form","sector":{"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"category":{"name":"Podcast","slug":"podcast","url":"https://sifted.eu/categories/podcast/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":40118,"name":"Podcast","slug":"podcast","url":"https://sifted.eu/categories/podcast/"}]},"sectors":{"primary":{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"all":[{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":{"id":1928,"name":"Entrepreneurship","slug":"entrepreneurship","url":"https://sifted.eu/topic/entrepreneurship/"},"all":[{"id":1928,"name":"Entrepreneurship","slug":"entrepreneurship","url":"https://sifted.eu/topic/entrepreneurship/"},{"id":1929,"name":"Innovation","slug":"innovation","url":"https://sifted.eu/topic/innovation/"},{"id":1927,"name":"Startups","slug":"startups","url":"https://sifted.eu/topic/startups/"},{"id":1926,"name":"Technology","slug":"technology","url":"https://sifted.eu/topic/technology/"}]},"practices":{"primary":null,"all":[]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":43145,"name":"Podcast","slug":"podcast","url":"https://sifted.eu/tag/podcast/"},{"id":43159,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/tag/venture-capital/"}]}},"tagList":[{"name":"Venture capital","link":"https://sifted.eu/sector/venture-capital/"},{"name":"Podcast","link":"https://sifted.eu/tag/podcast/"},{"name":"Venture capital","link":"https://sifted.eu/tag/venture-capital/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=1280,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","full":"https://images.sifted.eu/cdn-cgi/image/width=1280,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","fullWidth":1280,"fullHeight":720,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","caption":"","placeholder":false,"alt":""},"cardImage":{"fullWidth":1080,"fullHeight":1080,"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=1080,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23224230/Freya-Anne-image-square.png","alt":"","placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=1280,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","fullWidth":1280,"fullHeight":720,"placeholder":false}},{"id":140887,"url":"https://sifted.eu/articles/exclusive-revolut-customers-fresh-hack/","slug":"exclusive-revolut-customers-fresh-hack","title":"Exclusive: Revolut customers hit by fresh security breach","excerpt":"The broker the fintech uses to trade US stocks suffered a security incident, emails seen by Sifted show","comments":{"count":"0","enabled":false},"publishTimestamp":1790249139000,"author":{"name":"Maya Dharampal-Hornby","url":"https://sifted.eu/author/maya-dharampal-hornby/"},"authors":[{"id":9171,"type":"wpuser","name":"Maya Dharampal-Hornby","twitter":"","bio":"Maya Dharampal-Hornby is a reporter,
80933covering UK tech for Sifted, based in London. She's also the producer of \u003ca href=\"https://podcast.sifted.eu/\"\u003e Startup Europe â The Sifted Podcast \u003c/a\u003e.","niceName":"maya-dharampal-hornby","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","articleFormat":"standard","layout":"short_form","sector":{"name":"Fintech","slug":"fintech","url":"https://sifted.eu/sector/fintech/"},"category":{"name":"Exclusive","slug":"exclusive","url":"https://sifted.eu/categories/exclusive/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":41679,"name":"Exclusive","slug":"exclusive","url":"https://sifted.eu/categories/exclusive/"},{"id":4497,"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"}]},"sectors":{"primary":{"id":11535,"name":"Fintech","slug":"fintech","url":"https://sifted.eu/sector/fintech/"},"all":[{"id":11535,"name":"Fintech","slug":"fintech","url":"https://sifted.eu/sector/fintech/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":null,"all":[]},"practices":{"primary":null,"all":[]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":40969,"name":"Revolut","slug":"revolut","url":"https://sifted.eu/tag/revolut/"}]}},"tagList":[{"name":"Fintech","link":"https://sifted.eu/sector/fintech/"},{"name":"Revolut","link":"https://sifted.eu/tag/revolut/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png","full":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png","fullWidth":2048,"fullHeight":672,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png","caption":"Passports and driving licences, birth dates, addresses and more were exposed in the breach. ","placeholder":false,"alt":"revolut hack"},"cardImage":{"caption":"Passports and driving licences, birth dates, addresses and more were exposed in the breach. ","alt":"revolut hack","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png","fullWidth":2048,"fullHeight":672,"placeholder":false},"longFormMobileImage":{"caption":"Passports and driving licences, birth dates, addresses and more were exposed in the breach. ","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png","fullWidth":2048,"fullHeight":672,"placeholder":false}},{"id":140407,"url":"https://sifted.eu/articles/uk-startup-building-ais-next-enterprise-category-brnd/","slug":"uk-startup-building-ais-next-enterprise-category-brnd","title":"Inside the UK startup building AIâs next enterprise category","excerpt":"Backed by investors including LocalGlobe, Cherry Ventures and Octopus Ventures, Resolutiion is betting that Risk-to-Resolution will be the next breakout wave in enterprise AI","comments":{"count":"0","enabled":false},"publishTimestamp":1790240400000,"author":{"name":"techUK","url":"https://sifted.eu/author/techuk/"},"authors":[{"id":9283,"type":"wpuser","name":"techUK","twitter":"","bio":"","niceName":"techuk","image":false}],"isSponsored":true,"sponsorshipType":"Paid for and produced by","sponsorDetails":{"logo":"https://images.sifted.eu/cdn-cgi/image/format=auto/wp-content/uploads/2026/09/17113959/unnamed.png","logoWidth":438,"logoHeight":137,"name":"TechUK","description":"","url":"","urlLabel":"Learn more"},"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"sponsored","layout":"","sector":{"name":"Startup life","slug":"startup-life","url":"https://sifted.eu/sector/startup-life/"},"category":{"name":"Paid for and produced by","slug":"paid-for-and-produced-by","url":"https://sifted.eu/categories/paid-for-and-produced-by/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":41697,"name":"Paid for and produced by","slug":"paid-for-and-produced-by","url":"https://sifted.eu/categories/paid-for-and-produced-by/"},{"id":41677,"name":"Branded content","slug":"branded-content","url":"https://sifted.eu/categories/branded-content/"}]},"sectors":{"primary":{"id":11531,"name":"Startup life","slug":"startup-life","url":"https://sifted.eu/sector/startup-life/"},"all":[{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"},{"id":11531,"name":"Startup life","slug":"startup-life","url":"https://sifted.eu/sector/startup-life/"}]},"themes":{"primary":{"id":1714,"name":"Startups","slug":"startups","url":"https://sifted.eu/themes/startups/"},"all":[{"id":1714,"name":"Startups","slug":"startups","url":"https://sifted.eu/themes/startups/"}]}
80933,"topics":{"primary":{"id":1927,"name":"Startups","slug":"startups","url":"https://sifted.eu/topic/startups/"},"all":[{"id":1927,"name":"Startups","slug":"startups","url":"https://sifted.eu/topic/startups/"}]},"practices":{"primary":{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"},"all":[{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"}]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[]}},"tagList":[{"name":"Artificial intelligence","link":"https://sifted.eu/sector/artificial-intelligence/"},{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"Startup life","link":"https://sifted.eu/sector/startup-life/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","full":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","fullWidth":2048,"fullHeight":1280,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","caption":"","placeholder":false,"alt":""},"cardImage":{"caption":"","alt":"","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","fullWidth":2048,"fullHeight":1280,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","fullWidth":2048,"fullHeight":1280,"placeholder":false}},{"id":140819,"url":"https://sifted.eu/articles/dtcp-first-close-defence-fund-invest-europe-growth/","slug":"dtcp-first-close-defence-fund-invest-europe-growth","title":"Growth investor DTCP raises â¬455m first close for defence fund, plots future funds","excerpt":"The firm launched the fund in January and has already made two investments","comments":{"count":"0","enabled":false},"publishTimestamp":1790233236000,"author":{"name":"Anne Sraders","url":"https://sifted.eu/author/anne-sraders/"},"authors":[{"id":9088,"type":"wpuser","name":"Anne Sraders","twitter":"https://x.com/AnneSraders","bio":"Anne Sraders is a senior reporter at Sifted, based in Berlin. She covers the VC industry and deeptech startups. She also writes Sifted's weekly VC newsletter \u003ca href=\"https://sifted.eu/newsletters\"\u003e Up Round\u003c/a\u003e. Follow her on \u003ca href=\"https://x.com/AnneSraders\"\u003e X\u003c/a\u003e and \u003ca href=\"https://www.linkedin.com/in/anne-sraders-54222b95//\"\u003e LinkedIn\u003c/a\u003e","niceName":"anne-sraders","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"standard","layout":"short_form","sector":{"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"category":{"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":4497,"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"}]},"sectors":{"primary":{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"all":[{"id":41484,"name":"Defence tech","slug":"defence-tech","url":"https://sifted.eu/sector/defence-tech/"},{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"},{"id":11541,"name":"LP","slug":"lp","url":"https://sifted.eu/sector/lp/"},{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"}]},"themes":{"primary":{"id":1711,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/themes/venture-capital/"},"all":[{"id":1711,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/themes/venture-capital/"}]},"topics":{"primary":{"id":1950,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/topic/venture-capital/"},"all":[{"id":1950,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/topic/venture-capital/"}]},"practices":{"primary":{"id":311,"name":"Funding","slug":"funding","url":"https://sifted.eu/practice/funding/"},"all":[{"id":311,"name":"Funding","slug":"funding","url":"https://sifted.eu/practice/funding/"}]},"countries":{"primary":{"id":256,"name":"Germany","slug":"germany","url":"https://sifted.eu/countries/germany/"},"all":[{"id":256,"name":"Germany","slug":"germany","url":"https://sifted.eu/countries/germany/"}]},"tags":{"primary":null,"all":[{"id":42079,"name":"DTCP","slug":"dtcp","url":"https://sifted.eu/tag/dtcp/"}]}},"tagList":[{"name":"Defence tech","link":"https://sifted.eu/sector/defence-tech/"},{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"LP","link":"https://sifted.eu/sector/lp/"},{"name":"Venture capital","link":"https://sifted.eu/sector/venture-capital/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=1333,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23163715/Thomas-Preus_DTCP-Capital-scaled-e1790177896849.jpeg","full":"https://images.sifted.eu/cdn-cgi/image/width=1333,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23163715/Thomas-Preus_DTCP-Capital-scaled-e1790177896849.jpeg","fullWidth":1333,"fullHeight":1428,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23163715/Thomas-Preus_DTCP-Capital-scaled-e1790177896849.jpeg","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23163715/Thomas-Preus_DTCP-Capital-scaled-e1790177896849.jpeg","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23163715/Thomas-Preus_DTCP-Capital-scaled-e1790177896849.jpeg","caption":"Thomas Preuà of DTCP. Courtesy of DTCP","placeholder":false,"alt":"Thomas Preuà of DTCP"},"cardImage":{"caption":"Thomas Preuà of DTCP. Courtesy of DTCP","alt":"Thomas Preuà of DTCP","base":"https://images.sifted.eu/cdn-cgi/image/width=1333,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23163715/Thomas-Preus_DTCP-Capital-scaled-e1790177896849.jpeg","fullWidth":1333,"fullHeight":1428,"placeholder":false},"longFormMobileImage":{"caption":"Thomas Preuà of DTCP. Courtesy of DTCP","base":"https://images.sifted.eu/cdn-cgi/image/width=1333,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23163715/Thomas-Preus_DTCP-Capital-scaled-e1790177896849.jpeg","fullWidth":1333,"fullHeight":1428,"placeholder":false}},{"id":140826,"url":"https://sifted.eu/articles/simon-kohl-latent-labs-deepmind-founders-factory/","slug":"simon-kohl-latent-labs-deepmind-founders-factory","title":"âPushing the frontier is best done outsideâ: DeepMind alum Simon Kohl on leaving Big Tech","excerpt":"Kohl left DeepMind three years ago to launch Latent Labs, an AI lab dedicated to drug design and discovery","comments":{"count":"0","enabled":false},"publishTimestamp":1790226027000,"author":{"name":"Daphné Leprince-Ringuet","url":"https://sifted.eu/author/daphne-leprince-ringuet/"},"authors":[{"id":9041,"type":"wpuser","name":"Daphné Leprince-Ringuet","t
80933witter":"daphneleprince","bio":"Daphné Leprince-Ringuet is a senior reporter for Sifted, based in Paris. She covers French tech and writes Sifted's \u003ca href=\"https://sifted.eu/newsletters\"\u003e AI and Deeptech newsletter \u003c/a\u003e. You can find her on \u003ca href=\"https://twitter.com/daphneleprince\"\u003eX\u003c/a\u003e and \u003ca href=\"https://www.linkedin.com/in/daphne-leprince-ringuet/\"\u003eLinkedIn\u003c/a\u003e","niceName":"daphne-leprince-ringuet","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","articleFormat":"standard","layout":"portrait","sector":{"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},"category":{"name":"Interview","slug":"interview","url":"https://sifted.eu/categories/interview/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":4498,"name":"Interview","slug":"interview","url":"https://sifted.eu/categories/interview/"},{"id":41675,"name":"Features","slug":"features","url":"https://sifted.eu/categories/features/"}]},"sectors":{"primary":{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},"all":[{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"},{"id":11545,"name":"Pharma","slug":"pharma","url":"https://sifted.eu/sector/pharma/"},{"id":11528,"name":"Healthtech","slug":"healthtech","url":"https://sifted.eu/sector/healthtech/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":null,"all":[]},"practices":{"primary":null,"all":[]},"countries":{"primary":{"id":70,"name":"United Kingdom","slug":"united-kingdom","url":"https://sifted.eu/countries/united-kingdom/"},"all":[{"id":70,"name":"United Kingdom","slug":"united-kingdom","url":"https://sifted.eu/countries/united-kingdom/"}]},"tags":{"primary":null,"all":[{"id":42377,"name":"Google DeepMind","slug":"google-deepmind","url":"https://sifted.eu/tag/google-deepmind/"},{"id":43030,"name":"Latent Labs","slug":"latent-labs","url":"https://sifted.eu/tag/latent-labs/"},{"id":43543,"name":"Simon Kohl","slug":"simon-kohl","url":"https://sifted.eu/tag/simon-kohl/"}]}},"tagList":[{"name":"Artificial intelligence","link":"https://sifted.eu/sector/artificial-intelligence/"},{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"Pharma","link":"https://sifted.eu/sector/pharma/"},{"name":"Healthtech","link":"https://sifted.eu/sector/healthtech/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=1200,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23151411/Headshot-Dr-Simon-Kohl-CEO-and-Founder-of-Latent-Labs-1.jpg","full":"https://images.sifted.eu/cdn-cgi/image/width=1200,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23151411/Headshot-Dr-Simon-Kohl-CEO-and-Founder-of-Latent-Labs-1.jpg","fullWidth":1200,"fullHeight":800,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23151411/Headshot-Dr-Simon-Kohl-CEO-and-Founder-of-Latent-Labs-1.jpg","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23151411/Headshot-Dr-Simon-Kohl-CEO-and-Founder-of-Latent-Labs-1.jpg","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23151411/Headshot-Dr-Simon-Kohl-CEO-and-Founder-of-Latent-Labs-1.jpg","caption":"","placeholder":false,"alt":"Simon Kohl"},"cardImage":{"caption":"","alt":"Simon Kohl","base":"https://images.sifted.eu/cdn-cgi/image/width=1200,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23151411/Headshot-Dr-Simon-Kohl-CEO-and-Founder-of-Latent-Labs-1.jpg","fullWidth":1200,"fullHeight":800,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=1200,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23151411/Headshot-Dr-Simon-Kohl-CEO-and-Founder-of-Latent-Labs-1.jpg","fullWidth":1200,"fullHeight":800,"placeholder":false}},{"id":140845,"url":"https://sifted.eu/articles/claude-founder-house-london/","slug":"claude-founder-house-london","title":"Anthropic: We're not trying to eat startups' lunch","excerpt":"The frontier lab held an event for London's startups yesterday","comments":{"count":"0","enabled":false},"publishTimestamp":1790226025000,"author":{"name":"Maya Dharampal-Hornby","url":"https://sifted.eu/author/maya-dharampal-hornby/"},"authors":[{"id":9171,"type":"wpuser","name":"Maya Dharampal-Hornby","twitter":"","bio":"Maya Dharampal-Hornby is a reporter,
80933covering UK tech for Sifted, based in London. She's also the producer of \u003ca href=\"https://podcast.sifted.eu/\"\u003e Startup Europe â The Sifted Podcast \u003c/a\u003e.","niceName":"maya-dharampal-hornby","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"standard","layout":"short_form","sector":{"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},"category":{"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":4497,"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"}]},"sectors":{"primary":{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},"all":[{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"},{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":null,"all":[]},"practices":{"primary":null,"all":[]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":41784,"name":"Anthropic","slug":"anthropic","url":"https://sifted.eu/tag/anthropic/"},{"id":43542,"name":"Index","slug":"index","url":"https://sifted.eu/tag/index/"}]}},"tagList":[{"name":"Artificial intelligence","link":"https://sifted.eu/sector/artificial-intelligence/"},{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"Venture capital","link":"https://sifted.eu/sector/venture-capital/"},{"name":"Anthropic","link":"https://sifted.eu/tag/anthropic/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=1500,quality=75,fit=cover,format=auto/wp-content/uploads/2025/04/08094834/Siblings-recent-photo-2.jpg","full":"https://images.sifted.eu/cdn-cgi/image/width=1500,quality=75,fit=cover,format=auto/wp-content/uploads/2025/04/08094834/Siblings-recent-photo-2.jpg","fullWidth":1500,"fullHeight":1001,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2025/04/08094834/Siblings-recent-photo-2.jpg","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2025/04/08094834/Siblings-recent-photo-2.jpg","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2025/04/08094834/Siblings-recent-photo-2.jpg","caption":"Anthropic cofounders Daniela and Dario Amodei","placeholder":false,"alt":"Anthropic cofounders Daniela and Dario Amodei next to each other"},"cardImage":{"caption":"Anthropic cofounders Daniela and Dario Amodei","alt":"Anthropic cofounders Daniela and Dario Amodei next to each other","base":"https://images.sifted.eu/cdn-cgi/image/width=1500,quality=75,fit=cover,format=auto/wp-content/uploads/2025/04/08094834/Siblings-recent-photo-2.jpg","fullWidth":1500,"fullHeight":1001,"placeholder":false},"longFormMobileImage":{"caption":"Anthropic cofounders Daniela and Dario Amodei","base":"https://images.sifted.eu/cdn-cgi/image/width=1500,quality=75,fit=cover,format=auto/wp-content/uploads/2025/04/08094834/Siblings-recent-photo-2.jpg","fullWidth":1500,"fullHeight":1001,"placeholder":false}},{"id":140832,"url":"https://sifted.eu/articles/northern-gritstone-ceo-exiting-to-us-acquirers-isnt-a-failure/","slug":"northern-gritstone-ceo-exiting-to-us-acquirers-isnt-a-failure","title":"Northern Gritstone CEO: Exiting to US acquirers isnât a failure","excerpt":"Duncan Johnson talks scaling the north of England tech ecosystem, Gritstoneâs new San Francisco office and why portfolio exits are coming","comments":{"count":"0","enabled":false},"publishTimestamp":1790226021000,"author":{"name":"Tom Nugent","url":"https://sifted.eu/author/tomnugentsifted-eu/"},"authors":[{"id":8850,"type":"wpuser","name":"Tom Nugent","twitter":"TJNugent92","bio":"Tom Nugent is Siftedâs managing editor. He covers robotics, chips and university spinouts. Follow him on \u003ca href=\"https://twitter.com/TJNugent92\"\u003e X \u003c/a\u003e and \u003ca href=\"https://www.linkedin.com/in/tnugent92/\"\u003e LinkedIn","niceName":"tomnugentsifted-eu","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","articleFormat":"standard","layout":"portrait","sector":{"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"category":{"name":"Interview","slug":"interview","url":"https://sifted.eu/categories/interview/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":4498,"name":"Interview","slug":"interview","url":"https://sifted.eu/categories/interview/"},{"id":41675,"name":"Features","slug":"features","url":"https://sifted.eu/categories/features/"}]},"sectors":{"primary":{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"all":[{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"},{"id":346,"name":"University spinouts","slug":"university-spinouts","url":"https://sifted.eu/sector/university-spinouts/"},{"id":11529,"name":"Public and academic","slug":"public-and-academic","url":"https://sifted.eu/sector/public-and-academic/"},{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":null,"all":[]},"practices":{"primary":null,"all":[]},"countries":{"primary":{"id":70,"name":"United Kingdom","slug":"united-kingdom","url":"https://sifted.eu/countries/united-kingdom/"},"all":[{"id":70,"name":"United Kingdom","slug":"united-kingdom","url":"https://sifted.eu/countries/united-kingdom/"}]},"tags":{"primary":null,"all":[{"id":43539,"name":"Duncan Johnson","slug":"duncan-johnson","url":"https://sifted.eu/tag/duncan-johnson/"},{"id":42480,"name":"Northern Gritstone","slug":"northern-gritstone","url":"https://sifted.eu/tag/northern-gritstone/"},{"id":43540,"name":"UK Scaleup Fund","slug":"uk-scaleup-fund","url":"https://sifted.eu/tag/uk-scaleup-fund/"}]}},"tagList":[{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"University spinouts","link":"https://sifted.eu/sector/university-spinouts/"},{"name":"Public and academic","link":"https://sifted.eu/sector/public-and-academic/"},{"name":"Venture capital","link":"https://sifted.eu/sector/venture-capital/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=1000,qual
80933ity=75,fit=cover,format=auto/wp-content/uploads/2026/09/23154022/1000-Duncan-3-1.jpg","full":"https://images.sifted.eu/cdn-cgi/image/width=1000,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23154022/1000-Duncan-3-1.jpg","fullWidth":1000,"fullHeight":667,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23154022/1000-Duncan-3-1.jpg","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23154022/1000-Duncan-3-1.jpg","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23154022/1000-Duncan-3-1.jpg","caption":"","placeholder":false,"alt":"Duncan Johnson, CEO of Northern Gritstone"},"cardImage":{"caption":"","alt":"Duncan Johnson, CEO of Northern Gritstone","base":"https://images.sifted.eu/cdn-cgi/image/width=1000,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23154022/1000-Duncan-3-1.jpg","fullWidth":1000,"fullHeight":667,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=1000,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23154022/1000-Duncan-3-1.jpg","fullWidth":1000,"fullHeight":667,"placeholder":false}},{"id":140850,"url":"https://sifted.eu/articles/ai-safety-startups-mapped-38-companies-building-europes-trust-layer/","slug":"ai-safety-startups-mapped-38-companies-building-europes-trust-layer","title":"AI safety startups mapped: 37 companies building Europe's trust layer","excerpt":"Amid growing alarm over the threats of a rapidly-developing technology, AI safety has become a catch-all term ","comments":{"count":"0","enabled":false},"publishTimestamp":1790226007000,"author":{"name":"Oshin Narang","url":"https://sifted.eu/author/oshin-narang/"},"authors":[{"id":9246,"type":"wpuser","name":"Oshin Narang","twitter":"","bio":"Oshin is Sifted's startup \u0026amp; VC analyst.","niceName":"oshin-narang","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","articleFormat":"standard","layout":"short_form","sector":{"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},"category":{"name":"Market map","slug":"market-map","url":"https://sifted.eu/categories/market-map/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":42116,"name":"Market map","slug":"market-map","url":"https://sifted.eu/categories/market-map/"},{"id":41676,"name":"Data","slug":"data","url":"https://sifted.eu/categories/data/"}]},"sectors":{"primary":{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},"all":[{"id":41718,"name":"AI agents","slug":"ai-agents","url":"https://sifted.eu/sector/ai-agents/"},{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"},{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":{"id":1926,"name":"Technology","slug":"technology","url":"https://sifted.eu/topic/technology/"},"all":[{"id":1929,"name":"Innovation","slug":"innovation","url":"https://sifted.eu/topic/innovation/"},{"id":1926,"name":"Technology","slug":"technology","url":"https://sifted.eu/topic/technology/"}]},"practices":{"primary":null,"all":[]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[]}},"tagList":[{"name":"AI agents","link":"https://sifted.eu/sector/ai-agents/"},{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"Artificial intelligence","link":"https://sifted.eu/sector/artificial-intelligence/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=1522,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23175602/Screenshot-2026-09-23-at-17.55.43.png","full":"https://images.sifted.eu/cdn-cgi/image/width=1522,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23175602/Screenshot-2026-09-23-at-17.55.43.png","fullWidth":1522,"fullHeight":804,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23175602/Screenshot-2026-09-23-at-17.55.43.png","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23175602/Screenshot-2026-09-23-at-17.55.43.png","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23175602/Screenshot-2026-09-23-at-17.55.43.png","caption":"","placeholder":false,"alt":""},"cardImage":{"caption":"","alt":"","base":"https://images.sifted.eu/cdn-cgi/image/width=1522,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23175602/Screenshot-2026-09-23-at-17.55.43.png","fullWidth":1522,"fullHeight":804,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=1522,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23175602/Screenshot-2026-09-23-at-17.55.43.png","fullWidth":1522,"fullHeight":804,"placeholder":false}},{"id":140808,"url":"https://sifted.eu/articles/revolut-facial-recognition-face-payments-pay-with-smile/","slug":"revolut-facial-recognition-face-payments-pay-with-smile","title":"Revolut unveils facial recognition payments in UK","excerpt":"The system will initially be available at Kiss the Hi
80933ppo coffee shops across London","comments":{"count":"0","enabled":false},"publishTimestamp":1790208117000,"author":{"name":"Martin Coulter","url":"https://sifted.eu/author/martin-coulter/"},"authors":[{"id":9167,"type":"wpuser","name":"Martin Coulter","twitter":"MartinJBCoulter","bio":"Martin Coulter is Sifted's news editor, based in London. You can follow him on \u003ca href=\"https://www.linkedin.com/in/martin-coulter-245056149/\"\u003e LinkedIn\u003c/a\u003e and \u003ca href=\"https://x.com/MartinJBCoulter\"\u003e X\u003c/a\u003e","niceName":"martin-coulter","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"standard","layout":"short_form","sector":{"name":"Fintech","slug":"fintech","url":"https://sifted.eu/sector/fintech/"},"category":{"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":4497,"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"}]},"sectors":{"primary":{"id":11535,"name":"Fintech","slug":"fintech","url":"https://sifted.eu/sector/fintech/"},"all":[{"id":11535,"name":"Fintech","slug":"fintech","url":"https://sifted.eu/sector/fintech/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":null,"all":[]},"practices":{"primary":null,"all":[]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":43253,"name":"Facial recognition","slug":"facial-recognition","url":"https://sifted.eu/tag/facial-recognition/"},{"id":41223,"name":"Fintech","slug":"fintech","url":"https://sifted.eu/tag/fintech/"},{"id":40969,"name":"Revolut","slug":"revolut","url":"https://sifted.eu/tag/revolut/"}]}},"tagList":[{"name":"Fintech","link":"https://sifted.eu/sector/fintech/"},{"name":"Facial recognition","link":"https://sifted.eu/tag/facial-recognition/"},{"name":"Fintech","link":"https://sifted.eu/tag/fintech/"},{"name":"Revolut","link":"https://sifted.eu/tag/revolut/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=946,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23133806/RevolutPay-PwS-PR-Register-01-e1790167115957.png","full":"https://images.sifted.eu/cdn-cgi/image/width=946,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23133806/RevolutPay-PwS-PR-Register-01-e1790167115957.png","fullWidth":946,"fullHeight":538,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23133806/RevolutPay-PwS-PR-Register-01-e1790167115957.png","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23133806/RevolutPay-PwS-PR-Register-01-e1790167115957.png","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23133806/RevolutPay-PwS-PR-Register-01-e1790167115957.png","caption":"","placeholder":false,"alt":"Revolut Pay with Smile facial recognition"},"cardImage":{"caption":"","alt":"Revolut Pay with Smile facial recognition","base":"https://images.sifted.eu/cdn-cgi/image/width=946,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23133806/RevolutPay-PwS-PR-Register-01-e1790167115957.png","fullWidth":946,"fullHeight":538,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=946,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23133806/RevolutPay-PwS-PR-Register-01-e1790167115957.png","fullWidth":946,"fullHeight":538,"placeholder":false}}],"analysis":[],"talks":[{"id":"GnPSxReRTyaJYm6Or2QakQ","slug":"autonomous-but-accountable-how-to-deploy-agents-safely","seo":null,"title":"Autonomous, but accountable: How to deploy agents safely","talkLink":"https://us02web.zoom.us/j/83990188806","marketLabel":"Startup Life","dateTime":"2026-10-28T12:00:00+00:00","duration":60,"image":{"url":"https://www.datocms-assets.com/60124/1787583684-hero-image-generic-talks-1080x1080px-4.png","blurUpThumb":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHBwgHBhQICA8XERUKFxMNFQ0VDiYV
80933DxUYFxogGBcVFhUmHysvGh0oHRUWMDUlKC0vMjIyGSI4PTcwPCsxMi8BCgsLDg0OHBAQHDsoIig7OzU7Oy81Oy8vOy87Oy81LzU1Ly87LzUvNS81NS8vLy8vLy8vLy81LzUvNTUvLy8vL//AABEIABgAGAMBIgACEQEDEQH/xAAZAAEAAwEBAAAAAAAAAAAAAAAAAwQFBwH/xAAcEAABBQEBAQAAAAAAAAAAAAAAAQIDBBEFIRT/xAAWAQEBAQAAAAAAAAAAAAAAAAADAgH/xAAZEQACAwEAAAAAAAAAAAAAAAABAgADEQT/2gAMAwEAAhEDEQA/AOp0akD49QmWhXV+EXGVFreE+J9QddYyLbYwaU73NgRmgvXmtdB6AHqGx0uIWY/G6MSRYhpNtROl0AupjkroRd2e2rMbmYAAmY7MVRk//9k=","width":2160,"height":2160,"alt":"Box"},"landingImage":{"url":"https://www.datocms-assets.com/60124/1787583684-hero-image-generic-talks-1080x1080px-4.png","blurUpThumb":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHBwgHBhQICA8XERUKFxMNFQ0VDiYVDxUYFxogGBcVFhUmHysvGh0oHRUWMDUlKC0vMjIyGSI4PTcwPCsxMi8BCgsLDg0OHBAQHDsoIig7OzU7Oy81Oy8vOy87Oy81LzU1Ly87LzUvNS81NS8vLy8vLy8vLy81LzUvNTUvLy8vL//AABEIABgAGAMBIgACEQEDEQH/xAAZAAEAAwEBAAAAAAAAAAAAAAAAAwQFBwH/xAAcEAABBQEBAQAAAAAAAAAAAAAAAQIDBBEFIRT/xAAWAQEBAQAAAAAAAAAAAAAAAAADAgH/xAAZEQACAwEAAAAAAAAAAAAAAAABAgADEQT/2gAMAwEAAhEDEQA/AOp0akD49QmWhXV+EXGVFreE+J9QddYyLbYwaU73NgRmgvXmtdB6AHqGx0uIWY/G6MSRYhpNtROl0AupjkroRd2e2rMbmYAAmY7MVRk//9k=","width":2160,"height":2160,"alt":"Box","title":"Box"},"hideMainLandingTitle":false,"summaryImage":null,"summaryArticleTitle":"","aboutTheEvent":"AI agents take on real work inside businesses but handing over more responsibility also raises some questions: what should an agent be allowed to access? Who is accountable when something is wrong? And how do you know what it has done?\nFor growing businesses, scattered content infrastru
80933cture, legacy systems and unclear permissions can quickly become a blocker. Simultaneously, locking everything down can make AI too cumbersome to be useful. This Sifted Talks will look at how companies can find the balance: putting practical guardrails around AI agents without slowing teams down.\n","eventRecordUrl":"","includeInPastEvents":false,"checkboxText":"By registering you agree to share your registration data with Sifted EU Ltd and the sponsor, `companyName`, and to give them the option to contact you. Sifted will not share your contact information with any parties apart from this event's sponsor.`*`","optionalCheckboxText":"","sponsorName":"Box","sponsorLogo":{"url":"https://www.datocms-assets.com/60124/1742315382-box-logo.png","blurUpThumb":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAANCAMAAACEsl7iAAAAolBMVEUAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPgAdPg4mpYBAAAANnRSTlMAAQIDBAUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiMlJikqKywuLzAzNDY4Pj9DRkpiEI/sAAAAnklEQVR42nWPzRLCQAiD+asdvXn0/R9RR9uyJLLTq+6J5SMhhPx58Rfc81M/wWPk67n9AFfWenu9d3S9hBtrZE5g5AW0S4mfAJVjFAJkEaIm5h6uQjOPYhzM3LZj0NpMYNIS9HS8K/f9SIgFgKlATRIb8sjR0ygrhbbzCayXgt1pZ7dT0ERi5XBfBqV3TiOlnncssBmjc7mZdr7+QpVf21B1uohsr+sAAAAASUVORK5CYII=","width":1200,"height":644},"people":[{"isSpeaker":false,"linkedinUrl":"https://www.linkedin.com/in/mickmcneil/","name":"Mick McNeil","company":"Deliverance AI","role":"Founder \u0026 CEO","twitterUrl":"","image":{"url":"https://www.datocms-assets.com/60124/1789893301-screenshot-2026-09-20-at-09-34-40.png","blurUpThumb":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHBwgHBgoICAgXExEUDhgNFRIQDRUNDQ8NIxcaGBYfGCEdHysjGh0oHRUWJDUlKC0vMjIyGSI4PTcwPCsxMi8BCgsLDg0OHA8PHDsdFhw7Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL//AABEIABkAFQMBIgACEQEDEQH/xAAbAAABBAMAAAAAAAAAAAAAAAAFAAEEBwIDBv/EACMQAAIBAwIHAQAAAAAAAAAAAAECAAMEBUFRBhQiMTI0YSH/xAAWAQEBAQAAAAAAAAAAAAAAAAACAwH/xAAZEQACAwEAAAAAAAAAAAAAAAAAAREhMQL/2gAMAwEAAhEDEQA/AKvxGMa4v1UnWF+I8Hy6K3yCcLkHo5JCd4c4ryTVrdADpA9Kc4cpyjaGKZUqrFf0xoyQ1uSt2rDeEMpUetSAkCl7Ik+78BNas3l0COoRTa3eKKASf//Z","width":508,"height":586}},{"isSpeaker":false,"linkedinUrl":"https://www.linkedin.com/in/eleonorehebrard/","name":"Eléonore Hébrard","company":"Box","role":"Staff Solutions Engineer","twitterUrl":"","image":{"url":"https://www.datocms-assets.com/60124/1789892726-elenore.jpeg","blurUpThumb":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHBwgHBgoIEQgLDRULDhgXDg0VDhUVDxURFxwaGCIVFhUdHyslGikoKSEWJDUlKC0vMjIyGSI4PTcwPCsxMi8BCgsLDg0OHA0NHC8cFhw1Ly8vLy81Ly8vLy8vNS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL//AABEIABgAGAMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAABQECBAb/xAAgEAABBAIBBQAAAAAAAAAAAAACAAEDBAURQRUhI2Fx/8QAFwEAAwEAAAAAAAAAAAAAAAAAAwQFAv/EABsRAAMAAwEBAAAAAAAAAAAAAAABAgMRIhIE/9oADAMBAAIRAxEAPwCwOI0dbW0GbpBF6XOPadqW00hviWDJt8KbEvQf58fJnx0gEZNvlCTY235z78qFly9gbxr0MIq7TYt3VoaztjDbaEKjEoYwPkTUoXjlL6oQhZcrYvbfo//Z","width":512,"height":512}}],"about":"AI agents take on real work inside businesses but handing over more responsibility also raises some questions: what should an agent be allowed to access? Who is accountable when something is wrong? And how do you know what it has done?\nFor growing businesses, scattered content infrastru
80933cture, legacy systems and unclear permissions can quickly become a blocker. Simultaneously, locking everything down can make AI too cumbersome to be useful. This Sifted Talks will look at how companies can find the balance: putting practical guardrails around AI agents without slowing teams down.\n","discussing":"1. What is stopping businesses from putting AI agents into real workflows?\n2. The right level of access: How can companies give agents enough freedom to be useful without opening the door to unnecessary risk?\n3. What does good oversight look like when agents are making decisions and taking actions on their own?\n4. How can businesses build security, compliance and trust into AI adoption without slowing teams down?","linkInfo":"Virtual workshop link will be available 5 minutes before first session","cost":"Free","isMemberOnly":false,"isInPerson":false,"location":"","isOversubscribed":false,"oversubscribedText":"If you want to join the waitlist send us an email on [email protected]"}],"feedsSectionData":{"popularArticles":[{"id":140710,"url":"https://sifted.eu/articles/a16z-andreessen-horowitz-europe-ai-investing-consumer/","slug":"a16z-andreessen-horowitz-europe-ai-investing-consumer","title":"A16z wants to back more European startups â but wonât reopen European office anytime soon","excerpt":"General partner Anish Acharya talks the hottest AI trends, the \"advantage\" European startups have over SF and the European consumer ","comments":{"count":"0","enabled":false},"publishTimestamp":1790053252000,"author":{"name":"Anne Sraders","url":"https://sifted.eu/author/anne-sraders/"},"authors":[{"id":9088,"type":"wpuser","name":"Anne Sraders","twitter":"https://x.com/AnneSraders","bio":"Anne Sraders is a senior reporter at Sifted, based in Berlin. She covers the VC industry and deeptech startups. She also writes Sifted's weekly VC newsletter \u003ca href=\"https://sifted.eu/newsletters\"\u003e Up Round\u003c/a\u003e. Follow her on \u003ca href=\"https://x.com/AnneSraders\"\u003e X\u003c/a\u003e and \u003ca href=\"https://www.linkedin.com/in/anne-sraders-54222b95//\"\u003e LinkedIn\u003c/a\u003e","niceName":"anne-sraders","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","articleFormat":"standard","layout":"portrait","sector":{"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"category":{"name":"Interview","slug":"interview","url":"https://sifted.eu/categories/interview/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":4498,"name":"Interview","slug":"interview","url":"https://sifted.eu/categories/interview/"},{"id":41675,"name":"Features","slug":"features","url":"https://sifted.eu/categories/features/"}]},"sectors":{"primary":{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"all":[{"id":41718,"name":"AI agents","slug":"ai-agents","url":"https://sifted.eu/sector/ai-agents/"},{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"},{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},{"id":11530,"name":"Consumer","slug":"consumer","url":"https://sifted.eu/sector/consumer/"},{"id":41484,"name":"Defence tech","slug":"defence-tech","url":"https://sifted.eu/sector/defence-tech/"},{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"}]},"themes":{"primary":{"id":1729,"name":"European Tech","slug":"europe-tech","url":"https://sifted.eu/themes/europe-tech/"},"all":[{"id":1729,"name":"European Tech","slug":"europe-tech","url":"https://sifted.eu/themes/europe-tech/"},{"id":1714,"name":"Startups","slug":"startups","url":"https://sifted.eu/themes/startups/"},{"id":1711,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/themes/venture-capital/"}]},"topics":{"primary":{"id":1950,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/topic/venture-capital/"}
80933,"all":[{"id":1927,"name":"Startups","slug":"startups","url":"https://sifted.eu/topic/startups/"},{"id":1950,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/topic/venture-capital/"}]},"practices":{"primary":{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"},"all":[{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"}]},"countries":{"primary":{"id":320,"name":"US","slug":"usa","url":"https://sifted.eu/countries/usa/"},"all":[{"id":320,"name":"US","slug":"usa","url":"https://sifted.eu/countries/usa/"}]},"tags":{"primary":null,"all":[{"id":42800,"name":"Andreessen Horowitz","slug":"andreessen-horowitz","url":"https://sifted.eu/tag/andreessen-horowitz/"},{"id":41247,"name":"consumer","slug":"consumer","url":"https://sifted.eu/tag/consumer/"}]}},"tagList":[{"name":"AI agents","link":"https://sifted.eu/sector/ai-agents/"},{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"Artificial intelligence","link":"https://sifted.eu/sector/artificial-intelligence/"},{"name":"Consumer","link":"https://sifted.eu/sector/consumer/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=2000,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/21150948/Anish-Acharya-2560x2560-1-scaled-e1789999830526.jpg","full":"https://images.sifted.eu/cdn-cgi/image/width=2000,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/21150948/Anish-Acharya-2560x2560-1-scaled-e1789999830526.jpg","fullWidth":2000,"fullHeight":2000,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/21150948/Anish-Acharya-2560x2560-1-scaled-e1789999830526.jpg","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/21150948/Anish-Acharya-2560x2560-1-scaled-e1789999830526.jpg","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/21150948/Anish-Acharya-2560x2560-1-scaled-e1789999830526.jpg","caption":"Anish Acharya of Andreessen Horowitz. Courtesy of a16z's. website ","placeholder":false,"alt":"Anish Acharya of Andreessen Horowitz"},"cardImage":{"caption":"Anish Acharya of Andreessen Horowitz. Courtesy of a16z's. website ","alt":"Anish Acharya of Andreessen Horowitz","base":"https://images.sifted.eu/cdn-cgi/image/width=2000,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/21150948/Anish-Acharya-2560x2560-1-scaled-e1789999830526.jpg","fullWidth":2000,"fullHeight":2000,"placeholder":false},"longFormMobileImage":{"caption":"Anish Acharya of Andreessen Horowitz. Courtesy of a16z's. website ","base":"https://images.sifted.eu/cdn-cgi/image/width=2000,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/21150948/Anish-Acharya-2560x2560-1-scaled-e1789999830526.jpg","fullWidth":2000,"fullHeight":2000,"placeholder":false}},{"id":140290,"url":"https://sifted.eu/articles/europe-underrated-us-vc-firstmark-capital/","slug":"europe-underrated-us-vc-firstmark-capital","title":"US VC FirstMark: âEurope is underratedâ right now among American investors","excerpt":"The New York firm has backed startups like Legora, Harmattan AI and Synthesia\r\n","comments":{"count":"0","enabled":false},"publishTimestamp":1789123531000,"author":{"name":"Anne Sraders","url":"https://sifted.eu/author/anne-sraders/"},"authors":[{"id":9088,"type":"wpuser","name":"Anne Sraders","twitter":"https://x.com/AnneSraders","bio":"Anne Sraders is a senior reporter at Sifted, based in Berlin. She covers the VC industry and deeptech startups. She also writes Sifted's weekly VC newsletter \u003ca href=\"https://sifted.eu/newsletters\"\u003e Up Round\u003c/a\u003e. Follow her on \u003ca href=\"https://x.com/AnneSraders\"\u003e X\u003c/a\u003e and \u003ca href=\"https://www.linkedin.com/in/anne-sraders-54222b95//\"\u003e LinkedIn\u003c/a\u003e","niceName":"anne-sraders","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","articleFormat":"standard","layout":"portrait","sector":{"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"category":{"name":"Interview","slug":"interview","url":"https://sifted.eu/categories/interview/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":4498,"name":"Interview","slug":"interview","url":"https://sifted.eu/categories/interview/"},{"id":41675,"name":"Features","slug":"features","url":"https://sifted.eu/categories/features/"}]},"sectors":{"primary":{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"all":[{"id":41718,"name":"AI agents","slug":"ai-agents","url":"https://sifted.eu/sector/ai-agents/"},{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"},{"id":41719,"name":"AI chips","slug":"ai-chips","url":"https://sifted.eu/sector/ai-chips/"},{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},{"id":41484,"name":"Defence tech","slug":"defence-tech","url":"https://sifted.eu/sector/defence-tech/"},{"id":588,"name":"Drones","slug":"drones","url":"https://sifted.eu/sector/drones/"},{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"}]},"themes":{"primary":{"id":1711,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/themes/venture-capital/"},"all":[{"id":1711,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/themes/venture-capital/"}]},"topics":{"primary":{"id":1950,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/topic/venture-capital/"},"all":[{"id":1950,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/topic/venture-capital/"}]},"practices":{"primary":{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"},"all":[{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"}]},"countries":{"primary":{"id":320,"name":"US","slug":"usa","url":"https://sifted.eu/countries/usa/"},"all":[{"id":320,"name":"US","slug":"usa","url":"https://sifted.eu/countries/usa/"}]},"tags":{"primary":null,"all":[{"id":43097,"name":"FirstMark Capital","slug":"firstmark-capital","url":"https://sifted.eu/tag/firstmark-capital/"},{"id":41865,"name":"Harmattan AI","slug":"harmattan-ai","url":"https://sifted.eu/tag/harmattan-ai/"},{"id":41743,"name":"Legora","slug":"legora","url":"https://sifted.eu/tag/legora/"},{"id":41581,"name":"Lovable","slug":"lovable","url":"https://sifted.eu/tag/lovable/"},{"id":41281,"name":"Mistral","slug":"mistral","url":"https://sifted.eu/tag/mistral/"},{"id":41627,"name":"Synthesia","slug":"synthesia","url":"https://sifted.eu/tag/synthesia/"}]}},"tagList":[{"name":"AI agents","link":"https://sifted.eu/sector/ai-agents/"},{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"AI chips","link":"https://sifted.eu/sector/ai-chips/"},{"name":"Artificial intelligence","link":"https://sifted.eu/sector/artificial-intelligence/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=2000,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/11041259/Matt-Turck-2023-scaled-e1789096388546.jpg","full":"https://images.sifted.eu/cdn-cgi/image/width=2000,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/11041259/Matt-Turck-2023-scaled-e1789096388546.jpg","fullWidth":2000,"fullHeight":1333,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/11041259/Matt-Turck-2023-scaled-e1789096388546.jpg","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/11041259/Matt-Turck-2023-scaled-e1789096388546.jpg","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/11041259/Matt-Turck-2023-scaled-e1789096388546.jpg","caption":"Matt Turck of FirstMark. Courtesy of FirstMark","placeholder":false,"alt":"Matt Turck of FirstMark"},"cardImage":{"caption":"Matt Turck of FirstMark. Courtesy of FirstMark","alt":"Matt Turck of FirstMark","base":"https://images.sifted.eu/cdn-cgi/image/width=2000,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/11041259/Matt-Turck-2023-scaled-e1789096388546.jpg","fullWidth":2000,"fullHeight":1333,"placeholder":false},"longFormMobileImage":{"caption":"Matt Turck of FirstMark. Courtesy of FirstMark","base":"https://images.sifted.eu/cdn-cgi/image/width=2000,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/11041259/Matt-Turck-2023-scaled-e1789096388546.jpg","fullWidth":2000,"fullHeight":1333,"placeholder":false}},{"id":140425,"url":"https://sifted.eu/articles/the-top-10-investors-across-dach-cee/","
80933slug":"the-top-10-investors-across-dach-cee","title":"The top 10 investors across DACH \u0026 CEE","excerpt":"A look at the leading early- and growth-stage VCs active in the DACH \u0026 CEE regions, based on the number of companies they backed on Siftedâs 2026 DACH \u0026 CEE leaderboard","comments":{"count":"0","enabled":false},"publishTimestamp":1789448420000,"author":{"name":"Ruggero Di Spigna","url":"https://sifted.eu/author/ruggero/"},"authors":[{"id":8969,"type":"wpuser","name":"Ruggero Di Spigna","twitter":"","bio":"Ruggero Di Spigna is a Senior Insights \u0026amp; Product Associate at Sifted. Find him on \u003ca href=\"https://www.linkedin.com/in/ruggero-di-spigna-4882b6115\"\u003e LinkedIn \u003c/a\u003e","niceName":"ruggero","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","articleFormat":"standard","layout":"long_form","sector":{"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"category":{"name":"Leaderboard","slug":"leaderboard","url":"https://sifted.eu/categories/leaderboard/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":41683,"name":"Leaderboard","slug":"leaderboard","url":"https://sifted.eu/categories/leaderboard/"},{"id":41674,"name":"List","slug":"list","url":"https://sifted.eu/categories/list/"}]},"sectors":{"primary":{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"all":[{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"}]},"themes":{"primary":{"id":1729,"name":"European Tech","slug":"europe-tech","url":"https://sifted.eu/themes/europe-tech/"},"all":[{"id":1729,"name":"European Tech","slug":"europe-tech","url":"https://sifted.eu/themes/europe-tech/"},{"id":1710,"name":"Funding","slug":"funding","url":"https://sifted.eu/themes/funding/"}]},"topics":{"primary":{"id":1950,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/topic/venture-capital/"},"all":[{"id":1927,"name":"Startups","slug":"startups","url":"https://sifted.eu/topic/startups/"},{"id":1950,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/topic/venture-capital/"}]},"practices":{"primary":{"id":311,"name":"Funding","slug":"funding","url":"https://sifted.eu/practice/funding/"},"all":[{"id":311,"name":"Funding","slug":"funding","url":"https://sifted.eu/practice/funding/"}]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":43098,"name":"2026 Sifted 100: DACH \u0026amp; CEE Leaderboard","slug":"2026-sifted-100-dach-cee-leaderboard","url":"https://sifted.eu/tag/2026-sifted-100-dach-cee-leaderboard/"},{"id":43138,"name":"Alesco Ventures","slug":"alesco-ventures","url":"https://sifted.eu/tag/alesco-ventures/"},{"id":43137,"name":"Day One Capital","slug":"day-one-capital","url":"https://sifted.eu/tag/day-one-capital/"},{"id":42030,"name":"HV Capital","slug":"hv-capital","url":"https://sifted.eu/tag/hv-capital/"},{"id":41752,"name":"Index Ventures","slug":"index-ventures","url":"https://sifted.eu/tag/index-ventures/"},{"id":42408,"name":"Notion Capital","slug":"notion-capital","url":"https://sifted.eu/tag/notion-capital/"},{"id":43135,"name":"PFR Ventures","slug":"pfr-ventures","url":"https://sifted.eu/tag/pfr-ventures/"},{"id":43140,"name":"Possible Ventures","slug":"possible-ventures","url":"https://sifted.eu/tag/possible-ventures/"},{"id":43136,"name":"Specialist VC","slug":"specialist-vc","url":"https://sifted.eu/tag/specialist-vc/"},{"id":42173,"name":"Speedinvest","slug":"speedinvest","url":"https://sifted.eu/tag/speedinvest/"},{"id":43139,"name":"Tiny Supercomputer Investment Company","slug":"tiny-supercomputer-investment-company","url":"https://sifted.eu/tag/tiny-supercomputer-investment-company/"}]}},"tagList":[{"name":"Venture capital","link":"https://sifted.eu/sector/venture-capital/"},{"name":"2026 Sifted 100: DACH \u0026amp; CEE Leaderboard","link":"https://sifted.eu/tag/2026-sifted-100-dach-cee-leaderboard/"},{"name":"Alesco Ventures","link":"https://sifted.eu/tag/alesco-ventures/"},{"name":"Day One Capital","link":"https://sifted.eu/tag/day-one-capital/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=1200,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/10144439/1788782712-dach-cee2026.png","full":"https://images.sifted.eu/cdn-cgi/image/width=1200,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/10144439/1788782712-dach-cee2026.png","fullWidth":1200,"fullHeight":628,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/10144439/1788782712-dach-cee2026.png","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/10144439/1788782712-dach-cee2026.png","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/10144439/1788782712-dach-cee2026.png","caption":"","placeholder":false,"alt":""},"cardImage":{"caption":"","alt":"","base":"https://images.sifted.eu/cdn-cgi/image/width=1200,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/10144439/1788782712-dach-cee2026.png","fullWidth":1200,"fullHeight":628,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=1200,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/10144439/1788782712-dach-cee2026.png","fullWidth":1200,"fullHeight":628,"placeholder":false}},{"id":140419,"url":"https://sifted.eu/articles/eth-zurich-students-humanoid-xalun/","slug":"eth-zurich-students-humanoid-xalun","title":"ETH Zurich students build âfirst Swiss humanoidâ, eye fundraising","excerpt":"ETH Robotics Club president Declan Shine wants his human-like bot to be a âlighter, friendlier and squishierâ home robot than rivals\r\n","comments":{"count":"0","enabled":false},"publishTimestamp":1789399814000,"author":{"name":"Ãanna Kelly","url":"https://sifted.eu/author/eanna-kelly/"},"authors":[{"id":8686,"type":"wpuser","name":"Ãanna Kelly","twitter":"EannaKelly1","bio":"Ãanna Kelly is a contributing editor at Sifted, and writes \u003ca href=\"https://sifted.eu/newsletters\"\u003e Startup Life \u003c/a\u003e, a weekly newsletter on what it takes to build a startup. Follow him on \u003ca href=\"https://twitter.com/EannaKelly1\"\u003e X \u003c/a\u003e and \u003ca href=\"https://www.linkedin.com/in/eannakelly/\"\u003e LinkedIn \u003c/a\u003e","niceN
80933ame":"eanna-kelly","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"standard","layout":"portrait","sector":{"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"},"category":{"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":4497,"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"}]},"sectors":{"primary":{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"},"all":[{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"}]},"themes":{"primary":{"id":1714,"name":"Startups","slug":"startups","url":"https://sifted.eu/themes/startups/"},"all":[{"id":1714,"name":"Startups","slug":"startups","url":"https://sifted.eu/themes/startups/"}]},"topics":{"primary":{"id":1927,"name":"Startups","slug":"startups","url":"https://sifted.eu/topic/startups/"},"all":[{"id":1927,"name":"Startups","slug":"startups","url":"https://sifted.eu/topic/startups/"}]},"practices":{"primary":{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"},"all":[{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"}]},"countries":{"primary":{"id":286,"name":"Switzerland","slug":"switzerland","url":"https://sifted.eu/countries/switzerland/"},"all":[{"id":286,"name":"Switzerland","slug":"switzerland","url":"https://sifted.eu/countries/switzerland/"}]},"tags":{"primary":null,"all":[{"id":42467,"name":"ETH Zurich","slug":"eth-zurich","url":"https://sifted.eu/tag/eth-zurich/"}]}},"tagList":[{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"Switzerland","link":"https://sifted.eu/countries/switzerland/"},{"name":"ETH Zurich","link":"https://sifted.eu/tag/eth-zurich/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=510,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14152525/Screenshot-2026-09-14-at-16.25.06.png","full":"https://images.sifted.eu/cdn-cgi/image/width=510,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14152525/Screenshot-2026-09-14-at-16.25.06.png","fullWidth":510,"fullHeight":400,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=510,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14152525/Screenshot-2026-09-14-at-16.25.06.png","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=510,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14152525/Screenshot-2026-09-14-at-16.25.06.png","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14152525/Screenshot-2026-09-14-at-16.25.06.png","caption":"","placeholder":false,"alt":""},"cardImage":{"caption":"","alt":"","base":"https://images.sifted.eu/cdn-cgi/image/width=510,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14152525/Screenshot-2026-09-14-at-16.25.06.png","fullWidth":510,"fullHeight":400,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=510,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14152525/Screenshot-2026-09-14-at-16.25.06.png","fullWidth":510,"fullHeight":400,"placeholder":false}},{"id":140609,"url":"https://sifted.eu/articles/inside-londons-weirdest-neolab/","slug":"inside-londons-weirdest-neolab","t
80933itle":"Inside London's weirdest neolab","excerpt":"Inherent was founded by DeepMind alumni and has been backed with $50m from Index and Radical\r\n","comments":{"count":"0","enabled":false},"publishTimestamp":1789707631000,"author":{"name":"Maya Dharampal-Hornby","url":"https://sifted.eu/author/maya-dharampal-hornby/"},"authors":[{"id":9171,"type":"wpuser","name":"Maya Dharampal-Hornby","twitter":"","bio":"Maya Dharampal-Hornby is a reporter, covering UK tech for Sifted, based in London. She's also the producer of \u003ca href=\"https://podcast.sifted.eu/\"\u003e Startup Europe â The Sifted Podcast \u003c/a\u003e.","niceName":"maya-dharampal-hornby","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","articleFormat":"standard","layout":"long_form","sector":{"name":"AI agents","slug":"ai-agents","url":"https://sifted.eu/sector/ai-agents/"},"category":{"name":"Interview","slug":"interview","url":"https://sifted.eu/categories/interview/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":4498,"name":"Interview","slug":"interview","url":"https://sifted.eu/categories/interview/"},{"id":41675,"name":"Features","slug":"features","url":"https://sifted.eu/categories/features/"}]},"sectors":{"primary":{"id":41718,"name":"AI agents","slug":"ai-agents","url":"https://sifted.eu/sector/ai-agents/"},"all":[{"id":41718,"name":"AI agents","slug":"ai-agents","url":"https://sifted.eu/sector/ai-agents/"},{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"},{"id":348,"name":"Future of work","slug":"future-of-work","url":"https://sifted.eu/sector/future-of-work/"},{"id":11531,"name":"Startup life","slug":"startup-life","url":"https://sifted.eu/sector/startup-life/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":null,"all":[]},"practices":{"primary":null,"all":[]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":43162,"name":"Edward Hughes","slug":"edward-hughes","url":"https://sifted.eu/tag/edward-hughes/"},{"id":42377,"name":"Google DeepMind","slug":"google-deepmind","url":"https://sifted.eu/tag/google-deepmind/"},{"id":41752,"name":"Index Ventures","slug":"index-ventures","url":"https://sifted.eu/tag/index-ventures/"},{"id":42521,"name":"Inherent","slug":"inherent","url":"https://sifted.eu/tag/inherent/"},{"id":43164,"name":"Kaloyan Aleksiev","slug":"kaloyan-aleksiev","url":"https://sifted.eu/tag/kaloyan-aleksiev/"},{"id":43163,"name":"Louis Kirsch","slug":"louis-kirsch","url":"https://sifted.eu/tag/louis-kirsch/"},{"id":43154,"name":"neolab","slug":"neolab","url":"https://sifted.eu/tag/neolab/"},{"id":43165,"name":"Radical Ventures","slug":"radical-ventures","url":"https://sifted.eu/tag/radical-ventures/"},{"id":43161,"name":"Tantum Collins","slug":"tantum-collins","url":"https://sifted.eu/tag/tantum-collins/"}]}},"tagList":[{"name":"AI agents","link":"https://sifted.eu/sector/ai-agents/"},{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"Future of work","link":"https://sifted.eu/sector/future-of-work/"},{"name":"Startup life","link":"https://sifted.eu/sector/startup-life/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/17172518/inherent-scaled.png","full":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/17172518/inherent-scaled.png","fullWidth":2048,"fullHeight":672,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/17172518/inherent-scaled.png","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/17172518/inherent-scaled.png","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/17172518/inherent-scaled.png","caption":"Inherent cofounders (L-R): Louis Kirsch, Kaloyan Aleksiev, Tantum Collins, Edward Hughes. Image provided by Inherent. ","placeholder":false,"alt":"Inherent cofounders (L-R): Louis Kirsch, Kaloyan Aleksiev, Tantum Collins, Edward Hughes. Image provided by Inherent."},"cardImage":{"caption":"Inherent cofounders (L-R): Louis Kirsch, Kaloyan Aleksiev, Tantum Collins, Edward Hughes. Image provided by Inherent. ","alt":"Inherent cofounders (L-R): Louis Kirsch, Kaloyan Aleksiev, Tantum Collins, Edward Hughes. Image provided by Inherent.","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/17172518/in
80933herent-scaled.png","fullWidth":2048,"fullHeight":672,"placeholder":false},"longFormMobileImage":{"caption":"Inherent cofounders (L-R): Louis Kirsch, Kaloyan Aleksiev, Tantum Collins, Edward Hughes. Image provided by Inherent. ","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/17172518/inherent-scaled.png","fullWidth":2048,"fullHeight":672,"placeholder":false}},{"id":140540,"url":"https://sifted.eu/articles/why-polish-startups-are-growing-faster-than-ever/","slug":"why-polish-startups-are-growing-faster-than-ever","title":"Why Polish startups are growing faster than ever","excerpt":"Polish startups now hold 11 of the 100 fastest-growing spots in DACH \u0026 CEE, up from three. ","comments":{"count":"0","enabled":false},"publishTimestamp":1789621215000,"author":{"name":"Oshin Narang","url":"https://sifted.eu/author/oshin-narang/"},"authors":[{"id":9246,"type":"wpuser","name":"Oshin Narang","twitter":"","bio":"Oshin is Sifted's startup \u0026amp; VC analyst.","niceName":"oshin-narang","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","articleFormat":"standard","layout":"short_form","sector":null,"category":{"name":"Interview","slug":"interview","url":"https://sifted.eu/categories/interview/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":4498,"name":"Interview","slug":"interview","url":"https://sifted.eu/categories/interview/"},{"id":41675,"name":"Features","slug":"features","url":"https://sifted.eu/categories/features/"}]},"sectors":{"primary":null,"all":[]},"themes":{"primary":null,"all":[]},"topics":{"primary":null,"all":[]},"practices":{"primary":null,"all":[]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":43098,"name":"2026 Sifted 100: DACH \u0026amp; CEE Leaderboard","slug":"2026-sifted-100-dach-cee-leaderboard","url":"https://sifted.eu/tag/2026-sifted-100-dach-cee-leaderboard/"},{"id":42753,"name":"Hard2Beat","slug":"hard2beat","url":"https://sifted.eu/tag/hard2beat/"},{"id":43135,"name":"PFR Ventures","slug":"pfr-ventures","url":"https://sifted.eu/tag/pfr-ventures/"},{"id":42423,"name":"Smok Ventures","slug":"smok-ventures","url":"https://sifted.eu/tag/smok-ventures/"}]}},"tagList":[{"name":"2026 Sifted 100: DACH \u0026amp; CEE Leaderboard","link":"https://sifted.eu/tag/2026-sifted-100-dach-cee-leaderboard/"},{"name":"Hard2Beat","link":"https://sifted.eu/tag/hard2beat/"},{"name":"PFR Ventures","link":"https://sifted.eu/tag/pfr-ventures/"},{"name":"Smok Ventures","link":"https://sifted.eu/tag/smok-ventures/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=1800,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16161547/Infinity-Avestus-Real-Estate.jpg","full":"https://images.sifted.eu/cdn-cgi/image/width=1800,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16161547/Infinity-Avestus-Real-Estate.jpg","fullWidth":1800,"fullHeight":1200,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16161547/Infinity-Avestus-Real-Estate.jpg","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16161547/Infinity-Avestus-Real-Estate.jpg","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16161547/Infinity-Avestus-Real-Estate.jpg","caption":"","placeholder":false,"alt":""},"cardImage":{"caption":"","alt":"","base":"https://images.sifted.eu/cdn-cgi/image/width=1800,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16161547/Infinity-Avestus-Real-Estate.jpg","fullWidth":1800,"fullHeight":1200,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=1800,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16161547/Infinity-Avestus-Real-Estate.jpg","fullWidth":1800,"fullHeight":1200,"placeholder":false}}],"freeToReadArticles":[{"id":140872,"url":"https://sifted.eu/articles/new-yor
80933k-podcast/","slug":"new-york-podcast","title":"Is New York warming to European tech?","excerpt":"Anne Sraders joins host Freya Pratty on this week's Sifted podcast","comments":{"count":"0","enabled":false},"publishTimestamp":1790255114000,"author":{"name":"Anne Sraders","url":"https://sifted.eu/author/anne-sraders/"},"authors":[{"id":9088,"type":"wpuser","name":"Anne Sraders","twitter":"https://x.com/AnneSraders","bio":"Anne Sraders is a senior reporter at Sifted, based in Berlin. She covers the VC industry and deeptech startups. She also writes Sifted's weekly VC newsletter \u003ca href=\"https://sifted.eu/newsletters\"\u003e Up Round\u003c/a\u003e. Follow her on \u003ca href=\"https://x.com/AnneSraders\"\u003e X\u003c/a\u003e and \u003ca href=\"https://www.linkedin.com/in/anne-sraders-54222b95//\"\u003e LinkedIn\u003c/a\u003e","niceName":"anne-sraders","image":false},{"id":8525,"type":"wpuser","name":"Freya Pratty","twitter":"FPratty","bio":"Freya Pratty is Sifted's associate editor. She covers UK tech and leads Sifted's investigations. Follow her on \u003ca href=\"https://twitter.com/FPratty\"\u003e X \u003c/a\u003e, \u003ca href=\"https://www.linkedin.com/in/freyapratty111/\"\u003e LinkedIn \u003c/a\u003e and \u003ca href=\"https://bsky.app/profile/freyapratty.bsky.social\"\u003e Bluesky\u003c/a\u003e","niceName":"freya-williams","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"standard","layout":"short_form","sector":{"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"category":{"name":"Podcast","slug":"podcast","url":"https://sifted.eu/categories/podcast/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":40118,"name":"Podcast","slug":"podcast","url":"https://sifted.eu/categories/podcast/"}]},"sectors":{"primary":{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"all":[{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":{"id":1928,"name":"Entrepreneurship","slug":"entrepreneurship","url":"https://sifted.eu/topic/entrepreneurship/"},"all":[{"id":1928,"name":"Entrepreneurship","slug":"entrepreneurship","url":"https://sifted.eu/topic/entrepreneurship/"},{"id":1929,"name":"Innovation","slug":"innovation","url":"https://sifted.eu/topic/innovation/"},{"id":1927,"name":"Startups","slug":"startups","url":"https://sifted.eu/topic/startups/"},{"id":1926,"name":"Technology","slug":"technology","url":"https://sifted.eu/topic/technology/"}]},"practices":{"primary":null,"all":[]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":43145,"name":"Podcast","slug":"podcast","url":"https://sifted.eu/tag/podcast/"},{"id":43159,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/tag/venture-capital/"}]}},"tagList":[{"name":"Venture capital","link":"https://sifted.eu/sector/venture-capital/"},{"name":"Podcast","link":"https://sifted.eu/tag/podcast/"},{"name":"Venture capital","link":"https://sifted.eu/tag/venture-capital/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=1280,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","full":"https://images.sifted.eu/cdn-cgi/image/width=1280,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","fullWidth":1280,"fullHeight":720,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","caption":"","placeholder":false,"alt":""},"cardImage":{"fullWidth":1080,"fullHeight":1080,"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=1080,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23224230/Freya-Anne-image-square.png","alt":"","placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=1280,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","fullWidth":1280,"fullHeight":720,"placeholder":false}},{"id":140407,"url":"https://sifted.eu/articles/uk-startup-building-ais-next-enterprise-category-brnd/","slug":"uk-startup-building-ais-next-enterprise-category-brnd","title":"Inside the UK startup building AIâs next enterprise category","excerpt":"Backed by investors including LocalGlobe, Cherry Ventures and Octopus Ventures, Resolutiion is betting that Risk-to-Resolution will be the next breakout wave in enterprise AI","comments":{"count":"0","enabled":false},"publishTimestamp":1790240400000,"author":{"name":"techUK","url":"https://sifted.eu/author/techuk/"},"authors":[{"id":9283,"type":"wpuser","name":"techUK","twitter":"","bio":"","niceN
80933ame":"techuk","image":false}],"isSponsored":true,"sponsorshipType":"Paid for and produced by","sponsorDetails":{"logo":"https://images.sifted.eu/cdn-cgi/image/format=auto/wp-content/uploads/2026/09/17113959/unnamed.png","logoWidth":438,"logoHeight":137,"name":"TechUK","description":"","url":"","urlLabel":"Learn more"},"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"sponsored","layout":"","sector":{"name":"Startup life","slug":"startup-life","url":"https://sifted.eu/sector/startup-life/"},"category":{"name":"Paid for and produced by","slug":"paid-for-and-produced-by","url":"https://sifted.eu/categories/paid-for-and-produced-by/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":41697,"name":"Paid for and produced by","slug":"paid-for-and-produced-by","url":"https://sifted.eu/categories/paid-for-and-produced-by/"},{"id":41677,"name":"Branded content","slug":"branded-content","url":"https://sifted.eu/categories/branded-content/"}]},"sectors":{"primary":{"id":11531,"name":"Startup life","slug":"startup-life","url":"https://sifted.eu/sector/startup-life/"},"all":[{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"},{"id":11531,"name":"Startup life","slug":"startup-life","url":"https://sifted.eu/sector/startup-life/"}]},"themes":{"primary":{"id":1714,"name":"Startups","slug":"startups","url":"https://sifted.eu/themes/startups/"},"all":[{"id":1714,"name":"Startups","slug":"startups","url":"https://sifted.eu/themes/startups/"}]},"topics":{"primary":{"id":1927,"name":"Startups","slug":"startups","url":"https://sifted.eu/topic/startups/"},"all":[{"id":1927,"name":"Startups","slug":"startups","url":"https://sifted.eu/topic/startups/"}]},"practices":{"primary":{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"},"all":[{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"}]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[]}},"tagList":[{"name":"Artificial intelligence","link":"https://sifted.eu/sector/artificial-intelligence/"},{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"Startup life","link":"https://sifted.eu/sector/startup-life/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","full":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","fullWidth":2048,"fullHeight":1280,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","caption":"","placeholder":false,"alt":""},"cardImage":{"caption":"","alt":"","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","fullWidth":2048,"fullHeight":1280,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","fullWidth":2048,"fullHeight":1280,"placeholder":false}},{"id":140819,"url":"https://sifted.eu/articles/dtcp-first-close-defence-fund-invest-europe-growth/","slug":"dtcp-first-close-defence-fund-invest-europe-growth","title":"Growth investor DTCP raises â¬455m first close for defence fund, plots future funds","excerpt":"The firm launched the fund in January and has already made two investments","comments":{"count":"0","enabled":false},"publishTimestamp":1790233236000,"author":{"name":"Anne Sraders","url":"https://sifted.eu/author/anne-sraders/"},"authors":[{"id":9088,"type":"wpuser","name":"Anne Sraders","twitter":"https://x.com/AnneSraders","bio":"Anne Sraders is a senior reporter at Sifted, based in Berlin. She covers the VC industry and deeptech startups. She also writes Sifted's weekly VC newsletter \u003ca href=\"https://sifted.eu/newsletters\"\u003e Up Round\u003c/a\u003e. Follow her on \u003ca href=\"https://x.com/AnneSraders\"\u003e X\u003c/a\u003e and \u003ca href=\"https://www.linkedin.com/in/anne-sraders-54222b95//\"\u003e LinkedIn\u003c/a\u003e","niceN
80933ame":"anne-sraders","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"standard","layout":"short_form","sector":{"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"category":{"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":4497,"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"}]},"sectors":{"primary":{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"all":[{"id":41484,"name":"Defence tech","slug":"defence-tech","url":"https://sifted.eu/sector/defence-tech/"},{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"},{"id":11541,"name":"LP","slug":"lp","url":"https://sifted.eu/sector/lp/"},{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"}]},"themes":{"primary":{"id":1711,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/themes/venture-capital/"},"all":[{"id":1711,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/themes/venture-capital/"}]},"topics":{"primary":{"id":1950,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/topic/venture-capital/"},"all":[{"id":1950,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/topic/venture-capital/"}]},"practices":{"primary":{"id":311,"name":"Funding","slug":"funding","url":"https://sifted.eu/practice/funding/"},"all":[{"id":311,"name":"Funding","slug":"funding","url":"https://sifted.eu/practice/funding/"}]},"countries":{"primary":{"id":256,"name":"Germany","slug":"germany","url":"https://sifted.eu/countries/germany/"},"all":[{"id":256,"name":"Germany","slug":"germany","url":"https://sifted.eu/countries/germany/"}]},"tags":{"primary":null,"all":[{"id":42079,"name":"DTCP","slug":"dtcp","url":"https://sifted.eu/tag/dtcp/"}]}},"tagList":[{"name":"Defence tech","link":"https://sifted.eu/sector/defence-tech/"},{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"LP","link":"https://sifted.eu/sector/lp/"},{"name":"Venture capital","link":"https://sifted.eu/sector/venture-capital/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=1333,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23163715/Thomas-Preus_DTCP-Capital-scaled-e1790177896849.jpeg","full":"https://images.sifted.eu/cdn-cgi/image/width=1333,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23163715/Thomas-Preus_DTCP-Capital-scaled-e1790177896849.jpeg","fullWidth":1333,"fullHeight":1428,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23163715/Thomas-Preus_DTCP-Capital-scaled-e1790177896849.jpeg","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23163715/Thomas-Preus_DTCP-Capital-scaled-e1790177896849.jpeg","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23163715/Thomas-Preus_DTCP-Capital-scaled-e1790177896849.jpeg","caption":"Thomas Preuà of DTCP. Courtesy of DTCP","placeholder":false,"alt":"Thomas Preuà of DTCP"},"cardImage":{"caption":"Thomas Preuà of DTCP. Courtesy of DTCP","alt":"Thomas Preuà of DTCP","base":"https://images.sifted.eu/cdn-cgi/image/width=1333,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23163715/Thomas-Preus_DTCP-Capital-scaled-e1790177896849.jpeg","fullWidth":1333,"fullHeight":1428,"placeholder":false},"longFormMobileImage":{"caption":"Thomas Preuà of DTCP. Courtesy of DTCP","base":"https://images.sifted.eu/cdn-cgi/image/width=1333,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23163715/Thomas-Preus_DTCP-Capital-scaled-e1790177896849.jpeg","fullWidth":1333,"fullHeight":1428,"placeholder":false}},{"id":140845,"url":"https://sifted.eu/articles/claude-founder-house-london/","slug":"claude-founder-house-london","title":"Anthropic: We're not trying to eat startups' lunch","excerpt":"The frontier lab held an event for London's startups yesterday","comments":{"count":"0","enabled":false},"publishTimestamp":1790226025000,"author":{"name":"Maya Dharampal-Hornby","url":"https://sifted.eu/author/maya-dharampal-hornby/"},"authors":[{"id":9171,"type":"wpuser","name":"Maya Dharampal-Hornby","twitter":"","bio":"Maya Dharampal-Hornby is a reporter,
80933covering UK tech for Sifted, based in London. She's also the producer of \u003ca href=\"https://podcast.sifted.eu/\"\u003e Startup Europe â The Sifted Podcast \u003c/a\u003e.","niceName":"maya-dharampal-hornby","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"standard","layout":"short_form","sector":{"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},"category":{"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":4497,"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"}]},"sectors":{"primary":{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},"all":[{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"},{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":null,"all":[]},"practices":{"primary":null,"all":[]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":41784,"name":"Anthropic","slug":"anthropic","url":"https://sifted.eu/tag/anthropic/"},{"id":43542,"name":"Index","slug":"index","url":"https://sifted.eu/tag/index/"}]}},"tagList":[{"name":"Artificial intelligence","link":"https://sifted.eu/sector/artificial-intelligence/"},{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"Venture capital","link":"https://sifted.eu/sector/venture-capital/"},{"name":"Anthropic","link":"https://sifted.eu/tag/anthropic/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=1500,quality=75,fit=cover,format=auto/wp-content/uploads/2025/04/08094834/Siblings-recent-photo-2.jpg","full":"https://images.sifted.eu/cdn-cgi/image/width=1500,quality=75,fit=cover,format=auto/wp-content/uploads/2025/04/08094834/Siblings-recent-photo-2.jpg","fullWidth":1500,"fullHeight":1001,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2025/04/08094834/Siblings-recent-photo-2.jpg","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2025/04/08094834/Siblings-recent-photo-2.jpg","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2025/04/08094834/Siblings-recent-photo-2.jpg","caption":"Anthropic cofounders Daniela and Dario Amodei","placeholder":false,"alt":"Anthropic cofounders Daniela and Dario Amodei next to each other"},"cardImage":{"caption":"Anthropic cofounders Daniela and Dario Amodei","alt":"Anthropic cofounders Daniela and Dario Amodei next to each other","base":"https://images.sifted.eu/cdn-cgi/image/width=1500,quality=75,fit=cover,format=auto/wp-content/uploads/2025/04/08094834/Siblings-recent-photo-2.jpg","fullWidth":1500,"fullHeight":1001,"placeholder":false},"longFormMobileImage":{"caption":"Anthropic cofounders Daniela and Dario Amodei","base":"https://images.sifted.eu/cdn-cgi/image/width=1500,quality=75,fit=cover,format=auto/wp-content/uploads/2025/04/08094834/Siblings-recent-photo-2.jpg","fullWidth":1500,"fullHeight":1001,"placeholder":false}},{"id":140808,"url":"https://sifted.eu/articles/revolut-facial-recognition-face-payments-pay-with-smile/","slug":"revolut-facial-recognition-face-payments-pay-with-smile","title":"Revolut unveils facial recognition payments in UK","excerpt":"The system will initially be available at Kiss the Hippo coffee shops across London","comments":{"count":"0","enabled":false},"publishTimestamp":1790208117000,"author":{"name":"Martin Coulter","url":"https://sifted.eu/author/martin-coulter/"},"authors":[{"id":9167,"type":"wpuser","name":"Martin Coulter","twitter":"MartinJBCoulter","bio":"Martin Coulter is Sifted's news editor, based in London. You can follow him on \u003ca href=\"https://www.linkedin.com/in/martin-coulter-245056149/\"\u003e LinkedIn\u003c/a\u003e and \u003ca href=\"https://x.com/MartinJBCoulter\"\u003e X\u003c/a\u003e","niceN
80933ame":"martin-coulter","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"standard","layout":"short_form","sector":{"name":"Fintech","slug":"fintech","url":"https://sifted.eu/sector/fintech/"},"category":{"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":4497,"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"}]},"sectors":{"primary":{"id":11535,"name":"Fintech","slug":"fintech","url":"https://sifted.eu/sector/fintech/"},"all":[{"id":11535,"name":"Fintech","slug":"fintech","url":"https://sifted.eu/sector/fintech/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":null,"all":[]},"practices":{"primary":null,"all":[]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":43253,"name":"Facial recognition","slug":"facial-recognition","url":"https://sifted.eu/tag/facial-recognition/"},{"id":41223,"name":"Fintech","slug":"fintech","url":"https://sifted.eu/tag/fintech/"},{"id":40969,"name":"Revolut","slug":"revolut","url":"https://sifted.eu/tag/revolut/"}]}},"tagList":[{"name":"Fintech","link":"https://sifted.eu/sector/fintech/"},{"name":"Facial recognition","link":"https://sifted.eu/tag/facial-recognition/"},{"name":"Fintech","link":"https://sifted.eu/tag/fintech/"},{"name":"Revolut","link":"https://sifted.eu/tag/revolut/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=946,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23133806/RevolutPay-PwS-PR-Register-01-e1790167115957.png","full":"https://images.sifted.eu/cdn-cgi/image/width=946,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23133806/RevolutPay-PwS-PR-Register-01-e1790167115957.png","fullWidth":946,"fullHeight":538,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23133806/RevolutPay-PwS-PR-Register-01-e1790167115957.png","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23133806/RevolutPay-PwS-PR-Register-01-e1790167115957.png","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23133806/RevolutPay-PwS-PR-Register-01-e1790167115957.png","caption":"","placeholder":false,"alt":"Revolut Pay with Smile facial recognition"},"cardImage":{"caption":"","alt":"Revolut Pay with Smile facial recognition","base":"https://images.sifted.eu/cdn-cgi/image/width=946,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23133806/RevolutPay-PwS-PR-Register-01-e1790167115957.png","fullWidth":946,"fullHeight":538,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=946,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23133806/RevolutPay-PwS-PR-Register-01-e1790167115957.png","fullWidth":946,"fullHeight":538,"placeholder":false}},{"id":140846,"url":"https://sifted.eu/articles/nscale-nvidia-bytedance-tiktok/","slug":"nscale-nvidia-bytedance-tiktok","title":"Nscale helped ByteDance subsidiary access Nvidia chips, sidestepping US rules â reports","excerpt":"Deal allegedly enabled TikTok parent company access to chips it could not get in China due to US restrictions\r\n","comments":{"count":"0","enabled":false},"publishTimestamp":1790182773000,"author":{"name":"Martin Coulter","url":"https://sifted.eu/author/martin-coulter/"},"authors":[{"id":9167,"type":"wpuser","name":"Martin Coulter","twitter":"MartinJBCoulter","bio":"Martin Coulter is Sifted's news editor, based in London. You can follow him on \u003ca href=\"https://www.linkedin.com/in/martin-coulter-245056149/\"\u003e LinkedIn\u003c/a\u003e and \u003ca href=\"https://x.com/MartinJBCoulter\"\u003e X\u003c/a\u003e","niceName":"martin-coulter","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"standard","layout":"short_form","sector":{"name":"Data centres","slug":"data-centres","url":"https://sifted.eu/sector/data-centres/"},"category":{"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":4497,"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"}]},"sectors":{"primary":{"id":41715,"name":"Data centres","slug":"data-centres","url":"https://sifted.eu/sector/data-centres/"},"all":[{"id":41715,"name":"Data centres","slug":"data-centres","url":"https://sifted.eu/sector/data-centres/"},{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":null,"all":[]},"practices":{"primary":null,"all":[]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":43541,"name":"ByteDance","slug":"bytedance","url":"https://sifted.eu/tag/bytedance/"},{"id":41899,"name":"Nscale","slug":"nscale","url":"https://sifted.eu/tag/nscale/"},{"id":41776,"name":"Nvidia","slug":"nvidia","url":"https://sifted.eu/tag/nvidia/"}]}},"tagList":[{"name":"Data centres","link":"https://sifted.eu/sector/data-centres/"},{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"ByteDance","link":"https://sifted.eu/tag/bytedance/"},{"name":"Nscale","link":"https://sifted.eu/tag/nscale/"}],"image":{"base":"https://content.sifted.eu/wp-content/uploads/2026/01/14164109/6751d9658fb3f94e50739cc8.webp","full":"https://content.sifted.eu/wp-content/uploads/2026/01/14164109/6751d9658fb3f94e50739cc8.webp","fullWidth":700,"fullHeight":525,"header-image":"https://content.sifted.eu/wp-content/uploads/2026/01/14164109/6751d9658fb3f94e50739cc8-530x355.webp","header-image-labeled":"https://content.sifted.eu/wp-content/uploads/2026/01/14164109/6751d9658fb3f94e50739cc8-530x355.webp","list-image":"https://content.sifted.eu/wp-content/uploads/2026/01/14164109/6751d9658fb3f94e50739cc8-240x130.webp","caption":"Josh Payne. Photo: Nscale","placeholder":false,"alt":"Josh Payne. Photo: Nscale"},"cardImage":{"caption":"Josh Payne. Photo: Nscale","alt":"Josh Payne. Photo: Nscale","base":"https://content.sifted.eu/wp-content/uploads/2026/01/14164109/6751d9658fb3f94e50739cc8.webp","fullWidth":700,"fullHeight":525,"placeholder":false},"longFormMobileImage":{"caption":"Josh Payne. Photo: Nscale","base":"https://content.sifted.eu/wp-content/uploads/2026/01/14164109/6751d9658fb3f94e50739cc8.webp","fullWidth":700,"fullHeight":525,"placeholder":false}}],"collaborationArticles":[{"id":140407,"url":"https://sifted.eu/articles/uk-startup-building-ais-next-enterprise-category-brnd/","slug":"uk-startup-building-ais-next-enterprise-category-brnd","title":"Inside the UK startup building AIâs next enterprise category","excerpt":"Backed by investors including LocalGlobe, Cherry Ventures and Octopus Ventures, Resolutiion is betting that Risk-to-Resolution will be the next breakout wave in enterprise AI","comments":{"count":"0","enabled":false},"publishTimestamp":1790240400000,"author":{"name":"techUK","url":"https://sifted.eu/author/techuk/"},"authors":[{"id":9283,"type":"wpuser","name":"techUK","twitter":"","bio":"","niceN
80933ame":"techuk","image":false}],"isSponsored":true,"sponsorshipType":"Paid for and produced by","sponsorDetails":{"logo":"https://images.sifted.eu/cdn-cgi/image/format=auto/wp-content/uploads/2026/09/17113959/unnamed.png","logoWidth":438,"logoHeight":137,"name":"TechUK","description":"","url":"","urlLabel":"Learn more"},"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"sponsored","layout":"","sector":{"name":"Startup life","slug":"startup-life","url":"https://sifted.eu/sector/startup-life/"},"category":{"name":"Paid for and produced by","slug":"paid-for-and-produced-by","url":"https://sifted.eu/categories/paid-for-and-produced-by/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":41697,"name":"Paid for and produced by","slug":"paid-for-and-produced-by","url":"https://sifted.eu/categories/paid-for-and-produced-by/"},{"id":41677,"name":"Branded content","slug":"branded-content","url":"https://sifted.eu/categories/branded-content/"}]},"sectors":{"primary":{"id":11531,"name":"Startup life","slug":"startup-life","url":"https://sifted.eu/sector/startup-life/"},"all":[{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"},{"id":11531,"name":"Startup life","slug":"startup-life","url":"https://sifted.eu/sector/startup-life/"}]},"themes":{"primary":{"id":1714,"name":"Startups","slug":"startups","url":"https://sifted.eu/themes/startups/"},"all":[{"id":1714,"name":"Startups","slug":"startups","url":"https://sifted.eu/themes/startups/"}]},"topics":{"primary":{"id":1927,"name":"Startups","slug":"startups","url":"https://sifted.eu/topic/startups/"},"all":[{"id":1927,"name":"Startups","slug":"startups","url":"https://sifted.eu/topic/startups/"}]},"practices":{"primary":{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"},"all":[{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"}]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[]}},"tagList":[{"name":"Artificial intelligence","link":"https://sifted.eu/sector/artificial-intelligence/"},{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"Startup life","link":"https://sifted.eu/sector/startup-life/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","full":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","fullWidth":2048,"fullHeight":1280,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","caption":"","placeholder":false,"alt":""},"cardImage":{"caption":"","alt":"","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","fullWidth":2048,"fullHeight":1280,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/22125705/Sifted-scaled.png","fullWidth":2048,"fullHeight":1280,"placeholder":false}},{"id":140599,"url":"https://sifted.eu/articles/companies-finally-use-their-most-valuable-data-brnd/","slug":"companies-finally-use-their-most-valuable-data-brnd","title":"What if companies could finally use their most valuable data?","excerpt":"Some of Europeâs most valuable business data remains largely off limits to AI. New innovations in confidential computing could help change that","comments":{"count":"0","enabled":false},"publishTimestamp":1790154000000,"author":{"name":"Vast Data","url":"https://sifted.eu/author/vast-d
80933ata/"},"authors":[{"id":9282,"type":"wpuser","name":"Vast Data","twitter":"","bio":"","niceName":"vast-data","image":false}],"isSponsored":true,"sponsorshipType":"Paid for and produced by","sponsorDetails":{"logo":"https://images.sifted.eu/cdn-cgi/image/format=auto/wp-content/uploads/2026/09/17160315/VAST-Data-Master-Logo-Blue.png","logoWidth":1136,"logoHeight":786,"name":"Vast Data","description":"","url":"","urlLabel":""},"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"sponsored","layout":"long_form","sector":{"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},"category":{"name":"Paid for and produced by","slug":"paid-for-and-produced-by","url":"https://sifted.eu/categories/paid-for-and-produced-by/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":41697,"name":"Paid for and produced by","slug":"paid-for-and-produced-by","url":"https://sifted.eu/categories/paid-for-and-produced-by/"},{"id":41677,"name":"Branded content","slug":"branded-content","url":"https://sifted.eu/categories/branded-content/"}]},"sectors":{"primary":{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},"all":[{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":{"id":1927,"name":"Startups","slug":"startups","url":"https://sifted.eu/topic/startups/"},"all":[{"id":1927,"name":"Startups","slug":"startups","url":"https://sifted.eu/topic/startups/"}]},"practices":{"primary":{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"},"all":[{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"}]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[]}},"tagList":[{"name":"Artificial intelligence","link":"https://sifted.eu/sector/artificial-intelligence/"},{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/18091237/VAST20260225093746_10096-1-scaled.jpg","full":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/18091237/VAST20260225093746_10096-1-scaled.jpg","fullWidth":2048,"fullHeight":1365,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/18091237/VAST20260225093746_10096-1-scaled.jpg","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/18091237/VAST20260225093746_10096-1-scaled.jpg","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/18091237/VAST20260225093746_10096-1-scaled.jpg","caption":"Renen Hallak, founder and CEO of VAST Data\nPhoto: VAST Data","placeholder":false,"alt":""},"cardImage":{"caption":"Renen Hallak, founder and CEO of VAST Data\nPhoto: VAST Data","alt":"","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/18091237/VAST20260225093746_10096-1-scaled.jpg","fullWidth":2048,"fullHeight":1365,"placeholder":false},"longFormMobileImage":{"caption":"Renen Hallak, founder and CEO of VAST Data\nPhoto: VAST Data","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/18091237/VAST20260225093746_10096-1-scaled.jpg","fullWidth":2048,"fullHeight":1365,"placeholder":false}},{"id":140524,"url":"https://sifted.eu/articles/europes-ai-moment-is-moving-from-hype-to-execution-brnd/","slug":"europes-ai-moment-is-moving-from-hype-to-execution-brnd","title":"Europe's AI moment is moving from hype to execution","excerpt":"At the upcoming HumanX event, founders, investors and policymakers will gather to explore the realities and challenges of integrating AI into businesses ","comments":{"count":"0","enabled":false},"publishTimestamp":1789640864000,"author":{"name":"HumanX","url":"https://sifted.eu/author/humanx/"},"authors":[{"id":9280,"type":"wpuser","name":"HumanX","twitter":"","bio":"","niceN
80933ame":"humanx","image":false}],"isSponsored":true,"sponsorshipType":"Paid for and produced by","sponsorDetails":{"logo":"https://images.sifted.eu/cdn-cgi/image/format=auto/wp-content/uploads/2026/09/16151911/HXE26_logo_dates_black-scaled.png","logoWidth":2048,"logoHeight":288,"name":"HumanX","description":"","url":"","urlLabel":""},"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"sponsored","layout":"long_form","sector":{"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},"category":{"name":"Paid for and produced by","slug":"paid-for-and-produced-by","url":"https://sifted.eu/categories/paid-for-and-produced-by/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":41697,"name":"Paid for and produced by","slug":"paid-for-and-produced-by","url":"https://sifted.eu/categories/paid-for-and-produced-by/"},{"id":41677,"name":"Branded content","slug":"branded-content","url":"https://sifted.eu/categories/branded-content/"}]},"sectors":{"primary":{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},"all":[{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"}]},"themes":{"primary":{"id":1713,"name":"Technology","slug":"technology","url":"https://sifted.eu/themes/technology/"},"all":[{"id":1713,"name":"Technology","slug":"technology","url":"https://sifted.eu/themes/technology/"}]},"topics":{"primary":{"id":1926,"name":"Technology","slug":"technology","url":"https://sifted.eu/topic/technology/"},"all":[{"id":1926,"name":"Technology","slug":"technology","url":"https://sifted.eu/topic/technology/"}]},"practices":{"primary":{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"},"all":[{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"}]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":43150,"name":"HumanX","slug":"humanx","url":"https://sifted.eu/tag/humanx/"}]}},"tagList":[{"name":"Artificial intelligence","link":"https://sifted.eu/sector/artificial-intelligence/"},{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"HumanX","link":"https://sifted.eu/tag/humanx/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16152455/R5M24889_HumanX2026_Day2-scaled-e1789568815666.jpg","full":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16152455/R5M24889_HumanX2026_Day2-scaled-e1789568815666.jpg","fullWidth":2048,"fullHeight":1270,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16152455/R5M24889_HumanX2026_Day2-scaled-e1789568815666.jpg","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16152455/R5M24889_HumanX2026_Day2-scaled-e1789568815666.jpg","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16152455/R5M24889_HumanX2026_Day2-scaled-e1789568815666.jpg","caption":"","placeholder":false,"alt":""},"cardImage":{"caption":"","alt":"","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16152455/R5M24889_HumanX2026_Day2-scaled-e1789568815666.jpg","fullWidth":2048,"fullHeight":1270,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16152455/R5M24889_HumanX2026_Day2-scaled-e1789568815666.jpg","fullWidth":2048,"fullHeight":1270,"placeholder":false}},{"id":140514,"url":"https://sifted.eu/articles/a-founders-guide-to-early-ip-management-brnd/","slug":"a-founders-guide-to-early-ip-management-brnd","title":"A founderâs guide to early IP management: âYou don't own it just because you invented itâ","excerpt":"Flatfrog and Lightbringer cofounder Ola Wassvik shares the IP lessons and mistakes he made while building a 300-patent portfolio","comments":{"count":"0","enabled":false},"publishTimestamp":1789635656000,"author":{"name":"Lara Bryant","url":"https://sifted.eu/author/larasifted-eu/"},"authors":[{"id":9221,"type":"wpuser","name":"Lara Bryant","twitter":"","bio":"Lara is a content writer at Sifted, based in London. You can find her on \u003ca href=\"https://www.linkedin.com/in/lara-bryant-b26a212
809330a/\"\u003e LinkedIn \u003c/a\u003e","niceName":"larasifted-eu","image":false}],"isSponsored":true,"sponsorshipType":"Sponsored by","sponsorDetails":{"logo":"https://images.sifted.eu/cdn-cgi/image/format=auto/wp-content/uploads/2026/08/19142333/logo-black-png.png","logoWidth":2298,"logoHeight":401,"name":"Lightbringer","description":"The AI patent platform for deep tech founders","url":"https://www.lightbringer.com","urlLabel":"Learn more"},"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"sponsored","layout":"portrait","sector":{"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},"category":{"name":"Sponsored by","slug":"sponsored-by","url":"https://sifted.eu/categories/sponsored-by/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":41695,"name":"Sponsored by","slug":"sponsored-by","url":"https://sifted.eu/categories/sponsored-by/"},{"id":41677,"name":"Branded content","slug":"branded-content","url":"https://sifted.eu/categories/branded-content/"}]},"sectors":{"primary":{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},"all":[{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"},{"id":11531,"name":"Startup life","slug":"startup-life","url":"https://sifted.eu/sector/startup-life/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":{"id":1927,"name":"Startups","slug":"startups","url":"https://sifted.eu/topic/startups/"},"all":[{"id":1929,"name":"Innovation","slug":"innovation","url":"https://sifted.eu/topic/innovation/"},{"id":1927,"name":"Startups","slug":"startups","url":"https://sifted.eu/topic/startups/"}]},"practices":{"primary":{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"},"all":[{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"}]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":42947,"name":"Lightbringer","slug":"lightbringer","url":"https://sifted.eu/tag/lightbringer/"}]}},"tagList":[{"name":"Artificial intelligence","link":"https://sifted.eu/sector/artificial-intelligence/"},{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"Startup life","link":"https://sifted.eu/sector/startup-life/"},{"name":"Lightbringer","link":"https://sifted.eu/tag/lightbringer/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=800,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16142744/Ola-Wassvik-lightbringer.png","full":"https://images.sifted.eu/cdn-cgi/image/width=800,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16142744/Ola-Wassvik-lightbringer.png","fullWidth":800,"fullHeight":800,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16142744/Ola-Wassvik-lightbringer.png","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16142744/Ola-Wassvik-lightbringer.png","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16142744/Ola-Wassvik-lightbringer.png","caption":"","placeholder":false,"alt":""},"cardImage":{"caption":"","alt":"","base":"https://images.sifted.eu/cdn-cgi/image/width=800,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16142744/Ola-Wassvik-lightbringer.png","fullWidth":800,"fullHeight":800,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=800,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/16142744/Ola-Wassvik-lightbringer.png","fullWidth":800,"fullHeight":800,"placeholder":false}},{"id":140467,"url":"https://sifted.eu/articles/new-impact-investing-playbook-brnd/","slug":"new-impact-investing-playbook-brnd","title":"The new impact investing playbook: Why climate investors are moving beyond carbon accounting","excerpt":"European impact investors are broadening their lens beyond carbon emissions to understand how companies interact with climate, resources, nature and human health","comments":{"count":"0","enabled":false},"publishTimestamp":1789548531000,"author":{"name":"Isabelle Laurencin","url":"https://sifted.eu/author/isabelle-laurencin/"},"authors":[{"id":9279,"type":"wpuser","name":"Isabelle Laurencin","twitter":"","bio":"","niceN
80933ame":"isabelle-laurencin","image":false}],"isSponsored":true,"sponsorshipType":"Paid for and produced by","sponsorDetails":{"logo":"https://images.sifted.eu/cdn-cgi/image/format=auto/wp-content/uploads/2026/04/15133511/Dark-10-Horizontal-Tagline.png","logoWidth":1600,"logoHeight":461,"name":"ECBF","description":"The Specialist VC for a Regenerative Economy","url":"https://ecbf.vc/ecbf-impact-insights-2025-climate-impact-to-systemic-value/","urlLabel":"Learn more"},"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"sponsored","layout":"portrait","sector":{"name":"Climate tech","slug":"climate-tech","url":"https://sifted.eu/sector/climate-tech/"},"category":{"name":"Paid for and produced by","slug":"paid-for-and-produced-by","url":"https://sifted.eu/categories/paid-for-and-produced-by/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":41697,"name":"Paid for and produced by","slug":"paid-for-and-produced-by","url":"https://sifted.eu/categories/paid-for-and-produced-by/"},{"id":41677,"name":"Branded content","slug":"branded-content","url":"https://sifted.eu/categories/branded-content/"}]},"sectors":{"primary":{"id":589,"name":"Climate tech","slug":"climate-tech","url":"https://sifted.eu/sector/climate-tech/"},"all":[{"id":589,"name":"Climate tech","slug":"climate-tech","url":"https://sifted.eu/sector/climate-tech/"}]},"themes":{"primary":{"id":1713,"name":"Technology","slug":"technology","url":"https://sifted.eu/themes/technology/"},"all":[{"id":1713,"name":"Technology","slug":"technology","url":"https://sifted.eu/themes/technology/"}]},"topics":{"primary":{"id":1926,"name":"Technology","slug":"technology","url":"https://sifted.eu/topic/technology/"},"all":[{"id":1926,"name":"Technology","slug":"technology","url":"https://sifted.eu/topic/technology/"}]},"practices":{"primary":{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"},"all":[{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"}]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":43144,"name":"ECBF","slug":"ecbf","url":"https://sifted.eu/tag/ecbf/"}]}},"tagList":[{"name":"Climate tech","link":"https://sifted.eu/sector/climate-tech/"},{"name":"ECBF","link":"https://sifted.eu/tag/ecbf/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=800,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/15130501/1740650624523.jpeg","full":"https://images.sifted.eu/cdn-cgi/image/width=800,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/15130501/1740650624523.jpeg","fullWidth":800,"fullHeight":800,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/15130501/1740650624523.jpeg","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/15130501/1740650624523.jpeg","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/15130501/1740650624523.jpeg","caption":"","placeholder":false,"alt":""},"cardImage":{"caption":"","alt":"","base":"https://images.sifted.eu/cdn-cgi/image/width=800,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/15130501/1740650624523.jpeg","fullWidth":800,"fullHeight":800,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=800,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/15130501/1740650624523.jpeg","fullWidth":800,"fullHeight":800,"placeholder":false}},{"id":140279,"url":"https://sifted.eu/articles/ai-redefining-corporate-cyber-readiness-brnd/","slug":"ai-redefining-corporate-cyber-readiness-brnd","title":"How AI is redefining corporate cyber-readiness","excerpt":"Getting ready to fight AI cyber threats isnât just about automating, itâs about human augmentation","comments":{"count":"0","enabled":false},"publishTimestamp":1789463022000,"author":{"name":"Tim Smith","url":"https://sifted.eu/author/tim-smith/"},"authors":[{"id":6490,"type":"wpuser","name":"Tim Smith","twitter":"timmpsmith","bio":"Tim Smith was news editor at Sifted. He covered deeptech and AI, and produced \u003ca href=\"https://podcast.sifted.eu/\"\u003e Startup Europe â The Sifted Podcast \u003c/a\u003e. Follow him on \u003ca href=\"https://twitter.com/timmpsmith\"\u003e X \u003c/a\u003e and \u003ca href=\"https://www.linkedin.com/in/tim-smith-317479a2/\"\u003e LinkedIn \u003c/a\u003e","niceN
80933ame":"tim-smith","image":false}],"isSponsored":true,"sponsorshipType":"Sponsored by","sponsorDetails":{"logo":"https://images.sifted.eu/cdn-cgi/image/format=auto/wp-content/uploads/2024/06/21161129/Logo_black-2.png","logoWidth":1200,"logoHeight":163,"name":"Endeavor Greece","description":"is the leading global community of, by, and for High-Impact Entrepreneurs","url":"https://www.endeavor.org.gr/","urlLabel":"Learn more"},"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"sponsored","layout":"long_form","sector":{"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},"category":{"name":"Sponsored by","slug":"sponsored-by","url":"https://sifted.eu/categories/sponsored-by/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":41695,"name":"Sponsored by","slug":"sponsored-by","url":"https://sifted.eu/categories/sponsored-by/"},{"id":41677,"name":"Branded content","slug":"branded-content","url":"https://sifted.eu/categories/branded-content/"}]},"sectors":{"primary":{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},"all":[{"id":290,"name":"Artificial intelligence","slug":"artificial-intelligence","url":"https://sifted.eu/sector/artificial-intelligence/"},{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"}]},"themes":{"primary":{"id":1713,"name":"Technology","slug":"technology","url":"https://sifted.eu/themes/technology/"},"all":[{"id":1713,"name":"Technology","slug":"technology","url":"https://sifted.eu/themes/technology/"}]},"topics":{"primary":{"id":1926,"name":"Technology","slug":"technology","url":"https://sifted.eu/topic/technology/"},"all":[{"id":1926,"name":"Technology","slug":"technology","url":"https://sifted.eu/topic/technology/"}]},"practices":{"primary":{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"},"all":[{"id":314,"name":"Tech","slug":"tech","url":"https://sifted.eu/practice/tech/"}]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":43094,"name":"Endeavor Greece","slug":"endeavor-greece","url":"https://sifted.eu/tag/endeavor-greece/"},{"id":43096,"name":"Hack the Box","slug":"hack-the-box","url":"https://sifted.eu/tag/hack-the-box/"}]}},"tagList":[{"name":"Artificial intelligence","link":"https://sifted.eu/sector/artificial-intelligence/"},{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"Endeavor Greece","link":"https://sifted.eu/tag/endeavor-greece/"},{"name":"Hack the Box","link":"https://sifted.eu/tag/hack-the-box/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/11141427/v2-Article-Cover-How-AI-is-redefining-corporate-cyber-readiness-scaled.jpg","full":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/11141427/v2-Article-Cover-How-AI-is-redefining-corporate-cyber-readiness-scaled.jpg","fullWidth":2048,"fullHeight":718,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/11141427/v2-Article-Cover-How-AI-is-redefining-corporate-cyber-readiness-scaled.jpg","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/11141427/v2-Article-Cover-How-AI-is-redefining-corporate-cyber-readiness-scaled.jpg","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/11141427/v2-Article-Cover-How-AI-is-redefining-corporate-cyber-readiness-scaled.jpg","caption":"","placeholder":false,"alt":""},"cardImage":{"caption":"","alt":"","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/11141427/v2-Article-Cover-How-AI-is-redefining-corporate-cyber-readiness-scaled.jpg","fullWidth":2048,"fullHeight":718,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/11141427/v2-Article-Cover-How-AI-is-redefining-corporate-cyber-readiness-scaled.jpg","fullWidth":2048,"fullHeight":718,"placeholder":false}}],"tabLabels":{"popular":"Popular","free":"Free to read","collaborations":"Collaborations"},"tabOrder":{"popular":1,"free":2,"collaborations":3},"ctaText":"Read more","ctaLink":"https://sifted.eu/latest","secondTabCta":{"text":"Read more","link":"https://sifted.eu/articles/free"},"thirdTabCta":{"text":"Read more","link":"https://sifted.eu/categories/branded-content"}},"dato":{"homepage":{"seo":{"description":"Sifted covers European tech, startups and venture capital with independent news, analysis, data and insights for founders, investors and operators.","title":"Sifted: European Tech News, Startups \u0026 Venture Capital","image":{"url":"https://www.datocms-assets.com/60124/1687337580-sifted-on-pink.png"}},"sectionsOrder":[{"text":"pro","id":"FOBVeRUMS12afkanVUbiQw"},{"text":"feedsAndPodcast","id":"fRo9FEG9TlWFol7w1l4_pQ"},{"text":"newsletters","id":"U7tsVVWCQa6UTTFHss0kcw"},{"text":"latest","id":"GVs2CqoAR62R7oTWb5p7sQ"},{"text":"siftedInsights","id":"HtdTMGaVSlmxHjr5jW6PAw"},{"text":"events","id":"B9KKAFXTQ16j3cTws_muFA"},{"text":"talks","id":"IzH86bkETOm_fFJDCY_4-Q"}],"popularArticles":[{"tabOrder":1,"tabName":"Popular","featuredArticle":[{"id":"MakCBcY3S4yrlDKXiU9ihA","title":"Anthropic Lovable ","articleId":"140710","articleSlug":""},{"id":"TxWv-mPrT6CFeYVDuwDDAA","title":"AI bubble","articleId":"140290","articleSlug":""},{"id":"Ntl94vh4TY6EatOljJdvzw","title":"Ick list","articleId":"140425","articleSlug":""},{"id":"elgOKo9BRH-wkD4uq9OfDQ","title":"Legora Jude Law","articleId":"140419","articleSlug":""},{"id":"a_HW4RxCRYKgGQ_KgGwA9w","title":"Recursive","articleId":"140609","articleSlug":""}
80933,{"id":"EOsnby_OQgK8ZWHk2xPUBQ","title":"11 AI operators","articleId":"140540","articleSlug":""}]}],"popularCta":{"url":"https://sifted.eu/latest","text":"Read more","id":"LmeJLLYySVq1gAb3geZObw"},"secondTab":{"id":"QpmXvp9VQKC3DDH4ewLCaQ","tabOrder":2,"tabName":"Free to read","tabCta":{"url":"https://sifted.eu/articles/free","text":"Read more","id":"K92Z7MYZT2eGqf5vEeuWDA"}},"thirdTab":{"id":"HNePRd8tR8W78oWd_9JX-A","tabOrder":3,"tabName":"Collaborations","tabCta":{"url":"https://sifted.eu/categories/branded-content","text":"Read more","id":"eDfRgWgWRgiyoYsxDMToZg"}},"events":{"id":"AAB3rx6CQsOmByevdjzcXA","mobileImage":{"id":"TEvMlop8SJijT73jqsT3kw","url":"https://www.datocms-assets.com/60124/1776346757-summit-mobile.png","alt":null,"title":null,"width":1440,"height":760,"size":1407086,"blurUpThumb":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHBwgHBgoICAgLCgoLDhgQFQ0YDikVHR0YHR8ZGCITIhUmHysjHR0oKSEWJDUlKC0vMjIyHiI4PTcwPCsxMi8BCgsLDg0OHA0QHDsoFig7Lzs7LzsvLy8vOzs7Ly81Ozs1LzsvLy8vOy8vLy8vLzsvLy8vNS8vLy8vLy8vLy8vL//AABEIAA0AGAMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAAFBgEEBwD/xAAgEAABBAIBBQAAAAAAAAAAAAABAAIDEQQFEgYhMUJR/8QAFwEAAwEAAAAAAAAAAAAAAAAAAgMEAf/EABoRAAIDAQEAAAAAAAAAAAAAAAACAxExEgH/2gAMAwEAAhEDEQA/AMxMHDZNDuwtPNwHU8b9Uu7vGjizAWilage52JRJqkzxVK5EkvQLi4TJtm4DxalGen8WN+xdy+rlnKhqslaf/9k="},"desktopTabletImage":{"id":"YuobAijuQom_0OCDP3OJ5Q","url":"https://www.datocms-assets.com/60124/1776346757-summit-desktop.png","alt":null,"width":2440,"height":760,"blurUpThumb":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHBwgHBgoICAgLCgoLDh4QFw0NDhkVFhEYJR8qHRYlJR4dKCslJiItKRUWMDUmKC0vMjIyHSI4PTcwSCsxMi8BCgsLDg0OHBAQHDsoIhw7Ozs1Lzs7OzsvLzs7Ly8vOzs7Lzs7Ly8vOzsvOzsvOzsvLy87Oy8vLy87Ly8vLy8vL//AABEIAAgAGAMBIgACEQEDEQH/xAAYAAEAAwEAAAAAAAAAAAAAAAAABAUHAf/EACAQAAAFAwUAAAAAAAAAAAAAAAABAgQFERIxAwYUIWH/xAAWAQEBAQAAAAAAAAAAAAAAAAAEAwL/xAAYEQADAQEAAAAAAAAAAAAAAAAAAQIDEv/aAAwDAQACEQMRAD8AzlUY1VFlqEo7q5F1x2qdqWeAAqpQnaF0Q28E21YY117rkcABlpDs8Zco/9k="}},"eventsCta":{"id":"IeHTRif5SdqggkfoZpiJdg","text":"Get your tickets","url":"https://summit.sifted.eu/"},"header":{"title":"Sifted Summit","cta":{"url":"https://sifted.eu/tag/sifted-summit","text":"See Sifted Summit coverage","updatedAt":"2026-07-20T09:50:08+01:00","id":"cS66wOAcTWmdymL9EtVLgw"}},"descriptionTitle":"The annual gathering for Europeâs scaleup leaders","eventsDescription":"Sifted Summit is where Series A+ founders, operators and investors come together for honest conversations about what it really takes to scale â and leave clearer about the decisions that move companies from one stage of growth to the next.","podcastSectionHeader":{"id":"GN2NqxQ_Scq3yXziPcmJQQ","title":"Podcast","cta":{"text":"See all podcast episodes","url":"https://sifted.eu/categories/podcast "}},"talksSectionHeader":{"id":"I3RRNG2sSYSYteKdma2_dw","title":"Upcoming Talks","cta":{"text":"Explore more","url":"https://sifted.eu/talks"}},"latestEpisodes":[{"id":"I7zCK-eoQOWEVBGWsqEeNA","name":"What the Anthropic shutdown means for Europe","podcastLength":"15:47","podcastItem":{"id":"BhfK_F1lRguRTZhW4crZCA","links":[{"id":"fw3L1uDMTwerEAiTzbBgDw","url":"https://podcasts.apple.com/gb/podcast/what-the-anthropic-shutdown-means-for-europe/id1592525862?i=1000772960763","icon":{"url":"https://www.datocms-assets.com/60124/1776344514-applepodcasts-logo-svg.svg","alt":null,"title":null,"blurUpThumb":null}},{"id":"b59A6j-3Qn-AdJE7oiY9jA","url":"https://open.spotify.com/episode/1OhJW71yYA89unX9XR4u3J?si=6CQhYjmrS5S6N4WNawKctg","icon":{"url":"https://www.datocms-assets.com/60124/1776344533-spotify-logo.svg","alt":null,"title":null,"blurUpThumb":null}}]}},{"id":"UsbiPdkCTdm-c36MB7sXAw","name":"Newton Venture Program CEO Anu Adebajo on Europeâs âzombie fundsâ","podcastLength":"44:51","podcastItem":{"id":"W5g-l0BcQLuj7yJsU1W_bw","links":[{"id":"IdeM0xjkQcuL1VyOGSgT7w","url":"https://podcasts.apple.com/gb/podcast/newton-venture-program-ceo-anu-adebajo-on-europes-zombie/id1592525862?i=1000772227073","icon":{"url":"https://www.datocms-assets.com/60124/1776344514-applepodcasts-logo-svg.svg","alt":null,"title":null,"blurUpThumb":null}},{"id":"TgLTD7UQQ_eWb9pwlsCE-Q","url":"https://open.spotify.com/episode/0LKIayura2LZP21w3gXSXO?si=QOUJyHbFQMCKPr9xRNsNnQ","icon":{"url":"https://www.datocms-assets.com/60124/1776344533-spotify-logo.svg","alt":null,"title":null,"blurUpThumb":null}},{"id":"DbzXsx2kRrS3ew3THYtRbQ","url":"https://www.youtube.com/watch?v=wsyx0gzD7TU","icon":{"url":"https://www.datocms-assets.com/60124/1776344548-youtube-logo.svg","alt":null,"title":null,"blurUpThumb":null}}]}}],"topEpisodes":[{"id":"WB1V4z86QemMK2zOycCZxQ","name":"Judith Dada, general partner at Visionaries Club: 'I'm deeply troubled by what lies ahead for Europe'","podcastLength":"53:32","podcastItem":{"i
80933d":"PnZKaRBRQxSxCbm_sYdOlw","links":[{"id":"fSJjpydtQBiAQAojzZP96Q","url":"https://podcasts.apple.com/gb/podcast/judith-dada-general-partner-at-visionaries-fund-im/id1592525862?i=1000750506499","icon":{"url":"https://www.datocms-assets.com/60124/1776344514-applepodcasts-logo-svg.svg","alt":null,"title":null,"blurUpThumb":null}},{"id":"IjlkyMOGSeCTmZTkSpojfA","url":"https://open.spotify.com/episode/4wTjaJfyOJWuw04GpCNSp0?si=5v4RGH79Qd-Wm5Gu-8KYMw","icon":{"url":"https://www.datocms-assets.com/60124/1776344533-spotify-logo.svg","alt":null,"title":null,"blurUpThumb":null}}]}},{"id":"V_zQ-NtsRCSrdnNiP06Qxg","name":"James Wise on why the Sovereign AI Unit criticism is wrong â and the one company he wishes heâd backed","podcastLength":"39:27","podcastItem":{"id":"QZ0JIkcvSXSKvOcpkJTnvQ","links":[{"id":"TqV30i_QSoqzbNf0v801Rw","url":"https://podcasts.apple.com/gb/podcast/james-wise-on-why-the-sovereign-ai-unit-criticism-is/id1592525862?i=1000767985683","icon":{"url":"https://www.datocms-assets.com/60124/1776344514-applepodcasts-logo-svg.svg","alt":null,"title":null,"blurUpThumb":null}},{"id":"Cjum47UWQmWZWQRuPb19Cg","url":"https://open.spotify.com/episode/17o78DKIRirs2sPnHD63KE?si=7b7b382f6259457b","icon":{"url":"https://www.datocms-assets.com/60124/1776344533-spotify-logo.svg","alt":null,"title":null,"blurUpThumb":null}}]}}],"podcastCallout":{"id":"KIb98-dRQne2Eqzk8-OqrA","title":"Be the first to see exclusive leaderboard data","description":"The Nordics' top 100 is live. Unlock the full dataset behind the ranking â funding and revenue data, plus in-depth reporting and market intelligence showing where momentum is building. Get complete access to Sifted Pro from as little as £4.79/day.\n","buttonLabel":"Explore Pro","buttonCta":"https://sifted.eu/sifted-pro","accent":"pro","buttonVariant":"pro","createdAt":"2026-04-16T14:42:29+01:00","updatedAt":"2026-09-04T10:36:00+01:00"},"heroArticle":{"id":140887,"url":"https://sifted.eu/articles/exclusive-revolut-customers-fresh-hack/","slug":"exclusive-revolut-customers-fresh-hack","title":"Exclusive: Revolut customers hit by fresh security breach","excerpt":"The broker the fintech uses to trade US stocks suffered a security incident, emails seen by Sifted show","comments":{"count":"0","enabled":false},"publishTimestamp":1790249139000,"author":{"name":"Maya Dharampal-Hornby","url":"https://sifted.eu/author/maya-dharampal-hornby/"},"authors":[{"id":9171,"type":"wpuser","name":"Maya Dharampal-Hornby","twitter":"","bio":"Maya Dharampal-Hornby is a reporter, covering UK tech for Sifted, based in London. She's also the producer of \u003ca href=\"https://podcast.sifted.eu/\"\u003e Startup Europe â The Sifted Podcast \u003c/a\u003e.","niceN
80933ame":"maya-dharampal-hornby","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","articleFormat":"standard","layout":"short_form","sector":{"name":"Fintech","slug":"fintech","url":"https://sifted.eu/sector/fintech/"},"category":{"name":"Exclusive","slug":"exclusive","url":"https://sifted.eu/categories/exclusive/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":41679,"name":"Exclusive","slug":"exclusive","url":"https://sifted.eu/categories/exclusive/"},{"id":4497,"name":"News","slug":"news","url":"https://sifted.eu/categories/news/"}]},"sectors":{"primary":{"id":11535,"name":"Fintech","slug":"fintech","url":"https://sifted.eu/sector/fintech/"},"all":[{"id":11535,"name":"Fintech","slug":"fintech","url":"https://sifted.eu/sector/fintech/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":null,"all":[]},"practices":{"primary":null,"all":[]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":40969,"name":"Revolut","slug":"revolut","url":"https://sifted.eu/tag/revolut/"}]}},"tagList":[{"name":"Fintech","link":"https://sifted.eu/sector/fintech/"},{"name":"Revolut","link":"https://sifted.eu/tag/revolut/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png","full":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png","fullWidth":2048,"fullHeight":672,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png","caption":"Passports and driving licences, birth dates, addresses and more were exposed in the breach. ","placeholder":false,"alt":"revolut hack"},"cardImage":{"caption":"Passports and driving licences, birth dates, addresses and more were exposed in the breach. ","alt":"revolut hack","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png","fullWidth":2048,"fullHeight":672,"placeholder":false},"longFormMobileImage":{"caption":"Passports and driving licences, birth dates, addresses and more were exposed in the breach. ","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/14213130/revolut-hack-scaled.png","fullWidth":2048,"fullHeight":672,"placeholder":false}},"featuredHeroArticles":[{"id":140872,"url":"https://sifted.eu/articles/new-york-podcast/","slug":"new-york-podcast","title":"Is New York warming to European tech?","excerpt":"Anne Sraders joins host Freya Pratty on this week's Sifted podcast","comments":{"count":"0","enabled":false},"publishTimestamp":1790255114000,"author":{"name":"Anne Sraders","url":"https://sifted.eu/author/anne-sraders/"},"authors":[{"id":9088,"type":"wpuser","name":"Anne Sraders","twitter":"https://x.com/AnneSraders","bio":"Anne Sraders is a senior reporter at Sifted, based in Berlin. She covers the VC industry and deeptech startups. She also writes Sifted's weekly VC newsletter \u003ca href=\"https://sifted.eu/newsletters\"\u003e Up Round\u003c/a\u003e. Follow her on \u003ca href=\"https://x.com/AnneSraders\"\u003e X\u003c/a\u003e and \u003ca href=\"https://www.linkedin.com/in/anne-sraders-54222b95//\"\u003e LinkedIn\u003c/a\u003e","niceName":"anne-sraders","image":false},{"id":8525,"type":"wpuser","name":"Freya Pratty","twitter":"FPratty","bio":"Freya Pratty is Sifted's associate editor. She covers UK tech and leads Sifted's investigations. Follow her on \u003ca href=\"https://twitter.com/FPratty\"\u003e X \u003c/a\u003e, \u003ca href=\"https://www.linkedin.com/in/freyapratty111/\"\u003e LinkedIn \u003c/a\u003e and \u003ca href=\"https://bsky.app/profile/freyapratty.bsky.social\"\u003e Bluesky\u003c/a\u003e","niceN
80933ame":"freya-williams","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":false,"isNonFree":false,"contentSubscriptionLevel":"is_free","articleFormat":"standard","layout":"short_form","sector":{"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"category":{"name":"Podcast","slug":"podcast","url":"https://sifted.eu/categories/podcast/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":40118,"name":"Podcast","slug":"podcast","url":"https://sifted.eu/categories/podcast/"}]},"sectors":{"primary":{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"all":[{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":{"id":1928,"name":"Entrepreneurship","slug":"entrepreneurship","url":"https://sifted.eu/topic/entrepreneurship/"},"all":[{"id":1928,"name":"Entrepreneurship","slug":"entrepreneurship","url":"https://sifted.eu/topic/entrepreneurship/"},{"id":1929,"name":"Innovation","slug":"innovation","url":"https://sifted.eu/topic/innovation/"},{"id":1927,"name":"Startups","slug":"startups","url":"https://sifted.eu/topic/startups/"},{"id":1926,"name":"Technology","slug":"technology","url":"https://sifted.eu/topic/technology/"}]},"practices":{"primary":null,"all":[]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":43145,"name":"Podcast","slug":"podcast","url":"https://sifted.eu/tag/podcast/"},{"id":43159,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/tag/venture-capital/"}]}},"tagList":[{"name":"Venture capital","link":"https://sifted.eu/sector/venture-capital/"},{"name":"Podcast","link":"https://sifted.eu/tag/podcast/"},{"name":"Venture capital","link":"https://sifted.eu/tag/venture-capital/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=1280,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","full":"https://images.sifted.eu/cdn-cgi/image/width=1280,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","fullWidth":1280,"fullHeight":720,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","caption":"","placeholder":false,"alt":""},"cardImage":{"fullWidth":1080,"fullHeight":1080,"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=1080,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23224230/Freya-Anne-image-square.png","alt":"","placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=1280,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23225328/Freya-Anne-image.png","fullWidth":1280,"fullHeight":720,"placeholder":false}},{"id":140832,"url":"https://sifted.eu/articles/northern-gritstone-ceo-exiting-to-us-acquirers-isnt-a-failure/","slug":"northern-gritstone-ceo-exiting-to-us-acquirers-isnt-a-failure","title":"Northern Gritstone CEO: Exiting to US acquirers isnât a failure","excerpt":"Duncan Johnson talks scaling the north of England tech ecosystem, Gritstoneâs new San Francisco office and why portfolio exits are coming","comments":{"count":"0","enabled":false},"publishTimestamp":1790226021000,"author":{"name":"Tom Nugent","url":"https://sifted.eu/author/tomnugentsifted-eu/"},"authors":[{"id":8850,"type":"wpuser","name":"Tom Nugent","twitter":"TJNugent92","bio":"Tom Nugent is Siftedâs managing editor. He covers robotics, chips and university spinouts. Follow him on \u003ca href=\"https://twitter.com/TJNugent92\"\u003e X \u003c/a\u003e and \u003ca href=\"https://www.linkedin.com/in/tnugent92/\"\u003e LinkedIn","niceName":"tomnugentsifted-eu","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","articleFormat":"standard","layout":"portrait","sector":{"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"category":{"name":"Interview","slug":"interview","url":"https://sifted.eu/categories/interview/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":4498,"name":"Interview","slug":"interview","url":"https://sifted.eu/categories/interview/"},{"id":41675,"name":"Features","slug":"features","url":"https://sifted.eu/categories/features/"}]},"sectors":{"primary":{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"all":[{"id":327,"name":"Deeptech","slug":"deeptech","url":"https://sifted.eu/sector/deeptech/"},{"id":346,"name":"University spinouts","slug":"university-spinouts","url":"https://sifted.eu/sector/university-spinouts/"},{"id":11529,"name":"Public and academic","slug":"public-and-academic","url":"https://sifted.eu/sector/public-and-academic/"},{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":null,"all":[]},"practices":{"primary":null,"all":[]},"countries":{"primary":{"id":70,"name":"United Kingdom","slug":"united-kingdom","url":"https://sifted.eu/countries/united-kingdom/"},"all":[{"id":70,"name":"United Kingdom","slug":"united-kingdom","url":"https://sifted.eu/countries/united-kingdom/"}]},"tags":{"primary":null,"all":[{"id":43539,"name":"Duncan Johnson","slug":"duncan-johnson","url":"https://sifted.eu/tag/duncan-johnson/"},{"id":42480,"name":"Northern Gritstone","slug":"northern-gritstone","url":"https://sifted.eu/tag/northern-gritstone/"},{"id":43540,"name":"UK Scaleup Fund","slug":"uk-scaleup-fund","url":"https://sifted.eu/tag/uk-scaleup-fund/"}]}},"tagList":[{"name":"Deeptech","link":"https://sifted.eu/sector/deeptech/"},{"name":"University spinouts","link":"https://sifted.eu/sector/university-spinouts/"},{"name":"Public and academic","link":"https://sifted.eu/sector/public-and-academic/"},{"name":"Venture capital","link":"https://sifted.eu/sector/venture-capital/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=1000,qual
80933ity=75,fit=cover,format=auto/wp-content/uploads/2026/09/23154022/1000-Duncan-3-1.jpg","full":"https://images.sifted.eu/cdn-cgi/image/width=1000,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23154022/1000-Duncan-3-1.jpg","fullWidth":1000,"fullHeight":667,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23154022/1000-Duncan-3-1.jpg","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23154022/1000-Duncan-3-1.jpg","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23154022/1000-Duncan-3-1.jpg","caption":"","placeholder":false,"alt":"Duncan Johnson, CEO of Northern Gritstone"},"cardImage":{"caption":"","alt":"Duncan Johnson, CEO of Northern Gritstone","base":"https://images.sifted.eu/cdn-cgi/image/width=1000,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23154022/1000-Duncan-3-1.jpg","fullWidth":1000,"fullHeight":667,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=1000,quality=75,fit=cover,format=auto/wp-content/uploads/2026/09/23154022/1000-Duncan-3-1.jpg","fullWidth":1000,"fullHeight":667,"placeholder":false}}],"latestArticlesCategoriesFilter":[{"id":"cFE71MJ6SFWjU9jr78s1cg","text":"Sponsored by"},{"id":"MkVQ7LN4S5S9lkJG2kx2lw","text":"In partnership with"},{"id":"Mfti4ibhS0O-i26txSPCPA","text":"Paid for and produced by"},{"id":"Xfhx1VXgQPiYflJG0MLzCQ","text":"Sifted Talks"}],"callout":{"id":"OWz57XxgSaaz4Aq_G-f1Tw","title":"Meet DACH \u0026 CEEâs top 100","description":"Explore the 100 fastest-growing startups scaling across DACH and Central \u0026 Eastern Europe.","buttonLabel":"See the ranking","buttonCta":"https://sifted.eu/intelligence/reports/sifted-100-dach-cee-2026","accent":"sifted","buttonVariant":"sifted","createdAt":"2026-04-16T14:42:28+01:00","updatedAt":"2026-09-09T09:43:25+01:00"},"proSectionTitle":"Sifted Pro","proSectionCtaText":"Find out more","proSectionCtaLink":"/sifted-pro","proCards":[{"headline":"Intelligence Briefings","description":"Access investment grade research on Europeâs most exciting tech sectors and high-growth startups.","cardImage":{"url":"https://www.datocms-assets.com/60124/1776343929-briefings-1.png","alt":null,"width":480,"height":240,"blurUpThumb":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAMCAYAAAB4MH11AAACDUlEQVR42k2T227cMAxERUq+bNC3/v/39bEJ2mZ3bUvsGclO1sBAlkzOcEi5xB5pB4/HM93vj/QAz21PrUVyL2me57Qut7SsYPGUc+pPrYk8YQM7+4NT5RgxGXgy81QiOA77QhOadQEliKi2xH6Qmtht7K+zWkecnsEXHe7tEhAyQQ5sJFEQBZxVDdhJrPXbwYBEFGum2NSddgck3IDXmoHn4/C87+bHoTrjdIIngznlKKWbcOVAnLetryZBqg5pe45G9RWxkIOfCoYiI1IgLyRlJSmlViSikd4qsRWBOJ2oCCe2SEjv6kp3bNSDZcWVl176Wb0EQJj6WIqImyi1rdOUqC4FOQ1SxRtAwDJnEzETxBl+x4FdM7DRJi8ETgjMz2dTRek4usB2jT/CK/3tc1QbKYrVWa0wv4X2rWBGpACXwA1IfSFgJQnEsu9NZwyrUmN9Zm+Z3mrwiKS9D6YJjhuaTo+Rhy9mSl4hZ7VcCJQtCS0krNyGG1WfApqBuwZWCkFHaAYbyXewyyEkEzOn6rxBfOD2GGta1CoJfAIJtPiaB1Ot9KI22lEfCP7h/R3B33z/GMTjug7kdN4yteUHLt7OVhUJ/DoFVvLe+Mi1jVneAa2IT/Yi/xg/0De53oeA9TvPYA/F8uU9nY8Enif+QSAwk5h0pXGku/SX9/36IV8fs1cn+itb/82vcz3/AW4k8Mu9XQ3WAAAAAElFTkSuQmCC"},"ctaButtonText":"Explore sector research","ctaButtonLink":"https://sifted.eu/pro/briefings"},{"headline":"Deals Tracker","description":"Track Europeâs dealmaking in real-time to identify investment opportunities and potential clients.","cardImage":{"url":"https://www.datocms-assets.com/60124/1776343990-deals.png","alt":null,"width":480,"height":240,"blurUpThumb":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAMCAMAAABP7o1HAAAC4lBMVEWvq/Svq/WwrPSwrPexrfmxrfqyrvqyrvuzrvWzr/uzr/y0sPO0sPS0sP21sfO1sfa2svi2svm2sv63s/W3s/q3s/u3s/+4tPq4tPu4tP+5tfq5tfy6tve7t/28uP+9ufK9ufO9uf29uf++uvK+uvW+uvq/u/jAvPPAvPfAvPjAvPnAvP/BvfjBvfnBvfnBvfrBvf3Bvf/Dv/XDv/vEwPzEwP/GwvjGwv7Gwv/Hw/7JxfHJxfHJxfLKxvTKxvvLx/LLx/XLx/bLx/fLx/fMyPfMyPjNyPjNyfjNyf3OyvTOyvnOyv/QzPvRzfbSzvzTz/3U0O/U0PnV0e/V0fHW0vLW0vTW0vXX0vDX0/TX0/XX0/XX0/vY1PbY1PbY1PbY1PfY1PfZ1PzZ1fLa1vfc2PTc2Pne2vrf2u/f2+7f2/Df2/ff2/vg3O/g3PHg3PLg3PPh3fPh3fPh3fTi3vTi3vXi3vnj3+7j3/Hj3/Xj3/rk4O7k4O/k4PXl4e7l4fDm4e/m4u7m4u7m4vDm4vPm4vfn4+/n4/Dn4/Hn4/Lo5O7o5O/o5O/o5PLo5PPo5PTo5Pnp5fDp5fDp5fHp5fLp5fPp5fTp5fXp5fnq5e/q5u7q5u/q5u/q5u/q5vDq5vDq5vDq5vDq5vHq5vLq5vLq5vTq5vXq5vbr5vDr5+/r5+/r5/Dr5/Dr5/Hr5/Hr5/Lr5/Lr5/Pr5/Tr5/Xr5/js5/Hs5/Hs6PDs6PDs6PHs6PHs6PLs6PPs6PPs6PPs6PTs6PTs6PTs6Pnt6PLt6fLt6fLt6fPt6fPt6fPt6fTt6fTt6fTt6fXt6fXt6fbu6fDu6fLu6fPu6vHu6vHu6vLu6vTu6vTu6vTu6vXv6vfv6/Tv6/Xv6/jw7PLw7PPw7PTw7PTw7PXx7Pfx7fPx
809337fXx7fny7vXy7vby7vby7vfy7vrz7vnz7/Xz7/Xz7/bz7/j08Pj08Pr18ff18fn28vf28vj38/gOfrPgAAAA9nRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIyMAACMjACMiIiMjACIhIiIAACAgHgAeHQAcLzAwMBwuLy8uLy8vLS4aLCsZKiooJx0nHB0cGRkbGxgZJhYZGhkaJRgVFhMSBAMDExECAgAAAAEAAAARAAAAEAAAAAAAAAABAAAAAAAAAAkACAAAAAAABwAAAAAAAAoUFBUWAAYHFRUABwAAABMTJAokBxYAEwAAAAARFBUjBSIWAAgRAAgOAAATIAAPFwkKDQkLABEKHRUhBAAZGwAACgAADxUDEAoAHxQAFAIOAAAADB0CAAwACgsbCRmjN+qLAAAA8ElEQVR42g2OP0/DMBDF784Xp22atgIJECA2xMTAt+D7jzDCQIegJm2MY9+d8fae9P78+C2FJcRkSEgOFQyAfMOOW25mcl7RITNoUQDPVPW1Bt/PIlVWX0TAsUdHfJPWIiEjomMHZgY1QrVyJ3OyOVtd8lRMpbBrCRt+n76Gy0YKcT0UMC3k1qtuxa/p5edzCIhNj4dTiRlg+/TY1SPnaPsxYt9fcSmX07nA/UO3arnye94j7bqNL5OhYCUoGlk162h/FUW2JR5/k4FcnjctW04xDhOe590E0zEt5iTy7Z6XnEIYkzTjdDhFiZpZ8ZuWf+gzgmshlcapAAAAAElFTkSuQmCC"},"ctaButtonText":"Track the latest deals","ctaButtonLink":"https://sifted.eu/deals-tracker"},{"headline":"Investor rankings","description":"Benchmark investor activity and identify active investors for relationship-building.","cardImage":{"url":"https://www.datocms-assets.com/60124/1776344024-ranmkings.png","alt":null,"width":480,"height":240,"blurUpThumb":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAMCAMAAABP7o1HAAACf1BMVEWxrfCxrfGyrvKyrvOzr/Czr/Ozr/S0sPO1sfG1sfO3s/C3s/G3s/K3s/O3s/S4tPO4tPS5tPG5tfO6tvO6tva7t/K8uPS8uPa+uvS+uvm/u/a/u/nBvfHBvfLBvfPCvffCvvPCvvTCvvvCvvzDv/LDv/nDv/zEv/PFwfPFwfTFwfnFwf/Hw/zIxPXIxPbIxPvIxP/Jxf3Kxv/Lxv/MyPjNyfPNyfTNyf/OyvPOyvTOyvXPy/PPy/rPy//QzPvRzfTSzfzSzvTTz/3U0PXU0P7V0fbX0v/X0/jY1PnY1P/a1fTa1vPa1vTa1vXa1vbb1/Tb1/vc2PTc2PXe2vbe2v3f2/Xf2/7f2//h3Pbh3fbh3fji3vji3vni3vvi3v/j3/Tj3/Xj3/bj3/jj3/vj3/zj3//k3/bk4PPk4Pbk4Pfk4Pnk4Prk4Pvl4fTl4fbl4fvl4fzm4fzm4vbm4vjm4vrm4vvn4vfn4/Xn4/nn4/vn4/zn4/3o5PXo5Pfo5Prp5fPp5fTp5fXp5frp5fvp5fzp5f7q5vTq5vbq5vjq5vrq5v7q5v/r5vjr5/Tr5/Xr5/br5/fr5/jr5/nr5/vr5//s5/rs6PXs6Pfs6Pjs6Pns6Prs6P7s6P/t6Pjt6fTt6fft6fnt6fzt6f/u6vXu6vbu6vju6vvu6v3u6v/v6vjv6/nv6/rv6//w6/vw7Pbw7P3w7P7w7P/x7Pnx7fjx7frx7fzx7f7x7f/y7vny7v/z7/jz7/vz7/3z7/707//08Pz08P308P/18fv18f/28vz28v328v/38/v38//49P/59f759f/69v/79v/79/779//8+P/9+f/++v//+////P8tiwk+AAAA1XRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGUGwwAAAA4UlEQVR42hXPWU5DMQyFYTtxpobhVoInYBNsgv3vASHUQWpvxVUSJzHu86dfR4c+J5eNG8+JMEQEiEKkQJSbRfNnnMAEmSqBbMjO0MOYbUs8KyBoAhLJaWLovZaWeu8DVWSItZ5sJEtf2+/xp/UGYjURBQz7ZUn0Md4ux+9rKxCsAnjKry9LdJQmOZ8PK6LHdJfnXc7JGjKgY3kPiNFrAs7F4JGQROaYW6nsB0eFGtA6bJZG72U9nZjJeKcgYffEKRriUW/H86ob0SHqc+eu7TF5GlzKebtVMQ3DfTwxHrD5f1E/cwRyA1rkAAAAAElFTkSuQmCC"},"ctaButtonText":"Find active investors","ctaButtonLink":"https://sifted.eu/rankings"},{"headline":"Market maps","description":" Understand sector landscapes, key players and competitive dynamics to uncover market opportunities \u0026 risks.","cardImage":{"url":"https://www.datocms-assets.com/60124/1776344084-maps.png","alt":null,"width":480,"height":240,"blurUpThumb":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAMCAMAAABP7o1HAAACN1BMVEXW0unX0+nX0+rY1OrZ1erZ1eva1uva1uzb1uvb1+zc2Ovc2O3d2ezd2e3e2e3e2uze2u3e2u7f2+zf2+3f2+7g3Ovg3Ozg3O/h3evh3ezh3e3h3e7i3fDi3uvi3vDj3+rj3+vj3+3j3+7j3+/j3/Dj3/Hk3+nk3+rk4Ojk4Onk4Ovk4O3k4PHl4erl4evl4ezl4e3l4e/l4fDl4fHl4fLm4enm4unm4urm4vDm4vPn4+zn4+/n4/Ho5Ovo5Ozo5O7o5PPo5PTp5PTp5evp5e/p5fTq5vLq5vPq5vXr5+7r5/Pr5/Ts6O3s6O7s6O/s6PDs6PHs6PLs6PXt6e3t6fTt6fbu6ffu6vHu6vbu6vfv6/Hv6/Tv6/bv6/fw7PXw7Pfx7e/x7fDx7fHx7fPx7fTx7fjy7u/y7vDy7vfz7/Tz7/jz7/nz7/r08Pf08Pn08Pr18Pr18fP18fj18fr28fL28vL28vP28vT28vX28vf28vr38/L38/r49Pb49Pr49Pv49P359P359fr59fv59f369vT69vX69vb69vr69v379/X79/b79/j79/n79/v79/z8+PX8+Pz8+P/9+PT9+fj9+fz9+f39+f/++vj++vz++v3++v//+/b/+/f/+/j/+/r/+/v/+/z/+/3/+/7/+////Pf//Pz//P3//P7//P///fb//fr//f3//f7//f///vf//vj//vn//v3//v7//v////j///n///r///v///z///3///7////QMF8fAAAAvXRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC+3qL3AAAAyUlEQVR42jXN3W7CMAwFYLukHbsoaBrS3v8p9kqgaRK0JPFvvBR1vvTn45O+AyLfrj+/93WB+Xi+XD6+PieEBBgADgiACHTEfSBhIKioiBZ/rYYRpxcAyOrKZs64B4Z/sEKuZdXRbAfADpTZVOrDvNVZhHWr2BKS87PmwuwHFm+mTO8dgKuJcllYmg/Lid0sb0BC1GqtxNYOQuz9Sh5nSKKmpUl/ZBGDapn5OY33twSqHmbUqwOakzdVW06QFCDcQzz6NGdXa24Sf48LrfT1SbRyAAAAAElFTkSuQmCC"},"ctaButtonText":"Browse market maps","ctaButtonLink":"https://sifted.eu/categories/market-map"}],"newsletterSectionHeading":"Newsletters","newsletterSubSectionHeading":"Sign up to Sifted Newsletters","newsletterCtaText":"Explore more newsletters","newsletterCtaUrl":"/newsletters","newslettersProSubscribeUrl":"/subscribe","siftedInsightsTitle":"Intelligence","featureCards":[{"id":"JT9NkhvFTqeXXIG7iIb7nQ","variant":"sifted","headline":"The rise of AI agents","description":"The age of agentic work has arrived. How should companies navigate it?","date":"2026-06-25","cardImage":{"url":"https://www.datocms-assets.com/60124/1781881381-the-rise-of-ai-agents.jpg","alt":null,"width":595,"height":841,"blurUpThumb":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHBwgHBgoICAgLDQoVDhgVDg0NGhsaDQ0VFx8ZGBYVFiEmHysjGh0oHRUiJDUlKC0vMjIyGSI4PTcwPCsxMi8BCgsLDg0OFxAQHC8cFhwvLy8vLy81Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL//AABEIABkAEQMBIgACEQEDEQH/xAAYAAACAwAAAAAAAAAAAAAAAAAEBQABBv/EACQQAAEDAgQHAAAAAAAAAAAAAAACBAUBAxJBUWERFCElNDVS/8QAGAEAAwEBAAAAAAAAAAAAAAAAAQQFAgD/xAAZEQACAwEAAAAAAAAAAAAAAAAAAQIREiH/2gAMAwEAAhEDEQA/AEsG2RZYjKSX2ZVKUyA4q9bWyGL263TDqxaFZSVCLbswWNWhYXzDXYsG0d0OhHjdLLqoMkndi7FqpRWRlonwQ5x65RO26HHFWKuNn6IBEM7YcI//2Q=="},"ctaButtonText":"Read the report","ctaButtonLink":"https://sifted.eu/intelligence/reports/the-rise-of-ai-agents-2026"},{"id":"Z0DppyntRTuZXCMcoeSefA","variant":"pro","headline":"Advanced materials","description":"Will AI unearth the next breakthrough material?","date":"2026-07-06","cardImage":{"url":"https://www.datocms-assets.com/60124/1721888609-advanced-materials-2024.png","alt":null,"width":870,"height":1305,"blurUpThumb":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHBwgHBgoICAgLCgoLDhgZFRUNFRsVDg4NFxYeGBYfIhUaHyslHR0oHRUiJDUlKC0vMjIyGSI4PTcwPCsxMi8BCgsLDg0OFQ0OHC8cFhwvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL//AABEIABgAEAMBIgACE
80933QEDEQH/xAAXAAADAQAAAAAAAAAAAAAAAAAABAUG/8QAGxAAAwEBAQEBAAAAAAAAAAAAAQIEAAMSFBH/xAAWAQEBAQAAAAAAAAAAAAAAAAADAgH/xAAaEQACAgMAAAAAAAAAAAAAAAAAQiEiAQIS/9oADAMBAAIRAxEAPwCHSIzQAc008g5Arl6PjoqBTXOaQc5195FM7kz3FpJ39NnTTNUv4pxjXtiobH//2Q=="},"ctaButtonText":"Explore our latest sector research","ctaButtonLink":"https://sifted.eu/pro/briefings/advanced-materials-2026"}],"insightsFeaturedArticles":[{"id":138073,"url":"https://sifted.eu/articles/the-50-fastest-growing-european-startup-teams-in-h1-2026/","slug":"the-50-fastest-growing-european-startup-teams-in-h1-2026","title":"The 50 fastest-growing European startup teams in H1 2026","excerpt":"Sifted ranks the top 50 fastest-growing startups by headcount growth across the first six months of 2026","comments":{"count":"0","enabled":false},"publishTimestamp":1783573200000,"author":{"name":"Jonathan Sinclair","url":"https://sifted.eu/author/jonathansinclair/"},"authors":[{"id":8734,"type":"wpuser","name":"Jonathan Sinclair","twitter":"","bio":"Jonathan Sinclair is head of research at Sifted. Find him on \u003ca href=\"https://www.linkedin.com/in/jonathan-sinclair-98a019137/\"\u003e LinkedIn \u003c/a\u003e","niceName":"jonathansinclair","image":false},{"id":9246,"type":"wpuser","name":"Oshin Narang","twitter":"","bio":"Oshin is Sifted's startup \u0026amp; VC analyst.","niceName":"oshin-narang","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","articleFormat":"standard","layout":"long_form","sector":{"name":"Startup life","slug":"startup-life","url":"https://sifted.eu/sector/startup-life/"},"category":{"name":"Fastest-growing startups","slug":"fastest-growing-startups","url":"https://sifted.eu/categories/fastest-growing-startups/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":41689,"name":"Fastest-growing startups","slug":"fastest-growing-startups","url":"https://sifted.eu/categories/fastest-growing-startups/"},{"id":41674,"name":"List","slug":"list","url":"https://sifted.eu/categories/list/"}]},"sectors":{"primary":{"id":11531,"name":"Startup life","slug":"startup-life","url":"https://sifted.eu/sector/startup-life/"},"all":[{"id":11531,"name":"Startup life","slug":"startup-life","url":"https://sifted.eu/sector/startup-life/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":null,"all":[]},"practices":{"primary":null,"all":[]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":42547,"name":"Actithera","slug":"actithera","url":"https://sifted.eu/tag/actithera/"},{"id":42370,"name":"Alta Ares","slug":"alta-ares","url":"https://sifted.eu/tag/alta-ares/"},{"id":42536,"name":"askLio","slug":"asklio","url":"https://sifted.eu/tag/asklio/"},{"id":42560,"name":"Bankflip","slug":"bankflip","url":"https://sifted.eu/tag/bankflip/"},{"id":42562,"name":"Beglaubigt.de","slug":"beglaubigt-de","url":"https://sifted.eu/tag/beglaubigt-de/"},{"id":42535,"name":"Biorce","slug":"biorce","url":"https://sifted.eu/tag/biorce/"},{"id":42559,"name":"CertHub","slug":"certhub","url":"https://sifted.eu/tag/certhub/"},{"id":42563,"name":"Cloover","slug":"cloover","url":"https://sifted.eu/tag/cloover/"},{"id":42463,"name":"Conduct","slug":"conduct","url":"https://sifted.eu/tag/conduct/"},{"id":42532,"name":"Conveo","slug":"conveo","url":"https://sifted.eu/tag/conveo/"},{"id":42539,"name":"Covecta","slug":"covecta","url":"https://sifted.eu/tag/covecta/"},{"id":42004,"name":"CuspAI","slug":"cuspai","url":"https://sifted.eu/tag/cuspai/"},{"id":42216,"name":"Driveblocks","slug":"driveblocks","url":"https://sifted.eu/tag/driveblocks/"},{"id":42138,"name":"Flexion Robotics","slug":"flexion-robotics","url":"https://sifted.eu/tag/flexion-robotics/"},{"id":42533,"name":"Fonio","slug":"fonio","url":"https://sifted.eu/tag/fonio/"},{"id":42529,"name":"H1 2026 coverage","slug":"h1-2026","url":"https://sifted.eu/tag/h1-2026/"},{"id":41865,"name":"Harmattan AI","slug":"harmattan-ai","url":"https://sifted.eu/tag/harmattan-ai/"},{"id":42552,"name":"HeyDiga","slug":"heydiga","url":"https://sifted.eu/tag/heydiga/"},{"id":42201,"name":"Hypersonica","slug":"hypersonica","url":"https://sifted.eu/tag/hypers
80933onica/"},{"id":42554,"name":"Insutex","slug":"insutex","url":"https://sifted.eu/tag/insutex/"},{"id":41917,"name":"Isembard","slug":"isembard","url":"https://sifted.eu/tag/isembard/"},{"id":42558,"name":"Kreios Space","slug":"kreios-space","url":"https://sifted.eu/tag/kreios-space/"},{"id":42566,"name":"Laborai","slug":"laborai","url":"https://sifted.eu/tag/laborai/"},{"id":41743,"name":"Legora","slug":"legora","url":"https://sifted.eu/tag/legora/"},{"id":42256,"name":"Lexroom","slug":"lexroom","url":"https://sifted.eu/tag/lexroom/"},{"id":42553,"name":"Lua AI","slug":"lua-ai","url":"https://sifted.eu/tag/lua-ai/"},{"id":42534,"name":"Lumoo","slug":"lumoo","url":"https://sifted.eu/tag/lumoo/"},{"id":42561,"name":"Maurice \u0026amp; Nora","slug":"maurice-nora","url":"https://sifted.eu/tag/maurice-nora/"},{"id":41281,"name":"Mistral","slug":"mistral","url":"https://sifted.eu/tag/mistral/"},{"id":42543,"name":"Move AI","slug":"move-ai","url":"https://sifted.eu/tag/move-ai/"},{"id":42545,"name":"NestAI","slug":"nestai","url":"https://sifted.eu/tag/nestai/"},{"id":42541,"name":"Neutonic","slug":"neutonic","url":"https://sifted.eu/tag/neutonic/"},{"id":42555,"name":"Nordic Air Defence","slug":"nordic-air-defence","url":"https://sifted.eu/tag/nordic-air-defence/"},{"id":41899,"name":"Nscale","slug":"nscale","url":"https://sifted.eu/tag/nscale/"},{"id":42551,"name":"Olix","slug":"olix","url":"https://sifted.eu/tag/olix/"},{"id":42544,"name":"PeecAI","slug":"peecai","url":"https://sifted.eu/tag/peecai/"},{"id":42567,"name":"Rabbitt AI","slug":"rabbitt-ai","url":"https://sifted.eu/tag/rabbitt-ai/"},{"id":42549,"name":"Risiq","slug":"risiq","url":"https://sifted.eu/tag/risiq/"},{"id":42564,"name":"Runware","slug":"runware","url":"https://sifted.eu/tag/runware/"},{"id":42550,"name":"Six Robotics","slug":"six-robotics","url":"https://sifted.eu/tag/six-robotics/"},{"id":42542,"name":"Solidroad","slug":"solidroad","url":"https://sifted.eu/tag/solidroad/"},{"id":42258,"name":"Solve Intelligence","slug":"solve-intelligence","url":"https://sifted.eu/tag/solve-intelligence/"},{"id":42540,"name":"Spektr","slug":"spektr","url":"https://sifted.eu/tag/spektr/"},{"id":42556,"name":"Stored","slug":"stored","url":"https://sifted.eu/tag/stored/"},{"id":42565,"name":"SWARM Biotactics","slug":"swarm-biotactics","url":"https://sifted.eu/tag/swarm-biotactics/"},{"id":42548,"name":"Tequipy","slug":"tequipy","url":"https://sifted.eu/tag/tequipy/"},{"id":42537,"name":"Throxy","slug":"throxy","url":"https://sifted.eu/tag/throxy/"},{"id":42557,"name":"Tribbu","slug":"tribbu","url":"https://sifted.eu/tag/tribbu/"},{"id":41923,"name":"Tytan Technologies","slug":"tytan-technologies","url":"https://sifted.eu/tag/tytan-technologies/"},{"id":42538,"name":"Viktor","slug":"viktor","url":"https://sifted.eu/tag/viktor/"},{"id":42546,"name":"Vortex IQ","slug":"vortex-iq","url":"https://sifted.eu/tag/vortex-iq/"}]}},"tagList":[{"name":"Startup life","link":"https://sifted.eu/sector/startup-life/"},{"name":"Actithera","link":"https://sifted.eu/tag/actithera/"},{"name":"Alta Ares","link":"https://sifted.eu/tag/alta-ares/"},{"name":"askLio","link":"https://sifted.eu/tag/asklio/"}],"image":{"base":"https://content.sifted.eu/wp-content/uploads/2026/07/09000328/Conveo.webp","full":"https://content.sifted.eu/wp-content/uploads/2026/07/09000328/Conveo.webp","fullWidth":1200,"fullHeight":800,"header-image":"https://content.sifted.eu/wp-content/uploads/2026/07/09000328/Conveo-530x355.webp","header-image-labeled":"https://content.sifted.eu/wp-content/uploads/2026/07/09000328/Conveo-530x355.webp","list-image":"https://content.sifted.eu/wp-content/uploads/2026/07/09000328/Conveo-240x130.webp","caption":"Conveo team offsite (February 2026)","placeholder":false,"alt":"Conveo team offsite (February 2026)"},"cardImage":{"caption":"Conveo team offsite (February 2026)","alt":"Conveo team offsite (February 2026)","base":"https://content.sifted.eu/wp-content/uploads/2026/07/09000328/Conveo.webp","fullWidth":1200,"fullHeight":800,"placeholder":false},"longFormMobileImage":{"caption":"Conveo team offsite (February 2026)","base":"https://content.sifted.eu/wp-content/uploads/2026/07/09000328/Conveo.webp","fullWidth":1200,"fullHeight":800,"placeholder":false}},{"id":138075,"url":"https://sifted.eu/articles/europes-biggest-new-funds-in-h1-2026/","slug":"europes-biggest-new-funds-in-h1-2026","title":"Europeâs biggest new funds in H1 2026","excerpt":"Europeâs biggest funds turn to
80933scaleups, AI and climate in a tougher fundraising landscape","comments":{"count":"0","enabled":false},"publishTimestamp":1783573256000,"author":{"name":"Ruggero Di Spigna","url":"https://sifted.eu/author/ruggero/"},"authors":[{"id":8969,"type":"wpuser","name":"Ruggero Di Spigna","twitter":"","bio":"Ruggero Di Spigna is a Senior Insights \u0026amp; Product Associate at Sifted. Find him on \u003ca href=\"https://www.linkedin.com/in/ruggero-di-spigna-4882b6115\"\u003e LinkedIn \u003c/a\u003e","niceName":"ruggero","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","articleFormat":"standard","layout":"short_form","sector":{"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"category":{"name":"List","slug":"list","url":"https://sifted.eu/categories/list/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":41674,"name":"List","slug":"list","url":"https://sifted.eu/categories/list/"}]},"sectors":{"primary":{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"},"all":[{"id":11532,"name":"Venture capital","slug":"venture-capital","url":"https://sifted.eu/sector/venture-capital/"}]},"themes":{"primary":{"id":1710,"name":"Funding","slug":"funding","url":"https://sifted.eu/themes/funding/"},"all":[{"id":1710,"name":"Funding","slug":"funding","url":"https://sifted.eu/themes/funding/"}]},"topics":{"primary":{"id":1950,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/topic/venture-capital/"},"all":[{"id":1950,"name":"Venture Capital","slug":"venture-capital","url":"https://sifted.eu/topic/venture-capital/"}]},"practices":{"primary":{"id":311,"name":"Funding","slug":"funding","url":"https://sifted.eu/practice/funding/"},"all":[{"id":311,"name":"Funding","slug":"funding","url":"https://sifted.eu/practice/funding/"}]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":42529,"name":"H1 2026 coverage","slug":"h1-2026","url":"https://sifted.eu/tag/h1-2026/"}]}},"tagList":[{"name":"Venture capital","link":"https://sifted.eu/sector/venture-capital/"},{"name":"H1 2026 coverage","link":"https://sifted.eu/tag/h1-2026/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/02/04165011/KEMBARA-scaled.jpg","full":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/02/04165011/KEMBARA-scaled.jpg","fullWidth":2048,"fullHeight":1541,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/02/04165011/KEMBARA-scaled.jpg","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/02/04165011/KEMBARA-scaled.jpg","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/02/04165011/KEMBARA-scaled.jpg","caption":"From left to right: Javier Santiso, Siraj Khaliq, Robert Trezona, Yann de Vries and Pierre Festal","placeholder":false,"alt":"Kembara"},"cardImage":{"caption":"From left to right: Javier Santiso, Siraj Khaliq, Robert Trezona, Yann de Vries and Pierre Festal","alt":"Kembara","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/02/04165011/KEMBARA-scaled.jpg","fullWidth":2048,"fullHeight":1541,"placeholder":false},"longFormMobileImage":{"caption":"From left to right: Javier Santiso, Siraj Khaliq, Robert Trezona, Yann de Vries and Pierre Festal","base":"https://images.sifted.eu/cdn-cgi/image/width=2048,quality=75,fit=cover,format=auto/wp-content/uploads/2026/02/04165011/KEMBARA-scaled.jpg","fullWidth":2048,"fullHeight":1541,"placeholder":false}},{"id":138087,"url":"https://sifted.eu/articles/8-stealth-founders-using-ai-to-take-on-the-industries-they-used-to-work-in/","slug":"8-stealth-founders-using-ai-to-take-on-the-industries-they-u
80933sed-to-work-in","title":"8 stealth founders using AI to take on the industries they used to work in","excerpt":"They include a former Amazon supply chain operator and an ex-McKinsey consultant taking on the space sector","comments":{"count":"0","enabled":false},"publishTimestamp":1783573214000,"author":{"name":"Oshin Narang","url":"https://sifted.eu/author/oshin-narang/"},"authors":[{"id":9246,"type":"wpuser","name":"Oshin Narang","twitter":"","bio":"Oshin is Sifted's startup \u0026amp; VC analyst.","niceName":"oshin-narang","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","articleFormat":"standard","layout":"short_form","sector":{"name":"Startup life","slug":"startup-life","url":"https://sifted.eu/sector/startup-life/"},"category":{"name":"Stealth founders","slug":"stealth-founders","url":"https://sifted.eu/categories/stealth-founders/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":42531,"name":"Stealth founders","slug":"stealth-founders","url":"https://sifted.eu/categories/stealth-founders/"},{"id":41674,"name":"List","slug":"list","url":"https://sifted.eu/categories/list/"}]},"sectors":{"primary":{"id":11531,"name":"Startup life","slug":"startup-life","url":"https://sifted.eu/sector/startup-life/"},"all":[{"id":11531,"name":"Startup life","slug":"startup-life","url":"https://sifted.eu/sector/startup-life/"}]},"themes":{"primary":null,"all":[]},"topics":{"primary":{"id":1928,"name":"Entrepreneurship","slug":"entrepreneurship","url":"https://sifted.eu/topic/entrepreneurship/"},"all":[{"id":1928,"name":"Entrepreneurship","slug":"entrepreneurship","url":"https://sifted.eu/topic/entrepreneurship/"}]},"practices":{"primary":null,"all":[]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[]}},"tagList":[{"name":"Startup life","link":"https://sifted.eu/sector/startup-life/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=1200,quality=75,fit=cover,format=auto/wp-content/uploads/2026/07/08184116/stealth.jpeg","full":"https://images.sifted.eu/cdn-cgi/image/width=1200,quality=75,fit=cover,format=auto/wp-content/uploads/2026/07/08184116/stealth.jpeg","fullWidth":1200,"fullHeight":1200,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/07/08184116/stealth.jpeg","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/07/08184116/stealth.jpeg","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/07/08184116/stealth.jpeg","caption":"","placeholder":false,"alt":""},"cardImage":{"caption":"","alt":"","base":"https://images.sifted.eu/cdn-cgi/image/width=1200,quality=75,fit=cover,format=auto/wp-content/uploads/2026/07/08184116/stealth.jpeg","fullWidth":1200,"fullHeight":1200,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=1200,quality=75,fit=cover,format=auto/wp-content/uploads/2026/07/08184116/stealth.jpeg","fullWidth":1200,"fullHeight":1200,"placeholder":false}},{"id":138026,"url":"https://sifted.eu/articles/the-25-companies-most-watched-insiders-h1-2026/","slug":"the-25-companies-most-watched-insiders-h1-2026","title":"The 25 companies Europeâs startup insiders watched most closely in H1","excerpt":"Sifted Pro readership data reveals which European startups and scaleups investors, corporates and advisers were monitoring most actively in H1","comments":{"count":"0","enabled":false},"publishTimestamp":1783486834000,"author":{"name":"Jonathan Sinclair","url":"https://sifted.eu/author/jonathansinclair/"},"authors":[{"id":8734,"type":"wpuser","name":"Jonathan Sinclair","twitter":"","bio":"Jonathan Sinclair is head of research at Sifted. Find him on \u003ca href=\"https://www.linkedin.com/in/jonathan-sinclair-98a019137/\"\u003e LinkedIn \u003c/a\u003e","niceName":"jonathansinclair","image":false}],"isSponsored":false,"sponsorshipType":null,"isMemberContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","articleFormat":"standard","layout":"long_form","sector":null,"category":{"name":"Sifted data","slug":"sifted-data","url":"https://sifted.eu/categories/sifted-data/"},"taxonomies":{"categories":{"primary":null,"all":[{"id":41693,"name":"Sifted data","slug":"sifted-data","url":"https://sifted.eu/categories/sifted-data/"},{"id":41676,"name":"Data","slug":"data","url":"https://sifted.eu/categories/data/"}]},"sectors":{"primary":null,"all":[]},"themes":{"primary":null,"all":[]},"topics":{"primary":null,"all":[]},"practices":{"primary":null,"all":[]},"countries":{"primary":null,"all":[]},"tags":{"primary":null,"all":[{"id":42375,"name":"Aikido Security","slug":"aikido-security","url":"https://sifted.eu/tag/aikido-security/"},{"id":42095,"name":"Alan","slug":"alan","url":"https://sifted.eu/tag/alan/"}
80933,{"id":41877,"name":"allica bank","slug":"allica-bank","url":"https://sifted.eu/tag/allica-bank/"},{"id":42050,"name":"AMI Labs","slug":"ami-labs","url":"https://sifted.eu/tag/ami-labs/"},{"id":41841,"name":"Cleo","slug":"cleo","url":"https://sifted.eu/tag/cleo/"},{"id":42526,"name":"Cognism","slug":"cognism","url":"https://sifted.eu/tag/cognism/"},{"id":42004,"name":"CuspAI","slug":"cuspai","url":"https://sifted.eu/tag/cuspai/"},{"id":42293,"name":"Dwelly","slug":"dwelly","url":"https://sifted.eu/tag/dwelly/"},{"id":41766,"name":"ElevenLabs","slug":"elevenlabs","url":"https://sifted.eu/tag/elevenlabs/"},{"id":42056,"name":"Faculty","slug":"faculty","url":"https://sifted.eu/tag/faculty/"},{"id":42249,"name":"Fractile","slug":"fractile","url":"https://sifted.eu/tag/fractile/"},{"id":42529,"name":"H1 2026 coverage","slug":"h1-2026","url":"https://sifted.eu/tag/h1-2026/"},{"id":42445,"name":"Ineffable Intelligence","slug":"ineffable-intelligence","url":"https://sifted.eu/tag/ineffable-intelligence/"},{"id":42122,"name":"IQM Quantum Computers","slug":"iqm-quantum-computers","url":"https://sifted.eu/tag/iqm-quantum-computers/"},{"id":41001,"name":"Klarna","slug":"klarna","url":"https://sifted.eu/tag/klarna/"},{"id":41743,"name":"Legora","slug":"legora","url":"https://sifted.eu/tag/legora/"},{"id":41581,"name":"Lovable","slug":"lovable","url":"https://sifted.eu/tag/lovable/"},{"id":41281,"name":"Mistral","slug":"mistral","url":"https://sifted.eu/tag/mistral/"},{"id":41899,"name":"Nscale","slug":"nscale","url":"https://sifted.eu/tag/nscale/"},{"id":42072,"name":"Peec AI","slug":"peec-ai","url":"https://sifted.eu/tag/peec-ai/"},{"id":42068,"name":"Photoncycle","slug":"photoncycle","url":"https://sifted.eu/tag/photoncycle/"},{"id":42518,"name":"Recursive Superintelligence","slug":"recursive-superintelligence","url":"https://sifted.eu/tag/recursive-superintelligence/"},{"id":40969,"name":"Revolut","slug":"revolut","url":"https://sifted.eu/tag/revolut/"},{"id":41828,"name":"Stark","slug":"stark","url":"https://sifted.eu/tag/stark/"},{"id":41627,"name":"Synthesia","slug":"synthesia","url":"https://sifted.eu/tag/synthesia/"},{"id":42171,"name":"Tandem Health","slug":"tandem-health","url":"https://sifted.eu/tag/tandem-health/"}]}},"tagList":[{"name":"Aikido Security","link":"https://sifted.eu/tag/aikido-security/"},{"name":"Alan","link":"https://sifted.eu/tag/alan/"},{"name":"allica bank","link":"https://sifted.eu/tag/allica-bank/"},{"name":"AMI Labs","link":"https://sifted.eu/tag/ami-labs/"}],"image":{"base":"https://images.sifted.eu/cdn-cgi/image/width=3200,quality=75,fit=cover,format=auto/wp-content/uploads/2026/05/28111139/mistral-infra.png","full":"https://images.sifted.eu/cdn-cgi/image/width=3200,quality=75,fit=cover,format=auto/wp-content/uploads/2026/05/28111139/mistral-infra.png","fullWidth":3200,"fullHeight":1050,"header-image":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/05/28111139/mistral-infra.png","header-image-labeled":"https://images.sifted.eu/cdn-cgi/image/width=530,quality=75,fit=cover,format=auto/wp-content/uploads/2026/05/28111139/mistral-infra.png","list-image":"https://images.sifted.eu/cdn-cgi/image/width=240,quality=75,fit=cover,format=auto/wp-content/uploads/2026/05/28111139/mistral-infra.png","caption":"","placeholder":false,"alt":"Mistral's cofounders"},"cardImage":{"caption":"","alt":"Mistral's cofounders","base":"https://images.sifted.eu/cdn-cgi/image/width=3200,quality=75,fit=cover,format=auto/wp-content/uploads/2026/05/28111139/mistral-infra.png","fullWidth":3200,"fullHeight":1050,"placeholder":false},"longFormMobileImage":{"caption":"","base":"https://images.sifted.eu/cdn-cgi/image/width=3200,quality=75,fit=cover,format=auto/wp-content/uploads/2026/05/28111139/mistral-infra.png","fullWidth":3200,"fullHeight":1050,"placeholder":false}}],"latestHeader":{"title":"Latest","id":"B8-cIYd7RO-BqkgJwyZgbQ","cta":null},"latestItems":[{"title":"Test","button":{"id":"OWRRk4GvTPuR8j7fndIA5w","text":"Test","url":"https://sifted.eu/latest"},"description":"Test","id":"Q2-uLnxlTCO3xbzhRYuEQw","image":{"alt":null,"blurUpThumb":null,"title":null,"url":"https://www.datocms-assets.com/60124/1776344548-youtube-logo.svg"}},{"title":"Test","button":{"id":"HQDHPNPDSNmWVYJmqTny-Q","text":"Test","url":"https://sifted.eu/latest"},"description":"Test","id":"ON5_fNBARBiTrH8nKsUnIA","image":{"alt":null,"blurUpThumb":null,"title":null,"url":"https://www.datocms-assets.com/60124/1776344548-youtube-logo.svg"}},{"title":"Test","button":{"id":"R23qYdb0RlK_L1eZ3PSlAw","text":"Test","url":"https://sifted.eu/latest"},"description":"Test","id":"U5DRm70HRgmKw1p2iHPkiw","image":{"alt":null,"blurUpThumb":null,"title":null,"url":"https://www.datocms-assets.com/60124/1776344548-youtube-logo.svg"}},{"title":"Test","button":{"id":"dlW8Afl4QeSzaaP5GgJfSA","text":"Test","url":"https://sifted.eu/latest"},"description":"Test","id":"N78JRLA4Sg6SVcGRwHlmJg","image":{"alt":null,"blurUpThumb":null,"title":null,"url":"https://www.datocms-assets.com/60124/1776344548-youtube-logo.svg"}},{"title":"Test","button":{"id":"ar4w3IlsTKep4ajkdJrPkg","text":"Test","url":"https://sifted.eu/latest"},"description":"Test","id":"GlTjPIgFRkK7pN6A5S19ag","image":{"alt":null,"blurUpThumb":null,"title":null,"url":"https://www.datocms-assets.com/60124/1776344548-youtube-logo.svg"}}],"topBannerSignInHeading":"Don't miss what Europe's startup insiders are reading","topB
80933annerSignInSubheading":"Join 120,000+ founders, investors, and operators who rely on Sifted to stay sharp.","topBannerSignInPrimaryButtonLabel":"Register for free","topBannerSignInPrimaryButtonUrl":"/members/login","topBannerSignInSecondaryButtonLabel":"Sign in","topBannerSignInSecondaryButtonUrl":"/members/login","topBannerSignInDaysUntilRedisplay":7,"topBannerProHeading":"Get intelligence you can act on","topBannerProSubheading":"Unlock verified data, expert insight and in-depth reporting on Europeâs startup ecosystem when you subscribe to Sifted Pro.","topBannerProPrimaryButtonLabel":"Explore Pro","topBannerProPrimaryButtonUrl":"https://sifted.eu/sifted-pro","topBannerProSecondaryButtonLabel":"Request a free trial","topBannerProSecondaryButtonUrl":"/request-trial","topBannerProDaysUntilRedisplay":7,"featuredBriefingsList":[{"id":"Im5wm4ZuQWO5VdBwYA47RA","url":"/pro/briefings/fintech-as-a-service","title":"Fintech-as-a-service (2026)","subtitle":"FaaS and furious: Europeâs big fintech software pivot","slug":"fintech-as-a-service","publishTimestamp":1789948800000,"isMemberContent":false,"isRegisteredContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","marketLabel":"Fintech","dato":true,"briefingImage":{"id":"67565090","height":1305,"width":870,"blurUpThumb":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHBwgHBgoICAgLDxUQFA8NDRUNDiINDg4NFxMZGBYfFhUmHysjGh0oKRUWJDUlKC0vMjIyGSI4PTcwPCsxMi8BCgsLDg0OFgUQHC8oFhwvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL//AABEIABgAEAMBIgACEQEDEQH/xAAZAAACAwEAAAAAAAAAAAAAAAABBAMFBgD/xAAfEAABBAICAwAAAAAAAAAAAAAFAAECEQMEFTEGEhP/xAAVAQEBAAAAAAAAAAAAAAAAAAAEA//EABgRAAIDAAAAAAAAAAAAAAAAAAABAhEx/9oADAMBAAIRAxEAPwCzLmNmJW6UIYts5TXSXOym288qS3jebLy7v6oCjTEuVo0hAPPPtPbIBQ3wIu9ILlR6Rjh//9k=","alt":"Fintech in 2023 briefing cover image","url":"https://www.datocms-assets.com/60124/1692887606-fintech-in-2023.png"}},{"id":"A3HABnRfQiegKzv-fKl1cg","url":"/pro/briefings/medtech-2026","title":"Medtech (2026)","subtitle":"Can these zany devices go all the way?","slug":"medtech-2026","publishTimestamp":1789344000000,"isMemberContent":false,"isRegisteredContent":false,"isProContent":true,"isNonFree":true,"contentSubscriptionLevel":"is_pro","marketLabel":"Healthtech","dato":true,"briefingImage":{"id":"67565098","height":1305,"width":870,"blurUpThumb":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHBwgHBhUIEAgNDQ0OGg0NDQ0KDRIJFhEYFx8ZGBYVFhUaHysjGh0oHRUWJDUlKC0vMjIyGSI4PTcwPCsxMi8BCgsLBQoOFQ4NFS8cFh0vLy8vLy8vLy8vLy8vNS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL//AABEIABgAEAMBIgACEQEDEQH/xAAZAAABBQAAAAAAAAAAAAAAAAACAAEEBQb/xAAcEAACAgIDAAAAAAAAAAAAAAAAAwIEASQFERL/xAAWAQADAAAAAAAAAAAAAAAAAAAAAwT/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwDKIRmVYZiZRQWVJWsBZj0ocgRK3I5hXAbf9rEIA//Z","alt":"Medtech briefing cover image","url":"https://www.datocms-assets.com/60124/1692887768-medtech.png"}}]}}},"sitewideOption":{"advertisementHeading":"Advertisement","footerCopyright":"© $CURRENT_YEAR Sifted EU Ltd. All Rights Reserved.","footerExtraList":[{"id":"188578871","label":"Newsletters","url":"/newsletters","description":""},{"id":"188578872","label":"Rankings","url":"/rankings","description":""},{"id":"188578873","label":"Reports","url":"/intelligence/reports","description":""},{"id":"aK7XNmU2QFyQt-1Tl4B1xg","label":"Leaderboards","url":"/leaderboards","description":""},{"id":"Fp0ynzISSRabEVk77g39_w","label":"Deals Tracker","url":"/deals-tracker","description":""},{"id":"Zgn7vkAQSrK0SSmOD4THNQ","label":"Investor Tracker","url":"/investor-tracker","description":""},{"id":"TSIKeJKdQ_yS5ssfCD_T6w","label":"Market Tracker","url":"/market-tracker","description":""},{"id":"LBpvEGCtTG6ATDH4X1wIrw","label":"M\u0026A Tracker ","url":"/ma-tracker","description":""}],"footerPrimaryList":[{"id":"174018092","label":"About","url":"/about","description":""},{"id":"174018094","label":"Careers","url":"/careers","description":""},{"id":"174018093","label":"Advertising","url":"/advertising","description":""},{"id":"aIlDE8VHRMmXD4iMAVtVqQ","label":"Cookie Policy","url":"/cookie-policy","description":""}
80933,{"id":"188578876","label":"Privacy Policy","url":"/privacy-policy","description":""},{"id":"188578877","label":"AI Code of Conduct","url":"/ai-code-of-conduct","description":""},{"id":"188578878","label":"Terms of Use","url":"/terms-of-use","description":""},{"id":"a-CfTjOrQdGhxdOxS7cVpg","label":"Contact Us","url":"/contact-us","description":""}],"footerSecondaryList":[{"id":"188578879","label":"Subscribe","url":"/subscribe","description":""},{"id":"188578880","label":"Briefings","url":"/pro/briefings/about","description":""},{"id":"Bsfy68bORcy0WnqQTH_-iA","label":"Deals Newsletter","url":"https://info.sifted.eu/pro-deals-newsletter","description":""}],"footerCommunityList":[{"id":"188578868","label":"Talks","url":"/talks","description":""},{"id":"188578869","label":"Podcasts","url":"/podcasts","description":""},{"id":"188578870","label":"Sifted Summit","url":"https://summit.sifted.eu/","description":""}],"footerExtraListColumnLabel":"Products","footerPrimaryListColumnLabel":"Company","footerSecondaryListColumnLabel":"Sifted Pro","footerCommunityListColumnLabel":"Community","footerSocials":[{"id":"174018103","image":{"alt":"LinkedIn Logo","id":"64620756","height":24,"title":"LinkedIn Logo","width":24,"url":"https://www.datocms-assets.com/60124/1689076682-linkedin.svg","blurUpThumb":null},"label":"LinkedIn","url":"https://www.linkedin.com/company/siftedeu/"},{"id":"Zmgb7LIhRGqHtsJTihx-_g","image":{"alt":null,"id":"EJm5bpctRUi1Rbu6NlJm6g","height":24,"title":null,"width":24,"url":"https://www.datocms-assets.com/60124/1781185911-whatsapp.svg","blurUpThumb":null},"label":"Whatsapp","url":"https://whatsapp.com/channel/0029VbD54jc4SpkF4lq81j41"},{"id":"aoD-2YcBTXCFTJndKx-YoQ","image":{"alt":null,"id":"Yged-0osSUWmatV0Tc67JA","height":24,"title":null,"width":24,"url":"https://www.datocms-assets.com/60124/1729688606-instagram.svg","blurUpThumb":null},"label":"Instagram","url":"https://www.instagram.com/siftedeu/"},{"id":"174018104","image":{"alt":"Facebook Logo","id":"64622056","height":24,"title":"Facebook Logo","width":24,"url":"https://www.datocms-assets.com/60124/1689076874-facebook.svg","blurUpThumb":null},"label":"Facebook","url":"https://www.facebook.com/siftedeu"},{"id":"174018105","image":{"alt":"RSS Feed Logo","id":"64622058","height":24,"title":"RSS Feed Logo","width":24,"url":"https://www.datocms-assets.com/60124/1689076939-rss-feed.svg","blurUpThumb":null},"label":"Feed","url":"https://sifted.eu/feed/?post_type=article"}],"logInUrl":"/members/login","logInLabel":"Log in","logoutLabel":"Log out","navbarPrimaryLinks":[{"description":"","id":"ApUbehw4SmqGbebSYHDELw","label":"Pro","url":"","list":[{"id":"ND237KXnTBqI3eSgWdjU8A","label":"Articles","url":"/articles/pro","description":"Exclusive journalism, analysis, interviews and lists â exclusive to Pro subscribers."},{"id":"YuQEIsLkSlanyjaKM9Dt8w","label":"Briefings","url":"/pro/briefings ","description":"Investment-grade research on emerging sectors, powered by proprietary Sifted research. "},{"id":"VgVaevhRSBKNtjDN6UWxVA","label":"Market maps","url":"https://sifted.eu/categories/market-map","description":"Discover market maps, scouted and structured by Sifted, mapping key players across each sector."},{"id":"SpjDHGCxTm-XpKgJM_uI-A","label":"Startups to watch","url":"https://sifted.eu/categories/investor-survey","description":"Discover which startups investors are actively monitoring."},{"id":"PhAam2MRQEi5dWgs7h9e-A","label":"Deals Tracker","url":"/deals-tracker","description":"Track the latest funding rounds across the European tech ecosystem."},{"id":"SXH12LVuSWSWO9k5L8DpGA","label":"Investor Tracker","url":"/investor-tracker","description":"Monitor investor activity since 2024 in real time across Europe's startup ecosystem."},{"id":"MBOe4avSRj2frjvlBS79bw","label":"Market Tracker","url":"/market-tracker","description":"Explore where capital is flowing across European tech with Siftedâs interactive data dashboard."},{"id":"eXVZOmalR-q1Av_oBS7Egw","label":"M\u0026A Tracker","url":"/ma-tracker","description":"Track startup acquisitions and acquirers across European tech."},{"id":"dytp-7YzQ4mmeMBuquJHWw","label":"Investor rankings","url":"/rankings","de
80933scription":"Europe's most active startup backers, ranked."},{"id":"HU7PlUsyTzmxSb9v024g1w","label":"Sifted View","url":"/categories/sifted-view ","description":"A weekly column from our cofounder and editorial director, John Thornhill."},{"id":"flef7OryTW-I8YV8UM8sPQ","label":"Company search","url":"/tag/company-coverage","description":"Browse Sifted's article coverage of Europe's leading startups and scaleups."},{"id":"Im4KiRwcRlWCh4PWgI8gUw","label":"Subscribe","url":"/sifted-pro ","description":"Find your next big opportunity in European tech."}]},{"description":"","id":"PNh2Zpc8TJuSABS0LYQS2g","label":"Latest","url":"","list":[{"id":"XQuj1kgMQt-hhj0Y5Y6xsg","label":"News","url":"/latest ","description":""},{"id":"FSs6Wiv8Ti6BCZiqf4ORPA","label":"Analysis","url":"/categories/analysis","description":""},{"id":"VbFPeqomQryfClTklupv8g","label":"Interviews","url":"/categories/interview","description":""},{"id":"Sr0QubAhTrGe4OnoakfIZA","label":"Opinion","url":"/categories/opinion","description":""},{"id":"D_5BqH3kTR-qm0Z64G6ZlQ","label":"Reports","url":"/intelligence/reports","description":""},{"id":"JYcSbZQBSeO3UbH1j2Qrfg","label":"Podcasts","url":"/podcasts","description":""},{"id":"G32kFJRqQ8K0ib6tUIFmLw","label":"Collaborations","url":"/studio","description":""},{"id":"YlXQZYnFQzutpGmolU2NMg","label":"Countries","url":"/countries","description":""}]},{"description":"","id":"DX9P1rcqQx-Cae_Fsw8lRQ","label":"Sectors","url":"","list":[{"id":"PJXSqBVBRWi5DbsCBYAMRw","label":"AI","url":"/sector/artificial-intelligence","description":""},{"id":"KhWnh5ljShmvZ17-gYCdGw","label":"Climate","url":"/sector/climate-tech","description":""},{"id":"BwYOwBdySIiuUJdJXwoDfA","label":"Deeptech","url":"/sector/deeptech ","description":""},{"id":"WJVpIcgAS8uzpLcZ4DgfcA","label":"Defence","url":"/sector/defence-tech ","description":""},{"id":"LPC3iXuTTJSlJInU5_bGrQ","label":"Fintech","url":"/sector/fintech ","description":""},{"id":"Kylc0mSKR6yH2-rTawJ5Nw","label":"Healthtech","url":"/sector/healthtech","description":""},{"id":"XxE5q1p9Qou_tGEYNnJQOA","label":"Consumer","url":"/sector/consumer","description":""},{"id":"KHEPG6yyRdCbrAL_5EnFPA","label":"All sectors","url":"/sectors","description":""}]},{"description":"","id":"XH9Mod_SR8eEp9RvoVPTPg","label":"Startups","url":"","list":[{"id":"M9MHqDQBTau9wt_P53e8FA","label":"Funding news","url":"/tag/startup-fundraise","description":"The latest funding news covering the companies raising in Europe."},{"id":"S1G9XXaeRGiaqWF8WMWqzA","label":"M\u0026A","url":"/tag/m-a","description":"The latest news on M\u0026A deals happening in European tech, as well as M\u0026A market trends and insights from companies on the lookout for acquisitions. "},{"id":"QGVGLWErT6O3m9-Sxr9Tqw","label":"Leaderboards","url":"/leaderboards","description":"Regional rankings of Europe's fastest-growing startups."},{"id":"YLc0RbImQEuEewxV6a9Jtg","label":"Rankings","url":"/rankings ","description":"Meet hundreds of rising stars and big beasts of startup ecosystems around Europe."},{"id":"OFPjXU66QxS-4fn4rQty_Q","label":"Startup life","url":"/sector/startup-life ","description":"Discover the latest news and analysis from Sifted covering what it's like to build a startup in Europe."},{"id":"QyRflmfySXaDsXXs0s3f-Q","label":"How toâs","url":"/categories/how-to","description":"Discover how (and how not) to launch and scale a startup, with advice from leading founders and operators."},{"id":"fzjyJ_esQvOF18tEuwqKiQ","label":"Sifted for Startups","url":"/sifted-for-startups","description":"Access Sifted's journalism with our free subscription for startups across Europe."}]},{"description":"","id":"aA0pGGiRSQKnAfGmZa2Ksg","label":"Investors","url":"","list":[{"id":"O6G1P0PrRpmyakSVrpPcfg","label":"VC news","url":"/tag/vc-news","description":"The latest news covering European VC, including whoâs raising, new funds and people moves."},{"id":"X6Qb18b9QqOrl_4adGv__A","label":"VCsâ startups to watch","url":"/categories/investor-survey","description":"The latest investor surveys of startups to watch, according to VCs."},{"id":"Vmg5ZVKkTnmwyWTOXO47xA","label":"Investor rankings","url":"/rankings","de
80933scription":"Exclusive to Sifted Pro subscribers. Europe's most active startup backers, ranked."}]},{"description":"","id":"QQGcsnniRLagvjb4LGeAJg","label":"Events","url":"","list":[{"id":"Flk9SMzVQtaRBMetfcwGpA","label":"Summit","url":"https://summit.sifted.eu/","description":"Our flagship London event, taking place 30th September - 1st October, 2026."},{"id":"ftNMnt3JTlKw942Ac4j3_g","label":"Talks","url":"/talks","description":"Expert panellists. Free to attend. Live or on-demand."},{"id":"BDsb-wItRv-wJc4xJClceA","label":"Sifted Summit coverage","url":"https://sifted.eu/tag/sifted-summit","description":"Our journalists report on the top Sifted Summit highlights, from raw founder stories to the future of European tech."}]},{"description":"","id":"KY6l6x_dQQmB4l-P0J9izQ","label":"Leaderboards","url":"/leaderboards","list":[]},{"description":"","id":"MmbW6dPkRWmeXzCVus73bQ","label":"Onstage","url":"https://www.onstage.vc","list":[]}],"searchLabel":"Search","searchUrl":"/search","sidebarHeading":"The intelligence layer for European tech","sidebarPrimaryLinks":[{"id":"Z5Sx6p7HRHCCWx7y8RMtTw","label":"Pro","list":[{"description":" Exclusive journalism, analysis, interviews and lists â exclusive to Pro subscribers.","id":"NcdpKjFsRvCcFcdV5FW7Yw","label":"Articles","url":"/articles/pro"},{"description":"Investment-grade research on emerging sectors, powered by proprietary Sifted research.","id":"a1r7bK6IRgyE6JoixFQz0g","label":"Briefings","url":"/pro/briefings"},{"description":"Discover market maps, scouted and structured by Sifted, mapping key players across each sector.","id":"Kb_Mt6WaRUKUkP2J9F5KdA","label":"Market maps","url":"https://sifted.eu/categories/market-map"},{"description":"Track the latest funding rounds across the European tech ecosystem.","id":"NzOCSldXQtub5LHadKKohw","label":"Deals Tracker","url":"/deals-tracker"},{"description":"Monitor investor activity since 2024 in real time across Europe's startup ecosystem.","id":"HQZNNWWfRwyh9S6R4CxlvQ","label":"Investor Tracker","url":"/investor-tracker"},{"description":"Explore where capital is flowing across European tech with Siftedâs interactive data dashboard.","id":"S1suV51JSVWbS83scEIlEw","label":"Market Tracker","url":"/market-tracker"},{"description":"Track startup acquisitions and acquirers across European tech.","id":"Oy6HtmUeSmOvi3AYcyrzNA","label":"M\u0026A Tracker","url":"/ma-tracker"},{"description":"Europe's most active startup backers, ranked.","id":"R2AwuIFUQ8adodudVHFtxA","label":"Investor rankings","url":"/rankings"},{"description":"A weekly column from our cofounder and editorial director, John Thornhill.","id":"GjBp6mtERkOs25I4aJHo7A","label":"Sifted View","url":"/categories/sifted-view"},{"description":"Browse Sifted's article coverage of Europe's leading startups and scaleups.","id":"crkDNOMNTGm1sTWC4siD8Q","label":"Company search","url":"/tag/company-search"},{"description":"Find your next big opportunity in European tech.","id":"NTHiq9EXT6a3tZUMQt4pLA","label":"Subscribe","url":"/sifted-
80933pro"}],"url":"","description":""},{"id":"B-FrLLalS_OrasswiEQ9gw","label":"Latest","list":[{"description":"","id":"JCLCsRXDTkSzeT7ieoasIw","label":"News","url":"/latest"},{"description":"","id":"FFCIdK3ZTDybE98o7PqjvQ","label":"Analysis","url":"/categories/analysis"},{"description":"","id":"d5WTv8JlQF-dWoJuUlXQcw","label":"Interviews","url":"/categories/interview"},{"description":"","id":"YVfEev92REOAdwUJYIxBlQ","label":"Opinion","url":"/categories/opinion"},{"description":"","id":"HOzx3CqxTZ--gHWh5qMTzw","label":"Reports","url":"/intelligence/reports"},{"description":"","id":"eeOt8YC8Tqqqy8f5QItIhA","label":"Podcasts","url":"/podcasts"},{"description":"","id":"NUFTmDwqT6Sh4-decajYXA","label":"Collaborations","url":"/studio"},{"description":"","id":"f96xPjrWT2eFK7pAnY3FOQ","label":"Countries","url":"https://sifted.eu/countries"}],"url":"","description":""},{"id":"dFBM7fsmQvyttchN6v6TPA","label":"Sectors","list":[{"description":"","id":"Ysrb2dDLQeONnDZaeuQGqw","label":"AI","url":"/sector/artificial-intelligence"},{"description":"","id":"BlFmX_WhST2KBRmExuMVeg","label":"Climate","url":"/sector/climate-tech"},{"description":"","id":"eJv_lK2pSmq7YDiWlhrkKA","label":"Deeptech","url":"/sector/deeptech"},{"description":"","id":"Fk-Gx0DxQmWErhxZ7Ix-vQ","label":"Defence","url":"/sector/defence-tech"},{"description":"","id":"WX4suYJ4Q8SpwcRcLDedmw","label":"Fintech","url":"/sector/fintech"},{"description":"","id":"GlP4AetLTdmfL17Dvl8FNw","label":"Healthtech","url":"/sector/healthtech"},{"description":"","id":"ML7L1xqFQyye9XvTrDiHow","label":"Consumer","url":"/sector/consumer"},{"description":"","id":"aFwoBU0CRhOOySh63RxbXw","label":"All sectors","url":"/sectors"}],"url":"","description":""},{"id":"JHSfv5LMQHa3rKf9tQON_A","label":"Startups","list":[{"description":"The latest funding news covering the companies raising in Europe.","id":"SZIU_2G5SpegG_ZrJz5Rhw","label":"Funding news","url":"/tag/startup-fundraise"},{"description":"The latest news on M\u0026A deals happening in European tech, as well as M\u0026A market trends and insights from companies on the lookout for acquisitions. ","id":"BAxbai4fS6Ovvr70ukSgzw","label":"M\u0026A","url":"/tag/m-a"},{"description":"Regional rankings of Europe's fastest-growing startups.","id":"HjfUza3dRkmGbqlan2T6rA","label":"Leaderboards","url":"/leaderboards"},{"description":"Meet hundreds of rising stars and big beasts of startup ecosystems around Europe.","id":"O_Wq96T5S6yLyeqGurBhCA","label":"Rankings","url":"/rankings "},{"description":"Discover the latest news and analysis from Sifted covering what it's like to build a startup in Europe.","id":"AD88WLBUT42peQFOZeJn8Q","label":"Startup life","url":"/sector/startup-life "},{"description":"Discover how (and how not) to launch and scale a startup, with advice from leading founders and operators.","id":"GdL44RqtQCW0OgMfI8ZKPQ","label":"How toâs","url":"/categories/how-to"},{"description":"Access Sifted's journalism with our free subscription for startups across Europe.","id":"Ews07ZsAQEq5Qy2J6Zf8gg","label":"Sifted for Startups","url":"/sifted-for-startups"}],"url":"","description":""},{"id":"Sgll9sErRtuZnZi67q_e3Q","label":"Investors","list":[{"description":"The latest news covering European VC, including whoâs raising, new funds and people moves.","id":"IFFUSfYPQfuMmKwJ3-7mbg","label":"VC news","url":"/tag/vc-news"},{"description":"The latest investor surveys of startups to watch, according to VCs.","id":"fDu1GfJcQfufTtYhPX_53g","label":"VCsâ startups to watch","url":"/tag/investor-survey"},{"description":"Exclusive to Sifted Pro subscribers. Europe's most active startup backers, ranked.","id":"CpIqHs9vSCGr9VuLG0rFew","label":"Investor rankings","url":"/rankings"}],"url":"/tag/investor-survey","description":"Description for this section, should be no more than a few lines"},{"id":"e1bmVsFARx-hXVdPo-3_7A","label":"Newsletters","list":[{"description":"Keep your finger on the pulse with the latest news and expert analysis on what's happening across startup Europe.","id":"XSR0AggPSougzGVxHDQ-Jg","label":"Sifted Daily","url":"/newsletters"},{"description":"Get weekly updates on the latest trends, analysis and industry gossip from across Europeâs fintech scene.","id":"EO2o7sGLRga2AkDuwKYq8A","label":"Fintech Newsletter","url":"/newsletters"},{"description":"Explore the inner workings of Europeâs hottest startups with practical resources and honest advice from leading operators.","id":"cdZk2EEpRLOIBXU-f9YxoQ","label":"Startup Life Newsletter","url":"/newsletters"},{"description":"Follow the money with a weekly snapshot of the latest trends, new funds and people moves across European VC.","id":"as4ZpHEMQcW_-6z4XxihGA","label":"Up Round Newsletter","url":"/newsletters"},{"description":"A weekly roundup of the latest dealmaking activity across Europe â exclusively for Pro subscribers.","id":"EZdC2raJQlOMA7kBxfzR5w","label":"Pro Deals Newsletter","url":"/newsletters"},{"description":"Your essential read covering the most-talked about sectors in Europe right now.","id":"dCsajOrNRTquqzbsHUDScQ","label":"AI \u0026 Deeptech Newsletter","url":"/newsletters"}],"url":"/newsletters","description":""},{"id":"VLFsRdjgTvaq4-AmhBcVCQ","label":"Events","list":[{"description":"Our flagship London event, taking place 30th September - 1st October, 2026.","id":"FfOa0FNGSzaHaYdoXpHDYg","label":"Summit","url":"https://summit.sifted.eu/"},{"description":"Expert panellists. Free to attend. Live or on-demand.","id":"E2hF7SG1TWm4qW21EawC5g","label":"Talks","url":"/talks"},{"description":"Our journalists report on the top Sifted Summit highlights, from raw founder stories to the future of European tech.","id":"SJRiQXtNSlqySwLSXmKoMA","label":"Sifted Summit coverage","url":"https://sifted.eu/tag/sifted-summit"}],"url":"","description":""},{"id":"EUbnnN4STRuoXsrI9zJ7YQ","label":"Leaderboards","list":[],"url":"/leaderboards","description":""},{"id":"f-LDjVZRTUuYXDtksSRSFA","label":"Onstage","list":[],"url":"https://www.onstage.vc","description":""}],"subscribeCtaLabel":"Subscribe","subscribeCtaLabelMobile":"Subscribe","subscribeCtaUrl":"/sifted-
80933pro","userProfileLabel":"My Sifted","userProfileUrl":"/my-sifted","logoOverwrite":null,"newslettersList":[{"id":"cEt3Cq18QmKi5rA6yzbj4Q","title":"Sifted Daily","description":"Essential European tech news and analysis, delivered daily.","frequency":"Mon - Fri","isFeatured":true,"accent":"sifted","buttonVariant":"sifted","newsletterType":"sifted","cardImage":{"url":"https://www.datocms-assets.com/60124/1757341374-sifted_daily.png","alt":null,"width":987,"height":575,"blurUpThumb":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAOCAYAAAA1+Nx+AAACLUlEQVR42mVU0W7cQAgEdu27KlH7B/24fnJ/JFL70rO90BlY25GSaG7PNswwgK///vlLRrjs7rKNAxiy81pE3Ah8tCbaTFRV8s9DFPE6XAxoEbKEyorYhzVZEb/gbKbS/4HMSQhsn3CAZ4QIcvGhIMSJhJTgTcRoDDF87wCurtgAeN3CpP/1A0Qhhw/Z8H3jeQowXgw5qBjnpL8dAObTAZ6x+g0iK7AADdn9w3fEh+xoDdtzCwSEUQ0ry3qsnJwORrWopQBI8WRF3APFPCgIx82cAoe4cwaTPDEFrKyWF87AykEUucIJHfRLoMkT4euEsUV/KBBfBfZ0gG6w8qzeagYxHXgN2CDSpQRY/QuPHrNNbF0OeXwZ8igBJDkIOAOSqmtOhTM455AkuDzgzjlc5Efm4hmiu1fKBc+Oy0Rkc0gewTs6A0GeW+T1Hf9jxno2NJKc5XTu7sgVLBIPbk2uSgaYnIPWmRKpQVMkzipxXlACvQdvA/obVgvbjJZorlYH+yLcJIVtyCCBwIRLRFlISN1iizRXdAXpM4FB82XD2Sj03UCn3BrNAb2QsAkRtUkkxnCDJzvEAWf5mm92w71FOWBL4qf1xAqkgx+t54u2wwWJXwQStrgF3Cb5nFO+1qcAlisdgPyb9hJB9bzuxLv1uUWSDrgR7OXKVQXpmG26BSLdXALCt9jKgVJktih/iyDA3uV7qqd1y5McvHfkDKRadAlMBznkewarzlMKLPQ/1n6XsUOXbHMAAAAASUVORK5CYII="},"alreadySignedUpButtonLabel":"You're signed up!","buttonLabel":"Sign up for free"},{"id":"QMg8D8ClR-Gb-S_3smtDuQ","title":"AI \u0026 Deeptech","description":"The people, companies and trends shaping European AI and deeptech.","frequency":"Mon","isFeatured":false,"accent":"deeptech","buttonVariant":"sifted","newsletterType":"deeptech","cardImage":{"url":"https://www.datocms-assets.com/60124/1757341374-sifted_ai-and-deeptech.png","alt":null,"width":1972,"height":575,"blurUpThumb":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAHCAMAAAAlKX2EAAAB8lBMVEUvBV8vBWEwBl4wBmQxBmYxBmgxB2YyB2syCF4yCGczCWY0CG40CV80CmY0Cmw2Cl82C2Y3C2c3C3I3DG84CmY4C184C2Y5CGc5CWY5C185DnI6Cl46DXU7B2g7CF47EHQ8B148D3g9B189CGo9EHo+Bms+CHg+CHo/Bmk/Bm4/B2E/CXhAB2hACHJACW1ACXxAC3hBDHhCCGNCCn9CDXlDCWhDC3BDC3ZDDHlDDXlECntEC3pFCWZFDINGCnxGC2lGDXNGDXpHD4ZIC2lIC39IDGlID3ZID31JD3dJEH9KCodKDGtKEYlLCohLC4dLDIJLDWlLDWxLEotMCopMDIdMDWlNDodODGhODI5ODoZOD4hOD4lPC2hPDIpPDYlPDolQCmhRDIxRDpFREYlSCWhTDY9UCWpUEJRUEoxVE41WB39WCmxWD5NWEpdXCH1XCIJXE5hYCoZZCX1ZC25ZEZdbDIpcC31cDHFdD49dE5peDXNfDnRfEZJfFZ1gDX1gEpNhFp9jD35mEH5oEH5pCY9pCpJqCY1qC5ZqD31sC41sDn1sDpptDXxvDX1vEJ9wDY1xDH5xEqJyE6RzD410DYB3DoJ3EY56D4R6Eo58EIZ9EYd9E45/Eo6BEY2CEI2ED42HD46JEJCMEZKPEpSRE5WSFJZx5BvdAAAApnRSTlMAAAAACQsHDwAABhQABgAABwcYAAcABwYHAAAAHQYAAAAgAAYiACYnAAAAJQAAByolJQAsJgAHACQlIyMALyMACAAyACMACAAJAB4ANB0eJAAANR4fACEAHyUhIgAhISIAIiAmACMAIicoAAAkIwAAJAAAACYAAAAAJwAAACkAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFlDQNAAAAH9JREFUeNo9jDESAjEMAy+JHSAfoObxfImeRySXs2UbV0gzalaz9I5/zA1iXiq1VmiGe8ByNdEGwAmy3zBsdUBdp6wTRjRGr/SRfa293c3TA0lTZ74xnW6CS6WgoqQ+QaUHN3qFrjUFxcqhFqrlToNHp6dB94V8Hwi4oHUe3NsP1dZq3ktjDvgAAAAASUVORK5CYII="},"alreadySignedUpButtonLabel":"You're signed up!","buttonLabel":"Sign up for free"},{"id":"Dvnf7_-rTOyc0_DD4jJ51g","title":"Fintech","description":"From banking to crypto, Sifted delivers your weekly roundup of European fintech.","frequency":"Tue","isFeatured":false,"accent":"fintech","buttonVariant":"sifted","newsletterType":"fintech","cardImage":{"url":"https://www.datocms-assets.com/60124/1757341374-sifted_fintech.png","alt":null,"width":1224,"height":575,"blurUpThumb":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAMCAYAAAB4MH11AAACW0lEQVR42kWTUY7bMAxEh6RkJ9ntR3unnqWfvXrRLupYNskO5WAbgIgl2XycIdV+fP8JZEK8ImCRDKCnyAK9L2r3rrqqqELEPXMb6X+2cN/yxN90bBLYNXF0hTdDdAOaIk3R9vN8AWJClP+NgEjhro7QMBeFKQF8w5E7AT7CsROwEzAIGMx5gAAkQhLgM5KAj32vbMAExAXwUsCAnlTw0UWXTwXIcWTgGSe2qh6lIC8Aq/Zg5dGYz5hf0H49t/+A8wIYlfSYACyi2UR3KwEQBCscBFTlBXgS8NQCyLQoKrETQKswAaMUMNtZ4ay5AJdN7MOEdDWYyCegFOx8ek5A+Q+MJvycgKqe1qEgBfjtx6WAnoIGyAvSolQUgC9VD6QcugAnu1MKJmTak5f/wgZTDSqqD9WDjUpyLpJrNltpE5vGV5mcSl8qlP8FqPadVDCqcq4KMnjGmmkWz/ktZugqkks7bu1rRngeMphnkBzlhpVK9oKAhY9LDV7tswznej9Y+OB6cPMoexjBHmTXjm7v0u0hpkvL9/VbegF85NDBNESp43CBZ6e4RQihti6X8DlJNHJziSeHZqRxwLtZru2Gtb/J0t7Q24Oz3Zu+374UII5zoAC7HmjnJyAj10xZmbtfw12jnqV0pSGbWO6s1HXhrVraSsBd1v6Q3u4yAY/bynvjcpiEse11oVRdmivHtgkBEnJjYiqQu
80933j1sfU04sbyLNb3a9KQCkbU1AowAJUBgJo0uWTrf5JLfKPuh1fC6tvyVeKNFDJ7PwUO12mYIQca9pkzI495mMDm0nk3zHyHIl2kLe3KyAAAAAElFTkSuQmCC"},"alreadySignedUpButtonLabel":"You're signed up!","buttonLabel":"Sign up for free"},{"id":"WMhoUcyWQQO47Ehe5pguNA","title":"Startup Life","description":"Ãanna Kelly brings you founder and operator advice on how (and how not) to run a startup.","frequency":"Wed","isFeatured":false,"accent":"startuplife","buttonVariant":"sifted","newsletterType":"startuplife","cardImage":{"url":"https://www.datocms-assets.com/60124/1757341374-sifted_startuplife.png","alt":null,"width":1833,"height":575,"blurUpThumb":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAICAMAAADUf89RAAACNFBMVEVSGzxSHD9SHUFTGjpTHUJTHkJTHkNUGz9UHEFVGjhVGj1XGjtXGz1XHEBXHUJYHDdYHkRZGjlZHkVaGjpaG0FaHUNbGj9cGzhcHjhdGT1dGzpfGjxgHThgIDlhHTpjGjxkHjtkIzplIDlmHDxnHjlnHztnIDxnID1nIT9nJTtoHjdoHjpoIDxoITxoIT5pHT1pHjhpIztpJjxqHjVrHTdsHz5sJTxtHzRtHz5tJj1uHjZxITVyHzZ0Hjx0Hz91HTl1IEJ1IzZ2HTd2ITd2IUR3IkV4IkV5HjZ5H0J5IUR5JDh5Jjd6HkB8HT58JTl8KDh9IDZ+Jjl+KTl/HT2BIzeCHj2FHz2FJjmHIzWHJDeHJTmHJTqHJjqIID2IIjOIIzaIJDiIKDqJIzSKIT6KIjGKKTuMIj6MIzKNIzCPJDKRJTGSJTKVJzKWKDOZKjOaKjSbITabIjmbIz2cLDSdITSdJUCdLDWeJkKeJzSeKDaeKTeeLTWfIjOfJjKfJzOfJ0SfKDWfKTefKTifLTagJTCgJ0ShJkOhJzGiJS6iJUGjI0CjJDOjJzClIz6lJi6mKC+nIj2nJzSoKC6qIzyqKjCrKjWsKi+tJDyuLDGvLDewJTywLTCwLTeyJj2yLjKzLjG0Jz21JTe1MDK1MDO2JDS2Jzu3JDK3MTS4KD65KkG6JTG7K0O8KkO9KkK+JzG+KUG/Jz/BJj3CKjLDJjzGJzvGLTPJJzvJLzTLMDXMKTzOKjzPKjy0cMFIAAAAvHRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANrYl1QAAACYSURBVHjaJY5RbsMwDEMjmfaS/OQSOcGu3/8eoHfY/4CtaGxL4jRUoH5I4VG4kR4MvuVWFEBRwZe7Wy6d4wonsR4tI9x9dMagSZoW1FI3lB14+Pg1Cw/xJRLH1mo7asGzj7B+0cU0cSwRIt/rhtOt9xg2RceS9W0D2p4dnz89cqbLlCX+SVDVuuK0mec+XypykfUD+VNF+QNhc3KKa8EBVgAAAABJRU5ErkJggg=="},"alreadySignedUpButtonLabel":"You're signed up!","buttonLabel":"Sign up for free"},{"id":"OnnqbFONSmqW6RQNGXID0Q","title":"Up Round","description":"What the moneymakers are up to. Anne Sraders delivers your weekly snapshot of European VC.","frequency":"Fri","isFeatured":false,"accent":"upround","buttonVariant":"sifted","newsletterType":"upround","cardImage":{"url":"https://www.datocms-assets.com/60124/1757341374-sifted_upround.png","alt":null,"width":1410,"height":575,"blurUpThumb":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAKCAMAAACZt25aAAACylBMVEUkEHIlDmwlEnclFHwmDWYmEHYmEnwmFX4nD3AnFYIoDGEoFoYoF4gpDmspEHEqDmsqEncqFHsqFX0rDV0rDWUrD2ctE4AtFYYtF4wuDWAuEnsuGZEvDlovEGQvG5UvHJgxD24xEHMxEngxE3cyDlwyD2kyEWIyE30zEFkzEGYzEn4zE4QzFYAzFYkzFoI0DmI0D2c0EGw0EXk0E3Q0F440GI80GZU1Dl41EWM1EnA1EnQ1EnY1E2E1E3M1FHo1Fn81F4o1GIM1GJI1HJs2EFo2FHU2GYU2GZQ2HqE3D1s3EW43Elg3EmI3E3M3FXI3FY43FpM3F4Y3GJk3IKU3Iac4FGE4FIk4Gp85EFk5E2E5FGE5FHE5FYU5FnE5G5k5HJ85HKI6EWk6Elg6E1c6F4M6F5c6GJ06GZQ6GqM6HaU6H6U7Elg7E1c7FnA7FoI7FpI7Hag7Ias8FnA8F448GY88Hqw8I688JLE9EGM9EWg9Emw9GIE9H68+EF8+EmU+E28+FHA+F4A+Gow/EFw/FFc/GIs/GX8/GYBAEVlAGX9AGn9BGYlBG4pCE1hCFVZDFGJDGYhDGohDG4lDG41EFFdEFlZEGIJEG4hEHIhEHZFEHpRFFlZGF3xIFmBJF3dMFGlMFG1MFXBMFnNMF3RNFGVNGV9OFWJOGHNQFmBQGl9RH5ZRIZxRIqBRI6JSGF9SHZBTGl5TGnBTG15UG15UHIpXHYVYHW5ZIp9ZJKVZJqlZJ6taIZlcGXdcGnpcHoFcIJNdGXRdGn1dG35dH21eGXFfGm5gII5hHG1hIH5hIW1jHmxkIWxkIYplIGxlIWxnInxqI4drHYNrHoZrHohrH4lsHYBsJXttHn1vIHtwJoVwJ3txIXlzJHlzJ3p0IIp0II10IY90IZB0Jnl0J3p1IId1KIR2IYR4I4N5KoN6JYJ8J4F8K4N9KYJ9K4IKziwCAAAA7nRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3vAnKAAAAMxJREFUeNoVj01OwzAQhRl7xg6pSpGLkGDJ/a/BIVhUAiFEu4CWJI1jj+1horf8nt4PfoiIM7Cq1TrFklMpAICjAjRgwUGuJaU5CvMKfqUIIhhrobY88hxbztYBrlFCxjhjJZZlOH+eLuojPAgrcETe5zR/v71fmcVo1OtSFpEu7Pr+Jh4PU4y5KkA8NXXIPOwetsB/TcsQwCp54iE16W7DXSDuwteFdKwuwZcYuYl3YU8WnqfHn/MVtrQB3CdemvQYnNMn5O/HCBtP8A+KgXm2gzbOngAAAABJRU5ErkJggg=="},"alreadySignedUpButtonLabel":"You're signed up!","buttonLabel":"Sign up for free"},{"id":"UHRAOW1iQEWx6JN67Z9wgQ","title":"Pro Deals","description":"A roundup of the latest dealmaking activity across Europe. ","frequency":"Mon","isFeatured":false,"accent":"pro","buttonVariant":"pro","newsletterType":"pro","cardImage":{"url":"https://www.datocms-assets.com/60124/1757341374-sifted_prodeals.png","alt":null,"width":1712,"height":576,"blurUpThumb":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAJCAMAAAAfIxz0AAABoVBMVEULBsgLB8cLB8gMCMQMCMUMCMUNCcINCcMNCcQOCsEOCsIPC74PC78PC78PC78PC8AQDL0QDL0QDL0RDbsRDbsRDbsSDrgSDrgSDrkSDrkSDroSDroTD7YTD7YTD7cTD7cTD7cTD7cTD7gTD7gUD7YUELQUELQUELQUELQUELUUELUUELUUELUUELUUELUUELUUELYUELYUELYUELYUELYVEbIVEbIVEbIVEbIVEbIVEbMVEbMVEbMVEbMVEbMVEbMVEbMVEbQVEbQVEbQVEbQVEbQVEbQWErAWErAWErAWErEWErEWErEWErEWErEWErEWErEWErIWErIWErIWErIWErIXE64XE64XE64XE64XE64XE68XE68XE68XE68XE68XE68XE68XE7AXE7AXE7AXE7AXE7AXE7AYE64YFKwYFKwYFKwYFK0YFK0YFK0YFK0YFK0YFK0YFK0YFK4YFK4YFK4ZFKwZFaoZFa
80933oZFasZFasZFasZFasZFasZFasZFasZFawZFawZFawZFawaFaoaFqgaFqkaFqkaFqoaFqobF6hT73rjAAAAi3RSTlMVIRoQDCsiGDQsOg8HMz0CGjY7JDU2CDAALwAsHiAAEycoAC8AABsmKQAXGBwgJikAHiEjLw4PFSEiAAQdICEkKgAaGx4oKgAEFwACEBUYGikAEhQcHwAKCw8dAAgNEBIVJAAEBhMXGAwADB0ABAgKExweABocCAANAAECAwQHCgAFChYAAAADAAEAZ9m0RQAAAMlJREFUeNoNzMtOg0AUANA7wx2GNhIesThGXPoz/r8JTZdtE2xtBWEmzItrd2d18BNi65vVquBA/sj+d7iSc8AR4tviXdhZn082nxQAXOs7ID4A77axxQoF8HVjvSqH6oQoba/62mQMSIAveB6TSvUfErvQ7qun24vQRSAGsJaT6it5xnH92pjDqxmev2sfiW9vyUlkj0pHcnN2nE3X6MWXY8rSPzR3Qk3oE2fG43aedHtmnnVpuheEgTukyBhbSLjBMp4OkvIL/QPQ9m7vxrF36gAAAABJRU5ErkJggg=="},"alreadySignedUpButtonLabel":"You're signed up!","buttonLabel":"Subscribe now"}],"logo":{"overwriteUrl":null,"alt":null,"width":null,"height":null},"calloutList":[{"id":"EwUc2RL1Qm6truN69Rwcng","title":"Sifted Daily newsletter","description":"Stay one step ahead with news and experts analysis on whatâs happening across startup Europe.","frequency":"Weekdays","accent":"sifted","buttonVariant":"sifted","newsletterType":"sifted","cardImage":{"url":"https://www.datocms-assets.com/60124/1757341374-sifted_daily.png","alt":null,"width":987,"height":575,"blurUpThumb":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAOCAYAAAA1+Nx+AAACLUlEQVR42mVU0W7cQAgEdu27KlH7B/24fnJ/JFL70rO90BlY25GSaG7PNswwgK///vlLRrjs7rKNAxiy81pE3Ah8tCbaTFRV8s9DFPE6XAxoEbKEyorYhzVZEb/gbKbS/4HMSQhsn3CAZ4QIcvGhIMSJhJTgTcRoDDF87wCurtgAeN3CpP/1A0Qhhw/Z8H3jeQowXgw5qBjnpL8dAObTAZ6x+g0iK7AADdn9w3fEh+xoDdtzCwSEUQ0ry3qsnJwORrWopQBI8WRF3APFPCgIx82cAoe4cwaTPDEFrKyWF87AykEUucIJHfRLoMkT4euEsUV/KBBfBfZ0gG6w8qzeagYxHXgN2CDSpQRY/QuPHrNNbF0OeXwZ8igBJDkIOAOSqmtOhTM455AkuDzgzjlc5Efm4hmiu1fKBc+Oy0Rkc0gewTs6A0GeW+T1Hf9jxno2NJKc5XTu7sgVLBIPbk2uSgaYnIPWmRKpQVMkzipxXlACvQdvA/obVgvbjJZorlYH+yLcJIVtyCCBwIRLRFlISN1iizRXdAXpM4FB82XD2Sj03UCn3BrNAb2QsAkRtUkkxnCDJzvEAWf5mm92w71FOWBL4qf1xAqkgx+t54u2wwWJXwQStrgF3Cb5nFO+1qcAlisdgPyb9hJB9bzuxLv1uUWSDrgR7OXKVQXpmG26BSLdXALCt9jKgVJktih/iyDA3uV7qqd1y5McvHfkDKRadAlMBznkewarzlMKLPQ/1n6XsUOXbHMAAAAASUVORK5CYII="},"alreadySignedUpButtonLabel":"You're signed up!","buttonLabel":"Sign up for free"},{"id":"dBZXJGJ9SQaryvvZfoEBig","title":"Startup Life newsletter","description":"Explore the inner workings of Europeâs hottest startups with insights, tips and tricks from leading operators.","frequency":"Wed","accent":"startuplife","buttonVariant":"sifted","newsletterType":"startuplife","cardImage":{"url":"https://www.datocms-assets.com/60124/1757341374-sifted_startuplife.png","alt":null,"width":1833,"height":575,"blurUpThumb":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAICAMAAADUf89RAAACNFBMVEVSGzxSHD9SHUFTGjpTHUJTHkJTHkNUGz9UHEFVGjhVGj1XGjtXGz1XHEBXHUJYHDdYHkRZGjlZHkVaGjpaG0FaHUNbGj9cGzhcHjhdGT1dGzpfGjxgHThgIDlhHTpjGjxkHjtkIzplIDlmHDxnHjlnHztnIDxnID1nIT9nJTtoHjdoHjpoIDxoITxoIT5pHT1pHjhpIztpJjxqHjVrHTdsHz5sJTxtHzRtHz5tJj1uHjZxITVyHzZ0Hjx0Hz91HTl1IEJ1IzZ2HTd2ITd2IUR3IkV4IkV5HjZ5H0J5IUR5JDh5Jjd6HkB8HT58JTl8KDh9IDZ+Jjl+KTl/HT2BIzeCHj2FHz2FJjmHIzWHJDeHJTmHJTqHJjqIID2IIjOIIzaIJDiIKDqJIzSKIT6KIjGKKTuMIj6MIzKNIzCPJDKRJTGSJTKVJzKWKDOZKjOaKjSbITabIjmbIz2cLDSdITSdJUCdLDWeJkKeJzSeKDaeKTeeLTWfIjOfJjKfJzOfJ0SfKDWfKTefKTifLTagJTCgJ0ShJkOhJzGiJS6iJUGjI0CjJDOjJzClIz6lJi6mKC+nIj2nJzSoKC6qIzyqKjCrKjWsKi+tJDyuLDGvLDewJTywLTCwLTeyJj2yLjKzLjG0Jz21JTe1MDK1MDO2JDS2Jzu3JDK3MTS4KD65KkG6JTG7K0O8KkO9KkK+JzG+KUG/Jz/BJj3CKjLDJjzGJzvGLTPJJzvJLzTLMDXMKTzOKjzPKjy0cMFIAAAAvHRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANrYl1QAAACYSURBVHjaJY5RbsMwDEMjmfaS/OQSOcGu3/8eoHfY/4CtaGxL4jRUoH5I4VG4kR4MvuVWFEBRwZe7Wy6d4wonsR4tI9x9dMagSZoW1FI3lB14+Pg1Cw/xJRLH1mo7asGzj7B+0cU0cSwRIt/rhtOt9xg2RceS9W0D2p4dnz89cqbLlCX+SVDVuuK0mec+XypykfUD+VNF+QNhc3KKa8EBVgAAAABJRU5ErkJggg=="},"alreadySignedUpButtonLabel":"You're signed up!","buttonLabel":"Sign up for free"},{"id":"RVoh3QwxRo28djOt3EdhBA","title":"Up Round newsletter","description":"Your weekly snapshot of European VC, covering the latest funding trends, new VC funds, people moves and gossip.","frequency":"Fri","accent":"upround","buttonVariant":"sifted","newsletterType":"upround","cardImage":{"url":"https://www.datocms-assets.com/60124/1757341374-sifted_upround.png","alt":null,"width":1410,"height":575,"blurUpThumb":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAKCAMAAACZt25aAAACylBMVEUkEHIlDmwlEnclFHwmDWYmEHYmEnwmFX4nD3AnFYIoDGEoFoYoF4gpDmspEHEqDmsqEncqFHsqFX0rDV0rDWUrD2ctE4AtFYYtF4wuDWAuEnsuGZEvDlovEGQvG5UvHJgxD24xEHMxEngxE3cyDlwyD2kyEWIyE30zEFkzEGYzEn4zE4QzFYAzFYkzFoI0DmI0D2c0EGw0EXk0E3Q0F440GI80GZU1Dl41EWM1EnA1EnQ1EnY1E2E1E3M1FHo1Fn81F4o1GIM1GJI1HJs2EFo2FHU2GYU2GZQ2HqE3D1s3EW43Elg3EmI3E3M3FXI3FY43FpM3F4Y3GJk3IKU3Iac4FGE4FIk4Gp85EFk5E2E5FGE5FHE5FYU5FnE5G5k5HJ85HKI6EWk6Elg6E1c6F4M6F5c6GJ06GZQ6GqM6HaU6H6U7Elg7E1c7FnA7FoI7FpI7Hag7Ias8FnA8F448GY88Hqw8I688JLE9EGM9EWg9Emw9GIE9H68+EF8+EmU+E28+FHA+F4A+Gow/EFw/FFc/GIs/GX8/GYBAEVlAGX9AGn9BGYlBG4pCE1hCFVZDFGJDGYhDGohDG4lDG41EFFdEFlZEGIJEG4hEHIhEHZFEHpRFFlZGF3xIFmBJF3dMFGlMFG1MFXBMFnNMF3RNFGVNGV9OFWJOGHNQFmBQGl9RH5ZRIZxRIqBRI6JSGF9SHZBTGl5TGnBTG15UG15UHIpXHYVYHW5ZIp9ZJKVZJqlZJ6taIZlcGXdcGnpcHoFcIJNdGXRdGn1dG35dH21eGXFfGm5gII5hHG1hIH5hIW1jHmxkIWxkIYplIGxlIWxnInxqI4drHYNrHoZrHohrH4lsHYBsJXttHn1vIHtwJoVwJ3txIXlzJHlzJ3p0IIp0II10IY90IZB0Jnl0J3p1IId1KIR2IYR4I4N5KoN6JYJ8J4F8K4N9KYJ9K4IKziwCAAAA7nRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3vAnKAAAAMxJREFUeNoVj01OwzAQhRl7xg6pSpGLkGDJ/a/BIVhUAiFEu4CWJI1jj+1horf8nt4PfoiIM7Cq1TrFklMpAICjAjRgwUGuJaU5CvMKfqUIIhhrobY88hxbztYBrlFCxjhjJZZlOH+eLuojPAgrcETe5zR/v71fmcVo1OtSFpEu7Pr+Jh4PU4y5KkA8NXXIPOwetsB/TcsQwCp54iE16W7DXSDuwteFdKwuwZcYuYl3YU8WnqfHn/MVtrQB3CdemvQYnNMn5O/HCBtP8A+KgXm2gzbOngAAAABJRU5ErkJggg=="},"alreadySignedUpButtonLabel":"You're signed up!","buttonLabel":"Sign up for free"},{"id":"cIXrnhL2SzalYFIe13pVDw","title":"Fintech newsletter","description":"Your weekly update on the latest trends across (neo)banking, buy n
80933ow pay later, payments and the fintech startup scene.","frequency":"Tue","accent":"fintech","buttonVariant":"sifted","newsletterType":"fintech","cardImage":{"url":"https://www.datocms-assets.com/60124/1757341374-sifted_fintech.png","alt":null,"width":1224,"height":575,"blurUpThumb":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAMCAYAAAB4MH11AAACW0lEQVR42kWTUY7bMAxEh6RkJ9ntR3unnqWfvXrRLupYNskO5WAbgIgl2XycIdV+fP8JZEK8ImCRDKCnyAK9L2r3rrqqqELEPXMb6X+2cN/yxN90bBLYNXF0hTdDdAOaIk3R9vN8AWJClP+NgEjhro7QMBeFKQF8w5E7AT7CsROwEzAIGMx5gAAkQhLgM5KAj32vbMAExAXwUsCAnlTw0UWXTwXIcWTgGSe2qh6lIC8Aq/Zg5dGYz5hf0H49t/+A8wIYlfSYACyi2UR3KwEQBCscBFTlBXgS8NQCyLQoKrETQKswAaMUMNtZ4ay5AJdN7MOEdDWYyCegFOx8ek5A+Q+MJvycgKqe1qEgBfjtx6WAnoIGyAvSolQUgC9VD6QcugAnu1MKJmTak5f/wgZTDSqqD9WDjUpyLpJrNltpE5vGV5mcSl8qlP8FqPadVDCqcq4KMnjGmmkWz/ktZugqkks7bu1rRngeMphnkBzlhpVK9oKAhY9LDV7tswznej9Y+OB6cPMoexjBHmTXjm7v0u0hpkvL9/VbegF85NDBNESp43CBZ6e4RQihti6X8DlJNHJziSeHZqRxwLtZru2Gtb/J0t7Q24Oz3Zu+374UII5zoAC7HmjnJyAj10xZmbtfw12jnqV0pSGbWO6s1HXhrVraSsBd1v6Q3u4yAY/bynvjcpiEse11oVRdmivHtgkBEnJjYiqQuj1sfU04sbyLNb3a9KQCkbU1AowAJUBgJo0uWTrf5JLfKPuh1fC6tvyVeKNFDJ7PwUO12mYIQca9pkzI495mMDm0nk3zHyHIl2kLe3KyAAAAAElFTkSuQmCC"},"alreadySignedUpButtonLabel":"You're signed up!","buttonLabel":"Sign up for free"},{"id":"IHgaH9SNRE-11Va6c0AkFA","title":"Sifted Pro","description":"Investment-grade research on the early stage startup world.","frequency":"Mon","accent":"pro","buttonVariant":"pro","newsletterType":"pro","cardImage":{"url":"https://www.datocms-assets.com/60124/1757341374-sifted_prodeals.png","alt":null,"width":1712,"height":576,"blurUpThumb":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAJCAMAAAAfIxz0AAABoVBMVEULBsgLB8cLB8gMCMQMCMUMCMUNCcINCcMNCcQOCsEOCsIPC74PC78PC78PC78PC8AQDL0QDL0QDL0RDbsRDbsRDbsSDrgSDrgSDrkSDrkSDroSDroTD7YTD7YTD7cTD7cTD7cTD7cTD7gTD7gUD7YUELQUELQUELQUELQUELUUELUUELUUELUUELUUELUUELUUELYUELYUELYUELYUELYVEbIVEbIVEbIVEbIVEbIVEbMVEbMVEbMVEbMVEbMVEbMVEbMVEbQVEbQVEbQVEbQVEbQVEbQWErAWErAWErAWErEWErEWErEWErEWErEWErEWErEWErIWErIWErIWErIWErIXE64XE64XE64XE64XE64XE68XE68XE68XE68XE68XE68XE68XE7AXE7AXE7AXE7AXE7AXE7AYE64YFKwYFKwYFKwYFK0YFK0YFK0YFK0YFK0YFK0YFK0YFK4YFK4YFK4ZFKwZFaoZFa
80933oZFasZFasZFasZFasZFasZFasZFasZFawZFawZFawZFawaFaoaFqgaFqkaFqkaFqoaFqobF6hT73rjAAAAi3RSTlMVIRoQDCsiGDQsOg8HMz0CGjY7JDU2CDAALwAsHiAAEycoAC8AABsmKQAXGBwgJikAHiEjLw4PFSEiAAQdICEkKgAaGx4oKgAEFwACEBUYGikAEhQcHwAKCw8dAAgNEBIVJAAEBhMXGAwADB0ABAgKExweABocCAANAAECAwQHCgAFChYAAAADAAEAZ9m0RQAAAMlJREFUeNoNzMtOg0AUANA7wx2GNhIesThGXPoz/r8JTZdtE2xtBWEmzItrd2d18BNi65vVquBA/sj+d7iSc8AR4tviXdhZn082nxQAXOs7ID4A77axxQoF8HVjvSqH6oQoba/62mQMSIAveB6TSvUfErvQ7qun24vQRSAGsJaT6it5xnH92pjDqxmev2sfiW9vyUlkj0pHcnN2nE3X6MWXY8rSPzR3Qk3oE2fG43aedHtmnnVpuheEgTukyBhbSLjBMp4OkvIL/QPQ9m7vxrF36gAAAABJRU5ErkJggg=="},"alreadySignedUpButtonLabel":"You're signed up!","buttonLabel":"Get starter"},{"id":"RP5dtZDNSoex8a7ZzbH5Kg","title":"Deeptech \u0026 AI","description":"The people, companies and trends shaping European AI and deeptech.","frequency":"Mon","accent":"deeptech","buttonVariant":"sifted","newsletterType":"deeptech","cardImage":{"url":"https://www.datocms-assets.com/60124/1757341374-sifted_ai-and-deeptech.png","alt":null,"width":1972,"height":575,"blurUpThumb":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAHCAMAAAAlKX2EAAAB8lBMVEUvBV8vBWEwBl4wBmQxBmYxBmgxB2YyB2syCF4yCGczCWY0CG40CV80CmY0Cmw2Cl82C2Y3C2c3C3I3DG84CmY4C184C2Y5CGc5CWY5C185DnI6Cl46DXU7B2g7CF47EHQ8B148D3g9B189CGo9EHo+Bms+CHg+CHo/Bmk/Bm4/B2E/CXhAB2hACHJACW1ACXxAC3hBDHhCCGNCCn9CDXlDCWhDC3BDC3ZDDHlDDXlECntEC3pFCWZFDINGCnxGC2lGDXNGDXpHD4ZIC2lIC39IDGlID3ZID31JD3dJEH9KCodKDGtKEYlLCohLC4dLDIJLDWlLDWxLEotMCopMDIdMDWlNDodODGhODI5ODoZOD4hOD4lPC2hPDIpPDYlPDolQCmhRDIxRDpFREYlSCWhTDY9UCWpUEJRUEoxVE41WB39WCmxWD5NWEpdXCH1XCIJXE5hYCoZZCX1ZC25ZEZdbDIpcC31cDHFdD49dE5peDXNfDnRfEZJfFZ1gDX1gEpNhFp9jD35mEH5oEH5pCY9pCpJqCY1qC5ZqD31sC41sDn1sDpptDXxvDX1vEJ9wDY1xDH5xEqJyE6RzD410DYB3DoJ3EY56D4R6Eo58EIZ9EYd9E45/Eo6BEY2CEI2ED42HD46JEJCMEZKPEpSRE5WSFJZx5BvdAAAApnRSTlMAAAAACQsHDwAABhQABgAABwcYAAcABwYHAAAAHQYAAAAgAAYiACYnAAAAJQAAByolJQAsJgAHACQlIyMALyMACAAyACMACAAJAB4ANB0eJAAANR4fACEAHyUhIgAhISIAIiAmACMAIicoAAAkIwAAJAAAACYAAAAAJwAAACkAACoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFlDQNAAAAH9JREFUeNo9jDESAjEMAy+JHSAfoObxfImeRySXs2UbV0gzalaz9I5/zA1iXiq1VmiGe8ByNdEGwAmy3zBsdUBdp6wTRjRGr/SRfa293c3TA0lTZ74xnW6CS6WgoqQ+QaUHN3qFrjUFxcqhFqrlToNHp6dB94V8Hwi4oHUe3NsP1dZq3ktjDvgAAAAASUVORK5CYII="},"alreadySignedUpButtonLabel":"You're signed up!","buttonLabel":"Sign up for free"}]}},"seo":{"description":"Sifted covers European tech, startups and venture capital with independent news, analysis, data and insights for founders, investors and operators.","title":"Sifted: European Tech News, Startups \u0026 Venture Capital","image":{"url":"https://www.datocms-assets.com/60124/1687337580-sifted-on-pink.png"}},"previewMode":false,"_sentryTraceData":"601bfa6858474de59cadcce775695032-bc3947d7c8806c03-0","_sentryBaggage":"sentry-environment=production,sentry-release=CxS59Unx8FuYsEbjZKcoC,sentry-public_key=2c16bf9f652a4db89abb8fc5509e02e9,sentry-trace_id=601bfa6858474de59cadcce775695032,sentry-sample_rate=0.01,sentry-transaction=%2F,sentry-sampled=false"},"__N_SSP":true},"page":"/","query":{},"buildId":"CxS59Unx8FuYsEbjZKcoC","runtimeConfig":{"datoCmsBase":"https://graphql.datocms.com/","subscriptionUtilsUrl":"https://sifted-subscription-utils.herokuapp.com","mixpanelToken":"516258ca7de16bfdb47d0ebf1beedce9","datadogAppID":"38fa5d45-c9de-4e91-a2a6-0240b963fc35","datadogAPIToken":"pubac09d69c6e70730d47fac08cf69c795b","datadogEnvironment":"prod","jiscOAuthEnabled":"\"true\""},"isFallback":false,"isExperimentalCompile":false,"gssp":true,"scriptLoader":[]}</script>
80933<script type="text/javascript"> 80934 if (!window.Zephr) window.Zephr = {}; 80935 window.Zephr.accessDetails = {"isAuthenticated":false,"accessDecisions":{},"entitlements":{},"credits":{},"meters":{},"trials":{},"timeTrials":{},"trialTrackingDetails":[],"testGroups":{"08e24f76-a36f-46f9-97bb-a475ab364ce2":"B"},"activeProducts":[]}; 80936 </script>
80936</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.