{"version":3,"file":"index.cjs","sources":["../../src/shared/hooks/use-tiling.ts","../../src/shared/components/tile-img.tsx","../../src/shared/components/tiling-layer.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport { TilingPlugin } from '@embedpdf/plugin-tiling';\n\nexport const useTilingPlugin = () => usePlugin<TilingPlugin>(TilingPlugin.id);\nexport const useTilingCapability = () => useCapability<TilingPlugin>(TilingPlugin.id);\n","import { ignore, PdfErrorCode } from '@embedpdf/models';\nimport { Tile } from '@embedpdf/plugin-tiling';\nimport { useEffect, useMemo, useRef, useState } from '@framework';\n\nimport { useTilingCapability } from '../hooks/use-tiling';\n\ninterface TileImgProps {\n  documentId: string;\n  pageIndex: number;\n  tile: Tile;\n  dpr: number;\n  scale: number;\n}\n\nexport function TileImg({ documentId, pageIndex, tile, dpr, scale }: TileImgProps) {\n  const { provides: tilingCapability } = useTilingCapability();\n  const scope = useMemo(\n    () => tilingCapability?.forDocument(documentId),\n    [tilingCapability, documentId],\n  );\n\n  const [url, setUrl] = useState<string>();\n  const urlRef = useRef<string | null>(null);\n\n  const relativeScale = scale / tile.srcScale;\n\n  /* kick off render exactly once per tile */\n  useEffect(() => {\n    if (tile.status === 'ready' && urlRef.current) return; // already done\n    if (!scope) return;\n    const task = scope.renderTile({ pageIndex, tile, dpr });\n    task.wait((blob) => {\n      const objectUrl = URL.createObjectURL(blob);\n      urlRef.current = objectUrl;\n      setUrl(objectUrl);\n    }, ignore);\n\n    return () => {\n      if (urlRef.current) {\n        URL.revokeObjectURL(urlRef.current);\n        urlRef.current = null;\n      } else {\n        task.abort({\n          code: PdfErrorCode.Cancelled,\n          message: 'canceled render task',\n        });\n      }\n    };\n  }, [scope, pageIndex, tile.id]); // id includes scale, so unique\n\n  const handleImageLoad = () => {\n    if (urlRef.current) {\n      URL.revokeObjectURL(urlRef.current);\n      urlRef.current = null;\n    }\n  };\n\n  if (!url) return null; // could render a placeholder\n  return (\n    <img\n      src={url}\n      onLoad={handleImageLoad}\n      style={{\n        position: 'absolute',\n        left: tile.screenRect.origin.x * relativeScale,\n        top: tile.screenRect.origin.y * relativeScale,\n        width: tile.screenRect.size.width * relativeScale,\n        height: tile.screenRect.size.height * relativeScale,\n        display: 'block',\n      }}\n    />\n  );\n}\n","import { Tile } from '@embedpdf/plugin-tiling';\nimport { useEffect, useState, HTMLAttributes, CSSProperties, useMemo } from '@framework';\n\nimport { TileImg } from './tile-img';\nimport { useTilingCapability } from '../hooks/use-tiling';\nimport { useDocumentState } from '@embedpdf/core/@framework';\n\ntype TilingLayoutProps = Omit<HTMLAttributes<HTMLDivElement>, 'style'> & {\n  documentId: string;\n  pageIndex: number;\n  scale?: number;\n  style?: CSSProperties;\n};\n\nexport function TilingLayer({\n  documentId,\n  pageIndex,\n  scale: scaleOverride,\n  style,\n  ...props\n}: TilingLayoutProps) {\n  const { provides: tilingProvides } = useTilingCapability();\n  const documentState = useDocumentState(documentId);\n  const [tiles, setTiles] = useState<Tile[]>([]);\n\n  useEffect(() => {\n    if (tilingProvides) {\n      return tilingProvides.onTileRendering((event) => {\n        if (event.documentId === documentId) {\n          setTiles(event.tiles[pageIndex] ?? []);\n        }\n      });\n    }\n  }, [tilingProvides, documentId, pageIndex]);\n\n  const actualScale = useMemo(() => {\n    if (scaleOverride !== undefined) return scaleOverride;\n    return documentState?.scale ?? 1;\n  }, [scaleOverride, documentState?.scale]);\n\n  return (\n    <div\n      style={{\n        ...style,\n      }}\n      {...props}\n    >\n      {tiles?.map((tile) => (\n        <TileImg\n          key={tile.id}\n          documentId={documentId}\n          pageIndex={pageIndex}\n          tile={tile}\n          dpr={window.devicePixelRatio}\n          scale={actualScale}\n        />\n      ))}\n    </div>\n  );\n}\n"],"names":["useTilingCapability","useCapability","TilingPlugin","id","TileImg","documentId","pageIndex","tile","dpr","scale","provides","tilingCapability","scope","useMemo","forDocument","url","setUrl","useState","urlRef","useRef","relativeScale","srcScale","useEffect","status","current","task","renderTile","wait","blob","objectUrl","URL","createObjectURL","ignore","revokeObjectURL","abort","code","PdfErrorCode","Cancelled","message","jsx","src","onLoad","style","position","left","screenRect","origin","x","top","y","width","size","height","display","scaleOverride","props","tilingProvides","documentState","useDocumentState","tiles","setTiles","onTileRendering","event","actualScale","children","map","window","devicePixelRatio","usePlugin"],"mappings":"6OAIaA,EAAsB,IAAMC,gBAA4BC,EAAAA,aAAaC,ICU3E,SAASC,GAAQC,WAAEA,EAAAC,UAAYA,OAAWC,EAAAC,IAAMA,EAAAC,MAAKA,IAC1D,MAAQC,SAAUC,GAAqBX,IACjCY,EAAQC,EAAAA,QACZ,UAAMF,WAAkBG,YAAYT,GACpC,CAACM,EAAkBN,KAGdU,EAAKC,GAAUC,aAChBC,EAASC,EAAAA,OAAsB,MAE/BC,EAAgBX,EAAQF,EAAKc,SAGnCC,EAAAA,UAAU,KACR,GAAoB,UAAhBf,EAAKgB,QAAsBL,EAAOM,QAAS,OAC/C,IAAKZ,EAAO,OACZ,MAAMa,EAAOb,EAAMc,WAAW,CAAEpB,YAAWC,OAAMC,QAOjD,OANAiB,EAAKE,KAAMC,IACT,MAAMC,EAAYC,IAAIC,gBAAgBH,GACtCV,EAAOM,QAAUK,EACjBb,EAAOa,IACNG,EAAAA,QAEI,KACDd,EAAOM,SACTM,IAAIG,gBAAgBf,EAAOM,SAC3BN,EAAOM,QAAU,MAEjBC,EAAKS,MAAM,CACTC,KAAMC,EAAAA,aAAaC,UACnBC,QAAS,2BAId,CAAC1B,EAAON,EAAWC,EAAKJ,KAS3B,OAAKY,EAEHwB,EAAAA,IAAC,MAAA,CACCC,IAAKzB,EACL0B,OAXoB,KAClBvB,EAAOM,UACTM,IAAIG,gBAAgBf,EAAOM,SAC3BN,EAAOM,QAAU,OASjBkB,MAAO,CACLC,SAAU,WACVC,KAAMrC,EAAKsC,WAAWC,OAAOC,EAAI3B,EACjC4B,IAAKzC,EAAKsC,WAAWC,OAAOG,EAAI7B,EAChC8B,MAAO3C,EAAKsC,WAAWM,KAAKD,MAAQ9B,EACpCgC,OAAQ7C,EAAKsC,WAAWM,KAAKC,OAAShC,EACtCiC,QAAS,WAXE,IAenB,qBC1DO,UAAqBhD,WAC1BA,EAAAC,UACAA,EACAG,MAAO6C,EAAAZ,MACPA,KACGa,IAEH,MAAQ7C,SAAU8C,GAAmBxD,IAC/ByD,EAAgBC,EAAAA,iBAAiBrD,IAChCsD,EAAOC,GAAY3C,EAAAA,SAAiB,IAE3CK,EAAAA,UAAU,KACR,GAAIkC,EACF,OAAOA,EAAeK,gBAAiBC,IACjCA,EAAMzD,aAAeA,GACvBuD,EAASE,EAAMH,MAAMrD,IAAc,OAIxC,CAACkD,EAAgBnD,EAAYC,IAEhC,MAAMyD,EAAclD,EAAAA,QAAQ,aACtByC,EAAoCA,SACjCG,WAAehD,QAAS,EAC9B,CAAC6C,EAAe,MAAAG,OAAA,EAAAA,EAAehD,QAElC,OACE8B,EAAAA,IAAC,MAAA,CACCG,MAAO,IACFA,MAEDa,EAEHS,SAAA,MAAAL,OAAA,EAAAA,EAAOM,IAAK1D,GACXgC,EAAAA,IAACnC,EAAA,CAECC,aACAC,YACAC,OACAC,IAAK0D,OAAOC,iBACZ1D,MAAOsD,GALFxD,EAAKJ,MAUpB,wDFxD+B,IAAMiE,YAAwBlE,EAAAA,aAAaC"}