{"version":3,"file":"index.cjs","sources":["../../src/shared/hooks/use-fullscreen.ts","../../src/shared/utils/fullscreen-utils.ts","../../src/shared/components/fullscreen.tsx","../../src/shared/index.ts"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport { FullscreenPlugin, FullscreenState, initialState } from '@embedpdf/plugin-fullscreen';\nimport { useState, useEffect } from '@framework';\n\nexport const useFullscreenPlugin = () => usePlugin<FullscreenPlugin>(FullscreenPlugin.id);\nexport const useFullscreenCapability = () => useCapability<FullscreenPlugin>(FullscreenPlugin.id);\n\nexport const useFullscreen = () => {\n  const { provides } = useFullscreenCapability();\n  const [state, setState] = useState<FullscreenState>(initialState);\n\n  useEffect(() => {\n    return provides?.onStateChange((state) => {\n      setState(state);\n    });\n  }, [provides]);\n\n  return {\n    provides,\n    state,\n  };\n};\n","import { FullscreenRequestEvent } from '@embedpdf/plugin-fullscreen';\n\n/**\n * Find the element to fullscreen based on the event and container\n * @param event The fullscreen request event\n * @param containerElement The container element (fallback if no selector or element not found)\n * @param targetSelector Optional target selector from plugin config\n * @returns The element to fullscreen, or null if not found\n */\nexport function findFullscreenElement(\n  event: FullscreenRequestEvent,\n  containerElement: HTMLElement | null,\n  targetSelector?: string,\n): HTMLElement | null {\n  if (!containerElement || event.action !== 'enter') {\n    return containerElement;\n  }\n\n  let elementToFullscreen: HTMLElement | null = null;\n\n  if (targetSelector) {\n    // Try to find the element within the wrapper element\n    elementToFullscreen = containerElement.querySelector(targetSelector);\n    if (!elementToFullscreen) {\n      console.warn(\n        `Fullscreen: Could not find element with selector \"${targetSelector}\" within the wrapper. Falling back to wrapper element.`,\n      );\n    }\n  }\n\n  // Fall back to the wrapper element if no selector or element not found\n  if (!elementToFullscreen) {\n    elementToFullscreen = containerElement;\n  }\n\n  return elementToFullscreen;\n}\n\n/**\n * Handle a fullscreen request event\n * @param event The fullscreen request event\n * @param containerElement The container element\n * @param targetSelector Optional target selector from plugin config\n */\nexport async function handleFullscreenRequest(\n  event: FullscreenRequestEvent,\n  containerElement: HTMLElement | null,\n  targetSelector?: string,\n): Promise<void> {\n  if (event.action === 'enter') {\n    const elementToFullscreen = findFullscreenElement(event, containerElement, targetSelector);\n\n    if (elementToFullscreen && !document.fullscreenElement) {\n      await elementToFullscreen.requestFullscreen();\n    }\n  } else {\n    if (document.fullscreenElement) {\n      await document.exitFullscreen();\n    }\n  }\n}\n","import { useEffect, useRef, HTMLAttributes, CSSProperties, ReactNode } from '@framework';\n\nimport { useFullscreenPlugin, useFullscreenCapability } from '../hooks';\nimport { handleFullscreenRequest } from '../utils/fullscreen-utils';\n\ntype FullscreenProviderProps = Omit<HTMLAttributes<HTMLDivElement>, 'style'> & {\n  children: ReactNode;\n  style?: CSSProperties;\n};\n\nexport function FullscreenProvider({ children, ...props }: FullscreenProviderProps) {\n  const { provides: fullscreenCapability } = useFullscreenCapability();\n  const { plugin: fullscreenPlugin } = useFullscreenPlugin();\n  const { plugin } = useFullscreenPlugin();\n  const ref = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (!fullscreenCapability || !fullscreenPlugin) return;\n\n    const unsub = fullscreenCapability.onRequest(async (event) => {\n      const targetSelector = fullscreenPlugin.getTargetSelector();\n      await handleFullscreenRequest(event, ref.current, targetSelector);\n    });\n\n    return unsub;\n  }, [fullscreenCapability, fullscreenPlugin]);\n\n  useEffect(() => {\n    if (!plugin) return;\n    const handler = () => plugin.setFullscreenState(!!document.fullscreenElement);\n    document.addEventListener('fullscreenchange', handler);\n    return () => document.removeEventListener('fullscreenchange', handler);\n  }, [plugin]);\n\n  return (\n    <div\n      {...props}\n      style={{ position: 'relative', width: '100%', height: '100%', ...props.style }}\n      ref={ref}\n    >\n      {children}\n    </div>\n  );\n}\n","import { createPluginPackage } from '@embedpdf/core';\nimport { FullscreenPluginPackage as BaseFullscreenPackage } from '@embedpdf/plugin-fullscreen';\nimport { FullscreenProvider } from './components';\n\nexport * from './hooks';\nexport * from './components';\n\nexport * from '@embedpdf/plugin-fullscreen';\n\nexport const FullscreenPluginPackage = createPluginPackage(BaseFullscreenPackage)\n  .addWrapper(FullscreenProvider)\n  .build();\n"],"names":["useFullscreenPlugin","usePlugin","FullscreenPlugin","id","useFullscreenCapability","useCapability","async","handleFullscreenRequest","event","containerElement","targetSelector","action","elementToFullscreen","querySelector","console","warn","findFullscreenElement","document","fullscreenElement","requestFullscreen","exitFullscreen","FullscreenProvider","children","props","provides","fullscreenCapability","plugin","fullscreenPlugin","ref","useRef","useEffect","onRequest","getTargetSelector","current","handler","setFullscreenState","addEventListener","removeEventListener","jsx","style","position","width","height","FullscreenPluginPackage","createPluginPackage","BaseFullscreenPackage","addWrapper","build","state","setState","useState","initialState","onStateChange"],"mappings":"wPAIaA,EAAsB,IAAMC,YAA4BC,EAAAA,iBAAiBC,IACzEC,EAA0B,IAAMC,gBAAgCH,EAAAA,iBAAiBC,ICuC9FG,eAAsBC,EACpBC,EACAC,EACAC,GAEA,GAAqB,UAAjBF,EAAMG,OAAoB,CAC5B,MAAMC,EAzCH,SACLJ,EACAC,EACAC,GAEA,IAAKD,GAAqC,UAAjBD,EAAMG,OAC7B,OAAOF,EAGT,IAAIG,EAA0C,KAiB9C,OAfIF,IAEFE,EAAsBH,EAAiBI,cAAcH,GAChDE,GACHE,QAAQC,KACN,qDAAqDL,4DAMtDE,IACHA,EAAsBH,GAGjBG,CACT,CAcgCI,CAAsBR,EAAOC,EAAkBC,GAEvEE,IAAwBK,SAASC,yBAC7BN,EAAoBO,mBAE9B,MACMF,SAASC,yBACLD,SAASG,gBAGrB,CClDO,SAASC,GAAmBC,SAAEA,KAAaC,IAChD,MAAQC,SAAUC,GAAyBrB,KACnCsB,OAAQC,GAAqB3B,KAC/B0B,OAAEA,GAAW1B,IACb4B,EAAMC,EAAAA,OAAuB,MAoBnC,OAlBAC,EAAAA,UAAU,KACR,IAAKL,IAAyBE,EAAkB,OAOhD,OALcF,EAAqBM,UAAUzB,MAAOE,IAClD,MAAME,EAAiBiB,EAAiBK,0BAClCzB,EAAwBC,EAAOoB,EAAIK,QAASvB,MAInD,CAACe,EAAsBE,IAE1BG,EAAAA,UAAU,KACR,IAAKJ,EAAQ,OACb,MAAMQ,EAAU,IAAMR,EAAOS,qBAAqBlB,SAASC,mBAE3D,OADAD,SAASmB,iBAAiB,mBAAoBF,GACvC,IAAMjB,SAASoB,oBAAoB,mBAAoBH,IAC7D,CAACR,IAGFY,EAAAA,IAAC,MAAA,IACKf,EACJgB,MAAO,CAAEC,SAAU,WAAYC,MAAO,OAAQC,OAAQ,UAAWnB,EAAMgB,OACvEX,MAECN,YAGP,CClCO,MAAMqB,EAA0BC,EAAAA,oBAAoBC,EAAAA,yBACxDC,WAAWzB,GACX0B,6FHJ0B,KAC3B,MAAMvB,SAAEA,GAAapB,KACd4C,EAAOC,GAAYC,EAAAA,SAA0BC,EAAAA,cAQpD,OANArB,EAAAA,UAAU,IACD,MAAAN,OAAA,EAAAA,EAAU4B,cAAeJ,IAC9BC,EAASD,KAEV,CAACxB,IAEG,CACLA,WACAwB"}