{"version":3,"file":"index.cjs","sources":["../../src/svelte/hooks/use-fullscreen.svelte.ts","../../src/shared/utils/fullscreen-utils.ts","../../src/svelte/components/FullscreenProvider.svelte","../../src/svelte/index.ts"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/svelte';\nimport { FullscreenPlugin, FullscreenState, initialState } from '@embedpdf/plugin-fullscreen';\n\nexport const useFullscreenPlugin = () => usePlugin<FullscreenPlugin>(FullscreenPlugin.id);\nexport const useFullscreenCapability = () => useCapability<FullscreenPlugin>(FullscreenPlugin.id);\n\nexport const useFullscreen = () => {\n  const capability = useFullscreenCapability();\n\n  const state = $state({\n    get provides() {\n      return capability.provides;\n    },\n    state: initialState as FullscreenState,\n  });\n\n  $effect(() => {\n    if (!capability.provides) return;\n    return capability.provides.onStateChange((newState) => {\n      state.state = newState;\n    });\n  });\n\n  return state;\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","<script lang=\"ts\">\n  import type { Snippet } from 'svelte';\n  import type { HTMLAttributes } from 'svelte/elements';\n  import { useFullscreenPlugin, useFullscreenCapability } from '../hooks';\n  import { handleFullscreenRequest } from '../../shared/utils/fullscreen-utils';\n\n  type FullscreenProviderProps = Omit<HTMLAttributes<HTMLDivElement>, 'style'> & {\n    children: Snippet;\n    class?: string;\n    style?: string;\n  };\n\n  let {\n    children,\n    class: propsClass,\n    style: propsStyle,\n    ...restProps\n  }: FullscreenProviderProps = $props();\n\n  const fullscreenCapabilityState = useFullscreenCapability();\n  const fullscreenPluginState = useFullscreenPlugin();\n\n  let containerRef = $state<HTMLDivElement | null>(null);\n\n  // Handle fullscreen requests\n  $effect(() => {\n    const capability = fullscreenCapabilityState.provides;\n    const plugin = fullscreenPluginState.plugin;\n\n    if (!capability || !plugin) return;\n\n    const unsub = capability.onRequest(async (event) => {\n      const targetSelector = plugin.getTargetSelector();\n      await handleFullscreenRequest(event, containerRef, targetSelector);\n    });\n\n    return unsub;\n  });\n\n  // Listen for fullscreen changes\n  $effect(() => {\n    const plugin = fullscreenPluginState.plugin;\n\n    if (!plugin) return;\n\n    const handler = () => {\n      plugin.setFullscreenState(!!document.fullscreenElement);\n    };\n\n    document.addEventListener('fullscreenchange', handler);\n    return () => document.removeEventListener('fullscreenchange', handler);\n  });\n</script>\n\n<div\n  {...restProps}\n  bind:this={containerRef}\n  style:position=\"relative\"\n  style:width=\"100%\"\n  style:height=\"100%\"\n  style={propsStyle}\n  class={propsClass}\n>\n  {@render children()}\n</div>\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","restProps","$","rest_props","$$props","fullscreenCapabilityState","fullscreenPluginState","containerRef","state","user_effect","capability","provides","plugin","onRequest","getTargetSelector","get","handler","setFullscreenState","addEventListener","removeEventListener","div","root","$$value","set","FullscreenPluginPackage","createPluginPackage","BaseFullscreenPackage","addWrapper","FullscreenProvider","build","initialState","onStateChange","newState"],"mappings":"4iBAGaA,EAAA,IAA4BC,YAA4BC,EAAAA,iBAAiBC,IACzEC,EAAA,IAAgCC,gBAAgCH,EAAAA,iBAAiBC,ICwC9FG,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,sEC5COC,EAAQC,EAAAC,WAAAC,EAAA,8DAGP,MAAAC,EAA4BrB,IAC5BsB,EAAwB1B,QAE1B2B,EAAeL,EAAAM,MAA8B,MAGjDN,EAAAO,YAAO,WACCC,EAAaL,EAA0BM,SACvCC,EAASN,EAAsBM,OAEhC,IAAAF,IAAeE,EAAM,cAEZF,EAAWG,UAAS3B,MAAQE,UAClCE,EAAiBsB,EAAOE,0BACxB3B,EAAwBC,EAAKc,EAAAa,IAAER,GAAcjB,OAOvDY,EAAAO,YAAO,WACCG,EAASN,EAAsBM,WAEhCA,EAAM,OAEL,MAAAI,EAAO,KACXJ,EAAOK,qBAAqBpB,SAASC,oBAI1B,OADbD,SAASqB,iBAAiB,mBAAoBF,GACjC,IAAAnB,SAASsB,oBAAoB,mBAAoBH,SAIjEI,EAAEC,uBAAFD,EAAE,KAAA,IACGnB,0GADLmB,uCAAAA,eAAAA,EAAEE,GAAApB,EAAAqB,IAEUhB,EAAYe,GAAA,IAAApB,EAAAa,IAAZR,eAFZa,UAFO,CC3CD,MAAMI,EAA0BC,EAAAA,oBAAoBC,EAAAA,yBACxDC,WAAWC,GACXC,kGHJK,MAAAnB,EAAa1B,IAEbwB,WACA,YAAAG,GACK,OAAAD,EAAWC,QACpB,EACAH,MAAOsB,EAAAA,sBAGT5B,EAAAO,iBACO,GAAAC,EAAWC,SACT,OAAAD,EAAWC,SAASoB,cAAeC,IACxCxB,EAAMA,MAAQwB,MAIXxB"}