@nsqx/pinch-zoom 1.0.0 → 1.1.0

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/README.md CHANGED
@@ -23,7 +23,7 @@ npm install @nsqx/pinch-zoom
23
23
  ```
24
24
 
25
25
 
26
- ## quick start
26
+ ## usage
27
27
 
28
28
  #### JS
29
29
  ```js
@@ -35,16 +35,16 @@ const controller = attachPinchZoom(target, {
35
35
  kbdEvents: true,
36
36
  panMode: ['middle', 'ctrl']
37
37
  });
38
- if (!controller.success) {
39
- console.error("Attachment failed: check console.");
40
- } else {
38
+ if (controller.success) {
41
39
  document.querySelector('#reset').onclick = () => controller.reset();
40
+ } else {
41
+ console.error("Attachment failed: check console.");
42
42
  }
43
43
  ```
44
44
 
45
45
  #### HTML
46
46
  ```html
47
- <div class="zoom-container" style="max-width: 100vw; max-height: 100vh">
47
+ <div class="zoom-container" style="width: 100%; height: 100%">
48
48
  <div class="zoom-target">
49
49
  <!-- ... -->
50
50
  </div>
@@ -74,7 +74,7 @@ Additionally, the dimensions also should not exceed the viewport size. A pinch-z
74
74
  | `smooth` | `boolean` | ~ | enable smooth interpolation for zooming. The default value depends on the `prefers-reduced-motion` value of the client. |
75
75
  | `hinted` | `boolean` | `false` | use CSS `will-change` optimization hint |
76
76
  | `kbdEvents` | `boolean` | `false` | enable **global** keyboard shortcuts (overrides default behavior) |
77
- | `panMode` | `string` \| `array` | `'none'` | mouse panning methods <br>may include<br>* `'ctrl'`: Control + drag to pan <br>* `'alt'`: Alt + drag to pan <br>* `'meta'`: meta (Command) + drag to pan <br>* `'shift'`: Shift + drag to pan <br>* `'middle'`: middle mouse button drag to pan <br>* `'right'`: right mouse button drag to pan <br>or any combination thereof |
77
+ | `panMode` | `string` \| `array` | `'none'` | enable mouse panning <br>* `'ctrl'`: Control + drag <br>* `'alt'`: Alt + drag <br>* `'meta'`: meta (Command) + drag <br>* `'shift'`: Shift + drag <br>* `'middle'`: middle mouse button + drag <br>* `'right'`: right mouse button + drag <br>or any combination thereof |
78
78
  | `onZoom` | `function` | *`() => {}`* | zoom event listener callback <br>* available event properties: `scale`, `x`, `y` |
79
79
  | `onPan` | `function` | *`() => {}`* | pan event listener callback <br>* available event properties: `scale`, `x`, `y` |
80
80
 
@@ -83,18 +83,22 @@ Additionally, the dimensions also should not exceed the viewport size. A pinch-z
83
83
 
84
84
  ### controller object
85
85
 
86
- The function returns a controller, allowing granular control of the PinchZoom object after attachment:
86
+ `attachPinchZoom` returns a controller which allows granular control of the utility object after attachment.
87
87
 
88
+ #### State & configuration
88
89
  * `scale`: set the current zoom level.
89
- * `x` / `y`: set the current scroll-top / scroll-left values.
90
- * `mode`, `min`, `max`, `speed`, `smooth`, `hinted`, `kbdEvents`, `panMode` options can all be changed on-the-fly.
91
- * `reset()`: reset zoom level.
92
- * `destroy()`: remove all pinch-zoom functionality and revert to original styles.
93
- * readonly `viewportX` / `viewportY`: get the screen coordinates of the last zoom event origin.
90
+ * `x` / `y`: set the current horizontal and vertical scroll offsets.
91
+ * Initializer options (`speed`, `min`, `max`...) can be modified on-the-fly.
92
+ * readonly `viewportX` / `viewportY`: get the screen coordinates of the most recent zoom origin.
94
93
  * readonly `success`: check if attachment succeeded.
95
- * readonly `isRtl`: get if pinch-zoom uses right-to-left coordinates.
94
+ * readonly `isRtl`: check if instance uses right-to-left coordinates.
96
95
  * readonly `target` / `container`: references to DOM elements.
97
96
 
97
+ #### Methods
98
+ * `reset()`: reset zoom level.
99
+ * `update()`: synchronize with DOM dimensions.
100
+ * `destroy()`: remove all pinch-zoom functionality and revert elements to original styles.
101
+
98
102
  **Note:** For performance reasons, the metrics accessed via the controller object are debounced and may be inconsistent with actual measurements.
99
103
 
100
104
  ### global viewport locking
@@ -203,7 +207,7 @@ export default ZoomableComponent;
203
207
  </script>
204
208
 
205
209
  <style scoped>
206
- .viewport {
210
+ .container {
207
211
  width: 100%;
208
212
  height: 400px;
209
213
  }
package/dist/index.d.ts CHANGED
@@ -78,6 +78,8 @@ interface PinchZoomController {
78
78
  readonly isRtl: boolean;
79
79
  /** Reset zoom level */
80
80
  readonly reset: () => void;
81
+ /** Update metrics & paint */
82
+ readonly update: () => void;
81
83
  /** Remove all event listeners and restore original styles */
82
84
  readonly destroy: () => void;
83
85
  }
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- const e="All functions must be called from the client side.",t="Use of the non-standard 'zoom' mode is discouraged. Please use 'transform' instead to increase performance and avoid layout shifting.",n="The minimum scale value may not exceed the maximum scale value.",o="The minimum scale value must be a number.",l="The minimum scale value may not be less than 0.001.",i="The minimum scale value may not be greater than 1.",s="The maximum scale value must be a number.",c="The maximum scale value may not be less than 1.",r="The maximum scale value may not be greater than 2500.",a="The speed multiplier must be a number.",m="The speed multiplier may not be less than 0.1.",u="The speed multiplier may not be greater than 10.",d="High zoom levels may impact performance.",f="Something went wrong (detach_listener)...\n\nPlease submit an issue at https://github.com/nsqx/pinch-zoom and include relevant details.",p="Target element must have a parent container.",h="Target must be an element.",y="onZoom must be a function.",g="onPan must be a function.";function x(e){console.error("%c@nsqx/pinch-zoom:%c "+e,"padding:1px 4px;border-width:2px;border-color:#fa4549;border-style:solid;border-radius:4px;","")}function w(e){console.error("%c@nsqx/pinch-zoom:%c "+e,"","")}function v(e){console.warn("%c@nsqx/pinch-zoom:%c "+e,"","")}function b(e){console.debug("%c@nsqx/pinch-zoom:%c "+e,"color:#218bff","")}function _(e,t,n,o){Object.prototype.hasOwnProperty.call(t,n)||(t[n]=e.style[n],e.style[n]=o)}function T(e,t){for(let n in t)void 0!==t[n]?e.style[n]=t[n]:e.style[n]=""}function M(e,t,n,o={}){return e.addEventListener(t,n,o),function(){e.removeEventListener(t,n,o)}}function O(e){try{e()}catch(e){x(f),console.error(e)}}function z(e){if(Array.isArray(e)){for(let t of e)O(t);e.length=0}}function E(){return{success:!1,scale:1,onZoom(){},viewportX:0,viewportY:0,mode:"transform",min:1,max:1,speed:0,hinted:!1,kbdEvents:!1,smooth:!0,panMode:"none",onPan(){},target:null,container:null,isRtl:!1,reset(){},destroy(){}}}const k={min:1,max:4,speed:1,mode:"transform",hinted:!1,kbdEvents:!1,panMode:"none"};const L={mode:e=>"string"==typeof e&&"zoom"===e?(v(t),"zoom"):"transform",smooth:e=>"boolean"==typeof e?e:!!window.matchMedia&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches,min:e=>"number"!=typeof e?(w(o),1):e>1?(w(i),1):e<.001?(w(l),.001):e,max:e=>"number"!=typeof e?(w(s),4):(e>=1e3&&v(d),e<1?(w(c),1):e>2500?(w(r),2500):e),min_max:(e,t)=>e>t?(w(n),[t,e]):[e,t],speed:e=>"number"!=typeof e?(w(a),.01):e>10?(w(u),.1):e<.1?(w(m),.001):e/100};function Y(n,o={}){if("undefined"==typeof window||"undefined"==typeof document)return x(e),E();if(!(n&&n instanceof Element))return x(h),E();const l="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(window):e=>setTimeout(()=>e(Date.now()),17),i=function(e){return e.mode=L.mode(e.mode),e.smooth=L.smooth(e.smooth),[e.min,e.max]=L.min_max(e.min,e.max),e.min=L.min(e.min),e.max=L.max(e.max),e.speed=L.speed(e.speed),e}({...k,...o}),s=n.parentElement;if(!s)return x(p),E();let c=i.panMode,r={};_(s,r,"overflow","auto"),_(s,r,"touchAction","pan-x pan-y"),_(s,r,"position","relative");let a="rtl"===window.getComputedStyle(s).direction,m={};_(n,m,"backfaceVisibility","hidden"),_(n,m,"contain","layout paint"),_(n,m,"position","absolute"),i.hinted&&("zoom"===i.mode?_(n,m,"willChange","zoom"):_(n,m,"willChange","transform"));let u,d,f=1,O=1,Y=0,X=0,q=0,C=0,P=0,K=0,$=!0,D=!1,A=!1,R={};function W(){R.rect=s.getBoundingClientRect(),R.element_ow=n.offsetWidth,R.element_oh=n.offsetHeight,R.element_ol=n.offsetLeft,R.element_ot=n.offsetTop,R.container_ct=s.clientTop,R.container_cl=s.clientLeft,R.container_cw=s.clientWidth,R.container_ch=s.clientHeight,R.scroll_left=a?-s.scrollLeft:s.scrollLeft,R.scroll_top=s.scrollTop,q=R.element_ow*f<R.container_cw?a?-(R.container_cw-R.element_ow*f)/2:(R.container_cw-R.element_ow*f)/2:0,C=R.element_oh*f<R.container_ch?(R.container_ch-R.element_oh*f)/2:0}function B(){"zoom"===i.mode?n.style.zoom=f:(n.style.transformOrigin=(a?"100%":"0")+" 0",n.style.transform=`translate(${q}px, ${C}px) scale(${f})`),s.scrollLeft=a?-R.scroll_left:R.scroll_left,s.scrollTop=R.scroll_top,"function"==typeof i.onZoom&&i.onZoom({scale:f,x:R.scroll_left,y:R.scroll_top}),A=!1}function Z(){W(),B()}function S(e){P=e.x,K=e.y,O=Math.min(Math.max(i.min,O-O*(e.delta*i.speed)),i.max),A||(A=!0,l(H))}function H(){const e=O-f;Math.abs(e)>.001&&i.smooth&&"zoom"!==i.mode?(j(.15,e),l(H)):(j(1,e),A=!1)}function j(e,t){Y=P-R.rect.left-R.element_ol-R.container_cl-q,X=K-R.rect.top-R.element_ot-R.container_ct-C;let n=(Y+R.scroll_left)/f,o=(X+R.scroll_top)/f;f+=t*e,R.element_ow*f<R.container_cw?(q=a?-(R.container_cw-R.element_ow*f)/2:(R.container_cw-R.element_ow*f)/2,R.scroll_left=0):(q=0,R.scroll_left=n*f-Y-q),R.element_oh*f<R.container_ch?(C=(R.container_ch-R.element_oh*f)/2,R.scroll_top=0):(C=0,R.scroll_top=o*f-X-C),B()}Z();let F=[];F.push(M(s,"wheel",function(e){if(D||(D=!0,W()),clearTimeout(u),e.ctrlKey&&(e.preventDefault(),e.stopImmediatePropagation()),e.ctrlKey&&$){let t;t="deltaX"in e?Math.abs(e.deltaY)<90&&e.deltaY%1!=0?e.deltaY*[1,28,500][e.deltaMode||0]:e.deltaY*[1,28,500][e.deltaMode||0]*.25:"wheelDeltaX"in e?.25*e.wheelDeltaY/-3:.25*e.wheelDelta/-3,S({delta:t,x:a?window.innerWidth-e.clientX:e.clientX,y:e.clientY})}else $=!1;u=setTimeout(function(){W(),$=!0,D=!1},100)},{passive:!1})),F.push(M(s,"scroll",function(){d&&clearTimeout(d),d=setTimeout(W,100)},{passive:!0}));let N=[];function I(e){(e.ctrlKey||e.metaKey)&&("0"===e.key||"Digit0"===e.code||48===e.keyCode?S({delta:(f-1)/f/i.speed,x:Y,y:X,rect:s.getBoundingClientRect(),scroll_left:s.scrollLeft,scroll_top:s.scrollTop}):"="===e.key||"Equal"===e.code?(e.preventDefault(),S({delta:-50/f,x:s.clientWidth/2,y:s.clientHeight/2,rect:s.getBoundingClientRect(),scroll_left:s.scrollLeft,scroll_top:s.scrollTop})):"-"!==e.key&&"Minus"!==e.code||(e.preventDefault(),S({delta:50/f,x:s.clientWidth/2,y:s.clientHeight/2,rect:s.getBoundingClientRect(),scroll_left:s.scrollLeft,scroll_top:s.scrollTop})))}i.kbdEvents&&N.push(M(document,"keydown",I,{passive:!1}));let U=!1,V=!1,G=!1,J=!1,Q=-1!==c.indexOf("middle"),ee=-1!==c.indexOf("right"),te={x:0,y:0},ne=[],oe=[],le=[];function ie(){s.style.cursor=V&&Q||J&&ee||U&&G?"grabbing":U?"grab":""}function se(e){!(-1!==c.indexOf("ctrl")&&e.ctrlKey||-1!==c.indexOf("shift")&&e.shiftKey||-1!==c.indexOf("alt")&&e.altKey||-1!==c.indexOf("meta")&&e.metaKey)&&U&&(U=!1,ie(),z(ne))}function ce(e){U=!1,V=!1,ie(),z(ne)}function re(e){(-1!==c.indexOf("ctrl")&&e.ctrlKey||-1!==c.indexOf("shift")&&e.shiftKey||-1!==c.indexOf("alt")&&e.altKey||-1!==c.indexOf("meta")&&e.metaKey)&&!U&&(U=!0,ie(),ne.push(M(document,"keyup",se)),ne.push(M(window,"blur",ce)))}function ae(e){(U&&0===e.button||Q&&1===e.button||ee&&2===e.button)&&(e.preventDefault(),1===e.button?V=!0:2===e.button?J=!0:0===e.button&&(G=!0),ie(),W(),te.x=R.scroll_left+e.clientX,te.y=R.scroll_top+e.clientY,oe.push(M(document,"mousemove",me)),oe.push(M(document,"mouseup",ue)))}function me(e){(U&&G||V&&-1!==c.indexOf("middle")||J&&-1!==c.indexOf("right"))&&(s.scrollLeft=te.x-e.clientX,s.scrollTop=te.y-e.clientY,W(),"function"==typeof i.onPan&&i.onPan({scale:f,x:R.scroll_left,y:R.scroll_top}))}function ue(e){1===e.button?V=!1:2===e.button?J=!1:0===e.button&&(G=!1),ie(),z(oe)}function de(e){-1!==c.indexOf("right")&&e.preventDefault()}(-1!==c.indexOf("ctrl")||-1!==c.indexOf("shift")||-1!==c.indexOf("meta")||-1!==c.indexOf("alt")||Q||ee)&&(le.push(M(s,"mousedown",ae)),le.push(M(document,"keydown",re,{passive:!0})),le.push(M(s,"contextmenu",de)));let fe,pe,he=0,ye=!1;let ge,xe,we=[];return"maxTouchPoints"in navigator&&navigator.maxTouchPoints>0&&(we.push(M(s,"touchstart",function(e){e.touches&&e.touches.length>=2&&(ye=!0,W(),he=Math.sqrt(Math.pow(e.touches[0].pageX-e.touches[1].pageX,2)+Math.pow(e.touches[0].pageY-e.touches[1].pageY,2)),fe=(e.touches[0].pageX+e.touches[1].pageX)/2,pe=(e.touches[0].pageY+e.touches[1].pageY)/2)},{passive:!0})),we.push(M(s,"touchmove",function(e){if(e.touches&&e.touches.length>=2){let t=Math.sqrt(Math.pow(e.touches[0].pageX-e.touches[1].pageX,2)+Math.pow(e.touches[0].pageY-e.touches[1].pageY,2));fe=(e.touches[0].pageX+e.touches[1].pageX)/2,pe=(e.touches[0].pageY+e.touches[1].pageY)/2,S({delta:(he-t)/2,x:fe,y:pe}),he=t}},{passive:!0})),we.push(M(s,"touchend",function(e){ye&&(ye=!1,S({delta:0,x:fe,y:pe}))},{passive:!0}))),F.push(M(window,"resize",Z)),"complete"!==document.readyState&&F.push(M(window,"load",Z)),window.ResizeObserver?(xe=new ResizeObserver(function(e){e.length&&(clearTimeout(ge),ge=setTimeout(Z,17))}),xe.observe(n)):(xe=new MutationObserver(function(){clearTimeout(ge),ge=setTimeout(Z,100)}),xe.observe(n,{childList:!0,subtree:!0,characterData:!0})),b("Attached successfully."),b(`Options:\n\nmode\t\t${i.mode}\nmin\t\t\t${i.min}\nmax\t\t\t${i.max}\nspeed\t\t${100*i.speed}\nsmooth\t\t${i.smooth}\nkbdEvents\t${i.kbdEvents}\nhinted\t\t${i.hinted}\npanMode\t\t${Array.isArray(i.panMode)?i.panMode.join(" "):i.panMode}\nrtl\t\t\t${a}`),{get success(){return!0},get scale(){return f},set scale(e){S({delta:(f-e)/f/i.speed,x:Y,y:X,rect:s.getBoundingClientRect(),scroll_left:s.scrollLeft,scroll_top:s.scrollTop})},get onZoom(){return i.onZoom},set onZoom(e){"function"==typeof e?i.onZoom=e:w(y)},get viewportX(){return Y},get viewportY(){return X},get x(){return a?s.scrollWidth-s.clientWidth-s.scrollLeft:s.scrollLeft},set x(e){if("number"==typeof e)if(a){const t=s.scrollWidth-s.clientWidth,n=Math.min(t,Math.max(0,e));s.scrollLeft=t-n,R.scroll_left=n}else s.scrollLeft=e,R.scroll_left=e},get y(){return s.scrollTop},set y(e){"number"==typeof e&&(s.scrollTop=e,R.scroll_top=e)},get mode(){return i.mode},set mode(e){"string"==typeof e&&"zoom"===e?(i.mode="zoom",v(t),n.style.zoom=f,n.style.transform=""):(i.mode="transform",n.style.transform=`scale(${f})`,n.style.zoom=""),Z()},get min(){return i.min},set min(e){i.min=L.min(e),[i.min,i.max]=L.min_max(i.min,i.max),Z()},get max(){return i.max},set max(e){i.max=L.max(e),[i.min,i.max]=L.min_max(i.min,i.max),Z()},get speed(){return 100*i.speed},set speed(e){i.speed=L.speed(e)},get hinted(){return i.hinted},set hinted(e){i.hinted=!!e,i.hinted&&("zoom"===i.mode?n.style.willChange="zoom":n.style.willChange="transform")},get kbdEvents(){return i.kbdEvents},set kbdEvents(e){i.kbdEvents&&!e?(i.kbdEvents=!1,z(N)):!i.kbdEvents&&e&&(i.kbdEvents=!0,N.push(M(document,"keydown",I,{passive:!1})))},get smooth(){return i.smooth},set smooth(e){i.smooth=L.smooth(e),i.smooth||(f=O,Z())},get panMode(){return c},set panMode(e){z(ne),z(oe),z(le),U=!1,G=!1,V=!1,J=!1,i.panMode=e,c=i.panMode,Q=-1!==c.indexOf("middle"),ee=-1!==c.indexOf("right"),(-1!==c.indexOf("ctrl")||-1!==c.indexOf("shift")||-1!==c.indexOf("meta")||-1!==c.indexOf("alt")||Q||ee)&&(le.push(M(s,"mousedown",ae)),le.push(M(document,"keydown",re,{passive:!0})),le.push(M(s,"contextmenu",de))),ie()},get onPan(){return i.onPan},set onPan(e){"function"==typeof e?i.onPan=e:w(g)},get target(){return n},get container(){return s},get isRtl(){return a},get reset(){return function(){S({delta:(f-1)/f/i.speed,x:Y,y:X,rect:s.getBoundingClientRect(),scroll_left:s.scrollLeft,scroll_top:s.scrollTop})}},get destroy(){return function(){clearTimeout(u),clearTimeout(d),clearTimeout(ge),z(F),z(N),z(ne),z(oe),z(le),z(we),xe&&(xe.disconnect(),xe=null),T(s,r),s.style.cursor="",T(n,m),"zoom"===i.mode?n.style.zoom="":n.style.transform="",s.scrollTop/=f,s.scrollLeft/=f}}}}function X({useMeta:t=!1}={}){if("undefined"==typeof window||"undefined"==typeof document)return w(e),{unlock(){}};function n(e){e.ctrlKey&&e.preventDefault()}window.addEventListener("wheel",n,{passive:!1}),document.documentElement.style.touchAction="pan-x pan-y";let o=null,l=null;return t&&(null!==document.querySelector("meta[name=viewport]")?(o=document.querySelector("meta[name=viewport]").content,document.querySelector("meta[name=viewport]").content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, interactive-widget=resizes-content"):0!==document.getElementsByTagName("head").length&&(l=document.getElementsByTagName("head")[0].appendChild(document.createElement("meta")),l.name="viewport",l.content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, interactive-widget=resizes-content")),{get unlock(){return function(){window.removeEventListener("wheel",n),document.documentElement.style.touchAction="",t&&(null!==o?document.querySelector("meta[name=viewport]").content=o:l.parentElement.removeChild(l))}}}}export{Y as attachPinchZoom,X as pinchZoomLockViewport};
1
+ const e="All functions must be called from the client side.",t="Use of the non-standard 'zoom' mode is discouraged. Please use 'transform' instead to increase performance and avoid layout shifting.",n="The minimum scale value may not exceed the maximum scale value.",o="The minimum scale value must be a number.",l="The minimum scale value may not be less than 0.001.",i="The minimum scale value may not be greater than 1.",s="The maximum scale value must be a number.",c="The maximum scale value may not be less than 1.",r="The maximum scale value may not be greater than 2500.",a="The speed multiplier must be a number.",m="The speed multiplier may not be less than 0.1.",u="The speed multiplier may not be greater than 10.",d="High zoom levels may impact performance.",f="Something went wrong (detach_listener)...\n\nPlease submit an issue at https://github.com/nsqx/pinch-zoom and include relevant details.",p="Target element must have a parent container.",h="Target must be an element.",y="onZoom must be a function.",g="onPan must be a function.";function x(e){console.error("%c@nsqx/pinch-zoom:%c "+e,"padding:1px 4px;border-width:2px;border-color:#fa4549;border-style:solid;border-radius:4px;","")}function w(e){console.error("%c@nsqx/pinch-zoom:%c "+e,"","")}function v(e){console.warn("%c@nsqx/pinch-zoom:%c "+e,"","")}function b(e){console.debug("%c@nsqx/pinch-zoom:%c "+e,"color:#218bff","")}function _(e,t,n,o){Object.prototype.hasOwnProperty.call(t,n)||(t[n]=e.style[n],e.style[n]=o)}function T(e,t){for(let n in t)void 0!==t[n]?e.style[n]=t[n]:e.style[n]=""}function M(e,t,n,o={}){return e.addEventListener(t,n,o),function(){e.removeEventListener(t,n,o)}}function O(e){try{e()}catch(e){x(f),console.error(e)}}function z(e){if(Array.isArray(e)){for(let t of e)O(t);e.length=0}}function E(){return{success:!1,scale:1,onZoom(){},viewportX:0,viewportY:0,mode:"transform",min:1,max:1,speed:0,hinted:!1,kbdEvents:!1,smooth:!0,panMode:"none",onPan(){},target:null,container:null,isRtl:!1,reset(){},destroy(){}}}const k={min:1,max:4,speed:1,mode:"transform",hinted:!1,kbdEvents:!1,panMode:"none"};const L={mode:e=>"string"==typeof e&&"zoom"===e?(v(t),"zoom"):"transform",smooth:e=>"boolean"==typeof e?e:!!window.matchMedia&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches,min:e=>"number"!=typeof e?(w(o),1):e>1?(w(i),1):e<.001?(w(l),.001):e,max:e=>"number"!=typeof e?(w(s),4):(e>=1e3&&v(d),e<1?(w(c),1):e>2500?(w(r),2500):e),min_max:(e,t)=>e>t?(w(n),[t,e]):[e,t],speed:e=>"number"!=typeof e?(w(a),.01):e>10?(w(u),.1):e<.1?(w(m),.001):e/100};function Y(n,o={}){if("undefined"==typeof window||"undefined"==typeof document)return x(e),E();if(!(n&&n instanceof Element))return x(h),E();const l="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(window):e=>setTimeout(()=>e(Date.now()),17),i=function(e){return e.mode=L.mode(e.mode),e.smooth=L.smooth(e.smooth),[e.min,e.max]=L.min_max(e.min,e.max),e.min=L.min(e.min),e.max=L.max(e.max),e.speed=L.speed(e.speed),e}({...k,...o}),s=n.parentElement;if(!s)return x(p),E();let c=i.panMode,r={};_(s,r,"overflow","auto"),_(s,r,"touchAction","pan-x pan-y"),_(s,r,"position","relative");let a="rtl"===window.getComputedStyle(s).direction,m={};_(n,m,"backfaceVisibility","hidden"),_(n,m,"contain","layout paint"),_(n,m,"position","absolute"),i.hinted&&("zoom"===i.mode?_(n,m,"willChange","zoom"):_(n,m,"willChange","transform"));let u,d,f=1,O=1,Y=0,X=0,q=0,C=0,P=0,K=0,$=!0,D=!1,A=!1,R={};function W(){R.rect=s.getBoundingClientRect(),R.element_ow=n.offsetWidth,R.element_oh=n.offsetHeight,R.element_ol=n.offsetLeft,R.element_ot=n.offsetTop,R.container_ct=s.clientTop,R.container_cl=s.clientLeft,R.container_cw=s.clientWidth,R.container_ch=s.clientHeight,R.scroll_left=a?-s.scrollLeft:s.scrollLeft,R.scroll_top=s.scrollTop,q=R.element_ow*f<R.container_cw?a?-(R.container_cw-R.element_ow*f)/2:(R.container_cw-R.element_ow*f)/2:0,C=R.element_oh*f<R.container_ch?(R.container_ch-R.element_oh*f)/2:0}function B(){"zoom"===i.mode?n.style.zoom=f:(n.style.transformOrigin=(a?"100%":"0")+" 0",n.style.transform=`translate(${q}px, ${C}px) scale(${f})`),s.scrollLeft=a?-R.scroll_left:R.scroll_left,s.scrollTop=R.scroll_top,"function"==typeof i.onZoom&&i.onZoom({scale:f,x:R.scroll_left,y:R.scroll_top}),A=!1}function Z(){W(),B()}function S(e){P=e.x,K=e.y,O=Math.min(Math.max(i.min,O-O*(e.delta*i.speed)),i.max),A||(A=!0,l(H))}function H(){const e=O-f;Math.abs(e)>.001&&i.smooth&&"zoom"!==i.mode?(j(.15,e),l(H)):(j(1,e),A=!1)}function j(e,t){Y=P-R.rect.left-R.element_ol-R.container_cl-q,X=K-R.rect.top-R.element_ot-R.container_ct-C;let n=(Y+R.scroll_left)/f,o=(X+R.scroll_top)/f;f+=t*e,R.element_ow*f<R.container_cw?(q=a?-(R.container_cw-R.element_ow*f)/2:(R.container_cw-R.element_ow*f)/2,R.scroll_left=0):(q=0,R.scroll_left=n*f-Y-q),R.element_oh*f<R.container_ch?(C=(R.container_ch-R.element_oh*f)/2,R.scroll_top=0):(C=0,R.scroll_top=o*f-X-C),B()}Z();let F=[];F.push(M(s,"wheel",function(e){if(D||(D=!0,W()),clearTimeout(u),e.ctrlKey&&(e.preventDefault(),e.stopImmediatePropagation()),e.ctrlKey&&$){let t;t="deltaX"in e?Math.abs(e.deltaY)<90&&e.deltaY%1!=0?e.deltaY*[1,28,500][e.deltaMode||0]:e.deltaY*[1,28,500][e.deltaMode||0]*.25:"wheelDeltaX"in e?.25*e.wheelDeltaY/-3:.25*e.wheelDelta/-3,S({delta:t,x:a?window.innerWidth-e.clientX:e.clientX,y:e.clientY})}else $=!1;u=setTimeout(function(){W(),$=!0,D=!1},100)},{passive:!1})),F.push(M(s,"scroll",function(){d&&clearTimeout(d),d=setTimeout(W,100)},{passive:!0}));let N=[];function I(e){(e.ctrlKey||e.metaKey)&&("0"===e.key||"Digit0"===e.code||48===e.keyCode?S({delta:(f-1)/f/i.speed,x:Y,y:X,rect:s.getBoundingClientRect(),scroll_left:s.scrollLeft,scroll_top:s.scrollTop}):"="===e.key||"Equal"===e.code?(e.preventDefault(),S({delta:-50/f,x:s.clientWidth/2,y:s.clientHeight/2,rect:s.getBoundingClientRect(),scroll_left:s.scrollLeft,scroll_top:s.scrollTop})):"-"!==e.key&&"Minus"!==e.code||(e.preventDefault(),S({delta:50/f,x:s.clientWidth/2,y:s.clientHeight/2,rect:s.getBoundingClientRect(),scroll_left:s.scrollLeft,scroll_top:s.scrollTop})))}i.kbdEvents&&N.push(M(document,"keydown",I,{passive:!1}));let U=!1,V=!1,G=!1,J=!1,Q=-1!==c.indexOf("middle"),ee=-1!==c.indexOf("right"),te={x:0,y:0},ne=[],oe=[],le=[];function ie(){s.style.cursor=V&&Q||J&&ee||U&&G?"grabbing":U?"grab":""}function se(e){!(-1!==c.indexOf("ctrl")&&e.ctrlKey||-1!==c.indexOf("shift")&&e.shiftKey||-1!==c.indexOf("alt")&&e.altKey||-1!==c.indexOf("meta")&&e.metaKey)&&U&&(U=!1,ie(),z(ne))}function ce(e){U=!1,V=!1,ie(),z(ne)}function re(e){(-1!==c.indexOf("ctrl")&&e.ctrlKey||-1!==c.indexOf("shift")&&e.shiftKey||-1!==c.indexOf("alt")&&e.altKey||-1!==c.indexOf("meta")&&e.metaKey)&&!U&&(U=!0,ie(),ne.push(M(document,"keyup",se)),ne.push(M(window,"blur",ce)))}function ae(e){(U&&0===e.button||Q&&1===e.button||ee&&2===e.button)&&(e.preventDefault(),1===e.button?V=!0:2===e.button?J=!0:0===e.button&&(G=!0),ie(),W(),te.x=R.scroll_left+e.clientX,te.y=R.scroll_top+e.clientY,oe.push(M(document,"mousemove",me)),oe.push(M(document,"mouseup",ue)))}function me(e){(U&&G||V&&-1!==c.indexOf("middle")||J&&-1!==c.indexOf("right"))&&(s.scrollLeft=te.x-e.clientX,s.scrollTop=te.y-e.clientY,W(),"function"==typeof i.onPan&&i.onPan({scale:f,x:R.scroll_left,y:R.scroll_top}))}function ue(e){1===e.button?V=!1:2===e.button?J=!1:0===e.button&&(G=!1),ie(),z(oe)}function de(e){-1!==c.indexOf("right")&&e.preventDefault()}(-1!==c.indexOf("ctrl")||-1!==c.indexOf("shift")||-1!==c.indexOf("meta")||-1!==c.indexOf("alt")||Q||ee)&&(le.push(M(s,"mousedown",ae)),le.push(M(document,"keydown",re,{passive:!0})),le.push(M(s,"contextmenu",de)));let fe,pe,he=0,ye=!1;let ge,xe,we=[];return"maxTouchPoints"in navigator&&navigator.maxTouchPoints>0&&(we.push(M(s,"touchstart",function(e){e.touches&&e.touches.length>=2&&(ye=!0,W(),he=Math.sqrt(Math.pow(e.touches[0].pageX-e.touches[1].pageX,2)+Math.pow(e.touches[0].pageY-e.touches[1].pageY,2)),fe=(e.touches[0].pageX+e.touches[1].pageX)/2,pe=(e.touches[0].pageY+e.touches[1].pageY)/2)},{passive:!0})),we.push(M(s,"touchmove",function(e){if(e.touches&&e.touches.length>=2){let t=Math.sqrt(Math.pow(e.touches[0].pageX-e.touches[1].pageX,2)+Math.pow(e.touches[0].pageY-e.touches[1].pageY,2));fe=(e.touches[0].pageX+e.touches[1].pageX)/2,pe=(e.touches[0].pageY+e.touches[1].pageY)/2,S({delta:(he-t)/2,x:fe,y:pe}),he=t}},{passive:!0})),we.push(M(s,"touchend",function(e){ye&&(ye=!1,S({delta:0,x:fe,y:pe}))},{passive:!0}))),F.push(M(window,"resize",Z)),"complete"!==document.readyState&&F.push(M(window,"load",Z)),window.ResizeObserver?(xe=new ResizeObserver(function(e){e.length&&(clearTimeout(ge),ge=setTimeout(Z,17))}),xe.observe(n)):(xe=new MutationObserver(function(){clearTimeout(ge),ge=setTimeout(Z,100)}),xe.observe(n,{childList:!0,subtree:!0,characterData:!0})),b("Attached successfully."),b(`Options:\n\nmode\t\t${i.mode}\nmin\t\t\t${i.min}\nmax\t\t\t${i.max}\nspeed\t\t${100*i.speed}\nsmooth\t\t${i.smooth}\nkbdEvents\t${i.kbdEvents}\nhinted\t\t${i.hinted}\npanMode\t\t${Array.isArray(i.panMode)?i.panMode.join(" "):i.panMode}\nrtl\t\t\t${a}`),{get success(){return!0},get scale(){return f},set scale(e){S({delta:(f-e)/f/i.speed,x:Y,y:X,rect:s.getBoundingClientRect(),scroll_left:s.scrollLeft,scroll_top:s.scrollTop})},get onZoom(){return i.onZoom},set onZoom(e){"function"==typeof e?i.onZoom=e:w(y)},get viewportX(){return Y},get viewportY(){return X},get x(){return a?s.scrollWidth-s.clientWidth-s.scrollLeft:s.scrollLeft},set x(e){if("number"==typeof e)if(a){const t=s.scrollWidth-s.clientWidth,n=Math.min(t,Math.max(0,e));s.scrollLeft=t-n,R.scroll_left=n}else s.scrollLeft=e,R.scroll_left=e},get y(){return s.scrollTop},set y(e){"number"==typeof e&&(s.scrollTop=e,R.scroll_top=e)},get mode(){return i.mode},set mode(e){"string"==typeof e&&"zoom"===e?(i.mode="zoom",v(t),n.style.zoom=f,n.style.transform=""):(i.mode="transform",n.style.transform=`scale(${f})`,n.style.zoom=""),Z()},get min(){return i.min},set min(e){i.min=L.min(e),[i.min,i.max]=L.min_max(i.min,i.max),Z()},get max(){return i.max},set max(e){i.max=L.max(e),[i.min,i.max]=L.min_max(i.min,i.max),Z()},get speed(){return 100*i.speed},set speed(e){i.speed=L.speed(e)},get hinted(){return i.hinted},set hinted(e){i.hinted=!!e,i.hinted&&("zoom"===i.mode?n.style.willChange="zoom":n.style.willChange="transform")},get kbdEvents(){return i.kbdEvents},set kbdEvents(e){i.kbdEvents&&!e?(i.kbdEvents=!1,z(N)):!i.kbdEvents&&e&&(i.kbdEvents=!0,N.push(M(document,"keydown",I,{passive:!1})))},get smooth(){return i.smooth},set smooth(e){i.smooth=L.smooth(e),i.smooth||(f=O,Z())},get panMode(){return c},set panMode(e){z(ne),z(oe),z(le),U=!1,G=!1,V=!1,J=!1,i.panMode=e,c=i.panMode,Q=-1!==c.indexOf("middle"),ee=-1!==c.indexOf("right"),(-1!==c.indexOf("ctrl")||-1!==c.indexOf("shift")||-1!==c.indexOf("meta")||-1!==c.indexOf("alt")||Q||ee)&&(le.push(M(s,"mousedown",ae)),le.push(M(document,"keydown",re,{passive:!0})),le.push(M(s,"contextmenu",de))),ie()},get onPan(){return i.onPan},set onPan(e){"function"==typeof e?i.onPan=e:w(g)},get target(){return n},get container(){return s},get isRtl(){return a},get reset(){return function(){S({delta:(f-1)/f/i.speed,x:Y,y:X,rect:s.getBoundingClientRect(),scroll_left:s.scrollLeft,scroll_top:s.scrollTop})}},get update(){return function(){Z()}},get destroy(){return function(){clearTimeout(u),clearTimeout(d),clearTimeout(ge),z(F),z(N),z(ne),z(oe),z(le),z(we),xe&&(xe.disconnect(),xe=null),T(s,r),s.style.cursor="",T(n,m),"zoom"===i.mode?n.style.zoom="":n.style.transform="",s.scrollTop/=f,s.scrollLeft/=f}}}}function X({useMeta:t=!1}={}){if("undefined"==typeof window||"undefined"==typeof document)return w(e),{unlock(){}};function n(e){e.ctrlKey&&e.preventDefault()}window.addEventListener("wheel",n,{passive:!1}),document.documentElement.style.touchAction="pan-x pan-y";let o=null,l=null;return t&&(null!==document.querySelector("meta[name=viewport]")?(o=document.querySelector("meta[name=viewport]").content,document.querySelector("meta[name=viewport]").content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, interactive-widget=resizes-content"):0!==document.getElementsByTagName("head").length&&(l=document.getElementsByTagName("head")[0].appendChild(document.createElement("meta")),l.name="viewport",l.content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, interactive-widget=resizes-content")),{get unlock(){return function(){window.removeEventListener("wheel",n),document.documentElement.style.touchAction="",t&&(null!==o?document.querySelector("meta[name=viewport]").content=o:l.parentElement.removeChild(l))}}}}export{Y as attachPinchZoom,X as pinchZoomLockViewport};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/dx.js","../src/helpers.js","../src/options.js","../src/index.js"],"sourcesContent":["export const messages = {\n 'ssr': 'All functions must be called from the client side.',\n 'warn-mode': 'Use of the non-standard \\'zoom\\' mode is discouraged. Please use \\'transform\\' instead to increase performance and avoid layout shifting.',\n 'min-max': 'The minimum scale value may not exceed the maximum scale value.',\n 'min-NaN': 'The minimum scale value must be a number.',\n 'min<': 'The minimum scale value may not be less than 0.001.',\n 'min>': 'The minimum scale value may not be greater than 1.',\n 'max-NaN': 'The maximum scale value must be a number.',\n 'max<': 'The maximum scale value may not be less than 1.',\n 'max>': 'The maximum scale value may not be greater than 2500.',\n 'speed-NaN': 'The speed multiplier must be a number.',\n 'speed<': 'The speed multiplier may not be less than 0.1.',\n 'speed>': 'The speed multiplier may not be greater than 10.',\n 'warn-high-zoom': 'High zoom levels may impact performance.',\n 'crit-detach-listener': 'Something went wrong (detach_listener)...\\n\\nPlease submit an issue at https://github.com/nsqx/pinch-zoom and include relevant details.',\n 'parent-element': 'Target element must have a parent container.',\n 'target-element': 'Target must be an element.',\n 'onZoom-type': 'onZoom must be a function.',\n 'onPan-type': 'onPan must be a function.'\n}\n\n\nexport function _fatal(msg) {\n console.error('%c@nsqx/pinch-zoom:%c ' + msg, 'padding:1px 4px;border-width:2px;border-color:#fa4549;border-style:solid;border-radius:4px;', '');\n}\nexport function _error(msg) {\n console.error('%c@nsqx/pinch-zoom:%c ' + msg, '', '');\n}\nexport function _warn(msg) {\n console.warn('%c@nsqx/pinch-zoom:%c ' + msg, '', '');\n}\nexport function _log(msg) {\n console.log('%c@nsqx/pinch-zoom:%c ' + msg, 'color:#218bff', '');\n}\nexport function _debug(msg) {\n console.debug('%c@nsqx/pinch-zoom:%c ' + msg, 'color:#218bff', '');\n}","import { messages, _fatal, _error, _warn, _log } from './dx';\n\n\nexport function set_style(target, resets, name, value) {\n if (!Object.prototype.hasOwnProperty.call(resets, name)) {\n resets[name] = target.style[name];\n target.style[name] = value;\n }\n}\nexport function reset_styles(target, resets) {\n for (let prop in resets)\n if (resets[prop] !== undefined) {\n target.style[prop] = resets[prop];\n } else {\n target.style[prop] = '';\n }\n}\n\nexport function attach_listener(target, event, f, options = {}) {\n target.addEventListener(event, f, options);\n return function () {\n target.removeEventListener(event, f, options);\n };\n}\nexport function detach_listener(detach) {\n try {\n detach();\n } catch (ex) {\n _fatal(messages['crit-detach-listener']);\n console.error(ex);\n }\n}\nexport function detach_all_listeners(handles) {\n if (!Array.isArray(handles)) return;\n for (let detach of handles) {\n detach_listener(detach);\n }\n handles.length = 0;\n}","import { messages, _error, _warn, _log } from './dx';\n\n\nexport function empty_controller() {\n return {\n success: false,\n scale: 1,\n onZoom() {},\n viewportX: 0,\n viewportY: 0,\n mode: 'transform',\n min: 1,\n max: 1,\n speed: 0,\n hinted: false,\n kbdEvents: false,\n smooth: true,\n panMode: 'none',\n onPan() {},\n target: null,\n container: null,\n isRtl: false,\n reset() {},\n destroy() {},\n };\n}\n\nexport const option_defaults = {\n min: 1,\n max: 4,\n speed: 1,\n mode: 'transform',\n hinted: false,\n kbdEvents: false,\n panMode: 'none',\n}\n\nexport function normalize_options(opts) {\n opts.mode = set_normalize.mode(opts.mode);\n opts.smooth = set_normalize.smooth(opts.smooth);\n [opts.min, opts.max] = set_normalize.min_max(opts.min, opts.max);\n opts.min = set_normalize.min(opts.min);\n opts.max = set_normalize.max(opts.max);\n opts.speed = set_normalize.speed(opts.speed);\n return opts;\n}\n\nexport const set_normalize = {\n mode(use_mode) {\n if (typeof use_mode === 'string' && use_mode === 'zoom') {\n _warn(messages['warn-mode']);\n return 'zoom';\n } else {\n return 'transform';\n }\n },\n smooth(use_smooth) {\n return typeof use_smooth === 'boolean'\n ? use_smooth\n : (window.matchMedia ? !window.matchMedia('(prefers-reduced-motion: reduce)').matches : false);\n },\n min(use_min) {\n if (typeof use_min !== 'number') {\n _error(messages['min-NaN']);\n return 1\n };\n if (use_min > 1) {\n _error(messages['min>']);\n return 1;\n } else if (use_min < 0.001) {\n _error(messages['min<']);\n return 0.001;\n } else {\n return use_min;\n }\n },\n max(use_max) {\n if (typeof use_max !== 'number') {\n _error(messages['max-NaN']);\n return 4;\n };\n if (use_max >= 1000) {\n _warn(messages['warn-high-zoom']);\n }\n if (use_max < 1) {\n _error(messages['max<']);\n return 1;\n } else if (use_max > 2500) {\n _error(messages['max>']);\n return 2500;\n } else {\n return use_max;\n }\n },\n min_max(use_min, use_max) {\n if (use_min > use_max) {\n _error(messages['min-max']);\n return [use_max, use_min];\n } else {\n return [use_min, use_max];\n }\n },\n speed(use_speed) {\n if (typeof use_speed !== 'number') {\n _error(messages['speed-NaN']);\n return 1 / 100;\n };\n if (use_speed > 10) {\n _error(messages['speed>']);\n return 10 / 100;\n } else if (use_speed < 0.1) {\n _error(messages['speed<']);\n return 0.1 / 100;\n } else {\n return use_speed / 100;\n }\n }\n}","import { messages, _fatal, _error, _warn, _debug } from './dx';\nimport { set_style, reset_styles, attach_listener, detach_all_listeners } from './helpers';\nimport { empty_controller, normalize_options, option_defaults, set_normalize } from './options';\n\n// ---\n\n/** @typedef {import('../index').PinchZoomOptions} PinchZoomOptions */\n/** @typedef {import('../index').PinchZoomController} PinchZoomController */\n\n/**\n * Attach pinch-zoom functionality to an element\n * @param {HTMLElement} element --- The target element to attach zoom functionality\n * @param {PinchZoomOptions} [options] --- Configuration options\n * @returns {PinchZoomController}\n */\nexport function attachPinchZoom(element, options = {}) {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n _fatal(messages['ssr']);\n return empty_controller();\n }\n\n if (!(element && element instanceof Element)) {\n _fatal(messages['target-element']);\n return empty_controller();\n }\n\n const rAF = (function () {\n if (typeof requestAnimationFrame === 'function') {\n return requestAnimationFrame.bind(window);\n }\n return (f) => setTimeout(() => f(Date.now()), 17);\n })();\n\n // --- normalize options\n\n const opts = normalize_options({\n ...option_defaults,\n ...options,\n });\n const container = element.parentElement;\n if (!container) {\n _fatal(messages['parent-element']);\n return empty_controller();\n }\n\n let pan_mode = opts.panMode;\n\n // container.classList.add('pinch-zoom-container'); // (unused; selector)\n let resets_container = {};\n set_style(container, resets_container, 'overflow', 'auto');\n set_style(container, resets_container, 'touchAction', 'pan-x pan-y');\n set_style(container, resets_container, 'position', 'relative');\n\n let is_rtl = window.getComputedStyle(container).direction === 'rtl';\n\n let resets_element = {};\n // element.classList.add('pinch-zoom-content'); // (unused; selector)\n set_style(element, resets_element, 'backfaceVisibility', 'hidden'); // perf\n set_style(element, resets_element, 'contain', 'layout paint'); // perf\n set_style(element, resets_element, 'position', 'absolute');\n if (opts.hinted)\n if (opts.mode === 'zoom') {\n set_style(element, resets_element, 'willChange', 'zoom');\n } else {\n set_style(element, resets_element, 'willChange', 'transform');\n }\n\n // --- setup\n\n let scale = 1;\n let target_scale = 1;\n let m_x = 0;\n let m_y = 0;\n let translate_x = 0;\n let translate_y = 0;\n let target_x = 0;\n let target_y = 0;\n\n let use_zoom = true;\n let is_wheel_event = false;\n let wheel_debounce_timout, scroll_debounce_timout;\n let _paint_queue = false;\n\n let cached_metrics = {};\n\n function update_cached_metrics() {\n cached_metrics.rect = container.getBoundingClientRect();\n cached_metrics.element_ow = element.offsetWidth;\n cached_metrics.element_oh = element.offsetHeight;\n cached_metrics.element_ol = element.offsetLeft;\n cached_metrics.element_ot = element.offsetTop;\n cached_metrics.container_ct = container.clientTop;\n cached_metrics.container_cl = container.clientLeft;\n cached_metrics.container_cw = container.clientWidth;\n cached_metrics.container_ch = container.clientHeight;\n cached_metrics.scroll_left = is_rtl ? -container.scrollLeft : container.scrollLeft;\n cached_metrics.scroll_top = container.scrollTop;\n if (cached_metrics.element_ow * scale < cached_metrics.container_cw) {\n translate_x = is_rtl ? -(cached_metrics.container_cw - cached_metrics.element_ow * scale) / 2 : (cached_metrics.container_cw - cached_metrics.element_ow * scale) / 2;\n } else {\n translate_x = 0;\n }\n if (cached_metrics.element_oh * scale < cached_metrics.container_ch) {\n translate_y = (cached_metrics.container_ch - cached_metrics.element_oh * scale) / 2;\n } else {\n translate_y = 0;\n }\n }\n\n function _paint() {\n if (opts.mode === 'zoom') {\n element.style.zoom = scale;\n } else {\n element.style.transformOrigin = `${is_rtl ? '100%' : '0'} 0`;\n element.style.transform = `translate(${translate_x}px, ${translate_y}px) scale(${scale})`;\n }\n\n // rtl logic tested on latest firefox, chrome, and edge versions only\n container.scrollLeft = is_rtl ? -cached_metrics.scroll_left : cached_metrics.scroll_left;\n container.scrollTop = cached_metrics.scroll_top;\n if (typeof opts.onZoom === 'function') {\n opts.onZoom({ scale: scale, x: cached_metrics.scroll_left, y: cached_metrics.scroll_top });\n }\n _paint_queue = false;\n }\n\n function update_and_paint() {\n update_cached_metrics();\n _paint();\n }\n update_and_paint();\n\n // --- main\n\n function apply_zoom(f_opts) {\n target_x = f_opts.x;\n target_y = f_opts.y;\n\n target_scale = Math.min(Math.max(opts.min, target_scale - target_scale * (f_opts.delta * opts.speed)), opts.max);\n\n if (!_paint_queue) {\n _paint_queue = true;\n rAF(smooth_update);\n }\n }\n function smooth_update() {\n const diff = target_scale - scale;\n\n if (Math.abs(diff) > 0.001 && opts.smooth && opts.mode !== 'zoom') {\n perform_transform(0.15, diff);\n rAF(smooth_update);\n } else {\n perform_transform(1, diff);\n _paint_queue = false;\n }\n }\n function perform_transform(lerp, diff) {\n // mouse pos, relative to element visual state\n m_x = target_x - cached_metrics.rect.left - cached_metrics.element_ol - cached_metrics.container_cl - translate_x;\n m_y = target_y - cached_metrics.rect.top - cached_metrics.element_ot - cached_metrics.container_ct - translate_y;\n let content_x = (m_x + cached_metrics.scroll_left) / scale;\n let content_y = (m_y + cached_metrics.scroll_top) / scale;\n\n scale += diff * lerp;\n\n if (cached_metrics.element_ow * scale < cached_metrics.container_cw) {\n // width of content is less than viewport\n translate_x = is_rtl ? -(cached_metrics.container_cw - cached_metrics.element_ow * scale) / 2 : (cached_metrics.container_cw - cached_metrics.element_ow * scale) / 2;\n cached_metrics.scroll_left = 0;\n } else {\n translate_x = 0;\n cached_metrics.scroll_left = content_x * scale - m_x - translate_x;\n }\n\n if (cached_metrics.element_oh * scale < cached_metrics.container_ch) {\n // height of content is less than viewport\n translate_y = (cached_metrics.container_ch - cached_metrics.element_oh * scale) / 2;\n cached_metrics.scroll_top = 0;\n } else {\n translate_y = 0;\n cached_metrics.scroll_top = content_y * scale - m_y - translate_y;\n }\n\n _paint();\n }\n\n function wheel_listener(e) {\n if (!is_wheel_event) {\n is_wheel_event = true;\n update_cached_metrics();\n }\n clearTimeout(wheel_debounce_timout);\n if (e.ctrlKey) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n if (e.ctrlKey && use_zoom) {\n let norm_delta;\n if ('deltaX' in e) {\n // if (Math.abs(e.deltaY) < 24 && e.deltaY % 1 !== 0) {\n // trackpad pinching\n // } else\n if (Math.abs(e.deltaY) < 90 && e.deltaY % 1 !== 0) {\n // ctrl + trackpad // & trackpad pinching\n norm_delta = e.deltaY * [1, 28, 500][e.deltaMode || 0];\n } else {\n // ctrl + wheel\n norm_delta = e.deltaY * [1, 28, 500][e.deltaMode || 0] * 0.25;\n }\n } else if ('wheelDeltaX' in e)\n norm_delta = (e.wheelDeltaY * 0.25) / -3; // legacy\n else norm_delta = (e.wheelDelta * 0.25) / -3;\n apply_zoom({\n delta: norm_delta,\n x: is_rtl ? window.innerWidth - e.clientX : e.clientX,\n y: e.clientY,\n rect: cached_metrics.rect,\n scroll_left: cached_metrics.scroll_left,\n scroll_top: cached_metrics.scroll_top,\n });\n } else {\n use_zoom = false;\n }\n\n wheel_debounce_timout = setTimeout(function () {\n update_cached_metrics();\n use_zoom = true;\n is_wheel_event = false;\n }, 100);\n }\n\n let general_listeners = [];\n general_listeners.push(attach_listener(container, 'wheel', wheel_listener, { passive: false }));\n\n function scroll_listener() {\n scroll_debounce_timout && clearTimeout(scroll_debounce_timout);\n scroll_debounce_timout = setTimeout(update_cached_metrics, 100);\n }\n general_listeners.push(attach_listener(container, 'scroll', scroll_listener, { passive: true }));\n\n // --- kbd shortcuts\n\n let kbd_listeners = [];\n\n function kbd_listener(e) {\n // reset zoom\n if (e.ctrlKey || e.metaKey)\n if (e.key === '0' || e.code === 'Digit0' || e.keyCode === 48) {\n apply_zoom({\n delta: (scale - 1) / scale / opts.speed,\n x: m_x,\n y: m_y,\n rect: container.getBoundingClientRect(),\n scroll_left: container.scrollLeft,\n scroll_top: container.scrollTop,\n });\n } else if (e.key === '=' || e.code === 'Equal') {\n e.preventDefault();\n apply_zoom({\n delta: -50 / scale,\n x: container.clientWidth / 2,\n y: container.clientHeight / 2,\n rect: container.getBoundingClientRect(),\n scroll_left: container.scrollLeft,\n scroll_top: container.scrollTop,\n });\n } else if (e.key === '-' || e.code === 'Minus') {\n e.preventDefault();\n apply_zoom({\n delta: 50 / scale,\n x: container.clientWidth / 2,\n y: container.clientHeight / 2,\n rect: container.getBoundingClientRect(),\n scroll_left: container.scrollLeft,\n scroll_top: container.scrollTop,\n });\n }\n }\n\n if (opts.kbdEvents) kbd_listeners.push(attach_listener(document, 'keydown', kbd_listener, { passive: false }));\n\n // --- mouse pan\n\n let is_kbd_pannable = false,\n is_mmouse_down = false,\n is_lmouse_down = false,\n is_rmouse_down = false;\n let use_middle = pan_mode.indexOf('middle') !== -1;\n let use_right = pan_mode.indexOf('right') !== -1;\n let pan_origin = { x: 0, y: 0 };\n\n let pan_kbd_end_listeners = [];\n let pan_mouse_listeners = [];\n let pan_start_listeners = [];\n\n function update_pan_cursor_state() {\n if ((is_mmouse_down && use_middle) || (is_rmouse_down && use_right) || (is_kbd_pannable && is_lmouse_down)) {\n container.style.cursor = 'grabbing';\n } else if (is_kbd_pannable) {\n container.style.cursor = 'grab';\n } else {\n container.style.cursor = '';\n }\n }\n\n function pan_kbd_drag__keyup(e) {\n let condition =\n (pan_mode.indexOf('ctrl') !== -1 && e.ctrlKey) ||\n (pan_mode.indexOf('shift') !== -1 && e.shiftKey) ||\n (pan_mode.indexOf('alt') !== -1 && e.altKey) ||\n (pan_mode.indexOf('meta') !== -1 && e.metaKey);\n if (!condition && is_kbd_pannable) {\n is_kbd_pannable = false;\n update_pan_cursor_state();\n detach_all_listeners(pan_kbd_end_listeners);\n }\n }\n function pan_kbd_drag__lost_focus(e) {\n is_kbd_pannable = false;\n is_mmouse_down = false;\n update_pan_cursor_state();\n detach_all_listeners(pan_kbd_end_listeners);\n }\n function pan_kbd_drag__keydown(e) {\n let condition =\n (pan_mode.indexOf('ctrl') !== -1 && e.ctrlKey) ||\n (pan_mode.indexOf('shift') !== -1 && e.shiftKey) ||\n (pan_mode.indexOf('alt') !== -1 && e.altKey) ||\n (pan_mode.indexOf('meta') !== -1 && e.metaKey);\n if (condition && !is_kbd_pannable) {\n is_kbd_pannable = true;\n update_pan_cursor_state();\n pan_kbd_end_listeners.push(attach_listener(document, 'keyup', pan_kbd_drag__keyup));\n pan_kbd_end_listeners.push(attach_listener(window, 'blur', pan_kbd_drag__lost_focus));\n }\n }\n\n function pan_drag__mouse_down(e) {\n if ((is_kbd_pannable && e.button === 0) || (use_middle && e.button === 1) || (use_right && e.button === 2)) {\n e.preventDefault();\n if (e.button === 1) {\n is_mmouse_down = true;\n } else if (e.button === 2) {\n is_rmouse_down = true;\n } else if (e.button === 0) {\n is_lmouse_down = true;\n }\n update_pan_cursor_state();\n update_cached_metrics();\n pan_origin.x = cached_metrics.scroll_left + e.clientX;\n pan_origin.y = cached_metrics.scroll_top + e.clientY;\n pan_mouse_listeners.push(attach_listener(document, 'mousemove', pan_drag__mouse_move));\n pan_mouse_listeners.push(attach_listener(document, 'mouseup', pan_drag__mouse_up));\n }\n }\n function pan_drag__mouse_move(e) {\n if (\n (is_kbd_pannable && is_lmouse_down) ||\n (is_mmouse_down && pan_mode.indexOf('middle') !== -1) ||\n (is_rmouse_down && pan_mode.indexOf('right') !== -1)\n ) {\n container.scrollLeft = pan_origin.x - e.clientX;\n container.scrollTop = pan_origin.y - e.clientY;\n update_cached_metrics();\n if (typeof opts.onPan === 'function') {\n opts.onPan({ scale: scale, x: cached_metrics.scroll_left, y: cached_metrics.scroll_top });\n }\n }\n }\n function pan_drag__mouse_up(e) {\n if (e.button === 1) {\n is_mmouse_down = false;\n } else if (e.button === 2) {\n is_rmouse_down = false;\n } else if (e.button === 0) {\n is_lmouse_down = false;\n }\n update_pan_cursor_state();\n detach_all_listeners(pan_mouse_listeners);\n }\n function pan_drag__ctx_cancel(e) {\n if (pan_mode.indexOf('right') !== -1) e.preventDefault();\n }\n\n if (\n pan_mode.indexOf('ctrl') !== -1 ||\n pan_mode.indexOf('shift') !== -1 ||\n pan_mode.indexOf('meta') !== -1 ||\n pan_mode.indexOf('alt') !== -1 ||\n use_middle ||\n use_right\n ) {\n pan_start_listeners.push(attach_listener(container, 'mousedown', pan_drag__mouse_down));\n pan_start_listeners.push(attach_listener(document, 'keydown', pan_kbd_drag__keydown, { passive: true }));\n pan_start_listeners.push(attach_listener(container, 'contextmenu', pan_drag__ctx_cancel));\n }\n\n // --- touchscreen support\n\n let touch_span = 0;\n let touch_is_multi = false;\n let touch_x, touch_y;\n\n function touch_start_listener(e) {\n if (e.touches && e.touches.length >= 2) {\n touch_is_multi = true;\n update_cached_metrics();\n touch_span = Math.sqrt(\n Math.pow(e.touches[0].pageX - e.touches[1].pageX, 2) + Math.pow(e.touches[0].pageY - e.touches[1].pageY, 2),\n );\n // touch_theta = Math.atan2(e.touches[1].pageY - e.touches[0].pageY, e.touches[1].pageX - e.touches[0].pageX);\n touch_x = (e.touches[0].pageX + e.touches[1].pageX) / 2;\n touch_y = (e.touches[0].pageY + e.touches[1].pageY) / 2;\n }\n }\n function touch_move_listener(e) {\n if (e.touches && e.touches.length >= 2) {\n let dist = Math.sqrt(\n Math.pow(e.touches[0].pageX - e.touches[1].pageX, 2) + Math.pow(e.touches[0].pageY - e.touches[1].pageY, 2),\n );\n // theta = Math.atan2(e.touches[1].pageY - e.touches[0].pageY, e.touches[1].pageX - e.touches[0].pageX) - touch_theta /* + angle */;\n // if (theta > Math.PI) theta -= 2 * Math.PI;\n // if (theta < -Math.PI) theta += 2 * Math.PI;\n // if (Math.abs(theta) < (Math.PI / 12)) theta = 0; // snap logic\n touch_x = (e.touches[0].pageX + e.touches[1].pageX) / 2;\n touch_y = (e.touches[0].pageY + e.touches[1].pageY) / 2;\n apply_zoom({\n delta: (touch_span - dist) / 2,\n x: touch_x,\n y: touch_y,\n rect: cached_metrics.rect,\n scroll_left: cached_metrics.scroll_left,\n scroll_top: cached_metrics.scroll_top,\n });\n touch_span = dist;\n }\n }\n function touch_end_listener(e) {\n if (touch_is_multi) {\n touch_is_multi = false;\n apply_zoom({\n delta: 0,\n x: touch_x,\n y: touch_y,\n rect: cached_metrics.rect,\n scroll_left: cached_metrics.scroll_left,\n scroll_top: cached_metrics.scroll_top,\n });\n }\n }\n\n let touch_listeners = [];\n if ('maxTouchPoints' in navigator && navigator.maxTouchPoints > 0) {\n touch_listeners.push(attach_listener(container, 'touchstart', touch_start_listener, { passive: true }));\n touch_listeners.push(attach_listener(container, 'touchmove', touch_move_listener, { passive: true }));\n touch_listeners.push(attach_listener(container, 'touchend', touch_end_listener, { passive: true }));\n }\n\n // --- attach\n\n general_listeners.push(attach_listener(window, 'resize', update_and_paint));\n document.readyState !== 'complete' && general_listeners.push(attach_listener(window, 'load', update_and_paint));\n\n let observer_debounce_timout, observer;\n if (window.ResizeObserver) {\n observer = new ResizeObserver(function (entries) {\n if (!entries.length) return;\n clearTimeout(observer_debounce_timout);\n observer_debounce_timout = setTimeout(update_and_paint, 17);\n });\n observer.observe(element);\n } else {\n observer = new MutationObserver(function () {\n clearTimeout(observer_debounce_timout);\n observer_debounce_timout = setTimeout(update_and_paint, 100);\n });\n observer.observe(element, { childList: true, subtree: true, characterData: true });\n }\n\n _debug('Attached successfully.');\n _debug(`Options:\n\nmode\\t\\t${opts.mode}\nmin\\t\\t\\t${opts.min}\nmax\\t\\t\\t${opts.max}\nspeed\\t\\t${opts.speed * 100}\nsmooth\\t\\t${opts.smooth}\nkbdEvents\\t${opts.kbdEvents}\nhinted\\t\\t${opts.hinted}\npanMode\\t\\t${Array.isArray(opts.panMode) ? opts.panMode.join(' ') : opts.panMode}\nrtl\\t\\t\\t${is_rtl}`);\n\n // ---\n\n return {\n get success() {\n // readonly\n return true;\n },\n get scale() {\n return scale;\n },\n set scale(use_scale) {\n apply_zoom({\n delta: (scale - use_scale) / scale / opts.speed,\n x: m_x,\n y: m_y,\n rect: container.getBoundingClientRect(),\n scroll_left: container.scrollLeft,\n scroll_top: container.scrollTop,\n });\n },\n get onZoom() {\n return opts.onZoom;\n },\n set onZoom(use_onZoom) {\n if (typeof use_onZoom === 'function') opts.onZoom = use_onZoom;\n else _error(messages['onZoom-type']);\n },\n get viewportX() {\n // readonly\n return m_x;\n },\n get viewportY() {\n // readonly\n return m_y;\n },\n get x() {\n if (is_rtl) return container.scrollWidth - container.clientWidth - container.scrollLeft;\n return container.scrollLeft;\n },\n set x(use_x) {\n if (typeof use_x === 'number')\n if (is_rtl) {\n const max_scroll = container.scrollWidth - container.clientWidth;\n const scroll_pos = Math.min(max_scroll, Math.max(0, use_x));\n container.scrollLeft = max_scroll - scroll_pos;\n cached_metrics.scroll_left = scroll_pos;\n } else {\n container.scrollLeft = use_x;\n cached_metrics.scroll_left = use_x;\n }\n },\n get y() {\n return container.scrollTop;\n },\n set y(use_y) {\n if (typeof use_y === 'number') {\n container.scrollTop = use_y;\n cached_metrics.scroll_top = use_y;\n }\n },\n get mode() {\n return opts.mode;\n },\n set mode(use_mode) {\n if (typeof use_mode === 'string' && use_mode === 'zoom') {\n opts.mode = 'zoom';\n _warn(messages['warn-mode']);\n element.style.zoom = scale;\n element.style.transform = '';\n } else {\n opts.mode = 'transform';\n element.style.transform = `scale(${scale})`;\n element.style.zoom = '';\n }\n update_and_paint();\n },\n get min() {\n return opts.min;\n },\n set min(use_min) {\n opts.min = set_normalize.min(use_min);\n [opts.min, opts.max] = set_normalize.min_max(opts.min, opts.max);\n update_and_paint();\n },\n get max() {\n return opts.max;\n },\n set max(use_max) {\n opts.max = set_normalize.max(use_max);\n [opts.min, opts.max] = set_normalize.min_max(opts.min, opts.max);\n update_and_paint();\n },\n get speed() {\n return opts.speed * 100;\n },\n set speed(use_speed) {\n opts.speed = set_normalize.speed(use_speed);\n },\n get hinted() {\n return opts.hinted;\n },\n set hinted(use_hint) {\n opts.hinted = !!use_hint;\n if (opts.hinted)\n if (opts.mode === 'zoom') {\n element.style.willChange = 'zoom';\n } else {\n element.style.willChange = 'transform';\n }\n },\n get kbdEvents() {\n return opts.kbdEvents;\n },\n set kbdEvents(use_kbd) {\n if (opts.kbdEvents && !use_kbd) {\n opts.kbdEvents = false;\n detach_all_listeners(kbd_listeners);\n } else if (!opts.kbdEvents && !!use_kbd) {\n opts.kbdEvents = true;\n kbd_listeners.push(attach_listener(document, 'keydown', kbd_listener, { passive: false }));\n }\n },\n get smooth() {\n return opts.smooth;\n },\n set smooth(use_smooth) {\n opts.smooth = set_normalize.smooth(use_smooth);\n if (!opts.smooth) {\n scale = target_scale;\n update_and_paint();\n }\n },\n get panMode() {\n return pan_mode;\n },\n set panMode(use_pan_mode) {\n detach_all_listeners(pan_kbd_end_listeners);\n detach_all_listeners(pan_mouse_listeners);\n detach_all_listeners(pan_start_listeners);\n is_kbd_pannable = false;\n is_lmouse_down = false;\n is_mmouse_down = false;\n is_rmouse_down = false;\n\n opts.panMode = use_pan_mode;\n pan_mode = opts.panMode;\n use_middle = pan_mode.indexOf('middle') !== -1;\n use_right = pan_mode.indexOf('right') !== -1;\n\n if (\n pan_mode.indexOf('ctrl') !== -1 ||\n pan_mode.indexOf('shift') !== -1 ||\n pan_mode.indexOf('meta') !== -1 ||\n pan_mode.indexOf('alt') !== -1 ||\n use_middle ||\n use_right\n ) {\n pan_start_listeners.push(attach_listener(container, 'mousedown', pan_drag__mouse_down));\n pan_start_listeners.push(attach_listener(document, 'keydown', pan_kbd_drag__keydown, { passive: true }));\n pan_start_listeners.push(attach_listener(container, 'contextmenu', pan_drag__ctx_cancel));\n }\n update_pan_cursor_state();\n },\n get onPan() {\n return opts.onPan;\n },\n set onPan(use_onPan) {\n if (typeof use_onPan === 'function') opts.onPan = use_onPan;\n else _error(messages['onPan-type']);\n },\n get target() {\n // readonly\n return element;\n },\n get container() {\n // readonly\n return container;\n },\n get isRtl() {\n // readonly\n return is_rtl;\n },\n get reset() {\n // readonly\n return function () {\n apply_zoom({\n delta: (scale - 1) / scale / opts.speed,\n x: m_x,\n y: m_y,\n rect: container.getBoundingClientRect(),\n scroll_left: container.scrollLeft,\n scroll_top: container.scrollTop,\n });\n };\n },\n get destroy() {\n // readonly\n return function () {\n clearTimeout(wheel_debounce_timout);\n clearTimeout(scroll_debounce_timout);\n clearTimeout(observer_debounce_timout);\n\n // container.classList.remove('pinch-zoom-container');\n // element.classList.remove('pinch-zoom-content');\n\n detach_all_listeners(general_listeners);\n detach_all_listeners(kbd_listeners);\n\n detach_all_listeners(pan_kbd_end_listeners);\n detach_all_listeners(pan_mouse_listeners);\n detach_all_listeners(pan_start_listeners);\n\n detach_all_listeners(touch_listeners);\n\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n\n reset_styles(container, resets_container);\n container.style.cursor = '';\n\n reset_styles(element, resets_element);\n\n if (opts.mode === 'zoom') element.style.zoom = '';\n else element.style.transform = '';\n\n container.scrollTop /= scale;\n container.scrollLeft /= scale;\n };\n },\n };\n}\n\n// ---\n\n/**\n * Global utility to prevent browser-level zooming.\n * @param {{useMeta?: boolean}} options --- Generate or alter <meta> tag to lock mobile viewport\n * @returns {{readonly unlock(): void}} --- Unlock viewport restrictions\n */\nexport function pinchZoomLockViewport({ useMeta = false } = {}) {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n _error(messages['ssr']);\n return {\n unlock() {},\n };\n }\n function lock_wheel_listener(e) {\n if (e.ctrlKey) e.preventDefault();\n }\n window.addEventListener('wheel', lock_wheel_listener, { passive: false });\n document.documentElement.style.touchAction = 'pan-x pan-y';\n let original_meta = null;\n let new_meta = null;\n if (useMeta)\n if (document.querySelector('meta[name=viewport]') !== null) {\n original_meta = document.querySelector('meta[name=viewport]').content;\n document.querySelector('meta[name=viewport]').content =\n 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, interactive-widget=resizes-content';\n } else if (document.getElementsByTagName('head').length !== 0) {\n new_meta = document.getElementsByTagName('head')[0].appendChild(document.createElement('meta'));\n new_meta.name = 'viewport';\n new_meta.content =\n 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, interactive-widget=resizes-content';\n }\n\n return {\n get unlock() {\n // readonly\n return function () {\n window.removeEventListener('wheel', lock_wheel_listener);\n document.documentElement.style.touchAction = '';\n if (useMeta)\n if (original_meta !== null) {\n document.querySelector('meta[name=viewport]').content = original_meta;\n } else {\n new_meta.parentElement.removeChild(new_meta);\n }\n };\n },\n };\n}\n"],"names":["messages","_fatal","msg","console","error","_error","_warn","warn","_debug","debug","set_style","target","resets","name","value","Object","prototype","hasOwnProperty","call","style","reset_styles","prop","undefined","attach_listener","event","f","options","addEventListener","removeEventListener","detach_listener","detach","ex","detach_all_listeners","handles","Array","isArray","length","empty_controller","success","scale","onZoom","viewportX","viewportY","mode","min","max","speed","hinted","kbdEvents","smooth","panMode","onPan","container","isRtl","reset","destroy","option_defaults","set_normalize","use_mode","use_smooth","window","matchMedia","matches","use_min","use_max","min_max","use_speed","attachPinchZoom","element","document","Element","rAF","requestAnimationFrame","bind","setTimeout","Date","now","opts","normalize_options","parentElement","pan_mode","resets_container","is_rtl","getComputedStyle","direction","resets_element","wheel_debounce_timout","scroll_debounce_timout","target_scale","m_x","m_y","translate_x","translate_y","target_x","target_y","use_zoom","is_wheel_event","_paint_queue","cached_metrics","update_cached_metrics","rect","getBoundingClientRect","element_ow","offsetWidth","element_oh","offsetHeight","element_ol","offsetLeft","element_ot","offsetTop","container_ct","clientTop","container_cl","clientLeft","container_cw","clientWidth","container_ch","clientHeight","scroll_left","scrollLeft","scroll_top","scrollTop","_paint","zoom","transformOrigin","transform","x","y","update_and_paint","apply_zoom","f_opts","Math","delta","smooth_update","diff","abs","perform_transform","lerp","left","top","content_x","content_y","general_listeners","push","e","clearTimeout","ctrlKey","preventDefault","stopImmediatePropagation","norm_delta","deltaY","deltaMode","wheelDeltaY","wheelDelta","innerWidth","clientX","clientY","passive","kbd_listeners","kbd_listener","metaKey","key","code","keyCode","is_kbd_pannable","is_mmouse_down","is_lmouse_down","is_rmouse_down","use_middle","indexOf","use_right","pan_origin","pan_kbd_end_listeners","pan_mouse_listeners","pan_start_listeners","update_pan_cursor_state","cursor","pan_kbd_drag__keyup","shiftKey","altKey","pan_kbd_drag__lost_focus","pan_kbd_drag__keydown","pan_drag__mouse_down","button","pan_drag__mouse_move","pan_drag__mouse_up","pan_drag__ctx_cancel","touch_x","touch_y","touch_span","touch_is_multi","observer_debounce_timout","observer","touch_listeners","navigator","maxTouchPoints","touches","sqrt","pow","pageX","pageY","dist","readyState","ResizeObserver","entries","observe","MutationObserver","childList","subtree","characterData","join","use_scale","use_onZoom","scrollWidth","use_x","max_scroll","scroll_pos","use_y","use_hint","willChange","use_kbd","use_pan_mode","use_onPan","disconnect","pinchZoomLockViewport","useMeta","unlock","lock_wheel_listener","documentElement","touchAction","original_meta","new_meta","querySelector","content","getElementsByTagName","appendChild","createElement","removeChild"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/dx.js","../src/helpers.js","../src/options.js","../src/index.js"],"sourcesContent":["export const messages = {\n 'ssr': 'All functions must be called from the client side.',\n 'warn-mode': 'Use of the non-standard \\'zoom\\' mode is discouraged. Please use \\'transform\\' instead to increase performance and avoid layout shifting.',\n 'min-max': 'The minimum scale value may not exceed the maximum scale value.',\n 'min-NaN': 'The minimum scale value must be a number.',\n 'min<': 'The minimum scale value may not be less than 0.001.',\n 'min>': 'The minimum scale value may not be greater than 1.',\n 'max-NaN': 'The maximum scale value must be a number.',\n 'max<': 'The maximum scale value may not be less than 1.',\n 'max>': 'The maximum scale value may not be greater than 2500.',\n 'speed-NaN': 'The speed multiplier must be a number.',\n 'speed<': 'The speed multiplier may not be less than 0.1.',\n 'speed>': 'The speed multiplier may not be greater than 10.',\n 'warn-high-zoom': 'High zoom levels may impact performance.',\n 'crit-detach-listener': 'Something went wrong (detach_listener)...\\n\\nPlease submit an issue at https://github.com/nsqx/pinch-zoom and include relevant details.',\n 'parent-element': 'Target element must have a parent container.',\n 'target-element': 'Target must be an element.',\n 'onZoom-type': 'onZoom must be a function.',\n 'onPan-type': 'onPan must be a function.'\n}\n\n\nexport function _fatal(msg) {\n console.error('%c@nsqx/pinch-zoom:%c ' + msg, 'padding:1px 4px;border-width:2px;border-color:#fa4549;border-style:solid;border-radius:4px;', '');\n}\nexport function _error(msg) {\n console.error('%c@nsqx/pinch-zoom:%c ' + msg, '', '');\n}\nexport function _warn(msg) {\n console.warn('%c@nsqx/pinch-zoom:%c ' + msg, '', '');\n}\nexport function _log(msg) {\n console.log('%c@nsqx/pinch-zoom:%c ' + msg, 'color:#218bff', '');\n}\nexport function _debug(msg) {\n console.debug('%c@nsqx/pinch-zoom:%c ' + msg, 'color:#218bff', '');\n}","import { messages, _fatal, _error, _warn, _log } from './dx';\n\n\nexport function set_style(target, resets, name, value) {\n if (!Object.prototype.hasOwnProperty.call(resets, name)) {\n resets[name] = target.style[name];\n target.style[name] = value;\n }\n}\nexport function reset_styles(target, resets) {\n for (let prop in resets)\n if (resets[prop] !== undefined) {\n target.style[prop] = resets[prop];\n } else {\n target.style[prop] = '';\n }\n}\n\nexport function attach_listener(target, event, f, options = {}) {\n target.addEventListener(event, f, options);\n return function () {\n target.removeEventListener(event, f, options);\n };\n}\nexport function detach_listener(detach) {\n try {\n detach();\n } catch (ex) {\n _fatal(messages['crit-detach-listener']);\n console.error(ex);\n }\n}\nexport function detach_all_listeners(handles) {\n if (!Array.isArray(handles)) return;\n for (let detach of handles) {\n detach_listener(detach);\n }\n handles.length = 0;\n}","import { messages, _error, _warn, _log } from './dx';\n\n\nexport function empty_controller() {\n return {\n success: false,\n scale: 1,\n onZoom() {},\n viewportX: 0,\n viewportY: 0,\n mode: 'transform',\n min: 1,\n max: 1,\n speed: 0,\n hinted: false,\n kbdEvents: false,\n smooth: true,\n panMode: 'none',\n onPan() {},\n target: null,\n container: null,\n isRtl: false,\n reset() {},\n destroy() {},\n };\n}\n\nexport const option_defaults = {\n min: 1,\n max: 4,\n speed: 1,\n mode: 'transform',\n hinted: false,\n kbdEvents: false,\n panMode: 'none',\n}\n\nexport function normalize_options(opts) {\n opts.mode = set_normalize.mode(opts.mode);\n opts.smooth = set_normalize.smooth(opts.smooth);\n [opts.min, opts.max] = set_normalize.min_max(opts.min, opts.max);\n opts.min = set_normalize.min(opts.min);\n opts.max = set_normalize.max(opts.max);\n opts.speed = set_normalize.speed(opts.speed);\n return opts;\n}\n\nexport const set_normalize = {\n mode(use_mode) {\n if (typeof use_mode === 'string' && use_mode === 'zoom') {\n _warn(messages['warn-mode']);\n return 'zoom';\n } else {\n return 'transform';\n }\n },\n smooth(use_smooth) {\n return typeof use_smooth === 'boolean'\n ? use_smooth\n : (window.matchMedia ? !window.matchMedia('(prefers-reduced-motion: reduce)').matches : false);\n },\n min(use_min) {\n if (typeof use_min !== 'number') {\n _error(messages['min-NaN']);\n return 1\n };\n if (use_min > 1) {\n _error(messages['min>']);\n return 1;\n } else if (use_min < 0.001) {\n _error(messages['min<']);\n return 0.001;\n } else {\n return use_min;\n }\n },\n max(use_max) {\n if (typeof use_max !== 'number') {\n _error(messages['max-NaN']);\n return 4;\n };\n if (use_max >= 1000) {\n _warn(messages['warn-high-zoom']);\n }\n if (use_max < 1) {\n _error(messages['max<']);\n return 1;\n } else if (use_max > 2500) {\n _error(messages['max>']);\n return 2500;\n } else {\n return use_max;\n }\n },\n min_max(use_min, use_max) {\n if (use_min > use_max) {\n _error(messages['min-max']);\n return [use_max, use_min];\n } else {\n return [use_min, use_max];\n }\n },\n speed(use_speed) {\n if (typeof use_speed !== 'number') {\n _error(messages['speed-NaN']);\n return 1 / 100;\n };\n if (use_speed > 10) {\n _error(messages['speed>']);\n return 10 / 100;\n } else if (use_speed < 0.1) {\n _error(messages['speed<']);\n return 0.1 / 100;\n } else {\n return use_speed / 100;\n }\n }\n}","import { messages, _fatal, _error, _warn, _debug } from './dx';\nimport { set_style, reset_styles, attach_listener, detach_all_listeners } from './helpers';\nimport { empty_controller, normalize_options, option_defaults, set_normalize } from './options';\n\n// ---\n\n/** @typedef {import('../index').PinchZoomOptions} PinchZoomOptions */\n/** @typedef {import('../index').PinchZoomController} PinchZoomController */\n\n/**\n * Attach pinch-zoom functionality to an element\n * @param {HTMLElement} element --- The target element to attach zoom functionality\n * @param {PinchZoomOptions} [options] --- Configuration options\n * @returns {PinchZoomController}\n */\nexport function attachPinchZoom(element, options = {}) {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n _fatal(messages['ssr']);\n return empty_controller();\n }\n\n if (!(element && element instanceof Element)) {\n _fatal(messages['target-element']);\n return empty_controller();\n }\n\n const rAF = (function () {\n if (typeof requestAnimationFrame === 'function') {\n return requestAnimationFrame.bind(window);\n }\n return (f) => setTimeout(() => f(Date.now()), 17);\n })();\n\n // --- normalize options\n\n const opts = normalize_options({\n ...option_defaults,\n ...options,\n });\n const container = element.parentElement;\n if (!container) {\n _fatal(messages['parent-element']);\n return empty_controller();\n }\n\n let pan_mode = opts.panMode;\n\n // container.classList.add('pinch-zoom-container'); // (unused; selector)\n let resets_container = {};\n set_style(container, resets_container, 'overflow', 'auto');\n set_style(container, resets_container, 'touchAction', 'pan-x pan-y');\n set_style(container, resets_container, 'position', 'relative');\n\n let is_rtl = window.getComputedStyle(container).direction === 'rtl';\n\n let resets_element = {};\n // element.classList.add('pinch-zoom-content'); // (unused; selector)\n set_style(element, resets_element, 'backfaceVisibility', 'hidden'); // perf\n set_style(element, resets_element, 'contain', 'layout paint'); // perf\n set_style(element, resets_element, 'position', 'absolute');\n if (opts.hinted)\n if (opts.mode === 'zoom') {\n set_style(element, resets_element, 'willChange', 'zoom');\n } else {\n set_style(element, resets_element, 'willChange', 'transform');\n }\n\n // --- setup\n\n let scale = 1;\n let target_scale = 1;\n let m_x = 0;\n let m_y = 0;\n let translate_x = 0;\n let translate_y = 0;\n let target_x = 0;\n let target_y = 0;\n\n let use_zoom = true;\n let is_wheel_event = false;\n let wheel_debounce_timout, scroll_debounce_timout;\n let _paint_queue = false;\n\n let cached_metrics = {};\n\n function update_cached_metrics() {\n cached_metrics.rect = container.getBoundingClientRect();\n cached_metrics.element_ow = element.offsetWidth;\n cached_metrics.element_oh = element.offsetHeight;\n cached_metrics.element_ol = element.offsetLeft;\n cached_metrics.element_ot = element.offsetTop;\n cached_metrics.container_ct = container.clientTop;\n cached_metrics.container_cl = container.clientLeft;\n cached_metrics.container_cw = container.clientWidth;\n cached_metrics.container_ch = container.clientHeight;\n cached_metrics.scroll_left = is_rtl ? -container.scrollLeft : container.scrollLeft;\n cached_metrics.scroll_top = container.scrollTop;\n if (cached_metrics.element_ow * scale < cached_metrics.container_cw) {\n translate_x = is_rtl ? -(cached_metrics.container_cw - cached_metrics.element_ow * scale) / 2 : (cached_metrics.container_cw - cached_metrics.element_ow * scale) / 2;\n } else {\n translate_x = 0;\n }\n if (cached_metrics.element_oh * scale < cached_metrics.container_ch) {\n translate_y = (cached_metrics.container_ch - cached_metrics.element_oh * scale) / 2;\n } else {\n translate_y = 0;\n }\n }\n\n function _paint() {\n if (opts.mode === 'zoom') {\n element.style.zoom = scale;\n } else {\n element.style.transformOrigin = `${is_rtl ? '100%' : '0'} 0`;\n element.style.transform = `translate(${translate_x}px, ${translate_y}px) scale(${scale})`;\n }\n\n // rtl logic tested on latest firefox, chrome, and edge versions only\n container.scrollLeft = is_rtl ? -cached_metrics.scroll_left : cached_metrics.scroll_left;\n container.scrollTop = cached_metrics.scroll_top;\n if (typeof opts.onZoom === 'function') {\n opts.onZoom({ scale: scale, x: cached_metrics.scroll_left, y: cached_metrics.scroll_top });\n }\n _paint_queue = false;\n }\n\n function update_and_paint() {\n update_cached_metrics();\n _paint();\n }\n update_and_paint();\n\n // --- main\n\n function apply_zoom(f_opts) {\n target_x = f_opts.x;\n target_y = f_opts.y;\n\n target_scale = Math.min(Math.max(opts.min, target_scale - target_scale * (f_opts.delta * opts.speed)), opts.max);\n\n if (!_paint_queue) {\n _paint_queue = true;\n rAF(smooth_update);\n }\n }\n function smooth_update() {\n const diff = target_scale - scale;\n\n if (Math.abs(diff) > 0.001 && opts.smooth && opts.mode !== 'zoom') {\n perform_transform(0.15, diff);\n rAF(smooth_update);\n } else {\n perform_transform(1, diff);\n _paint_queue = false;\n }\n }\n function perform_transform(lerp, diff) {\n // mouse pos, relative to element visual state\n m_x = target_x - cached_metrics.rect.left - cached_metrics.element_ol - cached_metrics.container_cl - translate_x;\n m_y = target_y - cached_metrics.rect.top - cached_metrics.element_ot - cached_metrics.container_ct - translate_y;\n let content_x = (m_x + cached_metrics.scroll_left) / scale;\n let content_y = (m_y + cached_metrics.scroll_top) / scale;\n\n scale += diff * lerp;\n\n if (cached_metrics.element_ow * scale < cached_metrics.container_cw) {\n // width of content is less than viewport\n translate_x = is_rtl ? -(cached_metrics.container_cw - cached_metrics.element_ow * scale) / 2 : (cached_metrics.container_cw - cached_metrics.element_ow * scale) / 2;\n cached_metrics.scroll_left = 0;\n } else {\n translate_x = 0;\n cached_metrics.scroll_left = content_x * scale - m_x - translate_x;\n }\n\n if (cached_metrics.element_oh * scale < cached_metrics.container_ch) {\n // height of content is less than viewport\n translate_y = (cached_metrics.container_ch - cached_metrics.element_oh * scale) / 2;\n cached_metrics.scroll_top = 0;\n } else {\n translate_y = 0;\n cached_metrics.scroll_top = content_y * scale - m_y - translate_y;\n }\n\n _paint();\n }\n\n function wheel_listener(e) {\n if (!is_wheel_event) {\n is_wheel_event = true;\n update_cached_metrics();\n }\n clearTimeout(wheel_debounce_timout);\n if (e.ctrlKey) {\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n if (e.ctrlKey && use_zoom) {\n let norm_delta;\n if ('deltaX' in e) {\n // if (Math.abs(e.deltaY) < 24 && e.deltaY % 1 !== 0) {\n // trackpad pinching\n // } else\n if (Math.abs(e.deltaY) < 90 && e.deltaY % 1 !== 0) {\n // ctrl + trackpad // & trackpad pinching\n norm_delta = e.deltaY * [1, 28, 500][e.deltaMode || 0];\n } else {\n // ctrl + wheel\n norm_delta = e.deltaY * [1, 28, 500][e.deltaMode || 0] * 0.25;\n }\n } else if ('wheelDeltaX' in e)\n norm_delta = (e.wheelDeltaY * 0.25) / -3; // legacy\n else norm_delta = (e.wheelDelta * 0.25) / -3;\n apply_zoom({\n delta: norm_delta,\n x: is_rtl ? window.innerWidth - e.clientX : e.clientX,\n y: e.clientY,\n rect: cached_metrics.rect,\n scroll_left: cached_metrics.scroll_left,\n scroll_top: cached_metrics.scroll_top,\n });\n } else {\n use_zoom = false;\n }\n\n wheel_debounce_timout = setTimeout(function () {\n update_cached_metrics();\n use_zoom = true;\n is_wheel_event = false;\n }, 100);\n }\n\n let general_listeners = [];\n general_listeners.push(attach_listener(container, 'wheel', wheel_listener, { passive: false }));\n\n function scroll_listener() {\n scroll_debounce_timout && clearTimeout(scroll_debounce_timout);\n scroll_debounce_timout = setTimeout(update_cached_metrics, 100);\n }\n general_listeners.push(attach_listener(container, 'scroll', scroll_listener, { passive: true }));\n\n // --- kbd shortcuts\n\n let kbd_listeners = [];\n\n function kbd_listener(e) {\n // reset zoom\n if (e.ctrlKey || e.metaKey)\n if (e.key === '0' || e.code === 'Digit0' || e.keyCode === 48) {\n apply_zoom({\n delta: (scale - 1) / scale / opts.speed,\n x: m_x,\n y: m_y,\n rect: container.getBoundingClientRect(),\n scroll_left: container.scrollLeft,\n scroll_top: container.scrollTop,\n });\n } else if (e.key === '=' || e.code === 'Equal') {\n e.preventDefault();\n apply_zoom({\n delta: -50 / scale,\n x: container.clientWidth / 2,\n y: container.clientHeight / 2,\n rect: container.getBoundingClientRect(),\n scroll_left: container.scrollLeft,\n scroll_top: container.scrollTop,\n });\n } else if (e.key === '-' || e.code === 'Minus') {\n e.preventDefault();\n apply_zoom({\n delta: 50 / scale,\n x: container.clientWidth / 2,\n y: container.clientHeight / 2,\n rect: container.getBoundingClientRect(),\n scroll_left: container.scrollLeft,\n scroll_top: container.scrollTop,\n });\n }\n }\n\n if (opts.kbdEvents) kbd_listeners.push(attach_listener(document, 'keydown', kbd_listener, { passive: false }));\n\n // --- mouse pan\n\n let is_kbd_pannable = false,\n is_mmouse_down = false,\n is_lmouse_down = false,\n is_rmouse_down = false;\n let use_middle = pan_mode.indexOf('middle') !== -1;\n let use_right = pan_mode.indexOf('right') !== -1;\n let pan_origin = { x: 0, y: 0 };\n\n let pan_kbd_end_listeners = [];\n let pan_mouse_listeners = [];\n let pan_start_listeners = [];\n\n function update_pan_cursor_state() {\n if ((is_mmouse_down && use_middle) || (is_rmouse_down && use_right) || (is_kbd_pannable && is_lmouse_down)) {\n container.style.cursor = 'grabbing';\n } else if (is_kbd_pannable) {\n container.style.cursor = 'grab';\n } else {\n container.style.cursor = '';\n }\n }\n\n function pan_kbd_drag__keyup(e) {\n let condition =\n (pan_mode.indexOf('ctrl') !== -1 && e.ctrlKey) ||\n (pan_mode.indexOf('shift') !== -1 && e.shiftKey) ||\n (pan_mode.indexOf('alt') !== -1 && e.altKey) ||\n (pan_mode.indexOf('meta') !== -1 && e.metaKey);\n if (!condition && is_kbd_pannable) {\n is_kbd_pannable = false;\n update_pan_cursor_state();\n detach_all_listeners(pan_kbd_end_listeners);\n }\n }\n function pan_kbd_drag__lost_focus(e) {\n is_kbd_pannable = false;\n is_mmouse_down = false;\n update_pan_cursor_state();\n detach_all_listeners(pan_kbd_end_listeners);\n }\n function pan_kbd_drag__keydown(e) {\n let condition =\n (pan_mode.indexOf('ctrl') !== -1 && e.ctrlKey) ||\n (pan_mode.indexOf('shift') !== -1 && e.shiftKey) ||\n (pan_mode.indexOf('alt') !== -1 && e.altKey) ||\n (pan_mode.indexOf('meta') !== -1 && e.metaKey);\n if (condition && !is_kbd_pannable) {\n is_kbd_pannable = true;\n update_pan_cursor_state();\n pan_kbd_end_listeners.push(attach_listener(document, 'keyup', pan_kbd_drag__keyup));\n pan_kbd_end_listeners.push(attach_listener(window, 'blur', pan_kbd_drag__lost_focus));\n }\n }\n\n function pan_drag__mouse_down(e) {\n if ((is_kbd_pannable && e.button === 0) || (use_middle && e.button === 1) || (use_right && e.button === 2)) {\n e.preventDefault();\n if (e.button === 1) {\n is_mmouse_down = true;\n } else if (e.button === 2) {\n is_rmouse_down = true;\n } else if (e.button === 0) {\n is_lmouse_down = true;\n }\n update_pan_cursor_state();\n update_cached_metrics();\n pan_origin.x = cached_metrics.scroll_left + e.clientX;\n pan_origin.y = cached_metrics.scroll_top + e.clientY;\n pan_mouse_listeners.push(attach_listener(document, 'mousemove', pan_drag__mouse_move));\n pan_mouse_listeners.push(attach_listener(document, 'mouseup', pan_drag__mouse_up));\n }\n }\n function pan_drag__mouse_move(e) {\n if (\n (is_kbd_pannable && is_lmouse_down) ||\n (is_mmouse_down && pan_mode.indexOf('middle') !== -1) ||\n (is_rmouse_down && pan_mode.indexOf('right') !== -1)\n ) {\n container.scrollLeft = pan_origin.x - e.clientX;\n container.scrollTop = pan_origin.y - e.clientY;\n update_cached_metrics();\n if (typeof opts.onPan === 'function') {\n opts.onPan({ scale: scale, x: cached_metrics.scroll_left, y: cached_metrics.scroll_top });\n }\n }\n }\n function pan_drag__mouse_up(e) {\n if (e.button === 1) {\n is_mmouse_down = false;\n } else if (e.button === 2) {\n is_rmouse_down = false;\n } else if (e.button === 0) {\n is_lmouse_down = false;\n }\n update_pan_cursor_state();\n detach_all_listeners(pan_mouse_listeners);\n }\n function pan_drag__ctx_cancel(e) {\n if (pan_mode.indexOf('right') !== -1) e.preventDefault();\n }\n\n if (\n pan_mode.indexOf('ctrl') !== -1 ||\n pan_mode.indexOf('shift') !== -1 ||\n pan_mode.indexOf('meta') !== -1 ||\n pan_mode.indexOf('alt') !== -1 ||\n use_middle ||\n use_right\n ) {\n pan_start_listeners.push(attach_listener(container, 'mousedown', pan_drag__mouse_down));\n pan_start_listeners.push(attach_listener(document, 'keydown', pan_kbd_drag__keydown, { passive: true }));\n pan_start_listeners.push(attach_listener(container, 'contextmenu', pan_drag__ctx_cancel));\n }\n\n // --- touchscreen support\n\n let touch_span = 0;\n let touch_is_multi = false;\n let touch_x, touch_y;\n\n function touch_start_listener(e) {\n if (e.touches && e.touches.length >= 2) {\n touch_is_multi = true;\n update_cached_metrics();\n touch_span = Math.sqrt(\n Math.pow(e.touches[0].pageX - e.touches[1].pageX, 2) + Math.pow(e.touches[0].pageY - e.touches[1].pageY, 2),\n );\n // touch_theta = Math.atan2(e.touches[1].pageY - e.touches[0].pageY, e.touches[1].pageX - e.touches[0].pageX);\n touch_x = (e.touches[0].pageX + e.touches[1].pageX) / 2;\n touch_y = (e.touches[0].pageY + e.touches[1].pageY) / 2;\n }\n }\n function touch_move_listener(e) {\n if (e.touches && e.touches.length >= 2) {\n let dist = Math.sqrt(\n Math.pow(e.touches[0].pageX - e.touches[1].pageX, 2) + Math.pow(e.touches[0].pageY - e.touches[1].pageY, 2),\n );\n // theta = Math.atan2(e.touches[1].pageY - e.touches[0].pageY, e.touches[1].pageX - e.touches[0].pageX) - touch_theta /* + angle */;\n // if (theta > Math.PI) theta -= 2 * Math.PI;\n // if (theta < -Math.PI) theta += 2 * Math.PI;\n // if (Math.abs(theta) < (Math.PI / 12)) theta = 0; // snap logic\n touch_x = (e.touches[0].pageX + e.touches[1].pageX) / 2;\n touch_y = (e.touches[0].pageY + e.touches[1].pageY) / 2;\n apply_zoom({\n delta: (touch_span - dist) / 2,\n x: touch_x,\n y: touch_y,\n rect: cached_metrics.rect,\n scroll_left: cached_metrics.scroll_left,\n scroll_top: cached_metrics.scroll_top,\n });\n touch_span = dist;\n }\n }\n function touch_end_listener(e) {\n if (touch_is_multi) {\n touch_is_multi = false;\n apply_zoom({\n delta: 0,\n x: touch_x,\n y: touch_y,\n rect: cached_metrics.rect,\n scroll_left: cached_metrics.scroll_left,\n scroll_top: cached_metrics.scroll_top,\n });\n }\n }\n\n let touch_listeners = [];\n if ('maxTouchPoints' in navigator && navigator.maxTouchPoints > 0) {\n touch_listeners.push(attach_listener(container, 'touchstart', touch_start_listener, { passive: true }));\n touch_listeners.push(attach_listener(container, 'touchmove', touch_move_listener, { passive: true }));\n touch_listeners.push(attach_listener(container, 'touchend', touch_end_listener, { passive: true }));\n }\n\n // --- attach\n\n general_listeners.push(attach_listener(window, 'resize', update_and_paint));\n document.readyState !== 'complete' && general_listeners.push(attach_listener(window, 'load', update_and_paint));\n\n let observer_debounce_timout, observer;\n if (window.ResizeObserver) {\n observer = new ResizeObserver(function (entries) {\n if (!entries.length) return;\n clearTimeout(observer_debounce_timout);\n observer_debounce_timout = setTimeout(update_and_paint, 17);\n });\n observer.observe(element);\n } else {\n observer = new MutationObserver(function () {\n clearTimeout(observer_debounce_timout);\n observer_debounce_timout = setTimeout(update_and_paint, 100);\n });\n observer.observe(element, { childList: true, subtree: true, characterData: true });\n }\n\n _debug('Attached successfully.');\n _debug(`Options:\n\nmode\\t\\t${opts.mode}\nmin\\t\\t\\t${opts.min}\nmax\\t\\t\\t${opts.max}\nspeed\\t\\t${opts.speed * 100}\nsmooth\\t\\t${opts.smooth}\nkbdEvents\\t${opts.kbdEvents}\nhinted\\t\\t${opts.hinted}\npanMode\\t\\t${Array.isArray(opts.panMode) ? opts.panMode.join(' ') : opts.panMode}\nrtl\\t\\t\\t${is_rtl}`);\n\n // ---\n\n return {\n get success() {\n // readonly\n return true;\n },\n get scale() {\n return scale;\n },\n set scale(use_scale) {\n apply_zoom({\n delta: (scale - use_scale) / scale / opts.speed,\n x: m_x,\n y: m_y,\n rect: container.getBoundingClientRect(),\n scroll_left: container.scrollLeft,\n scroll_top: container.scrollTop,\n });\n },\n get onZoom() {\n return opts.onZoom;\n },\n set onZoom(use_onZoom) {\n if (typeof use_onZoom === 'function') opts.onZoom = use_onZoom;\n else _error(messages['onZoom-type']);\n },\n get viewportX() {\n // readonly\n return m_x;\n },\n get viewportY() {\n // readonly\n return m_y;\n },\n get x() {\n if (is_rtl) return container.scrollWidth - container.clientWidth - container.scrollLeft;\n return container.scrollLeft;\n },\n set x(use_x) {\n if (typeof use_x === 'number')\n if (is_rtl) {\n const max_scroll = container.scrollWidth - container.clientWidth;\n const scroll_pos = Math.min(max_scroll, Math.max(0, use_x));\n container.scrollLeft = max_scroll - scroll_pos;\n cached_metrics.scroll_left = scroll_pos;\n } else {\n container.scrollLeft = use_x;\n cached_metrics.scroll_left = use_x;\n }\n },\n get y() {\n return container.scrollTop;\n },\n set y(use_y) {\n if (typeof use_y === 'number') {\n container.scrollTop = use_y;\n cached_metrics.scroll_top = use_y;\n }\n },\n get mode() {\n return opts.mode;\n },\n set mode(use_mode) {\n if (typeof use_mode === 'string' && use_mode === 'zoom') {\n opts.mode = 'zoom';\n _warn(messages['warn-mode']);\n element.style.zoom = scale;\n element.style.transform = '';\n } else {\n opts.mode = 'transform';\n element.style.transform = `scale(${scale})`;\n element.style.zoom = '';\n }\n update_and_paint();\n },\n get min() {\n return opts.min;\n },\n set min(use_min) {\n opts.min = set_normalize.min(use_min);\n [opts.min, opts.max] = set_normalize.min_max(opts.min, opts.max);\n update_and_paint();\n },\n get max() {\n return opts.max;\n },\n set max(use_max) {\n opts.max = set_normalize.max(use_max);\n [opts.min, opts.max] = set_normalize.min_max(opts.min, opts.max);\n update_and_paint();\n },\n get speed() {\n return opts.speed * 100;\n },\n set speed(use_speed) {\n opts.speed = set_normalize.speed(use_speed);\n },\n get hinted() {\n return opts.hinted;\n },\n set hinted(use_hint) {\n opts.hinted = !!use_hint;\n if (opts.hinted)\n if (opts.mode === 'zoom') {\n element.style.willChange = 'zoom';\n } else {\n element.style.willChange = 'transform';\n }\n },\n get kbdEvents() {\n return opts.kbdEvents;\n },\n set kbdEvents(use_kbd) {\n if (opts.kbdEvents && !use_kbd) {\n opts.kbdEvents = false;\n detach_all_listeners(kbd_listeners);\n } else if (!opts.kbdEvents && !!use_kbd) {\n opts.kbdEvents = true;\n kbd_listeners.push(attach_listener(document, 'keydown', kbd_listener, { passive: false }));\n }\n },\n get smooth() {\n return opts.smooth;\n },\n set smooth(use_smooth) {\n opts.smooth = set_normalize.smooth(use_smooth);\n if (!opts.smooth) {\n scale = target_scale;\n update_and_paint();\n }\n },\n get panMode() {\n return pan_mode;\n },\n set panMode(use_pan_mode) {\n detach_all_listeners(pan_kbd_end_listeners);\n detach_all_listeners(pan_mouse_listeners);\n detach_all_listeners(pan_start_listeners);\n is_kbd_pannable = false;\n is_lmouse_down = false;\n is_mmouse_down = false;\n is_rmouse_down = false;\n\n opts.panMode = use_pan_mode;\n pan_mode = opts.panMode;\n use_middle = pan_mode.indexOf('middle') !== -1;\n use_right = pan_mode.indexOf('right') !== -1;\n\n if (\n pan_mode.indexOf('ctrl') !== -1 ||\n pan_mode.indexOf('shift') !== -1 ||\n pan_mode.indexOf('meta') !== -1 ||\n pan_mode.indexOf('alt') !== -1 ||\n use_middle ||\n use_right\n ) {\n pan_start_listeners.push(attach_listener(container, 'mousedown', pan_drag__mouse_down));\n pan_start_listeners.push(attach_listener(document, 'keydown', pan_kbd_drag__keydown, { passive: true }));\n pan_start_listeners.push(attach_listener(container, 'contextmenu', pan_drag__ctx_cancel));\n }\n update_pan_cursor_state();\n },\n get onPan() {\n return opts.onPan;\n },\n set onPan(use_onPan) {\n if (typeof use_onPan === 'function') opts.onPan = use_onPan;\n else _error(messages['onPan-type']);\n },\n get target() {\n // readonly\n return element;\n },\n get container() {\n // readonly\n return container;\n },\n get isRtl() {\n // readonly\n return is_rtl;\n },\n get reset() {\n // readonly\n return function () {\n apply_zoom({\n delta: (scale - 1) / scale / opts.speed,\n x: m_x,\n y: m_y,\n rect: container.getBoundingClientRect(),\n scroll_left: container.scrollLeft,\n scroll_top: container.scrollTop,\n });\n };\n },\n get update() {\n // readonly\n return function () {\n update_and_paint();\n }\n },\n get destroy() {\n // readonly\n return function () {\n clearTimeout(wheel_debounce_timout);\n clearTimeout(scroll_debounce_timout);\n clearTimeout(observer_debounce_timout);\n\n // container.classList.remove('pinch-zoom-container');\n // element.classList.remove('pinch-zoom-content');\n\n detach_all_listeners(general_listeners);\n detach_all_listeners(kbd_listeners);\n\n detach_all_listeners(pan_kbd_end_listeners);\n detach_all_listeners(pan_mouse_listeners);\n detach_all_listeners(pan_start_listeners);\n\n detach_all_listeners(touch_listeners);\n\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n\n reset_styles(container, resets_container);\n container.style.cursor = '';\n\n reset_styles(element, resets_element);\n\n if (opts.mode === 'zoom') element.style.zoom = '';\n else element.style.transform = '';\n\n container.scrollTop /= scale;\n container.scrollLeft /= scale;\n };\n },\n };\n}\n\n// ---\n\n/**\n * Global utility to prevent browser-level zooming.\n * @param {{useMeta?: boolean}} options --- Generate or alter <meta> tag to lock mobile viewport\n * @returns {{readonly unlock(): void}} --- Unlock viewport restrictions\n */\nexport function pinchZoomLockViewport({ useMeta = false } = {}) {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n _error(messages['ssr']);\n return {\n unlock() {},\n };\n }\n function lock_wheel_listener(e) {\n if (e.ctrlKey) e.preventDefault();\n }\n window.addEventListener('wheel', lock_wheel_listener, { passive: false });\n document.documentElement.style.touchAction = 'pan-x pan-y';\n let original_meta = null;\n let new_meta = null;\n if (useMeta)\n if (document.querySelector('meta[name=viewport]') !== null) {\n original_meta = document.querySelector('meta[name=viewport]').content;\n document.querySelector('meta[name=viewport]').content =\n 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, interactive-widget=resizes-content';\n } else if (document.getElementsByTagName('head').length !== 0) {\n new_meta = document.getElementsByTagName('head')[0].appendChild(document.createElement('meta'));\n new_meta.name = 'viewport';\n new_meta.content =\n 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, interactive-widget=resizes-content';\n }\n\n return {\n get unlock() {\n // readonly\n return function () {\n window.removeEventListener('wheel', lock_wheel_listener);\n document.documentElement.style.touchAction = '';\n if (useMeta)\n if (original_meta !== null) {\n document.querySelector('meta[name=viewport]').content = original_meta;\n } else {\n new_meta.parentElement.removeChild(new_meta);\n }\n };\n },\n };\n}\n"],"names":["messages","_fatal","msg","console","error","_error","_warn","warn","_debug","debug","set_style","target","resets","name","value","Object","prototype","hasOwnProperty","call","style","reset_styles","prop","undefined","attach_listener","event","f","options","addEventListener","removeEventListener","detach_listener","detach","ex","detach_all_listeners","handles","Array","isArray","length","empty_controller","success","scale","onZoom","viewportX","viewportY","mode","min","max","speed","hinted","kbdEvents","smooth","panMode","onPan","container","isRtl","reset","destroy","option_defaults","set_normalize","use_mode","use_smooth","window","matchMedia","matches","use_min","use_max","min_max","use_speed","attachPinchZoom","element","document","Element","rAF","requestAnimationFrame","bind","setTimeout","Date","now","opts","normalize_options","parentElement","pan_mode","resets_container","is_rtl","getComputedStyle","direction","resets_element","wheel_debounce_timout","scroll_debounce_timout","target_scale","m_x","m_y","translate_x","translate_y","target_x","target_y","use_zoom","is_wheel_event","_paint_queue","cached_metrics","update_cached_metrics","rect","getBoundingClientRect","element_ow","offsetWidth","element_oh","offsetHeight","element_ol","offsetLeft","element_ot","offsetTop","container_ct","clientTop","container_cl","clientLeft","container_cw","clientWidth","container_ch","clientHeight","scroll_left","scrollLeft","scroll_top","scrollTop","_paint","zoom","transformOrigin","transform","x","y","update_and_paint","apply_zoom","f_opts","Math","delta","smooth_update","diff","abs","perform_transform","lerp","left","top","content_x","content_y","general_listeners","push","e","clearTimeout","ctrlKey","preventDefault","stopImmediatePropagation","norm_delta","deltaY","deltaMode","wheelDeltaY","wheelDelta","innerWidth","clientX","clientY","passive","kbd_listeners","kbd_listener","metaKey","key","code","keyCode","is_kbd_pannable","is_mmouse_down","is_lmouse_down","is_rmouse_down","use_middle","indexOf","use_right","pan_origin","pan_kbd_end_listeners","pan_mouse_listeners","pan_start_listeners","update_pan_cursor_state","cursor","pan_kbd_drag__keyup","shiftKey","altKey","pan_kbd_drag__lost_focus","pan_kbd_drag__keydown","pan_drag__mouse_down","button","pan_drag__mouse_move","pan_drag__mouse_up","pan_drag__ctx_cancel","touch_x","touch_y","touch_span","touch_is_multi","observer_debounce_timout","observer","touch_listeners","navigator","maxTouchPoints","touches","sqrt","pow","pageX","pageY","dist","readyState","ResizeObserver","entries","observe","MutationObserver","childList","subtree","characterData","join","use_scale","use_onZoom","scrollWidth","use_x","max_scroll","scroll_pos","use_y","use_hint","willChange","use_kbd","use_pan_mode","use_onPan","update","disconnect","pinchZoomLockViewport","useMeta","unlock","lock_wheel_listener","documentElement","touchAction","original_meta","new_meta","querySelector","content","getElementsByTagName","appendChild","createElement","removeChild"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).PinchZoom={})}(this,function(e){"use strict";function t(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t);if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function n(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function o(e){for(var o=1;o<arguments.length;o++){var r=null!=arguments[o]?arguments[o]:{};o%2?n(Object(r),!0).forEach(function(n){t(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var r="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},i=function(e){return e&&e.Math===Math&&e},c=i("object"==typeof globalThis&&globalThis)||i("object"==typeof window&&window)||i("object"==typeof self&&self)||i("object"==typeof r&&r)||i("object"==typeof r&&r)||function(){return this}()||Function("return this")(),a="object"==typeof document&&document.all,u=void 0===a&&void 0!==a?function(e){return"function"==typeof e||e===a}:function(e){return"function"==typeof e},l=u,s=function(e){return"object"==typeof e?null!==e:l(e)},f=s,m=c.document,p=f(m)&&f(m.createElement),d=function(e){return p?m.createElement(e):{}},h=d("span").classList,y=h&&h.constructor&&h.constructor.prototype,v=y===Object.prototype?void 0:y,g=function(e){try{return!!e()}catch(e){return!0}},b=!g(function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}),w=b,O=Function.prototype,x=O.call,_=w&&O.bind.bind(x,x),S=w?_:function(e){return function(){return x.apply(e,arguments)}},T=S,P=T({}.toString),j=T("".slice),L=g,E=function(e){return j(P(e),8,-1)},M=Object,k=S("".split),A=L(function(){return!M("z").propertyIsEnumerable(0)})?function(e){return"String"===E(e)?k(e,""):M(e)}:M,C=function(e){return null==e},z=C,R=TypeError,D=function(e){if(z(e))throw new R("Can't call method on "+e);return e},I=A,Y=D,F=function(e){return I(Y(e))},X={exports:{}},q=c,B=Object.defineProperty,G=function(e,t){try{B(q,e,{value:t,configurable:!0,writable:!0})}catch(n){q[e]=t}return t},K=c,N=G,W="__core-js_shared__",Z=X.exports=K[W]||N(W,{});(Z.versions||(Z.versions=[])).push({version:"3.48.0",mode:"global",copyright:"© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.",license:"https://github.com/zloirock/core-js/blob/v3.48.0/LICENSE",source:"https://github.com/zloirock/core-js"});var V,H,U=X.exports,$=U,J=function(e,t){return $[e]||($[e]=t||{})},Q=D,ee=Object,te=function(e){return ee(Q(e))},ne=te,oe=S({}.hasOwnProperty),re=Object.hasOwn||function(e,t){return oe(ne(e),t)},ie=S,ce=0,ae=Math.random(),ue=ie(1.1.toString),le=function(e){return"Symbol("+(void 0===e?"":e)+")_"+ue(++ce+ae,36)},se=c.navigator,fe=se&&se.userAgent,me=c,pe=fe?String(fe):"",de=me.process,he=me.Deno,ye=de&&de.versions||he&&he.version,ve=ye&&ye.v8;ve&&(H=(V=ve.split("."))[0]>0&&V[0]<4?1:+(V[0]+V[1])),!H&&pe&&(!(V=pe.match(/Edge\/(\d+)/))||V[1]>=74)&&(V=pe.match(/Chrome\/(\d+)/))&&(H=+V[1]);var ge=H,be=g,we=c.String,Oe=!!Object.getOwnPropertySymbols&&!be(function(){var e=Symbol("symbol detection");return!we(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&ge&&ge<41}),xe=Oe&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,_e=J,Se=re,Te=le,Pe=Oe,je=xe,Le=c.Symbol,Ee=_e("wks"),Me=je?Le.for||Le:Le&&Le.withoutSetter||Te,ke=function(e){return Se(Ee,e)||(Ee[e]=Pe&&Se(Le,e)?Le[e]:Me("Symbol."+e)),Ee[e]},Ae=s,Ce=String,ze=TypeError,Re=function(e){if(Ae(e))return e;throw new ze(Ce(e)+" is not an object")},De={},Ie=!g(function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}),Ye=Ie&&g(function(){return 42!==Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype}),Fe={},Xe=d,qe=!Ie&&!g(function(){return 7!==Object.defineProperty(Xe("div"),"a",{get:function(){return 7}}).a}),Be=b,Ge=Function.prototype.call,Ke=Be?Ge.bind(Ge):function(){return Ge.apply(Ge,arguments)},Ne=c,We=u,Ze=function(e,t){return arguments.length<2?(n=Ne[e],We(n)?n:void 0):Ne[e]&&Ne[e][t];var n},Ve=S({}.isPrototypeOf),He=Ze,Ue=u,$e=Ve,Je=Object,Qe=xe?function(e){return"symbol"==typeof e}:function(e){var t=He("Symbol");return Ue(t)&&$e(t.prototype,Je(e))},et=String,tt=u,nt=function(e){try{return et(e)}catch(e){return"Object"}},ot=TypeError,rt=function(e){if(tt(e))return e;throw new ot(nt(e)+" is not a function")},it=rt,ct=C,at=Ke,ut=u,lt=s,st=TypeError,ft=Ke,mt=s,pt=Qe,dt=function(e,t){var n=e[t];return ct(n)?void 0:it(n)},ht=function(e,t){var n,o;if("string"===t&&ut(n=e.toString)&&!lt(o=at(n,e)))return o;if(ut(n=e.valueOf)&&!lt(o=at(n,e)))return o;if("string"!==t&&ut(n=e.toString)&&!lt(o=at(n,e)))return o;throw new st("Can't convert object to primitive value")},yt=TypeError,vt=ke("toPrimitive"),gt=function(e,t){if(!mt(e)||pt(e))return e;var n,o=dt(e,vt);if(o){if(void 0===t&&(t="default"),n=ft(o,e,t),!mt(n)||pt(n))return n;throw new yt("Can't convert object to primitive value")}return void 0===t&&(t="number"),ht(e,t)},bt=Qe,wt=function(e){var t=gt(e,"string");return bt(t)?t:t+""},Ot=Ie,xt=qe,_t=Ye,St=Re,Tt=wt,Pt=TypeError,jt=Object.defineProperty,Lt=Object.getOwnPropertyDescriptor,Et="enumerable",Mt="configurable",kt="writable";Fe.f=Ot?_t?function(e,t,n){if(St(e),t=Tt(t),St(n),"function"==typeof e&&"prototype"===t&&"value"in n&&kt in n&&!n[kt]){var o=Lt(e,t);o&&o[kt]&&(e[t]=n.value,n={configurable:Mt in n?n[Mt]:o[Mt],enumerable:Et in n?n[Et]:o[Et],writable:!1})}return jt(e,t,n)}:jt:function(e,t,n){if(St(e),t=Tt(t),St(n),xt)try{return jt(e,t,n)}catch(e){}if("get"in n||"set"in n)throw new Pt("Accessors not supported");return"value"in n&&(e[t]=n.value),e};var At,Ct=Math.ceil,zt=Math.floor,Rt=Math.trunc||function(e){var t=+e;return(t>0?zt:Ct)(t)},Dt=function(e){var t=+e;return t!=t||0===t?0:Rt(t)},It=Dt,Yt=Math.max,Ft=Math.min,Xt=Dt,qt=Math.min,Bt=function(e){var t=Xt(e);return t>0?qt(t,9007199254740991):0},Gt=F,Kt=function(e,t){var n=It(e);return n<0?Yt(n+t,0):Ft(n,t)},Nt=function(e){return Bt(e.length)},Wt={indexOf:(At=!1,function(e,t,n){var o=Gt(e),r=Nt(o);if(0===r)return!At&&-1;var i,c=Kt(n,r);if(At&&t!=t){for(;r>c;)if((i=o[c++])!=i)return!0}else for(;r>c;c++)if((At||c in o)&&o[c]===t)return At||c||0;return!At&&-1})},Zt={},Vt=re,Ht=F,Ut=Wt.indexOf,$t=Zt,Jt=S([].push),Qt=function(e,t){var n,o=Ht(e),r=0,i=[];for(n in o)!Vt($t,n)&&Vt(o,n)&&Jt(i,n);for(;t.length>r;)Vt(o,n=t[r++])&&(~Ut(i,n)||Jt(i,n));return i},en=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],tn=Qt,nn=en,on=Object.keys||function(e){return tn(e,nn)},rn=Ie,cn=Ye,an=Fe,un=Re,ln=F,sn=on;De.f=rn&&!cn?Object.defineProperties:function(e,t){un(e);for(var n,o=ln(t),r=sn(t),i=r.length,c=0;i>c;)an.f(e,n=r[c++],o[n]);return e};var fn,mn=Ze("document","documentElement"),pn=le,dn=J("keys"),hn=function(e){return dn[e]||(dn[e]=pn(e))},yn=Re,vn=De,gn=en,bn=Zt,wn=mn,On=d,xn="prototype",_n="script",Sn=hn("IE_PROTO"),Tn=function(){},Pn=function(e){return"<"+_n+">"+e+"</"+_n+">"},jn=function(e){e.write(Pn("")),e.close();var t=e.parentWindow.Object;return e=null,t},Ln=function(){try{fn=new ActiveXObject("htmlfile")}catch(e){}var e,t,n;Ln="undefined"!=typeof document?document.domain&&fn?jn(fn):(t=On("iframe"),n="java"+_n+":",t.style.display="none",wn.appendChild(t),t.src=String(n),(e=t.contentWindow.document).open(),e.write(Pn("document.F=Object")),e.close(),e.F):jn(fn);for(var o=gn.length;o--;)delete Ln[xn][gn[o]];return Ln()};bn[Sn]=!0;var En=Object.create||function(e,t){var n;return null!==e?(Tn[xn]=yn(e),n=new Tn,Tn[xn]=null,n[Sn]=e):n=Ln(),void 0===t?n:vn.f(n,t)},Mn=ke,kn=En,An=Fe.f,Cn=Mn("unscopables"),zn=Array.prototype;void 0===zn[Cn]&&An(zn,Cn,{configurable:!0,value:kn(null)});var Rn,Dn,In,Yn={},Fn=u,Xn=c.WeakMap,qn=Fn(Xn)&&/native code/.test(String(Xn)),Bn=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},Gn=Fe,Kn=Bn,Nn=Ie?function(e,t,n){return Gn.f(e,t,Kn(1,n))}:function(e,t,n){return e[t]=n,e},Wn=qn,Zn=c,Vn=s,Hn=Nn,Un=re,$n=U,Jn=hn,Qn=Zt,eo="Object already initialized",to=Zn.TypeError,no=Zn.WeakMap;if(Wn||$n.state){var oo=$n.state||($n.state=new no);oo.get=oo.get,oo.has=oo.has,oo.set=oo.set,Rn=function(e,t){if(oo.has(e))throw new to(eo);return t.facade=e,oo.set(e,t),t},Dn=function(e){return oo.get(e)||{}},In=function(e){return oo.has(e)}}else{var ro=Jn("state");Qn[ro]=!0,Rn=function(e,t){if(Un(e,ro))throw new to(eo);return t.facade=e,Hn(e,ro,t),t},Dn=function(e){return Un(e,ro)?e[ro]:{}},In=function(e){return Un(e,ro)}}var io={set:Rn,get:Dn,has:In,enforce:function(e){return In(e)?Dn(e):Rn(e,{})},getterFor:function(e){return function(t){var n;if(!Vn(t)||(n=Dn(t)).type!==e)throw new to("Incompatible receiver, "+e+" required");return n}}},co={},ao={},uo={}.propertyIsEnumerable,lo=Object.getOwnPropertyDescriptor,so=lo&&!uo.call({1:2},1);ao.f=so?function(e){var t=lo(this,e);return!!t&&t.enumerable}:uo;var fo=Ie,mo=Ke,po=ao,ho=Bn,yo=F,vo=wt,go=re,bo=qe,wo=Object.getOwnPropertyDescriptor;co.f=fo?wo:function(e,t){if(e=yo(e),t=vo(t),bo)try{return wo(e,t)}catch(e){}if(go(e,t))return ho(!mo(po.f,e,t),e[t])};var Oo={exports:{}},xo=Ie,_o=re,So=Function.prototype,To=xo&&Object.getOwnPropertyDescriptor,Po=_o(So,"name"),jo={PROPER:Po&&"something"===function(){}.name,CONFIGURABLE:Po&&(!xo||xo&&To(So,"name").configurable)},Lo=u,Eo=U,Mo=S(Function.toString);Lo(Eo.inspectSource)||(Eo.inspectSource=function(e){return Mo(e)});var ko=Eo.inspectSource,Ao=S,Co=g,zo=u,Ro=re,Do=Ie,Io=jo.CONFIGURABLE,Yo=ko,Fo=io.enforce,Xo=io.get,qo=String,Bo=Object.defineProperty,Go=Ao("".slice),Ko=Ao("".replace),No=Ao([].join),Wo=Do&&!Co(function(){return 8!==Bo(function(){},"length",{value:8}).length}),Zo=String(String).split("String"),Vo=Oo.exports=function(e,t,n){"Symbol("===Go(qo(t),0,7)&&(t="["+Ko(qo(t),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!Ro(e,"name")||Io&&e.name!==t)&&(Do?Bo(e,"name",{value:t,configurable:!0}):e.name=t),Wo&&n&&Ro(n,"arity")&&e.length!==n.arity&&Bo(e,"length",{value:n.arity});try{n&&Ro(n,"constructor")&&n.constructor?Do&&Bo(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var o=Fo(e);return Ro(o,"source")||(o.source=No(Zo,"string"==typeof t?t:"")),e};Function.prototype.toString=Vo(function(){return zo(this)&&Xo(this).source||Yo(this)},"toString");var Ho=Oo.exports,Uo=u,$o=Fe,Jo=Ho,Qo=G,er=function(e,t,n,o){o||(o={});var r=o.enumerable,i=void 0!==o.name?o.name:t;if(Uo(n)&&Jo(n,i,o),o.global)r?e[t]=n:Qo(t,n);else{try{o.unsafe?e[t]&&(r=!0):delete e[t]}catch(e){}r?e[t]=n:$o.f(e,t,{value:n,enumerable:!1,configurable:!o.nonConfigurable,writable:!o.nonWritable})}return e},tr={},nr=Qt,or=en.concat("length","prototype");tr.f=Object.getOwnPropertyNames||function(e){return nr(e,or)};var rr={};rr.f=Object.getOwnPropertySymbols;var ir,cr,ar,ur=Ze,lr=tr,sr=rr,fr=Re,mr=S([].concat),pr=ur("Reflect","ownKeys")||function(e){var t=lr.f(fr(e)),n=sr.f;return n?mr(t,n(e)):t},dr=re,hr=pr,yr=co,vr=Fe,gr=g,br=u,wr=/#|\.prototype\./,Or=function(e,t){var n=_r[xr(e)];return n===Tr||n!==Sr&&(br(t)?gr(t):!!t)},xr=Or.normalize=function(e){return String(e).replace(wr,".").toLowerCase()},_r=Or.data={},Sr=Or.NATIVE="N",Tr=Or.POLYFILL="P",Pr=Or,jr=c,Lr=co.f,Er=Nn,Mr=er,kr=G,Ar=function(e,t,n){for(var o=hr(t),r=vr.f,i=yr.f,c=0;c<o.length;c++){var a=o[c];dr(e,a)||n&&dr(n,a)||r(e,a,i(t,a))}},Cr=Pr,zr=!g(function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}),Rr=re,Dr=u,Ir=te,Yr=zr,Fr=hn("IE_PROTO"),Xr=Object,qr=Xr.prototype,Br=Yr?Xr.getPrototypeOf:function(e){var t=Ir(e);if(Rr(t,Fr))return t[Fr];var n=t.constructor;return Dr(n)&&t instanceof n?n.prototype:t instanceof Xr?qr:null},Gr=g,Kr=u,Nr=s,Wr=Br,Zr=er,Vr=ke("iterator"),Hr=!1;[].keys&&("next"in(ar=[].keys())?(cr=Wr(Wr(ar)))!==Object.prototype&&(ir=cr):Hr=!0),(!Nr(ir)||Gr(function(){var e={};return ir[Vr].call(e)!==e}))&&(ir={}),Kr(ir[Vr])||Zr(ir,Vr,function(){return this});var Ur={IteratorPrototype:ir,BUGGY_SAFARI_ITERATORS:Hr},$r=Fe.f,Jr=re,Qr=ke("toStringTag"),ei=function(e,t,n){e&&!n&&(e=e.prototype),e&&!Jr(e,Qr)&&$r(e,Qr,{configurable:!0,value:t})},ti=Ur.IteratorPrototype,ni=En,oi=Bn,ri=ei,ii=Yn,ci=function(){return this},ai=S,ui=rt,li=s,si=function(e){return li(e)||null===e},fi=String,mi=TypeError,pi=function(e,t,n){try{return ai(ui(Object.getOwnPropertyDescriptor(e,t)[n]))}catch(e){}},di=s,hi=D,yi=function(e){if(si(e))return e;throw new mi("Can't set "+fi(e)+" as a prototype")},vi=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=pi(Object.prototype,"__proto__","set"))(n,[]),t=n instanceof Array}catch(e){}return function(n,o){return hi(n),yi(o),di(n)?(t?e(n,o):n.__proto__=o,n):n}}():void 0),gi=function(e,t){var n,o,r,i,c,a=e.target,u=e.global,l=e.stat;if(n=u?jr:l?jr[a]||kr(a,{}):jr[a]&&jr[a].prototype)for(o in t){if(i=t[o],r=e.dontCallGetSet?(c=Lr(n,o))&&c.value:n[o],!Cr(u?o:a+(l?".":"#")+o,e.forced)&&void 0!==r){if(typeof i==typeof r)continue;Ar(i,r)}(e.sham||r&&r.sham)&&Er(i,"sham",!0),Mr(n,o,i,e)}},bi=Ke,wi=u,Oi=function(e,t,n,o){var r=t+" Iterator";return e.prototype=ni(ti,{next:oi(+!o,n)}),ri(e,r,!1),ii[r]=ci,e},xi=Br,_i=vi,Si=ei,Ti=Nn,Pi=er,ji=Yn,Li=jo.PROPER,Ei=jo.CONFIGURABLE,Mi=Ur.IteratorPrototype,ki=Ur.BUGGY_SAFARI_ITERATORS,Ai=ke("iterator"),Ci="keys",zi="values",Ri="entries",Di=function(){return this},Ii=F,Yi=function(e){zn[Cn][e]=!0},Fi=Yn,Xi=io,qi=Fe.f,Bi=function(e,t,n,o,r,i,c){Oi(n,t,o);var a,u,l,s=function(e){if(e===r&&h)return h;if(!ki&&e&&e in p)return p[e];switch(e){case Ci:case zi:case Ri:return function(){return new n(this,e)}}return function(){return new n(this)}},f=t+" Iterator",m=!1,p=e.prototype,d=p[Ai]||p["@@iterator"]||r&&p[r],h=!ki&&d||s(r),y="Array"===t&&p.entries||d;if(y&&(a=xi(y.call(new e)))!==Object.prototype&&a.next&&(xi(a)!==Mi&&(_i?_i(a,Mi):wi(a[Ai])||Pi(a,Ai,Di)),Si(a,f,!0)),Li&&r===zi&&d&&d.name!==zi&&(Ei?Ti(p,"name",zi):(m=!0,h=function(){return bi(d,this)})),r)if(u={values:s(zi),keys:i?h:s(Ci),entries:s(Ri)},c)for(l in u)(ki||m||!(l in p))&&Pi(p,l,u[l]);else gi({target:t,proto:!0,forced:ki||m},u);return p[Ai]!==h&&Pi(p,Ai,h,{name:r}),ji[t]=h,u},Gi=function(e,t){return{value:e,done:t}},Ki=Ie,Ni="Array Iterator",Wi=Xi.set,Zi=Xi.getterFor(Ni),Vi=Bi(Array,"Array",function(e,t){Wi(this,{type:Ni,target:Ii(e),index:0,kind:t})},function(){var e=Zi(this),t=e.target,n=e.index++;if(!t||n>=t.length)return e.target=null,Gi(void 0,!0);switch(e.kind){case"keys":return Gi(n,!1);case"values":return Gi(t[n],!1)}return Gi([n,t[n]],!1)},"values"),Hi=Fi.Arguments=Fi.Array;if(Yi("keys"),Yi("values"),Yi("entries"),Ki&&"values"!==Hi.name)try{qi(Hi,"name",{value:"values"})}catch(e){}var Ui=c,$i={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},Ji=v,Qi=Vi,ec=Nn,tc=ei,nc=ke("iterator"),oc=Qi.values,rc=function(e,t){if(e){if(e[nc]!==oc)try{ec(e,nc,oc)}catch(t){e[nc]=oc}if(tc(e,t,!0),$i[t])for(var n in Qi)if(e[n]!==Qi[n])try{ec(e,n,Qi[n])}catch(t){e[n]=Qi[n]}}};for(var ic in $i)rc(Ui[ic]&&Ui[ic].prototype,ic);rc(Ji,"DOMTokenList");var cc="All functions must be called from the client side.",ac="Use of the non-standard 'zoom' mode is discouraged. Please use 'transform' instead to increase performance and avoid layout shifting.",uc="The minimum scale value may not exceed the maximum scale value.",lc="The minimum scale value must be a number.",sc="The minimum scale value may not be less than 0.001.",fc="The minimum scale value may not be greater than 1.",mc="The maximum scale value must be a number.",pc="The maximum scale value may not be less than 1.",dc="The maximum scale value may not be greater than 2500.",hc="The speed multiplier must be a number.",yc="The speed multiplier may not be less than 0.1.",vc="The speed multiplier may not be greater than 10.",gc="High zoom levels may impact performance.",bc="Something went wrong (detach_listener)...\n\nPlease submit an issue at https://github.com/nsqx/pinch-zoom and include relevant details.",wc="Target element must have a parent container.",Oc="Target must be an element.",xc="onZoom must be a function.",_c="onPan must be a function.";function Sc(e){console.error("%c@nsqx/pinch-zoom:%c "+e,"padding:1px 4px;border-width:2px;border-color:#fa4549;border-style:solid;border-radius:4px;","")}function Tc(e){console.error("%c@nsqx/pinch-zoom:%c "+e,"","")}function Pc(e){console.warn("%c@nsqx/pinch-zoom:%c "+e,"","")}function jc(e){console.debug("%c@nsqx/pinch-zoom:%c "+e,"color:#218bff","")}function Lc(e,t,n,o){Object.prototype.hasOwnProperty.call(t,n)||(t[n]=e.style[n],e.style[n]=o)}function Ec(e,t){for(var n in t)void 0!==t[n]?e.style[n]=t[n]:e.style[n]=""}function Mc(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.addEventListener(t,n,o),function(){e.removeEventListener(t,n,o)}}function kc(e){try{e()}catch(e){Sc(bc),console.error(e)}}function Ac(e){if(Array.isArray(e)){for(var t of e)kc(t);e.length=0}}function Cc(){return{success:!1,scale:1,onZoom(){},viewportX:0,viewportY:0,mode:"transform",min:1,max:1,speed:0,hinted:!1,kbdEvents:!1,smooth:!0,panMode:"none",onPan(){},target:null,container:null,isRtl:!1,reset(){},destroy(){}}}var zc={min:1,max:4,speed:1,mode:"transform",hinted:!1,kbdEvents:!1,panMode:"none"};var Rc={mode:e=>"string"==typeof e&&"zoom"===e?(Pc(ac),"zoom"):"transform",smooth:e=>"boolean"==typeof e?e:!!window.matchMedia&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches,min:e=>"number"!=typeof e?(Tc(lc),1):e>1?(Tc(fc),1):e<.001?(Tc(sc),.001):e,max:e=>"number"!=typeof e?(Tc(mc),4):(e>=1e3&&Pc(gc),e<1?(Tc(pc),1):e>2500?(Tc(dc),2500):e),min_max:(e,t)=>e>t?(Tc(uc),[t,e]):[e,t],speed:e=>"number"!=typeof e?(Tc(hc),.01):e>10?(Tc(vc),.1):e<.1?(Tc(yc),.001):e/100};e.attachPinchZoom=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("undefined"==typeof window||"undefined"==typeof document)return Sc(cc),Cc();if(!(e&&e instanceof Element))return Sc(Oc),Cc();var n="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(window):e=>setTimeout(()=>e(Date.now()),17),r=function(e){return e.mode=Rc.mode(e.mode),e.smooth=Rc.smooth(e.smooth),[e.min,e.max]=Rc.min_max(e.min,e.max),e.min=Rc.min(e.min),e.max=Rc.max(e.max),e.speed=Rc.speed(e.speed),e}(o(o({},zc),t)),i=e.parentElement;if(!i)return Sc(wc),Cc();var c=r.panMode,a={};Lc(i,a,"overflow","auto"),Lc(i,a,"touchAction","pan-x pan-y"),Lc(i,a,"position","relative");var u="rtl"===window.getComputedStyle(i).direction,l={};Lc(e,l,"backfaceVisibility","hidden"),Lc(e,l,"contain","layout paint"),Lc(e,l,"position","absolute"),r.hinted&&("zoom"===r.mode?Lc(e,l,"willChange","zoom"):Lc(e,l,"willChange","transform"));var s,f,m=1,p=1,d=0,h=0,y=0,v=0,g=0,b=0,w=!0,O=!1,x=!1,_={};function S(){_.rect=i.getBoundingClientRect(),_.element_ow=e.offsetWidth,_.element_oh=e.offsetHeight,_.element_ol=e.offsetLeft,_.element_ot=e.offsetTop,_.container_ct=i.clientTop,_.container_cl=i.clientLeft,_.container_cw=i.clientWidth,_.container_ch=i.clientHeight,_.scroll_left=u?-i.scrollLeft:i.scrollLeft,_.scroll_top=i.scrollTop,y=_.element_ow*m<_.container_cw?u?-(_.container_cw-_.element_ow*m)/2:(_.container_cw-_.element_ow*m)/2:0,v=_.element_oh*m<_.container_ch?(_.container_ch-_.element_oh*m)/2:0}function T(){"zoom"===r.mode?e.style.zoom=m:(e.style.transformOrigin="".concat(u?"100%":"0"," 0"),e.style.transform="translate(".concat(y,"px, ").concat(v,"px) scale(").concat(m,")")),i.scrollLeft=u?-_.scroll_left:_.scroll_left,i.scrollTop=_.scroll_top,"function"==typeof r.onZoom&&r.onZoom({scale:m,x:_.scroll_left,y:_.scroll_top}),x=!1}function P(){S(),T()}function j(e){g=e.x,b=e.y,p=Math.min(Math.max(r.min,p-p*(e.delta*r.speed)),r.max),x||(x=!0,n(L))}function L(){var e=p-m;Math.abs(e)>.001&&r.smooth&&"zoom"!==r.mode?(E(.15,e),n(L)):(E(1,e),x=!1)}function E(e,t){d=g-_.rect.left-_.element_ol-_.container_cl-y,h=b-_.rect.top-_.element_ot-_.container_ct-v;var n=(d+_.scroll_left)/m,o=(h+_.scroll_top)/m;m+=t*e,_.element_ow*m<_.container_cw?(y=u?-(_.container_cw-_.element_ow*m)/2:(_.container_cw-_.element_ow*m)/2,_.scroll_left=0):(y=0,_.scroll_left=n*m-d-y),_.element_oh*m<_.container_ch?(v=(_.container_ch-_.element_oh*m)/2,_.scroll_top=0):(v=0,_.scroll_top=o*m-h-v),T()}P();var M=[];M.push(Mc(i,"wheel",function(e){O||(O=!0,S()),clearTimeout(s),e.ctrlKey&&(e.preventDefault(),e.stopImmediatePropagation()),e.ctrlKey&&w?j({delta:"deltaX"in e?Math.abs(e.deltaY)<90&&e.deltaY%1!=0?e.deltaY*[1,28,500][e.deltaMode||0]:e.deltaY*[1,28,500][e.deltaMode||0]*.25:"wheelDeltaX"in e?.25*e.wheelDeltaY/-3:.25*e.wheelDelta/-3,x:u?window.innerWidth-e.clientX:e.clientX,y:e.clientY}):w=!1,s=setTimeout(function(){S(),w=!0,O=!1},100)},{passive:!1})),M.push(Mc(i,"scroll",function(){f&&clearTimeout(f),f=setTimeout(S,100)},{passive:!0}));var k=[];function A(e){(e.ctrlKey||e.metaKey)&&("0"===e.key||"Digit0"===e.code||48===e.keyCode?j({delta:(m-1)/m/r.speed,x:d,y:h,rect:i.getBoundingClientRect(),scroll_left:i.scrollLeft,scroll_top:i.scrollTop}):"="===e.key||"Equal"===e.code?(e.preventDefault(),j({delta:-50/m,x:i.clientWidth/2,y:i.clientHeight/2,rect:i.getBoundingClientRect(),scroll_left:i.scrollLeft,scroll_top:i.scrollTop})):"-"!==e.key&&"Minus"!==e.code||(e.preventDefault(),j({delta:50/m,x:i.clientWidth/2,y:i.clientHeight/2,rect:i.getBoundingClientRect(),scroll_left:i.scrollLeft,scroll_top:i.scrollTop})))}r.kbdEvents&&k.push(Mc(document,"keydown",A,{passive:!1}));var C=!1,z=!1,R=!1,D=!1,I=-1!==c.indexOf("middle"),Y=-1!==c.indexOf("right"),F={x:0,y:0},X=[],q=[],B=[];function G(){i.style.cursor=z&&I||D&&Y||C&&R?"grabbing":C?"grab":""}function K(e){!(-1!==c.indexOf("ctrl")&&e.ctrlKey||-1!==c.indexOf("shift")&&e.shiftKey||-1!==c.indexOf("alt")&&e.altKey||-1!==c.indexOf("meta")&&e.metaKey)&&C&&(C=!1,G(),Ac(X))}function N(e){C=!1,z=!1,G(),Ac(X)}function W(e){(-1!==c.indexOf("ctrl")&&e.ctrlKey||-1!==c.indexOf("shift")&&e.shiftKey||-1!==c.indexOf("alt")&&e.altKey||-1!==c.indexOf("meta")&&e.metaKey)&&!C&&(C=!0,G(),X.push(Mc(document,"keyup",K)),X.push(Mc(window,"blur",N)))}function Z(e){(C&&0===e.button||I&&1===e.button||Y&&2===e.button)&&(e.preventDefault(),1===e.button?z=!0:2===e.button?D=!0:0===e.button&&(R=!0),G(),S(),F.x=_.scroll_left+e.clientX,F.y=_.scroll_top+e.clientY,q.push(Mc(document,"mousemove",V)),q.push(Mc(document,"mouseup",H)))}function V(e){(C&&R||z&&-1!==c.indexOf("middle")||D&&-1!==c.indexOf("right"))&&(i.scrollLeft=F.x-e.clientX,i.scrollTop=F.y-e.clientY,S(),"function"==typeof r.onPan&&r.onPan({scale:m,x:_.scroll_left,y:_.scroll_top}))}function H(e){1===e.button?z=!1:2===e.button?D=!1:0===e.button&&(R=!1),G(),Ac(q)}function U(e){-1!==c.indexOf("right")&&e.preventDefault()}(-1!==c.indexOf("ctrl")||-1!==c.indexOf("shift")||-1!==c.indexOf("meta")||-1!==c.indexOf("alt")||I||Y)&&(B.push(Mc(i,"mousedown",Z)),B.push(Mc(document,"keydown",W,{passive:!0})),B.push(Mc(i,"contextmenu",U)));var $,J,Q,ee,te=0,ne=!1,oe=[];return"maxTouchPoints"in navigator&&navigator.maxTouchPoints>0&&(oe.push(Mc(i,"touchstart",function(e){e.touches&&e.touches.length>=2&&(ne=!0,S(),te=Math.sqrt(Math.pow(e.touches[0].pageX-e.touches[1].pageX,2)+Math.pow(e.touches[0].pageY-e.touches[1].pageY,2)),$=(e.touches[0].pageX+e.touches[1].pageX)/2,J=(e.touches[0].pageY+e.touches[1].pageY)/2)},{passive:!0})),oe.push(Mc(i,"touchmove",function(e){if(e.touches&&e.touches.length>=2){var t=Math.sqrt(Math.pow(e.touches[0].pageX-e.touches[1].pageX,2)+Math.pow(e.touches[0].pageY-e.touches[1].pageY,2));$=(e.touches[0].pageX+e.touches[1].pageX)/2,J=(e.touches[0].pageY+e.touches[1].pageY)/2,j({delta:(te-t)/2,x:$,y:J}),te=t}},{passive:!0})),oe.push(Mc(i,"touchend",function(e){ne&&(ne=!1,j({delta:0,x:$,y:J}))},{passive:!0}))),M.push(Mc(window,"resize",P)),"complete"!==document.readyState&&M.push(Mc(window,"load",P)),window.ResizeObserver?(ee=new ResizeObserver(function(e){e.length&&(clearTimeout(Q),Q=setTimeout(P,17))})).observe(e):(ee=new MutationObserver(function(){clearTimeout(Q),Q=setTimeout(P,100)})).observe(e,{childList:!0,subtree:!0,characterData:!0}),jc("Attached successfully."),jc("Options:\n\nmode\t\t".concat(r.mode,"\nmin\t\t\t").concat(r.min,"\nmax\t\t\t").concat(r.max,"\nspeed\t\t").concat(100*r.speed,"\nsmooth\t\t").concat(r.smooth,"\nkbdEvents\t").concat(r.kbdEvents,"\nhinted\t\t").concat(r.hinted,"\npanMode\t\t").concat(Array.isArray(r.panMode)?r.panMode.join(" "):r.panMode,"\nrtl\t\t\t").concat(u)),{get success(){return!0},get scale(){return m},set scale(e){j({delta:(m-e)/m/r.speed,x:d,y:h,rect:i.getBoundingClientRect(),scroll_left:i.scrollLeft,scroll_top:i.scrollTop})},get onZoom(){return r.onZoom},set onZoom(e){"function"==typeof e?r.onZoom=e:Tc(xc)},get viewportX(){return d},get viewportY(){return h},get x(){return u?i.scrollWidth-i.clientWidth-i.scrollLeft:i.scrollLeft},set x(e){if("number"==typeof e)if(u){var t=i.scrollWidth-i.clientWidth,n=Math.min(t,Math.max(0,e));i.scrollLeft=t-n,_.scroll_left=n}else i.scrollLeft=e,_.scroll_left=e},get y(){return i.scrollTop},set y(e){"number"==typeof e&&(i.scrollTop=e,_.scroll_top=e)},get mode(){return r.mode},set mode(t){"string"==typeof t&&"zoom"===t?(r.mode="zoom",Pc(ac),e.style.zoom=m,e.style.transform=""):(r.mode="transform",e.style.transform="scale(".concat(m,")"),e.style.zoom=""),P()},get min(){return r.min},set min(e){r.min=Rc.min(e),[r.min,r.max]=Rc.min_max(r.min,r.max),P()},get max(){return r.max},set max(e){r.max=Rc.max(e),[r.min,r.max]=Rc.min_max(r.min,r.max),P()},get speed(){return 100*r.speed},set speed(e){r.speed=Rc.speed(e)},get hinted(){return r.hinted},set hinted(t){r.hinted=!!t,r.hinted&&("zoom"===r.mode?e.style.willChange="zoom":e.style.willChange="transform")},get kbdEvents(){return r.kbdEvents},set kbdEvents(e){r.kbdEvents&&!e?(r.kbdEvents=!1,Ac(k)):!r.kbdEvents&&e&&(r.kbdEvents=!0,k.push(Mc(document,"keydown",A,{passive:!1})))},get smooth(){return r.smooth},set smooth(e){r.smooth=Rc.smooth(e),r.smooth||(m=p,P())},get panMode(){return c},set panMode(e){Ac(X),Ac(q),Ac(B),C=!1,R=!1,z=!1,D=!1,r.panMode=e,c=r.panMode,I=-1!==c.indexOf("middle"),Y=-1!==c.indexOf("right"),(-1!==c.indexOf("ctrl")||-1!==c.indexOf("shift")||-1!==c.indexOf("meta")||-1!==c.indexOf("alt")||I||Y)&&(B.push(Mc(i,"mousedown",Z)),B.push(Mc(document,"keydown",W,{passive:!0})),B.push(Mc(i,"contextmenu",U))),G()},get onPan(){return r.onPan},set onPan(e){"function"==typeof e?r.onPan=e:Tc(_c)},get target(){return e},get container(){return i},get isRtl(){return u},get reset(){return function(){j({delta:(m-1)/m/r.speed,x:d,y:h,rect:i.getBoundingClientRect(),scroll_left:i.scrollLeft,scroll_top:i.scrollTop})}},get destroy(){return function(){clearTimeout(s),clearTimeout(f),clearTimeout(Q),Ac(M),Ac(k),Ac(X),Ac(q),Ac(B),Ac(oe),ee&&(ee.disconnect(),ee=null),Ec(i,a),i.style.cursor="",Ec(e,l),"zoom"===r.mode?e.style.zoom="":e.style.transform="",i.scrollTop/=m,i.scrollLeft/=m}}}},e.pinchZoomLockViewport=function(){var{useMeta:e=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if("undefined"==typeof window||"undefined"==typeof document)return Tc(cc),{unlock(){}};function t(e){e.ctrlKey&&e.preventDefault()}window.addEventListener("wheel",t,{passive:!1}),document.documentElement.style.touchAction="pan-x pan-y";var n=null,o=null;return e&&(null!==document.querySelector("meta[name=viewport]")?(n=document.querySelector("meta[name=viewport]").content,document.querySelector("meta[name=viewport]").content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, interactive-widget=resizes-content"):0!==document.getElementsByTagName("head").length&&((o=document.getElementsByTagName("head")[0].appendChild(document.createElement("meta"))).name="viewport",o.content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, interactive-widget=resizes-content")),{get unlock(){return function(){window.removeEventListener("wheel",t),document.documentElement.style.touchAction="",e&&(null!==n?document.querySelector("meta[name=viewport]").content=n:o.parentElement.removeChild(o))}}}}});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).PinchZoom={})}(this,function(e){"use strict";function t(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t);if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function n(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,o)}return n}function o(e){for(var o=1;o<arguments.length;o++){var r=null!=arguments[o]?arguments[o]:{};o%2?n(Object(r),!0).forEach(function(n){t(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}var r="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},i=function(e){return e&&e.Math===Math&&e},c=i("object"==typeof globalThis&&globalThis)||i("object"==typeof window&&window)||i("object"==typeof self&&self)||i("object"==typeof r&&r)||i("object"==typeof r&&r)||function(){return this}()||Function("return this")(),a="object"==typeof document&&document.all,u=void 0===a&&void 0!==a?function(e){return"function"==typeof e||e===a}:function(e){return"function"==typeof e},l=u,s=function(e){return"object"==typeof e?null!==e:l(e)},f=s,m=c.document,p=f(m)&&f(m.createElement),d=function(e){return p?m.createElement(e):{}},h=d("span").classList,y=h&&h.constructor&&h.constructor.prototype,v=y===Object.prototype?void 0:y,g=function(e){try{return!!e()}catch(e){return!0}},b=!g(function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}),w=b,O=Function.prototype,x=O.call,_=w&&O.bind.bind(x,x),S=w?_:function(e){return function(){return x.apply(e,arguments)}},T=S,P=T({}.toString),j=T("".slice),L=g,E=function(e){return j(P(e),8,-1)},M=Object,k=S("".split),A=L(function(){return!M("z").propertyIsEnumerable(0)})?function(e){return"String"===E(e)?k(e,""):M(e)}:M,C=function(e){return null==e},z=C,R=TypeError,D=function(e){if(z(e))throw new R("Can't call method on "+e);return e},I=A,Y=D,F=function(e){return I(Y(e))},X={exports:{}},q=c,B=Object.defineProperty,G=function(e,t){try{B(q,e,{value:t,configurable:!0,writable:!0})}catch(n){q[e]=t}return t},K=c,N=G,W="__core-js_shared__",Z=X.exports=K[W]||N(W,{});(Z.versions||(Z.versions=[])).push({version:"3.48.0",mode:"global",copyright:"© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.",license:"https://github.com/zloirock/core-js/blob/v3.48.0/LICENSE",source:"https://github.com/zloirock/core-js"});var V,H,U=X.exports,$=U,J=function(e,t){return $[e]||($[e]=t||{})},Q=D,ee=Object,te=function(e){return ee(Q(e))},ne=te,oe=S({}.hasOwnProperty),re=Object.hasOwn||function(e,t){return oe(ne(e),t)},ie=S,ce=0,ae=Math.random(),ue=ie(1.1.toString),le=function(e){return"Symbol("+(void 0===e?"":e)+")_"+ue(++ce+ae,36)},se=c.navigator,fe=se&&se.userAgent,me=c,pe=fe?String(fe):"",de=me.process,he=me.Deno,ye=de&&de.versions||he&&he.version,ve=ye&&ye.v8;ve&&(H=(V=ve.split("."))[0]>0&&V[0]<4?1:+(V[0]+V[1])),!H&&pe&&(!(V=pe.match(/Edge\/(\d+)/))||V[1]>=74)&&(V=pe.match(/Chrome\/(\d+)/))&&(H=+V[1]);var ge=H,be=g,we=c.String,Oe=!!Object.getOwnPropertySymbols&&!be(function(){var e=Symbol("symbol detection");return!we(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&ge&&ge<41}),xe=Oe&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,_e=J,Se=re,Te=le,Pe=Oe,je=xe,Le=c.Symbol,Ee=_e("wks"),Me=je?Le.for||Le:Le&&Le.withoutSetter||Te,ke=function(e){return Se(Ee,e)||(Ee[e]=Pe&&Se(Le,e)?Le[e]:Me("Symbol."+e)),Ee[e]},Ae=s,Ce=String,ze=TypeError,Re=function(e){if(Ae(e))return e;throw new ze(Ce(e)+" is not an object")},De={},Ie=!g(function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}),Ye=Ie&&g(function(){return 42!==Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype}),Fe={},Xe=d,qe=!Ie&&!g(function(){return 7!==Object.defineProperty(Xe("div"),"a",{get:function(){return 7}}).a}),Be=b,Ge=Function.prototype.call,Ke=Be?Ge.bind(Ge):function(){return Ge.apply(Ge,arguments)},Ne=c,We=u,Ze=function(e,t){return arguments.length<2?(n=Ne[e],We(n)?n:void 0):Ne[e]&&Ne[e][t];var n},Ve=S({}.isPrototypeOf),He=Ze,Ue=u,$e=Ve,Je=Object,Qe=xe?function(e){return"symbol"==typeof e}:function(e){var t=He("Symbol");return Ue(t)&&$e(t.prototype,Je(e))},et=String,tt=u,nt=function(e){try{return et(e)}catch(e){return"Object"}},ot=TypeError,rt=function(e){if(tt(e))return e;throw new ot(nt(e)+" is not a function")},it=rt,ct=C,at=Ke,ut=u,lt=s,st=TypeError,ft=Ke,mt=s,pt=Qe,dt=function(e,t){var n=e[t];return ct(n)?void 0:it(n)},ht=function(e,t){var n,o;if("string"===t&&ut(n=e.toString)&&!lt(o=at(n,e)))return o;if(ut(n=e.valueOf)&&!lt(o=at(n,e)))return o;if("string"!==t&&ut(n=e.toString)&&!lt(o=at(n,e)))return o;throw new st("Can't convert object to primitive value")},yt=TypeError,vt=ke("toPrimitive"),gt=function(e,t){if(!mt(e)||pt(e))return e;var n,o=dt(e,vt);if(o){if(void 0===t&&(t="default"),n=ft(o,e,t),!mt(n)||pt(n))return n;throw new yt("Can't convert object to primitive value")}return void 0===t&&(t="number"),ht(e,t)},bt=Qe,wt=function(e){var t=gt(e,"string");return bt(t)?t:t+""},Ot=Ie,xt=qe,_t=Ye,St=Re,Tt=wt,Pt=TypeError,jt=Object.defineProperty,Lt=Object.getOwnPropertyDescriptor,Et="enumerable",Mt="configurable",kt="writable";Fe.f=Ot?_t?function(e,t,n){if(St(e),t=Tt(t),St(n),"function"==typeof e&&"prototype"===t&&"value"in n&&kt in n&&!n[kt]){var o=Lt(e,t);o&&o[kt]&&(e[t]=n.value,n={configurable:Mt in n?n[Mt]:o[Mt],enumerable:Et in n?n[Et]:o[Et],writable:!1})}return jt(e,t,n)}:jt:function(e,t,n){if(St(e),t=Tt(t),St(n),xt)try{return jt(e,t,n)}catch(e){}if("get"in n||"set"in n)throw new Pt("Accessors not supported");return"value"in n&&(e[t]=n.value),e};var At,Ct=Math.ceil,zt=Math.floor,Rt=Math.trunc||function(e){var t=+e;return(t>0?zt:Ct)(t)},Dt=function(e){var t=+e;return t!=t||0===t?0:Rt(t)},It=Dt,Yt=Math.max,Ft=Math.min,Xt=Dt,qt=Math.min,Bt=function(e){var t=Xt(e);return t>0?qt(t,9007199254740991):0},Gt=F,Kt=function(e,t){var n=It(e);return n<0?Yt(n+t,0):Ft(n,t)},Nt=function(e){return Bt(e.length)},Wt={indexOf:(At=!1,function(e,t,n){var o=Gt(e),r=Nt(o);if(0===r)return!At&&-1;var i,c=Kt(n,r);if(At&&t!=t){for(;r>c;)if((i=o[c++])!=i)return!0}else for(;r>c;c++)if((At||c in o)&&o[c]===t)return At||c||0;return!At&&-1})},Zt={},Vt=re,Ht=F,Ut=Wt.indexOf,$t=Zt,Jt=S([].push),Qt=function(e,t){var n,o=Ht(e),r=0,i=[];for(n in o)!Vt($t,n)&&Vt(o,n)&&Jt(i,n);for(;t.length>r;)Vt(o,n=t[r++])&&(~Ut(i,n)||Jt(i,n));return i},en=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],tn=Qt,nn=en,on=Object.keys||function(e){return tn(e,nn)},rn=Ie,cn=Ye,an=Fe,un=Re,ln=F,sn=on;De.f=rn&&!cn?Object.defineProperties:function(e,t){un(e);for(var n,o=ln(t),r=sn(t),i=r.length,c=0;i>c;)an.f(e,n=r[c++],o[n]);return e};var fn,mn=Ze("document","documentElement"),pn=le,dn=J("keys"),hn=function(e){return dn[e]||(dn[e]=pn(e))},yn=Re,vn=De,gn=en,bn=Zt,wn=mn,On=d,xn="prototype",_n="script",Sn=hn("IE_PROTO"),Tn=function(){},Pn=function(e){return"<"+_n+">"+e+"</"+_n+">"},jn=function(e){e.write(Pn("")),e.close();var t=e.parentWindow.Object;return e=null,t},Ln=function(){try{fn=new ActiveXObject("htmlfile")}catch(e){}var e,t,n;Ln="undefined"!=typeof document?document.domain&&fn?jn(fn):(t=On("iframe"),n="java"+_n+":",t.style.display="none",wn.appendChild(t),t.src=String(n),(e=t.contentWindow.document).open(),e.write(Pn("document.F=Object")),e.close(),e.F):jn(fn);for(var o=gn.length;o--;)delete Ln[xn][gn[o]];return Ln()};bn[Sn]=!0;var En=Object.create||function(e,t){var n;return null!==e?(Tn[xn]=yn(e),n=new Tn,Tn[xn]=null,n[Sn]=e):n=Ln(),void 0===t?n:vn.f(n,t)},Mn=ke,kn=En,An=Fe.f,Cn=Mn("unscopables"),zn=Array.prototype;void 0===zn[Cn]&&An(zn,Cn,{configurable:!0,value:kn(null)});var Rn,Dn,In,Yn={},Fn=u,Xn=c.WeakMap,qn=Fn(Xn)&&/native code/.test(String(Xn)),Bn=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},Gn=Fe,Kn=Bn,Nn=Ie?function(e,t,n){return Gn.f(e,t,Kn(1,n))}:function(e,t,n){return e[t]=n,e},Wn=qn,Zn=c,Vn=s,Hn=Nn,Un=re,$n=U,Jn=hn,Qn=Zt,eo="Object already initialized",to=Zn.TypeError,no=Zn.WeakMap;if(Wn||$n.state){var oo=$n.state||($n.state=new no);oo.get=oo.get,oo.has=oo.has,oo.set=oo.set,Rn=function(e,t){if(oo.has(e))throw new to(eo);return t.facade=e,oo.set(e,t),t},Dn=function(e){return oo.get(e)||{}},In=function(e){return oo.has(e)}}else{var ro=Jn("state");Qn[ro]=!0,Rn=function(e,t){if(Un(e,ro))throw new to(eo);return t.facade=e,Hn(e,ro,t),t},Dn=function(e){return Un(e,ro)?e[ro]:{}},In=function(e){return Un(e,ro)}}var io={set:Rn,get:Dn,has:In,enforce:function(e){return In(e)?Dn(e):Rn(e,{})},getterFor:function(e){return function(t){var n;if(!Vn(t)||(n=Dn(t)).type!==e)throw new to("Incompatible receiver, "+e+" required");return n}}},co={},ao={},uo={}.propertyIsEnumerable,lo=Object.getOwnPropertyDescriptor,so=lo&&!uo.call({1:2},1);ao.f=so?function(e){var t=lo(this,e);return!!t&&t.enumerable}:uo;var fo=Ie,mo=Ke,po=ao,ho=Bn,yo=F,vo=wt,go=re,bo=qe,wo=Object.getOwnPropertyDescriptor;co.f=fo?wo:function(e,t){if(e=yo(e),t=vo(t),bo)try{return wo(e,t)}catch(e){}if(go(e,t))return ho(!mo(po.f,e,t),e[t])};var Oo={exports:{}},xo=Ie,_o=re,So=Function.prototype,To=xo&&Object.getOwnPropertyDescriptor,Po=_o(So,"name"),jo={PROPER:Po&&"something"===function(){}.name,CONFIGURABLE:Po&&(!xo||xo&&To(So,"name").configurable)},Lo=u,Eo=U,Mo=S(Function.toString);Lo(Eo.inspectSource)||(Eo.inspectSource=function(e){return Mo(e)});var ko=Eo.inspectSource,Ao=S,Co=g,zo=u,Ro=re,Do=Ie,Io=jo.CONFIGURABLE,Yo=ko,Fo=io.enforce,Xo=io.get,qo=String,Bo=Object.defineProperty,Go=Ao("".slice),Ko=Ao("".replace),No=Ao([].join),Wo=Do&&!Co(function(){return 8!==Bo(function(){},"length",{value:8}).length}),Zo=String(String).split("String"),Vo=Oo.exports=function(e,t,n){"Symbol("===Go(qo(t),0,7)&&(t="["+Ko(qo(t),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),n&&n.getter&&(t="get "+t),n&&n.setter&&(t="set "+t),(!Ro(e,"name")||Io&&e.name!==t)&&(Do?Bo(e,"name",{value:t,configurable:!0}):e.name=t),Wo&&n&&Ro(n,"arity")&&e.length!==n.arity&&Bo(e,"length",{value:n.arity});try{n&&Ro(n,"constructor")&&n.constructor?Do&&Bo(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var o=Fo(e);return Ro(o,"source")||(o.source=No(Zo,"string"==typeof t?t:"")),e};Function.prototype.toString=Vo(function(){return zo(this)&&Xo(this).source||Yo(this)},"toString");var Ho=Oo.exports,Uo=u,$o=Fe,Jo=Ho,Qo=G,er=function(e,t,n,o){o||(o={});var r=o.enumerable,i=void 0!==o.name?o.name:t;if(Uo(n)&&Jo(n,i,o),o.global)r?e[t]=n:Qo(t,n);else{try{o.unsafe?e[t]&&(r=!0):delete e[t]}catch(e){}r?e[t]=n:$o.f(e,t,{value:n,enumerable:!1,configurable:!o.nonConfigurable,writable:!o.nonWritable})}return e},tr={},nr=Qt,or=en.concat("length","prototype");tr.f=Object.getOwnPropertyNames||function(e){return nr(e,or)};var rr={};rr.f=Object.getOwnPropertySymbols;var ir,cr,ar,ur=Ze,lr=tr,sr=rr,fr=Re,mr=S([].concat),pr=ur("Reflect","ownKeys")||function(e){var t=lr.f(fr(e)),n=sr.f;return n?mr(t,n(e)):t},dr=re,hr=pr,yr=co,vr=Fe,gr=g,br=u,wr=/#|\.prototype\./,Or=function(e,t){var n=_r[xr(e)];return n===Tr||n!==Sr&&(br(t)?gr(t):!!t)},xr=Or.normalize=function(e){return String(e).replace(wr,".").toLowerCase()},_r=Or.data={},Sr=Or.NATIVE="N",Tr=Or.POLYFILL="P",Pr=Or,jr=c,Lr=co.f,Er=Nn,Mr=er,kr=G,Ar=function(e,t,n){for(var o=hr(t),r=vr.f,i=yr.f,c=0;c<o.length;c++){var a=o[c];dr(e,a)||n&&dr(n,a)||r(e,a,i(t,a))}},Cr=Pr,zr=!g(function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}),Rr=re,Dr=u,Ir=te,Yr=zr,Fr=hn("IE_PROTO"),Xr=Object,qr=Xr.prototype,Br=Yr?Xr.getPrototypeOf:function(e){var t=Ir(e);if(Rr(t,Fr))return t[Fr];var n=t.constructor;return Dr(n)&&t instanceof n?n.prototype:t instanceof Xr?qr:null},Gr=g,Kr=u,Nr=s,Wr=Br,Zr=er,Vr=ke("iterator"),Hr=!1;[].keys&&("next"in(ar=[].keys())?(cr=Wr(Wr(ar)))!==Object.prototype&&(ir=cr):Hr=!0),(!Nr(ir)||Gr(function(){var e={};return ir[Vr].call(e)!==e}))&&(ir={}),Kr(ir[Vr])||Zr(ir,Vr,function(){return this});var Ur={IteratorPrototype:ir,BUGGY_SAFARI_ITERATORS:Hr},$r=Fe.f,Jr=re,Qr=ke("toStringTag"),ei=function(e,t,n){e&&!n&&(e=e.prototype),e&&!Jr(e,Qr)&&$r(e,Qr,{configurable:!0,value:t})},ti=Ur.IteratorPrototype,ni=En,oi=Bn,ri=ei,ii=Yn,ci=function(){return this},ai=S,ui=rt,li=s,si=function(e){return li(e)||null===e},fi=String,mi=TypeError,pi=function(e,t,n){try{return ai(ui(Object.getOwnPropertyDescriptor(e,t)[n]))}catch(e){}},di=s,hi=D,yi=function(e){if(si(e))return e;throw new mi("Can't set "+fi(e)+" as a prototype")},vi=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=pi(Object.prototype,"__proto__","set"))(n,[]),t=n instanceof Array}catch(e){}return function(n,o){return hi(n),yi(o),di(n)?(t?e(n,o):n.__proto__=o,n):n}}():void 0),gi=function(e,t){var n,o,r,i,c,a=e.target,u=e.global,l=e.stat;if(n=u?jr:l?jr[a]||kr(a,{}):jr[a]&&jr[a].prototype)for(o in t){if(i=t[o],r=e.dontCallGetSet?(c=Lr(n,o))&&c.value:n[o],!Cr(u?o:a+(l?".":"#")+o,e.forced)&&void 0!==r){if(typeof i==typeof r)continue;Ar(i,r)}(e.sham||r&&r.sham)&&Er(i,"sham",!0),Mr(n,o,i,e)}},bi=Ke,wi=u,Oi=function(e,t,n,o){var r=t+" Iterator";return e.prototype=ni(ti,{next:oi(+!o,n)}),ri(e,r,!1),ii[r]=ci,e},xi=Br,_i=vi,Si=ei,Ti=Nn,Pi=er,ji=Yn,Li=jo.PROPER,Ei=jo.CONFIGURABLE,Mi=Ur.IteratorPrototype,ki=Ur.BUGGY_SAFARI_ITERATORS,Ai=ke("iterator"),Ci="keys",zi="values",Ri="entries",Di=function(){return this},Ii=F,Yi=function(e){zn[Cn][e]=!0},Fi=Yn,Xi=io,qi=Fe.f,Bi=function(e,t,n,o,r,i,c){Oi(n,t,o);var a,u,l,s=function(e){if(e===r&&h)return h;if(!ki&&e&&e in p)return p[e];switch(e){case Ci:case zi:case Ri:return function(){return new n(this,e)}}return function(){return new n(this)}},f=t+" Iterator",m=!1,p=e.prototype,d=p[Ai]||p["@@iterator"]||r&&p[r],h=!ki&&d||s(r),y="Array"===t&&p.entries||d;if(y&&(a=xi(y.call(new e)))!==Object.prototype&&a.next&&(xi(a)!==Mi&&(_i?_i(a,Mi):wi(a[Ai])||Pi(a,Ai,Di)),Si(a,f,!0)),Li&&r===zi&&d&&d.name!==zi&&(Ei?Ti(p,"name",zi):(m=!0,h=function(){return bi(d,this)})),r)if(u={values:s(zi),keys:i?h:s(Ci),entries:s(Ri)},c)for(l in u)(ki||m||!(l in p))&&Pi(p,l,u[l]);else gi({target:t,proto:!0,forced:ki||m},u);return p[Ai]!==h&&Pi(p,Ai,h,{name:r}),ji[t]=h,u},Gi=function(e,t){return{value:e,done:t}},Ki=Ie,Ni="Array Iterator",Wi=Xi.set,Zi=Xi.getterFor(Ni),Vi=Bi(Array,"Array",function(e,t){Wi(this,{type:Ni,target:Ii(e),index:0,kind:t})},function(){var e=Zi(this),t=e.target,n=e.index++;if(!t||n>=t.length)return e.target=null,Gi(void 0,!0);switch(e.kind){case"keys":return Gi(n,!1);case"values":return Gi(t[n],!1)}return Gi([n,t[n]],!1)},"values"),Hi=Fi.Arguments=Fi.Array;if(Yi("keys"),Yi("values"),Yi("entries"),Ki&&"values"!==Hi.name)try{qi(Hi,"name",{value:"values"})}catch(e){}var Ui=c,$i={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},Ji=v,Qi=Vi,ec=Nn,tc=ei,nc=ke("iterator"),oc=Qi.values,rc=function(e,t){if(e){if(e[nc]!==oc)try{ec(e,nc,oc)}catch(t){e[nc]=oc}if(tc(e,t,!0),$i[t])for(var n in Qi)if(e[n]!==Qi[n])try{ec(e,n,Qi[n])}catch(t){e[n]=Qi[n]}}};for(var ic in $i)rc(Ui[ic]&&Ui[ic].prototype,ic);rc(Ji,"DOMTokenList");var cc="All functions must be called from the client side.",ac="Use of the non-standard 'zoom' mode is discouraged. Please use 'transform' instead to increase performance and avoid layout shifting.",uc="The minimum scale value may not exceed the maximum scale value.",lc="The minimum scale value must be a number.",sc="The minimum scale value may not be less than 0.001.",fc="The minimum scale value may not be greater than 1.",mc="The maximum scale value must be a number.",pc="The maximum scale value may not be less than 1.",dc="The maximum scale value may not be greater than 2500.",hc="The speed multiplier must be a number.",yc="The speed multiplier may not be less than 0.1.",vc="The speed multiplier may not be greater than 10.",gc="High zoom levels may impact performance.",bc="Something went wrong (detach_listener)...\n\nPlease submit an issue at https://github.com/nsqx/pinch-zoom and include relevant details.",wc="Target element must have a parent container.",Oc="Target must be an element.",xc="onZoom must be a function.",_c="onPan must be a function.";function Sc(e){console.error("%c@nsqx/pinch-zoom:%c "+e,"padding:1px 4px;border-width:2px;border-color:#fa4549;border-style:solid;border-radius:4px;","")}function Tc(e){console.error("%c@nsqx/pinch-zoom:%c "+e,"","")}function Pc(e){console.warn("%c@nsqx/pinch-zoom:%c "+e,"","")}function jc(e){console.debug("%c@nsqx/pinch-zoom:%c "+e,"color:#218bff","")}function Lc(e,t,n,o){Object.prototype.hasOwnProperty.call(t,n)||(t[n]=e.style[n],e.style[n]=o)}function Ec(e,t){for(var n in t)void 0!==t[n]?e.style[n]=t[n]:e.style[n]=""}function Mc(e,t,n){var o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return e.addEventListener(t,n,o),function(){e.removeEventListener(t,n,o)}}function kc(e){try{e()}catch(e){Sc(bc),console.error(e)}}function Ac(e){if(Array.isArray(e)){for(var t of e)kc(t);e.length=0}}function Cc(){return{success:!1,scale:1,onZoom(){},viewportX:0,viewportY:0,mode:"transform",min:1,max:1,speed:0,hinted:!1,kbdEvents:!1,smooth:!0,panMode:"none",onPan(){},target:null,container:null,isRtl:!1,reset(){},destroy(){}}}var zc={min:1,max:4,speed:1,mode:"transform",hinted:!1,kbdEvents:!1,panMode:"none"};var Rc={mode:e=>"string"==typeof e&&"zoom"===e?(Pc(ac),"zoom"):"transform",smooth:e=>"boolean"==typeof e?e:!!window.matchMedia&&!window.matchMedia("(prefers-reduced-motion: reduce)").matches,min:e=>"number"!=typeof e?(Tc(lc),1):e>1?(Tc(fc),1):e<.001?(Tc(sc),.001):e,max:e=>"number"!=typeof e?(Tc(mc),4):(e>=1e3&&Pc(gc),e<1?(Tc(pc),1):e>2500?(Tc(dc),2500):e),min_max:(e,t)=>e>t?(Tc(uc),[t,e]):[e,t],speed:e=>"number"!=typeof e?(Tc(hc),.01):e>10?(Tc(vc),.1):e<.1?(Tc(yc),.001):e/100};e.attachPinchZoom=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("undefined"==typeof window||"undefined"==typeof document)return Sc(cc),Cc();if(!(e&&e instanceof Element))return Sc(Oc),Cc();var n="function"==typeof requestAnimationFrame?requestAnimationFrame.bind(window):e=>setTimeout(()=>e(Date.now()),17),r=function(e){return e.mode=Rc.mode(e.mode),e.smooth=Rc.smooth(e.smooth),[e.min,e.max]=Rc.min_max(e.min,e.max),e.min=Rc.min(e.min),e.max=Rc.max(e.max),e.speed=Rc.speed(e.speed),e}(o(o({},zc),t)),i=e.parentElement;if(!i)return Sc(wc),Cc();var c=r.panMode,a={};Lc(i,a,"overflow","auto"),Lc(i,a,"touchAction","pan-x pan-y"),Lc(i,a,"position","relative");var u="rtl"===window.getComputedStyle(i).direction,l={};Lc(e,l,"backfaceVisibility","hidden"),Lc(e,l,"contain","layout paint"),Lc(e,l,"position","absolute"),r.hinted&&("zoom"===r.mode?Lc(e,l,"willChange","zoom"):Lc(e,l,"willChange","transform"));var s,f,m=1,p=1,d=0,h=0,y=0,v=0,g=0,b=0,w=!0,O=!1,x=!1,_={};function S(){_.rect=i.getBoundingClientRect(),_.element_ow=e.offsetWidth,_.element_oh=e.offsetHeight,_.element_ol=e.offsetLeft,_.element_ot=e.offsetTop,_.container_ct=i.clientTop,_.container_cl=i.clientLeft,_.container_cw=i.clientWidth,_.container_ch=i.clientHeight,_.scroll_left=u?-i.scrollLeft:i.scrollLeft,_.scroll_top=i.scrollTop,y=_.element_ow*m<_.container_cw?u?-(_.container_cw-_.element_ow*m)/2:(_.container_cw-_.element_ow*m)/2:0,v=_.element_oh*m<_.container_ch?(_.container_ch-_.element_oh*m)/2:0}function T(){"zoom"===r.mode?e.style.zoom=m:(e.style.transformOrigin="".concat(u?"100%":"0"," 0"),e.style.transform="translate(".concat(y,"px, ").concat(v,"px) scale(").concat(m,")")),i.scrollLeft=u?-_.scroll_left:_.scroll_left,i.scrollTop=_.scroll_top,"function"==typeof r.onZoom&&r.onZoom({scale:m,x:_.scroll_left,y:_.scroll_top}),x=!1}function P(){S(),T()}function j(e){g=e.x,b=e.y,p=Math.min(Math.max(r.min,p-p*(e.delta*r.speed)),r.max),x||(x=!0,n(L))}function L(){var e=p-m;Math.abs(e)>.001&&r.smooth&&"zoom"!==r.mode?(E(.15,e),n(L)):(E(1,e),x=!1)}function E(e,t){d=g-_.rect.left-_.element_ol-_.container_cl-y,h=b-_.rect.top-_.element_ot-_.container_ct-v;var n=(d+_.scroll_left)/m,o=(h+_.scroll_top)/m;m+=t*e,_.element_ow*m<_.container_cw?(y=u?-(_.container_cw-_.element_ow*m)/2:(_.container_cw-_.element_ow*m)/2,_.scroll_left=0):(y=0,_.scroll_left=n*m-d-y),_.element_oh*m<_.container_ch?(v=(_.container_ch-_.element_oh*m)/2,_.scroll_top=0):(v=0,_.scroll_top=o*m-h-v),T()}P();var M=[];M.push(Mc(i,"wheel",function(e){O||(O=!0,S()),clearTimeout(s),e.ctrlKey&&(e.preventDefault(),e.stopImmediatePropagation()),e.ctrlKey&&w?j({delta:"deltaX"in e?Math.abs(e.deltaY)<90&&e.deltaY%1!=0?e.deltaY*[1,28,500][e.deltaMode||0]:e.deltaY*[1,28,500][e.deltaMode||0]*.25:"wheelDeltaX"in e?.25*e.wheelDeltaY/-3:.25*e.wheelDelta/-3,x:u?window.innerWidth-e.clientX:e.clientX,y:e.clientY}):w=!1,s=setTimeout(function(){S(),w=!0,O=!1},100)},{passive:!1})),M.push(Mc(i,"scroll",function(){f&&clearTimeout(f),f=setTimeout(S,100)},{passive:!0}));var k=[];function A(e){(e.ctrlKey||e.metaKey)&&("0"===e.key||"Digit0"===e.code||48===e.keyCode?j({delta:(m-1)/m/r.speed,x:d,y:h,rect:i.getBoundingClientRect(),scroll_left:i.scrollLeft,scroll_top:i.scrollTop}):"="===e.key||"Equal"===e.code?(e.preventDefault(),j({delta:-50/m,x:i.clientWidth/2,y:i.clientHeight/2,rect:i.getBoundingClientRect(),scroll_left:i.scrollLeft,scroll_top:i.scrollTop})):"-"!==e.key&&"Minus"!==e.code||(e.preventDefault(),j({delta:50/m,x:i.clientWidth/2,y:i.clientHeight/2,rect:i.getBoundingClientRect(),scroll_left:i.scrollLeft,scroll_top:i.scrollTop})))}r.kbdEvents&&k.push(Mc(document,"keydown",A,{passive:!1}));var C=!1,z=!1,R=!1,D=!1,I=-1!==c.indexOf("middle"),Y=-1!==c.indexOf("right"),F={x:0,y:0},X=[],q=[],B=[];function G(){i.style.cursor=z&&I||D&&Y||C&&R?"grabbing":C?"grab":""}function K(e){!(-1!==c.indexOf("ctrl")&&e.ctrlKey||-1!==c.indexOf("shift")&&e.shiftKey||-1!==c.indexOf("alt")&&e.altKey||-1!==c.indexOf("meta")&&e.metaKey)&&C&&(C=!1,G(),Ac(X))}function N(e){C=!1,z=!1,G(),Ac(X)}function W(e){(-1!==c.indexOf("ctrl")&&e.ctrlKey||-1!==c.indexOf("shift")&&e.shiftKey||-1!==c.indexOf("alt")&&e.altKey||-1!==c.indexOf("meta")&&e.metaKey)&&!C&&(C=!0,G(),X.push(Mc(document,"keyup",K)),X.push(Mc(window,"blur",N)))}function Z(e){(C&&0===e.button||I&&1===e.button||Y&&2===e.button)&&(e.preventDefault(),1===e.button?z=!0:2===e.button?D=!0:0===e.button&&(R=!0),G(),S(),F.x=_.scroll_left+e.clientX,F.y=_.scroll_top+e.clientY,q.push(Mc(document,"mousemove",V)),q.push(Mc(document,"mouseup",H)))}function V(e){(C&&R||z&&-1!==c.indexOf("middle")||D&&-1!==c.indexOf("right"))&&(i.scrollLeft=F.x-e.clientX,i.scrollTop=F.y-e.clientY,S(),"function"==typeof r.onPan&&r.onPan({scale:m,x:_.scroll_left,y:_.scroll_top}))}function H(e){1===e.button?z=!1:2===e.button?D=!1:0===e.button&&(R=!1),G(),Ac(q)}function U(e){-1!==c.indexOf("right")&&e.preventDefault()}(-1!==c.indexOf("ctrl")||-1!==c.indexOf("shift")||-1!==c.indexOf("meta")||-1!==c.indexOf("alt")||I||Y)&&(B.push(Mc(i,"mousedown",Z)),B.push(Mc(document,"keydown",W,{passive:!0})),B.push(Mc(i,"contextmenu",U)));var $,J,Q,ee,te=0,ne=!1,oe=[];return"maxTouchPoints"in navigator&&navigator.maxTouchPoints>0&&(oe.push(Mc(i,"touchstart",function(e){e.touches&&e.touches.length>=2&&(ne=!0,S(),te=Math.sqrt(Math.pow(e.touches[0].pageX-e.touches[1].pageX,2)+Math.pow(e.touches[0].pageY-e.touches[1].pageY,2)),$=(e.touches[0].pageX+e.touches[1].pageX)/2,J=(e.touches[0].pageY+e.touches[1].pageY)/2)},{passive:!0})),oe.push(Mc(i,"touchmove",function(e){if(e.touches&&e.touches.length>=2){var t=Math.sqrt(Math.pow(e.touches[0].pageX-e.touches[1].pageX,2)+Math.pow(e.touches[0].pageY-e.touches[1].pageY,2));$=(e.touches[0].pageX+e.touches[1].pageX)/2,J=(e.touches[0].pageY+e.touches[1].pageY)/2,j({delta:(te-t)/2,x:$,y:J}),te=t}},{passive:!0})),oe.push(Mc(i,"touchend",function(e){ne&&(ne=!1,j({delta:0,x:$,y:J}))},{passive:!0}))),M.push(Mc(window,"resize",P)),"complete"!==document.readyState&&M.push(Mc(window,"load",P)),window.ResizeObserver?(ee=new ResizeObserver(function(e){e.length&&(clearTimeout(Q),Q=setTimeout(P,17))})).observe(e):(ee=new MutationObserver(function(){clearTimeout(Q),Q=setTimeout(P,100)})).observe(e,{childList:!0,subtree:!0,characterData:!0}),jc("Attached successfully."),jc("Options:\n\nmode\t\t".concat(r.mode,"\nmin\t\t\t").concat(r.min,"\nmax\t\t\t").concat(r.max,"\nspeed\t\t").concat(100*r.speed,"\nsmooth\t\t").concat(r.smooth,"\nkbdEvents\t").concat(r.kbdEvents,"\nhinted\t\t").concat(r.hinted,"\npanMode\t\t").concat(Array.isArray(r.panMode)?r.panMode.join(" "):r.panMode,"\nrtl\t\t\t").concat(u)),{get success(){return!0},get scale(){return m},set scale(e){j({delta:(m-e)/m/r.speed,x:d,y:h,rect:i.getBoundingClientRect(),scroll_left:i.scrollLeft,scroll_top:i.scrollTop})},get onZoom(){return r.onZoom},set onZoom(e){"function"==typeof e?r.onZoom=e:Tc(xc)},get viewportX(){return d},get viewportY(){return h},get x(){return u?i.scrollWidth-i.clientWidth-i.scrollLeft:i.scrollLeft},set x(e){if("number"==typeof e)if(u){var t=i.scrollWidth-i.clientWidth,n=Math.min(t,Math.max(0,e));i.scrollLeft=t-n,_.scroll_left=n}else i.scrollLeft=e,_.scroll_left=e},get y(){return i.scrollTop},set y(e){"number"==typeof e&&(i.scrollTop=e,_.scroll_top=e)},get mode(){return r.mode},set mode(t){"string"==typeof t&&"zoom"===t?(r.mode="zoom",Pc(ac),e.style.zoom=m,e.style.transform=""):(r.mode="transform",e.style.transform="scale(".concat(m,")"),e.style.zoom=""),P()},get min(){return r.min},set min(e){r.min=Rc.min(e),[r.min,r.max]=Rc.min_max(r.min,r.max),P()},get max(){return r.max},set max(e){r.max=Rc.max(e),[r.min,r.max]=Rc.min_max(r.min,r.max),P()},get speed(){return 100*r.speed},set speed(e){r.speed=Rc.speed(e)},get hinted(){return r.hinted},set hinted(t){r.hinted=!!t,r.hinted&&("zoom"===r.mode?e.style.willChange="zoom":e.style.willChange="transform")},get kbdEvents(){return r.kbdEvents},set kbdEvents(e){r.kbdEvents&&!e?(r.kbdEvents=!1,Ac(k)):!r.kbdEvents&&e&&(r.kbdEvents=!0,k.push(Mc(document,"keydown",A,{passive:!1})))},get smooth(){return r.smooth},set smooth(e){r.smooth=Rc.smooth(e),r.smooth||(m=p,P())},get panMode(){return c},set panMode(e){Ac(X),Ac(q),Ac(B),C=!1,R=!1,z=!1,D=!1,r.panMode=e,c=r.panMode,I=-1!==c.indexOf("middle"),Y=-1!==c.indexOf("right"),(-1!==c.indexOf("ctrl")||-1!==c.indexOf("shift")||-1!==c.indexOf("meta")||-1!==c.indexOf("alt")||I||Y)&&(B.push(Mc(i,"mousedown",Z)),B.push(Mc(document,"keydown",W,{passive:!0})),B.push(Mc(i,"contextmenu",U))),G()},get onPan(){return r.onPan},set onPan(e){"function"==typeof e?r.onPan=e:Tc(_c)},get target(){return e},get container(){return i},get isRtl(){return u},get reset(){return function(){j({delta:(m-1)/m/r.speed,x:d,y:h,rect:i.getBoundingClientRect(),scroll_left:i.scrollLeft,scroll_top:i.scrollTop})}},get update(){return function(){P()}},get destroy(){return function(){clearTimeout(s),clearTimeout(f),clearTimeout(Q),Ac(M),Ac(k),Ac(X),Ac(q),Ac(B),Ac(oe),ee&&(ee.disconnect(),ee=null),Ec(i,a),i.style.cursor="",Ec(e,l),"zoom"===r.mode?e.style.zoom="":e.style.transform="",i.scrollTop/=m,i.scrollLeft/=m}}}},e.pinchZoomLockViewport=function(){var{useMeta:e=!1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if("undefined"==typeof window||"undefined"==typeof document)return Tc(cc),{unlock(){}};function t(e){e.ctrlKey&&e.preventDefault()}window.addEventListener("wheel",t,{passive:!1}),document.documentElement.style.touchAction="pan-x pan-y";var n=null,o=null;return e&&(null!==document.querySelector("meta[name=viewport]")?(n=document.querySelector("meta[name=viewport]").content,document.querySelector("meta[name=viewport]").content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, interactive-widget=resizes-content"):0!==document.getElementsByTagName("head").length&&((o=document.getElementsByTagName("head")[0].appendChild(document.createElement("meta"))).name="viewport",o.content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, interactive-widget=resizes-content")),{get unlock(){return function(){window.removeEventListener("wheel",t),document.documentElement.style.touchAction="",e&&(null!==n?document.querySelector("meta[name=viewport]").content=n:o.parentElement.removeChild(o))}}}}});
2
2
  //# sourceMappingURL=index.legacy.js.map