{"version":3,"file":"GridSnap.Cf7P6XU5.mjs","names":["targetCell","useRef","useState","c","useRef"],"sources":["https:/framerusercontent.com/modules/y9UuJctz31XZhZrMAYl3/MXpm4STg6d4PwINuza8L/FinalGrid.js","https:/framerusercontent.com/modules/Xwp9flcPF0FqhDVL08qz/npxLj222igxs5IYba16q/GridSnap.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{useEffect,useRef,useState}from\"react\";/**\n * Final Grid.\n *\n * The drawing is Muzammil's \"Grid Design\" SVG (/grid-design): one rounded rect\n * per cell, a 1px stroke centred on the cell edge so neighbours share a single\n * line, the whole group faded together so overlapping strokes never darken,\n * and a flat-topped first row where the grid runs off the top edge.\n *\n * The behaviour is the one the old Grid component had through withGridSnap:\n * the column count is derived from the width so cells stay close to a target\n * size while still dividing the width into WHOLE columns, edge to edge. On a\n * wider screen that means MORE columns, never bigger cells or empty sides.\n *\n * Height: with Rows above 0 the grid sizes itself to exactly that many whole\n * rows (set the layer's height to Fit). With Rows at 0 it fills whatever height\n * the layer is given.\n *\n * Because this is real SVG, stroke alignment is native. No border emulation.\n */// Target cell size per size band. MUST match targetCell() in withGridSnap.tsx,\n// which places the agent squares on these same cells.\nfunction targetCell(width){if(width>=1024)return 72;if(width>=768)return 64;return 56;}// Figma draws corner curves as cubics with this handle length, not true arcs.\n// Using the same value keeps the top row's path identical to the design file.\nconst KAPPA=.5522847498;/**\n * @framerIntrinsicWidth 1440\n * @framerIntrinsicHeight 2160\n *\n * @framerSupportedLayoutWidth any-prefer-fixed\n * @framerSupportedLayoutHeight any-prefer-fixed\n */export default function FinalGrid(props){const{color=\"#3931BC\",opacity=.1,strokeWidth=1,radius=10,flatTopRow=true,rows:fixedRows=30,style}=props;const ref=useRef(null);// Server render assumes the design's own frame, so first paint is right at\n// 1440 before the real size is measured.\nconst[size,setSize]=useState({w:1440,h:928,dpr:1});useEffect(()=>{const el=ref.current;if(!el||typeof window===\"undefined\")return;function measure(){if(!el)return;const r=el.getBoundingClientRect();const next={w:r.width,h:r.height,dpr:window.devicePixelRatio||1};setSize(prev=>prev.w===next.w&&prev.h===next.h&&prev.dpr===next.dpr?prev:next);}measure();const observer=new ResizeObserver(measure);observer.observe(el);// devicePixelRatio changes (moving between screens) fire resize.\nwindow.addEventListener(\"resize\",measure);return()=>{observer.disconnect();window.removeEventListener(\"resize\",measure);};},[]);const{w,h,dpr}=size;const columns=Math.max(3,Math.round(w/targetCell(w)));const pitch=w/columns;const rows=fixedRows>0?fixedRows:Math.ceil(h/pitch);// Snap every cell edge to the device pixel grid so a 1px stroke lands the\n// same way the design's integer coordinates do at 72px. At fractional\n// pitches (e.g. 1200 / 17) this keeps lines equally crisp instead of some\n// falling between pixels.\nconst snap=v=>Math.round(v*dpr)/dpr;const xs=Array.from({length:columns+1},(_,i)=>snap(i*pitch));const ys=Array.from({length:rows+1},(_,i)=>snap(i*pitch));// In Rows mode the grid owns its height; otherwise it fills the layer.\nconst height=fixedRows>0?ys[rows]:h;const cells=[];for(let r=0;r<rows;r++){for(let c=0;c<columns;c++){const x0=xs[c];const x1=xs[c+1];const y0=ys[r];const y1=ys[r+1];const rad=Math.min(radius,(x1-x0)/2,(y1-y0)/2);const key=`${r}-${c}`;if(r===0&&flatTopRow){const k=rad*KAPPA;cells.push(/*#__PURE__*/_jsx(\"path\",{d:`M${x0} ${y0}H${x1}V${y1-rad}`+`C${x1} ${y1-rad+k} ${x1-rad+k} ${y1} ${x1-rad} ${y1}`+`H${x0+rad}`+`C${x0+rad-k} ${y1} ${x0} ${y1-rad+k} ${x0} ${y1-rad}`+`V${y0}Z`},key));}else{cells.push(/*#__PURE__*/_jsx(\"rect\",{x:x0,y:y0,width:x1-x0,height:y1-y0,rx:rad},key));}}}return /*#__PURE__*/_jsx(\"div\",{ref:ref,\"aria-hidden\":\"true\",style:{...style,position:\"relative\",width:\"100%\",height:fixedRows>0?height:\"100%\",overflow:\"hidden\",pointerEvents:\"none\"},children:/*#__PURE__*/_jsx(\"svg\",{width:w,height:height,viewBox:`0 0 ${w} ${height}`,fill:\"none\",xmlns:\"http://www.w3.org/2000/svg\",style:{position:\"absolute\",top:0,left:0,display:\"block\"},children:/*#__PURE__*/_jsx(\"g\",{opacity:opacity,stroke:color,strokeWidth:strokeWidth,children:cells})})});}FinalGrid.displayName=\"Final Grid\";addPropertyControls(FinalGrid,{color:{type:ControlType.Color,title:\"Stroke\",defaultValue:\"#3931BC\"},opacity:{type:ControlType.Number,title:\"Opacity\",defaultValue:.1,min:0,max:1,step:.01},strokeWidth:{type:ControlType.Number,title:\"Stroke width\",defaultValue:1,min:.5,max:4,step:.5,unit:\"px\"},radius:{type:ControlType.Number,title:\"Radius\",defaultValue:10,min:0,max:36,step:1,unit:\"px\"},rows:{type:ControlType.Number,title:\"Rows\",description:\"0 fills the layer's height instead.\",defaultValue:30,min:0,max:200,step:1},flatTopRow:{type:ControlType.Boolean,title:\"Flat top row\",defaultValue:true}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FinalGrid\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"1440\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any-prefer-fixed\",\"framerIntrinsicHeight\":\"2160\",\"framerSupportedLayoutHeight\":\"any-prefer-fixed\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./FinalGrid.map","import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useRef}from\"react\";/**\n * Grid sizing, cell snapping and the scroll choreography for \"/office-homepage\".\n *\n * Native Framer covers most of this page. Four things it cannot do, which is\n * all this file is for:\n *\n *  1. Keep the cell size roughly constant while still fitting a WHOLE number of\n *     columns edge to edge. A fixed percentage means a fixed column count, so\n *     the cell size swings with the viewport.\n *  2. Snap vertically. A cell's height is a fraction of the container WIDTH and\n *     CSS `top` percentages resolve against HEIGHT, so there is no native form.\n *  3. Sequence the reveals precisely. The native `viewport` knob is start /\n *     middle / end only, which is too coarse to land the ticks before the frame.\n *  4. Move a dot CLOCKWISE around a rectangle. Framer has no path following.\n *  5. Centre the cell strokes. Framer only draws borders INSIDE the box, so two\n *     neighbours stack 1px + 1px on every shared edge while the corner arcs stay\n *     1px. The design (/grid-design) strokes are centred, so neighbours land on\n *     the same line and every seam, edge and corner reads as one even 1px.\n *\n * The squares' merge into the cards is still native scroll transform on those\n * layers, and composes on top of the resting positions set here.\n */// ---- tuning ---------------------------------------------------------------\n// Target cell size per size band. The column count is chosen to land as close\n// to these as possible while still dividing the width into whole columns.\nfunction targetCell(width){if(width>=1024)return 72;if(width>=768)return 64;return 56;}// Reveal phases, as a fraction of the card cluster's travel up the viewport.\n// Both sit late on purpose: nothing should start until the squares have\n// finished dropping into the three boxes. Ticks land first, then the frame,\n// the heading and the dots arrive together.\nconst TICKS=[.6,.72];const FRAME=[.78,.94];// Dot speed around the frame's perimeter, px per second. Previously 145.\nconst DOT_SPEED=145/1.5;// Gap between an agent square and its label, and how far the label sits to the\n// left of the square. Taken from Muzammil's reference screenshot.\nconst LABEL_GAP=11;const LABEL_SHIFT=18;// Square placement as [column, row], zero-indexed from the grid's top-left. A\n// NEGATIVE column counts back from the right edge, so -1 is the last column.\nconst WIDE={\"Agent search\":{col:3,row:1,scale:95/72},\"Agent bot\":{col:1,row:4,scale:1},\"Agent brackets\":{col:2,row:6,scale:1},\"Agent code\":{col:-4,row:5,scale:95/72},\"Agent globe\":{col:-3,row:2,scale:1},\"Agent window\":{col:-2,row:4,scale:1},\"Mask group\":{col:-1,row:8,scale:1}};const NARROW={\"Agent search\":{col:1,row:1,scale:95/72},\"Agent bot\":{col:0,row:4,scale:1},\"Agent brackets\":{col:0,row:6,scale:1},\"Agent code\":{col:-2,row:5,scale:95/72},\"Agent globe\":{col:-1,row:2,scale:1},\"Agent window\":{col:-1,row:4,scale:1},\"Mask group\":{col:-2,row:8,scale:1}};// Which square each label hangs off, and on which side.\nconst LABELS=[{label:\"Label investigator\",square:\"Agent search\",side:\"above\"},{label:\"Label triager\",square:\"Agent code\",side:\"below\"}];// ---- helpers --------------------------------------------------------------\nconst q=name=>document.querySelector(`[data-framer-name=\"${name}\"]`);function clamp01(n){return n<0?0:n>1?1:n;}function ramp(p,from,to){return clamp01((p-from)/(to-from));}// Framer draws a border as an ::after pinned to the box with border-box sizing,\n// which puts the whole stroke inside. Growing that ::after by half a stroke on\n// every side moves the stroke's centre onto the cell edge, where the neighbour's\n// stroke sits too. Colour and width still come from the native border; the\n// radius grows by the same half stroke so the centreline keeps the native value.\n// Top-row cells get square top corners, as in the design, where the grid runs\n// off the top edge. Below 2x a half-pixel offset snaps to a whole pixel, which\n// pushes the last column's stroke past the clip, so there the last column only\n// grows to the left and its right stroke stays on screen.\nconst STROKE_STYLE_ID=\"grid-snap-centred-stroke\";function centreStrokes(cells,columns){const first=cells[0];if(!first)return;const cs=getComputedStyle(first,\"::after\");const half=(parseFloat(cs.borderTopWidth)||1)/2;const radius=(parseFloat(getComputedStyle(first).borderTopLeftRadius)||0)+half;let style=document.getElementById(STROKE_STYLE_ID);if(!style){style=document.createElement(\"style\");style.id=STROKE_STYLE_ID;document.head.appendChild(style);}const cell='[data-framer-name=\"Grid\"] [data-framer-name=\"Cell\"]';style.textContent=`\n${cell}::after {\n    top: -${half}px !important;\n    left: -${half}px !important;\n    width: calc(100% + ${half*2}px) !important;\n    height: calc(100% + ${half*2}px) !important;\n    border-radius: ${radius}px !important;\n}\n${cell}[data-grid-top]::after {\n    border-top-left-radius: 0 !important;\n    border-top-right-radius: 0 !important;\n}`;if((window.devicePixelRatio||1)<1.5){style.textContent+=`\n${cell}[data-grid-right]::after {\n    width: calc(100% + ${half}px) !important;\n}`;}cells.forEach((c,i)=>{c.toggleAttribute(\"data-grid-top\",i<columns);c.toggleAttribute(\"data-grid-right\",i%columns===columns-1);});}function fade(el,value){if(el)el.style.opacity=String(value);}export function withGridSnap(Component){return function GridSnap(props){const lastColumns=useRef(0);const lastRatio=useRef(0);useEffect(()=>{let raf=0;let retry=0;// --- layout: grid size, square snapping, label anchoring ---------\nfunction layout(){const grid=q(\"Grid\");if(!grid)return;const width=grid.getBoundingClientRect().width;// On first paint the element can measure 0. Writing then is what\n// made the cells stack oddly on reload.\nif(width<200){retry=requestAnimationFrame(layout);return;}const columns=Math.max(3,Math.round(width/targetCell(width)));const cell=width/columns;grid.style.top=\"0px\";const ratio=window.devicePixelRatio||1;if(columns!==lastColumns.current||ratio!==lastRatio.current){const pct=`${100/columns}%`;const cells=Array.from(grid.querySelectorAll('[data-framer-name=\"Cell\"]'));if(columns!==lastColumns.current){cells.forEach(c=>{c.style.width=pct;c.style.height=\"auto\";});}lastColumns.current=columns;lastRatio.current=ratio;centreStrokes(cells,columns);}const table=columns>=12?WIDE:NARROW;for(const[name,spec]of Object.entries(table)){const el=q(name);if(!el)continue;const col=spec.col<0?columns+spec.col:spec.col;const size=cell*spec.scale;// Centre on the cell so the oversized ringed agents overhang\n// evenly rather than sitting off-corner.\nconst left=(col+.5)*cell-size/2;const top=(spec.row+.5)*cell-size/2;el.style.left=`${left}px`;el.style.top=`${top}px`;el.style.right=\"auto\";el.style.bottom=\"auto\";el.style.width=`${size}px`;el.style.height=`${size}px`;}// Labels ride with their square rather than staying at the\n// pixel position they were authored at.\nfor(const{label,square,side}of LABELS){const el=q(label);const anchor=q(square);if(!el||!anchor)continue;const sLeft=parseFloat(anchor.style.left||\"0\");const sTop=parseFloat(anchor.style.top||\"0\");const sSize=parseFloat(anchor.style.height||\"0\");const h=el.getBoundingClientRect().height;el.style.left=side===\"above\"?`${sLeft-LABEL_SHIFT}px`:`${sLeft}px`;el.style.top=side===\"above\"?`${sTop-h-LABEL_GAP}px`:`${sTop+sSize+LABEL_GAP}px`;el.style.right=\"auto\";el.style.bottom=\"auto\";}}// --- reveals: ticks, then frame + heading together ---------------\nfunction reveals(){const cards=q(\"Cards\");if(!cards)return;const r=cards.getBoundingClientRect();const vh=window.innerHeight||1;// 0 when the cluster's top touches the bottom of the viewport,\n// 1 once the whole cluster is in view. Measuring against its own\n// height rather than a full viewport height matters: the cluster\n// sits low in its container, so it may never travel a full\n// screen upward before the page bottoms out, which left every\n// reveal stuck at 0.\nconst p=clamp01((vh-r.top)/Math.max(r.height,1));const ticks=ramp(p,TICKS[0],TICKS[1]);fade(q(\"Connectors\"),ticks);fade(q(\"Check right\"),ticks);const frame=ramp(p,FRAME[0],FRAME[1]);fade(q(\"Orange frame\"),frame);fade(q(\"Section heading\"),frame);fade(q(\"Dot 1\"),frame);fade(q(\"Dot 2\"),frame);fade(q(\"Dot 3\"),frame);}// --- dots: clockwise around the frame's perimeter ----------------\nconst dots=[{name:\"Dot 1\",offset:121},{name:\"Dot 3\",offset:1404},{name:\"Dot 2\",offset:2215}];function spin(now){const frame=q(\"Orange frame\");if(frame){const w=frame.offsetWidth;const h=frame.offsetHeight;const x0=frame.offsetLeft;const y0=frame.offsetTop;const perimeter=2*(w+h);for(const d of dots){const el=q(d.name);if(!el)continue;const r=el.offsetWidth/2;let s=(d.offset+now/1e3*DOT_SPEED)%perimeter;let x;let y;if(s<w){// top edge, left to right\nx=x0+s;y=y0;}else if((s-=w)<h){// right edge, downward\nx=x0+w;y=y0+s;}else if((s-=h)<w){// bottom edge, right to left\nx=x0+w-s;y=y0+h;}else{// left edge, upward\ns-=w;x=x0;y=y0+h-s;}el.style.left=`${x-r}px`;el.style.top=`${y-r}px`;el.style.right=\"auto\";el.style.bottom=\"auto\";}}reveals();raf=requestAnimationFrame(spin);}layout();raf=requestAnimationFrame(spin);const observer=new ResizeObserver(layout);const grid=q(\"Grid\");if(grid)observer.observe(grid);window.addEventListener(\"resize\",layout);return()=>{cancelAnimationFrame(raf);cancelAnimationFrame(retry);observer.disconnect();window.removeEventListener(\"resize\",layout);document.getElementById(STROKE_STYLE_ID)?.remove();};},[]);return /*#__PURE__*/_jsx(Component,{...props});};}\nexport const __FramerMetadata__ = {\"exports\":{\"withGridSnap\":{\"type\":\"reactHoc\",\"name\":\"withGridSnap\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./GridSnap.map"],"mappings":"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"}