@embedpdf/plugin-pan 1.0.20 → 1.0.21

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
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/core"),a=require("@embedpdf/plugin-interaction-manager"),t=class extends e.BasePlugin{constructor(e,t,n){var i;super(e,t),this.config=n,this.interactionManager=null==(i=t.getPlugin(a.InteractionManagerPlugin.id))?void 0:i.provides(),this.interactionManager.registerMode({id:"panMode",scope:"global",exclusive:!1,cursor:"grab",wantsRawTouch:!1}),"always"===n.defaultMode&&this.makePanDefault(!0)}async initialize(e){}makePanDefault(e=!0){this.interactionManager.setDefaultMode("panMode"),e&&this.interactionManager.activateDefaultMode()}buildCapability(){return{makePanDefault:(e=!0)=>this.makePanDefault(e),enablePan:()=>this.interactionManager.activate("panMode"),disablePan:()=>this.interactionManager.activateDefaultMode(),togglePan:()=>{"panMode"===this.interactionManager.getActiveMode()?this.interactionManager.activateDefaultMode():this.interactionManager.activate("panMode")}}}};t.id="pan";let n=t;const i="pan",r={id:i,name:"Pan Plugin",version:"1.0.0",provides:["pan"],requires:["interaction-manager"],optional:[],defaultConfig:{enabled:!0,defaultMode:"mobile"}},o={manifest:r,create:(e,a)=>new n(i,e,a),reducer:()=>{},initialState:{}};exports.PAN_PLUGIN_ID=i,exports.PanPlugin=n,exports.PanPluginPackage=o,exports.manifest=r;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/core"),t=require("@embedpdf/plugin-interaction-manager"),a=require("@embedpdf/plugin-viewport"),n=class extends e.BasePlugin{constructor(n,i,r){var o,s;super(n,i),this.panMode$=e.createBehaviorEmitter(),this.config=r,this.interactionManager=null==(o=i.getPlugin(t.InteractionManagerPlugin.id))?void 0:o.provides(),this.viewport=null==(s=i.getPlugin(a.ViewportPlugin.id))?void 0:s.provides(),this.interactionManager&&(this.interactionManager.registerMode({id:"panMode",scope:"global",exclusive:!1,cursor:"grab",wantsRawTouch:!1}),this.unsubscribePanModeChange=this.interactionManager.onStateChange((e=>{"panMode"===e.activeMode?this.panMode$.emit(!0):this.panMode$.emit(!1)})),this.registerPanHandlers()),"always"===r.defaultMode&&this.makePanDefault(!0)}async initialize(e){}async destroy(){var e,t;null==(e=this.unregisterHandlers)||e.call(this),null==(t=this.unsubscribePanModeChange)||t.call(this),await super.destroy()}registerPanHandlers(){let e=null;const t={onMouseDown:(t,a)=>{const n=this.viewport.getMetrics();e={startX:a.clientX,startY:a.clientY,startLeft:n.scrollLeft,startTop:n.scrollTop},this.interactionManager.setCursor("panMode","grabbing",10)},onMouseMove:(t,a)=>{if(!e)return;const n=a.clientX-e.startX,i=a.clientY-e.startY;this.viewport.scrollTo({x:e.startLeft-n,y:e.startTop-i})},onMouseUp:()=>{e&&(e=null,this.interactionManager.removeCursor("panMode"))},onMouseLeave:()=>{e&&(e=null,this.interactionManager.removeCursor("panMode"))},onMouseCancel:()=>{e&&(e=null,this.interactionManager.removeCursor("panMode"))}};this.unregisterHandlers=this.interactionManager.registerHandlers({modeId:"panMode",handlers:t})}makePanDefault(e=!0){this.interactionManager&&(this.interactionManager.setDefaultMode("panMode"),e&&this.interactionManager.activateDefaultMode())}buildCapability(){return{onPanModeChange:this.panMode$.on,makePanDefault:(e=!0)=>this.makePanDefault(e),enablePan:()=>{var e;return null==(e=this.interactionManager)?void 0:e.activate("panMode")},disablePan:()=>{var e;return null==(e=this.interactionManager)?void 0:e.activateDefaultMode()},togglePan:()=>{var e,t,a;"panMode"===(null==(e=this.interactionManager)?void 0:e.getActiveMode())?null==(t=this.interactionManager)||t.activateDefaultMode():null==(a=this.interactionManager)||a.activate("panMode")}}}};n.id="pan";let i=n;const r="pan",o={id:r,name:"Pan Plugin",version:"1.0.0",provides:["pan"],requires:["interaction-manager","viewport"],optional:[],defaultConfig:{enabled:!0,defaultMode:"mobile"}},s={manifest:o,create:(e,t)=>new i(r,e,t),reducer:()=>{},initialState:{}};exports.PAN_PLUGIN_ID=r,exports.PanPlugin=i,exports.PanPluginPackage=s,exports.manifest=o;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","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 public config: PanPluginConfig;\n\n constructor(id: string, registry: PluginRegistry, config: PanPluginConfig) {\n super(id, registry);\n\n this.config = config;\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 wantsRawTouch: false,\n });\n\n if (config.defaultMode === 'always') {\n this.makePanDefault(true);\n }\n }\n\n async initialize(_: PanPluginConfig): Promise<void> {}\n\n private makePanDefault(autoActivate: boolean = true) {\n this.interactionManager.setDefaultMode('panMode');\n if (autoActivate) {\n this.interactionManager.activateDefaultMode();\n }\n }\n\n protected buildCapability(): PanCapability {\n return {\n makePanDefault: (autoActivate: boolean = true) => this.makePanDefault(autoActivate),\n enablePan: () => this.interactionManager.activate('panMode'),\n disablePan: () => this.interactionManager.activateDefaultMode(),\n togglePan: () => {\n if (this.interactionManager.getActiveMode() === 'panMode') {\n this.interactionManager.activateDefaultMode();\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 defaultMode: 'mobile',\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, config) => new PanPlugin(PAN_PLUGIN_ID, registry, config),\n reducer: () => {},\n initialState: {},\n};\n\nexport * from './pan-plugin';\nexport * from './types';\nexport * from './manifest';\n"],"names":["_PanPlugin","BasePlugin","constructor","id","registry","config","super","this","interactionManager","_a","getPlugin","InteractionManagerPlugin","provides","registerMode","scope","exclusive","cursor","wantsRawTouch","defaultMode","makePanDefault","initialize","_","autoActivate","setDefaultMode","activateDefaultMode","buildCapability","enablePan","activate","disablePan","togglePan","getActiveMode","PanPlugin","PAN_PLUGIN_ID","manifest","name","version","requires","optional","defaultConfig","enabled","PanPluginPackage","create","reducer","initialState"],"mappings":"oKAQaA,EAAN,cAAwBC,EAAAA,WAM7B,WAAAC,CAAYC,EAAYC,EAA0BC,SAChDC,MAAMH,EAAIC,GAEVG,KAAKF,OAASA,EAEdE,KAAKC,mBAAqB,OAAAC,EACvBL,EAAAM,UAAoCC,EAAAA,yBAAyBR,UAC5D,EAAAM,EAAAG,WAEJL,KAAKC,mBAAmBK,aAAa,CACnCV,GAAI,UACJW,MAAO,SACPC,WAAW,EACXC,OAAQ,OACRC,eAAe,IAGU,WAAvBZ,EAAOa,aACTX,KAAKY,gBAAe,EACtB,CAGF,gBAAMC,CAAWC,GAAmC,CAE5C,cAAAF,CAAeG,GAAwB,GACxCf,KAAAC,mBAAmBe,eAAe,WACnCD,GACFf,KAAKC,mBAAmBgB,qBAC1B,CAGQ,eAAAC,GACD,MAAA,CACLN,eAAgB,CAACG,GAAwB,IAASf,KAAKY,eAAeG,GACtEI,UAAW,IAAMnB,KAAKC,mBAAmBmB,SAAS,WAClDC,WAAY,IAAMrB,KAAKC,mBAAmBgB,sBAC1CK,UAAW,KACuC,YAA5CtB,KAAKC,mBAAmBsB,gBAC1BvB,KAAKC,mBAAmBgB,sBAEnBjB,KAAAC,mBAAmBmB,SAAS,UAAS,EAGhD,GAhDF3B,EAAgBG,GAAK,MADhB,IAAM4B,EAAN/B,ECLA,MAAMgC,EAAgB,MAEhBC,EAA4C,CACvD9B,GAAI6B,EACJE,KAAM,aACNC,QAAS,QACTvB,SAAU,CAAC,OACXwB,SAAU,CAAC,uBACXC,SAAU,GACVC,cAAe,CACbC,SAAS,EACTrB,YAAa,WCRJsB,EAA8D,CACzEP,WACAQ,OAAQ,CAACrC,EAAUC,IAAW,IAAI0B,EAAUC,EAAe5B,EAAUC,GACrEqC,QAAS,OACTC,aAAc,CAAA"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/lib/pan-plugin.ts","../src/lib/manifest.ts","../src/lib/index.ts"],"sourcesContent":["import { BasePlugin, createBehaviorEmitter, PluginRegistry, Unsubscribe } from '@embedpdf/core';\nimport {\n InteractionManagerCapability,\n InteractionManagerPlugin,\n} from '@embedpdf/plugin-interaction-manager';\n\nimport { PanCapability, PanPluginConfig } from './types';\nimport { ViewportCapability, ViewportPlugin } from '@embedpdf/plugin-viewport';\n\nexport class PanPlugin extends BasePlugin<PanPluginConfig, PanCapability> {\n static readonly id = 'pan' as const;\n\n private readonly panMode$ = createBehaviorEmitter<boolean>();\n\n private interactionManager: InteractionManagerCapability;\n private viewport: ViewportCapability;\n public config: PanPluginConfig;\n\n private unregisterHandlers?: () => void;\n private unsubscribePanModeChange?: Unsubscribe;\n\n constructor(id: string, registry: PluginRegistry, config: PanPluginConfig) {\n super(id, registry);\n\n this.config = config;\n\n this.interactionManager = registry\n .getPlugin<InteractionManagerPlugin>(InteractionManagerPlugin.id)\n ?.provides()!;\n this.viewport = registry.getPlugin<ViewportPlugin>(ViewportPlugin.id)?.provides()!;\n\n if (this.interactionManager) {\n this.interactionManager.registerMode({\n id: 'panMode',\n scope: 'global',\n exclusive: false,\n cursor: 'grab',\n wantsRawTouch: false,\n });\n\n this.unsubscribePanModeChange = this.interactionManager.onStateChange((state) => {\n if (state.activeMode === 'panMode') {\n this.panMode$.emit(true);\n } else {\n this.panMode$.emit(false);\n }\n });\n\n // Register pan handlers immediately\n this.registerPanHandlers();\n }\n\n // Handle 'always' mode - this is safe on server side\n if (config.defaultMode === 'always') {\n this.makePanDefault(true);\n }\n }\n\n async initialize(_: PanPluginConfig): Promise<void> {}\n\n async destroy(): Promise<void> {\n this.unregisterHandlers?.();\n this.unsubscribePanModeChange?.();\n await super.destroy();\n }\n\n private registerPanHandlers() {\n let dragState: {\n startX: number;\n startY: number;\n startLeft: number;\n startTop: number;\n } | null = null;\n\n const handlers = {\n onMouseDown: (_: any, pe: MouseEvent) => {\n const metrics = this.viewport.getMetrics();\n\n dragState = {\n startX: pe.clientX,\n startY: pe.clientY,\n startLeft: metrics.scrollLeft,\n startTop: metrics.scrollTop,\n };\n\n this.interactionManager.setCursor('panMode', 'grabbing', 10);\n },\n onMouseMove: (_: any, pe: MouseEvent) => {\n if (!dragState) return;\n\n /* delta between current pointer position and where the drag started */\n const dx = pe.clientX - dragState.startX;\n const dy = pe.clientY - dragState.startY;\n\n this.viewport.scrollTo({\n x: dragState.startLeft - dx,\n y: dragState.startTop - dy,\n });\n },\n onMouseUp: () => {\n if (!dragState) return;\n\n dragState = null;\n this.interactionManager.removeCursor('panMode');\n },\n onMouseLeave: () => {\n if (!dragState) return;\n\n dragState = null;\n this.interactionManager.removeCursor('panMode');\n },\n onMouseCancel: () => {\n if (!dragState) return;\n\n dragState = null;\n this.interactionManager.removeCursor('panMode');\n },\n };\n\n this.unregisterHandlers = this.interactionManager.registerHandlers({\n modeId: 'panMode',\n handlers,\n });\n }\n\n private makePanDefault(autoActivate: boolean = true) {\n if (!this.interactionManager) return;\n\n this.interactionManager.setDefaultMode('panMode');\n if (autoActivate) {\n this.interactionManager.activateDefaultMode();\n }\n }\n\n protected buildCapability(): PanCapability {\n return {\n onPanModeChange: this.panMode$.on,\n makePanDefault: (autoActivate: boolean = true) => this.makePanDefault(autoActivate),\n enablePan: () => this.interactionManager?.activate('panMode'),\n disablePan: () => this.interactionManager?.activateDefaultMode(),\n togglePan: () => {\n if (this.interactionManager?.getActiveMode() === 'panMode') {\n this.interactionManager?.activateDefaultMode();\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', 'viewport'],\n optional: [],\n defaultConfig: {\n enabled: true,\n defaultMode: 'mobile',\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, config) => new PanPlugin(PAN_PLUGIN_ID, registry, config),\n reducer: () => {},\n initialState: {},\n};\n\nexport * from './pan-plugin';\nexport * from './types';\nexport * from './manifest';\n"],"names":["_PanPlugin","BasePlugin","constructor","id","registry","config","super","this","panMode$","createBehaviorEmitter","interactionManager","_a","getPlugin","InteractionManagerPlugin","provides","viewport","_b","ViewportPlugin","registerMode","scope","exclusive","cursor","wantsRawTouch","unsubscribePanModeChange","onStateChange","state","activeMode","emit","registerPanHandlers","defaultMode","makePanDefault","initialize","_","destroy","unregisterHandlers","call","dragState","handlers","onMouseDown","pe","metrics","getMetrics","startX","clientX","startY","clientY","startLeft","scrollLeft","startTop","scrollTop","setCursor","onMouseMove","dx","dy","scrollTo","x","y","onMouseUp","removeCursor","onMouseLeave","onMouseCancel","registerHandlers","modeId","autoActivate","setDefaultMode","activateDefaultMode","buildCapability","onPanModeChange","on","enablePan","activate","disablePan","togglePan","getActiveMode","_c","PanPlugin","PAN_PLUGIN_ID","manifest","name","version","requires","optional","defaultConfig","enabled","PanPluginPackage","create","reducer","initialState"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,25 +1,88 @@
1
- import { BasePlugin } from "@embedpdf/core";
1
+ import { BasePlugin, createBehaviorEmitter } from "@embedpdf/core";
2
2
  import { InteractionManagerPlugin } from "@embedpdf/plugin-interaction-manager";
3
+ import { ViewportPlugin } from "@embedpdf/plugin-viewport";
3
4
  const _PanPlugin = class _PanPlugin extends BasePlugin {
4
5
  constructor(id, registry, config) {
5
- var _a;
6
+ var _a, _b;
6
7
  super(id, registry);
8
+ this.panMode$ = createBehaviorEmitter();
7
9
  this.config = config;
8
10
  this.interactionManager = (_a = registry.getPlugin(InteractionManagerPlugin.id)) == null ? void 0 : _a.provides();
9
- this.interactionManager.registerMode({
10
- id: "panMode",
11
- scope: "global",
12
- exclusive: false,
13
- cursor: "grab",
14
- wantsRawTouch: false
15
- });
11
+ this.viewport = (_b = registry.getPlugin(ViewportPlugin.id)) == null ? void 0 : _b.provides();
12
+ if (this.interactionManager) {
13
+ this.interactionManager.registerMode({
14
+ id: "panMode",
15
+ scope: "global",
16
+ exclusive: false,
17
+ cursor: "grab",
18
+ wantsRawTouch: false
19
+ });
20
+ this.unsubscribePanModeChange = this.interactionManager.onStateChange((state) => {
21
+ if (state.activeMode === "panMode") {
22
+ this.panMode$.emit(true);
23
+ } else {
24
+ this.panMode$.emit(false);
25
+ }
26
+ });
27
+ this.registerPanHandlers();
28
+ }
16
29
  if (config.defaultMode === "always") {
17
30
  this.makePanDefault(true);
18
31
  }
19
32
  }
20
33
  async initialize(_) {
21
34
  }
35
+ async destroy() {
36
+ var _a, _b;
37
+ (_a = this.unregisterHandlers) == null ? void 0 : _a.call(this);
38
+ (_b = this.unsubscribePanModeChange) == null ? void 0 : _b.call(this);
39
+ await super.destroy();
40
+ }
41
+ registerPanHandlers() {
42
+ let dragState = null;
43
+ const handlers = {
44
+ onMouseDown: (_, pe) => {
45
+ const metrics = this.viewport.getMetrics();
46
+ dragState = {
47
+ startX: pe.clientX,
48
+ startY: pe.clientY,
49
+ startLeft: metrics.scrollLeft,
50
+ startTop: metrics.scrollTop
51
+ };
52
+ this.interactionManager.setCursor("panMode", "grabbing", 10);
53
+ },
54
+ onMouseMove: (_, pe) => {
55
+ if (!dragState) return;
56
+ const dx = pe.clientX - dragState.startX;
57
+ const dy = pe.clientY - dragState.startY;
58
+ this.viewport.scrollTo({
59
+ x: dragState.startLeft - dx,
60
+ y: dragState.startTop - dy
61
+ });
62
+ },
63
+ onMouseUp: () => {
64
+ if (!dragState) return;
65
+ dragState = null;
66
+ this.interactionManager.removeCursor("panMode");
67
+ },
68
+ onMouseLeave: () => {
69
+ if (!dragState) return;
70
+ dragState = null;
71
+ this.interactionManager.removeCursor("panMode");
72
+ },
73
+ onMouseCancel: () => {
74
+ if (!dragState) return;
75
+ dragState = null;
76
+ this.interactionManager.removeCursor("panMode");
77
+ }
78
+ };
79
+ this.unregisterHandlers = this.interactionManager.registerHandlers({
80
+ modeId: "panMode",
81
+ handlers
82
+ });
83
+ }
22
84
  makePanDefault(autoActivate = true) {
85
+ if (!this.interactionManager) return;
23
86
  this.interactionManager.setDefaultMode("panMode");
24
87
  if (autoActivate) {
25
88
  this.interactionManager.activateDefaultMode();
@@ -27,14 +90,22 @@ const _PanPlugin = class _PanPlugin extends BasePlugin {
27
90
  }
28
91
  buildCapability() {
29
92
  return {
93
+ onPanModeChange: this.panMode$.on,
30
94
  makePanDefault: (autoActivate = true) => this.makePanDefault(autoActivate),
31
- enablePan: () => this.interactionManager.activate("panMode"),
32
- disablePan: () => this.interactionManager.activateDefaultMode(),
95
+ enablePan: () => {
96
+ var _a;
97
+ return (_a = this.interactionManager) == null ? void 0 : _a.activate("panMode");
98
+ },
99
+ disablePan: () => {
100
+ var _a;
101
+ return (_a = this.interactionManager) == null ? void 0 : _a.activateDefaultMode();
102
+ },
33
103
  togglePan: () => {
34
- if (this.interactionManager.getActiveMode() === "panMode") {
35
- this.interactionManager.activateDefaultMode();
104
+ var _a, _b, _c;
105
+ if (((_a = this.interactionManager) == null ? void 0 : _a.getActiveMode()) === "panMode") {
106
+ (_b = this.interactionManager) == null ? void 0 : _b.activateDefaultMode();
36
107
  } else {
37
- this.interactionManager.activate("panMode");
108
+ (_c = this.interactionManager) == null ? void 0 : _c.activate("panMode");
38
109
  }
39
110
  }
40
111
  };
@@ -48,7 +119,7 @@ const manifest = {
48
119
  name: "Pan Plugin",
49
120
  version: "1.0.0",
50
121
  provides: ["pan"],
51
- requires: ["interaction-manager"],
122
+ requires: ["interaction-manager", "viewport"],
52
123
  optional: [],
53
124
  defaultConfig: {
54
125
  enabled: true,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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 public config: PanPluginConfig;\n\n constructor(id: string, registry: PluginRegistry, config: PanPluginConfig) {\n super(id, registry);\n\n this.config = config;\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 wantsRawTouch: false,\n });\n\n if (config.defaultMode === 'always') {\n this.makePanDefault(true);\n }\n }\n\n async initialize(_: PanPluginConfig): Promise<void> {}\n\n private makePanDefault(autoActivate: boolean = true) {\n this.interactionManager.setDefaultMode('panMode');\n if (autoActivate) {\n this.interactionManager.activateDefaultMode();\n }\n }\n\n protected buildCapability(): PanCapability {\n return {\n makePanDefault: (autoActivate: boolean = true) => this.makePanDefault(autoActivate),\n enablePan: () => this.interactionManager.activate('panMode'),\n disablePan: () => this.interactionManager.activateDefaultMode(),\n togglePan: () => {\n if (this.interactionManager.getActiveMode() === 'panMode') {\n this.interactionManager.activateDefaultMode();\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 defaultMode: 'mobile',\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, config) => new PanPlugin(PAN_PLUGIN_ID, registry, config),\n reducer: () => {},\n initialState: {},\n};\n\nexport * from './pan-plugin';\nexport * from './types';\nexport * from './manifest';\n"],"names":[],"mappings":";;AAQO,MAAM,aAAN,MAAM,mBAAkB,WAA2C;AAAA,EAMxE,YAAY,IAAY,UAA0B,QAAyB;;AACzE,UAAM,IAAI,QAAQ;AAElB,SAAK,SAAS;AAEd,SAAK,sBAAqB,cACvB,UAAoC,yBAAyB,EAAE,MADxC,mBAEtB;AAEJ,SAAK,mBAAmB,aAAa;AAAA,MACnC,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,eAAe;AAAA,IAAA,CAChB;AAEG,QAAA,OAAO,gBAAgB,UAAU;AACnC,WAAK,eAAe,IAAI;AAAA,IAAA;AAAA,EAC1B;AAAA,EAGF,MAAM,WAAW,GAAmC;AAAA,EAAA;AAAA,EAE5C,eAAe,eAAwB,MAAM;AAC9C,SAAA,mBAAmB,eAAe,SAAS;AAChD,QAAI,cAAc;AAChB,WAAK,mBAAmB,oBAAoB;AAAA,IAAA;AAAA,EAC9C;AAAA,EAGQ,kBAAiC;AAClC,WAAA;AAAA,MACL,gBAAgB,CAAC,eAAwB,SAAS,KAAK,eAAe,YAAY;AAAA,MAClF,WAAW,MAAM,KAAK,mBAAmB,SAAS,SAAS;AAAA,MAC3D,YAAY,MAAM,KAAK,mBAAmB,oBAAoB;AAAA,MAC9D,WAAW,MAAM;AACf,YAAI,KAAK,mBAAmB,cAAc,MAAM,WAAW;AACzD,eAAK,mBAAmB,oBAAoB;AAAA,QAAA,OACvC;AACA,eAAA,mBAAmB,SAAS,SAAS;AAAA,QAAA;AAAA,MAC5C;AAAA,IAEJ;AAAA,EAAA;AAEJ;AAlDE,WAAgB,KAAK;AADhB,IAAM,YAAN;ACLA,MAAM,gBAAgB;AAEtB,MAAM,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,IACT,aAAa;AAAA,EAAA;AAEjB;ACVO,MAAM,mBAA8D;AAAA,EACzE;AAAA,EACA,QAAQ,CAAC,UAAU,WAAW,IAAI,UAAU,eAAe,UAAU,MAAM;AAAA,EAC3E,SAAS,MAAM;AAAA,EAAC;AAAA,EAChB,cAAc,CAAA;AAChB;"}
1
+ {"version":3,"file":"index.js","sources":["../src/lib/pan-plugin.ts","../src/lib/manifest.ts","../src/lib/index.ts"],"sourcesContent":["import { BasePlugin, createBehaviorEmitter, PluginRegistry, Unsubscribe } from '@embedpdf/core';\nimport {\n InteractionManagerCapability,\n InteractionManagerPlugin,\n} from '@embedpdf/plugin-interaction-manager';\n\nimport { PanCapability, PanPluginConfig } from './types';\nimport { ViewportCapability, ViewportPlugin } from '@embedpdf/plugin-viewport';\n\nexport class PanPlugin extends BasePlugin<PanPluginConfig, PanCapability> {\n static readonly id = 'pan' as const;\n\n private readonly panMode$ = createBehaviorEmitter<boolean>();\n\n private interactionManager: InteractionManagerCapability;\n private viewport: ViewportCapability;\n public config: PanPluginConfig;\n\n private unregisterHandlers?: () => void;\n private unsubscribePanModeChange?: Unsubscribe;\n\n constructor(id: string, registry: PluginRegistry, config: PanPluginConfig) {\n super(id, registry);\n\n this.config = config;\n\n this.interactionManager = registry\n .getPlugin<InteractionManagerPlugin>(InteractionManagerPlugin.id)\n ?.provides()!;\n this.viewport = registry.getPlugin<ViewportPlugin>(ViewportPlugin.id)?.provides()!;\n\n if (this.interactionManager) {\n this.interactionManager.registerMode({\n id: 'panMode',\n scope: 'global',\n exclusive: false,\n cursor: 'grab',\n wantsRawTouch: false,\n });\n\n this.unsubscribePanModeChange = this.interactionManager.onStateChange((state) => {\n if (state.activeMode === 'panMode') {\n this.panMode$.emit(true);\n } else {\n this.panMode$.emit(false);\n }\n });\n\n // Register pan handlers immediately\n this.registerPanHandlers();\n }\n\n // Handle 'always' mode - this is safe on server side\n if (config.defaultMode === 'always') {\n this.makePanDefault(true);\n }\n }\n\n async initialize(_: PanPluginConfig): Promise<void> {}\n\n async destroy(): Promise<void> {\n this.unregisterHandlers?.();\n this.unsubscribePanModeChange?.();\n await super.destroy();\n }\n\n private registerPanHandlers() {\n let dragState: {\n startX: number;\n startY: number;\n startLeft: number;\n startTop: number;\n } | null = null;\n\n const handlers = {\n onMouseDown: (_: any, pe: MouseEvent) => {\n const metrics = this.viewport.getMetrics();\n\n dragState = {\n startX: pe.clientX,\n startY: pe.clientY,\n startLeft: metrics.scrollLeft,\n startTop: metrics.scrollTop,\n };\n\n this.interactionManager.setCursor('panMode', 'grabbing', 10);\n },\n onMouseMove: (_: any, pe: MouseEvent) => {\n if (!dragState) return;\n\n /* delta between current pointer position and where the drag started */\n const dx = pe.clientX - dragState.startX;\n const dy = pe.clientY - dragState.startY;\n\n this.viewport.scrollTo({\n x: dragState.startLeft - dx,\n y: dragState.startTop - dy,\n });\n },\n onMouseUp: () => {\n if (!dragState) return;\n\n dragState = null;\n this.interactionManager.removeCursor('panMode');\n },\n onMouseLeave: () => {\n if (!dragState) return;\n\n dragState = null;\n this.interactionManager.removeCursor('panMode');\n },\n onMouseCancel: () => {\n if (!dragState) return;\n\n dragState = null;\n this.interactionManager.removeCursor('panMode');\n },\n };\n\n this.unregisterHandlers = this.interactionManager.registerHandlers({\n modeId: 'panMode',\n handlers,\n });\n }\n\n private makePanDefault(autoActivate: boolean = true) {\n if (!this.interactionManager) return;\n\n this.interactionManager.setDefaultMode('panMode');\n if (autoActivate) {\n this.interactionManager.activateDefaultMode();\n }\n }\n\n protected buildCapability(): PanCapability {\n return {\n onPanModeChange: this.panMode$.on,\n makePanDefault: (autoActivate: boolean = true) => this.makePanDefault(autoActivate),\n enablePan: () => this.interactionManager?.activate('panMode'),\n disablePan: () => this.interactionManager?.activateDefaultMode(),\n togglePan: () => {\n if (this.interactionManager?.getActiveMode() === 'panMode') {\n this.interactionManager?.activateDefaultMode();\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', 'viewport'],\n optional: [],\n defaultConfig: {\n enabled: true,\n defaultMode: 'mobile',\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, config) => new PanPlugin(PAN_PLUGIN_ID, registry, config),\n reducer: () => {},\n initialState: {},\n};\n\nexport * from './pan-plugin';\nexport * from './types';\nexport * from './manifest';\n"],"names":[],"mappings":"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"}
@@ -2,10 +2,16 @@ import { BasePlugin, PluginRegistry } from '@embedpdf/core';
2
2
  import { PanCapability, PanPluginConfig } from './types';
3
3
  export declare class PanPlugin extends BasePlugin<PanPluginConfig, PanCapability> {
4
4
  static readonly id: "pan";
5
+ private readonly panMode$;
5
6
  private interactionManager;
7
+ private viewport;
6
8
  config: PanPluginConfig;
9
+ private unregisterHandlers?;
10
+ private unsubscribePanModeChange?;
7
11
  constructor(id: string, registry: PluginRegistry, config: PanPluginConfig);
8
12
  initialize(_: PanPluginConfig): Promise<void>;
13
+ destroy(): Promise<void>;
14
+ private registerPanHandlers;
9
15
  private makePanDefault;
10
16
  protected buildCapability(): PanCapability;
11
17
  }
@@ -1,4 +1,4 @@
1
- import { BasePluginConfig } from '@embedpdf/core';
1
+ import { BasePluginConfig, EventHook } from '@embedpdf/core';
2
2
  export type PanDefaultMode = 'never' | 'mobile' | 'always';
3
3
  export interface PanPluginConfig extends BasePluginConfig {
4
4
  /** When should pan be the default interaction mode?
@@ -8,6 +8,7 @@ export interface PanPluginConfig extends BasePluginConfig {
8
8
  defaultMode?: PanDefaultMode;
9
9
  }
10
10
  export interface PanCapability {
11
+ onPanModeChange: EventHook<boolean>;
11
12
  enablePan: () => void;
12
13
  disablePan: () => void;
13
14
  togglePan: () => void;
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/core/preact"),r=require("@embedpdf/plugin-interaction-manager/preact"),t=require("@embedpdf/plugin-pan");require("preact");const n=require("preact/hooks"),o=require("preact/jsx-runtime"),u=require("@embedpdf/plugin-viewport/preact"),s=()=>e.usePlugin(t.PanPlugin.id),i=()=>e.useCapability(t.PanPlugin.id);exports.PanMode=()=>{const{register:e}=r.usePointerHandlers({modeId:"panMode"}),{setCursor:t,removeCursor:a}=r.useCursor(),{provides:c}=u.useViewportCapability(),{provides:p}=i(),{plugin:l}=s(),d=n.useRef(null);n.useEffect((()=>{var e;if(!p||!l)return;const r=(null==(e=l.config)?void 0:e.defaultMode)??"never",t="undefined"!=typeof window&&("ontouchstart"in window||navigator.maxTouchPoints>0);"mobile"===r&&t&&p.makePanDefault()}),[p,l]);const f=n.useMemo((()=>({onMouseDown:(e,r)=>{if(!c)return;const n=c.getMetrics();d.current={startX:r.clientX,startY:r.clientY,startLeft:n.scrollLeft,startTop:n.scrollTop},t("panMode","grabbing",10)},onMouseMove:(e,r)=>{const t=d.current;if(!t||!c)return;const n=r.clientX-t.startX,o=r.clientY-t.startY;c.scrollTo({x:t.startLeft-n,y:t.startTop-o})},onMouseUp:()=>{d.current&&(d.current=null,a("panMode"))},onMouseLeave:()=>{d.current&&(d.current=null,a("panMode"))},onMouseCancel:()=>{d.current&&(d.current=null,a("panMode"))}})),[c,t,a]);return n.useEffect((()=>{if(e)return e(f)}),[e,f]),o.jsx(o.Fragment,{})},exports.usePan=()=>{const{provides:e}=i(),{provides:t}=r.useInteractionManagerCapability(),[o,u]=n.useState(!1);return n.useEffect((()=>{if(t)return t.onStateChange((e=>{u("panMode"===e.activeMode)}))}),[t]),{provides:e,isPanning:o}},exports.usePanCapability=i,exports.usePanPlugin=s;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/core"),t=require("@embedpdf/plugin-pan");require("preact");const n=require("preact/hooks"),r=require("@embedpdf/core/preact"),a=()=>r.usePlugin(t.PanPlugin.id),o=()=>r.useCapability(t.PanPlugin.id),i=()=>{const{provides:e}=o(),{plugin:t}=a();return n.useEffect((()=>{var n;if(!e||!t)return;const r=(null==(n=t.config)?void 0:n.defaultMode)??"never",a="undefined"!=typeof window&&("ontouchstart"in window||navigator.maxTouchPoints>0);"mobile"===r&&a&&e.makePanDefault()}),[e,t]),null},u=e.createPluginPackage(t.PanPluginPackage).addUtility(i).build();exports.PanMode=i,exports.PanPluginPackage=u,exports.usePan=()=>{const{provides:e}=o(),[t,r]=n.useState(!1);return n.useEffect((()=>{if(e)return e.onPanModeChange((e=>{r(e)}))}),[e]),{provides:e,isPanning:t}},exports.usePanCapability=o,exports.usePanPlugin=a,Object.keys(t).forEach((e=>{"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:()=>t[e]})}));
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/shared/hooks/use-pan.ts","../../src/shared/components/pan-mode.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport { useInteractionManagerCapability } from '@embedpdf/plugin-interaction-manager/@framework';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\nimport { useEffect, useState } from '@framework';\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 '@framework';\nimport type { PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';\nimport { useCursor, usePointerHandlers } from '@embedpdf/plugin-interaction-manager/@framework';\nimport { useViewportCapability } from '@embedpdf/plugin-viewport/@framework';\nimport { usePanCapability, usePanPlugin } from '../hooks';\n\nexport const PanMode = () => {\n const { register } = usePointerHandlers({ modeId: 'panMode' });\n const { setCursor, removeCursor } = useCursor();\n const { provides: viewport } = useViewportCapability();\n const { provides: pan } = usePanCapability();\n const { plugin: panPlugin } = usePanPlugin();\n\n const dragRef = useRef<{\n startX: number;\n startY: number;\n startLeft: number;\n startTop: number;\n } | null>(null);\n\n useEffect(() => {\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 }, [pan, panPlugin]);\n\n const handlers = useMemo(\n (): PointerEventHandlers => ({\n onMouseDown: (_, 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 onMouseMove: (_, 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 onMouseUp: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onMouseLeave: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onMouseCancel: () => {\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"],"names":["usePanPlugin","usePlugin","PanPlugin","id","usePanCapability","useCapability","register","usePointerHandlers","modeId","setCursor","removeCursor","useCursor","provides","viewport","useViewportCapability","pan","plugin","panPlugin","dragRef","useRef","useEffect","mode","_a","config","defaultMode","SUPPORT_TOUCH","window","navigator","maxTouchPoints","makePanDefault","handlers","useMemo","onMouseDown","_","pe","metrics","getMetrics","current","startX","clientX","startY","clientY","startLeft","scrollLeft","startTop","scrollTop","onMouseMove","drag","dx","dy","scrollTo","x","y","onMouseUp","onMouseLeave","onMouseCancel","jsxRuntime","jsx","Fragment","interactionManager","useInteractionManagerCapability","isPanning","setIsPanning","useState","onStateChange","state","activeMode"],"mappings":"oVAKaA,EAAe,IAAMC,YAAqBC,EAAAA,UAAUC,IACpDC,EAAmB,IAAMC,gBAAyBH,EAAAA,UAAUC,oBCAlD,KACf,MAAAG,SAAEA,GAAaC,EAAAA,mBAAmB,CAAEC,OAAQ,aAC5CC,UAAEA,EAAAC,aAAWA,GAAiBC,eAC5BC,SAAUC,GAAaC,2BACvBF,SAAUG,GAAQX,KAClBY,OAAQC,GAAcjB,IAExBkB,EAAUC,SAKN,MAEVC,EAAAA,WAAU,WACJ,IAACL,IAAQE,EAAW,OAElB,MAAAI,GAAO,OAAAC,EAAAL,EAAUM,aAAV,EAAAD,EAAkBE,cAAe,QACxCC,EACc,oBAAXC,SAA2B,iBAAkBA,QAAUC,UAAUC,eAAiB,GAE9E,WAATP,GAAqBI,GACvBV,EAAIc,gBAAe,GAEpB,CAACd,EAAKE,IAET,MAAMa,EAAWC,EAAAA,SACf,KAA6B,CAC3BC,YAAa,CAACC,EAAGC,KACf,IAAKrB,EAAU,OAET,MAAAsB,EAAUtB,EAASuB,aAEzBlB,EAAQmB,QAAU,CAChBC,OAAQJ,EAAGK,QACXC,OAAQN,EAAGO,QACXC,UAAWP,EAAQQ,WACnBC,SAAUT,EAAQU,WAGVpC,EAAA,UAAW,WAAY,GAAE,EAErCqC,YAAa,CAACb,EAAGC,KACf,MAAMa,EAAO7B,EAAQmB,QACjB,IAACU,IAASlC,EAAU,OAGlB,MAAAmC,EAAKd,EAAGK,QAAUQ,EAAKT,OACvBW,EAAKf,EAAGO,QAAUM,EAAKP,OAE7B3B,EAASqC,SAAS,CAChBC,EAAGJ,EAAKL,UAAYM,EACpBI,EAAGL,EAAKH,SAAWK,GACpB,EAEHI,UAAW,KACInC,EAAQmB,UAGrBnB,EAAQmB,QAAU,KAClB3B,EAAa,WAAS,EAExB4C,aAAc,KACCpC,EAAQmB,UAGrBnB,EAAQmB,QAAU,KAClB3B,EAAa,WAAS,EAExB6C,cAAe,KACArC,EAAQmB,UAGrBnB,EAAQmB,QAAU,KAClB3B,EAAa,WAAS,KAG1B,CAACG,EAAUJ,EAAWC,IAQxB,OALAU,EAAAA,WAAU,KACR,GAAKd,EACL,OAAOA,EAASwB,EAAQ,GACvB,CAACxB,EAAUwB,IAEL0B,EAAAC,IAAAC,EAAAA,SAAA,GAAA,iBDnFW,KACd,MAAA9C,SAAEA,GAAaR,KACbQ,SAAU+C,GAAuBC,qCAElCC,EAAWC,GAAgBC,EAAAA,UAAS,GASpC,OAPP3C,EAAAA,WAAU,KACR,GAAKuC,EACE,OAAAA,EAAmBK,eAAeC,IAC1BH,EAAqB,YAArBG,EAAMC,WAAwB,GAC5C,GACA,CAACP,IAEG,CACL/C,WACAiD,YACF"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/shared/hooks/use-pan.ts","../../src/shared/components/pan-mode.tsx","../../src/shared/index.ts"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\nimport { useEffect, useState } from '@framework';\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 [isPanning, setIsPanning] = useState(false);\n\n useEffect(() => {\n if (!provides) return;\n return provides.onPanModeChange((isPanning) => {\n setIsPanning(isPanning);\n });\n }, [provides]);\n\n return {\n provides,\n isPanning,\n };\n};\n","import { useEffect } from '@framework';\nimport { usePanCapability, usePanPlugin } from '../hooks';\n\nexport const PanMode = () => {\n const { provides: pan } = usePanCapability();\n const { plugin: panPlugin } = usePanPlugin();\n\n useEffect(() => {\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 }, [pan, panPlugin]);\n\n // This component is only used to make the pan mode default when the plugin is initialized.\n return null;\n};\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","PanMode","provides","pan","plugin","panPlugin","useEffect","mode","_a","config","defaultMode","SUPPORT_TOUCH","window","navigator","maxTouchPoints","makePanDefault","PanPluginPackage","createPluginPackage","BasePanPackage","addUtility","build","isPanning","setIsPanning","useState","onPanModeChange"],"mappings":"yOAIaA,EAAe,IAAMC,YAAqBC,EAAAA,UAAUC,IACpDC,EAAmB,IAAMC,gBAAyBH,EAAAA,UAAUC,ICF5DG,EAAU,KACrB,MAAQC,SAAUC,GAAQJ,KAClBK,OAAQC,GAAcV,IAevB,OAbPW,EAAAA,WAAU,WACJ,IAACH,IAAQE,EAAW,OAElB,MAAAE,GAAO,OAAAC,EAAAH,EAAUI,aAAV,EAAAD,EAAkBE,cAAe,QACxCC,EACc,oBAAXC,SAA2B,iBAAkBA,QAAUC,UAAUC,eAAiB,GAE9E,WAATP,GAAqBI,GACvBR,EAAIY,gBAAe,GAEpB,CAACZ,EAAKE,IAGF,IAAA,ECXIW,EAAmBC,EAAoBA,oBAAAC,EAAcF,kBAAEG,WAAWlB,GAASmB,oEFFlE,KACd,MAAAlB,SAAEA,GAAaH,KACdsB,EAAWC,GAAgBC,EAAAA,UAAS,GASpC,OAPPjB,EAAAA,WAAU,KACR,GAAKJ,EACE,OAAAA,EAASsB,iBAAiBH,IAC/BC,EAAaD,EAAS,GACvB,GACA,CAACnB,IAEG,CACLA,WACAmB,YACF"}
@@ -1,34 +1,28 @@
1
- import { usePlugin, useCapability } from "@embedpdf/core/preact";
2
- import { useInteractionManagerCapability, usePointerHandlers, useCursor } from "@embedpdf/plugin-interaction-manager/preact";
3
- import { PanPlugin } from "@embedpdf/plugin-pan";
1
+ import { createPluginPackage } from "@embedpdf/core";
2
+ import { PanPlugin, PanPluginPackage as PanPluginPackage$1 } from "@embedpdf/plugin-pan";
3
+ export * from "@embedpdf/plugin-pan";
4
4
  import "preact";
5
- import { useState, useEffect, useRef, useMemo } from "preact/hooks";
6
- import { jsx, Fragment } from "preact/jsx-runtime";
7
- import { useViewportCapability } from "@embedpdf/plugin-viewport/preact";
5
+ import { useState, useEffect } from "preact/hooks";
6
+ import { useCapability, usePlugin } from "@embedpdf/core/preact";
8
7
  const usePanPlugin = () => usePlugin(PanPlugin.id);
9
8
  const usePanCapability = () => useCapability(PanPlugin.id);
10
9
  const usePan = () => {
11
10
  const { provides } = usePanCapability();
12
- const { provides: interactionManager } = useInteractionManagerCapability();
13
11
  const [isPanning, setIsPanning] = useState(false);
14
12
  useEffect(() => {
15
- if (!interactionManager) return;
16
- return interactionManager.onStateChange((state) => {
17
- setIsPanning(state.activeMode === "panMode");
13
+ if (!provides) return;
14
+ return provides.onPanModeChange((isPanning2) => {
15
+ setIsPanning(isPanning2);
18
16
  });
19
- }, [interactionManager]);
17
+ }, [provides]);
20
18
  return {
21
19
  provides,
22
20
  isPanning
23
21
  };
24
22
  };
25
23
  const PanMode = () => {
26
- const { register } = usePointerHandlers({ modeId: "panMode" });
27
- const { setCursor, removeCursor } = useCursor();
28
- const { provides: viewport } = useViewportCapability();
29
24
  const { provides: pan } = usePanCapability();
30
25
  const { plugin: panPlugin } = usePanPlugin();
31
- const dragRef = useRef(null);
32
26
  useEffect(() => {
33
27
  var _a;
34
28
  if (!pan || !panPlugin) return;
@@ -38,58 +32,12 @@ const PanMode = () => {
38
32
  pan.makePanDefault();
39
33
  }
40
34
  }, [pan, panPlugin]);
41
- const handlers = useMemo(
42
- () => ({
43
- onMouseDown: (_, pe) => {
44
- if (!viewport) return;
45
- const metrics = viewport.getMetrics();
46
- dragRef.current = {
47
- startX: pe.clientX,
48
- startY: pe.clientY,
49
- startLeft: metrics.scrollLeft,
50
- startTop: metrics.scrollTop
51
- };
52
- setCursor("panMode", "grabbing", 10);
53
- },
54
- onMouseMove: (_, pe) => {
55
- const drag = dragRef.current;
56
- if (!drag || !viewport) return;
57
- const dx = pe.clientX - drag.startX;
58
- const dy = pe.clientY - drag.startY;
59
- viewport.scrollTo({
60
- x: drag.startLeft - dx,
61
- y: drag.startTop - dy
62
- });
63
- },
64
- onMouseUp: () => {
65
- const drag = dragRef.current;
66
- if (!drag) return;
67
- dragRef.current = null;
68
- removeCursor("panMode");
69
- },
70
- onMouseLeave: () => {
71
- const drag = dragRef.current;
72
- if (!drag) return;
73
- dragRef.current = null;
74
- removeCursor("panMode");
75
- },
76
- onMouseCancel: () => {
77
- const drag = dragRef.current;
78
- if (!drag) return;
79
- dragRef.current = null;
80
- removeCursor("panMode");
81
- }
82
- }),
83
- [viewport, setCursor, removeCursor]
84
- );
85
- useEffect(() => {
86
- if (!register) return;
87
- return register(handlers);
88
- }, [register, handlers]);
89
- return /* @__PURE__ */ jsx(Fragment, {});
35
+ return null;
90
36
  };
37
+ const PanPluginPackage = createPluginPackage(PanPluginPackage$1).addUtility(PanMode).build();
91
38
  export {
92
39
  PanMode,
40
+ PanPluginPackage,
93
41
  usePan,
94
42
  usePanCapability,
95
43
  usePanPlugin
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/shared/hooks/use-pan.ts","../../src/shared/components/pan-mode.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport { useInteractionManagerCapability } from '@embedpdf/plugin-interaction-manager/@framework';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\nimport { useEffect, useState } from '@framework';\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 '@framework';\nimport type { PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';\nimport { useCursor, usePointerHandlers } from '@embedpdf/plugin-interaction-manager/@framework';\nimport { useViewportCapability } from '@embedpdf/plugin-viewport/@framework';\nimport { usePanCapability, usePanPlugin } from '../hooks';\n\nexport const PanMode = () => {\n const { register } = usePointerHandlers({ modeId: 'panMode' });\n const { setCursor, removeCursor } = useCursor();\n const { provides: viewport } = useViewportCapability();\n const { provides: pan } = usePanCapability();\n const { plugin: panPlugin } = usePanPlugin();\n\n const dragRef = useRef<{\n startX: number;\n startY: number;\n startLeft: number;\n startTop: number;\n } | null>(null);\n\n useEffect(() => {\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 }, [pan, panPlugin]);\n\n const handlers = useMemo(\n (): PointerEventHandlers => ({\n onMouseDown: (_, 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 onMouseMove: (_, 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 onMouseUp: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onMouseLeave: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onMouseCancel: () => {\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"],"names":[],"mappings":";;;;;;;AAKO,MAAM,eAAe,MAAM,UAAqB,UAAU,EAAE;AAC5D,MAAM,mBAAmB,MAAM,cAAyB,UAAU,EAAE;AAEpE,MAAM,SAAS,MAAM;AACpB,QAAA,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;AAClB,WAAA,mBAAmB,cAAc,CAAC,UAAU;AACpC,mBAAA,MAAM,eAAe,SAAS;AAAA,IAAA,CAC5C;AAAA,EAAA,GACA,CAAC,kBAAkB,CAAC;AAEhB,SAAA;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;ACnBO,MAAM,UAAU,MAAM;AAC3B,QAAM,EAAE,SAAS,IAAI,mBAAmB,EAAE,QAAQ,WAAW;AAC7D,QAAM,EAAE,WAAW,aAAa,IAAI,UAAU;AAC9C,QAAM,EAAE,UAAU,SAAS,IAAI,sBAAsB;AACrD,QAAM,EAAE,UAAU,IAAI,IAAI,iBAAiB;AAC3C,QAAM,EAAE,QAAQ,UAAU,IAAI,aAAa;AAErC,QAAA,UAAU,OAKN,IAAI;AAEd,YAAU,MAAM;;AACV,QAAA,CAAC,OAAO,CAAC,UAAW;AAElB,UAAA,SAAO,eAAU,WAAV,mBAAkB,gBAAe;AAC9C,UAAM,gBACJ,OAAO,WAAW,gBAAgB,kBAAkB,UAAU,UAAU,iBAAiB;AAEvF,QAAA,SAAS,YAAY,eAAe;AACtC,UAAI,eAAe;AAAA,IAAA;AAAA,EACrB,GACC,CAAC,KAAK,SAAS,CAAC;AAEnB,QAAM,WAAW;AAAA,IACf,OAA6B;AAAA,MAC3B,aAAa,CAAC,GAAG,OAAO;AACtB,YAAI,CAAC,SAAU;AAET,cAAA,UAAU,SAAS,WAAW;AAEpC,gBAAQ,UAAU;AAAA,UAChB,QAAQ,GAAG;AAAA,UACX,QAAQ,GAAG;AAAA,UACX,WAAW,QAAQ;AAAA,UACnB,UAAU,QAAQ;AAAA,QACpB;AAEU,kBAAA,WAAW,YAAY,EAAE;AAAA,MACrC;AAAA,MACA,aAAa,CAAC,GAAG,OAAO;AACtB,cAAM,OAAO,QAAQ;AACjB,YAAA,CAAC,QAAQ,CAAC,SAAU;AAGlB,cAAA,KAAK,GAAG,UAAU,KAAK;AACvB,cAAA,KAAK,GAAG,UAAU,KAAK;AAE7B,iBAAS,SAAS;AAAA,UAChB,GAAG,KAAK,YAAY;AAAA,UACpB,GAAG,KAAK,WAAW;AAAA,QAAA,CACpB;AAAA,MACH;AAAA,MACA,WAAW,MAAM;AACf,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,MACA,cAAc,MAAM;AAClB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,MACA,eAAe,MAAM;AACnB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MAAA;AAAA,IACxB;AAAA,IAEF,CAAC,UAAU,WAAW,YAAY;AAAA,EACpC;AAEA,YAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACf,WAAO,SAAS,QAAQ;AAAA,EAAA,GACvB,CAAC,UAAU,QAAQ,CAAC;AAEvB,SAAS,oBAAA,UAAA,EAAA;AACX;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/shared/hooks/use-pan.ts","../../src/shared/components/pan-mode.tsx","../../src/shared/index.ts"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\nimport { useEffect, useState } from '@framework';\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 [isPanning, setIsPanning] = useState(false);\n\n useEffect(() => {\n if (!provides) return;\n return provides.onPanModeChange((isPanning) => {\n setIsPanning(isPanning);\n });\n }, [provides]);\n\n return {\n provides,\n isPanning,\n };\n};\n","import { useEffect } from '@framework';\nimport { usePanCapability, usePanPlugin } from '../hooks';\n\nexport const PanMode = () => {\n const { provides: pan } = usePanCapability();\n const { plugin: panPlugin } = usePanPlugin();\n\n useEffect(() => {\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 }, [pan, panPlugin]);\n\n // This component is only used to make the pan mode default when the plugin is initialized.\n return null;\n};\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":["isPanning","BasePanPackage"],"mappings":";;;;;;AAIO,MAAM,eAAe,MAAM,UAAqB,UAAU,EAAE;AAC5D,MAAM,mBAAmB,MAAM,cAAyB,UAAU,EAAE;AAEpE,MAAM,SAAS,MAAM;AACpB,QAAA,EAAE,SAAS,IAAI,iBAAiB;AACtC,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,YAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACR,WAAA,SAAS,gBAAgB,CAACA,eAAc;AAC7C,mBAAaA,UAAS;AAAA,IAAA,CACvB;AAAA,EAAA,GACA,CAAC,QAAQ,CAAC;AAEN,SAAA;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;ACnBO,MAAM,UAAU,MAAM;AAC3B,QAAM,EAAE,UAAU,IAAI,IAAI,iBAAiB;AAC3C,QAAM,EAAE,QAAQ,UAAU,IAAI,aAAa;AAE3C,YAAU,MAAM;;AACV,QAAA,CAAC,OAAO,CAAC,UAAW;AAElB,UAAA,SAAO,eAAU,WAAV,mBAAkB,gBAAe;AAC9C,UAAM,gBACJ,OAAO,WAAW,gBAAgB,kBAAkB,UAAU,UAAU,iBAAiB;AAEvF,QAAA,SAAS,YAAY,eAAe;AACtC,UAAI,eAAe;AAAA,IAAA;AAAA,EACrB,GACC,CAAC,KAAK,SAAS,CAAC;AAGZ,SAAA;AACT;ACZO,MAAM,mBAAmB,oBAAoBC,kBAAc,EAAE,WAAW,OAAO,EAAE,MAAM;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/core/react"),r=require("@embedpdf/plugin-interaction-manager/react"),t=require("@embedpdf/plugin-pan"),n=require("react"),o=require("react/jsx-runtime"),u=require("@embedpdf/plugin-viewport/react"),i=()=>e.usePlugin(t.PanPlugin.id),s=()=>e.useCapability(t.PanPlugin.id);exports.PanMode=()=>{const{register:e}=r.usePointerHandlers({modeId:"panMode"}),{setCursor:t,removeCursor:a}=r.useCursor(),{provides:c}=u.useViewportCapability(),{provides:l}=s(),{plugin:p}=i(),d=n.useRef(null);n.useEffect((()=>{var e;if(!l||!p)return;const r=(null==(e=p.config)?void 0:e.defaultMode)??"never",t="undefined"!=typeof window&&("ontouchstart"in window||navigator.maxTouchPoints>0);"mobile"===r&&t&&l.makePanDefault()}),[l,p]);const f=n.useMemo((()=>({onMouseDown:(e,r)=>{if(!c)return;const n=c.getMetrics();d.current={startX:r.clientX,startY:r.clientY,startLeft:n.scrollLeft,startTop:n.scrollTop},t("panMode","grabbing",10)},onMouseMove:(e,r)=>{const t=d.current;if(!t||!c)return;const n=r.clientX-t.startX,o=r.clientY-t.startY;c.scrollTo({x:t.startLeft-n,y:t.startTop-o})},onMouseUp:()=>{d.current&&(d.current=null,a("panMode"))},onMouseLeave:()=>{d.current&&(d.current=null,a("panMode"))},onMouseCancel:()=>{d.current&&(d.current=null,a("panMode"))}})),[c,t,a]);return n.useEffect((()=>{if(e)return e(f)}),[e,f]),o.jsx(o.Fragment,{})},exports.usePan=()=>{const{provides:e}=s(),{provides:t}=r.useInteractionManagerCapability(),[o,u]=n.useState(!1);return n.useEffect((()=>{if(t)return t.onStateChange((e=>{u("panMode"===e.activeMode)}))}),[t]),{provides:e,isPanning:o}},exports.usePanCapability=s,exports.usePanPlugin=i;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/core"),n=require("@embedpdf/plugin-pan"),t=require("react"),r=require("@embedpdf/core/react"),a=()=>r.usePlugin(n.PanPlugin.id),i=()=>r.useCapability(n.PanPlugin.id),o=()=>{const{provides:e}=i(),{plugin:n}=a();return t.useEffect((()=>{var t;if(!e||!n)return;const r=(null==(t=n.config)?void 0:t.defaultMode)??"never",a="undefined"!=typeof window&&("ontouchstart"in window||navigator.maxTouchPoints>0);"mobile"===r&&a&&e.makePanDefault()}),[e,n]),null},u=e.createPluginPackage(n.PanPluginPackage).addUtility(o).build();exports.PanMode=o,exports.PanPluginPackage=u,exports.usePan=()=>{const{provides:e}=i(),[n,r]=t.useState(!1);return t.useEffect((()=>{if(e)return e.onPanModeChange((e=>{r(e)}))}),[e]),{provides:e,isPanning:n}},exports.usePanCapability=i,exports.usePanPlugin=a,Object.keys(n).forEach((e=>{"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:()=>n[e]})}));
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/shared/hooks/use-pan.ts","../../src/shared/components/pan-mode.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport { useInteractionManagerCapability } from '@embedpdf/plugin-interaction-manager/@framework';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\nimport { useEffect, useState } from '@framework';\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 '@framework';\nimport type { PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';\nimport { useCursor, usePointerHandlers } from '@embedpdf/plugin-interaction-manager/@framework';\nimport { useViewportCapability } from '@embedpdf/plugin-viewport/@framework';\nimport { usePanCapability, usePanPlugin } from '../hooks';\n\nexport const PanMode = () => {\n const { register } = usePointerHandlers({ modeId: 'panMode' });\n const { setCursor, removeCursor } = useCursor();\n const { provides: viewport } = useViewportCapability();\n const { provides: pan } = usePanCapability();\n const { plugin: panPlugin } = usePanPlugin();\n\n const dragRef = useRef<{\n startX: number;\n startY: number;\n startLeft: number;\n startTop: number;\n } | null>(null);\n\n useEffect(() => {\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 }, [pan, panPlugin]);\n\n const handlers = useMemo(\n (): PointerEventHandlers => ({\n onMouseDown: (_, 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 onMouseMove: (_, 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 onMouseUp: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onMouseLeave: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onMouseCancel: () => {\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"],"names":["usePanPlugin","usePlugin","PanPlugin","id","usePanCapability","useCapability","register","usePointerHandlers","modeId","setCursor","removeCursor","useCursor","provides","viewport","useViewportCapability","pan","plugin","panPlugin","dragRef","useRef","useEffect","mode","_a","config","defaultMode","SUPPORT_TOUCH","window","navigator","maxTouchPoints","makePanDefault","handlers","useMemo","onMouseDown","_","pe","metrics","getMetrics","current","startX","clientX","startY","clientY","startLeft","scrollLeft","startTop","scrollTop","onMouseMove","drag","dx","dy","scrollTo","x","y","onMouseUp","onMouseLeave","onMouseCancel","jsxRuntime","jsx","Fragment","interactionManager","useInteractionManagerCapability","isPanning","setIsPanning","useState","onStateChange","state","activeMode"],"mappings":"iTAKaA,EAAe,IAAMC,YAAqBC,EAAAA,UAAUC,IACpDC,EAAmB,IAAMC,gBAAyBH,EAAAA,UAAUC,oBCAlD,KACf,MAAAG,SAAEA,GAAaC,EAAAA,mBAAmB,CAAEC,OAAQ,aAC5CC,UAAEA,EAAAC,aAAWA,GAAiBC,eAC5BC,SAAUC,GAAaC,2BACvBF,SAAUG,GAAQX,KAClBY,OAAQC,GAAcjB,IAExBkB,EAAUC,SAKN,MAEVC,EAAAA,WAAU,WACJ,IAACL,IAAQE,EAAW,OAElB,MAAAI,GAAO,OAAAC,EAAAL,EAAUM,aAAV,EAAAD,EAAkBE,cAAe,QACxCC,EACc,oBAAXC,SAA2B,iBAAkBA,QAAUC,UAAUC,eAAiB,GAE9E,WAATP,GAAqBI,GACvBV,EAAIc,gBAAe,GAEpB,CAACd,EAAKE,IAET,MAAMa,EAAWC,EAAAA,SACf,KAA6B,CAC3BC,YAAa,CAACC,EAAGC,KACf,IAAKrB,EAAU,OAET,MAAAsB,EAAUtB,EAASuB,aAEzBlB,EAAQmB,QAAU,CAChBC,OAAQJ,EAAGK,QACXC,OAAQN,EAAGO,QACXC,UAAWP,EAAQQ,WACnBC,SAAUT,EAAQU,WAGVpC,EAAA,UAAW,WAAY,GAAE,EAErCqC,YAAa,CAACb,EAAGC,KACf,MAAMa,EAAO7B,EAAQmB,QACjB,IAACU,IAASlC,EAAU,OAGlB,MAAAmC,EAAKd,EAAGK,QAAUQ,EAAKT,OACvBW,EAAKf,EAAGO,QAAUM,EAAKP,OAE7B3B,EAASqC,SAAS,CAChBC,EAAGJ,EAAKL,UAAYM,EACpBI,EAAGL,EAAKH,SAAWK,GACpB,EAEHI,UAAW,KACInC,EAAQmB,UAGrBnB,EAAQmB,QAAU,KAClB3B,EAAa,WAAS,EAExB4C,aAAc,KACCpC,EAAQmB,UAGrBnB,EAAQmB,QAAU,KAClB3B,EAAa,WAAS,EAExB6C,cAAe,KACArC,EAAQmB,UAGrBnB,EAAQmB,QAAU,KAClB3B,EAAa,WAAS,KAG1B,CAACG,EAAUJ,EAAWC,IAQxB,OALAU,EAAAA,WAAU,KACR,GAAKd,EACL,OAAOA,EAASwB,EAAQ,GACvB,CAACxB,EAAUwB,IAEL0B,EAAAC,IAAAC,EAAAA,SAAA,GAAA,iBDnFW,KACd,MAAA9C,SAAEA,GAAaR,KACbQ,SAAU+C,GAAuBC,qCAElCC,EAAWC,GAAgBC,EAAAA,UAAS,GASpC,OAPP3C,EAAAA,WAAU,KACR,GAAKuC,EACE,OAAAA,EAAmBK,eAAeC,IAC1BH,EAAqB,YAArBG,EAAMC,WAAwB,GAC5C,GACA,CAACP,IAEG,CACL/C,WACAiD,YACF"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/shared/hooks/use-pan.ts","../../src/shared/components/pan-mode.tsx","../../src/shared/index.ts"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\nimport { useEffect, useState } from '@framework';\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 [isPanning, setIsPanning] = useState(false);\n\n useEffect(() => {\n if (!provides) return;\n return provides.onPanModeChange((isPanning) => {\n setIsPanning(isPanning);\n });\n }, [provides]);\n\n return {\n provides,\n isPanning,\n };\n};\n","import { useEffect } from '@framework';\nimport { usePanCapability, usePanPlugin } from '../hooks';\n\nexport const PanMode = () => {\n const { provides: pan } = usePanCapability();\n const { plugin: panPlugin } = usePanPlugin();\n\n useEffect(() => {\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 }, [pan, panPlugin]);\n\n // This component is only used to make the pan mode default when the plugin is initialized.\n return null;\n};\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","PanMode","provides","pan","plugin","panPlugin","useEffect","mode","_a","config","defaultMode","SUPPORT_TOUCH","window","navigator","maxTouchPoints","makePanDefault","PanPluginPackage","createPluginPackage","BasePanPackage","addUtility","build","isPanning","setIsPanning","useState","onPanModeChange"],"mappings":"yMAIaA,EAAe,IAAMC,YAAqBC,EAAAA,UAAUC,IACpDC,EAAmB,IAAMC,gBAAyBH,EAAAA,UAAUC,ICF5DG,EAAU,KACrB,MAAQC,SAAUC,GAAQJ,KAClBK,OAAQC,GAAcV,IAevB,OAbPW,EAAAA,WAAU,WACJ,IAACH,IAAQE,EAAW,OAElB,MAAAE,GAAO,OAAAC,EAAAH,EAAUI,aAAV,EAAAD,EAAkBE,cAAe,QACxCC,EACc,oBAAXC,SAA2B,iBAAkBA,QAAUC,UAAUC,eAAiB,GAE9E,WAATP,GAAqBI,GACvBR,EAAIY,gBAAe,GAEpB,CAACZ,EAAKE,IAGF,IAAA,ECXIW,EAAmBC,EAAoBA,oBAAAC,EAAcF,kBAAEG,WAAWlB,GAASmB,oEFFlE,KACd,MAAAlB,SAAEA,GAAaH,KACdsB,EAAWC,GAAgBC,EAAAA,UAAS,GASpC,OAPPjB,EAAAA,WAAU,KACR,GAAKJ,EACE,OAAAA,EAASsB,iBAAiBH,IAC/BC,EAAaD,EAAS,GACvB,GACA,CAACnB,IAEG,CACLA,WACAmB,YACF"}
@@ -1,33 +1,27 @@
1
- import { usePlugin, useCapability } from "@embedpdf/core/react";
2
- import { useInteractionManagerCapability, usePointerHandlers, useCursor } from "@embedpdf/plugin-interaction-manager/react";
3
- import { PanPlugin } from "@embedpdf/plugin-pan";
4
- import { useState, useEffect, useRef, useMemo } from "react";
5
- import { jsx, Fragment } from "react/jsx-runtime";
6
- import { useViewportCapability } from "@embedpdf/plugin-viewport/react";
1
+ import { createPluginPackage } from "@embedpdf/core";
2
+ import { PanPlugin, PanPluginPackage as PanPluginPackage$1 } from "@embedpdf/plugin-pan";
3
+ export * from "@embedpdf/plugin-pan";
4
+ import { useState, useEffect } from "react";
5
+ import { useCapability, usePlugin } from "@embedpdf/core/react";
7
6
  const usePanPlugin = () => usePlugin(PanPlugin.id);
8
7
  const usePanCapability = () => useCapability(PanPlugin.id);
9
8
  const usePan = () => {
10
9
  const { provides } = usePanCapability();
11
- const { provides: interactionManager } = useInteractionManagerCapability();
12
10
  const [isPanning, setIsPanning] = useState(false);
13
11
  useEffect(() => {
14
- if (!interactionManager) return;
15
- return interactionManager.onStateChange((state) => {
16
- setIsPanning(state.activeMode === "panMode");
12
+ if (!provides) return;
13
+ return provides.onPanModeChange((isPanning2) => {
14
+ setIsPanning(isPanning2);
17
15
  });
18
- }, [interactionManager]);
16
+ }, [provides]);
19
17
  return {
20
18
  provides,
21
19
  isPanning
22
20
  };
23
21
  };
24
22
  const PanMode = () => {
25
- const { register } = usePointerHandlers({ modeId: "panMode" });
26
- const { setCursor, removeCursor } = useCursor();
27
- const { provides: viewport } = useViewportCapability();
28
23
  const { provides: pan } = usePanCapability();
29
24
  const { plugin: panPlugin } = usePanPlugin();
30
- const dragRef = useRef(null);
31
25
  useEffect(() => {
32
26
  var _a;
33
27
  if (!pan || !panPlugin) return;
@@ -37,58 +31,12 @@ const PanMode = () => {
37
31
  pan.makePanDefault();
38
32
  }
39
33
  }, [pan, panPlugin]);
40
- const handlers = useMemo(
41
- () => ({
42
- onMouseDown: (_, pe) => {
43
- if (!viewport) return;
44
- const metrics = viewport.getMetrics();
45
- dragRef.current = {
46
- startX: pe.clientX,
47
- startY: pe.clientY,
48
- startLeft: metrics.scrollLeft,
49
- startTop: metrics.scrollTop
50
- };
51
- setCursor("panMode", "grabbing", 10);
52
- },
53
- onMouseMove: (_, pe) => {
54
- const drag = dragRef.current;
55
- if (!drag || !viewport) return;
56
- const dx = pe.clientX - drag.startX;
57
- const dy = pe.clientY - drag.startY;
58
- viewport.scrollTo({
59
- x: drag.startLeft - dx,
60
- y: drag.startTop - dy
61
- });
62
- },
63
- onMouseUp: () => {
64
- const drag = dragRef.current;
65
- if (!drag) return;
66
- dragRef.current = null;
67
- removeCursor("panMode");
68
- },
69
- onMouseLeave: () => {
70
- const drag = dragRef.current;
71
- if (!drag) return;
72
- dragRef.current = null;
73
- removeCursor("panMode");
74
- },
75
- onMouseCancel: () => {
76
- const drag = dragRef.current;
77
- if (!drag) return;
78
- dragRef.current = null;
79
- removeCursor("panMode");
80
- }
81
- }),
82
- [viewport, setCursor, removeCursor]
83
- );
84
- useEffect(() => {
85
- if (!register) return;
86
- return register(handlers);
87
- }, [register, handlers]);
88
- return /* @__PURE__ */ jsx(Fragment, {});
34
+ return null;
89
35
  };
36
+ const PanPluginPackage = createPluginPackage(PanPluginPackage$1).addUtility(PanMode).build();
90
37
  export {
91
38
  PanMode,
39
+ PanPluginPackage,
92
40
  usePan,
93
41
  usePanCapability,
94
42
  usePanPlugin
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/shared/hooks/use-pan.ts","../../src/shared/components/pan-mode.tsx"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport { useInteractionManagerCapability } from '@embedpdf/plugin-interaction-manager/@framework';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\nimport { useEffect, useState } from '@framework';\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 '@framework';\nimport type { PointerEventHandlers } from '@embedpdf/plugin-interaction-manager';\nimport { useCursor, usePointerHandlers } from '@embedpdf/plugin-interaction-manager/@framework';\nimport { useViewportCapability } from '@embedpdf/plugin-viewport/@framework';\nimport { usePanCapability, usePanPlugin } from '../hooks';\n\nexport const PanMode = () => {\n const { register } = usePointerHandlers({ modeId: 'panMode' });\n const { setCursor, removeCursor } = useCursor();\n const { provides: viewport } = useViewportCapability();\n const { provides: pan } = usePanCapability();\n const { plugin: panPlugin } = usePanPlugin();\n\n const dragRef = useRef<{\n startX: number;\n startY: number;\n startLeft: number;\n startTop: number;\n } | null>(null);\n\n useEffect(() => {\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 }, [pan, panPlugin]);\n\n const handlers = useMemo(\n (): PointerEventHandlers => ({\n onMouseDown: (_, 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 onMouseMove: (_, 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 onMouseUp: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onMouseLeave: () => {\n const drag = dragRef.current;\n if (!drag) return;\n\n dragRef.current = null;\n removeCursor('panMode');\n },\n onMouseCancel: () => {\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"],"names":[],"mappings":";;;;;;AAKO,MAAM,eAAe,MAAM,UAAqB,UAAU,EAAE;AAC5D,MAAM,mBAAmB,MAAM,cAAyB,UAAU,EAAE;AAEpE,MAAM,SAAS,MAAM;AACpB,QAAA,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;AAClB,WAAA,mBAAmB,cAAc,CAAC,UAAU;AACpC,mBAAA,MAAM,eAAe,SAAS;AAAA,IAAA,CAC5C;AAAA,EAAA,GACA,CAAC,kBAAkB,CAAC;AAEhB,SAAA;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;ACnBO,MAAM,UAAU,MAAM;AAC3B,QAAM,EAAE,SAAS,IAAI,mBAAmB,EAAE,QAAQ,WAAW;AAC7D,QAAM,EAAE,WAAW,aAAa,IAAI,UAAU;AAC9C,QAAM,EAAE,UAAU,SAAS,IAAI,sBAAsB;AACrD,QAAM,EAAE,UAAU,IAAI,IAAI,iBAAiB;AAC3C,QAAM,EAAE,QAAQ,UAAU,IAAI,aAAa;AAErC,QAAA,UAAU,OAKN,IAAI;AAEd,YAAU,MAAM;;AACV,QAAA,CAAC,OAAO,CAAC,UAAW;AAElB,UAAA,SAAO,eAAU,WAAV,mBAAkB,gBAAe;AAC9C,UAAM,gBACJ,OAAO,WAAW,gBAAgB,kBAAkB,UAAU,UAAU,iBAAiB;AAEvF,QAAA,SAAS,YAAY,eAAe;AACtC,UAAI,eAAe;AAAA,IAAA;AAAA,EACrB,GACC,CAAC,KAAK,SAAS,CAAC;AAEnB,QAAM,WAAW;AAAA,IACf,OAA6B;AAAA,MAC3B,aAAa,CAAC,GAAG,OAAO;AACtB,YAAI,CAAC,SAAU;AAET,cAAA,UAAU,SAAS,WAAW;AAEpC,gBAAQ,UAAU;AAAA,UAChB,QAAQ,GAAG;AAAA,UACX,QAAQ,GAAG;AAAA,UACX,WAAW,QAAQ;AAAA,UACnB,UAAU,QAAQ;AAAA,QACpB;AAEU,kBAAA,WAAW,YAAY,EAAE;AAAA,MACrC;AAAA,MACA,aAAa,CAAC,GAAG,OAAO;AACtB,cAAM,OAAO,QAAQ;AACjB,YAAA,CAAC,QAAQ,CAAC,SAAU;AAGlB,cAAA,KAAK,GAAG,UAAU,KAAK;AACvB,cAAA,KAAK,GAAG,UAAU,KAAK;AAE7B,iBAAS,SAAS;AAAA,UAChB,GAAG,KAAK,YAAY;AAAA,UACpB,GAAG,KAAK,WAAW;AAAA,QAAA,CACpB;AAAA,MACH;AAAA,MACA,WAAW,MAAM;AACf,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,MACA,cAAc,MAAM;AAClB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MACxB;AAAA,MACA,eAAe,MAAM;AACnB,cAAM,OAAO,QAAQ;AACrB,YAAI,CAAC,KAAM;AAEX,gBAAQ,UAAU;AAClB,qBAAa,SAAS;AAAA,MAAA;AAAA,IACxB;AAAA,IAEF,CAAC,UAAU,WAAW,YAAY;AAAA,EACpC;AAEA,YAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACf,WAAO,SAAS,QAAQ;AAAA,EAAA,GACvB,CAAC,UAAU,QAAQ,CAAC;AAEvB,SAAS,oBAAA,UAAA,EAAA;AACX;"}
1
+ {"version":3,"file":"index.js","sources":["../../src/shared/hooks/use-pan.ts","../../src/shared/components/pan-mode.tsx","../../src/shared/index.ts"],"sourcesContent":["import { useCapability, usePlugin } from '@embedpdf/core/@framework';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\nimport { useEffect, useState } from '@framework';\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 [isPanning, setIsPanning] = useState(false);\n\n useEffect(() => {\n if (!provides) return;\n return provides.onPanModeChange((isPanning) => {\n setIsPanning(isPanning);\n });\n }, [provides]);\n\n return {\n provides,\n isPanning,\n };\n};\n","import { useEffect } from '@framework';\nimport { usePanCapability, usePanPlugin } from '../hooks';\n\nexport const PanMode = () => {\n const { provides: pan } = usePanCapability();\n const { plugin: panPlugin } = usePanPlugin();\n\n useEffect(() => {\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 }, [pan, panPlugin]);\n\n // This component is only used to make the pan mode default when the plugin is initialized.\n return null;\n};\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":["isPanning","BasePanPackage"],"mappings":";;;;;AAIO,MAAM,eAAe,MAAM,UAAqB,UAAU,EAAE;AAC5D,MAAM,mBAAmB,MAAM,cAAyB,UAAU,EAAE;AAEpE,MAAM,SAAS,MAAM;AACpB,QAAA,EAAE,SAAS,IAAI,iBAAiB;AACtC,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAEhD,YAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACR,WAAA,SAAS,gBAAgB,CAACA,eAAc;AAC7C,mBAAaA,UAAS;AAAA,IAAA,CACvB;AAAA,EAAA,GACA,CAAC,QAAQ,CAAC;AAEN,SAAA;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;ACnBO,MAAM,UAAU,MAAM;AAC3B,QAAM,EAAE,UAAU,IAAI,IAAI,iBAAiB;AAC3C,QAAM,EAAE,QAAQ,UAAU,IAAI,aAAa;AAE3C,YAAU,MAAM;;AACV,QAAA,CAAC,OAAO,CAAC,UAAW;AAElB,UAAA,SAAO,eAAU,WAAV,mBAAkB,gBAAe;AAC9C,UAAM,gBACJ,OAAO,WAAW,gBAAgB,kBAAkB,UAAU,UAAU,iBAAiB;AAEvF,QAAA,SAAS,YAAY,eAAe;AACtC,UAAI,eAAe;AAAA,IAAA;AAAA,EACrB,GACC,CAAC,KAAK,SAAS,CAAC;AAGZ,SAAA;AACT;ACZO,MAAM,mBAAmB,oBAAoBC,kBAAc,EAAE,WAAW,OAAO,EAAE,MAAM;"}
@@ -1 +1 @@
1
- export declare const PanMode: () => import("preact").JSX.Element;
1
+ export declare const PanMode: () => null;
@@ -1,2 +1,4 @@
1
1
  export * from './hooks';
2
2
  export * from './components';
3
+ export * from '../lib/index.ts';
4
+ export declare const PanPluginPackage: import('@embedpdf/core').WithAutoMount<import('@embedpdf/core').PluginPackage<import('../lib/index.ts').PanPlugin, import('../lib/index.ts').PanPluginConfig, unknown, import('@embedpdf/core').Action>>;
@@ -1 +1 @@
1
- export declare const PanMode: () => import("react/jsx-runtime").JSX.Element;
1
+ export declare const PanMode: () => null;
@@ -1,2 +1,4 @@
1
1
  export * from './hooks';
2
2
  export * from './components';
3
+ export * from '../lib/index.ts';
4
+ export declare const PanPluginPackage: import('@embedpdf/core').WithAutoMount<import('@embedpdf/core').PluginPackage<import('../lib/index.ts').PanPlugin, import('../lib/index.ts').PanPluginConfig, unknown, import('@embedpdf/core').Action>>;
@@ -0,0 +1 @@
1
+ export { default as PanMode } from './pan-mode.vue';
@@ -0,0 +1,2 @@
1
+ declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ export default _default;
@@ -0,0 +1 @@
1
+ export * from './use-pan';
@@ -0,0 +1,7 @@
1
+ import { PanPlugin } from '../../lib/index.ts';
2
+ export declare const usePanPlugin: () => import('@embedpdf/core/vue').PluginState<PanPlugin>;
3
+ export declare const usePanCapability: () => import('@embedpdf/core/vue').CapabilityState<Readonly<import('../../lib/index.ts').PanCapability>>;
4
+ export declare const usePan: () => {
5
+ provides: import('vue').Ref<Readonly<import('../../lib/index.ts').PanCapability> | null, Readonly<import('../../lib/index.ts').PanCapability> | null>;
6
+ isPanning: import('vue').Ref<boolean, boolean>;
7
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/core"),n=require("@embedpdf/plugin-pan"),t=require("vue"),o=require("@embedpdf/core/vue"),a=()=>o.usePlugin(n.PanPlugin.id),u=()=>o.useCapability(n.PanPlugin.id),r=t.defineComponent({__name:"pan-mode",setup(e){const{provides:n}=u(),{plugin:o}=a();return t.onMounted((()=>{t.watchEffect((()=>{var e;if(!n.value||!o.value)return;const t=(null==(e=o.value.config)?void 0:e.defaultMode)??"never",a="undefined"!=typeof window&&("ontouchstart"in window||navigator.maxTouchPoints>0);"mobile"===t&&a&&n.value.makePanDefault()}))})),(e,n)=>null}}),i=e.createPluginPackage(n.PanPluginPackage).addUtility(r).build();exports.PanMode=r,exports.PanPluginPackage=i,exports.usePan=()=>{const{provides:e}=u(),n=t.ref(!1);return t.onMounted((()=>{if(!e.value)return;const o=e.value.onPanModeChange((e=>{n.value=e}));t.onUnmounted((()=>{o()}))})),{provides:e,isPanning:n}},exports.usePanCapability=u,exports.usePanPlugin=a,Object.keys(n).forEach((e=>{"default"===e||Object.prototype.hasOwnProperty.call(exports,e)||Object.defineProperty(exports,e,{enumerable:!0,get:()=>n[e]})}));
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../../src/vue/hooks/use-pan.ts","../../src/vue/components/pan-mode.vue","../../src/vue/index.ts"],"sourcesContent":["import { ref, onMounted, onUnmounted } from 'vue';\nimport { useCapability, usePlugin } from '@embedpdf/core/vue';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\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 isPanning = ref(false);\n\n onMounted(() => {\n if (!provides.value) return;\n\n const unsubscribe = provides.value.onPanModeChange((panning) => {\n isPanning.value = panning;\n });\n\n onUnmounted(() => {\n unsubscribe();\n });\n });\n\n return {\n provides,\n isPanning,\n };\n};\n","<template>\n <!-- This component is only used to make the pan mode default when the plugin is initialized -->\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, watchEffect } from 'vue';\nimport { usePanCapability, usePanPlugin } from '../hooks/use-pan';\n\nconst { provides: pan } = usePanCapability();\nconst { plugin: panPlugin } = usePanPlugin();\n\nonMounted(() => {\n watchEffect(() => {\n if (!pan.value || !panPlugin.value) return;\n\n const mode = panPlugin.value.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.value.makePanDefault();\n }\n });\n});\n</script>\n","import { createPluginPackage } from '@embedpdf/core';\nimport { PanPluginPackage as BasePanPackage } from '@embedpdf/plugin-pan';\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","onMounted","watchEffect","value","mode","_a","config","defaultMode","SUPPORT_TOUCH","window","navigator","maxTouchPoints","makePanDefault","PanPluginPackage","createPluginPackage","BasePanPackage","addUtility","PanMode","build","isPanning","ref","unsubscribe","onPanModeChange","panning","onUnmounted"],"mappings":"qMAIaA,EAAe,IAAMC,YAAqBC,EAAAA,UAAUC,IACpDC,EAAmB,IAAMC,gBAAyBH,EAAAA,UAAUC,oDCGzE,MAAQG,SAAUC,GAAQH,KAClBI,OAAQC,GAAcT,WAE9BU,EAAAA,WAAU,KACRC,EAAAA,aAAY,WACV,IAAKJ,EAAIK,QAAUH,EAAUG,MAAO,OAEpC,MAAMC,GAAO,OAAAC,EAAAL,EAAUG,MAAMG,iBAAQC,cAAe,QAC9CC,EACc,oBAAXC,SAA2B,iBAAkBA,QAAUC,UAAUC,eAAiB,GAE9E,WAATP,GAAqBI,GACvBV,EAAIK,MAAMS,gBAAe,GAE5B,mBCdUC,EAAmBC,EAAoBA,oBAAAC,EAAcF,kBAAEG,WAAWC,GAASC,oEFDlE,KACd,MAAArB,SAAEA,GAAaF,IACfwB,EAAYC,OAAI,GAcf,OAZPnB,EAAAA,WAAU,KACJ,IAACJ,EAASM,MAAO,OAErB,MAAMkB,EAAcxB,EAASM,MAAMmB,iBAAiBC,IAClDJ,EAAUhB,MAAQoB,CAAA,IAGpBC,EAAAA,aAAY,KACEH,GAAA,GACb,IAGI,CACLxB,WACAsB,YACF"}
@@ -0,0 +1,4 @@
1
+ export * from './hooks';
2
+ export * from './components';
3
+ export * from '../lib/index.ts';
4
+ export declare const PanPluginPackage: import('@embedpdf/core').WithAutoMount<import('@embedpdf/core').PluginPackage<import('../lib/index.ts').PanPlugin, import('../lib/index.ts').PanPluginConfig, unknown, import('@embedpdf/core').Action>>;
@@ -0,0 +1,54 @@
1
+ import { createPluginPackage } from "@embedpdf/core";
2
+ import { PanPlugin, PanPluginPackage as PanPluginPackage$1 } from "@embedpdf/plugin-pan";
3
+ export * from "@embedpdf/plugin-pan";
4
+ import { ref, onMounted, onUnmounted, defineComponent, watchEffect } from "vue";
5
+ import { useCapability, usePlugin } from "@embedpdf/core/vue";
6
+ const usePanPlugin = () => usePlugin(PanPlugin.id);
7
+ const usePanCapability = () => useCapability(PanPlugin.id);
8
+ const usePan = () => {
9
+ const { provides } = usePanCapability();
10
+ const isPanning = ref(false);
11
+ onMounted(() => {
12
+ if (!provides.value) return;
13
+ const unsubscribe = provides.value.onPanModeChange((panning) => {
14
+ isPanning.value = panning;
15
+ });
16
+ onUnmounted(() => {
17
+ unsubscribe();
18
+ });
19
+ });
20
+ return {
21
+ provides,
22
+ isPanning
23
+ };
24
+ };
25
+ const _sfc_main = /* @__PURE__ */ defineComponent({
26
+ __name: "pan-mode",
27
+ setup(__props) {
28
+ const { provides: pan } = usePanCapability();
29
+ const { plugin: panPlugin } = usePanPlugin();
30
+ onMounted(() => {
31
+ watchEffect(() => {
32
+ var _a;
33
+ if (!pan.value || !panPlugin.value) return;
34
+ const mode = ((_a = panPlugin.value.config) == null ? void 0 : _a.defaultMode) ?? "never";
35
+ const SUPPORT_TOUCH = typeof window !== "undefined" && ("ontouchstart" in window || navigator.maxTouchPoints > 0);
36
+ if (mode === "mobile" && SUPPORT_TOUCH) {
37
+ pan.value.makePanDefault();
38
+ }
39
+ });
40
+ });
41
+ return (_ctx, _cache) => {
42
+ return null;
43
+ };
44
+ }
45
+ });
46
+ const PanPluginPackage = createPluginPackage(PanPluginPackage$1).addUtility(_sfc_main).build();
47
+ export {
48
+ _sfc_main as PanMode,
49
+ PanPluginPackage,
50
+ usePan,
51
+ usePanCapability,
52
+ usePanPlugin
53
+ };
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/vue/hooks/use-pan.ts","../../src/vue/components/pan-mode.vue","../../src/vue/index.ts"],"sourcesContent":["import { ref, onMounted, onUnmounted } from 'vue';\nimport { useCapability, usePlugin } from '@embedpdf/core/vue';\nimport { PanPlugin } from '@embedpdf/plugin-pan';\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 isPanning = ref(false);\n\n onMounted(() => {\n if (!provides.value) return;\n\n const unsubscribe = provides.value.onPanModeChange((panning) => {\n isPanning.value = panning;\n });\n\n onUnmounted(() => {\n unsubscribe();\n });\n });\n\n return {\n provides,\n isPanning,\n };\n};\n","<template>\n <!-- This component is only used to make the pan mode default when the plugin is initialized -->\n</template>\n\n<script setup lang=\"ts\">\nimport { onMounted, watchEffect } from 'vue';\nimport { usePanCapability, usePanPlugin } from '../hooks/use-pan';\n\nconst { provides: pan } = usePanCapability();\nconst { plugin: panPlugin } = usePanPlugin();\n\nonMounted(() => {\n watchEffect(() => {\n if (!pan.value || !panPlugin.value) return;\n\n const mode = panPlugin.value.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.value.makePanDefault();\n }\n });\n});\n</script>\n","import { createPluginPackage } from '@embedpdf/core';\nimport { PanPluginPackage as BasePanPackage } from '@embedpdf/plugin-pan';\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":["BasePanPackage","PanMode"],"mappings":";;;;;AAIO,MAAM,eAAe,MAAM,UAAqB,UAAU,EAAE;AAC5D,MAAM,mBAAmB,MAAM,cAAyB,UAAU,EAAE;AAEpE,MAAM,SAAS,MAAM;AACpB,QAAA,EAAE,SAAS,IAAI,iBAAiB;AAChC,QAAA,YAAY,IAAI,KAAK;AAE3B,YAAU,MAAM;AACV,QAAA,CAAC,SAAS,MAAO;AAErB,UAAM,cAAc,SAAS,MAAM,gBAAgB,CAAC,YAAY;AAC9D,gBAAU,QAAQ;AAAA,IAAA,CACnB;AAED,gBAAY,MAAM;AACJ,kBAAA;AAAA,IAAA,CACb;AAAA,EAAA,CACF;AAEM,SAAA;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;;ACnBA,UAAM,EAAE,UAAU,IAAI,IAAI,iBAAiB;AAC3C,UAAM,EAAE,QAAQ,UAAU,IAAI,aAAa;AAE3C,cAAU,MAAM;AACd,kBAAY,MAAM;;AAChB,YAAI,CAAC,IAAI,SAAS,CAAC,UAAU,MAAO;AAEpC,cAAM,SAAO,eAAU,MAAM,WAAhB,mBAAwB,gBAAe;AACpD,cAAM,gBACJ,OAAO,WAAW,gBAAgB,kBAAkB,UAAU,UAAU,iBAAiB;AAEvF,YAAA,SAAS,YAAY,eAAe;AACtC,cAAI,MAAM,eAAe;AAAA,QAAA;AAAA,MAC3B,CACD;AAAA,IAAA,CACF;;;;;;ACfM,MAAM,mBAAmB,oBAAoBA,kBAAc,EAAE,WAAWC,SAAO,EAAE,MAAM;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embedpdf/plugin-pan",
3
- "version": "1.0.20",
3
+ "version": "1.0.21",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",
@@ -20,25 +20,31 @@
20
20
  "types": "./dist/react/index.d.ts",
21
21
  "import": "./dist/react/index.js",
22
22
  "require": "./dist/react/index.cjs"
23
+ },
24
+ "./vue": {
25
+ "types": "./dist/vue/index.d.ts",
26
+ "import": "./dist/vue/index.js",
27
+ "require": "./dist/vue/index.cjs"
23
28
  }
24
29
  },
25
30
  "dependencies": {
26
- "@embedpdf/models": "1.0.20"
31
+ "@embedpdf/models": "1.0.21"
27
32
  },
28
33
  "devDependencies": {
29
34
  "@types/react": "^18.2.0",
30
35
  "typescript": "^5.0.0",
31
36
  "@embedpdf/build": "1.0.0",
32
- "@embedpdf/plugin-interaction-manager": "1.0.20",
33
- "@embedpdf/plugin-viewport": "1.0.20"
37
+ "@embedpdf/plugin-interaction-manager": "1.0.21",
38
+ "@embedpdf/plugin-viewport": "1.0.21"
34
39
  },
35
40
  "peerDependencies": {
36
41
  "react": ">=16.8.0",
37
42
  "react-dom": ">=16.8.0",
38
43
  "preact": "^10.26.4",
39
- "@embedpdf/plugin-viewport": "1.0.20",
40
- "@embedpdf/plugin-interaction-manager": "1.0.20",
41
- "@embedpdf/core": "1.0.20"
44
+ "vue": ">=3.2.0",
45
+ "@embedpdf/core": "1.0.21",
46
+ "@embedpdf/plugin-interaction-manager": "1.0.21",
47
+ "@embedpdf/plugin-viewport": "1.0.21"
42
48
  },
43
49
  "files": [
44
50
  "dist",
@@ -60,7 +66,8 @@
60
66
  "build:base": "vite build --mode base",
61
67
  "build:react": "vite build --mode react",
62
68
  "build:preact": "vite build --mode preact",
63
- "build": "pnpm run clean && concurrently -c auto -n base,react,preact \"vite build --mode base\" \"vite build --mode react\" \"vite build --mode preact\"",
69
+ "build:vue": "vite build --mode vue",
70
+ "build": "pnpm run clean && concurrently -c auto -n base,react,preact,vue \"vite build --mode base\" \"vite build --mode react\" \"vite build --mode preact\" \"vite build --mode vue\"",
64
71
  "clean": "rimraf dist",
65
72
  "lint": "eslint src --color",
66
73
  "lint:fix": "eslint src --color --fix"
@@ -1 +0,0 @@
1
- export * from '@embedpdf/plugin-interaction-manager/preact';
@@ -1 +0,0 @@
1
- export * from '@embedpdf/plugin-viewport/preact';
@@ -1 +0,0 @@
1
- export * from '@embedpdf/plugin-interaction-manager/react';
@@ -1 +0,0 @@
1
- export * from '@embedpdf/plugin-viewport/react';