@lobehub/ui
Version:
Lobe UI is an open-source UI component library for building AIGC web apps
44 lines (43 loc) • 1.39 kB
JavaScript
"use client";
import { createContext, memo, use, useCallback, useMemo, useRef } from "react";
import { jsx } from "react/jsx-runtime";
//#region src/Image/PreviewGroup.tsx
const PreviewGroupContext = createContext(null);
const usePreviewGroupContext = () => use(PreviewGroupContext);
const compareEntries = (a, b) => {
const elementA = a.getElement();
const elementB = b.getElement();
if (!elementA || !elementB) return 0;
const position = elementA.compareDocumentPosition(elementB);
if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1;
if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1;
return 0;
};
const PreviewGroup = memo(({ children, enable = true, preview }) => {
const entriesRef = useRef(/* @__PURE__ */ new Map());
const register = useCallback((entry) => {
entriesRef.current.set(entry.id, entry);
return () => {
entriesRef.current.delete(entry.id);
};
}, []);
const getEntries = useCallback(() => [...entriesRef.current.values()].sort(compareEntries), []);
const value = useMemo(() => ({
getEntries,
preview,
register
}), [
getEntries,
preview,
register
]);
if (!enable) return children;
return /* @__PURE__ */ jsx(PreviewGroupContext, {
value,
children
});
});
PreviewGroup.displayName = "PreviewGroup";
//#endregion
export { PreviewGroup as default, usePreviewGroupContext };
//# sourceMappingURL=PreviewGroup.mjs.map