{"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"}