{"version":3,"file":"PageFlowEngine.BRwTaNCT.mjs","names":["useState","useId","useRef","useState","useCallback","useRef","useState","useCallback","useRef","useState","useCallback","useMemo"],"sources":["https:/framerusercontent.com/modules/VD4cRy8c6CSVcNmoNQff/7lVAII2EicUZaKb7daCe/PageFlowKit.js","https:/framer.com/m/PageFlowKit-84BHkq.js","https:/framerusercontent.com/modules/eUxPrF74bzcw9ALzKBRW/IDvLqDlDZXPgyjjsqI5O/PageFlowAction.js","https:/framerusercontent.com/modules/qjtpiprjoUEhcNb8ncGU/BCI9h8mpjoHpprpiQret/PageFlowDots.js","https:/framerusercontent.com/modules/DsfqRXYs2mmh0wrs8Eeo/n5lHDOthzSKdzZD51M5F/PageFlowEngine.js"],"sourcesContent":["/**\n * PageFlowKit — Shared core for multi-step page flow system.\n *\n * Pattern: matches ConditionalLogicUtil.ts structure exactly.\n * - .ts extension (Framer handles JSX in .ts)\n * - forwardRef default export with displayName\n * - import from \"framer\" for ControlType\n * - Standard React hooks only (no useSyncExternalStore)\n */import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{forwardRef,useEffect,useId,useState}from\"react\";// ============================================================================\n// SHARED STORE — module-level singleton\n// All components importing this URL share the same _store variable.\n// Uses useState + manual subscription (compatible with all React versions).\n// ============================================================================\nlet _store={};const _listeners=new Set;function _notifyListeners(){_listeners.forEach(fn=>fn());}function _setStore(updater){_store=typeof updater===\"function\"?updater(_store):updater;_notifyListeners();}export function usePageFlowStore(){const[,forceUpdate]=useState(0);useEffect(()=>{const listener=()=>forceUpdate(n=>n+1);_listeners.add(listener);return()=>{_listeners.delete(listener);};},[]);return[_store,_setStore];}// ============================================================================\n// UNIQUE ID\n// ============================================================================\nexport const usePageFlowInstanceId=()=>{const id=useId();return`PF-${id.replace(/:/g,\"\")}`;};// ============================================================================\n// UUID GENERATOR\n// ============================================================================\nfunction uuid(){return\"pf-xxxx-xxxx\".replace(/x/g,()=>(Math.random()*16|0).toString(16));}// ============================================================================\n// FORM DISCOVERY\n// ============================================================================\n/**\n * Discovers the native Framer form structure from any element inside it.\n * Finds the <form>, generates/reads a unique ID, and locates the pages container.\n * Searches anywhere inside the form (deep search), not just direct children.\n */export function discoverPageFlow(element,containerName=\"Pages\"){const result={form:null,formId:null,pages:null,totalPages:0};if(!element)return result;const form=element.closest(\"form\");if(!form)return result;result.form=form;// Get or assign a unique form ID\nlet formId=form.getAttribute(\"data-pf-id\");if(!formId){formId=uuid();form.setAttribute(\"data-pf-id\",formId);}result.formId=formId;// Deep search — JS loop for reliable case-insensitive matching\nconst nameLower=containerName.toLowerCase();const candidates=form.querySelectorAll(\"[data-framer-name]\");for(const el of Array.from(candidates)){if(el.getAttribute(\"data-framer-name\")?.toLowerCase()===nameLower){result.pages=el;result.totalPages=el.children.length;break;}}return result;}/**\n * Reads page names from the Framer layer names of each page.\n */export function readPageNames(pages){if(!pages)return[];const names=[];for(let i=0;i<pages.children.length;i++){const child=pages.children[i];const name=child.getAttribute(\"data-framer-name\")||child.getAttribute(\"name\")||`Page ${i+1}`;names.push(name);}return names;}// ============================================================================\n// ANCESTOR CHECK\n// ============================================================================\nexport function isAncestor(ancestor,element){let current=element;while(current){if(current===ancestor)return true;current=current.parentElement;}return false;}// ============================================================================\n// PAGE VALIDATION\n// ============================================================================\n/** Custom event name dispatched on hidden/readOnly proxy inputs during page validation. */export const PF_VALIDATE_EVENT=\"pageflow:validate\";function isVisible(el){if(el instanceof HTMLInputElement&&el.type===\"hidden\")return true;return el.offsetParent!==null;}/**\n * Validates all visible inputs on a page. Shows browser validation UI.\n *\n * For standard inputs, uses reportValidity().\n * For proxy inputs (type=\"hidden\" or readOnly) that don't support native\n * constraint validation:\n *  - readOnly inputs: temporarily removes readOnly so reportValidity() works\n *  - hidden inputs with required: temporarily changes type to \"text\" so\n *    reportValidity() can enforce the required constraint\n *  - hidden inputs without required: dispatches a cancelable\n *    \"pageflow:validate\" custom event so the owning control can run its\n *    own validation and call preventDefault() to signal failure\n */export function validatePage(pageElement){const inputs=pageElement.querySelectorAll(\"input, select, textarea\");for(const input of Array.from(inputs)){if(!isVisible(input))continue;if(input instanceof HTMLInputElement&&input.readOnly){// ReadOnly inputs skip reportValidity() UI.\n// Temporarily remove readOnly so browser validation fires\n// (triggers onInvalid handler in the owning control).\ninput.readOnly=false;const valid=input.reportValidity();input.readOnly=true;if(!valid)return false;}else if(input instanceof HTMLInputElement&&input.type===\"hidden\"){if(input.hasAttribute(\"required\")){// Hidden inputs with required: temporarily make them\n// text inputs so reportValidity() enforces the constraint.\nconst origStyle=input.getAttribute(\"style\");input.type=\"text\";input.style.position=\"absolute\";input.style.opacity=\"0\";input.style.height=\"0\";input.style.overflow=\"hidden\";input.style.pointerEvents=\"none\";const valid=input.reportValidity();input.type=\"hidden\";if(origStyle){input.setAttribute(\"style\",origStyle);}else{input.removeAttribute(\"style\");}if(!valid)return false;}else{// Hidden inputs without required: dispatch custom event\n// so controls with their own validation logic can respond.\nconst event=new CustomEvent(PF_VALIDATE_EVENT,{bubbles:false,cancelable:true});input.dispatchEvent(event);if(event.defaultPrevented)return false;}}else{if(!input.reportValidity())return false;}}return true;}/**\n * Silently checks if all required fields on a page have values.\n */export function checkPageFilled(pageElement){const inputs=pageElement.querySelectorAll(\"input[required], select[required], textarea[required]\");for(const input of Array.from(inputs)){if(input.disabled)continue;const el=input;if(input.tabIndex===-1&&el.style.opacity===\"0\")continue;if((input.value??\"\").trim()===\"\")return false;}return true;}/**\n * Clears all input values on a page element.\n */export function clearPageInputs(pageElement){const inputs=pageElement.querySelectorAll(\"input, select, textarea\");for(const input of Array.from(inputs)){if(input instanceof HTMLSelectElement){input.selectedIndex=0;}else if(input instanceof HTMLInputElement&&(input.type===\"checkbox\"||input.type===\"radio\")){input.checked=false;}else{input.value=\"\";}input.dispatchEvent(new Event(\"input\",{bubbles:true}));input.dispatchEvent(new Event(\"change\",{bubbles:true}));}}// ============================================================================\n// GET FOCUSABLE INPUTS\n// ============================================================================\nexport function getPageInputs(pageElement){const inputs=pageElement.querySelectorAll(['input:not([type=\"hidden\"]):not([disabled]):not([name=\"\"]):not([tabindex=\"-1\"])','textarea:not([disabled]):not([name=\"\"]):not([tabindex=\"-1\"])','select:not([disabled]):not([name=\"\"]):not([tabindex=\"-1\"])','button:not([disabled]):not([tabindex=\"-1\"])'].join(\", \"));return Array.from(inputs).filter(el=>window.getComputedStyle(el).display!==\"none\");}// ============================================================================\n// CONNECTION HOOK\n// ============================================================================\nexport function usePageFlowConnection(ref){const[formId,setFormId]=useState(null);const[store,setStore]=usePageFlowStore();useEffect(()=>{if(!ref.current)return;const info=discoverPageFlow(ref.current);if(info.formId){setFormId(info.formId);}},[]);const state=formId?store[formId]||null:null;return{formId,state,store,setStore};}// ============================================================================\n// CANVAS TAG — small label for invisible components on Framer canvas\n// ============================================================================\nexport function CanvasTag({text,color=\"#0099FF\"}){return /*#__PURE__*/_jsxs(\"div\",{style:{display:\"inline-flex\",alignItems:\"center\",gap:6,padding:\"5px 10px\",background:`${color}10`,borderRadius:6,fontSize:11,fontWeight:600,color:color,whiteSpace:\"nowrap\",userSelect:\"none\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{width:8,height:8,borderRadius:\"50%\",background:color,flexShrink:0}}),text]});}// ============================================================================\n// CSS CONSTANTS\n// ============================================================================\nexport const PF_ENGINE_ATTR=\"data-pf-engine\";export const PF_ID_ATTR=\"data-pf-id\";export const PF_SUBMIT_HIDDEN_ATTR=\"data-pf-submit-hidden\";export const PF_ENGINE_CLASS=\"pf-pageflow-engine\";// ============================================================================\n// DEFAULT EXPORT — matches ConditionalLogicUtil.ts pattern\n// ============================================================================\nconst PageFlowKit=/*#__PURE__*/forwardRef((_,ref)=>{return /*#__PURE__*/_jsx(\"div\",{ref:ref,style:{display:\"none\"}});});PageFlowKit.displayName=\"PageFlow Kit\";export default PageFlowKit;\nexport const __FramerMetadata__ = {\"exports\":{\"validatePage\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PF_ENGINE_ATTR\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"usePageFlowStore\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getPageInputs\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PF_ENGINE_CLASS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"usePageFlowInstanceId\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"isAncestor\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"discoverPageFlow\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PF_ID_ATTR\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PF_VALIDATE_EVENT\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PageFlowInfo\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PageFlowStore\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"checkPageFilled\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"usePageFlowConnection\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"readPageNames\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"clearPageInputs\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PageFlowState\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CanvasTag\":{\"type\":\"reactComponent\",\"name\":\"CanvasTag\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"PF_SUBMIT_HIDDEN_ATTR\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./PageFlowKit.map","/*\n * PageFlowKit\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/VD4cRy8c6CSVcNmoNQff/7lVAII2EicUZaKb7daCe/PageFlowKit.js\"\nexport { default } from \"https://framerusercontent.com/modules/VD4cRy8c6CSVcNmoNQff/7lVAII2EicUZaKb7daCe/PageFlowKit.js\"\n","/**\n * PageFlowAction — Next/Previous navigation button.\n *\n * Drop inside a native Framer form alongside PageFlowEngine.\n * Auto-hides: Previous on first page, Next on last page.\n * Validates current page before allowing forward navigation.\n * Fully styleable via Framer property controls.\n */import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{motion}from\"framer-motion\";import{useCallback,useEffect,useRef,useState}from\"react\";// ⚠️ UPDATE: Replace with published PageFlowKit URL after deploying\nimport{usePageFlowStore,discoverPageFlow}from\"https://framer.com/m/PageFlowKit-84BHkq.js\";const DEFAULT_BUTTON_STYLE={font:{fontSize:14,fontWeight:\"600\"},color:\"#FFFFFF\",background:\"#0099FF\",hoverBackground:\"#007ACC\",padding:\"12px\",radius:\"10px\",border:{borderWidth:0,borderStyle:\"solid\",borderColor:\"transparent\"},shadow:\"\",minWidth:100};// ─── Component ──────────────────────────────────────────────\n/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n * @framerIntrinsicWidth 120\n * @framerIntrinsicHeight 44\n * @framerDisableUnlink\n */export default function PageFlowAction(props){const{direction=\"next\",label,buttonStyle,_meta,style,click}=props;const btnStyle={...DEFAULT_BUTTON_STYLE,...buttonStyle||{},font:{...DEFAULT_BUTTON_STYLE.font,...buttonStyle&&buttonStyle.font||{}},border:{...DEFAULT_BUTTON_STYLE.border,...buttonStyle&&buttonStyle.border||{}}};const rootRef=useRef(null);const isCanvas=RenderTarget.current()===RenderTarget.canvas;const isPrev=direction===\"previous\";const[formId,setFormId]=useState(null);const[hovered,setHovered]=useState(false);const[store]=usePageFlowStore();const state=formId?store[formId]:null;// Discover form on mount\nuseEffect(()=>{if(!rootRef.current||isCanvas)return;const info=discoverPageFlow(rootRef.current);if(info.formId)setFormId(info.formId);},[isCanvas]);// Determine visibility\nlet hidden=false;if(!isCanvas&&state){const page=state.pageHistory[state.pageHistory.length-1]??0;if(isPrev){hidden=page===0// Hide Previous on first page\n;}else{hidden=state.isLastPage// Hide Next on last page\n;}}else if(!isCanvas&&!state){hidden=isPrev// Before init, hide Previous\n;}const handleClick=useCallback(()=>{if(!state)return;if(isPrev){state.goPrev();}else{state.goNext();}click?.();},[state,isPrev,click]);const buttonText=label||(isPrev?\"Previous\":\"Next\");// ─── Canvas Preview ─────────────────────────────────────\nif(isCanvas){return /*#__PURE__*/_jsx(\"div\",{ref:rootRef,style:style,children:/*#__PURE__*/_jsx(\"div\",{style:{...btnStyle.font,...btnStyle.border,color:isPrev?btnStyle.background:btnStyle.color,background:isPrev?\"transparent\":btnStyle.background,border:isPrev?`1.5px solid ${btnStyle.background}`:undefined,padding:btnStyle.padding,borderRadius:btnStyle.radius,display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",minWidth:btnStyle.minWidth,minHeight:44,cursor:\"pointer\"},children:buttonText})});}// ─── Hidden State ───────────────────────────────────────\nif(hidden){return /*#__PURE__*/_jsx(\"div\",{ref:rootRef,style:{display:\"none\"}});}// ─── Render ─────────────────────────────────────────────\nconst resolvedBg=isPrev?\"transparent\":hovered?btnStyle.hoverBackground:btnStyle.background;const resolvedColor=isPrev?btnStyle.background:btnStyle.color;const resolvedBorder=isPrev?`1.5px solid ${btnStyle.background}`:btnStyle.border.borderWidth?`${btnStyle.border.borderWidth}px ${btnStyle.border.borderStyle} ${btnStyle.border.borderColor}`:\"none\";return /*#__PURE__*/_jsx(\"div\",{ref:rootRef,style:style,children:/*#__PURE__*/_jsx(motion.button,{type:\"button\",onClick:handleClick,onMouseEnter:()=>setHovered(true),onMouseLeave:()=>setHovered(false),whileTap:{scale:.97},style:{...btnStyle.font,color:resolvedColor,background:resolvedBg,border:resolvedBorder,padding:btnStyle.padding,borderRadius:btnStyle.radius,boxShadow:btnStyle.shadow||\"none\",display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",minWidth:btnStyle.minWidth,minHeight:44,cursor:\"pointer\",outline:\"none\",transition:\"background 0.2s ease, color 0.2s ease\"},children:buttonText})});}PageFlowAction.displayName=\"PageFlow Action\";PageFlowAction.defaultProps={direction:\"next\",label:\"\",buttonStyle:DEFAULT_BUTTON_STYLE,_meta:\"\",style:{},click:null};addPropertyControls(PageFlowAction,{direction:{type:ControlType.Enum,title:\"Direction\",defaultValue:\"next\",options:[\"next\",\"previous\"],optionTitles:[\"Next\",\"Previous\"],displaySegmentedControl:true},label:{type:ControlType.String,title:\"Label\",defaultValue:\"\",placeholder:\"Next / Previous\",description:\"Leave empty to auto-set based on direction.\"},buttonStyle:{type:ControlType.Object,title:\"Button Style\",description:\"by [Forms Plugin](https://formsplugin.com/?ref=pageflow)\",controls:{font:{type:ControlType.Font,title:\"Font\",controls:\"basic\",displayFontSize:true,defaultFontType:\"sans-serif\",defaultValue:{fontSize:14,fontWeight:\"600\"}},color:{type:ControlType.Color,title:\"Text Color\",defaultValue:\"#FFFFFF\"},background:{type:ControlType.Color,title:\"Background\",defaultValue:\"#0099FF\"},hoverBackground:{type:ControlType.Color,title:\"Hover\",defaultValue:\"#007ACC\"},padding:{type:ControlType.Padding,title:\"Padding\",defaultValue:\"12px\"},radius:{type:ControlType.BorderRadius,title:\"Radius\",defaultValue:\"10px\"},border:{type:ControlType.Border,title:\"Border\",defaultValue:{borderWidth:0,borderStyle:\"solid\",borderColor:\"transparent\"}},shadow:{type:ControlType.BoxShadow,title:\"Shadow\"},minWidth:{type:ControlType.Number,title:\"Min Width\",defaultValue:100,min:0,max:400,step:10,unit:\"px\"}}},click:{type:ControlType.EventHandler},_meta:{type:ControlType.String,defaultValue:\"\",hidden(){return true;}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"PageFlowAction\",\"slots\":[],\"annotations\":{\"framerDisableUnlink\":\"\",\"framerSupportedLayoutWidth\":\"auto\",\"framerSupportedLayoutHeight\":\"auto\",\"framerIntrinsicHeight\":\"44\",\"framerIntrinsicWidth\":\"120\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./PageFlowAction.map","/**\n * PageFlowDots — Step indicator with multiple visual styles.\n *\n * Supports: dots, numbered badges, labeled steps, detailed sidebar.\n * Badge shape is fully controlled by its border radius (0 = square,\n * 50% = circle, anything in between = rounded).\n * Connectors: line, chevron.\n * Completed states: checkmark, filled number.\n * Auto-reads page names from Framer \"Pages\" layer names.\n * Descriptions configurable per step via array.\n */import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{motion}from\"framer-motion\";import{useCallback,useEffect,useRef,useState}from\"react\";// ⚠️ UPDATE: Replace with published PageFlowKit URL after deploying\nimport{usePageFlowStore,discoverPageFlow,validatePage}from\"https://framer.com/m/PageFlowKit-84BHkq.js\";// ─── Token Resolver ─────────────────────────────────────────\n/**\n * Replaces dynamic tokens in a text template.\n *   [page]  → step's page number (1-based)\n *   [total] → total number of pages\n *   [title] → auto-detected layer name for this step\n */function resolveTokens(template,index,totalPages,layerName){return template.replace(/\\[page\\]/g,String(index+1)).replace(/\\[total\\]/g,String(totalPages)).replace(/\\[title\\]/g,layerName);}// ─── Check SVG Icon ─────────────────────────────────────────\nfunction CheckIcon({size,color}){return /*#__PURE__*/_jsx(\"svg\",{width:size*.5,height:size*.5,viewBox:\"0 0 12 10\",fill:\"none\",style:{display:\"block\"},children:/*#__PURE__*/_jsx(\"path\",{d:\"M1 5.5L4 8.5L11 1.5\",stroke:color,strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\"})});}// ─── Chevron Separator ──────────────────────────────────────\nfunction ChevronIcon({color}){return /*#__PURE__*/_jsx(\"svg\",{width:\"8\",height:\"14\",viewBox:\"0 0 8 14\",fill:\"none\",style:{display:\"block\",flexShrink:0},children:/*#__PURE__*/_jsx(\"path\",{d:\"M1 1L7 7L1 13\",stroke:color,strokeWidth:\"1.5\",strokeLinecap:\"round\",strokeLinejoin:\"round\"})});}// ─── Component ──────────────────────────────────────────────\n/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight auto\n * @framerIntrinsicWidth 280\n * @framerIntrinsicHeight 32\n * @framerDisableUnlink\n */export default function PageFlowDots(props){const{visualStyle=\"numbers\",layout=\"horizontal\",textPlacement=\"bottom\",clickable=true,completedIcon=\"check\",gap=8,badge:{size:badgeSize=24,radius:badgeRadius=\"50%\",activeBg=\"#4F35DC\",completedBg=\"#4F35DC\",pendingBg=\"#F3F4F6\",textFont:badgeTextFont,activeTextColor=\"#FFFFFF\",completedTextColor=\"#FFFFFF\",pendingTextColor=\"#9CA3AF\"}={},connector:{show:showConnector=true,style:connectorStyle=\"line\",color:connectorColor=\"#E5E7EB\"}={},titleStyle:{font:titleFont,textAlign=\"left\",activeColor:titleActiveColor=\"#4F35DC\",completedColor:titleCompletedColor=\"#4F35DC\",pendingColor:titlePendingColor=\"#9CA3AF\",items:titleItems=[]}={},descriptionStyle:{font:descFont,color:descColor=\"#6B7280\",items:descItems=[]}={},_meta,style}=props;const badgeTextFontConfig={fontWeight:700,...badgeTextFont||{}};const titleFontConfig={fontSize:13,fontWeight:\"600\",...titleFont||{}};const descFontConfig={fontSize:12,fontWeight:\"400\",...descFont||{}};const rootRef=useRef(null);const isCanvas=RenderTarget.current()===RenderTarget.canvas;const[formId,setFormId]=useState(null);const pagesRef=useRef(null);const[store]=usePageFlowStore();const state=formId?store[formId]:null;useEffect(()=>{if(!rootRef.current||isCanvas)return;const info=discoverPageFlow(rootRef.current);if(info.formId)setFormId(info.formId);if(info.pages)pagesRef.current=info.pages;},[isCanvas]);const rawTotal=state?.totalPages??3;const pageHistory=state?.pageHistory??[0];const currentPage=pageHistory[pageHistory.length-1]??0;const pageNames=state?.pageNames??Array.from({length:rawTotal},(_,i)=>`Page ${i+1}`);// Set of visited pages for robust completion check\nconst visitedSet=new Set(pageHistory);// Filter out pages hidden by page conditions so they disappear from the dots.\nconst hiddenPages=Array.isArray(state?.hiddenPages)?state.hiddenPages:[];const hiddenSet=new Set(hiddenPages);const visibleIndices=[];for(let i=0;i<rawTotal;i++){if(!hiddenSet.has(i))visibleIndices.push(i);}const totalPages=visibleIndices.length||rawTotal;const handleClick=useCallback(index=>{if(!clickable||!state)return;// Validate current page before allowing forward navigation\n// (same behavior as the Next button)\nif(index>currentPage&&pagesRef.current){const currentPageEl=pagesRef.current.children[currentPage];if(currentPageEl&&!validatePage(currentPageEl)){return;// Block — validation failed\n}}state.jumpToPage(index);},[clickable,state,currentPage]);const isVertical=layout===\"vertical\";const isSide=textPlacement===\"side\";const showLabels=visualStyle===\"labels\"||visualStyle===\"detailed\";const showDesc=visualStyle===\"detailed\";const showNumbers=visualStyle!==\"dots\";// Shape is driven entirely by the user-set radius: \"0px\" = square,\n// \"50%\" = circle, any value between = rounded.\nconst borderRadius=badgeRadius;// ─── Render Badge ───────────────────────────────────────\nconst renderBadge=(index,displayNumber,isCurrent,isCompleted)=>{const bgColor=isCurrent?activeBg:isCompleted?completedBg:pendingBg;const badgeTextColor=isCurrent?activeTextColor:isCompleted?completedTextColor:pendingTextColor;// Completed with checkmark — use key to force remount for clean animation\nif(isCompleted&&completedIcon===\"check\"){return /*#__PURE__*/_jsx(motion.div,{animate:{scale:1},initial:{scale:.8},transition:{duration:.2},style:{width:badgeSize,height:badgeSize,borderRadius:borderRadius,background:completedBg,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",flexShrink:0},children:/*#__PURE__*/_jsx(CheckIcon,{size:badgeSize,color:\"#FFFFFF\"})},`badge-${index}-check`);}return /*#__PURE__*/_jsx(motion.div,{animate:{scale:isCurrent?1.05:1,backgroundColor:bgColor},transition:{duration:.25,ease:\"easeOut\"},style:{width:badgeSize,height:badgeSize,borderRadius:borderRadius,background:bgColor,display:\"flex\",alignItems:\"center\",justifyContent:\"center\",flexShrink:0},children:showNumbers&&/*#__PURE__*/_jsx(\"span\",{style:{...badgeTextFontConfig,fontSize:badgeTextFontConfig.fontSize||badgeSize*.45,color:badgeTextColor,lineHeight:1},children:displayNumber})},`badge-${index}-num`);};// ─── Render Connector ───────────────────────────────────\nconst renderConnector=(index,visibleIdx)=>{if(!showConnector||visibleIdx>=totalPages-1)return null;const isCompletedSegment=visitedSet.has(index)&&index<currentPage;const lineColor=isCompletedSegment?completedBg:connectorColor;if(connectorStyle===\"chevron\"){return /*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",alignItems:\"center\",padding:isVertical?\"4px 0\":\"0 4px\",flexShrink:0},children:/*#__PURE__*/_jsx(ChevronIcon,{color:lineColor})},`conn-${index}`);}// Line connector\nif(isVertical){return /*#__PURE__*/_jsx(\"div\",{style:{width:2,height:showDesc?24:16,background:lineColor,marginLeft:badgeSize/2-1,flexShrink:0,transition:\"background 0.25s ease\"}},`conn-${index}`);}return /*#__PURE__*/_jsx(\"div\",{style:{flex:1,height:2,minWidth:16,background:lineColor,alignSelf:\"center\",flexShrink:0,transition:\"background 0.25s ease\"}},`conn-${index}`);};// ─── Render Step ────────────────────────────────────────\nconst renderStep=(index,visibleIdx)=>{const isCurrent=index===currentPage;const isCompleted=visitedSet.has(index)&&index<currentPage;const titleColor=isCurrent?titleActiveColor:isCompleted?titleCompletedColor:titlePendingColor;const stepDescColor=descColor;const layerName=pageNames[index]||`Page ${index+1}`;const displayNumber=visibleIdx+1;// Titles/descriptions are authored per original page, so index by the\n// real page index — when earlier pages are hidden, the remaining visible\n// steps still pull their author-intended text. Token [page] uses the\n// visible position so \"Step 2 of 4\" matches what the user sees.\nconst rawTitle=titleItems[index]?.text;const stepTitle=rawTitle?resolveTokens(rawTitle,visibleIdx,totalPages,layerName):layerName;const rawDesc=descItems[index]?.text;const stepDesc=rawDesc?resolveTokens(rawDesc,visibleIdx,totalPages,layerName):\"\";// \"side\" = badge + text in a row; \"bottom\" = badge on top, text below\nconst stepDirection=isSide?\"row\":\"column\";return /*#__PURE__*/_jsxs(\"div\",{onClick:()=>handleClick(index),style:{display:\"flex\",flexDirection:stepDirection,alignItems:isSide?\"center\":\"center\",gap:isSide?8:4,cursor:clickable?\"pointer\":\"default\",userSelect:\"none\",flexShrink:isVertical?undefined:0},children:[renderBadge(index,displayNumber,isCurrent,isCompleted),showLabels&&/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:2,textAlign:textAlign},children:[/*#__PURE__*/_jsx(\"span\",{style:{...titleFontConfig,color:titleColor,whiteSpace:\"nowrap\",transition:\"color 0.25s ease\"},children:stepTitle}),showDesc&&stepDesc&&/*#__PURE__*/_jsx(\"span\",{style:{...descFontConfig,color:stepDescColor,opacity:isCurrent?.85:.6,transition:\"color 0.25s ease, opacity 0.25s ease\",whiteSpace:isSide?\"normal\":\"nowrap\",maxWidth:isSide?200:undefined},children:stepDesc})]})]},`step-${index}`);};// ─── Render ─────────────────────────────────────────────\nreturn /*#__PURE__*/_jsx(\"div\",{ref:rootRef,style:{display:\"flex\",flexDirection:isVertical?\"column\":\"row\",alignItems:isVertical?\"flex-start\":\"center\",gap:`${gap}px`,width:\"100%\",...style},children:visibleIndices.map((pageIdx,visibleIdx)=>/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:isVertical?\"column\":\"row\",alignItems:isVertical?\"flex-start\":\"center\",gap:`${gap}px`,flex:!isVertical&&showConnector&&connectorStyle===\"line\"&&visibleIdx<totalPages-1?1:undefined},children:[renderStep(pageIdx,visibleIdx),renderConnector(pageIdx,visibleIdx)]},pageIdx))});}PageFlowDots.displayName=\"PageFlow Dots\";PageFlowDots.defaultProps={visualStyle:\"numbers\",layout:\"horizontal\",textPlacement:\"bottom\",clickable:true,completedIcon:\"check\",gap:8,badge:{size:24,radius:\"50%\",activeBg:\"#4F35DC\",completedBg:\"#4F35DC\",pendingBg:\"#F3F4F6\",textFont:{fontWeight:700},activeTextColor:\"#FFFFFF\",completedTextColor:\"#FFFFFF\",pendingTextColor:\"#9CA3AF\"},connector:{show:true,style:\"line\",color:\"#E5E7EB\"},titleStyle:{font:{fontSize:13,fontWeight:\"600\"},textAlign:\"left\",activeColor:\"#4F35DC\",completedColor:\"#4F35DC\",pendingColor:\"#9CA3AF\",items:[]},descriptionStyle:{font:{fontSize:12,fontWeight:\"400\"},color:\"#6B7280\",items:[]},_meta:\"\",style:{}};// ─── Property Controls ──────────────────────────────────────\naddPropertyControls(PageFlowDots,{// ── General ─────────────────────────────────────────────\nvisualStyle:{type:ControlType.Enum,title:\"Style\",defaultValue:\"numbers\",options:[\"dots\",\"numbers\",\"labels\",\"detailed\"],optionTitles:[\"Dots\",\"Numbers\",\"Labels\",\"Detailed\"],description:\"Labels = numbers + titles. Detailed = numbers + titles + descriptions.\"},layout:{type:ControlType.Enum,title:\"Layout\",defaultValue:\"horizontal\",options:[\"horizontal\",\"vertical\"],optionTitles:[\"Horizontal\",\"Vertical\"],optionIcons:[\"direction-horizontal\",\"direction-vertical\"],displaySegmentedControl:true},textPlacement:{type:ControlType.Enum,title:\"Text Position\",defaultValue:\"bottom\",options:[\"bottom\",\"side\"],optionTitles:[\"Below\",\"Beside\"],displaySegmentedControl:true,description:\"Place text below the badge or beside it.\",hidden(props){return props.visualStyle===\"dots\"||props.visualStyle===\"numbers\";}},clickable:{type:ControlType.Boolean,title:\"Clickable\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\"},completedIcon:{type:ControlType.Enum,title:\"Completed Icon\",defaultValue:\"check\",options:[\"check\",\"number\"],optionTitles:[\"Checkmark\",\"Number\"],displaySegmentedControl:true,hidden(props){return props.visualStyle===\"dots\";}},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:8,min:0,max:40,step:1,unit:\"px\"},// ── Badge Style ─────────────────────────────────────────\nbadge:{type:ControlType.Object,title:\"Badge Style\",controls:{size:{type:ControlType.Number,title:\"Size\",defaultValue:24,min:12,max:48,step:1,unit:\"px\"},radius:{type:ControlType.BorderRadius,title:\"Radius\",defaultValue:\"50%\",description:\"Shape of the badge. 50% = circle, 0 = square, in between = rounded.\"},activeBg:{type:ControlType.Color,title:\"Active\",defaultValue:\"#4F35DC\"},completedBg:{type:ControlType.Color,title:\"Completed\",defaultValue:\"#4F35DC\"},pendingBg:{type:ControlType.Color,title:\"Pending\",defaultValue:\"#F3F4F6\"},textFont:{type:ControlType.Font,title:\"Text Font\",controls:\"basic\",displayFontSize:true,defaultFontType:\"sans-serif\",defaultValue:{fontWeight:700}},activeTextColor:{type:ControlType.Color,title:\"Active Text\",defaultValue:\"#FFFFFF\"},completedTextColor:{type:ControlType.Color,title:\"Completed Text\",defaultValue:\"#FFFFFF\"},pendingTextColor:{type:ControlType.Color,title:\"Pending Text\",defaultValue:\"#9CA3AF\"}}},// ── Connector ───────────────────────────────────────────\nconnector:{type:ControlType.Object,title:\"Connector\",controls:{show:{type:ControlType.Boolean,title:\"Show\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\"},style:{type:ControlType.Enum,title:\"Style\",defaultValue:\"line\",options:[\"line\",\"chevron\"],optionTitles:[\"Line\",\"Chevron >\"],displaySegmentedControl:true,hidden(props){return!props.show;}},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#E5E7EB\",hidden(props){return!props.show;}}}},// ── Title Style ─────────────────────────────────────────\ntitleStyle:{type:ControlType.Object,title:\"Title Style\",hidden(props){return props.visualStyle===\"dots\"||props.visualStyle===\"numbers\";},controls:{font:{type:ControlType.Font,title:\"Font\",controls:\"basic\",displayFontSize:true,defaultFontType:\"sans-serif\",defaultValue:{fontSize:13,fontWeight:\"600\"}},textAlign:{type:ControlType.Enum,title:\"Align\",defaultValue:\"left\",options:[\"left\",\"center\",\"right\"],optionTitles:[\"Left\",\"Center\",\"Right\"],optionIcons:[\"text-align-left\",\"text-align-center\",\"text-align-right\"],displaySegmentedControl:true},activeColor:{type:ControlType.Color,title:\"Active\",defaultValue:\"#4F35DC\"},completedColor:{type:ControlType.Color,title:\"Completed\",defaultValue:\"#4F35DC\"},pendingColor:{type:ControlType.Color,title:\"Pending\",defaultValue:\"#9CA3AF\"},items:{type:ControlType.Array,title:\"Titles\",description:\"Custom title per step. Tokens: [page] = step number, [total] = total pages, [title] = layer name. Leave empty to use layer names.\",control:{type:ControlType.Object,controls:{text:{type:ControlType.String,title:\"Text\",defaultValue:\"\",placeholder:\"Step [page]: [title]\"}}},defaultValue:[]}}},// ── Description Style ───────────────────────────────────\ndescriptionStyle:{type:ControlType.Object,title:\"Description Style\",hidden(props){return props.visualStyle!==\"detailed\";},controls:{font:{type:ControlType.Font,title:\"Font\",controls:\"basic\",displayFontSize:true,defaultFontType:\"sans-serif\",defaultValue:{fontSize:12,fontWeight:\"400\"}},color:{type:ControlType.Color,title:\"Color\",defaultValue:\"#6B7280\"},items:{type:ControlType.Array,title:\"Details\",description:\"Description per step. Supports tokens: [page], [total], [title].\",control:{type:ControlType.Object,controls:{text:{type:ControlType.String,title:\"Text\",defaultValue:\"\",placeholder:\"Step [page] description...\"}}},defaultValue:[]}}},// ── Meta ────────────────────────────────────────────────\n_meta:{type:ControlType.String,defaultValue:\"\",description:\"by [Forms Plugin](https://formsplugin.com/?ref=pageflow)\",hidden(){return true;}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"PageFlowDots\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerIntrinsicHeight\":\"32\",\"framerSupportedLayoutHeight\":\"auto\",\"framerDisableUnlink\":\"\",\"framerIntrinsicWidth\":\"280\",\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./PageFlowDots.map","/**\n * PageFlowEngine — The invisible brain of multi-step forms.\n *\n * Drop this inside any native Framer form that has a \"Pages\" frame.\n * It discovers pages, manages navigation state, injects CSS to\n * show/hide pages, and controls the native submit button visibility.\n *\n * Renders nothing visible on the published site.\n * Shows a small label on the Framer design canvas.\n */import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{useCallback,useEffect,useMemo,useRef,useState}from\"react\";// ⚠️ UPDATE: Replace with published PageFlowKit URL after deploying\nimport{usePageFlowStore,usePageFlowInstanceId,discoverPageFlow,readPageNames,validatePage,getPageInputs,CanvasTag,PF_ENGINE_ATTR,PF_ENGINE_CLASS,PF_ID_ATTR,PF_SUBMIT_HIDDEN_ATTR}from\"https://framer.com/m/PageFlowKit-84BHkq.js\";// Reuse operator evaluation from existing ConditionalLogicUtil\nimport{evaluateCondition,TEXT_OPERATOR_IDS,TEXT_OPERATOR_LABELS,NUMBER_OPERATOR_IDS,NUMBER_OPERATOR_LABELS,DATE_OPERATOR_IDS,DATE_OPERATOR_LABELS,NO_VALUE_OPS,RANGE_OPS}from\"https://framer.com/m/ConditionalLogicUtil-69lIOW.js\";// ─── Page Logic Helpers ─────────────────────────────────────\n/**\n * Reads the current value of a form field by name.\n * Handles checkboxes, radios, selects, and multi-value fields via FormData.\n */function getFieldValue(form,fieldName){if(!form||!fieldName)return\"\";try{const formData=new FormData(form);const values=formData.getAll(fieldName);if(values.length===0){// Fallback: maybe the field is disabled or hidden\nconst el=form.querySelector(`[name=\"${fieldName}\"]`);if(!el)return\"\";if(el.type===\"checkbox\"||el.type===\"radio\"){return el.checked?el.value||\"true\":\"\";}return el.value||\"\";}return values.map(v=>String(v)).join(\",\");}catch{return\"\";}}/**\n * Resolves the active operator and values based on field type.\n * Mirrors how field controls handle text/number/date branches.\n */function resolveRuleEvalConfig(rule){if(rule.fieldType===\"number\"){return{fieldType:\"number\",operator:rule.numberOperator||\"is_not_empty\",value:rule.numberValue||\"\",value2:rule.numberValue2||\"\"};}if(rule.fieldType===\"date\"){return{fieldType:\"date\",operator:rule.dateOperator||\"is_not_empty\",value:rule.dateValue||\"\",value2:rule.dateValue2||\"\"};}return{fieldType:\"text\",operator:rule.operator||\"is_not_empty\",value:rule.value||\"\",value2:rule.value2||\"\"};}/**\n * Resolves a user-provided page reference (layer name or 1-indexed number)\n * into a 0-based page index. Returns -1 if the reference can't be resolved.\n */function resolvePageIndex(value,pages){if(!value||!pages)return-1;const trimmed=value.trim();if(!trimmed)return-1;if(/^\\d+$/.test(trimmed)){const idx=parseInt(trimmed,10)-1;if(idx>=0&&idx<pages.children.length)return idx;return-1;}const target=trimmed.toLowerCase();for(let i=0;i<pages.children.length;i++){const child=pages.children[i];const name=child.getAttribute(\"data-framer-name\")||child.getAttribute(\"name\")||\"\";if(name.toLowerCase()===target)return i;}return-1;}/**\n * Computes the set of page indices (0-based) that should be hidden based on\n * page-level conditions. `action: \"hide\"` hides when the condition matches;\n * `action: \"show\"` hides when the condition does NOT match.\n */function computeHiddenPages(rules,form,pages,totalPages){const hidden=new Set;if(!rules||rules.length===0||!form||!pages)return hidden;for(const rule of rules){if(!rule||!rule.enabled)continue;if(!rule.sourceField)continue;const target=resolvePageIndex(rule.targetPage,pages);if(target<0||target>=totalPages)continue;const fieldValue=getFieldValue(form,rule.sourceField);const evalCfg=resolveRuleEvalConfig(rule);try{const matched=evaluateCondition(fieldValue,evalCfg);const shouldHide=rule.action===\"show\"?!matched:matched;if(shouldHide)hidden.add(target);}catch{// Skip rule on error\n}}return hidden;}/**\n * Silently reports whether every required field on a page has a value.\n *\n * Used when the visitor tries to *skip over* a page (e.g. clicking a step\n * dot further ahead). At that moment the page being checked is display:none,\n * so validatePage()'s reportValidity() can't see its inputs (offsetParent is\n * null) and would wrongly pass it — this check works regardless of visibility.\n *\n * `disableUnvisited` temporarily disables inputs on not-yet-visited pages;\n * those still count here as required-but-empty (disabled=\"PageFlow\"). Inputs\n * disabled because their page is hidden by a page condition\n * (disabled=\"PageFlow-Hidden\") are ignored, since navigation skips hidden\n * pages anyway. Any other disabled input is treated as not applicable.\n */function checkRequiredFilled(pageElement){const inputs=pageElement.querySelectorAll(\"input[required], select[required], textarea[required]\");for(const input of Array.from(inputs)){const disabledReason=input.getAttribute(\"disabled\");if(disabledReason===\"PageFlow-Hidden\")continue;if(input.disabled&&disabledReason!==\"PageFlow\")continue;if(input instanceof HTMLInputElement&&(input.type===\"checkbox\"||input.type===\"radio\")){if(input.type===\"checkbox\"){if(!input.checked)return false;}else{// Radio: at least one button in the same-name group must be set.\nconst radios=pageElement.querySelectorAll('input[type=\"radio\"]');const anyChecked=Array.from(radios).some(r=>r.name===input.name&&r.checked);if(!anyChecked)return false;}continue;}if((input.value??\"\").trim()===\"\")return false;}return true;}/** Returns the index of the last visible page, or -1 if none. */function lastVisiblePage(totalPages,hidden){for(let i=totalPages-1;i>=0;i--){if(!hidden.has(i))return i;}return-1;}/** Advances past any hidden pages. Returns totalPages if no visible page remains. */function skipForwardHidden(from,totalPages,hidden){let next=from;while(next<totalPages&&hidden.has(next))next++;return next;}/** Array equality by value for sorted number lists. */function sameSortedArray(a,b){if(a.length!==b.length)return false;for(let i=0;i<a.length;i++)if(a[i]!==b[i])return false;return true;}const AS_STORAGE_PREFIX=\"formly:autosave:\";const AS_SNAPSHOT_VERSION=1;const AS_SKIP_INPUT_TYPES=new Set([\"password\",\"file\",\"submit\",\"reset\",\"button\",\"image\"]);const AS_SKIP_NAME_PATTERNS=[/captcha/i,/turnstile/i,/hcaptcha/i,/recaptcha/i,/^g-recaptcha/i,/^cf-turnstile/i];function asGetStorage(kind){try{if(typeof window===\"undefined\")return null;const s=kind===\"local\"?window.localStorage:window.sessionStorage;const probe=\"__formly_probe__\";s.setItem(probe,\"1\");s.removeItem(probe);return s;}catch{return null;}}// Stable cross-reload storage id for a form. Deliberately does NOT use\n// `data-pf-id` — PageFlowEngine assigns that a fresh random UUID on every\n// page load (a runtime setAttribute that doesn't survive a refresh), so it\n// can't anchor persisted data. Derive instead from the form's Framer layer\n// name and its position among the forms on the page, which stays the same\n// across reloads.\nfunction asFormStorageId(form){const layerName=(form.getAttribute(\"data-framer-name\")||form.getAttribute(\"name\")||\"\").trim();let formIndex=0;try{const all=document.getElementsByTagName(\"form\");for(let i=0;i<all.length;i++){if(all[i]===form){formIndex=i;break;}}}catch{/* ignore */}const base=(layerName||\"form\").replace(/\\s+/g,\"_\");return`${base}#${formIndex}`;}function asBuildKey(form,suffix){const path=typeof location!==\"undefined\"&&location.pathname?location.pathname:\"\";const id=asFormStorageId(form);const sfx=suffix&&suffix.trim()?`:${suffix.trim()}`:\"\";return`${AS_STORAGE_PREFIX}${path}#${id}${sfx}`;}function asParseExclude(raw){return new Set((raw||\"\").split(\",\").map(s=>s.trim()).filter(Boolean));}function asIsPersistable(el){return el instanceof HTMLInputElement||el instanceof HTMLSelectElement||el instanceof HTMLTextAreaElement;}function asShouldSkip(el,exclude,skipDisabled){if(!el.name)return true;if(skipDisabled&&el.disabled)return true;if(el instanceof HTMLInputElement&&AS_SKIP_INPUT_TYPES.has(el.type))return true;if(el.hasAttribute(\"data-no-autosave\"))return true;if(el.hasAttribute(\"data-source-tracker\"))return true;if(el.closest(\"[data-no-autosave]\"))return true;if(exclude.has(el.name))return true;for(const re of AS_SKIP_NAME_PATTERNS)if(re.test(el.name))return true;return false;}function asSetNativeValue(el,value){try{const proto=el instanceof HTMLTextAreaElement?HTMLTextAreaElement.prototype:el instanceof HTMLSelectElement?HTMLSelectElement.prototype:HTMLInputElement.prototype;const desc=Object.getOwnPropertyDescriptor(proto,\"value\");if(desc&&desc.set)desc.set.call(el,value);else el.value=value;}catch{try{el.value=value;}catch{/* ignore */}}}function asNotifyChange(el){try{el.dispatchEvent(new Event(\"input\",{bubbles:true}));}catch{/* ignore */}try{el.dispatchEvent(new Event(\"change\",{bubbles:true}));}catch{/* ignore */}}function asSerializeForm(form,exclude){const s={};const c={};const r={};for(const raw of Array.from(form.elements)){if(!asIsPersistable(raw))continue;const el=raw;if(asShouldSkip(el,exclude,true))continue;if(el instanceof HTMLInputElement){if(el.type===\"checkbox\"){if(!c[el.name])c[el.name]=[];if(el.checked)c[el.name].push(el.value);}else if(el.type===\"radio\"){if(el.checked)r[el.name]=el.value;}else{s[el.name]=el.value;}}else if(el instanceof HTMLSelectElement){if(el.multiple){c[el.name]=Array.from(el.selectedOptions).map(o=>o.value);}else{s[el.name]=el.value;}}else{s[el.name]=el.value;}}return{v:AS_SNAPSHOT_VERSION,savedAt:Date.now(),s,c,r};}function asRestoreForm(form,snap,exclude,skipDisabled,skipFocused=false,// Notify-only pass: don't write values or click anything (so we can't\n// revert something the visitor changed in the meantime) — just\n// re-fire input/change so a control whose React state didn't catch the\n// first pass picks the value up now.\nnotifyOnly=false){if(!snap||snap.v!==AS_SNAPSHOT_VERSION)return;const s=snap.s||{};const c=snap.c||{};const r=snap.r||{};const has=(o,k)=>Object.prototype.hasOwnProperty.call(o,k);const active=skipFocused&&typeof document!==\"undefined\"?document.activeElement:null;const touched=[];for(const raw of Array.from(form.elements)){if(!asIsPersistable(raw))continue;const el=raw;if(asShouldSkip(el,exclude,skipDisabled))continue;if(active&&el===active)continue;if(notifyOnly){// Re-notify text/select fields only — re-clicking a checkbox or\n// radio would toggle it and could undo a fresh selection.\nconst isCheckable=el instanceof HTMLInputElement&&(el.type===\"checkbox\"||el.type===\"radio\");if(!isCheckable&&(has(s,el.name)||has(c,el.name)))touched.push(el);continue;}// If the engine has temporarily disabled this input (an unvisited\n// page), enable it so a synthetic click registers and React's\n// change tracking sees the new value. The engine's own disable\n// passes (disableUnvisited / recheckPageConditions) restore the\n// disabled state right after, keyed on the rehydrated page history.\nif(el.disabled){try{el.disabled=false;}catch{/* ignore */}}if(el instanceof HTMLInputElement){if(el.type===\"checkbox\"){if(has(c,el.name)){const want=c[el.name].includes(el.value);// React listens to `click` (not `change`/`input`) for\n// checkboxes — a synthetic click both toggles the box\n// and flows the change into the control's React state.\nif(el.checked!==want)el.click();}}else if(el.type===\"radio\"){if(has(r,el.name)){const want=r[el.name]===el.value;// Same reasoning as checkboxes; clicking the chosen\n// radio also unchecks its siblings automatically.\nif(want&&!el.checked)el.click();}}else{if(has(s,el.name)&&el.value!==s[el.name]){asSetNativeValue(el,s[el.name]);touched.push(el);}}}else if(el instanceof HTMLSelectElement){if(el.multiple){if(has(c,el.name)){const set=new Set(c[el.name]);let changed=false;for(const opt of Array.from(el.options)){const want=set.has(opt.value);if(opt.selected!==want){opt.selected=want;changed=true;}}if(changed)touched.push(el);}}else{if(has(s,el.name)&&el.value!==s[el.name]){asSetNativeValue(el,s[el.name]);touched.push(el);}}}else{if(has(s,el.name)&&el.value!==s[el.name]){asSetNativeValue(el,s[el.name]);touched.push(el);}}}for(const el of touched)asNotifyChange(el);}function asReadSnapshot(store,key,ttlDays){try{const raw=store.getItem(key);if(!raw)return null;const snap=JSON.parse(raw);if(!snap||snap.v!==AS_SNAPSHOT_VERSION){store.removeItem(key);return null;}const maxAgeMs=Math.max(0,ttlDays)*24*60*60*1e3;if(maxAgeMs>0){const ageMs=Date.now()-(snap.savedAt||0);if(ageMs>maxAgeMs){store.removeItem(key);return null;}}return snap;}catch{try{store.removeItem(key);}catch{/* ignore */}return null;}}function asWriteSnapshot(store,key,form,exclude,pageIndex){try{const snap=asSerializeForm(form,exclude);if(typeof pageIndex===\"number\"&&pageIndex>=0)snap.p=pageIndex;store.setItem(key,JSON.stringify(snap));}catch{/* quota / serialization error — fail silently */}}// ─── Component ──────────────────────────────────────────────\n/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight auto\n * @framerIntrinsicWidth 160\n * @framerIntrinsicHeight 28\n * @framerDisableUnlink\n */export default function PageFlowEngine(props){const{pagesName=\"Pages\",validateOnNext=true,scrollOnNavigate=true,scrollOffset=0,scrollBehavior=\"smooth\",disableUnvisited=true,enterKeyNav=true,pageConditions=[],autosave,_meta,style}=props;// ─── Autosave config (defensively defaulted) ────────────\nconst asEnabled=!!(autosave&&autosave.enabled);const asStorageType=autosave&&autosave.storageType===\"local\"?\"local\":\"session\";const asKeySuffix=autosave&&autosave.keySuffix||\"\";const asDebounceMs=autosave&&typeof autosave.debounceMs===\"number\"?autosave.debounceMs:400;const asTtlDays=autosave&&typeof autosave.ttlDays===\"number\"?autosave.ttlDays:7;const asClearOnSubmit=autosave?autosave.clearOnSubmit!==false:true;const asClearOnLeave=autosave?autosave.clearOnLeave!==false:true;const asExcludeFields=autosave&&autosave.excludeFields||\"\";const rootRef=useRef(null);const instanceId=usePageFlowInstanceId();const isCanvas=RenderTarget.current()===RenderTarget.canvas;const[store,setStore]=usePageFlowStore();const[formId,setFormId]=useState(null);const[initialized,setInitialized]=useState(false);const[hiddenPagesState,setHiddenPagesState]=useState([]);const pageVideosRef=useRef({});const formInfoRef=useRef({form:null,formId:null,pages:null,totalPages:0});const pageConditionsRef=useRef(pageConditions);pageConditionsRef.current=pageConditions;const storeRef=useRef(store);storeRef.current=store;const autosaveInitRef=useRef(false);const autosaveRestoreDoneRef=useRef(false);// ─── State Accessors ────────────────────────────────────\nconst currentState=formId?store[formId]:null;const pageHistory=currentState?.pageHistory??[0];const currentPage=pageHistory[pageHistory.length-1]??0;// ─── Navigation Functions ───────────────────────────────\nconst goNext=useCallback(()=>{const info=formInfoRef.current;if(!info.formId||!info.pages)return;const fId=info.formId;const pages=info.pages;const form=info.form;setStore(prev=>{const prevState=prev[fId];if(!prevState)return prev;const history=prevState.pageHistory;const page=history[history.length-1]??0;const pageEl=pages.children[page];// Validate current page before advancing\nif(validateOnNext&&pageEl&&!validatePage(pageEl)){return prev// Block — validation failed\n;}const hidden=computeHiddenPages(pageConditionsRef.current,form,pages,prevState.totalPages);const lastVis=lastVisiblePage(prevState.totalPages,hidden);// Skip hidden pages going forward\nlet nextPage=skipForwardHidden(page+1,prevState.totalPages,hidden);if(nextPage>=prevState.totalPages)return prev;if(nextPage===page)return prev;const newHistory=[...history,nextPage];return{...prev,[fId]:{...prevState,page:nextPage,pageHistory:newHistory,isLastPage:lastVis>=0&&nextPage===lastVis}};});},[validateOnNext,setStore]);const goPrev=useCallback(()=>{const info=formInfoRef.current;if(!info.formId)return;const fId=info.formId;const form=info.form;const pages=info.pages;setStore(prev=>{const prevState=prev[fId];if(!prevState)return prev;const history=prevState.pageHistory;if(history.length<=1)return prev// Already first\n;const hidden=computeHiddenPages(pageConditionsRef.current,form,pages,prevState.totalPages);const lastVis=lastVisiblePage(prevState.totalPages,hidden);// Pop history until we land on a visible page (or reach the start)\nconst newHistory=history.slice(0,-1);while(newHistory.length>1&&hidden.has(newHistory[newHistory.length-1])){newHistory.pop();}const prevPage=newHistory[newHistory.length-1]??0;return{...prev,[fId]:{...prevState,page:prevPage,pageHistory:newHistory,isLastPage:lastVis>=0&&prevPage===lastVis}};});},[setStore]);const jumpToPage=useCallback(targetIndex=>{const info=formInfoRef.current;if(!info.formId||!info.pages)return;const fId=info.formId;const pages=info.pages;const form=info.form;setStore(prev=>{const prevState=prev[fId];if(!prevState)return prev;if(targetIndex<0||targetIndex>=prevState.totalPages)return prev;const hidden=computeHiddenPages(pageConditionsRef.current,form,pages,prevState.totalPages);const lastVis=lastVisiblePage(prevState.totalPages,hidden);// If the target is hidden, skip forward to the next visible page\nlet resolvedTarget=skipForwardHidden(targetIndex,prevState.totalPages,hidden);if(resolvedTarget>=prevState.totalPages)return prev;const history=prevState.pageHistory;const currentIdx=history[history.length-1]??0;// Going backwards — truncate history, pop hidden tails\nif(resolvedTarget<history.length&&history[resolvedTarget]!==undefined){const newHistory=history.slice(0,resolvedTarget+1);while(newHistory.length>1&&hidden.has(newHistory[newHistory.length-1])){newHistory.pop();}const finalPage=newHistory[newHistory.length-1];return{...prev,[fId]:{...prevState,page:finalPage,pageHistory:newHistory,isLastPage:lastVis>=0&&finalPage===lastVis}};}// Going forward — only allow the jump if every page we'd pass\n// over is satisfied. The current page is on-screen, so\n// validatePage() surfaces the browser's native validation UI.\n// Pages further ahead are display:none, where validatePage()\n// can't see their inputs — so their required fields are checked\n// silently with checkRequiredFilled() instead. The loop stops at\n// the first unsatisfied page, leaving the visitor there to fill\n// it in rather than letting them skip past required fields.\nconst newHistory=[...history];let cursor=currentIdx;for(let i=currentIdx+1;i<=resolvedTarget;i++){if(hidden.has(i))continue;const pageEl=pages.children[cursor];const satisfied=cursor===currentIdx?!pageEl||validatePage(pageEl):!pageEl||checkRequiredFilled(pageEl);if(!satisfied){break;}if(!newHistory.includes(i)){newHistory.push(i);}cursor=i;}const finalPage=newHistory[newHistory.length-1];return{...prev,[fId]:{...prevState,page:finalPage,pageHistory:newHistory,isLastPage:lastVis>=0&&finalPage===lastVis}};});},[setStore]);const setHistoryLength=useCallback(length=>{const fId=formInfoRef.current.formId;if(!fId)return;setStore(prev=>{const prevState=prev[fId];if(!prevState)return prev;const newHistory=prevState.pageHistory.slice(0,length);const page=newHistory[newHistory.length-1]??0;return{...prev,[fId]:{...prevState,page,pageHistory:newHistory,isLastPage:page>=prevState.totalPages-1}};});},[setStore]);// ─── Initialize ─────────────────────────────────────────\nuseEffect(()=>{if(isCanvas||!rootRef.current)return;const info=discoverPageFlow(rootRef.current,pagesName);formInfoRef.current=info;if(!info.formId||!info.pages)return;setFormId(info.formId);const pageNames=readPageNames(info.pages);const total=info.totalPages;// Initialize store for this form\nsetStore(prev=>({...prev,[info.formId]:{page:0,totalPages:total,pageHistory:[0],isLastPage:total<=1,pageNames,hiddenPages:[],goNext,goPrev,jumpToPage,setHistoryLength}}));// Collect videos per page for autoplay management\nconst videoMap={};for(let i=0;i<info.pages.children.length;i++){const vids=info.pages.children[i].querySelectorAll(\"video\");if(vids.length>0){videoMap[i]=Array.from(vids);// Pause autoplay videos on non-first pages\nif(i>0){for(const vid of videoMap[i]){if(vid.hasAttribute(\"autoplay\")){vid.addEventListener(\"play\",()=>setTimeout(()=>vid.pause(),100),{once:true});}}}}}pageVideosRef.current=videoMap;setInitialized(true);},[isCanvas,goNext,goPrev,jumpToPage,setHistoryLength,setStore]);// ─── Update functions in store when they change ─────────\nuseEffect(()=>{if(!formId)return;setStore(prev=>{const prevState=prev[formId];if(!prevState)return prev;return{...prev,[formId]:{...prevState,goNext,goPrev,jumpToPage,setHistoryLength}};});},[formId,goNext,goPrev,jumpToPage,setHistoryLength,setStore]);// ─── Live Page Name Sync ────────────────────────────────\n// Watch for layer name changes (data-framer-name) on page children\n// so renaming pages in Framer layers auto-updates the dots/captions.\nuseEffect(()=>{if(!formId||!initialized||isCanvas)return;const info=formInfoRef.current;if(!info.pages)return;const syncNames=()=>{const names=readPageNames(info.pages);const total=info.pages.children.length;setStore(prev=>{const s=prev[formId];if(!s)return prev;if(s.totalPages===total&&JSON.stringify(s.pageNames)===JSON.stringify(names)){return prev;}return{...prev,[formId]:{...s,pageNames:names,totalPages:total}};});};const observer=new MutationObserver(syncNames);observer.observe(info.pages,{childList:true,subtree:true,attributes:true,attributeFilter:[\"data-framer-name\",\"name\"]});return()=>observer.disconnect();},[formId,initialized,isCanvas,setStore]);// ─── Page Conditions — Hide/Show Pages Based on Field Values ─\nconst recheckPageConditions=useCallback(()=>{if(isCanvas||!formId)return;const info=formInfoRef.current;if(!info.form||!info.pages)return;const hidden=computeHiddenPages(pageConditionsRef.current,info.form,info.pages,info.totalPages);const hiddenList=Array.from(hidden).sort((a,b)=>a-b);setHiddenPagesState(prev=>sameSortedArray(prev,hiddenList)?prev:hiddenList);// Disable inputs on hidden pages so they don't submit or block validation.\n// Source Tracker hidden fields carry `data-source-tracker` and are always\n// submitted — they represent visitor attribution data, not user input.\nfor(let i=0;i<info.pages.children.length;i++){const pageEl=info.pages.children[i];if(hidden.has(i)){const inputs=pageEl.querySelectorAll(\"input[name]:not([disabled]):not([data-source-tracker]), select[name]:not([disabled]):not([data-source-tracker]), textarea[name]:not([disabled]):not([data-source-tracker])\");for(const el of Array.from(inputs)){el.setAttribute(\"disabled\",\"PageFlow-Hidden\");}}else{const wasDisabled=pageEl.querySelectorAll('input[disabled=\"PageFlow-Hidden\"], select[disabled=\"PageFlow-Hidden\"], textarea[disabled=\"PageFlow-Hidden\"]');for(const el of Array.from(wasDisabled)){el.removeAttribute(\"disabled\");}}}// Publish hidden list to the shared store so sibling components can react,\n// and auto-advance if the current page just became hidden.\nsetStore(prev=>{const s=prev[formId];if(!s)return prev;const cur=s.pageHistory[s.pageHistory.length-1];const lastVis=lastVisiblePage(s.totalPages,hidden);const prevHidden=Array.isArray(s.hiddenPages)?s.hiddenPages:[];const hiddenChanged=!sameSortedArray(prevHidden,hiddenList);if(!hidden.has(cur)){const shouldBeLast=lastVis>=0&&cur===lastVis;if(!hiddenChanged&&s.isLastPage===shouldBeLast)return prev;return{...prev,[formId]:{...s,hiddenPages:hiddenList,isLastPage:shouldBeLast}};}// Current page is hidden — advance to the next visible page\nlet next=cur+1;while(next<s.totalPages&&hidden.has(next))next++;if(next<s.totalPages){return{...prev,[formId]:{...s,hiddenPages:hiddenList,page:next,pageHistory:[...s.pageHistory,next],isLastPage:lastVis>=0&&next===lastVis}};}// No forward visible page — fall back to the previous visible page\nlet back=cur-1;while(back>=0&&hidden.has(back))back--;if(back<0){if(!hiddenChanged)return prev;return{...prev,[formId]:{...s,hiddenPages:hiddenList}};}return{...prev,[formId]:{...s,hiddenPages:hiddenList,page:back,pageHistory:[back],isLastPage:lastVis>=0&&back===lastVis}};});},[isCanvas,formId,setStore]);// Watch form field changes and re-evaluate page conditions\nuseEffect(()=>{if(isCanvas||!formId||!initialized)return;const form=formInfoRef.current.form;if(!form)return;recheckPageConditions();form.addEventListener(\"input\",recheckPageConditions);form.addEventListener(\"change\",recheckPageConditions);return()=>{form.removeEventListener(\"input\",recheckPageConditions);form.removeEventListener(\"change\",recheckPageConditions);};},[isCanvas,formId,initialized,recheckPageConditions]);// Re-evaluate whenever page conditions themselves change (user edits on canvas)\nuseEffect(()=>{recheckPageConditions();},[pageConditions,recheckPageConditions]);// Submit-time safety net: right before the browser runs constraint validation,\n// make absolutely sure every input on a hidden page is disabled and not\n// `required`. This guards against React reconciliation restoring either\n// attribute between our last recheck and the submit click.\nuseEffect(()=>{if(isCanvas||!formId||!initialized)return;const form=formInfoRef.current.form;if(!form)return;const onCaptureClick=event=>{const target=event.target;if(!target)return;// Anything that triggers native form submission:\n// explicit submit buttons, or a <button> without a type attribute\n// (defaults to type=\"submit\" per HTML spec).\nconst submitTarget=target.closest('button[type=\"submit\"], input[type=\"submit\"], input[type=\"image\"], button:not([type])');if(!submitTarget)return;const ownerForm=submitTarget.form;if(!ownerForm||ownerForm!==form)return;// Recompute the hidden set right now, then aggressively disable\n// and strip `required` from every input on a hidden page — in both\n// property and attribute form — so constraint validation has\n// nothing to check there. Restoration on next recheck tick is fine\n// because the page's condition is still being re-evaluated.\nconst info=formInfoRef.current;if(!info.form||!info.pages)return;const hidden=computeHiddenPages(pageConditionsRef.current,info.form,info.pages,info.totalPages);for(let i=0;i<info.pages.children.length;i++){if(!hidden.has(i))continue;const pageEl=info.pages.children[i];const inputs=pageEl.querySelectorAll(\"input, select, textarea\");for(const el of Array.from(inputs)){const input=el;// Don't disable Source Tracker fields — they submit\n// attribution data regardless of which page is active.\nif(input.hasAttribute(\"data-source-tracker\"))continue;input.disabled=true;input.setAttribute(\"disabled\",\"PageFlow-Hidden\");if(input.hasAttribute(\"required\")){input.removeAttribute(\"required\");input.required=false;}}}};form.addEventListener(\"click\",onCaptureClick,{capture:true});return()=>{form.removeEventListener(\"click\",onCaptureClick,{capture:true});};},[isCanvas,formId,initialized,recheckPageConditions]);// ─── CSS Injection for Page Visibility ──────────────────\nconst visibilityCss=useMemo(()=>{if(!formId||!initialized||isCanvas)return\"\";const pageIndex=currentPage+1// CSS nth-child is 1-based\n;let css=`form[${PF_ID_ATTR}=\"${formId}\"] [data-framer-name=\"${pagesName}\"] > *:not(:nth-child(${pageIndex})) { display: none !important; }`;if(hiddenPagesState.length>0){const selectors=hiddenPagesState.map(i=>`form[${PF_ID_ATTR}=\"${formId}\"] [data-framer-name=\"${pagesName}\"] > *:nth-child(${i+1})`).join(\", \");css+=`\n${selectors} { display: none !important; }`;}return css;},[formId,currentPage,initialized,isCanvas,pagesName,hiddenPagesState]);// ─── Submit Button Visibility ───────────────────────────\nuseEffect(()=>{if(!formId||isCanvas)return;const info=formInfoRef.current;if(!info.form)return;const submitBtn=info.form.querySelector('button[type=\"submit\"]')??info.form.querySelector('input[type=\"submit\"]');const submitContainer=submitBtn?.closest(\"[data-framer-name]\")??submitBtn?.parentElement;if(submitContainer&&submitContainer instanceof HTMLElement){submitContainer.setAttribute(PF_SUBMIT_HIDDEN_ATTR,currentState?.isLastPage?\"false\":\"true\");}},[formId,currentState?.isLastPage,isCanvas]);// ─── Disable Inputs on Unvisited Pages ──────────────────\nuseEffect(()=>{if(!formId||!disableUnvisited||isCanvas)return;const info=formInfoRef.current;if(!info.pages)return;for(let i=0;i<info.pages.children.length;i++){const pageEl=info.pages.children[i];if(pageHistory.includes(i)){// Re-enable inputs on visited pages\nconst disabled=pageEl.querySelectorAll('input[name][disabled=\"PageFlow\"], select[disabled=\"PageFlow\"], textarea[disabled=\"PageFlow\"]');for(const el of Array.from(disabled)){el.removeAttribute(\"disabled\");}}else{// Disable inputs on unvisited pages. Source Tracker fields\n// are fire-and-forget attribution data — always submit them.\nconst inputs=pageEl.querySelectorAll(\"input[name]:not([disabled]):not([data-source-tracker]), select[name]:not([disabled]):not([data-source-tracker]), textarea[name]:not([disabled]):not([data-source-tracker])\");for(const el of Array.from(inputs)){el.setAttribute(\"disabled\",\"PageFlow\");}}}},[formId,pageHistory,disableUnvisited,isCanvas]);// ─── Video Autoplay Management ──────────────────────────\nuseEffect(()=>{if(!initialized||isCanvas)return;const videoMap=pageVideosRef.current;for(const pageIdx of Object.keys(videoMap)){const idx=parseInt(pageIdx);for(const video of videoMap[idx]){if(idx===currentPage&&video.hasAttribute(\"autoplay\")){video.play().catch(()=>{});}else if(!video.paused){video.pause();}}}},[currentPage,initialized,isCanvas]);// ─── Scroll on Navigate ─────────────────────────────────\nuseEffect(()=>{if(!scrollOnNavigate||!initialized||isCanvas)return;if(!formInfoRef.current.form)return;const form=formInfoRef.current.form;const rect=form.getBoundingClientRect();const targetY=window.scrollY+rect.top-scrollOffset;window.scrollTo({top:Math.max(0,targetY),behavior:scrollBehavior});},[currentPage,scrollOnNavigate,scrollOffset,scrollBehavior,initialized,isCanvas]);// ─── Enter Key Navigation ───────────────────────────────\nuseEffect(()=>{if(!enterKeyNav||!initialized||isCanvas)return;const info=formInfoRef.current;if(!info.form||!info.pages)return;const form=info.form;const pages=info.pages;const onKeyDown=event=>{if(event.key!==\"Enter\")return;const target=event.target;if(!target)return;// Skip textarea — Enter inserts a newline\nif(target.tagName===\"TEXTAREA\")return;// Skip when a custom dropdown is OPEN — the user is\n// pressing Enter to select an option or typing in the\n// search box, not to navigate pages. Covers three cases:\n//   1) Focus on trigger button itself (aria-expanded=\"true\")\n//   2) Focus inside a container with aria-expanded=\"true\"\n//   3) Focus on search input inside a [role=\"listbox\"]\n//      panel (panel is a SIBLING of the trigger, so\n//      closest(\"[aria-expanded]\") won't find it — but\n//      closest(\"[role='listbox']\") will)\nif(target.getAttribute(\"aria-expanded\")===\"true\"||target.closest(\"[aria-expanded='true']\")||target.closest(\"[role='listbox']\")){return;}// Find which page contains the focused element\nlet targetEl=target;let foundPage=null;while(targetEl&&targetEl!==form){if(targetEl.parentElement===pages){foundPage=targetEl;break;}targetEl=targetEl.parentElement;}if(!foundPage){// Focused element is not inside any page — block submit\nevent.preventDefault();event.stopPropagation();return;}const pageElements=Array.from(pages.children);const pageIndex=pageElements.indexOf(foundPage);const inputs=getPageInputs(foundPage);const focusIdx=inputs.indexOf(target);// Determine what to do: focus next input, go next page,\n// or allow natural form submit on last page's last input.\nlet stopEvent=true;if(focusIdx>=0&&focusIdx<inputs.length-1){// More inputs on this page — focus the next one\ninputs[focusIdx+1].focus();}else if(pageIndex<pageElements.length-1){// Not the last page — advance to next page\ngoNext();}else{// Last input on the last page — let the form submit\nstopEvent=false;}if(stopEvent){event.preventDefault();event.stopPropagation();}};form.addEventListener(\"keydown\",onKeyDown,true);return()=>form.removeEventListener(\"keydown\",onKeyDown,true);},[enterKeyNav,initialized,isCanvas,goNext]);// ─── Submit Safety Net ──────────────────────────────────\n// Ultimate guard: block native form submission unless we are on\n// the last visible page. No matter what bypasses the keydown\n// handler above, the form CANNOT submit from an intermediate page.\nuseEffect(()=>{if(isCanvas||!formId||!initialized)return;const form=formInfoRef.current.form;if(!form)return;const onSubmit=event=>{const currentState=storeRef.current[formId];if(currentState&&!currentState.isLastPage){event.preventDefault();event.stopImmediatePropagation();}};form.addEventListener(\"submit\",onSubmit,{capture:true});return()=>form.removeEventListener(\"submit\",onSubmit,{capture:true});},[isCanvas,formId,initialized]);// ─── Autosave: restore saved values + page on mount ─────\n// Runs once after the engine has discovered the form and seeded the\n// store. Restores field values, then rehydrates pageHistory to\n// [0..N] so previously-filled pages stay enabled and the visitor\n// lands back where they left off. Does not touch existing behavior\n// when disabled.\nuseEffect(()=>{if(isCanvas||!asEnabled||!formId||!initialized)return;if(autosaveInitRef.current)return;autosaveInitRef.current=true;const info=formInfoRef.current;if(!info.form){autosaveRestoreDoneRef.current=true;return;}const storage=asGetStorage(asStorageType);if(!storage){autosaveRestoreDoneRef.current=true;return;}const key=asBuildKey(info.form,asKeySuffix);const snap=asReadSnapshot(storage,key,asTtlDays);if(!snap){autosaveRestoreDoneRef.current=true;return;}const exclude=asParseExclude(asExcludeFields);const form=info.form;const total=info.totalPages;const raf=window.requestAnimationFrame(()=>{try{// skipDisabled=false: also write onto inputs that the\n// engine has temporarily disabled on not-yet-visited\n// pages; values persist on disabled inputs and submit\n// once the page is re-enabled via the rehydrated history.\nasRestoreForm(form,snap,exclude,false);}catch{/* ignore */}let target=typeof snap.p===\"number\"?snap.p:0;if(!Number.isFinite(target)||target<0)target=0;if(total>0&&target>total-1)target=total-1;setStore(prev=>{const s=prev[formId];if(!s)return prev;const h=[];for(let i=0;i<=target;i++)h.push(i);return{...prev,[formId]:{...s,page:target,pageHistory:h.length?h:[0]}};});autosaveRestoreDoneRef.current=true;// Nudge page-condition re-evaluation against restored values.\ntry{form.dispatchEvent(new Event(\"input\",{bubbles:true}));}catch{/* ignore */}});// Second pass after the page-history rehydration + PageFlow\n// re-render cascade settle. skipDisabled=true: pages past the\n// restored one have been re-disabled by then. notifyOnly=true:\n// re-fire input/change so controls whose React state didn't catch\n// the first pass pick the value up now, without overwriting\n// anything. Skips the focused element so it can't stomp on input.\nconst secondPass=window.setTimeout(()=>{try{asRestoreForm(form,snap,exclude,true,true,true);}catch{/* ignore */}try{form.dispatchEvent(new Event(\"input\",{bubbles:true}));}catch{/* ignore */}},250);return()=>{window.cancelAnimationFrame(raf);window.clearTimeout(secondPass);// If torn down before the restore actually ran (StrictMode\n// double-invoke / spurious remount), let the next mount retry.\nif(!autosaveRestoreDoneRef.current)autosaveInitRef.current=false;};},[isCanvas,asEnabled,asStorageType,asKeySuffix,asTtlDays,asExcludeFields,formId,initialized,setStore]);// ─── Autosave: debounced save on field changes + flush ──\nuseEffect(()=>{if(isCanvas||!asEnabled||!formId||!initialized)return;const info=formInfoRef.current;if(!info.form)return;const storage=asGetStorage(asStorageType);if(!storage)return;const key=asBuildKey(info.form,asKeySuffix);const exclude=asParseExclude(asExcludeFields);const form=info.form;const pageIdx=()=>{const s=storeRef.current[formId];if(!s||!Array.isArray(s.pageHistory))return 0;return s.pageHistory[s.pageHistory.length-1]??0;};let timer=null;const doSave=()=>{// Don't overwrite a stored snapshot until restore has run.\nif(!autosaveRestoreDoneRef.current)return;asWriteSnapshot(storage,key,form,exclude,pageIdx());};const onChange=()=>{if(timer)clearTimeout(timer);timer=setTimeout(doSave,Math.max(0,asDebounceMs));};form.addEventListener(\"input\",onChange);form.addEventListener(\"change\",onChange);const flushNow=()=>{if(timer){clearTimeout(timer);timer=null;}doSave();};const onPageHide=()=>flushNow();const onVisibility=()=>{if(document.visibilityState===\"hidden\")flushNow();};window.addEventListener(\"pagehide\",onPageHide);document.addEventListener(\"visibilitychange\",onVisibility);return()=>{form.removeEventListener(\"input\",onChange);form.removeEventListener(\"change\",onChange);window.removeEventListener(\"pagehide\",onPageHide);document.removeEventListener(\"visibilitychange\",onVisibility);if(timer)clearTimeout(timer);// Only wipe once restore has run — a StrictMode double-invoke /\n// spurious remount fires this cleanup before the restore rAF,\n// and clearing then would destroy the snapshot we're restoring.\nif(asClearOnLeave&&autosaveRestoreDoneRef.current){try{storage.removeItem(key);}catch{/* ignore */}}};},[isCanvas,asEnabled,asStorageType,asKeySuffix,asExcludeFields,asDebounceMs,asClearOnLeave,formId,initialized]);// ─── Autosave: checkpoint when the visitor changes page ─\nuseEffect(()=>{if(isCanvas||!asEnabled||!formId||!initialized)return;if(!autosaveRestoreDoneRef.current)return;// don't write before restore\nconst info=formInfoRef.current;if(!info.form)return;const storage=asGetStorage(asStorageType);if(!storage)return;const key=asBuildKey(info.form,asKeySuffix);const exclude=asParseExclude(asExcludeFields);asWriteSnapshot(storage,key,info.form,exclude,currentPage);},[currentPage,isCanvas,asEnabled,asStorageType,asKeySuffix,asExcludeFields,formId,initialized]);// ─── Autosave: clear on successful submit ───────────────\n// Only clears when we're on the last visible page — on intermediate\n// pages the engine blocks the submit, so it isn't a real submit.\nuseEffect(()=>{if(isCanvas||!asEnabled||!asClearOnSubmit||!formId||!initialized)return;const info=formInfoRef.current;if(!info.form)return;const storage=asGetStorage(asStorageType);if(!storage)return;const key=asBuildKey(info.form,asKeySuffix);const form=info.form;const onSubmit=()=>{const s=storeRef.current[formId];if(s&&s.isLastPage===false)return;window.setTimeout(()=>{try{storage.removeItem(key);}catch{/* ignore */}},0);};form.addEventListener(\"submit\",onSubmit);return()=>form.removeEventListener(\"submit\",onSubmit);},[isCanvas,asEnabled,asClearOnSubmit,asStorageType,asKeySuffix,formId,initialized]);// ─── Render ─────────────────────────────────────────────\nif(isCanvas){return /*#__PURE__*/_jsx(\"div\",{ref:rootRef,style:style,children:/*#__PURE__*/_jsx(CanvasTag,{text:\"PageFlow Engine\",color:\"#7C3AED\"})});}return /*#__PURE__*/_jsxs(\"div\",{ref:rootRef,className:PF_ENGINE_CLASS,[PF_ENGINE_ATTR]:\"true\",style:{display:\"none\",...style},children:[!initialized&&/*#__PURE__*/_jsx(\"style\",{dangerouslySetInnerHTML:{__html:`form:has(.${PF_ENGINE_CLASS}) [data-framer-name=\"${pagesName}\"] > *:not(:first-child) { display: none !important; }\nform:has(.${PF_ENGINE_CLASS}) [${PF_SUBMIT_HIDDEN_ATTR}=\"true\"] { display: none !important; }`}}),initialized&&/*#__PURE__*/_jsx(\"style\",{dangerouslySetInnerHTML:{__html:`${visibilityCss}\n[${PF_SUBMIT_HIDDEN_ATTR}=\"true\"] { display: none !important; }`}})]});}PageFlowEngine.displayName=\"PageFlow Engine\";PageFlowEngine.defaultProps={validateOnNext:true,scrollOnNavigate:true,pagesName:\"Pages\",scrollOffset:0,scrollBehavior:\"smooth\",disableUnvisited:true,enterKeyNav:true,pageConditions:[],autosave:{enabled:false,storageType:\"session\",keySuffix:\"\",debounceMs:400,ttlDays:7,clearOnSubmit:true,clearOnLeave:true,excludeFields:\"\"},_meta:\"\",style:{}};addPropertyControls(PageFlowEngine,{pagesName:{type:ControlType.String,title:\"Pages Layer\",defaultValue:\"Pages\",description:\"Name of the Framer frame that contains step pages. Must match exactly (case-insensitive).\"},validateOnNext:{type:ControlType.Boolean,title:\"Validate Pages\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Validate form inputs before allowing navigation to next page.\"},scrollOnNavigate:{type:ControlType.Boolean,title:\"Scroll to Top\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Scroll to form top when navigating between pages.\"},scrollOffset:{type:ControlType.Number,title:\"Scroll Offset\",defaultValue:0,min:0,max:200,step:10,unit:\"px\",hidden(props){return!props.scrollOnNavigate;}},scrollBehavior:{type:ControlType.Enum,title:\"Scroll Style\",defaultValue:\"smooth\",options:[\"smooth\",\"instant\"],optionTitles:[\"Smooth\",\"Instant\"],displaySegmentedControl:true,hidden(props){return!props.scrollOnNavigate;}},disableUnvisited:{type:ControlType.Boolean,title:\"Disable Unvisited\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Disable inputs on unvisited pages so they don't submit empty data.\"},enterKeyNav:{type:ControlType.Boolean,title:\"Enter Key Nav\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\"},pageConditions:{type:ControlType.Array,title:\"Page Conditions\",description:\"Hide or show entire pages based on form field values. When a page is hidden, navigation skips over it and it disappears from Progress, Dots, and Caption as well.\",control:{type:ControlType.Object,controls:{enabled:{type:ControlType.Boolean,title:\"Enabled\",defaultValue:true,enabledTitle:\"On\",disabledTitle:\"Off\"},targetPage:{type:ControlType.String,title:\"Page\",defaultValue:\"\",placeholder:\"e.g. Welcome\",description:'Layer name of the page to hide/show (as shown in the Framer Layers panel). A 1-indexed number (e.g. \"2\") also works.'},action:{type:ControlType.Enum,title:\"Action\",defaultValue:\"hide\",options:[\"hide\",\"show\"],optionTitles:[\"Hide\",\"Show\"],displaySegmentedControl:true,description:\"Hide When: page is hidden if condition matches. Show Only When: page is hidden unless condition matches.\"},sourceField:{type:ControlType.String,title:\"Field Name\",defaultValue:\"\",description:\"Field name to read value from. Must match the field's Name property.\"},fieldType:{type:ControlType.Enum,title:\"Field Type\",defaultValue:\"text\",options:[\"text\",\"number\",\"date\"],optionTitles:[\"Text\",\"Number\",\"Date\"]},operator:{type:ControlType.Enum,title:\"Operator\",defaultValue:\"is_not_empty\",options:TEXT_OPERATOR_IDS,optionTitles:TEXT_OPERATOR_LABELS,hidden(props){return props.fieldType!==\"text\";}},numberOperator:{type:ControlType.Enum,title:\"Operator\",defaultValue:\"is_not_empty\",options:NUMBER_OPERATOR_IDS,optionTitles:NUMBER_OPERATOR_LABELS,hidden(props){return props.fieldType!==\"number\";}},dateOperator:{type:ControlType.Enum,title:\"Operator\",defaultValue:\"is_not_empty\",options:DATE_OPERATOR_IDS,optionTitles:DATE_OPERATOR_LABELS,hidden(props){return props.fieldType!==\"date\";}},value:{type:ControlType.String,title:\"Value\",defaultValue:\"\",description:\"Text to compare. For length operators: a number. For regex: a pattern.\",hidden(props){return props.fieldType!==\"text\"||NO_VALUE_OPS.has(props.operator||\"is_not_empty\");}},numberValue:{type:ControlType.String,title:\"Value\",defaultValue:\"\",description:\"Enter a number (e.g. 42, 3.14).\",hidden(props){return props.fieldType!==\"number\"||NO_VALUE_OPS.has(props.numberOperator||\"is_not_empty\");}},dateValue:{type:ControlType.String,title:\"Value\",defaultValue:\"\",description:\"Date format: YYYY-MM-DD (e.g. 2025-06-15).\",hidden(props){return props.fieldType!==\"date\"||NO_VALUE_OPS.has(props.dateOperator||\"is_not_empty\");}},value2:{type:ControlType.String,title:\"Value 2 (Max)\",defaultValue:\"\",description:\"End text value for Between / Not Between.\",hidden(props){return props.fieldType!==\"text\"||!RANGE_OPS.has(props.operator||\"\");}},numberValue2:{type:ControlType.String,title:\"Value 2 (Max)\",defaultValue:\"\",description:\"End number for Between / Not Between range.\",hidden(props){return props.fieldType!==\"number\"||!RANGE_OPS.has(props.numberOperator||\"\");}},dateValue2:{type:ControlType.String,title:\"Value 2 (Max)\",defaultValue:\"\",description:\"End date for range. Format: YYYY-MM-DD.\",hidden(props){return props.fieldType!==\"date\"||!RANGE_OPS.has(props.dateOperator||\"\");}}}},defaultValue:[]},autosave:{type:ControlType.Object,title:\"Autosave\",description:\"Save the visitor's answers in the browser as they fill the form, then restore them (and the page they were on) after a refresh.\",controls:{enabled:{type:ControlType.Boolean,title:\"Auto-Save\",defaultValue:false,enabledTitle:\"On\",disabledTitle:\"Off\"},storageType:{type:ControlType.Enum,title:\"Storage\",defaultValue:\"session\",options:[\"session\",\"local\"],optionTitles:[\"Session (clears on tab close)\",\"Local (persists)\"],description:\"Session: survives refresh, auto-clears when the tab/window closes. Local: also survives tab close — relies on the expiry below.\",hidden(props){return!props.enabled;}},keySuffix:{type:ControlType.String,title:\"Key Suffix\",defaultValue:\"\",placeholder:\"optional\",description:\"Optional. Only needed if two forms collide on the same page + name.\",hidden(props){return!props.enabled;}},debounceMs:{type:ControlType.Number,title:\"Save Delay\",defaultValue:400,min:0,max:3e3,step:50,unit:\"ms\",hidden(props){return!props.enabled;}},ttlDays:{type:ControlType.Number,title:\"Expire After\",defaultValue:7,min:0,max:365,step:1,unit:\"days\",description:\"Discard saved data older than this. 0 = never.\",hidden(props){return!props.enabled;}},clearOnSubmit:{type:ControlType.Boolean,title:\"Clear On Submit\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\",hidden(props){return!props.enabled;}},clearOnLeave:{type:ControlType.Boolean,title:\"Clear On Leave\",defaultValue:true,enabledTitle:\"Yes\",disabledTitle:\"No\",description:\"Wipe saved data when the visitor navigates away from this page (does not affect refresh).\",hidden(props){return!props.enabled;}},excludeFields:{type:ControlType.String,title:\"Exclude Fields\",defaultValue:\"\",placeholder:\"field1, field2\",description:\"Comma-separated field names to never save. Password, file, captcha and Source Tracker fields are always excluded.\",hidden(props){return!props.enabled;}}}},_meta:{type:ControlType.String,defaultValue:\"\",description:\"by [Forms Plugin](https://formsplugin.com/?ref=pageflow)\",hidden(){return true;}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"PageFlowEngine\",\"slots\":[],\"annotations\":{\"framerDisableUnlink\":\"\",\"framerSupportedLayoutWidth\":\"any\",\"framerIntrinsicWidth\":\"160\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerIntrinsicHeight\":\"28\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./PageFlowEngine.map"],"mappings":"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"}