@embedpdf/plugin-pan 1.0.19 → 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 +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +86 -15
- package/dist/index.js.map +1 -1
- package/dist/lib/pan-plugin.d.ts +6 -0
- package/dist/lib/types.d.ts +2 -1
- package/dist/preact/index.cjs +1 -1
- package/dist/preact/index.cjs.map +1 -1
- package/dist/preact/index.js +12 -64
- package/dist/preact/index.js.map +1 -1
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.cjs.map +1 -1
- package/dist/react/index.js +12 -64
- package/dist/react/index.js.map +1 -1
- package/dist/shared-preact/components/pan-mode.d.ts +1 -1
- package/dist/shared-preact/index.d.ts +2 -0
- package/dist/shared-react/components/pan-mode.d.ts +1 -1
- package/dist/shared-react/index.d.ts +2 -0
- package/dist/vue/components/index.d.ts +1 -0
- package/dist/vue/components/pan-mode.vue.d.ts +2 -0
- package/dist/vue/hooks/index.d.ts +1 -0
- package/dist/vue/hooks/use-pan.d.ts +7 -0
- package/dist/vue/index.cjs +2 -0
- package/dist/vue/index.cjs.map +1 -0
- package/dist/vue/index.d.ts +4 -0
- package/dist/vue/index.js +54 -0
- package/dist/vue/index.js.map +1 -0
- package/package.json +16 -9
- package/dist/preact/interaction-manager.d.ts +0 -1
- package/dist/preact/viewport.d.ts +0 -1
- package/dist/react/interaction-manager.d.ts +0 -1
- package/dist/react/viewport.d.ts +0 -1
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/core"),
|
|
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
|
package/dist/index.cjs.map
CHANGED
|
@@ -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
|
|
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.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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: () =>
|
|
32
|
-
|
|
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
|
-
|
|
35
|
-
|
|
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
|
|
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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"}
|
package/dist/lib/pan-plugin.d.ts
CHANGED
|
@@ -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
|
}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -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;
|
package/dist/preact/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/core
|
|
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 {
|
|
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"}
|
package/dist/preact/index.js
CHANGED
|
@@ -1,34 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
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
|
|
6
|
-
import {
|
|
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 (!
|
|
16
|
-
return
|
|
17
|
-
setIsPanning(
|
|
13
|
+
if (!provides) return;
|
|
14
|
+
return provides.onPanModeChange((isPanning2) => {
|
|
15
|
+
setIsPanning(isPanning2);
|
|
18
16
|
});
|
|
19
|
-
}, [
|
|
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
|
-
|
|
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
|
package/dist/preact/index.js.map
CHANGED
|
@@ -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 {
|
|
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;"}
|
package/dist/react/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@embedpdf/core
|
|
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
|
package/dist/react/index.cjs.map
CHANGED
|
@@ -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 {
|
|
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"}
|
package/dist/react/index.js
CHANGED
|
@@ -1,33 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
import { useState, useEffect
|
|
5
|
-
import {
|
|
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 (!
|
|
15
|
-
return
|
|
16
|
-
setIsPanning(
|
|
12
|
+
if (!provides) return;
|
|
13
|
+
return provides.onPanModeChange((isPanning2) => {
|
|
14
|
+
setIsPanning(isPanning2);
|
|
17
15
|
});
|
|
18
|
-
}, [
|
|
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
|
-
|
|
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
|
package/dist/react/index.js.map
CHANGED
|
@@ -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 {
|
|
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: () =>
|
|
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: () =>
|
|
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.
|
|
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.
|
|
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
|
-
"@embedpdf/
|
|
32
|
-
"@embedpdf/plugin-interaction-manager": "1.0.
|
|
33
|
-
"@embedpdf/
|
|
36
|
+
"@embedpdf/build": "1.0.0",
|
|
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
|
-
"
|
|
40
|
-
"@embedpdf/core": "1.0.
|
|
41
|
-
"@embedpdf/plugin-
|
|
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": "
|
|
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';
|
package/dist/react/viewport.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from '@embedpdf/plugin-viewport/react';
|