UNPKG

react-layout-masonry

Version:
2 lines 1.6 kB
import{Children as e,createContext as t,isValidElement as n,useCallback as r,useContext as i,useEffect as a,useId as o,useLayoutEffect as s,useMemo as c,useState as l}from"react";import{jsx as u}from"react/jsx-runtime";const d=typeof window<`u`,f=d?s:a,p=(e=!0)=>{let[t,n]=l(d?window.innerWidth:0),i=r(()=>{n(window.innerWidth)},[]);return a(()=>(e&&window.addEventListener(`resize`,i),()=>{window.removeEventListener(`resize`,i)}),[e,i]),f(()=>{i()},[i]),t};var m=p;const h=[640,786,1024,1280,1536],g=e=>e.reduce((e,t,n)=>typeof t==`number`?{...e,[h[n]]:t}:e,{}),_=e=>Array.isArray(e)?g(e):e,v=(e,t)=>{let n=Object.keys(_(e)).map(Number).sort((e,t)=>e-t),r=null;for(let e of n)t>=e&&(r=e);return r??n[0]};var y=v;const b=3,x=e=>{let t=typeof e==`object`,n=m(t),r=c(()=>{if(!t)return e??b;let r=y(e,n);return e[r]??b},[t,n,e]);return r};var S=x;const C=e=>Array.from({length:e},()=>[]),w=(t,r)=>{let i=S(r),a=c(()=>{let r=C(i);return e.forEach(t,(e,t)=>{n(e)&&r[t%i].push(e)}),r},[i,t]);return a};var T=w;const E=t({column:0,position:0}),D=()=>i(E),O=e=>{let{gap:t,as:n=`div`,columnProps:r,columns:i,ref:a,...s}=e,c=o(),l=T(e.children,i);return u(n,{...s,"data-masonry-id":`Masonry-${c}`,style:{display:`flex`,gap:t,...s.style},ref:a,children:l.map((e,i)=>u(n,{"data-masonry-column":i+1,...r,style:{display:`flex`,flex:1,flexDirection:`column`,gap:t,...r?.style},children:e.map((e,t)=>u(E,{value:{column:i,position:t},children:e},`Masonry__Column_Child_${c}_${t}`))},`Masonry__Column_${c}_${i}`))})};var k=O;export{k as default,T as useMasonry,D as useMasonryItem}; //# sourceMappingURL=index.js.map