{"version":3,"file":"PasswordProtectV2.CAlVWBFh.mjs","names":["error","currentPath","p","useState","useRef","useCallback"],"sources":["https:/framerusercontent.com/modules/bQZPgE1vL0UAgmpWUPMU/WDC6jlJPivggzJBEufte/PasswordProtectV2.js"],"sourcesContent":["/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n * version=2\n * \n * Password Protection Component with Enhanced Security:\n * - Stores actual password in localStorage (not just true/false)\n * - Automatically clears authentication when password changes\n * - Validates stored password against current password on mount\n */// Type declarations for Framer modules (available at runtime in Framer)\n// @ts-ignore - Framer modules are provided at runtime\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useState,useCallback,useLayoutEffect,useRef}from\"react\";import{createPortal}from\"react-dom\";// @ts-expect-error - framer-motion is provided at runtime by Framer\nimport{motion}from\"framer-motion\";// @ts-expect-error - framer is provided at runtime by Framer\nimport{addPropertyControls,ControlType,RenderTarget}from\"framer\";const LockIcon=()=>/*#__PURE__*/_jsx(\"svg\",{width:\"24\",height:\"24\",viewBox:\"0 0 24 24\",fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",children:/*#__PURE__*/_jsx(\"path\",{d:\"M17 10V8C17 5.23858 14.7614 3 12 3C9.23858 3 7 5.23858 7 8V10M12 14.5V16.5M8.8 21H15.2C16.8802 21 17.7202 21 18.362 20.673C18.9265 20.3854 19.3854 19.9265 19.673 19.362C20 18.7202 20 17.8802 20 16.2V14.8C20 13.1198 20 12.2798 19.673 11.638C19.3854 11.0735 18.9265 10.6146 18.362 10.327C17.7202 10 16.8802 10 15.2 10H8.8C7.11984 10 6.27976 10 5.63803 10.327C5.07354 10.6146 4.6146 11.0735 4.32698 11.638C4 12.2798 4 13.1198 4 14.8V16.2C4 17.8802 4 18.7202 4.32698 19.362C4.6146 19.9265 5.07354 20.3854 5.63803 20.673C6.27976 21 7.11984 21 8.8 21Z\",stroke:\"white\",strokeOpacity:\"0.75\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\"})});export default function PasswordProtect(props){// Use Framer's RenderTarget API to detect if we're in editor vs published/live mode\n// Only render the password overlay in preview/live mode, NOT in the editor\nlet shouldRender=true;try{const currentTarget=RenderTarget.current();// RenderTarget.canvas means we're in the Framer editor - don't render\nif(currentTarget===RenderTarget.canvas){shouldRender=false;}}catch(error){// Fallback: if RenderTarget is not available, use window properties\nif(typeof window!==\"undefined\"){// Check for Framer's editor environment\nif(window.FramerDesignTimeModeEnabled!==undefined){shouldRender=false;}else if(window.Framer&&window.Framer.CurrentContext&&window.Framer.CurrentContext.isDesignTime){shouldRender=false;}else{// Check URL patterns - if in editor, don't render\nconst url=window.location.href;if(url.includes(\"/editor\")||url.includes(\"/projects\")){shouldRender=false;}}}}// ===== SYNCHRONOUS BLOCKING SCRIPT (Method 1) =====\n// This runs IMMEDIATELY before React renders - prevents any flash of content\nif(shouldRender&&typeof document!==\"undefined\"&&typeof window!==\"undefined\"){// FIRST: Check localStorage for existing authentication\nconst getCurrentPathSync=()=>{if(typeof window===\"undefined\")return\"/\";return window.location.pathname||\"/\";};const checkParentAuthSync=(currentPath,expectedPassword)=>{if(typeof localStorage===\"undefined\")return false;const parts=currentPath.split(\"/\").filter(p=>p);// Check current path and all parent paths\nfor(let i=parts.length;i>0;i--){const parentPath=\"/\"+parts.slice(0,i).join(\"/\");const storedPassword=localStorage.getItem(`password-protect-auth-${parentPath}`);if(storedPassword===expectedPassword){return true;}}// Also check root path\nconst rootPassword=localStorage.getItem(\"password-protect-auth-/\");if(rootPassword===expectedPassword){return true;}return false;};const currentPathSync=getCurrentPathSync();// In sync mode, we need to check if stored password matches the expected password\n// But we need the password prop, so we'll do a basic check and validate properly in React\nconst isAuthSync=typeof localStorage!==\"undefined\"&&localStorage.getItem(`password-protect-auth-${currentPathSync}`)!==null;// Only create blocking overlay if NOT authenticated\nif(!isAuthSync&&!document.body.hasAttribute(\"data-password-protect-blocking\")){document.body.setAttribute(\"data-password-protect-blocking\",\"true\");// Store original styles for restoration\nconst originalVisibility=document.body.style.visibility||\"\";const originalOverflow=document.body.style.overflow||\"\";document.body.__passwordProtectOriginalVisibility=originalVisibility;document.body.__passwordProtectOriginalOverflow=originalOverflow;// ===== CSS-BASED BLOCKING (Method 2) =====\n// Hide body content immediately - runs synchronously before React\ndocument.body.style.visibility=\"hidden\";document.body.style.overflow=\"hidden\";// ===== SYNCHRONOUS BLOCKING OVERLAY (Method 1 continued) =====\n// Create blocking overlay immediately - before React renders\nlet blockingOverlay=document.getElementById(\"password-protect-blocking-overlay\");if(!blockingOverlay){blockingOverlay=document.createElement(\"div\");blockingOverlay.id=\"password-protect-blocking-overlay\";// High z-index and full viewport coverage (Method 4)\nblockingOverlay.style.position=\"fixed\";blockingOverlay.style.top=\"0\";blockingOverlay.style.left=\"0\";blockingOverlay.style.right=\"0\";blockingOverlay.style.bottom=\"0\";blockingOverlay.style.width=\"100%\";blockingOverlay.style.height=\"100%\";blockingOverlay.style.backgroundColor=\"#111111\"// Match plugin background color\n;blockingOverlay.style.zIndex=\"999998\"// High z-index (Method 4)\n;blockingOverlay.style.pointerEvents=\"auto\";blockingOverlay.style.display=\"block\";blockingOverlay.style.visibility=\"visible\";blockingOverlay.style.opacity=\"1\";document.body.appendChild(blockingOverlay);}}}if(!shouldRender){// Clean up if we're in editor mode\nif(typeof document!==\"undefined\"){document.body.removeAttribute(\"data-password-protect-blocking\");const blockingOverlay=document.getElementById(\"password-protect-blocking-overlay\");if(blockingOverlay){blockingOverlay.remove();}const originalVisibility=document.body.__passwordProtectOriginalVisibility||\"\";const originalOverflow=document.body.__passwordProtectOriginalOverflow||\"\";document.body.style.visibility=originalVisibility;document.body.style.overflow=originalOverflow;delete document.body.__passwordProtectOriginalVisibility;delete document.body.__passwordProtectOriginalOverflow;}return null;}const{password=\"secret123\",// hint = \"\", // Unused in this implementation but kept for prop compatibility\n// overlayType = \"color\", // Unused\n// overlayColor = \"#ffffff\", // Unused\n// overlayImage, // Unused\n// inputBackground = \"#ffffff\", // Unused\n// inputTextColor = \"#000000\", // Unused\n// inputBorderColor = \"#dddddd\", // Unused\n// buttonBackground = \"#000000\", // Unused\n// buttonTextColor = \"#ffffff\", // Unused\nerrorTextColor=\"#ff0000\"}=props;// Check localStorage for existing authentication\nconst getCurrentPath=()=>{if(typeof window===\"undefined\")return\"/\";return window.location.pathname||\"/\";};const checkParentAuthentication=(currentPath,expectedPassword)=>{if(typeof localStorage===\"undefined\")return false;const parts=currentPath.split(\"/\").filter(p=>p);// Check current path and all parent paths\nfor(let i=parts.length;i>0;i--){const parentPath=\"/\"+parts.slice(0,i).join(\"/\");const storedPassword=localStorage.getItem(`password-protect-auth-${parentPath}`);if(storedPassword===expectedPassword){return true;}}// Also check root path\nconst rootPassword=localStorage.getItem(\"password-protect-auth-/\");if(rootPassword===expectedPassword){return true;}return false;};const currentPath=getCurrentPath();const storedPassword=typeof localStorage!==\"undefined\"?localStorage.getItem(`password-protect-auth-${currentPath}`):null;const storedAuth=storedPassword===password;const parentAuth=checkParentAuthentication(currentPath,password);const[inputValue,setInputValue]=useState(\"\");const[isAuthenticated,setIsAuthenticated]=useState(storedAuth||parentAuth);const[error,setError]=useState(\"\");const[isButtonHovered,setIsButtonHovered]=useState(false);const overlayRef=useRef(null);// ===== useLayoutEffect to ensure overlay is visible immediately (Method 3) =====\n// This runs synchronously before browser paint - ensures overlay is ready\nuseLayoutEffect(()=>{// Check for parent authentication on mount\nconst currentPath=getCurrentPath();const parentAuth=checkParentAuthentication(currentPath,password);if(parentAuth&&!isAuthenticated){setIsAuthenticated(true);return;}if(!isAuthenticated){// Ensure React overlay is visible immediately\nif(overlayRef.current){overlayRef.current.style.display=\"block\";overlayRef.current.style.visibility=\"visible\";overlayRef.current.style.opacity=\"1\";overlayRef.current.style.pointerEvents=\"auto\";}// Once React overlay is ready, we can restore body visibility\n// The blocking overlay + React overlay will cover everything\n// Use requestAnimationFrame to ensure overlay is painted\nrequestAnimationFrame(()=>{if(document.body.hasAttribute(\"data-password-protect-blocking\")&&overlayRef.current){// Verify overlay is actually rendered and visible\nconst overlayRect=overlayRef.current.getBoundingClientRect();if(overlayRect.width>0&&overlayRect.height>0){// Now safe to restore body visibility - overlays will block content\ndocument.body.style.visibility=\"visible\";}}});}},[isAuthenticated]);// Cleanup on unmount - restore all styles if component unmounts\nuseLayoutEffect(()=>{return()=>{// Clean up blocking overlay\nconst blockingOverlay=document.getElementById(\"password-protect-blocking-overlay\");if(blockingOverlay){blockingOverlay.remove();}// Restore body styles\nif(document.body.hasAttribute(\"data-password-protect-blocking\")){document.body.removeAttribute(\"data-password-protect-blocking\");const originalVisibility=document.body.__passwordProtectOriginalVisibility||\"\";const originalOverflow=document.body.__passwordProtectOriginalOverflow||\"\";document.body.style.visibility=originalVisibility;document.body.style.overflow=originalOverflow;delete document.body.__passwordProtectOriginalVisibility;delete document.body.__passwordProtectOriginalOverflow;}};},[]);// Validate stored password when component mounts or password changes\nuseLayoutEffect(()=>{const currentPath=getCurrentPath();const storedPassword=typeof localStorage!==\"undefined\"?localStorage.getItem(`password-protect-auth-${currentPath}`):null;// If stored password doesn't match current password, clear authentication\nif(storedPassword&&storedPassword!==password){setIsAuthenticated(false);// Clear invalid stored password\nif(typeof localStorage!==\"undefined\"){localStorage.removeItem(`password-protect-auth-${currentPath}`);}}},[password]);const handlePasswordSubmit=useCallback(()=>{if(inputValue===password){// Store the password in localStorage\nconst currentPath=getCurrentPath();if(typeof localStorage!==\"undefined\"){localStorage.setItem(`password-protect-auth-${currentPath}`,password);}// Immediately hide and remove React overlay\nif(overlayRef.current){overlayRef.current.style.display=\"none\";overlayRef.current.style.visibility=\"hidden\";overlayRef.current.style.opacity=\"0\";// Remove the entire portal element\nsetTimeout(()=>{if(overlayRef.current&&overlayRef.current.parentNode){overlayRef.current.parentNode.removeChild(overlayRef.current);}},0);}// Remove synchronous blocking overlay immediately\nconst blockingOverlay=document.getElementById(\"password-protect-blocking-overlay\");if(blockingOverlay){// Remove immediately - no fade needed\nblockingOverlay.remove();}// Remove the entire portal container (which includes the black background overlay)\n// The portal is created with createPortal, so we need to remove it from document.body\nif(overlayRef.current){const portalContainer=overlayRef.current.parentElement;if(portalContainer&&portalContainer.parentNode===document.body){document.body.removeChild(portalContainer);}}// Restore all original body styles to make layout appear\nif(document.body.hasAttribute(\"data-password-protect-blocking\")){document.body.removeAttribute(\"data-password-protect-blocking\");const originalVisibility=document.body.__passwordProtectOriginalVisibility||\"\";const originalOverflow=document.body.__passwordProtectOriginalOverflow||\"\";// Clear any background colors that might have been set\nif(document.body){document.body.style.backgroundColor=\"\";document.body.style.background=\"\";document.body.style.backgroundImage=\"\";}if(document.documentElement){document.documentElement.style.backgroundColor=\"\";document.documentElement.style.background=\"\";document.documentElement.style.backgroundImage=\"\";}// Ensure body and html are visible so layout can appear\n// Use requestAnimationFrame to ensure smooth transition\nrequestAnimationFrame(()=>{document.body.style.visibility=originalVisibility||\"visible\";document.body.style.overflow=originalOverflow||\"\";// Also ensure html element is visible\nif(document.documentElement){document.documentElement.style.visibility=\"visible\";}delete document.body.__passwordProtectOriginalVisibility;delete document.body.__passwordProtectOriginalOverflow;});}// Then update state (component will unmount)\nsetIsAuthenticated(true);}else{setError(\"Incorrect password. Please try again.\");setInputValue(\"\");}},[inputValue,password]);const handleKeyPress=useCallback(e=>{if(e.key===\"Enter\")handlePasswordSubmit();},[handlePasswordSubmit]);// Completely hide everything after authentication\nif(isAuthenticated)return null;if(typeof document===\"undefined\")return null;const overlayWrapperStyle={position:\"fixed\",top:0,left:0,right:0,bottom:0,width:\"100%\",height:\"100%\",backgroundColor:\"#000000\",zIndex:999999,pointerEvents:\"auto\",display:\"block\",visibility:\"visible\",opacity:1};return /*#__PURE__*/createPortal(/*#__PURE__*/_jsx(\"div\",{ref:overlayRef,style:overlayWrapperStyle,children:/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:\"50%\",top:\"50%\",transform:\"translate(-50%, -50%)\",backgroundColor:\"#141414\",border:\"1px solid #222222\",borderRadius:\"15px\",width:\"310px\",padding:\"15px\"},children:/*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:\"16px\"},children:/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:\"24px\"},children:[/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:\"8px\",alignItems:\"center\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{width:\"24px\",height:\"24px\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\"},children:/*#__PURE__*/_jsx(LockIcon,{})}),/*#__PURE__*/_jsxs(\"p\",{style:{fontFamily:\"Inter, sans-serif\",fontWeight:500,fontSize:\"14px\",lineHeight:\"normal\",color:\"rgba(255, 255, 255, 0.75)\",textAlign:\"center\",margin:0},children:[\"Enter password \",/*#__PURE__*/_jsx(\"br\",{}),\" to access the site\"]})]}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:\"16px\"},children:[/*#__PURE__*/_jsx(\"style\",{children:`\n                                #password-access-input::placeholder {\n                                    color: rgba(255, 255, 255, 0.5);\n                                    opacity: 1; /* Firefox override */\n                                }\n                                `}),/*#__PURE__*/_jsx(\"input\",{id:\"password-access-input\",type:\"password\",value:inputValue,onChange:e=>setInputValue(e.target.value),onKeyPress:handleKeyPress,style:{backgroundColor:\"#111111\",height:\"40px\",borderRadius:\"12px\",border:\"none\",width:\"100%\",padding:\"0 15px\",fontSize:\"14px\",color:\"#ffffff\",fontFamily:\"Inter, sans-serif\",outline:\"none\"},placeholder:\"Enter password\",autoFocus:true}),error&&/*#__PURE__*/_jsx(motion.p,{initial:{opacity:0,y:-10},animate:{opacity:1,y:0},style:{color:errorTextColor,margin:0,fontSize:\"12px\",fontFamily:\"Inter, sans-serif\"},children:error}),/*#__PURE__*/_jsx(\"button\",{className:\"submit-button\",onClick:handlePasswordSubmit,onMouseEnter:()=>setIsButtonHovered(true),onMouseLeave:()=>setIsButtonHovered(false),style:{backgroundColor:isButtonHovered?\"rgba(255, 255, 255, 0.1)\":\"rgba(255, 255, 255, 0.05)\",height:\"42px\",borderRadius:\"10px\",border:\"none\",padding:\"15px\",width:\"100%\",display:\"flex\",alignItems:\"center\",justifyContent:\"center\",cursor:\"pointer\",fontFamily:\"Inter, sans-serif\",fontWeight:600,fontSize:\"12px\",color:isButtonHovered?\"#ffffff\":\"rgba(255, 255, 255, 0.5)\",whiteSpace:\"nowrap\",transition:\"background-color 0.2s, color 0.2s\"},children:\"Submit\"})]})]})})})}),document.body);}PasswordProtect.defaultProps={password:\"secret123\",hint:\"\",overlayType:\"color\",overlayColor:\"#ffffff\",inputBackground:\"#ffffff\",inputTextColor:\"#000000\",inputBorderColor:\"#dddddd\",buttonBackground:\"#000000\",buttonTextColor:\"#ffffff\",errorTextColor:\"#ff0000\"};// Helper function to clear stored authentication when password changes\nconst clearStoredAuthentication=pagePath=>{if(typeof window!==\"undefined\"&&typeof localStorage!==\"undefined\"){if(pagePath){// Clear specific page\nlocalStorage.removeItem(`password-protect-auth-${pagePath}`);}else{// Clear all password-protect auth entries\nconst keys=Object.keys(localStorage);keys.forEach(key=>{if(key.startsWith(\"password-protect-auth-\")){localStorage.removeItem(key);}});}}};addPropertyControls(PasswordProtect,{password:{type:ControlType.String,title:\"Password\",defaultValue:\"secret123\",hidden:()=>true},hint:{type:ControlType.String,title:\"Hint\",defaultValue:\"\",hidden:()=>true},overlayType:{type:ControlType.Enum,title:\"Overlay Type\",options:[\"color\",\"image\"],optionTitles:[\"Color\",\"Image\"],defaultValue:\"color\",hidden:()=>true},overlayColor:{type:ControlType.Color,title:\"Overlay Color\",defaultValue:\"#ffffff\",hidden:()=>true},overlayImage:{type:ControlType.Image,title:\"Overlay Image\",hidden:()=>true}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"PasswordProtect\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./PasswordProtectV2.map"],"mappings":"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"}