{"version":3,"file":"Gradient.8KFmLWs7.mjs","names":["useState","useRef"],"sources":["https:/framerusercontent.com/modules/cwZsi7XBAcXbQamrwj9J/klW5ltHxzYSN9C3xoOIw/Gradient.js"],"sourcesContent":["import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{useEffect,useState,useRef,startTransition}from\"react\";import{motion,useMotionValue,useSpring}from\"framer-motion\";import{addPropertyControls,ControlType}from\"framer\";// Пастельная палитра Toloka\nconst PASTEL_PALETTE=[\"#FFF7CC\",\"#E0FFCC\",\"#CEF0FD\",\"#E0D7F4\",\"#FBD0EB\",\"#FFCDCC\",\"#FFE9CC\"];const WHITE=\"#FFFFFF\";function getPastelPair(i){const outer=PASTEL_PALETTE[i%7];const inner=PASTEL_PALETTE[(i+2)%7];return{outer,inner};}function recalcMetrics(w,h,parallaxStrength,blurStrength){const shortSide=Math.min(w,h);const pad=shortSide/8;const innerPad=pad;const maxShift=shortSide*parallaxStrength;const blurPx=shortSide/blurStrength;return{shortSide,pad,innerPad,maxShift,blurPx};}/**\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n */export default function FramerGradient(props){const{width:propWidth,height:propHeight,startIndex=1,parallaxStrength=.35,colorDuration=1.5,edgeThreshold=100,blurStrength=3,springStiffness=150,springDamping=25,style}=props;// Get dimensions from style prop if available (for responsive sizing)\nconst width=style?.width===\"100%\"?800:propWidth??800;const height=style?.height===\"100%\"?600:propHeight??600;// Состояния\nconst[currentGradientIndex,setCurrentGradientIndex]=useState(startIndex);const[colors,setColors]=useState(()=>getPastelPair(startIndex));const[metrics,setMetrics]=useState(()=>recalcMetrics(width,height,parallaxStrength,blurStrength));// Refs\nconst isAtEdgeRef=useRef(false);const rafRef=useRef(null);const containerRef=useRef(null);// Параллакс\nconst innerOffsetX=useMotionValue(0);const innerOffsetY=useMotionValue(0);const innerOffsetXSpring=useSpring(innerOffsetX,{stiffness:springStiffness,damping:springDamping});const innerOffsetYSpring=useSpring(innerOffsetY,{stiffness:springStiffness,damping:springDamping});// Пересчёт метрик при изменении размеров\nuseEffect(()=>{setMetrics(recalcMetrics(width,height,parallaxStrength,blurStrength));},[width,height,parallaxStrength,blurStrength]);// Обработчик движения курсора\nuseEffect(()=>{const handlePointerMove=e=>{if(rafRef.current!==null)return;rafRef.current=requestAnimationFrame(()=>{const rect=containerRef.current?.getBoundingClientRect();if(!rect){rafRef.current=null;return;}// Координаты относительно контейнера\nconst relativeX=e.clientX-rect.left;const relativeY=e.clientY-rect.top;// Центр контейнера\nconst cx=width/2;const cy=height/2;const dx=relativeX-cx;const dy=relativeY-cy;// Проверка края\nconst isAtLeftEdge=relativeX<edgeThreshold;const isAtRightEdge=relativeX>width-edgeThreshold;const isAtTopEdge=relativeY<edgeThreshold;const isAtBottomEdge=relativeY>height-edgeThreshold;const isAtAnyEdge=isAtLeftEdge||isAtRightEdge||isAtTopEdge||isAtBottomEdge;// Смена градиента при касании края\nif(isAtAnyEdge&&!isAtEdgeRef.current){isAtEdgeRef.current=true;const nextIndex=(currentGradientIndex+1)%7;startTransition(()=>{setCurrentGradientIndex(nextIndex);setColors(getPastelPair(nextIndex));});}else if(!isAtAnyEdge&&isAtEdgeRef.current){isAtEdgeRef.current=false;}// Параллакс\nconst normalizedDx=dx/metrics.shortSide*metrics.maxShift;const normalizedDy=dy/metrics.shortSide*metrics.maxShift;innerOffsetX.set(normalizedDx);innerOffsetY.set(normalizedDy);rafRef.current=null;});};if(typeof window!==\"undefined\"){window.addEventListener(\"pointermove\",handlePointerMove);}return()=>{if(typeof window!==\"undefined\"){window.removeEventListener(\"pointermove\",handlePointerMove);}if(rafRef.current!==null){cancelAnimationFrame(rafRef.current);}};},[currentGradientIndex,metrics,width,height,edgeThreshold,innerOffsetX,innerOffsetY]);return /*#__PURE__*/_jsxs(\"div\",{ref:containerRef,style:{...style,position:\"relative\",width:\"100%\",height:\"100%\",overflow:\"hidden\"},children:[/*#__PURE__*/_jsx(motion.div,{style:{position:\"absolute\",inset:0},initial:{backgroundColor:colors.outer},animate:{backgroundColor:colors.outer},transition:{duration:colorDuration,ease:\"easeInOut\"}}),/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",backgroundColor:WHITE,top:metrics.pad,left:metrics.pad,right:metrics.pad,bottom:metrics.pad}}),/*#__PURE__*/_jsx(motion.div,{style:{position:\"absolute\",top:metrics.pad+metrics.innerPad,left:metrics.pad+metrics.innerPad,right:metrics.pad+metrics.innerPad,bottom:metrics.pad+metrics.innerPad,x:innerOffsetXSpring,y:innerOffsetYSpring},initial:{backgroundColor:colors.inner},animate:{backgroundColor:colors.inner},transition:{duration:colorDuration,ease:\"easeInOut\"}}),/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",inset:0,backgroundColor:\"rgba(255, 255, 255, 0.01)\",backdropFilter:`blur(${metrics.blurPx}px)`,WebkitBackdropFilter:`blur(${metrics.blurPx}px)`,pointerEvents:\"none\"}})]});}// Property Controls для Framer\naddPropertyControls(FramerGradient,{startIndex:{type:ControlType.Enum,title:\"Начальный градиент\",options:[0,1,2,3,4,5,6],optionTitles:[\"Yellow + Blue\",\"Green + Violet\",\"Blue + Magenta\",\"Violet + Red\",\"Magenta + Orange\",\"Red + Yellow\",\"Orange + Green\"],defaultValue:1},parallaxStrength:{type:ControlType.Number,title:\"Сила параллакса\",min:0,max:.5,step:.05,defaultValue:.35,displayStepper:true},colorDuration:{type:ControlType.Number,title:\"Скорость смены цветов\",min:.3,max:5,step:.1,defaultValue:1.5,unit:\"s\",displayStepper:true},edgeThreshold:{type:ControlType.Number,title:\"Чувствительность края\",min:10,max:300,step:10,defaultValue:100,unit:\"px\",displayStepper:true},blurStrength:{type:ControlType.Number,title:\"Сила blur (делитель)\",min:1,max:10,step:.5,defaultValue:3,displayStepper:true},springStiffness:{type:ControlType.Number,title:\"Скорость spring\",min:20,max:300,step:10,defaultValue:150,displayStepper:true},springDamping:{type:ControlType.Number,title:\"Затухание spring\",min:10,max:50,step:5,defaultValue:25,displayStepper:true}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerGradient\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"fixed\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Gradient.map"],"mappings":"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"}