{"version":3,"file":"index.cjs","sources":["../../src/vue/hooks/use-fullscreen.ts","../../src/shared/utils/fullscreen-utils.ts","../../src/vue/components/fullscreen.vue","../../src/vue/index.ts"],"sourcesContent":["import { ref, watchEffect } from 'vue';\nimport { useCapability, usePlugin } from '@embedpdf/core/vue';\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 { provides: fullscreenProviderRef } = useFullscreenCapability();\n  const state = ref<FullscreenState>(initialState);\n\n  watchEffect((onCleanup) => {\n    const fullscreenProvider = fullscreenProviderRef.value;\n\n    if (fullscreenProvider) {\n      const unsubscribe = fullscreenProvider.onStateChange((newState) => {\n        state.value = newState;\n      });\n\n      onCleanup(() => {\n        unsubscribe();\n      });\n    }\n  });\n\n  return {\n    provides: fullscreenProviderRef,\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","<script setup lang=\"ts\">\nimport { ref, onMounted, onUnmounted } from 'vue';\nimport { useFullscreenPlugin, useFullscreenCapability } from '../hooks';\nimport { handleFullscreenRequest } from '../../shared/utils/fullscreen-utils';\n\nconst { provides: fullscreenCapabilityRef } = useFullscreenCapability();\nconst { plugin: fullscreenPluginRef } = useFullscreenPlugin();\nconst containerRef = ref<HTMLDivElement | null>(null);\n\nlet unsubscribe: (() => void) | null = null;\nlet fullscreenChangeUnsubscribe: (() => void) | null = null;\n\nonMounted(() => {\n  const fullscreenCapability = fullscreenCapabilityRef.value;\n  const fullscreenPlugin = fullscreenPluginRef.value;\n\n  if (fullscreenCapability && fullscreenPlugin) {\n    unsubscribe = fullscreenCapability.onRequest(async (event) => {\n      const targetSelector = fullscreenPlugin.getTargetSelector();\n      await handleFullscreenRequest(event, containerRef.value, targetSelector);\n    });\n  }\n\n  // Handle fullscreen state changes\n  const plugin = fullscreenPluginRef.value;\n  if (plugin) {\n    const handler = () => {\n      plugin.setFullscreenState(!!document.fullscreenElement);\n    };\n    document.addEventListener('fullscreenchange', handler);\n\n    fullscreenChangeUnsubscribe = () => {\n      document.removeEventListener('fullscreenchange', handler);\n    };\n  }\n});\n\nonUnmounted(() => {\n  if (unsubscribe) {\n    unsubscribe();\n  }\n  if (fullscreenChangeUnsubscribe) {\n    fullscreenChangeUnsubscribe();\n  }\n});\n</script>\n\n<template>\n  <div\n    ref=\"containerRef\"\n    :style=\"{\n      position: 'relative',\n      width: '100%',\n      height: '100%',\n    }\"\n  >\n    <slot />\n  </div>\n</template>\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","provides","fullscreenCapabilityRef","plugin","fullscreenPluginRef","containerRef","ref","unsubscribe","fullscreenChangeUnsubscribe","onMounted","fullscreenCapability","value","fullscreenPlugin","onRequest","getTargetSelector","handler","setFullscreenState","addEventListener","removeEventListener","onUnmounted","_createElementBlock","style","_renderSlot","_ctx","$slots","FullscreenPluginPackage","createPluginPackage","BaseFullscreenPackage","addWrapper","FullscreenProvider","build","fullscreenProviderRef","state","initialState","watchEffect","onCleanup","fullscreenProvider","onStateChange","newState"],"mappings":"4MAIaA,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,yDCvDA,MAAQC,SAAUC,GAA4BlB,KACtCmB,OAAQC,GAAwBxB,IAClCyB,EAAeC,EAAAA,IAA2B,MAEhD,IAAIC,EAAmC,KACnCC,EAAmD,YAEvDC,EAAAA,UAAU,KACR,MAAMC,EAAuBR,EAAwBS,MAC/CC,EAAmBR,EAAoBO,MAEzCD,GAAwBE,IAC1BL,EAAcG,EAAqBG,UAAU3B,MAAOE,IAClD,MAAME,EAAiBsB,EAAiBE,0BAClC3B,EAAwBC,EAAOiB,EAAaM,MAAOrB,MAK7D,MAAMa,EAASC,EAAoBO,MACnC,GAAIR,EAAQ,CACV,MAAMY,EAAU,KACdZ,EAAOa,qBAAqBnB,SAASC,oBAEvCD,SAASoB,iBAAiB,mBAAoBF,GAE9CP,EAA8B,KAC5BX,SAASqB,oBAAoB,mBAAoBH,GAErD,IAGFI,EAAAA,YAAY,KACNZ,GACFA,IAEEC,GACFA,4BAMFY,EAAAA,mBASM,MAAA,SARA,eAAJd,IAAID,EACHgB,MAAO,mDAMRC,aAAQC,EAAAC,OAAA,qBC/CCC,EAA0BC,EAAAA,oBAAoBC,EAAAA,yBACxDC,WAAWC,GACXC,6FHJ0B,KAC3B,MAAQ7B,SAAU8B,GAA0B/C,IACtCgD,EAAQ1B,EAAAA,IAAqB2B,gBAgBnC,OAdAC,EAAAA,YAAaC,IACX,MAAMC,EAAqBL,EAAsBpB,MAEjD,GAAIyB,EAAoB,CACtB,MAAM7B,EAAc6B,EAAmBC,cAAeC,IACpDN,EAAMrB,MAAQ2B,IAGhBH,EAAU,KACR5B,KAEJ,IAGK,CACLN,SAAU8B,EACVC"}