{"version":3,"file":"Switch.BEKvzgXT.mjs","names":["React.useState","React.useCallback"],"sources":["https:/framerusercontent.com/modules/2rmtHZGXfm15vsPPlAwF/AHgZNYcMH8pdv5fUgIqz/Switch.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{Frame,addPropertyControls,ControlType}from\"framer\";// 🔆 Composant principal\nexport function ThemeSwitch({lightBackground,darkBackground,switchSize,circleColor}){const[isDark,setIsDark]=React.useState(null);// 🌓 Appliquer la classe .dark sur <html>\nconst applyTheme=React.useCallback(theme=>{if(typeof document===\"undefined\")return;const root=document.documentElement;if(theme===\"dark\"){root.classList.add(\"dark\");}else{root.classList.remove(\"dark\");}try{localStorage.setItem(\"theme\",theme);}catch{// localStorage indisponible (ex: preview ou sandbox)\n}},[]);// 🧠 Déterminer le thème initial (localStorage > système)\nReact.useEffect(()=>{if(typeof window===\"undefined\")return;const matchDark=window.matchMedia(\"(prefers-color-scheme: dark)\");let theme=\"light\";try{const stored=localStorage.getItem(\"theme\");if(stored===\"dark\"||stored===\"light\"){theme=stored;}else{theme=matchDark.matches?\"dark\":\"light\";}}catch{theme=matchDark.matches?\"dark\":\"light\";}setIsDark(theme===\"dark\");applyTheme(theme);// 🎧 Écoute les changements système si l’utilisateur n’a pas choisi\nconst handler=e=>{try{const stored=localStorage.getItem(\"theme\");if(stored)return;// ne pas écraser la préférence manuelle\n}catch{}const newTheme=e.matches?\"dark\":\"light\";setIsDark(newTheme===\"dark\");applyTheme(newTheme);};if(matchDark.addEventListener){matchDark.addEventListener(\"change\",handler);}else if(matchDark.addListener){// pour compatibilité Safari\nmatchDark.addListener(handler);}return()=>{if(matchDark.removeEventListener){matchDark.removeEventListener(\"change\",handler);}else if(matchDark.removeListener){matchDark.removeListener(handler);}};},[applyTheme]);// 🔘 Toggle manuel du thème\nconst toggle=()=>{const newTheme=isDark?\"light\":\"dark\";setIsDark(!isDark);applyTheme(newTheme);};// ⚙️ Style du switch\nconst circleSize=switchSize/2-switchSize/8;const trackBackground=isDark===null?lightBackground:isDark?darkBackground:lightBackground;return /*#__PURE__*/_jsx(Frame,{width:switchSize,height:switchSize/2,background:trackBackground,radius:switchSize/4,onClick:toggle,style:{cursor:\"pointer\",position:\"relative\",display:\"flex\",alignItems:\"center\",padding:`0 ${switchSize/8}px`,transition:\"background 0.3s ease\"},children:/*#__PURE__*/_jsx(Frame,{width:circleSize,height:circleSize,background:circleColor,radius:\"50%\",style:{position:\"absolute\",left:isDark?`calc(100% - ${circleSize+switchSize/16}px)`:`${switchSize/16}px`,transition:\"left 0.25s ease\"}})});}// 🌈 Valeurs par défaut\nThemeSwitch.defaultProps={lightBackground:\"#D1F86C\",darkBackground:\"#2F2F2F\",switchSize:60,circleColor:\"#FFFFF8\"};// 🎛️ Contrôles Framer visibles dans l’interface\naddPropertyControls(ThemeSwitch,{lightBackground:{title:\"Light Background\",type:ControlType.Color,defaultValue:\"#D1F86C\"},darkBackground:{title:\"Dark Background\",type:ControlType.Color,defaultValue:\"#2F2F2F\"},switchSize:{title:\"Switch Size\",type:ControlType.Number,defaultValue:60,min:20,max:200,step:1},circleColor:{title:\"Circle Color\",type:ControlType.Color,defaultValue:\"#FFFFF8\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"ThemeSwitch\":{\"type\":\"reactComponent\",\"name\":\"ThemeSwitch\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Switch.map"],"mappings":"qUACA,SAAgB,EAAY,CAAC,kBAAgB,iBAAe,aAAW,eAAa,CAAC,GAAK,CAAC,EAAO,GAAWA,EAAe,KAAK,CAC3H,EAAWC,EAAkB,GAAO,CAAC,GAAG,OAAO,SAAW,IAAY,OAAO,IAAM,EAAK,SAAS,gBAAmB,IAAQ,OAAQ,EAAK,UAAU,IAAI,OAAO,CAAO,EAAK,UAAU,OAAO,OAAO,CAAE,GAAG,CAAC,aAAa,QAAQ,QAAQ,EAAM,MAAO,IACrP,EAAE,CAAC,CACN,MAAoB,CAAC,GAAU,IAAS,OAAY,OAAO,IAAM,EAAU,EAAO,WAAW,+BAA+B,CAAK,EAAM,QAAQ,GAAG,CAAC,IAAM,EAAO,aAAa,QAAQ,QAAQ,CAAC,AAAyD,EAAtD,IAAS,QAAQ,IAAS,QAAe,EAAmB,EAAU,QAAQ,OAAO,aAAe,CAAC,EAAM,EAAU,QAAQ,OAAO,QAAS,EAAU,IAAQ,OAAO,CAAC,EAAW,EAAM,CACzX,IAAM,EAAQ,GAAG,CAAC,GAAG,CAA4C,GAA9B,aAAa,QAAQ,QAAQ,CAAW,YACrE,EAAE,IAAM,EAAS,EAAE,QAAQ,OAAO,QAAQ,EAAU,IAAW,OAAO,CAAC,EAAW,EAAS,EACjE,OADuE,EAAU,iBAAkB,EAAU,iBAAiB,SAAS,EAAQ,CAAU,EAAU,aACnM,EAAU,YAAY,EAAQ,KAAY,CAAI,EAAU,oBAAqB,EAAU,oBAAoB,SAAS,EAAQ,CAAU,EAAU,gBAAgB,EAAU,eAAe,EAAQ,GAAM,CAAC,EAAW,CAAC,CACpN,IAAM,MAAW,CAAC,IAAM,EAAS,EAAO,QAAQ,OAAO,EAAU,CAAC,EAAO,CAAC,EAAW,EAAS,EACxF,EAAW,EAAW,EAAE,EAAW,EAAQ,EAAgB,IAAS,KAAK,EAAgB,EAAO,EAAe,EAAgB,OAAoB,EAAK,EAAM,CAAC,MAAM,EAAW,OAAO,EAAW,EAAE,WAAW,EAAgB,OAAO,EAAW,EAAE,QAAQ,EAAO,MAAM,CAAC,OAAO,UAAU,SAAS,WAAW,QAAQ,OAAO,WAAW,SAAS,QAAQ,KAAK,EAAW,EAAE,IAAI,WAAW,uBAAuB,CAAC,SAAsB,EAAK,EAAM,CAAC,MAAM,EAAW,OAAO,EAAW,WAAW,EAAY,OAAO,MAAM,MAAM,CAAC,SAAS,WAAW,KAAK,EAAO,eAAe,EAAW,EAAW,GAAG,KAAK,GAAG,EAAW,GAAG,IAAI,WAAW,kBAAkB,CAAC,CAAC,CAAC,CAAC,sBAThmB,IAA4B,IAA0D,CAUjI,EAAY,aAAa,CAAC,gBAAgB,UAAU,eAAe,UAAU,WAAW,GAAG,YAAY,UAAU,CACjH,EAAoB,EAAY,CAAC,gBAAgB,CAAC,MAAM,mBAAmB,KAAK,EAAY,MAAM,aAAa,UAAU,CAAC,eAAe,CAAC,MAAM,kBAAkB,KAAK,EAAY,MAAM,aAAa,UAAU,CAAC,WAAW,CAAC,MAAM,cAAc,KAAK,EAAY,OAAO,aAAa,GAAG,IAAI,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,YAAY,CAAC,MAAM,eAAe,KAAK,EAAY,MAAM,aAAa,UAAU,CAAC,CAAC"}