{"version":3,"file":"RecaptchaInputV3.DMzgYoXv.mjs","names":["useState","useId","useRef","useCallback","useRef","useState"],"sources":["https:/framerusercontent.com/modules/vj7bFUjvEQFgEzNBkdoG/vf3CKm378wlVcBk7IhSU/createStore.js","https:/framer.com/m/framer/store.js@^1.0.0","https:/framerusercontent.com/modules/itVumdSpaLTGejsnG4cS/6LKYMWPrWe4DJ5B7wYmL/QuizScoringShared.js","https:/framerusercontent.com/modules/DwWOdDzQZGCuvkNlbUjZ/Rj7Kdx4qq62ukVsnw7Hz/FramerFormsShared.js","https:/framerusercontent.com/modules/izcZN4ZGMcZDkzkP6rxm/a7OLTRdug1nsRxt8dlTU/RecaptchaInputV3.js"],"sourcesContent":["import{useState,useEffect}from\"react\";import{Data,useObserveData}from\"framer\";export function createStore(state1){// Use Data so that a Preview reload resets the state\nconst dataStore=Data({state:Object.freeze({...state1})});// Create a set function that updates the state\nconst setDataStore=newState=>{// If the state is an object, make sure we copy it\nif(typeof newState===\"function\"){newState=newState(dataStore.state);}dataStore.state=Object.freeze({...dataStore.state,...newState});};// Store the initial state, copy the object if it's an object\nlet storeState=typeof state1===\"object\"?Object.freeze({...state1}):state1;// Keep a list of all the listeners, in the form of React hook setters\nconst storeSetters=new Set();// Create a set function that updates all the listeners / setters\nconst setStoreState=newState=>{// If the state is an object, make sure we copy it\nif(typeof newState===\"function\"){newState=newState(storeState);}storeState=typeof newState===\"object\"?Object.freeze({...storeState,...newState}):newState;// Update all the listeners / setters with the new value\nstoreSetters.forEach(setter=>setter(storeState));};// Create the actual hook based on everything above\nfunction useStore(){// Create the hook we are going to use as a listener\nconst[state,setState]=useState(storeState);// If we unmount the component using this hook, we need to remove the listener\n// @ts-ignore\nuseEffect(()=>{// But right now, we need to add the listener\nstoreSetters.add(setState);return()=>storeSetters.delete(setState);},[]);// If Data context exists, use Data, otherwise use vanilla React state\nif(useObserveData()===true){useObserveData();return[dataStore.state,setDataStore];}else{// Return the state and a function to update the central store\nreturn[state,setStoreState];}}return useStore;}\nexport const __FramerMetadata__ = {\"exports\":{\"createStore\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./createStore.map","/*\n * createStore (framer/store@1.0.1)\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/vj7bFUjvEQFgEzNBkdoG/vf3CKm378wlVcBk7IhSU/createStore.js\"\n","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,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useEffect,useRef,useState}from\"react\";import{getFormInfo,HiddenInput,useInstanceId}from\"https://framerusercontent.com/modules/DwWOdDzQZGCuvkNlbUjZ/Rj7Kdx4qq62ukVsnw7Hz/FramerFormsShared.js\";/** Fixed v3 action — not shown in Google Admin; must match Worker config. */const RECAPTCHA_V3_ACTION=\"submit\";/** Shared verification backend for all Framer Forms customers. */const RECAPTCHA_WORKER_URL=\"https://framerforms-recaptcha.account-ba7.workers.dev\";/** Marks our injected reCAPTCHA token field so we can update/remove it safely. */const RECAPTCHA_TOKEN_SUBMIT_ATTR=\"data-framerforms-recaptcha-token-submit\";/** Google-approved CSS to hide the floating badge (must keep branding in the form flow). */const HIDE_BADGE_STYLE_ID=\"framerforms-recaptcha-hide-badge\";const HIDE_BADGE_CSS=\".grecaptcha-badge { visibility: hidden; }\";let hideBadgeStyleUsers=0;const DEFAULT_MESSAGE_TEXT={font:{fontSize:\"11px\",letterSpacing:\"0em\",lineHeight:\"1.4em\"},color:\"#6b6b6b\",linkColor:\"#6b6b6b\",underlineLinks:true};/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n * @framerDisableUnlink\n */export default function RecaptchaInputV3(props){const{version,v2Settings,v3Settings,hideBadge=false,messageText=DEFAULT_MESSAGE_TEXT,style}=props;const rootRef=useRef(null);const widgetContainerRef=useRef(null);const instanceId=useInstanceId();const[verified,setVerified]=useState(false);const[widgetId,setWidgetId]=useState(null);const[verifyError,setVerifyError]=useState(null);const[invalid,setInvalid]=useState(false);const widgetIdRef=useRef(null);const skipNextSubmitRef=useRef(false);const isCanvas=RenderTarget.current()===RenderTarget.canvas;const siteKey=version===\"v3\"?v3Settings?.siteKey?.trim():v2Settings?.siteKey?.trim();const recaptchaConfigId=v3Settings?.recaptchaConfigId?.trim()||\"\";const projectId=v3Settings?.projectId?.trim()||\"\";const formId=v3Settings?.formId?.trim()||\"\";const isV2Checkbox=version===\"v2checkbox\";const isV2Invisible=version===\"v2invisible\";const isV3=version===\"v3\";const usesTokenOnSubmit=isV2Invisible||isV3;const canHideBadge=isV3||isV2Invisible;const shouldHideBadge=hideBadge&&canHideBadge;const resolvedMessageText={font:messageText?.font??DEFAULT_MESSAGE_TEXT.font,color:messageText?.color??DEFAULT_MESSAGE_TEXT.color,linkColor:messageText?.linkColor??DEFAULT_MESSAGE_TEXT.linkColor,underlineLinks:messageText?.underlineLinks??DEFAULT_MESSAGE_TEXT.underlineLinks};const v3ConfigComplete=Boolean(siteKey&&recaptchaConfigId&&projectId&&formId);const v3ConfigMissing=isV3&&siteKey&&!v3ConfigComplete;useEffect(()=>{if(!shouldHideBadge||typeof document===\"undefined\")return;hideBadgeStyleUsers+=1;let styleEl=document.getElementById(HIDE_BADGE_STYLE_ID);if(!styleEl){styleEl=document.createElement(\"style\");styleEl.id=HIDE_BADGE_STYLE_ID;styleEl.textContent=HIDE_BADGE_CSS;document.head.appendChild(styleEl);}return()=>{hideBadgeStyleUsers=Math.max(0,hideBadgeStyleUsers-1);if(hideBadgeStyleUsers===0){document.getElementById(HIDE_BADGE_STYLE_ID)?.remove();}};},[shouldHideBadge]);useEffect(()=>{setVerified(false);setInvalid(false);if(widgetIdRef.current!==null){window.grecaptcha?.reset?.(widgetIdRef.current);widgetIdRef.current=null;}setWidgetId(null);if(widgetContainerRef.current){widgetContainerRef.current.innerHTML=\"\";}},[version,siteKey]);useEffect(()=>{if(!siteKey)return;if(isV3){loadV3Script(siteKey);return;}loadV2Script();},[siteKey,isV3]);useEffect(()=>{if(!siteKey||isV3)return;if(!widgetContainerRef.current)return;const interval=window.setInterval(()=>{const grecaptcha=window.grecaptcha;const container=widgetContainerRef.current;if(!grecaptcha?.render||!container||widgetId!==null)return;if(container.childElementCount>0)return;const id=grecaptcha.render(container,{sitekey:siteKey,...isV2Invisible?{size:\"invisible\"}:{},callback:()=>setVerified(true),\"expired-callback\":()=>setVerified(false)});widgetIdRef.current=id;setWidgetId(id);window.clearInterval(interval);},500);return()=>window.clearInterval(interval);},[siteKey,isV3,isV2Invisible,widgetId]);useEffect(()=>{if(!usesTokenOnSubmit||!siteKey)return;const form=getFormInfo(rootRef.current).form;if(!form)return;const tokenSelector=tokenSelectorForInstance(instanceId);const removeSubmitFields=()=>{form.querySelectorAll(tokenSelector).forEach(field=>field.remove());// Google widgets may also inject a named textarea/input — strip so emails stay clean.\nform.querySelectorAll('[name=\"g-recaptcha-response\"]').forEach(field=>field.remove());};const onSubmitCapture=async event=>{if(skipNextSubmitRef.current){skipNextSubmitRef.current=false;return;}event.preventDefault();event.stopPropagation();setVerifyError(null);try{let token;if(isV3){if(!v3ConfigComplete){const errorMsg=\"reCAPTCHA is not fully configured. Please complete setup in V3 Settings.\";console.error(errorMsg);setVerifyError(errorMsg);removeSubmitFields();return;}const grecaptcha=await waitForGrecaptcha();token=await grecaptcha.execute(siteKey,{action:RECAPTCHA_V3_ACTION});const verifyResult=await verifyWithWorker({recaptchaConfigId,projectId,formId,token,action:RECAPTCHA_V3_ACTION});if(!verifyResult.success){const errorMsg=getVerifyErrorMessage(verifyResult.reason);console.error(\"reCAPTCHA verification failed:\",{reason:verifyResult.reason,errorCodes:verifyResult.errorCodes,hostname:verifyResult.hostname});setVerifyError(errorMsg);removeSubmitFields();return;}// Token already verified by our Worker — do not put it in the form\n// payload (Framer emails would include the raw token).\nremoveSubmitFields();skipNextSubmitRef.current=true;form.requestSubmit();return;}else if(widgetId!==null){const grecaptcha=await waitForGrecaptcha();token=await grecaptcha.execute(widgetId);}else{const errorMsg=\"reCAPTCHA widget is not ready. Please try again.\";console.error(errorMsg);setVerifyError(errorMsg);return;}// v2: keep a named field only if a backend expects it; prefer not emailing the token.\ninjectRecaptchaToken(form,token,instanceId,{includeInFormData:false});skipNextSubmitRef.current=true;form.requestSubmit();}catch(error){const errorMsg=error instanceof Error?error.message:\"reCAPTCHA verification failed.\";console.error(\"reCAPTCHA execute failed:\",error);setVerifyError(errorMsg);removeSubmitFields();}};form.addEventListener(\"submit\",onSubmitCapture,true);return()=>{form.removeEventListener(\"submit\",onSubmitCapture,true);removeSubmitFields();};},[usesTokenOnSubmit,siteKey,isV3,recaptchaConfigId,projectId,formId,v3ConfigComplete,widgetId,instanceId]);if(!siteKey){return /*#__PURE__*/_jsx(\"div\",{ref:rootRef,style:{...style},children:/*#__PURE__*/_jsx(InvalidSetupMessage,{message:\"Enter your reCAPTCHA site key in the properties panel\"})});}if(v3ConfigMissing&&isCanvas){return /*#__PURE__*/_jsx(\"div\",{ref:rootRef,style:{...style},children:/*#__PURE__*/_jsx(InvalidSetupMessage,{message:\"Open V3 Settings and paste Site Key, Config ID, Project ID, and Form ID from the plugin.\"})});}const showCanvasPlaceholder=isCanvas&&(isV2Invisible||isV3);// v3 is normally fully collapsed on the live site; keep the root visible when we\n// must show Google's required branding text after hiding the floating badge.\nconst collapseRootOnLive=isV3&&!isCanvas&&!shouldHideBadge;return /*#__PURE__*/_jsxs(\"div\",{ref:rootRef,style:collapseRootOnLive?{position:\"absolute\",width:0,height:0,overflow:\"hidden\",opacity:0,pointerEvents:\"none\"}:{...style},\"aria-hidden\":collapseRootOnLive?true:undefined,children:[showCanvasPlaceholder?/*#__PURE__*/_jsx(InvisibleModePlaceholder,{version:version,hideBadge:shouldHideBadge,messageText:resolvedMessageText}):isV2Checkbox?/*#__PURE__*/_jsx(\"div\",{ref:widgetContainerRef}):!isCanvas&&isV2Invisible&&/*#__PURE__*/_jsx(\"div\",{ref:widgetContainerRef,style:{position:\"absolute\",width:0,height:0,overflow:\"hidden\",opacity:0,pointerEvents:\"none\"},\"aria-hidden\":true}),isV2Checkbox&&/*#__PURE__*/_jsx(HiddenInput,{name:\"recaptcha\",required:true,value:verified?\"Yes\":\"\",setInvalid:setInvalid}),shouldHideBadge&&!showCanvasPlaceholder&&/*#__PURE__*/_jsx(RecaptchaBrandingDisclosure,{messageText:resolvedMessageText}),verifyError&&!isCanvas&&/*#__PURE__*/_jsx(VerifyErrorMessage,{message:verifyError,onDismiss:()=>setVerifyError(null)})]});}RecaptchaInputV3.displayName=\"reCAPTCHA Input V3\";addPropertyControls(RecaptchaInputV3,{version:{type:ControlType.Enum,defaultValue:\"v2checkbox\",options:[\"v2checkbox\",\"v2invisible\",\"v3\"],optionTitles:[\"v2 Checkbox\",\"v2 Invisible\",\"v3 Score-based\"],displaySegmentedControl:true,segmentedControlDirection:\"vertical\",title:\"Version\"},v2Settings:{type:ControlType.Object,title:\"V2 Settings\",buttonTitle:\"Configure\",controls:{siteKey:{type:ControlType.String,title:\"Site Key\",defaultValue:\"\",placeholder:\"Paste your site key...\"}},hidden:props=>props.version===\"v3\"},v3Settings:{type:ControlType.Object,title:\"V3 Settings\",buttonTitle:\"Configure\",controls:{siteKey:{type:ControlType.String,title:\"Site Key\",defaultValue:\"\",placeholder:\"6Le...\",description:\"Paste from plugin → Account → reCAPTCHA Settings.\"},recaptchaConfigId:{type:ControlType.String,defaultValue:\"\",title:\"Config ID\",placeholder:\"recaptcha_config_...\",description:\"Paste from plugin → Account → reCAPTCHA Settings.\"},projectId:{type:ControlType.String,defaultValue:\"\",title:\"Project ID\",placeholder:\"project_...\",description:\"Paste from plugin → reCAPTCHA Settings (not your Framer project ID).\"},formId:{type:ControlType.String,defaultValue:\"\",title:\"Form ID\",placeholder:\"form_...\",description:\"Paste from plugin → reCAPTCHA Settings (not Multi-Step Form ID).\"}},hidden:props=>props.version!==\"v3\"},hideBadge:{type:ControlType.Boolean,title:\"Badge\",defaultValue:false,enabledTitle:\"Hidden\",disabledTitle:\"Visible\",description:\"Hides Google’s corner badge. When hidden, a required message is shown (Google’s rule).\",hidden:props=>props.version===\"v2checkbox\"},messageText:{type:ControlType.Object,title:\"Text Style\",buttonTitle:\"Style\",hidden:props=>props.version===\"v2checkbox\"||!props.hideBadge,controls:{font:{type:ControlType.Font,title:\"Font\",controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:{fontSize:\"11px\",variant:\"Regular\",letterSpacing:\"0em\",lineHeight:\"1.4em\",textAlign:\"left\"}},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#6b6b6b\"},linkColor:{type:ControlType.Color,title:\"Link Color\",defaultValue:\"#6b6b6b\"},underlineLinks:{type:ControlType.Boolean,title:\"Underline\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"}}}});function isV3Version(version){return version===\"v3\";}function loadV2Script(){if(document.getElementById(\"recaptcha-script-explicit\"))return;const script=document.createElement(\"script\");script.id=\"recaptcha-script-explicit\";script.src=\"https://www.google.com/recaptcha/api.js?render=explicit\";script.async=true;script.defer=true;document.body.appendChild(script);}function loadV3Script(siteKey){const scriptId=`recaptcha-script-v3-${siteKey}`;if(document.getElementById(scriptId))return;document.querySelectorAll('[id^=\"recaptcha-script-v3-\"]').forEach(node=>node.remove());const script=document.createElement(\"script\");script.id=scriptId;script.src=`https://www.google.com/recaptcha/api.js?render=${encodeURIComponent(siteKey)}`;script.async=true;script.defer=true;document.body.appendChild(script);}function tokenSelectorForInstance(instanceId){const escaped=typeof CSS!==\"undefined\"&&typeof CSS.escape===\"function\"?CSS.escape(instanceId):instanceId.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"');return`input[type=\"hidden\"][${RECAPTCHA_TOKEN_SUBMIT_ATTR}=\"${escaped}\"]`;}function injectRecaptchaToken(form,token,instanceId,options={}){const includeInFormData=options.includeInFormData??false;const selector=tokenSelectorForInstance(instanceId);let input=form.querySelector(selector);if(!input){input=document.createElement(\"input\");input.type=\"hidden\";input.setAttribute(RECAPTCHA_TOKEN_SUBMIT_ATTR,instanceId);form.appendChild(input);}// Without a name, browsers do not include the field in FormData / email payloads.\nif(includeInFormData){input.name=\"g-recaptcha-response\";}else{input.removeAttribute(\"name\");}input.value=token;}async function verifyWithWorker(input){const endpoint=`${RECAPTCHA_WORKER_URL.replace(/\\/$/,\"\")}/recaptcha/verify`;const response=await fetch(endpoint,{method:\"POST\",headers:{\"Content-Type\":\"application/json\"},body:JSON.stringify({recaptchaConfigId:input.recaptchaConfigId,projectId:input.projectId,formId:input.formId,token:input.token,action:input.action})});return response.json();}function waitForGrecaptcha(){return new Promise((resolve,reject)=>{const timeout=window.setTimeout(()=>{reject(new Error(\"reCAPTCHA did not load in time.\"));},5e3);const check=()=>{const grecaptcha=window.grecaptcha;if(!grecaptcha?.execute){window.setTimeout(check,100);return;}grecaptcha.ready(()=>{window.clearTimeout(timeout);resolve(grecaptcha);});};check();});}function getVerifyErrorMessage(reason){switch(reason){case\"low_score\":return\"Submission blocked — your activity looks automated. Please try again.\";case\"unexpected_action\":case\"config_mismatch\":return\"reCAPTCHA configuration error. Please contact the site owner.\";case\"origin_not_allowed\":case\"unexpected_hostname\":return\"This form cannot be submitted from this domain.\";case\"missing_origin\":return\"Unable to verify form submission origin.\";case\"config_not_found\":return\"reCAPTCHA not configured. Please contact the site owner.\";case\"verification_unsuccessful\":return\"Verification failed. Please try again.\";default:return\"Form submission blocked for security reasons. Please try again.\";}}const InvalidSetupMessage=({message})=>/*#__PURE__*/_jsx(\"div\",{style:{padding:\"12px\",background:\"#fff3cd\",color:\"#856404\",borderRadius:\"6px\",fontSize:\"14px\",textAlign:\"center\",border:\"1px solid #ffc107\"},children:message});const VerifyErrorMessage=({message,onDismiss})=>/*#__PURE__*/_jsxs(\"div\",{style:{position:\"fixed\",bottom:\"20px\",left:\"50%\",transform:\"translateX(-50%)\",padding:\"12px 16px\",background:\"#dc3545\",color:\"#fff\",borderRadius:\"8px\",fontSize:\"14px\",textAlign:\"center\",boxShadow:\"0 4px 12px rgba(0,0,0,0.15)\",zIndex:9999,maxWidth:\"90%\",display:\"flex\",alignItems:\"center\",gap:\"12px\"},children:[/*#__PURE__*/_jsx(\"span\",{children:message}),/*#__PURE__*/_jsx(\"button\",{onClick:onDismiss,style:{background:\"transparent\",border:\"none\",color:\"#fff\",cursor:\"pointer\",fontSize:\"18px\",lineHeight:1,padding:\"0 4px\"},\"aria-label\":\"Dismiss\",children:\"\\xd7\"})]});const InvisibleModePlaceholder=({version,hideBadge=false,messageText})=>{const isV3=version===\"v3\";return /*#__PURE__*/_jsxs(\"div\",{style:{border:\"2px dashed #c8c8c8\",borderRadius:8,padding:16,display:\"flex\",flexDirection:\"column\",gap:12,background:\"#fafafa\",color:\"#666\",fontSize:13,lineHeight:1.45,minWidth:280},children:[/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"flex-start\",gap:12},children:[/*#__PURE__*/_jsx(LockIcon,{}),/*#__PURE__*/_jsxs(\"div\",{children:[/*#__PURE__*/_jsx(\"div\",{style:{fontWeight:600,color:\"#444\",marginBottom:4},children:isV3?\"reCAPTCHA v3 — Score-based\":\"reCAPTCHA v2 — Invisible\"}),/*#__PURE__*/_jsx(\"div\",{children:isV3?hideBadge?\"Runs silently. Corner badge hidden — required branding text shows below.\":\"Runs silently in the background. Visitors may see the reCAPTCHA badge.\":hideBadge?\"Runs on submit. Corner badge hidden — required branding text shows below.\":\"Runs on form submit with no visible checkbox. Visitors may see the reCAPTCHA badge.\"})]})]}),hideBadge&&/*#__PURE__*/_jsx(RecaptchaBrandingDisclosure,{messageText:messageText})]});};/** Google-required notice when the floating badge is hidden. */const RecaptchaBrandingDisclosure=({messageText})=>{const fontStyle=messageText.font??{};const linkStyle={color:messageText.linkColor||messageText.color||\"#6b6b6b\",textDecoration:messageText.underlineLinks?\"underline\":\"none\"};return /*#__PURE__*/_jsxs(\"p\",{style:{margin:0,...fontStyle,color:messageText.color||\"#6b6b6b\"},children:[\"This site is protected by reCAPTCHA and the Google\",\" \",/*#__PURE__*/_jsx(\"a\",{href:\"https://policies.google.com/privacy\",target:\"_blank\",rel:\"noopener noreferrer\",style:linkStyle,children:\"Privacy Policy\"}),\" \",\"and\",\" \",/*#__PURE__*/_jsx(\"a\",{href:\"https://policies.google.com/terms\",target:\"_blank\",rel:\"noopener noreferrer\",style:linkStyle,children:\"Terms of Service\"}),\" \",\"apply.\"]});};const LockIcon=()=>/*#__PURE__*/_jsxs(\"svg\",{width:\"20\",height:\"20\",viewBox:\"0 0 24 24\",fill:\"none\",\"aria-hidden\":true,style:{flexShrink:0,marginTop:2},children:[/*#__PURE__*/_jsx(\"path\",{d:\"M7 11V8a5 5 0 0 1 10 0v3\",stroke:\"#888\",strokeWidth:\"1.5\",strokeLinecap:\"round\"}),/*#__PURE__*/_jsx(\"rect\",{x:\"5\",y:\"11\",width:\"14\",height:\"10\",rx:\"2\",stroke:\"#888\",strokeWidth:\"1.5\"})]});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"RecaptchaInputV3\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"auto\",\"framerSupportedLayoutHeight\":\"auto\",\"framerDisableUnlink\":\"\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./RecaptchaInputV3.map"],"mappings":"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"}