{"version":3,"file":"svg.panzoom.js","sources":["../src/svg.panzoom.js"],"sourcesContent":["import { Svg, on, off, extend, Matrix, Box } from '@svgdotjs/svg.js'\n\r\nconst normalizeEvent = (ev) =>\r\n ev.touches || [{ clientX: ev.clientX, clientY: ev.clientY }]\r\n\r\nextend(Svg, {\r\n panZoom (options) {\r\n this.off('.panZoom')\r\n\r\n // when called with false, disable panZoom\r\n if (options === false) return this\r\n\r\n options = options || {}\r\n const zoomFactor = options.zoomFactor || 0.03\r\n const zoomMin = options.zoomMin || Number.MIN_VALUE\r\n const zoomMax = options.zoomMax || Number.MAX_VALUE\r\n\r\n let lastP; let lastTouches; let zoomInProgress = false\r\n\r\n var wheelZoom = function (ev) {\r\n ev.preventDefault()\r\n\r\n // touchpads can give ev.deltaY == 0, which skrews the lvl calculation\r\n if (ev.deltaY === 0) return\r\n\r\n let lvl = this.zoom() - zoomFactor * ev.deltaY / Math.abs(ev.deltaY)\r\n const p = this.point(ev.clientX, ev.clientY)\r\n\r\n if (lvl > zoomMax) { lvl = zoomMax }\r\n\r\n if (lvl < zoomMin) { lvl = zoomMin }\r\n\r\n if (this.dispatch('zoom', { level: lvl, focus: p }).defaultPrevented) { return this }\r\n\r\n this.zoom(lvl, p)\r\n }\r\n\r\n const pinchZoomStart = function (ev) {\r\n lastTouches = normalizeEvent(ev)\r\n\r\n if (lastTouches.length < 2) return\r\n ev.preventDefault()\r\n\r\n if (this.dispatch('pinchZoomStart', { event: ev }).defaultPrevented) { return }\r\n\r\n this.off('touchstart.panZoom', pinchZoomStart)\r\n\r\n zoomInProgress = true\r\n on(document, 'touchmove.panZoom', pinchZoom, this, { passive: false })\r\n on(document, 'touchend.panZoom', pinchZoomStop, this, { passive: false })\r\n }\r\n\r\n const pinchZoomStop = function (ev) {\r\n ev.preventDefault()\r\n zoomInProgress = false\r\n\r\n this.dispatch('pinchZoomEnd', { event: ev })\r\n\r\n off(document, 'touchmove.panZoom', pinchZoom)\r\n off(document, 'touchend.panZoom', pinchZoomStop)\r\n this.on('touchstart.panZoom', pinchZoomStart)\r\n }\r\n\r\n const pinchZoom = function (ev) {\r\n ev.preventDefault()\r\n\r\n const currentTouches = normalizeEvent(ev)\r\n const zoom = this.zoom()\r\n\r\n // Distance Formula\r\n const lastDelta = Math.sqrt(\r\n Math.pow(lastTouches[0].clientX - lastTouches[1].clientX, 2)\r\n + Math.pow(lastTouches[0].clientY - lastTouches[1].clientY, 2)\r\n )\r\n\r\n const currentDelta = Math.sqrt(\r\n Math.pow(currentTouches[0].clientX - currentTouches[1].clientX, 2)\r\n + Math.pow(currentTouches[0].clientY - currentTouches[1].clientY, 2)\r\n )\r\n\r\n let zoomAmount = lastDelta / currentDelta\r\n\r\n if ((zoom < zoomMin && zoomAmount > 1) || (zoom > zoomMax && zoomAmount < 1)) {\r\n zoomAmount = 1\r\n }\r\n\r\n const currentFocus = {\r\n x: currentTouches[0].clientX + 0.5 * (currentTouches[1].clientX - currentTouches[0].clientX),\r\n y: currentTouches[0].clientY + 0.5 * (currentTouches[1].clientY - currentTouches[0].clientY)\r\n }\r\n\r\n const lastFocus = {\r\n x: lastTouches[0].clientX + 0.5 * (lastTouches[1].clientX - lastTouches[0].clientX),\r\n y: lastTouches[0].clientY + 0.5 * (lastTouches[1].clientY - lastTouches[0].clientY)\r\n }\r\n\r\n const p = this.point(currentFocus.x, currentFocus.y)\r\n const focusP = this.point(2 * currentFocus.x - lastFocus.x, 2 * currentFocus.y - lastFocus.y)\r\n const box = new Box(this.viewbox()).transform(\r\n new Matrix()\r\n .translate(p.x, p.y)\r\n .scale(zoomAmount, 0, 0)\r\n .translate(-focusP.x, -focusP.y)\r\n )\r\n\r\n this.viewbox(box)\r\n\r\n lastTouches = currentTouches\r\n\r\n this.dispatch('zoom', { box: box, focus: focusP })\r\n }\r\n\r\n const panStart = function (ev) {\r\n ev.preventDefault()\r\n\r\n this.off('mousedown.panZoom', panStart)\r\n\r\n lastTouches = normalizeEvent(ev)\r\n\r\n if (zoomInProgress) return\r\n\r\n this.dispatch('panStart', { event: ev })\r\n\r\n lastP = { x: lastTouches[0].clientX, y: lastTouches[0].clientY }\r\n\r\n on(document, 'mousemove.panZoom', panning, this)\r\n on(document, 'mouseup.panZoom', panStop, this)\r\n }\r\n\r\n const panStop = function (ev) {\r\n ev.preventDefault()\r\n\r\n off(document, 'mousemove.panZoom', panning)\r\n off(document, 'mouseup.panZoom', panStop)\r\n this.on('mousedown.panZoom', panStart)\r\n\r\n this.dispatch('panEnd', { event: ev })\r\n }\r\n\r\n const panning = function (ev) {\r\n ev.preventDefault()\r\n\r\n const currentTouches = normalizeEvent(ev)\r\n\r\n const currentP = { x: currentTouches[0].clientX, y: currentTouches[0].clientY }\r\n\r\n const p1 = this.point(currentP.x, currentP.y)\r\n\r\n const p2 = this.point(lastP.x, lastP.y)\r\n\r\n const deltaP = [p2.x - p1.x, p2.y - p1.y]\r\n\r\n const box = new Box(this.viewbox()).transform(new Matrix().translate(deltaP[0], deltaP[1]))\r\n\r\n this.viewbox(box)\r\n lastP = currentP\r\n }\r\n\r\n this.on('wheel.panZoom', wheelZoom)\r\n this.on('touchstart.panZoom', pinchZoomStart, this, { passive: false })\r\n this.on('mousedown.panZoom', panStart, this)\r\n\r\n return this\r\n }\r\n})\r\n"],"names":["normalizeEvent","ev","touches","clientX","clientY","extend","Svg","panZoom","options","off","zoomFactor","zoomMin","Number","MIN_VALUE","zoomMax","MAX_VALUE","lastP","lastTouches","zoomInProgress","wheelZoom","preventDefault","deltaY","lvl","zoom","Math","abs","p","point","dispatch","level","focus","defaultPrevented","pinchZoomStart","length","event","on","document","pinchZoom","passive","pinchZoomStop","currentTouches","lastDelta","sqrt","pow","currentDelta","zoomAmount","currentFocus","x","y","lastFocus","focusP","box","Box","viewbox","transform","Matrix","translate","scale","panStart","panning","panStop","currentP","p1","p2","deltaP"],"mappings":"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"}