{"version":3,"file":"index.cjs","sources":["../../src/svelte/hooks/use-pan.svelte.ts","../../src/svelte/components/PanMode.svelte","../../src/svelte/index.ts"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/svelte';\nimport { PanPlugin, initialDocumentState, PanScope } from '@embedpdf/plugin-pan';\n\nexport const usePanPlugin = () => usePlugin<PanPlugin>(PanPlugin.id);\nexport const usePanCapability = () => useCapability<PanPlugin>(PanPlugin.id);\n\n// Define the return type explicitly to maintain type safety\ninterface UsePanReturn {\n  provides: PanScope | null;\n  isPanning: boolean;\n}\n\n/**\n * Hook for pan state for a specific document\n * @param getDocumentId Function that returns the document ID\n */\nexport const usePan = (getDocumentId: () => string | null): UsePanReturn => {\n  const capability = usePanCapability();\n\n  let isPanning = $state(initialDocumentState.isPanMode);\n\n  // Reactive documentId\n  const documentId = $derived(getDocumentId());\n\n  // Scoped capability for current docId\n  const scopedProvides = $derived(\n    capability.provides && documentId ? capability.provides.forDocument(documentId) : null,\n  );\n\n  $effect(() => {\n    const provides = capability.provides;\n    const docId = documentId;\n\n    if (!provides || !docId) {\n      isPanning = initialDocumentState.isPanMode;\n      return;\n    }\n\n    const scope = provides.forDocument(docId);\n\n    // Set initial state\n    isPanning = scope.isPanMode();\n\n    // Subscribe to pan mode changes for this document\n    return scope.onPanModeChange((isPan) => {\n      isPanning = isPan;\n    });\n  });\n\n  return {\n    get provides() {\n      return scopedProvides;\n    },\n    get isPanning() {\n      return isPanning;\n    },\n  };\n};\n","<script lang=\"ts\">\n  import { usePanCapability, usePanPlugin } from '../hooks';\n\n  const { provides: pan } = usePanCapability();\n  const { plugin: panPlugin } = usePanPlugin();\n\n  $effect(() => {\n    if (!pan || !panPlugin) return;\n\n    const mode = panPlugin.config?.defaultMode ?? 'never';\n    const SUPPORT_TOUCH =\n      typeof window !== 'undefined' && ('ontouchstart' in window || navigator.maxTouchPoints > 0);\n\n    if (mode === 'mobile' && SUPPORT_TOUCH) {\n      pan.makePanDefault();\n    }\n  });\n</script>\n\n<!-- This component is only used to make the pan mode default when the plugin is initialized. -->\n","import { createPluginPackage } from '@embedpdf/core';\nimport { PanPluginPackage as BasePanPackage } from '@embedpdf/plugin-pan';\n\nimport { PanMode } from './components';\n\nexport * from './hooks';\nexport * from './components';\nexport * from '@embedpdf/plugin-pan';\n\nexport const PanPluginPackage = createPluginPackage(BasePanPackage).addUtility(PanMode).build();\n"],"names":["usePanPlugin","usePlugin","PanPlugin","id","usePanCapability","useCapability","provides","pan","plugin","panPlugin","$","user_effect","mode","_a","config","defaultMode","SUPPORT_TOUCH","window","navigator","maxTouchPoints","makePanDefault","PanPluginPackage","createPluginPackage","BasePanPackage","addUtility","PanMode","build","getDocumentId","capability","isPanning","state","proxy","initialDocumentState","isPanMode","documentId","scopedProvides","derived","forDocument","docId","scope","onPanModeChange","isPan","set"],"mappings":"qiBAGaA,EAAA,IAAqBC,YAAqBC,EAAAA,UAAUC,IACpDC,EAAA,IAAyBC,gBAAyBH,EAAAA,UAAUC,uCCD/DG,SAAUC,GAAQH,KAClBI,OAAQC,GAAcT,IAE9BU,EAAAC,YAAO,WACA,IAAAJ,IAAQE,EAAS,OAEhB,MAAAG,GAAO,OAAAC,EAAAJ,EAAUK,aAAV,EAAAD,EAAkBE,cAAe,QACxCC,EACc,oBAAXC,SAA2B,iBAAkBA,QAAUC,UAAUC,eAAiB,GAE9E,WAATP,GAAqBI,GACvBT,EAAIa,0BAGF,CCRD,MAAMC,EAAmBC,EAAAA,oBAAoBC,EAAAA,kBAAgBC,WAAWC,GAASC,oEFOjEC,IACf,MAAAC,EAAaxB,IAEf,IAAAyB,EAAYnB,EAAAoB,MAAApB,EAAAqB,MAAOC,EAAAA,qBAAqBC,YAGtC,MAAAC,YAAsBP,GAGtBQ,EAAAzB,EAAA0B,QAAA,IACJR,EAAWtB,gBAAY4B,GAAaN,EAAWtB,SAAS+B,kBAAYH,IAAc,aAGpFxB,EAAAC,uBACQL,EAAWsB,EAAWtB,SACtBgC,QAAQJ,OAET5B,IAAagC,oBAChBT,EAAYG,EAAAA,qBAAqBC,WAAA,GAI7B,MAAAM,EAAQjC,EAAS+B,YAAYC,GAM5B,aAHPT,EAAYU,EAAMN,aAAA,GAGXM,EAAMC,gBAAiBC,IAC5B/B,EAAAgC,IAAAb,EAAYY,GAAA,QAKV,YAAAnC,gBACK6B,EACT,EACI,aAAAN,gBACKA,EACT"}