@lobehub/ui
Version:
Lobe UI is an open-source UI component library for building AIGC web apps
1 lines • 2.85 kB
Source Map (JSON)
{"version":3,"file":"PreviewGroup.mjs","names":[],"sources":["../../src/Image/PreviewGroup.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, memo, use, useCallback, useMemo, useRef } from 'react';\n\nimport type { ImagePreviewOptions, PreviewGroupProps } from './type';\nimport type { ResolvedPreviewOptions } from './viewer/registry';\n\nexport interface PreviewGroupEntry {\n getElement: () => HTMLImageElement | null;\n id: string;\n options?: ResolvedPreviewOptions;\n previewSrc?: string;\n src: string;\n}\n\ninterface PreviewGroupContextValue {\n getEntries: () => PreviewGroupEntry[];\n preview?: boolean | ImagePreviewOptions;\n register: (entry: PreviewGroupEntry) => () => void;\n}\n\nconst PreviewGroupContext = createContext<PreviewGroupContextValue | null>(null);\n\nexport const usePreviewGroupContext = () => use(PreviewGroupContext);\n\nconst compareEntries = (a: PreviewGroupEntry, b: PreviewGroupEntry) => {\n const elementA = a.getElement();\n const elementB = b.getElement();\n if (!elementA || !elementB) return 0;\n const position = elementA.compareDocumentPosition(elementB);\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) return -1;\n if (position & Node.DOCUMENT_POSITION_PRECEDING) return 1;\n return 0;\n};\n\nconst PreviewGroup = memo<PreviewGroupProps>(({ children, enable = true, preview }) => {\n const entriesRef = useRef(new Map<string, PreviewGroupEntry>());\n\n const register = useCallback((entry: PreviewGroupEntry) => {\n entriesRef.current.set(entry.id, entry);\n return () => {\n entriesRef.current.delete(entry.id);\n };\n }, []);\n\n const getEntries = useCallback(() => [...entriesRef.current.values()].sort(compareEntries), []);\n\n const value = useMemo<PreviewGroupContextValue>(\n () => ({ getEntries, preview, register }),\n [getEntries, preview, register],\n );\n\n if (!enable) return children;\n\n return <PreviewGroupContext value={value}>{children}</PreviewGroupContext>;\n});\n\nPreviewGroup.displayName = 'PreviewGroup';\n\nexport default PreviewGroup;\n"],"mappings":";;;;AAqBA,MAAM,sBAAsB,cAA+C,IAAI;AAE/E,MAAa,+BAA+B,IAAI,mBAAmB;AAEnE,MAAM,kBAAkB,GAAsB,MAAyB;CACrE,MAAM,WAAW,EAAE,WAAW;CAC9B,MAAM,WAAW,EAAE,WAAW;CAC9B,IAAI,CAAC,YAAY,CAAC,UAAU,OAAO;CACnC,MAAM,WAAW,SAAS,wBAAwB,QAAQ;CAC1D,IAAI,WAAW,KAAK,6BAA6B,OAAO;CACxD,IAAI,WAAW,KAAK,6BAA6B,OAAO;CACxD,OAAO;AACT;AAEA,MAAM,eAAe,MAAyB,EAAE,UAAU,SAAS,MAAM,cAAc;CACrF,MAAM,aAAa,uBAAO,IAAI,IAA+B,CAAC;CAE9D,MAAM,WAAW,aAAa,UAA6B;EACzD,WAAW,QAAQ,IAAI,MAAM,IAAI,KAAK;EACtC,aAAa;GACX,WAAW,QAAQ,OAAO,MAAM,EAAE;EACpC;CACF,GAAG,CAAC,CAAC;CAEL,MAAM,aAAa,kBAAkB,CAAC,GAAG,WAAW,QAAQ,OAAO,CAAC,CAAC,CAAC,KAAK,cAAc,GAAG,CAAC,CAAC;CAE9F,MAAM,QAAQ,eACL;EAAE;EAAY;EAAS;CAAS,IACvC;EAAC;EAAY;EAAS;CAAQ,CAChC;CAEA,IAAI,CAAC,QAAQ,OAAO;CAEpB,OAAO,oBAAC,qBAAD;EAA4B;EAAQ;CAA8B,CAAA;AAC3E,CAAC;AAED,aAAa,cAAc"}