UNPKG

@lobehub/ui

Version:

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

44 lines (43 loc) 1.39 kB
"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