{"version":3,"file":"DotMatrix.DB0VCncl.mjs","names":["useState","useRef","p"],"sources":["https:/framerusercontent.com/modules/Lxd4aAzFrq0qn4Ft7xe8/oC9plLn9eGvR3MWdC5lD/DotMatrix.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef,useState}from\"react\";import{addPropertyControls,ControlType}from\"framer\";// ─────────────────────────────────────────────────────────────────────────────\n// DotMatrix — Onova / Designloom\n// A 7×7 grid of 1px dots with 47 named animation modes.\n// Each mode is a pure function: (brightness buffer, state, speed) → void\n// ─────────────────────────────────────────────────────────────────────────────\n// ── Grid constants ────────────────────────────────────────────────────────────\nconst GRID=7// dots per side\n;const SIZE=28// canvas size in px (7 × 4px cells)\n;const CELL=SIZE/GRID// px per cell (4px)\n;const DOT=1// dot square size in px\n;const THRESHOLD=.45// brightness above which a dot renders as \"on\"\n;const MX=(GRID-1)/2// grid centre x/y (2.5)\n;// ── Helpers ───────────────────────────────────────────────────────────────────\n/** Linear interpolation */const lerp=(a,b,t)=>a+(b-a)*t;/** Euclidean distance from grid centre, normalised 0–1 */const normDist=(r,c)=>Math.sqrt((c-MX)**2+(r-MX)**2)/(MX*Math.SQRT2);/** Wrap a value into [0, max) */const wrap=(v,max)=>(v%max+max)%max;/** Dot index from row + col */const idx=(r,c)=>r*GRID+c;// ─────────────────────────────────────────────────────────────────────────────\n// MODES — ORIGINAL SET\n// ─────────────────────────────────────────────────────────────────────────────\n/** Single bright column sweeps left → right */const scan=(B,S,spd)=>{S.x=wrap(S.x+.09*spd,GRID+2);for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const tgt=Math.abs(c-(S.x-1))<.7?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.4;}};/** Fills left → right, holds, drains, repeats */const fill=(B,S,spd)=>{S.t+=.022*spd;const p=S.t%1;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const tgt=p<.4?c<p/.4*(GRID+1)-.5?1:0:p<.55?1:c<(1-(p-.55)/.45)*(GRID+1)-.5?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.5;}};/** Diagonal sine wave rolls top-left → bottom-right */const ripple=(B,S,spd)=>{S.t+=.022*spd;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const tgt=Math.sin(S.t*2.8-(c*.8+r)*1.1)>0?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.35;}};/** Random dots spark on and fade independently */const blink=(B,S,spd)=>{for(let i=0;i<B.length;i++)B[i]*=.82;for(const sd of S.seeds){if(sd.rest>0){sd.rest-=spd;continue;}sd.v+=sd.dir*sd.spd*spd;if(sd.v>=1){sd.v=1;sd.dir=-1;}if(sd.v<=0){sd.r=Math.random()*GRID|0;sd.c=Math.random()*GRID|0;sd.v=0;sd.dir=1;sd.spd=.04+Math.random()*.06;sd.rest=Math.random()*60/spd;continue;}B[idx(sd.r,sd.c)]=sd.v;}};/** Sequential column pulses — each column its own phase */const columns=(B,S,spd)=>{S.phase+=.05*spd;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const tgt=Math.sin(S.phase-c*.9)>0?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.3;}};/** Square wavefront closes from edges to centre, holds, cycles */const converge=(B,S,spd)=>{S.t+=.022*spd;if(S.t>10)S.t=0;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const dist=Math.max(Math.abs(c-MX)/MX,Math.abs(r-MX)/MX);const arrive=(1-dist)*3.5;let tgt=0;if(S.t>arrive){const age=S.t-arrive;tgt=age<1.2?1:Math.sin(S.t*1.3-dist*2)>0?1:0;}B[idx(r,c)]+=(tgt-B[idx(r,c)])*.3;}};/** One column active at a time, marches left → right */const approach=(B,S,spd)=>{S.t+=.006*spd;const col=Math.floor(S.t%1*GRID);for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const tgt=c===col?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.45;}};/** Double-pulse from centre with long rest — cardiac rhythm */const heartbeat=(B,S,spd)=>{S.t+=.022*spd;const p=S.t%1;const beat1=Math.exp(-((p-.05)**2)/.001);const beat2=Math.exp(-((p-.2)**2)/.002)*.7;const pulse=Math.max(beat1,beat2);for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const tgt=Math.max(0,pulse*(1-normDist(r,c)*1.4));B[idx(r,c)]+=(tgt-B[idx(r,c)])*.35;}};/** Each column has a falling head with a fading tail */const matrixRain=(B,S,spd)=>{S.t+=.022*spd;for(let c=0;c<GRID;c++){const head=(S.t+c*.37)%1*(GRID+2)-1;for(let r=0;r<GRID;r++){const d=Math.abs(r-head);const tgt=d<.8?1:d<2.5?Math.max(0,1-(d-.8)/1.7)*.4:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.4;}}};/** Bright dot sweeps clockwise around the grid */const clock=(B,S,spd)=>{S.t+=.022*spd;const angle=S.t%1*Math.PI*2;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const a=wrap(Math.atan2(r-MX,c-MX)+Math.PI/2,Math.PI*2);const diff=Math.min(Math.abs(a-angle%(Math.PI*2)),Math.PI*2-Math.abs(a-angle%(Math.PI*2)));const tgt=diff<.7?1:diff<1.4?(1-(diff-.7)/.7)*.5:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.35;}};/** Short bursts of random dots with gaps — SOS-style signal */const morse=(B,S,spd)=>{S.t+=.022*spd;const p=S.t%1;const active=p<.08||p>.14&&p<.19||p>.26&&p<.4;for(let i=0;i<B.length;i++)B[i]*=.78;if(active&&Math.random()<.6){const r=Math.random()*GRID|0;const c=Math.random()*GRID|0;B[idx(r,c)]=1;}};/** Sine wave traces across rows like an oscilloscope */const oscilloscope=(B,S,spd)=>{S.t+=.022*spd;for(let c=0;c<GRID;c++){const waveRow=Math.round((Math.sin(S.t*2.5-c*1.1)+1)/2*(GRID-1));for(let r=0;r<GRID;r++){const d=Math.abs(r-waveRow);const tgt=d===0?1:d===1?.3:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.45;}}};/** Columns fill from bottom — uptime bars with occasional dips */const uptime=(B,S,spd)=>{S.t+=.006*spd;for(let c=0;c<GRID;c++){const p=(S.t+c*.18)%1;const dipping=p>.88&&p<.96;const fillRows=dipping?Math.floor((1-(p-.88)/.04)*GRID):GRID;for(let r=0;r<GRID;r++){const tgt=GRID-1-r<fillRows?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.25;}}};/** Single dot blinks on/off at grid centre — terminal cursor waiting */const cursor=(B,S,spd)=>{S.t+=.022*spd;// blink: on for 60% of cycle, off for 40%\nconst on=S.t%1<.6;const row=Math.floor(GRID/2);const col=Math.floor(GRID/2);for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const tgt=r===row&&c===col&&on?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.5;}};/** Each column rolls a dot vertically at a different speed — odometer */const odometer=(B,S,spd)=>{S.t+=.022*spd;for(let c=0;c<GRID;c++){const head=S.t*(.4+c*.35)%GRID;for(let r=0;r<GRID;r++){const d=Math.min(wrap(r-head,GRID),wrap(head-r,GRID));const tgt=d<.6?1:d<1.2?(1-(d-.6)/.6)*.3:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.45;}}};/** All dots flash simultaneously then decay — camera shutter */const shutter=(B,S,spd)=>{S.t+=.022*spd;const p=S.t%1;const flash=p<.06?1:Math.max(0,1-(p-.06)/.25);for(let i=0;i<B.length;i++)B[i]+=(flash-B[i])*.5;};/** Ring expands outward from centre — sonar ping */const ping=(B,S,spd)=>{S.t+=.022*spd;const ring=S.t%1*GRID*1.5;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const d=Math.abs(Math.sqrt((c-MX)**2+(r-MX)**2)-ring);const tgt=d<.7?1:d<1.5?(1-(d-.7)/.8)*.4:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.4;}};/** Types left→right one row at a time, pauses, moves to next — typewriter */const typewriter=(B,S,spd)=>{S.t+=.006*spd// slow base — full cycle takes ~3s\n;const cycle=S.t%1;// divide cycle evenly across rows — each row gets equal time\nconst rowF=cycle*GRID;const row=Math.min(Math.floor(rowF),GRID-1);const rowFrac=rowF%1// 0→1 progress within current row\n;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){let tgt=0;if(r<row){tgt=0// previous rows clear as we move down\n;}else if(r===row){// type across: first 80% of row time fills cols, last 20% holds\nconst filled=rowFrac<.8?Math.floor(rowFrac/.8*GRID):GRID;tgt=c<filled?1:0;}B[idx(r,c)]+=(tgt-B[idx(r,c)])*.45;}};/** Concentric rings radiate outward from centre continuously */const broadcast=(B,S,spd)=>{S.t+=.022*spd;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const dist=Math.sqrt((c-MX)**2+(r-MX)**2);const r1=wrap(dist-S.t*2.5,3);const r2=wrap(dist-S.t*2.5+1.5,3);const tgt=Math.max(Math.abs(r1-1.5)<.5?1:0,Math.abs(r2-1.5)<.4?.6:0);B[idx(r,c)]+=(tgt-B[idx(r,c)])*.35;}};/** Each row ticks on as a single dot then fills — notepad checklist */const checklist=(B,S,spd)=>{S.t+=.022*spd;const cycle=S.t%1;const clearing=cycle>.85;// which row is currently being ticked\nconst rowProgress=clearing?GRID*(1-(cycle-.85)/.15)// clear rows bottom→top\n:cycle/.8*GRID// tick rows top→bottom\n;const activeRow=Math.floor(rowProgress);const rowFrac=rowProgress%1// how far through current row\n;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){let tgt=0;if(clearing){// rows below activeRow already cleared\ntgt=r<activeRow?1:0;}else if(r<activeRow){// completed rows — all on, but left dot slightly brighter (the tick)\ntgt=1;}else if(r===activeRow){if(c===0){// left dot = the checkbox tick — appears first\ntgt=rowFrac>.15?1:0;}else{// rest of row fills in after tick\ntgt=rowFrac>.15+c*.12?1:0;}}B[idx(r,c)]+=(tgt-B[idx(r,c)])*.45;}};// ─────────────────────────────────────────────────────────────────────────────\n// MODES — PHYSICS SET\n// ─────────────────────────────────────────────────────────────────────────────\n/** Dot bounces left ↔ right along centre row only — clean pong */const pingpong=(B,S,spd)=>{S.t+=.022*spd;// triangle wave: 0→1→0 maps col 0→GRID-1→0\nconst p=S.t%1;const tri=p<.5?p*2:2-p*2;const col=Math.round(tri*(GRID-1));const row=Math.floor(GRID/2)// centre row\n;for(let i=0;i<B.length;i++)B[i]*=.6;B[idx(row,col)]=1;// small trail on adjacent cols\nif(col>0)B[idx(row,col-1)]=Math.max(B[idx(row,col-1)],.4);if(col<GRID-1)B[idx(row,col+1)]=Math.max(B[idx(row,col+1)],.4);};/** Dot bounces at angles off all four walls with a fading trail — billiard ball */const billiards=(B,S,spd)=>{S.t+=.022*spd;// coprime x/y speeds so path never immediately repeats\nconst tx=S.t*1.4;const ty=S.t*.9;const triX=tx%1<.5?tx%1*2:2-tx%1*2;const triY=ty%1<.5?ty%1*2:2-ty%1*2;const bx=triX*(GRID-1);const by=triY*(GRID-1);// longer trail so it reads as a rolling ball not a blink\nfor(let i=0;i<B.length;i++)B[i]*=.72;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const d=Math.sqrt((c-bx)**2+(r-by)**2);const tgt=d<.65?1:d<1.4?(1-(d-.65)/.75)*.5:0;B[idx(r,c)]=Math.max(B[idx(r,c)],tgt);}};/** Dots fall from top and pile up at the bottom — gravity */const gravity=(B,S,spd)=>{S.t+=.022*spd;const p=S.t%1;// how many rows have \"settled\" at the bottom\nconst settled=Math.floor(p*(GRID+1));for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const fromBottom=GRID-1-r;let tgt=0;if(fromBottom<settled){tgt=1// settled layer\n;}else if(fromBottom===settled){// falling dot — descends in real time within its row\nconst fallProgress=p*(GRID+1)%1;tgt=fallProgress>.5?1:0;}B[idx(r,c)]+=(tgt-B[idx(r,c)])*.4;}};/** Two planets orbiting a bright sun at different speeds — solar system */const orbit=(B,S,spd)=>{S.t+=.022*spd;for(let i=0;i<B.length;i++)B[i]*=.7;// sun — always on at centre\nB[idx(3,3)]=1;// inner planet: fast, radius 1.4\nconst a1=S.t*Math.PI*2*1.8;const ox1=MX+Math.cos(a1)*1.4;const oy1=MX+Math.sin(a1)*1.4;// outer planet: slow, radius 2.7\nconst a2=S.t*Math.PI*2*.6;const ox2=MX+Math.cos(a2)*2.7;const oy2=MX+Math.sin(a2)*2.7;for(const[ox,oy]of[[ox1,oy1],[ox2,oy2]]){for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const d=Math.sqrt((c-ox)**2+(r-oy)**2);if(d<.7)B[idx(r,c)]=1;}}};/** Dot swings left ↔ right on an arc from top centre — pendulum */const pendulum=(B,S,spd)=>{S.t+=.022*spd;// pendulum angle: damped sine (we keep it perpetual for looping)\nconst angle=Math.sin(S.t*2.4)*.9// radians from vertical\n;const length=2.5;const pc=MX+Math.sin(angle)*length;const pr=Math.cos(angle)*length;for(let i=0;i<B.length;i++)B[i]*=.72;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const d=Math.sqrt((c-pc)**2+(r-pr)**2);const tgt=d<.7?1:0;B[idx(r,c)]=Math.max(B[idx(r,c)],tgt);}};/** Single diagonal wave sweeps top-left → bottom-right cleanly */const avalanche=(B,S,spd)=>{S.t+=.022*spd;// diagonal index for each cell: 0 (top-left) → 2*(GRID-1) (bottom-right)\nconst maxDiag=(GRID-1)*2;const head=S.t%1*(maxDiag+4)-2// sweeps across all diagonals\n;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const diag=r+c;const d=Math.abs(diag-head);const tgt=d<.7?1:d<1.6?(1-(d-.7)/.9)*.35:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.4;}};// ─────────────────────────────────────────────────────────────────────────────\n// MODES — NATURAL SET\n// ─────────────────────────────────────────────────────────────────────────────\n/** Dots rise from bottom randomly at varying speeds — bubbles in a flask */const bubbles=(B,S,spd)=>{S.t+=.022*spd;for(let i=0;i<B.length;i++)B[i]*=.94;// spawn new bubbles at bottom\nif(Math.random()<.15*spd){S.bubbles.push({c:Math.random()*GRID|0,y:GRID-1,spd:.03+Math.random()*.06});}for(const b of S.bubbles){b.y-=b.spd*spd;if(b.y<0){S.bubbles.splice(S.bubbles.indexOf(b),1);continue;}const r=Math.round(b.y);if(r>=0&&r<GRID)B[idx(r,b.c)]=1;}};/** Dots fall from top at random positions and speeds — rain */const rain=(B,S,spd)=>{S.t+=.022*spd;for(let i=0;i<B.length;i++)B[i]*=.88;if(Math.random()<.2*spd){S.drops.push({c:Math.random()*GRID|0,y:0,spd:.06+Math.random()*.1});}for(const d of S.drops){d.y+=d.spd*spd;if(d.y>=GRID){S.drops.splice(S.drops.indexOf(d),1);continue;}const r=Math.floor(d.y);if(r>=0&&r<GRID)B[idx(r,d.c)]=1;}};/** Flame burns from bottom up — heat strongest at base, flickering upward */const fire=(B,S,spd)=>{S.t+=.022*spd;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){// r=0 is top, r=GRID-1 is bottom — heat max at bottom\nconst heat=r/(GRID-1);const flicker=Math.sin(S.t*4.5+c*1.8-r*1.2)*.5+.5;const tgt=heat*flicker>.42?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.4;}};/** Soft concentric pulse expands and contracts from centre — breathe */const breathe=(B,S,spd)=>{S.t+=.022*spd;// slow sine drives an expanding radius\nconst radius=(Math.sin(S.t*1.6)+1)/2*GRID*.85;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const d=Math.sqrt((c-MX)**2+(r-MX)**2);const tgt=d<radius?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.12// slow lerp = soft edge\n;}};/** Wave fills from bottom, holds, recedes — tide */const tide=(B,S,spd)=>{S.t+=.022*spd;const p=S.t%1;// water level oscillates — top row index of water surface\nconst level=p<.45?p/.45// rising\n:p<.55?1// high tide\n:p<.95?1-(p-.55)/.4// falling\n:0// low tide\n;const surface=(1-level)*(GRID-1);for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){// slight wave on the surface\nconst wave=Math.sin(S.t*3+c*1.2)*.3;const tgt=r>=surface+wave?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.3;}};/** Dots grow outward from a centre seed — organic spread */const grow=(B,S,spd)=>{S.t+=.022*spd;const radius=S.t%1*GRID*1.5;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const d=Math.sqrt((c-MX)**2+(r-MX)**2);const tgt=d<radius?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.25;}};/** Grid fills then erodes dot by dot randomly, rebuilds, repeats */const decay=(B,S,spd)=>{S.t+=.022*spd;const p=S.t%1;if(p<.15){// fill phase — snap all on quickly\nfor(let i=0;i<B.length;i++)B[i]+=(1-B[i])*.35;}else if(p<.8){// erosion phase — random dots drop out, no full decay multiplier\nconst progress=(p-.15)/.65;for(let i=0;i<B.length;i++){if(B[i]>THRESHOLD&&Math.random()<.006*spd*(.5+progress*2)){B[i]=.05// drop to near-zero, not zero, avoids full blackout\n;}}}else{// brief hold dark before next cycle\nfor(let i=0;i<B.length;i++)B[i]*=.92;}};// ─────────────────────────────────────────────────────────────────────────────\n// MODES — SIGNAL / TECH SET\n// ─────────────────────────────────────────────────────────────────────────────\n/** Rotating sweep arm — air traffic radar */const radar=(B,S,spd)=>{S.t+=.022*spd;const sweep=S.t%1*Math.PI*2;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const a=wrap(Math.atan2(r-MX,c-MX),Math.PI*2);const diff=wrap(sweep-a,Math.PI*2);// bright on sweep, fades behind it\nconst tgt=diff<.4?1:diff<1.8?(1-(diff-.4)/1.4)*.6:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.35;}};/** Columns bounce up and down independently — audio EQ */const equaliser=(B,S,spd)=>{S.t+=.022*spd;for(let c=0;c<GRID;c++){// each column has a distinct frequency\nconst height=Math.round((Math.sin(S.t*(1.2+c*.4))+1)/2*(GRID-1));for(let r=0;r<GRID;r++){const tgt=GRID-1-r<=height?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.35;}}};/** Random dots flip on/off every frame — pure static noise */const noise=(B,_S,_spd)=>{for(let i=0;i<B.length;i++)B[i]=Math.random()>.5?1:0;};/** Packets of dots travel left → right in bursts — data transmission */const transmission=(B,S,spd)=>{S.t+=.022*spd;for(let i=0;i<B.length;i++)B[i]*=.82;// multiple packets at row offsets\nfor(let row=0;row<GRID;row++){const offset=row*.28;const packetX=(S.t*1.4+offset)%1*(GRID+4)-2;for(let c=0;c<GRID;c++){const d=Math.abs(c-packetX);const tgt=d<.6?1:0;B[idx(row,c)]=Math.max(B[idx(row,c)],tgt);}}};/** Alternating rows phase in opposite horizontal directions */const frequency=(B,S,spd)=>{S.t+=.022*spd;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const dir=r%2===0?1:-1;const tgt=Math.sin(S.t*2.5+c*1.1*dir)>0?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.35;}};// ─────────────────────────────────────────────────────────────────────────────\n// MODES — GEOMETRIC SET\n// ─────────────────────────────────────────────────────────────────────────────\n/** V-shape sweeps through the grid horizontally */const chevron=(B,S,spd)=>{S.t+=.022*spd;const head=S.t%1*(GRID*2+4)-2;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){// chevron: col position = head - distance from centre row\nconst vPos=head-Math.abs(r-MX)*1.2;const d=Math.abs(c-vPos);const tgt=d<.6?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.45;}};/** Diamond outline pulses outward from centre */const diamond=(B,S,spd)=>{S.t+=.022*spd;const ring=S.t%1*GRID*1.5;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){// Manhattan distance gives diamond shape\nconst d=Math.abs(c-MX)+Math.abs(r-MX);const off=Math.abs(d-ring);const tgt=off<.7?1:off<1.4?(1-(off-.7)/.7)*.4:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.4;}};/** Plus sign — wave pulses outward along both axes from true centre */const cross=(B,S,spd)=>{S.t+=.022*spd;const wave=S.t%1*(GRID+1);const CR=3// true centre row and col on 7×7\n;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const inRow=r===CR;const inCol=c===CR;const onArm=inRow||inCol;const d=inCol&&!inRow?Math.abs(r-CR):Math.abs(c-CR);const off=Math.abs(d-wave);const tgt=onArm&&off<.8?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.4;}};/** Dots activate in a clockwise spiral from outside → centre */const spiral=(B,S,spd)=>{S.t+=.022*spd;const angle=S.t%1*Math.PI*2;const radiusT=S.t*.3%1// slowly tightens\n;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const a=wrap(Math.atan2(r-MX,c-MX),Math.PI*2);const d=Math.sqrt((c-MX)**2+(r-MX)**2);// target: match angle adjusted by radius — creates spiral\nconst targetAngle=wrap(angle-d*1.1,Math.PI*2);const diff=Math.min(Math.abs(a-targetAngle),Math.PI*2-Math.abs(a-targetAngle));const tgt=diff<.55?1:diff<1.1?(1-(diff-.55)/.55)*.4:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.35;}};/** Snake path travels through every dot in order */const zigzag=(B,S,spd)=>{S.t+=.022*spd;const total=GRID*GRID;const head=Math.floor(S.t%1*total);const trail=3;for(let i=0;i<B.length;i++)B[i]*=.78;for(let i=0;i<trail+1;i++){const pos=(head-i+total)%total;// snake order: even rows L→R, odd rows R→L\nconst r=Math.floor(pos/GRID);const c=r%2===0?pos%GRID:GRID-1-pos%GRID;B[idx(r,c)]=Math.max(B[idx(r,c)],i===0?1:lerp(.6,0,i/trail));}};/** Left half mirrors right half, rippling outward from centre */const mirror=(B,S,spd)=>{S.t+=.022*spd;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){// fold: distance from vertical centre\nconst foldC=Math.abs(c-MX);const wave=Math.sin(S.t*2.8-foldC*1.4-r*.5)>0?1:0;B[idx(r,c)]+=(wave-B[idx(r,c)])*.35;}};// ─────────────────────────────────────────────────────────────────────────────\n// MODES — SHAPES SET\n// ─────────────────────────────────────────────────────────────────────────────\n/** Four dots rotating with a fading trail — loading spinner */const spinner=(B,S,spd)=>{S.t+=.022*spd;const angle=S.t*Math.PI*2;const radius=2.4// fits inside 7×7 grid\n;const count=4// evenly spaced\n;for(let i=0;i<B.length;i++)B[i]*=.5;for(let n=0;n<count;n++){const a=angle+n/count*Math.PI*2;const ox=MX+Math.cos(a)*radius;const oy=MX+Math.sin(a)*radius;// brightness fades around the circle — lead bright, tail dim\nconst brightness=1-n/count*.8;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const d=Math.sqrt((c-ox)**2+(r-oy)**2);if(d<.7)B[idx(r,c)]=Math.max(B[idx(r,c)],brightness);}}};/** Square outline rotates around centre */const rotatingSquare=(B,S,spd)=>{S.t+=.022*spd;const angle=S.t*Math.PI*2;const size=2// half-size of square\n;for(let i=0;i<B.length;i++)B[i]*=.7;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){// rotate point around centre and check if on square perimeter\nconst dx=c-MX;const dy=r-MX;const rx=dx*Math.cos(-angle)-dy*Math.sin(-angle);const ry=dx*Math.sin(-angle)+dy*Math.cos(-angle);const onEdge=Math.max(Math.abs(rx),Math.abs(ry));const d=Math.abs(onEdge-size);const tgt=d<.55?1:d<1.1?(1-(d-.55)/.55)*.4:0;B[idx(r,c)]=Math.max(B[idx(r,c)],tgt);}};/** Concentric rings expand outward — ripple on water */const rippleRings=(B,S,spd)=>{S.t+=.022*spd;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const d=Math.sqrt((c-MX)**2+(r-MX)**2);const wave=wrap(d-S.t*2.2,2.5);const tgt=Math.abs(wave-1.25)<.5?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.35;}};/** Heart grows from centre outward, holds, fades — pixel-mapped */const heart=(B,S,spd)=>{S.t+=.022*spd;// hand-crafted 7×7 heart — reveal distance from centre (−1 = never on)\nconst HEART=[-1,-1,-1,-1,-1,-1,-1,-1,3,3,-1,3,3,-1,-1,2,1,1,1,2,-1,3,1,0,0,0,1,3,-1,2,1,0,1,2,-1,-1,-1,2,1,2,-1,-1,-1,-1,-1,2,-1,-1,-1];const cycle=S.t%1;// 0-0.5: grow in (reveal distance 0→3), 0.5-0.7: hold, 0.7-1.0: fade out\nconst growing=cycle<.5;const holding=cycle>=.5&&cycle<.7;const fading=cycle>=.7;const progress=growing?cycle/.5*4// 0→4 reveal threshold\n:holding?4:4*(1-(cycle-.7)/.3)// 4→0 fade threshold\n;for(let i=0;i<B.length;i++){const dist=HEART[i];const on=dist>=0&&dist<=progress;const tgt=on?fading?Math.max(0,(progress-dist)/4):1:0;B[i]+=(tgt-B[i])*.4;}};/** 1px chevrons scroll through the grid */const chevronThin=(B,S,spd)=>{S.t+=.022*spd;const head=S.t%1*(GRID*2+4)-2;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const vPos=head-Math.abs(r-MX)*1;const d=Math.abs(c-vPos);const tgt=d<.5?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.45;}};/** 2px chevrons — medium weight scrolling chevron */const chevronMid=(B,S,spd)=>{S.t+=.022*spd;const head=S.t%1*(GRID*2+4)-2;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const vPos=head-Math.abs(r-MX)*1;const d=Math.abs(c-vPos);const tgt=d<1?1:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.45;}};/** Thick chevrons — bold scrolling chevron with gaps */const chevronThick=(B,S,spd)=>{S.t+=.022*spd;// two thick chevrons with a gap between them\nfor(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const vBase=S.t%1*(GRID*2+4)-2;let tgt=0;for(const offset of[0,GRID+2]){const head=vBase-offset;const vPos=head-Math.abs(r-MX)*1;const d=Math.abs(c-vPos);if(d<1.5)tgt=1;}B[idx(r,c)]+=(tgt-B[idx(r,c)])*.45;}};/** Dot sweeps clockwise like a timer hand — clean clock */const timer=(B,S,spd)=>{S.t+=.022*spd;const angle=S.t%1*Math.PI*2// full rotation\n;// draw a hand from centre outward at current angle\nfor(let i=0;i<B.length;i++)B[i]*=.72;for(let len=.5;len<=2.5;len+=.5){const hx=MX+Math.sin(angle)*len;const hy=MX-Math.cos(angle)*len// -cos so 0 = top\n;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const d=Math.sqrt((c-hx)**2+(r-hy)**2);const tgt=d<.6?1:0;B[idx(r,c)]=Math.max(B[idx(r,c)],tgt);}}};// ─────────────────────────────────────────────────────────────────────────────\n// STATUS MODES (used by StatusDot component)\n// ─────────────────────────────────────────────────────────────────────────────\n/** Bright dot traces the perimeter clockwise with a fading tail */const available=(B,S,spd)=>{S.t+=.022*spd;const perimeter=[];for(let c=0;c<GRID;c++)perimeter.push([0,c]);for(let r=1;r<GRID;r++)perimeter.push([r,GRID-1]);for(let c=GRID-2;c>=0;c--)perimeter.push([GRID-1,c]);for(let r=GRID-2;r>=1;r--)perimeter.push([r,0]);const P=perimeter.length;const head=S.t*P*.8%P;const tail=4;for(let i=0;i<B.length;i++)B[i]*=.75;for(let i=0;i<tail+2;i++){const[r,c]=perimeter[Math.floor(wrap(head-i,P))];B[idx(r,c)]=Math.max(B[idx(r,c)],i===0?1:Math.max(0,1-i/tail));}};/** Left columns scroll upward, right columns scroll downward — two-lane road */const fullybooked=(B,S,spd)=>{S.t+=.022*spd;for(let r=0;r<GRID;r++)for(let c=0;c<GRID;c++){const leftLane=c<GRID/2;const phase=leftLane?(S.t*1.2+c*.9)%1:(S.t*1.4+c*.6+.5)%1;const head=phase*GRID;const distUp=wrap(GRID-1-r-head,GRID);const distDown=wrap(r-head,GRID);const d=Math.min(leftLane?distUp:distDown,GRID-(leftLane?distUp:distDown));const tgt=d<.6?1:d<1.4?(1-(d-.6)/.8)*.35:0;B[idx(r,c)]+=(tgt-B[idx(r,c)])*.45;}};// ─────────────────────────────────────────────────────────────────────────────\n// MODE REGISTRY\n// ─────────────────────────────────────────────────────────────────────────────\nconst MODES={// Original\nscan,fill,ripple,blink,columns,converge,approach,heartbeat,matrixRain:matrixRain,clock,morse,oscilloscope,uptime,cursor,odometer,shutter,ping,typewriter,broadcast,checklist,// Physics\npingpong,billiards,gravity,orbit,pendulum,avalanche,// Natural\nbubbles,rain,fire,breathe,tide,grow,decay,// Signal / Tech\nradar,equaliser,noise,transmission,frequency,// Geometric\nchevron,diamond,cross,spiral,zigzag,mirror,// Shapes\nspinner,rotatingSquare,rippleRings,heart,chevronThin,chevronMid,chevronThick,timer,// Status\navailable,fullybooked};// Initial state factory — most modes just need { t, x }\nfunction makeState(mode){if(mode===\"blink\")return{seeds:Array.from({length:4},()=>({r:Math.random()*GRID|0,c:Math.random()*GRID|0,v:0,dir:1,spd:.04+Math.random()*.06,rest:Math.random()*60}))};if(mode===\"columns\")return{phase:0};if(mode===\"bubbles\")return{t:0,bubbles:[]};if(mode===\"rain\")return{t:0,drops:[]};return{t:0,x:0};}// ─────────────────────────────────────────────────────────────────────────────\n// COMPONENT\n// ─────────────────────────────────────────────────────────────────────────────\n// All mode keys for the property control dropdown\nconst MODE_KEYS=Object.keys(MODES).filter(k=>k!==\"available\"&&k!==\"fullybooked\");const MODE_LABELS={scan:\"Scan\",fill:\"Fill\",ripple:\"Ripple\",blink:\"Blink\",columns:\"Columns\",converge:\"Converge\",approach:\"Approach\",heartbeat:\"Heartbeat\",matrixRain:\"Matrix Rain\",clock:\"Clock\",morse:\"Morse\",oscilloscope:\"Oscilloscope\",uptime:\"Uptime\",cursor:\"Cursor\",odometer:\"Odometer\",shutter:\"Shutter\",ping:\"Ping\",typewriter:\"Typewriter\",broadcast:\"Broadcast\",checklist:\"Checklist\",pingpong:\"Ping Pong\",billiards:\"Billiards\",gravity:\"Gravity\",orbit:\"Orbit\",pendulum:\"Pendulum\",avalanche:\"Avalanche\",bubbles:\"Bubbles\",rain:\"Rain\",fire:\"Fire\",breathe:\"Breathe\",tide:\"Tide\",grow:\"Grow\",decay:\"Decay\",radar:\"Radar\",equaliser:\"Equaliser\",noise:\"Noise\",transmission:\"Transmission\",frequency:\"Frequency\",chevron:\"Chevron\",diamond:\"Diamond\",cross:\"Cross\",spiral:\"Spiral\",zigzag:\"Zigzag\",mirror:\"Mirror\"};export default function DotMatrix({mode,speed,dotOn,dotOff}){const[snap,setSnap]=useState(()=>new Float32Array(GRID*GRID));const B=useRef(new Float32Array(GRID*GRID));const S=useRef(makeState(mode));const refs=useRef({mode,speed});refs.current={mode,speed};// Reset buffer and state when mode changes\nuseEffect(()=>{B.current=new Float32Array(GRID*GRID);S.current=makeState(mode);},[mode]);// Single RAF loop — reads mode/speed from ref each frame\nuseEffect(()=>{let raf;const loop=()=>{const{mode:m,speed:spd}=refs.current;(MODES[m]??MODES.scan)(B.current,S.current,spd);setSnap(B.current.slice());raf=requestAnimationFrame(loop);};raf=requestAnimationFrame(loop);return()=>cancelAnimationFrame(raf);},[]);return /*#__PURE__*/_jsx(\"div\",{style:{width:\"100%\",height:\"100%\",position:\"relative\"},children:Array.from({length:GRID*GRID},(_,i)=>{const r=Math.floor(i/GRID);const c=i%GRID;return /*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:Math.round((c+.5)*CELL-DOT/2),top:Math.round((r+.5)*CELL-DOT/2),width:DOT,height:DOT,backgroundColor:snap[i]>THRESHOLD?dotOn:dotOff}},i);})});}DotMatrix.defaultProps={mode:\"scan\",speed:1,dotOn:\"#E6E2DB\",dotOff:\"#2a2a2c\"};addPropertyControls(DotMatrix,{mode:{type:ControlType.Enum,title:\"Mode\",options:MODE_KEYS,optionTitles:MODE_KEYS.map(k=>MODE_LABELS[k]??k),defaultValue:\"scan\"},speed:{type:ControlType.Number,title:\"Speed\",min:.1,max:4,step:.1,defaultValue:1,displayStepper:true},dotOn:{type:ControlType.Color,title:\"Dot on\",defaultValue:\"#E6E2DB\"},dotOff:{type:ControlType.Color,title:\"Dot off\",defaultValue:\"#2a2a2c\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"DotMatrix\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./DotMatrix.map"],"mappings":"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"}