@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.
@@ -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
+ };
@@ -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
+ }