{"version":3,"file":"DataInput.BuldZP48.mjs","names":["a","React.useState","React.useRef","React.useCallback","_Fragment","HiddenComponentLabel","useState","value"],"sources":["https:/framerusercontent.com/modules/H8wWGBNuhciEgJQJXqeh/pejxbR7npcoOsOq5Q3Vx/Popup_form.js","https:/framerusercontent.com/modules/itVumdSpaLTGejsnG4cS/6LKYMWPrWe4DJ5B7wYmL/QuizScoringShared.js","https:/framerusercontent.com/modules/DwWOdDzQZGCuvkNlbUjZ/Rj7Kdx4qq62ukVsnw7Hz/FramerFormsShared.js","https:/framerusercontent.com/modules/Kuwa4LRQnmmppaTnEydr/LYcJDJTSiQhJ2jeswWZk/DataInput.js"],"sourcesContent":["// SubscribeGate.framer.tsx — v1.2.1\n// @framerSupportedLayoutWidth any\n// @framerSupportedLayoutHeight any\n// @framerIntrinsicWidth 880\n// @framerIntrinsicHeight 560\n// @framerDisableUnlink\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{motion,AnimatePresence}from\"framer-motion\";/* ----------------------------- Utils ----------------------------- */function fontToStyle(font,fallback={}){if(!font)return fallback;if(typeof font===\"string\")return{...fallback,fontFamily:font};const out={...fallback};if(font.fontFamily)out.fontFamily=font.fontFamily;if(font.fontSize!=null)out.fontSize=font.fontSize;if(font.fontWeight!=null)out.fontWeight=font.fontWeight;if(font.letterSpacing!=null)out.letterSpacing=font.letterSpacing;if(font.lineHeight!=null)out.lineHeight=font.lineHeight;if(font.fontStyle)out.fontStyle=font.fontStyle;return out;}function resolveImageSrc(value){if(!value)return\"\";if(typeof value===\"string\")return value;if(typeof value===\"object\"){if(typeof value.src===\"string\")return value.src;if(typeof value.url===\"string\")return value.url;}return\"\";}function isValidEmail(s){return/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(s.trim());}function filenameFromUrl(url){try{const u=new URL(url,typeof location!==\"undefined\"?location.href:\"https://x\");const last=u.pathname.split(\"/\").pop()||\"\";return decodeURIComponent(last);}catch(e){return\"\";}}/**\n * Trigger a download in the visitor's browser. We try to fetch the file as a\n * blob and download via an object URL (works for cross-origin files when the\n * server permits CORS). If the fetch fails, fall back to a plain anchor with\n * the `download` attribute, which the browser will either save directly\n * (same-origin) or open in a new tab (cross-origin without CORS).\n */async function triggerDownload(fileUrl,filename){if(!fileUrl)return;const finalName=filename&&filename.trim()||filenameFromUrl(fileUrl)||\"download\";try{const res=await fetch(fileUrl,{mode:\"cors\"});if(!res.ok)throw new Error(`HTTP ${res.status}`);const blob=await res.blob();const objUrl=URL.createObjectURL(blob);const a=document.createElement(\"a\");a.href=objUrl;a.download=finalName;a.rel=\"noopener\";a.style.display=\"none\";document.body.appendChild(a);a.click();a.remove();window.setTimeout(()=>URL.revokeObjectURL(objUrl),4e3);return;}catch(e){// CORS or network failure — fall through to direct anchor\n}const a=document.createElement(\"a\");a.href=fileUrl;a.download=finalName;a.target=\"_blank\";a.rel=\"noopener\";a.style.display=\"none\";document.body.appendChild(a);a.click();a.remove();}// Set a value on an input AND fire input/change events the way React expects\n// (using the native setter so React-controlled inputs inside the slotted\n// Framer Form pick up the new value).\nfunction setNativeInputValue(input,value){const proto=Object.getPrototypeOf(input);const setter=proto?Object.getOwnPropertyDescriptor(proto,\"value\")?.set:undefined;if(setter)setter.call(input,value);else input.value=value;input.dispatchEvent(new Event(\"input\",{bubbles:true}));input.dispatchEvent(new Event(\"change\",{bubbles:true}));}/* ----------------------------- Hooks ----------------------------- *//**\n * Track viewport width so the popup can swap to a single-column,\n * image-on-top layout on small screens. Default breakpoint: 640px.\n */function useIsMobile(breakpoint=640){const[isMobile,setIsMobile]=React.useState(()=>{if(typeof window===\"undefined\")return false;return window.innerWidth<breakpoint;});React.useEffect(()=>{if(typeof window===\"undefined\")return;const onResize=()=>setIsMobile(window.innerWidth<breakpoint);onResize();window.addEventListener(\"resize\",onResize);window.addEventListener(\"orientationchange\",onResize);return()=>{window.removeEventListener(\"resize\",onResize);window.removeEventListener(\"orientationchange\",onResize);};},[breakpoint]);return isMobile;}/* ----------------------------- Component ----------------------------- */export default function SubscribeGate(props){const{delaySeconds,showInCanvas,sessionKey,requireSubscription,imagePosition,cornerRadius,overlayColor,overlayBlur,cardBackground,maxWidth,contentPadding,showLogo,logo,logoHeight,logoAlt,brandText,brandColor,brandFont,brandLetterSpacing,title,titleColor,titleFont,body,bodyColor,bodyFont,accentText,accentColor,accentUnderline,framerForm,emailPlaceholder,inputBackground,inputBorderColor,inputBorderFocusColor,inputTextColor,inputRadius,inputFont,buttonLabel,buttonBackground,buttonHoverBackground,buttonTextColor,buttonRadius,buttonFont,image,imageFit,imageCaption,imageCaptionColor,imageCaptionFont,showLegal,legalText,legalColor,legalFont,privacyLabel,privacyUrl,termsLabel,termsUrl,successTitle,successMessage,downloadFile,downloadFilename,downloadAgainLabel}=props;const inCanvas=RenderTarget.current()===RenderTarget.canvas;const inThumbnail=RenderTarget.current()===RenderTarget.thumbnail;// Responsive: stack to single column on phones / very narrow screens\nconst isMobile=useIsMobile(640);const[open,setOpen]=React.useState(false);const[submitted,setSubmitted]=React.useState(false);const[hovering,setHovering]=React.useState(false);const[focused,setFocused]=React.useState(false);const[email,setEmail]=React.useState(\"\");const[errorMsg,setErrorMsg]=React.useState(\"\");const[submitting,setSubmitting]=React.useState(false);const STORAGE_KEY=sessionKey||\"framer-subscribe-gate\";const framerFormHostRef=React.useRef(null);const resolvedImage=resolveImageSrc(image);const resolvedLogo=resolveImageSrc(logo);const resolvedFileUrl=resolveImageSrc(downloadFile)// ControlType.File comes through the same as image\n;const hasDownload=!!resolvedFileUrl;/* -- Visibility / delay -- */React.useEffect(()=>{if(inCanvas){setOpen(!!showInCanvas);return;}if(inThumbnail){setOpen(true);return;}let alreadySubscribed=false;try{alreadySubscribed=typeof window!==\"undefined\"&&window.sessionStorage.getItem(STORAGE_KEY)===\"true\";}catch(e){// sessionStorage may be unavailable; fall through and show\n}if(alreadySubscribed){setOpen(false);return;}const t=window.setTimeout(()=>setOpen(true),Math.max(0,Number(delaySeconds)||0)*1e3);return()=>window.clearTimeout(t);},[delaySeconds,showInCanvas,inCanvas,inThumbnail,STORAGE_KEY]);/* -- Lock scroll while open -- */React.useEffect(()=>{if(inCanvas)return;if(open){const previous=document.body.style.overflow;document.body.style.overflow=\"hidden\";return()=>{document.body.style.overflow=previous;};}},[open,inCanvas]);/* -- Escape key dismisses the popup unless Stubborn mode is active before submission.\n       After submission, users can close manually even in Stubborn mode. -- */React.useEffect(()=>{if(inCanvas)return;if(!open||requireSubscription&&!submitted)return;const onKey=e=>{if(e.key===\"Escape\")setOpen(false);};window.addEventListener(\"keydown\",onKey);return()=>window.removeEventListener(\"keydown\",onKey);},[open,requireSubscription,submitted,inCanvas]);/* -- Mark subscribed -- */// Popup stays open after submission so the visitor can use the \"Download\n// again\" button as many times as they need. They dismiss it manually via\n// the close X, by clicking the overlay, or by pressing Escape — and those\n// mechanisms are now ALL enabled once `submitted` is true, even in\n// Stubborn mode.\nconst markSubscribed=React.useCallback(()=>{try{window.sessionStorage.setItem(STORAGE_KEY,\"true\");}catch(e){// ignore\n}setSubmitted(true);},[STORAGE_KEY]);/* -- Submit through the slotted Framer Form -- */const handleSubmit=React.useCallback(()=>{const value=email.trim();if(!isValidEmail(value)){setErrorMsg(\"Please enter a valid email address.\");return;}setErrorMsg(\"\");// Canvas: skip the real submission so editors can preview the success\n// state without actually firing a form post.\nif(inCanvas){markSubscribed();return;}const host=framerFormHostRef.current;const form=host?.querySelector(\"form\");if(!form){// eslint-disable-next-line no-console\nconsole.warn(\"[SubscribeGate] No Framer Form connected. \"+\"Drop a Framer Form into the 'Framer Form' slot so submissions are captured.\");markSubscribed();return;}setSubmitting(true);try{// Find the form's own email input. We try several heuristics so\n// this works regardless of how the user named the input in their\n// Framer Form: name=\"email\", type=\"email\", autocomplete=\"email\",\n// or a label containing \"email\".\nconst all=Array.from(form.querySelectorAll(\"input, textarea\"));const emailInput=all.find(i=>(i.name||\"\").toLowerCase()===\"email\")||all.find(i=>(i.type||\"\").toLowerCase()===\"email\")||all.find(i=>(i.autocomplete||\"\").toLowerCase().includes(\"email\"))||all.find(i=>(i.placeholder||\"\").toLowerCase().includes(\"email\"))||// Last resort: the first non-hidden, non-button text input\nall.find(i=>i.type!==\"hidden\"&&i.type!==\"submit\"&&i.type!==\"button\"&&i.type!==\"checkbox\"&&i.type!==\"radio\");if(emailInput){// Setting the value via the native setter + dispatching input\n// events is the React-controlled-input dance that lets the\n// form's own React state update so its `required`/`type=email`\n// validation passes.\nsetNativeInputValue(emailInput,value);}// Belt-and-suspenders: also append a hidden input so any code path\n// that builds FormData from the form picks up the value.\nform.querySelectorAll('input[data-subscribe-gate=\"1\"]').forEach(n=>n.remove());// Only inject the duplicate \"email\" if there isn't an existing\n// email input that matches by name (avoids ambiguity for backends\n// that use `formData.get(\"email\")`).\nconst hasEmailNamed=all.some(i=>(i.name||\"\").toLowerCase()===\"email\");if(!hasEmailNamed){const hidden=document.createElement(\"input\");hidden.type=\"hidden\";hidden.name=\"email\";hidden.value=value;hidden.setAttribute(\"data-subscribe-gate\",\"1\");form.appendChild(hidden);}// Defer the click one tick so React can flush the state update\n// triggered by setNativeInputValue. This is the part that was\n// failing before — clicking submit synchronously meant Framer's\n// submit handler read stale state (empty email).\nwindow.setTimeout(()=>{try{const submitBtn=form.querySelector('button[type=\"submit\"], input[type=\"submit\"]');if(submitBtn){submitBtn.click();}else if(typeof form.requestSubmit===\"function\"){form.requestSubmit();}else{form.submit();}}catch(innerErr){// eslint-disable-next-line no-console\nconsole.error(\"[SubscribeGate] Submission failed:\",innerErr);}markSubscribed();// Trigger the download alongside the form submission\nif(resolvedFileUrl){triggerDownload(resolvedFileUrl,downloadFilename);}},0);}catch(e){// eslint-disable-next-line no-console\nconsole.error(\"[SubscribeGate] Submission error:\",e);setErrorMsg(\"Something went wrong. Please try again in a moment.\");setSubmitting(false);}},[email,inCanvas,markSubscribed,resolvedFileUrl,downloadFilename]);/* ---------------------------- Styles ---------------------------- */// Effective sizes — shrink on mobile so nothing overflows or feels cramped\nconst effectivePadding=isMobile?Math.max(20,Math.round(contentPadding*.6)):contentPadding;const effectiveRadius=isMobile?Math.min(cornerRadius,20):cornerRadius;const effectiveMediaMin=isMobile?200:320;const closeSize=isMobile?32:36;// In Framer canvas, render the popup INSIDE the component's frame using\n// absolute positioning — that way editors can see and tweak it without\n// publishing. At runtime, use fixed positioning so it covers the viewport.\nconst overlayStyle={position:inCanvas?\"absolute\":\"fixed\",inset:0,zIndex:inCanvas?1:2147483e3,display:\"flex\",alignItems:isMobile?\"flex-end\":\"center\",justifyContent:\"center\",padding:isMobile?0:24,background:overlayColor,backdropFilter:`blur(${overlayBlur}px)`,WebkitBackdropFilter:`blur(${overlayBlur}px)`,overflowY:\"auto\",WebkitOverflowScrolling:\"touch\"};// On mobile the media column collapses on top of content; on desktop the\n// user's chosen \"Image\" position (left/right/none) controls the grid.\nconst stackOnMobile=isMobile&&imagePosition!==\"none\";const cardStyle={position:\"relative\",display:\"grid\",gridTemplateColumns:imagePosition===\"none\"||isMobile?\"1fr\":\"1fr 1fr\",gridTemplateRows:stackOnMobile?\"auto 1fr\":\"1fr\",gridTemplateAreas:imagePosition===\"none\"?`\"content\"`:stackOnMobile?`\"media\" \"content\"`:imagePosition===\"left\"?`\"media content\"`:`\"content media\"`,width:\"100%\",maxWidth:isMobile?\"100%\":maxWidth,// On mobile, the popup acts as a bottom-sheet — full width, top corners rounded\nborderTopLeftRadius:effectiveRadius,borderTopRightRadius:effectiveRadius,borderBottomLeftRadius:isMobile?0:effectiveRadius,borderBottomRightRadius:isMobile?0:effectiveRadius,background:cardBackground,overflow:\"hidden\",// Gumroad-style: thick black border + hard offset shadow (no blur)\nborder:\"2px solid #000000\",boxShadow:isMobile?\"none\":\"8px 8px 0 0 #000000\",maxHeight:isMobile?\"92vh\":\"none\"};const contentStyle={gridArea:\"content\",padding:effectivePadding,display:\"flex\",flexDirection:\"column\",gap:isMobile?16:22,minWidth:0,justifyContent:\"center\",overflowY:\"auto\"};const mediaStyle={gridArea:\"media\",position:\"relative\",minHeight:effectiveMediaMin,// On mobile, cap media so content stays visible above-the-fold\nmaxHeight:isMobile?240:undefined,background:\"#eef1f6\",overflow:\"hidden\"};const closeBtnStyle={position:\"absolute\",top:isMobile?10:14,right:isMobile?10:14,width:closeSize,height:closeSize,borderRadius:4,background:\"#FFFFFF\",border:\"2px solid #000000\",cursor:\"pointer\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",boxShadow:\"2px 2px 0 0 #000000\",zIndex:2,color:\"#000000\",padding:0};const fieldHeight=isMobile?48:52;const inputStyleBase={width:\"100%\",height:fieldHeight,padding:isMobile?\"0 14px\":\"0 16px\",color:inputTextColor,background:inputBackground,// Gumroad-style: thicker border, on focus add a hard offset shadow\nborder:`1.5px solid ${focused?inputBorderFocusColor:inputBorderColor}`,borderRadius:inputRadius,outline:\"none\",boxSizing:\"border-box\",transition:\"box-shadow 120ms ease, border-color 120ms ease\",boxShadow:focused?\"2px 2px 0 0 #000000\":\"0 0 0 0 transparent\",// 16px prevents iOS Safari from auto-zooming on focus\n...fontToStyle(inputFont,{fontSize:isMobile?16:15})};// Gumroad-style: 2px black border, hard offset shadow at rest. On hover\n// the button translates 2px down/right and the shadow shrinks 2px — a\n// signature \"press\" effect that makes the corner stay visually anchored.\nconst buttonStyleBase={width:\"100%\",height:fieldHeight,border:\"2px solid #000000\",borderRadius:buttonRadius,cursor:submitting?\"wait\":\"pointer\",color:buttonTextColor,background:hovering?buttonHoverBackground:buttonBackground,letterSpacing:.2,transition:\"transform 120ms ease, box-shadow 120ms ease, background 120ms ease\",transform:hovering&&!submitting?\"translate(2px, 2px)\":\"none\",boxShadow:hovering&&!submitting?\"2px 2px 0 0 #000000\":\"4px 4px 0 0 #000000\",opacity:submitting?.85:1,...fontToStyle(buttonFont,{fontSize:isMobile?16:15,fontWeight:700})};const brandRowStyle={display:\"flex\",alignItems:\"center\",justifyContent:\"flex-start\",gap:10,marginBottom:-8};/* ---------------------------- Render ---------------------------- */const noFormConnected=!framerForm;return /*#__PURE__*/_jsxs(\"div\",{style:{// Fill the component's frame so the canvas has something to\n// render — without this, the JSX has only fixed/absolute\n// children and the bounding box collapses to 0×0 (invisible).\nwidth:\"100%\",height:\"100%\",minHeight:inCanvas?480:undefined,position:\"relative\"},children:[/*#__PURE__*/_jsx(\"div\",{ref:framerFormHostRef,style:{position:\"absolute\",width:0,height:0,overflow:\"hidden\",left:-9999},children:framerForm}),inCanvas&&noFormConnected&&/*#__PURE__*/_jsxs(\"div\",{style:{position:\"absolute\",top:8,left:8,right:8,zIndex:2147483647,padding:\"10px 14px\",background:\"#FEF3C7\",color:\"#92400E\",border:\"1px solid #FCD34D\",borderRadius:8,fontFamily:\"Inter, system-ui, sans-serif\",fontSize:12.5,lineHeight:1.4},children:[/*#__PURE__*/_jsx(\"b\",{children:\"SubscribeGate:\"}),\" No Framer Form connected. Drop a Framer \",/*#__PURE__*/_jsx(\"b\",{children:\"Form\"}),' component into the \"Framer Form\" slot in the properties panel — it must contain an email Input and a Submit button, and be linked to your Forms destination.']}),/*#__PURE__*/_jsx(AnimatePresence,{children:open&&/*#__PURE__*/_jsx(motion.div,{style:overlayStyle,initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.25,ease:[.4,0,.2,1]},role:\"dialog\",\"aria-modal\":\"true\",\"aria-label\":submitted?successTitle:title,onClick:e=>{// In Stubborn mode, the popup can only be dismissed\n// after subscribing. Once submitted, click-outside is allowed.\nif(requireSubscription&&!submitted)return;if(e.target===e.currentTarget)setOpen(false);},children:/*#__PURE__*/_jsxs(motion.div,{style:cardStyle,initial:{opacity:0,y:24,scale:.98},animate:{opacity:1,y:0,scale:1},exit:{opacity:0,y:12,scale:.98},transition:{duration:.32,ease:[.16,1,.3,1]},children:[(!requireSubscription||submitted)&&/*#__PURE__*/_jsx(\"button\",{\"aria-label\":\"Close\",style:closeBtnStyle,onClick:()=>setOpen(false),onMouseDown:e=>e.preventDefault(),children:/*#__PURE__*/_jsx(\"svg\",{width:\"12\",height:\"12\",viewBox:\"0 0 14 14\",fill:\"none\",children:/*#__PURE__*/_jsx(\"path\",{d:\"M1 1l12 12M13 1L1 13\",stroke:\"currentColor\",strokeWidth:\"2.4\",strokeLinecap:\"square\"})})}),imagePosition!==\"none\"&&/*#__PURE__*/_jsxs(\"div\",{style:mediaStyle,children:[resolvedImage?/*#__PURE__*/_jsx(\"img\",{src:resolvedImage,alt:\"\",style:{width:\"100%\",height:\"100%\",objectFit:imageFit,display:\"block\"}}):null,imageCaption?/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:isMobile?18:24,bottom:isMobile?16:22,color:imageCaptionColor,textShadow:\"0 1px 12px rgba(0,0,0,0.25)\",maxWidth:\"85%\",...fontToStyle(imageCaptionFont,{fontSize:isMobile?22:28,lineHeight:1.1,fontWeight:700,letterSpacing:-.5})},children:imageCaption}):null]}),/*#__PURE__*/_jsx(\"div\",{style:contentStyle,children:!submitted?/*#__PURE__*/_jsxs(_Fragment,{children:[showLogo&&resolvedLogo?/*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",justifyContent:\"flex-start\",marginBottom:brandText?-4:-6},children:/*#__PURE__*/_jsx(\"img\",{src:resolvedLogo,alt:logoAlt||\"\",style:{height:isMobile?Math.min(logoHeight,Math.max(20,logoHeight-4)):logoHeight,width:\"auto\",display:\"block\",objectFit:\"contain\"}})}):null,brandText?/*#__PURE__*/_jsx(\"div\",{style:brandRowStyle,children:/*#__PURE__*/_jsx(\"span\",{style:{color:brandColor,letterSpacing:brandLetterSpacing,textTransform:\"uppercase\",...fontToStyle(brandFont,{fontSize:isMobile?11:12,fontWeight:700})},children:brandText})}):null,/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",// 40% tighter than the parent\n// contentStyle gap so header and\n// description sit close together.\ngap:isMobile?10:13},children:[/*#__PURE__*/_jsx(\"h2\",{style:{margin:0,color:titleColor,lineHeight:1.15,letterSpacing:-.5,...fontToStyle(titleFont,{fontSize:isMobile?26:36,fontWeight:600})},children:title}),/*#__PURE__*/_jsxs(\"p\",{style:{margin:0,color:bodyColor,...fontToStyle(bodyFont,{fontSize:isMobile?14:15,lineHeight:1.55})},children:[body,accentText?/*#__PURE__*/_jsxs(_Fragment,{children:[\" \",/*#__PURE__*/_jsx(\"span\",{style:{color:accentColor,fontWeight:600,textDecoration:accentUnderline?\"underline\":\"none\",textUnderlineOffset:3},children:accentText})]}):null]})]}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",// 16px gap accounts for the input's 2px focus shadow\n// and the button's 4px offset shadow above it,\n// leaving a clean visible gap between them.\ngap:isMobile?14:16,// Negative top margin pulls the form up, reducing\n// the visible body→input gap by ~40% (down from\n// 30px to 18px on desktop, 24px to 14px on mobile).\nmarginTop:isMobile?-2:-4},children:[/*#__PURE__*/_jsx(\"label\",{htmlFor:\"subscribe-gate-email\",style:{position:\"absolute\",width:1,height:1,overflow:\"hidden\",clip:\"rect(0 0 0 0)\"},children:\"Email address\"}),/*#__PURE__*/_jsx(\"input\",{id:\"subscribe-gate-email\",type:\"email\",autoComplete:\"email\",placeholder:emailPlaceholder,value:email,disabled:submitting,onChange:e=>{setEmail(e.currentTarget.value);if(errorMsg)setErrorMsg(\"\");},onFocus:()=>setFocused(true),onBlur:()=>setFocused(false),onKeyDown:e=>{if(e.key===\"Enter\"&&!submitting){e.preventDefault();handleSubmit();}},style:inputStyleBase}),errorMsg?/*#__PURE__*/_jsx(\"div\",{role:\"alert\",style:{color:\"#D93025\",fontSize:13,lineHeight:1.4,marginTop:-2},children:errorMsg}):null,/*#__PURE__*/_jsx(\"button\",{type:\"button\",disabled:submitting,style:buttonStyleBase,onClick:handleSubmit,onMouseEnter:()=>setHovering(true),onMouseLeave:()=>setHovering(false),children:submitting?\"Submitting…\":buttonLabel})]}),showLegal?/*#__PURE__*/_jsxs(\"p\",{style:{margin:0,color:legalColor,...fontToStyle(legalFont,{fontSize:12.5,lineHeight:1.5})},children:[legalText,\" \",privacyUrl&&privacyLabel?/*#__PURE__*/_jsx(\"a\",{href:privacyUrl,target:\"_blank\",rel:\"noreferrer\",style:{color:legalColor,textDecoration:\"underline\"},children:privacyLabel}):null,privacyUrl&&termsUrl&&privacyLabel&&termsLabel?\" and \":\" \",termsUrl&&termsLabel?/*#__PURE__*/_jsx(\"a\",{href:termsUrl,target:\"_blank\",rel:\"noreferrer\",style:{color:legalColor,textDecoration:\"underline\"},children:termsLabel}):null,\".\"]}):null]}):/*#__PURE__*/_jsx(SuccessState,{title:successTitle,message:successMessage,titleFont:titleFont,bodyFont:bodyFont,titleColor:titleColor,bodyColor:bodyColor,accent:buttonBackground,accentText:buttonTextColor,buttonFont:buttonFont,buttonRadius:buttonRadius,downloadAgainLabel:hasDownload?downloadAgainLabel:undefined,onDownloadAgain:hasDownload?()=>triggerDownload(resolvedFileUrl,downloadFilename):undefined})})]},\"card\")},\"overlay\")})]});}/* ---------------------------- Success state ---------------------------- */function SuccessState(props){const[hovering,setHovering]=React.useState(false);return /*#__PURE__*/_jsxs(motion.div,{initial:{opacity:0,y:8},animate:{opacity:1,y:0},transition:{duration:.35,ease:[.16,1,.3,1]},style:{display:\"flex\",flexDirection:\"column\",alignItems:\"center\",justifyContent:\"center\",textAlign:\"center\",padding:\"32px 8px\",gap:18},children:[/*#__PURE__*/_jsx(motion.div,{initial:{scale:.6,opacity:0},animate:{scale:1,opacity:1},transition:{type:\"spring\",stiffness:260,damping:18,delay:.05},style:{width:64,height:64,// Gumroad-style: square badge with thick black border + hard offset shadow\nborderRadius:6,border:\"2px solid #000000\",background:props.accent,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",boxShadow:\"4px 4px 0 0 #000000\"},children:/*#__PURE__*/_jsx(\"svg\",{width:\"28\",height:\"28\",viewBox:\"0 0 28 28\",fill:\"none\",children:/*#__PURE__*/_jsx(motion.path,{d:\"M6 14.5L12 20L22 9\",stroke:\"#000000\",strokeWidth:\"3\",strokeLinecap:\"round\",strokeLinejoin:\"round\",initial:{pathLength:0},animate:{pathLength:1},transition:{duration:.4,delay:.15}})})}),/*#__PURE__*/_jsx(\"h3\",{style:{margin:0,color:props.titleColor,letterSpacing:-.3,...fontToStyle(props.titleFont,{fontSize:24,fontWeight:600})},children:props.title}),/*#__PURE__*/_jsx(\"p\",{style:{margin:0,maxWidth:320,color:props.bodyColor,...fontToStyle(props.bodyFont,{fontSize:15,lineHeight:1.55})},children:props.message}),props.downloadAgainLabel&&props.onDownloadAgain?/*#__PURE__*/_jsxs(\"button\",{type:\"button\",onClick:props.onDownloadAgain,onMouseEnter:()=>setHovering(true),onMouseLeave:()=>setHovering(false),style:{marginTop:12,height:48,padding:\"0 24px\",border:\"2px solid #000000\",borderRadius:props.buttonRadius??4,cursor:\"pointer\",color:props.accentText||\"#000000\",background:props.accent,// Gumroad-style press-on-hover\ntransform:hovering?\"translate(2px, 2px)\":\"none\",boxShadow:hovering?\"2px 2px 0 0 #000000\":\"4px 4px 0 0 #000000\",transition:\"transform 120ms ease, box-shadow 120ms ease\",display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",gap:8,...fontToStyle(props.buttonFont,{fontSize:14,fontWeight:700})},children:[/*#__PURE__*/_jsx(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 16 16\",fill:\"none\",\"aria-hidden\":true,children:/*#__PURE__*/_jsx(\"path\",{d:\"M8 1.5v9.5m0 0L4 7m4 4l4-4M2 13.5h12\",stroke:\"currentColor\",strokeWidth:\"1.6\",strokeLinecap:\"round\",strokeLinejoin:\"round\"})}),props.downloadAgainLabel]}):null]});}/* ---------------------------- Defaults ---------------------------- */SubscribeGate.defaultProps={delaySeconds:5,showInCanvas:true,sessionKey:\"framer-subscribe-gate\",requireSubscription:false,imagePosition:\"right\",cornerRadius:4,overlayColor:\"rgba(0, 0, 0, 0.55)\",overlayBlur:0,cardBackground:\"#FFFFFF\",maxWidth:820,contentPadding:32,showLogo:true,logo:undefined,logoHeight:28,logoAlt:\"\",brandText:\"\",brandColor:\"#000000\",brandLetterSpacing:1.6,brandFont:{fontFamily:\"ABC Whyte, Mabry Pro, Inter\",fontSize:12,fontWeight:700},title:\"Download the documentation\",titleColor:\"#000000\",titleFont:{fontFamily:\"ABC Whyte, Mabry Pro, Inter\",fontSize:32,fontWeight:800,lineHeight:1.1},body:\"Enter your email and we'll unlock the documentation right away.\",bodyColor:\"#000000\",bodyFont:{fontFamily:\"ABC Whyte, Mabry Pro, Inter\",fontSize:15,lineHeight:1.55},accentText:\"\",accentColor:\"#FF90E8\",accentUnderline:false,emailPlaceholder:\"you@email.com\",inputBackground:\"#FFFFFF\",inputBorderColor:\"#000000\",inputBorderFocusColor:\"#000000\",inputTextColor:\"#000000\",inputRadius:4,inputFont:{fontFamily:\"ABC Whyte, Mabry Pro, Inter\",fontSize:15,fontWeight:500},buttonLabel:\"Download now\",buttonBackground:\"#FF90E8\",buttonHoverBackground:\"#FF90E8\",buttonTextColor:\"#000000\",buttonRadius:4,buttonFont:{fontFamily:\"ABC Whyte, Mabry Pro, Inter\",fontSize:15,fontWeight:700},imageFit:\"cover\",imageCaption:\"\",imageCaptionColor:\"#ffffff\",imageCaptionFont:{fontFamily:\"Google Sans, Inter\",fontSize:28,fontWeight:700},showLegal:true,legalText:\"By signing up, you agree to our\",legalColor:\"#000000\",legalFont:{fontFamily:\"ABC Whyte, Mabry Pro, Inter\",fontSize:12},privacyLabel:\"Privacy Policy\",privacyUrl:\"/privacy\",termsLabel:\"Terms of Use\",termsUrl:\"/terms\",successTitle:\"Your documentation is downloading.\",successMessage:\"Check your downloads folder. We've added you to our list — we'll only ping you with updates that matter.\",downloadFile:undefined,downloadFilename:\"\",downloadAgainLabel:\"Download again\"};/* ---------------------------- Property controls ---------------------------- */addPropertyControls(SubscribeGate,{/* —— Trigger —— */delaySeconds:{type:ControlType.Number,title:\"Delay (s)\",defaultValue:5,min:0,max:120,step:1,displayStepper:true,description:\"Seconds to wait before the popup appears.\"},showInCanvas:{type:ControlType.Boolean,title:\"Show in canvas\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Display the popup while editing in Framer.\"},sessionKey:{type:ControlType.String,title:\"Session key\",defaultValue:\"framer-subscribe-gate\",description:\"Key for sessionStorage. Visitor stays unlocked until they close the browser.\"},requireSubscription:{type:ControlType.Boolean,title:\"Stubborn mode\",defaultValue:false,enabledTitle:\"Required\",disabledTitle:\"Optional\",description:\"Required: hides the close button and disables click-outside / Escape. Visitors must submit their email to dismiss.\"},/* —— Framer Form integration —— */framerForm:{type:ControlType.ComponentInstance,title:\"Framer Form\",description:\"Drop a Framer Form component here. It must contain an Input named 'email' and a Submit button. Submissions appear in your Framer Forms dashboard.\"},/* —— Layout —— */imagePosition:{type:ControlType.Enum,title:\"Image\",defaultValue:\"right\",options:[\"left\",\"right\",\"none\"],optionTitles:[\"Left\",\"Right\",\"Hide\"],displaySegmentedControl:true},maxWidth:{type:ControlType.Number,title:\"Max width\",defaultValue:820,min:360,max:1400,step:10},cornerRadius:{type:ControlType.Number,title:\"Radius\",defaultValue:4,min:0,max:64,step:1},contentPadding:{type:ControlType.Number,title:\"Padding\",defaultValue:32,min:16,max:80,step:2},cardBackground:{type:ControlType.Color,title:\"Card BG\",defaultValue:\"#ffffff\"},overlayColor:{type:ControlType.Color,title:\"Overlay\",defaultValue:\"rgba(0, 0, 0, 0.55)\"},overlayBlur:{type:ControlType.Number,title:\"Blur\",defaultValue:0,min:0,max:30,step:1},/* —— Logo (top-left) —— */showLogo:{type:ControlType.Boolean,title:\"Show logo\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\",description:\"Toggle the top-left logo on or off. Hidden state still keeps the uploaded image — useful for A/B testing.\"},logo:{type:ControlType.ResponsiveImage,title:\"Logo\",hidden:props=>props.showLogo===false,description:\"Logo image shown in the top-left, above the eyebrow and title.\"},logoHeight:{type:ControlType.Number,title:\"Logo height\",defaultValue:28,min:16,max:64,step:1,hidden:props=>props.showLogo===false},logoAlt:{type:ControlType.String,title:\"Logo alt\",defaultValue:\"\",placeholder:\"Brand name\",hidden:props=>props.showLogo===false,description:\"Optional alt text for screen readers.\"},/* —— Brand (small eyebrow above the title) —— */brandText:{type:ControlType.String,title:\"Eyebrow\",defaultValue:\"\",placeholder:\"DOCUMENTATION\",description:\"Optional small label shown above the title. Leave blank to hide.\"},brandColor:{type:ControlType.Color,title:\"Eyebrow color\",defaultValue:\"#000000\"},brandFont:{type:ControlType.Font,title:\"Eyebrow font\",controls:\"extended\"},brandLetterSpacing:{type:ControlType.Number,title:\"Eyebrow spacing\",defaultValue:1.6,min:-2,max:8,step:.1},/* —— Title —— */title:{type:ControlType.String,title:\"Title\",defaultValue:\"Download the documentation\"},titleColor:{type:ControlType.Color,title:\"Title color\",defaultValue:\"#000000\"},titleFont:{type:ControlType.Font,title:\"Title font\",controls:\"extended\"},/* —— Body —— */body:{type:ControlType.String,title:\"Body\",defaultValue:\"Enter your email and we'll unlock the documentation right away.\",displayTextArea:true},bodyColor:{type:ControlType.Color,title:\"Body color\",defaultValue:\"#000000\"},bodyFont:{type:ControlType.Font,title:\"Body font\",controls:\"extended\"},accentText:{type:ControlType.String,title:\"Accent text\",defaultValue:\"\",placeholder:\"Optional highlight\",description:\"Optional highlighted span appended to the body.\"},accentColor:{type:ControlType.Color,title:\"Accent color\",defaultValue:\"#FF90E8\"},accentUnderline:{type:ControlType.Boolean,title:\"Underline accent\",defaultValue:false},/* —— Form field styling —— */emailPlaceholder:{type:ControlType.String,title:\"Placeholder\",defaultValue:\"Email address\"},inputBackground:{type:ControlType.Color,title:\"Input BG\",defaultValue:\"#FFFFFF\"},inputBorderColor:{type:ControlType.Color,title:\"Input border\",defaultValue:\"#000000\"},inputBorderFocusColor:{type:ControlType.Color,title:\"Input focus\",defaultValue:\"#000000\"},inputTextColor:{type:ControlType.Color,title:\"Input text\",defaultValue:\"#000000\"},inputRadius:{type:ControlType.Number,title:\"Input radius\",defaultValue:4,min:0,max:40,step:1},inputFont:{type:ControlType.Font,title:\"Input font\",controls:\"extended\"},buttonLabel:{type:ControlType.String,title:\"Button label\",defaultValue:\"Download now\"},buttonBackground:{type:ControlType.Color,title:\"Button BG\",defaultValue:\"#FF90E8\"},buttonHoverBackground:{type:ControlType.Color,title:\"Button hover\",defaultValue:\"#FF90E8\"},buttonTextColor:{type:ControlType.Color,title:\"Button text\",defaultValue:\"#000000\"},buttonRadius:{type:ControlType.Number,title:\"Button radius\",defaultValue:4,min:0,max:40,step:1},buttonFont:{type:ControlType.Font,title:\"Button font\",controls:\"extended\"},/* —— Image —— */image:{type:ControlType.ResponsiveImage,title:\"Image\"},imageFit:{type:ControlType.Enum,title:\"Fit\",defaultValue:\"cover\",options:[\"cover\",\"contain\",\"fill\"],optionTitles:[\"Cover\",\"Contain\",\"Fill\"],displaySegmentedControl:true},imageCaption:{type:ControlType.String,title:\"Caption\",defaultValue:\"\",placeholder:\"Mediterranean Sneakers\\xae\"},imageCaptionColor:{type:ControlType.Color,title:\"Caption color\",defaultValue:\"#ffffff\"},imageCaptionFont:{type:ControlType.Font,title:\"Caption font\",controls:\"extended\"},/* —— Legal —— */showLegal:{type:ControlType.Boolean,title:\"Show legal\",defaultValue:true},legalText:{type:ControlType.String,title:\"Legal text\",defaultValue:\"By signing up, you agree to our\"},legalColor:{type:ControlType.Color,title:\"Legal color\",defaultValue:\"#000000\"},legalFont:{type:ControlType.Font,title:\"Legal font\",controls:\"extended\"},privacyLabel:{type:ControlType.String,title:\"Privacy label\",defaultValue:\"Privacy Policy\"},privacyUrl:{type:ControlType.Link,title:\"Privacy URL\"},termsLabel:{type:ControlType.String,title:\"Terms label\",defaultValue:\"Terms of Use\"},termsUrl:{type:ControlType.Link,title:\"Terms URL\"},/* —— Download (Subscribe-to-download) —— */downloadFile:{type:ControlType.File,title:\"Download file\",// Common types — leave a wide list so any file type works\nallowedFileTypes:[\"pdf\",\"zip\",\"rar\",\"7z\",\"tar\",\"gz\",\"doc\",\"docx\",\"rtf\",\"txt\",\"md\",\"epub\",\"mobi\",\"xls\",\"xlsx\",\"csv\",\"tsv\",\"ppt\",\"pptx\",\"key\",\"pages\",\"numbers\",\"png\",\"jpg\",\"jpeg\",\"gif\",\"webp\",\"svg\",\"bmp\",\"tif\",\"tiff\",\"heic\",\"mp3\",\"wav\",\"ogg\",\"flac\",\"m4a\",\"mp4\",\"mov\",\"webm\",\"mkv\",\"avi\",\"json\",\"xml\",\"yaml\",\"yml\",\"html\",\"htm\",\"css\",\"js\",\"ts\",\"psd\",\"ai\",\"fig\",\"sketch\",\"ttf\",\"otf\",\"woff\",\"woff2\"],description:\"File visitors download after they subscribe. Drop in any file — PDF, ZIP, image, audio, video, etc.\"},downloadFilename:{type:ControlType.String,title:\"Save as\",defaultValue:\"\",placeholder:\"ebook.pdf\",description:\"Optional. Filename used when the browser saves the file. Leave blank to use the original filename.\"},downloadAgainLabel:{type:ControlType.String,title:\"Re-download label\",defaultValue:\"Download again\",description:\"Button shown in the success state so visitors can re-trigger the download.\"},/* —— Success —— */successTitle:{type:ControlType.String,title:\"Success title\",defaultValue:\"Your documentation is downloading.\"},successMessage:{type:ControlType.String,title:\"Success body\",defaultValue:\"Check your downloads folder. We've added you to our list — we'll only ping you with updates that matter.\",displayTextArea:true}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"SubscribeGate\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Popup_form.map","import{ControlType}from\"framer\";export const QUIZ_MULTI_SELECT_AGGREGATES=[\"sum\",\"average\",\"max\",\"min\"];export function normalizeQuizMultiSelectAggregate(raw){if(raw===\"average\"||raw===\"max\"||raw===\"min\"){return raw;}return\"sum\";}export function normalizeOptionPointRows(raw){if(!raw?.length)return[];return raw.map(r=>({optionValue:(r.optionValue??\"\").trim(),points:r.points!==undefined&&Number.isFinite(r.points)?Number(r.points):0})).filter(r=>r.optionValue.length>0);}export function parseOptionPointsAttr(attr){if(!attr)return null;try{const v=JSON.parse(attr);const rows=normalizeOptionPointRows(v.rows);if(!rows.length)return null;const defaultPoints=v.defaultPoints!==undefined&&Number.isFinite(v.defaultPoints)?Number(v.defaultPoints):0;return{defaultPoints,rows};}catch{return null;}}function resolvePartToPoints(part,rows,defaultPoints){const row=rows.find(r=>r.optionValue===part);if(row&&Number.isFinite(row.points))return row.points;return defaultPoints;}function splitMultiSelectValue(value,valueSeparator){return value.split(valueSeparator).map(s=>s.trim()).filter(Boolean);}function aggregateMultiSelectPoints(partPoints,aggregate){if(!partPoints.length)return 0;switch(aggregate){case\"sum\":return partPoints.reduce((sum,p)=>sum+p,0);case\"average\":return partPoints.reduce((sum,p)=>sum+p,0)/partPoints.length;case\"max\":return Math.max(...partPoints);case\"min\":return Math.min(...partPoints);default:return partPoints.reduce((sum,p)=>sum+p,0);}}/** Maximum achievable points for one weighted question. */export function maxWeightedQuestionPoints(parsed,multiSelect,aggregate=\"sum\"){const{rows,defaultPoints}=parsed;if(!rows.length)return 0;if(!multiSelect){const rowMax=Math.max(...rows.map(r=>r.points),defaultPoints);return Number.isFinite(rowMax)?rowMax:defaultPoints;}const positiveSum=rows.filter(r=>r.points>0).reduce((sum,r)=>sum+r.points,0);const maxPoint=Math.max(...rows.map(r=>r.points),defaultPoints);switch(aggregate){case\"sum\":return positiveSum;case\"average\":case\"max\":case\"min\":return Number.isFinite(maxPoint)?maxPoint:defaultPoints;default:return positiveSum;}}export function scoreWeightedFieldValue(value,parsed,opts){const multiSelect=opts.matchMode===\"set\";const aggregate=normalizeQuizMultiSelectAggregate(opts.multiSelectAggregate);const maxPoints=maxWeightedQuestionPoints(parsed,multiSelect,aggregate);const trimmed=value.trim();if(!trimmed){return{earned:0,maxPoints};}if(multiSelect){const sep=opts.valueSeparator??\", \";const parts=splitMultiSelectValue(trimmed,sep);const partPoints=parts.map(part=>resolvePartToPoints(part,parsed.rows,parsed.defaultPoints));const earned=aggregateMultiSelectPoints(partPoints,aggregate);return{earned,maxPoints};}const earned=resolvePartToPoints(trimmed,parsed.rows,parsed.defaultPoints);return{earned,maxPoints};}export function isQuizWeightedConfig(quiz){return!!quiz?.isQuizInput&&quiz.scoringMethod===\"weighted\"&&normalizeOptionPointRows(quiz.optionPoints).length>0;}export const QUIZ_DATA_ATTRIBUTE_KEYS=[\"data-framerforms-quiz\",\"data-framerforms-quiz-scoring\",\"data-framerforms-correct-answer\",\"data-framerforms-quiz-points\",\"data-framerforms-quiz-wrong-points\",\"data-framerforms-quiz-options\",\"data-framerforms-quiz-option-points\",\"data-framerforms-quiz-multiselect-aggregate\"];export function clearQuizDataAttributes(el){for(const key of QUIZ_DATA_ATTRIBUTE_KEYS){el.removeAttribute(key);}}export function applyQuizDataAttributes(el,attrs){clearQuizDataAttributes(el);for(const[key,value]of Object.entries(attrs)){el.setAttribute(key,value);}}export function buildQuizInputDataAttributes(quiz,options){if(!quiz?.isQuizInput)return{};if(isQuizWeightedConfig(quiz)){const rows=normalizeOptionPointRows(quiz.optionPoints);const defaultPoints=quiz.defaultOptionPoints!==undefined&&Number.isFinite(quiz.defaultOptionPoints)?Number(quiz.defaultOptionPoints):0;const attrs={\"data-framerforms-quiz\":\"true\",\"data-framerforms-quiz-scoring\":\"weighted\",\"data-framerforms-quiz-option-points\":JSON.stringify({defaultPoints,rows})};if(quiz.multiSelect){attrs[\"data-framerforms-quiz-multiselect-aggregate\"]=normalizeQuizMultiSelectAggregate(quiz.multiSelectAggregate);}if(options.quizOptionsJson&&Object.keys(options.quizOptionsJson).length){attrs[\"data-framerforms-quiz-options\"]=JSON.stringify(options.quizOptionsJson);}return attrs;}const ca=options.correctAnswer;const hasCorrect=ca!=null&&ca!==\"\"&&!(Array.isArray(ca)&&ca.length===0);if(!hasCorrect)return{};const correctStr=Array.isArray(ca)?JSON.stringify(ca):String(ca);const attrs={\"data-framerforms-quiz\":\"true\",\"data-framerforms-quiz-scoring\":\"correctIncorrect\",\"data-framerforms-correct-answer\":correctStr,\"data-framerforms-quiz-points\":String(quiz.points??1),\"data-framerforms-quiz-wrong-points\":String(quiz.wrongPoints??0)};if(options.quizOptionsJson&&Object.keys(options.quizOptionsJson).length){attrs[\"data-framerforms-quiz-options\"]=JSON.stringify(options.quizOptionsJson);}return attrs;}export function createQuizNestedControls(correctControls,options){const hideUnlessQuiz=inner=>!inner.isQuizInput;const hideUnlessWeighted=inner=>!inner.isQuizInput||inner.scoringMethod!==\"weighted\";const hideQuizMultiSelect=inner=>hideUnlessWeighted(inner)||!options?.supportsMultiSelect;const hideMultiSelectAggregate=inner=>hideQuizMultiSelect(inner)||!inner.multiSelect;const hideUnlessCorrect=inner=>!inner.isQuizInput||(inner.scoringMethod??\"correctIncorrect\")===\"weighted\";const wrappedCorrect={};for(const[key,ctrl]of Object.entries(correctControls)){const c=ctrl;const prevHidden=c.hidden;wrappedCorrect[key]={...c,hidden:inner=>hideUnlessCorrect(inner)||typeof prevHidden===\"function\"&&prevHidden(inner)};}return{isQuizInput:{type:ControlType.Boolean,title:\"Quiz\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},scoringMethod:{type:ControlType.Enum,title:\"Scoring\",options:[\"correctIncorrect\",\"weighted\"],optionTitles:[\"Correct / wrong\",\"Weighted options\"],defaultValue:\"correctIncorrect\",displaySegmentedControl:true,segmentedControlDirection:\"vertical\",hidden:hideUnlessQuiz},...wrappedCorrect,points:{type:ControlType.Number,title:\"Correct\",defaultValue:1,min:-100,max:100,step:1,displayStepper:true,hidden:hideUnlessCorrect},wrongPoints:{type:ControlType.Number,title:\"Wrong\",defaultValue:0,min:-100,max:100,step:1,displayStepper:true,hidden:hideUnlessCorrect},defaultOptionPoints:{type:ControlType.Number,title:\"If no match\",defaultValue:0,min:-1e9,max:1e9,step:.01,displayStepper:true,hidden:hideUnlessWeighted},optionPoints:{type:ControlType.Array,title:\"Points\",defaultValue:[{optionValue:\"\",points:1}],description:\"Points per answer value.\",hidden:hideUnlessWeighted,control:{type:ControlType.Object,controls:{optionValue:{type:ControlType.String,title:\"Value\",defaultValue:\"\",placeholder:\"e.g. 'Option1'\"},points:{type:ControlType.Number,title:\"Points\",defaultValue:1,min:-1e9,max:1e9,step:.01,displayStepper:true}}}},...options?.supportsMultiSelect?{multiSelect:{type:ControlType.Boolean,title:\"Multi-select\",defaultValue:false,enabledTitle:\"Yes\",disabledTitle:\"No\",hidden:hideQuizMultiSelect},multiSelectAggregate:{type:ControlType.Enum,title:\"Calculate\",options:QUIZ_MULTI_SELECT_AGGREGATES,optionTitles:[\"Sum\",\"Average\",\"Highest\",\"Lowest\"],defaultValue:\"sum\",displaySegmentedControl:true,segmentedControlDirection:\"vertical\",description:\"How to combine points when multiple options are selected.\",hidden:hideMultiSelectAggregate}}:{}};}\nexport const __FramerMetadata__ = {\"exports\":{\"clearQuizDataAttributes\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"normalizeOptionPointRows\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"applyQuizDataAttributes\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"maxWeightedQuestionPoints\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CreateQuizNestedControlsOptions\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"NormalizedOptionPoints\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"QuizInputConfig\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"QuizScoringMethod\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"createQuizNestedControls\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"QUIZ_MULTI_SELECT_AGGREGATES\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"QUIZ_DATA_ATTRIBUTE_KEYS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"isQuizWeightedConfig\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"QuizMultiSelectAggregate\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"QuizOptionPointRow\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"normalizeQuizMultiSelectAggregate\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"scoreWeightedFieldValue\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"buildQuizInputDataAttributes\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"parseOptionPointsAttr\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./QuizScoringShared.map","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{ControlType,RenderTarget,withCSS}from\"framer\";import{forwardRef,useEffect,useState,useRef,useId,useCallback}from\"react\";import{motion}from\"framer-motion\";import{createStore}from\"https://framer.com/m/framer/store.js@^1.0.0\";import{parseOptionPointsAttr,scoreWeightedFieldValue,normalizeQuizMultiSelectAggregate}from\"https://framerusercontent.com/modules/itVumdSpaLTGejsnG4cS/6LKYMWPrWe4DJ5B7wYmL/QuizScoringShared.js\";// ---------------------------------------------------------------------------\n// Shared property controls (Insert Frame docs / support)\n// ---------------------------------------------------------------------------\nconst INSERT_FRAME_FRAMER_FORMS_DOCS=\"https://insertframe.io/docs/framerforms\";/** Spread into `addPropertyControls`: “Need help?” → Get support (Framer Forms docs). */export const insertFrameSupportPropertyControl={needHelp:{type:ControlType.Object,title:\"Need help?\",buttonTitle:\"Get support\",icon:\"interaction\",controls:{info:{type:ControlType.Enum,defaultValue:\"info\",options:[\"info\"],optionTitles:[\"Get support 🛟\"],displaySegmentedControl:true,title:\"Get support\",description:`Documentation and live chat: [FramerForms docs](${INSERT_FRAME_FRAMER_FORMS_DOCS}).`}}}};export const useMultiStepFormStore=createStore({});export const useQuizStore=createStore({});/** Typed tuple for consumers (avoids `as` at every call site). */export function useQuizStoreApi(){return useQuizStore();}export function createEmptyQuizScore(){return{correct:0,total:0,points:0,maxPoints:0,answers:{}};}export const useFormSubmittedStore=createStore({});export function useFormSubmittedStoreApi(){return useFormSubmittedStore();}export const HIDDEN_CLASS_NAME=\"framerforms-hidden\";const CANVAS_HIDDEN_CLASS_NAME=\"framerforms-canvas-hidden\";export const useInstanceId=()=>{const id=useId();const cleanId=id.replace(/:/g,\"\");const instanceId=`superfields-${cleanId}`;return instanceId;};export const HiddenInput=/*#__PURE__*/forwardRef(function HiddenInput({name,required,value,setInvalid,onSetValueEvent,noPrefill=false,disabled=false,style:styleProp,...rest},parentRef){const internalRef=useRef(null);const setRefs=useCallback(el=>{internalRef.current=el;if(typeof parentRef===\"function\"){parentRef(el);}else if(parentRef){parentRef.current=el;}},[parentRef]);const prevValueRef=useRef(value);// Store callback in ref to avoid listener churn\nconst onSetValueEventRef=useRef(onSetValueEvent);onSetValueEventRef.current=onSetValueEvent;useEffect(()=>{const element=internalRef.current;if(!element||!onSetValueEventRef.current)return;// Use a wrapper that always calls the latest callback\nconst handler=event=>{onSetValueEventRef.current?.(event);};element.addEventListener(\"framerFormsSetValue\",handler);// Mark as ready AFTER listener is attached - FormPersistence checks for this\nelement.dataset.framerformsSetValueReady=\"true\";return()=>{element.removeEventListener(\"framerFormsSetValue\",handler);delete element.dataset.framerformsSetValueReady;};},[])// Empty deps - only attach once\n;// Dispatch change event when value changes so FormPersistence can track updates\nuseEffect(()=>{const element=internalRef.current;if(!element)return;// Only dispatch if value actually changed (not on initial mount)\nif(prevValueRef.current!==value){prevValueRef.current=value;// Dispatch both input and change events for compatibility\nelement.dispatchEvent(new Event(\"input\",{bubbles:true}));element.dispatchEvent(new Event(\"change\",{bubbles:true}));}},[value]);return /*#__PURE__*/_jsx(\"input\",{ref:setRefs,type:\"text\",\"data-framerforms-set-value-event\":!!onSetValueEvent,\"data-framerforms-no-prefill\":noPrefill,...rest,style:{position:\"absolute\",opacity:0,pointerEvents:\"none\",inset:0,...styleProp},tabIndex:-1,name:name,required:required,value:value,disabled:disabled,onChange:()=>{},onInvalid:event=>{event.preventDefault();setInvalid(true);}});});const HideElementComponent=/*#__PURE__*/forwardRef(({},ref)=>{return /*#__PURE__*/_jsx(\"div\",{ref:ref,className:HIDDEN_CLASS_NAME});});export const HideElement=withCSS(HideElementComponent,[`div:has(> .${HIDDEN_CLASS_NAME}) { display: none; }`,`.${HIDDEN_CLASS_NAME} { display: none; }`],HIDDEN_CLASS_NAME);HideElement.displayName=\"FramerForms/Hide Element\";export const HiddenComponentLabel=/*#__PURE__*/forwardRef(function HiddenComponentLabel({text,subtext=\"\",children=null,...otherProps},ref){const isCanvas=RenderTarget.current()===RenderTarget.canvas;return isCanvas?/*#__PURE__*/_jsxs(\"div\",{\"data-framerforms\":true,...otherProps,ref:ref,className:CANVAS_HIDDEN_CLASS_NAME,style:{backgroundColor:\"rgba(187, 187, 187, 0.15)\",borderRadius:10,padding:\"12px 16px\",fontFamily:\"Inter\",fontWeight:500,fontSize:12,color:\"#999\",display:\"flex\",flexDirection:\"column\",gap:4,alignItems:\"center\",textAlign:\"center\",width:\"100%\",height:\"100%\",textWrap:\"nowrap\"},children:[children,text,subtext&&/*#__PURE__*/_jsx(\"span\",{style:{opacity:.7,whiteSpace:\"pre\",lineHeight:1.4},children:subtext}),/*#__PURE__*/_jsx(Border,{width:\"1px\",style:\"solid\",borderColor:\"rgba(136, 136, 136, 0.1)\"}),/*#__PURE__*/_jsx(\"style\",{dangerouslySetInnerHTML:{__html:`\n                        [data-framer-component-container=\"true\"] div:has(> .${CANVAS_HIDDEN_CLASS_NAME}) {\n                            display: none !important;\n                        }`}})]}):/*#__PURE__*/_jsxs(\"div\",{...otherProps,ref:ref,className:HIDDEN_CLASS_NAME,children:[/*#__PURE__*/_jsx(HideElement,{}),children]});});HiddenComponentLabel.displayName=\"FramerForms/Hidden Component Label\";export function iconProp({size=16,buttonTitle=\"Icon\",controls={}}={}){return{type:ControlType.Object,buttonTitle,optional:true,defaultValue:{color:\"#999\",size},controls:{image:{type:ControlType.Image},color:{type:ControlType.Color,optional:true,defaultValue:\"#999\"},size:{type:ControlType.Number,defaultValue:size,min:1,step:1,displayStepper:true},...controls}};}export function Icon({image,color,size,style={},defaultImage}){return /*#__PURE__*/_jsx(\"div\",{style:{width:size,height:size,minWidth:size,minHeight:size,pointerEvents:\"none\",backgroundColor:color,backgroundImage:color?\"none\":image?`url('${image}')`:defaultImage,maskImage:image?`url('${image}')`:defaultImage,backgroundSize:\"contain\",backgroundPosition:\"center\",maskSize:\"contain\",maskPosition:\"center\",...style}});}Icon.displayName=\"FramerForms/Icon\";export function Border({width,style,transition=null,borderColor=\"inherit\",opacity=1}){return /*#__PURE__*/_jsx(motion.div,{animate:{borderColor,opacity},style:{position:\"absolute\",inset:0,borderWidth:width,borderStyle:style,borderRadius:\"inherit\",pointerEvents:\"none\"},initial:false,transition:transition});}Border.displayName=\"FramerForms/Border Staging\";export function createBackground(fill,on=null,focused=null,invalid=null){if(fill){const onOff=typeof on==\"boolean\";if(fill.type==\"color\"){let color=invalid&&fill.colorInvalid||focused&&fill.colorFocus||(onOff?on?fill.colorOn:fill.colorOff:fill.color);return{backgroundColor:color,backgroundImage:\"none\"};}else{const colorA=invalid&&fill.colorAInvalid||focused&&fill.colorAFocus||(onOff?on?fill.colorAOn:fill.colorAOff:fill.colorA);const colorB=invalid&&fill.colorBInvalid||focused&&fill.colorBFocus||(onOff?on?fill.colorBOn:fill.colorBOff:fill.colorB);return{backgroundColor:\"none\",backgroundImage:`linear-gradient(${fill.gradientAngle}deg, ${colorB}, ${colorA})`};}}return{};}export function parsePadding(padding){if(typeof padding!==\"string\"){return[0,0,0,0];}const values=padding.split(\" \");const parsedValues=values.map(value=>parseInt(value.replace(\"px\",\"\"),10));switch(parsedValues.length){case 1:const p=parsedValues[0];return[p,p,p,p];case 4:return parsedValues;}return[0,0,0,0];}export function fillProp({onOff=false,focus=true,invalid=true,optional=false,hidden=null,color=\"rgba(187, 187, 187, 0.15)\",colorA=\"#BBB\",colorB=\"#676767\",colorOn=\"rgba(70, 160, 219, 0.2)\",colorAOn=\"#66C2FF\",colorBOn=\"#0099FF\",colorOff=\"rgba(187, 187, 187, 0.15)\",colorAOff=\"#BBB\",colorBOff=\"#676767\"}={}){return{type:ControlType.Object,optional,hidden,icon:\"color\",defaultValue:{type:\"color\",...onOff?{colorOn,colorOff}:{color,colorA,colorB}},controls:{type:{type:ControlType.Enum,defaultValue:\"color\",options:[\"color\",\"linearGradient\"],optionTitles:[\"Color\",\"Gradient\"],displaySegmentedControl:true},...onOff?{colorOn:{type:ControlType.Color,defaultValue:colorOn,hidden:props=>props.type!==\"color\"},colorOff:{type:ControlType.Color,defaultValue:colorOff,hidden:props=>props.type!==\"color\"}}:{color:{type:ControlType.Color,defaultValue:color,hidden:props=>props.type!==\"color\"}},...focus?{colorFocus:{type:ControlType.Color,optional:true,title:\"Focus\",hidden:props=>props.type!==\"color\"}}:{},...invalid?{colorInvalid:{type:ControlType.Color,optional:true,title:\"Invalid\",hidden:props=>props.type!==\"color\"}}:{},...onOff?{colorAOn:{type:ControlType.Color,defaultValue:colorAOn,title:\"Colors On\",hidden:props=>props.type!==\"linearGradient\"},colorBOn:{type:ControlType.Color,defaultValue:colorBOn,title:\" \",hidden:props=>props.type!==\"linearGradient\"},colorAOff:{type:ControlType.Color,defaultValue:colorAOff,title:\"Colors Off\",hidden:props=>props.type!==\"linearGradient\"},colorBOff:{type:ControlType.Color,defaultValue:colorBOff,title:\" \",hidden:props=>props.type!==\"linearGradient\"}}:{colorA:{type:ControlType.Color,defaultValue:colorA,title:\"Colors\",hidden:props=>props.type!==\"linearGradient\"},colorB:{type:ControlType.Color,defaultValue:colorB,title:\" \",hidden:props=>props.type!==\"linearGradient\"}},...focus?{colorAFocus:{type:ControlType.Color,optional:true,title:\"Focus\",hidden:props=>props.type!==\"linearGradient\"},colorBFocus:{type:ControlType.Color,optional:true,title:\" \",hidden:props=>props.type!==\"linearGradient\"}}:{},...invalid?{colorAInvalid:{type:ControlType.Color,optional:true,title:\"Invalid\",hidden:props=>props.type!==\"linearGradient\"},colorBInvalid:{type:ControlType.Color,optional:true,title:\" \",hidden:props=>props.type!==\"linearGradient\"}}:{},gradientAngle:{type:ControlType.Number,defaultValue:0,title:\"Angle\",step:1,min:0,max:360,unit:\"\\xb0\",hidden:props=>props.type!=\"linearGradient\"}}};}export function borderProp({onOff=false,focus=true,invalid=true,defaultValue=true,color=\"rgba(136, 136, 136, 0.1)\",colorOn=\"#0099FF\",colorOff=\"rgba(136, 136, 136, 0.1)\",colorFocus=\"#0099FF\",colorInvalid=\"#FF5A6F\",hidden=null}={}){return{type:ControlType.Object,optional:true,hidden,defaultValue:defaultValue?{color,colorOn,colorOff,colorFocus,colorInvalid,width:\"1px\"}:undefined,controls:{...onOff?{colorOn:{type:ControlType.Color,defaultValue:colorOn},colorOff:{type:ControlType.Color,defaultValue:colorOff}}:{color:{type:ControlType.Color,defaultValue:color}},...focus?{colorFocus:{type:ControlType.Color,defaultValue:colorFocus,optional:true,title:\"Focus\"}}:{},...invalid?{colorInvalid:{type:ControlType.Color,defaultValue:colorInvalid,optional:true,title:\"Invalid\"}}:{},width:{type:ControlType.Padding,defaultValue:\"1px\"},style:{type:ControlType.Enum,defaultValue:\"solid\",options:[\"solid\",\"dashed\",\"dotted\",\"double\"],optionTitles:[\"Solid\",\"Dashed\",\"Dotted\",\"Double\"]}}};}export function shadowsProp({invalid=true,onOff=false}={}){return{type:ControlType.Object,buttonTitle:\"Shadows\",optional:true,controls:{...onOff?{on:{type:ControlType.BoxShadow,defaultValue:\"rgba(0, 153, 255, 0.5) 0px 2px 4px 0px\"},off:{type:ControlType.BoxShadow,defaultValue:\"rgba(0, 0, 0, 0.25) 0px 2px 4px 0px\"}}:{default:{type:ControlType.BoxShadow,defaultValue:\"rgba(0, 0, 0, 0.25) 0px 2px 4px 0px\"}},focus:{type:ControlType.BoxShadow},invalid:invalid?{type:ControlType.BoxShadow}:null}};}export function useCanvasState(ref){const[totalPages,setTotalPages]=useState(1);useEffect(()=>{const element=ref.current;let pages=null;function updateState(){setTotalPages(pages?pages.children.length:1);}if(element){const multiStepForms=document.querySelectorAll(\"div[data-framerforms-multi-step-form]\");for(const multiStepForm of multiStepForms){const form=multiStepForm.closest(\"form\")||multiStepForm.parentElement.parentElement.parentElement;if(form&&isAncestor(form,element)){pages=form.querySelector(':scope > [data-framer-name=\"Pages\" i]');}}}updateState();if(pages){const observer=new MutationObserver((mutationsList,observer)=>{for(let mutation of mutationsList){if(mutation.type===\"childList\"){updateState();}}});observer.observe(pages,{childList:true});return()=>observer.disconnect();}},[]);return{page:0,totalPages};}export function isAncestor(ancestorElement,descendantElement){if(!ancestorElement||!descendantElement){return false;}let currentElement=descendantElement;while(currentElement!==null){if(currentElement===ancestorElement){return true;}currentElement=currentElement.parentElement;}return false;}export function getFormInfo(element){const form=element?.closest(\"form\")??null;let formId=null;let pages=null;if(form){formId=form.getAttribute(\"framerforms-id\");pages=form.querySelector(':scope > [data-framer-name=\"Pages\" i]');if(!formId){formId=uuid();form.setAttribute(\"framerforms-id\",formId);}}return{form,formId,pages};}function uuid(){let d=new Date().getTime()// Timestamp\n;let d2=performance&&performance.now&&performance.now()*1e3||0// Time in microseconds since page-load or 0 if unsupported\n;return\"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g,function(c){let r=Math.random()*16// random number between 0 and 16\n;if(d>0){// Use timestamp until depleted\nr=(d+r)%16|0;d=Math.floor(d/16);}else{// Use microseconds since page-load if supported\nr=(d2+r)%16|0;d2=Math.floor(d2/16);}return(c===\"x\"?r:r&3|8).toString(16);});}function parseQuizOptions(attr){if(!attr)return{};try{const v=JSON.parse(attr);return{caseSensitive:Boolean(v.caseSensitive),ignoreSpaces:Boolean(v.ignoreSpaces),useRegex:Boolean(v.useRegex),matchMode:v.matchMode===\"set\"?\"set\":\"exact\",valueSeparator:typeof v.valueSeparator===\"string\"?v.valueSeparator:\", \",multiSelectAggregate:normalizeQuizMultiSelectAggregate(v.multiSelectAggregate)};}catch{return{};}}function readQuizMultiSelectAggregate(el,opts){const fromAttr=el.getAttribute(\"data-framerforms-quiz-multiselect-aggregate\");if(fromAttr){return normalizeQuizMultiSelectAggregate(fromAttr);}return normalizeQuizMultiSelectAggregate(opts.multiSelectAggregate);}function parseExpectedAnswer(raw){if(raw==null||raw===\"\")return\"\";const trimmed=raw.trim();if(trimmed.startsWith(\"[\")&&trimmed.endsWith(\"]\")){try{const v=JSON.parse(trimmed);if(Array.isArray(v)){return v.map(x=>String(x));}}catch{return raw;}}return raw;}function normalizeCompare(s,ignoreSpaces,caseSensitive){let out=s;if(ignoreSpaces)out=out.replace(/\\s/g,\"\");if(!caseSensitive)out=out.toLowerCase();return out;}function isQuizAnswerCorrect(value,expected,opts){const matchMode=opts.matchMode??\"exact\";if(matchMode===\"set\"&&Array.isArray(expected)&&expected.length>0){const sep=opts.valueSeparator??\", \";const userParts=value.split(sep).map(s=>s.trim()).filter(Boolean);const expParts=expected.map(e=>String(e).trim()).filter(Boolean);if(userParts.length!==expParts.length)return false;const normOne=s=>normalizeCompare(s,!!opts.ignoreSpaces,!!opts.caseSensitive);const sortedUser=[...userParts].map(normOne).sort();const sortedExp=[...expParts].map(normOne).sort();return sortedUser.every((x,i)=>x===sortedExp[i]);}const caseSensitive=!!opts.caseSensitive;const ignoreSpaces=!!opts.ignoreSpaces;const useRegex=!!opts.useRegex;if(Array.isArray(expected)){return expected.some(e=>{const exp=String(e);if(useRegex){try{return new RegExp(exp).test(value);}catch{return false;}}return normalizeCompare(value,ignoreSpaces,caseSensitive)===normalizeCompare(exp,ignoreSpaces,caseSensitive);});}const exp=String(expected);if(useRegex){try{return new RegExp(exp).test(value);}catch{return false;}}return normalizeCompare(value,ignoreSpaces,caseSensitive)===normalizeCompare(exp,ignoreSpaces,caseSensitive);}function readQuizQuestionPoints(el){const pCorrect=Number(el.getAttribute(\"data-framerforms-quiz-points\")??\"1\");const pWrong=Number(el.getAttribute(\"data-framerforms-quiz-wrong-points\")??\"0\");return{maxPointsIfCorrect:Number.isFinite(pCorrect)?pCorrect:1,pointsIfWrong:Number.isFinite(pWrong)?pWrong:0};}/**\n * Read one quiz field’s live answer, expected answer text, and correctness.\n * Use the field’s `name` (same as in the Layers / form). For radio groups,\n * pass the shared `name` attribute.\n */export function getQuestionData(form,inputName){const empty={userValue:\"\",correctAnswer:\"\",isCorrect:null,isQuizField:false,maxPointsIfCorrect:0,pointsIfWrong:0};if(!form||!inputName?.trim())return empty;const esc=typeof CSS!==\"undefined\"&&typeof CSS.escape===\"function\"?CSS.escape(inputName):inputName.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"');const sel=`input[name=\"${esc}\"], select[name=\"${esc}\"], textarea[name=\"${esc}\"]`;const all=form.querySelectorAll(sel);if(all.length===0)return empty;let el=all[0];if(all.length>1&&el instanceof HTMLInputElement&&el.type===\"radio\"){let checked=null;for(const n of all){if(n instanceof HTMLInputElement&&n.type===\"radio\"&&n.checked){checked=n;break;}}el=checked??el;}const userValue=getQuizFieldValue(el);if(el.getAttribute(\"data-framerforms-quiz\")!==\"true\"){return{userValue,correctAnswer:\"\",isCorrect:null,isQuizField:false,maxPointsIfCorrect:0,pointsIfWrong:0};}if(el.getAttribute(\"data-framerforms-quiz-scoring\")===\"weighted\"){const parsed=parseOptionPointsAttr(el.getAttribute(\"data-framerforms-quiz-option-points\"));if(!parsed){return{userValue,correctAnswer:\"\",isCorrect:null,isQuizField:true,maxPointsIfCorrect:0,pointsIfWrong:0,earnedPoints:0};}const opts=parseQuizOptions(el.getAttribute(\"data-framerforms-quiz-options\"));const{earned,maxPoints}=scoreWeightedFieldValue(userValue,parsed,{...opts,multiSelectAggregate:readQuizMultiSelectAggregate(el,opts)});return{userValue,correctAnswer:\"\",isCorrect:null,isQuizField:true,maxPointsIfCorrect:maxPoints,pointsIfWrong:0,earnedPoints:earned};}const expectedRaw=el.getAttribute(\"data-framerforms-correct-answer\")??\"\";const expected=parseExpectedAnswer(expectedRaw);const opts=parseQuizOptions(el.getAttribute(\"data-framerforms-quiz-options\"));const{maxPointsIfCorrect,pointsIfWrong}=readQuizQuestionPoints(el);const correctAnswer=Array.isArray(expected)?expected.map(String).join(\", \"):String(expected??\"\");if(expected===\"\"||Array.isArray(expected)&&expected.length===0){return{userValue,correctAnswer:\"\",isCorrect:null,isQuizField:true,maxPointsIfCorrect,pointsIfWrong};}const isOk=isQuizAnswerCorrect(userValue,expected,opts);return{userValue,correctAnswer,isCorrect:isOk,isQuizField:true,maxPointsIfCorrect,pointsIfWrong};}function getQuizFieldValue(el){if(el instanceof HTMLSelectElement){return el.value??\"\";}const inp=el;if(inp.type===\"checkbox\"||inp.type===\"radio\"){return inp.checked?inp.value||\"on\":\"\";}return inp.value??\"\";}/**\n * Computes quiz score from the form DOM.\n * Correct/incorrect fields need `data-framerforms-correct-answer`.\n * Weighted fields use `data-framerforms-quiz-option-points` (no correct answer).\n * Skips inputs disabled for multi-step unvisited pages (`disabled=\"FramerForms\"`).\n */export function calculateQuizScoreFromForm(form,_scoringMode){const nodes=form.querySelectorAll('input[data-framerforms-quiz=\"true\"], select[data-framerforms-quiz=\"true\"], textarea[data-framerforms-quiz=\"true\"]');let correct=0;let total=0;let points=0;let maxPoints=0;const answers={};const countedNames=new Set;let fieldIndex=0;const fieldKey=el=>{fieldIndex+=1;return el.name?.trim()?el.name:`quiz-field-${fieldIndex}`;};nodes.forEach(el=>{if(el.getAttribute(\"disabled\")===\"FramerForms\")return;const nameKey=el.name?.trim();if(nameKey&&countedNames.has(nameKey))return;const scoringMethod=el.getAttribute(\"data-framerforms-quiz-scoring\")??\"correctIncorrect\";if(scoringMethod===\"weighted\"){const parsed=parseOptionPointsAttr(el.getAttribute(\"data-framerforms-quiz-option-points\"));if(!parsed)return;const opts=parseQuizOptions(el.getAttribute(\"data-framerforms-quiz-options\"));const value=getQuizFieldValue(el);const{earned,maxPoints:fieldMax}=scoreWeightedFieldValue(value,parsed,{...opts,multiSelectAggregate:readQuizMultiSelectAggregate(el,opts)});const key=fieldKey(el);if(nameKey)countedNames.add(nameKey);total+=1;maxPoints+=fieldMax;points+=earned;answers[key]={isCorrect:null,earnedPoints:earned};return;}if(!el.hasAttribute(\"data-framerforms-correct-answer\"))return;const expectedRaw=el.getAttribute(\"data-framerforms-correct-answer\")??\"\";const expected=parseExpectedAnswer(expectedRaw);if(expected===\"\"||Array.isArray(expected)&&expected.length===0)return;const opts=parseQuizOptions(el.getAttribute(\"data-framerforms-quiz-options\"));const pCorrect=Number(el.getAttribute(\"data-framerforms-quiz-points\")??\"1\");const pWrong=Number(el.getAttribute(\"data-framerforms-quiz-wrong-points\")??\"0\");const pc=Number.isFinite(pCorrect)?pCorrect:1;const pw=Number.isFinite(pWrong)?pWrong:0;const key=fieldKey(el);if(nameKey)countedNames.add(nameKey);total+=1;maxPoints+=pc;const value=getQuizFieldValue(el);const isOk=isQuizAnswerCorrect(value,expected,opts);if(isOk){correct+=1;points+=pc;answers[key]={isCorrect:true,earnedPoints:pc};}else{points+=pw;answers[key]={isCorrect:false,earnedPoints:pw};}});return{correct,total,points,maxPoints,answers};}// ============================================================================\n// FORM UTILITIES\n// ============================================================================\n/**\n * Clears all form input values and dispatches events to notify React components.\n * Handles regular inputs, checkboxes, radios, and custom FramerForms inputs\n * (RatingInput, PhoneNumberInput, etc.).\n *\n * @param form - The form element to clear\n */export function clearFormInputs(form){if(!form)return;// Reset the form (clears most inputs)\nform.reset();// Manually clear inputs that might not be reset by form.reset()\nconst inputs=form.querySelectorAll(\"input, select, textarea\");inputs.forEach(input=>{if(input.type===\"checkbox\"||input.type===\"radio\"){input.checked=false;}else{input.value=\"\";}// Dispatch events to notify React components\ninput.dispatchEvent(new Event(\"input\",{bubbles:true}));input.dispatchEvent(new Event(\"change\",{bubbles:true}));});// Clear custom FramerForms inputs (RatingInput, PhoneNumberInput, etc.)\n// These use HiddenInput with data-framerforms-set-value-event=\"true\"\nconst customInputs=form.querySelectorAll('input[data-framerforms-set-value-event=\"true\"]');customInputs.forEach(input=>{const inputName=input.name?.toLowerCase()||\"\";// Identify component type by checking parent structure\nconst parent=input.closest(\"[data-framerforms]\");const buttonCount=parent?.querySelectorAll('button[type=\"button\"]').length||0;// RatingInput typically has 2-10 star buttons\nconst isLikelyRating=buttonCount>=2&&buttonCount<=10;// RatingInput needs 0 to clear, others need empty string\nconst clearValue=isLikelyRating||inputName.includes(\"rating\")?0:\"\";input.dispatchEvent(new CustomEvent(\"framerFormsSetValue\",{detail:clearValue,bubbles:true}));});}// ============================================================================\n// AUTOFILL STYLING OVERRIDE\n// ============================================================================\n/**\n * Sets up global CSS to override browser autofill styling.\n * This prevents browsers from applying their default yellow/blue backgrounds\n * to autofilled form inputs, which can break custom designs.\n *\n * Runs once when the module loads and applies to all inputs on the page,\n * including native Framer components.\n */function setupAutofillOverride(){// Check if we're in a browser environment\nif(typeof document===\"undefined\")return;// Check if the style tag already exists to avoid duplicates\nconst existingStyle=document.getElementById(\"framerforms-autofill-override\");if(existingStyle)return;// Create and inject the style tag\nconst style=document.createElement(\"style\");style.id=\"framerforms-autofill-override\";style.textContent=`\n        /* Override browser autofill styling for all inputs */\n        input:-webkit-autofill,\n        input:-webkit-autofill:hover,\n        input:-webkit-autofill:focus,\n        input:-webkit-autofill:active,\n        select:-webkit-autofill,\n        select:-webkit-autofill:hover,\n        select:-webkit-autofill:focus,\n        select:-webkit-autofill:active,\n        textarea:-webkit-autofill,\n        textarea:-webkit-autofill:hover,\n        textarea:-webkit-autofill:focus,\n        textarea:-webkit-autofill:active {\n            /* Use box-shadow to override background color */\n            /* The large spread radius ensures it covers the entire input */\n            -webkit-box-shadow: 0 0 0 1000px transparent inset !important;\n            box-shadow: 0 0 0 1000px transparent inset !important;\n            \n            /* Override text color */\n            -webkit-text-fill-color: inherit !important;\n            color: inherit !important;\n            \n            /* Use transition trick to prevent background color changes */\n            /* The extremely long duration (5000s) effectively prevents the change */\n            transition: background-color 5000s ease-in-out 0s, \n                        color 5000s ease-in-out 0s !important;\n        }\n        \n        /* Ensure autofilled inputs maintain their original styling */\n        input:-webkit-autofill::first-line,\n        select:-webkit-autofill::first-line,\n        textarea:-webkit-autofill::first-line {\n            -webkit-text-fill-color: inherit !important;\n            color: inherit !important;\n        }\n    `;// Append to document head\ndocument.head.appendChild(style);}// Run the setup immediately when the module loads\n// This ensures it applies globally before any components render\nif(typeof document!==\"undefined\"){// Use requestAnimationFrame to ensure DOM is ready\nif(document.readyState===\"loading\"){document.addEventListener(\"DOMContentLoaded\",setupAutofillOverride);}else{// DOM is already loaded, run immediately\nsetupAutofillOverride();}}\nexport const __FramerMetadata__ = {\"exports\":{\"getFormInfo\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"iconProp\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"HIDDEN_CLASS_NAME\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"parsePadding\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"createBackground\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"borderProp\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"InsertFrameNeedHelpProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"ScoringMode\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useQuizStoreApi\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"FormSubmittedSetter\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useInstanceId\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"calculateQuizScoreFromForm\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"HiddenComponentLabel\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useQuizStore\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useFormSubmittedStore\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"FormInfo\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"HiddenInputProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"FormSubmittedStoreState\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useFormSubmittedStoreApi\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"HideElement\":{\"type\":\"reactComponent\",\"name\":\"HideElement\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"createEmptyQuizScore\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"QuizRuntimeState\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"shadowsProp\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"isAncestor\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"MultiStepFormState\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"QuizScore\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"HiddenComponentLabelProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useCanvasState\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"Border\":{\"type\":\"reactComponent\",\"name\":\"Border\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"clearFormInputs\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"QuizStoreState\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"HiddenInput\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"Icon\":{\"type\":\"reactComponent\",\"name\":\"Icon\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"getQuestionData\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"fillProp\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"MultiStepFormStore\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useMultiStepFormStore\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"insertFrameSupportPropertyControl\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"QuizStoreSetter\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PageHistory\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"LogicConfig\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"HiddenInputOwnProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FramerFormsShared.map","import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useEffect,useState}from\"react\";import{HiddenComponentLabel}from\"https://framerusercontent.com/modules/DwWOdDzQZGCuvkNlbUjZ/Rj7Kdx4qq62ukVsnw7Hz/FramerFormsShared.js\";/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight auto\n * @framerDisableUnlink\n */export default function DataInput(props){const{type}=props;const isCanvas=RenderTarget.current()===RenderTarget.canvas;const[value,setValue]=useState(\"\");let text=\"\";switch(type){case\"url\":text=\"Current URL\";break;case\"utmTags\":text=\"UTM Tags\";break;case\"urlParameter\":text=`${props.urlParameter} URL Parameter`;break;case\"referrerUrl\":text=\"Referrer URL\";break;}useEffect(()=>{switch(type){case\"url\":setValue(window.location.href);break;case\"utmTags\":const utms={};const queryParams=new URLSearchParams(window.location.search);queryParams.forEach((value,key)=>{// Check if the key starts with 'utm_' (indicating it's a UTM parameter)\nif(key.startsWith(\"utm_\")){utms[key]=value;}});setValue(utms);break;case\"urlParameter\":setValue(new URLSearchParams(window.location.search).get(props.urlParameter)??\"\");break;case\"referrerUrl\":setValue(document.referrer);break;}},[type,props.urlParameter]);return /*#__PURE__*/_jsx(HiddenComponentLabel,{text:text,subtext:\"Hidden Field\",children:!isCanvas&&/*#__PURE__*/_jsx(\"div\",{style:{display:\"hidden\"},children:type==\"utmTags\"?value?Object.keys(value).map(key=>/*#__PURE__*/_jsx(\"input\",{type:\"hidden\",name:key,value:value[key],\"data-framerforms-no-prefill\":true})):null:/*#__PURE__*/_jsx(\"input\",{type:\"hidden\",name:props.name,value:value,\"data-framerforms-no-prefill\":true})})});}DataInput.displayName=\"URL Data Collector\";addPropertyControls(DataInput,{type:{type:ControlType.Enum,options:[\"url\",\"utmTags\",\"referrerUrl\",\"urlParameter\"],optionTitles:[\"Current URL\",\"UTM Tags\",\"Referrer URL\",\"URL Parameter\"],displaySegmentedControl:true,segmentedControlDirection:\"vertical\"},name:{type:ControlType.String,defaultValue:\"Data\",preventLocalization:true,hidden:props=>props.type==\"utmTags\"},urlParameter:{type:ControlType.String,defaultValue:\"\",placeholder:\"Parameter Name\",title:\"URL Param\",preventLocalization:true,hidden:props=>props.type!==\"urlParameter\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"DataInput\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerDisableUnlink\":\"\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"2VAMqS,SAAS,EAAY,EAAK,EAAS,EAAE,CAAC,CAAC,GAAG,CAAC,EAAK,OAAO,EAAS,GAAG,OAAO,GAAO,SAAS,MAAM,CAAC,GAAG,EAAS,WAAW,EAAK,CAAC,IAAM,EAAI,CAAC,GAAG,EAAS,CAAqU,OAAjU,EAAK,aAAW,EAAI,WAAW,EAAK,YAAc,EAAK,UAAU,OAAK,EAAI,SAAS,EAAK,UAAY,EAAK,YAAY,OAAK,EAAI,WAAW,EAAK,YAAc,EAAK,eAAe,OAAK,EAAI,cAAc,EAAK,eAAiB,EAAK,YAAY,OAAK,EAAI,WAAW,EAAK,YAAc,EAAK,YAAU,EAAI,UAAU,EAAK,WAAiB,EAAK,SAAS,EAAgB,EAAM,CAAC,GAAG,CAAC,EAAM,MAAM,GAAG,GAAG,OAAO,GAAQ,SAAS,OAAO,EAAM,GAAG,OAAO,GAAQ,SAAS,CAAC,GAAG,OAAO,EAAM,KAAM,SAAS,OAAO,EAAM,IAAI,GAAG,OAAO,EAAM,KAAM,SAAS,OAAO,EAAM,IAAK,MAAM,GAAI,SAAS,GAAa,EAAE,CAAC,MAAM,6BAA6B,KAAK,EAAE,MAAM,CAAC,CAAE,SAAS,GAAgB,EAAI,CAAC,GAAG,CAA8E,IAAM,EAA3E,IAAI,IAAI,EAAI,OAAO,SAAW,IAAY,SAAS,KAAK,YAAY,CAAc,SAAS,MAAM,IAAI,CAAC,KAAK,EAAE,GAAG,OAAO,mBAAmB,EAAK,MAAU,CAAC,MAAM,IAMhwC,eAAe,GAAgB,EAAQ,EAAS,CAAC,GAAG,CAAC,EAAQ,OAAO,IAAM,EAAU,GAAU,EAAS,MAAM,EAAE,GAAgB,EAAQ,EAAE,WAAW,GAAG,CAAC,IAAM,EAAI,MAAM,MAAM,EAAQ,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,EAAI,GAAG,MAAU,MAAM,QAAQ,EAAI,SAAS,CAAC,IAAM,EAAK,MAAM,EAAI,MAAM,CAAO,EAAO,IAAI,gBAAgB,EAAK,CAAOA,EAAE,SAAS,cAAc,IAAI,CAAC,EAAE,KAAK,EAAO,EAAE,SAAS,EAAU,EAAE,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,SAAS,KAAK,YAAYA,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,EAAO,eAAe,IAAI,gBAAgB,EAAO,CAAC,IAAI,CAAC,YAAgB,EACniB,IAAM,EAAE,SAAS,cAAc,IAAI,CAAC,EAAE,KAAK,EAAQ,EAAE,SAAS,EAAU,EAAE,OAAO,SAAS,EAAE,IAAI,WAAW,EAAE,MAAM,QAAQ,OAAO,SAAS,KAAK,YAAY,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQ,CAGpL,SAAS,GAAoB,EAAM,EAAM,CAAC,IAAM,EAAM,OAAO,eAAe,EAAM,CAAO,EAAO,EAAM,OAAO,yBAAyB,EAAM,QAAQ,EAAE,IAAI,IAAA,GAAa,EAAO,EAAO,KAAK,EAAM,EAAM,CAAM,EAAM,MAAM,EAAM,EAAM,cAAc,IAAI,MAAM,QAAQ,CAAC,QAAQ,GAAK,CAAC,CAAC,CAAC,EAAM,cAAc,IAAI,MAAM,SAAS,CAAC,QAAQ,GAAK,CAAC,CAAC,CAGzU,SAAS,GAAY,EAAW,IAAI,CAAC,GAAK,CAAC,EAAS,GAAaC,MAA8B,IAAS,OAAmB,GAAa,EAAO,WAAW,EAAa,CAAyW,OAAxW,MAAoB,CAAC,GAAU,IAAS,OAAY,OAAO,IAAM,MAAa,EAAY,EAAO,WAAW,EAAW,CAA6G,OAA5G,GAAU,CAAC,EAAO,iBAAiB,SAAS,EAAS,CAAC,EAAO,iBAAiB,oBAAoB,EAAS,KAAW,CAAC,EAAO,oBAAoB,SAAS,EAAS,CAAC,EAAO,oBAAoB,oBAAoB,EAAS,GAAK,CAAC,EAAW,CAAC,CAAQ,EAAqF,SAAwB,EAAc,EAAM,CAAC,GAAK,CAAC,eAAa,eAAa,aAAW,sBAAoB,gBAAc,eAAa,eAAa,cAAY,kBAAe,WAAS,iBAAe,YAAS,OAAK,aAAW,WAAQ,YAAU,aAAW,YAAU,qBAAmB,QAAM,aAAW,YAAU,OAAK,YAAU,WAAS,aAAW,eAAY,mBAAgB,cAAW,oBAAiB,mBAAgB,oBAAiB,yBAAsB,kBAAe,eAAY,aAAU,eAAY,oBAAiB,yBAAsB,mBAAgB,gBAAa,cAAW,SAAM,YAAS,gBAAa,qBAAkB,oBAAiB,aAAU,aAAU,aAAW,aAAU,eAAa,aAAW,aAAW,WAAS,gBAAa,kBAAe,gBAAa,mBAAiB,uBAAoB,EAAY,EAAS,EAAa,SAAS,GAAG,EAAa,OAAa,GAAY,EAAa,SAAS,GAAG,EAAa,UAC5gD,EAAS,GAAY,IAAI,CAAM,CAAC,EAAK,GAASA,EAAe,GAAM,CAAM,CAAC,EAAU,IAAcA,EAAe,GAAM,CAAM,CAAC,EAAS,IAAaA,EAAe,GAAM,CAAM,CAAC,GAAQ,IAAYA,EAAe,GAAM,CAAM,CAAC,EAAM,IAAUA,EAAe,GAAG,CAAM,CAAC,GAAS,GAAaA,EAAe,GAAG,CAAM,CAAC,EAAW,IAAeA,EAAe,GAAM,CAAO,EAAY,GAAY,wBAA8B,GAAkBC,GAAa,KAAK,CAAO,GAAc,EAAgB,GAAM,CAAO,GAAa,EAAgB,EAAK,CAAO,EAAgB,EAAgB,GAAa,CAC/kB,GAAY,CAAC,CAAC,EAA8C,MAAoB,CAAC,GAAG,EAAS,CAAC,EAAQ,CAAC,CAAC,EAAa,CAAC,OAAQ,GAAG,GAAY,CAAC,EAAQ,GAAK,CAAC,OAAQ,IAAI,EAAkB,GAAM,GAAG,CAAC,EAAyB,IAAS,QAAa,EAAO,eAAe,QAAQ,EAAY,GAAG,YAAgB,EACtT,GAAG,EAAkB,CAAC,EAAQ,GAAM,CAAC,OAAQ,IAAM,EAAE,EAAO,eAAe,EAAQ,GAAK,CAAC,KAAK,IAAI,EAAE,OAAO,EAAa,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAO,aAAa,EAAE,EAAG,CAAC,EAAa,EAAa,EAAS,GAAY,EAAY,CAAC,CAAmC,MAAoB,CAAI,OAAmB,EAAK,CAAC,IAAM,EAAS,SAAS,KAAK,MAAM,SAA+C,MAAtC,UAAS,KAAK,MAAM,SAAS,aAAmB,CAAC,SAAS,KAAK,MAAM,SAAS,KAAc,CAAC,EAAK,EAAS,CAAC,CACjY,MAAoB,CAAoB,GAAhB,GAAmB,CAAC,GAAM,GAAqB,CAAC,EAAU,OAAO,IAAM,EAAM,GAAG,CAAI,EAAE,MAAM,UAAS,EAAQ,GAAM,EAA4C,OAAzC,EAAO,iBAAiB,UAAU,EAAM,KAAW,EAAO,oBAAoB,UAAU,EAAM,EAAG,CAAC,EAAK,EAAoB,EAAU,EAAS,CAAC,CAK3W,IAAM,EAAeC,MAAsB,CAAC,GAAG,CAAC,EAAO,eAAe,QAAQ,EAAY,OAAO,MAAU,EAC1G,GAAa,GAAK,EAAG,CAAC,EAAY,CAAC,CAAyD,GAAaA,MAAsB,CAAC,IAAM,EAAM,EAAM,MAAM,CAAC,GAAG,CAAC,GAAa,EAAM,CAAC,CAAC,EAAY,sCAAsC,CAAC,OAEtO,GAF8O,EAAY,GAAG,CAE1P,EAAS,CAAC,GAAgB,CAAC,OAA6C,IAAM,EAAhC,GAAkB,SAAyB,cAAc,OAAO,CAAC,GAAG,CAAC,EAAK,CAC3H,QAAQ,KAAK,wHAA2H,CAAC,GAAgB,CAAC,OAAQ,GAAc,GAAK,CAAC,GAAG,CAIzL,IAAM,EAAI,MAAM,KAAK,EAAK,iBAAiB,kBAAkB,CAAC,CAAO,EAAW,EAAI,KAAK,IAAI,EAAE,MAAM,IAAI,aAAa,GAAG,QAAQ,EAAE,EAAI,KAAK,IAAI,EAAE,MAAM,IAAI,aAAa,GAAG,QAAQ,EAAE,EAAI,KAAK,IAAI,EAAE,cAAc,IAAI,aAAa,CAAC,SAAS,QAAQ,CAAC,EAAE,EAAI,KAAK,IAAI,EAAE,aAAa,IAAI,aAAa,CAAC,SAAS,QAAQ,CAAC,EACzT,EAAI,KAAK,GAAG,EAAE,OAAO,UAAU,EAAE,OAAO,UAAU,EAAE,OAAO,UAAU,EAAE,OAAO,YAAY,EAAE,OAAO,QAAQ,CASrC,GATyC,GAI/G,GAAoB,EAAW,EAAM,CAErC,EAAK,iBAAiB,iCAAiC,CAAC,QAAQ,GAAG,EAAE,QAAQ,CAAC,CAGL,CAArD,EAAI,KAAK,IAAI,EAAE,MAAM,IAAI,aAAa,GAAG,QAAQ,CAAmB,CAAC,IAAM,EAAO,SAAS,cAAc,QAAQ,CAAC,EAAO,KAAK,SAAS,EAAO,KAAK,QAAQ,EAAO,MAAM,EAAM,EAAO,aAAa,sBAAsB,IAAI,CAAC,EAAK,YAAY,EAAO,CAIzQ,EAAO,eAAe,CAAC,GAAG,CAAC,IAAM,EAAU,EAAK,cAAc,8CAA8C,CAAI,EAAW,EAAU,OAAO,CAAU,OAAO,EAAK,eAAgB,WAAY,EAAK,eAAe,CAAO,EAAK,QAAQ,OAAS,EAAS,CACxP,QAAQ,MAAM,qCAAqC,EAAS,CAAE,GAAgB,CAC3E,GAAiB,GAAgB,EAAgB,EAAiB,EAAI,EAAE,OAAQ,EAAE,CACrF,QAAQ,MAAM,oCAAoC,EAAE,CAAC,EAAY,sDAAsD,CAAC,GAAc,GAAM,GAAI,CAAC,EAAM,EAAS,EAAe,EAAgB,EAAiB,CAAC,CAC3M,GAAiB,EAAS,KAAK,IAAI,GAAG,KAAK,MAAM,EAAe,GAAG,CAAC,CAAC,EAAqB,EAAgB,EAAS,KAAK,IAAI,EAAa,GAAG,CAAC,EAAmB,GAAkB,EAAS,IAAI,IAAU,GAAU,EAAS,GAAG,GAG/N,GAAa,CAAC,SAAS,EAAS,WAAW,QAAQ,MAAM,EAAE,OAAO,EAAS,EAAE,UAAU,QAAQ,OAAO,WAAW,EAAS,WAAW,SAAS,eAAe,SAAS,QAAQ,EAAS,EAAE,GAAG,WAAW,EAAa,eAAe,QAAQ,EAAY,KAAK,qBAAqB,QAAQ,EAAY,KAAK,UAAU,OAAO,wBAAwB,QAAQ,CAE3V,GAAc,GAAU,IAAgB,OAAa,GAAU,CAAC,SAAS,WAAW,QAAQ,OAAO,oBAAoB,IAAgB,QAAQ,EAAS,MAAM,UAAU,iBAAiB,GAAc,WAAW,MAAM,kBAAkB,IAAgB,OAAO,YAAY,GAAc,oBAAoB,IAAgB,OAAO,kBAAkB,kBAAkB,MAAM,OAAO,SAAS,EAAS,OAAO,EACtZ,oBAAoB,EAAgB,qBAAqB,EAAgB,uBAAuB,EAAS,EAAE,EAAgB,wBAAwB,EAAS,EAAE,EAAgB,WAAW,GAAe,SAAS,SACjN,OAAO,oBAAoB,UAAU,EAAS,OAAO,sBAAsB,UAAU,EAAS,OAAO,OAAO,CAAO,GAAa,CAAC,SAAS,UAAU,QAAQ,GAAiB,QAAQ,OAAO,cAAc,SAAS,IAAI,EAAS,GAAG,GAAG,SAAS,EAAE,eAAe,SAAS,UAAU,OAAO,CAAO,GAAW,CAAC,SAAS,QAAQ,SAAS,WAAW,UAAU,GAC5V,UAAU,EAAS,IAAI,IAAA,GAAU,WAAW,UAAU,SAAS,SAAS,CAAO,GAAc,CAAC,SAAS,WAAW,IAAI,EAAS,GAAG,GAAG,MAAM,EAAS,GAAG,GAAG,MAAM,GAAU,OAAO,GAAU,aAAa,EAAE,WAAW,UAAU,OAAO,oBAAoB,OAAO,UAAU,QAAQ,OAAO,WAAW,SAAS,eAAe,SAAS,UAAU,sBAAsB,OAAO,EAAE,MAAM,UAAU,QAAQ,EAAE,CAAO,GAAY,EAAS,GAAG,GAAS,GAAe,CAAC,MAAM,OAAO,OAAO,GAAY,QAAQ,EAAS,SAAS,SAAS,MAAM,GAAe,WAAW,GACpiB,OAAO,eAAe,GAAQ,GAAsB,KAAmB,aAAa,GAAY,QAAQ,OAAO,UAAU,aAAa,WAAW,iDAAiD,UAAU,GAAQ,sBAAsB,sBAC1O,GAAG,EAAY,GAAU,CAAC,SAAS,EAAS,GAAG,GAAG,CAAC,CAAC,CAG9C,GAAgB,CAAC,MAAM,OAAO,OAAO,GAAY,OAAO,oBAAoB,aAAa,GAAa,OAAO,EAAW,OAAO,UAAU,MAAM,GAAgB,WAAW,EAAS,GAAsB,GAAiB,cAAc,GAAG,WAAW,qEAAqE,UAAU,GAAU,CAAC,EAAW,sBAAsB,OAAO,UAAU,GAAU,CAAC,EAAW,sBAAsB,sBAAsB,QAAQ,EAAW,IAAI,EAAE,GAAG,EAAY,GAAW,CAAC,SAAS,EAAS,GAAG,GAAG,WAAW,IAAI,CAAC,CAAC,CAAO,GAAc,CAAC,QAAQ,OAAO,WAAW,SAAS,eAAe,aAAa,IAAI,GAAG,aAAa,GAAG,CAAyG,OAAoB,EAAM,MAAM,CAAC,MAAM,CAGnyB,MAAM,OAAO,OAAO,OAAO,UAAU,EAAS,IAAI,IAAA,GAAU,SAAS,WAAW,CAAC,SAAS,CAAc,EAAK,MAAM,CAAC,IAAI,GAAkB,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,OAAO,EAAE,SAAS,SAAS,KAAK,MAAM,CAAC,SAAS,GAAW,CAAC,CAAC,GAHsgB,CAAC,IAG/d,EAAM,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,WAAW,QAAQ,YAAY,WAAW,UAAU,MAAM,UAAU,OAAO,oBAAoB,aAAa,EAAE,WAAW,+BAA+B,SAAS,KAAK,WAAW,IAAI,CAAC,SAAS,CAAc,EAAK,IAAI,CAAC,SAAS,iBAAiB,CAAC,CAAC,4CAAyD,EAAK,IAAI,CAAC,SAAS,OAAO,CAAC,CAAC,gKAAgK,CAAC,CAAC,CAAc,EAAK,GAAgB,CAAC,SAAS,GAAmB,EAAK,EAAO,IAAI,CAAC,MAAM,GAAa,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,SAAS,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,SAAS,aAAa,OAAO,aAAa,EAAU,GAAa,EAAM,QAAQ,GAAG,CAE5lC,GAAqB,CAAC,GAAoB,EAAE,SAAS,EAAE,eAAc,EAAQ,GAAM,EAAG,SAAsB,EAAM,EAAO,IAAI,CAAC,MAAM,GAAU,QAAQ,CAAC,QAAQ,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,GAAqB,IAAyB,EAAK,SAAS,CAAC,aAAa,QAAQ,MAAM,GAAc,YAAY,EAAQ,GAAM,CAAC,YAAY,GAAG,EAAE,gBAAgB,CAAC,SAAsB,EAAK,MAAM,CAAC,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,SAAsB,EAAK,OAAO,CAAC,EAAE,uBAAuB,OAAO,eAAe,YAAY,MAAM,cAAc,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAgB,QAAqB,EAAM,MAAM,CAAC,MAAM,GAAW,SAAS,CAAC,GAA2B,EAAK,MAAM,CAAC,IAAI,GAAc,IAAI,GAAG,MAAM,CAAC,MAAM,OAAO,OAAO,OAAO,UAAU,GAAS,QAAQ,QAAQ,CAAC,CAAC,CAAC,KAAK,GAA0B,EAAK,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,KAAK,EAAS,GAAG,GAAG,OAAO,EAAS,GAAG,GAAG,MAAM,GAAkB,WAAW,8BAA8B,SAAS,MAAM,GAAG,EAAY,GAAiB,CAAC,SAAS,EAAS,GAAG,GAAG,WAAW,IAAI,WAAW,IAAI,cAAc,IAAI,CAAC,CAAC,CAAC,SAAS,GAAa,CAAC,CAAC,KAAK,CAAC,CAAC,CAAc,EAAK,MAAM,CAAC,MAAM,GAAa,SAAU,EASoQ,EAAK,GAAa,CAAC,MAAM,GAAa,QAAQ,GAAyB,YAAmB,WAAoB,aAAqB,YAAU,OAAO,GAAiB,WAAW,GAA2B,cAAwB,gBAAa,mBAAmB,GAAY,GAAmB,IAAA,GAAU,gBAAgB,OAAgB,GAAgB,EAAgB,EAAiB,CAAC,IAAA,GAAU,CAAC,CATtnB,EAAMC,EAAU,CAAC,SAAS,CAAC,IAAU,GAA0B,EAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,OAAO,eAAe,aAAa,aAAa,EAAU,GAAG,GAAG,CAAC,SAAsB,EAAK,MAAM,CAAC,IAAI,GAAa,IAAI,IAAS,GAAG,MAAM,CAAC,OAAO,EAAS,KAAK,IAAI,EAAW,KAAK,IAAI,GAAG,EAAW,EAAE,CAAC,CAAC,EAAW,MAAM,OAAO,QAAQ,QAAQ,UAAU,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAuB,EAAK,MAAM,CAAC,MAAM,GAAc,SAAsB,EAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAW,cAAc,EAAmB,cAAc,YAAY,GAAG,EAAY,EAAU,CAAC,SAAS,EAAS,GAAG,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,SAAS,EAAU,CAAC,CAAC,CAAC,CAAC,KAAkB,EAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,OAAO,cAAc,SAG58D,IAAI,EAAS,GAAG,GAAG,CAAC,SAAS,CAAc,EAAK,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAW,WAAW,KAAK,cAAc,IAAI,GAAG,EAAY,EAAU,CAAC,SAAS,EAAS,GAAG,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,SAAS,EAAM,CAAC,CAAc,EAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAU,GAAG,EAAY,EAAS,CAAC,SAAS,EAAS,GAAG,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,EAAK,EAAwB,EAAMA,EAAU,CAAC,SAAS,CAAC,IAAiB,EAAK,OAAO,CAAC,MAAM,CAAC,MAAM,GAAY,WAAW,IAAI,eAAe,GAAgB,YAAY,OAAO,oBAAoB,EAAE,CAAC,SAAS,EAAW,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,EAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,OAAO,cAAc,SAG7nB,IAAI,EAAS,GAAG,GAGhB,UAAU,EAAS,GAAG,GAAG,CAAC,SAAS,CAAc,EAAK,QAAQ,CAAC,QAAQ,uBAAuB,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,OAAO,EAAE,SAAS,SAAS,KAAK,gBAAgB,CAAC,SAAS,gBAAgB,CAAC,CAAc,EAAK,QAAQ,CAAC,GAAG,uBAAuB,KAAK,QAAQ,aAAa,QAAQ,YAAY,GAAiB,MAAM,EAAM,SAAS,EAAW,SAAS,GAAG,CAAC,GAAS,EAAE,cAAc,MAAM,CAAI,IAAS,EAAY,GAAG,EAAG,YAAY,GAAW,GAAK,CAAC,WAAW,GAAW,GAAM,CAAC,UAAU,GAAG,CAAI,EAAE,MAAM,SAAS,CAAC,IAAY,EAAE,gBAAgB,CAAC,IAAc,GAAI,MAAM,GAAe,CAAC,CAAC,GAAsB,EAAK,MAAM,CAAC,KAAK,QAAQ,MAAM,CAAC,MAAM,UAAU,SAAS,GAAG,WAAW,IAAI,UAAU,GAAG,CAAC,SAAS,GAAS,CAAC,CAAC,KAAkB,EAAK,SAAS,CAAC,KAAK,SAAS,SAAS,EAAW,MAAM,GAAgB,QAAQ,GAAa,iBAAiB,GAAY,GAAK,CAAC,iBAAiB,GAAY,GAAM,CAAC,SAAS,EAAW,cAAc,GAAY,CAAC,CAAC,CAAC,CAAC,CAAC,GAAuB,EAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAW,GAAG,EAAY,GAAU,CAAC,SAAS,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAU,IAAI,GAAY,EAA0B,EAAK,IAAI,CAAC,KAAK,EAAW,OAAO,SAAS,IAAI,aAAa,MAAM,CAAC,MAAM,EAAW,eAAe,YAAY,CAAC,SAAS,EAAa,CAAC,CAAC,KAAK,GAAY,GAAU,GAAc,EAAW,QAAQ,IAAI,GAAU,EAAwB,EAAK,IAAI,CAAC,KAAK,EAAS,OAAO,SAAS,IAAI,aAAa,MAAM,CAAC,MAAM,EAAW,eAAe,YAAY,CAAC,SAAS,EAAW,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAwZ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAA+E,SAAS,GAAa,EAAM,CAAC,GAAK,CAAC,EAAS,GAAaH,EAAe,GAAM,CAAC,OAAoB,EAAM,EAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,OAAO,cAAc,SAAS,WAAW,SAAS,eAAe,SAAS,UAAU,SAAS,QAAQ,WAAW,IAAI,GAAG,CAAC,SAAS,CAAc,EAAK,EAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,WAAW,CAAC,KAAK,SAAS,UAAU,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,OAAO,GACvgF,aAAa,EAAE,OAAO,oBAAoB,WAAW,EAAM,OAAO,QAAQ,OAAO,WAAW,SAAS,eAAe,SAAS,UAAU,sBAAsB,CAAC,SAAsB,EAAK,MAAM,CAAC,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,SAAsB,EAAK,EAAO,KAAK,CAAC,EAAE,qBAAqB,OAAO,UAAU,YAAY,IAAI,cAAc,QAAQ,eAAe,QAAQ,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,EAAK,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAM,WAAW,cAAc,IAAI,GAAG,EAAY,EAAM,UAAU,CAAC,SAAS,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,SAAS,EAAM,MAAM,CAAC,CAAc,EAAK,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,IAAI,MAAM,EAAM,UAAU,GAAG,EAAY,EAAM,SAAS,CAAC,SAAS,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,SAAS,EAAM,QAAQ,CAAC,CAAC,EAAM,oBAAoB,EAAM,gBAA6B,EAAM,SAAS,CAAC,KAAK,SAAS,QAAQ,EAAM,gBAAgB,iBAAiB,EAAY,GAAK,CAAC,iBAAiB,EAAY,GAAM,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO,GAAG,QAAQ,SAAS,OAAO,oBAAoB,aAAa,EAAM,cAAc,EAAE,OAAO,UAAU,MAAM,EAAM,YAAY,UAAU,WAAW,EAAM,OACnpC,UAAU,EAAS,sBAAsB,OAAO,UAAU,EAAS,sBAAsB,sBAAsB,WAAW,8CAA8C,QAAQ,cAAc,WAAW,SAAS,eAAe,SAAS,IAAI,EAAE,GAAG,EAAY,EAAM,WAAW,CAAC,SAAS,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,SAAS,CAAc,EAAK,MAAM,CAAC,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,cAAc,GAAK,SAAsB,EAAK,OAAO,CAAC,EAAE,uCAAuC,OAAO,eAAe,YAAY,MAAM,cAAc,QAAQ,eAAe,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAM,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,sBA7ErhB,IAA4B,IAAiE,IAAkD,CA6Egd,EAAc,aAAa,CAAC,aAAa,EAAE,aAAa,GAAK,WAAW,wBAAwB,oBAAoB,GAAM,cAAc,QAAQ,aAAa,EAAE,aAAa,sBAAsB,YAAY,EAAE,eAAe,UAAU,SAAS,IAAI,eAAe,GAAG,SAAS,GAAK,KAAK,IAAA,GAAU,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,UAAU,mBAAmB,IAAI,UAAU,CAAC,WAAW,8BAA8B,SAAS,GAAG,WAAW,IAAI,CAAC,MAAM,6BAA6B,WAAW,UAAU,UAAU,CAAC,WAAW,8BAA8B,SAAS,GAAG,WAAW,IAAI,WAAW,IAAI,CAAC,KAAK,kEAAkE,UAAU,UAAU,SAAS,CAAC,WAAW,8BAA8B,SAAS,GAAG,WAAW,KAAK,CAAC,WAAW,GAAG,YAAY,UAAU,gBAAgB,GAAM,iBAAiB,gBAAgB,gBAAgB,UAAU,iBAAiB,UAAU,sBAAsB,UAAU,eAAe,UAAU,YAAY,EAAE,UAAU,CAAC,WAAW,8BAA8B,SAAS,GAAG,WAAW,IAAI,CAAC,YAAY,eAAe,iBAAiB,UAAU,sBAAsB,UAAU,gBAAgB,UAAU,aAAa,EAAE,WAAW,CAAC,WAAW,8BAA8B,SAAS,GAAG,WAAW,IAAI,CAAC,SAAS,QAAQ,aAAa,GAAG,kBAAkB,UAAU,iBAAiB,CAAC,WAAW,qBAAqB,SAAS,GAAG,WAAW,IAAI,CAAC,UAAU,GAAK,UAAU,kCAAkC,WAAW,UAAU,UAAU,CAAC,WAAW,8BAA8B,SAAS,GAAG,CAAC,aAAa,iBAAiB,WAAW,WAAW,WAAW,eAAe,SAAS,SAAS,aAAa,qCAAqC,eAAe,2GAA2G,aAAa,IAAA,GAAU,iBAAiB,GAAG,mBAAmB,iBAAiB,CAAkF,EAAoB,EAAc,CAAoB,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,aAAa,EAAE,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,eAAe,GAAK,YAAY,4CAA4C,CAAC,aAAa,CAAC,KAAK,EAAY,QAAQ,MAAM,iBAAiB,aAAa,GAAK,aAAa,MAAM,cAAc,KAAK,YAAY,6CAA6C,CAAC,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,cAAc,aAAa,wBAAwB,YAAY,+EAA+E,CAAC,oBAAoB,CAAC,KAAK,EAAY,QAAQ,MAAM,gBAAgB,aAAa,GAAM,aAAa,WAAW,cAAc,WAAW,YAAY,qHAAqH,CAAoC,WAAW,CAAC,KAAK,EAAY,kBAAkB,MAAM,cAAc,YAAY,oJAAoJ,CAAmB,cAAc,CAAC,KAAK,EAAY,KAAK,MAAM,QAAQ,aAAa,QAAQ,QAAQ,CAAC,OAAO,QAAQ,OAAO,CAAC,aAAa,CAAC,OAAO,QAAQ,OAAO,CAAC,wBAAwB,GAAK,CAAC,SAAS,CAAC,KAAK,EAAY,OAAO,MAAM,YAAY,aAAa,IAAI,IAAI,IAAI,IAAI,KAAK,KAAK,GAAG,CAAC,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,SAAS,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,eAAe,CAAC,KAAK,EAAY,OAAO,MAAM,UAAU,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC,eAAe,CAAC,KAAK,EAAY,MAAM,MAAM,UAAU,aAAa,UAAU,CAAC,aAAa,CAAC,KAAK,EAAY,MAAM,MAAM,UAAU,aAAa,sBAAsB,CAAC,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,OAAO,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,CAA4B,SAAS,CAAC,KAAK,EAAY,QAAQ,MAAM,YAAY,aAAa,GAAK,aAAa,OAAO,cAAc,OAAO,YAAY,4GAA4G,CAAC,KAAK,CAAC,KAAK,EAAY,gBAAgB,MAAM,OAAO,OAAO,GAAO,EAAM,WAAW,GAAM,YAAY,iEAAiE,CAAC,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,cAAc,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,OAAO,GAAO,EAAM,WAAW,GAAM,CAAC,QAAQ,CAAC,KAAK,EAAY,OAAO,MAAM,WAAW,aAAa,GAAG,YAAY,aAAa,OAAO,GAAO,EAAM,WAAW,GAAM,YAAY,wCAAwC,CAAkD,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,UAAU,aAAa,GAAG,YAAY,gBAAgB,YAAY,mEAAmE,CAAC,WAAW,CAAC,KAAK,EAAY,MAAM,MAAM,gBAAgB,aAAa,UAAU,CAAC,UAAU,CAAC,KAAK,EAAY,KAAK,MAAM,eAAe,SAAS,WAAW,CAAC,mBAAmB,CAAC,KAAK,EAAY,OAAO,MAAM,kBAAkB,aAAa,IAAI,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,CAAkB,MAAM,CAAC,KAAK,EAAY,OAAO,MAAM,QAAQ,aAAa,6BAA6B,CAAC,WAAW,CAAC,KAAK,EAAY,MAAM,MAAM,cAAc,aAAa,UAAU,CAAC,UAAU,CAAC,KAAK,EAAY,KAAK,MAAM,aAAa,SAAS,WAAW,CAAiB,KAAK,CAAC,KAAK,EAAY,OAAO,MAAM,OAAO,aAAa,kEAAkE,gBAAgB,GAAK,CAAC,UAAU,CAAC,KAAK,EAAY,MAAM,MAAM,aAAa,aAAa,UAAU,CAAC,SAAS,CAAC,KAAK,EAAY,KAAK,MAAM,YAAY,SAAS,WAAW,CAAC,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,cAAc,aAAa,GAAG,YAAY,qBAAqB,YAAY,kDAAkD,CAAC,YAAY,CAAC,KAAK,EAAY,MAAM,MAAM,eAAe,aAAa,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAY,QAAQ,MAAM,mBAAmB,aAAa,GAAM,CAA+B,iBAAiB,CAAC,KAAK,EAAY,OAAO,MAAM,cAAc,aAAa,gBAAgB,CAAC,gBAAgB,CAAC,KAAK,EAAY,MAAM,MAAM,WAAW,aAAa,UAAU,CAAC,iBAAiB,CAAC,KAAK,EAAY,MAAM,MAAM,eAAe,aAAa,UAAU,CAAC,sBAAsB,CAAC,KAAK,EAAY,MAAM,MAAM,cAAc,aAAa,UAAU,CAAC,eAAe,CAAC,KAAK,EAAY,MAAM,MAAM,aAAa,aAAa,UAAU,CAAC,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,eAAe,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,UAAU,CAAC,KAAK,EAAY,KAAK,MAAM,aAAa,SAAS,WAAW,CAAC,YAAY,CAAC,KAAK,EAAY,OAAO,MAAM,eAAe,aAAa,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAY,MAAM,MAAM,YAAY,aAAa,UAAU,CAAC,sBAAsB,CAAC,KAAK,EAAY,MAAM,MAAM,eAAe,aAAa,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAY,MAAM,MAAM,cAAc,aAAa,UAAU,CAAC,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,gBAAgB,aAAa,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,CAAC,WAAW,CAAC,KAAK,EAAY,KAAK,MAAM,cAAc,SAAS,WAAW,CAAkB,MAAM,CAAC,KAAK,EAAY,gBAAgB,MAAM,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAY,KAAK,MAAM,MAAM,aAAa,QAAQ,QAAQ,CAAC,QAAQ,UAAU,OAAO,CAAC,aAAa,CAAC,QAAQ,UAAU,OAAO,CAAC,wBAAwB,GAAK,CAAC,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,UAAU,aAAa,GAAG,YAAY,0BAA6B,CAAC,kBAAkB,CAAC,KAAK,EAAY,MAAM,MAAM,gBAAgB,aAAa,UAAU,CAAC,iBAAiB,CAAC,KAAK,EAAY,KAAK,MAAM,eAAe,SAAS,WAAW,CAAkB,UAAU,CAAC,KAAK,EAAY,QAAQ,MAAM,aAAa,aAAa,GAAK,CAAC,UAAU,CAAC,KAAK,EAAY,OAAO,MAAM,aAAa,aAAa,kCAAkC,CAAC,WAAW,CAAC,KAAK,EAAY,MAAM,MAAM,cAAc,aAAa,UAAU,CAAC,UAAU,CAAC,KAAK,EAAY,KAAK,MAAM,aAAa,SAAS,WAAW,CAAC,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,gBAAgB,aAAa,iBAAiB,CAAC,WAAW,CAAC,KAAK,EAAY,KAAK,MAAM,cAAc,CAAC,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,cAAc,aAAa,eAAe,CAAC,SAAS,CAAC,KAAK,EAAY,KAAK,MAAM,YAAY,CAA6C,aAAa,CAAC,KAAK,EAAY,KAAK,MAAM,gBAC7zR,iBAAiB,4QAAuX,CAAC,YAAY,sGAAsG,CAAC,iBAAiB,CAAC,KAAK,EAAY,OAAO,MAAM,UAAU,aAAa,GAAG,YAAY,YAAY,YAAY,qGAAqG,CAAC,mBAAmB,CAAC,KAAK,EAAY,OAAO,MAAM,oBAAoB,aAAa,iBAAiB,YAAY,6EAA6E,CAAoB,aAAa,CAAC,KAAK,EAAY,OAAO,MAAM,gBAAgB,aAAa,qCAAqC,CAAC,eAAe,CAAC,KAAK,EAAY,OAAO,MAAM,eAAe,aAAa,2GAA2G,gBAAgB,GAAK,CAAC,CAAC,kBCpF5rC,ICayjB,SAAgB,EAAK,CAAC,QAAM,QAAM,OAAK,QAAM,EAAE,CAAC,gBAAc,CAAC,OAAoB,EAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAK,OAAO,EAAK,SAAS,EAAK,UAAU,EAAK,cAAc,OAAO,gBAAgB,EAAM,gBAAgB,EAAM,OAAO,EAAM,QAAQ,EAAM,IAAI,EAAa,UAAU,EAAM,QAAQ,EAAM,IAAI,EAAa,eAAe,UAAU,mBAAmB,SAAS,SAAS,UAAU,aAAa,SAAS,GAAG,EAAM,CAAC,CAAC,CAAsC,SAAgB,EAAO,CAAC,QAAM,QAAM,aAAW,KAAK,cAAY,UAAU,UAAQ,GAAG,CAAC,OAAoB,EAAK,EAAO,IAAI,CAAC,QAAQ,CAAC,cAAY,UAAQ,CAAC,MAAM,CAAC,SAAS,WAAW,MAAM,EAAE,YAAY,EAAM,YAAY,EAAM,aAAa,UAAU,cAAc,OAAO,CAAC,QAAQ,GAAiB,aAAW,CAAC,CAyC70C,SAAS,GAAuB,CAE0C,GAD1E,OAAO,SAAW,KACD,SAAS,eAAe,gCAAgC,CAAkB,OAC9F,IAAM,EAAM,SAAS,cAAc,QAAQ,CAAC,EAAM,GAAG,gCAAgC,EAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAqCvG,SAAS,KAAK,YAAY,EAAM,8BA9FyB,IAAqD,IAA0E,IAAkC,IAAqE,KAAkM,CAG3d,EAA+B,0CAAkM,EAAY,OAA4F,EAAY,KAAuI,GAAmD,EAAnD,EAA6H,EAAY,EAAE,CAAC,CAA2B,EAAY,EAAE,CAAC,CAAiQ,EAAY,EAAE,CAAC,CAAyF,EAAkB,qBAA2B,EAAyB,4BAO5jB,EAAkC,GAAY,GAAG,IAA2B,EAAK,MAAM,CAAK,MAAI,UAAU,EAAkB,CAAC,CAAG,CAAc,EAAY,GAAQ,EAAqB,CAAC,cAAc,EAAkB,sBAAsB,IAAI,EAAkB,qBAAqB,CAAC,EAAkB,CAAC,EAAY,YAAY,2BAAwC,EAAkC,EAAW,SAA8B,CAAC,OAAK,UAAQ,GAAG,WAAS,KAAK,GAAG,GAAY,EAAI,CAA6D,OAA7C,EAAa,SAAS,GAAG,EAAa,OAAoC,EAAM,MAAM,CAAC,mBAAmB,GAAK,GAAG,EAAe,MAAI,UAAU,EAAyB,MAAM,CAAC,gBAAgB,4BAA4B,aAAa,GAAG,QAAQ,YAAY,WAAW,QAAQ,WAAW,IAAI,SAAS,GAAG,MAAM,OAAO,QAAQ,OAAO,cAAc,SAAS,IAAI,EAAE,WAAW,SAAS,UAAU,SAAS,MAAM,OAAO,OAAO,OAAO,SAAS,SAAS,CAAC,SAAS,CAAC,EAAS,EAAK,GAAsB,EAAK,OAAO,CAAC,MAAM,CAAC,QAAQ,GAAG,WAAW,MAAM,WAAW,IAAI,CAAC,SAAS,EAAQ,CAAC,CAAc,EAAK,EAAO,CAAC,MAAM,MAAM,MAAM,QAAQ,YAAY,2BAA2B,CAAC,CAAc,EAAK,QAAQ,CAAC,wBAAwB,CAAC,OAAO;8EAC3oD,EAAyB;;2BAE5E,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,EAAM,MAAM,CAAC,GAAG,EAAe,MAAI,UAAU,EAAkB,SAAS,CAAc,EAAK,EAAY,EAAE,CAAC,CAAC,EAAS,CAAC,CAAC,EAAG,CAAC,EAAqB,YAAY,qCAAizB,EAAK,YAAY,mBAAuU,EAAO,YAAY,6BAmFl2C,OAAO,SAAW,MAClB,SAAS,aAAa,UAAW,SAAS,iBAAiB,mBAAmB,EAAsB,CACvG,GAAuB,KC9FpB,SAAwB,EAAU,EAAM,CAAC,GAAK,CAAC,QAAM,EAAY,EAAS,EAAa,SAAS,GAAG,EAAa,OAAY,CAAC,EAAM,GAAUK,EAAS,GAAG,CAAK,EAAK,GAAG,OAAO,EAAP,CAAa,IAAI,MAAM,EAAK,cAAc,MAAM,IAAI,UAAU,EAAK,WAAW,MAAM,IAAI,eAAe,EAAK,GAAG,EAAM,aAAa,gBAAgB,MAAM,IAAI,cAAc,EAAK,eAAe,MACtG,OAD6G,MAAc,CAAC,OAAO,EAAP,CAAa,IAAI,MAAM,EAAS,EAAO,SAAS,KAAK,CAAC,MAAM,IAAI,UAAU,IAAM,EAAK,EAAE,CAAmB,IAAI,gBAAgB,EAAO,SAAS,OAAO,CAAa,SAAS,EAAM,IAAM,CACjjB,EAAI,WAAW,OAAO,GAAE,EAAK,GAAKC,IAAS,CAAC,EAAS,EAAK,CAAC,MAAM,IAAI,eAAe,EAAS,IAAI,gBAAgB,EAAO,SAAS,OAAO,CAAC,IAAI,EAAM,aAAa,EAAE,GAAG,CAAC,MAAM,IAAI,cAAc,EAAS,SAAS,SAAS,CAAC,QAAS,CAAC,EAAK,EAAM,aAAa,CAAC,CAAqB,EAAK,EAAqB,CAAM,OAAK,QAAQ,eAAe,SAAS,CAAC,GAAuB,EAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,SAAS,CAAC,SAAS,GAAM,UAAU,EAAM,OAAO,KAAK,EAAM,CAAC,IAAI,GAAkB,EAAK,QAAQ,CAAC,KAAK,SAAS,KAAK,EAAI,MAAM,EAAM,GAAK,8BAA8B,GAAK,CAAC,CAAC,CAAC,KAAkB,EAAK,QAAQ,CAAC,KAAK,SAAS,KAAK,EAAM,KAAW,QAAM,8BAA8B,GAAK,CAAC,CAAC,CAAC,CAAC,CAAC,uBALloB,IAAiE,IAAsC,IAAuI,CAKsZ,EAAU,YAAY,qBAAqB,EAAoB,EAAU,CAAC,KAAK,CAAC,KAAK,EAAY,KAAK,QAAQ,CAAC,MAAM,UAAU,cAAc,eAAe,CAAC,aAAa,CAAC,cAAc,WAAW,eAAe,gBAAgB,CAAC,wBAAwB,GAAK,0BAA0B,WAAW,CAAC,KAAK,CAAC,KAAK,EAAY,OAAO,aAAa,OAAO,oBAAoB,GAAK,OAAO,GAAO,EAAM,MAAM,UAAU,CAAC,aAAa,CAAC,KAAK,EAAY,OAAO,aAAa,GAAG,YAAY,iBAAiB,MAAM,YAAY,oBAAoB,GAAK,OAAO,GAAO,EAAM,OAAO,eAAe,CAAC,CAAC"}