{"version":3,"file":"Pattern.DCLgiRjz.mjs","names":["React.useRef","React.useCallback"],"sources":["https:/framerusercontent.com/modules/wCmcHkwIA6EYulqBTBgn/BVEdaLTNuCzoKphagER8/Pattern.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{addPropertyControls,ControlType}from\"framer\";export default function BackgroundPattern(props){const wrapRef=React.useRef(null);const canvasRef=React.useRef(null);const rafRef=React.useRef(null);const roRef=React.useRef(null);// ==========================\n// Props (with defaults)\n// ==========================\nconst LINE_COLOR=props.lineColor??\"#FFFFFF\";const OPACITY=props.maxOpacity??.3;const COLUMN_GAP_PX=props.columnGap??24;const LINE_WIDTH_PX=props.lineWidth??1;const CENTER_GRID=props.centerGrid??true;const BACKGROUND=props.background??\"transparent\";// ==========================\n// Tweakables (internal)\n// ==========================\nconst GAP_COUNT_PER_COLUMN=6;const GAP_SIZE_MIN_VH=6;const GAP_SIZE_MAX_VH=12;const AMP_MIN=.15;const AMP_MAX=.8;const SPEED_MIN=.1;const SPEED_MAX=.3;const SAFE_MIN_VISIBLE_PX=6;const MIN_SEGMENT_DRAW_PX=.75;const randRange=(a,b)=>a+Math.random()*(b-a);const vhToPx=(vh,heightPx)=>vh/100*heightPx;const makeGaps=React.useCallback(height=>{const gaps=[];const minPx=vhToPx(GAP_SIZE_MIN_VH,height);const maxPx=vhToPx(GAP_SIZE_MAX_VH,height);for(let i=0;i<GAP_COUNT_PER_COLUMN;i++){const h0=randRange(minPx,maxPx);const cy=randRange(h0*.5,Math.max(h0*.5,height-h0*.5));const amp=randRange(AMP_MIN,AMP_MAX);const spd=randRange(SPEED_MIN,SPEED_MAX);const ph=Math.random();gaps.push({cy,h0,amp,spd,ph});}gaps.sort((a,b)=>a.cy-b.cy);return gaps;},[]);const normalizeGaps=React.useCallback((spans,h)=>{let clamped=spans.map(g=>{let top=Math.max(0,g.top);let bot=Math.min(h,g.bot);if(bot<top)[top,bot]=[bot,top];const half=(bot-top)/2;const cy=(top+bot)/2;return{top,bot,half,cy};});clamped.sort((a,b)=>a.top-b.top);const merged=[];for(const g of clamped){if(!merged.length||g.top>merged[merged.length-1].bot){merged.push({...g});}else{const m=merged[merged.length-1];m.bot=Math.max(m.bot,g.bot);m.cy=(m.top+m.bot)/2;m.half=(m.bot-m.top)/2;}}const coverage=merged.reduce((s,g)=>s+(g.bot-g.top),0);const maxCoverage=Math.max(0,h-SAFE_MIN_VISIBLE_PX);if(coverage>maxCoverage&&coverage>0){const k=maxCoverage/coverage;for(const g of merged){const newHalf=g.half*k;let top=g.cy-newHalf;let bot=g.cy+newHalf;if(top<0){bot-=top;top=0;}if(bot>h){top-=bot-h;bot=h;}g.top=Math.max(0,top);g.bot=Math.min(h,bot);g.half=(g.bot-g.top)/2;g.cy=(g.top+g.bot)/2;}}return merged;},[]);React.useEffect(()=>{const prefersReducedMotion=window.matchMedia?.(\"(prefers-reduced-motion: reduce)\")?.matches;const saveData=// @ts-ignore\ntypeof navigator!==\"undefined\"&&navigator.connection?.saveData;if(prefersReducedMotion||saveData)return;const wrap=wrapRef.current;const canvas=canvasRef.current;if(!wrap||!canvas)return;let t0=performance.now();let lastW=0;let lastH=0;let lastCols=0;let gapsByCol=[];const getColsForWidth=w=>Math.max(1,Math.floor((w-1)/COLUMN_GAP_PX)+1);const fitCanvas=()=>{const dpr=Math.max(1,window.devicePixelRatio||1);const rect=wrap.getBoundingClientRect();const w=Math.max(1,Math.floor(rect.width));const h=Math.max(1,Math.floor(rect.height));if(canvas.width!==w*dpr||canvas.height!==h*dpr){canvas.width=w*dpr;canvas.height=h*dpr;}const ctx=canvas.getContext(\"2d\");if(ctx)ctx.setTransform(dpr,0,0,dpr,0,0);return{w,h};};const reinit=(w,h)=>{const cols=getColsForWidth(w);gapsByCol=Array.from({length:cols},()=>makeGaps(h));lastCols=cols;lastW=w;lastH=h;t0=performance.now();};const tick=nowMs=>{const ctx=canvas.getContext(\"2d\");if(!ctx)return;const{w,h}=fitCanvas();const cols=getColsForWidth(w);if(!lastW||!lastH||w!==lastW||h!==lastH||cols!==lastCols){reinit(w,h);}const t=(nowMs-t0)/1e3;const halfLine=LINE_WIDTH_PX/2;const gridWidth=(cols-1)*COLUMN_GAP_PX;const offsetX=CENTER_GRID?Math.round((w-gridWidth)/2):0;ctx.clearRect(0,0,w,h);if(BACKGROUND!==\"transparent\"){ctx.fillStyle=BACKGROUND;ctx.fillRect(0,0,w,h);}ctx.globalCompositeOperation=\"source-over\";ctx.strokeStyle=LINE_COLOR;ctx.globalAlpha=OPACITY;ctx.lineWidth=LINE_WIDTH_PX;for(let c=0;c<cols;c++){const x=Math.round(offsetX+c*COLUMN_GAP_PX)+.5;const rawSpans=gapsByCol[c].map(g=>{const cyc=(g.ph+t*g.spd)%1;const cosTerm=Math.cos(2*Math.PI*cyc);const hAnim=g.h0*(1-g.amp*cosTerm);const half=Math.max(0,hAnim/2);return{top:g.cy-half,bot:g.cy+half};});const spans=normalizeGaps(rawSpans,h);let yCursor=0;const drawSegment=(y0,y1)=>{if(y1-y0<=MIN_SEGMENT_DRAW_PX)return;ctx.beginPath();ctx.moveTo(x-halfLine,y0);ctx.lineTo(x-halfLine,y1);ctx.stroke();};for(const g of spans){drawSegment(yCursor,g.top);yCursor=g.bot;}drawSegment(yCursor,h);}// Radial fade mask: upper-left keeps OPACITY, bottom-right -> 0\nctx.save();ctx.globalAlpha=1;ctx.globalCompositeOperation=\"destination-in\";const radius=Math.hypot(w,h);const grad=ctx.createRadialGradient(0,0,0,0,0,radius);grad.addColorStop(0,\"rgba(0,0,0,1)\");grad.addColorStop(1,\"rgba(0,0,0,0)\");ctx.fillStyle=grad;ctx.fillRect(0,0,w,h);ctx.restore();rafRef.current=requestAnimationFrame(tick);};roRef.current=new ResizeObserver(()=>{const r=wrap.getBoundingClientRect();reinit(Math.max(1,Math.floor(r.width)),Math.max(1,Math.floor(r.height)));});roRef.current.observe(wrap);rafRef.current=requestAnimationFrame(tick);return()=>{if(rafRef.current)cancelAnimationFrame(rafRef.current);if(roRef.current)roRef.current.disconnect();};},[makeGaps,normalizeGaps,LINE_COLOR,OPACITY,COLUMN_GAP_PX,LINE_WIDTH_PX,CENTER_GRID,BACKGROUND]);return /*#__PURE__*/_jsx(\"div\",{ref:wrapRef,style:{width:\"100%\",height:\"100%\",position:\"relative\",overflow:\"hidden\"},\"aria-hidden\":\"true\",children:/*#__PURE__*/_jsx(\"canvas\",{ref:canvasRef,style:{position:\"absolute\",inset:0,width:\"100%\",height:\"100%\",display:\"block\"}})});}addPropertyControls(BackgroundPattern,{lineColor:{type:ControlType.Color,defaultValue:\"#FFFFFF\"},maxOpacity:{type:ControlType.Number,defaultValue:.3,min:0,max:1,step:.01},columnGap:{type:ControlType.Number,defaultValue:24,min:4,max:200,step:1},lineWidth:{type:ControlType.Number,defaultValue:1,min:.5,max:6,step:.5},centerGrid:{type:ControlType.Boolean,defaultValue:true},background:{type:ControlType.Color,defaultValue:\"transparent\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"BackgroundPattern\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Pattern.map"],"mappings":"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"}