@zoompinch/vue 0.0.8
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/components/Zoompinch.vue.d.ts +71 -0
- package/dist/index.d.ts +1 -0
- package/dist/style.css +1 -0
- package/dist/zoompinch-vue.es.js +125 -0
- package/dist/zoompinch-vue.umd.js +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Transform, Zoompinch } from '@zoompinch/core';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
transform?: Transform;
|
|
4
|
+
offset?: {
|
|
5
|
+
top: number;
|
|
6
|
+
right: number;
|
|
7
|
+
bottom: number;
|
|
8
|
+
left: number;
|
|
9
|
+
};
|
|
10
|
+
maxScale?: number;
|
|
11
|
+
minScale?: number;
|
|
12
|
+
bounds?: boolean;
|
|
13
|
+
rotation?: boolean;
|
|
14
|
+
mouse?: boolean;
|
|
15
|
+
wheel?: boolean;
|
|
16
|
+
touch?: boolean;
|
|
17
|
+
gesture?: boolean;
|
|
18
|
+
};
|
|
19
|
+
declare function __VLS_template(): {
|
|
20
|
+
attrs: Partial<{}>;
|
|
21
|
+
slots: {
|
|
22
|
+
default?(_: {}): any;
|
|
23
|
+
matrix?(_: {
|
|
24
|
+
composePoint: (x: number, y: number) => [number, number];
|
|
25
|
+
}): any;
|
|
26
|
+
};
|
|
27
|
+
refs: {
|
|
28
|
+
zoompinchRef: HTMLDivElement;
|
|
29
|
+
};
|
|
30
|
+
rootEl: HTMLDivElement;
|
|
31
|
+
};
|
|
32
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
33
|
+
declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {
|
|
34
|
+
applyTransform: (scale: number, wrapperInnerCoords: [number, number], canvasCoords: [number, number], rotate?: number) => void;
|
|
35
|
+
composePoint: import('vue').Ref<(x: number, y: number) => [number, number], (x: number, y: number) => [number, number]>;
|
|
36
|
+
normalizeClientCoords: (clientX: number, clientY: number) => [number, number];
|
|
37
|
+
zoompinchEngine: import('vue').Ref<Zoompinch | undefined, Zoompinch | undefined>;
|
|
38
|
+
}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
39
|
+
"update:transform": (transform: Transform) => any;
|
|
40
|
+
dragGestureStart: (event: MouseEvent | TouchEvent | WheelEvent) => any;
|
|
41
|
+
dragGestureEnd: (event: MouseEvent | TouchEvent | WheelEvent) => any;
|
|
42
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
43
|
+
"onUpdate:transform"?: ((transform: Transform) => any) | undefined;
|
|
44
|
+
onDragGestureStart?: ((event: MouseEvent | TouchEvent | WheelEvent) => any) | undefined;
|
|
45
|
+
onDragGestureEnd?: ((event: MouseEvent | TouchEvent | WheelEvent) => any) | undefined;
|
|
46
|
+
}>, {
|
|
47
|
+
transform: Transform;
|
|
48
|
+
offset: {
|
|
49
|
+
top: number;
|
|
50
|
+
right: number;
|
|
51
|
+
bottom: number;
|
|
52
|
+
left: number;
|
|
53
|
+
};
|
|
54
|
+
maxScale: number;
|
|
55
|
+
minScale: number;
|
|
56
|
+
bounds: boolean;
|
|
57
|
+
rotation: boolean;
|
|
58
|
+
mouse: boolean;
|
|
59
|
+
wheel: boolean;
|
|
60
|
+
touch: boolean;
|
|
61
|
+
gesture: boolean;
|
|
62
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
63
|
+
zoompinchRef: HTMLDivElement;
|
|
64
|
+
}, HTMLDivElement>;
|
|
65
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
66
|
+
export default _default;
|
|
67
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
68
|
+
new (): {
|
|
69
|
+
$slots: S;
|
|
70
|
+
};
|
|
71
|
+
};
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Zoompinch } from './components/Zoompinch.vue';
|
package/dist/style.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.zoompinch[data-v-46a64396]{touch-action:none;overflow:hidden;width:100%;height:100%;position:relative}.zoompinch>.canvas[data-v-46a64396]{position:absolute}.zoompinch>.matrix[data-v-46a64396]{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { defineComponent as G, ref as u, onMounted as x, watch as l, onUnmounted as B, createElementBlock as C, openBlock as M, createElementVNode as L, renderSlot as y, createCommentVNode as k } from "vue";
|
|
2
|
+
import { Zoompinch as Z } from "@zoompinch/core";
|
|
3
|
+
const N = { class: "canvas" }, P = { class: "matrix" }, W = /* @__PURE__ */ G({
|
|
4
|
+
__name: "Zoompinch",
|
|
5
|
+
props: {
|
|
6
|
+
transform: { default: () => ({ translateX: 0, translateY: 0, scale: 1, rotate: 0 }) },
|
|
7
|
+
offset: { default: () => ({ left: 0, top: 0, right: 0, bottom: 0 }) },
|
|
8
|
+
maxScale: { default: 10 },
|
|
9
|
+
minScale: { default: 0.5 },
|
|
10
|
+
bounds: { type: Boolean, default: !1 },
|
|
11
|
+
rotation: { type: Boolean, default: !0 },
|
|
12
|
+
mouse: { type: Boolean, default: !0 },
|
|
13
|
+
wheel: { type: Boolean, default: !0 },
|
|
14
|
+
touch: { type: Boolean, default: !0 },
|
|
15
|
+
gesture: { type: Boolean, default: !0 }
|
|
16
|
+
},
|
|
17
|
+
emits: ["update:transform", "dragGestureStart", "dragGestureEnd"],
|
|
18
|
+
setup(o, { expose: i, emit: r }) {
|
|
19
|
+
const a = o, d = r, v = u(), e = u(), f = u(!1);
|
|
20
|
+
window.zoompinchEngine = e;
|
|
21
|
+
const s = u(() => {
|
|
22
|
+
throw new Error("Not initialized yet");
|
|
23
|
+
});
|
|
24
|
+
x(() => {
|
|
25
|
+
v.value && (e.value = new Z(
|
|
26
|
+
v.value,
|
|
27
|
+
a.offset,
|
|
28
|
+
a.transform.translateX,
|
|
29
|
+
a.transform.translateY,
|
|
30
|
+
a.transform.scale,
|
|
31
|
+
a.transform.rotate,
|
|
32
|
+
a.minScale,
|
|
33
|
+
a.maxScale
|
|
34
|
+
), e.value.addEventListener("update", () => {
|
|
35
|
+
if (!e.value) return;
|
|
36
|
+
const t = {
|
|
37
|
+
translateX: e.value.translateX,
|
|
38
|
+
translateY: e.value.translateY,
|
|
39
|
+
scale: e.value.scale,
|
|
40
|
+
rotate: e.value.rotate
|
|
41
|
+
};
|
|
42
|
+
(t.translateX !== a.transform.translateX || t.translateY !== a.transform.translateY || t.scale !== a.transform.scale || t.rotate !== a.transform.rotate) && d("update:transform", t), s.value = (n, c) => e.value.composePoint(n, c);
|
|
43
|
+
}), e.value.addEventListener("init", () => {
|
|
44
|
+
f.value = !0;
|
|
45
|
+
}));
|
|
46
|
+
}), l(
|
|
47
|
+
() => a.transform,
|
|
48
|
+
() => {
|
|
49
|
+
e.value && (e.value.translateX !== a.transform.translateX || e.value.translateY !== a.transform.translateY || e.value.scale !== a.transform.scale || e.value.rotate !== a.transform.rotate) && (e.value.translateX = a.transform.translateX, e.value.translateY = a.transform.translateY, e.value.scale = a.transform.scale, e.value.rotate = a.transform.rotate, e.value.update());
|
|
50
|
+
},
|
|
51
|
+
{ deep: !0 }
|
|
52
|
+
), l(
|
|
53
|
+
() => a.offset,
|
|
54
|
+
(t) => {
|
|
55
|
+
e.value && (e.value.offset = t, e.value.update());
|
|
56
|
+
},
|
|
57
|
+
{ deep: !0 }
|
|
58
|
+
), l(() => a.minScale, (t) => {
|
|
59
|
+
e.value && (e.value.minScale = t, e.value.update());
|
|
60
|
+
}), l(() => a.maxScale, (t) => {
|
|
61
|
+
e.value && (e.value.maxScale = t, e.value.update());
|
|
62
|
+
});
|
|
63
|
+
const z = (t, n, c, _) => {
|
|
64
|
+
e.value && (_ !== void 0 && (e.value.rotate = _), e.value.applyTransform(t, n, c));
|
|
65
|
+
}, S = (t) => {
|
|
66
|
+
e.value && a.wheel && e.value.handleWheel(t);
|
|
67
|
+
}, T = (t) => {
|
|
68
|
+
e.value && a.gesture && e.value.handleGesturestart(t);
|
|
69
|
+
}, m = (t) => {
|
|
70
|
+
e.value && a.gesture && e.value.handleGesturechange(t);
|
|
71
|
+
}, h = (t) => {
|
|
72
|
+
e.value && a.gesture && e.value.handleGestureend(t);
|
|
73
|
+
}, X = (t) => {
|
|
74
|
+
e.value && a.mouse && e.value.handleMousedown(t);
|
|
75
|
+
}, p = (t) => {
|
|
76
|
+
e.value && a.mouse && e.value.handleMousemove(t);
|
|
77
|
+
}, w = (t) => {
|
|
78
|
+
e.value && a.mouse && e.value.handleMouseup(t);
|
|
79
|
+
}, Y = (t) => {
|
|
80
|
+
e.value && a.touch && e.value.handleTouchstart(t);
|
|
81
|
+
}, E = (t) => {
|
|
82
|
+
e.value && a.touch && e.value.handleTouchmove(t);
|
|
83
|
+
}, g = (t) => {
|
|
84
|
+
e.value && a.touch && e.value.handleTouchend(t);
|
|
85
|
+
};
|
|
86
|
+
return window.addEventListener("gesturechange", m), window.addEventListener("gestureend", h), window.addEventListener("mousemove", p), window.addEventListener("mouseup", w), window.addEventListener("touchmove", E), window.addEventListener("touchend", g), B(() => {
|
|
87
|
+
window.removeEventListener("gesturechange", m), window.removeEventListener("gestureend", h), window.removeEventListener("mousemove", p), window.removeEventListener("mouseup", w), window.removeEventListener("touchmove", E), window.removeEventListener("touchend", g);
|
|
88
|
+
}), i({
|
|
89
|
+
applyTransform: z,
|
|
90
|
+
composePoint: s,
|
|
91
|
+
normalizeClientCoords: (t, n) => {
|
|
92
|
+
if (!e.value)
|
|
93
|
+
throw new Error("Zoompinch engine not initialized");
|
|
94
|
+
return e.value.normalizeClientCoords(t, n);
|
|
95
|
+
},
|
|
96
|
+
zoompinchEngine: e
|
|
97
|
+
}), (t, n) => (M(), C("div", {
|
|
98
|
+
ref_key: "zoompinchRef",
|
|
99
|
+
ref: v,
|
|
100
|
+
class: "zoompinch",
|
|
101
|
+
onWheel: S,
|
|
102
|
+
onGesturestart: T,
|
|
103
|
+
onMousedown: X,
|
|
104
|
+
onTouchstart: Y
|
|
105
|
+
}, [
|
|
106
|
+
L("div", N, [
|
|
107
|
+
y(t.$slots, "default", {}, void 0, !0)
|
|
108
|
+
]),
|
|
109
|
+
L("div", P, [
|
|
110
|
+
f.value && s.value ? y(t.$slots, "matrix", {
|
|
111
|
+
key: 0,
|
|
112
|
+
composePoint: s.value
|
|
113
|
+
}, void 0, !0) : k("", !0)
|
|
114
|
+
])
|
|
115
|
+
], 544));
|
|
116
|
+
}
|
|
117
|
+
}), $ = (o, i) => {
|
|
118
|
+
const r = o.__vccOpts || o;
|
|
119
|
+
for (const [a, d] of i)
|
|
120
|
+
r[a] = d;
|
|
121
|
+
return r;
|
|
122
|
+
}, I = /* @__PURE__ */ $(W, [["__scopeId", "data-v-46a64396"]]);
|
|
123
|
+
export {
|
|
124
|
+
I as Zoompinch
|
|
125
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(function(o,a){typeof exports=="object"&&typeof module<"u"?a(exports,require("vue"),require("@zoompinch/core")):typeof define=="function"&&define.amd?define(["exports","vue","@zoompinch/core"],a):(o=typeof globalThis<"u"?globalThis:o||self,a(o.ZoompinchVue={},o.Vue,o.ZoompinchCore))})(this,(function(o,a,y){"use strict";const L={class:"canvas"},S={class:"matrix"},T=((s,i)=>{const l=s.__vccOpts||s;for(const[n,d]of i)l[n]=d;return l})(a.defineComponent({__name:"Zoompinch",props:{transform:{default:()=>({translateX:0,translateY:0,scale:1,rotate:0})},offset:{default:()=>({left:0,top:0,right:0,bottom:0})},maxScale:{default:10},minScale:{default:.5},bounds:{type:Boolean,default:!1},rotation:{type:Boolean,default:!0},mouse:{type:Boolean,default:!0},wheel:{type:Boolean,default:!0},touch:{type:Boolean,default:!0},gesture:{type:Boolean,default:!0}},emits:["update:transform","dragGestureStart","dragGestureEnd"],setup(s,{expose:i,emit:l}){const n=s,d=l,c=a.ref(),e=a.ref(),m=a.ref(!1);window.zoompinchEngine=e;const u=a.ref(()=>{throw new Error("Not initialized yet")});a.onMounted(()=>{c.value&&(e.value=new y.Zoompinch(c.value,n.offset,n.transform.translateX,n.transform.translateY,n.transform.scale,n.transform.rotate,n.minScale,n.maxScale),e.value.addEventListener("update",()=>{if(!e.value)return;const t={translateX:e.value.translateX,translateY:e.value.translateY,scale:e.value.scale,rotate:e.value.rotate};(t.translateX!==n.transform.translateX||t.translateY!==n.transform.translateY||t.scale!==n.transform.scale||t.rotate!==n.transform.rotate)&&d("update:transform",t),u.value=(r,f)=>e.value.composePoint(r,f)}),e.value.addEventListener("init",()=>{m.value=!0}))}),a.watch(()=>n.transform,()=>{e.value&&(e.value.translateX!==n.transform.translateX||e.value.translateY!==n.transform.translateY||e.value.scale!==n.transform.scale||e.value.rotate!==n.transform.rotate)&&(e.value.translateX=n.transform.translateX,e.value.translateY=n.transform.translateY,e.value.scale=n.transform.scale,e.value.rotate=n.transform.rotate,e.value.update())},{deep:!0}),a.watch(()=>n.offset,t=>{e.value&&(e.value.offset=t,e.value.update())},{deep:!0}),a.watch(()=>n.minScale,t=>{e.value&&(e.value.minScale=t,e.value.update())}),a.watch(()=>n.maxScale,t=>{e.value&&(e.value.maxScale=t,e.value.update())});const z=(t,r,f,_)=>{e.value&&(_!==void 0&&(e.value.rotate=_),e.value.applyTransform(t,r,f))},x=t=>{e.value&&n.wheel&&e.value.handleWheel(t)},X=t=>{e.value&&n.gesture&&e.value.handleGesturestart(t)},v=t=>{e.value&&n.gesture&&e.value.handleGesturechange(t)},h=t=>{e.value&&n.gesture&&e.value.handleGestureend(t)},Y=t=>{e.value&&n.mouse&&e.value.handleMousedown(t)},p=t=>{e.value&&n.mouse&&e.value.handleMousemove(t)},w=t=>{e.value&&n.mouse&&e.value.handleMouseup(t)},C=t=>{e.value&&n.touch&&e.value.handleTouchstart(t)},E=t=>{e.value&&n.touch&&e.value.handleTouchmove(t)},g=t=>{e.value&&n.touch&&e.value.handleTouchend(t)};return window.addEventListener("gesturechange",v),window.addEventListener("gestureend",h),window.addEventListener("mousemove",p),window.addEventListener("mouseup",w),window.addEventListener("touchmove",E),window.addEventListener("touchend",g),a.onUnmounted(()=>{window.removeEventListener("gesturechange",v),window.removeEventListener("gestureend",h),window.removeEventListener("mousemove",p),window.removeEventListener("mouseup",w),window.removeEventListener("touchmove",E),window.removeEventListener("touchend",g)}),i({applyTransform:z,composePoint:u,normalizeClientCoords:(t,r)=>{if(!e.value)throw new Error("Zoompinch engine not initialized");return e.value.normalizeClientCoords(t,r)},zoompinchEngine:e}),(t,r)=>(a.openBlock(),a.createElementBlock("div",{ref_key:"zoompinchRef",ref:c,class:"zoompinch",onWheel:x,onGesturestart:X,onMousedown:Y,onTouchstart:C},[a.createElementVNode("div",L,[a.renderSlot(t.$slots,"default",{},void 0,!0)]),a.createElementVNode("div",S,[m.value&&u.value?a.renderSlot(t.$slots,"matrix",{key:0,composePoint:u.value},void 0,!0):a.createCommentVNode("",!0)])],544))}}),[["__scopeId","data-v-46a64396"]]);o.Zoompinch=T,Object.defineProperty(o,Symbol.toStringTag,{value:"Module"})}));
|
package/package.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zoompinch/vue",
|
|
3
|
+
"description": "Vue wrapper for ZoomPinch - reactive pinch & zoom component",
|
|
4
|
+
"version": "0.0.8",
|
|
5
|
+
"private": false,
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/zoompinch-vue.umd.js",
|
|
8
|
+
"module": "./dist/zoompinch-vue.es.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"import": "./dist/zoompinch-vue.es.js",
|
|
13
|
+
"require": "./dist/zoompinch-vue.umd.js",
|
|
14
|
+
"types": "./dist/index.d.ts"
|
|
15
|
+
},
|
|
16
|
+
"./style.css": "./dist/style.css"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"dev": "vite",
|
|
20
|
+
"build": "vue-tsc --noEmit && vite build"
|
|
21
|
+
},
|
|
22
|
+
"files": [
|
|
23
|
+
"dist"
|
|
24
|
+
],
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@vitejs/plugin-vue": "^5.2.4",
|
|
27
|
+
"typescript": "^5.9.3",
|
|
28
|
+
"vite": "^6.4.1",
|
|
29
|
+
"vite-plugin-dts": "^4.5.4",
|
|
30
|
+
"vue-tsc": "^3.2.0"
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"@zoompinch/core": "^0.0.8"
|
|
34
|
+
},
|
|
35
|
+
"peerDependencies": {
|
|
36
|
+
"vue": "^3.5.26"
|
|
37
|
+
}
|
|
38
|
+
}
|