@gem-sdk/swiper 0.0.7

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.
Files changed (321) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +11 -0
  3. package/modules/a11y-element.css +9 -0
  4. package/modules/a11y-element.min.css +1 -0
  5. package/modules/a11y.css +9 -0
  6. package/modules/a11y.less +9 -0
  7. package/modules/a11y.min.css +1 -0
  8. package/modules/a11y.min.mjs +2 -0
  9. package/modules/a11y.min.mjs.map +1 -0
  10. package/modules/a11y.mjs +377 -0
  11. package/modules/a11y.scss +9 -0
  12. package/modules/autoplay-element.css +0 -0
  13. package/modules/autoplay-element.min.css +0 -0
  14. package/modules/autoplay.css +0 -0
  15. package/modules/autoplay.less +0 -0
  16. package/modules/autoplay.min.css +0 -0
  17. package/modules/autoplay.min.mjs +2 -0
  18. package/modules/autoplay.min.mjs.map +1 -0
  19. package/modules/autoplay.mjs +304 -0
  20. package/modules/autoplay.scss +0 -0
  21. package/modules/controller-element.css +0 -0
  22. package/modules/controller-element.min.css +0 -0
  23. package/modules/controller.css +0 -0
  24. package/modules/controller.less +0 -0
  25. package/modules/controller.min.css +0 -0
  26. package/modules/controller.min.mjs +2 -0
  27. package/modules/controller.min.mjs.map +1 -0
  28. package/modules/controller.mjs +191 -0
  29. package/modules/controller.scss +0 -0
  30. package/modules/effect-cards-element.css +9 -0
  31. package/modules/effect-cards-element.min.css +1 -0
  32. package/modules/effect-cards.css +9 -0
  33. package/modules/effect-cards.less +10 -0
  34. package/modules/effect-cards.min.css +1 -0
  35. package/modules/effect-cards.min.mjs +2 -0
  36. package/modules/effect-cards.min.mjs.map +1 -0
  37. package/modules/effect-cards.mjs +128 -0
  38. package/modules/effect-cards.scss +10 -0
  39. package/modules/effect-coverflow-element.css +0 -0
  40. package/modules/effect-coverflow-element.min.css +0 -0
  41. package/modules/effect-coverflow.css +0 -0
  42. package/modules/effect-coverflow.less +2 -0
  43. package/modules/effect-coverflow.min.css +0 -0
  44. package/modules/effect-coverflow.min.mjs +2 -0
  45. package/modules/effect-coverflow.min.mjs.map +1 -0
  46. package/modules/effect-coverflow.mjs +104 -0
  47. package/modules/effect-coverflow.scss +2 -0
  48. package/modules/effect-creative-element.css +6 -0
  49. package/modules/effect-creative-element.min.css +1 -0
  50. package/modules/effect-creative.css +6 -0
  51. package/modules/effect-creative.less +7 -0
  52. package/modules/effect-creative.min.css +1 -0
  53. package/modules/effect-creative.min.mjs +2 -0
  54. package/modules/effect-creative.min.mjs.map +1 -0
  55. package/modules/effect-creative.mjs +146 -0
  56. package/modules/effect-creative.scss +7 -0
  57. package/modules/effect-cube-element.css +53 -0
  58. package/modules/effect-cube-element.min.css +1 -0
  59. package/modules/effect-cube.css +62 -0
  60. package/modules/effect-cube.less +71 -0
  61. package/modules/effect-cube.min.css +1 -0
  62. package/modules/effect-cube.min.mjs +2 -0
  63. package/modules/effect-cube.min.mjs.map +1 -0
  64. package/modules/effect-cube.mjs +174 -0
  65. package/modules/effect-cube.scss +71 -0
  66. package/modules/effect-fade-element.css +16 -0
  67. package/modules/effect-fade-element.min.css +1 -0
  68. package/modules/effect-fade.css +16 -0
  69. package/modules/effect-fade.less +20 -0
  70. package/modules/effect-fade.min.css +1 -0
  71. package/modules/effect-fade.min.mjs +2 -0
  72. package/modules/effect-fade.min.mjs.map +1 -0
  73. package/modules/effect-fade.mjs +66 -0
  74. package/modules/effect-fade.scss +20 -0
  75. package/modules/effect-flip-element.css +17 -0
  76. package/modules/effect-flip-element.min.css +1 -0
  77. package/modules/effect-flip.css +26 -0
  78. package/modules/effect-flip.less +30 -0
  79. package/modules/effect-flip.min.css +1 -0
  80. package/modules/effect-flip.min.mjs +2 -0
  81. package/modules/effect-flip.min.mjs.map +1 -0
  82. package/modules/effect-flip.mjs +111 -0
  83. package/modules/effect-flip.scss +30 -0
  84. package/modules/free-mode-element.css +4 -0
  85. package/modules/free-mode-element.min.css +1 -0
  86. package/modules/free-mode.css +4 -0
  87. package/modules/free-mode.less +4 -0
  88. package/modules/free-mode.min.css +1 -0
  89. package/modules/free-mode.min.mjs +2 -0
  90. package/modules/free-mode.min.mjs.map +1 -0
  91. package/modules/free-mode.mjs +237 -0
  92. package/modules/free-mode.scss +4 -0
  93. package/modules/grid-element.css +7 -0
  94. package/modules/grid-element.min.css +1 -0
  95. package/modules/grid.css +7 -0
  96. package/modules/grid.less +7 -0
  97. package/modules/grid.min.css +1 -0
  98. package/modules/grid.min.mjs +2 -0
  99. package/modules/grid.min.mjs.map +1 -0
  100. package/modules/grid.mjs +155 -0
  101. package/modules/grid.scss +7 -0
  102. package/modules/hash-navigation-element.css +0 -0
  103. package/modules/hash-navigation-element.min.css +0 -0
  104. package/modules/hash-navigation.css +0 -0
  105. package/modules/hash-navigation.less +2 -0
  106. package/modules/hash-navigation.min.css +0 -0
  107. package/modules/hash-navigation.min.mjs +2 -0
  108. package/modules/hash-navigation.min.mjs.map +1 -0
  109. package/modules/hash-navigation.mjs +93 -0
  110. package/modules/hash-navigation.scss +0 -0
  111. package/modules/history-element.css +0 -0
  112. package/modules/history-element.min.css +0 -0
  113. package/modules/history.css +0 -0
  114. package/modules/history.less +0 -0
  115. package/modules/history.min.css +0 -0
  116. package/modules/history.min.mjs +2 -0
  117. package/modules/history.min.mjs.map +1 -0
  118. package/modules/history.mjs +142 -0
  119. package/modules/history.scss +0 -0
  120. package/modules/index.min.mjs +2 -0
  121. package/modules/index.min.mjs.map +1 -0
  122. package/modules/index.mjs +23 -0
  123. package/modules/keyboard-element.css +0 -0
  124. package/modules/keyboard-element.min.css +0 -0
  125. package/modules/keyboard.css +0 -0
  126. package/modules/keyboard.less +0 -0
  127. package/modules/keyboard.min.css +0 -0
  128. package/modules/keyboard.min.mjs +2 -0
  129. package/modules/keyboard.min.mjs.map +1 -0
  130. package/modules/keyboard.mjs +117 -0
  131. package/modules/keyboard.scss +0 -0
  132. package/modules/manipulation-element.css +0 -0
  133. package/modules/manipulation-element.min.css +0 -0
  134. package/modules/manipulation.css +0 -0
  135. package/modules/manipulation.less +0 -0
  136. package/modules/manipulation.min.css +0 -0
  137. package/modules/manipulation.min.mjs +2 -0
  138. package/modules/manipulation.min.mjs.map +1 -0
  139. package/modules/manipulation.mjs +193 -0
  140. package/modules/manipulation.scss +0 -0
  141. package/modules/mousewheel-element.css +0 -0
  142. package/modules/mousewheel-element.min.css +0 -0
  143. package/modules/mousewheel.css +0 -0
  144. package/modules/mousewheel.less +0 -0
  145. package/modules/mousewheel.min.css +0 -0
  146. package/modules/mousewheel.min.mjs +2 -0
  147. package/modules/mousewheel.min.mjs.map +1 -0
  148. package/modules/mousewheel.mjs +395 -0
  149. package/modules/mousewheel.scss +0 -0
  150. package/modules/navigation-element.css +63 -0
  151. package/modules/navigation-element.min.css +1 -0
  152. package/modules/navigation.css +86 -0
  153. package/modules/navigation.less +86 -0
  154. package/modules/navigation.min.css +1 -0
  155. package/modules/navigation.min.mjs +2 -0
  156. package/modules/navigation.min.mjs.map +1 -0
  157. package/modules/navigation.mjs +200 -0
  158. package/modules/navigation.scss +87 -0
  159. package/modules/pagination-element.css +184 -0
  160. package/modules/pagination-element.min.css +1 -0
  161. package/modules/pagination.css +184 -0
  162. package/modules/pagination.less +187 -0
  163. package/modules/pagination.min.css +1 -0
  164. package/modules/pagination.min.mjs +2 -0
  165. package/modules/pagination.min.mjs.map +1 -0
  166. package/modules/pagination.mjs +467 -0
  167. package/modules/pagination.scss +188 -0
  168. package/modules/parallax-element.css +0 -0
  169. package/modules/parallax-element.min.css +0 -0
  170. package/modules/parallax.css +0 -0
  171. package/modules/parallax.less +0 -0
  172. package/modules/parallax.min.css +0 -0
  173. package/modules/parallax.min.mjs +2 -0
  174. package/modules/parallax.min.mjs.map +1 -0
  175. package/modules/parallax.mjs +124 -0
  176. package/modules/parallax.scss +0 -0
  177. package/modules/scrollbar-element.css +58 -0
  178. package/modules/scrollbar-element.min.css +1 -0
  179. package/modules/scrollbar.css +58 -0
  180. package/modules/scrollbar.less +59 -0
  181. package/modules/scrollbar.min.css +1 -0
  182. package/modules/scrollbar.min.mjs +2 -0
  183. package/modules/scrollbar.min.mjs.map +1 -0
  184. package/modules/scrollbar.mjs +366 -0
  185. package/modules/scrollbar.scss +61 -0
  186. package/modules/thumbs-element.css +0 -0
  187. package/modules/thumbs-element.min.css +0 -0
  188. package/modules/thumbs.css +0 -0
  189. package/modules/thumbs.less +5 -0
  190. package/modules/thumbs.min.css +0 -0
  191. package/modules/thumbs.min.mjs +2 -0
  192. package/modules/thumbs.min.mjs.map +1 -0
  193. package/modules/thumbs.mjs +197 -0
  194. package/modules/thumbs.scss +5 -0
  195. package/modules/virtual-element.css +19 -0
  196. package/modules/virtual-element.min.css +1 -0
  197. package/modules/virtual.css +19 -0
  198. package/modules/virtual.less +26 -0
  199. package/modules/virtual.min.css +1 -0
  200. package/modules/virtual.min.mjs +2 -0
  201. package/modules/virtual.min.mjs.map +1 -0
  202. package/modules/virtual.mjs +349 -0
  203. package/modules/virtual.scss +26 -0
  204. package/modules/zoom-element.css +5 -0
  205. package/modules/zoom-element.min.css +1 -0
  206. package/modules/zoom.css +21 -0
  207. package/modules/zoom.less +23 -0
  208. package/modules/zoom.min.css +1 -0
  209. package/modules/zoom.min.mjs +2 -0
  210. package/modules/zoom.min.mjs.map +1 -0
  211. package/modules/zoom.mjs +701 -0
  212. package/modules/zoom.scss +21 -0
  213. package/package.json +213 -0
  214. package/shared/classes-to-selector.min.mjs +2 -0
  215. package/shared/classes-to-selector.min.mjs.map +1 -0
  216. package/shared/classes-to-selector.mjs +9 -0
  217. package/shared/create-element-if-not-defined.min.mjs +2 -0
  218. package/shared/create-element-if-not-defined.min.mjs.map +1 -0
  219. package/shared/create-element-if-not-defined.mjs +21 -0
  220. package/shared/create-shadow.min.mjs +2 -0
  221. package/shared/create-shadow.min.mjs.map +1 -0
  222. package/shared/create-shadow.mjs +14 -0
  223. package/shared/effect-init.min.mjs +2 -0
  224. package/shared/effect-init.min.mjs.map +1 -0
  225. package/shared/effect-init.mjs +58 -0
  226. package/shared/effect-target.min.mjs +2 -0
  227. package/shared/effect-target.min.mjs.map +1 -0
  228. package/shared/effect-target.mjs +12 -0
  229. package/shared/effect-virtual-transition-end.min.mjs +2 -0
  230. package/shared/effect-virtual-transition-end.min.mjs.map +1 -0
  231. package/shared/effect-virtual-transition-end.mjs +48 -0
  232. package/shared/get-element-params.min.mjs +2 -0
  233. package/shared/get-element-params.min.mjs.map +1 -0
  234. package/shared/get-element-params.mjs +113 -0
  235. package/shared/ssr-window.esm.min.mjs +2 -0
  236. package/shared/ssr-window.esm.min.mjs.map +1 -0
  237. package/shared/ssr-window.esm.mjs +146 -0
  238. package/shared/swiper-core.min.mjs +2 -0
  239. package/shared/swiper-core.min.mjs.map +1 -0
  240. package/shared/swiper-core.mjs +3969 -0
  241. package/shared/update-on-virtual-data.min.mjs +2 -0
  242. package/shared/update-on-virtual-data.min.mjs.map +1 -0
  243. package/shared/update-on-virtual-data.mjs +131 -0
  244. package/shared/update-swiper.min.mjs +2 -0
  245. package/shared/update-swiper.min.mjs.map +1 -0
  246. package/shared/update-swiper.mjs +238 -0
  247. package/shared/utils.min.mjs +2 -0
  248. package/shared/utils.min.mjs.map +1 -0
  249. package/shared/utils.mjs +343 -0
  250. package/swiper-bundle.css +735 -0
  251. package/swiper-bundle.js +9870 -0
  252. package/swiper-bundle.min.css +13 -0
  253. package/swiper-bundle.min.js +14 -0
  254. package/swiper-bundle.min.js.map +1 -0
  255. package/swiper-bundle.min.mjs +14 -0
  256. package/swiper-bundle.min.mjs.map +1 -0
  257. package/swiper-bundle.mjs +42 -0
  258. package/swiper-effect-utils.d.ts +28 -0
  259. package/swiper-effect-utils.min.mjs +14 -0
  260. package/swiper-effect-utils.min.mjs.map +1 -0
  261. package/swiper-effect-utils.mjs +17 -0
  262. package/swiper-element-bundle.js +10477 -0
  263. package/swiper-element-bundle.min.js +14 -0
  264. package/swiper-element-bundle.min.js.map +1 -0
  265. package/swiper-element-bundle.min.mjs +14 -0
  266. package/swiper-element-bundle.min.mjs.map +1 -0
  267. package/swiper-element-bundle.mjs +288 -0
  268. package/swiper-element.d.ts +444 -0
  269. package/swiper-element.js +5037 -0
  270. package/swiper-element.min.js +14 -0
  271. package/swiper-element.min.js.map +1 -0
  272. package/swiper-element.min.mjs +14 -0
  273. package/swiper-element.min.mjs.map +1 -0
  274. package/swiper-element.mjs +287 -0
  275. package/swiper-react.d.ts +501 -0
  276. package/swiper-react.mjs +394 -0
  277. package/swiper-vars.less +1 -0
  278. package/swiper-vars.scss +1 -0
  279. package/swiper-vue.d.ts +866 -0
  280. package/swiper-vue.mjs +838 -0
  281. package/swiper.css +228 -0
  282. package/swiper.d.ts +5 -0
  283. package/swiper.js +4418 -0
  284. package/swiper.less +251 -0
  285. package/swiper.min.css +13 -0
  286. package/swiper.min.js +14 -0
  287. package/swiper.min.js.map +1 -0
  288. package/swiper.min.mjs +14 -0
  289. package/swiper.min.mjs.map +1 -0
  290. package/swiper.mjs +13 -0
  291. package/swiper.scss +252 -0
  292. package/types/index.d.ts +6 -0
  293. package/types/modules/a11y.d.ts +110 -0
  294. package/types/modules/autoplay.d.ts +133 -0
  295. package/types/modules/controller.d.ts +35 -0
  296. package/types/modules/effect-cards.d.ts +33 -0
  297. package/types/modules/effect-coverflow.d.ts +45 -0
  298. package/types/modules/effect-creative.d.ts +86 -0
  299. package/types/modules/effect-cube.d.ts +30 -0
  300. package/types/modules/effect-fade.d.ts +12 -0
  301. package/types/modules/effect-flip.d.ts +18 -0
  302. package/types/modules/free-mode.d.ts +64 -0
  303. package/types/modules/grid.d.ts +21 -0
  304. package/types/modules/hash-navigation.d.ts +38 -0
  305. package/types/modules/history.d.ts +43 -0
  306. package/types/modules/index.d.ts +51 -0
  307. package/types/modules/keyboard.d.ts +46 -0
  308. package/types/modules/manipulation.d.ts +70 -0
  309. package/types/modules/mousewheel.d.ts +86 -0
  310. package/types/modules/navigation.d.ts +105 -0
  311. package/types/modules/pagination.d.ts +307 -0
  312. package/types/modules/parallax.d.ts +12 -0
  313. package/types/modules/public-api.d.ts +23 -0
  314. package/types/modules/scrollbar.d.ts +140 -0
  315. package/types/modules/thumbs.d.ts +54 -0
  316. package/types/modules/virtual.d.ts +135 -0
  317. package/types/modules/zoom.d.ts +91 -0
  318. package/types/shared.d.ts +13 -0
  319. package/types/swiper-class.d.ts +522 -0
  320. package/types/swiper-events.d.ts +359 -0
  321. package/types/swiper-options.d.ts +1217 -0
