{"version":3,"file":"PageFlowEngine.as4gEnOQ.mjs","names":["useState","useId","useRef","useState","useCallback","useRef","useState","useCallback","useRef","useState","useCallback","newHistory","finalPage","useMemo","currentState"],"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/aBO84uSK8H0L8zDg2T26/PageFlowDots.js","https:/framerusercontent.com/modules/DsfqRXYs2mmh0wrs8Eeo/qmoV9FCfjvrHU8OAG6yD/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 shapes: circle, rounded square.\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,badgeShape=\"rounded\",completedIcon=\"check\",gap=8,badge:{size:badgeSize=24,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\";const isRounded=badgeShape===\"rounded\";const borderRadius=isRounded?Math.round(badgeSize*.25):\"50%\";// ─── 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,badgeShape:\"rounded\",completedIcon:\"check\",gap:8,badge:{size:24,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\"},badgeShape:{type:ControlType.Enum,title:\"Badge Shape\",defaultValue:\"rounded\",options:[\"circle\",\"rounded\"],optionTitles:[\"Circle\",\"Rounded\"],displaySegmentedControl:true,hidden(props){return props.visualStyle===\"dots\";}},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\"},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\",\"framerContractVersion\":\"1\",\"framerDisableUnlink\":\"\",\"framerIntrinsicWidth\":\"280\",\"framerSupportedLayoutHeight\":\"auto\"}},\"__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;}/** 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 — validate each intermediate visible page\nconst newHistory=[...history];let cursor=currentIdx;for(let i=currentIdx+1;i<=resolvedTarget;i++){if(hidden.has(i))continue;const pageEl=pages.children[cursor];if(pageEl&&!validatePage(pageEl)){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);};},[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);if(asClearOnLeave){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\":{\"framerIntrinsicWidth\":\"160\",\"framerIntrinsicHeight\":\"28\",\"framerDisableUnlink\":\"\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./PageFlowEngine.map"],"mappings":"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"}