@embedpdf/plugin-pan 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -46,7 +46,14 @@ var PanPlugin = class extends import_core.BasePlugin {
46
46
  buildCapability() {
47
47
  return {
48
48
  enablePan: () => this.interactionManager.activate("panMode"),
49
- disablePan: () => this.interactionManager.activate("default")
49
+ disablePan: () => this.interactionManager.activate("default"),
50
+ togglePan: () => {
51
+ if (this.interactionManager.getActiveMode() === "panMode") {
52
+ this.interactionManager.activate("default");
53
+ } else {
54
+ this.interactionManager.activate("panMode");
55
+ }
56
+ }
50
57
  };
51
58
  }
52
59
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/lib/pan-plugin.ts","../src/lib/manifest.ts","../src/lib/index.ts"],"sourcesContent":["export * from './lib';\n","import { BasePlugin, PluginRegistry } from '@embedpdf/core';\nimport {\n InteractionManagerCapability,\n InteractionManagerPlugin,\n} from '@embedpdf/plugin-interaction-manager';\n\nimport { PanCapability, PanPluginConfig } from './types';\n\nexport class PanPlugin extends BasePlugin<PanPluginConfig, PanCapability> {\n static readonly id = 'pan' as const;\n\n private interactionManager: InteractionManagerCapability;\n\n constructor(id: string, registry: PluginRegistry) {\n super(id, registry);\n\n this.interactionManager = registry\n .getPlugin<InteractionManagerPlugin>(InteractionManagerPlugin.id)\n ?.provides()!;\n\n this.interactionManager.registerMode({\n id: 'panMode',\n scope: 'global',\n exclusive: false,\n cursor: 'grab',\n });\n }\n\n async initialize(_: PanPluginConfig): Promise<void> {}\n\n protected buildCapability(): PanCapability {\n return {\n enablePan: () => this.interactionManager.activate('panMode'),\n disablePan: () => this.interactionManager.activate('default'),\n };\n }\n}\n","import { PluginManifest } from '@embedpdf/core';\nimport { PanPluginConfig } from './types';\n\nexport const PAN_PLUGIN_ID = 'pan';\n\nexport const manifest: PluginManifest<PanPluginConfig> = {\n id: PAN_PLUGIN_ID,\n name: 'Pan Plugin',\n version: '1.0.0',\n provides: ['pan'],\n requires: ['interaction-manager'],\n optional: [],\n defaultConfig: {\n enabled: true,\n },\n};\n","import { PluginPackage } from '@embedpdf/core';\n\nimport { PanPlugin } from './pan-plugin';\nimport { manifest, PAN_PLUGIN_ID } from './manifest';\nimport { PanPluginConfig } from './types';\n\nexport const PanPluginPackage: PluginPackage<PanPlugin, PanPluginConfig> = {\n manifest,\n create: (registry) => new PanPlugin(PAN_PLUGIN_ID, registry),\n reducer: () => {},\n initialState: {},\n};\n\nexport * from './pan-plugin';\nexport * from './types';\nexport * from './manifest';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,kBAA2C;AAC3C,wCAGO;AAIA,IAAM,YAAN,cAAwB,uBAA2C;AAAA,EAKxE,YAAY,IAAY,UAA0B;AAChD,UAAM,IAAI,QAAQ;AAElB,SAAK,qBAAqB,SACvB,UAAoC,2DAAyB,EAAE,GAC9D,SAAS;AAEb,SAAK,mBAAmB,aAAa;AAAA,MACnC,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,WAAW;AAAA,MACX,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,WAAW,GAAmC;AAAA,EAAC;AAAA,EAE3C,kBAAiC;AACzC,WAAO;AAAA,MACL,WAAW,MAAM,KAAK,mBAAmB,SAAS,SAAS;AAAA,MAC3D,YAAY,MAAM,KAAK,mBAAmB,SAAS,SAAS;AAAA,IAC9D;AAAA,EACF;AACF;AA5Ba,UACK,KAAK;;;ACNhB,IAAM,gBAAgB;AAEtB,IAAM,WAA4C;AAAA,EACvD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,SAAS;AAAA,EACT,UAAU,CAAC,KAAK;AAAA,EAChB,UAAU,CAAC,qBAAqB;AAAA,EAChC,UAAU,CAAC;AAAA,EACX,eAAe;AAAA,IACb,SAAS;AAAA,EACX;AACF;;;ACTO,IAAM,mBAA8D;AAAA,EACzE;AAAA,EACA,QAAQ,CAAC,aAAa,IAAI,UAAU,eAAe,QAAQ;AAAA,EAC3D,SAAS,MAAM;AAAA,EAAC;AAAA,EAChB,cAAc,CAAC;AACjB;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/lib/pan-plugin.ts","../src/lib/manifest.ts","../src/lib/index.ts"],"sourcesContent":["export * from './lib';\n","import { BasePlugin, PluginRegistry } from '@embedpdf/core';\nimport {\n InteractionManagerCapability,\n InteractionManagerPlugin,\n} from '@embedpdf/plugin-interaction-manager';\n\nimport { PanCapability, PanPluginConfig } from './types';\n\nexport class PanPlugin extends BasePlugin<PanPluginConfig, PanCapability> {\n static readonly id = 'pan' as const;\n\n private interactionManager: InteractionManagerCapability;\n\n constructor(id: string, registry: PluginRegistry) {\n super(id, registry);\n\n this.interactionManager = registry\n .getPlugin<InteractionManagerPlugin>(InteractionManagerPlugin.id)\n ?.provides()!;\n\n this.interactionManager.registerMode({\n id: 'panMode',\n scope: 'global',\n exclusive: false,\n cursor: 'grab',\n });\n }\n\n async initialize(_: PanPluginConfig): Promise<void> {}\n\n protected buildCapability(): PanCapability {\n return {\n enablePan: () => this.interactionManager.activate('panMode'),\n disablePan: () => this.interactionManager.activate('default'),\n togglePan: () => {\n if (this.interactionManager.getActiveMode() === 'panMode') {\n this.interactionManager.activate('default');\n } else {\n this.interactionManager.activate('panMode');\n }\n },\n };\n }\n}\n","import { PluginManifest } from '@embedpdf/core';\nimport { PanPluginConfig } from './types';\n\nexport const PAN_PLUGIN_ID = 'pan';\n\nexport const manifest: PluginManifest<PanPluginConfig> = {\n id: PAN_PLUGIN_ID,\n name: 'Pan Plugin',\n version: '1.0.0',\n provides: ['pan'],\n requires: ['interaction-manager'],\n optional: [],\n defaultConfig: {\n enabled: true,\n },\n};\n","import { PluginPackage } from '@embedpdf/core';\n\nimport { PanPlugin } from './pan-plugin';\nimport { manifest, PAN_PLUGIN_ID } from './manifest';\nimport { PanPluginConfig } from './types';\n\nexport const PanPluginPackage: PluginPackage<PanPlugin, PanPluginConfig> = {\n manifest,\n create: (registry) => new PanPlugin(PAN_PLUGIN_ID, registry),\n reducer: () => {},\n initialState: {},\n};\n\nexport * from './pan-plugin';\nexport * from './types';\nexport * from './manifest';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,kBAA2C;AAC3C,wCAGO;AAIA,IAAM,YAAN,cAAwB,uBAA2C;AAAA,EAKxE,YAAY,IAAY,UAA0B;AAChD,UAAM,IAAI,QAAQ;AAElB,SAAK,qBAAqB,SACvB,UAAoC,2DAAyB,EAAE,GAC9D,SAAS;AAEb,SAAK,mBAAmB,aAAa;AAAA,MACnC,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,WAAW;AAAA,MACX,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,WAAW,GAAmC;AAAA,EAAC;AAAA,EAE3C,kBAAiC;AACzC,WAAO;AAAA,MACL,WAAW,MAAM,KAAK,mBAAmB,SAAS,SAAS;AAAA,MAC3D,YAAY,MAAM,KAAK,mBAAmB,SAAS,SAAS;AAAA,MAC5D,WAAW,MAAM;AACf,YAAI,KAAK,mBAAmB,cAAc,MAAM,WAAW;AACzD,eAAK,mBAAmB,SAAS,SAAS;AAAA,QAC5C,OAAO;AACL,eAAK,mBAAmB,SAAS,SAAS;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAnCa,UACK,KAAK;;;ACNhB,IAAM,gBAAgB;AAEtB,IAAM,WAA4C;AAAA,EACvD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,SAAS;AAAA,EACT,UAAU,CAAC,KAAK;AAAA,EAChB,UAAU,CAAC,qBAAqB;AAAA,EAChC,UAAU,CAAC;AAAA,EACX,eAAe;AAAA,IACb,SAAS;AAAA,EACX;AACF;;;ACTO,IAAM,mBAA8D;AAAA,EACzE;AAAA,EACA,QAAQ,CAAC,aAAa,IAAI,UAAU,eAAe,QAAQ;AAAA,EAC3D,SAAS,MAAM;AAAA,EAAC;AAAA,EAChB,cAAc,CAAC;AACjB;","names":[]}
package/dist/index.d.cts CHANGED
@@ -5,6 +5,7 @@ interface PanPluginConfig extends BasePluginConfig {
5
5
  interface PanCapability {
6
6
  enablePan: () => void;
7
7
  disablePan: () => void;
8
+ togglePan: () => void;
8
9
  }
9
10
 
10
11
  declare class PanPlugin extends BasePlugin<PanPluginConfig, PanCapability> {
package/dist/index.d.ts CHANGED
@@ -5,6 +5,7 @@ interface PanPluginConfig extends BasePluginConfig {
5
5
  interface PanCapability {
6
6
  enablePan: () => void;
7
7
  disablePan: () => void;
8
+ togglePan: () => void;
8
9
  }
9
10
 
10
11
  declare class PanPlugin extends BasePlugin<PanPluginConfig, PanCapability> {
package/dist/index.js CHANGED
@@ -19,7 +19,14 @@ var PanPlugin = class extends BasePlugin {
19
19
  buildCapability() {
20
20
  return {
21
21
  enablePan: () => this.interactionManager.activate("panMode"),
22
- disablePan: () => this.interactionManager.activate("default")
22
+ disablePan: () => this.interactionManager.activate("default"),
23
+ togglePan: () => {
24
+ if (this.interactionManager.getActiveMode() === "panMode") {
25
+ this.interactionManager.activate("default");
26
+ } else {
27
+ this.interactionManager.activate("panMode");
28
+ }
29
+ }
23
30
  };
24
31
  }
25
32
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/pan-plugin.ts","../src/lib/manifest.ts","../src/lib/index.ts"],"sourcesContent":["import { BasePlugin, PluginRegistry } from '@embedpdf/core';\nimport {\n InteractionManagerCapability,\n InteractionManagerPlugin,\n} from '@embedpdf/plugin-interaction-manager';\n\nimport { PanCapability, PanPluginConfig } from './types';\n\nexport class PanPlugin extends BasePlugin<PanPluginConfig, PanCapability> {\n static readonly id = 'pan' as const;\n\n private interactionManager: InteractionManagerCapability;\n\n constructor(id: string, registry: PluginRegistry) {\n super(id, registry);\n\n this.interactionManager = registry\n .getPlugin<InteractionManagerPlugin>(InteractionManagerPlugin.id)\n ?.provides()!;\n\n this.interactionManager.registerMode({\n id: 'panMode',\n scope: 'global',\n exclusive: false,\n cursor: 'grab',\n });\n }\n\n async initialize(_: PanPluginConfig): Promise<void> {}\n\n protected buildCapability(): PanCapability {\n return {\n enablePan: () => this.interactionManager.activate('panMode'),\n disablePan: () => this.interactionManager.activate('default'),\n };\n }\n}\n","import { PluginManifest } from '@embedpdf/core';\nimport { PanPluginConfig } from './types';\n\nexport const PAN_PLUGIN_ID = 'pan';\n\nexport const manifest: PluginManifest<PanPluginConfig> = {\n id: PAN_PLUGIN_ID,\n name: 'Pan Plugin',\n version: '1.0.0',\n provides: ['pan'],\n requires: ['interaction-manager'],\n optional: [],\n defaultConfig: {\n enabled: true,\n },\n};\n","import { PluginPackage } from '@embedpdf/core';\n\nimport { PanPlugin } from './pan-plugin';\nimport { manifest, PAN_PLUGIN_ID } from './manifest';\nimport { PanPluginConfig } from './types';\n\nexport const PanPluginPackage: PluginPackage<PanPlugin, PanPluginConfig> = {\n manifest,\n create: (registry) => new PanPlugin(PAN_PLUGIN_ID, registry),\n reducer: () => {},\n initialState: {},\n};\n\nexport * from './pan-plugin';\nexport * from './types';\nexport * from './manifest';\n"],"mappings":";AAAA,SAAS,kBAAkC;AAC3C;AAAA,EAEE;AAAA,OACK;AAIA,IAAM,YAAN,cAAwB,WAA2C;AAAA,EAKxE,YAAY,IAAY,UAA0B;AAChD,UAAM,IAAI,QAAQ;AAElB,SAAK,qBAAqB,SACvB,UAAoC,yBAAyB,EAAE,GAC9D,SAAS;AAEb,SAAK,mBAAmB,aAAa;AAAA,MACnC,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,WAAW;AAAA,MACX,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,WAAW,GAAmC;AAAA,EAAC;AAAA,EAE3C,kBAAiC;AACzC,WAAO;AAAA,MACL,WAAW,MAAM,KAAK,mBAAmB,SAAS,SAAS;AAAA,MAC3D,YAAY,MAAM,KAAK,mBAAmB,SAAS,SAAS;AAAA,IAC9D;AAAA,EACF;AACF;AA5Ba,UACK,KAAK;;;ACNhB,IAAM,gBAAgB;AAEtB,IAAM,WAA4C;AAAA,EACvD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,SAAS;AAAA,EACT,UAAU,CAAC,KAAK;AAAA,EAChB,UAAU,CAAC,qBAAqB;AAAA,EAChC,UAAU,CAAC;AAAA,EACX,eAAe;AAAA,IACb,SAAS;AAAA,EACX;AACF;;;ACTO,IAAM,mBAA8D;AAAA,EACzE;AAAA,EACA,QAAQ,CAAC,aAAa,IAAI,UAAU,eAAe,QAAQ;AAAA,EAC3D,SAAS,MAAM;AAAA,EAAC;AAAA,EAChB,cAAc,CAAC;AACjB;","names":[]}
1
+ {"version":3,"sources":["../src/lib/pan-plugin.ts","../src/lib/manifest.ts","../src/lib/index.ts"],"sourcesContent":["import { BasePlugin, PluginRegistry } from '@embedpdf/core';\nimport {\n InteractionManagerCapability,\n InteractionManagerPlugin,\n} from '@embedpdf/plugin-interaction-manager';\n\nimport { PanCapability, PanPluginConfig } from './types';\n\nexport class PanPlugin extends BasePlugin<PanPluginConfig, PanCapability> {\n static readonly id = 'pan' as const;\n\n private interactionManager: InteractionManagerCapability;\n\n constructor(id: string, registry: PluginRegistry) {\n super(id, registry);\n\n this.interactionManager = registry\n .getPlugin<InteractionManagerPlugin>(InteractionManagerPlugin.id)\n ?.provides()!;\n\n this.interactionManager.registerMode({\n id: 'panMode',\n scope: 'global',\n exclusive: false,\n cursor: 'grab',\n });\n }\n\n async initialize(_: PanPluginConfig): Promise<void> {}\n\n protected buildCapability(): PanCapability {\n return {\n enablePan: () => this.interactionManager.activate('panMode'),\n disablePan: () => this.interactionManager.activate('default'),\n togglePan: () => {\n if (this.interactionManager.getActiveMode() === 'panMode') {\n this.interactionManager.activate('default');\n } else {\n this.interactionManager.activate('panMode');\n }\n },\n };\n }\n}\n","import { PluginManifest } from '@embedpdf/core';\nimport { PanPluginConfig } from './types';\n\nexport const PAN_PLUGIN_ID = 'pan';\n\nexport const manifest: PluginManifest<PanPluginConfig> = {\n id: PAN_PLUGIN_ID,\n name: 'Pan Plugin',\n version: '1.0.0',\n provides: ['pan'],\n requires: ['interaction-manager'],\n optional: [],\n defaultConfig: {\n enabled: true,\n },\n};\n","import { PluginPackage } from '@embedpdf/core';\n\nimport { PanPlugin } from './pan-plugin';\nimport { manifest, PAN_PLUGIN_ID } from './manifest';\nimport { PanPluginConfig } from './types';\n\nexport const PanPluginPackage: PluginPackage<PanPlugin, PanPluginConfig> = {\n manifest,\n create: (registry) => new PanPlugin(PAN_PLUGIN_ID, registry),\n reducer: () => {},\n initialState: {},\n};\n\nexport * from './pan-plugin';\nexport * from './types';\nexport * from './manifest';\n"],"mappings":";AAAA,SAAS,kBAAkC;AAC3C;AAAA,EAEE;AAAA,OACK;AAIA,IAAM,YAAN,cAAwB,WAA2C;AAAA,EAKxE,YAAY,IAAY,UAA0B;AAChD,UAAM,IAAI,QAAQ;AAElB,SAAK,qBAAqB,SACvB,UAAoC,yBAAyB,EAAE,GAC9D,SAAS;AAEb,SAAK,mBAAmB,aAAa;AAAA,MACnC,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,WAAW;AAAA,MACX,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,WAAW,GAAmC;AAAA,EAAC;AAAA,EAE3C,kBAAiC;AACzC,WAAO;AAAA,MACL,WAAW,MAAM,KAAK,mBAAmB,SAAS,SAAS;AAAA,MAC3D,YAAY,MAAM,KAAK,mBAAmB,SAAS,SAAS;AAAA,MAC5D,WAAW,MAAM;AACf,YAAI,KAAK,mBAAmB,cAAc,MAAM,WAAW;AACzD,eAAK,mBAAmB,SAAS,SAAS;AAAA,QAC5C,OAAO;AACL,eAAK,mBAAmB,SAAS,SAAS;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAnCa,UACK,KAAK;;;ACNhB,IAAM,gBAAgB;AAEtB,IAAM,WAA4C;AAAA,EACvD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,SAAS;AAAA,EACT,UAAU,CAAC,KAAK;AAAA,EAChB,UAAU,CAAC,qBAAqB;AAAA,EAChC,UAAU,CAAC;AAAA,EACX,eAAe;AAAA,IACb,SAAS;AAAA,EACX;AACF;;;ACTO,IAAM,mBAA8D;AAAA,EACzE;AAAA,EACA,QAAQ,CAAC,aAAa,IAAI,UAAU,eAAe,QAAQ;AAAA,EAC3D,SAAS,MAAM;AAAA,EAAC;AAAA,EAChB,cAAc,CAAC;AACjB;","names":[]}
@@ -22,27 +22,45 @@ var preact_exports = {};
22
22
  __export(preact_exports, {
23
23
  PanMode: () => PanMode,
24
24
  usePan: () => usePan,
25
- usePanCapability: () => usePanCapability
25
+ usePanCapability: () => usePanCapability,
26
+ usePanPlugin: () => usePanPlugin
26
27
  });
27
28
  module.exports = __toCommonJS(preact_exports);
28
29
 
29
30
  // src/preact/hooks/use-pan.ts
30
31
  var import_preact = require("@embedpdf/core/preact");
32
+ var import_preact2 = require("@embedpdf/plugin-interaction-manager/preact");
31
33
  var import_plugin_pan = require("@embedpdf/plugin-pan");
32
- var usePan = () => (0, import_preact.usePlugin)(import_plugin_pan.PanPlugin.id);
34
+ var import_hooks = require("preact/hooks");
35
+ var usePanPlugin = () => (0, import_preact.usePlugin)(import_plugin_pan.PanPlugin.id);
33
36
  var usePanCapability = () => (0, import_preact.useCapability)(import_plugin_pan.PanPlugin.id);
37
+ var usePan = () => {
38
+ const { provides } = usePanCapability();
39
+ const { provides: interactionManager } = (0, import_preact2.useInteractionManagerCapability)();
40
+ const [isPanning, setIsPanning] = (0, import_hooks.useState)(false);
41
+ (0, import_hooks.useEffect)(() => {
42
+ if (!interactionManager) return;
43
+ return interactionManager.onStateChange((state) => {
44
+ setIsPanning(state.activeMode === "panMode");
45
+ });
46
+ }, [interactionManager]);
47
+ return {
48
+ provides,
49
+ isPanning
50
+ };
51
+ };
34
52
 
35
53
  // src/preact/components/pan-mode.tsx
36
- var import_hooks = require("preact/hooks");
37
- var import_preact2 = require("@embedpdf/plugin-interaction-manager/preact");
38
- var import_preact3 = require("@embedpdf/plugin-viewport/preact");
54
+ var import_hooks2 = require("preact/hooks");
55
+ var import_preact3 = require("@embedpdf/plugin-interaction-manager/preact");
56
+ var import_preact4 = require("@embedpdf/plugin-viewport/preact");
39
57
  var import_jsx_runtime = require("preact/jsx-runtime");
40
58
  var PanMode = () => {
41
- const { register } = (0, import_preact2.usePointerHandlers)({ modeId: "panMode" });
42
- const { setCursor, removeCursor } = (0, import_preact2.useCursor)();
43
- const { provides: viewport } = (0, import_preact3.useViewportCapability)();
44
- const dragRef = (0, import_hooks.useRef)(null);
45
- const handlers = (0, import_hooks.useMemo)(
59
+ const { register } = (0, import_preact3.usePointerHandlers)({ modeId: "panMode" });
60
+ const { setCursor, removeCursor } = (0, import_preact3.useCursor)();
61
+ const { provides: viewport } = (0, import_preact4.useViewportCapability)();
62
+ const dragRef = (0, import_hooks2.useRef)(null);
63
+ const handlers = (0, import_hooks2.useMemo)(
46
64
  () => ({
47
65
  onPointerDown: (_, pe) => {
48
66
  if (!viewport) return;
@@ -86,7 +104,7 @@ var PanMode = () => {
86
104
  }),
87
105
  [viewport, setCursor, removeCursor]
88
106
  );
89
- (0, import_hooks.useEffect)(() => {
107
+ (0, import_hooks2.useEffect)(() => {
90
108
  if (!register) return;
91
109
  return register(handlers);
92
110
  }, [register, handlers]);
@@ -96,6 +114,7 @@ var PanMode = () => {
96
114
  0 && (module.exports = {
97
115
  PanMode,
98
116
  usePan,
99
- usePanCapability
117
+ usePanCapability,
118
+ usePanPlugin
100
119
  });
101
120
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/preact/index.ts","../../src/preact/hooks/use-pan.ts","../../src/preact/components/pan-mode.tsx"],"sourcesContent":["export * from './hooks';\nexport * from './components';\n","import { useCapability, usePlugin } from '@embedpdf/core/preact';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\n\nexport const usePan = () => usePlugin<PanPlugin>(PanPlugin.id);\nexport const usePanCapability = () => useCapability<PanPlugin>(PanPlugin.id);\n","/** @jsxImportSource preact */\nimport { useEffect, useMemo, useRef } from 'preact/hooks';\nimport type { PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';\nimport { useCursor, usePointerHandlers } from '@embedpdf/plugin-interaction-manager/preact';\nimport { useViewportCapability } from '@embedpdf/plugin-viewport/preact';\n\nexport const PanMode = () => {\n const { register } = usePointerHandlers({ modeId: 'panMode' });\n const { setCursor, removeCursor } = useCursor();\n const { provides: viewport } = useViewportCapability();\n\n const dragRef = useRef<{\n startX: number;\n startY: number;\n startLeft: number;\n startTop: number;\n } | null>(null);\n\n const handlers = useMemo(\n (): PointerEventHandlers => ({\n onPointerDown: (_, pe) => {\n if (!viewport) return;\n\n const metrics = viewport.getMetrics();\n\n dragRef.current = {\n startX: pe.clientX,\n startY: pe.clientY,\n startLeft: metrics.scrollLeft,\n startTop: metrics.scrollTop,\n };\n\n setCursor('panMode', 'grabbing', 10);\n },\n onPointerMove: (_, pe) => {\n const drag = dragRef.current;\n if (!drag || !viewport) return;\n\n /* delta between current pointer position and where the drag started */\n const dx = pe.clientX - drag.startX;\n const dy = pe.clientY - drag.startY;\n\n viewport.scrollTo({\n x: drag.startLeft - dx,\n y: drag.startTop - dy,\n });\n },\n onPointerUp: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onPointerLeave: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onPointerCancel: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n }),\n [viewport, setCursor, removeCursor],\n );\n\n useEffect(() => {\n if (!register) return;\n return register(handlers);\n }, [register, handlers]);\n\n return <></>;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAyC;AACzC,wBAA0B;AAEnB,IAAM,SAAS,UAAM,yBAAqB,4BAAU,EAAE;AACtD,IAAM,mBAAmB,UAAM,6BAAyB,4BAAU,EAAE;;;ACH3E,mBAA2C;AAE3C,IAAAA,iBAA8C;AAC9C,IAAAA,iBAAsC;AAyE7B;AAvEF,IAAM,UAAU,MAAM;AAC3B,QAAM,EAAE,SAAS,QAAI,mCAAmB,EAAE,QAAQ,UAAU,CAAC;AAC7D,QAAM,EAAE,WAAW,aAAa,QAAI,0BAAU;AAC9C,QAAM,EAAE,UAAU,SAAS,QAAI,sCAAsB;AAErD,QAAM,cAAU,qBAKN,IAAI;AAEd,QAAM,eAAW;AAAA,IACf,OAA6B;AAAA,MAC3B,eAAe,CAAC,GAAG,OAAO;AACxB,YAAI,CAAC,SAAU;AAEf,cAAM,UAAU,SAAS,WAAW;AAEpC,gBAAQ,UAAU;AAAA,UAChB,QAAQ,GAAG;AAAA,UACX,QAAQ,GAAG;AAAA,UACX,WAAW,QAAQ;AAAA,UACnB,UAAU,QAAQ;AAAA,QACpB;AAEA,kBAAU,WAAW,YAAY,EAAE;AAAA,MACrC;AAAA,MACA,eAAe,CAAC,GAAG,OAAO;AACxB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,QAAQ,CAAC,SAAU;AAGxB,cAAM,KAAK,GAAG,UAAU,KAAK;AAC7B,cAAM,KAAK,GAAG,UAAU,KAAK;AAE7B,iBAAS,SAAS;AAAA,UAChB,GAAG,KAAK,YAAY;AAAA,UACpB,GAAG,KAAK,WAAW;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,MACA,aAAa,MAAM;AACjB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,MACA,gBAAgB,MAAM;AACpB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,MACA,iBAAiB,MAAM;AACrB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,IACF;AAAA,IACA,CAAC,UAAU,WAAW,YAAY;AAAA,EACpC;AAEA,8BAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACf,WAAO,SAAS,QAAQ;AAAA,EAC1B,GAAG,CAAC,UAAU,QAAQ,CAAC;AAEvB,SAAO,2EAAE;AACX;","names":["import_preact"]}
1
+ {"version":3,"sources":["../../src/preact/index.ts","../../src/preact/hooks/use-pan.ts","../../src/preact/components/pan-mode.tsx"],"sourcesContent":["export * from './hooks';\nexport * from './components';\n","import { useCapability, usePlugin } from '@embedpdf/core/preact';\nimport { useInteractionManagerCapability } from '@embedpdf/plugin-interaction-manager/preact';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\nimport { useEffect, useState } from 'preact/hooks';\n\nexport const usePanPlugin = () => usePlugin<PanPlugin>(PanPlugin.id);\nexport const usePanCapability = () => useCapability<PanPlugin>(PanPlugin.id);\n\nexport const usePan = () => {\n const { provides } = usePanCapability();\n const { provides: interactionManager } = useInteractionManagerCapability();\n\n const [isPanning, setIsPanning] = useState(false);\n\n useEffect(() => {\n if (!interactionManager) return;\n return interactionManager.onStateChange((state) => {\n setIsPanning(state.activeMode === 'panMode');\n });\n }, [interactionManager]);\n\n return {\n provides,\n isPanning,\n };\n};\n","/** @jsxImportSource preact */\nimport { useEffect, useMemo, useRef } from 'preact/hooks';\nimport type { PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';\nimport { useCursor, usePointerHandlers } from '@embedpdf/plugin-interaction-manager/preact';\nimport { useViewportCapability } from '@embedpdf/plugin-viewport/preact';\n\nexport const PanMode = () => {\n const { register } = usePointerHandlers({ modeId: 'panMode' });\n const { setCursor, removeCursor } = useCursor();\n const { provides: viewport } = useViewportCapability();\n\n const dragRef = useRef<{\n startX: number;\n startY: number;\n startLeft: number;\n startTop: number;\n } | null>(null);\n\n const handlers = useMemo(\n (): PointerEventHandlers => ({\n onPointerDown: (_, pe) => {\n if (!viewport) return;\n\n const metrics = viewport.getMetrics();\n\n dragRef.current = {\n startX: pe.clientX,\n startY: pe.clientY,\n startLeft: metrics.scrollLeft,\n startTop: metrics.scrollTop,\n };\n\n setCursor('panMode', 'grabbing', 10);\n },\n onPointerMove: (_, pe) => {\n const drag = dragRef.current;\n if (!drag || !viewport) return;\n\n /* delta between current pointer position and where the drag started */\n const dx = pe.clientX - drag.startX;\n const dy = pe.clientY - drag.startY;\n\n viewport.scrollTo({\n x: drag.startLeft - dx,\n y: drag.startTop - dy,\n });\n },\n onPointerUp: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onPointerLeave: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onPointerCancel: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n }),\n [viewport, setCursor, removeCursor],\n );\n\n useEffect(() => {\n if (!register) return;\n return register(handlers);\n }, [register, handlers]);\n\n return <></>;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAyC;AACzC,IAAAA,iBAAgD;AAChD,wBAA0B;AAC1B,mBAAoC;AAE7B,IAAM,eAAe,UAAM,yBAAqB,4BAAU,EAAE;AAC5D,IAAM,mBAAmB,UAAM,6BAAyB,4BAAU,EAAE;AAEpE,IAAM,SAAS,MAAM;AAC1B,QAAM,EAAE,SAAS,IAAI,iBAAiB;AACtC,QAAM,EAAE,UAAU,mBAAmB,QAAI,gDAAgC;AAEzE,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAS,KAAK;AAEhD,8BAAU,MAAM;AACd,QAAI,CAAC,mBAAoB;AACzB,WAAO,mBAAmB,cAAc,CAAC,UAAU;AACjD,mBAAa,MAAM,eAAe,SAAS;AAAA,IAC7C,CAAC;AAAA,EACH,GAAG,CAAC,kBAAkB,CAAC;AAEvB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;ACxBA,IAAAC,gBAA2C;AAE3C,IAAAC,iBAA8C;AAC9C,IAAAA,iBAAsC;AAyE7B;AAvEF,IAAM,UAAU,MAAM;AAC3B,QAAM,EAAE,SAAS,QAAI,mCAAmB,EAAE,QAAQ,UAAU,CAAC;AAC7D,QAAM,EAAE,WAAW,aAAa,QAAI,0BAAU;AAC9C,QAAM,EAAE,UAAU,SAAS,QAAI,sCAAsB;AAErD,QAAM,cAAU,sBAKN,IAAI;AAEd,QAAM,eAAW;AAAA,IACf,OAA6B;AAAA,MAC3B,eAAe,CAAC,GAAG,OAAO;AACxB,YAAI,CAAC,SAAU;AAEf,cAAM,UAAU,SAAS,WAAW;AAEpC,gBAAQ,UAAU;AAAA,UAChB,QAAQ,GAAG;AAAA,UACX,QAAQ,GAAG;AAAA,UACX,WAAW,QAAQ;AAAA,UACnB,UAAU,QAAQ;AAAA,QACpB;AAEA,kBAAU,WAAW,YAAY,EAAE;AAAA,MACrC;AAAA,MACA,eAAe,CAAC,GAAG,OAAO;AACxB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,QAAQ,CAAC,SAAU;AAGxB,cAAM,KAAK,GAAG,UAAU,KAAK;AAC7B,cAAM,KAAK,GAAG,UAAU,KAAK;AAE7B,iBAAS,SAAS;AAAA,UAChB,GAAG,KAAK,YAAY;AAAA,UACpB,GAAG,KAAK,WAAW;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,MACA,aAAa,MAAM;AACjB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,MACA,gBAAgB,MAAM;AACpB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,MACA,iBAAiB,MAAM;AACrB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,IACF;AAAA,IACA,CAAC,UAAU,WAAW,YAAY;AAAA,EACpC;AAEA,+BAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACf,WAAO,SAAS,QAAQ;AAAA,EAC1B,GAAG,CAAC,UAAU,QAAQ,CAAC;AAEvB,SAAO,2EAAE;AACX;","names":["import_preact","import_hooks","import_preact"]}
@@ -2,7 +2,7 @@ import * as _embedpdf_plugin_pan from '@embedpdf/plugin-pan';
2
2
  import { PanPlugin } from '@embedpdf/plugin-pan';
3
3
  import * as preact from 'preact';
4
4
 
5
- declare const usePan: () => {
5
+ declare const usePanPlugin: () => {
6
6
  plugin: PanPlugin | null;
7
7
  isLoading: boolean;
8
8
  ready: Promise<void>;
@@ -12,7 +12,11 @@ declare const usePanCapability: () => {
12
12
  isLoading: boolean;
13
13
  ready: Promise<void>;
14
14
  };
15
+ declare const usePan: () => {
16
+ provides: Readonly<_embedpdf_plugin_pan.PanCapability> | null;
17
+ isPanning: boolean;
18
+ };
15
19
 
16
20
  declare const PanMode: () => preact.JSX.Element;
17
21
 
18
- export { PanMode, usePan, usePanCapability };
22
+ export { PanMode, usePan, usePanCapability, usePanPlugin };
@@ -2,7 +2,7 @@ import * as _embedpdf_plugin_pan from '@embedpdf/plugin-pan';
2
2
  import { PanPlugin } from '@embedpdf/plugin-pan';
3
3
  import * as preact from 'preact';
4
4
 
5
- declare const usePan: () => {
5
+ declare const usePanPlugin: () => {
6
6
  plugin: PanPlugin | null;
7
7
  isLoading: boolean;
8
8
  ready: Promise<void>;
@@ -12,7 +12,11 @@ declare const usePanCapability: () => {
12
12
  isLoading: boolean;
13
13
  ready: Promise<void>;
14
14
  };
15
+ declare const usePan: () => {
16
+ provides: Readonly<_embedpdf_plugin_pan.PanCapability> | null;
17
+ isPanning: boolean;
18
+ };
15
19
 
16
20
  declare const PanMode: () => preact.JSX.Element;
17
21
 
18
- export { PanMode, usePan, usePanCapability };
22
+ export { PanMode, usePan, usePanCapability, usePanPlugin };
@@ -1,11 +1,28 @@
1
1
  // src/preact/hooks/use-pan.ts
2
2
  import { useCapability, usePlugin } from "@embedpdf/core/preact";
3
+ import { useInteractionManagerCapability } from "@embedpdf/plugin-interaction-manager/preact";
3
4
  import { PanPlugin } from "@embedpdf/plugin-pan";
4
- var usePan = () => usePlugin(PanPlugin.id);
5
+ import { useEffect, useState } from "preact/hooks";
6
+ var usePanPlugin = () => usePlugin(PanPlugin.id);
5
7
  var usePanCapability = () => useCapability(PanPlugin.id);
8
+ var usePan = () => {
9
+ const { provides } = usePanCapability();
10
+ const { provides: interactionManager } = useInteractionManagerCapability();
11
+ const [isPanning, setIsPanning] = useState(false);
12
+ useEffect(() => {
13
+ if (!interactionManager) return;
14
+ return interactionManager.onStateChange((state) => {
15
+ setIsPanning(state.activeMode === "panMode");
16
+ });
17
+ }, [interactionManager]);
18
+ return {
19
+ provides,
20
+ isPanning
21
+ };
22
+ };
6
23
 
7
24
  // src/preact/components/pan-mode.tsx
8
- import { useEffect, useMemo, useRef } from "preact/hooks";
25
+ import { useEffect as useEffect2, useMemo, useRef } from "preact/hooks";
9
26
  import { useCursor, usePointerHandlers } from "@embedpdf/plugin-interaction-manager/preact";
10
27
  import { useViewportCapability } from "@embedpdf/plugin-viewport/preact";
11
28
  import { Fragment, jsx } from "preact/jsx-runtime";
@@ -58,7 +75,7 @@ var PanMode = () => {
58
75
  }),
59
76
  [viewport, setCursor, removeCursor]
60
77
  );
61
- useEffect(() => {
78
+ useEffect2(() => {
62
79
  if (!register) return;
63
80
  return register(handlers);
64
81
  }, [register, handlers]);
@@ -67,6 +84,7 @@ var PanMode = () => {
67
84
  export {
68
85
  PanMode,
69
86
  usePan,
70
- usePanCapability
87
+ usePanCapability,
88
+ usePanPlugin
71
89
  };
72
90
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/preact/hooks/use-pan.ts","../../src/preact/components/pan-mode.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/preact';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\n\nexport const usePan = () => usePlugin<PanPlugin>(PanPlugin.id);\nexport const usePanCapability = () => useCapability<PanPlugin>(PanPlugin.id);\n","/** @jsxImportSource preact */\nimport { useEffect, useMemo, useRef } from 'preact/hooks';\nimport type { PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';\nimport { useCursor, usePointerHandlers } from '@embedpdf/plugin-interaction-manager/preact';\nimport { useViewportCapability } from '@embedpdf/plugin-viewport/preact';\n\nexport const PanMode = () => {\n const { register } = usePointerHandlers({ modeId: 'panMode' });\n const { setCursor, removeCursor } = useCursor();\n const { provides: viewport } = useViewportCapability();\n\n const dragRef = useRef<{\n startX: number;\n startY: number;\n startLeft: number;\n startTop: number;\n } | null>(null);\n\n const handlers = useMemo(\n (): PointerEventHandlers => ({\n onPointerDown: (_, pe) => {\n if (!viewport) return;\n\n const metrics = viewport.getMetrics();\n\n dragRef.current = {\n startX: pe.clientX,\n startY: pe.clientY,\n startLeft: metrics.scrollLeft,\n startTop: metrics.scrollTop,\n };\n\n setCursor('panMode', 'grabbing', 10);\n },\n onPointerMove: (_, pe) => {\n const drag = dragRef.current;\n if (!drag || !viewport) return;\n\n /* delta between current pointer position and where the drag started */\n const dx = pe.clientX - drag.startX;\n const dy = pe.clientY - drag.startY;\n\n viewport.scrollTo({\n x: drag.startLeft - dx,\n y: drag.startTop - dy,\n });\n },\n onPointerUp: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onPointerLeave: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onPointerCancel: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n }),\n [viewport, setCursor, removeCursor],\n );\n\n useEffect(() => {\n if (!register) return;\n return register(handlers);\n }, [register, handlers]);\n\n return <></>;\n};\n"],"mappings":";AAAA,SAAS,eAAe,iBAAiB;AACzC,SAAS,iBAAiB;AAEnB,IAAM,SAAS,MAAM,UAAqB,UAAU,EAAE;AACtD,IAAM,mBAAmB,MAAM,cAAyB,UAAU,EAAE;;;ACH3E,SAAS,WAAW,SAAS,cAAc;AAE3C,SAAS,WAAW,0BAA0B;AAC9C,SAAS,6BAA6B;AAyE7B;AAvEF,IAAM,UAAU,MAAM;AAC3B,QAAM,EAAE,SAAS,IAAI,mBAAmB,EAAE,QAAQ,UAAU,CAAC;AAC7D,QAAM,EAAE,WAAW,aAAa,IAAI,UAAU;AAC9C,QAAM,EAAE,UAAU,SAAS,IAAI,sBAAsB;AAErD,QAAM,UAAU,OAKN,IAAI;AAEd,QAAM,WAAW;AAAA,IACf,OAA6B;AAAA,MAC3B,eAAe,CAAC,GAAG,OAAO;AACxB,YAAI,CAAC,SAAU;AAEf,cAAM,UAAU,SAAS,WAAW;AAEpC,gBAAQ,UAAU;AAAA,UAChB,QAAQ,GAAG;AAAA,UACX,QAAQ,GAAG;AAAA,UACX,WAAW,QAAQ;AAAA,UACnB,UAAU,QAAQ;AAAA,QACpB;AAEA,kBAAU,WAAW,YAAY,EAAE;AAAA,MACrC;AAAA,MACA,eAAe,CAAC,GAAG,OAAO;AACxB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,QAAQ,CAAC,SAAU;AAGxB,cAAM,KAAK,GAAG,UAAU,KAAK;AAC7B,cAAM,KAAK,GAAG,UAAU,KAAK;AAE7B,iBAAS,SAAS;AAAA,UAChB,GAAG,KAAK,YAAY;AAAA,UACpB,GAAG,KAAK,WAAW;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,MACA,aAAa,MAAM;AACjB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,MACA,gBAAgB,MAAM;AACpB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,MACA,iBAAiB,MAAM;AACrB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,IACF;AAAA,IACA,CAAC,UAAU,WAAW,YAAY;AAAA,EACpC;AAEA,YAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACf,WAAO,SAAS,QAAQ;AAAA,EAC1B,GAAG,CAAC,UAAU,QAAQ,CAAC;AAEvB,SAAO,gCAAE;AACX;","names":[]}
1
+ {"version":3,"sources":["../../src/preact/hooks/use-pan.ts","../../src/preact/components/pan-mode.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/preact';\nimport { useInteractionManagerCapability } from '@embedpdf/plugin-interaction-manager/preact';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\nimport { useEffect, useState } from 'preact/hooks';\n\nexport const usePanPlugin = () => usePlugin<PanPlugin>(PanPlugin.id);\nexport const usePanCapability = () => useCapability<PanPlugin>(PanPlugin.id);\n\nexport const usePan = () => {\n const { provides } = usePanCapability();\n const { provides: interactionManager } = useInteractionManagerCapability();\n\n const [isPanning, setIsPanning] = useState(false);\n\n useEffect(() => {\n if (!interactionManager) return;\n return interactionManager.onStateChange((state) => {\n setIsPanning(state.activeMode === 'panMode');\n });\n }, [interactionManager]);\n\n return {\n provides,\n isPanning,\n };\n};\n","/** @jsxImportSource preact */\nimport { useEffect, useMemo, useRef } from 'preact/hooks';\nimport type { PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';\nimport { useCursor, usePointerHandlers } from '@embedpdf/plugin-interaction-manager/preact';\nimport { useViewportCapability } from '@embedpdf/plugin-viewport/preact';\n\nexport const PanMode = () => {\n const { register } = usePointerHandlers({ modeId: 'panMode' });\n const { setCursor, removeCursor } = useCursor();\n const { provides: viewport } = useViewportCapability();\n\n const dragRef = useRef<{\n startX: number;\n startY: number;\n startLeft: number;\n startTop: number;\n } | null>(null);\n\n const handlers = useMemo(\n (): PointerEventHandlers => ({\n onPointerDown: (_, pe) => {\n if (!viewport) return;\n\n const metrics = viewport.getMetrics();\n\n dragRef.current = {\n startX: pe.clientX,\n startY: pe.clientY,\n startLeft: metrics.scrollLeft,\n startTop: metrics.scrollTop,\n };\n\n setCursor('panMode', 'grabbing', 10);\n },\n onPointerMove: (_, pe) => {\n const drag = dragRef.current;\n if (!drag || !viewport) return;\n\n /* delta between current pointer position and where the drag started */\n const dx = pe.clientX - drag.startX;\n const dy = pe.clientY - drag.startY;\n\n viewport.scrollTo({\n x: drag.startLeft - dx,\n y: drag.startTop - dy,\n });\n },\n onPointerUp: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onPointerLeave: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onPointerCancel: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n }),\n [viewport, setCursor, removeCursor],\n );\n\n useEffect(() => {\n if (!register) return;\n return register(handlers);\n }, [register, handlers]);\n\n return <></>;\n};\n"],"mappings":";AAAA,SAAS,eAAe,iBAAiB;AACzC,SAAS,uCAAuC;AAChD,SAAS,iBAAiB;AAC1B,SAAS,WAAW,gBAAgB;AAE7B,IAAM,eAAe,MAAM,UAAqB,UAAU,EAAE;AAC5D,IAAM,mBAAmB,MAAM,cAAyB,UAAU,EAAE;AAEpE,IAAM,SAAS,MAAM;AAC1B,QAAM,EAAE,SAAS,IAAI,iBAAiB;AACtC,QAAM,EAAE,UAAU,mBAAmB,IAAI,gCAAgC;AAEzE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,YAAU,MAAM;AACd,QAAI,CAAC,mBAAoB;AACzB,WAAO,mBAAmB,cAAc,CAAC,UAAU;AACjD,mBAAa,MAAM,eAAe,SAAS;AAAA,IAC7C,CAAC;AAAA,EACH,GAAG,CAAC,kBAAkB,CAAC;AAEvB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;ACxBA,SAAS,aAAAA,YAAW,SAAS,cAAc;AAE3C,SAAS,WAAW,0BAA0B;AAC9C,SAAS,6BAA6B;AAyE7B;AAvEF,IAAM,UAAU,MAAM;AAC3B,QAAM,EAAE,SAAS,IAAI,mBAAmB,EAAE,QAAQ,UAAU,CAAC;AAC7D,QAAM,EAAE,WAAW,aAAa,IAAI,UAAU;AAC9C,QAAM,EAAE,UAAU,SAAS,IAAI,sBAAsB;AAErD,QAAM,UAAU,OAKN,IAAI;AAEd,QAAM,WAAW;AAAA,IACf,OAA6B;AAAA,MAC3B,eAAe,CAAC,GAAG,OAAO;AACxB,YAAI,CAAC,SAAU;AAEf,cAAM,UAAU,SAAS,WAAW;AAEpC,gBAAQ,UAAU;AAAA,UAChB,QAAQ,GAAG;AAAA,UACX,QAAQ,GAAG;AAAA,UACX,WAAW,QAAQ;AAAA,UACnB,UAAU,QAAQ;AAAA,QACpB;AAEA,kBAAU,WAAW,YAAY,EAAE;AAAA,MACrC;AAAA,MACA,eAAe,CAAC,GAAG,OAAO;AACxB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,QAAQ,CAAC,SAAU;AAGxB,cAAM,KAAK,GAAG,UAAU,KAAK;AAC7B,cAAM,KAAK,GAAG,UAAU,KAAK;AAE7B,iBAAS,SAAS;AAAA,UAChB,GAAG,KAAK,YAAY;AAAA,UACpB,GAAG,KAAK,WAAW;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,MACA,aAAa,MAAM;AACjB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,MACA,gBAAgB,MAAM;AACpB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,MACA,iBAAiB,MAAM;AACrB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,IACF;AAAA,IACA,CAAC,UAAU,WAAW,YAAY;AAAA,EACpC;AAEA,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACf,WAAO,SAAS,QAAQ;AAAA,EAC1B,GAAG,CAAC,UAAU,QAAQ,CAAC;AAEvB,SAAO,gCAAE;AACX;","names":["useEffect"]}
@@ -20,19 +20,101 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/react/index.ts
21
21
  var react_exports = {};
22
22
  __export(react_exports, {
23
+ PanMode: () => PanMode,
23
24
  usePan: () => usePan,
24
- usePanCapability: () => usePanCapability
25
+ usePanCapability: () => usePanCapability,
26
+ usePanPlugin: () => usePanPlugin
25
27
  });
26
28
  module.exports = __toCommonJS(react_exports);
27
29
 
28
30
  // src/react/hooks/use-pan.ts
29
31
  var import_react = require("@embedpdf/core/react");
32
+ var import_react2 = require("@embedpdf/plugin-interaction-manager/react");
30
33
  var import_plugin_pan = require("@embedpdf/plugin-pan");
31
- var usePan = () => (0, import_react.usePlugin)(import_plugin_pan.PanPlugin.id);
34
+ var import_react3 = require("react");
35
+ var usePanPlugin = () => (0, import_react.usePlugin)(import_plugin_pan.PanPlugin.id);
32
36
  var usePanCapability = () => (0, import_react.useCapability)(import_plugin_pan.PanPlugin.id);
37
+ var usePan = () => {
38
+ const { provides } = usePanCapability();
39
+ const { provides: interactionManager } = (0, import_react2.useInteractionManagerCapability)();
40
+ const [isPanning, setIsPanning] = (0, import_react3.useState)(false);
41
+ (0, import_react3.useEffect)(() => {
42
+ if (!interactionManager) return;
43
+ return interactionManager.onStateChange((state) => {
44
+ setIsPanning(state.activeMode === "panMode");
45
+ });
46
+ }, [interactionManager]);
47
+ return {
48
+ provides,
49
+ isPanning
50
+ };
51
+ };
52
+
53
+ // src/react/components/pan-mode.tsx
54
+ var import_react4 = require("react");
55
+ var import_react5 = require("@embedpdf/plugin-interaction-manager/react");
56
+ var import_react6 = require("@embedpdf/plugin-viewport/react");
57
+ var import_jsx_runtime = require("react/jsx-runtime");
58
+ var PanMode = () => {
59
+ const { register } = (0, import_react5.usePointerHandlers)({ modeId: "panMode" });
60
+ const { setCursor, removeCursor } = (0, import_react5.useCursor)();
61
+ const { provides: viewport } = (0, import_react6.useViewportCapability)();
62
+ const dragRef = (0, import_react4.useRef)(null);
63
+ const handlers = (0, import_react4.useMemo)(
64
+ () => ({
65
+ onPointerDown: (_, pe) => {
66
+ if (!viewport) return;
67
+ const metrics = viewport.getMetrics();
68
+ dragRef.current = {
69
+ startX: pe.clientX,
70
+ startY: pe.clientY,
71
+ startLeft: metrics.scrollLeft,
72
+ startTop: metrics.scrollTop
73
+ };
74
+ setCursor("panMode", "grabbing", 10);
75
+ },
76
+ onPointerMove: (_, pe) => {
77
+ const drag = dragRef.current;
78
+ if (!drag || !viewport) return;
79
+ const dx = pe.clientX - drag.startX;
80
+ const dy = pe.clientY - drag.startY;
81
+ viewport.scrollTo({
82
+ x: drag.startLeft - dx,
83
+ y: drag.startTop - dy
84
+ });
85
+ },
86
+ onPointerUp: () => {
87
+ const drag = dragRef.current;
88
+ if (!drag) return;
89
+ dragRef.current = null;
90
+ removeCursor("panMode");
91
+ },
92
+ onPointerLeave: () => {
93
+ const drag = dragRef.current;
94
+ if (!drag) return;
95
+ dragRef.current = null;
96
+ removeCursor("panMode");
97
+ },
98
+ onPointerCancel: () => {
99
+ const drag = dragRef.current;
100
+ if (!drag) return;
101
+ dragRef.current = null;
102
+ removeCursor("panMode");
103
+ }
104
+ }),
105
+ [viewport, setCursor, removeCursor]
106
+ );
107
+ (0, import_react4.useEffect)(() => {
108
+ if (!register) return;
109
+ return register(handlers);
110
+ }, [register, handlers]);
111
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {});
112
+ };
33
113
  // Annotate the CommonJS export names for ESM import in node:
34
114
  0 && (module.exports = {
115
+ PanMode,
35
116
  usePan,
36
- usePanCapability
117
+ usePanCapability,
118
+ usePanPlugin
37
119
  });
38
120
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/react/index.ts","../../src/react/hooks/use-pan.ts"],"sourcesContent":["export * from './hooks';\n","import { useCapability, usePlugin } from '@embedpdf/core/react';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\n\nexport const usePan = () => usePlugin<PanPlugin>(PanPlugin.id);\nexport const usePanCapability = () => useCapability<PanPlugin>(PanPlugin.id);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAAyC;AACzC,wBAA0B;AAEnB,IAAM,SAAS,UAAM,wBAAqB,4BAAU,EAAE;AACtD,IAAM,mBAAmB,UAAM,4BAAyB,4BAAU,EAAE;","names":[]}
1
+ {"version":3,"sources":["../../src/react/index.ts","../../src/react/hooks/use-pan.ts","../../src/react/components/pan-mode.tsx"],"sourcesContent":["export * from './hooks';\nexport * from './components';\n","import { useCapability, usePlugin } from '@embedpdf/core/react';\nimport { useInteractionManagerCapability } from '@embedpdf/plugin-interaction-manager/react';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\nimport { useEffect, useState } from 'react';\n\nexport const usePanPlugin = () => usePlugin<PanPlugin>(PanPlugin.id);\nexport const usePanCapability = () => useCapability<PanPlugin>(PanPlugin.id);\n\nexport const usePan = () => {\n const { provides } = usePanCapability();\n const { provides: interactionManager } = useInteractionManagerCapability();\n\n const [isPanning, setIsPanning] = useState(false);\n\n useEffect(() => {\n if (!interactionManager) return;\n return interactionManager.onStateChange((state) => {\n setIsPanning(state.activeMode === 'panMode');\n });\n }, [interactionManager]);\n\n return {\n provides,\n isPanning,\n };\n};\n","import { useEffect, useMemo, useRef } from 'react';\nimport type { PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';\nimport { useCursor, usePointerHandlers } from '@embedpdf/plugin-interaction-manager/react';\nimport { useViewportCapability } from '@embedpdf/plugin-viewport/react';\n\nexport const PanMode = () => {\n const { register } = usePointerHandlers({ modeId: 'panMode' });\n const { setCursor, removeCursor } = useCursor();\n const { provides: viewport } = useViewportCapability();\n\n const dragRef = useRef<{\n startX: number;\n startY: number;\n startLeft: number;\n startTop: number;\n } | null>(null);\n\n const handlers = useMemo(\n (): PointerEventHandlers => ({\n onPointerDown: (_, pe) => {\n if (!viewport) return;\n\n const metrics = viewport.getMetrics();\n\n dragRef.current = {\n startX: pe.clientX,\n startY: pe.clientY,\n startLeft: metrics.scrollLeft,\n startTop: metrics.scrollTop,\n };\n\n setCursor('panMode', 'grabbing', 10);\n },\n onPointerMove: (_, pe) => {\n const drag = dragRef.current;\n if (!drag || !viewport) return;\n\n /* delta between current pointer position and where the drag started */\n const dx = pe.clientX - drag.startX;\n const dy = pe.clientY - drag.startY;\n\n viewport.scrollTo({\n x: drag.startLeft - dx,\n y: drag.startTop - dy,\n });\n },\n onPointerUp: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onPointerLeave: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onPointerCancel: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n }),\n [viewport, setCursor, removeCursor],\n );\n\n useEffect(() => {\n if (!register) return;\n return register(handlers);\n }, [register, handlers]);\n\n return <></>;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAAyC;AACzC,IAAAA,gBAAgD;AAChD,wBAA0B;AAC1B,IAAAA,gBAAoC;AAE7B,IAAM,eAAe,UAAM,wBAAqB,4BAAU,EAAE;AAC5D,IAAM,mBAAmB,UAAM,4BAAyB,4BAAU,EAAE;AAEpE,IAAM,SAAS,MAAM;AAC1B,QAAM,EAAE,SAAS,IAAI,iBAAiB;AACtC,QAAM,EAAE,UAAU,mBAAmB,QAAI,+CAAgC;AAEzE,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAS,KAAK;AAEhD,+BAAU,MAAM;AACd,QAAI,CAAC,mBAAoB;AACzB,WAAO,mBAAmB,cAAc,CAAC,UAAU;AACjD,mBAAa,MAAM,eAAe,SAAS;AAAA,IAC7C,CAAC;AAAA,EACH,GAAG,CAAC,kBAAkB,CAAC;AAEvB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;ACzBA,IAAAC,gBAA2C;AAE3C,IAAAA,gBAA8C;AAC9C,IAAAA,gBAAsC;AAyE7B;AAvEF,IAAM,UAAU,MAAM;AAC3B,QAAM,EAAE,SAAS,QAAI,kCAAmB,EAAE,QAAQ,UAAU,CAAC;AAC7D,QAAM,EAAE,WAAW,aAAa,QAAI,yBAAU;AAC9C,QAAM,EAAE,UAAU,SAAS,QAAI,qCAAsB;AAErD,QAAM,cAAU,sBAKN,IAAI;AAEd,QAAM,eAAW;AAAA,IACf,OAA6B;AAAA,MAC3B,eAAe,CAAC,GAAG,OAAO;AACxB,YAAI,CAAC,SAAU;AAEf,cAAM,UAAU,SAAS,WAAW;AAEpC,gBAAQ,UAAU;AAAA,UAChB,QAAQ,GAAG;AAAA,UACX,QAAQ,GAAG;AAAA,UACX,WAAW,QAAQ;AAAA,UACnB,UAAU,QAAQ;AAAA,QACpB;AAEA,kBAAU,WAAW,YAAY,EAAE;AAAA,MACrC;AAAA,MACA,eAAe,CAAC,GAAG,OAAO;AACxB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,QAAQ,CAAC,SAAU;AAGxB,cAAM,KAAK,GAAG,UAAU,KAAK;AAC7B,cAAM,KAAK,GAAG,UAAU,KAAK;AAE7B,iBAAS,SAAS;AAAA,UAChB,GAAG,KAAK,YAAY;AAAA,UACpB,GAAG,KAAK,WAAW;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,MACA,aAAa,MAAM;AACjB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,MACA,gBAAgB,MAAM;AACpB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,MACA,iBAAiB,MAAM;AACrB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,IACF;AAAA,IACA,CAAC,UAAU,WAAW,YAAY;AAAA,EACpC;AAEA,+BAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACf,WAAO,SAAS,QAAQ;AAAA,EAC1B,GAAG,CAAC,UAAU,QAAQ,CAAC;AAEvB,SAAO,2EAAE;AACX;","names":["import_react","import_react"]}
@@ -1,7 +1,8 @@
1
1
  import * as _embedpdf_plugin_pan from '@embedpdf/plugin-pan';
2
2
  import { PanPlugin } from '@embedpdf/plugin-pan';
3
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
4
 
4
- declare const usePan: () => {
5
+ declare const usePanPlugin: () => {
5
6
  plugin: PanPlugin | null;
6
7
  isLoading: boolean;
7
8
  ready: Promise<void>;
@@ -11,5 +12,11 @@ declare const usePanCapability: () => {
11
12
  isLoading: boolean;
12
13
  ready: Promise<void>;
13
14
  };
15
+ declare const usePan: () => {
16
+ provides: Readonly<_embedpdf_plugin_pan.PanCapability> | null;
17
+ isPanning: boolean;
18
+ };
19
+
20
+ declare const PanMode: () => react_jsx_runtime.JSX.Element;
14
21
 
15
- export { usePan, usePanCapability };
22
+ export { PanMode, usePan, usePanCapability, usePanPlugin };
@@ -1,7 +1,8 @@
1
1
  import * as _embedpdf_plugin_pan from '@embedpdf/plugin-pan';
2
2
  import { PanPlugin } from '@embedpdf/plugin-pan';
3
+ import * as react_jsx_runtime from 'react/jsx-runtime';
3
4
 
4
- declare const usePan: () => {
5
+ declare const usePanPlugin: () => {
5
6
  plugin: PanPlugin | null;
6
7
  isLoading: boolean;
7
8
  ready: Promise<void>;
@@ -11,5 +12,11 @@ declare const usePanCapability: () => {
11
12
  isLoading: boolean;
12
13
  ready: Promise<void>;
13
14
  };
15
+ declare const usePan: () => {
16
+ provides: Readonly<_embedpdf_plugin_pan.PanCapability> | null;
17
+ isPanning: boolean;
18
+ };
19
+
20
+ declare const PanMode: () => react_jsx_runtime.JSX.Element;
14
21
 
15
- export { usePan, usePanCapability };
22
+ export { PanMode, usePan, usePanCapability, usePanPlugin };
@@ -1,10 +1,90 @@
1
1
  // src/react/hooks/use-pan.ts
2
2
  import { useCapability, usePlugin } from "@embedpdf/core/react";
3
+ import { useInteractionManagerCapability } from "@embedpdf/plugin-interaction-manager/react";
3
4
  import { PanPlugin } from "@embedpdf/plugin-pan";
4
- var usePan = () => usePlugin(PanPlugin.id);
5
+ import { useEffect, useState } from "react";
6
+ var usePanPlugin = () => usePlugin(PanPlugin.id);
5
7
  var usePanCapability = () => useCapability(PanPlugin.id);
8
+ var usePan = () => {
9
+ const { provides } = usePanCapability();
10
+ const { provides: interactionManager } = useInteractionManagerCapability();
11
+ const [isPanning, setIsPanning] = useState(false);
12
+ useEffect(() => {
13
+ if (!interactionManager) return;
14
+ return interactionManager.onStateChange((state) => {
15
+ setIsPanning(state.activeMode === "panMode");
16
+ });
17
+ }, [interactionManager]);
18
+ return {
19
+ provides,
20
+ isPanning
21
+ };
22
+ };
23
+
24
+ // src/react/components/pan-mode.tsx
25
+ import { useEffect as useEffect2, useMemo, useRef } from "react";
26
+ import { useCursor, usePointerHandlers } from "@embedpdf/plugin-interaction-manager/react";
27
+ import { useViewportCapability } from "@embedpdf/plugin-viewport/react";
28
+ import { Fragment, jsx } from "react/jsx-runtime";
29
+ var PanMode = () => {
30
+ const { register } = usePointerHandlers({ modeId: "panMode" });
31
+ const { setCursor, removeCursor } = useCursor();
32
+ const { provides: viewport } = useViewportCapability();
33
+ const dragRef = useRef(null);
34
+ const handlers = useMemo(
35
+ () => ({
36
+ onPointerDown: (_, pe) => {
37
+ if (!viewport) return;
38
+ const metrics = viewport.getMetrics();
39
+ dragRef.current = {
40
+ startX: pe.clientX,
41
+ startY: pe.clientY,
42
+ startLeft: metrics.scrollLeft,
43
+ startTop: metrics.scrollTop
44
+ };
45
+ setCursor("panMode", "grabbing", 10);
46
+ },
47
+ onPointerMove: (_, pe) => {
48
+ const drag = dragRef.current;
49
+ if (!drag || !viewport) return;
50
+ const dx = pe.clientX - drag.startX;
51
+ const dy = pe.clientY - drag.startY;
52
+ viewport.scrollTo({
53
+ x: drag.startLeft - dx,
54
+ y: drag.startTop - dy
55
+ });
56
+ },
57
+ onPointerUp: () => {
58
+ const drag = dragRef.current;
59
+ if (!drag) return;
60
+ dragRef.current = null;
61
+ removeCursor("panMode");
62
+ },
63
+ onPointerLeave: () => {
64
+ const drag = dragRef.current;
65
+ if (!drag) return;
66
+ dragRef.current = null;
67
+ removeCursor("panMode");
68
+ },
69
+ onPointerCancel: () => {
70
+ const drag = dragRef.current;
71
+ if (!drag) return;
72
+ dragRef.current = null;
73
+ removeCursor("panMode");
74
+ }
75
+ }),
76
+ [viewport, setCursor, removeCursor]
77
+ );
78
+ useEffect2(() => {
79
+ if (!register) return;
80
+ return register(handlers);
81
+ }, [register, handlers]);
82
+ return /* @__PURE__ */ jsx(Fragment, {});
83
+ };
6
84
  export {
85
+ PanMode,
7
86
  usePan,
8
- usePanCapability
87
+ usePanCapability,
88
+ usePanPlugin
9
89
  };
10
90
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/react/hooks/use-pan.ts"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/react';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\n\nexport const usePan = () => usePlugin<PanPlugin>(PanPlugin.id);\nexport const usePanCapability = () => useCapability<PanPlugin>(PanPlugin.id);\n"],"mappings":";AAAA,SAAS,eAAe,iBAAiB;AACzC,SAAS,iBAAiB;AAEnB,IAAM,SAAS,MAAM,UAAqB,UAAU,EAAE;AACtD,IAAM,mBAAmB,MAAM,cAAyB,UAAU,EAAE;","names":[]}
1
+ {"version":3,"sources":["../../src/react/hooks/use-pan.ts","../../src/react/components/pan-mode.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/react';\nimport { useInteractionManagerCapability } from '@embedpdf/plugin-interaction-manager/react';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\nimport { useEffect, useState } from 'react';\n\nexport const usePanPlugin = () => usePlugin<PanPlugin>(PanPlugin.id);\nexport const usePanCapability = () => useCapability<PanPlugin>(PanPlugin.id);\n\nexport const usePan = () => {\n const { provides } = usePanCapability();\n const { provides: interactionManager } = useInteractionManagerCapability();\n\n const [isPanning, setIsPanning] = useState(false);\n\n useEffect(() => {\n if (!interactionManager) return;\n return interactionManager.onStateChange((state) => {\n setIsPanning(state.activeMode === 'panMode');\n });\n }, [interactionManager]);\n\n return {\n provides,\n isPanning,\n };\n};\n","import { useEffect, useMemo, useRef } from 'react';\nimport type { PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';\nimport { useCursor, usePointerHandlers } from '@embedpdf/plugin-interaction-manager/react';\nimport { useViewportCapability } from '@embedpdf/plugin-viewport/react';\n\nexport const PanMode = () => {\n const { register } = usePointerHandlers({ modeId: 'panMode' });\n const { setCursor, removeCursor } = useCursor();\n const { provides: viewport } = useViewportCapability();\n\n const dragRef = useRef<{\n startX: number;\n startY: number;\n startLeft: number;\n startTop: number;\n } | null>(null);\n\n const handlers = useMemo(\n (): PointerEventHandlers => ({\n onPointerDown: (_, pe) => {\n if (!viewport) return;\n\n const metrics = viewport.getMetrics();\n\n dragRef.current = {\n startX: pe.clientX,\n startY: pe.clientY,\n startLeft: metrics.scrollLeft,\n startTop: metrics.scrollTop,\n };\n\n setCursor('panMode', 'grabbing', 10);\n },\n onPointerMove: (_, pe) => {\n const drag = dragRef.current;\n if (!drag || !viewport) return;\n\n /* delta between current pointer position and where the drag started */\n const dx = pe.clientX - drag.startX;\n const dy = pe.clientY - drag.startY;\n\n viewport.scrollTo({\n x: drag.startLeft - dx,\n y: drag.startTop - dy,\n });\n },\n onPointerUp: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onPointerLeave: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onPointerCancel: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n }),\n [viewport, setCursor, removeCursor],\n );\n\n useEffect(() => {\n if (!register) return;\n return register(handlers);\n }, [register, handlers]);\n\n return <></>;\n};\n"],"mappings":";AAAA,SAAS,eAAe,iBAAiB;AACzC,SAAS,uCAAuC;AAChD,SAAS,iBAAiB;AAC1B,SAAS,WAAW,gBAAgB;AAE7B,IAAM,eAAe,MAAM,UAAqB,UAAU,EAAE;AAC5D,IAAM,mBAAmB,MAAM,cAAyB,UAAU,EAAE;AAEpE,IAAM,SAAS,MAAM;AAC1B,QAAM,EAAE,SAAS,IAAI,iBAAiB;AACtC,QAAM,EAAE,UAAU,mBAAmB,IAAI,gCAAgC;AAEzE,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,YAAU,MAAM;AACd,QAAI,CAAC,mBAAoB;AACzB,WAAO,mBAAmB,cAAc,CAAC,UAAU;AACjD,mBAAa,MAAM,eAAe,SAAS;AAAA,IAC7C,CAAC;AAAA,EACH,GAAG,CAAC,kBAAkB,CAAC;AAEvB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;ACzBA,SAAS,aAAAA,YAAW,SAAS,cAAc;AAE3C,SAAS,WAAW,0BAA0B;AAC9C,SAAS,6BAA6B;AAyE7B;AAvEF,IAAM,UAAU,MAAM;AAC3B,QAAM,EAAE,SAAS,IAAI,mBAAmB,EAAE,QAAQ,UAAU,CAAC;AAC7D,QAAM,EAAE,WAAW,aAAa,IAAI,UAAU;AAC9C,QAAM,EAAE,UAAU,SAAS,IAAI,sBAAsB;AAErD,QAAM,UAAU,OAKN,IAAI;AAEd,QAAM,WAAW;AAAA,IACf,OAA6B;AAAA,MAC3B,eAAe,CAAC,GAAG,OAAO;AACxB,YAAI,CAAC,SAAU;AAEf,cAAM,UAAU,SAAS,WAAW;AAEpC,gBAAQ,UAAU;AAAA,UAChB,QAAQ,GAAG;AAAA,UACX,QAAQ,GAAG;AAAA,UACX,WAAW,QAAQ;AAAA,UACnB,UAAU,QAAQ;AAAA,QACpB;AAEA,kBAAU,WAAW,YAAY,EAAE;AAAA,MACrC;AAAA,MACA,eAAe,CAAC,GAAG,OAAO;AACxB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,QAAQ,CAAC,SAAU;AAGxB,cAAM,KAAK,GAAG,UAAU,KAAK;AAC7B,cAAM,KAAK,GAAG,UAAU,KAAK;AAE7B,iBAAS,SAAS;AAAA,UAChB,GAAG,KAAK,YAAY;AAAA,UACpB,GAAG,KAAK,WAAW;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,MACA,aAAa,MAAM;AACjB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,MACA,gBAAgB,MAAM;AACpB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,MACA,iBAAiB,MAAM;AACrB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,IACF;AAAA,IACA,CAAC,UAAU,WAAW,YAAY;AAAA,EACpC;AAEA,EAAAA,WAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACf,WAAO,SAAS,QAAQ;AAAA,EAC1B,GAAG,CAAC,UAAU,QAAQ,CAAC;AAEvB,SAAO,gCAAE;AACX;","names":["useEffect"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embedpdf/plugin-pan",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",
@@ -27,17 +27,17 @@
27
27
  "@types/react": "^18.2.0",
28
28
  "tsup": "^8.0.0",
29
29
  "typescript": "^5.0.0",
30
- "@embedpdf/models": "1.0.0",
31
- "@embedpdf/plugin-interaction-manager": "1.0.0",
32
- "@embedpdf/plugin-viewport": "1.0.0"
30
+ "@embedpdf/plugin-interaction-manager": "1.0.2",
31
+ "@embedpdf/plugin-viewport": "1.0.2",
32
+ "@embedpdf/models": "1.0.2"
33
33
  },
34
34
  "peerDependencies": {
35
35
  "react": ">=16.8.0",
36
36
  "react-dom": ">=16.8.0",
37
37
  "preact": "^10.26.4",
38
- "@embedpdf/plugin-interaction-manager": "1.0.0",
39
- "@embedpdf/core": "1.0.0",
40
- "@embedpdf/plugin-viewport": "1.0.0"
38
+ "@embedpdf/plugin-interaction-manager": "1.0.2",
39
+ "@embedpdf/plugin-viewport": "1.0.2",
40
+ "@embedpdf/core": "1.0.2"
41
41
  },
42
42
  "files": [
43
43
  "dist",