@@ -0,0 +1,701 @@
1
+ import { a as getWindow } from '../shared/ssr-window.esm.mjs';
2
+ import { e as elementChildren, b as elementParents, d as elementOffset, k as getTranslate } from '../shared/utils.mjs';
3
+
4
+ function Zoom(_ref) {
5
+ let {
6
+ swiper,
7
+ extendParams,
8
+ on,
9
+ emit
10
+ } = _ref;
11
+ const window = getWindow();
12
+ extendParams({
13
+ zoom: {
14
+ enabled: false,
15
+ limitToOriginalSize: false,
16
+ maxRatio: 3,
17
+ minRatio: 1,
18
+ panOnMouseMove: false,
19
+ toggle: true,
20
+ containerClass: 'swiper-zoom-container',
21
+ zoomedSlideClass: 'swiper-slide-zoomed'
22
+ }
23
+ });
24
+ swiper.zoom = {
25
+ enabled: false
26
+ };
27
+ let currentScale = 1;
28
+ let isScaling = false;
29
+ let isPanningWithMouse = false;
30
+ let mousePanStart = {
31
+ x: 0,
32
+ y: 0
33
+ };
34
+ const mousePanSensitivity = -3; // Negative to invert pan direction
35
+ let fakeGestureTouched;
36
+ let fakeGestureMoved;
37
+ const evCache = [];
38
+ const gesture = {
39
+ originX: 0,
40
+ originY: 0,
41
+ slideEl: undefined,
42
+ slideWidth: undefined,
43
+ slideHeight: undefined,
44
+ imageEl: undefined,
45
+ imageWrapEl: undefined,
46
+ maxRatio: 3
47
+ };
48
+ const image = {
49
+ isTouched: undefined,
50
+ isMoved: undefined,
51
+ currentX: undefined,
52
+ currentY: undefined,
53
+ minX: undefined,
54
+ minY: undefined,
55
+ maxX: undefined,
56
+ maxY: undefined,
57
+ width: undefined,
58
+ height: undefined,
59
+ startX: undefined,
60
+ startY: undefined,
61
+ touchesStart: {},
62
+ touchesCurrent: {}
63
+ };
64
+ const velocity = {
65
+ x: undefined,
66
+ y: undefined,
67
+ prevPositionX: undefined,
68
+ prevPositionY: undefined,
69
+ prevTime: undefined
70
+ };
71
+ let scale = 1;
72
+ Object.defineProperty(swiper.zoom, 'scale', {
73
+ get() {
74
+ return scale;
75
+ },
76
+ set(value) {
77
+ if (scale !== value) {
78
+ const imageEl = gesture.imageEl;
79
+ const slideEl = gesture.slideEl;
80
+ emit('zoomChange', value, imageEl, slideEl);
81
+ }
82
+ scale = value;
83
+ }
84
+ });
85
+ function getDistanceBetweenTouches() {
86
+ if (evCache.length < 2) return 1;
87
+ const x1 = evCache[0].pageX;
88
+ const y1 = evCache[0].pageY;
89
+ const x2 = evCache[1].pageX;
90
+ const y2 = evCache[1].pageY;
91
+ const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);
92
+ return distance;
93
+ }
94
+ function getMaxRatio() {
95
+ const params = swiper.params.zoom;
96
+ const maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;
97
+ if (params.limitToOriginalSize && gesture.imageEl && gesture.imageEl.naturalWidth) {
98
+ const imageMaxRatio = gesture.imageEl.naturalWidth / gesture.imageEl.offsetWidth;
99
+ return Math.min(imageMaxRatio, maxRatio);
100
+ }
101
+ return maxRatio;
102
+ }
103
+ function getScaleOrigin() {
104
+ if (evCache.length < 2) return {
105
+ x: null,
106
+ y: null
107
+ };
108
+ const box = gesture.imageEl.getBoundingClientRect();
109
+ return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x - window.scrollX) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y - window.scrollY) / currentScale];
110
+ }
111
+ function getSlideSelector() {
112
+ return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;
113
+ }
114
+ function eventWithinSlide(e) {
115
+ const slideSelector = getSlideSelector();
116
+ if (e.target.matches(slideSelector)) return true;
117
+ if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true;
118
+ return false;
119
+ }
120
+ function eventWithinZoomContainer(e) {
121
+ const selector = `.${swiper.params.zoom.containerClass}`;
122
+ if (e.target.matches(selector)) return true;
123
+ if ([...swiper.hostEl.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true;
124
+ return false;
125
+ }
126
+
127
+ // Events
128
+ function onGestureStart(e) {
129
+ if (e.pointerType === 'mouse') {
130
+ evCache.splice(0, evCache.length);
131
+ }
132
+ if (!eventWithinSlide(e)) return;
133
+ const params = swiper.params.zoom;
134
+ fakeGestureTouched = false;
135
+ fakeGestureMoved = false;
136
+ evCache.push(e);
137
+ if (evCache.length < 2) {
138
+ return;
139
+ }
140
+ fakeGestureTouched = true;
141
+ gesture.scaleStart = getDistanceBetweenTouches();
142
+ if (!gesture.slideEl) {
143
+ gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);
144
+ if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex];
145
+ let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);
146
+ if (imageEl) {
147
+ imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];
148
+ }
149
+ gesture.imageEl = imageEl;
150
+ if (imageEl) {
151
+ gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];
152
+ } else {
153
+ gesture.imageWrapEl = undefined;
154
+ }
155
+ if (!gesture.imageWrapEl) {
156
+ gesture.imageEl = undefined;
157
+ return;
158
+ }
159
+ gesture.maxRatio = getMaxRatio();
160
+ }
161
+ if (gesture.imageEl) {
162
+ const [originX, originY] = getScaleOrigin();
163
+ gesture.originX = originX;
164
+ gesture.originY = originY;
165
+ gesture.imageEl.style.transitionDuration = '0ms';
166
+ }
167
+ isScaling = true;
168
+ }
169
+ function onGestureChange(e) {
170
+ if (!eventWithinSlide(e)) return;
171
+ const params = swiper.params.zoom;
172
+ const zoom = swiper.zoom;
173
+ const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);
174
+ if (pointerIndex >= 0) evCache[pointerIndex] = e;
175
+ if (evCache.length < 2) {
176
+ return;
177
+ }
178
+ fakeGestureMoved = true;
179
+ gesture.scaleMove = getDistanceBetweenTouches();
180
+ if (!gesture.imageEl) {
181
+ return;
182
+ }
183
+ zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;
184
+ if (zoom.scale > gesture.maxRatio) {
185
+ zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;
186
+ }
187
+ if (zoom.scale < params.minRatio) {
188
+ zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;
189
+ }
190
+ gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;
191
+ }
192
+ function onGestureEnd(e) {
193
+ if (!eventWithinSlide(e)) return;
194
+ if (e.pointerType === 'mouse' && e.type === 'pointerout') return;
195
+ const params = swiper.params.zoom;
196
+ const zoom = swiper.zoom;
197
+ const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);
198
+ if (pointerIndex >= 0) evCache.splice(pointerIndex, 1);
199
+ if (!fakeGestureTouched || !fakeGestureMoved) {
200
+ return;
201
+ }
202
+ fakeGestureTouched = false;
203
+ fakeGestureMoved = false;
204
+ if (!gesture.imageEl) return;
205
+ zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
206
+ gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;
207
+ gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;
208
+ currentScale = zoom.scale;
209
+ isScaling = false;
210
+ if (zoom.scale > 1 && gesture.slideEl) {
211
+ gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);
212
+ } else if (zoom.scale <= 1 && gesture.slideEl) {
213
+ gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);
214
+ }
215
+ if (zoom.scale === 1) {
216
+ gesture.originX = 0;
217
+ gesture.originY = 0;
218
+ gesture.slideEl = undefined;
219
+ }
220
+ }
221
+ let allowTouchMoveTimeout;
222
+ function allowTouchMove() {
223
+ swiper.touchEventsData.preventTouchMoveFromPointerMove = false;
224
+ }
225
+ function preventTouchMove() {
226
+ clearTimeout(allowTouchMoveTimeout);
227
+ swiper.touchEventsData.preventTouchMoveFromPointerMove = true;
228
+ allowTouchMoveTimeout = setTimeout(() => {
229
+ if (swiper.destroyed) return;
230
+ allowTouchMove();
231
+ });
232
+ }
233
+ function onTouchStart(e) {
234
+ const device = swiper.device;
235
+ if (!gesture.imageEl) return;
236
+ if (image.isTouched) return;
237
+ if (device.android && e.cancelable) e.preventDefault();
238
+ image.isTouched = true;
239
+ const event = evCache.length > 0 ? evCache[0] : e;
240
+ image.touchesStart.x = event.pageX;
241
+ image.touchesStart.y = event.pageY;
242
+ }
243
+ function onTouchMove(e) {
244
+ const isMouseEvent = e.pointerType === 'mouse';
245
+ const isMousePan = isMouseEvent && swiper.params.zoom.panOnMouseMove;
246
+ if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) {
247
+ return;
248
+ }
249
+ const zoom = swiper.zoom;
250
+ if (!gesture.imageEl) {
251
+ return;
252
+ }
253
+ if (!image.isTouched || !gesture.slideEl) {
254
+ if (isMousePan) onMouseMove(e);
255
+ return;
256
+ }
257
+ if (isMousePan) {
258
+ onMouseMove(e);
259
+ return;
260
+ }
261
+ if (!image.isMoved) {
262
+ image.width = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;
263
+ image.height = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;
264
+ image.startX = getTranslate(gesture.imageWrapEl, 'x') || 0;
265
+ image.startY = getTranslate(gesture.imageWrapEl, 'y') || 0;
266
+ gesture.slideWidth = gesture.slideEl.offsetWidth;
267
+ gesture.slideHeight = gesture.slideEl.offsetHeight;
268
+ gesture.imageWrapEl.style.transitionDuration = '0ms';
269
+ }
270
+ // Define if we need image drag
271
+ const scaledWidth = image.width * zoom.scale;
272
+ const scaledHeight = image.height * zoom.scale;
273
+ image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
274
+ image.maxX = -image.minX;
275
+ image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
276
+ image.maxY = -image.minY;
277
+ image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX;
278
+ image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;
279
+ const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - image.touchesStart.x), Math.abs(image.touchesCurrent.y - image.touchesStart.y));
280
+ if (touchesDiff > 5) {
281
+ swiper.allowClick = false;
282
+ }
283
+ if (!image.isMoved && !isScaling) {
284
+ if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {
285
+ image.isTouched = false;
286
+ allowTouchMove();
287
+ return;
288
+ }
289
+ if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {
290
+ image.isTouched = false;
291
+ allowTouchMove();
292
+ return;
293
+ }
294
+ }
295
+ if (e.cancelable) {
296
+ e.preventDefault();
297
+ }
298
+ e.stopPropagation();
299
+ preventTouchMove();
300
+ image.isMoved = true;
301
+ const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio);
302
+ const {
303
+ originX,
304
+ originY
305
+ } = gesture;
306
+ image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX + scaleRatio * (image.width - originX * 2);
307
+ image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY + scaleRatio * (image.height - originY * 2);
308
+ if (image.currentX < image.minX) {
309
+ image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;
310
+ }
311
+ if (image.currentX > image.maxX) {
312
+ image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;
313
+ }
314
+ if (image.currentY < image.minY) {
315
+ image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;
316
+ }
317
+ if (image.currentY > image.maxY) {
318
+ image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;
319
+ }
320
+
321
+ // Velocity
322
+ if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;
323
+ if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;
324
+ if (!velocity.prevTime) velocity.prevTime = Date.now();
325
+ velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
326
+ velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
327
+ if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;
328
+ if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;
329
+ velocity.prevPositionX = image.touchesCurrent.x;
330
+ velocity.prevPositionY = image.touchesCurrent.y;
331
+ velocity.prevTime = Date.now();
332
+ gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;
333
+ }
334
+ function onTouchEnd() {
335
+ const zoom = swiper.zoom;
336
+ evCache.length = 0;
337
+ if (!gesture.imageEl) return;
338
+ if (!image.isTouched || !image.isMoved) {
339
+ image.isTouched = false;
340
+ image.isMoved = false;
341
+ return;
342
+ }
343
+ image.isTouched = false;
344
+ image.isMoved = false;
345
+ let momentumDurationX = 300;
346
+ let momentumDurationY = 300;
347
+ const momentumDistanceX = velocity.x * momentumDurationX;
348
+ const newPositionX = image.currentX + momentumDistanceX;
349
+ const momentumDistanceY = velocity.y * momentumDurationY;
350
+ const newPositionY = image.currentY + momentumDistanceY;
351
+
352
+ // Fix duration
353
+ if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);
354
+ if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);
355
+ const momentumDuration = Math.max(momentumDurationX, momentumDurationY);
356
+ image.currentX = newPositionX;
357
+ image.currentY = newPositionY;
358
+ // Define if we need image drag
359
+ const scaledWidth = image.width * zoom.scale;
360
+ const scaledHeight = image.height * zoom.scale;
361
+ image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
362
+ image.maxX = -image.minX;
363
+ image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
364
+ image.maxY = -image.minY;
365
+ image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
366
+ image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);
367
+ gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`;
368
+ gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;
369
+ }
370
+ function onTransitionEnd() {
371
+ const zoom = swiper.zoom;
372
+ if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) {
373
+ if (gesture.imageEl) {
374
+ gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';
375
+ }
376
+ if (gesture.imageWrapEl) {
377
+ gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';
378
+ }
379
+ gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`);
380
+ zoom.scale = 1;
381
+ currentScale = 1;
382
+ gesture.slideEl = undefined;
383
+ gesture.imageEl = undefined;
384
+ gesture.imageWrapEl = undefined;
385
+ gesture.originX = 0;
386
+ gesture.originY = 0;
387
+ }
388
+ }
389
+ function onMouseMove(e) {
390
+ // Only pan if zoomed in and mouse panning is enabled
391
+ if (currentScale <= 1 || !gesture.imageWrapEl) return;
392
+ if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;
393
+ const currentTransform = window.getComputedStyle(gesture.imageWrapEl).transform;
394
+ const matrix = new window.DOMMatrix(currentTransform);
395
+ if (!isPanningWithMouse) {
396
+ isPanningWithMouse = true;
397
+ mousePanStart.x = e.clientX;
398
+ mousePanStart.y = e.clientY;
399
+ image.startX = matrix.e;
400
+ image.startY = matrix.f;
401
+ image.width = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;
402
+ image.height = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;
403
+ gesture.slideWidth = gesture.slideEl.offsetWidth;
404
+ gesture.slideHeight = gesture.slideEl.offsetHeight;
405
+ return;
406
+ }
407
+ const deltaX = (e.clientX - mousePanStart.x) * mousePanSensitivity;
408
+ const deltaY = (e.clientY - mousePanStart.y) * mousePanSensitivity;
409
+ const scaledWidth = image.width * currentScale;
410
+ const scaledHeight = image.height * currentScale;
411
+ const slideWidth = gesture.slideWidth;
412
+ const slideHeight = gesture.slideHeight;
413
+ const minX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);
414
+ const maxX = -minX;
415
+ const minY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);
416
+ const maxY = -minY;
417
+ const newX = Math.max(Math.min(image.startX + deltaX, maxX), minX);
418
+ const newY = Math.max(Math.min(image.startY + deltaY, maxY), minY);
419
+ gesture.imageWrapEl.style.transitionDuration = '0ms';
420
+ gesture.imageWrapEl.style.transform = `translate3d(${newX}px, ${newY}px, 0)`;
421
+ mousePanStart.x = e.clientX;
422
+ mousePanStart.y = e.clientY;
423
+ image.startX = newX;
424
+ image.startY = newY;
425
+ image.currentX = newX;
426
+ image.currentY = newY;
427
+ }
428
+ function zoomIn(e) {
429
+ const zoom = swiper.zoom;
430
+ const params = swiper.params.zoom;
431
+ if (!gesture.slideEl) {
432
+ if (e && e.target) {
433
+ gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);
434
+ }
435
+ if (!gesture.slideEl) {
436
+ if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
437
+ gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];
438
+ } else {
439
+ gesture.slideEl = swiper.slides[swiper.activeIndex];
440
+ }
441
+ }
442
+ let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);
443
+ if (imageEl) {
444
+ imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];
445
+ }
446
+ gesture.imageEl = imageEl;
447
+ if (imageEl) {
448
+ gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];
449
+ } else {
450
+ gesture.imageWrapEl = undefined;
451
+ }
452
+ }
453
+ if (!gesture.imageEl || !gesture.imageWrapEl) return;
454
+ if (swiper.params.cssMode) {
455
+ swiper.wrapperEl.style.overflow = 'hidden';
456
+ swiper.wrapperEl.style.touchAction = 'none';
457
+ }
458
+ gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);
459
+ let touchX;
460
+ let touchY;
461
+ let offsetX;
462
+ let offsetY;
463
+ let diffX;
464
+ let diffY;
465
+ let translateX;
466
+ let translateY;
467
+ let imageWidth;
468
+ let imageHeight;
469
+ let scaledWidth;
470
+ let scaledHeight;
471
+ let translateMinX;
472
+ let translateMinY;
473
+ let translateMaxX;
474
+ let translateMaxY;
475
+ let slideWidth;
476
+ let slideHeight;
477
+ if (typeof image.touchesStart.x === 'undefined' && e) {
478
+ touchX = e.pageX;
479
+ touchY = e.pageY;
480
+ } else {
481
+ touchX = image.touchesStart.x;
482
+ touchY = image.touchesStart.y;
483
+ }
484
+ const prevScale = currentScale;
485
+ const forceZoomRatio = typeof e === 'number' ? e : null;
486
+ if (currentScale === 1 && forceZoomRatio) {
487
+ touchX = undefined;
488
+ touchY = undefined;
489
+ image.touchesStart.x = undefined;
490
+ image.touchesStart.y = undefined;
491
+ }
492
+ const maxRatio = getMaxRatio();
493
+ zoom.scale = forceZoomRatio || maxRatio;
494
+ currentScale = forceZoomRatio || maxRatio;
495
+ if (e && !(currentScale === 1 && forceZoomRatio)) {
496
+ slideWidth = gesture.slideEl.offsetWidth;
497
+ slideHeight = gesture.slideEl.offsetHeight;
498
+ offsetX = elementOffset(gesture.slideEl).left + window.scrollX;
499
+ offsetY = elementOffset(gesture.slideEl).top + window.scrollY;
500
+ diffX = offsetX + slideWidth / 2 - touchX;
501
+ diffY = offsetY + slideHeight / 2 - touchY;
502
+ imageWidth = gesture.imageEl.offsetWidth || gesture.imageEl.clientWidth;
503
+ imageHeight = gesture.imageEl.offsetHeight || gesture.imageEl.clientHeight;
504
+ scaledWidth = imageWidth * zoom.scale;
505
+ scaledHeight = imageHeight * zoom.scale;
506
+ translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);
507
+ translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);
508
+ translateMaxX = -translateMinX;
509
+ translateMaxY = -translateMinY;
510
+ if (prevScale > 0 && forceZoomRatio && typeof image.currentX === 'number' && typeof image.currentY === 'number') {
511
+ translateX = image.currentX * zoom.scale / prevScale;
512
+ translateY = image.currentY * zoom.scale / prevScale;
513
+ } else {
514
+ translateX = diffX * zoom.scale;
515
+ translateY = diffY * zoom.scale;
516
+ }
517
+ if (translateX < translateMinX) {
518
+ translateX = translateMinX;
519
+ }
520
+ if (translateX > translateMaxX) {
521
+ translateX = translateMaxX;
522
+ }
523
+ if (translateY < translateMinY) {
524
+ translateY = translateMinY;
525
+ }
526
+ if (translateY > translateMaxY) {
527
+ translateY = translateMaxY;
528
+ }
529
+ } else {
530
+ translateX = 0;
531
+ translateY = 0;
532
+ }
533
+ if (forceZoomRatio && zoom.scale === 1) {
534
+ gesture.originX = 0;
535
+ gesture.originY = 0;
536
+ }
537
+ image.currentX = translateX;
538
+ image.currentY = translateY;
539
+ gesture.imageWrapEl.style.transitionDuration = '300ms';
540
+ gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;
541
+ gesture.imageEl.style.transitionDuration = '300ms';
542
+ gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;
543
+ }
544
+ function zoomOut() {
545
+ const zoom = swiper.zoom;
546
+ const params = swiper.params.zoom;
547
+ if (!gesture.slideEl) {
548
+ if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {
549
+ gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];
550
+ } else {
551
+ gesture.slideEl = swiper.slides[swiper.activeIndex];
552
+ }
553
+ let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);
554
+ if (imageEl) {
555
+ imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];
556
+ }
557
+ gesture.imageEl = imageEl;
558
+ if (imageEl) {
559
+ gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];
560
+ } else {
561
+ gesture.imageWrapEl = undefined;
562
+ }
563
+ }
564
+ if (!gesture.imageEl || !gesture.imageWrapEl) return;
565
+ if (swiper.params.cssMode) {
566
+ swiper.wrapperEl.style.overflow = '';
567
+ swiper.wrapperEl.style.touchAction = '';
568
+ }
569
+ zoom.scale = 1;
570
+ currentScale = 1;
571
+ image.currentX = undefined;
572
+ image.currentY = undefined;
573
+ image.touchesStart.x = undefined;
574
+ image.touchesStart.y = undefined;
575
+ gesture.imageWrapEl.style.transitionDuration = '300ms';
576
+ gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';
577
+ gesture.imageEl.style.transitionDuration = '300ms';
578
+ gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';
579
+ gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);
580
+ gesture.slideEl = undefined;
581
+ gesture.originX = 0;
582
+ gesture.originY = 0;
583
+ if (swiper.params.zoom.panOnMouseMove) {
584
+ mousePanStart = {
585
+ x: 0,
586
+ y: 0
587
+ };
588
+ if (isPanningWithMouse) {
589
+ isPanningWithMouse = false;
590
+ image.startX = 0;
591
+ image.startY = 0;
592
+ }
593
+ }
594
+ }
595
+
596
+ // Toggle Zoom
597
+ function zoomToggle(e) {
598
+ const zoom = swiper.zoom;
599
+ if (zoom.scale && zoom.scale !== 1) {
600
+ // Zoom Out
601
+ zoomOut();
602
+ } else {
603
+ // Zoom In
604
+ zoomIn(e);
605
+ }
606
+ }
607
+ function getListeners() {
608
+ const passiveListener = swiper.params.passiveListeners ? {
609
+ passive: true,
610
+ capture: false
611
+ } : false;
612
+ const activeListenerWithCapture = swiper.params.passiveListeners ? {
613
+ passive: false,
614
+ capture: true
615
+ } : true;
616
+ return {
617
+ passiveListener,
618
+ activeListenerWithCapture
619
+ };
620
+ }
621
+
622
+ // Attach/Detach Events
623
+ function enable() {
624
+ const zoom = swiper.zoom;
625
+ if (zoom.enabled) return;
626
+ zoom.enabled = true;
627
+ const {
628
+ passiveListener,
629
+ activeListenerWithCapture
630
+ } = getListeners();
631
+
632
+ // Scale image
633
+ swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);
634
+ swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);
635
+ ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {
636
+ swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);
637
+ });
638
+
639
+ // Move image
640
+ swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture);
641
+ }
642
+ function disable() {
643
+ const zoom = swiper.zoom;
644
+ if (!zoom.enabled) return;
645
+ zoom.enabled = false;
646
+ const {
647
+ passiveListener,
648
+ activeListenerWithCapture
649
+ } = getListeners();
650
+
651
+ // Scale image
652
+ swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);
653
+ swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);
654
+ ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {
655
+ swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);
656
+ });
657
+
658
+ // Move image
659
+ swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);
660
+ }
661
+ on('init', () => {
662
+ if (swiper.params.zoom.enabled) {
663
+ enable();
664
+ }
665
+ });
666
+ on('destroy', () => {
667
+ disable();
668
+ });
669
+ on('touchStart', (_s, e) => {
670
+ if (!swiper.zoom.enabled) return;
671
+ onTouchStart(e);
672
+ });
673
+ on('touchEnd', (_s, e) => {
674
+ if (!swiper.zoom.enabled) return;
675
+ onTouchEnd();
676
+ });
677
+ on('doubleTap', (_s, e) => {
678
+ if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {
679
+ zoomToggle(e);
680
+ }
681
+ });
682
+ on('transitionEnd', () => {
683
+ if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
684
+ onTransitionEnd();
685
+ }
686
+ });
687
+ on('slideChange', () => {
688
+ if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {
689
+ onTransitionEnd();
690
+ }
691
+ });
692
+ Object.assign(swiper.zoom, {
693
+ enable,
694
+ disable,
695
+ in: zoomIn,
696
+ out: zoomOut,
697
+ toggle: zoomToggle
698
+ });
699
+ }
700
+
701
+ export { Zoom as default };