{"version":3,"file":"index.cjs","sources":["../../src/shared/hooks/use-pdfium-engine.ts","../../src/shared/context/pdf-engine-context.ts","../../src/shared/hooks/use-engine-context.ts","../../src/shared/components/pdf-engine-provider.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from '@framework';\r\nimport { ignore, Logger, PdfEngine } from '@elhalawany/models';\r\n\r\nconst defaultWasmUrl = `https://cdn.jsdelivr.net/npm/@elhalawany/pdfium@__PDFIUM_VERSION__/dist/pdfium.wasm`;\r\n\r\ninterface UsePdfiumEngineProps {\r\n  wasmUrl?: string;\r\n  worker?: boolean;\r\n  logger?: Logger;\r\n}\r\n\r\nexport function usePdfiumEngine(config?: UsePdfiumEngineProps) {\r\n  const { wasmUrl = defaultWasmUrl, worker = true, logger } = config ?? {};\r\n\r\n  const [engine, setEngine] = useState<PdfEngine | null>(null);\r\n  const [loading, setLoading] = useState(true);\r\n  const [error, setError] = useState<Error | null>(null);\r\n  const engineRef = useRef<PdfEngine | null>(null);\r\n\r\n  useEffect(() => {\r\n    let cancelled = false;\r\n\r\n    (async () => {\r\n      try {\r\n        const { createPdfiumEngine } = worker\r\n          ? await import('@elhalawany/engines/pdfium-worker-engine')\r\n          : await import('@elhalawany/engines/pdfium-direct-engine');\r\n\r\n        const pdfEngine = await createPdfiumEngine(wasmUrl, logger);\r\n        engineRef.current = pdfEngine;\r\n        pdfEngine.initialize().wait(\r\n          () => {\r\n            setEngine(pdfEngine);\r\n            setLoading(false);\r\n          },\r\n          (e) => {\r\n            setError(new Error(e.reason.message));\r\n            setLoading(false);\r\n          },\r\n        );\r\n      } catch (e) {\r\n        if (!cancelled) {\r\n          setError(e as Error);\r\n          setLoading(false);\r\n        }\r\n      }\r\n    })();\r\n\r\n    return () => {\r\n      cancelled = true;\r\n      engineRef.current?.closeAllDocuments?.().wait(() => {\r\n        engineRef.current?.destroy?.();\r\n        engineRef.current = null;\r\n      }, ignore);\r\n    };\r\n  }, [wasmUrl, worker, logger]);\r\n\r\n  return { engine, isLoading: loading, error };\r\n}\r\n","import { createContext } from '@framework';\r\nimport type { PdfEngine } from '@elhalawany/models';\r\n\r\nexport interface PdfEngineContextState {\r\n  engine: PdfEngine | null;\r\n  isLoading: boolean;\r\n  error: Error | null;\r\n}\r\n\r\nexport const PdfEngineContext = createContext<PdfEngineContextState | undefined>(undefined);\r\n","import { useContext } from '@framework';\r\nimport { PdfEngineContext, PdfEngineContextState } from '../context';\r\n\r\n/**\r\n * Hook to access the PDF engine from context.\r\n * @returns The PDF engine context state\r\n * @throws Error if used outside of PdfEngineProvider\r\n */\r\nexport function useEngineContext(): PdfEngineContextState {\r\n  const contextValue = useContext(PdfEngineContext);\r\n\r\n  if (contextValue === undefined) {\r\n    throw new Error('useEngineContext must be used within a PdfEngineProvider');\r\n  }\r\n\r\n  return contextValue;\r\n}\r\n\r\n/**\r\n * Hook to access the PDF engine, with a more convenient API.\r\n * @returns The PDF engine or null if loading/error\r\n */\r\nexport function useEngine() {\r\n  const { engine, error } = useEngineContext();\r\n\r\n  if (error) {\r\n    throw error;\r\n  }\r\n\r\n  return engine;\r\n}\r\n","import { ReactNode } from '@framework';\r\nimport { PdfEngineContext } from '../context';\r\nimport type { PdfEngine } from '@elhalawany/models';\r\n\r\nexport interface PdfEngineProviderProps {\r\n  children: ReactNode;\r\n  engine: PdfEngine | null;\r\n  isLoading: boolean;\r\n  error: Error | null;\r\n}\r\n\r\n/**\r\n * Provider component that makes a PDF engine instance available\r\n * to all child components via context.\r\n *\r\n * This provider is completely engine-agnostic - it accepts any engine\r\n * and its loading state from the parent component.\r\n */\r\nexport function PdfEngineProvider({ children, engine, isLoading, error }: PdfEngineProviderProps) {\r\n  const contextValue = {\r\n    engine,\r\n    isLoading,\r\n    error,\r\n  };\r\n\r\n  return <PdfEngineContext.Provider value={contextValue}>{children}</PdfEngineContext.Provider>;\r\n}\r\n"],"names":["defaultWasmUrl","PdfEngineContext","createContext","useEngineContext","contextValue","useContext","Error","children","engine","isLoading","error","Provider","value","config","wasmUrl","worker","logger","setEngine","useState","loading","setLoading","setError","engineRef","useRef","useEffect","cancelled","createPdfiumEngine","import","pdfEngine","current","initialize","wait","e","reason","message","_b","_a","closeAllDocuments","call","destroy","ignore"],"mappings":"6TAGMA,EAAiB,yECMV,MAAAC,EAAmBC,qBAAiD,GCD1E,SAASC,IACR,MAAAC,EAAeC,aAAWJ,GAEhC,QAAqB,IAAjBG,EACI,MAAA,IAAIE,MAAM,4DAGX,OAAAF,CACT,2BCEO,UAA2BG,SAAEA,EAAAC,OAAUA,EAAQC,UAAAA,EAAAC,MAAWA,IAC/D,MAAMN,EAAe,CACnBI,SACAC,YACAC,sBAGMT,EAAiBU,SAAjB,CAA0BC,MAAOR,EAAeG,YAC1D,oBDJO,WACL,MAAMC,OAAEA,EAAAE,MAAQA,GAAUP,IAE1B,GAAIO,EACI,MAAAA,EAGD,OAAAF,CACT,qDFnBO,SAAyBK,GACxB,MAAAC,QAAEA,EAAUd,EAAgBe,OAAAA,GAAS,SAAMC,GAAWH,GAAU,CAAC,GAEhEL,EAAQS,GAAaC,EAAAA,SAA2B,OAChDC,EAASC,GAAcF,EAAAA,UAAS,IAChCR,EAAOW,GAAYH,EAAAA,SAAuB,MAC3CI,EAAYC,SAAyB,MAwC3C,OAtCAC,EAAAA,WAAU,KACR,IAAIC,GAAY,EA4BhB,MA1BA,WACM,IACI,MAAAC,mBAAEA,GAAuBX,QACrBY,OAAO,kDACPA,OAAO,4CAEXC,QAAkBF,EAAmBZ,EAASE,GACpDM,EAAUO,QAAUD,EACpBA,EAAUE,aAAaC,MACrB,KACEd,EAAUW,GACVR,GAAW,EAAK,IAEjBY,IACCX,EAAS,IAAIf,MAAM0B,EAAEC,OAAOC,UAC5Bd,GAAW,EAAK,UAGbY,GACFP,IACHJ,EAASW,GACTZ,GAAW,GACb,CAED,EAxBH,GA0BO,aACOK,GAAA,EACZ,OAAAU,EAAA,OAAAC,EAAAd,EAAUO,cAAV,EAAAO,EAAmBC,oBAAnBF,EAAAG,KAAAF,GAAyCL,MAAK,aAC5C,OAAAI,EAAA,OAAAC,EAAAd,EAAUO,gBAAVO,EAAmBG,UAAnBJ,EAAAG,KAAAF,GACAd,EAAUO,QAAU,IAAA,GACnBW,UACL,GACC,CAAC1B,EAASC,EAAQC,IAEd,CAAER,SAAQC,UAAWU,EAAST,QACvC"}