UNPKG

@anoki/fse-ui

Version:

FSE UI components library

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