@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
package/swiper.js ADDED
@@ -0,0 +1,4418 @@
1
+ /**
2
+ * Swiper 0.0.7
3
+ * Gem SDK - Swiper, Customized of swiper
4
+ * https://swiperjs.com
5
+ *
6
+ * Copyright 2014-2025 GemPages
7
+ *
8
+ * Released under the MIT License
9
+ *
10
+ * Released on: October 9, 2025
11
+ */
12
+
13
+ var Swiper = (function () {
14
+ 'use strict';
15
+
16
+ /**
17
+ * SSR Window 5.0.1
18
+ * Better handling for window object in SSR environment
19
+ * https://github.com/nolimits4web/ssr-window
20
+ *
21
+ * Copyright 2025, Vladimir Kharlampidi
22
+ *
23
+ * Licensed under MIT
24
+ *
25
+ * Released on: June 27, 2025
26
+ */
27
+ /* eslint-disable no-param-reassign */
28
+ function isObject$1(obj) {
29
+ return obj !== null && typeof obj === 'object' && 'constructor' in obj && obj.constructor === Object;
30
+ }
31
+ function extend$1(target, src) {
32
+ if (target === void 0) {
33
+ target = {};
34
+ }
35
+ if (src === void 0) {
36
+ src = {};
37
+ }
38
+ const noExtend = ['__proto__', 'constructor', 'prototype'];
39
+ Object.keys(src).filter(key => noExtend.indexOf(key) < 0).forEach(key => {
40
+ if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject$1(src[key]) && isObject$1(target[key]) && Object.keys(src[key]).length > 0) {
41
+ extend$1(target[key], src[key]);
42
+ }
43
+ });
44
+ }
45
+ const ssrDocument = {
46
+ body: {},
47
+ addEventListener() {},
48
+ removeEventListener() {},
49
+ activeElement: {
50
+ blur() {},
51
+ nodeName: ''
52
+ },
53
+ querySelector() {
54
+ return null;
55
+ },
56
+ querySelectorAll() {
57
+ return [];
58
+ },
59
+ getElementById() {
60
+ return null;
61
+ },
62
+ createEvent() {
63
+ return {
64
+ initEvent() {}
65
+ };
66
+ },
67
+ createElement() {
68
+ return {
69
+ children: [],
70
+ childNodes: [],
71
+ style: {},
72
+ setAttribute() {},
73
+ getElementsByTagName() {
74
+ return [];
75
+ }
76
+ };
77
+ },
78
+ createElementNS() {
79
+ return {};
80
+ },
81
+ importNode() {
82
+ return null;
83
+ },
84
+ location: {
85
+ hash: '',
86
+ host: '',
87
+ hostname: '',
88
+ href: '',
89
+ origin: '',
90
+ pathname: '',
91
+ protocol: '',
92
+ search: ''
93
+ }
94
+ };
95
+ function getDocument() {
96
+ const doc = typeof document !== 'undefined' ? document : {};
97
+ extend$1(doc, ssrDocument);
98
+ return doc;
99
+ }
100
+ const ssrWindow = {
101
+ document: ssrDocument,
102
+ navigator: {
103
+ userAgent: ''
104
+ },
105
+ location: {
106
+ hash: '',
107
+ host: '',
108
+ hostname: '',
109
+ href: '',
110
+ origin: '',
111
+ pathname: '',
112
+ protocol: '',
113
+ search: ''
114
+ },
115
+ history: {
116
+ replaceState() {},
117
+ pushState() {},
118
+ go() {},
119
+ back() {}
120
+ },
121
+ CustomEvent: function CustomEvent() {
122
+ return this;
123
+ },
124
+ addEventListener() {},
125
+ removeEventListener() {},
126
+ getComputedStyle() {
127
+ return {
128
+ getPropertyValue() {
129
+ return '';
130
+ }
131
+ };
132
+ },
133
+ Image() {},
134
+ Date() {},
135
+ screen: {},
136
+ setTimeout() {},
137
+ clearTimeout() {},
138
+ matchMedia() {
139
+ return {};
140
+ },
141
+ requestAnimationFrame(callback) {
142
+ if (typeof setTimeout === 'undefined') {
143
+ callback();
144
+ return null;
145
+ }
146
+ return setTimeout(callback, 0);
147
+ },
148
+ cancelAnimationFrame(id) {
149
+ if (typeof setTimeout === 'undefined') {
150
+ return;
151
+ }
152
+ clearTimeout(id);
153
+ }
154
+ };
155
+ function getWindow() {
156
+ const win = typeof window !== 'undefined' ? window : {};
157
+ extend$1(win, ssrWindow);
158
+ return win;
159
+ }
160
+
161
+ function classesToTokens(classes) {
162
+ if (classes === void 0) {
163
+ classes = '';
164
+ }
165
+ return classes.trim().split(' ').filter(c => !!c.trim());
166
+ }
167
+
168
+ function deleteProps(obj) {
169
+ const object = obj;
170
+ Object.keys(object).forEach(key => {
171
+ try {
172
+ object[key] = null;
173
+ } catch (e) {
174
+ // no getter for object
175
+ }
176
+ try {
177
+ delete object[key];
178
+ } catch (e) {
179
+ // something got wrong
180
+ }
181
+ });
182
+ }
183
+ function nextTick(callback, delay) {
184
+ if (delay === void 0) {
185
+ delay = 0;
186
+ }
187
+ return setTimeout(callback, delay);
188
+ }
189
+ function now() {
190
+ return Date.now();
191
+ }
192
+ function getComputedStyle$1(el) {
193
+ const window = getWindow();
194
+ let style;
195
+ if (window.getComputedStyle) {
196
+ style = window.getComputedStyle(el, null);
197
+ }
198
+ if (!style && el.currentStyle) {
199
+ style = el.currentStyle;
200
+ }
201
+ if (!style) {
202
+ style = el.style;
203
+ }
204
+ return style;
205
+ }
206
+ function getTranslate(el, axis) {
207
+ if (axis === void 0) {
208
+ axis = 'x';
209
+ }
210
+ const window = getWindow();
211
+ let matrix;
212
+ let curTransform;
213
+ let transformMatrix;
214
+ const curStyle = getComputedStyle$1(el);
215
+ if (window.WebKitCSSMatrix) {
216
+ curTransform = curStyle.transform || curStyle.webkitTransform;
217
+ if (curTransform.split(',').length > 6) {
218
+ curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');
219
+ }
220
+ // Some old versions of Webkit choke when 'none' is passed; pass
221
+ // empty string instead in this case
222
+ transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
223
+ } else {
224
+ transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
225
+ matrix = transformMatrix.toString().split(',');
226
+ }
227
+ if (axis === 'x') {
228
+ // Latest Chrome and webkits Fix
229
+ if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;
230
+ // Crazy IE10 Matrix
231
+ else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);
232
+ // Normal Browsers
233
+ else curTransform = parseFloat(matrix[4]);
234
+ }
235
+ if (axis === 'y') {
236
+ // Latest Chrome and webkits Fix
237
+ if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;
238
+ // Crazy IE10 Matrix
239
+ else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);
240
+ // Normal Browsers
241
+ else curTransform = parseFloat(matrix[5]);
242
+ }
243
+ return curTransform || 0;
244
+ }
245
+ function isObject(o) {
246
+ return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';
247
+ }
248
+ function isNode(node) {
249
+ // eslint-disable-next-line
250
+ if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {
251
+ return node instanceof HTMLElement;
252
+ }
253
+ return node && (node.nodeType === 1 || node.nodeType === 11);
254
+ }
255
+ function extend() {
256
+ const to = Object(arguments.length <= 0 ? undefined : arguments[0]);
257
+ const noExtend = ['__proto__', 'constructor', 'prototype'];
258
+ for (let i = 1; i < arguments.length; i += 1) {
259
+ const nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];
260
+ if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {
261
+ const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);
262
+ for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
263
+ const nextKey = keysArray[nextIndex];
264
+ const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
265
+ if (desc !== undefined && desc.enumerable) {
266
+ if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {
267
+ if (nextSource[nextKey].__swiper__) {
268
+ to[nextKey] = nextSource[nextKey];
269
+ } else {
270
+ extend(to[nextKey], nextSource[nextKey]);
271
+ }
272
+ } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {
273
+ to[nextKey] = {};
274
+ if (nextSource[nextKey].__swiper__) {
275
+ to[nextKey] = nextSource[nextKey];
276
+ } else {
277
+ extend(to[nextKey], nextSource[nextKey]);
278
+ }
279
+ } else {
280
+ to[nextKey] = nextSource[nextKey];
281
+ }
282
+ }
283
+ }
284
+ }
285
+ }
286
+ return to;
287
+ }
288
+ function setCSSProperty(el, varName, varValue) {
289
+ el.style.setProperty(varName, varValue);
290
+ }
291
+ function animateCSSModeScroll(_ref) {
292
+ let {
293
+ swiper,
294
+ targetPosition,
295
+ side
296
+ } = _ref;
297
+ const window = getWindow();
298
+ const startPosition = -swiper.translate;
299
+ let startTime = null;
300
+ let time;
301
+ const duration = swiper.params.speed;
302
+ swiper.wrapperEl.style.scrollSnapType = 'none';
303
+ window.cancelAnimationFrame(swiper.cssModeFrameID);
304
+ const dir = targetPosition > startPosition ? 'next' : 'prev';
305
+ const isOutOfBound = (current, target) => {
306
+ return dir === 'next' && current >= target || dir === 'prev' && current <= target;
307
+ };
308
+ const animate = () => {
309
+ time = new Date().getTime();
310
+ if (startTime === null) {
311
+ startTime = time;
312
+ }
313
+ const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);
314
+ const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;
315
+ let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);
316
+ if (isOutOfBound(currentPosition, targetPosition)) {
317
+ currentPosition = targetPosition;
318
+ }
319
+ swiper.wrapperEl.scrollTo({
320
+ [side]: currentPosition
321
+ });
322
+ if (isOutOfBound(currentPosition, targetPosition)) {
323
+ swiper.wrapperEl.style.overflow = 'hidden';
324
+ swiper.wrapperEl.style.scrollSnapType = '';
325
+ setTimeout(() => {
326
+ swiper.wrapperEl.style.overflow = '';
327
+ swiper.wrapperEl.scrollTo({
328
+ [side]: currentPosition
329
+ });
330
+ });
331
+ window.cancelAnimationFrame(swiper.cssModeFrameID);
332
+ return;
333
+ }
334
+ swiper.cssModeFrameID = window.requestAnimationFrame(animate);
335
+ };
336
+ animate();
337
+ }
338
+ function elementChildren(element, selector) {
339
+ if (selector === void 0) {
340
+ selector = '';
341
+ }
342
+ const window = getWindow();
343
+ const children = [...element.children];
344
+ if (window.HTMLSlotElement && element instanceof HTMLSlotElement) {
345
+ children.push(...element.assignedElements());
346
+ }
347
+ if (!selector) {
348
+ return children;
349
+ }
350
+ return children.filter(el => el.matches(selector));
351
+ }
352
+ function elementIsChildOfSlot(el, slot) {
353
+ // Breadth-first search through all parent's children and assigned elements
354
+ const elementsQueue = [slot];
355
+ while (elementsQueue.length > 0) {
356
+ const elementToCheck = elementsQueue.shift();
357
+ if (el === elementToCheck) {
358
+ return true;
359
+ }
360
+ elementsQueue.push(...elementToCheck.children, ...(elementToCheck.shadowRoot ? elementToCheck.shadowRoot.children : []), ...(elementToCheck.assignedElements ? elementToCheck.assignedElements() : []));
361
+ }
362
+ }
363
+ function elementIsChildOf(el, parent) {
364
+ const window = getWindow();
365
+ let isChild = parent.contains(el);
366
+ if (!isChild && window.HTMLSlotElement && parent instanceof HTMLSlotElement) {
367
+ const children = [...parent.assignedElements()];
368
+ isChild = children.includes(el);
369
+ if (!isChild) {
370
+ isChild = elementIsChildOfSlot(el, parent);
371
+ }
372
+ }
373
+ return isChild;
374
+ }
375
+ function showWarning(text) {
376
+ try {
377
+ console.warn(text);
378
+ return;
379
+ } catch (err) {
380
+ // err
381
+ }
382
+ }
383
+ function createElement(tag, classes) {
384
+ if (classes === void 0) {
385
+ classes = [];
386
+ }
387
+ const el = document.createElement(tag);
388
+ el.classList.add(...(Array.isArray(classes) ? classes : classesToTokens(classes)));
389
+ return el;
390
+ }
391
+ function elementPrevAll(el, selector) {
392
+ const prevEls = [];
393
+ while (el.previousElementSibling) {
394
+ const prev = el.previousElementSibling; // eslint-disable-line
395
+ if (selector) {
396
+ if (prev.matches(selector)) prevEls.push(prev);
397
+ } else prevEls.push(prev);
398
+ el = prev;
399
+ }
400
+ return prevEls;
401
+ }
402
+ function elementNextAll(el, selector) {
403
+ const nextEls = [];
404
+ while (el.nextElementSibling) {
405
+ const next = el.nextElementSibling; // eslint-disable-line
406
+ if (selector) {
407
+ if (next.matches(selector)) nextEls.push(next);
408
+ } else nextEls.push(next);
409
+ el = next;
410
+ }
411
+ return nextEls;
412
+ }
413
+ function elementStyle(el, prop) {
414
+ const window = getWindow();
415
+ return window.getComputedStyle(el, null).getPropertyValue(prop);
416
+ }
417
+ function elementIndex(el) {
418
+ let child = el;
419
+ let i;
420
+ if (child) {
421
+ i = 0;
422
+ // eslint-disable-next-line
423
+ while ((child = child.previousSibling) !== null) {
424
+ if (child.nodeType === 1) i += 1;
425
+ }
426
+ return i;
427
+ }
428
+ return undefined;
429
+ }
430
+ function elementParents(el, selector) {
431
+ const parents = []; // eslint-disable-line
432
+ let parent = el.parentElement; // eslint-disable-line
433
+ while (parent) {
434
+ if (selector) {
435
+ if (parent.matches(selector)) parents.push(parent);
436
+ } else {
437
+ parents.push(parent);
438
+ }
439
+ parent = parent.parentElement;
440
+ }
441
+ return parents;
442
+ }
443
+ function elementOuterSize(el, size, includeMargins) {
444
+ const window = getWindow();
445
+ if (includeMargins) {
446
+ return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));
447
+ }
448
+ return el.offsetWidth;
449
+ }
450
+
451
+ let support;
452
+ function calcSupport() {
453
+ const window = getWindow();
454
+ const document = getDocument();
455
+ return {
456
+ smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,
457
+ touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)
458
+ };
459
+ }
460
+ function getSupport() {
461
+ if (!support) {
462
+ support = calcSupport();
463
+ }
464
+ return support;
465
+ }
466
+
467
+ let deviceCached;
468
+ function calcDevice(_temp) {
469
+ let {
470
+ userAgent
471
+ } = _temp === void 0 ? {} : _temp;
472
+ const support = getSupport();
473
+ const window = getWindow();
474
+ const platform = window.navigator.platform;
475
+ const ua = userAgent || window.navigator.userAgent;
476
+ const device = {
477
+ ios: false,
478
+ android: false
479
+ };
480
+ const screenWidth = window.screen.width;
481
+ const screenHeight = window.screen.height;
482
+ const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line
483
+ let ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
484
+ const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
485
+ const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
486
+ const windows = platform === 'Win32';
487
+ let macos = platform === 'MacIntel';
488
+
489
+ // iPadOs 13 fix
490
+ const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];
491
+ if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {
492
+ ipad = ua.match(/(Version)\/([\d.]+)/);
493
+ if (!ipad) ipad = [0, 1, '13_0_0'];
494
+ macos = false;
495
+ }
496
+
497
+ // Android
498
+ if (android && !windows) {
499
+ device.os = 'android';
500
+ device.android = true;
501
+ }
502
+ if (ipad || iphone || ipod) {
503
+ device.os = 'ios';
504
+ device.ios = true;
505
+ }
506
+
507
+ // Export object
508
+ return device;
509
+ }
510
+ function getDevice(overrides) {
511
+ if (overrides === void 0) {
512
+ overrides = {};
513
+ }
514
+ if (!deviceCached) {
515
+ deviceCached = calcDevice(overrides);
516
+ }
517
+ return deviceCached;
518
+ }
519
+
520
+ let browser;
521
+ function calcBrowser() {
522
+ const window = getWindow();
523
+ const device = getDevice();
524
+ let needPerspectiveFix = false;
525
+ function isSafari() {
526
+ const ua = window.navigator.userAgent.toLowerCase();
527
+ return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;
528
+ }
529
+ if (isSafari()) {
530
+ const ua = String(window.navigator.userAgent);
531
+ if (ua.includes('Version/')) {
532
+ const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));
533
+ needPerspectiveFix = major < 16 || major === 16 && minor < 2;
534
+ }
535
+ }
536
+ const isWebView = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent);
537
+ const isSafariBrowser = isSafari();
538
+ const need3dFix = isSafariBrowser || isWebView && device.ios;
539
+ return {
540
+ isSafari: needPerspectiveFix || isSafariBrowser,
541
+ needPerspectiveFix,
542
+ need3dFix,
543
+ isWebView
544
+ };
545
+ }
546
+ function getBrowser() {
547
+ if (!browser) {
548
+ browser = calcBrowser();
549
+ }
550
+ return browser;
551
+ }
552
+
553
+ function Resize(_ref) {
554
+ let {
555
+ swiper,
556
+ on,
557
+ emit
558
+ } = _ref;
559
+ const window = getWindow();
560
+ let observer = null;
561
+ let animationFrame = null;
562
+ const resizeHandler = () => {
563
+ if (!swiper || swiper.destroyed || !swiper.initialized) return;
564
+ emit('beforeResize');
565
+ emit('resize');
566
+ };
567
+ const createObserver = () => {
568
+ if (!swiper || swiper.destroyed || !swiper.initialized) return;
569
+ observer = new ResizeObserver(entries => {
570
+ animationFrame = window.requestAnimationFrame(() => {
571
+ const {
572
+ width,
573
+ height
574
+ } = swiper;
575
+ let newWidth = width;
576
+ let newHeight = height;
577
+ entries.forEach(_ref2 => {
578
+ let {
579
+ contentBoxSize,
580
+ contentRect,
581
+ target
582
+ } = _ref2;
583
+ if (target && target !== swiper.el) return;
584
+ newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;
585
+ newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;
586
+ });
587
+ if (newWidth !== width || newHeight !== height) {
588
+ resizeHandler();
589
+ }
590
+ });
591
+ });
592
+ observer.observe(swiper.el);
593
+ };
594
+ const removeObserver = () => {
595
+ if (animationFrame) {
596
+ window.cancelAnimationFrame(animationFrame);
597
+ }
598
+ if (observer && observer.unobserve && swiper.el) {
599
+ observer.unobserve(swiper.el);
600
+ observer = null;
601
+ }
602
+ };
603
+ const orientationChangeHandler = () => {
604
+ if (!swiper || swiper.destroyed || !swiper.initialized) return;
605
+ emit('orientationchange');
606
+ };
607
+ on('init', () => {
608
+ if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {
609
+ createObserver();
610
+ return;
611
+ }
612
+ window.addEventListener('resize', resizeHandler);
613
+ window.addEventListener('orientationchange', orientationChangeHandler);
614
+ });
615
+ on('destroy', () => {
616
+ removeObserver();
617
+ window.removeEventListener('resize', resizeHandler);
618
+ window.removeEventListener('orientationchange', orientationChangeHandler);
619
+ });
620
+ }
621
+
622
+ function Observer(_ref) {
623
+ let {
624
+ swiper,
625
+ extendParams,
626
+ on,
627
+ emit
628
+ } = _ref;
629
+ const observers = [];
630
+ const window = getWindow();
631
+ const attach = function (target, options) {
632
+ if (options === void 0) {
633
+ options = {};
634
+ }
635
+ const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;
636
+ const observer = new ObserverFunc(mutations => {
637
+ // The observerUpdate event should only be triggered
638
+ // once despite the number of mutations. Additional
639
+ // triggers are redundant and are very costly
640
+ if (swiper.__preventObserver__) return;
641
+ if (mutations.length === 1) {
642
+ emit('observerUpdate', mutations[0]);
643
+ return;
644
+ }
645
+ const observerUpdate = function observerUpdate() {
646
+ emit('observerUpdate', mutations[0]);
647
+ };
648
+ if (window.requestAnimationFrame) {
649
+ window.requestAnimationFrame(observerUpdate);
650
+ } else {
651
+ window.setTimeout(observerUpdate, 0);
652
+ }
653
+ });
654
+ observer.observe(target, {
655
+ attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
656
+ childList: swiper.isElement || (typeof options.childList === 'undefined' ? true : options).childList,
657
+ characterData: typeof options.characterData === 'undefined' ? true : options.characterData
658
+ });
659
+ observers.push(observer);
660
+ };
661
+ const init = () => {
662
+ if (!swiper.params.observer) return;
663
+ if (swiper.params.observeParents) {
664
+ const containerParents = elementParents(swiper.hostEl);
665
+ for (let i = 0; i < containerParents.length; i += 1) {
666
+ attach(containerParents[i]);
667
+ }
668
+ }
669
+ // Observe container
670
+ attach(swiper.hostEl, {
671
+ childList: swiper.params.observeSlideChildren
672
+ });
673
+
674
+ // Observe wrapper
675
+ attach(swiper.wrapperEl, {
676
+ attributes: false
677
+ });
678
+ };
679
+ const destroy = () => {
680
+ observers.forEach(observer => {
681
+ observer.disconnect();
682
+ });
683
+ observers.splice(0, observers.length);
684
+ };
685
+ extendParams({
686
+ observer: false,
687
+ observeParents: false,
688
+ observeSlideChildren: false
689
+ });
690
+ on('init', init);
691
+ on('destroy', destroy);
692
+ }
693
+
694
+ /* eslint-disable no-underscore-dangle */
695
+
696
+ var eventsEmitter = {
697
+ on(events, handler, priority) {
698
+ const self = this;
699
+ if (!self.eventsListeners || self.destroyed) return self;
700
+ if (typeof handler !== 'function') return self;
701
+ const method = priority ? 'unshift' : 'push';
702
+ events.split(' ').forEach(event => {
703
+ if (!self.eventsListeners[event]) self.eventsListeners[event] = [];
704
+ self.eventsListeners[event][method](handler);
705
+ });
706
+ return self;
707
+ },
708
+ once(events, handler, priority) {
709
+ const self = this;
710
+ if (!self.eventsListeners || self.destroyed) return self;
711
+ if (typeof handler !== 'function') return self;
712
+ function onceHandler() {
713
+ self.off(events, onceHandler);
714
+ if (onceHandler.__emitterProxy) {
715
+ delete onceHandler.__emitterProxy;
716
+ }
717
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
718
+ args[_key] = arguments[_key];
719
+ }
720
+ handler.apply(self, args);
721
+ }
722
+ onceHandler.__emitterProxy = handler;
723
+ return self.on(events, onceHandler, priority);
724
+ },
725
+ onAny(handler, priority) {
726
+ const self = this;
727
+ if (!self.eventsListeners || self.destroyed) return self;
728
+ if (typeof handler !== 'function') return self;
729
+ const method = priority ? 'unshift' : 'push';
730
+ if (self.eventsAnyListeners.indexOf(handler) < 0) {
731
+ self.eventsAnyListeners[method](handler);
732
+ }
733
+ return self;
734
+ },
735
+ offAny(handler) {
736
+ const self = this;
737
+ if (!self.eventsListeners || self.destroyed) return self;
738
+ if (!self.eventsAnyListeners) return self;
739
+ const index = self.eventsAnyListeners.indexOf(handler);
740
+ if (index >= 0) {
741
+ self.eventsAnyListeners.splice(index, 1);
742
+ }
743
+ return self;
744
+ },
745
+ off(events, handler) {
746
+ const self = this;
747
+ if (!self.eventsListeners || self.destroyed) return self;
748
+ if (!self.eventsListeners) return self;
749
+ events.split(' ').forEach(event => {
750
+ if (typeof handler === 'undefined') {
751
+ self.eventsListeners[event] = [];
752
+ } else if (self.eventsListeners[event]) {
753
+ self.eventsListeners[event].forEach((eventHandler, index) => {
754
+ if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {
755
+ self.eventsListeners[event].splice(index, 1);
756
+ }
757
+ });
758
+ }
759
+ });
760
+ return self;
761
+ },
762
+ emit() {
763
+ const self = this;
764
+ if (!self.eventsListeners || self.destroyed) return self;
765
+ if (!self.eventsListeners) return self;
766
+ let events;
767
+ let data;
768
+ let context;
769
+ for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
770
+ args[_key2] = arguments[_key2];
771
+ }
772
+ if (typeof args[0] === 'string' || Array.isArray(args[0])) {
773
+ events = args[0];
774
+ data = args.slice(1, args.length);
775
+ context = self;
776
+ } else {
777
+ events = args[0].events;
778
+ data = args[0].data;
779
+ context = args[0].context || self;
780
+ }
781
+ data.unshift(context);
782
+ const eventsArray = Array.isArray(events) ? events : events.split(' ');
783
+ eventsArray.forEach(event => {
784
+ if (self.eventsAnyListeners && self.eventsAnyListeners.length) {
785
+ self.eventsAnyListeners.forEach(eventHandler => {
786
+ eventHandler.apply(context, [event, ...data]);
787
+ });
788
+ }
789
+ if (self.eventsListeners && self.eventsListeners[event]) {
790
+ self.eventsListeners[event].forEach(eventHandler => {
791
+ eventHandler.apply(context, data);
792
+ });
793
+ }
794
+ });
795
+ return self;
796
+ }
797
+ };
798
+
799
+ function updateSize() {
800
+ const swiper = this;
801
+ let width;
802
+ let height;
803
+ const el = swiper.el;
804
+ if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {
805
+ width = swiper.params.width;
806
+ } else {
807
+ width = el.clientWidth;
808
+ }
809
+ if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {
810
+ height = swiper.params.height;
811
+ } else {
812
+ height = el.clientHeight;
813
+ }
814
+ if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {
815
+ return;
816
+ }
817
+
818
+ // Subtract paddings
819
+ width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);
820
+ height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);
821
+ if (Number.isNaN(width)) width = 0;
822
+ if (Number.isNaN(height)) height = 0;
823
+ Object.assign(swiper, {
824
+ width,
825
+ height,
826
+ size: swiper.isHorizontal() ? width : height
827
+ });
828
+ }
829
+
830
+ function updateSlides() {
831
+ const swiper = this;
832
+ function getDirectionPropertyValue(node, label) {
833
+ return parseFloat(node.getPropertyValue(swiper.getDirectionLabel(label)) || 0);
834
+ }
835
+ const params = swiper.params;
836
+ const {
837
+ wrapperEl,
838
+ slidesEl,
839
+ size: swiperSize,
840
+ rtlTranslate: rtl,
841
+ wrongRTL
842
+ } = swiper;
843
+ const isVirtual = swiper.virtual && params.virtual.enabled;
844
+ const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
845
+ const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);
846
+ const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
847
+ let snapGrid = [];
848
+ const slidesGrid = [];
849
+ const slidesSizesGrid = [];
850
+ let offsetBefore = params.slidesOffsetBefore;
851
+ if (typeof offsetBefore === 'function') {
852
+ offsetBefore = params.slidesOffsetBefore.call(swiper);
853
+ }
854
+ let offsetAfter = params.slidesOffsetAfter;
855
+ if (typeof offsetAfter === 'function') {
856
+ offsetAfter = params.slidesOffsetAfter.call(swiper);
857
+ }
858
+ const previousSnapGridLength = swiper.snapGrid.length;
859
+ const previousSlidesGridLength = swiper.slidesGrid.length;
860
+ let spaceBetween = params.spaceBetween;
861
+ let slidePosition = -offsetBefore;
862
+ let prevSlideSize = 0;
863
+ let index = 0;
864
+ if (typeof swiperSize === 'undefined') {
865
+ return;
866
+ }
867
+ if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
868
+ spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;
869
+ } else if (typeof spaceBetween === 'string') {
870
+ spaceBetween = parseFloat(spaceBetween);
871
+ }
872
+ swiper.virtualSize = -spaceBetween;
873
+
874
+ // reset margins
875
+ slides.forEach(slideEl => {
876
+ if (rtl) {
877
+ slideEl.style.marginLeft = '';
878
+ } else {
879
+ slideEl.style.marginRight = '';
880
+ }
881
+ slideEl.style.marginBottom = '';
882
+ slideEl.style.marginTop = '';
883
+ });
884
+
885
+ // reset cssMode offsets
886
+ if (params.centeredSlides && params.cssMode) {
887
+ setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');
888
+ setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');
889
+ }
890
+ const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;
891
+ if (gridEnabled) {
892
+ swiper.grid.initSlides(slides);
893
+ } else if (swiper.grid) {
894
+ swiper.grid.unsetSlides();
895
+ }
896
+
897
+ // Calc slides
898
+ let slideSize;
899
+ const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {
900
+ return typeof params.breakpoints[key].slidesPerView !== 'undefined';
901
+ }).length > 0;
902
+ for (let i = 0; i < slidesLength; i += 1) {
903
+ slideSize = 0;
904
+ let slide;
905
+ if (slides[i]) slide = slides[i];
906
+ if (gridEnabled) {
907
+ swiper.grid.updateSlide(i, slide, slides);
908
+ }
909
+ if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line
910
+
911
+ if (params.slidesPerView === 'auto') {
912
+ if (shouldResetSlideSize) {
913
+ slides[i].style[swiper.getDirectionLabel('width')] = ``;
914
+ }
915
+ const slideStyles = getComputedStyle(slide);
916
+ const currentTransform = slide.style.transform;
917
+ const currentWebKitTransform = slide.style.webkitTransform;
918
+ if (currentTransform) {
919
+ slide.style.transform = 'none';
920
+ }
921
+ if (currentWebKitTransform) {
922
+ slide.style.webkitTransform = 'none';
923
+ }
924
+ if (params.roundLengths) {
925
+ slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);
926
+ } else {
927
+ // eslint-disable-next-line
928
+ const width = getDirectionPropertyValue(slideStyles, 'width');
929
+ const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');
930
+ const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');
931
+ const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');
932
+ const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');
933
+ const boxSizing = slideStyles.getPropertyValue('box-sizing');
934
+ if (boxSizing && boxSizing === 'border-box') {
935
+ slideSize = width + marginLeft + marginRight;
936
+ } else {
937
+ const {
938
+ clientWidth,
939
+ offsetWidth
940
+ } = slide;
941
+ slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);
942
+ }
943
+ }
944
+ if (currentTransform) {
945
+ slide.style.transform = currentTransform;
946
+ }
947
+ if (currentWebKitTransform) {
948
+ slide.style.webkitTransform = currentWebKitTransform;
949
+ }
950
+ if (params.roundLengths) slideSize = Math.floor(slideSize);
951
+ } else {
952
+ slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;
953
+ if (params.roundLengths) slideSize = Math.floor(slideSize);
954
+ if (slides[i]) {
955
+ slides[i].style[swiper.getDirectionLabel('width')] = `${slideSize}px`;
956
+ }
957
+ }
958
+ if (slides[i]) {
959
+ slides[i].swiperSlideSize = slideSize;
960
+ }
961
+ slidesSizesGrid.push(slideSize);
962
+ if (params.centeredSlides) {
963
+ slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
964
+ if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
965
+ if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
966
+ if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;
967
+ if (params.roundLengths) slidePosition = Math.floor(slidePosition);
968
+ if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);
969
+ slidesGrid.push(slidePosition);
970
+ } else {
971
+ if (params.roundLengths) slidePosition = Math.floor(slidePosition);
972
+ if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);
973
+ slidesGrid.push(slidePosition);
974
+ slidePosition = slidePosition + slideSize + spaceBetween;
975
+ }
976
+ swiper.virtualSize += slideSize + spaceBetween;
977
+ prevSlideSize = slideSize;
978
+ index += 1;
979
+ }
980
+ swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
981
+ if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
982
+ wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;
983
+ }
984
+ if (params.setWrapperSize) {
985
+ wrapperEl.style[swiper.getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;
986
+ }
987
+ if (gridEnabled) {
988
+ swiper.grid.updateWrapperSize(slideSize, snapGrid);
989
+ }
990
+
991
+ // Remove last grid elements depending on width
992
+ if (!params.centeredSlides) {
993
+ const newSlidesGrid = [];
994
+ for (let i = 0; i < snapGrid.length; i += 1) {
995
+ let slidesGridItem = snapGrid[i];
996
+ if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
997
+ if (snapGrid[i] <= swiper.virtualSize - swiperSize) {
998
+ newSlidesGrid.push(slidesGridItem);
999
+ }
1000
+ }
1001
+ snapGrid = newSlidesGrid;
1002
+ if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
1003
+ snapGrid.push(swiper.virtualSize - swiperSize);
1004
+ }
1005
+ }
1006
+ if (isVirtual && params.loop) {
1007
+ const size = slidesSizesGrid[0] + spaceBetween;
1008
+ if (params.slidesPerGroup > 1) {
1009
+ const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);
1010
+ const groupSize = size * params.slidesPerGroup;
1011
+ for (let i = 0; i < groups; i += 1) {
1012
+ snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);
1013
+ }
1014
+ }
1015
+ for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {
1016
+ if (params.slidesPerGroup === 1) {
1017
+ snapGrid.push(snapGrid[snapGrid.length - 1] + size);
1018
+ }
1019
+ slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);
1020
+ swiper.virtualSize += size;
1021
+ }
1022
+ }
1023
+ if (snapGrid.length === 0) snapGrid = [0];
1024
+ if (spaceBetween !== 0) {
1025
+ const key = swiper.isHorizontal() && rtl ? 'marginLeft' : swiper.getDirectionLabel('marginRight');
1026
+ slides.filter((_, slideIndex) => {
1027
+ if (!params.cssMode || params.loop) return true;
1028
+ if (slideIndex === slides.length - 1) {
1029
+ return false;
1030
+ }
1031
+ return true;
1032
+ }).forEach(slideEl => {
1033
+ slideEl.style[key] = `${spaceBetween}px`;
1034
+ });
1035
+ }
1036
+ if (params.centeredSlides && params.centeredSlidesBounds) {
1037
+ let allSlidesSize = 0;
1038
+ slidesSizesGrid.forEach(slideSizeValue => {
1039
+ allSlidesSize += slideSizeValue + (spaceBetween || 0);
1040
+ });
1041
+ allSlidesSize -= spaceBetween;
1042
+ const maxSnap = allSlidesSize > swiperSize ? allSlidesSize - swiperSize : 0;
1043
+ snapGrid = snapGrid.map(snap => {
1044
+ if (snap <= 0) return -offsetBefore;
1045
+ if (snap > maxSnap) return maxSnap + offsetAfter;
1046
+ return snap;
1047
+ });
1048
+ }
1049
+ if (params.centerInsufficientSlides) {
1050
+ let allSlidesSize = 0;
1051
+ slidesSizesGrid.forEach(slideSizeValue => {
1052
+ allSlidesSize += slideSizeValue + (spaceBetween || 0);
1053
+ });
1054
+ allSlidesSize -= spaceBetween;
1055
+ const offsetSize = (params.slidesOffsetBefore || 0) + (params.slidesOffsetAfter || 0);
1056
+ if (allSlidesSize + offsetSize < swiperSize) {
1057
+ const allSlidesOffset = (swiperSize - allSlidesSize - offsetSize) / 2;
1058
+ snapGrid.forEach((snap, snapIndex) => {
1059
+ snapGrid[snapIndex] = snap - allSlidesOffset;
1060
+ });
1061
+ slidesGrid.forEach((snap, snapIndex) => {
1062
+ slidesGrid[snapIndex] = snap + allSlidesOffset;
1063
+ });
1064
+ }
1065
+ }
1066
+ Object.assign(swiper, {
1067
+ slides,
1068
+ snapGrid,
1069
+ slidesGrid,
1070
+ slidesSizesGrid
1071
+ });
1072
+ if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {
1073
+ setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);
1074
+ setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);
1075
+ const addToSnapGrid = -swiper.snapGrid[0];
1076
+ const addToSlidesGrid = -swiper.slidesGrid[0];
1077
+ swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);
1078
+ swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);
1079
+ }
1080
+ if (slidesLength !== previousSlidesLength) {
1081
+ swiper.emit('slidesLengthChange');
1082
+ }
1083
+ if (snapGrid.length !== previousSnapGridLength) {
1084
+ if (swiper.params.watchOverflow) swiper.checkOverflow();
1085
+ swiper.emit('snapGridLengthChange');
1086
+ }
1087
+ if (slidesGrid.length !== previousSlidesGridLength) {
1088
+ swiper.emit('slidesGridLengthChange');
1089
+ }
1090
+ if (params.watchSlidesProgress) {
1091
+ swiper.updateSlidesOffset();
1092
+ }
1093
+ swiper.emit('slidesUpdated');
1094
+ if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {
1095
+ const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;
1096
+ const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);
1097
+ if (slidesLength <= params.maxBackfaceHiddenSlides) {
1098
+ if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);
1099
+ } else if (hasClassBackfaceClassAdded) {
1100
+ swiper.el.classList.remove(backFaceHiddenClass);
1101
+ }
1102
+ }
1103
+ }
1104
+
1105
+ function updateAutoHeight(speed) {
1106
+ const swiper = this;
1107
+ const activeSlides = [];
1108
+ const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
1109
+ let newHeight = 0;
1110
+ let i;
1111
+ if (typeof speed === 'number') {
1112
+ swiper.setTransition(speed);
1113
+ } else if (speed === true) {
1114
+ swiper.setTransition(swiper.params.speed);
1115
+ }
1116
+ const getSlideByIndex = index => {
1117
+ if (isVirtual) {
1118
+ return swiper.slides[swiper.getSlideIndexByData(index)];
1119
+ }
1120
+ return swiper.slides[index];
1121
+ };
1122
+ // Find slides currently in view
1123
+ if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
1124
+ if (swiper.params.centeredSlides) {
1125
+ (swiper.visibleSlides || []).forEach(slide => {
1126
+ activeSlides.push(slide);
1127
+ });
1128
+ } else {
1129
+ for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
1130
+ const index = swiper.activeIndex + i;
1131
+ if (index > swiper.slides.length && !isVirtual) break;
1132
+ activeSlides.push(getSlideByIndex(index));
1133
+ }
1134
+ }
1135
+ } else {
1136
+ activeSlides.push(getSlideByIndex(swiper.activeIndex));
1137
+ }
1138
+
1139
+ // Find new height from highest slide in view
1140
+ for (i = 0; i < activeSlides.length; i += 1) {
1141
+ if (typeof activeSlides[i] !== 'undefined') {
1142
+ const height = activeSlides[i].offsetHeight;
1143
+ newHeight = height > newHeight ? height : newHeight;
1144
+ }
1145
+ }
1146
+
1147
+ // Update Height
1148
+ if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;
1149
+ }
1150
+
1151
+ function updateSlidesOffset() {
1152
+ const swiper = this;
1153
+ const slides = swiper.slides;
1154
+ // eslint-disable-next-line
1155
+ const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;
1156
+ for (let i = 0; i < slides.length; i += 1) {
1157
+ slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();
1158
+ }
1159
+ }
1160
+
1161
+ const toggleSlideClasses$1 = (slideEl, condition, className) => {
1162
+ if (condition && !slideEl.classList.contains(className)) {
1163
+ slideEl.classList.add(className);
1164
+ } else if (!condition && slideEl.classList.contains(className)) {
1165
+ slideEl.classList.remove(className);
1166
+ }
1167
+ };
1168
+ function updateSlidesProgress(translate) {
1169
+ if (translate === void 0) {
1170
+ translate = this && this.translate || 0;
1171
+ }
1172
+ const swiper = this;
1173
+ const params = swiper.params;
1174
+ const {
1175
+ slides,
1176
+ rtlTranslate: rtl,
1177
+ snapGrid
1178
+ } = swiper;
1179
+ if (slides.length === 0) return;
1180
+ if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();
1181
+ let offsetCenter = -translate;
1182
+ if (rtl) offsetCenter = translate;
1183
+ swiper.visibleSlidesIndexes = [];
1184
+ swiper.visibleSlides = [];
1185
+ let spaceBetween = params.spaceBetween;
1186
+ if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
1187
+ spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;
1188
+ } else if (typeof spaceBetween === 'string') {
1189
+ spaceBetween = parseFloat(spaceBetween);
1190
+ }
1191
+ for (let i = 0; i < slides.length; i += 1) {
1192
+ const slide = slides[i];
1193
+ let slideOffset = slide.swiperSlideOffset;
1194
+ if (params.cssMode && params.centeredSlides) {
1195
+ slideOffset -= slides[0].swiperSlideOffset;
1196
+ }
1197
+ const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);
1198
+ const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);
1199
+ const slideBefore = -(offsetCenter - slideOffset);
1200
+ const slideAfter = slideBefore + swiper.slidesSizesGrid[i];
1201
+ const isFullyVisible = slideBefore >= 0 && slideBefore <= swiper.size - swiper.slidesSizesGrid[i];
1202
+ const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;
1203
+ if (isVisible) {
1204
+ swiper.visibleSlides.push(slide);
1205
+ swiper.visibleSlidesIndexes.push(i);
1206
+ }
1207
+ toggleSlideClasses$1(slide, isVisible, params.slideVisibleClass);
1208
+ toggleSlideClasses$1(slide, isFullyVisible, params.slideFullyVisibleClass);
1209
+ slide.progress = rtl ? -slideProgress : slideProgress;
1210
+ slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;
1211
+ }
1212
+ }
1213
+
1214
+ function updateProgress(translate) {
1215
+ const swiper = this;
1216
+ if (typeof translate === 'undefined') {
1217
+ const multiplier = swiper.rtlTranslate ? -1 : 1;
1218
+ // eslint-disable-next-line
1219
+ translate = swiper && swiper.translate && swiper.translate * multiplier || 0;
1220
+ }
1221
+ const params = swiper.params;
1222
+ const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
1223
+ let {
1224
+ progress,
1225
+ isBeginning,
1226
+ isEnd,
1227
+ progressLoop
1228
+ } = swiper;
1229
+ const wasBeginning = isBeginning;
1230
+ const wasEnd = isEnd;
1231
+ if (translatesDiff === 0) {
1232
+ progress = 0;
1233
+ isBeginning = true;
1234
+ isEnd = true;
1235
+ } else {
1236
+ progress = (translate - swiper.minTranslate()) / translatesDiff;
1237
+ const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;
1238
+ const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;
1239
+ isBeginning = isBeginningRounded || progress <= 0;
1240
+ isEnd = isEndRounded || progress >= 1;
1241
+ if (isBeginningRounded) progress = 0;
1242
+ if (isEndRounded) progress = 1;
1243
+ }
1244
+ if (params.loop) {
1245
+ const firstSlideIndex = swiper.getSlideIndexByData(0);
1246
+ const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);
1247
+ const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];
1248
+ const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];
1249
+ const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];
1250
+ const translateAbs = Math.abs(translate);
1251
+ if (translateAbs >= firstSlideTranslate) {
1252
+ progressLoop = (translateAbs - firstSlideTranslate) / translateMax;
1253
+ } else {
1254
+ progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;
1255
+ }
1256
+ if (progressLoop > 1) progressLoop -= 1;
1257
+ }
1258
+ Object.assign(swiper, {
1259
+ progress,
1260
+ progressLoop,
1261
+ isBeginning,
1262
+ isEnd
1263
+ });
1264
+ if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);
1265
+ if (isBeginning && !wasBeginning) {
1266
+ swiper.emit('reachBeginning toEdge');
1267
+ }
1268
+ if (isEnd && !wasEnd) {
1269
+ swiper.emit('reachEnd toEdge');
1270
+ }
1271
+ if (wasBeginning && !isBeginning || wasEnd && !isEnd) {
1272
+ swiper.emit('fromEdge');
1273
+ }
1274
+ swiper.emit('progress', progress);
1275
+ }
1276
+
1277
+ const toggleSlideClasses = (slideEl, condition, className) => {
1278
+ if (condition && !slideEl.classList.contains(className)) {
1279
+ slideEl.classList.add(className);
1280
+ } else if (!condition && slideEl.classList.contains(className)) {
1281
+ slideEl.classList.remove(className);
1282
+ }
1283
+ };
1284
+ function updateSlidesClasses() {
1285
+ const swiper = this;
1286
+ const {
1287
+ slides,
1288
+ params,
1289
+ slidesEl,
1290
+ activeIndex
1291
+ } = swiper;
1292
+ const isVirtual = swiper.virtual && params.virtual.enabled;
1293
+ const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;
1294
+ const getFilteredSlide = selector => {
1295
+ return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];
1296
+ };
1297
+ let activeSlide;
1298
+ let prevSlide;
1299
+ let nextSlide;
1300
+ if (isVirtual) {
1301
+ if (params.loop) {
1302
+ let slideIndex = activeIndex - swiper.virtual.slidesBefore;
1303
+ if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;
1304
+ if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;
1305
+ activeSlide = getFilteredSlide(`[data-swiper-slide-index="${slideIndex}"]`);
1306
+ } else {
1307
+ activeSlide = getFilteredSlide(`[data-swiper-slide-index="${activeIndex}"]`);
1308
+ }
1309
+ } else {
1310
+ if (gridEnabled) {
1311
+ activeSlide = slides.find(slideEl => slideEl.column === activeIndex);
1312
+ nextSlide = slides.find(slideEl => slideEl.column === activeIndex + 1);
1313
+ prevSlide = slides.find(slideEl => slideEl.column === activeIndex - 1);
1314
+ } else {
1315
+ activeSlide = slides[activeIndex];
1316
+ }
1317
+ }
1318
+ if (activeSlide) {
1319
+ if (!gridEnabled) {
1320
+ // Next Slide
1321
+ nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
1322
+ if (params.loop && !nextSlide) {
1323
+ nextSlide = slides[0];
1324
+ }
1325
+
1326
+ // Prev Slide
1327
+ prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];
1328
+ if (params.loop && !prevSlide === 0) {
1329
+ prevSlide = slides[slides.length - 1];
1330
+ }
1331
+ }
1332
+ }
1333
+ slides.forEach(slideEl => {
1334
+ toggleSlideClasses(slideEl, slideEl === activeSlide, params.slideActiveClass);
1335
+ toggleSlideClasses(slideEl, slideEl === nextSlide, params.slideNextClass);
1336
+ toggleSlideClasses(slideEl, slideEl === prevSlide, params.slidePrevClass);
1337
+ });
1338
+ swiper.emitSlidesClasses();
1339
+ }
1340
+
1341
+ const processLazyPreloader = (swiper, imageEl) => {
1342
+ if (!swiper || swiper.destroyed || !swiper.params) return;
1343
+ const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;
1344
+ const slideEl = imageEl.closest(slideSelector());
1345
+ if (slideEl) {
1346
+ let lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);
1347
+ if (!lazyEl && swiper.isElement) {
1348
+ if (slideEl.shadowRoot) {
1349
+ lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);
1350
+ } else {
1351
+ // init later
1352
+ requestAnimationFrame(() => {
1353
+ if (slideEl.shadowRoot) {
1354
+ lazyEl = slideEl.shadowRoot.querySelector(`.${swiper.params.lazyPreloaderClass}`);
1355
+ if (lazyEl) lazyEl.remove();
1356
+ }
1357
+ });
1358
+ }
1359
+ }
1360
+ if (lazyEl) lazyEl.remove();
1361
+ }
1362
+ };
1363
+ const unlazy = (swiper, index) => {
1364
+ if (!swiper.slides[index]) return;
1365
+ const imageEl = swiper.slides[index].querySelector('[loading="lazy"]');
1366
+ if (imageEl) imageEl.removeAttribute('loading');
1367
+ };
1368
+ const preload = swiper => {
1369
+ if (!swiper || swiper.destroyed || !swiper.params) return;
1370
+ let amount = swiper.params.lazyPreloadPrevNext;
1371
+ const len = swiper.slides.length;
1372
+ if (!len || !amount || amount < 0) return;
1373
+ amount = Math.min(amount, len);
1374
+ const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);
1375
+ const activeIndex = swiper.activeIndex;
1376
+ if (swiper.params.grid && swiper.params.grid.rows > 1) {
1377
+ const activeColumn = activeIndex;
1378
+ const preloadColumns = [activeColumn - amount];
1379
+ preloadColumns.push(...Array.from({
1380
+ length: amount
1381
+ }).map((_, i) => {
1382
+ return activeColumn + slidesPerView + i;
1383
+ }));
1384
+ swiper.slides.forEach((slideEl, i) => {
1385
+ if (preloadColumns.includes(slideEl.column)) unlazy(swiper, i);
1386
+ });
1387
+ return;
1388
+ }
1389
+ const slideIndexLastInView = activeIndex + slidesPerView - 1;
1390
+ if (swiper.params.rewind || swiper.params.loop) {
1391
+ for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {
1392
+ const realIndex = (i % len + len) % len;
1393
+ if (realIndex < activeIndex || realIndex > slideIndexLastInView) unlazy(swiper, realIndex);
1394
+ }
1395
+ } else {
1396
+ for (let i = Math.max(activeIndex - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {
1397
+ if (i !== activeIndex && (i > slideIndexLastInView || i < activeIndex)) {
1398
+ unlazy(swiper, i);
1399
+ }
1400
+ }
1401
+ }
1402
+ };
1403
+
1404
+ function getActiveIndexByTranslate(swiper) {
1405
+ const {
1406
+ slidesGrid,
1407
+ params
1408
+ } = swiper;
1409
+ const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
1410
+ let activeIndex;
1411
+ for (let i = 0; i < slidesGrid.length; i += 1) {
1412
+ if (typeof slidesGrid[i + 1] !== 'undefined') {
1413
+ if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {
1414
+ activeIndex = i;
1415
+ } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
1416
+ activeIndex = i + 1;
1417
+ }
1418
+ } else if (translate >= slidesGrid[i]) {
1419
+ activeIndex = i;
1420
+ }
1421
+ }
1422
+ // Normalize slideIndex
1423
+ if (params.normalizeSlideIndex) {
1424
+ if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;
1425
+ }
1426
+ return activeIndex;
1427
+ }
1428
+ function updateActiveIndex(newActiveIndex) {
1429
+ const swiper = this;
1430
+ const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
1431
+ const {
1432
+ snapGrid,
1433
+ params,
1434
+ activeIndex: previousIndex,
1435
+ realIndex: previousRealIndex,
1436
+ snapIndex: previousSnapIndex
1437
+ } = swiper;
1438
+ let activeIndex = newActiveIndex;
1439
+ let snapIndex;
1440
+ const getVirtualRealIndex = aIndex => {
1441
+ let realIndex = aIndex - swiper.virtual.slidesBefore;
1442
+ if (realIndex < 0) {
1443
+ realIndex = swiper.virtual.slides.length + realIndex;
1444
+ }
1445
+ if (realIndex >= swiper.virtual.slides.length) {
1446
+ realIndex -= swiper.virtual.slides.length;
1447
+ }
1448
+ return realIndex;
1449
+ };
1450
+ if (typeof activeIndex === 'undefined') {
1451
+ activeIndex = getActiveIndexByTranslate(swiper);
1452
+ }
1453
+ if (snapGrid.indexOf(translate) >= 0) {
1454
+ snapIndex = snapGrid.indexOf(translate);
1455
+ } else {
1456
+ const skip = Math.min(params.slidesPerGroupSkip, activeIndex);
1457
+ snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);
1458
+ }
1459
+ if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
1460
+ if (activeIndex === previousIndex && !swiper.params.loop) {
1461
+ if (snapIndex !== previousSnapIndex) {
1462
+ swiper.snapIndex = snapIndex;
1463
+ swiper.emit('snapIndexChange');
1464
+ }
1465
+ return;
1466
+ }
1467
+ if (activeIndex === previousIndex && swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {
1468
+ swiper.realIndex = getVirtualRealIndex(activeIndex);
1469
+ return;
1470
+ }
1471
+ const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;
1472
+
1473
+ // Get real index
1474
+ let realIndex;
1475
+ if (swiper.virtual && params.virtual.enabled && params.loop) {
1476
+ realIndex = getVirtualRealIndex(activeIndex);
1477
+ } else if (gridEnabled) {
1478
+ const firstSlideInColumn = swiper.slides.find(slideEl => slideEl.column === activeIndex);
1479
+ let activeSlideIndex = parseInt(firstSlideInColumn.getAttribute('data-swiper-slide-index'), 10);
1480
+ if (Number.isNaN(activeSlideIndex)) {
1481
+ activeSlideIndex = Math.max(swiper.slides.indexOf(firstSlideInColumn), 0);
1482
+ }
1483
+ realIndex = Math.floor(activeSlideIndex / params.grid.rows);
1484
+ } else if (swiper.slides[activeIndex]) {
1485
+ const slideIndex = swiper.slides[activeIndex].getAttribute('data-swiper-slide-index');
1486
+ if (slideIndex) {
1487
+ realIndex = parseInt(slideIndex, 10);
1488
+ } else {
1489
+ realIndex = activeIndex;
1490
+ }
1491
+ } else {
1492
+ realIndex = activeIndex;
1493
+ }
1494
+ Object.assign(swiper, {
1495
+ previousSnapIndex,
1496
+ snapIndex,
1497
+ previousRealIndex,
1498
+ realIndex,
1499
+ previousIndex,
1500
+ activeIndex
1501
+ });
1502
+ if (swiper.initialized) {
1503
+ preload(swiper);
1504
+ }
1505
+ swiper.emit('activeIndexChange');
1506
+ swiper.emit('snapIndexChange');
1507
+ if (swiper.initialized || swiper.params.runCallbacksOnInit) {
1508
+ if (previousRealIndex !== realIndex) {
1509
+ swiper.emit('realIndexChange');
1510
+ }
1511
+ swiper.emit('slideChange');
1512
+ }
1513
+ }
1514
+
1515
+ function updateClickedSlide(el, path) {
1516
+ const swiper = this;
1517
+ const params = swiper.params;
1518
+ let slide = el.closest(`.${params.slideClass}, swiper-slide`);
1519
+ if (!slide && swiper.isElement && path && path.length > 1 && path.includes(el)) {
1520
+ [...path.slice(path.indexOf(el) + 1, path.length)].forEach(pathEl => {
1521
+ if (!slide && pathEl.matches && pathEl.matches(`.${params.slideClass}, swiper-slide`)) {
1522
+ slide = pathEl;
1523
+ }
1524
+ });
1525
+ }
1526
+ let slideFound = false;
1527
+ let slideIndex;
1528
+ if (slide) {
1529
+ for (let i = 0; i < swiper.slides.length; i += 1) {
1530
+ if (swiper.slides[i] === slide) {
1531
+ slideFound = true;
1532
+ slideIndex = i;
1533
+ break;
1534
+ }
1535
+ }
1536
+ }
1537
+ if (slide && slideFound) {
1538
+ swiper.clickedSlide = slide;
1539
+ if (swiper.virtual && swiper.params.virtual.enabled) {
1540
+ swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);
1541
+ } else {
1542
+ swiper.clickedIndex = slideIndex;
1543
+ }
1544
+ } else {
1545
+ swiper.clickedSlide = undefined;
1546
+ swiper.clickedIndex = undefined;
1547
+ return;
1548
+ }
1549
+ if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
1550
+ swiper.slideToClickedSlide();
1551
+ }
1552
+ }
1553
+
1554
+ var update = {
1555
+ updateSize,
1556
+ updateSlides,
1557
+ updateAutoHeight,
1558
+ updateSlidesOffset,
1559
+ updateSlidesProgress,
1560
+ updateProgress,
1561
+ updateSlidesClasses,
1562
+ updateActiveIndex,
1563
+ updateClickedSlide
1564
+ };
1565
+
1566
+ function getSwiperTranslate(axis) {
1567
+ if (axis === void 0) {
1568
+ axis = this.isHorizontal() ? 'x' : 'y';
1569
+ }
1570
+ const swiper = this;
1571
+ const {
1572
+ params,
1573
+ rtlTranslate: rtl,
1574
+ translate,
1575
+ wrapperEl
1576
+ } = swiper;
1577
+ if (params.virtualTranslate) {
1578
+ return rtl ? -translate : translate;
1579
+ }
1580
+ if (params.cssMode) {
1581
+ return translate;
1582
+ }
1583
+ let currentTranslate = getTranslate(wrapperEl, axis);
1584
+ currentTranslate += swiper.cssOverflowAdjustment();
1585
+ if (rtl) currentTranslate = -currentTranslate;
1586
+ return currentTranslate || 0;
1587
+ }
1588
+
1589
+ function setTranslate(translate, byController) {
1590
+ const swiper = this;
1591
+ const {
1592
+ rtlTranslate: rtl,
1593
+ params,
1594
+ wrapperEl,
1595
+ progress
1596
+ } = swiper;
1597
+ let x = 0;
1598
+ let y = 0;
1599
+ const z = 0;
1600
+ if (swiper.isHorizontal()) {
1601
+ x = rtl ? -translate : translate;
1602
+ } else {
1603
+ y = translate;
1604
+ }
1605
+ if (params.roundLengths) {
1606
+ x = Math.floor(x);
1607
+ y = Math.floor(y);
1608
+ }
1609
+ swiper.previousTranslate = swiper.translate;
1610
+ swiper.translate = swiper.isHorizontal() ? x : y;
1611
+ if (params.cssMode) {
1612
+ wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;
1613
+ } else if (!params.virtualTranslate) {
1614
+ if (swiper.isHorizontal()) {
1615
+ x -= swiper.cssOverflowAdjustment();
1616
+ } else {
1617
+ y -= swiper.cssOverflowAdjustment();
1618
+ }
1619
+ wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;
1620
+ }
1621
+
1622
+ // Check if we need to update progress
1623
+ let newProgress;
1624
+ const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
1625
+ if (translatesDiff === 0) {
1626
+ newProgress = 0;
1627
+ } else {
1628
+ newProgress = (translate - swiper.minTranslate()) / translatesDiff;
1629
+ }
1630
+ if (newProgress !== progress) {
1631
+ swiper.updateProgress(translate);
1632
+ }
1633
+ swiper.emit('setTranslate', swiper.translate, byController);
1634
+ }
1635
+
1636
+ function minTranslate() {
1637
+ return -this.snapGrid[0];
1638
+ }
1639
+
1640
+ function maxTranslate() {
1641
+ return -this.snapGrid[this.snapGrid.length - 1];
1642
+ }
1643
+
1644
+ function translateTo(translate, speed, runCallbacks, translateBounds, internal) {
1645
+ if (translate === void 0) {
1646
+ translate = 0;
1647
+ }
1648
+ if (speed === void 0) {
1649
+ speed = this.params.speed;
1650
+ }
1651
+ if (runCallbacks === void 0) {
1652
+ runCallbacks = true;
1653
+ }
1654
+ if (translateBounds === void 0) {
1655
+ translateBounds = true;
1656
+ }
1657
+ const swiper = this;
1658
+ const {
1659
+ params,
1660
+ wrapperEl
1661
+ } = swiper;
1662
+ if (swiper.animating && params.preventInteractionOnTransition) {
1663
+ return false;
1664
+ }
1665
+ const minTranslate = swiper.minTranslate();
1666
+ const maxTranslate = swiper.maxTranslate();
1667
+ let newTranslate;
1668
+ if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;
1669
+
1670
+ // Update progress
1671
+ swiper.updateProgress(newTranslate);
1672
+ if (params.cssMode) {
1673
+ const isH = swiper.isHorizontal();
1674
+ if (speed === 0) {
1675
+ wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;
1676
+ } else {
1677
+ if (!swiper.support.smoothScroll) {
1678
+ animateCSSModeScroll({
1679
+ swiper,
1680
+ targetPosition: -newTranslate,
1681
+ side: isH ? 'left' : 'top'
1682
+ });
1683
+ return true;
1684
+ }
1685
+ wrapperEl.scrollTo({
1686
+ [isH ? 'left' : 'top']: -newTranslate,
1687
+ behavior: 'smooth'
1688
+ });
1689
+ }
1690
+ return true;
1691
+ }
1692
+ if (speed === 0) {
1693
+ swiper.setTransition(0);
1694
+ swiper.setTranslate(newTranslate);
1695
+ if (runCallbacks) {
1696
+ swiper.emit('beforeTransitionStart', speed, internal);
1697
+ swiper.emit('transitionEnd');
1698
+ }
1699
+ } else {
1700
+ swiper.setTransition(speed);
1701
+ swiper.setTranslate(newTranslate);
1702
+ if (runCallbacks) {
1703
+ swiper.emit('beforeTransitionStart', speed, internal);
1704
+ swiper.emit('transitionStart');
1705
+ }
1706
+ if (!swiper.animating) {
1707
+ swiper.animating = true;
1708
+ if (!swiper.onTranslateToWrapperTransitionEnd) {
1709
+ swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {
1710
+ if (!swiper || swiper.destroyed) return;
1711
+ if (e.target !== this) return;
1712
+ swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
1713
+ swiper.onTranslateToWrapperTransitionEnd = null;
1714
+ delete swiper.onTranslateToWrapperTransitionEnd;
1715
+ swiper.animating = false;
1716
+ if (runCallbacks) {
1717
+ swiper.emit('transitionEnd');
1718
+ }
1719
+ };
1720
+ }
1721
+ swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);
1722
+ }
1723
+ }
1724
+ return true;
1725
+ }
1726
+
1727
+ var translate = {
1728
+ getTranslate: getSwiperTranslate,
1729
+ setTranslate,
1730
+ minTranslate,
1731
+ maxTranslate,
1732
+ translateTo
1733
+ };
1734
+
1735
+ function setTransition(duration, byController) {
1736
+ const swiper = this;
1737
+ if (!swiper.params.cssMode) {
1738
+ swiper.wrapperEl.style.transitionDuration = `${duration}ms`;
1739
+ swiper.wrapperEl.style.transitionDelay = duration === 0 ? `0ms` : '';
1740
+ }
1741
+ swiper.emit('setTransition', duration, byController);
1742
+ }
1743
+
1744
+ function transitionEmit(_ref) {
1745
+ let {
1746
+ swiper,
1747
+ runCallbacks,
1748
+ direction,
1749
+ step
1750
+ } = _ref;
1751
+ const {
1752
+ activeIndex,
1753
+ previousIndex
1754
+ } = swiper;
1755
+ let dir = direction;
1756
+ if (!dir) {
1757
+ if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';
1758
+ }
1759
+ swiper.emit(`transition${step}`);
1760
+ if (runCallbacks && dir === 'reset') {
1761
+ swiper.emit(`slideResetTransition${step}`);
1762
+ } else if (runCallbacks && activeIndex !== previousIndex) {
1763
+ swiper.emit(`slideChangeTransition${step}`);
1764
+ if (dir === 'next') {
1765
+ swiper.emit(`slideNextTransition${step}`);
1766
+ } else {
1767
+ swiper.emit(`slidePrevTransition${step}`);
1768
+ }
1769
+ }
1770
+ }
1771
+
1772
+ function transitionStart(runCallbacks, direction) {
1773
+ if (runCallbacks === void 0) {
1774
+ runCallbacks = true;
1775
+ }
1776
+ const swiper = this;
1777
+ const {
1778
+ params
1779
+ } = swiper;
1780
+ if (params.cssMode) return;
1781
+ if (params.autoHeight) {
1782
+ swiper.updateAutoHeight();
1783
+ }
1784
+ transitionEmit({
1785
+ swiper,
1786
+ runCallbacks,
1787
+ direction,
1788
+ step: 'Start'
1789
+ });
1790
+ }
1791
+
1792
+ function transitionEnd(runCallbacks, direction) {
1793
+ if (runCallbacks === void 0) {
1794
+ runCallbacks = true;
1795
+ }
1796
+ const swiper = this;
1797
+ const {
1798
+ params
1799
+ } = swiper;
1800
+ swiper.animating = false;
1801
+ if (params.cssMode) return;
1802
+ swiper.setTransition(0);
1803
+ transitionEmit({
1804
+ swiper,
1805
+ runCallbacks,
1806
+ direction,
1807
+ step: 'End'
1808
+ });
1809
+ }
1810
+
1811
+ var transition = {
1812
+ setTransition,
1813
+ transitionStart,
1814
+ transitionEnd
1815
+ };
1816
+
1817
+ function slideTo(index, speed, runCallbacks, internal, initial) {
1818
+ if (index === void 0) {
1819
+ index = 0;
1820
+ }
1821
+ if (runCallbacks === void 0) {
1822
+ runCallbacks = true;
1823
+ }
1824
+ if (typeof index === 'string') {
1825
+ index = parseInt(index, 10);
1826
+ }
1827
+ const swiper = this;
1828
+ let slideIndex = index;
1829
+ if (slideIndex < 0) slideIndex = 0;
1830
+ const {
1831
+ params,
1832
+ snapGrid,
1833
+ slidesGrid,
1834
+ previousIndex,
1835
+ activeIndex,
1836
+ rtlTranslate: rtl,
1837
+ wrapperEl,
1838
+ enabled
1839
+ } = swiper;
1840
+ if (!enabled && !internal && !initial || swiper.destroyed || swiper.animating && params.preventInteractionOnTransition) {
1841
+ return false;
1842
+ }
1843
+ if (typeof speed === 'undefined') {
1844
+ speed = swiper.params.speed;
1845
+ }
1846
+ const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);
1847
+ let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);
1848
+ if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
1849
+ const translate = -snapGrid[snapIndex];
1850
+ // Normalize slideIndex
1851
+ if (params.normalizeSlideIndex) {
1852
+ for (let i = 0; i < slidesGrid.length; i += 1) {
1853
+ const normalizedTranslate = -Math.floor(translate * 100);
1854
+ const normalizedGrid = Math.floor(slidesGrid[i] * 100);
1855
+ const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);
1856
+ if (typeof slidesGrid[i + 1] !== 'undefined') {
1857
+ if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {
1858
+ slideIndex = i;
1859
+ } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {
1860
+ slideIndex = i + 1;
1861
+ }
1862
+ } else if (normalizedTranslate >= normalizedGrid) {
1863
+ slideIndex = i;
1864
+ }
1865
+ }
1866
+ }
1867
+ // Directions locks
1868
+ if (swiper.initialized && slideIndex !== activeIndex) {
1869
+ if (!swiper.allowSlideNext && (rtl ? translate > swiper.translate && translate > swiper.minTranslate() : translate < swiper.translate && translate < swiper.minTranslate())) {
1870
+ return false;
1871
+ }
1872
+ if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
1873
+ if ((activeIndex || 0) !== slideIndex) {
1874
+ return false;
1875
+ }
1876
+ }
1877
+ }
1878
+ if (slideIndex !== (previousIndex || 0) && runCallbacks) {
1879
+ swiper.emit('beforeSlideChangeStart');
1880
+ }
1881
+
1882
+ // Update progress
1883
+ swiper.updateProgress(translate);
1884
+ let direction;
1885
+ if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';
1886
+
1887
+ // initial virtual
1888
+ const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
1889
+ const isInitialVirtual = isVirtual && initial;
1890
+ // Update Index
1891
+ if (!isInitialVirtual && (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate)) {
1892
+ swiper.updateActiveIndex(slideIndex);
1893
+ // Update Height
1894
+ if (params.autoHeight) {
1895
+ swiper.updateAutoHeight();
1896
+ }
1897
+ swiper.updateSlidesClasses();
1898
+ if (params.effect !== 'slide') {
1899
+ swiper.setTranslate(translate);
1900
+ }
1901
+ if (direction !== 'reset') {
1902
+ swiper.transitionStart(runCallbacks, direction);
1903
+ swiper.transitionEnd(runCallbacks, direction);
1904
+ }
1905
+ return false;
1906
+ }
1907
+ if (params.cssMode) {
1908
+ const isH = swiper.isHorizontal();
1909
+ const t = rtl ? translate : -translate;
1910
+ if (speed === 0) {
1911
+ if (isVirtual) {
1912
+ swiper.wrapperEl.style.scrollSnapType = 'none';
1913
+ swiper._immediateVirtual = true;
1914
+ }
1915
+ if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {
1916
+ swiper._cssModeVirtualInitialSet = true;
1917
+ requestAnimationFrame(() => {
1918
+ wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
1919
+ });
1920
+ } else {
1921
+ wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;
1922
+ }
1923
+ if (isVirtual) {
1924
+ requestAnimationFrame(() => {
1925
+ swiper.wrapperEl.style.scrollSnapType = '';
1926
+ swiper._immediateVirtual = false;
1927
+ });
1928
+ }
1929
+ } else {
1930
+ if (!swiper.support.smoothScroll) {
1931
+ animateCSSModeScroll({
1932
+ swiper,
1933
+ targetPosition: t,
1934
+ side: isH ? 'left' : 'top'
1935
+ });
1936
+ return true;
1937
+ }
1938
+ wrapperEl.scrollTo({
1939
+ [isH ? 'left' : 'top']: t,
1940
+ behavior: 'smooth'
1941
+ });
1942
+ }
1943
+ return true;
1944
+ }
1945
+ const browser = getBrowser();
1946
+ const isSafari = browser.isSafari;
1947
+ if (isVirtual && !initial && isSafari && swiper.isElement) {
1948
+ swiper.virtual.update(false, false, slideIndex);
1949
+ }
1950
+ swiper.setTransition(speed);
1951
+ swiper.setTranslate(translate);
1952
+ swiper.updateActiveIndex(slideIndex);
1953
+ swiper.updateSlidesClasses();
1954
+ swiper.emit('beforeTransitionStart', speed, internal);
1955
+ swiper.transitionStart(runCallbacks, direction);
1956
+ if (speed === 0) {
1957
+ swiper.transitionEnd(runCallbacks, direction);
1958
+ } else if (!swiper.animating) {
1959
+ swiper.animating = true;
1960
+ if (!swiper.onSlideToWrapperTransitionEnd) {
1961
+ swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
1962
+ if (!swiper || swiper.destroyed) return;
1963
+ if (e.target !== this) return;
1964
+ swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
1965
+ swiper.onSlideToWrapperTransitionEnd = null;
1966
+ delete swiper.onSlideToWrapperTransitionEnd;
1967
+ swiper.transitionEnd(runCallbacks, direction);
1968
+ };
1969
+ }
1970
+ swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
1971
+ }
1972
+ return true;
1973
+ }
1974
+
1975
+ function slideToLoop(index, speed, runCallbacks, internal) {
1976
+ if (index === void 0) {
1977
+ index = 0;
1978
+ }
1979
+ if (runCallbacks === void 0) {
1980
+ runCallbacks = true;
1981
+ }
1982
+ if (typeof index === 'string') {
1983
+ const indexAsNumber = parseInt(index, 10);
1984
+ index = indexAsNumber;
1985
+ }
1986
+ const swiper = this;
1987
+ if (swiper.destroyed) return;
1988
+ if (typeof speed === 'undefined') {
1989
+ speed = swiper.params.speed;
1990
+ }
1991
+ const gridEnabled = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;
1992
+ let newIndex = index;
1993
+ if (swiper.params.loop) {
1994
+ if (swiper.virtual && swiper.params.virtual.enabled) {
1995
+ // eslint-disable-next-line
1996
+ newIndex = newIndex + swiper.virtual.slidesBefore;
1997
+ } else {
1998
+ let targetSlideIndex;
1999
+ if (gridEnabled) {
2000
+ const slideIndex = newIndex * swiper.params.grid.rows;
2001
+ targetSlideIndex = swiper.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex).column;
2002
+ } else {
2003
+ targetSlideIndex = swiper.getSlideIndexByData(newIndex);
2004
+ }
2005
+ const cols = gridEnabled ? Math.ceil(swiper.slides.length / swiper.params.grid.rows) : swiper.slides.length;
2006
+ const {
2007
+ centeredSlides
2008
+ } = swiper.params;
2009
+ let slidesPerView = swiper.params.slidesPerView;
2010
+ if (slidesPerView === 'auto') {
2011
+ slidesPerView = swiper.slidesPerViewDynamic();
2012
+ } else {
2013
+ slidesPerView = Math.ceil(parseFloat(swiper.params.slidesPerView, 10));
2014
+ if (centeredSlides && slidesPerView % 2 === 0) {
2015
+ slidesPerView = slidesPerView + 1;
2016
+ }
2017
+ }
2018
+ let needLoopFix = cols - targetSlideIndex < slidesPerView;
2019
+ if (centeredSlides) {
2020
+ needLoopFix = needLoopFix || targetSlideIndex < Math.ceil(slidesPerView / 2);
2021
+ }
2022
+ if (internal && centeredSlides && swiper.params.slidesPerView !== 'auto' && !gridEnabled) {
2023
+ needLoopFix = false;
2024
+ }
2025
+ if (needLoopFix) {
2026
+ const direction = centeredSlides ? targetSlideIndex < swiper.activeIndex ? 'prev' : 'next' : targetSlideIndex - swiper.activeIndex - 1 < swiper.params.slidesPerView ? 'next' : 'prev';
2027
+ swiper.loopFix({
2028
+ direction,
2029
+ slideTo: true,
2030
+ activeSlideIndex: direction === 'next' ? targetSlideIndex + 1 : targetSlideIndex - cols + 1,
2031
+ slideRealIndex: direction === 'next' ? swiper.realIndex : undefined
2032
+ });
2033
+ }
2034
+ if (gridEnabled) {
2035
+ const slideIndex = newIndex * swiper.params.grid.rows;
2036
+ newIndex = swiper.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === slideIndex).column;
2037
+ } else {
2038
+ newIndex = swiper.getSlideIndexByData(newIndex);
2039
+ }
2040
+ }
2041
+ }
2042
+ requestAnimationFrame(() => {
2043
+ swiper.slideTo(newIndex, speed, runCallbacks, internal);
2044
+ });
2045
+ return swiper;
2046
+ }
2047
+
2048
+ /* eslint no-unused-vars: "off" */
2049
+ function slideNext(speed, runCallbacks, internal) {
2050
+ if (runCallbacks === void 0) {
2051
+ runCallbacks = true;
2052
+ }
2053
+ const swiper = this;
2054
+ const {
2055
+ enabled,
2056
+ params,
2057
+ animating
2058
+ } = swiper;
2059
+ if (!enabled || swiper.destroyed) return swiper;
2060
+ if (typeof speed === 'undefined') {
2061
+ speed = swiper.params.speed;
2062
+ }
2063
+ let perGroup = params.slidesPerGroup;
2064
+ if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {
2065
+ perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);
2066
+ }
2067
+ const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;
2068
+ const isVirtual = swiper.virtual && params.virtual.enabled;
2069
+ if (params.loop) {
2070
+ if (animating && !isVirtual && params.loopPreventsSliding) return false;
2071
+
2072
+ // Check if loop is disabled
2073
+ const currentSlidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10));
2074
+ if (swiper.slides.length >= currentSlidesPerView) {
2075
+ swiper.loopFix({
2076
+ direction: 'next'
2077
+ });
2078
+ // eslint-disable-next-line
2079
+ swiper._clientLeft = swiper.wrapperEl.clientLeft;
2080
+ }
2081
+ if (swiper.activeIndex === swiper.slides.length - 1 && params.cssMode) {
2082
+ requestAnimationFrame(() => {
2083
+ swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
2084
+ });
2085
+ return true;
2086
+ }
2087
+ }
2088
+ if (params.rewind && swiper.isEnd) {
2089
+ return swiper.slideTo(0, speed, runCallbacks, internal);
2090
+ }
2091
+ return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);
2092
+ }
2093
+
2094
+ /* eslint no-unused-vars: "off" */
2095
+ function slidePrev(speed, runCallbacks, internal) {
2096
+ if (runCallbacks === void 0) {
2097
+ runCallbacks = true;
2098
+ }
2099
+ const swiper = this;
2100
+ const {
2101
+ params,
2102
+ snapGrid,
2103
+ slidesGrid,
2104
+ rtlTranslate,
2105
+ enabled,
2106
+ animating
2107
+ } = swiper;
2108
+ if (!enabled || swiper.destroyed) return swiper;
2109
+ if (typeof speed === 'undefined') {
2110
+ speed = swiper.params.speed;
2111
+ }
2112
+ const isVirtual = swiper.virtual && params.virtual.enabled;
2113
+ if (params.loop) {
2114
+ if (animating && !isVirtual && params.loopPreventsSliding) return false;
2115
+
2116
+ // Check if loop is disabled
2117
+ const currentSlidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10));
2118
+ if (swiper.slides.length >= currentSlidesPerView) {
2119
+ swiper.loopFix({
2120
+ direction: 'prev'
2121
+ });
2122
+ // eslint-disable-next-line
2123
+ swiper._clientLeft = swiper.wrapperEl.clientLeft;
2124
+ }
2125
+ }
2126
+ const translate = rtlTranslate ? swiper.translate : -swiper.translate;
2127
+ function normalize(val) {
2128
+ if (val < 0) return -Math.floor(Math.abs(val));
2129
+ return Math.floor(val);
2130
+ }
2131
+ const normalizedTranslate = normalize(translate);
2132
+ const normalizedSnapGrid = snapGrid.map(val => normalize(val));
2133
+ const isFreeMode = params.freeMode && params.freeMode.enabled;
2134
+ let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
2135
+ if (typeof prevSnap === 'undefined' && (params.cssMode || isFreeMode)) {
2136
+ let prevSnapIndex;
2137
+ snapGrid.forEach((snap, snapIndex) => {
2138
+ if (normalizedTranslate >= snap) {
2139
+ // prevSnap = snap;
2140
+ prevSnapIndex = snapIndex;
2141
+ }
2142
+ });
2143
+ if (typeof prevSnapIndex !== 'undefined') {
2144
+ prevSnap = isFreeMode ? snapGrid[prevSnapIndex] : snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];
2145
+ }
2146
+ }
2147
+ let prevIndex = 0;
2148
+ if (typeof prevSnap !== 'undefined') {
2149
+ prevIndex = slidesGrid.indexOf(prevSnap);
2150
+ if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;
2151
+ if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {
2152
+ prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;
2153
+ prevIndex = Math.max(prevIndex, 0);
2154
+ }
2155
+ }
2156
+ if (params.rewind && swiper.isBeginning) {
2157
+ const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;
2158
+ return swiper.slideTo(lastIndex, speed, runCallbacks, internal);
2159
+ } else if (params.loop && swiper.activeIndex === 0 && params.cssMode) {
2160
+ requestAnimationFrame(() => {
2161
+ swiper.slideTo(prevIndex, speed, runCallbacks, internal);
2162
+ });
2163
+ return true;
2164
+ }
2165
+ return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
2166
+ }
2167
+
2168
+ /* eslint no-unused-vars: "off" */
2169
+ function slideReset(speed, runCallbacks, internal) {
2170
+ if (runCallbacks === void 0) {
2171
+ runCallbacks = true;
2172
+ }
2173
+ const swiper = this;
2174
+ if (swiper.destroyed) return;
2175
+ if (typeof speed === 'undefined') {
2176
+ speed = swiper.params.speed;
2177
+ }
2178
+ return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
2179
+ }
2180
+
2181
+ /* eslint no-unused-vars: "off" */
2182
+ function slideToClosest(speed, runCallbacks, internal, threshold) {
2183
+ if (runCallbacks === void 0) {
2184
+ runCallbacks = true;
2185
+ }
2186
+ if (threshold === void 0) {
2187
+ threshold = 0.5;
2188
+ }
2189
+ const swiper = this;
2190
+ if (swiper.destroyed) return;
2191
+ if (typeof speed === 'undefined') {
2192
+ speed = swiper.params.speed;
2193
+ }
2194
+ let index = swiper.activeIndex;
2195
+ const skip = Math.min(swiper.params.slidesPerGroupSkip, index);
2196
+ const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);
2197
+ const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
2198
+ if (translate >= swiper.snapGrid[snapIndex]) {
2199
+ // The current translate is on or after the current snap index, so the choice
2200
+ // is between the current index and the one after it.
2201
+ const currentSnap = swiper.snapGrid[snapIndex];
2202
+ const nextSnap = swiper.snapGrid[snapIndex + 1];
2203
+ if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {
2204
+ index += swiper.params.slidesPerGroup;
2205
+ }
2206
+ } else {
2207
+ // The current translate is before the current snap index, so the choice
2208
+ // is between the current index and the one before it.
2209
+ const prevSnap = swiper.snapGrid[snapIndex - 1];
2210
+ const currentSnap = swiper.snapGrid[snapIndex];
2211
+ if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {
2212
+ index -= swiper.params.slidesPerGroup;
2213
+ }
2214
+ }
2215
+ index = Math.max(index, 0);
2216
+ index = Math.min(index, swiper.slidesGrid.length - 1);
2217
+ return swiper.slideTo(index, speed, runCallbacks, internal);
2218
+ }
2219
+
2220
+ function slideToClickedSlide() {
2221
+ const swiper = this;
2222
+ if (swiper.destroyed) return;
2223
+ const {
2224
+ params,
2225
+ slidesEl
2226
+ } = swiper;
2227
+ const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
2228
+ let slideToIndex = swiper.getSlideIndexWhenGrid(swiper.clickedIndex);
2229
+ let realIndex;
2230
+ const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;
2231
+ const isGrid = swiper.grid && swiper.params.grid && swiper.params.grid.rows > 1;
2232
+ if (params.loop) {
2233
+ if (swiper.animating) return;
2234
+ realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);
2235
+ if (params.centeredSlides) {
2236
+ swiper.slideToLoop(realIndex);
2237
+ } else if (slideToIndex > (isGrid ? (swiper.slides.length - slidesPerView) / 2 - (swiper.params.grid.rows - 1) : swiper.slides.length - slidesPerView)) {
2238
+ swiper.loopFix();
2239
+ slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]);
2240
+ nextTick(() => {
2241
+ swiper.slideTo(slideToIndex);
2242
+ });
2243
+ } else {
2244
+ swiper.slideTo(slideToIndex);
2245
+ }
2246
+ } else {
2247
+ swiper.slideTo(slideToIndex);
2248
+ }
2249
+ }
2250
+
2251
+ var slide = {
2252
+ slideTo,
2253
+ slideToLoop,
2254
+ slideNext,
2255
+ slidePrev,
2256
+ slideReset,
2257
+ slideToClosest,
2258
+ slideToClickedSlide
2259
+ };
2260
+
2261
+ function loopCreate(slideRealIndex, initial) {
2262
+ const swiper = this;
2263
+ const {
2264
+ params,
2265
+ slidesEl
2266
+ } = swiper;
2267
+ if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;
2268
+ const initSlides = () => {
2269
+ const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);
2270
+ slides.forEach((el, index) => {
2271
+ el.setAttribute('data-swiper-slide-index', index);
2272
+ });
2273
+ };
2274
+ const clearBlankSlides = () => {
2275
+ const slides = elementChildren(slidesEl, `.${params.slideBlankClass}`);
2276
+ slides.forEach(el => {
2277
+ el.remove();
2278
+ });
2279
+ if (slides.length > 0) {
2280
+ swiper.recalcSlides();
2281
+ swiper.updateSlides();
2282
+ }
2283
+ };
2284
+ const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;
2285
+ if (params.loopAddBlankSlides && (params.slidesPerGroup > 1 || gridEnabled)) {
2286
+ clearBlankSlides();
2287
+ }
2288
+ const slidesPerGroup = params.slidesPerGroup * (gridEnabled ? params.grid.rows : 1);
2289
+ const shouldFillGroup = swiper.slides.length % slidesPerGroup !== 0;
2290
+ const shouldFillGrid = gridEnabled && swiper.slides.length % params.grid.rows !== 0;
2291
+ const addBlankSlides = amountOfSlides => {
2292
+ for (let i = 0; i < amountOfSlides; i += 1) {
2293
+ const slideEl = swiper.isElement ? createElement('swiper-slide', [params.slideBlankClass]) : createElement('div', [params.slideClass, params.slideBlankClass]);
2294
+ swiper.slidesEl.append(slideEl);
2295
+ }
2296
+ };
2297
+ if (shouldFillGroup) {
2298
+ if (params.loopAddBlankSlides) {
2299
+ const slidesToAdd = slidesPerGroup - swiper.slides.length % slidesPerGroup;
2300
+ addBlankSlides(slidesToAdd);
2301
+ swiper.recalcSlides();
2302
+ swiper.updateSlides();
2303
+ } else {
2304
+ showWarning('Swiper Loop Warning: The number of slides is not even to slidesPerGroup, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');
2305
+ }
2306
+ initSlides();
2307
+ } else if (shouldFillGrid) {
2308
+ if (params.loopAddBlankSlides) {
2309
+ const slidesToAdd = params.grid.rows - swiper.slides.length % params.grid.rows;
2310
+ addBlankSlides(slidesToAdd);
2311
+ swiper.recalcSlides();
2312
+ swiper.updateSlides();
2313
+ } else {
2314
+ showWarning('Swiper Loop Warning: The number of slides is not even to grid.rows, loop mode may not function properly. You need to add more slides (or make duplicates, or empty slides)');
2315
+ }
2316
+ initSlides();
2317
+ } else {
2318
+ initSlides();
2319
+ }
2320
+ swiper.loopFix({
2321
+ slideRealIndex,
2322
+ direction: params.centeredSlides ? undefined : 'next',
2323
+ initial
2324
+ });
2325
+ }
2326
+
2327
+ function loopFix(_temp) {
2328
+ let {
2329
+ slideRealIndex,
2330
+ slideTo = true,
2331
+ direction,
2332
+ setTranslate,
2333
+ activeSlideIndex,
2334
+ initial,
2335
+ byController,
2336
+ byMousewheel
2337
+ } = _temp === void 0 ? {} : _temp;
2338
+ const swiper = this;
2339
+ if (!swiper.params.loop) return;
2340
+
2341
+ // Disable loop mode if the number of slides is less than slidesPerView
2342
+ const currentSlidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(swiper.params.slidesPerView, 10));
2343
+ if (swiper.slides.length < currentSlidesPerView) {
2344
+ console.warn('Swiper: Loop mode disabled - slides.length < slidesPerView');
2345
+ return;
2346
+ }
2347
+ swiper.emit('beforeLoopFix');
2348
+ const {
2349
+ slides,
2350
+ allowSlidePrev,
2351
+ allowSlideNext,
2352
+ slidesEl,
2353
+ params
2354
+ } = swiper;
2355
+ const {
2356
+ centeredSlides,
2357
+ initialSlide
2358
+ } = params;
2359
+ swiper.allowSlidePrev = true;
2360
+ swiper.allowSlideNext = true;
2361
+ if (swiper.virtual && params.virtual.enabled) {
2362
+ if (slideTo) {
2363
+ if (!params.centeredSlides && swiper.snapIndex === 0) {
2364
+ swiper.slideTo(swiper.virtual.slides.length, 0, false, true);
2365
+ } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {
2366
+ swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);
2367
+ } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {
2368
+ swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);
2369
+ }
2370
+ }
2371
+ swiper.allowSlidePrev = allowSlidePrev;
2372
+ swiper.allowSlideNext = allowSlideNext;
2373
+ swiper.emit('loopFix');
2374
+ return;
2375
+ }
2376
+ let slidesPerView = params.slidesPerView;
2377
+ if (slidesPerView === 'auto') {
2378
+ slidesPerView = swiper.slidesPerViewDynamic();
2379
+ } else {
2380
+ slidesPerView = Math.ceil(parseFloat(params.slidesPerView, 10));
2381
+ if (centeredSlides && slidesPerView % 2 === 0) {
2382
+ slidesPerView = slidesPerView + 1;
2383
+ }
2384
+ }
2385
+ const slidesPerGroup = params.slidesPerGroupAuto ? slidesPerView : params.slidesPerGroup;
2386
+ let loopedSlides = centeredSlides ? Math.max(slidesPerGroup, Math.ceil(slidesPerView / 2)) : slidesPerGroup;
2387
+ if (loopedSlides % slidesPerGroup !== 0) {
2388
+ loopedSlides += slidesPerGroup - loopedSlides % slidesPerGroup;
2389
+ }
2390
+ loopedSlides += params.loopAdditionalSlides;
2391
+ swiper.loopedSlides = loopedSlides;
2392
+ const gridEnabled = swiper.grid && params.grid && params.grid.rows > 1;
2393
+ if (slides.length < slidesPerView + loopedSlides || swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {
2394
+ showWarning('Swiper Loop Warning: The number of slides is not enough for loop mode, it will be disabled or not function properly. You need to add more slides (or make duplicates) or lower the values of slidesPerView and slidesPerGroup parameters');
2395
+ } else if (gridEnabled && params.grid.fill === 'row') {
2396
+ showWarning('Swiper Loop Warning: Loop mode is not compatible with grid.fill = `row`');
2397
+ }
2398
+ const prependSlidesIndexes = [];
2399
+ const appendSlidesIndexes = [];
2400
+ const cols = gridEnabled ? Math.ceil(slides.length / params.grid.rows) : slides.length;
2401
+ const isInitialOverflow = initial && cols - initialSlide < slidesPerView && !centeredSlides;
2402
+ let activeIndex = isInitialOverflow ? initialSlide : swiper.activeIndex;
2403
+ if (typeof activeSlideIndex === 'undefined') {
2404
+ activeSlideIndex = swiper.getSlideIndex(slides.find(el => el.classList.contains(params.slideActiveClass)));
2405
+ } else {
2406
+ activeIndex = activeSlideIndex;
2407
+ }
2408
+ const isNext = direction === 'next' || !direction;
2409
+ const isPrev = direction === 'prev' || !direction;
2410
+ let slidesPrepended = 0;
2411
+ let slidesAppended = 0;
2412
+ const activeColIndex = gridEnabled ? slides[activeSlideIndex].column : activeSlideIndex;
2413
+ const activeColIndexWithShift = activeColIndex + (centeredSlides && typeof setTranslate === 'undefined' ? -slidesPerView / 2 + 0.5 : 0);
2414
+ // prepend last slides before start
2415
+ if (activeColIndexWithShift < loopedSlides) {
2416
+ slidesPrepended = Math.max(loopedSlides - activeColIndexWithShift, slidesPerGroup);
2417
+ for (let i = 0; i < loopedSlides - activeColIndexWithShift; i += 1) {
2418
+ const index = i - Math.floor(i / cols) * cols;
2419
+ if (gridEnabled) {
2420
+ const colIndexToPrepend = cols - index - 1;
2421
+ for (let i = slides.length - 1; i >= 0; i -= 1) {
2422
+ if (slides[i].column === colIndexToPrepend) prependSlidesIndexes.push(i);
2423
+ }
2424
+ // slides.forEach((slide, slideIndex) => {
2425
+ // if (slide.column === colIndexToPrepend) prependSlidesIndexes.push(slideIndex);
2426
+ // });
2427
+ } else {
2428
+ prependSlidesIndexes.push(cols - index - 1);
2429
+ }
2430
+ }
2431
+ } else if (activeColIndexWithShift + slidesPerView > cols - loopedSlides) {
2432
+ slidesAppended = Math.max(activeColIndexWithShift - (cols - loopedSlides * 2), slidesPerGroup);
2433
+ if (isInitialOverflow) {
2434
+ slidesAppended = Math.max(slidesAppended, slidesPerView - cols + initialSlide + 1);
2435
+ }
2436
+ for (let i = 0; i < slidesAppended; i += 1) {
2437
+ const index = i - Math.floor(i / cols) * cols;
2438
+ if (gridEnabled) {
2439
+ slides.forEach((slide, slideIndex) => {
2440
+ if (slide.column === index) appendSlidesIndexes.push(slideIndex);
2441
+ });
2442
+ } else {
2443
+ appendSlidesIndexes.push(index);
2444
+ }
2445
+ }
2446
+ }
2447
+ swiper.__preventObserver__ = true;
2448
+ requestAnimationFrame(() => {
2449
+ swiper.__preventObserver__ = false;
2450
+ });
2451
+ if (swiper.params.effect === 'cards' && slides.length < slidesPerView + loopedSlides * 2) {
2452
+ if (appendSlidesIndexes.includes(activeSlideIndex)) {
2453
+ appendSlidesIndexes.splice(appendSlidesIndexes.indexOf(activeSlideIndex), 1);
2454
+ }
2455
+ if (prependSlidesIndexes.includes(activeSlideIndex)) {
2456
+ prependSlidesIndexes.splice(prependSlidesIndexes.indexOf(activeSlideIndex), 1);
2457
+ }
2458
+ }
2459
+ if (isPrev) {
2460
+ prependSlidesIndexes.forEach(index => {
2461
+ slides[index].swiperLoopMoveDOM = true;
2462
+ slidesEl.prepend(slides[index]);
2463
+ slides[index].swiperLoopMoveDOM = false;
2464
+ });
2465
+ }
2466
+ if (isNext) {
2467
+ appendSlidesIndexes.forEach(index => {
2468
+ slides[index].swiperLoopMoveDOM = true;
2469
+ slidesEl.append(slides[index]);
2470
+ slides[index].swiperLoopMoveDOM = false;
2471
+ });
2472
+ }
2473
+ swiper.recalcSlides();
2474
+ if (params.slidesPerView === 'auto') {
2475
+ swiper.updateSlides();
2476
+ } else if (gridEnabled && (prependSlidesIndexes.length > 0 && isPrev || appendSlidesIndexes.length > 0 && isNext)) {
2477
+ swiper.slides.forEach((slide, slideIndex) => {
2478
+ swiper.grid.updateSlide(slideIndex, slide, swiper.slides);
2479
+ });
2480
+ }
2481
+ if (params.watchSlidesProgress) {
2482
+ swiper.updateSlidesOffset();
2483
+ }
2484
+ if (slideTo) {
2485
+ if (prependSlidesIndexes.length > 0 && isPrev) {
2486
+ if (typeof slideRealIndex === 'undefined') {
2487
+ const currentSlideTranslate = swiper.slidesGrid[activeIndex];
2488
+ const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];
2489
+ const diff = newSlideTranslate - currentSlideTranslate;
2490
+ if (byMousewheel) {
2491
+ swiper.setTranslate(swiper.translate - diff);
2492
+ } else {
2493
+ swiper.slideTo(activeIndex + Math.ceil(slidesPrepended), 0, false, true);
2494
+ if (setTranslate) {
2495
+ swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;
2496
+ swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;
2497
+ }
2498
+ }
2499
+ } else {
2500
+ if (setTranslate) {
2501
+ const shift = gridEnabled ? prependSlidesIndexes.length / params.grid.rows : prependSlidesIndexes.length;
2502
+ swiper.slideTo(swiper.activeIndex + shift, 0, false, true);
2503
+ swiper.touchEventsData.currentTranslate = swiper.translate;
2504
+ }
2505
+ }
2506
+ } else if (appendSlidesIndexes.length > 0 && isNext) {
2507
+ if (typeof slideRealIndex === 'undefined') {
2508
+ const currentSlideTranslate = swiper.slidesGrid[activeIndex];
2509
+ const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];
2510
+ const diff = newSlideTranslate - currentSlideTranslate;
2511
+ if (byMousewheel) {
2512
+ swiper.setTranslate(swiper.translate - diff);
2513
+ } else {
2514
+ swiper.slideTo(activeIndex - slidesAppended, 0, false, true);
2515
+ if (setTranslate) {
2516
+ swiper.touchEventsData.startTranslate = swiper.touchEventsData.startTranslate - diff;
2517
+ swiper.touchEventsData.currentTranslate = swiper.touchEventsData.currentTranslate - diff;
2518
+ }
2519
+ }
2520
+ } else {
2521
+ const shift = gridEnabled ? appendSlidesIndexes.length / params.grid.rows : appendSlidesIndexes.length;
2522
+ swiper.slideTo(swiper.activeIndex - shift, 0, false, true);
2523
+ }
2524
+ }
2525
+ }
2526
+ swiper.allowSlidePrev = allowSlidePrev;
2527
+ swiper.allowSlideNext = allowSlideNext;
2528
+ if (swiper.controller && swiper.controller.control && !byController) {
2529
+ const loopParams = {
2530
+ slideRealIndex,
2531
+ direction,
2532
+ setTranslate,
2533
+ activeSlideIndex,
2534
+ byController: true
2535
+ };
2536
+ if (Array.isArray(swiper.controller.control)) {
2537
+ swiper.controller.control.forEach(c => {
2538
+ if (!c.destroyed && c.params.loop) c.loopFix({
2539
+ ...loopParams,
2540
+ slideTo: c.params.slidesPerView === params.slidesPerView ? slideTo : false
2541
+ });
2542
+ });
2543
+ } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {
2544
+ swiper.controller.control.loopFix({
2545
+ ...loopParams,
2546
+ slideTo: swiper.controller.control.params.slidesPerView === params.slidesPerView ? slideTo : false
2547
+ });
2548
+ }
2549
+ }
2550
+ swiper.emit('loopFix');
2551
+ }
2552
+
2553
+ function loopDestroy() {
2554
+ const swiper = this;
2555
+ const {
2556
+ params,
2557
+ slidesEl
2558
+ } = swiper;
2559
+ if (!params.loop || !slidesEl || swiper.virtual && swiper.params.virtual.enabled) return;
2560
+ swiper.recalcSlides();
2561
+ const newSlidesOrder = [];
2562
+ swiper.slides.forEach(slideEl => {
2563
+ const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;
2564
+ newSlidesOrder[index] = slideEl;
2565
+ });
2566
+ swiper.slides.forEach(slideEl => {
2567
+ slideEl.removeAttribute('data-swiper-slide-index');
2568
+ });
2569
+ newSlidesOrder.forEach(slideEl => {
2570
+ slidesEl.append(slideEl);
2571
+ });
2572
+ swiper.recalcSlides();
2573
+ swiper.slideTo(swiper.realIndex, 0);
2574
+ }
2575
+
2576
+ var loop = {
2577
+ loopCreate,
2578
+ loopFix,
2579
+ loopDestroy
2580
+ };
2581
+
2582
+ function setGrabCursor(moving) {
2583
+ const swiper = this;
2584
+ if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;
2585
+ const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;
2586
+ if (swiper.isElement) {
2587
+ swiper.__preventObserver__ = true;
2588
+ }
2589
+ el.style.cursor = 'move';
2590
+ el.style.cursor = moving ? 'grabbing' : 'grab';
2591
+ if (swiper.isElement) {
2592
+ requestAnimationFrame(() => {
2593
+ swiper.__preventObserver__ = false;
2594
+ });
2595
+ }
2596
+ }
2597
+
2598
+ function unsetGrabCursor() {
2599
+ const swiper = this;
2600
+ if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {
2601
+ return;
2602
+ }
2603
+ if (swiper.isElement) {
2604
+ swiper.__preventObserver__ = true;
2605
+ }
2606
+ swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';
2607
+ if (swiper.isElement) {
2608
+ requestAnimationFrame(() => {
2609
+ swiper.__preventObserver__ = false;
2610
+ });
2611
+ }
2612
+ }
2613
+
2614
+ var grabCursor = {
2615
+ setGrabCursor,
2616
+ unsetGrabCursor
2617
+ };
2618
+
2619
+ // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd
2620
+ function closestElement(selector, base) {
2621
+ if (base === void 0) {
2622
+ base = this;
2623
+ }
2624
+ function __closestFrom(el) {
2625
+ if (!el || el === getDocument() || el === getWindow()) return null;
2626
+ if (el.assignedSlot) el = el.assignedSlot;
2627
+ const found = el.closest(selector);
2628
+ if (!found && !el.getRootNode) {
2629
+ return null;
2630
+ }
2631
+ return found || __closestFrom(el.getRootNode().host);
2632
+ }
2633
+ return __closestFrom(base);
2634
+ }
2635
+ function preventEdgeSwipe(swiper, event, startX) {
2636
+ const window = getWindow();
2637
+ const {
2638
+ params
2639
+ } = swiper;
2640
+ const edgeSwipeDetection = params.edgeSwipeDetection;
2641
+ const edgeSwipeThreshold = params.edgeSwipeThreshold;
2642
+ if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {
2643
+ if (edgeSwipeDetection === 'prevent') {
2644
+ event.preventDefault();
2645
+ return true;
2646
+ }
2647
+ return false;
2648
+ }
2649
+ return true;
2650
+ }
2651
+ function onTouchStart(event) {
2652
+ const swiper = this;
2653
+ const document = getDocument();
2654
+ let e = event;
2655
+ if (e.originalEvent) e = e.originalEvent;
2656
+ const data = swiper.touchEventsData;
2657
+ if (e.type === 'pointerdown') {
2658
+ if (data.pointerId !== null && data.pointerId !== e.pointerId) {
2659
+ return;
2660
+ }
2661
+ data.pointerId = e.pointerId;
2662
+ } else if (e.type === 'touchstart' && e.targetTouches.length === 1) {
2663
+ data.touchId = e.targetTouches[0].identifier;
2664
+ }
2665
+ if (e.type === 'touchstart') {
2666
+ // don't proceed touch event
2667
+ preventEdgeSwipe(swiper, e, e.targetTouches[0].pageX);
2668
+ return;
2669
+ }
2670
+ const {
2671
+ params,
2672
+ touches,
2673
+ enabled
2674
+ } = swiper;
2675
+ if (!enabled) return;
2676
+ if (!params.simulateTouch && e.pointerType === 'mouse') return;
2677
+ if (swiper.animating && params.preventInteractionOnTransition) {
2678
+ return;
2679
+ }
2680
+ if (!swiper.animating && params.cssMode && params.loop) {
2681
+ swiper.loopFix();
2682
+ }
2683
+ let targetEl = e.target;
2684
+ if (params.touchEventsTarget === 'wrapper') {
2685
+ if (!elementIsChildOf(targetEl, swiper.wrapperEl)) return;
2686
+ }
2687
+ if ('which' in e && e.which === 3) return;
2688
+ if ('button' in e && e.button > 0) return;
2689
+ if (data.isTouched && data.isMoved) return;
2690
+
2691
+ // change target el for shadow root component
2692
+ const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';
2693
+ // eslint-disable-next-line
2694
+ const eventPath = e.composedPath ? e.composedPath() : e.path;
2695
+ if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {
2696
+ targetEl = eventPath[0];
2697
+ }
2698
+ const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;
2699
+ const isTargetShadow = !!(e.target && e.target.shadowRoot);
2700
+
2701
+ // use closestElement for shadow root element to get the actual closest for nested shadow root element
2702
+ if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {
2703
+ swiper.allowClick = true;
2704
+ return;
2705
+ }
2706
+ if (params.swipeHandler) {
2707
+ if (!targetEl.closest(params.swipeHandler)) return;
2708
+ }
2709
+ touches.currentX = e.pageX;
2710
+ touches.currentY = e.pageY;
2711
+ const startX = touches.currentX;
2712
+ const startY = touches.currentY;
2713
+
2714
+ // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore
2715
+
2716
+ if (!preventEdgeSwipe(swiper, e, startX)) {
2717
+ return;
2718
+ }
2719
+ Object.assign(data, {
2720
+ isTouched: true,
2721
+ isMoved: false,
2722
+ allowTouchCallbacks: true,
2723
+ isScrolling: undefined,
2724
+ startMoving: undefined
2725
+ });
2726
+ touches.startX = startX;
2727
+ touches.startY = startY;
2728
+ data.touchStartTime = now();
2729
+ swiper.allowClick = true;
2730
+ swiper.updateSize();
2731
+ swiper.swipeDirection = undefined;
2732
+ if (params.threshold > 0) data.allowThresholdMove = false;
2733
+ let preventDefault = true;
2734
+ if (targetEl.matches(data.focusableElements)) {
2735
+ preventDefault = false;
2736
+ if (targetEl.nodeName === 'SELECT') {
2737
+ data.isTouched = false;
2738
+ }
2739
+ }
2740
+ if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl && (e.pointerType === 'mouse' || e.pointerType !== 'mouse' && !targetEl.matches(data.focusableElements))) {
2741
+ document.activeElement.blur();
2742
+ }
2743
+ const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
2744
+ if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {
2745
+ e.preventDefault();
2746
+ }
2747
+ if (params.freeMode && params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {
2748
+ swiper.freeMode.onTouchStart();
2749
+ }
2750
+ swiper.emit('touchStart', e);
2751
+ }
2752
+
2753
+ function onTouchMove(event) {
2754
+ const document = getDocument();
2755
+ const swiper = this;
2756
+ const data = swiper.touchEventsData;
2757
+ const {
2758
+ params,
2759
+ touches,
2760
+ rtlTranslate: rtl,
2761
+ enabled
2762
+ } = swiper;
2763
+ if (!enabled) return;
2764
+ if (!params.simulateTouch && event.pointerType === 'mouse') return;
2765
+ let e = event;
2766
+ if (e.originalEvent) e = e.originalEvent;
2767
+ if (e.type === 'pointermove') {
2768
+ if (data.touchId !== null) return; // return from pointer if we use touch
2769
+ const id = e.pointerId;
2770
+ if (id !== data.pointerId) return;
2771
+ }
2772
+ let targetTouch;
2773
+ if (e.type === 'touchmove') {
2774
+ targetTouch = [...e.changedTouches].find(t => t.identifier === data.touchId);
2775
+ if (!targetTouch || targetTouch.identifier !== data.touchId) return;
2776
+ } else {
2777
+ targetTouch = e;
2778
+ }
2779
+ if (!data.isTouched) {
2780
+ if (data.startMoving && data.isScrolling) {
2781
+ swiper.emit('touchMoveOpposite', e);
2782
+ }
2783
+ return;
2784
+ }
2785
+ const pageX = targetTouch.pageX;
2786
+ const pageY = targetTouch.pageY;
2787
+ if (e.preventedByNestedSwiper) {
2788
+ touches.startX = pageX;
2789
+ touches.startY = pageY;
2790
+ return;
2791
+ }
2792
+ if (!swiper.allowTouchMove) {
2793
+ if (!e.target.matches(data.focusableElements)) {
2794
+ swiper.allowClick = false;
2795
+ }
2796
+ if (data.isTouched) {
2797
+ Object.assign(touches, {
2798
+ startX: pageX,
2799
+ startY: pageY,
2800
+ currentX: pageX,
2801
+ currentY: pageY
2802
+ });
2803
+ data.touchStartTime = now();
2804
+ }
2805
+ return;
2806
+ }
2807
+ if (params.touchReleaseOnEdges && !params.loop) {
2808
+ if (swiper.isVertical()) {
2809
+ // Vertical
2810
+ if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {
2811
+ data.isTouched = false;
2812
+ data.isMoved = false;
2813
+ return;
2814
+ }
2815
+ } else if (rtl && (pageX > touches.startX && -swiper.translate <= swiper.maxTranslate() || pageX < touches.startX && -swiper.translate >= swiper.minTranslate())) {
2816
+ return;
2817
+ } else if (!rtl && (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate())) {
2818
+ return;
2819
+ }
2820
+ }
2821
+ if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== e.target && e.pointerType !== 'mouse') {
2822
+ document.activeElement.blur();
2823
+ }
2824
+ if (document.activeElement) {
2825
+ if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {
2826
+ data.isMoved = true;
2827
+ swiper.allowClick = false;
2828
+ return;
2829
+ }
2830
+ }
2831
+ if (data.allowTouchCallbacks) {
2832
+ swiper.emit('touchMove', e);
2833
+ }
2834
+ touches.previousX = touches.currentX;
2835
+ touches.previousY = touches.currentY;
2836
+ touches.currentX = pageX;
2837
+ touches.currentY = pageY;
2838
+ const diffX = touches.currentX - touches.startX;
2839
+ const diffY = touches.currentY - touches.startY;
2840
+ if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;
2841
+ if (typeof data.isScrolling === 'undefined') {
2842
+ let touchAngle;
2843
+ if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {
2844
+ data.isScrolling = false;
2845
+ } else {
2846
+ // eslint-disable-next-line
2847
+ if (diffX * diffX + diffY * diffY >= 25) {
2848
+ touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;
2849
+ data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;
2850
+ }
2851
+ }
2852
+ }
2853
+ if (data.isScrolling) {
2854
+ swiper.emit('touchMoveOpposite', e);
2855
+ }
2856
+ if (typeof data.startMoving === 'undefined') {
2857
+ if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
2858
+ data.startMoving = true;
2859
+ }
2860
+ }
2861
+ if (data.isScrolling || e.type === 'touchmove' && data.preventTouchMoveFromPointerMove) {
2862
+ data.isTouched = false;
2863
+ return;
2864
+ }
2865
+ if (!data.startMoving) {
2866
+ return;
2867
+ }
2868
+ swiper.allowClick = false;
2869
+ if (!params.cssMode && e.cancelable) {
2870
+ e.preventDefault();
2871
+ }
2872
+ if (params.touchMoveStopPropagation && !params.nested) {
2873
+ e.stopPropagation();
2874
+ }
2875
+ let diff = swiper.isHorizontal() ? diffX : diffY;
2876
+ let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;
2877
+ if (params.oneWayMovement) {
2878
+ diff = Math.abs(diff) * (rtl ? 1 : -1);
2879
+ touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);
2880
+ }
2881
+ touches.diff = diff;
2882
+ diff *= params.touchRatio;
2883
+ if (rtl) {
2884
+ diff = -diff;
2885
+ touchesDiff = -touchesDiff;
2886
+ }
2887
+ const prevTouchesDirection = swiper.touchesDirection;
2888
+ swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
2889
+ swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';
2890
+ const isLoop = swiper.params.loop && !params.cssMode;
2891
+ const allowLoopFix = swiper.touchesDirection === 'next' && swiper.allowSlideNext || swiper.touchesDirection === 'prev' && swiper.allowSlidePrev;
2892
+ if (!data.isMoved) {
2893
+ if (isLoop && allowLoopFix) {
2894
+ swiper.loopFix({
2895
+ direction: swiper.swipeDirection
2896
+ });
2897
+ }
2898
+ data.startTranslate = swiper.getTranslate();
2899
+ swiper.setTransition(0);
2900
+ if (swiper.animating) {
2901
+ const evt = new window.CustomEvent('transitionend', {
2902
+ bubbles: true,
2903
+ cancelable: true,
2904
+ detail: {
2905
+ bySwiperTouchMove: true
2906
+ }
2907
+ });
2908
+ swiper.wrapperEl.dispatchEvent(evt);
2909
+ }
2910
+ data.allowMomentumBounce = false;
2911
+ // Grab Cursor
2912
+ if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
2913
+ swiper.setGrabCursor(true);
2914
+ }
2915
+ swiper.emit('sliderFirstMove', e);
2916
+ }
2917
+ let loopFixed;
2918
+ new Date().getTime();
2919
+ if (params._loopSwapReset !== false && data.isMoved && data.allowThresholdMove && prevTouchesDirection !== swiper.touchesDirection && isLoop && allowLoopFix && Math.abs(diff) >= 1) {
2920
+ Object.assign(touches, {
2921
+ startX: pageX,
2922
+ startY: pageY,
2923
+ currentX: pageX,
2924
+ currentY: pageY,
2925
+ startTranslate: data.currentTranslate
2926
+ });
2927
+ data.loopSwapReset = true;
2928
+ data.startTranslate = data.currentTranslate;
2929
+ return;
2930
+ }
2931
+ swiper.emit('sliderMove', e);
2932
+ data.isMoved = true;
2933
+ data.currentTranslate = diff + data.startTranslate;
2934
+ let disableParentSwiper = true;
2935
+ let resistanceRatio = params.resistanceRatio;
2936
+ if (params.touchReleaseOnEdges) {
2937
+ resistanceRatio = 0;
2938
+ }
2939
+ if (diff > 0) {
2940
+ if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.slidesSizesGrid[swiper.activeIndex + 1] - (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.activeIndex + 1] + swiper.params.spaceBetween : 0) - swiper.params.spaceBetween : swiper.minTranslate())) {
2941
+ swiper.loopFix({
2942
+ direction: 'prev',
2943
+ setTranslate: true,
2944
+ activeSlideIndex: 0
2945
+ });
2946
+ }
2947
+ if (data.currentTranslate > swiper.minTranslate()) {
2948
+ disableParentSwiper = false;
2949
+ if (params.resistance) {
2950
+ data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;
2951
+ }
2952
+ }
2953
+ } else if (diff < 0) {
2954
+ if (isLoop && allowLoopFix && !loopFixed && data.allowThresholdMove && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween + (params.slidesPerView !== 'auto' && swiper.slides.length - params.slidesPerView >= 2 ? swiper.slidesSizesGrid[swiper.slidesSizesGrid.length - 1] + swiper.params.spaceBetween : 0) : swiper.maxTranslate())) {
2955
+ swiper.loopFix({
2956
+ direction: 'next',
2957
+ setTranslate: true,
2958
+ activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))
2959
+ });
2960
+ }
2961
+ if (data.currentTranslate < swiper.maxTranslate()) {
2962
+ disableParentSwiper = false;
2963
+ if (params.resistance) {
2964
+ data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;
2965
+ }
2966
+ }
2967
+ }
2968
+ if (disableParentSwiper) {
2969
+ e.preventedByNestedSwiper = true;
2970
+ }
2971
+
2972
+ // Directions locks
2973
+ if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {
2974
+ data.currentTranslate = data.startTranslate;
2975
+ }
2976
+ if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {
2977
+ data.currentTranslate = data.startTranslate;
2978
+ }
2979
+ if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {
2980
+ data.currentTranslate = data.startTranslate;
2981
+ }
2982
+
2983
+ // Threshold
2984
+ if (params.threshold > 0) {
2985
+ if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
2986
+ if (!data.allowThresholdMove) {
2987
+ data.allowThresholdMove = true;
2988
+ touches.startX = touches.currentX;
2989
+ touches.startY = touches.currentY;
2990
+ data.currentTranslate = data.startTranslate;
2991
+ touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
2992
+ return;
2993
+ }
2994
+ } else {
2995
+ data.currentTranslate = data.startTranslate;
2996
+ return;
2997
+ }
2998
+ }
2999
+ if (!params.followFinger || params.cssMode) return;
3000
+
3001
+ // Update active index in free mode
3002
+ if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {
3003
+ swiper.updateActiveIndex();
3004
+ swiper.updateSlidesClasses();
3005
+ }
3006
+ if (params.freeMode && params.freeMode.enabled && swiper.freeMode) {
3007
+ swiper.freeMode.onTouchMove();
3008
+ }
3009
+ // Update progress
3010
+ swiper.updateProgress(data.currentTranslate);
3011
+ // Update translate
3012
+ swiper.setTranslate(data.currentTranslate);
3013
+ }
3014
+
3015
+ function onTouchEnd(event) {
3016
+ const swiper = this;
3017
+ const data = swiper.touchEventsData;
3018
+ let e = event;
3019
+ if (e.originalEvent) e = e.originalEvent;
3020
+ let targetTouch;
3021
+ const isTouchEvent = e.type === 'touchend' || e.type === 'touchcancel';
3022
+ if (!isTouchEvent) {
3023
+ if (data.touchId !== null) return; // return from pointer if we use touch
3024
+ if (e.pointerId !== data.pointerId) return;
3025
+ targetTouch = e;
3026
+ } else {
3027
+ targetTouch = [...e.changedTouches].find(t => t.identifier === data.touchId);
3028
+ if (!targetTouch || targetTouch.identifier !== data.touchId) return;
3029
+ }
3030
+ if (['pointercancel', 'pointerout', 'pointerleave', 'contextmenu'].includes(e.type)) {
3031
+ const proceed = ['pointercancel', 'contextmenu'].includes(e.type) && (swiper.browser.isSafari || swiper.browser.isWebView);
3032
+ if (!proceed) {
3033
+ return;
3034
+ }
3035
+ }
3036
+ data.pointerId = null;
3037
+ data.touchId = null;
3038
+ const {
3039
+ params,
3040
+ touches,
3041
+ rtlTranslate: rtl,
3042
+ slidesGrid,
3043
+ enabled
3044
+ } = swiper;
3045
+ if (!enabled) return;
3046
+ if (!params.simulateTouch && e.pointerType === 'mouse') return;
3047
+ if (data.allowTouchCallbacks) {
3048
+ swiper.emit('touchEnd', e);
3049
+ }
3050
+ data.allowTouchCallbacks = false;
3051
+ if (!data.isTouched) {
3052
+ if (data.isMoved && params.grabCursor) {
3053
+ swiper.setGrabCursor(false);
3054
+ }
3055
+ data.isMoved = false;
3056
+ data.startMoving = false;
3057
+ return;
3058
+ }
3059
+
3060
+ // Return Grab Cursor
3061
+ if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
3062
+ swiper.setGrabCursor(false);
3063
+ }
3064
+
3065
+ // Time diff
3066
+ const touchEndTime = now();
3067
+ const timeDiff = touchEndTime - data.touchStartTime;
3068
+
3069
+ // Tap, doubleTap, Click
3070
+ if (swiper.allowClick) {
3071
+ const pathTree = e.path || e.composedPath && e.composedPath();
3072
+ swiper.updateClickedSlide(pathTree && pathTree[0] || e.target, pathTree);
3073
+ swiper.emit('tap click', e);
3074
+ if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {
3075
+ swiper.emit('doubleTap doubleClick', e);
3076
+ }
3077
+ }
3078
+ data.lastClickTime = now();
3079
+ nextTick(() => {
3080
+ if (!swiper.destroyed) swiper.allowClick = true;
3081
+ });
3082
+ if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 && !data.loopSwapReset || data.currentTranslate === data.startTranslate && !data.loopSwapReset) {
3083
+ data.isTouched = false;
3084
+ data.isMoved = false;
3085
+ data.startMoving = false;
3086
+ return;
3087
+ }
3088
+ data.isTouched = false;
3089
+ data.isMoved = false;
3090
+ data.startMoving = false;
3091
+ let currentPos;
3092
+ if (params.followFinger) {
3093
+ currentPos = rtl ? swiper.translate : -swiper.translate;
3094
+ } else {
3095
+ currentPos = -data.currentTranslate;
3096
+ }
3097
+ if (params.cssMode) {
3098
+ return;
3099
+ }
3100
+ if (params.freeMode && params.freeMode.enabled) {
3101
+ swiper.freeMode.onTouchEnd({
3102
+ currentPos
3103
+ });
3104
+ return;
3105
+ }
3106
+
3107
+ // Find current slide
3108
+ const swipeToLast = currentPos >= -swiper.maxTranslate() && !swiper.params.loop;
3109
+ let stopIndex = 0;
3110
+ let groupSize = swiper.slidesSizesGrid[0];
3111
+ for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {
3112
+ const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
3113
+ if (typeof slidesGrid[i + increment] !== 'undefined') {
3114
+ if (swipeToLast || currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {
3115
+ stopIndex = i;
3116
+ groupSize = slidesGrid[i + increment] - slidesGrid[i];
3117
+ }
3118
+ } else if (swipeToLast || currentPos >= slidesGrid[i]) {
3119
+ stopIndex = i;
3120
+ groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
3121
+ }
3122
+ }
3123
+ let rewindFirstIndex = null;
3124
+ let rewindLastIndex = null;
3125
+ if (params.rewind) {
3126
+ if (swiper.isBeginning) {
3127
+ rewindLastIndex = params.virtual && params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;
3128
+ } else if (swiper.isEnd) {
3129
+ rewindFirstIndex = 0;
3130
+ }
3131
+ }
3132
+ // Find current slide size
3133
+ const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
3134
+ const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;
3135
+ if (timeDiff > params.longSwipesMs) {
3136
+ // Long touches
3137
+ if (!params.longSwipes) {
3138
+ swiper.slideTo(swiper.activeIndex);
3139
+ return;
3140
+ }
3141
+ if (swiper.swipeDirection === 'next') {
3142
+ if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);
3143
+ }
3144
+ if (swiper.swipeDirection === 'prev') {
3145
+ if (ratio > 1 - params.longSwipesRatio) {
3146
+ swiper.slideTo(stopIndex + increment);
3147
+ } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {
3148
+ swiper.slideTo(rewindLastIndex);
3149
+ } else {
3150
+ swiper.slideTo(stopIndex);
3151
+ }
3152
+ }
3153
+ } else {
3154
+ // Short swipes
3155
+ if (!params.shortSwipes) {
3156
+ swiper.slideTo(swiper.activeIndex);
3157
+ return;
3158
+ }
3159
+ const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);
3160
+ if (!isNavButtonTarget) {
3161
+ if (swiper.swipeDirection === 'next') {
3162
+ swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);
3163
+ }
3164
+ if (swiper.swipeDirection === 'prev') {
3165
+ swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);
3166
+ }
3167
+ } else if (e.target === swiper.navigation.nextEl) {
3168
+ swiper.slideTo(stopIndex + increment);
3169
+ } else {
3170
+ swiper.slideTo(stopIndex);
3171
+ }
3172
+ }
3173
+ }
3174
+
3175
+ function onResize() {
3176
+ const swiper = this;
3177
+ const {
3178
+ params,
3179
+ el
3180
+ } = swiper;
3181
+ if (el && el.offsetWidth === 0) return;
3182
+
3183
+ // Breakpoints
3184
+ if (params.breakpoints) {
3185
+ swiper.setBreakpoint();
3186
+ }
3187
+
3188
+ // Save locks
3189
+ const {
3190
+ allowSlideNext,
3191
+ allowSlidePrev,
3192
+ snapGrid
3193
+ } = swiper;
3194
+ const isVirtual = swiper.virtual && swiper.params.virtual.enabled;
3195
+
3196
+ // Disable locks on resize
3197
+ swiper.allowSlideNext = true;
3198
+ swiper.allowSlidePrev = true;
3199
+ swiper.updateSize();
3200
+ swiper.updateSlides();
3201
+ swiper.updateSlidesClasses();
3202
+ const isVirtualLoop = isVirtual && params.loop;
3203
+ if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {
3204
+ swiper.slideTo(swiper.slides.length - 1, 0, false, true);
3205
+ } else {
3206
+ if (swiper.params.loop && !isVirtual) {
3207
+ swiper.slideToLoop(swiper.realIndex, 0, false, true);
3208
+ } else {
3209
+ swiper.slideTo(swiper.activeIndex, 0, false, true);
3210
+ }
3211
+ }
3212
+ if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
3213
+ clearTimeout(swiper.autoplay.resizeTimeout);
3214
+ swiper.autoplay.resizeTimeout = setTimeout(() => {
3215
+ if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
3216
+ swiper.autoplay.resume();
3217
+ }
3218
+ }, 500);
3219
+ }
3220
+ // Return locks after resize
3221
+ swiper.allowSlidePrev = allowSlidePrev;
3222
+ swiper.allowSlideNext = allowSlideNext;
3223
+ if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
3224
+ swiper.checkOverflow();
3225
+ }
3226
+ }
3227
+
3228
+ function onClick(e) {
3229
+ const swiper = this;
3230
+ if (!swiper.enabled) return;
3231
+ if (!swiper.allowClick) {
3232
+ if (swiper.params.preventClicks) e.preventDefault();
3233
+ if (swiper.params.preventClicksPropagation && swiper.animating) {
3234
+ e.stopPropagation();
3235
+ e.stopImmediatePropagation();
3236
+ }
3237
+ }
3238
+ }
3239
+
3240
+ function onScroll() {
3241
+ const swiper = this;
3242
+ const {
3243
+ wrapperEl,
3244
+ rtlTranslate,
3245
+ enabled
3246
+ } = swiper;
3247
+ if (!enabled) return;
3248
+ swiper.previousTranslate = swiper.translate;
3249
+ if (swiper.isHorizontal()) {
3250
+ swiper.translate = -wrapperEl.scrollLeft;
3251
+ } else {
3252
+ swiper.translate = -wrapperEl.scrollTop;
3253
+ }
3254
+ // eslint-disable-next-line
3255
+ if (swiper.translate === 0) swiper.translate = 0;
3256
+ swiper.updateActiveIndex();
3257
+ swiper.updateSlidesClasses();
3258
+ let newProgress;
3259
+ const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
3260
+ if (translatesDiff === 0) {
3261
+ newProgress = 0;
3262
+ } else {
3263
+ newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;
3264
+ }
3265
+ if (newProgress !== swiper.progress) {
3266
+ swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);
3267
+ }
3268
+ swiper.emit('setTranslate', swiper.translate, false);
3269
+ }
3270
+
3271
+ function onLoad(e) {
3272
+ const swiper = this;
3273
+ processLazyPreloader(swiper, e.target);
3274
+ if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {
3275
+ return;
3276
+ }
3277
+ swiper.update();
3278
+ }
3279
+
3280
+ function onDocumentTouchStart() {
3281
+ const swiper = this;
3282
+ if (swiper.documentTouchHandlerProceeded) return;
3283
+ swiper.documentTouchHandlerProceeded = true;
3284
+ if (swiper.params.touchReleaseOnEdges) {
3285
+ swiper.el.style.touchAction = 'auto';
3286
+ }
3287
+ }
3288
+
3289
+ const events = (swiper, method) => {
3290
+ const document = getDocument();
3291
+ const {
3292
+ params,
3293
+ el,
3294
+ wrapperEl,
3295
+ device
3296
+ } = swiper;
3297
+ const capture = !!params.nested;
3298
+ const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';
3299
+ const swiperMethod = method;
3300
+ if (!el || typeof el === 'string') return;
3301
+
3302
+ // Touch Events
3303
+ document[domMethod]('touchstart', swiper.onDocumentTouchStart, {
3304
+ passive: false,
3305
+ capture
3306
+ });
3307
+ el[domMethod]('touchstart', swiper.onTouchStart, {
3308
+ passive: false
3309
+ });
3310
+ el[domMethod]('pointerdown', swiper.onTouchStart, {
3311
+ passive: false
3312
+ });
3313
+ document[domMethod]('touchmove', swiper.onTouchMove, {
3314
+ passive: false,
3315
+ capture
3316
+ });
3317
+ document[domMethod]('pointermove', swiper.onTouchMove, {
3318
+ passive: false,
3319
+ capture
3320
+ });
3321
+ document[domMethod]('touchend', swiper.onTouchEnd, {
3322
+ passive: true
3323
+ });
3324
+ document[domMethod]('pointerup', swiper.onTouchEnd, {
3325
+ passive: true
3326
+ });
3327
+ document[domMethod]('pointercancel', swiper.onTouchEnd, {
3328
+ passive: true
3329
+ });
3330
+ document[domMethod]('touchcancel', swiper.onTouchEnd, {
3331
+ passive: true
3332
+ });
3333
+ document[domMethod]('pointerout', swiper.onTouchEnd, {
3334
+ passive: true
3335
+ });
3336
+ document[domMethod]('pointerleave', swiper.onTouchEnd, {
3337
+ passive: true
3338
+ });
3339
+ document[domMethod]('contextmenu', swiper.onTouchEnd, {
3340
+ passive: true
3341
+ });
3342
+
3343
+ // Prevent Links Clicks
3344
+ if (params.preventClicks || params.preventClicksPropagation) {
3345
+ el[domMethod]('click', swiper.onClick, true);
3346
+ }
3347
+ if (params.cssMode) {
3348
+ wrapperEl[domMethod]('scroll', swiper.onScroll);
3349
+ }
3350
+
3351
+ // Resize handler
3352
+ if (params.updateOnWindowResize) {
3353
+ swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);
3354
+ } else {
3355
+ swiper[swiperMethod]('observerUpdate', onResize, true);
3356
+ }
3357
+
3358
+ // Images loader
3359
+ el[domMethod]('load', swiper.onLoad, {
3360
+ capture: true
3361
+ });
3362
+ };
3363
+ function attachEvents() {
3364
+ const swiper = this;
3365
+ const {
3366
+ params
3367
+ } = swiper;
3368
+ swiper.onTouchStart = onTouchStart.bind(swiper);
3369
+ swiper.onTouchMove = onTouchMove.bind(swiper);
3370
+ swiper.onTouchEnd = onTouchEnd.bind(swiper);
3371
+ swiper.onDocumentTouchStart = onDocumentTouchStart.bind(swiper);
3372
+ if (params.cssMode) {
3373
+ swiper.onScroll = onScroll.bind(swiper);
3374
+ }
3375
+ swiper.onClick = onClick.bind(swiper);
3376
+ swiper.onLoad = onLoad.bind(swiper);
3377
+ events(swiper, 'on');
3378
+ }
3379
+ function detachEvents() {
3380
+ const swiper = this;
3381
+ events(swiper, 'off');
3382
+ }
3383
+ var events$1 = {
3384
+ attachEvents,
3385
+ detachEvents
3386
+ };
3387
+
3388
+ const isGridEnabled = (swiper, params) => {
3389
+ return swiper.grid && params.grid && params.grid.rows > 1;
3390
+ };
3391
+ function setBreakpoint() {
3392
+ const swiper = this;
3393
+ const {
3394
+ realIndex,
3395
+ initialized,
3396
+ params,
3397
+ el
3398
+ } = swiper;
3399
+ const breakpoints = params.breakpoints;
3400
+ if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;
3401
+ const document = getDocument();
3402
+
3403
+ // Get breakpoint for window/container width and update parameters
3404
+ const breakpointsBase = params.breakpointsBase === 'window' || !params.breakpointsBase ? params.breakpointsBase : 'container';
3405
+ const breakpointContainer = ['window', 'container'].includes(params.breakpointsBase) || !params.breakpointsBase ? swiper.el : document.querySelector(params.breakpointsBase);
3406
+ const breakpoint = swiper.getBreakpoint(breakpoints, breakpointsBase, breakpointContainer);
3407
+ if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;
3408
+ const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;
3409
+ const breakpointParams = breakpointOnlyParams || swiper.originalParams;
3410
+ const wasMultiRow = isGridEnabled(swiper, params);
3411
+ const isMultiRow = isGridEnabled(swiper, breakpointParams);
3412
+ const wasGrabCursor = swiper.params.grabCursor;
3413
+ const isGrabCursor = breakpointParams.grabCursor;
3414
+ const wasEnabled = params.enabled;
3415
+ if (wasMultiRow && !isMultiRow) {
3416
+ el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);
3417
+ swiper.emitContainerClasses();
3418
+ } else if (!wasMultiRow && isMultiRow) {
3419
+ el.classList.add(`${params.containerModifierClass}grid`);
3420
+ if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {
3421
+ el.classList.add(`${params.containerModifierClass}grid-column`);
3422
+ }
3423
+ swiper.emitContainerClasses();
3424
+ }
3425
+ if (wasGrabCursor && !isGrabCursor) {
3426
+ swiper.unsetGrabCursor();
3427
+ } else if (!wasGrabCursor && isGrabCursor) {
3428
+ swiper.setGrabCursor();
3429
+ }
3430
+
3431
+ // Toggle navigation, pagination, scrollbar
3432
+ ['navigation', 'pagination', 'scrollbar'].forEach(prop => {
3433
+ if (typeof breakpointParams[prop] === 'undefined') return;
3434
+ const wasModuleEnabled = params[prop] && params[prop].enabled;
3435
+ const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;
3436
+ if (wasModuleEnabled && !isModuleEnabled) {
3437
+ swiper[prop].disable();
3438
+ }
3439
+ if (!wasModuleEnabled && isModuleEnabled) {
3440
+ swiper[prop].enable();
3441
+ }
3442
+ });
3443
+ const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
3444
+ const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);
3445
+ const wasLoop = params.loop;
3446
+ if (directionChanged && initialized) {
3447
+ swiper.changeDirection();
3448
+ }
3449
+ extend(swiper.params, breakpointParams);
3450
+ const isEnabled = swiper.params.enabled;
3451
+ const hasLoop = swiper.params.loop;
3452
+ Object.assign(swiper, {
3453
+ allowTouchMove: swiper.params.allowTouchMove,
3454
+ allowSlideNext: swiper.params.allowSlideNext,
3455
+ allowSlidePrev: swiper.params.allowSlidePrev
3456
+ });
3457
+ if (wasEnabled && !isEnabled) {
3458
+ swiper.disable();
3459
+ } else if (!wasEnabled && isEnabled) {
3460
+ swiper.enable();
3461
+ }
3462
+ swiper.currentBreakpoint = breakpoint;
3463
+ swiper.emit('_beforeBreakpoint', breakpointParams);
3464
+ if (initialized) {
3465
+ if (needsReLoop) {
3466
+ swiper.loopDestroy();
3467
+ swiper.loopCreate(realIndex);
3468
+ swiper.updateSlides();
3469
+ } else if (!wasLoop && hasLoop) {
3470
+ swiper.loopCreate(realIndex);
3471
+ swiper.updateSlides();
3472
+ } else if (wasLoop && !hasLoop) {
3473
+ swiper.loopDestroy();
3474
+ }
3475
+ }
3476
+ swiper.emit('breakpoint', breakpointParams);
3477
+ }
3478
+
3479
+ function getBreakpoint(breakpoints, base, containerEl) {
3480
+ if (base === void 0) {
3481
+ base = 'window';
3482
+ }
3483
+ if (!breakpoints || base === 'container' && !containerEl) return undefined;
3484
+ let breakpoint = false;
3485
+ const window = getWindow();
3486
+ const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;
3487
+ const points = Object.keys(breakpoints).map(point => {
3488
+ if (typeof point === 'string' && point.indexOf('@') === 0) {
3489
+ const minRatio = parseFloat(point.substr(1));
3490
+ const value = currentHeight * minRatio;
3491
+ return {
3492
+ value,
3493
+ point
3494
+ };
3495
+ }
3496
+ return {
3497
+ value: point,
3498
+ point
3499
+ };
3500
+ });
3501
+ points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));
3502
+ for (let i = 0; i < points.length; i += 1) {
3503
+ const {
3504
+ point,
3505
+ value
3506
+ } = points[i];
3507
+ if (base === 'window') {
3508
+ if (window.matchMedia(`(min-width: ${value}px)`).matches) {
3509
+ breakpoint = point;
3510
+ }
3511
+ } else if (value <= containerEl.clientWidth) {
3512
+ breakpoint = point;
3513
+ }
3514
+ }
3515
+ return breakpoint || 'max';
3516
+ }
3517
+
3518
+ var breakpoints = {
3519
+ setBreakpoint,
3520
+ getBreakpoint
3521
+ };
3522
+
3523
+ function prepareClasses(entries, prefix) {
3524
+ const resultClasses = [];
3525
+ entries.forEach(item => {
3526
+ if (typeof item === 'object') {
3527
+ Object.keys(item).forEach(classNames => {
3528
+ if (item[classNames]) {
3529
+ resultClasses.push(prefix + classNames);
3530
+ }
3531
+ });
3532
+ } else if (typeof item === 'string') {
3533
+ resultClasses.push(prefix + item);
3534
+ }
3535
+ });
3536
+ return resultClasses;
3537
+ }
3538
+ function addClasses() {
3539
+ const swiper = this;
3540
+ const {
3541
+ classNames,
3542
+ params,
3543
+ rtl,
3544
+ el,
3545
+ device
3546
+ } = swiper;
3547
+ // prettier-ignore
3548
+ const suffixes = prepareClasses(['initialized', params.direction, {
3549
+ 'free-mode': swiper.params.freeMode && params.freeMode.enabled
3550
+ }, {
3551
+ 'autoheight': params.autoHeight
3552
+ }, {
3553
+ 'rtl': rtl
3554
+ }, {
3555
+ 'grid': params.grid && params.grid.rows > 1
3556
+ }, {
3557
+ 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'
3558
+ }, {
3559
+ 'android': device.android
3560
+ }, {
3561
+ 'ios': device.ios
3562
+ }, {
3563
+ 'css-mode': params.cssMode
3564
+ }, {
3565
+ 'centered': params.cssMode && params.centeredSlides
3566
+ }, {
3567
+ 'watch-progress': params.watchSlidesProgress
3568
+ }], params.containerModifierClass);
3569
+ classNames.push(...suffixes);
3570
+ el.classList.add(...classNames);
3571
+ swiper.emitContainerClasses();
3572
+ }
3573
+
3574
+ function removeClasses() {
3575
+ const swiper = this;
3576
+ const {
3577
+ el,
3578
+ classNames
3579
+ } = swiper;
3580
+ if (!el || typeof el === 'string') return;
3581
+ el.classList.remove(...classNames);
3582
+ swiper.emitContainerClasses();
3583
+ }
3584
+
3585
+ var classes = {
3586
+ addClasses,
3587
+ removeClasses
3588
+ };
3589
+
3590
+ function checkOverflow() {
3591
+ const swiper = this;
3592
+ const {
3593
+ isLocked: wasLocked,
3594
+ params
3595
+ } = swiper;
3596
+ const {
3597
+ slidesOffsetBefore
3598
+ } = params;
3599
+ if (slidesOffsetBefore) {
3600
+ const lastSlideIndex = swiper.slides.length - 1;
3601
+ const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;
3602
+ swiper.isLocked = swiper.size > lastSlideRightEdge;
3603
+ } else {
3604
+ swiper.isLocked = swiper.snapGrid.length === 1;
3605
+ }
3606
+ if (params.allowSlideNext === true) {
3607
+ swiper.allowSlideNext = !swiper.isLocked;
3608
+ }
3609
+ if (params.allowSlidePrev === true) {
3610
+ swiper.allowSlidePrev = !swiper.isLocked;
3611
+ }
3612
+ if (wasLocked && wasLocked !== swiper.isLocked) {
3613
+ swiper.isEnd = false;
3614
+ }
3615
+ if (wasLocked !== swiper.isLocked) {
3616
+ swiper.emit(swiper.isLocked ? 'lock' : 'unlock');
3617
+ }
3618
+ }
3619
+ var checkOverflow$1 = {
3620
+ checkOverflow
3621
+ };
3622
+
3623
+ var defaults = {
3624
+ init: true,
3625
+ direction: 'horizontal',
3626
+ oneWayMovement: false,
3627
+ swiperElementNodeName: 'SWIPER-CONTAINER',
3628
+ touchEventsTarget: 'wrapper',
3629
+ initialSlide: 0,
3630
+ speed: 300,
3631
+ cssMode: false,
3632
+ updateOnWindowResize: true,
3633
+ resizeObserver: true,
3634
+ nested: false,
3635
+ createElements: false,
3636
+ eventsPrefix: 'swiper',
3637
+ enabled: true,
3638
+ focusableElements: 'input, select, option, textarea, button, video, label',
3639
+ // Overrides
3640
+ width: null,
3641
+ height: null,
3642
+ //
3643
+ preventInteractionOnTransition: false,
3644
+ // ssr
3645
+ userAgent: null,
3646
+ url: null,
3647
+ // To support iOS's swipe-to-go-back gesture (when being used in-app).
3648
+ edgeSwipeDetection: false,
3649
+ edgeSwipeThreshold: 20,
3650
+ // Autoheight
3651
+ autoHeight: false,
3652
+ // Set wrapper width
3653
+ setWrapperSize: false,
3654
+ // Virtual Translate
3655
+ virtualTranslate: false,
3656
+ // Effects
3657
+ effect: 'slide',
3658
+ // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'
3659
+
3660
+ // Breakpoints
3661
+ breakpoints: undefined,
3662
+ breakpointsBase: 'window',
3663
+ // Slides grid
3664
+ spaceBetween: 0,
3665
+ slidesPerView: 1,
3666
+ slidesPerGroup: 1,
3667
+ slidesPerGroupSkip: 0,
3668
+ slidesPerGroupAuto: false,
3669
+ centeredSlides: false,
3670
+ centeredSlidesBounds: false,
3671
+ slidesOffsetBefore: 0,
3672
+ // in px
3673
+ slidesOffsetAfter: 0,
3674
+ // in px
3675
+ normalizeSlideIndex: true,
3676
+ centerInsufficientSlides: false,
3677
+ // Disable swiper and hide navigation when container not overflow
3678
+ watchOverflow: true,
3679
+ // Round length
3680
+ roundLengths: false,
3681
+ // Touches
3682
+ touchRatio: 1,
3683
+ touchAngle: 45,
3684
+ simulateTouch: true,
3685
+ shortSwipes: true,
3686
+ longSwipes: true,
3687
+ longSwipesRatio: 0.5,
3688
+ longSwipesMs: 300,
3689
+ followFinger: true,
3690
+ allowTouchMove: true,
3691
+ threshold: 5,
3692
+ touchMoveStopPropagation: false,
3693
+ touchStartPreventDefault: true,
3694
+ touchStartForcePreventDefault: false,
3695
+ touchReleaseOnEdges: false,
3696
+ // Unique Navigation Elements
3697
+ uniqueNavElements: true,
3698
+ // Resistance
3699
+ resistance: true,
3700
+ resistanceRatio: 0.85,
3701
+ // Progress
3702
+ watchSlidesProgress: false,
3703
+ // Cursor
3704
+ grabCursor: false,
3705
+ // Clicks
3706
+ preventClicks: true,
3707
+ preventClicksPropagation: true,
3708
+ slideToClickedSlide: false,
3709
+ // loop
3710
+ loop: false,
3711
+ loopAddBlankSlides: true,
3712
+ loopAdditionalSlides: 0,
3713
+ loopPreventsSliding: true,
3714
+ // rewind
3715
+ rewind: false,
3716
+ // Swiping/no swiping
3717
+ allowSlidePrev: true,
3718
+ allowSlideNext: true,
3719
+ swipeHandler: null,
3720
+ // '.swipe-handler',
3721
+ noSwiping: true,
3722
+ noSwipingClass: 'swiper-no-swiping',
3723
+ noSwipingSelector: null,
3724
+ // Passive Listeners
3725
+ passiveListeners: true,
3726
+ maxBackfaceHiddenSlides: 10,
3727
+ // NS
3728
+ containerModifierClass: 'swiper-',
3729
+ // NEW
3730
+ slideClass: 'swiper-slide',
3731
+ slideBlankClass: 'swiper-slide-blank',
3732
+ slideActiveClass: 'swiper-slide-active',
3733
+ slideVisibleClass: 'swiper-slide-visible',
3734
+ slideFullyVisibleClass: 'swiper-slide-fully-visible',
3735
+ slideNextClass: 'swiper-slide-next',
3736
+ slidePrevClass: 'swiper-slide-prev',
3737
+ wrapperClass: 'swiper-wrapper',
3738
+ lazyPreloaderClass: 'swiper-lazy-preloader',
3739
+ lazyPreloadPrevNext: 0,
3740
+ // Callbacks
3741
+ runCallbacksOnInit: true,
3742
+ // Internals
3743
+ _emitClasses: false
3744
+ };
3745
+
3746
+ function moduleExtendParams(params, allModulesParams) {
3747
+ return function extendParams(obj) {
3748
+ if (obj === void 0) {
3749
+ obj = {};
3750
+ }
3751
+ const moduleParamName = Object.keys(obj)[0];
3752
+ const moduleParams = obj[moduleParamName];
3753
+ if (typeof moduleParams !== 'object' || moduleParams === null) {
3754
+ extend(allModulesParams, obj);
3755
+ return;
3756
+ }
3757
+ if (params[moduleParamName] === true) {
3758
+ params[moduleParamName] = {
3759
+ enabled: true
3760
+ };
3761
+ }
3762
+ if (moduleParamName === 'navigation' && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].prevEl && !params[moduleParamName].nextEl) {
3763
+ params[moduleParamName].auto = true;
3764
+ }
3765
+ if (['pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] && params[moduleParamName].enabled && !params[moduleParamName].el) {
3766
+ params[moduleParamName].auto = true;
3767
+ }
3768
+ if (!(moduleParamName in params && 'enabled' in moduleParams)) {
3769
+ extend(allModulesParams, obj);
3770
+ return;
3771
+ }
3772
+ if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {
3773
+ params[moduleParamName].enabled = true;
3774
+ }
3775
+ if (!params[moduleParamName]) params[moduleParamName] = {
3776
+ enabled: false
3777
+ };
3778
+ extend(allModulesParams, obj);
3779
+ };
3780
+ }
3781
+
3782
+ /* eslint no-param-reassign: "off" */
3783
+ const prototypes = {
3784
+ eventsEmitter,
3785
+ update,
3786
+ translate,
3787
+ transition,
3788
+ slide,
3789
+ loop,
3790
+ grabCursor,
3791
+ events: events$1,
3792
+ breakpoints,
3793
+ checkOverflow: checkOverflow$1,
3794
+ classes
3795
+ };
3796
+ const extendedDefaults = {};
3797
+ class Swiper {
3798
+ constructor() {
3799
+ let el;
3800
+ let params;
3801
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
3802
+ args[_key] = arguments[_key];
3803
+ }
3804
+ if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {
3805
+ params = args[0];
3806
+ } else {
3807
+ [el, params] = args;
3808
+ }
3809
+ if (!params) params = {};
3810
+ params = extend({}, params);
3811
+ if (el && !params.el) params.el = el;
3812
+ const document = getDocument();
3813
+ if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {
3814
+ const swipers = [];
3815
+ document.querySelectorAll(params.el).forEach(containerEl => {
3816
+ const newParams = extend({}, params, {
3817
+ el: containerEl
3818
+ });
3819
+ swipers.push(new Swiper(newParams));
3820
+ });
3821
+ // eslint-disable-next-line no-constructor-return
3822
+ return swipers;
3823
+ }
3824
+
3825
+ // Swiper Instance
3826
+ const swiper = this;
3827
+ swiper.__swiper__ = true;
3828
+ swiper.support = getSupport();
3829
+ swiper.device = getDevice({
3830
+ userAgent: params.userAgent
3831
+ });
3832
+ swiper.browser = getBrowser();
3833
+ swiper.eventsListeners = {};
3834
+ swiper.eventsAnyListeners = [];
3835
+ swiper.modules = [...swiper.__modules__];
3836
+ if (params.modules && Array.isArray(params.modules)) {
3837
+ swiper.modules.push(...params.modules);
3838
+ }
3839
+ const allModulesParams = {};
3840
+ swiper.modules.forEach(mod => {
3841
+ mod({
3842
+ params,
3843
+ swiper,
3844
+ extendParams: moduleExtendParams(params, allModulesParams),
3845
+ on: swiper.on.bind(swiper),
3846
+ once: swiper.once.bind(swiper),
3847
+ off: swiper.off.bind(swiper),
3848
+ emit: swiper.emit.bind(swiper)
3849
+ });
3850
+ });
3851
+
3852
+ // Extend defaults with modules params
3853
+ const swiperParams = extend({}, defaults, allModulesParams);
3854
+
3855
+ // Extend defaults with passed params
3856
+ swiper.params = extend({}, swiperParams, extendedDefaults, params);
3857
+ swiper.originalParams = extend({}, swiper.params);
3858
+ swiper.passedParams = extend({}, params);
3859
+
3860
+ // add event listeners
3861
+ if (swiper.params && swiper.params.on) {
3862
+ Object.keys(swiper.params.on).forEach(eventName => {
3863
+ swiper.on(eventName, swiper.params.on[eventName]);
3864
+ });
3865
+ }
3866
+ if (swiper.params && swiper.params.onAny) {
3867
+ swiper.onAny(swiper.params.onAny);
3868
+ }
3869
+
3870
+ // Extend Swiper
3871
+ Object.assign(swiper, {
3872
+ enabled: swiper.params.enabled,
3873
+ el,
3874
+ // Classes
3875
+ classNames: [],
3876
+ // Slides
3877
+ slides: [],
3878
+ slidesGrid: [],
3879
+ snapGrid: [],
3880
+ slidesSizesGrid: [],
3881
+ // isDirection
3882
+ isHorizontal() {
3883
+ return swiper.params.direction === 'horizontal';
3884
+ },
3885
+ isVertical() {
3886
+ return swiper.params.direction === 'vertical';
3887
+ },
3888
+ // Indexes
3889
+ activeIndex: 0,
3890
+ realIndex: 0,
3891
+ //
3892
+ isBeginning: true,
3893
+ isEnd: false,
3894
+ // Props
3895
+ translate: 0,
3896
+ previousTranslate: 0,
3897
+ progress: 0,
3898
+ velocity: 0,
3899
+ animating: false,
3900
+ cssOverflowAdjustment() {
3901
+ // Returns 0 unless `translate` is > 2**23
3902
+ // Should be subtracted from css values to prevent overflow
3903
+ return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;
3904
+ },
3905
+ // Locks
3906
+ allowSlideNext: swiper.params.allowSlideNext,
3907
+ allowSlidePrev: swiper.params.allowSlidePrev,
3908
+ // Touch Events
3909
+ touchEventsData: {
3910
+ isTouched: undefined,
3911
+ isMoved: undefined,
3912
+ allowTouchCallbacks: undefined,
3913
+ touchStartTime: undefined,
3914
+ isScrolling: undefined,
3915
+ currentTranslate: undefined,
3916
+ startTranslate: undefined,
3917
+ allowThresholdMove: undefined,
3918
+ // Form elements to match
3919
+ focusableElements: swiper.params.focusableElements,
3920
+ // Last click time
3921
+ lastClickTime: 0,
3922
+ clickTimeout: undefined,
3923
+ // Velocities
3924
+ velocities: [],
3925
+ allowMomentumBounce: undefined,
3926
+ startMoving: undefined,
3927
+ pointerId: null,
3928
+ touchId: null
3929
+ },
3930
+ // Clicks
3931
+ allowClick: true,
3932
+ // Touches
3933
+ allowTouchMove: swiper.params.allowTouchMove,
3934
+ touches: {
3935
+ startX: 0,
3936
+ startY: 0,
3937
+ currentX: 0,
3938
+ currentY: 0,
3939
+ diff: 0
3940
+ },
3941
+ // Images
3942
+ imagesToLoad: [],
3943
+ imagesLoaded: 0
3944
+ });
3945
+ swiper.emit('_swiper');
3946
+
3947
+ // Init
3948
+ if (swiper.params.init) {
3949
+ swiper.init();
3950
+ }
3951
+
3952
+ // Return app instance
3953
+ // eslint-disable-next-line no-constructor-return
3954
+ return swiper;
3955
+ }
3956
+ getDirectionLabel(property) {
3957
+ if (this.isHorizontal()) {
3958
+ return property;
3959
+ }
3960
+ // prettier-ignore
3961
+ return {
3962
+ 'width': 'height',
3963
+ 'margin-top': 'margin-left',
3964
+ 'margin-bottom ': 'margin-right',
3965
+ 'margin-left': 'margin-top',
3966
+ 'margin-right': 'margin-bottom',
3967
+ 'padding-left': 'padding-top',
3968
+ 'padding-right': 'padding-bottom',
3969
+ 'marginRight': 'marginBottom'
3970
+ }[property];
3971
+ }
3972
+ getSlideIndex(slideEl) {
3973
+ const {
3974
+ slidesEl,
3975
+ params
3976
+ } = this;
3977
+ const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);
3978
+ const firstSlideIndex = elementIndex(slides[0]);
3979
+ return elementIndex(slideEl) - firstSlideIndex;
3980
+ }
3981
+ getSlideIndexByData(index) {
3982
+ return this.getSlideIndex(this.slides.find(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index));
3983
+ }
3984
+ getSlideIndexWhenGrid(index) {
3985
+ if (this.grid && this.params.grid && this.params.grid.rows > 1) {
3986
+ if (this.params.grid.fill === 'column') {
3987
+ index = Math.floor(index / this.params.grid.rows);
3988
+ } else if (this.params.grid.fill === 'row') {
3989
+ index = index % Math.ceil(this.slides.length / this.params.grid.rows);
3990
+ }
3991
+ }
3992
+ return index;
3993
+ }
3994
+ recalcSlides() {
3995
+ const swiper = this;
3996
+ const {
3997
+ slidesEl,
3998
+ params
3999
+ } = swiper;
4000
+ swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);
4001
+ }
4002
+ enable() {
4003
+ const swiper = this;
4004
+ if (swiper.enabled) return;
4005
+ swiper.enabled = true;
4006
+ if (swiper.params.grabCursor) {
4007
+ swiper.setGrabCursor();
4008
+ }
4009
+ swiper.emit('enable');
4010
+ }
4011
+ disable() {
4012
+ const swiper = this;
4013
+ if (!swiper.enabled) return;
4014
+ swiper.enabled = false;
4015
+ if (swiper.params.grabCursor) {
4016
+ swiper.unsetGrabCursor();
4017
+ }
4018
+ swiper.emit('disable');
4019
+ }
4020
+ setProgress(progress, speed) {
4021
+ const swiper = this;
4022
+ progress = Math.min(Math.max(progress, 0), 1);
4023
+ const min = swiper.minTranslate();
4024
+ const max = swiper.maxTranslate();
4025
+ const current = (max - min) * progress + min;
4026
+ swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);
4027
+ swiper.updateActiveIndex();
4028
+ swiper.updateSlidesClasses();
4029
+ }
4030
+ emitContainerClasses() {
4031
+ const swiper = this;
4032
+ if (!swiper.params._emitClasses || !swiper.el) return;
4033
+ const cls = swiper.el.className.split(' ').filter(className => {
4034
+ return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;
4035
+ });
4036
+ swiper.emit('_containerClasses', cls.join(' '));
4037
+ }
4038
+ getSlideClasses(slideEl) {
4039
+ const swiper = this;
4040
+ if (swiper.destroyed) return '';
4041
+ return slideEl.className.split(' ').filter(className => {
4042
+ return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;
4043
+ }).join(' ');
4044
+ }
4045
+ emitSlidesClasses() {
4046
+ const swiper = this;
4047
+ if (!swiper.params._emitClasses || !swiper.el) return;
4048
+ const updates = [];
4049
+ swiper.slides.forEach(slideEl => {
4050
+ const classNames = swiper.getSlideClasses(slideEl);
4051
+ updates.push({
4052
+ slideEl,
4053
+ classNames
4054
+ });
4055
+ swiper.emit('_slideClass', slideEl, classNames);
4056
+ });
4057
+ swiper.emit('_slideClasses', updates);
4058
+ }
4059
+ slidesPerViewDynamic(view, exact) {
4060
+ if (view === void 0) {
4061
+ view = 'current';
4062
+ }
4063
+ if (exact === void 0) {
4064
+ exact = false;
4065
+ }
4066
+ const swiper = this;
4067
+ const {
4068
+ params,
4069
+ slides,
4070
+ slidesGrid,
4071
+ slidesSizesGrid,
4072
+ size: swiperSize,
4073
+ activeIndex
4074
+ } = swiper;
4075
+ let spv = 1;
4076
+ if (typeof params.slidesPerView === 'number') return params.slidesPerView;
4077
+ if (params.centeredSlides) {
4078
+ let slideSize = slides[activeIndex] ? Math.ceil(slides[activeIndex].swiperSlideSize) : 0;
4079
+ let breakLoop;
4080
+ for (let i = activeIndex + 1; i < slides.length; i += 1) {
4081
+ if (slides[i] && !breakLoop) {
4082
+ slideSize += Math.ceil(slides[i].swiperSlideSize);
4083
+ spv += 1;
4084
+ if (slideSize > swiperSize) breakLoop = true;
4085
+ }
4086
+ }
4087
+ for (let i = activeIndex - 1; i >= 0; i -= 1) {
4088
+ if (slides[i] && !breakLoop) {
4089
+ slideSize += slides[i].swiperSlideSize;
4090
+ spv += 1;
4091
+ if (slideSize > swiperSize) breakLoop = true;
4092
+ }
4093
+ }
4094
+ } else {
4095
+ // eslint-disable-next-line
4096
+ if (view === 'current') {
4097
+ for (let i = activeIndex + 1; i < slides.length; i += 1) {
4098
+ const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;
4099
+ if (slideInView) {
4100
+ spv += 1;
4101
+ }
4102
+ }
4103
+ } else {
4104
+ // previous
4105
+ for (let i = activeIndex - 1; i >= 0; i -= 1) {
4106
+ const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;
4107
+ if (slideInView) {
4108
+ spv += 1;
4109
+ }
4110
+ }
4111
+ }
4112
+ }
4113
+ return spv;
4114
+ }
4115
+ update() {
4116
+ const swiper = this;
4117
+ if (!swiper || swiper.destroyed) return;
4118
+ const {
4119
+ snapGrid,
4120
+ params
4121
+ } = swiper;
4122
+ // Breakpoints
4123
+ if (params.breakpoints) {
4124
+ swiper.setBreakpoint();
4125
+ }
4126
+ [...swiper.el.querySelectorAll('[loading="lazy"]')].forEach(imageEl => {
4127
+ if (imageEl.complete) {
4128
+ processLazyPreloader(swiper, imageEl);
4129
+ }
4130
+ });
4131
+ swiper.updateSize();
4132
+ swiper.updateSlides();
4133
+ swiper.updateProgress();
4134
+ swiper.updateSlidesClasses();
4135
+ function setTranslate() {
4136
+ const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
4137
+ const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
4138
+ swiper.setTranslate(newTranslate);
4139
+ swiper.updateActiveIndex();
4140
+ swiper.updateSlidesClasses();
4141
+ }
4142
+ let translated;
4143
+ if (params.freeMode && params.freeMode.enabled && !params.cssMode) {
4144
+ setTranslate();
4145
+ if (params.autoHeight) {
4146
+ swiper.updateAutoHeight();
4147
+ }
4148
+ } else {
4149
+ if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !params.centeredSlides) {
4150
+ const slides = swiper.virtual && params.virtual.enabled ? swiper.virtual.slides : swiper.slides;
4151
+ translated = swiper.slideTo(slides.length - 1, 0, false, true);
4152
+ } else {
4153
+ translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
4154
+ }
4155
+ if (!translated) {
4156
+ setTranslate();
4157
+ }
4158
+ }
4159
+ if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
4160
+ swiper.checkOverflow();
4161
+ }
4162
+ swiper.emit('update');
4163
+ }
4164
+ changeDirection(newDirection, needUpdate) {
4165
+ if (needUpdate === void 0) {
4166
+ needUpdate = true;
4167
+ }
4168
+ const swiper = this;
4169
+ const currentDirection = swiper.params.direction;
4170
+ if (!newDirection) {
4171
+ // eslint-disable-next-line
4172
+ newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
4173
+ }
4174
+ if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {
4175
+ return swiper;
4176
+ }
4177
+ swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);
4178
+ swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);
4179
+ swiper.emitContainerClasses();
4180
+ swiper.params.direction = newDirection;
4181
+ swiper.slides.forEach(slideEl => {
4182
+ if (newDirection === 'vertical') {
4183
+ slideEl.style.width = '';
4184
+ } else {
4185
+ slideEl.style.height = '';
4186
+ }
4187
+ });
4188
+ swiper.emit('changeDirection');
4189
+ if (needUpdate) swiper.update();
4190
+ return swiper;
4191
+ }
4192
+ changeLanguageDirection(direction) {
4193
+ const swiper = this;
4194
+ if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;
4195
+ swiper.rtl = direction === 'rtl';
4196
+ swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;
4197
+ if (swiper.rtl) {
4198
+ swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);
4199
+ swiper.el.dir = 'rtl';
4200
+ } else {
4201
+ swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);
4202
+ swiper.el.dir = 'ltr';
4203
+ }
4204
+ swiper.update();
4205
+ }
4206
+ mount(element) {
4207
+ const swiper = this;
4208
+ if (swiper.mounted) return true;
4209
+
4210
+ // Find el
4211
+ let el = element || swiper.params.el;
4212
+ if (typeof el === 'string') {
4213
+ el = document.querySelector(el);
4214
+ }
4215
+ if (!el) {
4216
+ return false;
4217
+ }
4218
+ el.swiper = swiper;
4219
+ if (el.parentNode && el.parentNode.host && el.parentNode.host.nodeName === swiper.params.swiperElementNodeName.toUpperCase()) {
4220
+ swiper.isElement = true;
4221
+ }
4222
+ const getWrapperSelector = () => {
4223
+ return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;
4224
+ };
4225
+ const getWrapper = () => {
4226
+ if (el && el.shadowRoot && el.shadowRoot.querySelector) {
4227
+ const res = el.shadowRoot.querySelector(getWrapperSelector());
4228
+ // Children needs to return slot items
4229
+ return res;
4230
+ }
4231
+ return elementChildren(el, getWrapperSelector())[0];
4232
+ };
4233
+ // Find Wrapper
4234
+ let wrapperEl = getWrapper();
4235
+ if (!wrapperEl && swiper.params.createElements) {
4236
+ wrapperEl = createElement('div', swiper.params.wrapperClass);
4237
+ el.append(wrapperEl);
4238
+ elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {
4239
+ wrapperEl.append(slideEl);
4240
+ });
4241
+ }
4242
+ Object.assign(swiper, {
4243
+ el,
4244
+ wrapperEl,
4245
+ slidesEl: swiper.isElement && !el.parentNode.host.slideSlots ? el.parentNode.host : wrapperEl,
4246
+ hostEl: swiper.isElement ? el.parentNode.host : el,
4247
+ mounted: true,
4248
+ // RTL
4249
+ rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',
4250
+ rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),
4251
+ wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'
4252
+ });
4253
+ return true;
4254
+ }
4255
+ init(el) {
4256
+ const swiper = this;
4257
+ if (swiper.initialized) return swiper;
4258
+ const mounted = swiper.mount(el);
4259
+ if (mounted === false) return swiper;
4260
+ swiper.emit('beforeInit');
4261
+
4262
+ // Set breakpoint
4263
+ if (swiper.params.breakpoints) {
4264
+ swiper.setBreakpoint();
4265
+ }
4266
+
4267
+ // Add Classes
4268
+ swiper.addClasses();
4269
+
4270
+ // Update size
4271
+ swiper.updateSize();
4272
+
4273
+ // Update slides
4274
+ swiper.updateSlides();
4275
+ if (swiper.params.watchOverflow) {
4276
+ swiper.checkOverflow();
4277
+ }
4278
+
4279
+ // Set Grab Cursor
4280
+ if (swiper.params.grabCursor && swiper.enabled) {
4281
+ swiper.setGrabCursor();
4282
+ }
4283
+
4284
+ // Slide To Initial Slide
4285
+ if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {
4286
+ swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);
4287
+ } else {
4288
+ swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);
4289
+ }
4290
+
4291
+ // Create loop
4292
+ if (swiper.params.loop) {
4293
+ swiper.loopCreate(undefined, true);
4294
+ }
4295
+
4296
+ // Attach events
4297
+ swiper.attachEvents();
4298
+ const lazyElements = [...swiper.el.querySelectorAll('[loading="lazy"]')];
4299
+ if (swiper.isElement) {
4300
+ lazyElements.push(...swiper.hostEl.querySelectorAll('[loading="lazy"]'));
4301
+ }
4302
+ lazyElements.forEach(imageEl => {
4303
+ if (imageEl.complete) {
4304
+ processLazyPreloader(swiper, imageEl);
4305
+ } else {
4306
+ imageEl.addEventListener('load', e => {
4307
+ processLazyPreloader(swiper, e.target);
4308
+ });
4309
+ }
4310
+ });
4311
+ preload(swiper);
4312
+
4313
+ // Init Flag
4314
+ swiper.initialized = true;
4315
+ preload(swiper);
4316
+
4317
+ // Emit
4318
+ swiper.emit('init');
4319
+ swiper.emit('afterInit');
4320
+ return swiper;
4321
+ }
4322
+ destroy(deleteInstance, cleanStyles) {
4323
+ if (deleteInstance === void 0) {
4324
+ deleteInstance = true;
4325
+ }
4326
+ if (cleanStyles === void 0) {
4327
+ cleanStyles = true;
4328
+ }
4329
+ const swiper = this;
4330
+ const {
4331
+ params,
4332
+ el,
4333
+ wrapperEl,
4334
+ slides
4335
+ } = swiper;
4336
+ if (typeof swiper.params === 'undefined' || swiper.destroyed) {
4337
+ return null;
4338
+ }
4339
+ swiper.emit('beforeDestroy');
4340
+
4341
+ // Init Flag
4342
+ swiper.initialized = false;
4343
+
4344
+ // Detach events
4345
+ swiper.detachEvents();
4346
+
4347
+ // Destroy loop
4348
+ if (params.loop) {
4349
+ swiper.loopDestroy();
4350
+ }
4351
+
4352
+ // Cleanup styles
4353
+ if (cleanStyles) {
4354
+ swiper.removeClasses();
4355
+ if (el && typeof el !== 'string') {
4356
+ el.removeAttribute('style');
4357
+ }
4358
+ if (wrapperEl) {
4359
+ wrapperEl.removeAttribute('style');
4360
+ }
4361
+ if (slides && slides.length) {
4362
+ slides.forEach(slideEl => {
4363
+ slideEl.classList.remove(params.slideVisibleClass, params.slideFullyVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);
4364
+ slideEl.removeAttribute('style');
4365
+ slideEl.removeAttribute('data-swiper-slide-index');
4366
+ });
4367
+ }
4368
+ }
4369
+ swiper.emit('destroy');
4370
+
4371
+ // Detach emitter events
4372
+ Object.keys(swiper.eventsListeners).forEach(eventName => {
4373
+ swiper.off(eventName);
4374
+ });
4375
+ if (deleteInstance !== false) {
4376
+ if (swiper.el && typeof swiper.el !== 'string') {
4377
+ swiper.el.swiper = null;
4378
+ }
4379
+ deleteProps(swiper);
4380
+ }
4381
+ swiper.destroyed = true;
4382
+ return null;
4383
+ }
4384
+ static extendDefaults(newDefaults) {
4385
+ extend(extendedDefaults, newDefaults);
4386
+ }
4387
+ static get extendedDefaults() {
4388
+ return extendedDefaults;
4389
+ }
4390
+ static get defaults() {
4391
+ return defaults;
4392
+ }
4393
+ static installModule(mod) {
4394
+ if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];
4395
+ const modules = Swiper.prototype.__modules__;
4396
+ if (typeof mod === 'function' && modules.indexOf(mod) < 0) {
4397
+ modules.push(mod);
4398
+ }
4399
+ }
4400
+ static use(module) {
4401
+ if (Array.isArray(module)) {
4402
+ module.forEach(m => Swiper.installModule(m));
4403
+ return Swiper;
4404
+ }
4405
+ Swiper.installModule(module);
4406
+ return Swiper;
4407
+ }
4408
+ }
4409
+ Object.keys(prototypes).forEach(prototypeGroup => {
4410
+ Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {
4411
+ Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
4412
+ });
4413
+ });
4414
+ Swiper.use([Resize, Observer]);
4415
+
4416
+ return Swiper;
4417
+
4418
+ })();