UNPKG

@lobehub/ui

Version:

Lobe UI is an open-source UI component library for building AIGC web apps

58 lines (55 loc) 1.91 kB
'use client'; import Grid_default from "../../Grid/Grid.mjs"; import { CHILDREN_CLASSNAME, styles } from "./style.mjs"; import SpotlightCardItem_default from "./SpotlightCardItem.mjs"; import { memo, useEffect, useMemo, useRef } from "react"; import { jsx } from "react/jsx-runtime"; import { cx } from "antd-style"; //#region src/awesome/SpotlightCard/SpotlightCard.tsx const SpotlightCard = memo(({ items, renderItem: Content, maxItemWidth, className, columns = 3, gap = "1em", style, size = 800, borderRadius = 12, spotlight = true, ...rest }) => { const cssVariables = useMemo(() => ({ "--spotlight-card-border-radius": `${borderRadius}px`, "--spotlight-card-size": `${size}px` }), [borderRadius, size]); const ref = useRef(null); useEffect(() => { if (!ref.current) return; if (!spotlight) return; const fn = (e) => { for (const card of document.querySelectorAll(`.${CHILDREN_CLASSNAME}`)) { const rect = card.getBoundingClientRect(), x = e.clientX - rect.left, y = e.clientY - rect.top; card.style.setProperty("--mouse-x", `${x}px`); card.style.setProperty("--mouse-y", `${y}px`); } }; ref.current.addEventListener("mousemove", fn); return () => { ref.current?.removeEventListener("mousemove", fn); }; }, []); return /* @__PURE__ */ jsx(Grid_default, { className: cx(styles.container, styles.grid, className), gap, maxItemWidth, ref, rows: columns, style: { ...cssVariables, ...style }, ...rest, children: items.map((item, index) => { return /* @__PURE__ */ jsx(SpotlightCardItem_default, { borderRadius, className: CHILDREN_CLASSNAME, size, children: /* @__PURE__ */ jsx(Content, { ...item }) }, index); }) }); }); SpotlightCard.displayName = "SpotlightCard"; var SpotlightCard_default = SpotlightCard; //#endregion export { SpotlightCard_default as default }; //# sourceMappingURL=SpotlightCard.mjs.map