@anoki/fse-ui
Version:
FSE UI components library
49 lines (48 loc) • 2.02 kB
JavaScript
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